diff --git a/.dockerignore b/.dockerignore
new file mode 100644
index 0000000..3d9f77f
--- /dev/null
+++ b/.dockerignore
@@ -0,0 +1,33 @@
+# build output
+dist/
+
+# generated types
+.astro/
+
+# dependencies
+node_modules/
+
+# logs
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+pnpm-debug.log*
+
+# environment variables
+#.env
+#.env.production
+
+# macOS-specific files
+.DS_Store
+
+# jetbrains setting folder
+.idea/
+
+# VS Code setting folder
+.vscode/
+
+# git repository isn't needed inside the volume
+.git/
+
+# workaround: https://github.com/npm/cli/issues/4828
+#package-lock.json
diff --git a/.env.example b/.env.example
index b66d22b..52e2379 100644
--- a/.env.example
+++ b/.env.example
@@ -2,8 +2,17 @@ AMAZON_PA_ACCESS_KEY=AAAABBBBCCCCDDDDEEEE
AMAZON_PA_SECRET_KEY=ABCDABCDABCDABCDABCDABCDABCDABCDABCDAB
AMAZON_PA_HOST=webservices.amazon.com
AMAZON_PA_REGION=us-east-1
-AMAZON_PA_PARTNER_TYPE=Associate
+AMAZON_PA_PARTNER_TYPE=Associates
AMAZON_PA_PARTNER_TAG=yourpartnertag-20
GOOGLE_ADSENSE_ADS_TXT="google.com, pub-1234567890abcdef, DIRECT, fedcba9876543210"
GOOGLE_ANALYTICS_GTAG=G-1234567890
-SITE_URL=http://localhost
\ No newline at end of file
+SITE_URL=http://localhost
+PORT=4321
+WEBHOOK_PORT=3210
+STRAPI_URL="http://localhost:1337"
+STRAPI_API_TOKEN=...
+SQUIDEX_APP_NAME=
+SQUIDEX_CLIENT_ID=
+SQUIDEX_CLIENT_SECRET=
+SQUIDEX_ENVIRONMENT=http://
+SQUIDEX_PUBLIC_URL=https:///
\ No newline at end of file
diff --git a/.gitignore b/.gitignore
index 016b59e..1283530 100644
--- a/.gitignore
+++ b/.gitignore
@@ -22,3 +22,6 @@ pnpm-debug.log*
# jetbrains setting folder
.idea/
+
+# VS Code setting folder
+.vscode/
diff --git a/.yarnrc.yml b/.yarnrc.yml
new file mode 100644
index 0000000..7f3d03f
--- /dev/null
+++ b/.yarnrc.yml
@@ -0,0 +1 @@
+nodeLinker: "node-modules"
diff --git a/Dockerfile b/Dockerfile
new file mode 100644
index 0000000..781d827
--- /dev/null
+++ b/Dockerfile
@@ -0,0 +1,45 @@
+FROM node:lts AS core
+WORKDIR /opt/app
+
+FROM core AS base
+#COPY package.json package-lock.json ./
+#workaround: https://github.com/npm/cli/issues/4828
+RUN apt update && apt upgrade -y
+RUN npm install -g npm@latest
+RUN npm install -g pnpm
+COPY package.json package-lock.json .yarnrc.yml ./
+
+#FROM base AS prod-deps
+#RUN pnpm install --fix-lockfile
+#RUN pnpm install --lockfile-only
+#RUN pnpm install --prod
+#RUN npm install --omit=dev
+
+FROM base AS build-deps
+RUN pnpm install --fix-lockfile
+RUN pnpm install --lockfile-only
+RUN pnpm install
+#RUN npm install
+
+FROM build-deps AS copy
+COPY . .
+
+FROM copy AS build
+RUN pnpm run astro build
+# RUN npm run build
+#RUN npm run-script astro build
+
+FROM base AS runtime
+#COPY --from=prod-deps /opt/app/node_modules ./node_modules
+COPY --from=build-deps /opt/app/node_modules ./node_modules
+COPY --from=copy /opt/app .
+COPY --from=build /opt/app/dist ./dist
+
+ENV HOST=0.0.0.0
+ENV PORT=4321
+ENV WEBHOOK_PORT=3210
+
+EXPOSE 4321 3210
+
+CMD pnpm run server
+#CMD bash
diff --git a/astro.config.mjs b/astro.config.mjs
index 124cd35..192d181 100644
--- a/astro.config.mjs
+++ b/astro.config.mjs
@@ -1,35 +1,65 @@
import { defineConfig } from 'astro/config';
-import sitemap from '@astrojs/sitemap';
import { loadEnv } from "vite";
-import { ALL_PRODUCTS } from './src/data/products';
+import node from '@astrojs/node';
+import sitemap from '@astrojs/sitemap';
import react from "@astrojs/react";
+import commonjs from 'vite-plugin-commonjs'
+
const {
SITE_URL
} = loadEnv(process.env.NODE_ENV, process.cwd(), "");
-function generateRedirectsForAmazonProductIds() {
- let redirects = {};
- for (let p = 0; p < ALL_PRODUCTS.length; p++) {
- let product = ALL_PRODUCTS[p];
- if (product.amazonProductId && product.slug !== product.amazonProductId) {
- redirects[`/${product.amazonProductId}`] = `/${product.slug}`;
- }
- }
- return redirects;
-}
+
+// this was used for static generation, but now we're using SSR
+// import { ALL_PRODUCTS } from './src/data/products';
+// function generateRedirectsForAmazonProductIds() {
+// let redirects = {};
+// for (let p = 0; p < ALL_PRODUCTS.length; p++) {
+// let product = ALL_PRODUCTS[p];
+// if (product.ASIN && product.slug !== product.ASIN) {
+// redirects[`/${product.ASIN}`] = `/${product.slug}`;
+// }
+// }
+// return redirects;
+// }
// https://astro.build/config
export default defineConfig({
site: SITE_URL || 'http://localhost',
integrations: [sitemap(), react()],
- redirects: generateRedirectsForAmazonProductIds()
- // vite: {
+ // redirects: generateRedirectsForAmazonProductIds(),
+ output: 'server',
+ server: {
+ host: '0.0.0.0',
+ },
+ // i18n: {
+ // defaultLocale: 'en',
+ // locales: ['en', 'es', 'fr'],
+ // },
+ adapter: node({
+ mode: 'middleware',
+ }),
+ build: {
+ commonjsOptions: {
+ transformMixedEsModules: true,
+ },
+ rollupOptions: {
+ external: ['@squidex/squidex', '../squidex-node-sdk'],
+ }
+ },
+ vite: {
+ plugins: [
+ commonjs(/**/)
+ ],
+ optimizeDeps: {
+ exclude: ['@squidex/squidex', '../squidex-node-sdk'],
+ }
// resolve: {
// alias: [
// { find: /^swiper\/(.+)/, replacement: 'swiper/$1 '},
// ],
// },
- // },
+ },
// experimental: {
// resolveId: (id) => {
// if (id === 'swiper') {
diff --git a/docker-compose.yml b/docker-compose.yml
new file mode 100644
index 0000000..3055817
--- /dev/null
+++ b/docker-compose.yml
@@ -0,0 +1,32 @@
+version: "3"
+services:
+ dashersupply-app:
+ container_name: dashersupply-app
+ build: .
+ image: runtime:latest
+ restart: unless-stopped
+ env_file: .env
+ environment:
+ SITE_URL: ${SITE_URL}
+ PORT: ${PORT}
+ WEBHOOK_PORT: ${WEBHOOK_PORT}
+ STRAPI_URL: ${STRAPI_URL}
+ STRAPI_API_TOKEN: ${STRAPI_API_TOKEN}
+ NODE_ENV: ${NODE_ENV}
+ #volumes:
+ # - dashersupply-app:/opt/app
+ ports:
+ - "4321:4321"
+ - "3210:3210"
+ networks:
+ - dashersupply
+ # depends_on:
+ # - dashersupply-strapi
+
+volumes:
+ dashersupply-app:
+
+networks:
+ dashersupply:
+ name: Dasher Supply
+ driver: bridge
diff --git a/package-lock.json b/package-lock.json
index a60cf85..2b97e93 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,46 +1,65 @@
{
"name": "dashersupply",
- "version": "0.0.1",
+ "version": "0.2.1",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "dashersupply",
- "version": "0.0.1",
+ "version": "0.2.1",
"dependencies": {
- "@astrojs/check": "^0.8.1",
- "@astrojs/react": "^3.6.0",
+ "@astrojs/check": "^0.9.3",
+ "@astrojs/node": "^8.3.3",
+ "@astrojs/react": "^3.6.2",
"@astrojs/sitemap": "^3.1.6",
+ "@fastify/middie": "^8.3.1",
+ "@fastify/static": "^7.0.4",
+ "@squidex/squidex": "^1.2.1",
+ "@strapi/blocks-react-renderer": "^1.0.1",
"@types/react": "^18.3.3",
"@types/react-dom": "^18.3.0",
- "amazon-pa-api5-node-ts": "^2.1.4",
- "astro": "^4.11.5",
+ "amazon-pa-api5-node-ts": "^2.3.0",
+ "astro": "^4.14.2",
+ "axios": "^1.7.4",
"bootstrap": "^5.3.3",
"cheerio": "*",
+ "commander": "^12.1.0",
"crawlee": "^3.0.0",
"dotenv": "^16.4.5",
"dotenv-expand": "^11.0.6",
+ "fastify": "^4.28.1",
+ "luxon": "^3.5.0",
"markdown-it": "^14.0.0",
"markdown-it-attrs": "^4.1.6",
+ "memfs": "^4.11.1",
+ "multer": "^1.4.5-lts.1",
+ "ollama": "^0.5.8",
"playwright": "*",
"react": "^18.3.1",
"react-dom": "^18.3.1",
+ "slugify": "^1.6.6",
"swiper": "^11.1.4",
+ "vite": "^5.3.5",
+ "vite-plugin-commonjs": "^0.10.1",
"vitest": "^2.0.3"
},
"devDependencies": {
"@apify/tsconfig": "^0.1.0",
"@types/jquery": "^3.5.30",
+ "@types/luxon": "^3.4.2",
"@types/markdown-it": "^14.1.1",
"@types/markdown-it-attrs": "^4.1.3",
+ "@types/multer": "^1.4.11",
"@types/node": "^20.0.0",
+ "ts-node": "^10.9.2",
"tsx": "^4.4.0",
"typescript": "^5.5.3"
}
},
"node_modules/@ampproject/remapping": {
"version": "2.3.0",
- "license": "Apache-2.0",
+ "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz",
+ "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==",
"dependencies": {
"@jridgewell/gen-mapping": "^0.3.5",
"@jridgewell/trace-mapping": "^0.3.24"
@@ -50,24 +69,21 @@
}
},
"node_modules/@apify/consts": {
- "version": "2.28.0",
- "resolved": "https://registry.npmjs.org/@apify/consts/-/consts-2.28.0.tgz",
- "integrity": "sha512-WmBCWRqqCQGqk8H5j8o1uvU8T7sBXUL9s0Y4PMfN7YkkFGYSXtipVcT/Rx0CXHG7eGshsazh+A1nlBi3mtOAgg==",
- "license": "Apache-2.0"
+ "version": "2.29.0",
+ "resolved": "https://registry.npmjs.org/@apify/consts/-/consts-2.29.0.tgz",
+ "integrity": "sha512-+P9voQVy9j2mq0PDGgj+Ftdd2ZTimwYdaxzdu1aHw5iQXTHHJVH9x4rjMNTdmGhZP/znExmvU1tRFEyy29Vjmg=="
},
"node_modules/@apify/datastructures": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/@apify/datastructures/-/datastructures-2.0.2.tgz",
- "integrity": "sha512-IN9A0s2SCHoZZE1tf4xKgk4fxHM5/0I/UrXhWbn/rSv7E5sA2o0NyHdwcMY2Go9f5qd+E7VAbX6WnESTE6GLeA==",
- "license": "Apache-2.0"
+ "integrity": "sha512-IN9A0s2SCHoZZE1tf4xKgk4fxHM5/0I/UrXhWbn/rSv7E5sA2o0NyHdwcMY2Go9f5qd+E7VAbX6WnESTE6GLeA=="
},
"node_modules/@apify/log": {
- "version": "2.5.2",
- "resolved": "https://registry.npmjs.org/@apify/log/-/log-2.5.2.tgz",
- "integrity": "sha512-gq7n0vNGYuvCUd5chHub/yE+pnUBrmz1IkxzXW4fz/PS31Xh+YH3o2t+2KM3SHhbOINCAQQKbr4RBtrlJ/USPg==",
- "license": "Apache-2.0",
+ "version": "2.5.5",
+ "resolved": "https://registry.npmjs.org/@apify/log/-/log-2.5.5.tgz",
+ "integrity": "sha512-eO7xNH89urnenB+BDdtm565qAbSt741NNVKWaoJniEziDa1oRBfPieaikVSizyfrgjhiH+3W/tnWTU9VJWi2rw==",
"dependencies": {
- "@apify/consts": "^2.28.0",
+ "@apify/consts": "^2.29.0",
"ansi-colors": "^4.1.1"
}
},
@@ -75,7 +91,6 @@
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/@apify/ps-tree/-/ps-tree-1.2.0.tgz",
"integrity": "sha512-VHIswI7rD/R4bToeIDuJ9WJXt+qr5SdhfoZ9RzdjmCs9mgy7l0P4RugQEUCcU+WB4sfImbd4CKwzXcn0uYx1yw==",
- "license": "MIT",
"dependencies": {
"event-stream": "3.3.4"
},
@@ -87,45 +102,39 @@
}
},
"node_modules/@apify/pseudo_url": {
- "version": "2.0.42",
- "resolved": "https://registry.npmjs.org/@apify/pseudo_url/-/pseudo_url-2.0.42.tgz",
- "integrity": "sha512-J0Zrl6u0ZAwredFLGdBp/m0D6Pl8zo1vCxdIYtI2Hk8j5yl7vwwqsrRUiFqqwR10wCuFXjQr1rjulk+nkx5RUA==",
- "license": "Apache-2.0",
+ "version": "2.0.46",
+ "resolved": "https://registry.npmjs.org/@apify/pseudo_url/-/pseudo_url-2.0.46.tgz",
+ "integrity": "sha512-dWjSN94lVbxrBbwChF7k4KT8xAMe/fUxFFekzxtUDZVKX0YE+4vqTTV5Ow9rcOcysRsD9idiHRdYOoaFcNhhzw==",
"dependencies": {
- "@apify/log": "^2.5.2",
- "@sapphire/shapeshift": "^3.6.0"
+ "@apify/log": "^2.5.5"
}
},
"node_modules/@apify/timeout": {
"version": "0.3.1",
"resolved": "https://registry.npmjs.org/@apify/timeout/-/timeout-0.3.1.tgz",
- "integrity": "sha512-sLIuOqfySki/7AXiQ1yZoCI07vX6aYFLgP6YaJ8e8YLn8CFsRERma/Crxcz0zyCaxhc7C7EPgcs1O+p/djZchw==",
- "license": "Apache-2.0"
+ "integrity": "sha512-sLIuOqfySki/7AXiQ1yZoCI07vX6aYFLgP6YaJ8e8YLn8CFsRERma/Crxcz0zyCaxhc7C7EPgcs1O+p/djZchw=="
},
"node_modules/@apify/tsconfig": {
"version": "0.1.0",
"resolved": "https://registry.npmjs.org/@apify/tsconfig/-/tsconfig-0.1.0.tgz",
"integrity": "sha512-ba9Y6AMocRucO3AVTb6GM2V+oy1wByNlCDzamK+IC+aqU3pCgJwSN87uNu6iEgu+uetsqYvVbXJYakwiQO1LGA==",
- "dev": true,
- "license": "Apache-2.0"
+ "dev": true
},
"node_modules/@apify/utilities": {
- "version": "2.10.3",
- "resolved": "https://registry.npmjs.org/@apify/utilities/-/utilities-2.10.3.tgz",
- "integrity": "sha512-Y2T752McA+ToKBVUpCTaskdKd3kRypTdAYh6HzZ4i2xv7HGTOv34WrMb4HQ6U92gEJaMbrz/chNmHKO2X2SwXg==",
- "license": "Apache-2.0",
+ "version": "2.10.6",
+ "resolved": "https://registry.npmjs.org/@apify/utilities/-/utilities-2.10.6.tgz",
+ "integrity": "sha512-nDaH6+R0AobyjVQWIdQpQULlp7zJB//xebI7VWzTygu2ZYfNS/8yP6hBUDtT6wwNwzgo+bXXZywdUIGgBO6cyQ==",
"dependencies": {
- "@apify/consts": "^2.28.0",
- "@apify/log": "^2.5.2"
+ "@apify/consts": "^2.29.0",
+ "@apify/log": "^2.5.5"
}
},
"node_modules/@astrojs/check": {
- "version": "0.8.1",
- "resolved": "https://registry.npmjs.org/@astrojs/check/-/check-0.8.1.tgz",
- "integrity": "sha512-QTzCuiBWll3SLSe7OsWtWyZRbwChXwxM4Y0Jb84jdPOdYobzHad9ubU7V23qmK3Y0BNwgzCbEP5C5FPVitb31Q==",
- "license": "MIT",
+ "version": "0.9.3",
+ "resolved": "https://registry.npmjs.org/@astrojs/check/-/check-0.9.3.tgz",
+ "integrity": "sha512-I6Dz45bMI5YRbp4yK2LKWsHH3/kkHRGdPGruGkLap6pqxhdcNh7oCgN04Ac+haDfc9ow5BYPGPmEhkwef15GQQ==",
"dependencies": {
- "@astrojs/language-server": "^2.11.1",
+ "@astrojs/language-server": "^2.14.1",
"chokidar": "^3.5.3",
"fast-glob": "^3.3.1",
"kleur": "^4.1.5",
@@ -139,38 +148,37 @@
}
},
"node_modules/@astrojs/compiler": {
- "version": "2.8.2",
- "resolved": "https://registry.npmjs.org/@astrojs/compiler/-/compiler-2.8.2.tgz",
- "integrity": "sha512-2v2N2oDnMH6+CX1Wn6f45Afa4tdkUMutdx8pJaokfaOYnAU+u6+UK7o7sXqydKro1cLwVmmOIJv6AqiXnAdLDA==",
- "license": "MIT"
+ "version": "2.10.3",
+ "resolved": "https://registry.npmjs.org/@astrojs/compiler/-/compiler-2.10.3.tgz",
+ "integrity": "sha512-bL/O7YBxsFt55YHU021oL+xz+B/9HvGNId3F9xURN16aeqDK9juHGktdkCSXz+U4nqFACq6ZFvWomOzhV+zfPw=="
},
"node_modules/@astrojs/internal-helpers": {
"version": "0.4.1",
"resolved": "https://registry.npmjs.org/@astrojs/internal-helpers/-/internal-helpers-0.4.1.tgz",
- "integrity": "sha512-bMf9jFihO8YP940uD70SI/RDzIhUHJAolWVcO1v5PUivxGKvfLZTLTVVxEYzGYyPsA3ivdLNqMnL5VgmQySa+g==",
- "license": "MIT"
+ "integrity": "sha512-bMf9jFihO8YP940uD70SI/RDzIhUHJAolWVcO1v5PUivxGKvfLZTLTVVxEYzGYyPsA3ivdLNqMnL5VgmQySa+g=="
},
"node_modules/@astrojs/language-server": {
- "version": "2.11.1",
- "resolved": "https://registry.npmjs.org/@astrojs/language-server/-/language-server-2.11.1.tgz",
- "integrity": "sha512-WSIBBUK9lSeVD4KhPiZk2u3wsXdj7WEYvYPPs8ZsgbSVIOzUJWAKVcITHiXmcXlzZB5ubK44YUN/Hq+f2GeMyQ==",
- "license": "MIT",
+ "version": "2.14.1",
+ "resolved": "https://registry.npmjs.org/@astrojs/language-server/-/language-server-2.14.1.tgz",
+ "integrity": "sha512-mkKtCTPRD4dyKdAqIP0zmmPyO/ZABOqFESnaVca47Dg/sAagJnDSEsDUDzNbHFh1+9Dj1o5y4iwNsxJboGdaNg==",
"dependencies": {
- "@astrojs/compiler": "^2.7.0",
+ "@astrojs/compiler": "^2.10.3",
+ "@astrojs/yaml2ts": "^0.2.1",
"@jridgewell/sourcemap-codec": "^1.4.15",
- "@volar/kit": "~2.4.0-alpha.15",
- "@volar/language-core": "~2.4.0-alpha.15",
- "@volar/language-server": "~2.4.0-alpha.15",
- "@volar/language-service": "~2.4.0-alpha.15",
- "@volar/typescript": "~2.4.0-alpha.15",
+ "@volar/kit": "~2.4.0",
+ "@volar/language-core": "~2.4.0",
+ "@volar/language-server": "~2.4.0",
+ "@volar/language-service": "~2.4.0",
+ "@volar/typescript": "~2.4.0",
"fast-glob": "^3.2.12",
"muggle-string": "^0.4.1",
- "volar-service-css": "0.0.59",
- "volar-service-emmet": "0.0.59",
- "volar-service-html": "0.0.59",
- "volar-service-prettier": "0.0.59",
- "volar-service-typescript": "0.0.59",
- "volar-service-typescript-twoslash-queries": "0.0.59",
+ "volar-service-css": "0.0.61",
+ "volar-service-emmet": "0.0.61",
+ "volar-service-html": "0.0.61",
+ "volar-service-prettier": "0.0.61",
+ "volar-service-typescript": "0.0.61",
+ "volar-service-typescript-twoslash-queries": "0.0.61",
+ "volar-service-yaml": "0.0.61",
"vscode-html-languageservice": "^5.2.0",
"vscode-uri": "^3.0.8"
},
@@ -191,10 +199,9 @@
}
},
"node_modules/@astrojs/markdown-remark": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/@astrojs/markdown-remark/-/markdown-remark-5.1.1.tgz",
- "integrity": "sha512-rkWWjR9jVo0LAMxQ2+T19RKbQUa7NwBGhFj03bAz3hGf3blqeBIXs1NSPpizshO5kZzcOqKe8OlG6XpYO8esHg==",
- "license": "MIT",
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/@astrojs/markdown-remark/-/markdown-remark-5.2.0.tgz",
+ "integrity": "sha512-vWGM24KZXz11jR3JO+oqYU3T2qpuOi4uGivJ9SQLCAI01+vEkHC60YJMRvHPc+hwd60F7euNs1PeOEixIIiNQw==",
"dependencies": {
"@astrojs/prism": "3.1.0",
"github-slugger": "^2.0.0",
@@ -207,20 +214,31 @@
"remark-gfm": "^4.0.0",
"remark-parse": "^11.0.0",
"remark-rehype": "^11.1.0",
- "remark-smartypants": "^3.0.1",
- "shiki": "^1.9.0",
+ "remark-smartypants": "^3.0.2",
+ "shiki": "^1.10.3",
"unified": "^11.0.5",
"unist-util-remove-position": "^5.0.0",
"unist-util-visit": "^5.0.0",
"unist-util-visit-parents": "^6.0.1",
- "vfile": "^6.0.1"
+ "vfile": "^6.0.2"
+ }
+ },
+ "node_modules/@astrojs/node": {
+ "version": "8.3.3",
+ "resolved": "https://registry.npmjs.org/@astrojs/node/-/node-8.3.3.tgz",
+ "integrity": "sha512-idrKhnnPSi0ABV+PCQsRQqVNwpOvVDF/+fkwcIiE8sr9J8EMvW9g/oyAt8T4X2OBJ8FUzYPL8klfCdG7r0eB5g==",
+ "dependencies": {
+ "send": "^0.18.0",
+ "server-destroy": "^1.0.1"
+ },
+ "peerDependencies": {
+ "astro": "^4.2.0"
}
},
"node_modules/@astrojs/prism": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/@astrojs/prism/-/prism-3.1.0.tgz",
"integrity": "sha512-Z9IYjuXSArkAUx3N6xj6+Bnvx8OdUSHA8YoOgyepp3+zJmtVYJIl/I18GozdJVW1p5u/CNpl3Km7/gwTJK85cw==",
- "license": "MIT",
"dependencies": {
"prismjs": "^1.29.0"
},
@@ -229,9 +247,9 @@
}
},
"node_modules/@astrojs/react": {
- "version": "3.6.0",
- "resolved": "https://registry.npmjs.org/@astrojs/react/-/react-3.6.0.tgz",
- "integrity": "sha512-YGLxy5jCU9xKG/HAvYsWMcvrQVIhqVe0Sda3Z5UtP32rfXeG6B9J1xQvnx+kRSFTpIrj+7AwPSDSehLbCHJ56w==",
+ "version": "3.6.2",
+ "resolved": "https://registry.npmjs.org/@astrojs/react/-/react-3.6.2.tgz",
+ "integrity": "sha512-fK29lYI7zK/KG4ZBy956x4dmauZcZ18osFkuyGa8r3gmmCQa2NZ9XNu9WaVYEUm0j89f4Gii4tbxLoyM8nk2MA==",
"dependencies": {
"@vitejs/plugin-react": "^4.3.1",
"ultrahtml": "^1.5.3"
@@ -250,7 +268,6 @@
"version": "3.1.6",
"resolved": "https://registry.npmjs.org/@astrojs/sitemap/-/sitemap-3.1.6.tgz",
"integrity": "sha512-1Qp2NvAzVImqA6y+LubKi1DVhve/hXXgFvB0szxiipzh7BvtuKe4oJJ9dXSqaubaTkt4nMa6dv6RCCAYeB6xaQ==",
- "license": "MIT",
"dependencies": {
"sitemap": "^7.1.2",
"stream-replace-string": "^2.0.0",
@@ -259,7 +276,8 @@
},
"node_modules/@astrojs/telemetry": {
"version": "3.1.0",
- "license": "MIT",
+ "resolved": "https://registry.npmjs.org/@astrojs/telemetry/-/telemetry-3.1.0.tgz",
+ "integrity": "sha512-/ca/+D8MIKEC8/A9cSaPUqQNZm+Es/ZinRv0ZAzvu2ios7POQSsVD+VOj7/hypWNsNM3T7RpfgNq7H2TU1KEHA==",
"dependencies": {
"ci-info": "^4.0.0",
"debug": "^4.3.4",
@@ -273,9 +291,18 @@
"node": "^18.17.1 || ^20.3.0 || >=21.0.0"
}
},
+ "node_modules/@astrojs/yaml2ts": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/@astrojs/yaml2ts/-/yaml2ts-0.2.1.tgz",
+ "integrity": "sha512-CBaNwDQJz20E5WxzQh4thLVfhB3JEEGz72wRA+oJp6fQR37QLAqXZJU0mHC+yqMOQ6oj0GfRPJrz6hjf+zm6zA==",
+ "dependencies": {
+ "yaml": "^2.5.0"
+ }
+ },
"node_modules/@babel/code-frame": {
"version": "7.24.7",
- "license": "MIT",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz",
+ "integrity": "sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==",
"dependencies": {
"@babel/highlight": "^7.24.7",
"picocolors": "^1.0.0"
@@ -285,26 +312,28 @@
}
},
"node_modules/@babel/compat-data": {
- "version": "7.24.7",
- "license": "MIT",
+ "version": "7.25.2",
+ "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.25.2.tgz",
+ "integrity": "sha512-bYcppcpKBvX4znYaPEeFau03bp89ShqNMLs+rmdptMw+heSZh9+z84d2YG+K7cYLbWwzdjtDoW/uqZmPjulClQ==",
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/core": {
- "version": "7.24.7",
- "license": "MIT",
+ "version": "7.25.2",
+ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.25.2.tgz",
+ "integrity": "sha512-BBt3opiCOxUr9euZ5/ro/Xv8/V7yJ5bjYMqG/C1YAo8MIKAnumZalCN+msbci3Pigy4lIQfPUpfMM27HMGaYEA==",
"dependencies": {
"@ampproject/remapping": "^2.2.0",
"@babel/code-frame": "^7.24.7",
- "@babel/generator": "^7.24.7",
- "@babel/helper-compilation-targets": "^7.24.7",
- "@babel/helper-module-transforms": "^7.24.7",
- "@babel/helpers": "^7.24.7",
- "@babel/parser": "^7.24.7",
- "@babel/template": "^7.24.7",
- "@babel/traverse": "^7.24.7",
- "@babel/types": "^7.24.7",
+ "@babel/generator": "^7.25.0",
+ "@babel/helper-compilation-targets": "^7.25.2",
+ "@babel/helper-module-transforms": "^7.25.2",
+ "@babel/helpers": "^7.25.0",
+ "@babel/parser": "^7.25.0",
+ "@babel/template": "^7.25.0",
+ "@babel/traverse": "^7.25.2",
+ "@babel/types": "^7.25.2",
"convert-source-map": "^2.0.0",
"debug": "^4.1.0",
"gensync": "^1.0.0-beta.2",
@@ -319,18 +348,12 @@
"url": "https://opencollective.com/babel"
}
},
- "node_modules/@babel/core/node_modules/semver": {
- "version": "6.3.1",
- "license": "ISC",
- "bin": {
- "semver": "bin/semver.js"
- }
- },
"node_modules/@babel/generator": {
- "version": "7.24.7",
- "license": "MIT",
+ "version": "7.25.0",
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.0.tgz",
+ "integrity": "sha512-3LEEcj3PVW8pW2R1SR1M89g/qrYk/m/mB/tLqn7dn4sbBUQyTqnlod+II2U4dqiGtUmkcnAmkMDralTFZttRiw==",
"dependencies": {
- "@babel/types": "^7.24.7",
+ "@babel/types": "^7.25.0",
"@jridgewell/gen-mapping": "^0.3.5",
"@jridgewell/trace-mapping": "^0.3.25",
"jsesc": "^2.5.1"
@@ -341,7 +364,8 @@
},
"node_modules/@babel/helper-annotate-as-pure": {
"version": "7.24.7",
- "license": "MIT",
+ "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.24.7.tgz",
+ "integrity": "sha512-BaDeOonYvhdKw+JoMVkAixAAJzG2jVPIwWoKBPdYuY9b452e2rPuI9QPYh3KpofZ3pW2akOmwZLOiOsHMiqRAg==",
"dependencies": {
"@babel/types": "^7.24.7"
},
@@ -350,12 +374,13 @@
}
},
"node_modules/@babel/helper-compilation-targets": {
- "version": "7.24.7",
- "license": "MIT",
+ "version": "7.25.2",
+ "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.2.tgz",
+ "integrity": "sha512-U2U5LsSaZ7TAt3cfaymQ8WHh0pxvdHoEk6HVpaexxixjyEquMh0L0YNJNM6CTGKMXV1iksi0iZkGw4AcFkPaaw==",
"dependencies": {
- "@babel/compat-data": "^7.24.7",
- "@babel/helper-validator-option": "^7.24.7",
- "browserslist": "^4.22.2",
+ "@babel/compat-data": "^7.25.2",
+ "@babel/helper-validator-option": "^7.24.8",
+ "browserslist": "^4.23.1",
"lru-cache": "^5.1.1",
"semver": "^6.3.1"
},
@@ -363,47 +388,10 @@
"node": ">=6.9.0"
}
},
- "node_modules/@babel/helper-compilation-targets/node_modules/semver": {
- "version": "6.3.1",
- "license": "ISC",
- "bin": {
- "semver": "bin/semver.js"
- }
- },
- "node_modules/@babel/helper-environment-visitor": {
- "version": "7.24.7",
- "license": "MIT",
- "dependencies": {
- "@babel/types": "^7.24.7"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/helper-function-name": {
- "version": "7.24.7",
- "license": "MIT",
- "dependencies": {
- "@babel/template": "^7.24.7",
- "@babel/types": "^7.24.7"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/helper-hoist-variables": {
- "version": "7.24.7",
- "license": "MIT",
- "dependencies": {
- "@babel/types": "^7.24.7"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
"node_modules/@babel/helper-module-imports": {
"version": "7.24.7",
- "license": "MIT",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.7.tgz",
+ "integrity": "sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==",
"dependencies": {
"@babel/traverse": "^7.24.7",
"@babel/types": "^7.24.7"
@@ -413,14 +401,14 @@
}
},
"node_modules/@babel/helper-module-transforms": {
- "version": "7.24.7",
- "license": "MIT",
+ "version": "7.25.2",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.25.2.tgz",
+ "integrity": "sha512-BjyRAbix6j/wv83ftcVJmBt72QtHI56C7JXZoG2xATiLpmoC7dpd8WnkikExHDVPpi/3qCmO6WY1EaXOluiecQ==",
"dependencies": {
- "@babel/helper-environment-visitor": "^7.24.7",
"@babel/helper-module-imports": "^7.24.7",
"@babel/helper-simple-access": "^7.24.7",
- "@babel/helper-split-export-declaration": "^7.24.7",
- "@babel/helper-validator-identifier": "^7.24.7"
+ "@babel/helper-validator-identifier": "^7.24.7",
+ "@babel/traverse": "^7.25.2"
},
"engines": {
"node": ">=6.9.0"
@@ -430,15 +418,17 @@
}
},
"node_modules/@babel/helper-plugin-utils": {
- "version": "7.24.7",
- "license": "MIT",
+ "version": "7.24.8",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.8.tgz",
+ "integrity": "sha512-FFWx5142D8h2Mgr/iPVGH5G7w6jDn4jUSpZTyDnQO0Yn7Ks2Kuz6Pci8H6MPCoUJegd/UZQ3tAvfLCxQSnWWwg==",
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-simple-access": {
"version": "7.24.7",
- "license": "MIT",
+ "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.24.7.tgz",
+ "integrity": "sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==",
"dependencies": {
"@babel/traverse": "^7.24.7",
"@babel/types": "^7.24.7"
@@ -447,43 +437,37 @@
"node": ">=6.9.0"
}
},
- "node_modules/@babel/helper-split-export-declaration": {
- "version": "7.24.7",
- "license": "MIT",
- "dependencies": {
- "@babel/types": "^7.24.7"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
"node_modules/@babel/helper-string-parser": {
- "version": "7.24.7",
- "license": "MIT",
+ "version": "7.24.8",
+ "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.8.tgz",
+ "integrity": "sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==",
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-validator-identifier": {
"version": "7.24.7",
- "license": "MIT",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz",
+ "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==",
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-validator-option": {
- "version": "7.24.7",
- "license": "MIT",
+ "version": "7.24.8",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.24.8.tgz",
+ "integrity": "sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q==",
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helpers": {
- "version": "7.24.7",
- "license": "MIT",
+ "version": "7.25.0",
+ "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.25.0.tgz",
+ "integrity": "sha512-MjgLZ42aCm0oGjJj8CtSM3DB8NOOf8h2l7DCTePJs29u+v7yO/RBX9nShlKMgFnRks/Q4tBAe7Hxnov9VkGwLw==",
"dependencies": {
- "@babel/template": "^7.24.7",
- "@babel/types": "^7.24.7"
+ "@babel/template": "^7.25.0",
+ "@babel/types": "^7.25.0"
},
"engines": {
"node": ">=6.9.0"
@@ -491,7 +475,8 @@
},
"node_modules/@babel/highlight": {
"version": "7.24.7",
- "license": "MIT",
+ "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.7.tgz",
+ "integrity": "sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==",
"dependencies": {
"@babel/helper-validator-identifier": "^7.24.7",
"chalk": "^2.4.2",
@@ -502,42 +487,13 @@
"node": ">=6.9.0"
}
},
- "node_modules/@babel/highlight/node_modules/chalk": {
- "version": "2.4.2",
- "license": "MIT",
- "dependencies": {
- "ansi-styles": "^3.2.1",
- "escape-string-regexp": "^1.0.5",
- "supports-color": "^5.3.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/@babel/highlight/node_modules/chalk/node_modules/ansi-styles": {
- "version": "3.2.1",
- "license": "MIT",
- "dependencies": {
- "color-convert": "^1.9.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/@babel/highlight/node_modules/chalk/node_modules/ansi-styles/node_modules/color-convert": {
- "version": "1.9.3",
- "license": "MIT",
- "dependencies": {
- "color-name": "1.1.3"
- }
- },
- "node_modules/@babel/highlight/node_modules/chalk/node_modules/ansi-styles/node_modules/color-convert/node_modules/color-name": {
- "version": "1.1.3",
- "license": "MIT"
- },
"node_modules/@babel/parser": {
- "version": "7.24.7",
- "license": "MIT",
+ "version": "7.25.3",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.3.tgz",
+ "integrity": "sha512-iLTJKDbJ4hMvFPgQwwsVoxtHyWpKKPBrxkANrSYewDPaPpT5py5yeVkgPIJ7XYXhndxJpaA3PyALSXQ7u8e/Dw==",
+ "dependencies": {
+ "@babel/types": "^7.25.2"
+ },
"bin": {
"parser": "bin/babel-parser.js"
},
@@ -547,7 +503,8 @@
},
"node_modules/@babel/plugin-syntax-jsx": {
"version": "7.24.7",
- "license": "MIT",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.24.7.tgz",
+ "integrity": "sha512-6ddciUPe/mpMnOKv/U+RSd2vvVy+Yw/JfBB0ZHYjEZt9NLHmCUylNYlsbqCCS1Bffjlb0fCwC9Vqz+sBz6PsiQ==",
"dependencies": {
"@babel/helper-plugin-utils": "^7.24.7"
},
@@ -559,14 +516,15 @@
}
},
"node_modules/@babel/plugin-transform-react-jsx": {
- "version": "7.24.7",
- "license": "MIT",
+ "version": "7.25.2",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.25.2.tgz",
+ "integrity": "sha512-KQsqEAVBpU82NM/B/N9j9WOdphom1SZH3R+2V7INrQUH+V9EBFwZsEJl8eBIVeQE62FxJCc70jzEZwqU7RcVqA==",
"dependencies": {
"@babel/helper-annotate-as-pure": "^7.24.7",
"@babel/helper-module-imports": "^7.24.7",
- "@babel/helper-plugin-utils": "^7.24.7",
+ "@babel/helper-plugin-utils": "^7.24.8",
"@babel/plugin-syntax-jsx": "^7.24.7",
- "@babel/types": "^7.24.7"
+ "@babel/types": "^7.25.2"
},
"engines": {
"node": ">=6.9.0"
@@ -604,29 +562,28 @@
}
},
"node_modules/@babel/template": {
- "version": "7.24.7",
- "license": "MIT",
+ "version": "7.25.0",
+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.0.tgz",
+ "integrity": "sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q==",
"dependencies": {
"@babel/code-frame": "^7.24.7",
- "@babel/parser": "^7.24.7",
- "@babel/types": "^7.24.7"
+ "@babel/parser": "^7.25.0",
+ "@babel/types": "^7.25.0"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/traverse": {
- "version": "7.24.7",
- "license": "MIT",
+ "version": "7.25.3",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.3.tgz",
+ "integrity": "sha512-HefgyP1x754oGCsKmV5reSmtV7IXj/kpaE1XYY+D9G5PvKKoFfSbiS4M77MdjuwlZKDIKFCffq9rPU+H/s3ZdQ==",
"dependencies": {
"@babel/code-frame": "^7.24.7",
- "@babel/generator": "^7.24.7",
- "@babel/helper-environment-visitor": "^7.24.7",
- "@babel/helper-function-name": "^7.24.7",
- "@babel/helper-hoist-variables": "^7.24.7",
- "@babel/helper-split-export-declaration": "^7.24.7",
- "@babel/parser": "^7.24.7",
- "@babel/types": "^7.24.7",
+ "@babel/generator": "^7.25.0",
+ "@babel/parser": "^7.25.3",
+ "@babel/template": "^7.25.0",
+ "@babel/types": "^7.25.2",
"debug": "^4.3.1",
"globals": "^11.1.0"
},
@@ -635,10 +592,11 @@
}
},
"node_modules/@babel/types": {
- "version": "7.24.7",
- "license": "MIT",
+ "version": "7.25.2",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.2.tgz",
+ "integrity": "sha512-YTnYtra7W9e6/oAZEHj0bJehPRUlLH9/fbpT5LfB0NhQXyALCRkRs3zH9v07IYhkgpqX6Z78FnuccZr/l4Fs4Q==",
"dependencies": {
- "@babel/helper-string-parser": "^7.24.7",
+ "@babel/helper-string-parser": "^7.24.8",
"@babel/helper-validator-identifier": "^7.24.7",
"to-fast-properties": "^2.0.0"
},
@@ -647,17 +605,16 @@
}
},
"node_modules/@crawlee/basic": {
- "version": "3.10.5",
- "resolved": "https://registry.npmjs.org/@crawlee/basic/-/basic-3.10.5.tgz",
- "integrity": "sha512-GJq/yYc7gUDA70ogd46C7WU12ALRu2+/R2xuWMYMcXWrDnNfqlxnH68MY8+L9b4SmWuXf9ZuYk1ticmwiqRdjA==",
- "license": "Apache-2.0",
+ "version": "3.11.1",
+ "resolved": "https://registry.npmjs.org/@crawlee/basic/-/basic-3.11.1.tgz",
+ "integrity": "sha512-bWQIAkV4DhCGCsZ1Tb3GHH2Ouz1QTvxAiYvEifu6y/mxAxRcIdH25iyLlvI/5ii7hyQ5sTdhiw8k487ohMvRVA==",
"dependencies": {
"@apify/log": "^2.4.0",
"@apify/timeout": "^0.3.0",
"@apify/utilities": "^2.7.10",
- "@crawlee/core": "3.10.5",
- "@crawlee/types": "3.10.5",
- "@crawlee/utils": "3.10.5",
+ "@crawlee/core": "3.11.1",
+ "@crawlee/types": "3.11.1",
+ "@crawlee/utils": "3.11.1",
"csv-stringify": "^6.2.0",
"fs-extra": "^11.0.0",
"got-scraping": "^4.0.0",
@@ -671,10 +628,9 @@
}
},
"node_modules/@crawlee/basic/node_modules/type-fest": {
- "version": "4.20.1",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.20.1.tgz",
- "integrity": "sha512-R6wDsVsoS9xYOpy8vgeBlqpdOyzJ12HNfQhC/aAKWM3YoCV9TtunJzh/QpkMgeDhkoynDcw5f1y+qF9yc/HHyg==",
- "license": "(MIT OR CC0-1.0)",
+ "version": "4.25.0",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.25.0.tgz",
+ "integrity": "sha512-bRkIGlXsnGBRBQRAY56UXBm//9qH4bmJfFvq83gSz41N282df+fjy8ofcEgc1sM8geNt5cl6mC2g9Fht1cs8Aw==",
"engines": {
"node": ">=16"
},
@@ -683,16 +639,15 @@
}
},
"node_modules/@crawlee/browser": {
- "version": "3.10.5",
- "resolved": "https://registry.npmjs.org/@crawlee/browser/-/browser-3.10.5.tgz",
- "integrity": "sha512-jkJUXU1Z8FYWSuEpgCy6xTKigNrf/7zHMfc4FHUQz4vtSWnoOyOaIVNjpRyVwX7+A6q+L74HRFp5iJCAvPeuSQ==",
- "license": "Apache-2.0",
+ "version": "3.11.1",
+ "resolved": "https://registry.npmjs.org/@crawlee/browser/-/browser-3.11.1.tgz",
+ "integrity": "sha512-B7M9NcACdKz5vyRCUam227bcXr//szpQ3xo47rykTDEXmAD2KMoXiugc7PZXXfoBOLj9BoSdKXkeX3O2+DQYiQ==",
"dependencies": {
"@apify/timeout": "^0.3.0",
- "@crawlee/basic": "3.10.5",
- "@crawlee/browser-pool": "3.10.5",
- "@crawlee/types": "3.10.5",
- "@crawlee/utils": "3.10.5",
+ "@crawlee/basic": "3.11.1",
+ "@crawlee/browser-pool": "3.11.1",
+ "@crawlee/types": "3.11.1",
+ "@crawlee/utils": "3.11.1",
"ow": "^0.28.1",
"tslib": "^2.4.0",
"type-fest": "^4.0.0"
@@ -714,15 +669,14 @@
}
},
"node_modules/@crawlee/browser-pool": {
- "version": "3.10.5",
- "resolved": "https://registry.npmjs.org/@crawlee/browser-pool/-/browser-pool-3.10.5.tgz",
- "integrity": "sha512-UEXnnnWeWasJfpgS8EYxKM/CUFkWZMw6pZi+OQCMN30ePvZKuyDo4vkLZ2ucZoJtD5UeSyF/DZGmvzHr42vMqQ==",
- "license": "Apache-2.0",
+ "version": "3.11.1",
+ "resolved": "https://registry.npmjs.org/@crawlee/browser-pool/-/browser-pool-3.11.1.tgz",
+ "integrity": "sha512-Svf/5Sn8pFEZSUO7Ro0dxyW+YJC19H+jm+gQn3ekf/MluLD+wSK+NJJIb4qjpgqleq0N+1Akm3jDInGV8gu3qg==",
"dependencies": {
"@apify/log": "^2.4.0",
"@apify/timeout": "^0.3.0",
- "@crawlee/core": "3.10.5",
- "@crawlee/types": "3.10.5",
+ "@crawlee/core": "3.11.1",
+ "@crawlee/types": "3.11.1",
"fingerprint-generator": "^2.0.6",
"fingerprint-injector": "^2.0.5",
"lodash.merge": "^4.6.2",
@@ -754,7 +708,6 @@
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
"integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
- "license": "MIT",
"dependencies": {
"yocto-queue": "^0.1.0"
},
@@ -769,7 +722,6 @@
"version": "0.1.0",
"resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
"integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
- "license": "MIT",
"engines": {
"node": ">=10"
},
@@ -778,10 +730,9 @@
}
},
"node_modules/@crawlee/browser/node_modules/type-fest": {
- "version": "4.20.1",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.20.1.tgz",
- "integrity": "sha512-R6wDsVsoS9xYOpy8vgeBlqpdOyzJ12HNfQhC/aAKWM3YoCV9TtunJzh/QpkMgeDhkoynDcw5f1y+qF9yc/HHyg==",
- "license": "(MIT OR CC0-1.0)",
+ "version": "4.25.0",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.25.0.tgz",
+ "integrity": "sha512-bRkIGlXsnGBRBQRAY56UXBm//9qH4bmJfFvq83gSz41N282df+fjy8ofcEgc1sM8geNt5cl6mC2g9Fht1cs8Aw==",
"engines": {
"node": ">=16"
},
@@ -790,14 +741,13 @@
}
},
"node_modules/@crawlee/cheerio": {
- "version": "3.10.5",
- "resolved": "https://registry.npmjs.org/@crawlee/cheerio/-/cheerio-3.10.5.tgz",
- "integrity": "sha512-O/VGesrviquL4Hdnrurt2U13d8MrX42I7jnf/6C9gScwGWH6BiJmR0p7CIm0zhN8l4i95Qd78OjrfsJS8Rjt7Q==",
- "license": "Apache-2.0",
+ "version": "3.11.1",
+ "resolved": "https://registry.npmjs.org/@crawlee/cheerio/-/cheerio-3.11.1.tgz",
+ "integrity": "sha512-PFQNp9LniBVYVuJvPn1WIUrEpioTxYOSsd3CcbMF+pGN1tCyeeqt6O8bJAfAs+P99AEoZNruCkblv0uPg8q3wQ==",
"dependencies": {
- "@crawlee/http": "3.10.5",
- "@crawlee/types": "3.10.5",
- "@crawlee/utils": "3.10.5",
+ "@crawlee/http": "3.11.1",
+ "@crawlee/types": "3.11.1",
+ "@crawlee/utils": "3.11.1",
"cheerio": "^1.0.0-rc.12",
"htmlparser2": "^9.0.0",
"tslib": "^2.4.0"
@@ -806,32 +756,12 @@
"node": ">=16.0.0"
}
},
- "node_modules/@crawlee/cheerio/node_modules/htmlparser2": {
- "version": "9.1.0",
- "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-9.1.0.tgz",
- "integrity": "sha512-5zfg6mHUoaer/97TxnGpxmbR7zJtPwIYFMZ/H5ucTlPZhKvtum05yiPK3Mgai3a0DyVxv7qYqoweaEd2nrYQzQ==",
- "funding": [
- "https://github.com/fb55/htmlparser2?sponsor=1",
- {
- "type": "github",
- "url": "https://github.com/sponsors/fb55"
- }
- ],
- "license": "MIT",
- "dependencies": {
- "domelementtype": "^2.3.0",
- "domhandler": "^5.0.3",
- "domutils": "^3.1.0",
- "entities": "^4.5.0"
- }
- },
"node_modules/@crawlee/cli": {
- "version": "3.10.5",
- "resolved": "https://registry.npmjs.org/@crawlee/cli/-/cli-3.10.5.tgz",
- "integrity": "sha512-1NggRahtDpL5/Y2ofK3knmjGm2QignEiMx1540vMsJROP7ggYNjeBECXyyvavrZ9l/eUHRlur+pE17Loci7/kA==",
- "license": "Apache-2.0",
+ "version": "3.11.1",
+ "resolved": "https://registry.npmjs.org/@crawlee/cli/-/cli-3.11.1.tgz",
+ "integrity": "sha512-XX4naPjGIRbyr/+ceCFUPbGEXKfUA/xILUa6DWrqp1NOt7+LftIEoQO16WGg6vDo8efYx+ZWpsreei9qPSMPzw==",
"dependencies": {
- "@crawlee/templates": "3.10.5",
+ "@crawlee/templates": "3.11.1",
"ansi-colors": "^4.1.3",
"fs-extra": "^11.0.0",
"inquirer": "^8.2.4",
@@ -847,10 +777,9 @@
}
},
"node_modules/@crawlee/core": {
- "version": "3.10.5",
- "resolved": "https://registry.npmjs.org/@crawlee/core/-/core-3.10.5.tgz",
- "integrity": "sha512-L82EXDTAVZOmLbH5s7BcHCryPNGc//eiLCs0eyS1LIR7sf+dUUosfpmZyNfLNkku0Zysir/RUftqhe9JNT/evQ==",
- "license": "Apache-2.0",
+ "version": "3.11.1",
+ "resolved": "https://registry.npmjs.org/@crawlee/core/-/core-3.11.1.tgz",
+ "integrity": "sha512-Sy7qZJ3pJiolJVQ6YqNp+q8VbGuJfwWaYMFmaWqT+oY74V7Kz3BGw+o677shJ7cIQ+MlXGb8DD+G5fQqBCKswg==",
"dependencies": {
"@apify/consts": "^2.20.0",
"@apify/datastructures": "^2.0.0",
@@ -858,9 +787,9 @@
"@apify/pseudo_url": "^2.0.30",
"@apify/timeout": "^0.3.0",
"@apify/utilities": "^2.7.10",
- "@crawlee/memory-storage": "3.10.5",
- "@crawlee/types": "3.10.5",
- "@crawlee/utils": "3.10.5",
+ "@crawlee/memory-storage": "3.11.1",
+ "@crawlee/types": "3.11.1",
+ "@crawlee/utils": "3.11.1",
"@sapphire/async-queue": "^1.5.1",
"@types/tough-cookie": "^4.0.2",
"@vladfrangu/async_event_emitter": "^2.2.2",
@@ -882,10 +811,9 @@
}
},
"node_modules/@crawlee/core/node_modules/type-fest": {
- "version": "4.20.1",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.20.1.tgz",
- "integrity": "sha512-R6wDsVsoS9xYOpy8vgeBlqpdOyzJ12HNfQhC/aAKWM3YoCV9TtunJzh/QpkMgeDhkoynDcw5f1y+qF9yc/HHyg==",
- "license": "(MIT OR CC0-1.0)",
+ "version": "4.25.0",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.25.0.tgz",
+ "integrity": "sha512-bRkIGlXsnGBRBQRAY56UXBm//9qH4bmJfFvq83gSz41N282df+fjy8ofcEgc1sM8geNt5cl6mC2g9Fht1cs8Aw==",
"engines": {
"node": ">=16"
},
@@ -894,16 +822,15 @@
}
},
"node_modules/@crawlee/http": {
- "version": "3.10.5",
- "resolved": "https://registry.npmjs.org/@crawlee/http/-/http-3.10.5.tgz",
- "integrity": "sha512-4VG2Z3lh4N5CIZglAdxEE+sk1xEyZ2fi05jJmtay9Li87Z/q524fjkefL5tUqGba8p5dDWEgRO1cnoVv9sXrrg==",
- "license": "Apache-2.0",
+ "version": "3.11.1",
+ "resolved": "https://registry.npmjs.org/@crawlee/http/-/http-3.11.1.tgz",
+ "integrity": "sha512-Jn9U6JQBfmN+ALMpv3JX472qATrTrU6bakoSXC4pY9c5Sr9I+SQqoZq8yEFmE2XZjQgPAhjv8WrysY/yenFMwA==",
"dependencies": {
"@apify/timeout": "^0.3.0",
"@apify/utilities": "^2.7.10",
- "@crawlee/basic": "3.10.5",
- "@crawlee/types": "3.10.5",
- "@crawlee/utils": "3.10.5",
+ "@crawlee/basic": "3.11.1",
+ "@crawlee/types": "3.11.1",
+ "@crawlee/utils": "3.11.1",
"@types/content-type": "^1.1.5",
"cheerio": "^1.0.0-rc.12",
"content-type": "^1.0.4",
@@ -919,10 +846,9 @@
}
},
"node_modules/@crawlee/http/node_modules/type-fest": {
- "version": "4.20.1",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.20.1.tgz",
- "integrity": "sha512-R6wDsVsoS9xYOpy8vgeBlqpdOyzJ12HNfQhC/aAKWM3YoCV9TtunJzh/QpkMgeDhkoynDcw5f1y+qF9yc/HHyg==",
- "license": "(MIT OR CC0-1.0)",
+ "version": "4.25.0",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.25.0.tgz",
+ "integrity": "sha512-bRkIGlXsnGBRBQRAY56UXBm//9qH4bmJfFvq83gSz41N282df+fjy8ofcEgc1sM8geNt5cl6mC2g9Fht1cs8Aw==",
"engines": {
"node": ">=16"
},
@@ -931,16 +857,15 @@
}
},
"node_modules/@crawlee/jsdom": {
- "version": "3.10.5",
- "resolved": "https://registry.npmjs.org/@crawlee/jsdom/-/jsdom-3.10.5.tgz",
- "integrity": "sha512-cWJ4om0XC9+HLHmP6JgfkKrS/kgxDfqcY0nfdeSAB/JdJxylCxS8Wqu5BIj9DhK3W0/NI6vJ7nUT5tuarbGXyQ==",
- "license": "Apache-2.0",
+ "version": "3.11.1",
+ "resolved": "https://registry.npmjs.org/@crawlee/jsdom/-/jsdom-3.11.1.tgz",
+ "integrity": "sha512-NhUQUDz4l9qJHSpmHDGUBMvHUwQJTYTBF5u4tTMF1ehMJEw8ofJA1uXUrV3VtW/nBOvBqCM0XAvWOlzH95LUCA==",
"dependencies": {
"@apify/timeout": "^0.3.0",
"@apify/utilities": "^2.7.10",
- "@crawlee/http": "3.10.5",
- "@crawlee/types": "3.10.5",
- "@crawlee/utils": "3.10.5",
+ "@crawlee/http": "3.11.1",
+ "@crawlee/types": "3.11.1",
+ "@crawlee/utils": "3.11.1",
"@types/jsdom": "^21.0.0",
"cheerio": "^1.0.0-rc.12",
"jsdom": "^24.0.0",
@@ -952,15 +877,14 @@
}
},
"node_modules/@crawlee/linkedom": {
- "version": "3.10.5",
- "resolved": "https://registry.npmjs.org/@crawlee/linkedom/-/linkedom-3.10.5.tgz",
- "integrity": "sha512-/VVcaClkYjITFk9yGdkO7k2sUF2hoEuBqb96eS0dcrRSp0i374LCW5yMYSOAgjSDmWKeV6/iuhDCj1zFwKNKaw==",
- "license": "Apache-2.0",
+ "version": "3.11.1",
+ "resolved": "https://registry.npmjs.org/@crawlee/linkedom/-/linkedom-3.11.1.tgz",
+ "integrity": "sha512-Ete9ShFBhKsYOQRcUEs8GB+Tkx7lDVnr+QQs1hw+gdemuXChX9Nppo/Iz0OH8JYWh9nZUOyTvvqrrBJLFKWtow==",
"dependencies": {
"@apify/timeout": "^0.3.0",
"@apify/utilities": "^2.7.10",
- "@crawlee/http": "3.10.5",
- "@crawlee/types": "3.10.5",
+ "@crawlee/http": "3.11.1",
+ "@crawlee/types": "3.11.1",
"linkedom": "^0.18.0",
"ow": "^0.28.2",
"tslib": "^2.4.0"
@@ -970,13 +894,12 @@
}
},
"node_modules/@crawlee/memory-storage": {
- "version": "3.10.5",
- "resolved": "https://registry.npmjs.org/@crawlee/memory-storage/-/memory-storage-3.10.5.tgz",
- "integrity": "sha512-Pnq8WwrWxwImN/AIZHc5xi4hKSwSEk/jjiN//jZPLLZlqPxqUzwqIMd8SIlexhAptiJ/K2LaR0y7o6VQk5trqw==",
- "license": "Apache-2.0",
+ "version": "3.11.1",
+ "resolved": "https://registry.npmjs.org/@crawlee/memory-storage/-/memory-storage-3.11.1.tgz",
+ "integrity": "sha512-k/rgBmoHE1CC68Jj5flaXJC9wWbScedvJFnqJy52bc2UiYooZvLVykkRXIBfY+aBuuILWvJdrZoT1OIEpm2EgQ==",
"dependencies": {
"@apify/log": "^2.4.0",
- "@crawlee/types": "3.10.5",
+ "@crawlee/types": "3.11.1",
"@sapphire/async-queue": "^1.5.0",
"@sapphire/shapeshift": "^3.0.0",
"content-type": "^1.0.4",
@@ -991,19 +914,18 @@
}
},
"node_modules/@crawlee/playwright": {
- "version": "3.10.5",
- "resolved": "https://registry.npmjs.org/@crawlee/playwright/-/playwright-3.10.5.tgz",
- "integrity": "sha512-u95ObQHTWfOaKR1q1CwPp2A8DW5Xl1fF1LSyhAL6OjhywBd9eYazeEoUs/WA7SG98LcNZEyT7Nh3gH3UJ08t2g==",
- "license": "Apache-2.0",
+ "version": "3.11.1",
+ "resolved": "https://registry.npmjs.org/@crawlee/playwright/-/playwright-3.11.1.tgz",
+ "integrity": "sha512-baPuOHZW81pn/tOmJ54ySa+lSq3jpQEVXZbr52JWt5a/GEyMneJlyDNnk8fEVea0GMLZL3d3D5Bgm3NNsMHOzQ==",
"dependencies": {
"@apify/datastructures": "^2.0.0",
"@apify/log": "^2.4.0",
"@apify/timeout": "^0.3.1",
- "@crawlee/browser": "3.10.5",
- "@crawlee/browser-pool": "3.10.5",
- "@crawlee/core": "3.10.5",
- "@crawlee/types": "3.10.5",
- "@crawlee/utils": "3.10.5",
+ "@crawlee/browser": "3.11.1",
+ "@crawlee/browser-pool": "3.11.1",
+ "@crawlee/core": "3.11.1",
+ "@crawlee/types": "3.11.1",
+ "@crawlee/utils": "3.11.1",
"cheerio": "^1.0.0-rc.12",
"idcac-playwright": "^0.1.2",
"jquery": "^3.6.0",
@@ -1027,17 +949,16 @@
}
},
"node_modules/@crawlee/puppeteer": {
- "version": "3.10.5",
- "resolved": "https://registry.npmjs.org/@crawlee/puppeteer/-/puppeteer-3.10.5.tgz",
- "integrity": "sha512-YjEu01Vozn7Qy9s+Gx1qKo6VgxvC9RfPFYeUeDV9rH/6oQ5aKVudj/y2nhgpC+5Ca+ZLbzPCdfXDTHZ4TFBycg==",
- "license": "Apache-2.0",
+ "version": "3.11.1",
+ "resolved": "https://registry.npmjs.org/@crawlee/puppeteer/-/puppeteer-3.11.1.tgz",
+ "integrity": "sha512-1BMIHbmMyKooGR6n6inOKH2uM+cFQclg0mdyn9IQRl/O7tULSNL1jUE0UhdSCNYbKmQV+oxocw6cT/BtqEaCmw==",
"dependencies": {
"@apify/datastructures": "^2.0.0",
"@apify/log": "^2.4.0",
- "@crawlee/browser": "3.10.5",
- "@crawlee/browser-pool": "3.10.5",
- "@crawlee/types": "3.10.5",
- "@crawlee/utils": "3.10.5",
+ "@crawlee/browser": "3.11.1",
+ "@crawlee/browser-pool": "3.11.1",
+ "@crawlee/types": "3.11.1",
+ "@crawlee/utils": "3.11.1",
"cheerio": "^1.0.0-rc.12",
"devtools-protocol": "*",
"idcac-playwright": "^0.1.2",
@@ -1058,10 +979,9 @@
}
},
"node_modules/@crawlee/templates": {
- "version": "3.10.5",
- "resolved": "https://registry.npmjs.org/@crawlee/templates/-/templates-3.10.5.tgz",
- "integrity": "sha512-ZLDecHJFO/2GQCEqf8ycRMD+VBnQRZMbukdGS135/LBS7MbV/qfAB9a9k3Z0e3d7Kjo1xA4ZmNJueqhukemlyA==",
- "license": "Apache-2.0",
+ "version": "3.11.1",
+ "resolved": "https://registry.npmjs.org/@crawlee/templates/-/templates-3.11.1.tgz",
+ "integrity": "sha512-dkd+oSH0gysSZWOpACMtiTWGkIKkCz0OlEqHRBmx10Q6rA4fzoR3gzYOnnmu6MR6YY3n+HFdOuegMttFGy1EHQ==",
"dependencies": {
"ansi-colors": "^4.1.3",
"inquirer": "^9.0.0",
@@ -1077,7 +997,6 @@
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
"integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
- "license": "MIT",
"engines": {
"node": ">=8"
}
@@ -1086,7 +1005,6 @@
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
- "license": "MIT",
"dependencies": {
"color-convert": "^2.0.1"
},
@@ -1101,7 +1019,6 @@
"version": "4.1.2",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
"integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
- "license": "MIT",
"dependencies": {
"ansi-styles": "^4.1.0",
"supports-color": "^7.1.0"
@@ -1113,47 +1030,47 @@
"url": "https://github.com/chalk/chalk?sponsor=1"
}
},
- "node_modules/@crawlee/templates/node_modules/cli-cursor": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz",
- "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==",
- "license": "MIT",
- "dependencies": {
- "restore-cursor": "^3.1.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
"node_modules/@crawlee/templates/node_modules/cli-width": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/cli-width/-/cli-width-4.1.0.tgz",
"integrity": "sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==",
- "license": "ISC",
"engines": {
"node": ">= 12"
}
},
+ "node_modules/@crawlee/templates/node_modules/color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dependencies": {
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
+ },
+ "node_modules/@crawlee/templates/node_modules/color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
+ },
"node_modules/@crawlee/templates/node_modules/emoji-regex": {
"version": "8.0.0",
"resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
- "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
- "license": "MIT"
+ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="
},
"node_modules/@crawlee/templates/node_modules/has-flag": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
- "license": "MIT",
"engines": {
"node": ">=8"
}
},
"node_modules/@crawlee/templates/node_modules/inquirer": {
- "version": "9.3.1",
- "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-9.3.1.tgz",
- "integrity": "sha512-A5IdVr1I04XqPlwrGgTJMKmzRg5ropqNpSeqo0vj1ZmluSCNSFaPZz4eazdPrhVcZfej7fCEYvD2NYa1KjkTJA==",
- "license": "MIT",
+ "version": "9.3.6",
+ "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-9.3.6.tgz",
+ "integrity": "sha512-riK/iQB2ctwkpWYgjjWIRv3MBLt2gzb2Sj0JNQNbyTXgyXsLWcDPJ5WS5ZDTCx7BRFnJsARtYh+58fjP5M2Y0Q==",
"dependencies": {
"@inquirer/figures": "^1.0.3",
"ansi-escapes": "^4.3.2",
@@ -1161,12 +1078,12 @@
"external-editor": "^3.1.0",
"mute-stream": "1.0.0",
"ora": "^5.4.1",
- "picocolors": "^1.0.1",
"run-async": "^3.0.0",
"rxjs": "^7.8.1",
"string-width": "^4.2.3",
"strip-ansi": "^6.0.1",
- "wrap-ansi": "^6.2.0"
+ "wrap-ansi": "^6.2.0",
+ "yoctocolors-cjs": "^2.1.2"
},
"engines": {
"node": ">=18"
@@ -1176,7 +1093,6 @@
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz",
"integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==",
- "license": "MIT",
"engines": {
"node": ">=8"
}
@@ -1185,7 +1101,6 @@
"version": "0.1.0",
"resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz",
"integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==",
- "license": "MIT",
"engines": {
"node": ">=10"
},
@@ -1197,7 +1112,6 @@
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz",
"integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==",
- "license": "MIT",
"dependencies": {
"chalk": "^4.1.0",
"is-unicode-supported": "^0.1.0"
@@ -1209,44 +1123,18 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/@crawlee/templates/node_modules/mimic-fn": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
- "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==",
- "license": "MIT",
- "engines": {
- "node": ">=6"
- }
- },
"node_modules/@crawlee/templates/node_modules/mute-stream": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-1.0.0.tgz",
"integrity": "sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==",
- "license": "ISC",
"engines": {
"node": "^14.17.0 || ^16.13.0 || >=18.0.0"
}
},
- "node_modules/@crawlee/templates/node_modules/onetime": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz",
- "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==",
- "license": "MIT",
- "dependencies": {
- "mimic-fn": "^2.1.0"
- },
- "engines": {
- "node": ">=6"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
"node_modules/@crawlee/templates/node_modules/ora": {
"version": "5.4.1",
"resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz",
"integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==",
- "license": "MIT",
"dependencies": {
"bl": "^4.1.0",
"chalk": "^4.1.0",
@@ -1265,39 +1153,18 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/@crawlee/templates/node_modules/restore-cursor": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz",
- "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==",
- "license": "MIT",
- "dependencies": {
- "onetime": "^5.1.0",
- "signal-exit": "^3.0.2"
- },
- "engines": {
- "node": ">=8"
- }
- },
"node_modules/@crawlee/templates/node_modules/run-async": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/run-async/-/run-async-3.0.0.tgz",
"integrity": "sha512-540WwVDOMxA6dN6We19EcT9sc3hkXPw5mzRNGM3FkdN/vtE9NFvj5lFAPNwUDmJjXidm3v7TC1cTE7t17Ulm1Q==",
- "license": "MIT",
"engines": {
"node": ">=0.12.0"
}
},
- "node_modules/@crawlee/templates/node_modules/signal-exit": {
- "version": "3.0.7",
- "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
- "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==",
- "license": "ISC"
- },
"node_modules/@crawlee/templates/node_modules/string-width": {
"version": "4.2.3",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
"integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
- "license": "MIT",
"dependencies": {
"emoji-regex": "^8.0.0",
"is-fullwidth-code-point": "^3.0.0",
@@ -1311,7 +1178,6 @@
"version": "6.0.1",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
"integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
- "license": "MIT",
"dependencies": {
"ansi-regex": "^5.0.1"
},
@@ -1323,7 +1189,6 @@
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
"integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
- "license": "MIT",
"dependencies": {
"has-flag": "^4.0.0"
},
@@ -1335,7 +1200,6 @@
"version": "6.2.0",
"resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz",
"integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==",
- "license": "MIT",
"dependencies": {
"ansi-styles": "^4.0.0",
"string-width": "^4.1.0",
@@ -1346,10 +1210,9 @@
}
},
"node_modules/@crawlee/types": {
- "version": "3.10.5",
- "resolved": "https://registry.npmjs.org/@crawlee/types/-/types-3.10.5.tgz",
- "integrity": "sha512-AnOBspUU4Cydjh/2dg3miKgHHvlTrG2Ccrfhe98y19bpD2ghteEpaJ6aiClOUH73Z9jlhaR0Ztb1mOwNp/R+8A==",
- "license": "Apache-2.0",
+ "version": "3.11.1",
+ "resolved": "https://registry.npmjs.org/@crawlee/types/-/types-3.11.1.tgz",
+ "integrity": "sha512-rbI8HIQonnjMFz8PBWss7AZ1Vmbiwx3C5BbJYYz7z9rd6hoDle/3K61GJJWLjClWpafZr1ywLpeJ2IKTGsonRw==",
"dependencies": {
"tslib": "^2.4.0"
},
@@ -1358,21 +1221,20 @@
}
},
"node_modules/@crawlee/utils": {
- "version": "3.10.5",
- "resolved": "https://registry.npmjs.org/@crawlee/utils/-/utils-3.10.5.tgz",
- "integrity": "sha512-u8a35NmLrcXBvN2fsTBXxpBrmUADp0qcy3tsDDs4UAju+URiikEdiU0K+McX3k3A2XwcT/zJBy+x6+4Jzs3JCg==",
- "license": "Apache-2.0",
+ "version": "3.11.1",
+ "resolved": "https://registry.npmjs.org/@crawlee/utils/-/utils-3.11.1.tgz",
+ "integrity": "sha512-PeNQDte8V7rr6t4N5L1Rdvt+KmeMrnMb19H6QqXtBTFBawJfgfyYxTHRgDcDJ/a1ZZ77gZE7UgZ2PsX9DqwAsA==",
"dependencies": {
"@apify/log": "^2.4.0",
"@apify/ps-tree": "^1.2.0",
- "@crawlee/types": "3.10.5",
+ "@crawlee/types": "3.11.1",
"@types/sax": "^1.2.7",
"cheerio": "^1.0.0-rc.12",
"file-type": "^19.0.0",
"got-scraping": "^4.0.3",
"ow": "^0.28.1",
"robots-parser": "^3.0.1",
- "sax": "^1.3.0",
+ "sax": "^1.4.1",
"tslib": "^2.4.0",
"whatwg-mimetype": "^4.0.0"
},
@@ -1380,11 +1242,32 @@
"node": ">=16.0.0"
}
},
+ "node_modules/@cspotcode/source-map-support": {
+ "version": "0.8.1",
+ "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz",
+ "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==",
+ "dev": true,
+ "dependencies": {
+ "@jridgewell/trace-mapping": "0.3.9"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@cspotcode/source-map-support/node_modules/@jridgewell/trace-mapping": {
+ "version": "0.3.9",
+ "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz",
+ "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==",
+ "dev": true,
+ "dependencies": {
+ "@jridgewell/resolve-uri": "^3.0.3",
+ "@jridgewell/sourcemap-codec": "^1.4.10"
+ }
+ },
"node_modules/@emmetio/abbreviation": {
"version": "2.3.3",
"resolved": "https://registry.npmjs.org/@emmetio/abbreviation/-/abbreviation-2.3.3.tgz",
"integrity": "sha512-mgv58UrU3rh4YgbE/TzgLQwJ3pFsHHhCLqY20aJq+9comytTXUDNGG/SMtSeMJdkpxgXSXunBGLD8Boka3JyVA==",
- "license": "MIT",
"dependencies": {
"@emmetio/scanner": "^1.0.4"
}
@@ -1393,7 +1276,6 @@
"version": "2.1.8",
"resolved": "https://registry.npmjs.org/@emmetio/css-abbreviation/-/css-abbreviation-2.1.8.tgz",
"integrity": "sha512-s9yjhJ6saOO/uk1V74eifykk2CBYi01STTK3WlXWGOepyKa23ymJ053+DNQjpFcy1ingpaO7AxCcwLvHFY9tuw==",
- "license": "MIT",
"dependencies": {
"@emmetio/scanner": "^1.0.4"
}
@@ -1402,7 +1284,6 @@
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/@emmetio/css-parser/-/css-parser-0.4.0.tgz",
"integrity": "sha512-z7wkxRSZgrQHXVzObGkXG+Vmj3uRlpM11oCZ9pbaz0nFejvCDmAiNDpY75+wgXOcffKpj4rzGtwGaZxfJKsJxw==",
- "license": "MIT",
"dependencies": {
"@emmetio/stream-reader": "^2.2.0",
"@emmetio/stream-reader-utils": "^0.1.0"
@@ -1412,7 +1293,6 @@
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/@emmetio/html-matcher/-/html-matcher-1.3.0.tgz",
"integrity": "sha512-NTbsvppE5eVyBMuyGfVu2CRrLvo7J4YHb6t9sBFLyY03WYhXET37qA4zOYUjBWFCRHO7pS1B9khERtY0f5JXPQ==",
- "license": "ISC",
"dependencies": {
"@emmetio/scanner": "^1.0.0"
}
@@ -1420,27 +1300,350 @@
"node_modules/@emmetio/scanner": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/@emmetio/scanner/-/scanner-1.0.4.tgz",
- "integrity": "sha512-IqRuJtQff7YHHBk4G8YZ45uB9BaAGcwQeVzgj/zj8/UdOhtQpEIupUhSk8dys6spFIWVZVeK20CzGEnqR5SbqA==",
- "license": "MIT"
+ "integrity": "sha512-IqRuJtQff7YHHBk4G8YZ45uB9BaAGcwQeVzgj/zj8/UdOhtQpEIupUhSk8dys6spFIWVZVeK20CzGEnqR5SbqA=="
},
"node_modules/@emmetio/stream-reader": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/@emmetio/stream-reader/-/stream-reader-2.2.0.tgz",
- "integrity": "sha512-fXVXEyFA5Yv3M3n8sUGT7+fvecGrZP4k6FnWWMSZVQf69kAq0LLpaBQLGcPR30m3zMmKYhECP4k/ZkzvhEW5kw==",
- "license": "MIT"
+ "integrity": "sha512-fXVXEyFA5Yv3M3n8sUGT7+fvecGrZP4k6FnWWMSZVQf69kAq0LLpaBQLGcPR30m3zMmKYhECP4k/ZkzvhEW5kw=="
},
"node_modules/@emmetio/stream-reader-utils": {
"version": "0.1.0",
"resolved": "https://registry.npmjs.org/@emmetio/stream-reader-utils/-/stream-reader-utils-0.1.0.tgz",
- "integrity": "sha512-ZsZ2I9Vzso3Ho/pjZFsmmZ++FWeEd/txqybHTm4OgaZzdS8V9V/YYWQwg5TC38Z7uLWUV1vavpLLbjJtKubR1A==",
- "license": "MIT"
+ "integrity": "sha512-ZsZ2I9Vzso3Ho/pjZFsmmZ++FWeEd/txqybHTm4OgaZzdS8V9V/YYWQwg5TC38Z7uLWUV1vavpLLbjJtKubR1A=="
},
- "node_modules/@esbuild/win32-x64": {
+ "node_modules/@emnapi/runtime": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.2.0.tgz",
+ "integrity": "sha512-bV21/9LQmcQeCPEg3BDFtvwL6cwiTMksYNWQQ4KOxCZikEGalWtenoZ0wCiukJINlGCIi2KXx01g4FoH/LxpzQ==",
+ "optional": true,
+ "dependencies": {
+ "tslib": "^2.4.0"
+ }
+ },
+ "node_modules/@esbuild/aix-ppc64": {
"version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz",
+ "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==",
+ "cpu": [
+ "ppc64"
+ ],
+ "optional": true,
+ "os": [
+ "aix"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/android-arm": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz",
+ "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==",
+ "cpu": [
+ "arm"
+ ],
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/android-arm64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz",
+ "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==",
+ "cpu": [
+ "arm64"
+ ],
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/android-x64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz",
+ "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==",
"cpu": [
"x64"
],
- "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/darwin-arm64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz",
+ "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/darwin-x64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz",
+ "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==",
+ "cpu": [
+ "x64"
+ ],
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/freebsd-arm64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz",
+ "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==",
+ "cpu": [
+ "arm64"
+ ],
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/freebsd-x64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz",
+ "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==",
+ "cpu": [
+ "x64"
+ ],
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-arm": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz",
+ "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==",
+ "cpu": [
+ "arm"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-arm64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz",
+ "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==",
+ "cpu": [
+ "arm64"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-ia32": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz",
+ "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==",
+ "cpu": [
+ "ia32"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-loong64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz",
+ "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==",
+ "cpu": [
+ "loong64"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-mips64el": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz",
+ "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==",
+ "cpu": [
+ "mips64el"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-ppc64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz",
+ "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==",
+ "cpu": [
+ "ppc64"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-riscv64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz",
+ "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==",
+ "cpu": [
+ "riscv64"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-s390x": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz",
+ "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==",
+ "cpu": [
+ "s390x"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-x64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz",
+ "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==",
+ "cpu": [
+ "x64"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/netbsd-x64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz",
+ "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==",
+ "cpu": [
+ "x64"
+ ],
+ "optional": true,
+ "os": [
+ "netbsd"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/openbsd-arm64": {
+ "version": "0.23.1",
+ "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.23.1.tgz",
+ "integrity": "sha512-3x37szhLexNA4bXhLrCC/LImN/YtWis6WXr1VESlfVtVeoFJBRINPJ3f0a/6LV8zpikqoUg4hyXw0sFBt5Cr+Q==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "openbsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/openbsd-x64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz",
+ "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==",
+ "cpu": [
+ "x64"
+ ],
+ "optional": true,
+ "os": [
+ "openbsd"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/sunos-x64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz",
+ "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==",
+ "cpu": [
+ "x64"
+ ],
+ "optional": true,
+ "os": [
+ "sunos"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/win32-arm64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz",
+ "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==",
+ "cpu": [
+ "arm64"
+ ],
"optional": true,
"os": [
"win32"
@@ -1449,38 +1652,502 @@
"node": ">=12"
}
},
- "node_modules/@img/sharp-win32-x64": {
- "version": "0.33.4",
+ "node_modules/@esbuild/win32-ia32": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz",
+ "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==",
"cpu": [
- "x64"
+ "ia32"
],
- "license": "Apache-2.0 AND LGPL-3.0-or-later",
"optional": true,
"os": [
"win32"
],
"engines": {
- "node": "^18.17.0 || ^20.3.0 || >=21.0.0",
- "npm": ">=9.6.5",
- "pnpm": ">=7.1.0",
- "yarn": ">=3.2.0"
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/win32-x64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz",
+ "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==",
+ "cpu": [
+ "x64"
+ ],
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@fastify/accept-negotiator": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@fastify/accept-negotiator/-/accept-negotiator-1.1.0.tgz",
+ "integrity": "sha512-OIHZrb2ImZ7XG85HXOONLcJWGosv7sIvM2ifAPQVhg9Lv7qdmMBNVaai4QTdyuaqbKM5eO6sLSQOYI7wEQeCJQ==",
+ "engines": {
+ "node": ">=14"
+ }
+ },
+ "node_modules/@fastify/ajv-compiler": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/@fastify/ajv-compiler/-/ajv-compiler-3.6.0.tgz",
+ "integrity": "sha512-LwdXQJjmMD+GwLOkP7TVC68qa+pSSogeWWmznRJ/coyTcfe9qA05AHFSe1eZFwK6q+xVRpChnvFUkf1iYaSZsQ==",
+ "dependencies": {
+ "ajv": "^8.11.0",
+ "ajv-formats": "^2.1.1",
+ "fast-uri": "^2.0.0"
+ }
+ },
+ "node_modules/@fastify/error": {
+ "version": "3.4.1",
+ "resolved": "https://registry.npmjs.org/@fastify/error/-/error-3.4.1.tgz",
+ "integrity": "sha512-wWSvph+29GR783IhmvdwWnN4bUxTD01Vm5Xad4i7i1VuAOItLvbPAb69sb0IQ2N57yprvhNIwAP5B6xfKTmjmQ=="
+ },
+ "node_modules/@fastify/fast-json-stringify-compiler": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/@fastify/fast-json-stringify-compiler/-/fast-json-stringify-compiler-4.3.0.tgz",
+ "integrity": "sha512-aZAXGYo6m22Fk1zZzEUKBvut/CIIQe/BapEORnxiD5Qr0kPHqqI69NtEMCme74h+at72sPhbkb4ZrLd1W3KRLA==",
+ "dependencies": {
+ "fast-json-stringify": "^5.7.0"
+ }
+ },
+ "node_modules/@fastify/merge-json-schemas": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/@fastify/merge-json-schemas/-/merge-json-schemas-0.1.1.tgz",
+ "integrity": "sha512-fERDVz7topgNjtXsJTTW1JKLy0rhuLRcquYqNR9rF7OcVpCa2OVW49ZPDIhaRRCaUuvVxI+N416xUoF76HNSXA==",
+ "dependencies": {
+ "fast-deep-equal": "^3.1.3"
+ }
+ },
+ "node_modules/@fastify/middie": {
+ "version": "8.3.1",
+ "resolved": "https://registry.npmjs.org/@fastify/middie/-/middie-8.3.1.tgz",
+ "integrity": "sha512-qrQ8U3iCdjNum3+omnIvAyz21ifFx+Pp5jYW7PJJ7b9ueKTCPXsH6vEvaZQrjEZvOpTnWte+CswfBODWD0NqYQ==",
+ "dependencies": {
+ "@fastify/error": "^3.2.0",
+ "fastify-plugin": "^4.0.0",
+ "path-to-regexp": "^6.1.0",
+ "reusify": "^1.0.4"
+ }
+ },
+ "node_modules/@fastify/send": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/@fastify/send/-/send-2.1.0.tgz",
+ "integrity": "sha512-yNYiY6sDkexoJR0D8IDy3aRP3+L4wdqCpvx5WP+VtEU58sn7USmKynBzDQex5X42Zzvw2gNzzYgP90UfWShLFA==",
+ "dependencies": {
+ "@lukeed/ms": "^2.0.1",
+ "escape-html": "~1.0.3",
+ "fast-decode-uri-component": "^1.0.1",
+ "http-errors": "2.0.0",
+ "mime": "^3.0.0"
+ }
+ },
+ "node_modules/@fastify/static": {
+ "version": "7.0.4",
+ "resolved": "https://registry.npmjs.org/@fastify/static/-/static-7.0.4.tgz",
+ "integrity": "sha512-p2uKtaf8BMOZWLs6wu+Ihg7bWNBdjNgCwDza4MJtTqg+5ovKmcbgbR9Xs5/smZ1YISfzKOCNYmZV8LaCj+eJ1Q==",
+ "dependencies": {
+ "@fastify/accept-negotiator": "^1.0.0",
+ "@fastify/send": "^2.0.0",
+ "content-disposition": "^0.5.3",
+ "fastify-plugin": "^4.0.0",
+ "fastq": "^1.17.0",
+ "glob": "^10.3.4"
+ }
+ },
+ "node_modules/@img/sharp-darwin-arm64": {
+ "version": "0.33.5",
+ "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.33.5.tgz",
+ "integrity": "sha512-UT4p+iz/2H4twwAoLCqfA9UH5pI6DggwKEGuaPy7nCVQ8ZsiY5PIcrRvD1DzuY3qYL07NtIQcWnBSY/heikIFQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ },
+ "optionalDependencies": {
+ "@img/sharp-libvips-darwin-arm64": "1.0.4"
+ }
+ },
+ "node_modules/@img/sharp-darwin-x64": {
+ "version": "0.33.5",
+ "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.33.5.tgz",
+ "integrity": "sha512-fyHac4jIc1ANYGRDxtiqelIbdWkIuQaI84Mv45KvGRRxSAa7o7d1ZKAOBaYbnepLC1WqxfpimdeWfvqqSGwR2Q==",
+ "cpu": [
+ "x64"
+ ],
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ },
+ "optionalDependencies": {
+ "@img/sharp-libvips-darwin-x64": "1.0.4"
+ }
+ },
+ "node_modules/@img/sharp-libvips-darwin-arm64": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.0.4.tgz",
+ "integrity": "sha512-XblONe153h0O2zuFfTAbQYAX2JhYmDHeWikp1LM9Hul9gVPjFY427k6dFEcOL72O01QxQsWi761svJ/ev9xEDg==",
+ "cpu": [
+ "arm64"
+ ],
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ }
+ },
+ "node_modules/@img/sharp-libvips-darwin-x64": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.0.4.tgz",
+ "integrity": "sha512-xnGR8YuZYfJGmWPvmlunFaWJsb9T/AO2ykoP3Fz/0X5XV2aoYBPkX6xqCQvUTKKiLddarLaxpzNe+b1hjeWHAQ==",
+ "cpu": [
+ "x64"
+ ],
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ }
+ },
+ "node_modules/@img/sharp-libvips-linux-arm": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.0.5.tgz",
+ "integrity": "sha512-gvcC4ACAOPRNATg/ov8/MnbxFDJqf/pDePbBnuBDcjsI8PssmjoKMAz4LtLaVi+OnSb5FK/yIOamqDwGmXW32g==",
+ "cpu": [
+ "arm"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ }
+ },
+ "node_modules/@img/sharp-libvips-linux-arm64": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.0.4.tgz",
+ "integrity": "sha512-9B+taZ8DlyyqzZQnoeIvDVR/2F4EbMepXMc/NdVbkzsJbzkUjhXv/70GQJ7tdLA4YJgNP25zukcxpX2/SueNrA==",
+ "cpu": [
+ "arm64"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ }
+ },
+ "node_modules/@img/sharp-libvips-linux-s390x": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.0.4.tgz",
+ "integrity": "sha512-u7Wz6ntiSSgGSGcjZ55im6uvTrOxSIS8/dgoVMoiGE9I6JAfU50yH5BoDlYA1tcuGS7g/QNtetJnxA6QEsCVTA==",
+ "cpu": [
+ "s390x"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ }
+ },
+ "node_modules/@img/sharp-libvips-linux-x64": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.0.4.tgz",
+ "integrity": "sha512-MmWmQ3iPFZr0Iev+BAgVMb3ZyC4KeFc3jFxnNbEPas60e1cIfevbtuyf9nDGIzOaW9PdnDciJm+wFFaTlj5xYw==",
+ "cpu": [
+ "x64"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ }
+ },
+ "node_modules/@img/sharp-libvips-linuxmusl-arm64": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.0.4.tgz",
+ "integrity": "sha512-9Ti+BbTYDcsbp4wfYib8Ctm1ilkugkA/uscUn6UXK1ldpC1JjiXbLfFZtRlBhjPZ5o1NCLiDbg8fhUPKStHoTA==",
+ "cpu": [
+ "arm64"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ }
+ },
+ "node_modules/@img/sharp-libvips-linuxmusl-x64": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.0.4.tgz",
+ "integrity": "sha512-viYN1KX9m+/hGkJtvYYp+CCLgnJXwiQB39damAO7WMdKWlIhmYTfHjwSbQeUK/20vY154mwezd9HflVFM1wVSw==",
+ "cpu": [
+ "x64"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ }
+ },
+ "node_modules/@img/sharp-linux-arm": {
+ "version": "0.33.5",
+ "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.33.5.tgz",
+ "integrity": "sha512-JTS1eldqZbJxjvKaAkxhZmBqPRGmxgu+qFKSInv8moZ2AmT5Yib3EQ1c6gp493HvrvV8QgdOXdyaIBrhvFhBMQ==",
+ "cpu": [
+ "arm"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ },
+ "optionalDependencies": {
+ "@img/sharp-libvips-linux-arm": "1.0.5"
+ }
+ },
+ "node_modules/@img/sharp-linux-arm64": {
+ "version": "0.33.5",
+ "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.33.5.tgz",
+ "integrity": "sha512-JMVv+AMRyGOHtO1RFBiJy/MBsgz0x4AWrT6QoEVVTyh1E39TrCUpTRI7mx9VksGX4awWASxqCYLCV4wBZHAYxA==",
+ "cpu": [
+ "arm64"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ },
+ "optionalDependencies": {
+ "@img/sharp-libvips-linux-arm64": "1.0.4"
+ }
+ },
+ "node_modules/@img/sharp-linux-s390x": {
+ "version": "0.33.5",
+ "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.33.5.tgz",
+ "integrity": "sha512-y/5PCd+mP4CA/sPDKl2961b+C9d+vPAveS33s6Z3zfASk2j5upL6fXVPZi7ztePZ5CuH+1kW8JtvxgbuXHRa4Q==",
+ "cpu": [
+ "s390x"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ },
+ "optionalDependencies": {
+ "@img/sharp-libvips-linux-s390x": "1.0.4"
+ }
+ },
+ "node_modules/@img/sharp-linux-x64": {
+ "version": "0.33.5",
+ "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.33.5.tgz",
+ "integrity": "sha512-opC+Ok5pRNAzuvq1AG0ar+1owsu842/Ab+4qvU879ippJBHvyY5n2mxF1izXqkPYlGuP/M556uh53jRLJmzTWA==",
+ "cpu": [
+ "x64"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ },
+ "optionalDependencies": {
+ "@img/sharp-libvips-linux-x64": "1.0.4"
+ }
+ },
+ "node_modules/@img/sharp-linuxmusl-arm64": {
+ "version": "0.33.5",
+ "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.33.5.tgz",
+ "integrity": "sha512-XrHMZwGQGvJg2V/oRSUfSAfjfPxO+4DkiRh6p2AFjLQztWUuY/o8Mq0eMQVIY7HJ1CDQUJlxGGZRw1a5bqmd1g==",
+ "cpu": [
+ "arm64"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ },
+ "optionalDependencies": {
+ "@img/sharp-libvips-linuxmusl-arm64": "1.0.4"
+ }
+ },
+ "node_modules/@img/sharp-linuxmusl-x64": {
+ "version": "0.33.5",
+ "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.33.5.tgz",
+ "integrity": "sha512-WT+d/cgqKkkKySYmqoZ8y3pxx7lx9vVejxW/W4DOFMYVSkErR+w7mf2u8m/y4+xHe7yY9DAXQMWQhpnMuFfScw==",
+ "cpu": [
+ "x64"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ },
+ "optionalDependencies": {
+ "@img/sharp-libvips-linuxmusl-x64": "1.0.4"
+ }
+ },
+ "node_modules/@img/sharp-wasm32": {
+ "version": "0.33.5",
+ "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.33.5.tgz",
+ "integrity": "sha512-ykUW4LVGaMcU9lu9thv85CbRMAwfeadCJHRsg2GmeRa/cJxsVY9Rbd57JcMxBkKHag5U/x7TSBpScF4U8ElVzg==",
+ "cpu": [
+ "wasm32"
+ ],
+ "optional": true,
+ "dependencies": {
+ "@emnapi/runtime": "^1.2.0"
+ },
+ "engines": {
+ "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ }
+ },
+ "node_modules/@img/sharp-win32-ia32": {
+ "version": "0.33.5",
+ "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.33.5.tgz",
+ "integrity": "sha512-T36PblLaTwuVJ/zw/LaH0PdZkRz5rd3SmMHX8GSmR7vtNSP5Z6bQkExdSK7xGWyxLw4sUknBuugTelgw2faBbQ==",
+ "cpu": [
+ "ia32"
+ ],
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ }
+ },
+ "node_modules/@img/sharp-win32-x64": {
+ "version": "0.33.5",
+ "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.33.5.tgz",
+ "integrity": "sha512-MpY/o8/8kj+EcnxwvrP4aTJSWw/aZ7JIGR4aBeZkZw5B7/Jn+tY9/VNwtcoGmdT7GfggGIU4kygOMSbYnOrAbg==",
+ "cpu": [
+ "x64"
+ ],
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
},
"funding": {
"url": "https://opencollective.com/libvips"
}
},
"node_modules/@inquirer/figures": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/@inquirer/figures/-/figures-1.0.3.tgz",
- "integrity": "sha512-ErXXzENMH5pJt5/ssXV0DfWUZqly8nGzf0UcBV9xTnP+KyffE2mqyxIMBrZ8ijQck2nU0TQm40EQB53YreyWHw==",
- "license": "MIT",
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/@inquirer/figures/-/figures-1.0.5.tgz",
+ "integrity": "sha512-79hP/VWdZ2UVc9bFGJnoQ/lQMpL74mGgzSYX1xUqCVk7/v73vJCMw1VuyWN1jGkZ9B3z7THAbySqGbCNefcjfA==",
"engines": {
"node": ">=18"
}
},
+ "node_modules/@isaacs/cliui": {
+ "version": "8.0.2",
+ "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz",
+ "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==",
+ "dependencies": {
+ "string-width": "^5.1.2",
+ "string-width-cjs": "npm:string-width@^4.2.0",
+ "strip-ansi": "^7.0.1",
+ "strip-ansi-cjs": "npm:strip-ansi@^6.0.1",
+ "wrap-ansi": "^8.1.0",
+ "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@isaacs/cliui/node_modules/emoji-regex": {
+ "version": "9.2.2",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz",
+ "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg=="
+ },
+ "node_modules/@isaacs/cliui/node_modules/string-width": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz",
+ "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==",
+ "dependencies": {
+ "eastasianwidth": "^0.2.0",
+ "emoji-regex": "^9.2.2",
+ "strip-ansi": "^7.0.1"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
"node_modules/@jridgewell/gen-mapping": {
"version": "0.3.5",
- "license": "MIT",
+ "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz",
+ "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==",
"dependencies": {
"@jridgewell/set-array": "^1.2.1",
"@jridgewell/sourcemap-codec": "^1.4.10",
@@ -1492,33 +2159,97 @@
},
"node_modules/@jridgewell/resolve-uri": {
"version": "3.1.2",
- "license": "MIT",
+ "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz",
+ "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==",
"engines": {
"node": ">=6.0.0"
}
},
"node_modules/@jridgewell/set-array": {
"version": "1.2.1",
- "license": "MIT",
+ "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz",
+ "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==",
"engines": {
"node": ">=6.0.0"
}
},
"node_modules/@jridgewell/sourcemap-codec": {
- "version": "1.4.15",
- "license": "MIT"
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz",
+ "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ=="
},
"node_modules/@jridgewell/trace-mapping": {
"version": "0.3.25",
- "license": "MIT",
+ "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz",
+ "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==",
"dependencies": {
"@jridgewell/resolve-uri": "^3.1.0",
"@jridgewell/sourcemap-codec": "^1.4.14"
}
},
+ "node_modules/@jsonjoy.com/base64": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/@jsonjoy.com/base64/-/base64-1.1.2.tgz",
+ "integrity": "sha512-q6XAnWQDIMA3+FTiOYajoYqySkO+JSat0ytXGSuRdq9uXE7o92gzuQwQM14xaCRlBLGq3v5miDGC4vkVTn54xA==",
+ "engines": {
+ "node": ">=10.0"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/streamich"
+ },
+ "peerDependencies": {
+ "tslib": "2"
+ }
+ },
+ "node_modules/@jsonjoy.com/json-pack": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@jsonjoy.com/json-pack/-/json-pack-1.1.0.tgz",
+ "integrity": "sha512-zlQONA+msXPPwHWZMKFVS78ewFczIll5lXiVPwFPCZUsrOKdxc2AvxU1HoNBmMRhqDZUR9HkC3UOm+6pME6Xsg==",
+ "dependencies": {
+ "@jsonjoy.com/base64": "^1.1.1",
+ "@jsonjoy.com/util": "^1.1.2",
+ "hyperdyperid": "^1.2.0",
+ "thingies": "^1.20.0"
+ },
+ "engines": {
+ "node": ">=10.0"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/streamich"
+ },
+ "peerDependencies": {
+ "tslib": "2"
+ }
+ },
+ "node_modules/@jsonjoy.com/util": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/@jsonjoy.com/util/-/util-1.3.0.tgz",
+ "integrity": "sha512-Cebt4Vk7k1xHy87kHY7KSPLT77A7Ev7IfOblyLZhtYEhrdQ6fX4EoLq3xOQ3O/DRMEh2ok5nyC180E+ABS8Wmw==",
+ "engines": {
+ "node": ">=10.0"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/streamich"
+ },
+ "peerDependencies": {
+ "tslib": "2"
+ }
+ },
+ "node_modules/@lukeed/ms": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/@lukeed/ms/-/ms-2.0.2.tgz",
+ "integrity": "sha512-9I2Zn6+NJLfaGoz9jN3lpwDgAYvfGeNYdbAIjJOqzs4Tpc+VU3Jqq4IofSUBKajiDS8k9fZIg18/z13mpk1bsA==",
+ "engines": {
+ "node": ">=8"
+ }
+ },
"node_modules/@nodelib/fs.scandir": {
"version": "2.1.5",
- "license": "MIT",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
+ "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
"dependencies": {
"@nodelib/fs.stat": "2.0.5",
"run-parallel": "^1.1.9"
@@ -1529,14 +2260,16 @@
},
"node_modules/@nodelib/fs.stat": {
"version": "2.0.5",
- "license": "MIT",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
+ "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
"engines": {
"node": ">= 8"
}
},
"node_modules/@nodelib/fs.walk": {
"version": "1.2.8",
- "license": "MIT",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
+ "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
"dependencies": {
"@nodelib/fs.scandir": "2.1.5",
"fastq": "^1.6.0"
@@ -1545,33 +2278,252 @@
"node": ">= 8"
}
},
+ "node_modules/@oslojs/encoding": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/@oslojs/encoding/-/encoding-0.4.1.tgz",
+ "integrity": "sha512-hkjo6MuIK/kQR5CrGNdAPZhS01ZCXuWDRJ187zh6qqF2+yMHZpD9fAYpX8q2bOO6Ryhl3XpCT6kUX76N8hhm4Q=="
+ },
+ "node_modules/@pkgjs/parseargs": {
+ "version": "0.11.0",
+ "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz",
+ "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==",
+ "optional": true,
+ "engines": {
+ "node": ">=14"
+ }
+ },
"node_modules/@popperjs/core": {
"version": "2.11.8",
"resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz",
"integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==",
- "license": "MIT",
"peer": true,
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/popperjs"
}
},
- "node_modules/@rollup/rollup-win32-x64-msvc": {
- "version": "4.18.0",
+ "node_modules/@rollup/pluginutils": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.1.0.tgz",
+ "integrity": "sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g==",
+ "dependencies": {
+ "@types/estree": "^1.0.0",
+ "estree-walker": "^2.0.2",
+ "picomatch": "^2.3.1"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ },
+ "peerDependencies": {
+ "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0"
+ },
+ "peerDependenciesMeta": {
+ "rollup": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@rollup/pluginutils/node_modules/estree-walker": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz",
+ "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w=="
+ },
+ "node_modules/@rollup/rollup-android-arm-eabi": {
+ "version": "4.21.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.21.0.tgz",
+ "integrity": "sha512-WTWD8PfoSAJ+qL87lE7votj3syLavxunWhzCnx3XFxFiI/BA/r3X7MUM8dVrH8rb2r4AiO8jJsr3ZjdaftmnfA==",
+ "cpu": [
+ "arm"
+ ],
+ "optional": true,
+ "os": [
+ "android"
+ ]
+ },
+ "node_modules/@rollup/rollup-android-arm64": {
+ "version": "4.21.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.21.0.tgz",
+ "integrity": "sha512-a1sR2zSK1B4eYkiZu17ZUZhmUQcKjk2/j9Me2IDjk1GHW7LB5Z35LEzj9iJch6gtUfsnvZs1ZNyDW2oZSThrkA==",
+ "cpu": [
+ "arm64"
+ ],
+ "optional": true,
+ "os": [
+ "android"
+ ]
+ },
+ "node_modules/@rollup/rollup-darwin-arm64": {
+ "version": "4.21.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.21.0.tgz",
+ "integrity": "sha512-zOnKWLgDld/svhKO5PD9ozmL6roy5OQ5T4ThvdYZLpiOhEGY+dp2NwUmxK0Ld91LrbjrvtNAE0ERBwjqhZTRAA==",
+ "cpu": [
+ "arm64"
+ ],
+ "optional": true,
+ "os": [
+ "darwin"
+ ]
+ },
+ "node_modules/@rollup/rollup-darwin-x64": {
+ "version": "4.21.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.21.0.tgz",
+ "integrity": "sha512-7doS8br0xAkg48SKE2QNtMSFPFUlRdw9+votl27MvT46vo44ATBmdZdGysOevNELmZlfd+NEa0UYOA8f01WSrg==",
+ "cpu": [
+ "x64"
+ ],
+ "optional": true,
+ "os": [
+ "darwin"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-arm-gnueabihf": {
+ "version": "4.21.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.21.0.tgz",
+ "integrity": "sha512-pWJsfQjNWNGsoCq53KjMtwdJDmh/6NubwQcz52aEwLEuvx08bzcy6tOUuawAOncPnxz/3siRtd8hiQ32G1y8VA==",
+ "cpu": [
+ "arm"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-arm-musleabihf": {
+ "version": "4.21.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.21.0.tgz",
+ "integrity": "sha512-efRIANsz3UHZrnZXuEvxS9LoCOWMGD1rweciD6uJQIx2myN3a8Im1FafZBzh7zk1RJ6oKcR16dU3UPldaKd83w==",
+ "cpu": [
+ "arm"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-arm64-gnu": {
+ "version": "4.21.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.21.0.tgz",
+ "integrity": "sha512-ZrPhydkTVhyeGTW94WJ8pnl1uroqVHM3j3hjdquwAcWnmivjAwOYjTEAuEDeJvGX7xv3Z9GAvrBkEzCgHq9U1w==",
+ "cpu": [
+ "arm64"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-arm64-musl": {
+ "version": "4.21.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.21.0.tgz",
+ "integrity": "sha512-cfaupqd+UEFeURmqNP2eEvXqgbSox/LHOyN9/d2pSdV8xTrjdg3NgOFJCtc1vQ/jEke1qD0IejbBfxleBPHnPw==",
+ "cpu": [
+ "arm64"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-powerpc64le-gnu": {
+ "version": "4.21.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.21.0.tgz",
+ "integrity": "sha512-ZKPan1/RvAhrUylwBXC9t7B2hXdpb/ufeu22pG2psV7RN8roOfGurEghw1ySmX/CmDDHNTDDjY3lo9hRlgtaHg==",
+ "cpu": [
+ "ppc64"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-riscv64-gnu": {
+ "version": "4.21.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.21.0.tgz",
+ "integrity": "sha512-H1eRaCwd5E8eS8leiS+o/NqMdljkcb1d6r2h4fKSsCXQilLKArq6WS7XBLDu80Yz+nMqHVFDquwcVrQmGr28rg==",
+ "cpu": [
+ "riscv64"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-s390x-gnu": {
+ "version": "4.21.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.21.0.tgz",
+ "integrity": "sha512-zJ4hA+3b5tu8u7L58CCSI0A9N1vkfwPhWd/puGXwtZlsB5bTkwDNW/+JCU84+3QYmKpLi+XvHdmrlwUwDA6kqw==",
+ "cpu": [
+ "s390x"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-x64-gnu": {
+ "version": "4.21.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.21.0.tgz",
+ "integrity": "sha512-e2hrvElFIh6kW/UNBQK/kzqMNY5mO+67YtEh9OA65RM5IJXYTWiXjX6fjIiPaqOkBthYF1EqgiZ6OXKcQsM0hg==",
+ "cpu": [
+ "x64"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-x64-musl": {
+ "version": "4.21.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.21.0.tgz",
+ "integrity": "sha512-1vvmgDdUSebVGXWX2lIcgRebqfQSff0hMEkLJyakQ9JQUbLDkEaMsPTLOmyccyC6IJ/l3FZuJbmrBw/u0A0uCQ==",
+ "cpu": [
+ "x64"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-win32-arm64-msvc": {
+ "version": "4.21.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.21.0.tgz",
+ "integrity": "sha512-s5oFkZ/hFcrlAyBTONFY1TWndfyre1wOMwU+6KCpm/iatybvrRgmZVM+vCFwxmC5ZhdlgfE0N4XorsDpi7/4XQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
+ "node_modules/@rollup/rollup-win32-ia32-msvc": {
+ "version": "4.21.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.21.0.tgz",
+ "integrity": "sha512-G9+TEqRnAA6nbpqyUqgTiopmnfgnMkR3kMukFBDsiyy23LZvUCpiUwjTRx6ezYCjJODXrh52rBR9oXvm+Fp5wg==",
+ "cpu": [
+ "ia32"
+ ],
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
+ "node_modules/@rollup/rollup-win32-x64-msvc": {
+ "version": "4.21.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.21.0.tgz",
+ "integrity": "sha512-2jsCDZwtQvRhejHLfZ1JY6w6kEuEtfF9nzYsZxzSlNVKDX+DpsDJ+Rbjkm74nvg2rdx0gwBS+IMdvwJuq3S9pQ==",
"cpu": [
"x64"
],
- "license": "MIT",
"optional": true,
"os": [
"win32"
]
},
"node_modules/@sapphire/async-queue": {
- "version": "1.5.2",
- "resolved": "https://registry.npmjs.org/@sapphire/async-queue/-/async-queue-1.5.2.tgz",
- "integrity": "sha512-7X7FFAA4DngXUl95+hYbUF19bp1LGiffjJtu7ygrZrbdCSsdDDBaSjB7Akw0ZbOu6k0xpXyljnJ6/RZUvLfRdg==",
- "license": "MIT",
+ "version": "1.5.3",
+ "resolved": "https://registry.npmjs.org/@sapphire/async-queue/-/async-queue-1.5.3.tgz",
+ "integrity": "sha512-x7zadcfJGxFka1Q3f8gCts1F0xMwCKbZweM85xECGI0hBTeIZJGGCrHgLggihBoprlQ/hBmDR5LKfIPqnmHM3w==",
"engines": {
"node": ">=v14.0.0",
"npm": ">=7.0.0"
@@ -1581,7 +2533,6 @@
"version": "3.9.7",
"resolved": "https://registry.npmjs.org/@sapphire/shapeshift/-/shapeshift-3.9.7.tgz",
"integrity": "sha512-4It2mxPSr4OGn4HSQWGmhFMsNFGfFVhWeRPCRwbH972Ek2pzfGRZtb0pJ4Ze6oIzcyh2jw7nUDa6qGlWofgd9g==",
- "license": "MIT",
"dependencies": {
"fast-deep-equal": "^3.1.3",
"lodash": "^4.17.21"
@@ -1593,35 +2544,63 @@
"node_modules/@sec-ant/readable-stream": {
"version": "0.4.1",
"resolved": "https://registry.npmjs.org/@sec-ant/readable-stream/-/readable-stream-0.4.1.tgz",
- "integrity": "sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg==",
- "license": "MIT"
+ "integrity": "sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg=="
},
"node_modules/@shikijs/core": {
- "version": "1.10.3",
- "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-1.10.3.tgz",
- "integrity": "sha512-D45PMaBaeDHxww+EkcDQtDAtzv00Gcsp72ukBtaLSmqRvh0WgGMq3Al0rl1QQBZfuneO75NXMIzEZGFitThWbg==",
- "license": "MIT",
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-1.14.1.tgz",
+ "integrity": "sha512-KyHIIpKNaT20FtFPFjCQB5WVSTpLR/n+jQXhWHWVUMm9MaOaG9BGOG0MSyt7yA4+Lm+4c9rTc03tt3nYzeYSfw==",
"dependencies": {
"@types/hast": "^3.0.4"
}
},
"node_modules/@sindresorhus/is": {
- "version": "6.3.1",
- "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-6.3.1.tgz",
- "integrity": "sha512-FX4MfcifwJyFOI2lPoX7PQxCqx8BG1HCho7WdiXwpEQx1Ycij0JxkfYtGK7yqNScrZGSlt6RE6sw8QYoH7eKnQ==",
- "license": "MIT",
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-7.0.0.tgz",
+ "integrity": "sha512-WDTlVTyvFivSOuyvMeedzg2hdoBLZ3f1uNVuEida2Rl9BrfjrIRjWA/VZIrMRLvSwJYCAlCRA3usDt1THytxWQ==",
"engines": {
- "node": ">=16"
+ "node": ">=18"
},
"funding": {
"url": "https://github.com/sindresorhus/is?sponsor=1"
}
},
+ "node_modules/@squidex/squidex": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/@squidex/squidex/-/squidex-1.2.1.tgz",
+ "integrity": "sha512-+M+J0YulxrflMFdX8ebdlC40sqL/HvlFCCnUoLSD39NmiVb7bUPbgO+wlzsP2wzZMYkK0ASSvBKTQSreYX0fSA==",
+ "dependencies": {
+ "@types/url-join": "4.0.1",
+ "@ungap/url-search-params": "0.2.2",
+ "axios": "0.27.2",
+ "form-data": "4.0.0",
+ "js-base64": "3.7.2",
+ "url-join": "4.0.1"
+ }
+ },
+ "node_modules/@squidex/squidex/node_modules/axios": {
+ "version": "0.27.2",
+ "resolved": "https://registry.npmjs.org/axios/-/axios-0.27.2.tgz",
+ "integrity": "sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==",
+ "dependencies": {
+ "follow-redirects": "^1.14.9",
+ "form-data": "^4.0.0"
+ }
+ },
+ "node_modules/@strapi/blocks-react-renderer": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@strapi/blocks-react-renderer/-/blocks-react-renderer-1.0.1.tgz",
+ "integrity": "sha512-oHQNYstM/361oJIKrj6wDFZhDWHg8M8sF7SszqWr8zH2EaoL36ccLq7F2XFWShYQshuKgY+V6axurDaxWo4jQA==",
+ "hasInstallScript": true,
+ "peerDependencies": {
+ "react": "^18.0.0",
+ "react-dom": "^18.0.0"
+ }
+ },
"node_modules/@szmarczak/http-timer": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-5.0.1.tgz",
"integrity": "sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==",
- "license": "MIT",
"dependencies": {
"defer-to-connect": "^2.0.1"
},
@@ -1632,12 +2611,36 @@
"node_modules/@tokenizer/token": {
"version": "0.3.0",
"resolved": "https://registry.npmjs.org/@tokenizer/token/-/token-0.3.0.tgz",
- "integrity": "sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==",
- "license": "MIT"
+ "integrity": "sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A=="
+ },
+ "node_modules/@tsconfig/node10": {
+ "version": "1.0.11",
+ "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz",
+ "integrity": "sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==",
+ "dev": true
+ },
+ "node_modules/@tsconfig/node12": {
+ "version": "1.0.11",
+ "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz",
+ "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==",
+ "dev": true
+ },
+ "node_modules/@tsconfig/node14": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz",
+ "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==",
+ "dev": true
+ },
+ "node_modules/@tsconfig/node16": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz",
+ "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==",
+ "dev": true
},
"node_modules/@types/babel__core": {
"version": "7.20.5",
- "license": "MIT",
+ "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz",
+ "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==",
"dependencies": {
"@babel/parser": "^7.20.7",
"@babel/types": "^7.20.7",
@@ -1648,14 +2651,16 @@
},
"node_modules/@types/babel__generator": {
"version": "7.6.8",
- "license": "MIT",
+ "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.8.tgz",
+ "integrity": "sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==",
"dependencies": {
"@babel/types": "^7.0.0"
}
},
"node_modules/@types/babel__template": {
"version": "7.4.4",
- "license": "MIT",
+ "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz",
+ "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==",
"dependencies": {
"@babel/parser": "^7.1.0",
"@babel/types": "^7.0.0"
@@ -1663,37 +2668,82 @@
},
"node_modules/@types/babel__traverse": {
"version": "7.20.6",
- "license": "MIT",
+ "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.6.tgz",
+ "integrity": "sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==",
"dependencies": {
"@babel/types": "^7.20.7"
}
},
+ "node_modules/@types/body-parser": {
+ "version": "1.19.5",
+ "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz",
+ "integrity": "sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==",
+ "dev": true,
+ "dependencies": {
+ "@types/connect": "*",
+ "@types/node": "*"
+ }
+ },
+ "node_modules/@types/connect": {
+ "version": "3.4.38",
+ "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz",
+ "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==",
+ "dev": true,
+ "dependencies": {
+ "@types/node": "*"
+ }
+ },
"node_modules/@types/content-type": {
"version": "1.1.8",
"resolved": "https://registry.npmjs.org/@types/content-type/-/content-type-1.1.8.tgz",
- "integrity": "sha512-1tBhmVUeso3+ahfyaKluXe38p+94lovUZdoVfQ3OnJo9uJC42JT7CBoN3k9HYhAae+GwiBYmHu+N9FZhOG+2Pg==",
- "license": "MIT"
+ "integrity": "sha512-1tBhmVUeso3+ahfyaKluXe38p+94lovUZdoVfQ3OnJo9uJC42JT7CBoN3k9HYhAae+GwiBYmHu+N9FZhOG+2Pg=="
},
"node_modules/@types/cookie": {
"version": "0.6.0",
- "license": "MIT"
+ "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.6.0.tgz",
+ "integrity": "sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA=="
},
"node_modules/@types/debug": {
"version": "4.1.12",
"resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz",
"integrity": "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==",
- "license": "MIT",
"dependencies": {
"@types/ms": "*"
}
},
"node_modules/@types/estree": {
"version": "1.0.5",
- "license": "MIT"
+ "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz",
+ "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw=="
+ },
+ "node_modules/@types/express": {
+ "version": "4.17.21",
+ "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.21.tgz",
+ "integrity": "sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==",
+ "dev": true,
+ "dependencies": {
+ "@types/body-parser": "*",
+ "@types/express-serve-static-core": "^4.17.33",
+ "@types/qs": "*",
+ "@types/serve-static": "*"
+ }
+ },
+ "node_modules/@types/express-serve-static-core": {
+ "version": "4.19.5",
+ "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.5.tgz",
+ "integrity": "sha512-y6W03tvrACO72aijJ5uF02FRq5cgDR9lUxddQ8vyF+GvmjJQqbzDcJngEjURc+ZsG31VI3hODNZJ2URj86pzmg==",
+ "dev": true,
+ "dependencies": {
+ "@types/node": "*",
+ "@types/qs": "*",
+ "@types/range-parser": "*",
+ "@types/send": "*"
+ }
},
"node_modules/@types/hast": {
"version": "3.0.4",
- "license": "MIT",
+ "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz",
+ "integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==",
"dependencies": {
"@types/unist": "*"
}
@@ -1701,8 +2751,13 @@
"node_modules/@types/http-cache-semantics": {
"version": "4.0.4",
"resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz",
- "integrity": "sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==",
- "license": "MIT"
+ "integrity": "sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA=="
+ },
+ "node_modules/@types/http-errors": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.4.tgz",
+ "integrity": "sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==",
+ "dev": true
},
"node_modules/@types/jquery": {
"version": "3.5.30",
@@ -1717,7 +2772,6 @@
"version": "21.1.7",
"resolved": "https://registry.npmjs.org/@types/jsdom/-/jsdom-21.1.7.tgz",
"integrity": "sha512-yOriVnggzrnQ3a9OKOCxaVuSug3w3/SbOj5i7VwXWZEyUNl3bLF9V3MfxGbZKuwqJOQyRfqXyROBB1CoZLFWzA==",
- "license": "MIT",
"dependencies": {
"@types/node": "*",
"@types/tough-cookie": "*",
@@ -1728,15 +2782,19 @@
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/@types/linkify-it/-/linkify-it-5.0.0.tgz",
"integrity": "sha512-sVDA58zAw4eWAffKOaQH5/5j3XeayukzDk+ewSsnv3p4yJEZHCCzMDiZM8e0OUrRvmpGZ85jf4yDHkHsgBNr9Q==",
- "dev": true,
- "license": "MIT"
+ "dev": true
+ },
+ "node_modules/@types/luxon": {
+ "version": "3.4.2",
+ "resolved": "https://registry.npmjs.org/@types/luxon/-/luxon-3.4.2.tgz",
+ "integrity": "sha512-TifLZlFudklWlMBfhubvgqTXRzLDI5pCbGa4P8a3wPyUQSW+1xQ5eDsreP9DWHX3tjq1ke96uYG/nwundroWcA==",
+ "dev": true
},
"node_modules/@types/markdown-it": {
- "version": "14.1.1",
- "resolved": "https://registry.npmjs.org/@types/markdown-it/-/markdown-it-14.1.1.tgz",
- "integrity": "sha512-4NpsnpYl2Gt1ljyBGrKMxFYAYvpqbnnkgP/i/g+NLpjEUa3obn1XJCur9YbEXKDAkaXqsR1LbDnGEJ0MmKFxfg==",
+ "version": "14.1.2",
+ "resolved": "https://registry.npmjs.org/@types/markdown-it/-/markdown-it-14.1.2.tgz",
+ "integrity": "sha512-promo4eFwuiW+TfGxhi+0x3czqTYJkG8qB17ZUJiVF10Xm7NLVRSLUsfRTU/6h1e24VvRnXCx+hG7li58lkzog==",
"dev": true,
- "license": "MIT",
"dependencies": {
"@types/linkify-it": "^5",
"@types/mdurl": "^2"
@@ -1747,14 +2805,14 @@
"resolved": "https://registry.npmjs.org/@types/markdown-it-attrs/-/markdown-it-attrs-4.1.3.tgz",
"integrity": "sha512-1JsseFdHD6rQHsPcy4W3xx/whxvZ09Z+CqPpnOtrGtpmkFW07N11q7oM383//LtoKv54yn+HGnk6r4ZHUTHJVg==",
"dev": true,
- "license": "MIT",
"dependencies": {
"@types/markdown-it": "*"
}
},
"node_modules/@types/mdast": {
"version": "4.0.4",
- "license": "MIT",
+ "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz",
+ "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==",
"dependencies": {
"@types/unist": "*"
}
@@ -1763,31 +2821,42 @@
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/@types/mdurl/-/mdurl-2.0.0.tgz",
"integrity": "sha512-RGdgjQUZba5p6QEFAVx2OGb8rQDL/cPRG7GiedRzMcJ1tYnUANBncjbSB1NRGwbvjcPeikRABz2nshyPk1bhWg==",
- "dev": true,
- "license": "MIT"
+ "dev": true
+ },
+ "node_modules/@types/mime": {
+ "version": "1.3.5",
+ "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz",
+ "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==",
+ "dev": true
},
"node_modules/@types/ms": {
"version": "0.7.34",
"resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.34.tgz",
- "integrity": "sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==",
- "license": "MIT"
+ "integrity": "sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g=="
+ },
+ "node_modules/@types/multer": {
+ "version": "1.4.11",
+ "resolved": "https://registry.npmjs.org/@types/multer/-/multer-1.4.11.tgz",
+ "integrity": "sha512-svK240gr6LVWvv3YGyhLlA+6LRRWA4mnGIU7RcNmgjBYFl6665wcXrRfxGp5tEPVHUNm5FMcmq7too9bxCwX/w==",
+ "dev": true,
+ "dependencies": {
+ "@types/express": "*"
+ }
},
"node_modules/@types/nlcst": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/@types/nlcst/-/nlcst-2.0.3.tgz",
"integrity": "sha512-vSYNSDe6Ix3q+6Z7ri9lyWqgGhJTmzRjZRqyq15N0Z/1/UnVsno9G/N40NBijoYx2seFDIl0+B2mgAb9mezUCA==",
- "license": "MIT",
"dependencies": {
"@types/unist": "*"
}
},
"node_modules/@types/node": {
- "version": "20.14.9",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.9.tgz",
- "integrity": "sha512-06OCtnTXtWOZBJlRApleWndH4JsRVs1pDCc8dLSQp+7PpUpX3ePdHyeNSFTeSe7FtKyQkrlPvHwJOW3SLd8Oyg==",
- "license": "MIT",
+ "version": "20.16.1",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-20.16.1.tgz",
+ "integrity": "sha512-zJDo7wEadFtSyNz5QITDfRcrhqDvQI1xQNQ0VoizPjM/dVAODqqIUWbJPkvsxmTI0MYRGRikcdjMPhOssnPejQ==",
"dependencies": {
- "undici-types": "~5.26.4"
+ "undici-types": "~6.19.2"
}
},
"node_modules/@types/prop-types": {
@@ -1795,6 +2864,18 @@
"resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.12.tgz",
"integrity": "sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q=="
},
+ "node_modules/@types/qs": {
+ "version": "6.9.15",
+ "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.15.tgz",
+ "integrity": "sha512-uXHQKES6DQKKCLh441Xv/dwxOq1TVS3JPUMlEqoEglvlhR6Mxnlew/Xq/LRVHpLyk7iK3zODe1qYHIMltO7XGg==",
+ "dev": true
+ },
+ "node_modules/@types/range-parser": {
+ "version": "1.2.7",
+ "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz",
+ "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==",
+ "dev": true
+ },
"node_modules/@types/react": {
"version": "18.3.3",
"resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.3.tgz",
@@ -1816,11 +2897,31 @@
"version": "1.2.7",
"resolved": "https://registry.npmjs.org/@types/sax/-/sax-1.2.7.tgz",
"integrity": "sha512-rO73L89PJxeYM3s3pPPjiPgVVcymqU490g0YO5n5By0k2Erzj6tay/4lr1CHAAU4JyOWd1rpQ8bCf6cZfHU96A==",
- "license": "MIT",
"dependencies": {
"@types/node": "*"
}
},
+ "node_modules/@types/send": {
+ "version": "0.17.4",
+ "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz",
+ "integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==",
+ "dev": true,
+ "dependencies": {
+ "@types/mime": "^1",
+ "@types/node": "*"
+ }
+ },
+ "node_modules/@types/serve-static": {
+ "version": "1.15.7",
+ "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.7.tgz",
+ "integrity": "sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==",
+ "dev": true,
+ "dependencies": {
+ "@types/http-errors": "*",
+ "@types/node": "*",
+ "@types/send": "*"
+ }
+ },
"node_modules/@types/sizzle": {
"version": "2.3.8",
"resolved": "https://registry.npmjs.org/@types/sizzle/-/sizzle-2.3.8.tgz",
@@ -1830,16 +2931,27 @@
"node_modules/@types/tough-cookie": {
"version": "4.0.5",
"resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.5.tgz",
- "integrity": "sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==",
- "license": "MIT"
+ "integrity": "sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA=="
},
"node_modules/@types/unist": {
- "version": "3.0.2",
- "license": "MIT"
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz",
+ "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q=="
+ },
+ "node_modules/@types/url-join": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/@types/url-join/-/url-join-4.0.1.tgz",
+ "integrity": "sha512-wDXw9LEEUHyV+7UWy7U315nrJGJ7p1BzaCxDpEoLr789Dk1WDVMMlf3iBfbG2F8NdWnYyFbtTxUn2ZNbm1Q4LQ=="
},
"node_modules/@ungap/structured-clone": {
"version": "1.2.0",
- "license": "ISC"
+ "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz",
+ "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ=="
+ },
+ "node_modules/@ungap/url-search-params": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/@ungap/url-search-params/-/url-search-params-0.2.2.tgz",
+ "integrity": "sha512-qQsguKXZVKdCixOHX9jqnX/K/1HekPDpGKyEcXHT+zR6EjGA7S4boSuelL4uuPv6YfhN0n8c4UxW+v/Z3gM2iw=="
},
"node_modules/@vitejs/plugin-react": {
"version": "4.3.1",
@@ -1860,12 +2972,12 @@
}
},
"node_modules/@vitest/expect": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-2.0.3.tgz",
- "integrity": "sha512-X6AepoOYePM0lDNUPsGXTxgXZAl3EXd0GYe/MZyVE4HzkUqyUVC6S3PrY5mClDJ6/7/7vALLMV3+xD/Ko60Hqg==",
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-2.0.5.tgz",
+ "integrity": "sha512-yHZtwuP7JZivj65Gxoi8upUN2OzHTi3zVfjwdpu2WrvCZPLwsJ2Ey5ILIPccoW23dd/zQBlJ4/dhi7DWNyXCpA==",
"dependencies": {
- "@vitest/spy": "2.0.3",
- "@vitest/utils": "2.0.3",
+ "@vitest/spy": "2.0.5",
+ "@vitest/utils": "2.0.5",
"chai": "^5.1.1",
"tinyrainbow": "^1.2.0"
},
@@ -1874,9 +2986,9 @@
}
},
"node_modules/@vitest/pretty-format": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-2.0.3.tgz",
- "integrity": "sha512-URM4GLsB2xD37nnTyvf6kfObFafxmycCL8un3OC9gaCs5cti2u+5rJdIflZ2fUJUen4NbvF6jCufwViAFLvz1g==",
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-2.0.5.tgz",
+ "integrity": "sha512-h8k+1oWHfwTkyTkb9egzwNMfJAEx4veaPSnMeKbVSjp4euqGSbQlm5+6VHwTr7u4FJslVVsUG5nopCaAYdOmSQ==",
"dependencies": {
"tinyrainbow": "^1.2.0"
},
@@ -1885,11 +2997,11 @@
}
},
"node_modules/@vitest/runner": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-2.0.3.tgz",
- "integrity": "sha512-EmSP4mcjYhAcuBWwqgpjR3FYVeiA4ROzRunqKltWjBfLNs1tnMLtF+qtgd5ClTwkDP6/DGlKJTNa6WxNK0bNYQ==",
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-2.0.5.tgz",
+ "integrity": "sha512-TfRfZa6Bkk9ky4tW0z20WKXFEwwvWhRY+84CnSEtq4+3ZvDlJyY32oNTJtM7AW9ihW90tX/1Q78cb6FjoAs+ig==",
"dependencies": {
- "@vitest/utils": "2.0.3",
+ "@vitest/utils": "2.0.5",
"pathe": "^1.1.2"
},
"funding": {
@@ -1897,11 +3009,11 @@
}
},
"node_modules/@vitest/snapshot": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-2.0.3.tgz",
- "integrity": "sha512-6OyA6v65Oe3tTzoSuRPcU6kh9m+mPL1vQ2jDlPdn9IQoUxl8rXhBnfICNOC+vwxWY684Vt5UPgtcA2aPFBb6wg==",
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-2.0.5.tgz",
+ "integrity": "sha512-SgCPUeDFLaM0mIUHfaArq8fD2WbaXG/zVXjRupthYfYGzc8ztbFbu6dUNOblBG7XLMR1kEhS/DNnfCZ2IhdDew==",
"dependencies": {
- "@vitest/pretty-format": "2.0.3",
+ "@vitest/pretty-format": "2.0.5",
"magic-string": "^0.30.10",
"pathe": "^1.1.2"
},
@@ -1910,9 +3022,9 @@
}
},
"node_modules/@vitest/spy": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-2.0.3.tgz",
- "integrity": "sha512-sfqyAw/ypOXlaj4S+w8689qKM1OyPOqnonqOc9T91DsoHbfN5mU7FdifWWv3MtQFf0lEUstEwR9L/q/M390C+A==",
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-2.0.5.tgz",
+ "integrity": "sha512-c/jdthAhvJdpfVuaexSrnawxZz6pywlTPe84LUB2m/4t3rl2fTo9NFGBG4oWgaD+FTgDDV8hJ/nibT7IfH3JfA==",
"dependencies": {
"tinyspy": "^3.0.0"
},
@@ -1921,11 +3033,11 @@
}
},
"node_modules/@vitest/utils": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-2.0.3.tgz",
- "integrity": "sha512-c/UdELMuHitQbbc/EVctlBaxoYAwQPQdSNwv7z/vHyBKy2edYZaFgptE27BRueZB7eW8po+cllotMNTDpL3HWg==",
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-2.0.5.tgz",
+ "integrity": "sha512-d8HKbqIcya+GR67mkZbrzhS5kKhtp8dQLcmRZLGTscGVg7yImT82cIrhtn2L8+VujWcy6KZweApgNmPsTAO/UQ==",
"dependencies": {
- "@vitest/pretty-format": "2.0.3",
+ "@vitest/pretty-format": "2.0.5",
"estree-walker": "^3.0.3",
"loupe": "^3.1.1",
"tinyrainbow": "^1.2.0"
@@ -1935,23 +3047,21 @@
}
},
"node_modules/@vladfrangu/async_event_emitter": {
- "version": "2.4.0",
- "resolved": "https://registry.npmjs.org/@vladfrangu/async_event_emitter/-/async_event_emitter-2.4.0.tgz",
- "integrity": "sha512-eNb/9DMwNvhhgn1UuQ8Rl90jhj9PBkYH4oQ522TkiWUVWRfbh3PjdOTFkVGNKs5+xUXalkgFrUSwtY8u0g0S4g==",
- "license": "MIT",
+ "version": "2.4.5",
+ "resolved": "https://registry.npmjs.org/@vladfrangu/async_event_emitter/-/async_event_emitter-2.4.5.tgz",
+ "integrity": "sha512-J7T3gUr3Wz0l7Ni1f9upgBZ7+J22/Q1B7dl0X6fG+fTsD+H+31DIosMHj4Um1dWQwqbcQ3oQf+YS2foYkDc9cQ==",
"engines": {
"node": ">=v14.0.0",
"npm": ">=7.0.0"
}
},
"node_modules/@volar/kit": {
- "version": "2.4.0-alpha.15",
- "resolved": "https://registry.npmjs.org/@volar/kit/-/kit-2.4.0-alpha.15.tgz",
- "integrity": "sha512-ZCBErTebCVdzpSo/0wBlrjnZfqQfVIaHUJa3kOQe3TbVR/8Ny/3mij9gSkBTUcSyVtlUFpJpJo/B8aQp0xt/mQ==",
- "license": "MIT",
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/@volar/kit/-/kit-2.4.0.tgz",
+ "integrity": "sha512-uqwtPKhrbnP+3f8hs+ltDYXLZ6Wdbs54IzkaPocasI4aBhqWLht5qXctE1MqpZU52wbH359E0u9nhxEFmyon+w==",
"dependencies": {
- "@volar/language-service": "2.4.0-alpha.15",
- "@volar/typescript": "2.4.0-alpha.15",
+ "@volar/language-service": "2.4.0",
+ "@volar/typescript": "2.4.0",
"typesafe-path": "^0.2.2",
"vscode-languageserver-textdocument": "^1.0.11",
"vscode-uri": "^3.0.8"
@@ -1961,24 +3071,21 @@
}
},
"node_modules/@volar/language-core": {
- "version": "2.4.0-alpha.15",
- "resolved": "https://registry.npmjs.org/@volar/language-core/-/language-core-2.4.0-alpha.15.tgz",
- "integrity": "sha512-mt8z4Fm2WxfQYoQHPcKVjLQV6PgPqyKLbkCVY2cr5RSaamqCHjhKEpsFX66aL4D/7oYguuaUw9Bx03Vt0TpIIA==",
- "license": "MIT",
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/@volar/language-core/-/language-core-2.4.0.tgz",
+ "integrity": "sha512-FTla+khE+sYK0qJP+6hwPAAUwiNHVMph4RUXpxf/FIPKUP61NFrVZorml4mjFShnueR2y9/j8/vnh09YwVdH7A==",
"dependencies": {
- "@volar/source-map": "2.4.0-alpha.15"
+ "@volar/source-map": "2.4.0"
}
},
"node_modules/@volar/language-server": {
- "version": "2.4.0-alpha.15",
- "resolved": "https://registry.npmjs.org/@volar/language-server/-/language-server-2.4.0-alpha.15.tgz",
- "integrity": "sha512-epaF7Rllb29nr25F8hX5bq7ivgStNZzXGkhuPlHCUM+Ij/aQnsBeYQsfm7EttPqqO3abCctpRWyd+icklFEBoQ==",
- "license": "MIT",
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/@volar/language-server/-/language-server-2.4.0.tgz",
+ "integrity": "sha512-rmGIjAxWekWQiGH97Mosb4juiD/hfFYNQKV5Py9r7vDOLSkbIwRhITbwHm88NJKs8P6TNc6w/PfBXN6yjKadJg==",
"dependencies": {
- "@volar/language-core": "2.4.0-alpha.15",
- "@volar/language-service": "2.4.0-alpha.15",
- "@volar/snapshot-document": "2.4.0-alpha.15",
- "@volar/typescript": "2.4.0-alpha.15",
+ "@volar/language-core": "2.4.0",
+ "@volar/language-service": "2.4.0",
+ "@volar/typescript": "2.4.0",
"path-browserify": "^1.0.1",
"request-light": "^0.7.0",
"vscode-languageserver": "^9.0.1",
@@ -1988,40 +3095,27 @@
}
},
"node_modules/@volar/language-service": {
- "version": "2.4.0-alpha.15",
- "resolved": "https://registry.npmjs.org/@volar/language-service/-/language-service-2.4.0-alpha.15.tgz",
- "integrity": "sha512-H5T5JvvqvWhG0PvvKPTM0nczTbTKQ+U87a8r0eahlH/ySi2HvIHO/7PiNKLxKqLNsiT8SX4U3QcGC8ZaNcC07g==",
- "license": "MIT",
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/@volar/language-service/-/language-service-2.4.0.tgz",
+ "integrity": "sha512-4P3yeQXIL68mLfS3n6P3m02IRg3GnLHUU9k/1PCHEfm5FG9bySkDOc72dbBn2vAa2BxOqm18bmmZXrsWuQ5AOw==",
"dependencies": {
- "@volar/language-core": "2.4.0-alpha.15",
+ "@volar/language-core": "2.4.0",
"vscode-languageserver-protocol": "^3.17.5",
"vscode-languageserver-textdocument": "^1.0.11",
"vscode-uri": "^3.0.8"
}
},
- "node_modules/@volar/snapshot-document": {
- "version": "2.4.0-alpha.15",
- "resolved": "https://registry.npmjs.org/@volar/snapshot-document/-/snapshot-document-2.4.0-alpha.15.tgz",
- "integrity": "sha512-8lnX0eZ7/lM+hakO5kspWABi4nijppxTy9XU0f9ns2lZ/JCE0t9EurNNiOaw4MWFO9USr0H72Ut0LCB9o4rpqA==",
- "license": "MIT",
- "dependencies": {
- "vscode-languageserver-protocol": "^3.17.5",
- "vscode-languageserver-textdocument": "^1.0.11"
- }
- },
"node_modules/@volar/source-map": {
- "version": "2.4.0-alpha.15",
- "resolved": "https://registry.npmjs.org/@volar/source-map/-/source-map-2.4.0-alpha.15.tgz",
- "integrity": "sha512-8Htngw5TmBY4L3ClDqBGyfLhsB8EmoEXUH1xydyEtEoK0O6NX5ur4Jw8jgvscTlwzizyl/wsN1vn0cQXVbbXYg==",
- "license": "MIT"
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/@volar/source-map/-/source-map-2.4.0.tgz",
+ "integrity": "sha512-2ceY8/NEZvN6F44TXw2qRP6AQsvCYhV2bxaBPWxV9HqIfkbRydSksTFObCF1DBDNBfKiZTS8G/4vqV6cvjdOIQ=="
},
"node_modules/@volar/typescript": {
- "version": "2.4.0-alpha.15",
- "resolved": "https://registry.npmjs.org/@volar/typescript/-/typescript-2.4.0-alpha.15.tgz",
- "integrity": "sha512-U3StRBbDuxV6Woa4hvGS4kz3XcOzrWUKgFdEFN+ba1x3eaYg7+ytau8ul05xgA+UNGLXXsKur7fTUhDFyISk0w==",
- "license": "MIT",
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/@volar/typescript/-/typescript-2.4.0.tgz",
+ "integrity": "sha512-9zx3lQWgHmVd+JRRAHUSRiEhe4TlzL7U7e6ulWXOxHH/WNYxzKwCvZD7WYWEZFdw4dHfTD9vUR0yPQO6GilCaQ==",
"dependencies": {
- "@volar/language-core": "2.4.0-alpha.15",
+ "@volar/language-core": "2.4.0",
"path-browserify": "^1.0.1",
"vscode-uri": "^3.0.8"
}
@@ -2030,7 +3124,6 @@
"version": "2.9.3",
"resolved": "https://registry.npmjs.org/@vscode/emmet-helper/-/emmet-helper-2.9.3.tgz",
"integrity": "sha512-rB39LHWWPQYYlYfpv9qCoZOVioPCftKXXqrsyqN1mTWZM6dTnONT63Db+03vgrBbHzJN45IrgS/AGxw9iiqfEw==",
- "license": "MIT",
"dependencies": {
"emmet": "^2.4.3",
"jsonc-parser": "^2.3.0",
@@ -2042,18 +3135,33 @@
"node_modules/@vscode/emmet-helper/node_modules/vscode-uri": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-2.1.2.tgz",
- "integrity": "sha512-8TEXQxlldWAuIODdukIb+TR5s+9Ds40eSJrw+1iDDA9IFORPjMELarNQE3myz5XIkWWpdprmJjm1/SxMlWOC8A==",
- "license": "MIT"
+ "integrity": "sha512-8TEXQxlldWAuIODdukIb+TR5s+9Ds40eSJrw+1iDDA9IFORPjMELarNQE3myz5XIkWWpdprmJjm1/SxMlWOC8A=="
},
"node_modules/@vscode/l10n": {
"version": "0.0.18",
"resolved": "https://registry.npmjs.org/@vscode/l10n/-/l10n-0.0.18.tgz",
- "integrity": "sha512-KYSIHVmslkaCDyw013pphY+d7x1qV8IZupYfeIfzNA+nsaWHbn5uPuQRvdRFsa9zFzGeudPuoGoZ1Op4jrJXIQ==",
- "license": "MIT"
+ "integrity": "sha512-KYSIHVmslkaCDyw013pphY+d7x1qV8IZupYfeIfzNA+nsaWHbn5uPuQRvdRFsa9zFzGeudPuoGoZ1Op4jrJXIQ=="
+ },
+ "node_modules/abort-controller": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz",
+ "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==",
+ "dependencies": {
+ "event-target-shim": "^5.0.0"
+ },
+ "engines": {
+ "node": ">=6.5"
+ }
+ },
+ "node_modules/abstract-logging": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/abstract-logging/-/abstract-logging-2.0.1.tgz",
+ "integrity": "sha512-2BjRTZxTPvheOvGbBslFSYOUkr+SjPtOnrLP33f+VIWLzezQpZcqVg7ja3L4dBXmzzgwT+a029jRx5PCi3JuiA=="
},
"node_modules/acorn": {
- "version": "8.12.0",
- "license": "MIT",
+ "version": "8.12.1",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz",
+ "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==",
"bin": {
"acorn": "bin/acorn"
},
@@ -2061,11 +3169,22 @@
"node": ">=0.4.0"
}
},
+ "node_modules/acorn-walk": {
+ "version": "8.3.3",
+ "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.3.tgz",
+ "integrity": "sha512-MxXdReSRhGO7VlFe1bRG/oI7/mdLV9B9JJT0N8vZOhF7gFRR5l3M8W9G8JxmKV+JC5mGqJ0QvqfSOLsCPa4nUw==",
+ "dev": true,
+ "dependencies": {
+ "acorn": "^8.11.0"
+ },
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
"node_modules/adm-zip": {
- "version": "0.5.14",
- "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.5.14.tgz",
- "integrity": "sha512-DnyqqifT4Jrcvb8USYjp6FHtBpEIz1mnXu6pTRHZ0RL69LbQYiO+0lDFg5+OKA7U29oWSs3a/i8fhn8ZcceIWg==",
- "license": "MIT",
+ "version": "0.5.15",
+ "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.5.15.tgz",
+ "integrity": "sha512-jYPWSeOA8EFoZnucrKCNihqBjoEGQSU4HKgHYQgKNEQ0pQF9a/DYuo/+fAxY76k4qe75LUlLWpAM1QWcBMTOKw==",
"engines": {
"node": ">=12.0"
}
@@ -2074,7 +3193,6 @@
"version": "7.1.1",
"resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz",
"integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==",
- "license": "MIT",
"dependencies": {
"debug": "^4.3.4"
},
@@ -2082,25 +3200,75 @@
"node": ">= 14"
}
},
+ "node_modules/ajv": {
+ "version": "8.17.1",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz",
+ "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==",
+ "dependencies": {
+ "fast-deep-equal": "^3.1.3",
+ "fast-uri": "^3.0.1",
+ "json-schema-traverse": "^1.0.0",
+ "require-from-string": "^2.0.2"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/epoberezkin"
+ }
+ },
+ "node_modules/ajv-formats": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz",
+ "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==",
+ "dependencies": {
+ "ajv": "^8.0.0"
+ },
+ "peerDependencies": {
+ "ajv": "^8.0.0"
+ },
+ "peerDependenciesMeta": {
+ "ajv": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/ajv/node_modules/fast-uri": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.1.tgz",
+ "integrity": "sha512-MWipKbbYiYI0UC7cl8m/i/IWTqfC8YXsqjzybjddLsFjStroQzsHXkc73JutMvBiXmOvapk+axIl79ig5t55Bw=="
+ },
"node_modules/amazon-pa-api5-node-ts": {
- "version": "2.1.4",
- "resolved": "https://registry.npmjs.org/amazon-pa-api5-node-ts/-/amazon-pa-api5-node-ts-2.1.4.tgz",
- "integrity": "sha512-T5Kt+YQyrxEHmH+1cGVUSzM3t5xrACGgCPt3xn2FkxcxWU5Q49jyz3KMN0VI14EiU7J4BHpRKPPFsvhsOgAnbA==",
- "license": "Apache-2.0",
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/amazon-pa-api5-node-ts/-/amazon-pa-api5-node-ts-2.3.0.tgz",
+ "integrity": "sha512-dnaBwdoNbSaNwmkaUEjU9qvjZ4l9dzDwu2BbALa8bdy5XCTXuvYLQrwga2M4xDvivK1ldFqR/llUmNrUeOKC0w==",
"dependencies": {
"superagent": "^9.0.0"
}
},
"node_modules/ansi-align": {
"version": "3.0.1",
- "license": "ISC",
+ "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz",
+ "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==",
"dependencies": {
"string-width": "^4.1.0"
}
},
+ "node_modules/ansi-align/node_modules/ansi-regex": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/ansi-align/node_modules/emoji-regex": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="
+ },
"node_modules/ansi-align/node_modules/string-width": {
"version": "4.2.3",
- "license": "MIT",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+ "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
"dependencies": {
"emoji-regex": "^8.0.0",
"is-fullwidth-code-point": "^3.0.0",
@@ -2110,13 +3278,10 @@
"node": ">=8"
}
},
- "node_modules/ansi-align/node_modules/string-width/node_modules/emoji-regex": {
- "version": "8.0.0",
- "license": "MIT"
- },
- "node_modules/ansi-align/node_modules/string-width/node_modules/strip-ansi": {
+ "node_modules/ansi-align/node_modules/strip-ansi": {
"version": "6.0.1",
- "license": "MIT",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
"dependencies": {
"ansi-regex": "^5.0.1"
},
@@ -2124,18 +3289,10 @@
"node": ">=8"
}
},
- "node_modules/ansi-align/node_modules/string-width/node_modules/strip-ansi/node_modules/ansi-regex": {
- "version": "5.0.1",
- "license": "MIT",
- "engines": {
- "node": ">=8"
- }
- },
"node_modules/ansi-colors": {
"version": "4.1.3",
"resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz",
"integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==",
- "license": "MIT",
"engines": {
"node": ">=6"
}
@@ -2144,7 +3301,6 @@
"version": "4.3.2",
"resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz",
"integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==",
- "license": "MIT",
"dependencies": {
"type-fest": "^0.21.3"
},
@@ -2159,7 +3315,6 @@
"version": "0.21.3",
"resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz",
"integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==",
- "license": "(MIT OR CC0-1.0)",
"engines": {
"node": ">=10"
},
@@ -2169,7 +3324,8 @@
},
"node_modules/ansi-regex": {
"version": "6.0.1",
- "license": "MIT",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz",
+ "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==",
"engines": {
"node": ">=12"
},
@@ -2178,18 +3334,20 @@
}
},
"node_modules/ansi-styles": {
- "version": "6.2.1",
- "license": "MIT",
- "engines": {
- "node": ">=12"
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "dependencies": {
+ "color-convert": "^1.9.0"
},
- "funding": {
- "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ "engines": {
+ "node": ">=4"
}
},
"node_modules/anymatch": {
"version": "3.1.3",
- "license": "ISC",
+ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
+ "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
"dependencies": {
"normalize-path": "^3.0.0",
"picomatch": "^2.0.4"
@@ -2198,19 +3356,25 @@
"node": ">= 8"
}
},
+ "node_modules/append-field": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/append-field/-/append-field-1.0.0.tgz",
+ "integrity": "sha512-klpgFSWLW1ZEs8svjfb7g4qWY0YS5imI82dTg+QahUvJ8YqAY0P10Uk8tTyh9ZGuYEZEMaeJYCF5BFuX552hsw=="
+ },
"node_modules/arg": {
"version": "5.0.2",
"resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz",
- "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==",
- "license": "MIT"
+ "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg=="
},
"node_modules/argparse": {
"version": "2.0.1",
- "license": "Python-2.0"
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
+ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q=="
},
"node_modules/aria-query": {
"version": "5.3.0",
- "license": "Apache-2.0",
+ "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz",
+ "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==",
"dependencies": {
"dequal": "^2.0.3"
}
@@ -2219,7 +3383,6 @@
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/array-iterate/-/array-iterate-2.0.1.tgz",
"integrity": "sha512-I1jXZMjAgCMmxT4qxXfPXa6SthSoE8h6gkSI9BGGNv8mP8G/v0blc+qFnZu6K42vTOiuME596QaLO0TP3Lk0xg==",
- "license": "MIT",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/wooorm"
@@ -2228,8 +3391,7 @@
"node_modules/asap": {
"version": "2.0.6",
"resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz",
- "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==",
- "license": "MIT"
+ "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA=="
},
"node_modules/assertion-error": {
"version": "2.0.1",
@@ -2240,34 +3402,34 @@
}
},
"node_modules/astro": {
- "version": "4.11.5",
- "resolved": "https://registry.npmjs.org/astro/-/astro-4.11.5.tgz",
- "integrity": "sha512-TCRhuaLwrxwMhS8S1GG+ZTdrAXigX9C8E/YUTs/r2t+owHxDgwl86IV9xH1IHrCPoqhK6civyAQNOT+GKmkb0A==",
- "license": "MIT",
+ "version": "4.14.2",
+ "resolved": "https://registry.npmjs.org/astro/-/astro-4.14.2.tgz",
+ "integrity": "sha512-x9VeYx8Ih6kYKBMVwwsfRzsZVq30+SUhiawnYQ6+46qQnEx3zH05KcH24HsJMe6dVpHD8HdH7CWR5C4o7Q/jeg==",
"dependencies": {
- "@astrojs/compiler": "^2.8.1",
+ "@astrojs/compiler": "^2.10.2",
"@astrojs/internal-helpers": "0.4.1",
- "@astrojs/markdown-remark": "5.1.1",
+ "@astrojs/markdown-remark": "5.2.0",
"@astrojs/telemetry": "3.1.0",
- "@babel/core": "^7.24.7",
- "@babel/generator": "^7.24.7",
- "@babel/parser": "^7.24.7",
- "@babel/plugin-transform-react-jsx": "^7.24.7",
- "@babel/traverse": "^7.24.7",
- "@babel/types": "^7.24.7",
+ "@babel/core": "^7.25.2",
+ "@babel/generator": "^7.25.0",
+ "@babel/parser": "^7.25.3",
+ "@babel/plugin-transform-react-jsx": "^7.25.2",
+ "@babel/traverse": "^7.25.3",
+ "@babel/types": "^7.25.2",
+ "@oslojs/encoding": "^0.4.1",
+ "@rollup/pluginutils": "^5.1.0",
"@types/babel__core": "^7.20.5",
"@types/cookie": "^0.6.0",
- "acorn": "^8.12.0",
+ "acorn": "^8.12.1",
"aria-query": "^5.3.0",
- "axobject-query": "^4.0.0",
- "boxen": "^7.1.1",
- "chokidar": "^3.6.0",
+ "axobject-query": "^4.1.0",
+ "boxen": "7.1.1",
"ci-info": "^4.0.0",
"clsx": "^2.1.1",
"common-ancestor-path": "^1.0.1",
"cookie": "^0.6.0",
"cssesc": "^3.0.0",
- "debug": "^4.3.5",
+ "debug": "^4.3.6",
"deterministic-object-hash": "^2.0.2",
"devalue": "^5.0.0",
"diff": "^5.2.0",
@@ -2285,28 +3447,32 @@
"http-cache-semantics": "^4.1.1",
"js-yaml": "^4.1.0",
"kleur": "^4.1.5",
- "magic-string": "^0.30.10",
+ "magic-string": "^0.30.11",
+ "micromatch": "^4.0.7",
"mrmime": "^2.0.0",
+ "neotraverse": "^0.6.9",
"ora": "^8.0.1",
- "p-limit": "^5.0.0",
+ "p-limit": "^6.1.0",
"p-queue": "^8.0.1",
"path-to-regexp": "^6.2.2",
- "preferred-pm": "^3.1.3",
+ "preferred-pm": "^4.0.0",
"prompts": "^2.4.2",
"rehype": "^13.0.1",
- "semver": "^7.6.2",
- "shiki": "^1.10.0",
+ "semver": "^7.6.3",
+ "shiki": "^1.12.1",
"string-width": "^7.2.0",
"strip-ansi": "^7.1.0",
"tsconfck": "^3.1.1",
"unist-util-visit": "^5.0.0",
- "vfile": "^6.0.1",
- "vite": "^5.3.2",
+ "vfile": "^6.0.2",
+ "vite": "^5.4.0",
"vitefu": "^0.2.5",
- "which-pm": "^2.2.0",
+ "which-pm": "^3.0.0",
+ "xxhash-wasm": "^1.0.2",
"yargs-parser": "^21.1.1",
"zod": "^3.23.8",
- "zod-to-json-schema": "^3.23.1"
+ "zod-to-json-schema": "^3.23.2",
+ "zod-to-ts": "^1.2.0"
},
"bin": {
"astro": "astro.js"
@@ -2320,22 +3486,61 @@
"sharp": "^0.33.3"
}
},
+ "node_modules/astro/node_modules/semver": {
+ "version": "7.6.3",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz",
+ "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==",
+ "bin": {
+ "semver": "bin/semver.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
"node_modules/asynckit": {
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
- "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==",
- "license": "MIT"
+ "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="
+ },
+ "node_modules/atomic-sleep": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/atomic-sleep/-/atomic-sleep-1.0.0.tgz",
+ "integrity": "sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==",
+ "engines": {
+ "node": ">=8.0.0"
+ }
+ },
+ "node_modules/avvio": {
+ "version": "8.4.0",
+ "resolved": "https://registry.npmjs.org/avvio/-/avvio-8.4.0.tgz",
+ "integrity": "sha512-CDSwaxINFy59iNwhYnkvALBwZiTydGkOecZyPkqBpABYR1KqGEsET0VOOYDwtleZSUIdeY36DC2bSZ24CO1igA==",
+ "dependencies": {
+ "@fastify/error": "^3.3.0",
+ "fastq": "^1.17.1"
+ }
+ },
+ "node_modules/axios": {
+ "version": "1.7.4",
+ "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.4.tgz",
+ "integrity": "sha512-DukmaFRnY6AzAALSH4J2M3k6PkaC+MfaAGdEERRWcC9q3/TWQwLpHR8ZRLKTdQ3aBDL64EdluRDjJqKw+BPZEw==",
+ "dependencies": {
+ "follow-redirects": "^1.15.6",
+ "form-data": "^4.0.0",
+ "proxy-from-env": "^1.1.0"
+ }
},
"node_modules/axobject-query": {
- "version": "4.0.0",
- "license": "Apache-2.0",
- "dependencies": {
- "dequal": "^2.0.3"
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.1.0.tgz",
+ "integrity": "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==",
+ "engines": {
+ "node": ">= 0.4"
}
},
"node_modules/bail": {
"version": "2.0.2",
- "license": "MIT",
+ "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz",
+ "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/wooorm"
@@ -2344,12 +3549,12 @@
"node_modules/balanced-match": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
- "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
- "license": "MIT"
+ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="
},
"node_modules/base-64": {
"version": "1.0.0",
- "license": "MIT"
+ "resolved": "https://registry.npmjs.org/base-64/-/base-64-1.0.0.tgz",
+ "integrity": "sha512-kwDPIFCGx0NZHog36dj+tHiwP4QMzsZ3AgMViUBKI0+V5n4U0ufTCUMhnQ04diaRI8EX/QcPfql7zlhZ7j4zgg=="
},
"node_modules/base64-js": {
"version": "1.5.1",
@@ -2368,12 +3573,12 @@
"type": "consulting",
"url": "https://feross.org/support"
}
- ],
- "license": "MIT"
+ ]
},
"node_modules/binary-extensions": {
"version": "2.3.0",
- "license": "MIT",
+ "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz",
+ "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==",
"engines": {
"node": ">=8"
},
@@ -2385,18 +3590,29 @@
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz",
"integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==",
- "license": "MIT",
"dependencies": {
"buffer": "^5.5.0",
"inherits": "^2.0.4",
"readable-stream": "^3.4.0"
}
},
+ "node_modules/bl/node_modules/readable-stream": {
+ "version": "3.6.2",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz",
+ "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
+ "dependencies": {
+ "inherits": "^2.0.3",
+ "string_decoder": "^1.1.1",
+ "util-deprecate": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
"node_modules/boolbase": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz",
- "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==",
- "license": "ISC"
+ "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww=="
},
"node_modules/bootstrap": {
"version": "5.3.3",
@@ -2412,14 +3628,14 @@
"url": "https://opencollective.com/bootstrap"
}
],
- "license": "MIT",
"peerDependencies": {
"@popperjs/core": "^2.11.8"
}
},
"node_modules/boxen": {
"version": "7.1.1",
- "license": "MIT",
+ "resolved": "https://registry.npmjs.org/boxen/-/boxen-7.1.1.tgz",
+ "integrity": "sha512-2hCgjEmP8YLWQ130n2FerGv7rYpfBmnmp9Uy2Le1vge6X3gZIfSmEzP5QTDElFxcvVcXlEn8Aq6MU/PZygIOog==",
"dependencies": {
"ansi-align": "^3.0.1",
"camelcase": "^7.0.1",
@@ -2437,9 +3653,26 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/boxen/node_modules/chalk": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz",
+ "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==",
+ "engines": {
+ "node": "^12.17.0 || ^14.13 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/boxen/node_modules/emoji-regex": {
+ "version": "9.2.2",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz",
+ "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg=="
+ },
"node_modules/boxen/node_modules/string-width": {
"version": "5.1.2",
- "license": "MIT",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz",
+ "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==",
"dependencies": {
"eastasianwidth": "^0.2.0",
"emoji-regex": "^9.2.2",
@@ -2452,22 +3685,18 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/boxen/node_modules/string-width/node_modules/emoji-regex": {
- "version": "9.2.2",
- "license": "MIT"
- },
"node_modules/brace-expansion": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
"integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
- "license": "MIT",
"dependencies": {
"balanced-match": "^1.0.0"
}
},
"node_modules/braces": {
"version": "3.0.3",
- "license": "MIT",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz",
+ "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
"dependencies": {
"fill-range": "^7.1.1"
},
@@ -2476,7 +3705,9 @@
}
},
"node_modules/browserslist": {
- "version": "4.23.1",
+ "version": "4.23.3",
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.3.tgz",
+ "integrity": "sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA==",
"funding": [
{
"type": "opencollective",
@@ -2491,12 +3722,11 @@
"url": "https://github.com/sponsors/ai"
}
],
- "license": "MIT",
"dependencies": {
- "caniuse-lite": "^1.0.30001629",
- "electron-to-chromium": "^1.4.796",
- "node-releases": "^2.0.14",
- "update-browserslist-db": "^1.0.16"
+ "caniuse-lite": "^1.0.30001646",
+ "electron-to-chromium": "^1.5.4",
+ "node-releases": "^2.0.18",
+ "update-browserslist-db": "^1.1.0"
},
"bin": {
"browserslist": "cli.js"
@@ -2523,12 +3753,27 @@
"url": "https://feross.org/support"
}
],
- "license": "MIT",
"dependencies": {
"base64-js": "^1.3.1",
"ieee754": "^1.1.13"
}
},
+ "node_modules/buffer-from": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
+ "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ=="
+ },
+ "node_modules/busboy": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz",
+ "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==",
+ "dependencies": {
+ "streamsearch": "^1.1.0"
+ },
+ "engines": {
+ "node": ">=10.16.0"
+ }
+ },
"node_modules/cac": {
"version": "6.7.14",
"resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz",
@@ -2541,7 +3786,6 @@
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-7.0.0.tgz",
"integrity": "sha512-+qJyx4xiKra8mZrcwhjMRMUhD5NR1R8esPkzIYxX96JiecFoxAXFuz/GpR3+ev4PE1WamHip78wV0vcmPQtp8w==",
- "license": "MIT",
"engines": {
"node": ">=14.16"
}
@@ -2550,7 +3794,6 @@
"version": "12.0.1",
"resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-12.0.1.tgz",
"integrity": "sha512-Yo9wGIQUaAfIbk+qY0X4cDQgCosecfBe3V9NSyeY4qPC2SAkbCS4Xj79VP8WOzitpJUZKc/wsRCYF5ariDIwkg==",
- "license": "MIT",
"dependencies": {
"@types/http-cache-semantics": "^4.0.4",
"get-stream": "^9.0.1",
@@ -2568,7 +3811,6 @@
"version": "9.0.1",
"resolved": "https://registry.npmjs.org/get-stream/-/get-stream-9.0.1.tgz",
"integrity": "sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA==",
- "license": "MIT",
"dependencies": {
"@sec-ant/readable-stream": "^0.4.1",
"is-stream": "^4.0.1"
@@ -2584,7 +3826,6 @@
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/is-stream/-/is-stream-4.0.1.tgz",
"integrity": "sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A==",
- "license": "MIT",
"engines": {
"node": ">=18"
},
@@ -2596,7 +3837,6 @@
"version": "1.0.7",
"resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz",
"integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==",
- "license": "MIT",
"dependencies": {
"es-define-property": "^1.0.0",
"es-errors": "^1.3.0",
@@ -2615,14 +3855,14 @@
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
"integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
- "license": "MIT",
"engines": {
"node": ">=6"
}
},
"node_modules/camelcase": {
"version": "7.0.1",
- "license": "MIT",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-7.0.1.tgz",
+ "integrity": "sha512-xlx1yCK2Oc1APsPXDL2LdlNP6+uu8OCDdhOBSVT279M/S+y75O30C2VuD8T2ogdePBBl7PfPF4504tnLgX3zfw==",
"engines": {
"node": ">=14.16"
},
@@ -2631,7 +3871,9 @@
}
},
"node_modules/caniuse-lite": {
- "version": "1.0.30001636",
+ "version": "1.0.30001651",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001651.tgz",
+ "integrity": "sha512-9Cf+Xv1jJNe1xPZLGuUXLNkE1BoDkqRqYyFJ9TDYSqhduqA4hu4oR9HluGoWYQC/aj8WHjsGVV+bwkh0+tegRg==",
"funding": [
{
"type": "opencollective",
@@ -2645,12 +3887,12 @@
"type": "github",
"url": "https://github.com/sponsors/ai"
}
- ],
- "license": "CC-BY-4.0"
+ ]
},
"node_modules/ccount": {
"version": "2.0.1",
- "license": "MIT",
+ "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz",
+ "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/wooorm"
@@ -2672,20 +3914,22 @@
}
},
"node_modules/chalk": {
- "version": "5.3.0",
- "license": "MIT",
- "engines": {
- "node": "^12.17.0 || ^14.13 || >=16.0.0"
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dependencies": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
},
- "funding": {
- "url": "https://github.com/chalk/chalk?sponsor=1"
+ "engines": {
+ "node": ">=4"
}
},
"node_modules/character-entities": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz",
"integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==",
- "license": "MIT",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/wooorm"
@@ -2693,7 +3937,8 @@
},
"node_modules/character-entities-html4": {
"version": "2.1.0",
- "license": "MIT",
+ "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-2.1.0.tgz",
+ "integrity": "sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/wooorm"
@@ -2701,7 +3946,8 @@
},
"node_modules/character-entities-legacy": {
"version": "3.0.0",
- "license": "MIT",
+ "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz",
+ "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/wooorm"
@@ -2710,8 +3956,7 @@
"node_modules/chardet": {
"version": "0.7.0",
"resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz",
- "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==",
- "license": "MIT"
+ "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA=="
},
"node_modules/check-error": {
"version": "2.1.1",
@@ -2722,21 +3967,24 @@
}
},
"node_modules/cheerio": {
- "version": "1.0.0-rc.12",
- "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.12.tgz",
- "integrity": "sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q==",
- "license": "MIT",
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0.tgz",
+ "integrity": "sha512-quS9HgjQpdaXOvsZz82Oz7uxtXiy6UIsIQcpBj7HRw2M63Skasm9qlDocAM7jNuaxdhpPU7c4kJN+gA5MCu4ww==",
"dependencies": {
"cheerio-select": "^2.1.0",
"dom-serializer": "^2.0.0",
"domhandler": "^5.0.3",
- "domutils": "^3.0.1",
- "htmlparser2": "^8.0.1",
- "parse5": "^7.0.0",
- "parse5-htmlparser2-tree-adapter": "^7.0.0"
+ "domutils": "^3.1.0",
+ "encoding-sniffer": "^0.2.0",
+ "htmlparser2": "^9.1.0",
+ "parse5": "^7.1.2",
+ "parse5-htmlparser2-tree-adapter": "^7.0.0",
+ "parse5-parser-stream": "^7.1.2",
+ "undici": "^6.19.5",
+ "whatwg-mimetype": "^4.0.0"
},
"engines": {
- "node": ">= 6"
+ "node": ">=18.17"
},
"funding": {
"url": "https://github.com/cheeriojs/cheerio?sponsor=1"
@@ -2746,7 +3994,6 @@
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-2.1.0.tgz",
"integrity": "sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==",
- "license": "BSD-2-Clause",
"dependencies": {
"boolbase": "^1.0.0",
"css-select": "^5.1.0",
@@ -2761,7 +4008,8 @@
},
"node_modules/chokidar": {
"version": "3.6.0",
- "license": "MIT",
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz",
+ "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==",
"dependencies": {
"anymatch": "~3.1.2",
"braces": "~3.0.2",
@@ -2783,20 +4031,22 @@
},
"node_modules/ci-info": {
"version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.0.0.tgz",
+ "integrity": "sha512-TdHqgGf9odd8SXNuxtUBVx8Nv+qZOejE6qyqiy5NtbYYQOeFa6zmHkxlPzmaLxWWHsU6nJmB7AETdVPi+2NBUg==",
"funding": [
{
"type": "github",
"url": "https://github.com/sponsors/sibiraj-s"
}
],
- "license": "MIT",
"engines": {
"node": ">=8"
}
},
"node_modules/cli-boxes": {
"version": "3.0.0",
- "license": "MIT",
+ "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-3.0.0.tgz",
+ "integrity": "sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==",
"engines": {
"node": ">=10"
},
@@ -2805,21 +4055,20 @@
}
},
"node_modules/cli-cursor": {
- "version": "4.0.0",
- "license": "MIT",
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz",
+ "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==",
"dependencies": {
- "restore-cursor": "^4.0.0"
+ "restore-cursor": "^3.1.0"
},
"engines": {
- "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
+ "node": ">=8"
}
},
"node_modules/cli-spinners": {
"version": "2.9.2",
- "license": "MIT",
+ "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz",
+ "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==",
"engines": {
"node": ">=6"
},
@@ -2831,14 +4080,14 @@
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz",
"integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==",
- "license": "ISC",
"engines": {
"node": ">= 10"
}
},
"node_modules/cliui": {
"version": "8.0.1",
- "license": "ISC",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz",
+ "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==",
"dependencies": {
"string-width": "^4.2.0",
"strip-ansi": "^6.0.1",
@@ -2848,9 +4097,53 @@
"node": ">=12"
}
},
+ "node_modules/cliui/node_modules/ansi-regex": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/cliui/node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/cliui/node_modules/color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dependencies": {
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
+ },
+ "node_modules/cliui/node_modules/color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
+ },
+ "node_modules/cliui/node_modules/emoji-regex": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="
+ },
"node_modules/cliui/node_modules/string-width": {
"version": "4.2.3",
- "license": "MIT",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+ "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
"dependencies": {
"emoji-regex": "^8.0.0",
"is-fullwidth-code-point": "^3.0.0",
@@ -2860,13 +4153,10 @@
"node": ">=8"
}
},
- "node_modules/cliui/node_modules/string-width/node_modules/emoji-regex": {
- "version": "8.0.0",
- "license": "MIT"
- },
"node_modules/cliui/node_modules/strip-ansi": {
"version": "6.0.1",
- "license": "MIT",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
"dependencies": {
"ansi-regex": "^5.0.1"
},
@@ -2874,16 +4164,10 @@
"node": ">=8"
}
},
- "node_modules/cliui/node_modules/strip-ansi/node_modules/ansi-regex": {
- "version": "5.0.1",
- "license": "MIT",
- "engines": {
- "node": ">=8"
- }
- },
"node_modules/cliui/node_modules/wrap-ansi": {
"version": "7.0.0",
- "license": "MIT",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
+ "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
"dependencies": {
"ansi-styles": "^4.0.0",
"string-width": "^4.1.0",
@@ -2896,38 +4180,26 @@
"url": "https://github.com/chalk/wrap-ansi?sponsor=1"
}
},
- "node_modules/cliui/node_modules/wrap-ansi/node_modules/ansi-styles": {
- "version": "4.3.0",
- "license": "MIT",
- "dependencies": {
- "color-convert": "^2.0.1"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-styles?sponsor=1"
- }
- },
"node_modules/clone": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz",
"integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==",
- "license": "MIT",
"engines": {
"node": ">=0.8"
}
},
"node_modules/clsx": {
"version": "2.1.1",
- "license": "MIT",
+ "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz",
+ "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==",
"engines": {
"node": ">=6"
}
},
"node_modules/color": {
"version": "4.2.3",
- "license": "MIT",
+ "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz",
+ "integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==",
"optional": true,
"dependencies": {
"color-convert": "^2.0.1",
@@ -2938,8 +4210,33 @@
}
},
"node_modules/color-convert": {
+ "version": "1.9.3",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
+ "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
+ "dependencies": {
+ "color-name": "1.1.3"
+ }
+ },
+ "node_modules/color-name": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
+ "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw=="
+ },
+ "node_modules/color-string": {
+ "version": "1.9.1",
+ "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz",
+ "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==",
+ "optional": true,
+ "dependencies": {
+ "color-name": "^1.0.0",
+ "simple-swizzle": "^0.2.2"
+ }
+ },
+ "node_modules/color/node_modules/color-convert": {
"version": "2.0.1",
- "license": "MIT",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "optional": true,
"dependencies": {
"color-name": "~1.1.4"
},
@@ -2947,24 +4244,16 @@
"node": ">=7.0.0"
}
},
- "node_modules/color-name": {
+ "node_modules/color/node_modules/color-name": {
"version": "1.1.4",
- "license": "MIT"
- },
- "node_modules/color-string": {
- "version": "1.9.1",
- "license": "MIT",
- "optional": true,
- "dependencies": {
- "color-name": "^1.0.0",
- "simple-swizzle": "^0.2.2"
- }
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "optional": true
},
"node_modules/combined-stream": {
"version": "1.0.8",
"resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
"integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
- "license": "MIT",
"dependencies": {
"delayed-stream": "~1.0.0"
},
@@ -2974,41 +4263,76 @@
},
"node_modules/comma-separated-tokens": {
"version": "2.0.3",
- "license": "MIT",
+ "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz",
+ "integrity": "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/wooorm"
}
},
+ "node_modules/commander": {
+ "version": "12.1.0",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz",
+ "integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==",
+ "engines": {
+ "node": ">=18"
+ }
+ },
"node_modules/common-ancestor-path": {
"version": "1.0.1",
- "license": "ISC"
+ "resolved": "https://registry.npmjs.org/common-ancestor-path/-/common-ancestor-path-1.0.1.tgz",
+ "integrity": "sha512-L3sHRo1pXXEqX8VU28kfgUY+YGsk09hPqZiZmLacNib6XNTCM8ubYeT7ryXQw8asB1sKgcU5lkB7ONug08aB8w=="
},
"node_modules/component-emitter": {
"version": "1.3.1",
"resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.1.tgz",
"integrity": "sha512-T0+barUSQRTUQASh8bx02dl+DhF54GtIDY13Y3m9oWTklKbb3Wv974meRpeZ3lp1JpLVECWWNHC4vaG2XHXouQ==",
- "license": "MIT",
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/concat-stream": {
+ "version": "1.6.2",
+ "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz",
+ "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==",
+ "engines": [
+ "node >= 0.8"
+ ],
+ "dependencies": {
+ "buffer-from": "^1.0.0",
+ "inherits": "^2.0.3",
+ "readable-stream": "^2.2.2",
+ "typedarray": "^0.0.6"
+ }
+ },
+ "node_modules/content-disposition": {
+ "version": "0.5.4",
+ "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz",
+ "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==",
+ "dependencies": {
+ "safe-buffer": "5.2.1"
+ },
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
"node_modules/content-type": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz",
"integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==",
- "license": "MIT",
"engines": {
"node": ">= 0.6"
}
},
"node_modules/convert-source-map": {
"version": "2.0.0",
- "license": "MIT"
+ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz",
+ "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg=="
},
"node_modules/cookie": {
"version": "0.6.0",
- "license": "MIT",
+ "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz",
+ "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==",
"engines": {
"node": ">= 0.6"
}
@@ -3016,27 +4340,30 @@
"node_modules/cookiejar": {
"version": "2.1.4",
"resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.4.tgz",
- "integrity": "sha512-LDx6oHrK+PhzLKJU9j5S7/Y3jM/mUHvD/DeI1WQmJn652iPC5Y4TBzC9l+5OMOXlyTTA+SmVUPm0HQUwpD5Jqw==",
- "license": "MIT"
+ "integrity": "sha512-LDx6oHrK+PhzLKJU9j5S7/Y3jM/mUHvD/DeI1WQmJn652iPC5Y4TBzC9l+5OMOXlyTTA+SmVUPm0HQUwpD5Jqw=="
+ },
+ "node_modules/core-util-is": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz",
+ "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ=="
},
"node_modules/crawlee": {
- "version": "3.10.5",
- "resolved": "https://registry.npmjs.org/crawlee/-/crawlee-3.10.5.tgz",
- "integrity": "sha512-gQEBJPnm+uUBEE4wgKJ/0lfpBClrOlu84iCfQ8u1YXkchTbPgsJHRfoZlVfgiynq6HkxSbT8gHYGNfIvFNA8Tg==",
- "license": "Apache-2.0",
+ "version": "3.11.1",
+ "resolved": "https://registry.npmjs.org/crawlee/-/crawlee-3.11.1.tgz",
+ "integrity": "sha512-8YS4qM7k0O/dr5aLJvCUK/V/9wrVtauIc2DQZ12TDy+Lr9Sal6jlHUNRiMSwfo0L3kFopZCppuagtFvMwu6lXw==",
"dependencies": {
- "@crawlee/basic": "3.10.5",
- "@crawlee/browser": "3.10.5",
- "@crawlee/browser-pool": "3.10.5",
- "@crawlee/cheerio": "3.10.5",
- "@crawlee/cli": "3.10.5",
- "@crawlee/core": "3.10.5",
- "@crawlee/http": "3.10.5",
- "@crawlee/jsdom": "3.10.5",
- "@crawlee/linkedom": "3.10.5",
- "@crawlee/playwright": "3.10.5",
- "@crawlee/puppeteer": "3.10.5",
- "@crawlee/utils": "3.10.5",
+ "@crawlee/basic": "3.11.1",
+ "@crawlee/browser": "3.11.1",
+ "@crawlee/browser-pool": "3.11.1",
+ "@crawlee/cheerio": "3.11.1",
+ "@crawlee/cli": "3.11.1",
+ "@crawlee/core": "3.11.1",
+ "@crawlee/http": "3.11.1",
+ "@crawlee/jsdom": "3.11.1",
+ "@crawlee/linkedom": "3.11.1",
+ "@crawlee/playwright": "3.11.1",
+ "@crawlee/puppeteer": "3.11.1",
+ "@crawlee/utils": "3.11.1",
"import-local": "^3.1.0",
"tslib": "^2.4.0"
},
@@ -3059,9 +4386,16 @@
}
}
},
+ "node_modules/create-require": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz",
+ "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==",
+ "dev": true
+ },
"node_modules/cross-spawn": {
"version": "7.0.3",
- "license": "MIT",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
+ "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
"dependencies": {
"path-key": "^3.1.0",
"shebang-command": "^2.0.0",
@@ -3075,7 +4409,6 @@
"version": "5.1.0",
"resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz",
"integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==",
- "license": "BSD-2-Clause",
"dependencies": {
"boolbase": "^1.0.0",
"css-what": "^6.1.0",
@@ -3091,7 +4424,6 @@
"version": "6.1.0",
"resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz",
"integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==",
- "license": "BSD-2-Clause",
"engines": {
"node": ">= 6"
},
@@ -3101,7 +4433,8 @@
},
"node_modules/cssesc": {
"version": "3.0.0",
- "license": "MIT",
+ "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz",
+ "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==",
"bin": {
"cssesc": "bin/cssesc"
},
@@ -3112,14 +4445,12 @@
"node_modules/cssom": {
"version": "0.5.0",
"resolved": "https://registry.npmjs.org/cssom/-/cssom-0.5.0.tgz",
- "integrity": "sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw==",
- "license": "MIT"
+ "integrity": "sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw=="
},
"node_modules/cssstyle": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-4.0.1.tgz",
"integrity": "sha512-8ZYiJ3A/3OkDd093CBT/0UKDWry7ak4BdPTFP2+QEP7cmhouyq/Up709ASSj2cK02BbZiMgk7kYjZNS4QP5qrQ==",
- "license": "MIT",
"dependencies": {
"rrweb-cssom": "^0.6.0"
},
@@ -3130,8 +4461,7 @@
"node_modules/cssstyle/node_modules/rrweb-cssom": {
"version": "0.6.0",
"resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.6.0.tgz",
- "integrity": "sha512-APM0Gt1KoXBz0iIkkdB/kfvGOwC4UuJFeG/c+yV7wSc7q96cG/kJ0HiYCnzivD9SB53cLV1MlHFNfOuPaadYSw==",
- "license": "MIT"
+ "integrity": "sha512-APM0Gt1KoXBz0iIkkdB/kfvGOwC4UuJFeG/c+yV7wSc7q96cG/kJ0HiYCnzivD9SB53cLV1MlHFNfOuPaadYSw=="
},
"node_modules/csstype": {
"version": "3.1.3",
@@ -3139,16 +4469,14 @@
"integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw=="
},
"node_modules/csv-stringify": {
- "version": "6.5.0",
- "resolved": "https://registry.npmjs.org/csv-stringify/-/csv-stringify-6.5.0.tgz",
- "integrity": "sha512-edlXFVKcUx7r8Vx5zQucsuMg4wb/xT6qyz+Sr1vnLrdXqlLD1+UKyWNyZ9zn6mUW1ewmGxrpVwAcChGF0HQ/2Q==",
- "license": "MIT"
+ "version": "6.5.1",
+ "resolved": "https://registry.npmjs.org/csv-stringify/-/csv-stringify-6.5.1.tgz",
+ "integrity": "sha512-+9lpZfwpLntpTIEpFbwQyWuW/hmI/eHuJZD1XzeZpfZTqkf1fyvBbBLXTJJMsBuuS11uTShMqPwzx4A6ffXgRQ=="
},
"node_modules/data-urls": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/data-urls/-/data-urls-5.0.0.tgz",
"integrity": "sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg==",
- "license": "MIT",
"dependencies": {
"whatwg-mimetype": "^4.0.0",
"whatwg-url": "^14.0.0"
@@ -3158,8 +4486,9 @@
}
},
"node_modules/debug": {
- "version": "4.3.5",
- "license": "MIT",
+ "version": "4.3.6",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz",
+ "integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==",
"dependencies": {
"ms": "2.1.2"
},
@@ -3175,14 +4504,12 @@
"node_modules/decimal.js": {
"version": "10.4.3",
"resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz",
- "integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==",
- "license": "MIT"
+ "integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA=="
},
"node_modules/decode-named-character-reference": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.0.2.tgz",
"integrity": "sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==",
- "license": "MIT",
"dependencies": {
"character-entities": "^2.0.0"
},
@@ -3195,7 +4522,6 @@
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz",
"integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==",
- "license": "MIT",
"dependencies": {
"mimic-response": "^3.1.0"
},
@@ -3210,7 +4536,6 @@
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz",
"integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==",
- "license": "MIT",
"engines": {
"node": ">=10"
},
@@ -3230,7 +4555,6 @@
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz",
"integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==",
- "license": "MIT",
"dependencies": {
"clone": "^1.0.2"
},
@@ -3242,7 +4566,6 @@
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz",
"integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==",
- "license": "MIT",
"engines": {
"node": ">=10"
}
@@ -3251,7 +4574,6 @@
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz",
"integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==",
- "license": "MIT",
"dependencies": {
"es-define-property": "^1.0.0",
"es-errors": "^1.3.0",
@@ -3268,21 +4590,39 @@
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
"integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==",
- "license": "MIT",
"engines": {
"node": ">=0.4.0"
}
},
+ "node_modules/depd": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
+ "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==",
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
"node_modules/dequal": {
"version": "2.0.3",
- "license": "MIT",
+ "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz",
+ "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==",
"engines": {
"node": ">=6"
}
},
+ "node_modules/destroy": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz",
+ "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==",
+ "engines": {
+ "node": ">= 0.8",
+ "npm": "1.2.8000 || >= 1.4.16"
+ }
+ },
"node_modules/detect-libc": {
"version": "2.0.3",
- "license": "Apache-2.0",
+ "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.3.tgz",
+ "integrity": "sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==",
"optional": true,
"engines": {
"node": ">=8"
@@ -3290,7 +4630,8 @@
},
"node_modules/deterministic-object-hash": {
"version": "2.0.2",
- "license": "MIT",
+ "resolved": "https://registry.npmjs.org/deterministic-object-hash/-/deterministic-object-hash-2.0.2.tgz",
+ "integrity": "sha512-KxektNH63SrbfUyDiwXqRb1rLwKt33AmMv+5Nhsw1kqZ13SJBRTgZHtGbE+hH3a1mVW1cz+4pqSWVPAtLVXTzQ==",
"dependencies": {
"base-64": "^1.0.0"
},
@@ -3300,11 +4641,13 @@
},
"node_modules/devalue": {
"version": "5.0.0",
- "license": "MIT"
+ "resolved": "https://registry.npmjs.org/devalue/-/devalue-5.0.0.tgz",
+ "integrity": "sha512-gO+/OMXF7488D+u3ue+G7Y4AA3ZmUnB3eHJXmBTgNHvr4ZNzl36A0ZtG+XCRNYCkYx/bFmw4qtkoFLa+wSrwAA=="
},
"node_modules/devlop": {
"version": "1.1.0",
- "license": "MIT",
+ "resolved": "https://registry.npmjs.org/devlop/-/devlop-1.1.0.tgz",
+ "integrity": "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==",
"dependencies": {
"dequal": "^2.0.0"
},
@@ -3314,16 +4657,14 @@
}
},
"node_modules/devtools-protocol": {
- "version": "0.0.1319565",
- "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1319565.tgz",
- "integrity": "sha512-Xc1Xrng6tSt5t0IIFCMeYUIqKEbvJVnKakfUCCq9WIk5m+9SbrPIXFtGcwwos8DucDyViEzwjy6PgIZWGUldyQ==",
- "license": "BSD-3-Clause"
+ "version": "0.0.1343927",
+ "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1343927.tgz",
+ "integrity": "sha512-zLdsAdAgNre5BCfM0V62yMjOdwR0CmP+X2xFKIz9lg2PyQQzloWbdcPESwg04uSZ2jUfsl3whRpR3UX+2CCRmA=="
},
"node_modules/dezalgo": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.4.tgz",
"integrity": "sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig==",
- "license": "ISC",
"dependencies": {
"asap": "^2.0.0",
"wrappy": "1"
@@ -3331,20 +4672,21 @@
},
"node_modules/diff": {
"version": "5.2.0",
- "license": "BSD-3-Clause",
+ "resolved": "https://registry.npmjs.org/diff/-/diff-5.2.0.tgz",
+ "integrity": "sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==",
"engines": {
"node": ">=0.3.1"
}
},
"node_modules/dlv": {
"version": "1.1.3",
- "license": "MIT"
+ "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz",
+ "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA=="
},
"node_modules/dom-serializer": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz",
"integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==",
- "license": "MIT",
"dependencies": {
"domelementtype": "^2.3.0",
"domhandler": "^5.0.2",
@@ -3363,14 +4705,12 @@
"type": "github",
"url": "https://github.com/sponsors/fb55"
}
- ],
- "license": "BSD-2-Clause"
+ ]
},
"node_modules/domhandler": {
"version": "5.0.3",
"resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz",
"integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==",
- "license": "BSD-2-Clause",
"dependencies": {
"domelementtype": "^2.3.0"
},
@@ -3385,7 +4725,6 @@
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz",
"integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==",
- "license": "BSD-2-Clause",
"dependencies": {
"dom-serializer": "^2.0.0",
"domelementtype": "^2.3.0",
@@ -3399,7 +4738,6 @@
"version": "6.0.1",
"resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-6.0.1.tgz",
"integrity": "sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA==",
- "license": "MIT",
"dependencies": {
"is-obj": "^2.0.0"
},
@@ -3437,7 +4775,8 @@
},
"node_modules/dset": {
"version": "3.1.3",
- "license": "MIT",
+ "resolved": "https://registry.npmjs.org/dset/-/dset-3.1.3.tgz",
+ "integrity": "sha512-20TuZZHCEZ2O71q9/+8BwKwZ0QtD9D8ObhrihJPr+vLLYlSuAU3/zL4cSlgbfeoGHTjCSJBa7NGcrF9/Bx/WJQ==",
"engines": {
"node": ">=4"
}
@@ -3445,28 +4784,27 @@
"node_modules/duplexer": {
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz",
- "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==",
- "license": "MIT"
+ "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg=="
},
"node_modules/eastasianwidth": {
"version": "0.2.0",
- "license": "MIT"
+ "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz",
+ "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA=="
+ },
+ "node_modules/ee-first": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
+ "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow=="
},
"node_modules/electron-to-chromium": {
- "version": "1.4.808",
- "license": "ISC"
+ "version": "1.5.12",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.12.tgz",
+ "integrity": "sha512-tIhPkdlEoCL1Y+PToq3zRNehUaKp3wBX/sr7aclAWdIWjvqAe/Im/H0SiCM4c1Q8BLPHCdoJTol+ZblflydehA=="
},
"node_modules/emmet": {
"version": "2.4.7",
"resolved": "https://registry.npmjs.org/emmet/-/emmet-2.4.7.tgz",
"integrity": "sha512-O5O5QNqtdlnQM2bmKHtJgyChcrFMgQuulI+WdiOw2NArzprUqqxUW6bgYtKvzKgrsYpuLWalOkdhNP+1jluhCA==",
- "license": "MIT",
- "workspaces": [
- "./packages/scanner",
- "./packages/abbreviation",
- "./packages/css-abbreviation",
- "./"
- ],
"dependencies": {
"@emmetio/abbreviation": "^2.3.3",
"@emmetio/css-abbreviation": "^2.1.8"
@@ -3474,11 +4812,33 @@
},
"node_modules/emoji-regex": {
"version": "10.3.0",
- "license": "MIT"
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.3.0.tgz",
+ "integrity": "sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw=="
+ },
+ "node_modules/encodeurl": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
+ "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==",
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/encoding-sniffer": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/encoding-sniffer/-/encoding-sniffer-0.2.0.tgz",
+ "integrity": "sha512-ju7Wq1kg04I3HtiYIOrUrdfdDvkyO9s5XM8QAj/bN61Yo/Vb4vgJxy5vi4Yxk01gWHbrofpPtpxM8bKger9jhg==",
+ "dependencies": {
+ "iconv-lite": "^0.6.3",
+ "whatwg-encoding": "^3.1.1"
+ },
+ "funding": {
+ "url": "https://github.com/fb55/encoding-sniffer?sponsor=1"
+ }
},
"node_modules/entities": {
"version": "4.5.0",
- "license": "BSD-2-Clause",
+ "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz",
+ "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==",
"engines": {
"node": ">=0.12"
},
@@ -3490,7 +4850,6 @@
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz",
"integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==",
- "license": "MIT",
"dependencies": {
"get-intrinsic": "^1.2.4"
},
@@ -3502,7 +4861,6 @@
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz",
"integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==",
- "license": "MIT",
"engines": {
"node": ">= 0.4"
}
@@ -3510,13 +4868,13 @@
"node_modules/es-module-lexer": {
"version": "1.5.4",
"resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.5.4.tgz",
- "integrity": "sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==",
- "license": "MIT"
+ "integrity": "sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw=="
},
"node_modules/esbuild": {
"version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz",
+ "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==",
"hasInstallScript": true,
- "license": "MIT",
"bin": {
"esbuild": "bin/esbuild"
},
@@ -3551,21 +4909,29 @@
},
"node_modules/escalade": {
"version": "3.1.2",
- "license": "MIT",
+ "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz",
+ "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==",
"engines": {
"node": ">=6"
}
},
+ "node_modules/escape-html": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
+ "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow=="
+ },
"node_modules/escape-string-regexp": {
"version": "1.0.5",
- "license": "MIT",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==",
"engines": {
"node": ">=0.8.0"
}
},
"node_modules/esprima": {
"version": "4.0.1",
- "license": "BSD-2-Clause",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
+ "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
"bin": {
"esparse": "bin/esparse.js",
"esvalidate": "bin/esvalidate.js"
@@ -3576,16 +4942,24 @@
},
"node_modules/estree-walker": {
"version": "3.0.3",
- "license": "MIT",
+ "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz",
+ "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==",
"dependencies": {
"@types/estree": "^1.0.0"
}
},
+ "node_modules/etag": {
+ "version": "1.8.1",
+ "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
+ "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
"node_modules/event-stream": {
"version": "3.3.4",
"resolved": "https://registry.npmjs.org/event-stream/-/event-stream-3.3.4.tgz",
"integrity": "sha512-QHpkERcGsR0T7Qm3HNJSyXKEEj8AHNxkY3PK8TS2KJvQ7NiSHe3DDpwVKKtoYprL/AreyzFBeIkBIWChAqn60g==",
- "license": "MIT",
"dependencies": {
"duplexer": "~0.1.1",
"from": "~0",
@@ -3596,13 +4970,31 @@
"through": "~2.3.1"
}
},
+ "node_modules/event-target-shim": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz",
+ "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==",
+ "engines": {
+ "node": ">=6"
+ }
+ },
"node_modules/eventemitter3": {
"version": "5.0.1",
- "license": "MIT"
+ "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz",
+ "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA=="
+ },
+ "node_modules/events": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz",
+ "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==",
+ "engines": {
+ "node": ">=0.8.x"
+ }
},
"node_modules/execa": {
"version": "8.0.1",
- "license": "MIT",
+ "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz",
+ "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==",
"dependencies": {
"cross-spawn": "^7.0.3",
"get-stream": "^8.0.1",
@@ -3623,11 +5015,13 @@
},
"node_modules/extend": {
"version": "3.0.2",
- "license": "MIT"
+ "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
+ "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g=="
},
"node_modules/extend-shallow": {
"version": "2.0.1",
- "license": "MIT",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==",
"dependencies": {
"is-extendable": "^0.1.0"
},
@@ -3639,7 +5033,6 @@
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz",
"integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==",
- "license": "MIT",
"dependencies": {
"chardet": "^0.7.0",
"iconv-lite": "^0.4.24",
@@ -3653,7 +5046,6 @@
"version": "0.4.24",
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
"integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
- "license": "MIT",
"dependencies": {
"safer-buffer": ">= 2.1.2 < 3"
},
@@ -3661,15 +5053,25 @@
"node": ">=0.10.0"
}
},
+ "node_modules/fast-content-type-parse": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/fast-content-type-parse/-/fast-content-type-parse-1.1.0.tgz",
+ "integrity": "sha512-fBHHqSTFLVnR61C+gltJuE5GkVQMV0S2nqUO8TJ+5Z3qAKG8vAx4FKai1s5jq/inV1+sREynIWSuQ6HgoSXpDQ=="
+ },
+ "node_modules/fast-decode-uri-component": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/fast-decode-uri-component/-/fast-decode-uri-component-1.0.1.tgz",
+ "integrity": "sha512-WKgKWg5eUxvRZGwW8FvfbaH7AXSh2cL+3j5fMGzUMCxWBJ3dV3a7Wz8y2f/uQ0e3B6WmodD3oS54jTQ9HVTIIg=="
+ },
"node_modules/fast-deep-equal": {
"version": "3.1.3",
"resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
- "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
- "license": "MIT"
+ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="
},
"node_modules/fast-glob": {
"version": "3.3.2",
- "license": "MIT",
+ "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz",
+ "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==",
"dependencies": {
"@nodelib/fs.stat": "^2.0.2",
"@nodelib/fs.walk": "^1.2.3",
@@ -3681,15 +5083,115 @@
"node": ">=8.6.0"
}
},
+ "node_modules/fast-json-stringify": {
+ "version": "5.16.1",
+ "resolved": "https://registry.npmjs.org/fast-json-stringify/-/fast-json-stringify-5.16.1.tgz",
+ "integrity": "sha512-KAdnLvy1yu/XrRtP+LJnxbBGrhN+xXu+gt3EUvZhYGKCr3lFHq/7UFJHHFgmJKoqlh6B40bZLEv7w46B0mqn1g==",
+ "dependencies": {
+ "@fastify/merge-json-schemas": "^0.1.0",
+ "ajv": "^8.10.0",
+ "ajv-formats": "^3.0.1",
+ "fast-deep-equal": "^3.1.3",
+ "fast-uri": "^2.1.0",
+ "json-schema-ref-resolver": "^1.0.1",
+ "rfdc": "^1.2.0"
+ }
+ },
+ "node_modules/fast-json-stringify/node_modules/ajv-formats": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-3.0.1.tgz",
+ "integrity": "sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==",
+ "dependencies": {
+ "ajv": "^8.0.0"
+ },
+ "peerDependencies": {
+ "ajv": "^8.0.0"
+ },
+ "peerDependenciesMeta": {
+ "ajv": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/fast-querystring": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/fast-querystring/-/fast-querystring-1.1.2.tgz",
+ "integrity": "sha512-g6KuKWmFXc0fID8WWH0jit4g0AGBoJhCkJMb1RmbsSEUNvQ+ZC8D6CUZ+GtF8nMzSPXnhiePyyqqipzNNEnHjg==",
+ "dependencies": {
+ "fast-decode-uri-component": "^1.0.1"
+ }
+ },
+ "node_modules/fast-redact": {
+ "version": "3.5.0",
+ "resolved": "https://registry.npmjs.org/fast-redact/-/fast-redact-3.5.0.tgz",
+ "integrity": "sha512-dwsoQlS7h9hMeYUq1W++23NDcBLV4KqONnITDV9DjfS3q1SgDGVrBdvvTLUotWtPSD7asWDV9/CmsZPy8Hf70A==",
+ "engines": {
+ "node": ">=6"
+ }
+ },
"node_modules/fast-safe-stringify": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz",
- "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==",
- "license": "MIT"
+ "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA=="
+ },
+ "node_modules/fast-uri": {
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-2.4.0.tgz",
+ "integrity": "sha512-ypuAmmMKInk5q7XcepxlnUWDLWv4GFtaJqAzWKqn62IpQ3pejtr5dTVbt3vwqVaMKmkNR55sTT+CqUKIaT21BA=="
+ },
+ "node_modules/fastify": {
+ "version": "4.28.1",
+ "resolved": "https://registry.npmjs.org/fastify/-/fastify-4.28.1.tgz",
+ "integrity": "sha512-kFWUtpNr4i7t5vY2EJPCN2KgMVpuqfU4NjnJNCgiNB900oiDeYqaNDRcAfeBbOF5hGixixxcKnOU4KN9z6QncQ==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/fastify"
+ },
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/fastify"
+ }
+ ],
+ "dependencies": {
+ "@fastify/ajv-compiler": "^3.5.0",
+ "@fastify/error": "^3.4.0",
+ "@fastify/fast-json-stringify-compiler": "^4.3.0",
+ "abstract-logging": "^2.0.1",
+ "avvio": "^8.3.0",
+ "fast-content-type-parse": "^1.1.0",
+ "fast-json-stringify": "^5.8.0",
+ "find-my-way": "^8.0.0",
+ "light-my-request": "^5.11.0",
+ "pino": "^9.0.0",
+ "process-warning": "^3.0.0",
+ "proxy-addr": "^2.0.7",
+ "rfdc": "^1.3.0",
+ "secure-json-parse": "^2.7.0",
+ "semver": "^7.5.4",
+ "toad-cache": "^3.3.0"
+ }
+ },
+ "node_modules/fastify-plugin": {
+ "version": "4.5.1",
+ "resolved": "https://registry.npmjs.org/fastify-plugin/-/fastify-plugin-4.5.1.tgz",
+ "integrity": "sha512-stRHYGeuqpEZTL1Ef0Ovr2ltazUT9g844X5z/zEBFLG8RYlpDiOCIG+ATvYEp+/zmc7sN29mcIMp8gvYplYPIQ=="
+ },
+ "node_modules/fastify/node_modules/semver": {
+ "version": "7.6.3",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz",
+ "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==",
+ "bin": {
+ "semver": "bin/semver.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
},
"node_modules/fastq": {
"version": "1.17.1",
- "license": "ISC",
+ "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz",
+ "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==",
"dependencies": {
"reusify": "^1.0.4"
}
@@ -3698,7 +5200,6 @@
"version": "1.7.0",
"resolved": "https://registry.npmjs.org/figlet/-/figlet-1.7.0.tgz",
"integrity": "sha512-gO8l3wvqo0V7wEFLXPbkX83b7MVjRrk1oRLfYlZXol8nEpb/ON9pcKLI4qpBv5YtOTfrINtqb7b40iYY2FTWFg==",
- "license": "MIT",
"bin": {
"figlet": "bin/index.js"
},
@@ -3710,7 +5211,6 @@
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz",
"integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==",
- "license": "MIT",
"dependencies": {
"escape-string-regexp": "^1.0.5"
},
@@ -3722,14 +5222,14 @@
}
},
"node_modules/file-type": {
- "version": "19.0.0",
- "resolved": "https://registry.npmjs.org/file-type/-/file-type-19.0.0.tgz",
- "integrity": "sha512-s7cxa7/leUWLiXO78DVVfBVse+milos9FitauDLG1pI7lNaJ2+5lzPnr2N24ym+84HVwJL6hVuGfgVE+ALvU8Q==",
- "license": "MIT",
+ "version": "19.4.1",
+ "resolved": "https://registry.npmjs.org/file-type/-/file-type-19.4.1.tgz",
+ "integrity": "sha512-RuWzwF2L9tCHS76KR/Mdh+DwJZcFCzrhrPXpOw6MlEfl/o31fjpTikzcKlYuyeV7e7ftdCGVJTNOCzkYD/aLbw==",
"dependencies": {
- "readable-web-to-node-stream": "^3.0.2",
- "strtok3": "^7.0.0",
- "token-types": "^5.0.1"
+ "get-stream": "^9.0.1",
+ "strtok3": "^8.1.0",
+ "token-types": "^6.0.0",
+ "uint8array-extras": "^1.3.0"
},
"engines": {
"node": ">=18"
@@ -3738,9 +5238,36 @@
"url": "https://github.com/sindresorhus/file-type?sponsor=1"
}
},
+ "node_modules/file-type/node_modules/get-stream": {
+ "version": "9.0.1",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-9.0.1.tgz",
+ "integrity": "sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA==",
+ "dependencies": {
+ "@sec-ant/readable-stream": "^0.4.1",
+ "is-stream": "^4.0.1"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/file-type/node_modules/is-stream": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-4.0.1.tgz",
+ "integrity": "sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A==",
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
"node_modules/fill-range": {
"version": "7.1.1",
- "license": "MIT",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
+ "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
"dependencies": {
"to-regex-range": "^5.0.1"
},
@@ -3748,15 +5275,37 @@
"node": ">=8"
}
},
- "node_modules/find-up": {
- "version": "5.0.0",
- "license": "MIT",
+ "node_modules/find-my-way": {
+ "version": "8.2.0",
+ "resolved": "https://registry.npmjs.org/find-my-way/-/find-my-way-8.2.0.tgz",
+ "integrity": "sha512-HdWXgFYc6b1BJcOBDBwjqWuHJj1WYiqrxSh25qtU4DabpMFdj/gSunNBQb83t+8Zt67D7CXEzJWTkxaShMTMOA==",
"dependencies": {
- "locate-path": "^6.0.0",
+ "fast-deep-equal": "^3.1.3",
+ "fast-querystring": "^1.0.0",
+ "safe-regex2": "^3.1.0"
+ },
+ "engines": {
+ "node": ">=14"
+ }
+ },
+ "node_modules/find-up": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
+ "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
+ "dependencies": {
+ "locate-path": "^5.0.0",
"path-exists": "^4.0.0"
},
"engines": {
- "node": ">=10"
+ "node": ">=8"
+ }
+ },
+ "node_modules/find-up-simple": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/find-up-simple/-/find-up-simple-1.0.0.tgz",
+ "integrity": "sha512-q7Us7kcjj2VMePAa02hDAF6d+MzsdsAWEwYyOpwUtlerRBkOEPBCRZrAV4XfcSN8fHAgaD0hP7miwoay6DCprw==",
+ "engines": {
+ "node": ">=18"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
@@ -3764,20 +5313,20 @@
},
"node_modules/find-yarn-workspace-root2": {
"version": "1.2.16",
- "license": "Apache-2.0",
+ "resolved": "https://registry.npmjs.org/find-yarn-workspace-root2/-/find-yarn-workspace-root2-1.2.16.tgz",
+ "integrity": "sha512-hr6hb1w8ePMpPVUK39S4RlwJzi+xPLuVuG8XlwXU3KD5Yn3qgBWVfy3AzNlDhWvE1EORCE65/Qm26rFQt3VLVA==",
"dependencies": {
"micromatch": "^4.0.2",
"pkg-dir": "^4.2.0"
}
},
"node_modules/fingerprint-generator": {
- "version": "2.1.52",
- "resolved": "https://registry.npmjs.org/fingerprint-generator/-/fingerprint-generator-2.1.52.tgz",
- "integrity": "sha512-ZdXUn/qIB4vI7pDze5aXidjoFwLdEfbBNj6+3oHzXcgwxzEfCOfNe3wW5NRZDJKgxF40R7TSOA7noBAAehSLgQ==",
- "license": "Apache-2.0",
+ "version": "2.1.54",
+ "resolved": "https://registry.npmjs.org/fingerprint-generator/-/fingerprint-generator-2.1.54.tgz",
+ "integrity": "sha512-Hd/t8h+icv9jeDd64hxTyfuP9U0bkq9z9Lna4q/MeIs2e1mTcHuznyJzApqtYdZP3cIY4JEfmDz5yW/QcMz+Ow==",
"dependencies": {
- "generative-bayesian-network": "^2.1.52",
- "header-generator": "^2.1.52",
+ "generative-bayesian-network": "^2.1.54",
+ "header-generator": "^2.1.54",
"tslib": "^2.4.0"
},
"engines": {
@@ -3785,12 +5334,11 @@
}
},
"node_modules/fingerprint-injector": {
- "version": "2.1.52",
- "resolved": "https://registry.npmjs.org/fingerprint-injector/-/fingerprint-injector-2.1.52.tgz",
- "integrity": "sha512-Sx+ykblqEP/P6nPRIE+C5CUNEfFpMZ3M/r5NDxOkSCTQVdfXXxlFx/UKOQNorvuJxryrtek4T0FvcB/KUbQfCQ==",
- "license": "Apache-2.0",
+ "version": "2.1.54",
+ "resolved": "https://registry.npmjs.org/fingerprint-injector/-/fingerprint-injector-2.1.54.tgz",
+ "integrity": "sha512-tBNoBULryyGMpWBIFUfZH4hHgCV575T8/xyiZXe2zuX1oAclpYRy3P7wGCzM4JvoP9NCG2Z3gROGnfsTgfQfVA==",
"dependencies": {
- "fingerprint-generator": "^2.1.52",
+ "fingerprint-generator": "^2.1.54",
"tslib": "^2.4.0"
},
"engines": {
@@ -3811,16 +5359,50 @@
},
"node_modules/flattie": {
"version": "1.1.1",
- "license": "MIT",
+ "resolved": "https://registry.npmjs.org/flattie/-/flattie-1.1.1.tgz",
+ "integrity": "sha512-9UbaD6XdAL97+k/n+N7JwX46K/M6Zc6KcFYskrYL8wbBV/Uyk0CTAMY0VT+qiK5PM7AIc9aTWYtq65U7T+aCNQ==",
"engines": {
"node": ">=8"
}
},
+ "node_modules/follow-redirects": {
+ "version": "1.15.6",
+ "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz",
+ "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==",
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://github.com/sponsors/RubenVerborgh"
+ }
+ ],
+ "engines": {
+ "node": ">=4.0"
+ },
+ "peerDependenciesMeta": {
+ "debug": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/foreground-child": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz",
+ "integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==",
+ "dependencies": {
+ "cross-spawn": "^7.0.0",
+ "signal-exit": "^4.0.1"
+ },
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
"node_modules/form-data": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz",
"integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==",
- "license": "MIT",
"dependencies": {
"asynckit": "^0.4.0",
"combined-stream": "^1.0.8",
@@ -3834,7 +5416,6 @@
"version": "4.0.2",
"resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-4.0.2.tgz",
"integrity": "sha512-KQVhvhK8ZkWzxKxOr56CPulAhH3dobtuQ4+hNQ+HekH/Wp5gSOafqRAeTphQUJAIk0GBvHZgJ2ZGRWd5kphMuw==",
- "license": "MIT",
"engines": {
"node": ">= 18"
}
@@ -3843,7 +5424,6 @@
"version": "3.5.1",
"resolved": "https://registry.npmjs.org/formidable/-/formidable-3.5.1.tgz",
"integrity": "sha512-WJWKelbRHN41m5dumb0/k8TeAx7Id/y3a+Z7QfhxP/htI9Js5zYaEDtG8uMgG0vM0lOlqnmjE99/kfpOYi/0Og==",
- "license": "MIT",
"dependencies": {
"dezalgo": "^1.0.4",
"hexoid": "^1.0.0",
@@ -3853,17 +5433,31 @@
"url": "https://ko-fi.com/tunnckoCore/commissions"
}
},
+ "node_modules/forwarded": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz",
+ "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/fresh": {
+ "version": "0.5.2",
+ "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
+ "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
"node_modules/from": {
"version": "0.1.7",
"resolved": "https://registry.npmjs.org/from/-/from-0.1.7.tgz",
- "integrity": "sha512-twe20eF1OxVxp/ML/kq2p1uc6KvFK/+vs8WjEbeKmV2He22MKm7YF2ANIt+EOqhJ5L3K/SuuPhk0hWQDjOM23g==",
- "license": "MIT"
+ "integrity": "sha512-twe20eF1OxVxp/ML/kq2p1uc6KvFK/+vs8WjEbeKmV2He22MKm7YF2ANIt+EOqhJ5L3K/SuuPhk0hWQDjOM23g=="
},
"node_modules/fs-extra": {
"version": "11.2.0",
"resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz",
"integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==",
- "license": "MIT",
"dependencies": {
"graceful-fs": "^4.2.0",
"jsonfile": "^6.0.1",
@@ -3874,11 +5468,10 @@
}
},
"node_modules/fsevents": {
- "version": "2.3.2",
- "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
- "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
+ "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
"hasInstallScript": true,
- "license": "MIT",
"optional": true,
"os": [
"darwin"
@@ -3891,16 +5484,14 @@
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
"integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
- "license": "MIT",
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/generative-bayesian-network": {
- "version": "2.1.52",
- "resolved": "https://registry.npmjs.org/generative-bayesian-network/-/generative-bayesian-network-2.1.52.tgz",
- "integrity": "sha512-8fYemN+uiVPCjoodQX4HUH8RLDqiQeGfemlWO9yR6SqIh/6BsrW52M0YTSafsH0615BhulRy5BR2uKAqLTJ22A==",
- "license": "Apache-2.0",
+ "version": "2.1.54",
+ "resolved": "https://registry.npmjs.org/generative-bayesian-network/-/generative-bayesian-network-2.1.54.tgz",
+ "integrity": "sha512-1RIfmYqZqghwjRQGqUU36tZmJkyz77dztmgUHeAGkG0o9eTwN7fBxOCyQLqxZd9Qg72d19IKdcIvrs53TI2KdA==",
"dependencies": {
"adm-zip": "^0.5.9",
"tslib": "^2.4.0"
@@ -3908,21 +5499,24 @@
},
"node_modules/gensync": {
"version": "1.0.0-beta.2",
- "license": "MIT",
+ "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz",
+ "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==",
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/get-caller-file": {
"version": "2.0.5",
- "license": "ISC",
+ "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
+ "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
"engines": {
"node": "6.* || 8.* || >= 10.*"
}
},
"node_modules/get-east-asian-width": {
"version": "1.2.0",
- "license": "MIT",
+ "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.2.0.tgz",
+ "integrity": "sha512-2nk+7SIVb14QrgXFHcm84tD4bKQz0RxPuMT8Ag5KPOq7J5fEmAg0UbXdTOSHqNuHSU28k55qnceesxXRZGzKWA==",
"engines": {
"node": ">=18"
},
@@ -3942,7 +5536,6 @@
"version": "1.2.4",
"resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz",
"integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==",
- "license": "MIT",
"dependencies": {
"es-errors": "^1.3.0",
"function-bind": "^1.1.2",
@@ -3959,7 +5552,8 @@
},
"node_modules/get-stream": {
"version": "8.0.1",
- "license": "MIT",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz",
+ "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==",
"engines": {
"node": ">=16"
},
@@ -3968,11 +5562,10 @@
}
},
"node_modules/get-tsconfig": {
- "version": "4.7.5",
- "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.7.5.tgz",
- "integrity": "sha512-ZCuZCnlqNzjb4QprAzXKdpp/gh6KTxSJuw3IBsPnV/7fV4NxC9ckB+vPTt8w7fJA0TaSD7c55BR47JD6MEDyDw==",
+ "version": "4.7.6",
+ "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.7.6.tgz",
+ "integrity": "sha512-ZAqrLlu18NbDdRaHq+AKXzAmqIUPswPWKUchfytdAjiRFnCe5ojG2bstg6mRiZabkKfCoL/e98pbBELIV/YCeA==",
"dev": true,
- "license": "MIT",
"dependencies": {
"resolve-pkg-maps": "^1.0.0"
},
@@ -3983,12 +5576,31 @@
"node_modules/github-slugger": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-2.0.0.tgz",
- "integrity": "sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==",
- "license": "ISC"
+ "integrity": "sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw=="
+ },
+ "node_modules/glob": {
+ "version": "10.4.5",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz",
+ "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==",
+ "dependencies": {
+ "foreground-child": "^3.1.0",
+ "jackspeak": "^3.1.2",
+ "minimatch": "^9.0.4",
+ "minipass": "^7.1.2",
+ "package-json-from-dist": "^1.0.0",
+ "path-scurry": "^1.11.1"
+ },
+ "bin": {
+ "glob": "dist/esm/bin.mjs"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
},
"node_modules/glob-parent": {
"version": "5.1.2",
- "license": "ISC",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+ "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
"dependencies": {
"is-glob": "^4.0.1"
},
@@ -3998,7 +5610,8 @@
},
"node_modules/globals": {
"version": "11.12.0",
- "license": "MIT",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
+ "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==",
"engines": {
"node": ">=4"
}
@@ -4007,7 +5620,6 @@
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz",
"integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==",
- "license": "MIT",
"dependencies": {
"get-intrinsic": "^1.1.3"
},
@@ -4016,18 +5628,16 @@
}
},
"node_modules/got": {
- "version": "14.4.1",
- "resolved": "https://registry.npmjs.org/got/-/got-14.4.1.tgz",
- "integrity": "sha512-IvDJbJBUeexX74xNQuMIVgCRRuNOm5wuK+OC3Dc2pnSoh1AOmgc7JVj7WC+cJ4u0aPcO9KZ2frTXcqK4W/5qTQ==",
- "license": "MIT",
+ "version": "14.4.2",
+ "resolved": "https://registry.npmjs.org/got/-/got-14.4.2.tgz",
+ "integrity": "sha512-+Te/qEZ6hr7i+f0FNgXx/6WQteSM/QqueGvxeYQQFm0GDfoxLVJ/oiwUKYMTeioColWUTdewZ06hmrBjw6F7tw==",
"dependencies": {
- "@sindresorhus/is": "^6.3.1",
+ "@sindresorhus/is": "^7.0.0",
"@szmarczak/http-timer": "^5.0.1",
"cacheable-lookup": "^7.0.0",
"cacheable-request": "^12.0.1",
"decompress-response": "^6.0.0",
"form-data-encoder": "^4.0.2",
- "get-stream": "^8.0.1",
"http2-wrapper": "^2.2.1",
"lowercase-keys": "^3.0.0",
"p-cancelable": "^4.0.1",
@@ -4045,7 +5655,6 @@
"version": "4.0.6",
"resolved": "https://registry.npmjs.org/got-scraping/-/got-scraping-4.0.6.tgz",
"integrity": "sha512-bfL/sxJ+HnT2FFVDOs74PbPuWNg/xOX9BWefn7a5CVF5hI1cXUHaa/6y4tm6i1T0KDqomQ/hOKVdpGqSWIBuhA==",
- "license": "Apache-2.0",
"dependencies": {
"got": "^14.2.1",
"header-generator": "^2.1.41",
@@ -4063,7 +5672,6 @@
"version": "5.6.0",
"resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-5.6.0.tgz",
"integrity": "sha512-TV7t8GKYaJWsn00tFDqBw8+Uqmr8A0fRU1tvTQhyZzGv0sJCGRQL3JGMI3ucuKo3XIZdUP+Lx7/gh2t3lewy7g==",
- "license": "MIT",
"engines": {
"node": ">=14.16"
},
@@ -4075,7 +5683,6 @@
"version": "4.2.0",
"resolved": "https://registry.npmjs.org/callsites/-/callsites-4.2.0.tgz",
"integrity": "sha512-kfzR4zzQtAE9PC7CzZsjl3aBNbXWuXiSeOCdLcPpBfGW8YuCqQHcRPFDbr/BPVmd3EEPVpuFzLyuT/cUhPr4OQ==",
- "license": "MIT",
"engines": {
"node": ">=12.20"
},
@@ -4087,7 +5694,6 @@
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-7.2.0.tgz",
"integrity": "sha512-Ol/IPXUARn9CSbkrdV4VJo7uCy1I3VuSiWCaFSg+8BdUOzF9n3jefIpcgAydvUZbTdEBZs2vEiTiS9m61ssiDA==",
- "license": "MIT",
"dependencies": {
"type-fest": "^2.11.2"
},
@@ -4102,7 +5708,6 @@
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/ow/-/ow-1.1.1.tgz",
"integrity": "sha512-sJBRCbS5vh1Jp9EOgwp1Ws3c16lJrUkJYlvWTYC03oyiYVwS/ns7lKRWow4w4XjDyTrA2pplQv4B2naWSR6yDA==",
- "license": "MIT",
"dependencies": {
"@sindresorhus/is": "^5.3.0",
"callsites": "^4.0.0",
@@ -4121,7 +5726,6 @@
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-7.0.0.tgz",
"integrity": "sha512-MX8gB7cVYTrYcFfAnfLlhRd0+Toyl8yX8uBx1MrX7K0jegiz9TumwOK27ldXrgDlHRdVi+MqU9Ssw6dr4BNreg==",
- "license": "MIT",
"engines": {
"node": ">=18"
},
@@ -4130,10 +5734,9 @@
}
},
"node_modules/got/node_modules/type-fest": {
- "version": "4.20.1",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.20.1.tgz",
- "integrity": "sha512-R6wDsVsoS9xYOpy8vgeBlqpdOyzJ12HNfQhC/aAKWM3YoCV9TtunJzh/QpkMgeDhkoynDcw5f1y+qF9yc/HHyg==",
- "license": "(MIT OR CC0-1.0)",
+ "version": "4.25.0",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.25.0.tgz",
+ "integrity": "sha512-bRkIGlXsnGBRBQRAY56UXBm//9qH4bmJfFvq83gSz41N282df+fjy8ofcEgc1sM8geNt5cl6mC2g9Fht1cs8Aw==",
"engines": {
"node": ">=16"
},
@@ -4143,11 +5746,13 @@
},
"node_modules/graceful-fs": {
"version": "4.2.11",
- "license": "ISC"
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz",
+ "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ=="
},
"node_modules/gray-matter": {
"version": "4.0.3",
- "license": "MIT",
+ "resolved": "https://registry.npmjs.org/gray-matter/-/gray-matter-4.0.3.tgz",
+ "integrity": "sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==",
"dependencies": {
"js-yaml": "^3.13.1",
"kind-of": "^6.0.2",
@@ -4158,9 +5763,18 @@
"node": ">=6.0"
}
},
+ "node_modules/gray-matter/node_modules/argparse": {
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
+ "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
+ "dependencies": {
+ "sprintf-js": "~1.0.2"
+ }
+ },
"node_modules/gray-matter/node_modules/js-yaml": {
"version": "3.14.1",
- "license": "MIT",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz",
+ "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==",
"dependencies": {
"argparse": "^1.0.7",
"esprima": "^4.0.0"
@@ -4169,18 +5783,15 @@
"js-yaml": "bin/js-yaml.js"
}
},
- "node_modules/gray-matter/node_modules/js-yaml/node_modules/argparse": {
- "version": "1.0.10",
- "license": "MIT",
- "dependencies": {
- "sprintf-js": "~1.0.2"
- }
+ "node_modules/gray-matter/node_modules/sprintf-js": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
+ "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g=="
},
"node_modules/has-ansi": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
"integrity": "sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg==",
- "license": "MIT",
"dependencies": {
"ansi-regex": "^2.0.0"
},
@@ -4192,14 +5803,14 @@
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
"integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==",
- "license": "MIT",
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/has-flag": {
"version": "3.0.0",
- "license": "MIT",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
"engines": {
"node": ">=4"
}
@@ -4208,7 +5819,6 @@
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz",
"integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==",
- "license": "MIT",
"dependencies": {
"es-define-property": "^1.0.0"
},
@@ -4220,7 +5830,6 @@
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz",
"integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==",
- "license": "MIT",
"engines": {
"node": ">= 0.4"
},
@@ -4232,7 +5841,6 @@
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
"integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==",
- "license": "MIT",
"engines": {
"node": ">= 0.4"
},
@@ -4244,7 +5852,6 @@
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
"integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
- "license": "MIT",
"dependencies": {
"function-bind": "^1.1.2"
},
@@ -4254,7 +5861,8 @@
},
"node_modules/hast-util-from-html": {
"version": "2.0.1",
- "license": "MIT",
+ "resolved": "https://registry.npmjs.org/hast-util-from-html/-/hast-util-from-html-2.0.1.tgz",
+ "integrity": "sha512-RXQBLMl9kjKVNkJTIO6bZyb2n+cUH8LFaSSzo82jiLT6Tfc+Pt7VQCS+/h3YwG4jaNE2TA2sdJisGWR+aJrp0g==",
"dependencies": {
"@types/hast": "^3.0.0",
"devlop": "^1.1.0",
@@ -4270,7 +5878,8 @@
},
"node_modules/hast-util-from-parse5": {
"version": "8.0.1",
- "license": "MIT",
+ "resolved": "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-8.0.1.tgz",
+ "integrity": "sha512-Er/Iixbc7IEa7r/XLtuG52zoqn/b3Xng/w6aZQ0xGVxzhw5xUFxcRqdPzP6yFi/4HBYRaifaI5fQ1RH8n0ZeOQ==",
"dependencies": {
"@types/hast": "^3.0.0",
"@types/unist": "^3.0.0",
@@ -4290,7 +5899,6 @@
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/hast-util-is-element/-/hast-util-is-element-3.0.0.tgz",
"integrity": "sha512-Val9mnv2IWpLbNPqc/pUem+a7Ipj2aHacCwgNfTiK0vJKl0LF+4Ba4+v1oPHFpf3bLYmreq0/l3Gud9S5OH42g==",
- "license": "MIT",
"dependencies": {
"@types/hast": "^3.0.0"
},
@@ -4301,7 +5909,8 @@
},
"node_modules/hast-util-parse-selector": {
"version": "4.0.0",
- "license": "MIT",
+ "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-4.0.0.tgz",
+ "integrity": "sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A==",
"dependencies": {
"@types/hast": "^3.0.0"
},
@@ -4312,7 +5921,8 @@
},
"node_modules/hast-util-raw": {
"version": "9.0.4",
- "license": "MIT",
+ "resolved": "https://registry.npmjs.org/hast-util-raw/-/hast-util-raw-9.0.4.tgz",
+ "integrity": "sha512-LHE65TD2YiNsHD3YuXcKPHXPLuYh/gjp12mOfU8jxSrm1f/yJpsb0F/KKljS6U9LJoP0Ux+tCe8iJ2AsPzTdgA==",
"dependencies": {
"@types/hast": "^3.0.0",
"@types/unist": "^3.0.0",
@@ -4335,7 +5945,8 @@
},
"node_modules/hast-util-to-html": {
"version": "9.0.1",
- "license": "MIT",
+ "resolved": "https://registry.npmjs.org/hast-util-to-html/-/hast-util-to-html-9.0.1.tgz",
+ "integrity": "sha512-hZOofyZANbyWo+9RP75xIDV/gq+OUKx+T46IlwERnKmfpwp81XBFbT9mi26ws+SJchA4RVUQwIBJpqEOBhMzEQ==",
"dependencies": {
"@types/hast": "^3.0.0",
"@types/unist": "^3.0.0",
@@ -4357,7 +5968,8 @@
},
"node_modules/hast-util-to-parse5": {
"version": "8.0.0",
- "license": "MIT",
+ "resolved": "https://registry.npmjs.org/hast-util-to-parse5/-/hast-util-to-parse5-8.0.0.tgz",
+ "integrity": "sha512-3KKrV5ZVI8if87DVSi1vDeByYrkGzg4mEfeu4alwgmmIeARiBLKCZS2uw5Gb6nU9x9Yufyj3iudm6i7nl52PFw==",
"dependencies": {
"@types/hast": "^3.0.0",
"comma-separated-tokens": "^2.0.0",
@@ -4376,7 +5988,6 @@
"version": "4.0.2",
"resolved": "https://registry.npmjs.org/hast-util-to-text/-/hast-util-to-text-4.0.2.tgz",
"integrity": "sha512-KK6y/BN8lbaq654j7JgBydev7wuNMcID54lkRav1P0CaE1e47P72AWWPiGKXTJU271ooYzcvTAn/Zt0REnvc7A==",
- "license": "MIT",
"dependencies": {
"@types/hast": "^3.0.0",
"@types/unist": "^3.0.0",
@@ -4390,7 +6001,8 @@
},
"node_modules/hast-util-whitespace": {
"version": "3.0.0",
- "license": "MIT",
+ "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-3.0.0.tgz",
+ "integrity": "sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==",
"dependencies": {
"@types/hast": "^3.0.0"
},
@@ -4401,7 +6013,8 @@
},
"node_modules/hastscript": {
"version": "8.0.0",
- "license": "MIT",
+ "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-8.0.0.tgz",
+ "integrity": "sha512-dMOtzCEd3ABUeSIISmrETiKuyydk1w0pa+gE/uormcTpSYuaNJPbX1NU3JLyscSLjwAQM8bWMhhIlnCqnRvDTw==",
"dependencies": {
"@types/hast": "^3.0.0",
"comma-separated-tokens": "^2.0.0",
@@ -4415,13 +6028,12 @@
}
},
"node_modules/header-generator": {
- "version": "2.1.52",
- "resolved": "https://registry.npmjs.org/header-generator/-/header-generator-2.1.52.tgz",
- "integrity": "sha512-2roqbZdd0hc7Bx+6BIQaHaCaSdnTXCnqayFbS8dpj53hmkQAXbSwiuTpfyAY1vePiaKweH6vDYhbtGOW+NmTmw==",
- "license": "Apache-2.0",
+ "version": "2.1.54",
+ "resolved": "https://registry.npmjs.org/header-generator/-/header-generator-2.1.54.tgz",
+ "integrity": "sha512-fRitYKX+HwmID0zUeWzsu3wZDa5dTVi7XE/m2kRcP+wZVhVuKHm7zD2jfmxddhVQWgdp0CY4+eTfDOlD5dsBMQ==",
"dependencies": {
"browserslist": "^4.21.1",
- "generative-bayesian-network": "^2.1.52",
+ "generative-bayesian-network": "^2.1.54",
"ow": "^0.28.1",
"tslib": "^2.4.0"
},
@@ -4433,7 +6045,6 @@
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/hexoid/-/hexoid-1.0.0.tgz",
"integrity": "sha512-QFLV0taWQOZtvIRIAdBChesmogZrtuXvVWsFHZTk2SU+anspqZ2vMnoLg7IE1+Uk16N19APic1BuF8bC8c2m5g==",
- "license": "MIT",
"engines": {
"node": ">=8"
}
@@ -4442,7 +6053,6 @@
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-4.0.0.tgz",
"integrity": "sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ==",
- "license": "MIT",
"dependencies": {
"whatwg-encoding": "^3.1.1"
},
@@ -4452,20 +6062,22 @@
},
"node_modules/html-escaper": {
"version": "3.0.3",
- "license": "MIT"
+ "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-3.0.3.tgz",
+ "integrity": "sha512-RuMffC89BOWQoY0WKGpIhn5gX3iI54O6nRA0yC124NYVtzjmFWBIiFd8M0x+ZdX0P9R4lADg1mgP8C7PxGOWuQ=="
},
"node_modules/html-void-elements": {
"version": "3.0.0",
- "license": "MIT",
+ "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-3.0.0.tgz",
+ "integrity": "sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/wooorm"
}
},
"node_modules/htmlparser2": {
- "version": "8.0.2",
- "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz",
- "integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==",
+ "version": "9.1.0",
+ "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-9.1.0.tgz",
+ "integrity": "sha512-5zfg6mHUoaer/97TxnGpxmbR7zJtPwIYFMZ/H5ucTlPZhKvtum05yiPK3Mgai3a0DyVxv7qYqoweaEd2nrYQzQ==",
"funding": [
"https://github.com/fb55/htmlparser2?sponsor=1",
{
@@ -4473,23 +6085,37 @@
"url": "https://github.com/sponsors/fb55"
}
],
- "license": "MIT",
"dependencies": {
"domelementtype": "^2.3.0",
"domhandler": "^5.0.3",
- "domutils": "^3.0.1",
- "entities": "^4.4.0"
+ "domutils": "^3.1.0",
+ "entities": "^4.5.0"
}
},
"node_modules/http-cache-semantics": {
"version": "4.1.1",
- "license": "BSD-2-Clause"
+ "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz",
+ "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ=="
+ },
+ "node_modules/http-errors": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz",
+ "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==",
+ "dependencies": {
+ "depd": "2.0.0",
+ "inherits": "2.0.4",
+ "setprototypeof": "1.2.0",
+ "statuses": "2.0.1",
+ "toidentifier": "1.0.1"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
},
"node_modules/http-proxy-agent": {
"version": "7.0.2",
"resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz",
"integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==",
- "license": "MIT",
"dependencies": {
"agent-base": "^7.1.0",
"debug": "^4.3.4"
@@ -4502,7 +6128,6 @@
"version": "2.2.1",
"resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-2.2.1.tgz",
"integrity": "sha512-V5nVw1PAOgfI3Lmeaj2Exmeg7fenjhRUgz1lPSezy1CuhPYbgQtbQj4jZfEAEMlaL+vupsvhjqCyjzob0yxsmQ==",
- "license": "MIT",
"dependencies": {
"quick-lru": "^5.1.1",
"resolve-alpn": "^1.2.0"
@@ -4515,7 +6140,6 @@
"version": "7.0.5",
"resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.5.tgz",
"integrity": "sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw==",
- "license": "MIT",
"dependencies": {
"agent-base": "^7.0.2",
"debug": "4"
@@ -4526,16 +6150,24 @@
},
"node_modules/human-signals": {
"version": "5.0.0",
- "license": "Apache-2.0",
+ "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz",
+ "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==",
"engines": {
"node": ">=16.17.0"
}
},
+ "node_modules/hyperdyperid": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/hyperdyperid/-/hyperdyperid-1.2.0.tgz",
+ "integrity": "sha512-Y93lCzHYgGWdrJ66yIktxiaGULYc6oGiABxhcO5AufBeOyoIdZF7bIfLaOrbM0iGIOXQQgxxRrFEnb+Y6w1n4A==",
+ "engines": {
+ "node": ">=10.18"
+ }
+ },
"node_modules/iconv-lite": {
"version": "0.6.3",
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz",
"integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==",
- "license": "MIT",
"dependencies": {
"safer-buffer": ">= 2.1.2 < 3.0.0"
},
@@ -4546,8 +6178,7 @@
"node_modules/idcac-playwright": {
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/idcac-playwright/-/idcac-playwright-0.1.2.tgz",
- "integrity": "sha512-1YeecryHQC3SzDagSjqJTCDDs6F0x/9LaR8TPIN6x60myYAs7oALxZJdwNITeoR3wL0KeTZF3knVTRJ4gki5NQ==",
- "license": "ISC"
+ "integrity": "sha512-1YeecryHQC3SzDagSjqJTCDDs6F0x/9LaR8TPIN6x60myYAs7oALxZJdwNITeoR3wL0KeTZF3knVTRJ4gki5NQ=="
},
"node_modules/ieee754": {
"version": "1.2.1",
@@ -4566,14 +6197,12 @@
"type": "consulting",
"url": "https://feross.org/support"
}
- ],
- "license": "BSD-3-Clause"
+ ]
},
"node_modules/import-local": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz",
- "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==",
- "license": "MIT",
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.2.0.tgz",
+ "integrity": "sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==",
"dependencies": {
"pkg-dir": "^4.2.0",
"resolve-cwd": "^3.0.0"
@@ -4592,7 +6221,6 @@
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/import-meta-resolve/-/import-meta-resolve-4.1.0.tgz",
"integrity": "sha512-I6fiaX09Xivtk+THaMfAwnA3MVA5Big1WHF1Dfx9hFuvNIWpXnorlkzhcQf6ehrqQiiZECRt1poOAkPmer3ruw==",
- "license": "MIT",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/wooorm"
@@ -4601,14 +6229,12 @@
"node_modules/inherits": {
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
- "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
- "license": "ISC"
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
},
"node_modules/inquirer": {
"version": "8.2.6",
"resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.6.tgz",
"integrity": "sha512-M1WuAmb7pn9zdFRtQYk26ZBoY043Sse0wVDdk4Bppr+JOXyQYybdtvK+l9wUibhtjdjvtoiNy8tk+EgsYIUqKg==",
- "license": "MIT",
"dependencies": {
"ansi-escapes": "^4.2.1",
"chalk": "^4.1.1",
@@ -4634,7 +6260,6 @@
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
"integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
- "license": "MIT",
"engines": {
"node": ">=8"
}
@@ -4643,7 +6268,6 @@
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
- "license": "MIT",
"dependencies": {
"color-convert": "^2.0.1"
},
@@ -4658,7 +6282,6 @@
"version": "4.1.2",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
"integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
- "license": "MIT",
"dependencies": {
"ansi-styles": "^4.1.0",
"supports-color": "^7.1.0"
@@ -4670,29 +6293,31 @@
"url": "https://github.com/chalk/chalk?sponsor=1"
}
},
- "node_modules/inquirer/node_modules/cli-cursor": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz",
- "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==",
- "license": "MIT",
+ "node_modules/inquirer/node_modules/color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
"dependencies": {
- "restore-cursor": "^3.1.0"
+ "color-name": "~1.1.4"
},
"engines": {
- "node": ">=8"
+ "node": ">=7.0.0"
}
},
+ "node_modules/inquirer/node_modules/color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
+ },
"node_modules/inquirer/node_modules/emoji-regex": {
"version": "8.0.0",
"resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
- "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
- "license": "MIT"
+ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="
},
"node_modules/inquirer/node_modules/has-flag": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
- "license": "MIT",
"engines": {
"node": ">=8"
}
@@ -4701,7 +6326,6 @@
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz",
"integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==",
- "license": "MIT",
"engines": {
"node": ">=8"
}
@@ -4710,7 +6334,6 @@
"version": "0.1.0",
"resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz",
"integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==",
- "license": "MIT",
"engines": {
"node": ">=10"
},
@@ -4722,7 +6345,6 @@
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz",
"integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==",
- "license": "MIT",
"dependencies": {
"chalk": "^4.1.0",
"is-unicode-supported": "^0.1.0"
@@ -4734,35 +6356,10 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/inquirer/node_modules/mimic-fn": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
- "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==",
- "license": "MIT",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/inquirer/node_modules/onetime": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz",
- "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==",
- "license": "MIT",
- "dependencies": {
- "mimic-fn": "^2.1.0"
- },
- "engines": {
- "node": ">=6"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
"node_modules/inquirer/node_modules/ora": {
"version": "5.4.1",
"resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz",
"integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==",
- "license": "MIT",
"dependencies": {
"bl": "^4.1.0",
"chalk": "^4.1.0",
@@ -4781,30 +6378,10 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/inquirer/node_modules/restore-cursor": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz",
- "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==",
- "license": "MIT",
- "dependencies": {
- "onetime": "^5.1.0",
- "signal-exit": "^3.0.2"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/inquirer/node_modules/signal-exit": {
- "version": "3.0.7",
- "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
- "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==",
- "license": "ISC"
- },
"node_modules/inquirer/node_modules/string-width": {
"version": "4.2.3",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
"integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
- "license": "MIT",
"dependencies": {
"emoji-regex": "^8.0.0",
"is-fullwidth-code-point": "^3.0.0",
@@ -4818,7 +6395,6 @@
"version": "6.0.1",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
"integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
- "license": "MIT",
"dependencies": {
"ansi-regex": "^5.0.1"
},
@@ -4830,7 +6406,6 @@
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
"integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
- "license": "MIT",
"dependencies": {
"has-flag": "^4.0.0"
},
@@ -4842,7 +6417,6 @@
"version": "6.2.0",
"resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz",
"integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==",
- "license": "MIT",
"dependencies": {
"ansi-styles": "^4.0.0",
"string-width": "^4.1.0",
@@ -4856,7 +6430,6 @@
"version": "9.0.5",
"resolved": "https://registry.npmjs.org/ip-address/-/ip-address-9.0.5.tgz",
"integrity": "sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==",
- "license": "MIT",
"dependencies": {
"jsbn": "1.1.0",
"sprintf-js": "^1.1.3"
@@ -4865,26 +6438,29 @@
"node": ">= 12"
}
},
- "node_modules/ip-address/node_modules/sprintf-js": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz",
- "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==",
- "license": "BSD-3-Clause"
+ "node_modules/ipaddr.js": {
+ "version": "1.9.1",
+ "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz",
+ "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==",
+ "engines": {
+ "node": ">= 0.10"
+ }
},
"node_modules/is-any-array": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/is-any-array/-/is-any-array-2.0.1.tgz",
- "integrity": "sha512-UtilS7hLRu++wb/WBAw9bNuP1Eg04Ivn1vERJck8zJthEvXCBEBpGR/33u/xLKWEQf95803oalHrVDptcAvFdQ==",
- "license": "MIT"
+ "integrity": "sha512-UtilS7hLRu++wb/WBAw9bNuP1Eg04Ivn1vERJck8zJthEvXCBEBpGR/33u/xLKWEQf95803oalHrVDptcAvFdQ=="
},
"node_modules/is-arrayish": {
"version": "0.3.2",
- "license": "MIT",
+ "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz",
+ "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==",
"optional": true
},
"node_modules/is-binary-path": {
"version": "2.1.0",
- "license": "MIT",
+ "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
+ "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
"dependencies": {
"binary-extensions": "^2.0.0"
},
@@ -4894,7 +6470,8 @@
},
"node_modules/is-docker": {
"version": "3.0.0",
- "license": "MIT",
+ "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz",
+ "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==",
"bin": {
"is-docker": "cli.js"
},
@@ -4907,28 +6484,32 @@
},
"node_modules/is-extendable": {
"version": "0.1.1",
- "license": "MIT",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
+ "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==",
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/is-extglob": {
"version": "2.1.1",
- "license": "MIT",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/is-fullwidth-code-point": {
"version": "3.0.0",
- "license": "MIT",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
+ "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
"engines": {
"node": ">=8"
}
},
"node_modules/is-glob": {
"version": "4.0.3",
- "license": "MIT",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
+ "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
"dependencies": {
"is-extglob": "^2.1.1"
},
@@ -4938,7 +6519,8 @@
},
"node_modules/is-inside-container": {
"version": "1.0.0",
- "license": "MIT",
+ "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz",
+ "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==",
"dependencies": {
"is-docker": "^3.0.0"
},
@@ -4954,7 +6536,8 @@
},
"node_modules/is-interactive": {
"version": "2.0.0",
- "license": "MIT",
+ "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-2.0.0.tgz",
+ "integrity": "sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==",
"engines": {
"node": ">=12"
},
@@ -4964,7 +6547,8 @@
},
"node_modules/is-number": {
"version": "7.0.0",
- "license": "MIT",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
+ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
"engines": {
"node": ">=0.12.0"
}
@@ -4973,14 +6557,14 @@
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz",
"integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==",
- "license": "MIT",
"engines": {
"node": ">=8"
}
},
"node_modules/is-plain-obj": {
"version": "4.1.0",
- "license": "MIT",
+ "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz",
+ "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==",
"engines": {
"node": ">=12"
},
@@ -4991,12 +6575,12 @@
"node_modules/is-potential-custom-element-name": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz",
- "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==",
- "license": "MIT"
+ "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ=="
},
"node_modules/is-stream": {
"version": "3.0.0",
- "license": "MIT",
+ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz",
+ "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==",
"engines": {
"node": "^12.20.0 || ^14.13.1 || >=16.0.0"
},
@@ -5006,7 +6590,8 @@
},
"node_modules/is-unicode-supported": {
"version": "2.0.0",
- "license": "MIT",
+ "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-2.0.0.tgz",
+ "integrity": "sha512-FRdAyx5lusK1iHG0TWpVtk9+1i+GjrzRffhDg4ovQ7mcidMQ6mj+MhKPmvh7Xwyv5gIS06ns49CA7Sqg7lC22Q==",
"engines": {
"node": ">=18"
},
@@ -5016,7 +6601,8 @@
},
"node_modules/is-wsl": {
"version": "3.1.0",
- "license": "MIT",
+ "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.0.tgz",
+ "integrity": "sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==",
"dependencies": {
"is-inside-container": "^1.0.0"
},
@@ -5027,23 +6613,49 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ=="
+ },
"node_modules/isexe": {
"version": "2.0.0",
- "license": "ISC"
+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
+ "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw=="
+ },
+ "node_modules/jackspeak": {
+ "version": "3.4.3",
+ "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz",
+ "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==",
+ "dependencies": {
+ "@isaacs/cliui": "^8.0.2"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ },
+ "optionalDependencies": {
+ "@pkgjs/parseargs": "^0.11.0"
+ }
},
"node_modules/jquery": {
"version": "3.7.1",
"resolved": "https://registry.npmjs.org/jquery/-/jquery-3.7.1.tgz",
- "integrity": "sha512-m4avr8yL8kmFN8psrbFFFmB/If14iN5o9nw/NgnnM+kybDJpRsAynV2BsfpTYrTRysYUdADVD7CkUUizgkpLfg==",
- "license": "MIT"
+ "integrity": "sha512-m4avr8yL8kmFN8psrbFFFmB/If14iN5o9nw/NgnnM+kybDJpRsAynV2BsfpTYrTRysYUdADVD7CkUUizgkpLfg=="
+ },
+ "node_modules/js-base64": {
+ "version": "3.7.2",
+ "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-3.7.2.tgz",
+ "integrity": "sha512-NnRs6dsyqUXejqk/yv2aiXlAvOs56sLkX6nUdeaNezI5LFFLlsZjOThmwnrcwh5ZZRwZlCMnVAY3CvhIhoVEKQ=="
},
"node_modules/js-tokens": {
"version": "4.0.0",
- "license": "MIT"
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
+ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="
},
"node_modules/js-yaml": {
"version": "4.1.0",
- "license": "MIT",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
+ "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
"dependencies": {
"argparse": "^2.0.1"
},
@@ -5054,14 +6666,12 @@
"node_modules/jsbn": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/jsbn/-/jsbn-1.1.0.tgz",
- "integrity": "sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==",
- "license": "MIT"
+ "integrity": "sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A=="
},
"node_modules/jsdom": {
- "version": "24.1.0",
- "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-24.1.0.tgz",
- "integrity": "sha512-6gpM7pRXCwIOKxX47cgOyvyQDN/Eh0f1MeKySBV2xGdKtqJBLj8P25eY3EVCWo2mglDDzozR2r2MW4T+JiNUZA==",
- "license": "MIT",
+ "version": "24.1.1",
+ "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-24.1.1.tgz",
+ "integrity": "sha512-5O1wWV99Jhq4DV7rCLIoZ/UIhyQeDR7wHVyZAHAshbrvZsLs+Xzz7gtwnlJTJDjleiTKh54F4dXrX70vJQTyJQ==",
"dependencies": {
"cssstyle": "^4.0.1",
"data-urls": "^5.0.0",
@@ -5069,11 +6679,11 @@
"form-data": "^4.0.0",
"html-encoding-sniffer": "^4.0.0",
"http-proxy-agent": "^7.0.2",
- "https-proxy-agent": "^7.0.4",
+ "https-proxy-agent": "^7.0.5",
"is-potential-custom-element-name": "^1.0.1",
- "nwsapi": "^2.2.10",
+ "nwsapi": "^2.2.12",
"parse5": "^7.1.2",
- "rrweb-cssom": "^0.7.0",
+ "rrweb-cssom": "^0.7.1",
"saxes": "^6.0.0",
"symbol-tree": "^3.2.4",
"tough-cookie": "^4.1.4",
@@ -5082,7 +6692,7 @@
"whatwg-encoding": "^3.1.1",
"whatwg-mimetype": "^4.0.0",
"whatwg-url": "^14.0.0",
- "ws": "^8.17.0",
+ "ws": "^8.18.0",
"xml-name-validator": "^5.0.0"
},
"engines": {
@@ -5099,7 +6709,8 @@
},
"node_modules/jsesc": {
"version": "2.5.2",
- "license": "MIT",
+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz",
+ "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==",
"bin": {
"jsesc": "bin/jsesc"
},
@@ -5110,12 +6721,25 @@
"node_modules/json-buffer": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz",
- "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==",
- "license": "MIT"
+ "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ=="
+ },
+ "node_modules/json-schema-ref-resolver": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/json-schema-ref-resolver/-/json-schema-ref-resolver-1.0.1.tgz",
+ "integrity": "sha512-EJAj1pgHc1hxF6vo2Z3s69fMjO1INq6eGHXZ8Z6wCQeldCuwxGK9Sxf4/cScGn3FZubCVUehfWtcDM/PLteCQw==",
+ "dependencies": {
+ "fast-deep-equal": "^3.1.3"
+ }
+ },
+ "node_modules/json-schema-traverse": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
+ "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug=="
},
"node_modules/json5": {
"version": "2.2.3",
- "license": "MIT",
+ "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz",
+ "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==",
"bin": {
"json5": "lib/cli.js"
},
@@ -5126,14 +6750,12 @@
"node_modules/jsonc-parser": {
"version": "2.3.1",
"resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-2.3.1.tgz",
- "integrity": "sha512-H8jvkz1O50L3dMZCsLqiuB2tA7muqbSg1AtGEkN0leAqGjsUzDJir3Zwr02BhqdcITPg3ei3mZ+HjMocAknhhg==",
- "license": "MIT"
+ "integrity": "sha512-H8jvkz1O50L3dMZCsLqiuB2tA7muqbSg1AtGEkN0leAqGjsUzDJir3Zwr02BhqdcITPg3ei3mZ+HjMocAknhhg=="
},
"node_modules/jsonfile": {
"version": "6.1.0",
"resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz",
"integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==",
- "license": "MIT",
"dependencies": {
"universalify": "^2.0.0"
},
@@ -5145,30 +6767,40 @@
"version": "4.5.4",
"resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz",
"integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==",
- "license": "MIT",
"dependencies": {
"json-buffer": "3.0.1"
}
},
"node_modules/kind-of": {
"version": "6.0.3",
- "license": "MIT",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
+ "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/kleur": {
"version": "4.1.5",
- "license": "MIT",
+ "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz",
+ "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==",
"engines": {
"node": ">=6"
}
},
+ "node_modules/light-my-request": {
+ "version": "5.13.0",
+ "resolved": "https://registry.npmjs.org/light-my-request/-/light-my-request-5.13.0.tgz",
+ "integrity": "sha512-9IjUN9ZyCS9pTG+KqTDEQo68Sui2lHsYBrfMyVUTTZ3XhH8PMZq7xO94Kr+eP9dhi/kcKsx4N41p2IXEBil1pQ==",
+ "dependencies": {
+ "cookie": "^0.6.0",
+ "process-warning": "^3.0.0",
+ "set-cookie-parser": "^2.4.1"
+ }
+ },
"node_modules/linkedom": {
"version": "0.18.4",
"resolved": "https://registry.npmjs.org/linkedom/-/linkedom-0.18.4.tgz",
"integrity": "sha512-JhLErxMIEOKByMi3fURXgI1fYOzR87L1Cn0+MI9GlMckFrqFZpV1SUGox1jcKtsKN3y6JgclcQf0FzZT//BuGw==",
- "license": "ISC",
"dependencies": {
"css-select": "^5.1.0",
"cssom": "^0.5.0",
@@ -5177,37 +6809,18 @@
"uhyphen": "^0.2.0"
}
},
- "node_modules/linkedom/node_modules/htmlparser2": {
- "version": "9.1.0",
- "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-9.1.0.tgz",
- "integrity": "sha512-5zfg6mHUoaer/97TxnGpxmbR7zJtPwIYFMZ/H5ucTlPZhKvtum05yiPK3Mgai3a0DyVxv7qYqoweaEd2nrYQzQ==",
- "funding": [
- "https://github.com/fb55/htmlparser2?sponsor=1",
- {
- "type": "github",
- "url": "https://github.com/sponsors/fb55"
- }
- ],
- "license": "MIT",
- "dependencies": {
- "domelementtype": "^2.3.0",
- "domhandler": "^5.0.3",
- "domutils": "^3.1.0",
- "entities": "^4.5.0"
- }
- },
"node_modules/linkify-it": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-5.0.0.tgz",
"integrity": "sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==",
- "license": "MIT",
"dependencies": {
"uc.micro": "^2.0.0"
}
},
"node_modules/load-yaml-file": {
"version": "0.2.0",
- "license": "MIT",
+ "resolved": "https://registry.npmjs.org/load-yaml-file/-/load-yaml-file-0.2.0.tgz",
+ "integrity": "sha512-OfCBkGEw4nN6JLtgRidPX6QxjBQGQf72q3si2uvqyFEMbycSFFHwAZeXx6cJgFM9wmLrf9zBwCP3Ivqa+LLZPw==",
"dependencies": {
"graceful-fs": "^4.1.5",
"js-yaml": "^3.13.0",
@@ -5218,9 +6831,18 @@
"node": ">=6"
}
},
+ "node_modules/load-yaml-file/node_modules/argparse": {
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
+ "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
+ "dependencies": {
+ "sprintf-js": "~1.0.2"
+ }
+ },
"node_modules/load-yaml-file/node_modules/js-yaml": {
"version": "3.14.1",
- "license": "MIT",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz",
+ "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==",
"dependencies": {
"argparse": "^1.0.7",
"esprima": "^4.0.0"
@@ -5229,47 +6851,41 @@
"js-yaml": "bin/js-yaml.js"
}
},
- "node_modules/load-yaml-file/node_modules/js-yaml/node_modules/argparse": {
- "version": "1.0.10",
- "license": "MIT",
- "dependencies": {
- "sprintf-js": "~1.0.2"
- }
+ "node_modules/load-yaml-file/node_modules/sprintf-js": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
+ "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g=="
},
"node_modules/locate-path": {
- "version": "6.0.0",
- "license": "MIT",
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
+ "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
"dependencies": {
- "p-locate": "^5.0.0"
+ "p-locate": "^4.1.0"
},
"engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
+ "node": ">=8"
}
},
"node_modules/lodash": {
"version": "4.17.21",
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
- "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
- "license": "MIT"
+ "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="
},
"node_modules/lodash.isequal": {
"version": "4.5.0",
"resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz",
- "integrity": "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==",
- "license": "MIT"
+ "integrity": "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ=="
},
"node_modules/lodash.merge": {
"version": "4.6.2",
"resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
- "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
- "license": "MIT"
+ "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ=="
},
"node_modules/log-symbols": {
"version": "6.0.0",
- "license": "MIT",
+ "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-6.0.0.tgz",
+ "integrity": "sha512-i24m8rpwhmPIS4zscNzK6MSEhk0DUWa/8iYQWxhffV8jkI4Phvs3F+quL5xvS0gdQR0FyTCMMH33Y78dDTzzIw==",
"dependencies": {
"chalk": "^5.3.0",
"is-unicode-supported": "^1.3.0"
@@ -5281,9 +6897,21 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/log-symbols/node_modules/chalk": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz",
+ "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==",
+ "engines": {
+ "node": "^12.17.0 || ^14.13 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
"node_modules/log-symbols/node_modules/is-unicode-supported": {
"version": "1.3.0",
- "license": "MIT",
+ "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-1.3.0.tgz",
+ "integrity": "sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==",
"engines": {
"node": ">=12"
},
@@ -5295,7 +6923,6 @@
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-3.1.0.tgz",
"integrity": "sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==",
- "license": "MIT",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/wooorm"
@@ -5324,7 +6951,6 @@
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-3.0.0.tgz",
"integrity": "sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==",
- "license": "MIT",
"engines": {
"node": "^12.20.0 || ^14.13.1 || >=16.0.0"
},
@@ -5334,18 +6960,34 @@
},
"node_modules/lru-cache": {
"version": "5.1.1",
- "license": "ISC",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz",
+ "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==",
"dependencies": {
"yallist": "^3.0.2"
}
},
- "node_modules/magic-string": {
- "version": "0.30.10",
- "license": "MIT",
- "dependencies": {
- "@jridgewell/sourcemap-codec": "^1.4.15"
+ "node_modules/luxon": {
+ "version": "3.5.0",
+ "resolved": "https://registry.npmjs.org/luxon/-/luxon-3.5.0.tgz",
+ "integrity": "sha512-rh+Zjr6DNfUYR3bPwJEnuwDdqMbxZW7LOQfUN4B54+Cl+0o5zaU9RJ6bcidfDtC1cWCZXQ+nvX8bf6bAji37QQ==",
+ "engines": {
+ "node": ">=12"
}
},
+ "node_modules/magic-string": {
+ "version": "0.30.11",
+ "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.11.tgz",
+ "integrity": "sha512-+Wri9p0QHMy+545hKww7YAu5NyzF8iomPL/RQazugQ9+Ez4Ic3mERMd8ZTX5rfK944j+560ZJi8iAwgak1Ac7A==",
+ "dependencies": {
+ "@jridgewell/sourcemap-codec": "^1.5.0"
+ }
+ },
+ "node_modules/make-error": {
+ "version": "1.3.6",
+ "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz",
+ "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==",
+ "dev": true
+ },
"node_modules/map-stream": {
"version": "0.1.0",
"resolved": "https://registry.npmjs.org/map-stream/-/map-stream-0.1.0.tgz",
@@ -5355,7 +6997,6 @@
"version": "14.1.0",
"resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-14.1.0.tgz",
"integrity": "sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg==",
- "license": "MIT",
"dependencies": {
"argparse": "^2.0.1",
"entities": "^4.4.0",
@@ -5369,10 +7010,9 @@
}
},
"node_modules/markdown-it-attrs": {
- "version": "4.1.6",
- "resolved": "https://registry.npmjs.org/markdown-it-attrs/-/markdown-it-attrs-4.1.6.tgz",
- "integrity": "sha512-O7PDKZlN8RFMyDX13JnctQompwrrILuz2y43pW2GagcwpIIElkAdfeek+erHfxUOlXWPsjFeWmZ8ch1xtRLWpA==",
- "license": "MIT",
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/markdown-it-attrs/-/markdown-it-attrs-4.2.0.tgz",
+ "integrity": "sha512-m7svtUBythvcGFFZAv9VjMEvs8UbHri2sojJ3juJumoOzv8sdkx9a7W3KxiHbXxAbvL3Xauak8TMwCnvigVPKw==",
"engines": {
"node": ">=6"
},
@@ -5384,7 +7024,6 @@
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-3.0.3.tgz",
"integrity": "sha512-Z1NL3Tb1M9wH4XESsCDEksWoKTdlUafKc4pt0GRwjUyXaCFZ+dc3g2erqB6zm3szA2IUSi7VnPI+o/9jnxh9hw==",
- "license": "MIT",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/wooorm"
@@ -5394,7 +7033,6 @@
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/mdast-util-definitions/-/mdast-util-definitions-6.0.0.tgz",
"integrity": "sha512-scTllyX6pnYNZH/AIp/0ePz6s4cZtARxImwoPJ7kS42n+MnVsI4XbnG6d4ibehRIldYMWM2LD7ImQblVhUejVQ==",
- "license": "MIT",
"dependencies": {
"@types/mdast": "^4.0.0",
"@types/unist": "^3.0.0",
@@ -5409,7 +7047,6 @@
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/mdast-util-find-and-replace/-/mdast-util-find-and-replace-3.0.1.tgz",
"integrity": "sha512-SG21kZHGC3XRTSUhtofZkBzZTJNM5ecCi0SK2IMKmSXR8vO3peL+kb1O0z7Zl83jKtutG4k5Wv/W7V3/YHvzPA==",
- "license": "MIT",
"dependencies": {
"@types/mdast": "^4.0.0",
"escape-string-regexp": "^5.0.0",
@@ -5425,7 +7062,6 @@
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz",
"integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==",
- "license": "MIT",
"engines": {
"node": ">=12"
},
@@ -5437,7 +7073,6 @@
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.1.tgz",
"integrity": "sha512-aJEUyzZ6TzlsX2s5B4Of7lN7EQtAxvtradMMglCQDyaTFgse6CmtmdJ15ElnVRlCg1vpNyVtbem0PWzlNieZsA==",
- "license": "MIT",
"dependencies": {
"@types/mdast": "^4.0.0",
"@types/unist": "^3.0.0",
@@ -5461,7 +7096,6 @@
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/mdast-util-gfm/-/mdast-util-gfm-3.0.0.tgz",
"integrity": "sha512-dgQEX5Amaq+DuUqf26jJqSK9qgixgd6rYDHAv4aTBuA92cTknZlKpPfa86Z/s8Dj8xsAQpFfBmPUHWJBWqS4Bw==",
- "license": "MIT",
"dependencies": {
"mdast-util-from-markdown": "^2.0.0",
"mdast-util-gfm-autolink-literal": "^2.0.0",
@@ -5477,10 +7111,9 @@
}
},
"node_modules/mdast-util-gfm-autolink-literal": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-2.0.0.tgz",
- "integrity": "sha512-FyzMsduZZHSc3i0Px3PQcBT4WJY/X/RCtEJKuybiC6sjPqLv7h1yqAkmILZtuxMSsUyaLUWNp71+vQH2zqp5cg==",
- "license": "MIT",
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-2.0.1.tgz",
+ "integrity": "sha512-5HVP2MKaP6L+G6YaxPNjuL0BPrq9orG3TsrZ9YXbA3vDw/ACI4MEsnoDpn6ZNm7GnZgtAcONJyPhOP8tNJQavQ==",
"dependencies": {
"@types/mdast": "^4.0.0",
"ccount": "^2.0.0",
@@ -5497,7 +7130,6 @@
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/mdast-util-gfm-footnote/-/mdast-util-gfm-footnote-2.0.0.tgz",
"integrity": "sha512-5jOT2boTSVkMnQ7LTrd6n/18kqwjmuYqo7JUPe+tRCY6O7dAuTFMtTPauYYrMPpox9hlN0uOx/FL8XvEfG9/mQ==",
- "license": "MIT",
"dependencies": {
"@types/mdast": "^4.0.0",
"devlop": "^1.1.0",
@@ -5514,7 +7146,6 @@
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/mdast-util-gfm-strikethrough/-/mdast-util-gfm-strikethrough-2.0.0.tgz",
"integrity": "sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg==",
- "license": "MIT",
"dependencies": {
"@types/mdast": "^4.0.0",
"mdast-util-from-markdown": "^2.0.0",
@@ -5529,7 +7160,6 @@
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/mdast-util-gfm-table/-/mdast-util-gfm-table-2.0.0.tgz",
"integrity": "sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg==",
- "license": "MIT",
"dependencies": {
"@types/mdast": "^4.0.0",
"devlop": "^1.0.0",
@@ -5546,7 +7176,6 @@
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/mdast-util-gfm-task-list-item/-/mdast-util-gfm-task-list-item-2.0.0.tgz",
"integrity": "sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ==",
- "license": "MIT",
"dependencies": {
"@types/mdast": "^4.0.0",
"devlop": "^1.0.0",
@@ -5562,7 +7191,6 @@
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/mdast-util-phrasing/-/mdast-util-phrasing-4.1.0.tgz",
"integrity": "sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==",
- "license": "MIT",
"dependencies": {
"@types/mdast": "^4.0.0",
"unist-util-is": "^6.0.0"
@@ -5574,7 +7202,8 @@
},
"node_modules/mdast-util-to-hast": {
"version": "13.2.0",
- "license": "MIT",
+ "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-13.2.0.tgz",
+ "integrity": "sha512-QGYKEuUsYT9ykKBCMOEDLsU5JRObWQusAolFMeko/tYPufNkRffBAQjIE+99jbA87xv6FgmjLtwjh9wBWajwAA==",
"dependencies": {
"@types/hast": "^3.0.0",
"@types/mdast": "^4.0.0",
@@ -5595,7 +7224,6 @@
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-2.1.0.tgz",
"integrity": "sha512-SR2VnIEdVNCJbP6y7kVTJgPLifdr8WEU440fQec7qHoHOUz/oJ2jmNRqdDQ3rbiStOXb2mCDGTuwsK5OPUgYlQ==",
- "license": "MIT",
"dependencies": {
"@types/mdast": "^4.0.0",
"@types/unist": "^3.0.0",
@@ -5615,7 +7243,6 @@
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz",
"integrity": "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==",
- "license": "MIT",
"dependencies": {
"@types/mdast": "^4.0.0"
},
@@ -5627,16 +7254,43 @@
"node_modules/mdurl": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/mdurl/-/mdurl-2.0.0.tgz",
- "integrity": "sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==",
- "license": "MIT"
+ "integrity": "sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w=="
+ },
+ "node_modules/media-typer": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
+ "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/memfs": {
+ "version": "4.11.1",
+ "resolved": "https://registry.npmjs.org/memfs/-/memfs-4.11.1.tgz",
+ "integrity": "sha512-LZcMTBAgqUUKNXZagcZxvXXfgF1bHX7Y7nQ0QyEiNbRJgE29GhgPd8Yna1VQcLlPiHt/5RFJMWYN9Uv/VPNvjQ==",
+ "dependencies": {
+ "@jsonjoy.com/json-pack": "^1.0.3",
+ "@jsonjoy.com/util": "^1.3.0",
+ "tree-dump": "^1.0.1",
+ "tslib": "^2.0.0"
+ },
+ "engines": {
+ "node": ">= 4.0.0"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/streamich"
+ }
},
"node_modules/merge-stream": {
"version": "2.0.0",
- "license": "MIT"
+ "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz",
+ "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w=="
},
"node_modules/merge2": {
"version": "1.4.1",
- "license": "MIT",
+ "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
+ "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
"engines": {
"node": ">= 8"
}
@@ -5645,7 +7299,6 @@
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
"integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==",
- "license": "MIT",
"engines": {
"node": ">= 0.6"
}
@@ -5664,7 +7317,6 @@
"url": "https://opencollective.com/unified"
}
],
- "license": "MIT",
"dependencies": {
"@types/debug": "^4.0.0",
"debug": "^4.0.0",
@@ -5699,7 +7351,6 @@
"url": "https://opencollective.com/unified"
}
],
- "license": "MIT",
"dependencies": {
"decode-named-character-reference": "^1.0.0",
"devlop": "^1.0.0",
@@ -5723,7 +7374,6 @@
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/micromark-extension-gfm/-/micromark-extension-gfm-3.0.0.tgz",
"integrity": "sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w==",
- "license": "MIT",
"dependencies": {
"micromark-extension-gfm-autolink-literal": "^2.0.0",
"micromark-extension-gfm-footnote": "^2.0.0",
@@ -5743,7 +7393,6 @@
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-2.1.0.tgz",
"integrity": "sha512-oOg7knzhicgQ3t4QCjCWgTmfNhvQbDDnJeVu9v81r7NltNCVmhPy1fJRX27pISafdjL+SVc4d3l48Gb6pbRypw==",
- "license": "MIT",
"dependencies": {
"micromark-util-character": "^2.0.0",
"micromark-util-sanitize-uri": "^2.0.0",
@@ -5759,7 +7408,6 @@
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/micromark-extension-gfm-footnote/-/micromark-extension-gfm-footnote-2.1.0.tgz",
"integrity": "sha512-/yPhxI1ntnDNsiHtzLKYnE3vf9JZ6cAisqVDauhp4CEHxlb4uoOTxOCJ+9s51bIB8U1N1FJ1RXOKTIlD5B/gqw==",
- "license": "MIT",
"dependencies": {
"devlop": "^1.0.0",
"micromark-core-commonmark": "^2.0.0",
@@ -5779,7 +7427,6 @@
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/micromark-extension-gfm-strikethrough/-/micromark-extension-gfm-strikethrough-2.1.0.tgz",
"integrity": "sha512-ADVjpOOkjz1hhkZLlBiYA9cR2Anf8F4HqZUO6e5eDcPQd0Txw5fxLzzxnEkSkfnD0wziSGiv7sYhk/ktvbf1uw==",
- "license": "MIT",
"dependencies": {
"devlop": "^1.0.0",
"micromark-util-chunked": "^2.0.0",
@@ -5797,7 +7444,6 @@
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/micromark-extension-gfm-table/-/micromark-extension-gfm-table-2.1.0.tgz",
"integrity": "sha512-Ub2ncQv+fwD70/l4ou27b4YzfNaCJOvyX4HxXU15m7mpYY+rjuWzsLIPZHJL253Z643RpbcP1oeIJlQ/SKW67g==",
- "license": "MIT",
"dependencies": {
"devlop": "^1.0.0",
"micromark-factory-space": "^2.0.0",
@@ -5814,7 +7460,6 @@
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/micromark-extension-gfm-tagfilter/-/micromark-extension-gfm-tagfilter-2.0.0.tgz",
"integrity": "sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg==",
- "license": "MIT",
"dependencies": {
"micromark-util-types": "^2.0.0"
},
@@ -5827,7 +7472,6 @@
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/micromark-extension-gfm-task-list-item/-/micromark-extension-gfm-task-list-item-2.1.0.tgz",
"integrity": "sha512-qIBZhqxqI6fjLDYFTBIa4eivDMnP+OZqsNwmQ3xNLE4Cxwc+zfQEfbs6tzAo2Hjq+bh6q5F+Z8/cksrLFYWQQw==",
- "license": "MIT",
"dependencies": {
"devlop": "^1.0.0",
"micromark-factory-space": "^2.0.0",
@@ -5854,7 +7498,6 @@
"url": "https://opencollective.com/unified"
}
],
- "license": "MIT",
"dependencies": {
"micromark-util-character": "^2.0.0",
"micromark-util-symbol": "^2.0.0",
@@ -5875,7 +7518,6 @@
"url": "https://opencollective.com/unified"
}
],
- "license": "MIT",
"dependencies": {
"devlop": "^1.0.0",
"micromark-util-character": "^2.0.0",
@@ -5897,7 +7539,6 @@
"url": "https://opencollective.com/unified"
}
],
- "license": "MIT",
"dependencies": {
"micromark-util-character": "^2.0.0",
"micromark-util-types": "^2.0.0"
@@ -5917,7 +7558,6 @@
"url": "https://opencollective.com/unified"
}
],
- "license": "MIT",
"dependencies": {
"micromark-factory-space": "^2.0.0",
"micromark-util-character": "^2.0.0",
@@ -5939,7 +7579,6 @@
"url": "https://opencollective.com/unified"
}
],
- "license": "MIT",
"dependencies": {
"micromark-factory-space": "^2.0.0",
"micromark-util-character": "^2.0.0",
@@ -5949,6 +7588,8 @@
},
"node_modules/micromark-util-character": {
"version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz",
+ "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==",
"funding": [
{
"type": "GitHub Sponsors",
@@ -5959,7 +7600,6 @@
"url": "https://opencollective.com/unified"
}
],
- "license": "MIT",
"dependencies": {
"micromark-util-symbol": "^2.0.0",
"micromark-util-types": "^2.0.0"
@@ -5979,7 +7619,6 @@
"url": "https://opencollective.com/unified"
}
],
- "license": "MIT",
"dependencies": {
"micromark-util-symbol": "^2.0.0"
}
@@ -5998,7 +7637,6 @@
"url": "https://opencollective.com/unified"
}
],
- "license": "MIT",
"dependencies": {
"micromark-util-character": "^2.0.0",
"micromark-util-symbol": "^2.0.0",
@@ -6019,7 +7657,6 @@
"url": "https://opencollective.com/unified"
}
],
- "license": "MIT",
"dependencies": {
"micromark-util-chunked": "^2.0.0",
"micromark-util-types": "^2.0.0"
@@ -6039,7 +7676,6 @@
"url": "https://opencollective.com/unified"
}
],
- "license": "MIT",
"dependencies": {
"micromark-util-symbol": "^2.0.0"
}
@@ -6058,7 +7694,6 @@
"url": "https://opencollective.com/unified"
}
],
- "license": "MIT",
"dependencies": {
"decode-named-character-reference": "^1.0.0",
"micromark-util-character": "^2.0.0",
@@ -6068,6 +7703,8 @@
},
"node_modules/micromark-util-encode": {
"version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.0.tgz",
+ "integrity": "sha512-pS+ROfCXAGLWCOc8egcBvT0kf27GoWMqtdarNfDcjb6YLuV5cM3ioG45Ys2qOVqeqSbjaKg72vU+Wby3eddPsA==",
"funding": [
{
"type": "GitHub Sponsors",
@@ -6077,8 +7714,7 @@
"type": "OpenCollective",
"url": "https://opencollective.com/unified"
}
- ],
- "license": "MIT"
+ ]
},
"node_modules/micromark-util-html-tag-name": {
"version": "2.0.0",
@@ -6093,8 +7729,7 @@
"type": "OpenCollective",
"url": "https://opencollective.com/unified"
}
- ],
- "license": "MIT"
+ ]
},
"node_modules/micromark-util-normalize-identifier": {
"version": "2.0.0",
@@ -6110,7 +7745,6 @@
"url": "https://opencollective.com/unified"
}
],
- "license": "MIT",
"dependencies": {
"micromark-util-symbol": "^2.0.0"
}
@@ -6129,13 +7763,14 @@
"url": "https://opencollective.com/unified"
}
],
- "license": "MIT",
"dependencies": {
"micromark-util-types": "^2.0.0"
}
},
"node_modules/micromark-util-sanitize-uri": {
"version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.0.tgz",
+ "integrity": "sha512-WhYv5UEcZrbAtlsnPuChHUAsu/iBPOVaEVsntLBIdpibO0ddy8OzavZz3iL2xVvBZOpolujSliP65Kq0/7KIYw==",
"funding": [
{
"type": "GitHub Sponsors",
@@ -6146,7 +7781,6 @@
"url": "https://opencollective.com/unified"
}
],
- "license": "MIT",
"dependencies": {
"micromark-util-character": "^2.0.0",
"micromark-util-encode": "^2.0.0",
@@ -6167,7 +7801,6 @@
"url": "https://opencollective.com/unified"
}
],
- "license": "MIT",
"dependencies": {
"devlop": "^1.0.0",
"micromark-util-chunked": "^2.0.0",
@@ -6177,6 +7810,8 @@
},
"node_modules/micromark-util-symbol": {
"version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz",
+ "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==",
"funding": [
{
"type": "GitHub Sponsors",
@@ -6186,11 +7821,12 @@
"type": "OpenCollective",
"url": "https://opencollective.com/unified"
}
- ],
- "license": "MIT"
+ ]
},
"node_modules/micromark-util-types": {
"version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.0.tgz",
+ "integrity": "sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==",
"funding": [
{
"type": "GitHub Sponsors",
@@ -6200,12 +7836,12 @@
"type": "OpenCollective",
"url": "https://opencollective.com/unified"
}
- ],
- "license": "MIT"
+ ]
},
"node_modules/micromatch": {
"version": "4.0.7",
- "license": "MIT",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.7.tgz",
+ "integrity": "sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==",
"dependencies": {
"braces": "^3.0.3",
"picomatch": "^2.3.1"
@@ -6215,22 +7851,20 @@
}
},
"node_modules/mime": {
- "version": "2.6.0",
- "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz",
- "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==",
- "license": "MIT",
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz",
+ "integrity": "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==",
"bin": {
"mime": "cli.js"
},
"engines": {
- "node": ">=4.0.0"
+ "node": ">=10.0.0"
}
},
"node_modules/mime-db": {
"version": "1.52.0",
"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
"integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
- "license": "MIT",
"engines": {
"node": ">= 0.6"
}
@@ -6239,7 +7873,6 @@
"version": "2.1.35",
"resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
"integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
- "license": "MIT",
"dependencies": {
"mime-db": "1.52.0"
},
@@ -6249,7 +7882,8 @@
},
"node_modules/mimic-fn": {
"version": "4.0.0",
- "license": "MIT",
+ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz",
+ "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==",
"engines": {
"node": ">=12"
},
@@ -6261,7 +7895,6 @@
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-4.0.0.tgz",
"integrity": "sha512-e5ISH9xMYU0DzrT+jl8q2ze9D6eWBto+I8CNpe+VI+K2J/F/k3PdkdTdz4wvGVH4NTpo+NRYTVIuMQEMMcsLqg==",
- "license": "MIT",
"engines": {
"node": "^12.20.0 || ^14.13.1 || >=16.0.0"
},
@@ -6273,7 +7906,6 @@
"version": "9.0.5",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
"integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
- "license": "ISC",
"dependencies": {
"brace-expansion": "^2.0.1"
},
@@ -6284,11 +7916,37 @@
"url": "https://github.com/sponsors/isaacs"
}
},
+ "node_modules/minimist": {
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz",
+ "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==",
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/minipass": {
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz",
+ "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==",
+ "engines": {
+ "node": ">=16 || 14 >=14.17"
+ }
+ },
+ "node_modules/mkdirp": {
+ "version": "0.5.6",
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz",
+ "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==",
+ "dependencies": {
+ "minimist": "^1.2.6"
+ },
+ "bin": {
+ "mkdirp": "bin/cmd.js"
+ }
+ },
"node_modules/ml-array-max": {
"version": "1.2.4",
"resolved": "https://registry.npmjs.org/ml-array-max/-/ml-array-max-1.2.4.tgz",
"integrity": "sha512-BlEeg80jI0tW6WaPyGxf5Sa4sqvcyY6lbSn5Vcv44lp1I2GR6AWojfUvLnGTNsIXrZ8uqWmo8VcG1WpkI2ONMQ==",
- "license": "MIT",
"dependencies": {
"is-any-array": "^2.0.0"
}
@@ -6297,7 +7955,6 @@
"version": "1.2.3",
"resolved": "https://registry.npmjs.org/ml-array-min/-/ml-array-min-1.2.3.tgz",
"integrity": "sha512-VcZ5f3VZ1iihtrGvgfh/q0XlMobG6GQ8FsNyQXD3T+IlstDv85g8kfV0xUG1QPRO/t21aukaJowDzMTc7j5V6Q==",
- "license": "MIT",
"dependencies": {
"is-any-array": "^2.0.0"
}
@@ -6306,7 +7963,6 @@
"version": "1.3.7",
"resolved": "https://registry.npmjs.org/ml-array-rescale/-/ml-array-rescale-1.3.7.tgz",
"integrity": "sha512-48NGChTouvEo9KBctDfHC3udWnQKNKEWN0ziELvY3KG25GR5cA8K8wNVzracsqSW1QEkAXjTNx+ycgAv06/1mQ==",
- "license": "MIT",
"dependencies": {
"is-any-array": "^2.0.0",
"ml-array-max": "^1.2.4",
@@ -6317,7 +7973,6 @@
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/ml-logistic-regression/-/ml-logistic-regression-2.0.0.tgz",
"integrity": "sha512-xHhB91ut8GRRbJyB1ZQfKsl1MHmE1PqMeRjxhks96M5BGvCbC9eEojf4KgRMKM2LxFblhVUcVzweAoPB48Nt0A==",
- "license": "MIT",
"dependencies": {
"ml-matrix": "^6.5.0"
}
@@ -6326,7 +7981,6 @@
"version": "6.11.1",
"resolved": "https://registry.npmjs.org/ml-matrix/-/ml-matrix-6.11.1.tgz",
"integrity": "sha512-Fvp1xF1O07tt6Ux9NcnEQTei5UlqbRpvvaFZGs7l3Ij+nOaEDcmbSVtxwNa8V4IfdyFI1NLNUteroMJ1S6vcEg==",
- "license": "MIT",
"dependencies": {
"is-any-array": "^2.0.1",
"ml-array-rescale": "^1.3.7"
@@ -6334,36 +7988,54 @@
},
"node_modules/mrmime": {
"version": "2.0.0",
- "license": "MIT",
+ "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.0.tgz",
+ "integrity": "sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw==",
"engines": {
"node": ">=10"
}
},
"node_modules/ms": {
"version": "2.1.2",
- "license": "MIT"
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
},
"node_modules/muggle-string": {
"version": "0.4.1",
"resolved": "https://registry.npmjs.org/muggle-string/-/muggle-string-0.4.1.tgz",
- "integrity": "sha512-VNTrAak/KhO2i8dqqnqnAHOa3cYBwXEZe9h+D5h/1ZqFSTEFHdM65lR7RoIqq3tBBYavsOXV84NoHXZ0AkPyqQ==",
- "license": "MIT"
+ "integrity": "sha512-VNTrAak/KhO2i8dqqnqnAHOa3cYBwXEZe9h+D5h/1ZqFSTEFHdM65lR7RoIqq3tBBYavsOXV84NoHXZ0AkPyqQ=="
+ },
+ "node_modules/multer": {
+ "version": "1.4.5-lts.1",
+ "resolved": "https://registry.npmjs.org/multer/-/multer-1.4.5-lts.1.tgz",
+ "integrity": "sha512-ywPWvcDMeH+z9gQq5qYHCCy+ethsk4goepZ45GLD63fOu0YcNecQxi64nDs3qluZB+murG3/D4dJ7+dGctcCQQ==",
+ "dependencies": {
+ "append-field": "^1.0.0",
+ "busboy": "^1.0.0",
+ "concat-stream": "^1.5.2",
+ "mkdirp": "^0.5.4",
+ "object-assign": "^4.1.1",
+ "type-is": "^1.6.4",
+ "xtend": "^4.0.0"
+ },
+ "engines": {
+ "node": ">= 6.0.0"
+ }
},
"node_modules/mute-stream": {
"version": "0.0.8",
"resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz",
- "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==",
- "license": "ISC"
+ "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA=="
},
"node_modules/nanoid": {
"version": "3.3.7",
+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz",
+ "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==",
"funding": [
{
"type": "github",
"url": "https://github.com/sponsors/ai"
}
],
- "license": "MIT",
"bin": {
"nanoid": "bin/nanoid.cjs"
},
@@ -6371,11 +8043,18 @@
"node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
}
},
+ "node_modules/neotraverse": {
+ "version": "0.6.18",
+ "resolved": "https://registry.npmjs.org/neotraverse/-/neotraverse-0.6.18.tgz",
+ "integrity": "sha512-Z4SmBUweYa09+o6pG+eASabEpP6QkQ70yHj351pQoEXIs8uHbaU2DWVmzBANKgflPa47A50PtB2+NgRpQvr7vA==",
+ "engines": {
+ "node": ">= 10"
+ }
+ },
"node_modules/nlcst-to-string": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/nlcst-to-string/-/nlcst-to-string-4.0.0.tgz",
"integrity": "sha512-YKLBCcUYKAg0FNlOBT6aI91qFmSiFKiluk655WzPF+DDMA02qIyy8uiRqI8QXtcFpEvll12LpL5MXqEmAZ+dcA==",
- "license": "MIT",
"dependencies": {
"@types/nlcst": "^2.0.0"
},
@@ -6385,12 +8064,14 @@
}
},
"node_modules/node-releases": {
- "version": "2.0.14",
- "license": "MIT"
+ "version": "2.0.18",
+ "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz",
+ "integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g=="
},
"node_modules/normalize-path": {
"version": "3.0.0",
- "license": "MIT",
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
+ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
"engines": {
"node": ">=0.10.0"
}
@@ -6399,7 +8080,6 @@
"version": "8.0.1",
"resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-8.0.1.tgz",
"integrity": "sha512-IO9QvjUMWxPQQhs60oOu10CRkWCiZzSUkzbXGGV9pviYl1fXYcvkzQ5jV9z8Y6un8ARoVRl4EtC6v6jNqbaJ/w==",
- "license": "MIT",
"engines": {
"node": ">=14.16"
},
@@ -6409,7 +8089,8 @@
},
"node_modules/npm-run-path": {
"version": "5.3.0",
- "license": "MIT",
+ "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz",
+ "integrity": "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==",
"dependencies": {
"path-key": "^4.0.0"
},
@@ -6422,7 +8103,8 @@
},
"node_modules/npm-run-path/node_modules/path-key": {
"version": "4.0.0",
- "license": "MIT",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz",
+ "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==",
"engines": {
"node": ">=12"
},
@@ -6434,7 +8116,6 @@
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz",
"integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==",
- "license": "BSD-2-Clause",
"dependencies": {
"boolbase": "^1.0.0"
},
@@ -6443,16 +8124,22 @@
}
},
"node_modules/nwsapi": {
- "version": "2.2.10",
- "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.10.tgz",
- "integrity": "sha512-QK0sRs7MKv0tKe1+5uZIQk/C8XGza4DAnztJG8iD+TpJIORARrCxczA738awHrZoHeTjSSoHqao2teO0dC/gFQ==",
- "license": "MIT"
+ "version": "2.2.12",
+ "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.12.tgz",
+ "integrity": "sha512-qXDmcVlZV4XRtKFzddidpfVP4oMSGhga+xdMc25mv8kaLUHtgzCDhUxkrN8exkGdTlLNaXj7CV3GtON7zuGZ+w=="
+ },
+ "node_modules/object-assign": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+ "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
},
"node_modules/object-inspect": {
"version": "1.13.2",
"resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz",
"integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==",
- "license": "MIT",
"engines": {
"node": ">= 0.4"
},
@@ -6460,18 +8147,45 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/ollama": {
+ "version": "0.5.8",
+ "resolved": "https://registry.npmjs.org/ollama/-/ollama-0.5.8.tgz",
+ "integrity": "sha512-frBGdfSV34i7JybLZUeyCYDx0CMyDiG4On8xOK+cNRWM04HImhoWgIMpF4p7vTkQumadbSxOteR7SZyKqNmOXg==",
+ "dependencies": {
+ "whatwg-fetch": "^3.6.20"
+ }
+ },
+ "node_modules/on-exit-leak-free": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/on-exit-leak-free/-/on-exit-leak-free-2.1.2.tgz",
+ "integrity": "sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA==",
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/on-finished": {
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz",
+ "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==",
+ "dependencies": {
+ "ee-first": "1.1.1"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
"node_modules/once": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
"integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
- "license": "ISC",
"dependencies": {
"wrappy": "1"
}
},
"node_modules/onetime": {
"version": "6.0.0",
- "license": "MIT",
+ "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz",
+ "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==",
"dependencies": {
"mimic-fn": "^4.0.0"
},
@@ -6484,7 +8198,8 @@
},
"node_modules/ora": {
"version": "8.0.1",
- "license": "MIT",
+ "resolved": "https://registry.npmjs.org/ora/-/ora-8.0.1.tgz",
+ "integrity": "sha512-ANIvzobt1rls2BDny5fWZ3ZVKyD6nscLvfFRpQgfWsythlcsVUC9kL0zq6j2Z5z9wwp1kd7wpsD/T9qNPVLCaQ==",
"dependencies": {
"chalk": "^5.3.0",
"cli-cursor": "^4.0.0",
@@ -6503,11 +8218,77 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/ora/node_modules/chalk": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz",
+ "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==",
+ "engines": {
+ "node": "^12.17.0 || ^14.13 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/ora/node_modules/cli-cursor": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-4.0.0.tgz",
+ "integrity": "sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==",
+ "dependencies": {
+ "restore-cursor": "^4.0.0"
+ },
+ "engines": {
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/ora/node_modules/mimic-fn": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
+ "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/ora/node_modules/onetime": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz",
+ "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==",
+ "dependencies": {
+ "mimic-fn": "^2.1.0"
+ },
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/ora/node_modules/restore-cursor": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-4.0.0.tgz",
+ "integrity": "sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==",
+ "dependencies": {
+ "onetime": "^5.1.0",
+ "signal-exit": "^3.0.2"
+ },
+ "engines": {
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/ora/node_modules/signal-exit": {
+ "version": "3.0.7",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
+ "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ=="
+ },
"node_modules/os-tmpdir": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
"integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==",
- "license": "MIT",
"engines": {
"node": ">=0.10.0"
}
@@ -6516,7 +8297,6 @@
"version": "0.28.2",
"resolved": "https://registry.npmjs.org/ow/-/ow-0.28.2.tgz",
"integrity": "sha512-dD4UpyBh/9m4X2NVjA+73/ZPBRF+uF4zIMFvvQsabMiEK8x41L3rQ8EENOi35kyyoaJwNxEeJcP6Fj1H4U409Q==",
- "license": "MIT",
"dependencies": {
"@sindresorhus/is": "^4.2.0",
"callsites": "^3.1.0",
@@ -6535,7 +8315,6 @@
"version": "4.6.0",
"resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz",
"integrity": "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==",
- "license": "MIT",
"engines": {
"node": ">=10"
},
@@ -6547,16 +8326,16 @@
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-4.0.1.tgz",
"integrity": "sha512-wBowNApzd45EIKdO1LaU+LrMBwAcjfPaYtVzV3lmfM3gf8Z4CHZsiIqlM8TZZ8okYvh5A1cP6gTfCRQtwUpaUg==",
- "license": "MIT",
"engines": {
"node": ">=14.16"
}
},
"node_modules/p-limit": {
- "version": "5.0.0",
- "license": "MIT",
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-6.1.0.tgz",
+ "integrity": "sha512-H0jc0q1vOzlEk0TqAKXKZxdl7kX3OFUzCnNVUnq5Pc3DGo0kpeaMuPqxQn235HibwBEb0/pm9dgKTjXy66fBkg==",
"dependencies": {
- "yocto-queue": "^1.0.0"
+ "yocto-queue": "^1.1.1"
},
"engines": {
"node": ">=18"
@@ -6566,36 +8345,25 @@
}
},
"node_modules/p-locate": {
- "version": "5.0.0",
- "license": "MIT",
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
+ "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
"dependencies": {
- "p-limit": "^3.0.2"
+ "p-limit": "^2.2.0"
},
"engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
+ "node": ">=8"
}
},
"node_modules/p-locate/node_modules/p-limit": {
- "version": "3.1.0",
- "license": "MIT",
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
+ "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
"dependencies": {
- "yocto-queue": "^0.1.0"
+ "p-try": "^2.0.0"
},
"engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/p-locate/node_modules/p-limit/node_modules/yocto-queue": {
- "version": "0.1.0",
- "license": "MIT",
- "engines": {
- "node": ">=10"
+ "node": ">=6"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
@@ -6603,7 +8371,8 @@
},
"node_modules/p-queue": {
"version": "8.0.1",
- "license": "MIT",
+ "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-8.0.1.tgz",
+ "integrity": "sha512-NXzu9aQJTAzbBqOt2hwsR63ea7yvxJc0PwN/zobNAudYfb1B7R08SzB4TsLeSbUCuG467NhnoT0oO6w1qRO+BA==",
"dependencies": {
"eventemitter3": "^5.0.1",
"p-timeout": "^6.1.2"
@@ -6617,7 +8386,8 @@
},
"node_modules/p-timeout": {
"version": "6.1.2",
- "license": "MIT",
+ "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-6.1.2.tgz",
+ "integrity": "sha512-UbD77BuZ9Bc9aABo74gfXhNvzC9Tx7SxtHSh1fxvx3jTLLYvmVhiQZZrJzqqU0jKbN32kb5VOKiLEQI/3bIjgQ==",
"engines": {
"node": ">=14.16"
},
@@ -6627,11 +8397,17 @@
},
"node_modules/p-try": {
"version": "2.2.0",
- "license": "MIT",
+ "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
+ "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
"engines": {
"node": ">=6"
}
},
+ "node_modules/package-json-from-dist": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.0.tgz",
+ "integrity": "sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw=="
+ },
"node_modules/parent-require": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/parent-require/-/parent-require-1.0.0.tgz",
@@ -6644,7 +8420,6 @@
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/parse-latin/-/parse-latin-7.0.0.tgz",
"integrity": "sha512-mhHgobPPua5kZ98EF4HWiH167JWBfl4pvAIXXdbaVohtK7a6YBOy56kvhCqduqyo/f3yrHFWmqmiMg/BkBkYYQ==",
- "license": "MIT",
"dependencies": {
"@types/nlcst": "^2.0.0",
"@types/unist": "^3.0.0",
@@ -6660,7 +8435,8 @@
},
"node_modules/parse5": {
"version": "7.1.2",
- "license": "MIT",
+ "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz",
+ "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==",
"dependencies": {
"entities": "^4.4.0"
},
@@ -6672,7 +8448,6 @@
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.0.0.tgz",
"integrity": "sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g==",
- "license": "MIT",
"dependencies": {
"domhandler": "^5.0.2",
"parse5": "^7.0.0"
@@ -6681,29 +8456,62 @@
"url": "https://github.com/inikulin/parse5?sponsor=1"
}
},
+ "node_modules/parse5-parser-stream": {
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/parse5-parser-stream/-/parse5-parser-stream-7.1.2.tgz",
+ "integrity": "sha512-JyeQc9iwFLn5TbvvqACIF/VXG6abODeB3Fwmv/TGdLk2LfbWkaySGY72at4+Ty7EkPZj854u4CrICqNk2qIbow==",
+ "dependencies": {
+ "parse5": "^7.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/inikulin/parse5?sponsor=1"
+ }
+ },
"node_modules/path-browserify": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz",
- "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==",
- "license": "MIT"
+ "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g=="
},
"node_modules/path-exists": {
"version": "4.0.0",
- "license": "MIT",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
+ "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
"engines": {
"node": ">=8"
}
},
"node_modules/path-key": {
"version": "3.1.1",
- "license": "MIT",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
+ "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
"engines": {
"node": ">=8"
}
},
+ "node_modules/path-scurry": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz",
+ "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==",
+ "dependencies": {
+ "lru-cache": "^10.2.0",
+ "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0"
+ },
+ "engines": {
+ "node": ">=16 || 14 >=14.18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/path-scurry/node_modules/lru-cache": {
+ "version": "10.4.3",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz",
+ "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ=="
+ },
"node_modules/path-to-regexp": {
"version": "6.2.2",
- "license": "MIT"
+ "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.2.2.tgz",
+ "integrity": "sha512-GQX3SSMokngb36+whdpRXE+3f9V8UzyAorlYvOGx87ufGHehNTn5lCxrKtLyZ4Yl/wEKnNnr98ZzOwwDZV5ogw=="
},
"node_modules/pathe": {
"version": "1.1.2",
@@ -6722,19 +8530,14 @@
"version": "0.0.11",
"resolved": "https://registry.npmjs.org/pause-stream/-/pause-stream-0.0.11.tgz",
"integrity": "sha512-e3FBlXLmN/D1S+zHzanP4E/4Z60oFAa3O051qt1pxa7DEJWKAyil6upYVXCWadEnuoqa4Pkc9oUx9zsxYeRv8A==",
- "license": [
- "MIT",
- "Apache2"
- ],
"dependencies": {
"through": "~2.3"
}
},
"node_modules/peek-readable": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/peek-readable/-/peek-readable-5.0.0.tgz",
- "integrity": "sha512-YtCKvLUOvwtMGmrniQPdO7MwPjgkFBtFIrmfSbYmYuq3tKDV/mcfAhBth1+C3ru7uXIZasc/pHnb+YDYNkkj4A==",
- "license": "MIT",
+ "version": "5.1.4",
+ "resolved": "https://registry.npmjs.org/peek-readable/-/peek-readable-5.1.4.tgz",
+ "integrity": "sha512-E7mY2VmKqw9jYuXrSWGHFuPCW2SLQenzXLF3amGaY6lXXg4/b3gj5HVM7h8ZjCO/nZS9ICs0Cz285+32FvNd/A==",
"engines": {
"node": ">=14.16"
},
@@ -6745,11 +8548,13 @@
},
"node_modules/picocolors": {
"version": "1.0.1",
- "license": "ISC"
+ "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz",
+ "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew=="
},
"node_modules/picomatch": {
"version": "2.3.1",
- "license": "MIT",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
+ "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
"engines": {
"node": ">=8.6"
},
@@ -6759,260 +8564,46 @@
},
"node_modules/pify": {
"version": "4.0.1",
- "license": "MIT",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz",
+ "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==",
"engines": {
"node": ">=6"
}
},
- "node_modules/pkg-dir": {
- "version": "4.2.0",
- "license": "MIT",
+ "node_modules/pino": {
+ "version": "9.3.2",
+ "resolved": "https://registry.npmjs.org/pino/-/pino-9.3.2.tgz",
+ "integrity": "sha512-WtARBjgZ7LNEkrGWxMBN/jvlFiE17LTbBoH0konmBU684Kd0uIiDwBXlcTCW7iJnA6HfIKwUssS/2AC6cDEanw==",
"dependencies": {
- "find-up": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/pkg-dir/node_modules/find-up": {
- "version": "4.1.0",
- "license": "MIT",
- "dependencies": {
- "locate-path": "^5.0.0",
- "path-exists": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/pkg-dir/node_modules/find-up/node_modules/locate-path": {
- "version": "5.0.0",
- "license": "MIT",
- "dependencies": {
- "p-locate": "^4.1.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/pkg-dir/node_modules/find-up/node_modules/locate-path/node_modules/p-locate": {
- "version": "4.1.0",
- "license": "MIT",
- "dependencies": {
- "p-limit": "^2.2.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/pkg-dir/node_modules/find-up/node_modules/locate-path/node_modules/p-locate/node_modules/p-limit": {
- "version": "2.3.0",
- "license": "MIT",
- "dependencies": {
- "p-try": "^2.0.0"
- },
- "engines": {
- "node": ">=6"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/playwright": {
- "version": "1.45.0",
- "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.45.0.tgz",
- "integrity": "sha512-4z3ac3plDfYzGB6r0Q3LF8POPR20Z8D0aXcxbJvmfMgSSq1hkcgvFRXJk9rUq5H/MJ0Ktal869hhOdI/zUTeLA==",
- "license": "Apache-2.0",
- "dependencies": {
- "playwright-core": "1.45.0"
+ "atomic-sleep": "^1.0.0",
+ "fast-redact": "^3.1.1",
+ "on-exit-leak-free": "^2.1.0",
+ "pino-abstract-transport": "^1.2.0",
+ "pino-std-serializers": "^7.0.0",
+ "process-warning": "^4.0.0",
+ "quick-format-unescaped": "^4.0.3",
+ "real-require": "^0.2.0",
+ "safe-stable-stringify": "^2.3.1",
+ "sonic-boom": "^4.0.1",
+ "thread-stream": "^3.0.0"
},
"bin": {
- "playwright": "cli.js"
- },
- "engines": {
- "node": ">=18"
- },
- "optionalDependencies": {
- "fsevents": "2.3.2"
+ "pino": "bin.js"
}
},
- "node_modules/playwright-core": {
- "version": "1.45.0",
- "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.45.0.tgz",
- "integrity": "sha512-lZmHlFQ0VYSpAs43dRq1/nJ9G/6SiTI7VPqidld9TDefL9tX87bTKExWZZUF5PeRyqtXqd8fQi2qmfIedkwsNQ==",
- "license": "Apache-2.0",
- "bin": {
- "playwright-core": "cli.js"
- },
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/postcss": {
- "version": "8.4.39",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.39.tgz",
- "integrity": "sha512-0vzE+lAiG7hZl1/9I8yzKLx3aR9Xbof3fBHKunvMfOCYAtMhrsnccJY2iTURb9EZd5+pLuiNV9/c/GZJOHsgIw==",
- "funding": [
- {
- "type": "opencollective",
- "url": "https://opencollective.com/postcss/"
- },
- {
- "type": "tidelift",
- "url": "https://tidelift.com/funding/github/npm/postcss"
- },
- {
- "type": "github",
- "url": "https://github.com/sponsors/ai"
- }
- ],
- "license": "MIT",
+ "node_modules/pino-abstract-transport": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/pino-abstract-transport/-/pino-abstract-transport-1.2.0.tgz",
+ "integrity": "sha512-Guhh8EZfPCfH+PMXAb6rKOjGQEoy0xlAIn+irODG5kgfYV+BQ0rGYYWTIel3P5mmyXqkYkPmdIkywsn6QKUR1Q==",
"dependencies": {
- "nanoid": "^3.3.7",
- "picocolors": "^1.0.1",
- "source-map-js": "^1.2.0"
- },
- "engines": {
- "node": "^10 || ^12 || >=14"
+ "readable-stream": "^4.0.0",
+ "split2": "^4.0.0"
}
},
- "node_modules/preferred-pm": {
- "version": "3.1.3",
- "license": "MIT",
- "dependencies": {
- "find-up": "^5.0.0",
- "find-yarn-workspace-root2": "1.2.16",
- "path-exists": "^4.0.0",
- "which-pm": "2.0.0"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/preferred-pm/node_modules/which-pm": {
- "version": "2.0.0",
- "license": "MIT",
- "dependencies": {
- "load-yaml-file": "^0.2.0",
- "path-exists": "^4.0.0"
- },
- "engines": {
- "node": ">=8.15"
- }
- },
- "node_modules/prismjs": {
- "version": "1.29.0",
- "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.29.0.tgz",
- "integrity": "sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q==",
- "license": "MIT",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/prompts": {
- "version": "2.4.2",
- "license": "MIT",
- "dependencies": {
- "kleur": "^3.0.3",
- "sisteransi": "^1.0.5"
- },
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/prompts/node_modules/kleur": {
- "version": "3.0.3",
- "license": "MIT",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/proper-lockfile": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/proper-lockfile/-/proper-lockfile-4.1.2.tgz",
- "integrity": "sha512-TjNPblN4BwAWMXU8s9AEz4JmQxnD1NNL7bNOY/AKUzyamc379FWASUhc/K1pL2noVb+XmZKLL68cjzLsiOAMaA==",
- "license": "MIT",
- "dependencies": {
- "graceful-fs": "^4.2.4",
- "retry": "^0.12.0",
- "signal-exit": "^3.0.2"
- }
- },
- "node_modules/proper-lockfile/node_modules/signal-exit": {
- "version": "3.0.7",
- "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
- "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==",
- "license": "ISC"
- },
- "node_modules/property-information": {
- "version": "6.5.0",
- "license": "MIT",
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
- }
- },
- "node_modules/proxy-chain": {
- "version": "2.5.1",
- "resolved": "https://registry.npmjs.org/proxy-chain/-/proxy-chain-2.5.1.tgz",
- "integrity": "sha512-gGKYJdqE/uk/ncp2LGjbTT7ivjYuRAfhPU4/2VnccF2sSbQDR4YJROVnDkjLbBSLIDesAaoKav8WBLLv6YXwfA==",
- "license": "Apache-2.0",
- "dependencies": {
- "socks": "^2.8.3",
- "socks-proxy-agent": "^8.0.3",
- "tslib": "^2.3.1"
- },
- "engines": {
- "node": ">=14"
- }
- },
- "node_modules/psl": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz",
- "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==",
- "license": "MIT"
- },
- "node_modules/punycode": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz",
- "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==",
- "license": "MIT",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/punycode.js": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/punycode.js/-/punycode.js-2.3.1.tgz",
- "integrity": "sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==",
- "license": "MIT",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/qs": {
- "version": "6.12.3",
- "resolved": "https://registry.npmjs.org/qs/-/qs-6.12.3.tgz",
- "integrity": "sha512-AWJm14H1vVaO/iNZ4/hO+HyaTehuy9nRqVdkTqlJt0HWvBiBIEXFmb4C0DGeYo3Xes9rrEW+TxHsaigCbN5ICQ==",
- "license": "BSD-3-Clause",
- "dependencies": {
- "side-channel": "^1.0.6"
- },
- "engines": {
- "node": ">=0.6"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/querystringify": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz",
- "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==",
- "license": "MIT"
- },
- "node_modules/queue-microtask": {
- "version": "1.2.3",
+ "node_modules/pino-abstract-transport/node_modules/buffer": {
+ "version": "6.0.3",
+ "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz",
+ "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==",
"funding": [
{
"type": "github",
@@ -7027,13 +8618,320 @@
"url": "https://feross.org/support"
}
],
- "license": "MIT"
+ "dependencies": {
+ "base64-js": "^1.3.1",
+ "ieee754": "^1.2.1"
+ }
+ },
+ "node_modules/pino-abstract-transport/node_modules/readable-stream": {
+ "version": "4.5.2",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.5.2.tgz",
+ "integrity": "sha512-yjavECdqeZ3GLXNgRXgeQEdz9fvDDkNKyHnbHRFtOr7/LcfgBcmct7t/ET+HaCTqfh06OzoAxrkN/IfjJBVe+g==",
+ "dependencies": {
+ "abort-controller": "^3.0.0",
+ "buffer": "^6.0.3",
+ "events": "^3.3.0",
+ "process": "^0.11.10",
+ "string_decoder": "^1.3.0"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ }
+ },
+ "node_modules/pino-abstract-transport/node_modules/string_decoder": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
+ "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
+ "dependencies": {
+ "safe-buffer": "~5.2.0"
+ }
+ },
+ "node_modules/pino-std-serializers": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-7.0.0.tgz",
+ "integrity": "sha512-e906FRY0+tV27iq4juKzSYPbUj2do2X2JX4EzSca1631EB2QJQUqGbDuERal7LCtOpxl6x3+nvo9NPZcmjkiFA=="
+ },
+ "node_modules/pino/node_modules/process-warning": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/process-warning/-/process-warning-4.0.0.tgz",
+ "integrity": "sha512-/MyYDxttz7DfGMMHiysAsFE4qF+pQYAA8ziO/3NcRVrQ5fSk+Mns4QZA/oRPFzvcqNoVJXQNWNAsdwBXLUkQKw=="
+ },
+ "node_modules/pkg-dir": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz",
+ "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==",
+ "dependencies": {
+ "find-up": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/playwright": {
+ "version": "1.46.1",
+ "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.46.1.tgz",
+ "integrity": "sha512-oPcr1yqoXLCkgKtD5eNUPLiN40rYEM39odNpIb6VE6S7/15gJmA1NzVv6zJYusV0e7tzvkU/utBFNa/Kpxmwng==",
+ "dependencies": {
+ "playwright-core": "1.46.1"
+ },
+ "bin": {
+ "playwright": "cli.js"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "optionalDependencies": {
+ "fsevents": "2.3.2"
+ }
+ },
+ "node_modules/playwright-core": {
+ "version": "1.46.1",
+ "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.46.1.tgz",
+ "integrity": "sha512-h9LqIQaAv+CYvWzsZ+h3RsrqCStkBHlgo6/TJlFst3cOTlLghBQlJwPOZKQJTKNaD3QIB7aAVQ+gfWbN3NXB7A==",
+ "bin": {
+ "playwright-core": "cli.js"
+ },
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/playwright/node_modules/fsevents": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
+ "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
+ "hasInstallScript": true,
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
+ }
+ },
+ "node_modules/postcss": {
+ "version": "8.4.41",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.41.tgz",
+ "integrity": "sha512-TesUflQ0WKZqAvg52PWL6kHgLKP6xB6heTOdoYM0Wt2UHyxNa4K25EZZMgKns3BH1RLVbZCREPpLY0rhnNoHVQ==",
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/postcss"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "dependencies": {
+ "nanoid": "^3.3.7",
+ "picocolors": "^1.0.1",
+ "source-map-js": "^1.2.0"
+ },
+ "engines": {
+ "node": "^10 || ^12 || >=14"
+ }
+ },
+ "node_modules/preferred-pm": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/preferred-pm/-/preferred-pm-4.0.0.tgz",
+ "integrity": "sha512-gYBeFTZLu055D8Vv3cSPox/0iTPtkzxpLroSYYA7WXgRi31WCJ51Uyl8ZiPeUUjyvs2MBzK+S8v9JVUgHU/Sqw==",
+ "dependencies": {
+ "find-up-simple": "^1.0.0",
+ "find-yarn-workspace-root2": "1.2.16",
+ "which-pm": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=18.12"
+ }
+ },
+ "node_modules/prettier": {
+ "version": "3.3.3",
+ "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.3.tgz",
+ "integrity": "sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==",
+ "optional": true,
+ "peer": true,
+ "bin": {
+ "prettier": "bin/prettier.cjs"
+ },
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "url": "https://github.com/prettier/prettier?sponsor=1"
+ }
+ },
+ "node_modules/prismjs": {
+ "version": "1.29.0",
+ "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.29.0.tgz",
+ "integrity": "sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q==",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/process": {
+ "version": "0.11.10",
+ "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz",
+ "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==",
+ "engines": {
+ "node": ">= 0.6.0"
+ }
+ },
+ "node_modules/process-nextick-args": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
+ "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="
+ },
+ "node_modules/process-warning": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/process-warning/-/process-warning-3.0.0.tgz",
+ "integrity": "sha512-mqn0kFRl0EoqhnL0GQ0veqFHyIN1yig9RHh/InzORTUiZHFRAur+aMtRkELNwGs9aNwKS6tg/An4NYBPGwvtzQ=="
+ },
+ "node_modules/prompts": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz",
+ "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==",
+ "dependencies": {
+ "kleur": "^3.0.3",
+ "sisteransi": "^1.0.5"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/prompts/node_modules/kleur": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz",
+ "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/proper-lockfile": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/proper-lockfile/-/proper-lockfile-4.1.2.tgz",
+ "integrity": "sha512-TjNPblN4BwAWMXU8s9AEz4JmQxnD1NNL7bNOY/AKUzyamc379FWASUhc/K1pL2noVb+XmZKLL68cjzLsiOAMaA==",
+ "dependencies": {
+ "graceful-fs": "^4.2.4",
+ "retry": "^0.12.0",
+ "signal-exit": "^3.0.2"
+ }
+ },
+ "node_modules/proper-lockfile/node_modules/signal-exit": {
+ "version": "3.0.7",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
+ "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ=="
+ },
+ "node_modules/property-information": {
+ "version": "6.5.0",
+ "resolved": "https://registry.npmjs.org/property-information/-/property-information-6.5.0.tgz",
+ "integrity": "sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig==",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/proxy-addr": {
+ "version": "2.0.7",
+ "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz",
+ "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==",
+ "dependencies": {
+ "forwarded": "0.2.0",
+ "ipaddr.js": "1.9.1"
+ },
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/proxy-chain": {
+ "version": "2.5.2",
+ "resolved": "https://registry.npmjs.org/proxy-chain/-/proxy-chain-2.5.2.tgz",
+ "integrity": "sha512-sWT6qZA6xTTxeT70QP3pe0QusE7nYAYUswVYQBPZY5HUZ1UDZR/DMYn7scvhQs0+BH/ROIgXHj5mfnzo8wwT4Q==",
+ "dependencies": {
+ "socks": "^2.8.3",
+ "socks-proxy-agent": "^8.0.3",
+ "tslib": "^2.3.1"
+ },
+ "engines": {
+ "node": ">=14"
+ }
+ },
+ "node_modules/proxy-from-env": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
+ "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg=="
+ },
+ "node_modules/psl": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz",
+ "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag=="
+ },
+ "node_modules/punycode": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz",
+ "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/punycode.js": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/punycode.js/-/punycode.js-2.3.1.tgz",
+ "integrity": "sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/qs": {
+ "version": "6.13.0",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz",
+ "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==",
+ "dependencies": {
+ "side-channel": "^1.0.6"
+ },
+ "engines": {
+ "node": ">=0.6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/querystringify": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz",
+ "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ=="
+ },
+ "node_modules/queue-microtask": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
+ "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ]
+ },
+ "node_modules/quick-format-unescaped": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/quick-format-unescaped/-/quick-format-unescaped-4.0.4.tgz",
+ "integrity": "sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg=="
},
"node_modules/quick-lru": {
"version": "5.1.1",
"resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz",
"integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==",
- "license": "MIT",
"engines": {
"node": ">=10"
},
@@ -7041,6 +8939,14 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/range-parser": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
+ "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
"node_modules/react": {
"version": "18.3.1",
"resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz",
@@ -7073,38 +8979,28 @@
}
},
"node_modules/readable-stream": {
- "version": "3.6.2",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz",
- "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
- "license": "MIT",
+ "version": "2.3.8",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz",
+ "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==",
"dependencies": {
- "inherits": "^2.0.3",
- "string_decoder": "^1.1.1",
- "util-deprecate": "^1.0.1"
- },
- "engines": {
- "node": ">= 6"
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
}
},
- "node_modules/readable-web-to-node-stream": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/readable-web-to-node-stream/-/readable-web-to-node-stream-3.0.2.tgz",
- "integrity": "sha512-ePeK6cc1EcKLEhJFt/AebMCLL+GgSKhuygrZ/GLaKZYEecIgIECf4UaUuaByiGtzckwR4ain9VzUh95T1exYGw==",
- "license": "MIT",
- "dependencies": {
- "readable-stream": "^3.6.0"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/Borewit"
- }
+ "node_modules/readable-stream/node_modules/safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
},
"node_modules/readdirp": {
"version": "3.6.0",
- "license": "MIT",
+ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
+ "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
"dependencies": {
"picomatch": "^2.2.1"
},
@@ -7112,9 +9008,18 @@
"node": ">=8.10.0"
}
},
+ "node_modules/real-require": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/real-require/-/real-require-0.2.0.tgz",
+ "integrity": "sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg==",
+ "engines": {
+ "node": ">= 12.13.0"
+ }
+ },
"node_modules/rehype": {
"version": "13.0.1",
- "license": "MIT",
+ "resolved": "https://registry.npmjs.org/rehype/-/rehype-13.0.1.tgz",
+ "integrity": "sha512-AcSLS2mItY+0fYu9xKxOu1LhUZeBZZBx8//5HKzF+0XP+eP8+6a5MXn2+DW2kfXR6Dtp1FEXMVrjyKAcvcU8vg==",
"dependencies": {
"@types/hast": "^3.0.0",
"rehype-parse": "^9.0.0",
@@ -7128,7 +9033,8 @@
},
"node_modules/rehype-parse": {
"version": "9.0.0",
- "license": "MIT",
+ "resolved": "https://registry.npmjs.org/rehype-parse/-/rehype-parse-9.0.0.tgz",
+ "integrity": "sha512-WG7nfvmWWkCR++KEkZevZb/uw41E8TsH4DsY9UxsTbIXCVGbAs4S+r8FrQ+OtH5EEQAs+5UxKC42VinkmpA1Yw==",
"dependencies": {
"@types/hast": "^3.0.0",
"hast-util-from-html": "^2.0.0",
@@ -7143,7 +9049,6 @@
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/rehype-raw/-/rehype-raw-7.0.0.tgz",
"integrity": "sha512-/aE8hCfKlQeA8LmyeyQvQF3eBiLRGNlfBJEvWH7ivp9sBqs7TNqBL5X3v157rM4IFETqDnIOO+z5M/biZbo9Ww==",
- "license": "MIT",
"dependencies": {
"@types/hast": "^3.0.0",
"hast-util-raw": "^9.0.0",
@@ -7156,7 +9061,8 @@
},
"node_modules/rehype-stringify": {
"version": "10.0.0",
- "license": "MIT",
+ "resolved": "https://registry.npmjs.org/rehype-stringify/-/rehype-stringify-10.0.0.tgz",
+ "integrity": "sha512-1TX1i048LooI9QoecrXy7nGFFbFSufxVRAfc6Y9YMRAi56l+oB0zP51mLSV312uRuvVLPV1opSlJmslozR1XHQ==",
"dependencies": {
"@types/hast": "^3.0.0",
"hast-util-to-html": "^9.0.0",
@@ -7171,7 +9077,6 @@
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/remark-gfm/-/remark-gfm-4.0.0.tgz",
"integrity": "sha512-U92vJgBPkbw4Zfu/IiW2oTZLSL3Zpv+uI7My2eq8JxKgqraFdU8YUGicEJCEgSbeaG+QDFqIcwwfMTOEelPxuA==",
- "license": "MIT",
"dependencies": {
"@types/mdast": "^4.0.0",
"mdast-util-gfm": "^3.0.0",
@@ -7189,7 +9094,6 @@
"version": "11.0.0",
"resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-11.0.0.tgz",
"integrity": "sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==",
- "license": "MIT",
"dependencies": {
"@types/mdast": "^4.0.0",
"mdast-util-from-markdown": "^2.0.0",
@@ -7205,7 +9109,6 @@
"version": "11.1.0",
"resolved": "https://registry.npmjs.org/remark-rehype/-/remark-rehype-11.1.0.tgz",
"integrity": "sha512-z3tJrAs2kIs1AqIIy6pzHmAHlF1hWQ+OdY4/hv+Wxe35EhyLKcajL33iUEn3ScxtFox9nUvRufR/Zre8Q08H/g==",
- "license": "MIT",
"dependencies": {
"@types/hast": "^3.0.0",
"@types/mdast": "^4.0.0",
@@ -7222,7 +9125,6 @@
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/remark-smartypants/-/remark-smartypants-3.0.2.tgz",
"integrity": "sha512-ILTWeOriIluwEvPjv67v7Blgrcx+LZOkAUVtKI3putuhlZm84FnqDORNXPPm+HY3NdZOMhyDwZ1E+eZB/Df5dA==",
- "license": "MIT",
"dependencies": {
"retext": "^9.0.0",
"retext-smartypants": "^6.0.0",
@@ -7237,7 +9139,6 @@
"version": "11.0.0",
"resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-11.0.0.tgz",
"integrity": "sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==",
- "license": "MIT",
"dependencies": {
"@types/mdast": "^4.0.0",
"mdast-util-to-markdown": "^2.0.0",
@@ -7251,12 +9152,20 @@
"node_modules/request-light": {
"version": "0.7.0",
"resolved": "https://registry.npmjs.org/request-light/-/request-light-0.7.0.tgz",
- "integrity": "sha512-lMbBMrDoxgsyO+yB3sDcrDuX85yYt7sS8BfQd11jtbW/z5ZWgLZRcEGLsLoYw7I0WSUGQBs8CC8ScIxkTX1+6Q==",
- "license": "MIT"
+ "integrity": "sha512-lMbBMrDoxgsyO+yB3sDcrDuX85yYt7sS8BfQd11jtbW/z5ZWgLZRcEGLsLoYw7I0WSUGQBs8CC8ScIxkTX1+6Q=="
},
"node_modules/require-directory": {
"version": "2.1.1",
- "license": "MIT",
+ "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
+ "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/require-from-string": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz",
+ "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==",
"engines": {
"node": ">=0.10.0"
}
@@ -7264,20 +9173,17 @@
"node_modules/requires-port": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz",
- "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==",
- "license": "MIT"
+ "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ=="
},
"node_modules/resolve-alpn": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz",
- "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==",
- "license": "MIT"
+ "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g=="
},
"node_modules/resolve-cwd": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz",
"integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==",
- "license": "MIT",
"dependencies": {
"resolve-from": "^5.0.0"
},
@@ -7289,7 +9195,6 @@
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz",
"integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==",
- "license": "MIT",
"engines": {
"node": ">=8"
}
@@ -7299,7 +9204,6 @@
"resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz",
"integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==",
"dev": true,
- "license": "MIT",
"funding": {
"url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1"
}
@@ -7308,7 +9212,6 @@
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/responselike/-/responselike-3.0.0.tgz",
"integrity": "sha512-40yHxbNcl2+rzXvZuVkrYohathsSJlMTXKryG5y8uciHv1+xDLHQpgjG64JUO9nrEq2jGLH6IZ8BcZyw3wrweg==",
- "license": "MIT",
"dependencies": {
"lowercase-keys": "^3.0.0"
},
@@ -7320,22 +9223,29 @@
}
},
"node_modules/restore-cursor": {
- "version": "4.0.0",
- "license": "MIT",
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz",
+ "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==",
"dependencies": {
"onetime": "^5.1.0",
"signal-exit": "^3.0.2"
},
"engines": {
- "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
+ "node": ">=8"
+ }
+ },
+ "node_modules/restore-cursor/node_modules/mimic-fn": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
+ "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==",
+ "engines": {
+ "node": ">=6"
}
},
"node_modules/restore-cursor/node_modules/onetime": {
"version": "5.1.2",
- "license": "MIT",
+ "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz",
+ "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==",
"dependencies": {
"mimic-fn": "^2.1.0"
},
@@ -7346,22 +9256,23 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/restore-cursor/node_modules/onetime/node_modules/mimic-fn": {
- "version": "2.1.0",
- "license": "MIT",
- "engines": {
- "node": ">=6"
- }
- },
"node_modules/restore-cursor/node_modules/signal-exit": {
"version": "3.0.7",
- "license": "ISC"
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
+ "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ=="
+ },
+ "node_modules/ret": {
+ "version": "0.4.3",
+ "resolved": "https://registry.npmjs.org/ret/-/ret-0.4.3.tgz",
+ "integrity": "sha512-0f4Memo5QP7WQyUEAYUO3esD/XjOc3Zjjg5CPsAq1p8sIu0XPeMbHJemKA0BO7tV0X7+A0FoEpbmHXWxPyD3wQ==",
+ "engines": {
+ "node": ">=10"
+ }
},
"node_modules/retext": {
"version": "9.0.0",
"resolved": "https://registry.npmjs.org/retext/-/retext-9.0.0.tgz",
"integrity": "sha512-sbMDcpHCNjvlheSgMfEcVrZko3cDzdbe1x/e7G66dFp0Ff7Mldvi2uv6JkJQzdRcvLYE8CA8Oe8siQx8ZOgTcA==",
- "license": "MIT",
"dependencies": {
"@types/nlcst": "^2.0.0",
"retext-latin": "^4.0.0",
@@ -7377,7 +9288,6 @@
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/retext-latin/-/retext-latin-4.0.0.tgz",
"integrity": "sha512-hv9woG7Fy0M9IlRQloq/N6atV82NxLGveq+3H2WOi79dtIYWN8OaxogDm77f8YnVXJL2VD3bbqowu5E3EMhBYA==",
- "license": "MIT",
"dependencies": {
"@types/nlcst": "^2.0.0",
"parse-latin": "^7.0.0",
@@ -7392,7 +9302,6 @@
"version": "6.1.0",
"resolved": "https://registry.npmjs.org/retext-smartypants/-/retext-smartypants-6.1.0.tgz",
"integrity": "sha512-LDPXg95346bqFZnDMHo0S7Rq5p64+B+N8Vz733+wPMDtwb9rCOs9LIdIEhrUOU+TAywX9St+ocQWJt8wrzivcQ==",
- "license": "MIT",
"dependencies": {
"@types/nlcst": "^2.0.0",
"nlcst-to-string": "^4.0.0",
@@ -7407,7 +9316,6 @@
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/retext-stringify/-/retext-stringify-4.0.0.tgz",
"integrity": "sha512-rtfN/0o8kL1e+78+uxPTqu1Klt0yPzKuQ2BfWwwfgIUSayyzxpM1PJzkKt4V8803uB9qSy32MvI7Xep9khTpiA==",
- "license": "MIT",
"dependencies": {
"@types/nlcst": "^2.0.0",
"nlcst-to-string": "^4.0.0",
@@ -7422,31 +9330,36 @@
"version": "0.12.0",
"resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz",
"integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==",
- "license": "MIT",
"engines": {
"node": ">= 4"
}
},
"node_modules/reusify": {
"version": "1.0.4",
- "license": "MIT",
+ "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
+ "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
"engines": {
"iojs": ">=1.0.0",
"node": ">=0.10.0"
}
},
+ "node_modules/rfdc": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz",
+ "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA=="
+ },
"node_modules/robots-parser": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/robots-parser/-/robots-parser-3.0.1.tgz",
"integrity": "sha512-s+pyvQeIKIZ0dx5iJiQk1tPLJAWln39+MI5jtM8wnyws+G5azk+dMnMX0qfbqNetKKNgcWWOdi0sfm+FbQbgdQ==",
- "license": "MIT",
"engines": {
"node": ">=10.0.0"
}
},
"node_modules/rollup": {
- "version": "4.18.0",
- "license": "MIT",
+ "version": "4.21.0",
+ "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.21.0.tgz",
+ "integrity": "sha512-vo+S/lfA2lMS7rZ2Qoubi6I5hwZwzXeUIctILZLbHI+laNtvhhOIon2S1JksA5UEDQ7l3vberd0fxK44lTYjbQ==",
"dependencies": {
"@types/estree": "1.0.5"
},
@@ -7458,42 +9371,42 @@
"npm": ">=8.0.0"
},
"optionalDependencies": {
- "@rollup/rollup-android-arm-eabi": "4.18.0",
- "@rollup/rollup-android-arm64": "4.18.0",
- "@rollup/rollup-darwin-arm64": "4.18.0",
- "@rollup/rollup-darwin-x64": "4.18.0",
- "@rollup/rollup-linux-arm-gnueabihf": "4.18.0",
- "@rollup/rollup-linux-arm-musleabihf": "4.18.0",
- "@rollup/rollup-linux-arm64-gnu": "4.18.0",
- "@rollup/rollup-linux-arm64-musl": "4.18.0",
- "@rollup/rollup-linux-powerpc64le-gnu": "4.18.0",
- "@rollup/rollup-linux-riscv64-gnu": "4.18.0",
- "@rollup/rollup-linux-s390x-gnu": "4.18.0",
- "@rollup/rollup-linux-x64-gnu": "4.18.0",
- "@rollup/rollup-linux-x64-musl": "4.18.0",
- "@rollup/rollup-win32-arm64-msvc": "4.18.0",
- "@rollup/rollup-win32-ia32-msvc": "4.18.0",
- "@rollup/rollup-win32-x64-msvc": "4.18.0",
+ "@rollup/rollup-android-arm-eabi": "4.21.0",
+ "@rollup/rollup-android-arm64": "4.21.0",
+ "@rollup/rollup-darwin-arm64": "4.21.0",
+ "@rollup/rollup-darwin-x64": "4.21.0",
+ "@rollup/rollup-linux-arm-gnueabihf": "4.21.0",
+ "@rollup/rollup-linux-arm-musleabihf": "4.21.0",
+ "@rollup/rollup-linux-arm64-gnu": "4.21.0",
+ "@rollup/rollup-linux-arm64-musl": "4.21.0",
+ "@rollup/rollup-linux-powerpc64le-gnu": "4.21.0",
+ "@rollup/rollup-linux-riscv64-gnu": "4.21.0",
+ "@rollup/rollup-linux-s390x-gnu": "4.21.0",
+ "@rollup/rollup-linux-x64-gnu": "4.21.0",
+ "@rollup/rollup-linux-x64-musl": "4.21.0",
+ "@rollup/rollup-win32-arm64-msvc": "4.21.0",
+ "@rollup/rollup-win32-ia32-msvc": "4.21.0",
+ "@rollup/rollup-win32-x64-msvc": "4.21.0",
"fsevents": "~2.3.2"
}
},
"node_modules/rrweb-cssom": {
"version": "0.7.1",
"resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.7.1.tgz",
- "integrity": "sha512-TrEMa7JGdVm0UThDJSx7ddw5nVm3UJS9o9CCIZ72B1vSyEZoziDqBYP3XIoi/12lKrJR8rE3jeFHMok2F/Mnsg==",
- "license": "MIT"
+ "integrity": "sha512-TrEMa7JGdVm0UThDJSx7ddw5nVm3UJS9o9CCIZ72B1vSyEZoziDqBYP3XIoi/12lKrJR8rE3jeFHMok2F/Mnsg=="
},
"node_modules/run-async": {
"version": "2.4.1",
"resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz",
"integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==",
- "license": "MIT",
"engines": {
"node": ">=0.12.0"
}
},
"node_modules/run-parallel": {
"version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
+ "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
"funding": [
{
"type": "github",
@@ -7508,7 +9421,6 @@
"url": "https://feross.org/support"
}
],
- "license": "MIT",
"dependencies": {
"queue-microtask": "^1.2.2"
}
@@ -7517,7 +9429,6 @@
"version": "7.8.1",
"resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz",
"integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==",
- "license": "Apache-2.0",
"dependencies": {
"tslib": "^2.1.0"
}
@@ -7539,26 +9450,38 @@
"type": "consulting",
"url": "https://feross.org/support"
}
- ],
- "license": "MIT"
+ ]
+ },
+ "node_modules/safe-regex2": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/safe-regex2/-/safe-regex2-3.1.0.tgz",
+ "integrity": "sha512-RAAZAGbap2kBfbVhvmnTFv73NWLMvDGOITFYTZBAaY8eR+Ir4ef7Up/e7amo+y1+AH+3PtLkrt9mvcTsG9LXug==",
+ "dependencies": {
+ "ret": "~0.4.0"
+ }
+ },
+ "node_modules/safe-stable-stringify": {
+ "version": "2.4.3",
+ "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.4.3.tgz",
+ "integrity": "sha512-e2bDA2WJT0wxseVd4lsDP4+3ONX6HpMXQa1ZhFQ7SU+GjvORCmShbCMltrtIDfkYhVHrOcPtj+KhmDBdPdZD1g==",
+ "engines": {
+ "node": ">=10"
+ }
},
"node_modules/safer-buffer": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
- "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
- "license": "MIT"
+ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
},
"node_modules/sax": {
"version": "1.4.1",
"resolved": "https://registry.npmjs.org/sax/-/sax-1.4.1.tgz",
- "integrity": "sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==",
- "license": "ISC"
+ "integrity": "sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg=="
},
"node_modules/saxes": {
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz",
"integrity": "sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==",
- "license": "ISC",
"dependencies": {
"xmlchars": "^2.2.0"
},
@@ -7576,7 +9499,8 @@
},
"node_modules/section-matter": {
"version": "1.0.0",
- "license": "MIT",
+ "resolved": "https://registry.npmjs.org/section-matter/-/section-matter-1.0.0.tgz",
+ "integrity": "sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==",
"dependencies": {
"extend-shallow": "^2.0.1",
"kind-of": "^6.0.0"
@@ -7585,21 +9509,85 @@
"node": ">=4"
}
},
+ "node_modules/secure-json-parse": {
+ "version": "2.7.0",
+ "resolved": "https://registry.npmjs.org/secure-json-parse/-/secure-json-parse-2.7.0.tgz",
+ "integrity": "sha512-6aU+Rwsezw7VR8/nyvKTx8QpWH9FrcYiXXlqC4z5d5XQBDRqtbfsRjnwGyqbi3gddNtWHuEk9OANUotL26qKUw=="
+ },
"node_modules/semver": {
- "version": "7.6.2",
- "license": "ISC",
+ "version": "6.3.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
+ "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
"bin": {
"semver": "bin/semver.js"
+ }
+ },
+ "node_modules/send": {
+ "version": "0.18.0",
+ "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz",
+ "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==",
+ "dependencies": {
+ "debug": "2.6.9",
+ "depd": "2.0.0",
+ "destroy": "1.2.0",
+ "encodeurl": "~1.0.2",
+ "escape-html": "~1.0.3",
+ "etag": "~1.8.1",
+ "fresh": "0.5.2",
+ "http-errors": "2.0.0",
+ "mime": "1.6.0",
+ "ms": "2.1.3",
+ "on-finished": "2.4.1",
+ "range-parser": "~1.2.1",
+ "statuses": "2.0.1"
},
"engines": {
- "node": ">=10"
+ "node": ">= 0.8.0"
}
},
+ "node_modules/send/node_modules/debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dependencies": {
+ "ms": "2.0.0"
+ }
+ },
+ "node_modules/send/node_modules/debug/node_modules/ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
+ },
+ "node_modules/send/node_modules/mime": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
+ "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
+ "bin": {
+ "mime": "cli.js"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/send/node_modules/ms": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
+ },
+ "node_modules/server-destroy": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/server-destroy/-/server-destroy-1.0.1.tgz",
+ "integrity": "sha512-rb+9B5YBIEzYcD6x2VKidaa+cqYBJQKnU4oe4E3ANwRRN56yk/ua1YCJT1n21NTS8w6CcOclAKNP3PhdCXKYtQ=="
+ },
+ "node_modules/set-cookie-parser": {
+ "version": "2.7.0",
+ "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.7.0.tgz",
+ "integrity": "sha512-lXLOiqpkUumhRdFF3k1osNXCy9akgx/dyPZ5p8qAg9seJzXr5ZrlqZuWIMuY6ejOsVLE6flJ5/h3lsn57fQ/PQ=="
+ },
"node_modules/set-function-length": {
"version": "1.2.2",
"resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz",
"integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==",
- "license": "MIT",
"dependencies": {
"define-data-property": "^1.1.4",
"es-errors": "^1.3.0",
@@ -7612,48 +9600,66 @@
"node": ">= 0.4"
}
},
+ "node_modules/setprototypeof": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz",
+ "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw=="
+ },
"node_modules/sharp": {
- "version": "0.33.4",
+ "version": "0.33.5",
+ "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.33.5.tgz",
+ "integrity": "sha512-haPVm1EkS9pgvHrQ/F3Xy+hgcuMV0Wm9vfIBSiwZ05k+xgb0PkBQpGsAA/oWdDobNaZTH5ppvHtzCFbnSEwHVw==",
"hasInstallScript": true,
- "license": "Apache-2.0",
"optional": true,
"dependencies": {
"color": "^4.2.3",
"detect-libc": "^2.0.3",
- "semver": "^7.6.0"
+ "semver": "^7.6.3"
},
"engines": {
- "libvips": ">=8.15.2",
"node": "^18.17.0 || ^20.3.0 || >=21.0.0"
},
"funding": {
"url": "https://opencollective.com/libvips"
},
"optionalDependencies": {
- "@img/sharp-darwin-arm64": "0.33.4",
- "@img/sharp-darwin-x64": "0.33.4",
- "@img/sharp-libvips-darwin-arm64": "1.0.2",
- "@img/sharp-libvips-darwin-x64": "1.0.2",
- "@img/sharp-libvips-linux-arm": "1.0.2",
- "@img/sharp-libvips-linux-arm64": "1.0.2",
- "@img/sharp-libvips-linux-s390x": "1.0.2",
- "@img/sharp-libvips-linux-x64": "1.0.2",
- "@img/sharp-libvips-linuxmusl-arm64": "1.0.2",
- "@img/sharp-libvips-linuxmusl-x64": "1.0.2",
- "@img/sharp-linux-arm": "0.33.4",
- "@img/sharp-linux-arm64": "0.33.4",
- "@img/sharp-linux-s390x": "0.33.4",
- "@img/sharp-linux-x64": "0.33.4",
- "@img/sharp-linuxmusl-arm64": "0.33.4",
- "@img/sharp-linuxmusl-x64": "0.33.4",
- "@img/sharp-wasm32": "0.33.4",
- "@img/sharp-win32-ia32": "0.33.4",
- "@img/sharp-win32-x64": "0.33.4"
+ "@img/sharp-darwin-arm64": "0.33.5",
+ "@img/sharp-darwin-x64": "0.33.5",
+ "@img/sharp-libvips-darwin-arm64": "1.0.4",
+ "@img/sharp-libvips-darwin-x64": "1.0.4",
+ "@img/sharp-libvips-linux-arm": "1.0.5",
+ "@img/sharp-libvips-linux-arm64": "1.0.4",
+ "@img/sharp-libvips-linux-s390x": "1.0.4",
+ "@img/sharp-libvips-linux-x64": "1.0.4",
+ "@img/sharp-libvips-linuxmusl-arm64": "1.0.4",
+ "@img/sharp-libvips-linuxmusl-x64": "1.0.4",
+ "@img/sharp-linux-arm": "0.33.5",
+ "@img/sharp-linux-arm64": "0.33.5",
+ "@img/sharp-linux-s390x": "0.33.5",
+ "@img/sharp-linux-x64": "0.33.5",
+ "@img/sharp-linuxmusl-arm64": "0.33.5",
+ "@img/sharp-linuxmusl-x64": "0.33.5",
+ "@img/sharp-wasm32": "0.33.5",
+ "@img/sharp-win32-ia32": "0.33.5",
+ "@img/sharp-win32-x64": "0.33.5"
+ }
+ },
+ "node_modules/sharp/node_modules/semver": {
+ "version": "7.6.3",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz",
+ "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==",
+ "optional": true,
+ "bin": {
+ "semver": "bin/semver.js"
+ },
+ "engines": {
+ "node": ">=10"
}
},
"node_modules/shebang-command": {
"version": "2.0.0",
- "license": "MIT",
+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
+ "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
"dependencies": {
"shebang-regex": "^3.0.0"
},
@@ -7663,18 +9669,18 @@
},
"node_modules/shebang-regex": {
"version": "3.0.0",
- "license": "MIT",
+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
+ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
"engines": {
"node": ">=8"
}
},
"node_modules/shiki": {
- "version": "1.10.3",
- "resolved": "https://registry.npmjs.org/shiki/-/shiki-1.10.3.tgz",
- "integrity": "sha512-eneCLncGuvPdTutJuLyUGS8QNPAVFO5Trvld2wgEq1e002mwctAhJKeMGWtWVXOIEzmlcLRqcgPSorR6AVzOmQ==",
- "license": "MIT",
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/shiki/-/shiki-1.14.1.tgz",
+ "integrity": "sha512-FujAN40NEejeXdzPt+3sZ3F2dx1U24BY2XTY01+MG8mbxCiA2XukXdcbyMyLAHJ/1AUUnQd1tZlvIjefWWEJeA==",
"dependencies": {
- "@shikijs/core": "1.10.3",
+ "@shikijs/core": "1.14.1",
"@types/hast": "^3.0.4"
}
},
@@ -7682,7 +9688,6 @@
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz",
"integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==",
- "license": "MIT",
"dependencies": {
"call-bind": "^1.0.7",
"es-errors": "^1.3.0",
@@ -7703,7 +9708,8 @@
},
"node_modules/signal-exit": {
"version": "4.1.0",
- "license": "ISC",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
+ "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==",
"engines": {
"node": ">=14"
},
@@ -7713,7 +9719,8 @@
},
"node_modules/simple-swizzle": {
"version": "0.2.2",
- "license": "MIT",
+ "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz",
+ "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==",
"optional": true,
"dependencies": {
"is-arrayish": "^0.3.1"
@@ -7721,13 +9728,13 @@
},
"node_modules/sisteransi": {
"version": "1.0.5",
- "license": "MIT"
+ "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz",
+ "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg=="
},
"node_modules/sitemap": {
"version": "7.1.2",
"resolved": "https://registry.npmjs.org/sitemap/-/sitemap-7.1.2.tgz",
"integrity": "sha512-ARCqzHJ0p4gWt+j7NlU5eDlIO9+Rkr/JhPFZKKQ1l5GCus7rJH4UdrlVAh0xC/gDS/Qir2UMxqYNHtsKr2rpCw==",
- "license": "MIT",
"dependencies": {
"@types/node": "^17.0.5",
"@types/sax": "^1.2.1",
@@ -7745,14 +9752,20 @@
"node_modules/sitemap/node_modules/@types/node": {
"version": "17.0.45",
"resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.45.tgz",
- "integrity": "sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==",
- "license": "MIT"
+ "integrity": "sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw=="
+ },
+ "node_modules/slugify": {
+ "version": "1.6.6",
+ "resolved": "https://registry.npmjs.org/slugify/-/slugify-1.6.6.tgz",
+ "integrity": "sha512-h+z7HKHYXj6wJU+AnS/+IH8Uh9fdcX1Lrhg1/VMdf9PwoBQXFcXiAdsy2tSK0P6gKwJLXp02r90ahUCqHk9rrw==",
+ "engines": {
+ "node": ">=8.0.0"
+ }
},
"node_modules/smart-buffer": {
"version": "4.2.0",
"resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz",
"integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==",
- "license": "MIT",
"engines": {
"node": ">= 6.0.0",
"npm": ">= 3.0.0"
@@ -7762,7 +9775,6 @@
"version": "2.8.3",
"resolved": "https://registry.npmjs.org/socks/-/socks-2.8.3.tgz",
"integrity": "sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw==",
- "license": "MIT",
"dependencies": {
"ip-address": "^9.0.5",
"smart-buffer": "^4.2.0"
@@ -7776,7 +9788,6 @@
"version": "8.0.4",
"resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.4.tgz",
"integrity": "sha512-GNAq/eg8Udq2x0eNiFkr9gRg5bA7PXEWagQdeRX4cPSG+X/8V38v637gim9bjFptMk1QWsCTr0ttrJEiXbNnRw==",
- "license": "MIT",
"dependencies": {
"agent-base": "^7.1.1",
"debug": "^4.3.4",
@@ -7786,18 +9797,26 @@
"node": ">= 14"
}
},
+ "node_modules/sonic-boom": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-4.0.1.tgz",
+ "integrity": "sha512-hTSD/6JMLyT4r9zeof6UtuBDpjJ9sO08/nmS5djaA9eozT9oOlNdpXSnzcgj4FTqpk3nkLrs61l4gip9r1HCrQ==",
+ "dependencies": {
+ "atomic-sleep": "^1.0.0"
+ }
+ },
"node_modules/source-map-js": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz",
"integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==",
- "license": "BSD-3-Clause",
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/space-separated-tokens": {
"version": "2.0.2",
- "license": "MIT",
+ "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz",
+ "integrity": "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/wooorm"
@@ -7807,7 +9826,6 @@
"version": "0.3.3",
"resolved": "https://registry.npmjs.org/split/-/split-0.3.3.tgz",
"integrity": "sha512-wD2AeVmxXRBoX44wAycgjVpMhvbwdI2aZjCkvfNcH1YqHQvJVa1duWc73OyVGJUc05fhFaTZeQ/PYsrmyH0JVA==",
- "license": "MIT",
"dependencies": {
"through": "2"
},
@@ -7815,15 +9833,32 @@
"node": "*"
}
},
+ "node_modules/split2": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz",
+ "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==",
+ "engines": {
+ "node": ">= 10.x"
+ }
+ },
"node_modules/sprintf-js": {
- "version": "1.0.3",
- "license": "BSD-3-Clause"
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz",
+ "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA=="
},
"node_modules/stackback": {
"version": "0.0.2",
"resolved": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz",
"integrity": "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw=="
},
+ "node_modules/statuses": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz",
+ "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==",
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
"node_modules/std-env": {
"version": "3.7.0",
"resolved": "https://registry.npmjs.org/std-env/-/std-env-3.7.0.tgz",
@@ -7831,7 +9866,8 @@
},
"node_modules/stdin-discarder": {
"version": "0.2.2",
- "license": "MIT",
+ "resolved": "https://registry.npmjs.org/stdin-discarder/-/stdin-discarder-0.2.2.tgz",
+ "integrity": "sha512-UhDfHmA92YAlNnCfhmq0VeNL5bDbiZGg7sZ2IvPsXubGkiNa9EC+tUTsjBRsYUAz87btI6/1wf4XoVvQ3uRnmQ==",
"engines": {
"node": ">=18"
},
@@ -7842,14 +9878,12 @@
"node_modules/stream-chain": {
"version": "2.2.5",
"resolved": "https://registry.npmjs.org/stream-chain/-/stream-chain-2.2.5.tgz",
- "integrity": "sha512-1TJmBx6aSWqZ4tx7aTpBDXK0/e2hhcNSTV8+CbFJtDjbb+I1mZ8lHit0Grw9GRT+6JbIrrDd8esncgBi8aBXGA==",
- "license": "BSD-3-Clause"
+ "integrity": "sha512-1TJmBx6aSWqZ4tx7aTpBDXK0/e2hhcNSTV8+CbFJtDjbb+I1mZ8lHit0Grw9GRT+6JbIrrDd8esncgBi8aBXGA=="
},
"node_modules/stream-combiner": {
"version": "0.0.4",
"resolved": "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.0.4.tgz",
"integrity": "sha512-rT00SPnTVyRsaSz5zgSPma/aHSOic5U1prhYdRy5HS2kTZviFpmDgzilbtsJsxiroqACmayynDN/9VzIbX5DOw==",
- "license": "MIT",
"dependencies": {
"duplexer": "~0.1.1"
}
@@ -7858,7 +9892,6 @@
"version": "1.8.0",
"resolved": "https://registry.npmjs.org/stream-json/-/stream-json-1.8.0.tgz",
"integrity": "sha512-HZfXngYHUAr1exT4fxlbc1IOce1RYxp2ldeaf97LYCOPSoOqY/1Psp7iGvpb+6JIOgkra9zDYnPX01hGAHzEPw==",
- "license": "BSD-3-Clause",
"dependencies": {
"stream-chain": "^2.2.5"
}
@@ -7866,23 +9899,33 @@
"node_modules/stream-replace-string": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/stream-replace-string/-/stream-replace-string-2.0.0.tgz",
- "integrity": "sha512-TlnjJ1C0QrmxRNrON00JvaFFlNh5TTG00APw23j74ET7gkQpTASi6/L2fuiav8pzK715HXtUeClpBTw2NPSn6w==",
- "license": "MIT"
+ "integrity": "sha512-TlnjJ1C0QrmxRNrON00JvaFFlNh5TTG00APw23j74ET7gkQpTASi6/L2fuiav8pzK715HXtUeClpBTw2NPSn6w=="
+ },
+ "node_modules/streamsearch": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz",
+ "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==",
+ "engines": {
+ "node": ">=10.0.0"
+ }
},
"node_modules/string_decoder": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
- "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
- "license": "MIT",
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
"dependencies": {
- "safe-buffer": "~5.2.0"
+ "safe-buffer": "~5.1.0"
}
},
+ "node_modules/string_decoder/node_modules/safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
+ },
"node_modules/string-comparison": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/string-comparison/-/string-comparison-1.3.0.tgz",
"integrity": "sha512-46aD+slEwybxAMPRII83ATbgMgTiz5P8mVd7Z6VJsCzSHFjdt1hkAVLeFxPIyEb11tc6ihpJTlIqoO0MCF6NPw==",
- "license": "MIT",
"engines": {
"node": "^16.0.0 || >=18.0.0"
}
@@ -7891,7 +9934,6 @@
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz",
"integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==",
- "license": "MIT",
"dependencies": {
"emoji-regex": "^10.3.0",
"get-east-asian-width": "^1.0.0",
@@ -7904,9 +9946,48 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/string-width-cjs": {
+ "name": "string-width",
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+ "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+ "dependencies": {
+ "emoji-regex": "^8.0.0",
+ "is-fullwidth-code-point": "^3.0.0",
+ "strip-ansi": "^6.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/string-width-cjs/node_modules/ansi-regex": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/string-width-cjs/node_modules/emoji-regex": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="
+ },
+ "node_modules/string-width-cjs/node_modules/strip-ansi": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "dependencies": {
+ "ansi-regex": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
"node_modules/stringify-entities": {
"version": "4.0.4",
- "license": "MIT",
+ "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-4.0.4.tgz",
+ "integrity": "sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==",
"dependencies": {
"character-entities-html4": "^2.0.0",
"character-entities-legacy": "^3.0.0"
@@ -7918,7 +9999,8 @@
},
"node_modules/strip-ansi": {
"version": "7.1.0",
- "license": "MIT",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz",
+ "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==",
"dependencies": {
"ansi-regex": "^6.0.1"
},
@@ -7929,23 +10011,46 @@
"url": "https://github.com/chalk/strip-ansi?sponsor=1"
}
},
+ "node_modules/strip-ansi-cjs": {
+ "name": "strip-ansi",
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "dependencies": {
+ "ansi-regex": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/strip-ansi-cjs/node_modules/ansi-regex": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
+ "engines": {
+ "node": ">=8"
+ }
+ },
"node_modules/strip-bom": {
"version": "3.0.0",
- "license": "MIT",
+ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
+ "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==",
"engines": {
"node": ">=4"
}
},
"node_modules/strip-bom-string": {
"version": "1.0.0",
- "license": "MIT",
+ "resolved": "https://registry.npmjs.org/strip-bom-string/-/strip-bom-string-1.0.0.tgz",
+ "integrity": "sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g==",
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/strip-final-newline": {
"version": "3.0.0",
- "license": "MIT",
+ "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz",
+ "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==",
"engines": {
"node": ">=12"
},
@@ -7954,16 +10059,15 @@
}
},
"node_modules/strtok3": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/strtok3/-/strtok3-7.0.0.tgz",
- "integrity": "sha512-pQ+V+nYQdC5H3Q7qBZAz/MO6lwGhoC2gOAjuouGf/VO0m7vQRh8QNMl2Uf6SwAtzZ9bOw3UIeBukEGNJl5dtXQ==",
- "license": "MIT",
+ "version": "8.1.0",
+ "resolved": "https://registry.npmjs.org/strtok3/-/strtok3-8.1.0.tgz",
+ "integrity": "sha512-ExzDvHYPj6F6QkSNe/JxSlBxTh3OrI6wrAIz53ulxo1c4hBJ1bT9C/JrAthEKHWG9riVH3Xzg7B03Oxty6S2Lw==",
"dependencies": {
"@tokenizer/token": "^0.3.0",
- "peek-readable": "^5.0.0"
+ "peek-readable": "^5.1.4"
},
"engines": {
- "node": ">=14.16"
+ "node": ">=16"
},
"funding": {
"type": "github",
@@ -7974,7 +10078,6 @@
"version": "9.0.2",
"resolved": "https://registry.npmjs.org/superagent/-/superagent-9.0.2.tgz",
"integrity": "sha512-xuW7dzkUpcJq7QnhOsnNUgtYp3xRwpt2F7abdRYIpCsAt0hhUqia0EdxyXZQQpNmGtsCzYHryaKSV3q3GJnq7w==",
- "license": "MIT",
"dependencies": {
"component-emitter": "^1.3.0",
"cookiejar": "^2.1.4",
@@ -7990,9 +10093,21 @@
"node": ">=14.18.0"
}
},
+ "node_modules/superagent/node_modules/mime": {
+ "version": "2.6.0",
+ "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz",
+ "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==",
+ "bin": {
+ "mime": "cli.js"
+ },
+ "engines": {
+ "node": ">=4.0.0"
+ }
+ },
"node_modules/supports-color": {
"version": "5.5.0",
- "license": "MIT",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
"dependencies": {
"has-flag": "^3.0.0"
},
@@ -8001,9 +10116,9 @@
}
},
"node_modules/swiper": {
- "version": "11.1.4",
- "resolved": "https://registry.npmjs.org/swiper/-/swiper-11.1.4.tgz",
- "integrity": "sha512-1n7kbYJB2dFEpUHRFszq7gys/ofIBrMNibwTiMvPHwneKND/t9kImnHt6CfGPScMHgI+dWMbGTycCKGMoOO1KA==",
+ "version": "11.1.9",
+ "resolved": "https://registry.npmjs.org/swiper/-/swiper-11.1.9.tgz",
+ "integrity": "sha512-rflu8zvfGa3x1v/aeSufk4zRJffhOQowyvtJlp46sUBnOqAuk1Rdv5Ldj0AWWBV595iZ+ZMk7VB35ZRtRUomtA==",
"funding": [
{
"type": "patreon",
@@ -8021,30 +10136,46 @@
"node_modules/symbol-tree": {
"version": "3.2.4",
"resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz",
- "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==",
- "license": "MIT"
+ "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw=="
+ },
+ "node_modules/thingies": {
+ "version": "1.21.0",
+ "resolved": "https://registry.npmjs.org/thingies/-/thingies-1.21.0.tgz",
+ "integrity": "sha512-hsqsJsFMsV+aD4s3CWKk85ep/3I9XzYV/IXaSouJMYIoDlgyi11cBhsqYe9/geRfB0YIikBQg6raRaM+nIMP9g==",
+ "engines": {
+ "node": ">=10.18"
+ },
+ "peerDependencies": {
+ "tslib": "^2"
+ }
+ },
+ "node_modules/thread-stream": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/thread-stream/-/thread-stream-3.1.0.tgz",
+ "integrity": "sha512-OqyPZ9u96VohAyMfJykzmivOrY2wfMSf3C5TtFJVgN+Hm6aj+voFhlK+kZEIv2FBh1X6Xp3DlnCOfEQ3B2J86A==",
+ "dependencies": {
+ "real-require": "^0.2.0"
+ }
},
"node_modules/through": {
"version": "2.3.8",
"resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
- "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==",
- "license": "MIT"
+ "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg=="
},
"node_modules/tiny-typed-emitter": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/tiny-typed-emitter/-/tiny-typed-emitter-2.1.0.tgz",
- "integrity": "sha512-qVtvMxeXbVej0cQWKqVSSAHmKZEHAvxdF8HEUBFWts8h+xEo5m/lEiPakuyZ3BnCBjOD8i24kzNOiOLLgsSxhA==",
- "license": "MIT"
+ "integrity": "sha512-qVtvMxeXbVej0cQWKqVSSAHmKZEHAvxdF8HEUBFWts8h+xEo5m/lEiPakuyZ3BnCBjOD8i24kzNOiOLLgsSxhA=="
},
"node_modules/tinybench": {
- "version": "2.8.0",
- "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.8.0.tgz",
- "integrity": "sha512-1/eK7zUnIklz4JUUlL+658n58XO2hHLQfSk1Zf2LKieUjxidN16eKFEoDEfjHc3ohofSSqK3X5yO6VGb6iW8Lw=="
+ "version": "2.9.0",
+ "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.9.0.tgz",
+ "integrity": "sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg=="
},
"node_modules/tinypool": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-1.0.0.tgz",
- "integrity": "sha512-KIKExllK7jp3uvrNtvRBYBWBOAXSX8ZvoaD8T+7KB/QHIuoJW3Pmr60zucywjAlMb5TeXUkcs/MWeWLu0qvuAQ==",
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-1.0.1.tgz",
+ "integrity": "sha512-URZYihUbRPcGv95En+sz6MfghfIc2OJ1sv/RmhWZLouPY0/8Vo80viwPvg3dlaS9fuq7fQMEfgRRK7BBZThBEA==",
"engines": {
"node": "^18.0.0 || >=20.0.0"
}
@@ -8066,28 +10197,25 @@
}
},
"node_modules/tldts": {
- "version": "6.1.30",
- "resolved": "https://registry.npmjs.org/tldts/-/tldts-6.1.30.tgz",
- "integrity": "sha512-NErlfxa+LPJynXZ07f86N6ylkXhYaOL4rB2k+qwF69cdvol1IJHmlouXE8c7Hrqr1BiYNWL4qbdTxaX+szfOpQ==",
- "license": "MIT",
+ "version": "6.1.40",
+ "resolved": "https://registry.npmjs.org/tldts/-/tldts-6.1.40.tgz",
+ "integrity": "sha512-SAvDKQxzqoi2gaC14XdC1egLtBqcCnYTe/hKM07FMXSTKw4Tti3fRDcZopWJGAhXK0H6LfuM0QWwZhECUvLKTg==",
"dependencies": {
- "tldts-core": "^6.1.30"
+ "tldts-core": "^6.1.40"
},
"bin": {
"tldts": "bin/cli.js"
}
},
"node_modules/tldts-core": {
- "version": "6.1.30",
- "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-6.1.30.tgz",
- "integrity": "sha512-CPlL58/oIvnovk5KTHIho/B0bMuvPkZrcC7f4pfQH+BBPY/mMz6CekiIdhjFxk9XZZJNirbwh1rRTSo4e5KXQA==",
- "license": "MIT"
+ "version": "6.1.40",
+ "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-6.1.40.tgz",
+ "integrity": "sha512-csGlF+5GtK0qDvkqhZHbMflIvvMqs7JS3Y3KMrfBuhDAjI+oqH90p4KYMeiCPVF7akTeNoLgFaQ+aPZcGBc1kg=="
},
"node_modules/tmp": {
"version": "0.0.33",
"resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz",
"integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==",
- "license": "MIT",
"dependencies": {
"os-tmpdir": "~1.0.2"
},
@@ -8097,14 +10225,16 @@
},
"node_modules/to-fast-properties": {
"version": "2.0.0",
- "license": "MIT",
+ "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
+ "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==",
"engines": {
"node": ">=4"
}
},
"node_modules/to-regex-range": {
"version": "5.0.1",
- "license": "MIT",
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
+ "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
"dependencies": {
"is-number": "^7.0.0"
},
@@ -8112,11 +10242,26 @@
"node": ">=8.0"
}
},
+ "node_modules/toad-cache": {
+ "version": "3.7.0",
+ "resolved": "https://registry.npmjs.org/toad-cache/-/toad-cache-3.7.0.tgz",
+ "integrity": "sha512-/m8M+2BJUpoJdgAHoG+baCwBT+tf2VraSfkBgl0Y00qIWt41DJ8R5B8nsEw0I58YwF5IZH6z24/2TobDKnqSWw==",
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/toidentifier": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz",
+ "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==",
+ "engines": {
+ "node": ">=0.6"
+ }
+ },
"node_modules/token-types": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/token-types/-/token-types-5.0.1.tgz",
- "integrity": "sha512-Y2fmSnZjQdDb9W4w4r1tswlMHylzWIeOKpx0aZH9BgGtACHhrk3OkT52AzwcuqTRBZtvvnTjDBh8eynMulu8Vg==",
- "license": "MIT",
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/token-types/-/token-types-6.0.0.tgz",
+ "integrity": "sha512-lbDrTLVsHhOMljPscd0yitpozq7Ga2M5Cvez5AjGg8GASBjtt6iERCAJ93yommPmz62fb45oFIXHEZ3u9bfJEA==",
"dependencies": {
"@tokenizer/token": "^0.3.0",
"ieee754": "^1.2.1"
@@ -8133,7 +10278,6 @@
"version": "4.1.4",
"resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.4.tgz",
"integrity": "sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==",
- "license": "BSD-3-Clause",
"dependencies": {
"psl": "^1.1.33",
"punycode": "^2.1.1",
@@ -8148,7 +10292,6 @@
"version": "0.2.0",
"resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz",
"integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==",
- "license": "MIT",
"engines": {
"node": ">= 4.0.0"
}
@@ -8157,7 +10300,6 @@
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/tr46/-/tr46-5.0.0.tgz",
"integrity": "sha512-tk2G5R2KRwBd+ZN0zaEXpmzdKyOYksXwywulIX95MBODjSzMIuQnQ3m8JxgbhnL1LeVo7lqQKsYa1O3Htl7K5g==",
- "license": "MIT",
"dependencies": {
"punycode": "^2.3.1"
},
@@ -8165,9 +10307,25 @@
"node": ">=18"
}
},
+ "node_modules/tree-dump": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/tree-dump/-/tree-dump-1.0.2.tgz",
+ "integrity": "sha512-dpev9ABuLWdEubk+cIaI9cHwRNNDjkBBLXTwI4UCUFdQ5xXKqNXoK4FEciw/vxf+NQ7Cb7sGUyeUtORvHIdRXQ==",
+ "engines": {
+ "node": ">=10.0"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/streamich"
+ },
+ "peerDependencies": {
+ "tslib": "2"
+ }
+ },
"node_modules/trim-lines": {
"version": "3.0.1",
- "license": "MIT",
+ "resolved": "https://registry.npmjs.org/trim-lines/-/trim-lines-3.0.1.tgz",
+ "integrity": "sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/wooorm"
@@ -8175,17 +10333,75 @@
},
"node_modules/trough": {
"version": "2.2.0",
- "license": "MIT",
+ "resolved": "https://registry.npmjs.org/trough/-/trough-2.2.0.tgz",
+ "integrity": "sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/wooorm"
}
},
+ "node_modules/ts-node": {
+ "version": "10.9.2",
+ "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz",
+ "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==",
+ "dev": true,
+ "dependencies": {
+ "@cspotcode/source-map-support": "^0.8.0",
+ "@tsconfig/node10": "^1.0.7",
+ "@tsconfig/node12": "^1.0.7",
+ "@tsconfig/node14": "^1.0.0",
+ "@tsconfig/node16": "^1.0.2",
+ "acorn": "^8.4.1",
+ "acorn-walk": "^8.1.1",
+ "arg": "^4.1.0",
+ "create-require": "^1.1.0",
+ "diff": "^4.0.1",
+ "make-error": "^1.1.1",
+ "v8-compile-cache-lib": "^3.0.1",
+ "yn": "3.1.1"
+ },
+ "bin": {
+ "ts-node": "dist/bin.js",
+ "ts-node-cwd": "dist/bin-cwd.js",
+ "ts-node-esm": "dist/bin-esm.js",
+ "ts-node-script": "dist/bin-script.js",
+ "ts-node-transpile-only": "dist/bin-transpile.js",
+ "ts-script": "dist/bin-script-deprecated.js"
+ },
+ "peerDependencies": {
+ "@swc/core": ">=1.2.50",
+ "@swc/wasm": ">=1.2.50",
+ "@types/node": "*",
+ "typescript": ">=2.7"
+ },
+ "peerDependenciesMeta": {
+ "@swc/core": {
+ "optional": true
+ },
+ "@swc/wasm": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/ts-node/node_modules/arg": {
+ "version": "4.1.3",
+ "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz",
+ "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==",
+ "dev": true
+ },
+ "node_modules/ts-node/node_modules/diff": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz",
+ "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.3.1"
+ }
+ },
"node_modules/tsconfck": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/tsconfck/-/tsconfck-3.1.1.tgz",
"integrity": "sha512-00eoI6WY57SvZEVjm13stEVE90VkEdJAFGgpFLTsZbJyW/LwFQ7uQxJHWpZ2hzSWgCPKc9AnBnNP+0X7o3hAmQ==",
- "license": "MIT",
"bin": {
"tsconfck": "bin/tsconfck.js"
},
@@ -8203,16 +10419,16 @@
},
"node_modules/tslib": {
"version": "2.6.3",
- "license": "0BSD"
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz",
+ "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ=="
},
"node_modules/tsx": {
- "version": "4.16.0",
- "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.16.0.tgz",
- "integrity": "sha512-MPgN+CuY+4iKxGoJNPv+1pyo5YWZAQ5XfsyobUG+zoKG7IkvCPLZDEyoIb8yLS2FcWci1nlxAqmvPlFWD5AFiQ==",
+ "version": "4.17.0",
+ "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.17.0.tgz",
+ "integrity": "sha512-eN4mnDA5UMKDt4YZixo9tBioibaMBpoxBkD+rIPAjVmYERSG0/dWEY1CEFuV89CgASlKL499q8AhmkMnnjtOJg==",
"dev": true,
- "license": "MIT",
"dependencies": {
- "esbuild": "~0.21.5",
+ "esbuild": "~0.23.0",
"get-tsconfig": "^4.7.5"
},
"bin": {
@@ -8225,24 +10441,417 @@
"fsevents": "~2.3.3"
}
},
- "node_modules/tsx/node_modules/fsevents": {
- "version": "2.3.3",
- "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
- "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
+ "node_modules/tsx/node_modules/@esbuild/aix-ppc64": {
+ "version": "0.23.1",
+ "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.23.1.tgz",
+ "integrity": "sha512-6VhYk1diRqrhBAqpJEdjASR/+WVRtfjpqKuNw11cLiaWpAT/Uu+nokB+UJnevzy/P9C/ty6AOe0dwueMrGh/iQ==",
+ "cpu": [
+ "ppc64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "aix"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/tsx/node_modules/@esbuild/android-arm": {
+ "version": "0.23.1",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.23.1.tgz",
+ "integrity": "sha512-uz6/tEy2IFm9RYOyvKl88zdzZfwEfKZmnX9Cj1BHjeSGNuGLuMD1kR8y5bteYmwqKm1tj8m4cb/aKEorr6fHWQ==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/tsx/node_modules/@esbuild/android-arm64": {
+ "version": "0.23.1",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.23.1.tgz",
+ "integrity": "sha512-xw50ipykXcLstLeWH7WRdQuysJqejuAGPd30vd1i5zSyKK3WE+ijzHmLKxdiCMtH1pHz78rOg0BKSYOSB/2Khw==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/tsx/node_modules/@esbuild/android-x64": {
+ "version": "0.23.1",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.23.1.tgz",
+ "integrity": "sha512-nlN9B69St9BwUoB+jkyU090bru8L0NA3yFvAd7k8dNsVH8bi9a8cUAUSEcEEgTp2z3dbEDGJGfP6VUnkQnlReg==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/tsx/node_modules/@esbuild/darwin-arm64": {
+ "version": "0.23.1",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.23.1.tgz",
+ "integrity": "sha512-YsS2e3Wtgnw7Wq53XXBLcV6JhRsEq8hkfg91ESVadIrzr9wO6jJDMZnCQbHm1Guc5t/CdDiFSSfWP58FNuvT3Q==",
+ "cpu": [
+ "arm64"
+ ],
"dev": true,
- "hasInstallScript": true,
- "license": "MIT",
"optional": true,
"os": [
"darwin"
],
"engines": {
- "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
+ "node": ">=18"
+ }
+ },
+ "node_modules/tsx/node_modules/@esbuild/darwin-x64": {
+ "version": "0.23.1",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.23.1.tgz",
+ "integrity": "sha512-aClqdgTDVPSEGgoCS8QDG37Gu8yc9lTHNAQlsztQ6ENetKEO//b8y31MMu2ZaPbn4kVsIABzVLXYLhCGekGDqw==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/tsx/node_modules/@esbuild/freebsd-arm64": {
+ "version": "0.23.1",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.23.1.tgz",
+ "integrity": "sha512-h1k6yS8/pN/NHlMl5+v4XPfikhJulk4G+tKGFIOwURBSFzE8bixw1ebjluLOjfwtLqY0kewfjLSrO6tN2MgIhA==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/tsx/node_modules/@esbuild/freebsd-x64": {
+ "version": "0.23.1",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.23.1.tgz",
+ "integrity": "sha512-lK1eJeyk1ZX8UklqFd/3A60UuZ/6UVfGT2LuGo3Wp4/z7eRTRYY+0xOu2kpClP+vMTi9wKOfXi2vjUpO1Ro76g==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/tsx/node_modules/@esbuild/linux-arm": {
+ "version": "0.23.1",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.23.1.tgz",
+ "integrity": "sha512-CXXkzgn+dXAPs3WBwE+Kvnrf4WECwBdfjfeYHpMeVxWE0EceB6vhWGShs6wi0IYEqMSIzdOF1XjQ/Mkm5d7ZdQ==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/tsx/node_modules/@esbuild/linux-arm64": {
+ "version": "0.23.1",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.23.1.tgz",
+ "integrity": "sha512-/93bf2yxencYDnItMYV/v116zff6UyTjo4EtEQjUBeGiVpMmffDNUyD9UN2zV+V3LRV3/on4xdZ26NKzn6754g==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/tsx/node_modules/@esbuild/linux-ia32": {
+ "version": "0.23.1",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.23.1.tgz",
+ "integrity": "sha512-VTN4EuOHwXEkXzX5nTvVY4s7E/Krz7COC8xkftbbKRYAl96vPiUssGkeMELQMOnLOJ8k3BY1+ZY52tttZnHcXQ==",
+ "cpu": [
+ "ia32"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/tsx/node_modules/@esbuild/linux-loong64": {
+ "version": "0.23.1",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.23.1.tgz",
+ "integrity": "sha512-Vx09LzEoBa5zDnieH8LSMRToj7ir/Jeq0Gu6qJ/1GcBq9GkfoEAoXvLiW1U9J1qE/Y/Oyaq33w5p2ZWrNNHNEw==",
+ "cpu": [
+ "loong64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/tsx/node_modules/@esbuild/linux-mips64el": {
+ "version": "0.23.1",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.23.1.tgz",
+ "integrity": "sha512-nrFzzMQ7W4WRLNUOU5dlWAqa6yVeI0P78WKGUo7lg2HShq/yx+UYkeNSE0SSfSure0SqgnsxPvmAUu/vu0E+3Q==",
+ "cpu": [
+ "mips64el"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/tsx/node_modules/@esbuild/linux-ppc64": {
+ "version": "0.23.1",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.23.1.tgz",
+ "integrity": "sha512-dKN8fgVqd0vUIjxuJI6P/9SSSe/mB9rvA98CSH2sJnlZ/OCZWO1DJvxj8jvKTfYUdGfcq2dDxoKaC6bHuTlgcw==",
+ "cpu": [
+ "ppc64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/tsx/node_modules/@esbuild/linux-riscv64": {
+ "version": "0.23.1",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.23.1.tgz",
+ "integrity": "sha512-5AV4Pzp80fhHL83JM6LoA6pTQVWgB1HovMBsLQ9OZWLDqVY8MVobBXNSmAJi//Csh6tcY7e7Lny2Hg1tElMjIA==",
+ "cpu": [
+ "riscv64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/tsx/node_modules/@esbuild/linux-s390x": {
+ "version": "0.23.1",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.23.1.tgz",
+ "integrity": "sha512-9ygs73tuFCe6f6m/Tb+9LtYxWR4c9yg7zjt2cYkjDbDpV/xVn+68cQxMXCjUpYwEkze2RcU/rMnfIXNRFmSoDw==",
+ "cpu": [
+ "s390x"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/tsx/node_modules/@esbuild/linux-x64": {
+ "version": "0.23.1",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.23.1.tgz",
+ "integrity": "sha512-EV6+ovTsEXCPAp58g2dD68LxoP/wK5pRvgy0J/HxPGB009omFPv3Yet0HiaqvrIrgPTBuC6wCH1LTOY91EO5hQ==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/tsx/node_modules/@esbuild/netbsd-x64": {
+ "version": "0.23.1",
+ "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.23.1.tgz",
+ "integrity": "sha512-aevEkCNu7KlPRpYLjwmdcuNz6bDFiE7Z8XC4CPqExjTvrHugh28QzUXVOZtiYghciKUacNktqxdpymplil1beA==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "netbsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/tsx/node_modules/@esbuild/openbsd-x64": {
+ "version": "0.23.1",
+ "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.23.1.tgz",
+ "integrity": "sha512-aY2gMmKmPhxfU+0EdnN+XNtGbjfQgwZj43k8G3fyrDM/UdZww6xrWxmDkuz2eCZchqVeABjV5BpildOrUbBTqA==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "openbsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/tsx/node_modules/@esbuild/sunos-x64": {
+ "version": "0.23.1",
+ "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.23.1.tgz",
+ "integrity": "sha512-RBRT2gqEl0IKQABT4XTj78tpk9v7ehp+mazn2HbUeZl1YMdaGAQqhapjGTCe7uw7y0frDi4gS0uHzhvpFuI1sA==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "sunos"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/tsx/node_modules/@esbuild/win32-arm64": {
+ "version": "0.23.1",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.23.1.tgz",
+ "integrity": "sha512-4O+gPR5rEBe2FpKOVyiJ7wNDPA8nGzDuJ6gN4okSA1gEOYZ67N8JPk58tkWtdtPeLz7lBnY6I5L3jdsr3S+A6A==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/tsx/node_modules/@esbuild/win32-ia32": {
+ "version": "0.23.1",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.23.1.tgz",
+ "integrity": "sha512-BcaL0Vn6QwCwre3Y717nVHZbAa4UBEigzFm6VdsVdT/MbZ38xoj1X9HPkZhbmaBGUD1W8vxAfffbDe8bA6AKnQ==",
+ "cpu": [
+ "ia32"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/tsx/node_modules/@esbuild/win32-x64": {
+ "version": "0.23.1",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.23.1.tgz",
+ "integrity": "sha512-BHpFFeslkWrXWyUPnbKm+xYYVYruCinGcftSBaa8zoF9hZO4BcSCFUvHVTtzpIY6YzUnYtuEhZ+C9iEXjxnasg==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/tsx/node_modules/esbuild": {
+ "version": "0.23.1",
+ "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.23.1.tgz",
+ "integrity": "sha512-VVNz/9Sa0bs5SELtn3f7qhJCDPCF5oMEl5cO9/SSinpE9hbPVvxbd572HH5AKiP7WD8INO53GgfDDhRjkylHEg==",
+ "dev": true,
+ "hasInstallScript": true,
+ "bin": {
+ "esbuild": "bin/esbuild"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "optionalDependencies": {
+ "@esbuild/aix-ppc64": "0.23.1",
+ "@esbuild/android-arm": "0.23.1",
+ "@esbuild/android-arm64": "0.23.1",
+ "@esbuild/android-x64": "0.23.1",
+ "@esbuild/darwin-arm64": "0.23.1",
+ "@esbuild/darwin-x64": "0.23.1",
+ "@esbuild/freebsd-arm64": "0.23.1",
+ "@esbuild/freebsd-x64": "0.23.1",
+ "@esbuild/linux-arm": "0.23.1",
+ "@esbuild/linux-arm64": "0.23.1",
+ "@esbuild/linux-ia32": "0.23.1",
+ "@esbuild/linux-loong64": "0.23.1",
+ "@esbuild/linux-mips64el": "0.23.1",
+ "@esbuild/linux-ppc64": "0.23.1",
+ "@esbuild/linux-riscv64": "0.23.1",
+ "@esbuild/linux-s390x": "0.23.1",
+ "@esbuild/linux-x64": "0.23.1",
+ "@esbuild/netbsd-x64": "0.23.1",
+ "@esbuild/openbsd-arm64": "0.23.1",
+ "@esbuild/openbsd-x64": "0.23.1",
+ "@esbuild/sunos-x64": "0.23.1",
+ "@esbuild/win32-arm64": "0.23.1",
+ "@esbuild/win32-ia32": "0.23.1",
+ "@esbuild/win32-x64": "0.23.1"
}
},
"node_modules/type-fest": {
"version": "2.19.0",
- "license": "(MIT OR CC0-1.0)",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz",
+ "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==",
"engines": {
"node": ">=12.20"
},
@@ -8250,16 +10859,32 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/type-is": {
+ "version": "1.6.18",
+ "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
+ "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==",
+ "dependencies": {
+ "media-typer": "0.3.0",
+ "mime-types": "~2.1.24"
+ },
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/typedarray": {
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
+ "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA=="
+ },
"node_modules/typesafe-path": {
"version": "0.2.2",
"resolved": "https://registry.npmjs.org/typesafe-path/-/typesafe-path-0.2.2.tgz",
- "integrity": "sha512-OJabfkAg1WLZSqJAJ0Z6Sdt3utnbzr/jh+NAHoyWHJe8CMSy79Gm085094M9nvTPy22KzTVn5Zq5mbapCI/hPA==",
- "license": "MIT"
+ "integrity": "sha512-OJabfkAg1WLZSqJAJ0Z6Sdt3utnbzr/jh+NAHoyWHJe8CMSy79Gm085094M9nvTPy22KzTVn5Zq5mbapCI/hPA=="
},
"node_modules/typescript": {
- "version": "5.5.3",
- "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.3.tgz",
- "integrity": "sha512-/hreyEujaB0w76zKo6717l3L0o/qEUtRgdvUBvlkhoWeOVMjMuHNHk0BRBzikzuGDqNmPQbg5ifMEqsHLiIUcQ==",
+ "version": "5.5.4",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.4.tgz",
+ "integrity": "sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==",
"bin": {
"tsc": "bin/tsc",
"tsserver": "bin/tsserver"
@@ -8272,37 +10897,64 @@
"version": "0.3.3",
"resolved": "https://registry.npmjs.org/typescript-auto-import-cache/-/typescript-auto-import-cache-0.3.3.tgz",
"integrity": "sha512-ojEC7+Ci1ij9eE6hp8Jl9VUNnsEKzztktP5gtYNRMrTmfXVwA1PITYYAkpxCvvupdSYa/Re51B6KMcv1CTZEUA==",
- "license": "MIT",
"dependencies": {
"semver": "^7.3.8"
}
},
+ "node_modules/typescript-auto-import-cache/node_modules/semver": {
+ "version": "7.6.3",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz",
+ "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==",
+ "bin": {
+ "semver": "bin/semver.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
"node_modules/uc.micro": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-2.1.0.tgz",
- "integrity": "sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==",
- "license": "MIT"
+ "integrity": "sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A=="
},
"node_modules/uhyphen": {
"version": "0.2.0",
"resolved": "https://registry.npmjs.org/uhyphen/-/uhyphen-0.2.0.tgz",
- "integrity": "sha512-qz3o9CHXmJJPGBdqzab7qAYuW8kQGKNEuoHFYrBwV6hWIMcpAmxDLXojcHfFr9US1Pe6zUswEIJIbLI610fuqA==",
- "license": "ISC"
+ "integrity": "sha512-qz3o9CHXmJJPGBdqzab7qAYuW8kQGKNEuoHFYrBwV6hWIMcpAmxDLXojcHfFr9US1Pe6zUswEIJIbLI610fuqA=="
+ },
+ "node_modules/uint8array-extras": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/uint8array-extras/-/uint8array-extras-1.4.0.tgz",
+ "integrity": "sha512-ZPtzy0hu4cZjv3z5NW9gfKnNLjoz4y6uv4HlelAjDK7sY/xOkKZv9xK/WQpcsBB3jEybChz9DPC2U/+cusjJVQ==",
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
},
"node_modules/ultrahtml": {
"version": "1.5.3",
"resolved": "https://registry.npmjs.org/ultrahtml/-/ultrahtml-1.5.3.tgz",
"integrity": "sha512-GykOvZwgDWZlTQMtp5jrD4BVL+gNn2NVlVafjcFUJ7taY20tqYdwdoWBFy6GBJsNTZe1GkGPkSl5knQAjtgceg=="
},
+ "node_modules/undici": {
+ "version": "6.19.8",
+ "resolved": "https://registry.npmjs.org/undici/-/undici-6.19.8.tgz",
+ "integrity": "sha512-U8uCCl2x9TK3WANvmBavymRzxbfFYG+tAu+fgx3zxQy3qdagQqBLwJVrdyO1TBfUXvfKveMKJZhpvUYoOjM+4g==",
+ "engines": {
+ "node": ">=18.17"
+ }
+ },
"node_modules/undici-types": {
- "version": "5.26.5",
- "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz",
- "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==",
- "license": "MIT"
+ "version": "6.19.8",
+ "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz",
+ "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw=="
},
"node_modules/unified": {
"version": "11.0.5",
- "license": "MIT",
+ "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.5.tgz",
+ "integrity": "sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==",
"dependencies": {
"@types/unist": "^3.0.0",
"bail": "^2.0.0",
@@ -8321,7 +10973,6 @@
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/unist-util-find-after/-/unist-util-find-after-5.0.0.tgz",
"integrity": "sha512-amQa0Ep2m6hE2g72AugUItjbuM8X8cGQnFoHk0pGfrFeT9GZhzN5SW8nRsiGKK7Aif4CrACPENkA6P/Lw6fHGQ==",
- "license": "MIT",
"dependencies": {
"@types/unist": "^3.0.0",
"unist-util-is": "^6.0.0"
@@ -8333,7 +10984,8 @@
},
"node_modules/unist-util-is": {
"version": "6.0.0",
- "license": "MIT",
+ "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz",
+ "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==",
"dependencies": {
"@types/unist": "^3.0.0"
},
@@ -8346,7 +10998,6 @@
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/unist-util-modify-children/-/unist-util-modify-children-4.0.0.tgz",
"integrity": "sha512-+tdN5fGNddvsQdIzUF3Xx82CU9sMM+fA0dLgR9vOmT0oPT2jH+P1nd5lSqfCfXAw+93NhcXNY2qqvTUtE4cQkw==",
- "license": "MIT",
"dependencies": {
"@types/unist": "^3.0.0",
"array-iterate": "^2.0.0"
@@ -8358,7 +11009,8 @@
},
"node_modules/unist-util-position": {
"version": "5.0.0",
- "license": "MIT",
+ "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz",
+ "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==",
"dependencies": {
"@types/unist": "^3.0.0"
},
@@ -8371,7 +11023,6 @@
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-5.0.0.tgz",
"integrity": "sha512-Hp5Kh3wLxv0PHj9m2yZhhLt58KzPtEYKQQ4yxfYFEO7EvHwzyDYnduhHnY1mDxoqr7VUwVuHXk9RXKIiYS1N8Q==",
- "license": "MIT",
"dependencies": {
"@types/unist": "^3.0.0",
"unist-util-visit": "^5.0.0"
@@ -8383,7 +11034,8 @@
},
"node_modules/unist-util-stringify-position": {
"version": "4.0.0",
- "license": "MIT",
+ "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz",
+ "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==",
"dependencies": {
"@types/unist": "^3.0.0"
},
@@ -8394,7 +11046,8 @@
},
"node_modules/unist-util-visit": {
"version": "5.0.0",
- "license": "MIT",
+ "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.0.0.tgz",
+ "integrity": "sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==",
"dependencies": {
"@types/unist": "^3.0.0",
"unist-util-is": "^6.0.0",
@@ -8409,7 +11062,6 @@
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/unist-util-visit-children/-/unist-util-visit-children-3.0.0.tgz",
"integrity": "sha512-RgmdTfSBOg04sdPcpTSD1jzoNBjt9a80/ZCzp5cI9n1qPzLZWF9YdvWGN2zmTumP1HWhXKdUWexjy/Wy/lJ7tA==",
- "license": "MIT",
"dependencies": {
"@types/unist": "^3.0.0"
},
@@ -8420,7 +11072,8 @@
},
"node_modules/unist-util-visit-parents": {
"version": "6.0.1",
- "license": "MIT",
+ "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz",
+ "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==",
"dependencies": {
"@types/unist": "^3.0.0",
"unist-util-is": "^6.0.0"
@@ -8434,13 +11087,14 @@
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz",
"integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==",
- "license": "MIT",
"engines": {
"node": ">= 10.0.0"
}
},
"node_modules/update-browserslist-db": {
- "version": "1.0.16",
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz",
+ "integrity": "sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==",
"funding": [
{
"type": "opencollective",
@@ -8455,7 +11109,6 @@
"url": "https://github.com/sponsors/ai"
}
],
- "license": "MIT",
"dependencies": {
"escalade": "^3.1.2",
"picocolors": "^1.0.1"
@@ -8467,11 +11120,15 @@
"browserslist": ">= 4.21.0"
}
},
+ "node_modules/url-join": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/url-join/-/url-join-4.0.1.tgz",
+ "integrity": "sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA=="
+ },
"node_modules/url-parse": {
"version": "1.5.10",
"resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz",
"integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==",
- "license": "MIT",
"dependencies": {
"querystringify": "^2.1.1",
"requires-port": "^1.0.0"
@@ -8480,21 +11137,26 @@
"node_modules/util-deprecate": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
- "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==",
- "license": "MIT"
+ "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="
+ },
+ "node_modules/v8-compile-cache-lib": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz",
+ "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==",
+ "dev": true
},
"node_modules/vali-date": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/vali-date/-/vali-date-1.0.0.tgz",
"integrity": "sha512-sgECfZthyaCKW10N0fm27cg8HYTFK5qMWgypqkXMQ4Wbl/zZKx7xZICgcoxIIE+WFAP/MBL2EFwC/YvLxw3Zeg==",
- "license": "MIT",
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/vfile": {
- "version": "6.0.1",
- "license": "MIT",
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.2.tgz",
+ "integrity": "sha512-zND7NlS8rJYb/sPqkb13ZvbbUoExdbi4w3SfRrMq6R3FvnLQmmfpajJNITuuYm6AZ5uao9vy4BAos3EXBPf2rg==",
"dependencies": {
"@types/unist": "^3.0.0",
"unist-util-stringify-position": "^4.0.0",
@@ -8506,8 +11168,9 @@
}
},
"node_modules/vfile-location": {
- "version": "5.0.2",
- "license": "MIT",
+ "version": "5.0.3",
+ "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-5.0.3.tgz",
+ "integrity": "sha512-5yXvWDEgqeiYiBe1lbxYF7UMAIm/IcopxMHrMQDq3nvKcjPKIhZklUKL+AE7J7uApI4kwe2snsK+eI6UTj9EHg==",
"dependencies": {
"@types/unist": "^3.0.0",
"vfile": "^6.0.0"
@@ -8519,7 +11182,8 @@
},
"node_modules/vfile-message": {
"version": "4.0.2",
- "license": "MIT",
+ "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz",
+ "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==",
"dependencies": {
"@types/unist": "^3.0.0",
"unist-util-stringify-position": "^4.0.0"
@@ -8530,13 +11194,12 @@
}
},
"node_modules/vite": {
- "version": "5.3.3",
- "resolved": "https://registry.npmjs.org/vite/-/vite-5.3.3.tgz",
- "integrity": "sha512-NPQdeCU0Dv2z5fu+ULotpuq5yfCS1BzKUIPhNbP3YBfAMGJXbt2nS+sbTFu+qchaqWTD+H3JK++nRwr6XIcp6A==",
- "license": "MIT",
+ "version": "5.4.1",
+ "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.1.tgz",
+ "integrity": "sha512-1oE6yuNXssjrZdblI9AfBbHCC41nnyoVoEZxQnID6yvQZAFBzxxkqoFLtHUMkYunL8hwOLEjgTuxpkRxvba3kA==",
"dependencies": {
"esbuild": "^0.21.3",
- "postcss": "^8.4.39",
+ "postcss": "^8.4.41",
"rollup": "^4.13.0"
},
"bin": {
@@ -8556,6 +11219,7 @@
"less": "*",
"lightningcss": "^1.21.0",
"sass": "*",
+ "sass-embedded": "*",
"stylus": "*",
"sugarss": "*",
"terser": "^5.4.0"
@@ -8573,6 +11237,9 @@
"sass": {
"optional": true
},
+ "sass-embedded": {
+ "optional": true
+ },
"stylus": {
"optional": true
},
@@ -8585,9 +11252,9 @@
}
},
"node_modules/vite-node": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-2.0.3.tgz",
- "integrity": "sha512-14jzwMx7XTcMB+9BhGQyoEAmSl0eOr3nrnn+Z12WNERtOvLN+d2scbRUvyni05rT3997Bg+rZb47NyP4IQPKXg==",
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-2.0.5.tgz",
+ "integrity": "sha512-LdsW4pxj0Ot69FAoXZ1yTnA9bjGohr2yNBU7QKRxpz8ITSkhuDl6h3zS/tvgz4qrNjeRnvrWeXQ8ZF7Um4W00Q==",
"dependencies": {
"cac": "^6.7.14",
"debug": "^4.3.5",
@@ -8605,23 +11272,32 @@
"url": "https://opencollective.com/vitest"
}
},
- "node_modules/vite/node_modules/fsevents": {
- "version": "2.3.3",
- "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
- "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
- "hasInstallScript": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
+ "node_modules/vite-plugin-commonjs": {
+ "version": "0.10.1",
+ "resolved": "https://registry.npmjs.org/vite-plugin-commonjs/-/vite-plugin-commonjs-0.10.1.tgz",
+ "integrity": "sha512-taP8R9kYGlCW5OzkVR0UIWRCnG6rSxeWWuA7tnU5b9t5MniibOnDY219NhisTeDhJAeGT8cEnrhVWZ9A5yD+vg==",
+ "dependencies": {
+ "acorn": "^8.8.2",
+ "fast-glob": "^3.2.12",
+ "magic-string": "^0.30.1",
+ "vite-plugin-dynamic-import": "^1.5.0"
+ }
+ },
+ "node_modules/vite-plugin-dynamic-import": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/vite-plugin-dynamic-import/-/vite-plugin-dynamic-import-1.5.0.tgz",
+ "integrity": "sha512-Qp85c+AVJmLa8MLni74U4BDiWpUeFNx7NJqbGZyR2XJOU7mgW0cb7nwlAMucFyM4arEd92Nfxp4j44xPi6Fu7g==",
+ "dependencies": {
+ "acorn": "^8.8.2",
+ "es-module-lexer": "^1.2.1",
+ "fast-glob": "^3.2.12",
+ "magic-string": "^0.30.1"
}
},
"node_modules/vitefu": {
"version": "0.2.5",
- "license": "MIT",
+ "resolved": "https://registry.npmjs.org/vitefu/-/vitefu-0.2.5.tgz",
+ "integrity": "sha512-SgHtMLoqaeeGnd2evZ849ZbACbnwQCIwRH57t18FxcXoZop0uQu0uzlIhJBlF/eWVzuce0sHeqPcDo+evVcg8Q==",
"peerDependencies": {
"vite": "^3.0.0 || ^4.0.0 || ^5.0.0"
},
@@ -8632,17 +11308,17 @@
}
},
"node_modules/vitest": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/vitest/-/vitest-2.0.3.tgz",
- "integrity": "sha512-o3HRvU93q6qZK4rI2JrhKyZMMuxg/JRt30E6qeQs6ueaiz5hr1cPj+Sk2kATgQzMMqsa2DiNI0TIK++1ULx8Jw==",
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/vitest/-/vitest-2.0.5.tgz",
+ "integrity": "sha512-8GUxONfauuIdeSl5f9GTgVEpg5BTOlplET4WEDaeY2QBiN8wSm68vxN/tb5z405OwppfoCavnwXafiaYBC/xOA==",
"dependencies": {
"@ampproject/remapping": "^2.3.0",
- "@vitest/expect": "2.0.3",
- "@vitest/pretty-format": "^2.0.3",
- "@vitest/runner": "2.0.3",
- "@vitest/snapshot": "2.0.3",
- "@vitest/spy": "2.0.3",
- "@vitest/utils": "2.0.3",
+ "@vitest/expect": "2.0.5",
+ "@vitest/pretty-format": "^2.0.5",
+ "@vitest/runner": "2.0.5",
+ "@vitest/snapshot": "2.0.5",
+ "@vitest/spy": "2.0.5",
+ "@vitest/utils": "2.0.5",
"chai": "^5.1.1",
"debug": "^4.3.5",
"execa": "^8.0.1",
@@ -8653,8 +11329,8 @@
"tinypool": "^1.0.0",
"tinyrainbow": "^1.2.0",
"vite": "^5.0.0",
- "vite-node": "2.0.3",
- "why-is-node-running": "^2.2.2"
+ "vite-node": "2.0.5",
+ "why-is-node-running": "^2.3.0"
},
"bin": {
"vitest": "vitest.mjs"
@@ -8668,8 +11344,8 @@
"peerDependencies": {
"@edge-runtime/vm": "*",
"@types/node": "^18.0.0 || >=20.0.0",
- "@vitest/browser": "2.0.3",
- "@vitest/ui": "2.0.3",
+ "@vitest/browser": "2.0.5",
+ "@vitest/ui": "2.0.5",
"happy-dom": "*",
"jsdom": "*"
},
@@ -8695,17 +11371,16 @@
}
},
"node_modules/volar-service-css": {
- "version": "0.0.59",
- "resolved": "https://registry.npmjs.org/volar-service-css/-/volar-service-css-0.0.59.tgz",
- "integrity": "sha512-gLNjJnECbalPvQB7qeJjhkDN8sR5M3ItbVYjnyio61aHaWptIiXm/HfDahcQ2ApwmvWidkMWWegjGq5L0BENDA==",
- "license": "MIT",
+ "version": "0.0.61",
+ "resolved": "https://registry.npmjs.org/volar-service-css/-/volar-service-css-0.0.61.tgz",
+ "integrity": "sha512-Ct9L/w+IB1JU8F4jofcNCGoHy6TF83aiapfZq9A0qYYpq+Kk5dH+ONS+rVZSsuhsunq8UvAuF8Gk6B8IFLfniw==",
"dependencies": {
"vscode-css-languageservice": "^6.3.0",
"vscode-languageserver-textdocument": "^1.0.11",
"vscode-uri": "^3.0.8"
},
"peerDependencies": {
- "@volar/language-service": "~2.4.0-alpha.12"
+ "@volar/language-service": "~2.4.0"
},
"peerDependenciesMeta": {
"@volar/language-service": {
@@ -8714,10 +11389,9 @@
}
},
"node_modules/volar-service-emmet": {
- "version": "0.0.59",
- "resolved": "https://registry.npmjs.org/volar-service-emmet/-/volar-service-emmet-0.0.59.tgz",
- "integrity": "sha512-6EynHcuMwMBETpK29TbZvIMmvzdVG+Tkokk9VWfZeI+SwDptk2tgdhEqiXXvIkqYNgbuu73Itp66lpH76cAU+Q==",
- "license": "MIT",
+ "version": "0.0.61",
+ "resolved": "https://registry.npmjs.org/volar-service-emmet/-/volar-service-emmet-0.0.61.tgz",
+ "integrity": "sha512-iiYqBxjjcekqrRruw4COQHZME6EZYWVbkHjHDbULpml3g8HGJHzpAMkj9tXNCPxf36A+f1oUYjsvZt36qPg4cg==",
"dependencies": {
"@emmetio/css-parser": "^0.4.0",
"@emmetio/html-matcher": "^1.3.0",
@@ -8725,7 +11399,7 @@
"vscode-uri": "^3.0.8"
},
"peerDependencies": {
- "@volar/language-service": "~2.4.0-alpha.12"
+ "@volar/language-service": "~2.4.0"
},
"peerDependenciesMeta": {
"@volar/language-service": {
@@ -8734,17 +11408,16 @@
}
},
"node_modules/volar-service-html": {
- "version": "0.0.59",
- "resolved": "https://registry.npmjs.org/volar-service-html/-/volar-service-html-0.0.59.tgz",
- "integrity": "sha512-hEXOsYpILDlITZxnqRLV9OepVWD63GZBsyjMxszwdzlxvGZjzbGcBBinJGGJRwFIV8djdJwnt91bkdg1V5tj6Q==",
- "license": "MIT",
+ "version": "0.0.61",
+ "resolved": "https://registry.npmjs.org/volar-service-html/-/volar-service-html-0.0.61.tgz",
+ "integrity": "sha512-yFE+YmmgqIL5HI4ORqP++IYb1QaGcv+xBboI0WkCxJJ/M35HZj7f5rbT3eQ24ECLXFbFCFanckwyWJVz5KmN3Q==",
"dependencies": {
"vscode-html-languageservice": "^5.3.0",
"vscode-languageserver-textdocument": "^1.0.11",
"vscode-uri": "^3.0.8"
},
"peerDependencies": {
- "@volar/language-service": "~2.4.0-alpha.12"
+ "@volar/language-service": "~2.4.0"
},
"peerDependenciesMeta": {
"@volar/language-service": {
@@ -8753,15 +11426,14 @@
}
},
"node_modules/volar-service-prettier": {
- "version": "0.0.59",
- "resolved": "https://registry.npmjs.org/volar-service-prettier/-/volar-service-prettier-0.0.59.tgz",
- "integrity": "sha512-FmBR4lsgFRGR3V0LnxZZal0WqdOJjuLL6mQSj4p57M15APtQwuocG/FiF+ONGFnwRXMOIBDBTCARdth+TKgL3A==",
- "license": "MIT",
+ "version": "0.0.61",
+ "resolved": "https://registry.npmjs.org/volar-service-prettier/-/volar-service-prettier-0.0.61.tgz",
+ "integrity": "sha512-F612nql5I0IS8HxXemCGvOR2Uxd4XooIwqYVUvk7WSBxP/+xu1jYvE3QJ7EVpl8Ty3S4SxPXYiYTsG3bi+gzIQ==",
"dependencies": {
"vscode-uri": "^3.0.8"
},
"peerDependencies": {
- "@volar/language-service": "~2.4.0-alpha.12",
+ "@volar/language-service": "~2.4.0",
"prettier": "^2.2 || ^3.0"
},
"peerDependenciesMeta": {
@@ -8774,10 +11446,9 @@
}
},
"node_modules/volar-service-typescript": {
- "version": "0.0.59",
- "resolved": "https://registry.npmjs.org/volar-service-typescript/-/volar-service-typescript-0.0.59.tgz",
- "integrity": "sha512-VCOpfiu+lUo5lapWLB5L5vmQGtwzmNWn5MueV915eku7blpphmE+Z7hCNcL1NApn7AetXWhiblv8ZhmUx/dGIA==",
- "license": "MIT",
+ "version": "0.0.61",
+ "resolved": "https://registry.npmjs.org/volar-service-typescript/-/volar-service-typescript-0.0.61.tgz",
+ "integrity": "sha512-4kRHxVbW7wFBHZWRU6yWxTgiKETBDIJNwmJUAWeP0mHaKpnDGj/astdRFKqGFRYVeEYl45lcUPhdJyrzanjsdQ==",
"dependencies": {
"path-browserify": "^1.0.1",
"semver": "^7.6.2",
@@ -8787,7 +11458,7 @@
"vscode-uri": "^3.0.8"
},
"peerDependencies": {
- "@volar/language-service": "~2.4.0-alpha.12"
+ "@volar/language-service": "~2.4.0"
},
"peerDependenciesMeta": {
"@volar/language-service": {
@@ -8796,15 +11467,42 @@
}
},
"node_modules/volar-service-typescript-twoslash-queries": {
- "version": "0.0.59",
- "resolved": "https://registry.npmjs.org/volar-service-typescript-twoslash-queries/-/volar-service-typescript-twoslash-queries-0.0.59.tgz",
- "integrity": "sha512-skm8e6yhCIkqLwJB6S9MqT5lO9LNFuMD3dYxKpmOZs1CKbXmCZZTmLfEaD5VkJae1xdleEDZFFTHl2O5HLjOGQ==",
- "license": "MIT",
+ "version": "0.0.61",
+ "resolved": "https://registry.npmjs.org/volar-service-typescript-twoslash-queries/-/volar-service-typescript-twoslash-queries-0.0.61.tgz",
+ "integrity": "sha512-99FICGrEF0r1E2tV+SvprHPw9Knyg7BdW2fUch0tf59kG+KG+Tj4tL6tUg+cy8f23O/VXlmsWFMIE+bx1dXPnQ==",
"dependencies": {
"vscode-uri": "^3.0.8"
},
"peerDependencies": {
- "@volar/language-service": "~2.4.0-alpha.12"
+ "@volar/language-service": "~2.4.0"
+ },
+ "peerDependenciesMeta": {
+ "@volar/language-service": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/volar-service-typescript/node_modules/semver": {
+ "version": "7.6.3",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz",
+ "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==",
+ "bin": {
+ "semver": "bin/semver.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/volar-service-yaml": {
+ "version": "0.0.61",
+ "resolved": "https://registry.npmjs.org/volar-service-yaml/-/volar-service-yaml-0.0.61.tgz",
+ "integrity": "sha512-L+gbDiLDQQ1rZUbJ3mf3doDsoQUa8OZM/xdpk/unMg1Vz24Zmi2Ign8GrZyBD7bRoIQDwOH9gdktGDKzRPpUNw==",
+ "dependencies": {
+ "vscode-uri": "^3.0.8",
+ "yaml-language-server": "~1.15.0"
+ },
+ "peerDependencies": {
+ "@volar/language-service": "~2.4.0"
},
"peerDependenciesMeta": {
"@volar/language-service": {
@@ -8816,7 +11514,6 @@
"version": "6.3.0",
"resolved": "https://registry.npmjs.org/vscode-css-languageservice/-/vscode-css-languageservice-6.3.0.tgz",
"integrity": "sha512-nU92imtkgzpCL0xikrIb8WvedV553F2BENzgz23wFuok/HLN5BeQmroMy26pUwFxV2eV8oNRmYCUv8iO7kSMhw==",
- "license": "MIT",
"dependencies": {
"@vscode/l10n": "^0.0.18",
"vscode-languageserver-textdocument": "^1.0.11",
@@ -8828,7 +11525,6 @@
"version": "5.3.0",
"resolved": "https://registry.npmjs.org/vscode-html-languageservice/-/vscode-html-languageservice-5.3.0.tgz",
"integrity": "sha512-C4Z3KsP5Ih+fjHpiBc5jxmvCl+4iEwvXegIrzu2F5pktbWvQaBT3YkVPk8N+QlSSMk8oCG6PKtZ/Sq2YHb5e8g==",
- "license": "MIT",
"dependencies": {
"@vscode/l10n": "^0.0.18",
"vscode-languageserver-textdocument": "^1.0.11",
@@ -8836,11 +11532,30 @@
"vscode-uri": "^3.0.8"
}
},
+ "node_modules/vscode-json-languageservice": {
+ "version": "4.1.8",
+ "resolved": "https://registry.npmjs.org/vscode-json-languageservice/-/vscode-json-languageservice-4.1.8.tgz",
+ "integrity": "sha512-0vSpg6Xd9hfV+eZAaYN63xVVMOTmJ4GgHxXnkLCh+9RsQBkWKIghzLhW2B9ebfG+LQQg8uLtsQ2aUKjTgE+QOg==",
+ "dependencies": {
+ "jsonc-parser": "^3.0.0",
+ "vscode-languageserver-textdocument": "^1.0.1",
+ "vscode-languageserver-types": "^3.16.0",
+ "vscode-nls": "^5.0.0",
+ "vscode-uri": "^3.0.2"
+ },
+ "engines": {
+ "npm": ">=7.0.0"
+ }
+ },
+ "node_modules/vscode-json-languageservice/node_modules/jsonc-parser": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.3.1.tgz",
+ "integrity": "sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ=="
+ },
"node_modules/vscode-jsonrpc": {
"version": "8.2.0",
"resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-8.2.0.tgz",
"integrity": "sha512-C+r0eKJUIfiDIfwJhria30+TYWPtuHJXHtI7J0YlOmKAo7ogxP20T0zxB7HZQIFhIyvoBPwWskjxrvAtfjyZfA==",
- "license": "MIT",
"engines": {
"node": ">=14.0.0"
}
@@ -8849,7 +11564,6 @@
"version": "9.0.1",
"resolved": "https://registry.npmjs.org/vscode-languageserver/-/vscode-languageserver-9.0.1.tgz",
"integrity": "sha512-woByF3PDpkHFUreUa7Hos7+pUWdeWMXRd26+ZX2A8cFx6v/JPTtd4/uN0/jB6XQHYaOlHbio03NTHCqrgG5n7g==",
- "license": "MIT",
"dependencies": {
"vscode-languageserver-protocol": "3.17.5"
},
@@ -8861,41 +11575,35 @@
"version": "3.17.5",
"resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.17.5.tgz",
"integrity": "sha512-mb1bvRJN8SVznADSGWM9u/b07H7Ecg0I3OgXDuLdn307rl/J3A9YD6/eYOssqhecL27hK1IPZAsaqh00i/Jljg==",
- "license": "MIT",
"dependencies": {
"vscode-jsonrpc": "8.2.0",
"vscode-languageserver-types": "3.17.5"
}
},
"node_modules/vscode-languageserver-textdocument": {
- "version": "1.0.11",
- "resolved": "https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.11.tgz",
- "integrity": "sha512-X+8T3GoiwTVlJbicx/sIAF+yuJAqz8VvwJyoMVhwEMoEKE/fkDmrqUgDMyBECcM2A2frVZIUj5HI/ErRXCfOeA==",
- "license": "MIT"
+ "version": "1.0.12",
+ "resolved": "https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.12.tgz",
+ "integrity": "sha512-cxWNPesCnQCcMPeenjKKsOCKQZ/L6Tv19DTRIGuLWe32lyzWhihGVJ/rcckZXJxfdKCFvRLS3fpBIsV/ZGX4zA=="
},
"node_modules/vscode-languageserver-types": {
"version": "3.17.5",
"resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.17.5.tgz",
- "integrity": "sha512-Ld1VelNuX9pdF39h2Hgaeb5hEZM2Z3jUrrMgWQAu82jMtZp7p3vJT3BzToKtZI7NgQssZje5o0zryOrhQvzQAg==",
- "license": "MIT"
+ "integrity": "sha512-Ld1VelNuX9pdF39h2Hgaeb5hEZM2Z3jUrrMgWQAu82jMtZp7p3vJT3BzToKtZI7NgQssZje5o0zryOrhQvzQAg=="
},
"node_modules/vscode-nls": {
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/vscode-nls/-/vscode-nls-5.2.0.tgz",
- "integrity": "sha512-RAaHx7B14ZU04EU31pT+rKz2/zSl7xMsfIZuo8pd+KZO6PXtQmpevpq3vxvWNcrGbdmhM/rr5Uw5Mz+NBfhVng==",
- "license": "MIT"
+ "integrity": "sha512-RAaHx7B14ZU04EU31pT+rKz2/zSl7xMsfIZuo8pd+KZO6PXtQmpevpq3vxvWNcrGbdmhM/rr5Uw5Mz+NBfhVng=="
},
"node_modules/vscode-uri": {
"version": "3.0.8",
"resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.0.8.tgz",
- "integrity": "sha512-AyFQ0EVmsOZOlAnxoFOGOq1SQDWAB7C6aqMGS23svWAllfOaxbuFvcT8D1i8z3Gyn8fraVeZNNmN6e9bxxXkKw==",
- "license": "MIT"
+ "integrity": "sha512-AyFQ0EVmsOZOlAnxoFOGOq1SQDWAB7C6aqMGS23svWAllfOaxbuFvcT8D1i8z3Gyn8fraVeZNNmN6e9bxxXkKw=="
},
"node_modules/w3c-xmlserializer": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-5.0.0.tgz",
"integrity": "sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==",
- "license": "MIT",
"dependencies": {
"xml-name-validator": "^5.0.0"
},
@@ -8907,14 +11615,14 @@
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz",
"integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==",
- "license": "MIT",
"dependencies": {
"defaults": "^1.0.3"
}
},
"node_modules/web-namespaces": {
"version": "2.0.1",
- "license": "MIT",
+ "resolved": "https://registry.npmjs.org/web-namespaces/-/web-namespaces-2.0.1.tgz",
+ "integrity": "sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/wooorm"
@@ -8924,7 +11632,6 @@
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz",
"integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==",
- "license": "BSD-2-Clause",
"engines": {
"node": ">=12"
}
@@ -8933,7 +11640,6 @@
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-3.1.1.tgz",
"integrity": "sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==",
- "license": "MIT",
"dependencies": {
"iconv-lite": "0.6.3"
},
@@ -8941,11 +11647,15 @@
"node": ">=18"
}
},
+ "node_modules/whatwg-fetch": {
+ "version": "3.6.20",
+ "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.20.tgz",
+ "integrity": "sha512-EqhiFU6daOA8kpjOWTL0olhVOF3i7OrFzSYiGsEMB8GcXS+RrzauAERX65xMeNWVqxA6HXH2m69Z9LaKKdisfg=="
+ },
"node_modules/whatwg-mimetype": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-4.0.0.tgz",
"integrity": "sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==",
- "license": "MIT",
"engines": {
"node": ">=18"
}
@@ -8954,7 +11664,6 @@
"version": "14.0.0",
"resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-14.0.0.tgz",
"integrity": "sha512-1lfMEm2IEr7RIV+f4lUNPOqfFL+pO+Xw3fJSqmjX9AbXcXcYOkCe1P6+9VBZB6n94af16NfZf+sSk0JCBZC9aw==",
- "license": "MIT",
"dependencies": {
"tr46": "^5.0.0",
"webidl-conversions": "^7.0.0"
@@ -8965,7 +11674,8 @@
},
"node_modules/which": {
"version": "2.0.2",
- "license": "ISC",
+ "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
+ "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
"dependencies": {
"isexe": "^2.0.0"
},
@@ -8977,19 +11687,20 @@
}
},
"node_modules/which-pm": {
- "version": "2.2.0",
- "license": "MIT",
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/which-pm/-/which-pm-3.0.0.tgz",
+ "integrity": "sha512-ysVYmw6+ZBhx3+ZkcPwRuJi38ZOTLJJ33PSHaitLxSKUMsh0LkKd0nC69zZCwt5D+AYUcMK2hhw4yWny20vSGg==",
"dependencies": {
- "load-yaml-file": "^0.2.0",
- "path-exists": "^4.0.0"
+ "load-yaml-file": "^0.2.0"
},
"engines": {
- "node": ">=8.15"
+ "node": ">=18.12"
}
},
"node_modules/which-pm-runs": {
"version": "1.1.0",
- "license": "MIT",
+ "resolved": "https://registry.npmjs.org/which-pm-runs/-/which-pm-runs-1.1.0.tgz",
+ "integrity": "sha512-n1brCuqClxfFfq/Rb0ICg9giSZqCS+pLtccdag6C2HyufBrh3fBOiy9nb6ggRMvWOVH5GrdJskj5iGTZNxd7SA==",
"engines": {
"node": ">=4"
}
@@ -9011,7 +11722,8 @@
},
"node_modules/widest-line": {
"version": "4.0.1",
- "license": "MIT",
+ "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-4.0.1.tgz",
+ "integrity": "sha512-o0cyEG0e8GPzT4iGHphIOh0cJOV8fivsXxddQasHPHfoZf1ZexrfeA21w2NaEN1RHE+fXlfISmOE8R9N3u3Qig==",
"dependencies": {
"string-width": "^5.0.1"
},
@@ -9022,9 +11734,15 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/widest-line/node_modules/emoji-regex": {
+ "version": "9.2.2",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz",
+ "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg=="
+ },
"node_modules/widest-line/node_modules/string-width": {
"version": "5.1.2",
- "license": "MIT",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz",
+ "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==",
"dependencies": {
"eastasianwidth": "^0.2.0",
"emoji-regex": "^9.2.2",
@@ -9037,13 +11755,10 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/widest-line/node_modules/string-width/node_modules/emoji-regex": {
- "version": "9.2.2",
- "license": "MIT"
- },
"node_modules/wrap-ansi": {
"version": "8.1.0",
- "license": "MIT",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz",
+ "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==",
"dependencies": {
"ansi-styles": "^6.1.0",
"string-width": "^5.0.1",
@@ -9056,9 +11771,110 @@
"url": "https://github.com/chalk/wrap-ansi?sponsor=1"
}
},
+ "node_modules/wrap-ansi-cjs": {
+ "name": "wrap-ansi",
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
+ "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
+ "dependencies": {
+ "ansi-styles": "^4.0.0",
+ "string-width": "^4.1.0",
+ "strip-ansi": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
+ }
+ },
+ "node_modules/wrap-ansi-cjs/node_modules/ansi-regex": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/wrap-ansi-cjs/node_modules/color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dependencies": {
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
+ },
+ "node_modules/wrap-ansi-cjs/node_modules/color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
+ },
+ "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="
+ },
+ "node_modules/wrap-ansi-cjs/node_modules/string-width": {
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+ "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+ "dependencies": {
+ "emoji-regex": "^8.0.0",
+ "is-fullwidth-code-point": "^3.0.0",
+ "strip-ansi": "^6.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/wrap-ansi-cjs/node_modules/strip-ansi": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "dependencies": {
+ "ansi-regex": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/wrap-ansi/node_modules/ansi-styles": {
+ "version": "6.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz",
+ "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/wrap-ansi/node_modules/emoji-regex": {
+ "version": "9.2.2",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz",
+ "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg=="
+ },
"node_modules/wrap-ansi/node_modules/string-width": {
"version": "5.1.2",
- "license": "MIT",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz",
+ "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==",
"dependencies": {
"eastasianwidth": "^0.2.0",
"emoji-regex": "^9.2.2",
@@ -9071,21 +11887,15 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/wrap-ansi/node_modules/string-width/node_modules/emoji-regex": {
- "version": "9.2.2",
- "license": "MIT"
- },
"node_modules/wrappy": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
- "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==",
- "license": "ISC"
+ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="
},
"node_modules/ws": {
- "version": "8.17.1",
- "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz",
- "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==",
- "license": "MIT",
+ "version": "8.18.0",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz",
+ "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==",
"engines": {
"node": ">=10.0.0"
},
@@ -9106,7 +11916,6 @@
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-5.0.0.tgz",
"integrity": "sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==",
- "license": "Apache-2.0",
"engines": {
"node": ">=18"
}
@@ -9114,25 +11923,133 @@
"node_modules/xmlchars": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz",
- "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==",
- "license": "MIT"
+ "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw=="
+ },
+ "node_modules/xtend": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
+ "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==",
+ "engines": {
+ "node": ">=0.4"
+ }
+ },
+ "node_modules/xxhash-wasm": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/xxhash-wasm/-/xxhash-wasm-1.0.2.tgz",
+ "integrity": "sha512-ibF0Or+FivM9lNrg+HGJfVX8WJqgo+kCLDc4vx6xMeTce7Aj+DLttKbxxRR/gNLSAelRc1omAPlJ77N/Jem07A=="
},
"node_modules/y18n": {
"version": "5.0.8",
- "license": "ISC",
+ "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
+ "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==",
"engines": {
"node": ">=10"
}
},
"node_modules/yallist": {
"version": "3.1.1",
- "license": "ISC"
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
+ "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g=="
+ },
+ "node_modules/yaml": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.5.0.tgz",
+ "integrity": "sha512-2wWLbGbYDiSqqIKoPjar3MPgB94ErzCtrNE1FdqGuaO0pi2JGjmE8aW8TDZwzU7vuxcGRdL/4gPQwQ7hD5AMSw==",
+ "bin": {
+ "yaml": "bin.mjs"
+ },
+ "engines": {
+ "node": ">= 14"
+ }
+ },
+ "node_modules/yaml-language-server": {
+ "version": "1.15.0",
+ "resolved": "https://registry.npmjs.org/yaml-language-server/-/yaml-language-server-1.15.0.tgz",
+ "integrity": "sha512-N47AqBDCMQmh6mBLmI6oqxryHRzi33aPFPsJhYy3VTUGCdLHYjGh4FZzpUjRlphaADBBkDmnkM/++KNIOHi5Rw==",
+ "dependencies": {
+ "ajv": "^8.11.0",
+ "lodash": "4.17.21",
+ "request-light": "^0.5.7",
+ "vscode-json-languageservice": "4.1.8",
+ "vscode-languageserver": "^7.0.0",
+ "vscode-languageserver-textdocument": "^1.0.1",
+ "vscode-languageserver-types": "^3.16.0",
+ "vscode-nls": "^5.0.0",
+ "vscode-uri": "^3.0.2",
+ "yaml": "2.2.2"
+ },
+ "bin": {
+ "yaml-language-server": "bin/yaml-language-server"
+ },
+ "optionalDependencies": {
+ "prettier": "2.8.7"
+ }
+ },
+ "node_modules/yaml-language-server/node_modules/prettier": {
+ "version": "2.8.7",
+ "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.7.tgz",
+ "integrity": "sha512-yPngTo3aXUUmyuTjeTUT75txrf+aMh9FiD7q9ZE/i6r0bPb22g4FsE6Y338PQX1bmfy08i9QQCB7/rcUAVntfw==",
+ "optional": true,
+ "bin": {
+ "prettier": "bin-prettier.js"
+ },
+ "engines": {
+ "node": ">=10.13.0"
+ },
+ "funding": {
+ "url": "https://github.com/prettier/prettier?sponsor=1"
+ }
+ },
+ "node_modules/yaml-language-server/node_modules/request-light": {
+ "version": "0.5.8",
+ "resolved": "https://registry.npmjs.org/request-light/-/request-light-0.5.8.tgz",
+ "integrity": "sha512-3Zjgh+8b5fhRJBQZoy+zbVKpAQGLyka0MPgW3zruTF4dFFJ8Fqcfu9YsAvi/rvdcaTeWG3MkbZv4WKxAn/84Lg=="
+ },
+ "node_modules/yaml-language-server/node_modules/vscode-jsonrpc": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-6.0.0.tgz",
+ "integrity": "sha512-wnJA4BnEjOSyFMvjZdpiOwhSq9uDoK8e/kpRJDTaMYzwlkrhG1fwDIZI94CLsLzlCK5cIbMMtFlJlfR57Lavmg==",
+ "engines": {
+ "node": ">=8.0.0 || >=10.0.0"
+ }
+ },
+ "node_modules/yaml-language-server/node_modules/vscode-languageserver": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/vscode-languageserver/-/vscode-languageserver-7.0.0.tgz",
+ "integrity": "sha512-60HTx5ID+fLRcgdHfmz0LDZAXYEV68fzwG0JWwEPBode9NuMYTIxuYXPg4ngO8i8+Ou0lM7y6GzaYWbiDL0drw==",
+ "dependencies": {
+ "vscode-languageserver-protocol": "3.16.0"
+ },
+ "bin": {
+ "installServerIntoExtension": "bin/installServerIntoExtension"
+ }
+ },
+ "node_modules/yaml-language-server/node_modules/vscode-languageserver-protocol": {
+ "version": "3.16.0",
+ "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.16.0.tgz",
+ "integrity": "sha512-sdeUoAawceQdgIfTI+sdcwkiK2KU+2cbEYA0agzM2uqaUy2UpnnGHtWTHVEtS0ES4zHU0eMFRGN+oQgDxlD66A==",
+ "dependencies": {
+ "vscode-jsonrpc": "6.0.0",
+ "vscode-languageserver-types": "3.16.0"
+ }
+ },
+ "node_modules/yaml-language-server/node_modules/vscode-languageserver-types": {
+ "version": "3.16.0",
+ "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.16.0.tgz",
+ "integrity": "sha512-k8luDIWJWyenLc5ToFQQMaSrqCHiLwyKPHKPQZ5zz21vM+vIVUSvsRpcbiECH4WR88K2XZqc4ScRcZ7nk/jbeA=="
+ },
+ "node_modules/yaml-language-server/node_modules/yaml": {
+ "version": "2.2.2",
+ "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.2.2.tgz",
+ "integrity": "sha512-CBKFWExMn46Foo4cldiChEzn7S7SRV+wqiluAb6xmueD/fGyRHIhX8m14vVGgeFWjN540nKCNVj6P21eQjgTuA==",
+ "engines": {
+ "node": ">= 14"
+ }
},
"node_modules/yargonaut": {
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/yargonaut/-/yargonaut-1.1.4.tgz",
"integrity": "sha512-rHgFmbgXAAzl+1nngqOcwEljqHGG9uUZoPjsdZEs1w5JW9RXYzrSvH/u70C1JE5qFi0qjsdhnUX/dJRpWqitSA==",
- "license": "Apache-2.0",
"dependencies": {
"chalk": "^1.1.1",
"figlet": "^1.1.1",
@@ -9143,7 +12060,6 @@
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
"integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==",
- "license": "MIT",
"engines": {
"node": ">=0.10.0"
}
@@ -9152,7 +12068,6 @@
"version": "2.2.1",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
"integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==",
- "license": "MIT",
"engines": {
"node": ">=0.10.0"
}
@@ -9161,7 +12076,6 @@
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
"integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==",
- "license": "MIT",
"dependencies": {
"ansi-styles": "^2.2.1",
"escape-string-regexp": "^1.0.2",
@@ -9177,7 +12091,6 @@
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
"integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==",
- "license": "MIT",
"dependencies": {
"ansi-regex": "^2.0.0"
},
@@ -9189,14 +12102,14 @@
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
"integrity": "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==",
- "license": "MIT",
"engines": {
"node": ">=0.8.0"
}
},
"node_modules/yargs": {
"version": "17.7.2",
- "license": "MIT",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz",
+ "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==",
"dependencies": {
"cliui": "^8.0.1",
"escalade": "^3.1.1",
@@ -9212,14 +12125,29 @@
},
"node_modules/yargs-parser": {
"version": "21.1.1",
- "license": "ISC",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz",
+ "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==",
"engines": {
"node": ">=12"
}
},
+ "node_modules/yargs/node_modules/ansi-regex": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/yargs/node_modules/emoji-regex": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="
+ },
"node_modules/yargs/node_modules/string-width": {
"version": "4.2.3",
- "license": "MIT",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+ "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
"dependencies": {
"emoji-regex": "^8.0.0",
"is-fullwidth-code-point": "^3.0.0",
@@ -9229,13 +12157,10 @@
"node": ">=8"
}
},
- "node_modules/yargs/node_modules/string-width/node_modules/emoji-regex": {
- "version": "8.0.0",
- "license": "MIT"
- },
- "node_modules/yargs/node_modules/string-width/node_modules/strip-ansi": {
+ "node_modules/yargs/node_modules/strip-ansi": {
"version": "6.0.1",
- "license": "MIT",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
"dependencies": {
"ansi-regex": "^5.0.1"
},
@@ -9243,16 +12168,19 @@
"node": ">=8"
}
},
- "node_modules/yargs/node_modules/string-width/node_modules/strip-ansi/node_modules/ansi-regex": {
- "version": "5.0.1",
- "license": "MIT",
+ "node_modules/yn": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz",
+ "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==",
+ "dev": true,
"engines": {
- "node": ">=8"
+ "node": ">=6"
}
},
"node_modules/yocto-queue": {
- "version": "1.0.0",
- "license": "MIT",
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.1.1.tgz",
+ "integrity": "sha512-b4JR1PFR10y1mKjhHY9LaGo6tmrgjit7hxVIeAmyMw3jegXR4dhYqLaQF5zMXZxY7tLpMyJeLjr1C4rLmkVe8g==",
"engines": {
"node": ">=12.20"
},
@@ -9260,23 +12188,46 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/yoctocolors-cjs": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/yoctocolors-cjs/-/yoctocolors-cjs-2.1.2.tgz",
+ "integrity": "sha512-cYVsTjKl8b+FrnidjibDWskAv7UKOfcwaVZdp/it9n1s9fU3IkgDbhdIRKCW4JDsAlECJY0ytoVPT3sK6kideA==",
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
"node_modules/zod": {
"version": "3.23.8",
- "license": "MIT",
+ "resolved": "https://registry.npmjs.org/zod/-/zod-3.23.8.tgz",
+ "integrity": "sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==",
"funding": {
"url": "https://github.com/sponsors/colinhacks"
}
},
"node_modules/zod-to-json-schema": {
- "version": "3.23.1",
- "license": "ISC",
+ "version": "3.23.2",
+ "resolved": "https://registry.npmjs.org/zod-to-json-schema/-/zod-to-json-schema-3.23.2.tgz",
+ "integrity": "sha512-uSt90Gzc/tUfyNqxnjlfBs8W6WSGpNBv0rVsNxP/BVSMHMKGdthPYff4xtCHYloJGM0CFxFsb3NbC0eqPhfImw==",
"peerDependencies": {
"zod": "^3.23.3"
}
},
+ "node_modules/zod-to-ts": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/zod-to-ts/-/zod-to-ts-1.2.0.tgz",
+ "integrity": "sha512-x30XE43V+InwGpvTySRNz9kB7qFU8DlyEy7BsSTCHPH1R0QasMmHWZDCzYm6bVXtj/9NNJAZF3jW8rzFvH5OFA==",
+ "peerDependencies": {
+ "typescript": "^4.9.4 || ^5.0.2",
+ "zod": "^3"
+ }
+ },
"node_modules/zwitch": {
"version": "2.0.4",
- "license": "MIT",
+ "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz",
+ "integrity": "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/wooorm"
diff --git a/package.json b/package.json
index 37f595f..0dca0d7 100644
--- a/package.json
+++ b/package.json
@@ -1,42 +1,63 @@
{
"name": "dashersupply",
"type": "module",
- "version": "0.0.1",
+ "version": "0.2.1",
"scripts": {
"dev": "astro dev",
"start": "astro dev",
"build": "astro check && astro build",
"preview": "astro preview",
"astro": "astro",
- "test": "vitest"
+ "test": "vitest",
+ "ts-node": "node --loader ts-node",
+ "server": "node --loader ts-node/esm run-server.mts",
+ "webhooks": "bun run src/apps/squidex-webhooks.ts"
},
"dependencies": {
- "@astrojs/check": "^0.8.1",
- "@astrojs/react": "^3.6.0",
+ "@astrojs/check": "^0.9.3",
+ "@astrojs/node": "^8.3.3",
+ "@astrojs/react": "^3.6.2",
"@astrojs/sitemap": "^3.1.6",
+ "@fastify/middie": "^8.3.1",
+ "@fastify/static": "^7.0.4",
+ "@squidex/squidex": "^1.2.1",
+ "@strapi/blocks-react-renderer": "^1.0.1",
"@types/react": "^18.3.3",
"@types/react-dom": "^18.3.0",
- "amazon-pa-api5-node-ts": "^2.1.4",
- "astro": "^4.11.5",
+ "amazon-pa-api5-node-ts": "^2.3.0",
+ "astro": "^4.14.2",
+ "axios": "^1.7.4",
"bootstrap": "^5.3.3",
"cheerio": "*",
+ "commander": "^12.1.0",
"crawlee": "^3.0.0",
"dotenv": "^16.4.5",
"dotenv-expand": "^11.0.6",
+ "fastify": "^4.28.1",
+ "luxon": "^3.5.0",
"markdown-it": "^14.0.0",
"markdown-it-attrs": "^4.1.6",
+ "memfs": "^4.11.1",
+ "multer": "^1.4.5-lts.1",
+ "ollama": "^0.5.8",
"playwright": "*",
"react": "^18.3.1",
"react-dom": "^18.3.1",
+ "slugify": "^1.6.6",
"swiper": "^11.1.4",
+ "vite": "^5.3.5",
+ "vite-plugin-commonjs": "^0.10.1",
"vitest": "^2.0.3"
},
"devDependencies": {
"@apify/tsconfig": "^0.1.0",
"@types/jquery": "^3.5.30",
+ "@types/luxon": "^3.4.2",
"@types/markdown-it": "^14.1.1",
"@types/markdown-it-attrs": "^4.1.3",
+ "@types/multer": "^1.4.11",
"@types/node": "^20.0.0",
+ "ts-node": "^10.9.2",
"tsx": "^4.4.0",
"typescript": "^5.5.3"
}
diff --git a/public/assets/brands/vortex-optics.svg b/public/assets/brands/vortex-optics.svg
index e700f74..0984b01 100644
--- a/public/assets/brands/vortex-optics.svg
+++ b/public/assets/brands/vortex-optics.svg
@@ -1,9 +1,9 @@
-
-
+
+
-
+
diff --git a/run-server.mts b/run-server.mts
new file mode 100644
index 0000000..d25bab4
--- /dev/null
+++ b/run-server.mts
@@ -0,0 +1,21 @@
+import Fastify from 'fastify';
+import fastifyMiddie from '@fastify/middie';
+import fastifyStatic from '@fastify/static';
+import { fileURLToPath } from 'node:url';
+import { handler as ssrHandler } from './dist/server/entry.mjs';
+import { config } from './src/config.ts';
+
+const app = Fastify({ logger: true });
+await app
+ .register(fastifyStatic, {
+ root: fileURLToPath(new URL('./dist/client', import.meta.url)),
+ })
+ .register(fastifyMiddie);
+app.use(ssrHandler);
+app.listen({ host: '0.0.0.0', port: config.port }, (err, address) => {
+ if (err) {
+ app.log.error(err);
+ process.exit(1);
+ }
+ app.log.info(`Fastify web server with Astro middleware listening at ${address}.`)
+});
diff --git a/src/apiclient/amazon.ts b/src/apiclient/amazon.ts
new file mode 100644
index 0000000..9d1da28
--- /dev/null
+++ b/src/apiclient/amazon.ts
@@ -0,0 +1,86 @@
+import { GetItemsResourceValues } from 'amazon-pa-api5-node-ts/src/model/GetItemsResource.mts';
+// import { amazonPAAPIConfig } from '../data/fetch-site';
+// import { config } from '../config';
+import { getSiteConfig } from '../data/api-client';
+import { client } from '../data/core/client';
+import * as ProductAdvertisingAPIv1 from 'amazon-pa-api5-node-ts';
+// import type { AmazonProductDetails } from '../data/products/amazon-product-details';
+import { title } from 'process';
+
+const siteConfig = await getSiteConfig();
+
+const defaultClient = ProductAdvertisingAPIv1.ApiClient.instance;
+
+defaultClient.accessKey = siteConfig.items[0].data?.amazonPAAPIConfig.iv.accessKey!;
+defaultClient.secretKey = siteConfig.items[0].data?.amazonPAAPIConfig.iv.secretKey!;
+defaultClient.host = siteConfig.items[0].data?.amazonPAAPIConfig.iv.host!;
+defaultClient.region = siteConfig.items[0].data?.amazonPAAPIConfig.iv.region!;
+
+const api = new ProductAdvertisingAPIv1.DefaultApi();
+
+export const getItems = (itemIds: string[]): Promise => {
+ if (itemIds.length < 1 || itemIds.length > 10) {
+ throw new Error("itemIds must be between 1 and 10.");
+ }
+ const getItemsRequest = new ProductAdvertisingAPIv1.GetItemsRequest();
+ getItemsRequest['PartnerTag'] = siteConfig.items[0].data?.amazonPAAPIConfig.iv.partnerTag;
+ getItemsRequest['PartnerType'] = siteConfig.items[0].data?.amazonPAAPIConfig.iv.partnerType;
+ getItemsRequest['ItemIds'] = itemIds;
+ getItemsRequest['Condition'] = 'New';
+ getItemsRequest['Resources'] = [
+ GetItemsResourceValues['Images.Primary.Large'],
+ GetItemsResourceValues['Images.Variants.Large'],
+ GetItemsResourceValues['Offers.Listings.Price'],
+ GetItemsResourceValues['ItemInfo.Title'],
+ GetItemsResourceValues['ItemInfo.Features'],
+ GetItemsResourceValues['CustomerReviews.Count'],
+ GetItemsResourceValues['CustomerReviews.StarRating'],
+ GetItemsResourceValues['ItemInfo.ProductInfo']
+ ];
+
+ return new Promise((resolve, reject) => {
+ return api.getItems(getItemsRequest).then(
+ function(data) {
+ console.log('API called successfully.');
+ const getItemsResponse = ProductAdvertisingAPIv1.GetItemsResponse.constructFromObject(data)!;
+ console.log('Complete Response: \n' + JSON.stringify(getItemsResponse, null, 1));
+
+ if (getItemsResponse['Errors'] !== undefined) {
+ //TODO: Write failure story to Squidex about Amazon PA API call (attach JSON).
+
+ console.error('\nErrors:');
+ console.error('Complete Error Response: ' + JSON.stringify(getItemsResponse['Errors'], null, 1));
+ console.error('Printing 1st Error:');
+ var error_0 = getItemsResponse['Errors'][0];
+ console.error('Error Code: ' + error_0['Code']);
+ console.error('Error Message: ' + error_0['Message']);
+ reject(`Error ${error_0['Code']}: ${error_0['Message']}`);
+ }
+ else {
+ //TODO: Write success story to Squidex about Amazon PA API call (attach JSON).
+
+ // let parsedItems: ProductAdvertisingAPIv1.GetItemsResponse[] = [];
+ // for (let item of getItemsResponse.ItemsResult?.Items!) {
+ // parsedItems.push({
+ // ASIN: item.ASIN!,
+ // amazonLink: item.DetailPageURL!,
+ // featureBullets: item.ItemInfo?.Features?.DisplayValues!,
+ // // description: ,
+ // title: item.ItemInfo?.Title?.DisplayValue!,
+ // })
+ // }
+ // resolve(parsedItems);
+ resolve(data);
+ }
+ },
+ function(error) {
+ console.log('Error calling PA-API 5.0!');
+ console.log('Printing Full Error Object:\n' + JSON.stringify(error, null, 1));
+ console.log('Status Code: ' + error['status']);
+ if (error['response'] !== undefined && error['response']['text'] !== undefined) {
+ console.log('Error Object: ' + JSON.stringify(error['response']['text'], null, 1));
+ }
+ }
+ );
+ });
+}
diff --git a/src/apiclient/override-squidex-sdk.ts b/src/apiclient/override-squidex-sdk.ts
new file mode 100644
index 0000000..1871946
--- /dev/null
+++ b/src/apiclient/override-squidex-sdk.ts
@@ -0,0 +1,104 @@
+import { Assets } from "@squidex/squidex/api/resources/assets/client/Client.js"
+import { SquidexClient } from "@squidex/squidex"
+import * as environments from "@squidex/squidex/environments.js";
+import * as core from "@squidex/squidex/core/index.js";
+import { Squidex } from "@squidex/squidex";
+import urlJoin from "url-join";
+import * as errors from "@squidex/squidex/errors/index.js";
+import * as serializers from "@squidex/squidex/serialization/index.js";
+import * as fs from "fs";
+import { default as FormData } from "form-data";
+
+
+/**
+ * You can only upload one file at a time. The mime type of the file is not calculated by Squidex and is required correctly.
+ * @throws {@link Squidex.BadRequestError}
+ * @throws {@link Squidex.NotFoundError}
+ * @throws {@link Squidex.ContentTooLargeError}
+ * @throws {@link Squidex.InternalServerError}
+ */
+export function async customPostAsset(
+ file: File | fs.ReadStream,
+ requestOptions?: Assets.RequestOptions
+): Promise {
+ const _request = new FormData();
+ _request.append("file", file);
+ const _response = await (this._options.fetcher ?? core.fetcher)({
+ url: urlJoin(
+ (await core.Supplier.get(this._options.environment)) ?? environments.SquidexEnvironment.Default,
+ `api/apps/${this._options.appName}/assets`
+ ),
+ method: "POST",
+ headers: {
+ Authorization: await this._getAuthorizationHeader(),
+ "X-Fern-Language": "JavaScript",
+ "X-Fern-SDK-Name": "@squidex/squidex",
+ "X-Fern-SDK-Version": "1.2.1",
+ "Content-Length": (await core.getFormDataContentLength(_request)).toString(),
+ },
+ contentType: "multipart/form-data; boundary=" + _request.getBoundary(),
+ body: _request,
+ timeoutMs: requestOptions?.timeoutInSeconds != null ? requestOptions.timeoutInSeconds * 1000 : 60000,
+ });
+ if (_response.ok) {
+ return await serializers.AssetDto.parseOrThrow(_response.body, {
+ unrecognizedObjectKeys: "passthrough",
+ allowUnrecognizedUnionMembers: true,
+ allowUnrecognizedEnumValues: true,
+ breadcrumbsPrefix: ["response"],
+ });
+ }
+
+ if (_response.error.reason === "status-code") {
+ switch (_response.error.statusCode) {
+ case 400:
+ throw new Squidex.BadRequestError(
+ await serializers.ErrorDto.parseOrThrow(_response.error.body, {
+ unrecognizedObjectKeys: "passthrough",
+ allowUnrecognizedUnionMembers: true,
+ allowUnrecognizedEnumValues: true,
+ breadcrumbsPrefix: ["response"],
+ })
+ );
+ case 404:
+ throw new Squidex.NotFoundError(_response.error.body);
+ case 413:
+ throw new Squidex.ContentTooLargeError(
+ await serializers.ErrorDto.parseOrThrow(_response.error.body, {
+ unrecognizedObjectKeys: "passthrough",
+ allowUnrecognizedUnionMembers: true,
+ allowUnrecognizedEnumValues: true,
+ breadcrumbsPrefix: ["response"],
+ })
+ );
+ case 500:
+ throw new Squidex.InternalServerError(
+ await serializers.ErrorDto.parseOrThrow(_response.error.body, {
+ unrecognizedObjectKeys: "passthrough",
+ allowUnrecognizedUnionMembers: true,
+ allowUnrecognizedEnumValues: true,
+ breadcrumbsPrefix: ["response"],
+ })
+ );
+ default:
+ throw new errors.SquidexError({
+ statusCode: _response.error.statusCode,
+ body: _response.error.body,
+ });
+ }
+ }
+
+ switch (_response.error.reason) {
+ case "non-json":
+ throw new errors.SquidexError({
+ statusCode: _response.error.statusCode,
+ body: _response.error.rawBody,
+ });
+ case "timeout":
+ throw new errors.SquidexTimeoutError();
+ case "unknown":
+ throw new errors.SquidexError({
+ message: _response.error.errorMessage,
+ });
+ }
+};
\ No newline at end of file
diff --git a/src/apps/amazon-catalog.ts b/src/apps/amazon-catalog.ts
new file mode 100644
index 0000000..97d259b
--- /dev/null
+++ b/src/apps/amazon-catalog.ts
@@ -0,0 +1,403 @@
+import { getBrandsByLangSlug, getBrandsUsingJsonQuery, getMarketplacesUsingJsonQuery, getProductCategoriesByIds, getProductCategoriesUsingJsonQuery, getProductListingsUsingJsonQuery, getProductsByIds, getProductsUsingJsonQuery, getSellersUsingJsonQuery, performSyncLocalizedSlugs } from '../data/api-client.ts';
+import { program } from 'commander';
+import * as core from '../data/core/client.js'
+import type { AmazonMarketplaceConnection } from '../data/models/components/AmazonMarketplaceConnection.js';
+import type { Product } from '../data/models/multis/Product.js';
+import type { Listing } from '../data/models/multis/Listing.js';
+import type { Brand } from '../data/models/multis/Brand.js';
+import { askAiProductSubCategoryEvalQuestionsSet1, askAiProductSubCategoryEvalQuestionsSet2, askAiTopLevelProductCategoryEvalQuestions, designAiTopLevelProductCategoryEvalQuestions, doesProductAlreadyExist, generateAIProductDescription, generateAITagsForProduct, getAddNewBrandDtoByName, getAddNewProductDtoByProduct, getAddNewProductListingDtoByProduct, getAddNewProductSubCategoryDto, getAddNewSellerDtoByName, getAllTopLevelProductCategories, getAmazonMarketplaceConnectionSchemaDto, getAmazonMarketplaceDto, getBrandDtoByName, getMarketplaceConnectionSchemaDto, getSellerDtoByName, isValidASIN, removeQuotes, uploadDownloadedImageToSquidexAsAsset, translateAmazonDescription_from_en_US_to_es_US, translateAmazonDescription_from_en_US_to_fr_CA, translateProductDescription_from_en_US_to_es_US, translateProductName_from_en_US_to_es_US, translateProductName_from_en_US_to_fr_CA, translateTags_from_en_US_to_es_US, translateTags_from_en_US_to_fr_CA, trimPeriods, upsertAssetFolder, getAllAssetsInFolder, getAddNewOfferDto, lookupAmazonASINs, translateProductDescription_from_en_US_to_fr_CA } from './modules/amazon-catalog-helpers.js';
+import slugify from 'slugify';
+import type { Multilingual } from '../data/internals/MultilingualT.js';
+import type { NonMultilingual } from '../data/internals/NonMultilingualT.js';
+import type { MarketplaceConnection } from '../data/models/components/MarketplaceConnection.js';
+import type { Offer } from '../data/models/multis/Offer.js';
+import { SCHEMAS } from '../data/models/schemas.js';
+import { CheerioCrawler, type CheerioCrawlingContext, log } from 'crawlee';
+import { extractProductDetails } from '../scraper/amazon.js';
+
+program.command('ls')
+ .description('List all the products')
+ .action(async (args: string[]) => {
+ let productsDto = await getProductsUsingJsonQuery();
+ productsDto.items.forEach((productDto, index) => {
+ console.log(`[ls:${index+1}] ID: ${productDto.id}`)
+ console.log(`[ls:${index+1}] Product (en-US): ${productDto.data?.productName['en-US']}`);
+ console.log(`[ls:${index+1}] Product (es-US): ${productDto.data?.productName['es-US']}`);
+ console.log(`[ls:${index+1}] Product (fr-CA): ${productDto.data?.productName['fr-CA']}`);
+ let asin = productDto.data?.marketplaceConnections.iv.map((connection) => (connection.connection as AmazonMarketplaceConnection).asin).join('');
+ let siteStripUrl = productDto.data?.marketplaceConnections.iv.map((connection) => (connection.connection as AmazonMarketplaceConnection).siteStripeUrl).join('');
+ console.log(`[ls:${index+1}] ASIN: ${asin} ${!!(asin||'').match(/[A-Z0-9]{10}/g) ? 'Is a valid ASIN.' : 'Is not a valid ASIN.'}`)
+ console.log(`[ls:${index+1}] Amazon SiteStripe URL: ${siteStripUrl}`)
+ console.log();
+ });
+ console.log(`[ls] Returned ${productsDto.items.length} products.`)
+ })
+ .configureHelp();
+
+program.command('crawlee-products')
+ .alias('crawlee-product')
+ .argument('')
+ .description('Attempts to crawl Amazon product data using crawlee')
+ .action(async (urls: string[]) => {
+ /**
+ * Performs the logic of the crawler. It is called for each URL to crawl.
+ * - Passed to the crawler using the `requestHandler` option.
+ */
+ const requestHandler = async (context: CheerioCrawlingContext) => {
+ const { $, request } = context;
+ const { url } = request;
+ log.info(`Scraping product page`, { url });
+ const extractedProduct = extractProductDetails($);
+ log.info(`Scraped product details for "${extractedProduct.title}", saving...`, { url });
+ crawler.pushData(extractedProduct);
+ };
+ /**
+ * The crawler instance. Crawlee provides a few different crawlers, but we'll use CheerioCrawler, as it's very fast and simple to use.
+ * - Alternatively, we could use a full browser crawler like `PlaywrightCrawler` to imitate a real browser.
+ */
+ const crawler = new CheerioCrawler({ requestHandler });
+ await crawler.run(urls);
+ })
+ .configureHelp();
+
+program.command('sync-slugs')
+ .description('Sync URL slugs for each frontend endpoint.')
+ .action(async (asin: string, args: string[]) => {
+ await performSyncLocalizedSlugs(console.log);
+ })
+ .configureHelp();
+
+program.command('append-images')
+ .alias('append-image')
+ .argument('', 'Amazon Standard Identification Numbers')
+ .argument('', 'Image URLs to transmit to the database.')
+ .description('Download images from URL .')
+ .action(async (asin: string, urls: string[]) => {
+ if (!isValidASIN(asin)) {
+ console.error(`[append-images] error: ${asin} is not a valid ASIN. Amazon Standard Identification Numbers are 10-digits long with letters A-Z and numbers 0-9.`);
+ return;
+ }
+ let productsDto = await getProductsUsingJsonQuery(JSON.stringify({ filter: {
+ op: 'eq',
+ path: 'data.marketplaceConnections.iv.connection.asin',
+ value: asin,
+ }}));
+ if (productsDto.items.length === 0) {
+ console.error(`[append-images] error: ${asin} was not found in the database. Please procure or enter the product first.`);
+ return;
+ }
+ let marketplacesDto = await getMarketplacesUsingJsonQuery(JSON.stringify({ filter: {
+ op: 'eq',
+ path: 'data.marketplaceName.en-US',
+ value: 'Amazon',
+ }}));
+ if (marketplacesDto.items.length === 0) {
+ console.error(`[append-images] error: Amazon marketplace not found in database. Please set up Amazon marketplace in database.`);
+ return;
+ }
+ console.log(`[append-images] Upserting Asset Folder products`);
+ let productsAssetFolder = await upsertAssetFolder('products');
+ console.log(`[append-images] Matching Asset Folder: ${productsAssetFolder.folderName} with Asset Folder ID: ${productsAssetFolder.id}`);
+
+ console.log(`[append-images] Upserting Asset Folder ${productsAssetFolder.folderName}/amazon`);
+ let productsAmazonAssetFolder = await upsertAssetFolder('amazon', productsAssetFolder.id);
+ console.log(`[append-images] Matching Asset Folder ${productsAssetFolder.folderName}/${productsAmazonAssetFolder.folderName} with Asset Folder ID: ${productsAmazonAssetFolder.id}`);
+
+ console.log(`[append-images] Upserting Asset Folder ${productsAssetFolder.folderName}/${productsAmazonAssetFolder.folderName}/${asin}`);
+ let productsASINFolder = await upsertAssetFolder(asin, productsAmazonAssetFolder.id);
+ console.log(`[append-images] Matching Asset Folder ${productsAssetFolder.folderName}/${productsAmazonAssetFolder.folderName}/${productsASINFolder.folderName} with Asset Folder ID: ${productsASINFolder.id}`);
+ let amazonMarketplaceDto = marketplacesDto.items[0];
+ for (let productDto of productsDto.items) {
+ let listingsDto = await getProductListingsUsingJsonQuery(JSON.stringify({ filter: {
+ 'and': [
+ {
+ op: 'eq',
+ path: 'data.product.iv',
+ value: productDto.id,
+ },
+ {
+ op: 'eq',
+ path: 'data.marketplace.iv',
+ value: amazonMarketplaceDto.id,
+ }
+ ]
+ }}));
+ if (listingsDto.items.length === 0) {
+ console.error(`[append-images] error: Product listing for ${asin} on Amazon marketplace was not found in the database. Please procure or enter the product listing first.`);
+ return;
+ }
+ for (let listingDto of listingsDto.items) {
+ let listing = listingDto.data!;
+ let didUpdate = false;
+
+ let amazonAssetsDto = await getAllAssetsInFolder(productsASINFolder.id);
+
+ for (let i = 0; i < urls.length; i++) {
+ console.log(urls[i]);
+ let foundUploaded = amazonAssetsDto.filter((asset) => (asset.metadata['amazon-url'] as string||'') === urls[i]);
+ if (!foundUploaded.length) { // is not found
+ console.log(`[append-images] Transmitting Product Image ${urls[i]} to Squidex Assets`);
+ let assetDto = await uploadDownloadedImageToSquidexAsAsset(urls[i]!, productsASINFolder.id);
+ console.log(`[append-images] Saved Asset Id: ${assetDto.id} to Asset Folder Id: ${assetDto.parentId}`);
+ if (!listing.marketplaceImages) {
+ listing.marketplaceImages = { iv: [] };
+ }
+ if (!listing.marketplaceImages.iv) {
+ listing.marketplaceImages.iv = [];
+ }
+ listing.marketplaceImages.iv.push(assetDto.id);
+ didUpdate = true;
+ }
+ else { // is found
+ console.log(`[append-images] Matched Asset Id: ${foundUploaded[0].id}, Amazon Product Image: ${foundUploaded[0].metadata['amazon-url'] as string||''}.`);
+ }
+ }
+ if (didUpdate) {
+ console.log(`[append-images] Listing did update, updating product listing with appended images.`);
+ let updatedDto = await core.client.contents.putContent(SCHEMAS.LISTINGS, listingDto.id, {
+ unpublished: false,
+ body: listing as any,
+ }, {
+ timeoutInSeconds: core.TIMEOUT_IN_SECONDS
+ });
+ console.log(`[append-images] Listing version ${updatedDto.version} stored.`);
+ }
+ }
+ }
+ })
+ .configureHelp();
+
+
+program.command('procure-asins')
+ .alias('procure-asin')
+ .argument('', 'Amazon Standard Identification Numbers')
+ .description('Begin automated product procurement from Amazon by inputting one or more ASINs separated by spaces.')
+ .action(async (asins: string[]) => {
+ if (!asins.length) {
+ console.error(`[procure-asin] error: You must specify one or more valid ASINs. Amazon Standard Identification Numbers are 10-digits long with letters A-Z and numbers 0-9.`);
+ return;
+ }
+ for (let a = 0; a < asins.length; a++) {
+ let asin = asins[a].toUpperCase();
+ if (!isValidASIN(asin)) {
+ console.error(`[procure-asin] error: ${asin} is not a valid ASIN. Amazon Standard Identification Numbers are 10-digits long with letters A-Z and numbers 0-9.`);
+ return;
+ }
+ }
+ console.log(`[procure-asin] You started product enrollment for ${asins.length} items.`);
+ if (asins.length > 10) {
+ console.log(`[procure-asin] PA API calls will be broken up into 10 items per Amazon API request.`);
+ }
+ const MAX_ITEMS_PER_API_REQUEST = 10;
+ for (let a = 0; a < asins.length; a += MAX_ITEMS_PER_API_REQUEST) {
+ let asinsToRequest = asins.slice(a, a + MAX_ITEMS_PER_API_REQUEST).map(asin => asin = asin.toLowerCase());
+ console.log(`[procure-asin] Begin product enrollment(s) for ${asins.length} ASINs ${asinsToRequest.join(' ')}.`);
+
+ //get Amazon data ; we will use previously obtained data for the testing phase
+ //TODO:remove these three lines and replace with code that reads the Amazon PA API
+ // console.log(`[procure-asin] NOTICE: For testing purposes, using data from stored previous API response.`);
+ console.log(`[procure-asin] NOTICE: Production Amazon PA API request in progress.`);
+ const responseDto = await lookupAmazonASINs(asinsToRequest);
+ const apiResponse = responseDto.items[0].data?.apiResponse.iv!;
+
+ apiResponse.ItemsResult!.Items!.forEach(async (amazonItem) => {
+ let asin = amazonItem.ASIN!;
+ console.log(`[procure-asin] Mock data override: product enrollment is for ASIN ${asin}.`);
+
+ // enable this if we're saving data:
+ // if (await doesProductAlreadyExist(asin)) {
+ // console.error(`[procure-asin] error: Product with ASIN already exists in the application.`);
+ // return;
+ // }
+
+ console.log(`[procure-asin] Amazon PA API Response contains ASIN: ${asin}.`);
+ const amazonProductName_en_US = amazonItem.ItemInfo?.Title?.DisplayValue!;
+ console.log(`[procure-asin] Amazon PA API Response contains Product Name: ${amazonProductName_en_US}.`);
+ console.log(`[procure-asin] Amazon PA API Response contains Product Features: \n${amazonItem.ItemInfo?.Features?.DisplayValues?.map((item) => `- ${item}`).join('\n')}`);
+
+ const amazonProductImages = [amazonItem.Images?.Primary?.Large?.URL, ...(amazonItem.Images?.Variants?.map(variant => variant.Large?.URL)||[])];
+ console.log(`[procure-asin] Amazon PA API Response contains Product Images: \n${amazonProductImages.map((url, index) => `${index+1}. ${url}`).join('\n')}`);
+
+ console.log(`[procure-asin] Upserting Asset Folder products`);
+ let productsAssetFolder = await upsertAssetFolder('products');
+ console.log(`[procure-asin] Matching Asset Folder: ${productsAssetFolder.folderName} with Asset Folder ID: ${productsAssetFolder.id}`);
+
+ console.log(`[procure-asin] Upserting Asset Folder ${productsAssetFolder.folderName}/amazon`);
+ let productsAmazonAssetFolder = await upsertAssetFolder('amazon', productsAssetFolder.id);
+ console.log(`[procure-asin] Matching Asset Folder ${productsAssetFolder.folderName}/${productsAmazonAssetFolder.folderName} with Asset Folder ID: ${productsAmazonAssetFolder.id}`);
+
+ console.log(`[procure-asin] Upserting Asset Folder ${productsAssetFolder.folderName}/${productsAmazonAssetFolder.folderName}/${asin}`);
+ let productsASINFolder = await upsertAssetFolder(asin, productsAmazonAssetFolder.id);
+ console.log(`[procure-asin] Matching Asset Folder ${productsAssetFolder.folderName}/${productsAmazonAssetFolder.folderName}/${productsASINFolder.folderName} with Asset Folder ID: ${productsASINFolder.id}`);
+
+ let amazonAssetsDto = await getAllAssetsInFolder(productsASINFolder.id);
+ let amazonAssetsIds = amazonAssetsDto.map(asset => asset.id);
+ let amazonAssetsUrls: string[] = amazonAssetsDto.map(asset => asset.metadata['amazon-url'] as string||'').filter(url => url);
+
+ for (let i = 0; i < amazonProductImages.length; i++) {
+ let foundUploaded = amazonAssetsDto.filter((asset) => (asset.metadata['amazon-url'] as string||'') === amazonProductImages[i]);
+ if (!foundUploaded.length) { // is not found
+ console.log(`[procure-asin] Transmitting Amazon Product Image ${amazonProductImages[i]} to Squidex Assets`);
+ let assetDto = await uploadDownloadedImageToSquidexAsAsset(amazonProductImages[i]!, productsASINFolder.id);
+ console.log(`[procure-asin] Saved Asset Id: ${assetDto.id} to Asset Folder Id: ${assetDto.parentId}`);
+ amazonAssetsDto.push(assetDto);
+ amazonAssetsIds.push(assetDto.id);
+ amazonAssetsUrls.push(assetDto.metadata['amazon-url'] as string||'');
+ }
+ else { // is found
+ console.log(`[procure-asin] Matched Asset Id: ${foundUploaded[0].id}, Amazon Product Image: ${foundUploaded[0].metadata['amazon-url'] as string||''}.`);
+ }
+ }
+
+ let schemaProductMarketplaceConnectionDto = await getMarketplaceConnectionSchemaDto();
+ console.log(`[procure-asin] Matching Schema ID: ${schemaProductMarketplaceConnectionDto.id}, Schema Name: ${schemaProductMarketplaceConnectionDto.name}.`);
+
+ let schemaAmazonMarketplaceConnectionDto = await getAmazonMarketplaceConnectionSchemaDto();
+ console.log(`[procure-asin] Matching Schema ID: ${schemaAmazonMarketplaceConnectionDto.id}, Schema Name: ${schemaAmazonMarketplaceConnectionDto.name}.`);
+
+ let amazonMarketplaceDto = await getAmazonMarketplaceDto()
+ console.log(`[procure-asin] Matching Marketplace ID: ${amazonMarketplaceDto.items[0].id}, Marketplace Name: ${amazonMarketplaceDto.items[0].data?.marketplaceName['en-US']}.`);
+
+ let bylineBrand = amazonItem.ItemInfo!.ByLineInfo!.Brand!.DisplayValue!;
+ console.log(`[procure-asin] Amazon PA API Response contains Brand ${bylineBrand}. Checking database for brand...`);
+ let brandsDto = await getBrandDtoByName(bylineBrand);
+ if (!brandsDto.items.length) {
+ console.log(`[procure-asin] Brand not found in database. Product requires creation of brand first.`);
+ brandsDto = await getAddNewBrandDtoByName(bylineBrand);
+ console.log(`[procure-asin] Brand Id: ${brandsDto.items[0].id}, Brand Name: ${brandsDto.items[0].data?.brandName['en-US']} created in database.`);
+ } else {
+ console.log(`[procure-asin] Matching Brand ID: ${brandsDto.items[0].id}, Brand Name: ${brandsDto.items[0].data?.brandName['en-US']}.`);
+ }
+ let brandName = brandsDto.items[0].data?.brandName['en-US']!;
+ let features = amazonItem.ItemInfo?.Features?.DisplayValues!;
+
+ console.log(`[procure-asin] Amazon Product Name (en-US): ${amazonProductName_en_US}`);
+ console.log(`[procure-asin] Requesting llama3.1 LLM to translate product name from en-US to es-US.`);
+ const amazonProductName_es_US = await translateProductName_from_en_US_to_es_US(amazonItem, brandName, amazonProductName_en_US);
+ console.log(`[procure-asin] AI Product Name (es-US): ${amazonProductName_es_US}`);
+ console.log(`[procure-asin] Requesting llama3.1 LLM to translate product name from en-US to fr-CA.`);
+ const amazonProductName_fr_CA = await translateProductName_from_en_US_to_fr_CA(amazonItem, brandName, amazonProductName_en_US);
+ console.log(`[procure-asin] AI Product Name (fr-CA): ${amazonProductName_fr_CA}`);
+ const aiProductDescriptionResponse_en_US = await generateAIProductDescription(amazonProductName_en_US, features);
+ console.log(`[procure-asin] Generated AI Product Description (en-US):\n${aiProductDescriptionResponse_en_US}`);
+ console.log(`[procure-asin] Requesting llama3.1 LLM to translate product description from en-US to es-US.`);
+ const aiProductDescriptionResponse_es_US = await translateProductDescription_from_en_US_to_es_US(brandName, aiProductDescriptionResponse_en_US);
+ console.log(`[procure-asin] Translated AI Product Description (es-US):\n${aiProductDescriptionResponse_es_US}`);
+ console.log(`[procure-asin] Requesting llama3.1 LLM to translate product description from en-US to fr-CA.`);
+ const aiProductDescriptionResponse_fr_CA = await translateProductDescription_from_en_US_to_fr_CA(brandName, aiProductDescriptionResponse_en_US);
+ console.log(`[procure-asin] AI Product Description (fr-CA):\n${aiProductDescriptionResponse_fr_CA}`);
+ const aiTopLevelCategoryChoice = await askAiTopLevelProductCategoryEvalQuestions(brandName, amazonProductName_en_US);
+ console.log('[procure-asin]', `AI chooses to put product within top level Product Category ID: ${aiTopLevelCategoryChoice}, Product Category Name: ${(await getAllTopLevelProductCategories()).filter((category) => category.id === aiTopLevelCategoryChoice)[0].categoryName!['en-US']}`);
+ const aiSubCategoryQuestion1Answer = await askAiProductSubCategoryEvalQuestionsSet1(aiTopLevelCategoryChoice, brandName, amazonProductName_en_US, features);
+ console.log('[procure-asin]', `AI then chooses within the top-level category to ${aiSubCategoryQuestion1Answer?'make a new sub-category':'use an existing sub-category'}.`);
+ const aiSubCategoryQuestion2Answer = await askAiProductSubCategoryEvalQuestionsSet2(apiResponse, aiTopLevelCategoryChoice, brandName, amazonProductName_en_US, features, aiSubCategoryQuestion1Answer);;
+ let aiProductCategoriesDto;
+ if (!aiSubCategoryQuestion1Answer) {
+ let aiSubCategoryQuestion2AnswerStr = aiSubCategoryQuestion2Answer as string;
+ console.log(`[procure-asin] AI suggested existing sub-category ${aiSubCategoryQuestion2Answer}`);
+ aiProductCategoriesDto = await getProductCategoriesByIds(aiSubCategoryQuestion2AnswerStr);
+ }
+ else {
+ let aiSubCategoryQuestion2AnswerObj = aiSubCategoryQuestion2Answer as {
+ categoryName: Multilingual,
+ description: Multilingual,
+ parentCategory: NonMultilingual,
+ };
+ console.log(`[procure-asin] AI suggested new sub-category ${aiSubCategoryQuestion2AnswerObj.categoryName['en-US']}`);
+ aiProductCategoriesDto = await getAddNewProductSubCategoryDto({ iv: [aiTopLevelCategoryChoice] }, aiSubCategoryQuestion2AnswerObj.categoryName, aiSubCategoryQuestion2AnswerObj.description);
+ }
+ let aiProductTags_en_US = await generateAITagsForProduct(amazonProductName_en_US, features);
+ let aiProductTags_es_US = await translateTags_from_en_US_to_es_US(aiProductTags_en_US);
+ let aiProductTags_fr_CA = await translateTags_from_en_US_to_fr_CA(aiProductTags_en_US);
+ let product: Product = {
+ brand: { iv: [brandsDto.items![0].id!] },
+ categories: { iv: aiProductCategoriesDto.items.map(category => category.id) },
+ productName: {
+ "en-US": amazonProductName_en_US,
+ "es-US": amazonProductName_es_US,
+ "fr-CA": amazonProductName_fr_CA,
+ },
+ slug: {
+ "en-US": `${brandsDto.items![0].data?.slug['en-US']}/${slugify(trimPeriods(removeQuotes(amazonProductName_en_US)), { lower: true, trim: true })}`,
+ "es-US": `${brandsDto.items![0].data?.slug['es-US']}/${slugify(trimPeriods(removeQuotes(amazonProductName_es_US)), { lower: true, trim: true })}`,
+ "fr-CA": `${brandsDto.items![0].data?.slug['fr-CA']}/${slugify(trimPeriods(removeQuotes(amazonProductName_fr_CA)), { lower: true, trim: true })}`,
+ },
+ description: {
+ "en-US": aiProductDescriptionResponse_en_US,
+ "es-US": aiProductDescriptionResponse_es_US,
+ "fr-CA": aiProductDescriptionResponse_fr_CA,
+ },
+ tags: {
+ "en-US": aiProductTags_en_US,
+ "es-US": aiProductTags_es_US,
+ "fr-CA": aiProductTags_fr_CA,
+ },
+ marketplaceConnections: {
+ iv: [
+ {
+ schemaId: schemaProductMarketplaceConnectionDto.id,
+ marketplace: [amazonMarketplaceDto.items[0].id],
+ connection: {
+ schemaId: schemaAmazonMarketplaceConnectionDto.id,
+ asin,
+ siteStripeUrl: amazonItem.DetailPageURL,
+ } as AmazonMarketplaceConnection | MarketplaceConnection
+ }
+ ]
+ }
+ };
+ console.log(`[procure-asin] New product to store:`, product);
+ let productsDto = await getAddNewProductDtoByProduct(product);
+ console.log(`[procure-asin] Product Id: ${productsDto.items[0].id}, Product Name: ${productsDto.items[0].data?.productName['en-US']} created in database.`);
+
+ let listing: Listing = {
+ marketplace: { iv: [ amazonMarketplaceDto.items[0].id ] },
+ product: { iv: [ productsDto.items[0].id ]},
+ marketplaceDescription: {
+ "en-US": `${features.map((feature) => `- ${feature}`).join('\n')}\n`,
+ "es-US": await translateAmazonDescription_from_en_US_to_es_US(brandName, features),
+ "fr-CA": await translateAmazonDescription_from_en_US_to_fr_CA(brandName, features),
+ },
+ marketplaceImages: { iv: amazonAssetsIds },
+ };
+ console.log(`[procure-asin] New product listing to store:`, listing);
+ let listingsDto = await getAddNewProductListingDtoByProduct(listing);
+ console.log(`[procure-asin] Product Listing Id: ${listingsDto.items[0].id}, Product Id: ${listingsDto.items[0].data?.product.iv[0]}, Marketplace Id: ${listingsDto.items[0].data?.marketplace.iv[0]} created in database.`);
+
+ amazonItem.Offers?.Listings?.forEach(async (amazonListing) => {
+ console.log(`[procure-asin] Amazon PA API Response contains Seller ${amazonListing.MerchantInfo?.Name} offer for ${amazonListing.Price?.Amount} in ${amazonListing.Condition?.Value} condition. Checking database for seller...`);
+ let sellersDto = await getSellerDtoByName(amazonListing.MerchantInfo!.Name!);
+ if (!sellersDto.items.length) {
+ console.log(`[procure-asin] Seller not found in database. Listing requires creation of seller first.`);
+ sellersDto = await getAddNewSellerDtoByName(amazonListing.MerchantInfo!.Name!);
+ console.log(`[procure-asin] Seller Id: ${sellersDto.items[0].id}, Seller Name: ${sellersDto.items[0].data?.sellerName['en-US']} created in database.`);
+ } else {
+ console.log(`[procure-asin] Matching Seller ID: ${sellersDto.items[0].id}, Seller Name: ${sellersDto.items[0].data?.sellerName['en-US']}.`);
+ }
+ let offer: Offer = {
+ offerDate: { iv: new Date().toISOString() },
+ listing: { iv: [ listingsDto.items[0].id ] },
+ seller: { iv: [ sellersDto.items[0].id ] },
+ newPrice: { iv: null },
+ usedPrice: { iv: null },
+ };
+ if (amazonListing.Condition?.Value === 'New') {
+ offer.newPrice = { iv: amazonListing.Price?.Amount!};
+ offer.usedPrice = { iv: null };
+ }
+ else if (amazonListing.Condition?.Value === 'Used') {
+ offer.newPrice = { iv: null };
+ offer.usedPrice = { iv: amazonListing.Price?.Amount! }
+ }
+ console.log('Generated Offer:\n', offer);
+ let offersDto = await getAddNewOfferDto(offer);
+ });
+
+ await performSyncLocalizedSlugs(console.log);
+ });
+ }
+ })
+ .configureHelp();
+
+
+program.parse();
diff --git a/src/apps/modules/amazon-catalog-helpers.ts b/src/apps/modules/amazon-catalog-helpers.ts
new file mode 100644
index 0000000..916386d
--- /dev/null
+++ b/src/apps/modules/amazon-catalog-helpers.ts
@@ -0,0 +1,518 @@
+import type { AmazonGetItem } from '../../data/models/multis/AmazonGetItem.ts';
+import type { Brand } from '../../data/models/multis/Brand.ts';
+import type { ContentsDto } from '../../data/internals/ContentsDtoT.ts';
+import type { GetItemsResponse, Item } from 'amazon-pa-api5-node-ts';
+import type { Listing } from '../../data/models/multis/Listing.ts';
+import type { Multilingual } from '../../data/internals/MultilingualT.ts';
+import type { NonMultilingual } from '../../data/internals/NonMultilingualT.ts';
+import type { Product } from '../../data/models/multis/Product.ts';
+import type { ProductCategory } from '../../data/models/multis/ProductCategory.ts';
+import type { Seller } from '../../data/models/multis/Seller.ts';
+import { arrayBuffer } from 'stream/consumers';
+import { client, getContentsByIds, TIMEOUT_IN_SECONDS } from '../../data/core/client.ts';
+import { createReadStream, type ReadStream } from 'fs';
+import { getItems } from '../../apiclient/amazon.ts';
+import { getBrandsUsingJsonQuery, getMarketplacesUsingJsonQuery, getProductCategoriesUsingJsonQuery, getProductsUsingJsonQuery, getSellersUsingJsonQuery } from '../../data/api-client.ts';
+import { memfs } from 'memfs';
+import { response } from '../../old-data/brands/first-aid-only-example-query-getitems.ts';
+import { SCHEMAS } from '../../data/models/schemas.ts';
+import axios from 'axios';
+import ollama from 'ollama';
+import slugify from 'slugify';
+import type { Offer } from '../../data/models/multis/Offer.ts';
+
+export function isValidASIN(asinOrNot: string) {
+ return asinOrNot.match(/[A-Z0-9]{10}/g) ? true : false;
+}
+
+export async function getAmazonGetItemsRequestSchemaDto() {
+ return await client.schemas.getSchema('amazon-pa-get-items-request');
+}
+
+export async function lookupAmazonASINs(asins: string[]) {
+ let amazonGetItemsRequestSchemaDto = await getAmazonGetItemsRequestSchemaDto();
+ let requestDate = new Date().toISOString();
+ //TODO: Implement API client
+ let apiResponse = await getItems(asins);
+ //TODO: disable when API client is ready: returns mock data for now
+ //particularly I want to log every Amazon lookup from now until forever in Squidex
+ // let apiResponse = response as GetItemsResponse;
+ let amazonGetItem: AmazonGetItem = {
+ apiResponse: { iv: apiResponse },
+ getItemsRequest: { iv: { schemaId: amazonGetItemsRequestSchemaDto.id, ItemIds: [ {
+ ItemId: (apiResponse.ItemsResult && apiResponse.ItemsResult.Items!.length > 0) ? apiResponse.ItemsResult!.Items![0].ASIN! : asins[0]
+ } ] } },
+ requestDate: { iv: requestDate }
+ }
+ let amazonGetItemDto = await client.contents.postContent(SCHEMAS.AMAZON_GET_ITEMS, {
+ publish: true,
+ body: amazonGetItem as any,
+ })
+ let amazonGetItemsDto = await getContentsByIds(SCHEMAS.AMAZON_GET_ITEMS, amazonGetItemDto.id);
+ return amazonGetItemsDto;
+}
+
+export async function getMarketplaceConnectionSchemaDto() {
+ return await client.schemas.getSchema('product-marketplace-connection');
+}
+
+export async function getAmazonMarketplaceConnectionSchemaDto() {
+ return await client.schemas.getSchema('product-marketplace-connection-amazon')
+}
+
+export async function getAmazonMarketplaceDto() {
+ return await getMarketplacesUsingJsonQuery(JSON.stringify({
+ filter: {
+ op: 'eq',
+ path: 'data.marketplaceName.en-US',
+ value: 'Amazon'
+ }
+ }));
+}
+
+export async function doesProductAlreadyExist(asin: string) {
+ return (await getProductsUsingJsonQuery(JSON.stringify({
+ filter: { not: { and: [{
+ op: 'empty',
+ path: 'data.marketplaceConnections.iv.connection.asin',
+ // value: 'Amazon'
+ }, {
+ op: 'eq',
+ path: 'data.marketplaceConnections.iv.marketplace',
+ eq: (await getAmazonMarketplaceDto()).items[0].id
+ }] } }
+ }))).items.length > 0;
+}
+
+export async function getBrandDtoByName(brandName: string) {
+ return (await getBrandsUsingJsonQuery(JSON.stringify({
+ filter: {
+ op: 'eq',
+ path: 'data.brandName.en-US',
+ value: brandName,
+ }
+ })));
+}
+
+export async function getAddNewBrandDtoByName(brandName: string) {
+ let brandDto = await client.contents.postContent(SCHEMAS.BRANDS, {
+ body: {
+ brandName: {
+ "en-US": brandName!,
+ "es-US": brandName!,
+ "fr-CA": brandName!
+ },
+ slug: {
+ "en-US": `en-US/${slugify(brandName!, { lower: true, trim: true })}`,
+ "es-US": `es-US/${slugify(brandName!, { lower: true, trim: true })}`,
+ "fr-CA": `fr-CA/${slugify(brandName!, { lower: true, trim: true })}`
+ },
+ }
+ }, {
+ timeoutInSeconds: TIMEOUT_IN_SECONDS,
+ });
+ let brandsDto = await client.contents.getContents(SCHEMAS.BRANDS, { unpublished: true, ids: brandDto.id }, { timeoutInSeconds: TIMEOUT_IN_SECONDS }) as ContentsDto;
+ return brandsDto;
+}
+
+export async function getSellerDtoByName(sellerName: string) {
+ return (await getSellersUsingJsonQuery(JSON.stringify({
+ filter: {
+ op: 'eq',
+ path: 'data.sellerName.en-US',
+ value: sellerName,
+ }
+ })));
+}
+
+export async function getAddNewSellerDtoByName(sellerName: string) {
+ let sellerDto = await client.contents.postContent(SCHEMAS.SELLERS, {
+ body: {
+ sellerName: {
+ "en-US": sellerName!,
+ "es-US": sellerName!,
+ "fr-CA": sellerName!
+ },
+ slug: {
+ "en-US": `en-US/${slugify(sellerName!, { lower: true, trim: true })}`,
+ "es-US": `es-US/${slugify(sellerName!, { lower: true, trim: true })}`,
+ "fr-CA": `fr-CA/${slugify(sellerName!, { lower: true, trim: true })}`
+ },
+ }
+ }, {
+ timeoutInSeconds: TIMEOUT_IN_SECONDS,
+ });
+ let sellersDto = await client.contents.getContents(SCHEMAS.SELLERS, { unpublished: true, ids: sellerDto.id }, {timeoutInSeconds: TIMEOUT_IN_SECONDS}) as ContentsDto;
+ return sellersDto;
+}
+
+export async function translateProductName_from_en_US_to_es_US(item: Item, brandName: string, productName_en_US: string) {
+ return (await ollama.chat({
+ model: 'llama3.1',
+ messages: [{
+ role: 'user',
+ content:
+`Translate just the product name "${productName_en_US}" into Latin American Spanish, formal, no commentary, no alternatives, ignoring the rest of this text.` +
+`The brand name "${brandName}" remains unchanged. Here is the full product description for reference only:\n` +
+`${item.ItemInfo?.Features?.DisplayValues?.map((item) => `- ${item}`).join('\n')}\n`,
+ }]
+ })).message.content;
+}
+
+export async function translateProductName_from_en_US_to_fr_CA(item: Item, brandName: string, productName_en_US: string) {
+ return (await ollama.chat({
+ model: 'llama3.1',
+ messages: [{
+ role: 'user',
+ content:
+`Translate just the product name "${productName_en_US}" into French Canadian, formal, no commentary, no alternatives, ignoring the rest of this text.` +
+`The brand name "${brandName}" remains unchanged. Here is the full product description for reference only:\n` +
+`${item.ItemInfo?.Features?.DisplayValues?.map((item) => `- ${item}`).join('\n')}\n`,
+ }]
+ })).message.content;
+}
+
+export async function generateAIProductDescription(productName_en_US: string, features: string[]) {
+ return (await ollama.chat({
+ model: 'llama3.1',
+ messages: [{
+ role: 'user',
+ content:
+`I have a niche wish style website called Dasher Supply. It contains many products which are great picks for delivery drivers. `+
+`I need you to write me a product pitch based on the information the following rules: 1. please don't bother with introductions and conclusions, `+
+`those are implied because these are articles on the website; 2. please, whatever you do, do not invent any new information about the products--you should `+
+`only ever produce outputs based on the inputs; 3. if you aren't sure whether to call us Dashers or delivery drivers, do use delivery drivers or drivers, etc., `+
+`as I do not want to cause any issues with the actual DoorDash company; 4. please no commentary, just provide the review based on what you know, but try`+
+`to sell it to a delivery driver. Here is the product name:`+ '`' + productName_en_US + '`. Here are the product features as generally marketed on Amazon: '+
+`${features.map((feature) => `- ${feature}`).join('\n')}.`
+ }]
+ })).message.content;
+}
+
+export async function translateProductDescription_from_en_US_to_es_US(brandName: string, productDescription_en_US: string) {
+ return (await ollama.chat({
+ model: 'llama3.1',
+ messages: [{
+ role: 'user',
+ content:
+`I have a product description in United States English that I need to translate to Latin American Spanish. If you aren't sure about something ` +
+`please use your best judgement in selecting alternatives. The speech can be informal but we're mostly professionals selling products and we ` +
+`want to include options for alternative languages. Please no commentary, just the translation. The brand is ${brandName}, don't translate it. Here is the description in English:\n` +
+productDescription_en_US
+ }]
+ })).message.content;
+}
+
+export async function translateProductDescription_from_en_US_to_fr_CA(brandName: string, productDescription_en_US: string) {
+ return (await ollama.chat({
+ model: 'llama3.1',
+ messages: [{
+ role: 'user',
+ content:
+`I have a product description in United States English that I need to translate to French Canadian. If you aren't sure about something ` +
+`please use your best judgement in selecting alternatives. The speech can be informal but we're mostly professionals selling products and we ` +
+`want to include options for alternative languages. Please no commentary such as "Here is the translation to French Canadian:", just the text translation. `+
+`I need to pipe the output of this command. The brand is ${brandName}, don't translate it. Here is the description in English:\n` +
+productDescription_en_US
+ }]
+ })).message.content;
+}
+
+export async function getAllTopLevelProductCategories() {
+ return (await getProductCategoriesUsingJsonQuery()).items
+ .filter((category) =>
+ !!category.data?.parentCategory.iv || !category.data?.parentCategory.iv.length)
+ .map((category) => {
+ return { id: category.id, categoryName: category.data?.categoryName, description: category.data?.description, parentCategory: category.data?.parentCategory };
+ });
+}
+
+export async function getAllProductSubCategories(parentProductCategoryId: string) {
+ return (await getProductCategoriesUsingJsonQuery(JSON.stringify({ filter: { path: 'data.parentCategory.iv', op: 'eq', value: parentProductCategoryId } }))).items.map((category) => { return { id: category.id, categoryName: category.data?.categoryName, description: category.data?.description, parentCategory: category.data?.parentCategory||undefined }; });
+}
+
+export async function designAiTopLevelProductCategoryEvalQuestions(brandName: string, productName_en_US: string) {
+ const topLevelProductCategories = await getAllTopLevelProductCategories();
+ return [
+ // prompt 1
+ `My website is called Dasher Supply. It contains products and product categories. I need your help in categorizing a product.`,
+ // prompt 2
+ `I have ${topLevelProductCategories.length} top level product categories. The top level product categories I have already are (in JSON format):\n\n` +
+ JSON.stringify(topLevelProductCategories),
+ // prompt 3
+ `Which of these top level product categories should I pick to organize this product? ` +
+ `The brand name for the product is ${brandName}. The name of the product (in en-US) is ${productName_en_US}. ` +
+ `The product features (in US English) are:\n` +
+ `${response.ItemsResult?.Items![0].ItemInfo?.Features?.DisplayValues?.map((item) => `- ${item}`).join('\n')}\n`,
+ // prompt 4
+ `I need the answer in a certain format. In this case I must have only the category UUID as a properly escaped valid JavaScript string in double-quotes, no commentary.`,
+ ];
+}
+
+export async function askAiTopLevelProductCategoryEvalQuestions(brandName: string, productName_en_US: string) {
+ const aiTopLevelCategoryEvalQuestions: string[] = await designAiTopLevelProductCategoryEvalQuestions(brandName, productName_en_US);
+ return JSON.parse((await ollama.chat({
+ model: 'llama3.1',
+ messages: aiTopLevelCategoryEvalQuestions.map(content => { return { role: 'user', content } }),
+ })).message.content).trim().toLowerCase() as string;
+}
+
+export async function designAiProductSubCategoryEvalQuestionsSet1(parentProductCategoryId: string, brandName: string, productName_en_US: string, features: string[]) {
+ const topLevelProductCategories = await getAllTopLevelProductCategories();
+ const productSubCategories = await getAllProductSubCategories(parentProductCategoryId);
+ const aiTopLevelCategoryEvalQuestions: string[] = await designAiTopLevelProductCategoryEvalQuestions(brandName, productName_en_US);
+ return [
+ // prompt 1
+ aiTopLevelCategoryEvalQuestions[0],
+ // prompt 2
+ aiTopLevelCategoryEvalQuestions[1],
+ // prompt 3
+`The brand name for the product is ${brandName}. The name of the product (in en-US) is ${productName_en_US}. The product features (in US English) are:\n` +
+`${features.map((item) => `- ${item}`).join('\n')}\n` +
+`When asked previously about which top level product category, you picked ${parentProductCategoryId} as the closest match.`,
+ // prompt 4
+`The second level product categories I have already are (in JSON format):\n\n` +
+JSON.stringify(productSubCategories) +
+` Ignoring the top level product categories, should I pick an existing second level category from the list (if any), or make a new one?`,
+ // prompt 5
+`I need the answer in a certain format. In this case I must have only the answer as a valid JavaScript boolean to read in with JSON.parse. If you suggest making a new second level category, return true, no commentary. If you suggest using an existing second level category, return false, no commentary.`
+ ];
+}
+
+export async function askAiProductSubCategoryEvalQuestionsSet1(parentProductCategoryId: string, brandName: string, productName_en_US: string, features: string[]) {
+ const aiSubCategoryEvalQuestion1 = await designAiProductSubCategoryEvalQuestionsSet1(parentProductCategoryId, brandName, productName_en_US, features);
+ return JSON.parse((await ollama.chat({
+ model: 'llama3.1',
+ messages: aiSubCategoryEvalQuestion1.map(content => { return { role: 'user', content } }),
+ })).message.content) as boolean;
+}
+
+export async function designAiProductSubCategoryEvalQuestionsSet2(response: GetItemsResponse, parentProductCategoryId: string, brandName: string, productName_en_US: string, features: string[], shouldCreateNewProductCategory: boolean) {
+ const topLevelProductCategories = await getAllTopLevelProductCategories();
+ const productSubCategories = await getAllProductSubCategories(parentProductCategoryId);
+ const aiTopLevelCategoryEvalQuestions: string[] = await designAiTopLevelProductCategoryEvalQuestions(brandName, productName_en_US);
+ return [
+ // prompt 1
+ aiTopLevelCategoryEvalQuestions[0],
+ // prompt 2
+ aiTopLevelCategoryEvalQuestions[1],
+ // prompt 3
+ `The brand name for the product is ${brandName}. The name of the product (in en-US) is ${productName_en_US}. The product features (in US English) are:\n` +
+ `${response.ItemsResult?.Items![0].ItemInfo?.Features?.DisplayValues?.map((item) => `- ${item}`).join('\n')}\n` +
+ `When asked previously about which top level product category, you picked ${parentProductCategoryId} as the closest match.`,
+ // prompt 4
+ `The second level product categories I have already are (in JSON format):\n\n` +
+ JSON.stringify(productSubCategories) +
+ ` When asked whether I should pick an existing second level category from the list (if any) or make a new one you previously responded ${shouldCreateNewProductCategory?" that I should make a new one.":" that I should choose an existing one."}`,
+ // prompt 5
+ shouldCreateNewProductCategory
+ ?
+ `What would be a good subcategory to use for this product based on what you know about the product, the existing categories, and the web site?`
+ :
+ `Which existing subcategory do you think I should use?`
+ ,
+ // prompt 6
+ shouldCreateNewProductCategory
+ ?
+ `In TypeScript, the interface looks like this:\n\n` +
+ `internals/NonMultilingualT.ts:` + "```\n" +
+ `export interface NonMultilingual {\n` +
+ ` [key: string]: T,\n` +
+ ` iv: T,\n` +
+ `};\n` +
+ "```\n" +
+ `internals/MultilingualT.ts:` + "```" +
+ `export interface Multilingual {\n` +
+ ` [key: string]: T,\n` +
+ ` 'en-US': T,\n` +
+ ` 'es-US': T,\n` +
+ ` 'fr-CA': T,\n` +
+ `};\n` +
+ "```\n" +
+ `models/multis/ProductCategory.ts:` + "```\n" +
+ `import type { Multilingual } from "../../internals/MultilingualT";\n` +
+ `import type { NonMultilingual } from "../../internals/NonMultilingualT";\n` +
+ `export interface ProductCategory {\n` +
+ ` categoryName: Multilingual, //multilingual name of category` +
+ ` description: Multilingual, //multilingual description of category` +
+ ` parentCategory: NonMultilingual, //parent category (exactly 1), though due to Squidex / MongoDB this is always an array of UUIDs with the UUID belonging to the UUID of the parent category or an empty array for top-level categories` +
+ `}` + "```\n\n" +
+ `I need the answer in a certain format. In this case I must have only the JSON for the new Category containing only the fields categoryName and description in all three languages, no commentary, no code comments, and with the UUID in the string array for parentCategory field, no commentary, no code comments, no id field, not in a markdown codeblock.`
+ :
+ `I need the answer in a certain format. In this case I must have only the category UUID as a properly escaped valid JavaScript string, no commentary.`,
+ ];
+}
+
+export async function askAiProductSubCategoryEvalQuestionsSet2(response: GetItemsResponse, parentProductCategoryId: string, brandName: string, productName_en_US: string, features: string[], shouldCreateNewProductCategory: boolean): Promise<{
+ categoryName: Multilingual,
+ description: Multilingual,
+ parentCategory: NonMultilingual,
+}|string> {
+ const aiSubCategoryEvalQuestion2 = await designAiProductSubCategoryEvalQuestionsSet2(response, parentProductCategoryId, brandName, productName_en_US, features, shouldCreateNewProductCategory);
+ console.log(`>>>${aiSubCategoryEvalQuestion2}`);
+ const answer = (await ollama.chat({
+ model: 'llama3.1',
+ messages: aiSubCategoryEvalQuestion2.map(content => { return { role: 'user', content } }),
+ })).message.content;
+ console.log(`llama3.1>${answer}`);
+ const aiSubCategoryEvalQuestion2Answer = JSON.parse(answer) as {
+ categoryName: Multilingual,
+ description: Multilingual,
+ parentCategory: string[],
+ }|string;
+ if (typeof aiSubCategoryEvalQuestion2Answer === 'string') {
+ return aiSubCategoryEvalQuestion2Answer as string;
+ } else {
+ return {
+ categoryName: aiSubCategoryEvalQuestion2Answer.categoryName,
+ description: aiSubCategoryEvalQuestion2Answer.description,
+ parentCategory: { iv: aiSubCategoryEvalQuestion2Answer.parentCategory },
+ };
+ }
+}
+
+export async function generateAITagsForProduct(productName_en_US: string, features: string[]) {
+ const questions: string[] = [
+ `Provided the description for the product, please provide a valid JavaScript array of strings which represent tags on a website for the product, no commentary, no code comments, not in a markdown codeblock. The product name is ${productName_en_US}. The product features are:\n ${features.map((feature) => `- ${feature}`).join('\n')}`
+ ];
+ let answer = (await ollama.chat({
+ model: 'llama3.1',
+ messages: questions.map(content => { return { role: 'user', content } }),
+ })).message.content;
+ return (JSON.parse(answer) as string[]).map(a => a.trim().toLowerCase());
+}
+
+export async function translateTags_from_en_US_to_es_US(tags_en_US: string[]) {
+ const questions: string[] = [
+ `Provided these website tags in United States English in the following JavaScript array of strings, please provide a valid JavaScript array of strings which represent the tags translated to Latin American Spanish, no commentary, no code comments, not in a markdown codeblock. The tags are:\n ${JSON.stringify(tags_en_US)}`
+ ];
+ let answer = (await ollama.chat({
+ model: 'llama3.1',
+ messages: questions.map(content => { return { role: 'user', content } }),
+ })).message.content;
+ return (JSON.parse(answer) as string[]).map(a => a.trim().toLowerCase());
+}
+
+export async function translateTags_from_en_US_to_fr_CA(tags_en_US: string[]) {
+ const questions: string[] = [
+ `Provided these website tags in United States English in the following JavaScript array of strings, please provide a valid JavaScript array of strings which represent the tags translated to French Canadian, no commentary, no code comments, not in a markdown codeblock. The tags are:\n ${JSON.stringify(tags_en_US)}`
+ ];
+ let answer = (await ollama.chat({
+ model: 'llama3.1',
+ messages: questions.map(content => { return { role: 'user', content } }),
+ })).message.content;
+ return (JSON.parse(answer) as string[]).map(a => a.trim().toLowerCase());
+}
+
+export async function getAddNewProductSubCategoryDto(parentProductCategoryId: NonMultilingual, categoryName: Multilingual, description: Multilingual) {
+ let productCategoryDto = await client.contents.postContent(SCHEMAS.PRODUCT_CATEGORIES, {
+ publish: false,
+ body: {
+ categoryName,
+ description,
+ parentCategory: parentProductCategoryId,
+ },
+ }, {
+ timeoutInSeconds: TIMEOUT_IN_SECONDS,
+ });
+ let productCategoriesDto = await client.contents.getContents(SCHEMAS.PRODUCT_CATEGORIES, { unpublished: true, ids: productCategoryDto.id }, {timeoutInSeconds: TIMEOUT_IN_SECONDS}) as ContentsDto;
+ return productCategoriesDto;
+}
+
+export async function translateAmazonDescription_from_en_US_to_es_US(brandName: string, features: string[]) {
+ return (await ollama.chat({
+ model: 'llama3.1',
+ messages: [{
+ role: 'user',
+ content:
+ `Translate the Amazon description into Latin American Spanish, formal, no commentary, no alternatives. ` +
+ `The brand name ${brandName} remains unchanged. Here is the description:\n` +
+ `${features.map((feature) => `- ${feature}`).join('\n')}\n`,
+ }]
+ })).message.content;
+}
+
+export async function translateAmazonDescription_from_en_US_to_fr_CA(brandName: string, features: string[]) {
+ return (await ollama.chat({
+ model: 'llama3.1',
+ messages: [{
+ role: 'user',
+ content:
+ `Translate the Amazon description into French Canadian, formal, no commentary, no alternatives. ` +
+ `The brand name ${brandName} remains unchanged. Here is the description:\n` +
+ `${features.map((feature) => `- ${feature}`).join('\n')}\n`,
+ }]
+ })).message.content;
+}
+
+export async function getAddNewProductDtoByProduct(product: Product) {
+ let productDto = await client.contents.postContent(SCHEMAS.PRODUCTS, {
+ publish: false,
+ body: {
+ ...product
+ },
+ }, {
+ timeoutInSeconds: TIMEOUT_IN_SECONDS,
+ });
+ let productsDto = await client.contents.getContents(SCHEMAS.PRODUCTS, { unpublished: true, ids: productDto.id }, {timeoutInSeconds: TIMEOUT_IN_SECONDS}) as ContentsDto;
+ return productsDto;
+}
+
+export async function getAddNewProductListingDtoByProduct(listing: Listing) {
+ let listingDto = await client.contents.postContent(SCHEMAS.LISTINGS, {
+ publish: true,
+ body: {
+ ...listing
+ }
+ }, {
+ timeoutInSeconds: TIMEOUT_IN_SECONDS,
+ });
+ let listingsDto = await client.contents.getContents(SCHEMAS.LISTINGS, { unpublished: true, ids: listingDto.id }, {timeoutInSeconds: TIMEOUT_IN_SECONDS}) as ContentsDto;
+ return listingsDto;
+}
+
+export function trimPeriods(str: string) {
+ return str.replace(/^\s+|\s+$/g, '').replace(/\.$/g, '');
+}
+
+export function removeQuotes(str: string) {
+ return str.replace(/['"]+/g, '');
+}
+
+export async function upsertAssetFolder(folderName: string, parentFolderId?: string|undefined) {
+ const assetFolders = await client.assets.getAssetFolders({ scope: 'Items', parentId: parentFolderId }, { timeoutInSeconds: TIMEOUT_IN_SECONDS });
+ let assetFolder;
+ let assetFolderLookup = assetFolders.items.filter(folder => folder.folderName === folderName);
+ if (assetFolderLookup.length === 0) {
+ assetFolder = await client.assets.postAssetFolder({ folderName: folderName, parentId: parentFolderId }, { timeoutInSeconds: TIMEOUT_IN_SECONDS });
+ }
+ else {
+ assetFolder = assetFolderLookup[0];
+ }
+ return assetFolder;
+}
+
+export async function getAllAssetsInFolder(assetFolderId: string) {
+ let assetsDto = await client.assets.getAssets({parentId: assetFolderId});
+ return assetsDto.items||[];
+}
+
+export async function uploadDownloadedImageToSquidexAsAsset(downloadUrl: string, assetFolderId: string) {
+ let filename = downloadUrl.substring(downloadUrl.lastIndexOf('/')+1);
+ let response = await axios.get(downloadUrl, { timeout: TIMEOUT_IN_SECONDS * 1000, responseType: 'arraybuffer' });
+ let assetDto = await client.assets.postAsset({ readable: response.data, fileName: filename }, { timeoutInSeconds: TIMEOUT_IN_SECONDS });
+ assetDto = await client.assets.putAsset(assetDto.id, { fileName: filename, metadata: { ...assetDto.metadata, 'amazon-url': downloadUrl }, tags: ['amazon', 'product'] })
+ assetDto = await client.assets.putAssetParent(assetDto.id, { parentId: assetFolderId });
+ return assetDto;
+}
+
+export async function getAddNewOfferDto(offer: Offer) {
+ let offerDto = await client.contents.postContent(SCHEMAS.OFFERS, {
+ publish: true,
+ body: offer as any,
+ }, {
+ timeoutInSeconds: TIMEOUT_IN_SECONDS,
+ });
+ let offersDto = await client.contents.getContents(SCHEMAS.OFFERS, { unpublished: true, ids: offerDto.id }, {timeoutInSeconds: TIMEOUT_IN_SECONDS}) as ContentsDto;
+ return offersDto;
+}
diff --git a/src/apps/squidex-webhooks.ts b/src/apps/squidex-webhooks.ts
new file mode 100644
index 0000000..d704de4
--- /dev/null
+++ b/src/apps/squidex-webhooks.ts
@@ -0,0 +1,169 @@
+import Fastify, { type FastifyRequest } from 'fastify';
+import fastifyMiddie from '@fastify/middie';
+// import fastifyStatic from '@fastify/static';
+// import { fileURLToPath } from 'node:url';
+// import { handler as ssrHandler } from './dist/server/entry.mjs';
+import { config } from '../config.ts';
+// import { series } from 'node:async';
+// import { spawn } from 'node:child_process';
+import type { ChildProcess } from 'child_process';
+import { performSyncLocalizedSlugs } from '../data/api-client.ts';
+import util from 'node:util';
+// import { parse as parseQueryString } from 'node:querystring';
+
+// const app = Fastify({ logger: true });
+// await app
+// .register(fastifyStatic, {
+// root: fileURLToPath(new URL('./dist/client', import.meta.url)),
+// })
+// .register(fastifyMiddie);
+// app.use(ssrHandler);
+// app.listen({ host: '0.0.0.0', port: config.port }, (err, address) => {
+// if (err) {
+// app.log.error(err);
+// process.exit(1);
+// }
+// app.log.info(`Fastify web server with Astro middleware listening at ${address}.`)
+// });
+
+const webhook = Fastify({ logger: true });
+await webhook
+ .register(fastifyMiddie);
+webhook.get("/", async (req, reply) => {
+ let buffer = "200 [OK] Webhook server";
+ reply.send({
+ status: 'ok',
+ text: buffer
+ });
+ return reply;
+});
+webhook.post("/cache-localized-slugs", async (req, reply) => {
+ let buffer = '';
+ const trapLog = (...args: any[]) => {
+ const line = args.map((val) => typeof val === 'string' ? val : util.inspect(val)).join(' ');
+ buffer += line + '\n';
+ webhook.log.info(line);
+ };
+ performSyncLocalizedSlugs(trapLog).then(() => {
+ reply.send({
+ status: 'ok',
+ text: buffer
+ });
+ });
+ return reply;
+})
+webhook.get("/cache-localized-slugs", async (req, reply) => {
+ let buffer = '';
+ const trapLog = (...args: any[]) => {
+ const line = args.map((val) => typeof val === 'string' ? val : util.inspect(val)).join(' ');
+ buffer += line + '\n';
+ webhook.log.info(line);
+ };
+ performSyncLocalizedSlugs(trapLog).then(() => {
+ reply.send({
+ status: 'ok',
+ text: buffer
+ });
+ });
+ return reply;
+})
+// webhook.get("/get-site-data", async (req, reply) => {
+// let site = await getSite();
+// reply.send(site);
+// return reply;
+// });
+// webhook.get("/get-homepage-data", async (req, reply) => {
+// let homePage = await getSiteHomePage(SupportedLanguages['en-US'])
+// reply.send(homePage);
+// return reply;
+// });
+
+// type GetPageByLangSlugRequest = FastifyRequest<{Querystring:{lang: string,slug: string}}>;
+// webhook.get("/get-page-by-lang-slug", async (req: GetPageByLangSlugRequest, reply) => {
+// let lang = req.query.lang;
+// let slug = req.query.slug;
+// let page = await getPageByLangSlug(lang, slug);
+// reply.send(page);
+// return reply;
+// });
+// let rebuildLock: ChildProcess[] = [];
+// webhook.post("/rebuild", async (req, reply) => {
+// const strapiEventName = req.headers['X-Strapi-Event'];
+// console.log('Strapi Event', strapiEventName);
+// console.log('Request Body', req.body);
+// return "Hello, World!";
+// // let startTime = Date.now();
+// // if (rebuildLock.length < 1) {
+// // let instance;
+// // Promise.all([ instance = spawn(/^win/.test(process.platform) ? 'npm.cmd' : 'npm', ['run-script', 'astro', 'build'], {
+// // stdio: 'overlapped',
+// // })]);;
+// // rebuildLock.push(instance);
+// // let stdout = '';
+// // let stderr = '';
+// // instance.stdout.on('data', (data) => {
+// // stdout += data.toString();
+// // })
+// // instance.stderr.on('data', (data) => {
+// // stderr += data.toString();
+// // })
+// // instance.on('error', (err) => {
+// // let endTime = Date.now();
+// // let duration = endTime - startTime;
+// // rebuildLock.splice(0, 1);
+// // if (err) {
+// // reply.statusCode = 500;
+// // }
+// // reply.send({
+// // status: err ? 'err' : 'ok',
+// // err: err || undefined,
+// // stdout,
+// // stderr,
+// // startTime,
+// // endTime,
+// // duration,
+// // });
+// // });
+// // instance.on('close', (exitCode) => {
+// // let endTime = Date.now();
+// // let duration = endTime - startTime;
+// // rebuildLock.splice(0, 1);
+// // let err = (exitCode != 0);
+// // if (err) {
+// // reply.statusCode = 500;
+// // }
+// // reply.send({
+// // status: err ? 'err' : 'ok',
+// // err: err || undefined,
+// // exitCode,
+// // stdout,
+// // stderr,
+// // startTime,
+// // endTime,
+// // duration,
+// // });
+// // });
+// // }
+// // else {
+// // reply.statusCode = 503; // inform client of HTTP 503 Service Unavailable
+// // reply.header('Retry-After', '10'); // inform client to retry request after 10 seconds
+// // reply.send({
+// // status: 'info',
+// // err: 'A rebuild is currently in progress and another rebuild is currently queued. Please wait for the rebuild to finish.',
+// // })
+// // }
+// // return reply;
+// });
+webhook.listen({ host: '0.0.0.0', port: config.webhookPort }, (err, address) => {
+ if (err) {
+ webhook.log.error(err);
+ process.exit(1);
+ }
+ webhook.log.info(`Fastify web server with webhook middleware listening at ${address}.`)
+ // webhook.log.info(`You can trigger a site rebuild at ${address}/rebuild.`)
+ const trapLog = (...args: any[]) => {
+ const line = args.map((val) => typeof val === 'string' ? val : util.inspect(val)).join(' ');
+ webhook.log.info(line);
+ };
+ performSyncLocalizedSlugs(trapLog);
+});
diff --git a/src/apps/ssr-server.ts b/src/apps/ssr-server.ts
new file mode 100644
index 0000000..e69de29
diff --git a/src/components/Banner.astro b/src/components/Banner.astro
new file mode 100644
index 0000000..7f12436
--- /dev/null
+++ b/src/components/Banner.astro
@@ -0,0 +1,30 @@
+---
+interface Banner {
+ editToken?: string,
+ homePageLink: string,
+ siteName: string,
+}
+
+const { editToken, homePageLink, siteName } = Astro.props;
+---
+
+
+
\ No newline at end of file
diff --git a/src/components/Brand.astro b/src/components/Brand.astro
new file mode 100644
index 0000000..92c61bd
--- /dev/null
+++ b/src/components/Brand.astro
@@ -0,0 +1,84 @@
+---
+import type { Brand } from "../data/models/multis/Brand";
+import { getAssetById, getLocaleField } from "../data/api-client";
+import path from "node:path";
+import { renderMarkdown } from "../lib/rendering";
+
+interface Props {
+ brand: Brand,
+ editToken?: string,
+ locale: string,
+}
+
+const { brand, editToken, locale } = Astro.props;
+
+let brandLogoImage = path.posix.join('/img', (await getAssetById(brand.logoImage[locale]))
+ .links['content']
+ .href
+ .split('/')
+ .reverse()
+ .filter((_value, index, array) => index < (array.length - index - 2))
+ .reverse()
+ .join('/'));
+---
+
+
+
+ { brandLogoImage &&
+
+ }
+
+ {getLocaleField(locale, brand.shortDescription) &&
}
+
+
+ {getLocaleField(locale, brand.longDescription) &&
}
+
+
+
\ No newline at end of file
diff --git a/src/components/BrandCard.astro b/src/components/BrandCard.astro
index 2349143..77ff6ef 100644
--- a/src/components/BrandCard.astro
+++ b/src/components/BrandCard.astro
@@ -1,16 +1,33 @@
---
-import type { Brand } from '../data/brands/brand';
+import type { Brand } from "../data/models/multis/Brand";
+import { getAssetById } from "../data/api-client";
+import path from "node:path";
interface Props {
- brand: Brand
+ brand: Brand,
+ editToken?: string,
+ locale: string,
}
-const { brand } = Astro.props;
+const { brand, editToken, locale } = Astro.props;
+
+let brandLogoImage = path.posix.join('/img', (await getAssetById(brand.logoImage[locale]))
+ .links['content']
+ .href
+ //The purpose of .split('/').reverse().filter(...2...).reverse().join('/') is to
+ //extract the last two directories from the end of the path, which we will
+ //use to form the path to the ../pages/img/[...imageLookup].astro handler, e.g.,
+ //in the form of `/img/${uuid}/${fileName}.${ext}`.
+ .split('/')
+ .reverse()
+ .filter((_value, index, array) => index < (array.length - index - 2))
+ .reverse()
+ .join('/'));
---
-
-
- {brand.logoUrl !== undefined && }
+
+
+
+}
\ No newline at end of file
diff --git a/src/components/Callout.astro b/src/components/Callout.astro
new file mode 100644
index 0000000..7b9eff6
--- /dev/null
+++ b/src/components/Callout.astro
@@ -0,0 +1,42 @@
+---
+interface Callout {
+ editToken?: string,
+ text: string,
+}
+
+const { editToken, text } = Astro.props;
+---
+
+
+
+
\ No newline at end of file
diff --git a/src/components/CategoryCard.astro b/src/components/CategoryCard.astro
deleted file mode 100644
index 1182586..0000000
--- a/src/components/CategoryCard.astro
+++ /dev/null
@@ -1,65 +0,0 @@
----
-import type { Category } from '../data/categories';
-
-interface Props {
- category: Category
-}
-
-const { category } = Astro.props;
----
-
-
-
- {category.imageUrl !== undefined && }
-
- {category.category}
- →
-
-
- {category.description}
-
-
-
-
diff --git a/src/components/ComponentRouter.astro b/src/components/ComponentRouter.astro
new file mode 100644
index 0000000..66903c2
--- /dev/null
+++ b/src/components/ComponentRouter.astro
@@ -0,0 +1,340 @@
+---
+// import type { Brand, Page, PageBrand, PageCallout, PageContent, Site, SquidexComponent, QueryComponent } from '../data/squidex-client';
+import type { Brand } from "../data/models/multis/Brand";
+import type { Component } from "../data/internals/Component";
+import type { Marketplace } from "../data/models/multis/Marketplace";
+import type { Page } from "../data/models/multis/Page";
+import type { PageBrand } from "../data/models/components/PageBrand";
+import type { PageProduct } from "../data/models/components/PageProduct";
+import type { PageCallout } from "../data/models/components/PageCallout";
+import type { PageContent } from "../data/models/components/PageContent";
+import type { PageProductCategory } from "../data/models/components/PageProductCategory";
+import type { Product } from "../data/models/multis/Product";
+import type { ProductCategory } from "../data/models/multis/ProductCategory";
+import type { Seller } from "../data/models/multis/Seller";
+import type { Site } from "../data/models/singles/Site";
+import type { QueryComponent } from "../data/models/components/QueryComponent";
+import { SupportedLocales } from "../data/internals/MultilingualT";
+import { getBrandsByIds, getBrandsUsingJsonQuery, getMarketplacesByIds, getMarketplacesUsingJsonQuery, getPagesByIds, getProductCategoriesByIds, getProductCategoriesUsingJsonQuery, getProductsByIds, getProductsUsingJsonQuery, getSellersByIds, getSellersUsingJsonQuery } from '../data/api-client';
+import BrandComponent from './Brand.astro';
+import ProductComponent from './Product.astro';
+import Breadcrumbs, { type Breadcrumb } from './Breadcrumbs.astro';
+import BrandCard from './BrandCard.astro';
+import PageContentComponent from './Content.astro';
+import Callout from './Callout.astro';
+import ProductCard from './ProductCard.astro';
+import ProductCategoryComponent from './ProductCategory.astro';
+import ProductCategoryCard from './ProductCategoryCard.astro';
+import SellerCard from "./SellerCard.astro";
+import SellerComponent from './Seller.astro';
+import MarketplaceComponent from './Marketplace.astro';
+import MarketplaceCard from './MarketplaceCard.astro';
+import { renderMarkdown } from '../lib/rendering';
+import type { ContentsDto } from "../data/internals/ContentsDtoT";
+import type { PageMarketplace } from "../data/models/components/PageMarketplace";
+import type { PageSeller } from "../data/models/components/PageSeller";
+import type { ContentDto } from "../data/internals/ContentDtoT";
+
+interface Props {
+ componentRouter: Component[],
+ homePage: Page,
+ isHomePage: boolean,
+ locale: string,
+ page: Page,
+ pageEditToken?: string,
+ site: Site,
+ siteEditToken?: string,
+ brand?: Brand,
+ marketplace?: Marketplace,
+ productDto?: ContentsDto,
+ productCategory?: ProductCategory,
+ seller?: Seller,
+}
+
+const { brand, componentRouter, homePage, isHomePage, locale, marketplace, page, pageEditToken, productDto, productCategory, seller, site, siteEditToken } = Astro.props;
+const renderContext = { ...Astro.props };
+
+async function flatWalkSubCategories (productCategoryId: string): Promise[]> {
+ let mySubCategories = await getProductCategoriesUsingJsonQuery(JSON.stringify({ filter: { op: 'eq', path: 'data.parentCategory.iv', value: productCategoryId}}));
+ let walked = [...mySubCategories.items];
+ for (let sc = 0; sc < mySubCategories.items.length; sc++) {
+ let deepWalk = await flatWalkSubCategories(mySubCategories.items[sc].id);
+ walked.push(...deepWalk);
+ }
+ return walked;
+}
+
+---
+
+{componentRouter.map(async (dynComponent) => {
+ switch (dynComponent.schemaName) {
+ case 'page-breadcrumbs':
+ const siteCrumb = ({ homePage, site, siteEditToken }: { homePage: Page, site: Site, siteEditToken?: string }): Breadcrumb => {
+ return {
+ text: site.siteName[locale],
+ url: `/${homePage.slug[locale]}/`,
+ gradient: true,
+ editToken: siteEditToken,
+ };
+ };
+ const pageCrumb = ({ page, pageEditToken }: { page: Page, pageEditToken?: string }): Breadcrumb => {
+ return {
+ text: page.title[locale],
+ url: `/${page.slug[locale]}`,
+ gradient: false,
+ editToken: pageEditToken,
+ }
+ };
+ const categoryCrumb = ({ category, categoryEditToken }: { category: ProductCategory, categoryEditToken?: string }): Breadcrumb => {
+ return {
+ text: category.categoryName[locale],
+ url: `/${category.slug[locale]}`,
+ gradient: false,
+ editToken: categoryEditToken,
+ }
+ };
+ const walkParentPagesForCrumbs = async ({homePage, site, startPage, startPageEditToken}: {homePage: Page, site: Site, startPage: Page, startPageEditToken?: string}) => {
+ const MAX_RECURSION_DEPTH = 10;
+ const walkParentPagesForCrumbsRecursive = async (recursePage: Page, abortAfterRecursions: number, recursePageEditToken?: string) => {
+ let parentPages: Breadcrumb[] = [];
+ if (recursePage.parentPage && recursePage.parentPage.iv && recursePage.parentPage.iv.length > 0) {
+ if (abortAfterRecursions !== 0) {
+ let parentPagesDto = await getPagesByIds(recursePage.parentPage.iv[0]);
+ parentPages = await walkParentPagesForCrumbsRecursive(parentPagesDto.items[0].data!, abortAfterRecursions--);
+ }
+ }
+ if (recursePage.slug[locale] !== homePage.slug[locale]) {
+ parentPages.push(pageCrumb({ page: recursePage, pageEditToken: recursePageEditToken }));
+ }
+ return parentPages;
+ };
+ let breadcrumbs = (await walkParentPagesForCrumbsRecursive(startPage, MAX_RECURSION_DEPTH, startPageEditToken));
+ return breadcrumbs;
+ };
+ const walkParentCategoriesForCrumbs = async ({startCategory, startCategoryEditToken}: {startCategory: ProductCategory, startCategoryEditToken: string}) => {
+ const MAX_RECURSION_DEPTH = 10;
+ const walkParentCategoriesForCrumbsRecursive = async (recurseCategory: ProductCategory, abortAfterRecursions: number, recurseCategoryEditToken?: string) => {
+ let parentCategories: Breadcrumb[] = [];
+ if (recurseCategory.parentCategory && recurseCategory.parentCategory.iv && recurseCategory.parentCategory.iv.length > 0) {
+ if (abortAfterRecursions !== 0) {
+ let parentCategoriesDto = await getProductCategoriesByIds(recurseCategory.parentCategory.iv[0]);
+ parentCategories = await walkParentCategoriesForCrumbsRecursive(parentCategoriesDto.items[0].data!, abortAfterRecursions--, parentCategoriesDto.items[0].editToken);
+ }
+ }
+ if (startCategory.slug !== recurseCategory.slug) {
+ parentCategories.push(categoryCrumb({ category: recurseCategory, categoryEditToken: recurseCategoryEditToken }));
+ }
+ return parentCategories;
+ };
+ let breadcrumbs = (await walkParentCategoriesForCrumbsRecursive(startCategory, MAX_RECURSION_DEPTH));
+ return breadcrumbs;
+ };
+ let breadcrumbs: Breadcrumb[] = [
+ siteCrumb({ homePage, site, siteEditToken }),
+ ...productCategory && productCategory.parentCategory && productCategory.parentCategory.iv && productCategory.parentCategory.iv[0] ? await walkParentCategoriesForCrumbs({ startCategory: productCategory, startCategoryEditToken: pageEditToken! }) : [],
+ ...await walkParentPagesForCrumbs({ homePage, site, startPage: page, startPageEditToken: pageEditToken }),
+ ...isHomePage?[pageCrumb({ page, pageEditToken })]:[],
+ ]
+ return (
+
+ )
+ case 'page-content':
+ let content = dynComponent as PageContent;
+ return (
+
+ );
+ case 'page-callout':
+ let callout = dynComponent as PageCallout;
+ return (
+
+ );
+ case 'page-brands-query':
+ let brandsQuery = dynComponent as QueryComponent;
+ let brandsDto = (await getBrandsUsingJsonQuery(JSON.stringify(brandsQuery.jsonQuery)));
+ let brands = brandsDto!.items;
+ let brandsHeading: { [key: string]: string } = {
+ 'en-US': "Brands",
+ 'es-US': "Marcas",
+ 'fr-CA': "Marques",
+ };
+ return (
+ brands.length > 0 && {brandsHeading[locale]}
+
+ {brands.sort((a, b) => a.data!.brandName[locale].localeCompare(b.data!.brandName[locale])).map(brandDto => {
+ return (
+
+ );
+ })}
+
+ );
+ case 'page-brand':
+ let brandComponent = dynComponent as PageBrand;
+ let brandId = brandComponent.brand ? brandComponent.brand[0] : '';
+ let brandForComponent = brand || (await getBrandsByIds(brandId)).items[0].data!;
+ return (
+
+ );
+ case 'page-marketplace':
+ let marketplaceComponent = dynComponent as PageMarketplace;
+ let marketplaceId = marketplaceComponent.marketplace ? marketplaceComponent.marketplace[0] : '';
+ let marketplaceForComponent = marketplace || (await getMarketplacesByIds(marketplaceId)).items[0].data!;
+ return (
+
+ );
+ case 'page-seller':
+ let sellerComponent = dynComponent as PageSeller;
+ let sellerId = sellerComponent.seller ? sellerComponent.seller[0] : '';
+ let sellerForComponent = seller || (await getSellersByIds(sellerId)).items[0].data!;
+ return (
+
+ );
+ case 'page-marketplaces-query':
+ let marketplacesQuery = dynComponent as QueryComponent;
+ let marketplacesDto = (await getMarketplacesUsingJsonQuery(JSON.stringify(marketplacesQuery.jsonQuery)))!;
+ let marketplaces = marketplacesDto.items;
+ let marketplacesHeading: { [key: string]: string } = {
+ 'en-US': "Marketplaces",
+ 'es-US': "Mercados",
+ 'fr-CA': "Marchés",
+ };
+ return (
+ marketplaces.length > 0 && {marketplacesHeading[locale]}
+
+ {marketplaces.sort((a, b) => a.data!.marketplaceName[locale].localeCompare(b.data!.marketplaceName[locale])).map(marketplaceDto => (
+
+ ))}
+
+ );
+ case 'page-sellers-query':
+ let sellersQuery = dynComponent as QueryComponent;
+ let sellersDto = (await getSellersUsingJsonQuery(JSON.stringify(sellersQuery.jsonQuery)))!;
+ let sellers = sellersDto.items;
+ let sellersHeading: { [key: string]: string } = {
+ 'en-US': "Sellers",
+ 'es-US': "Vendedores",
+ 'fr-CA': "Vendeurs",
+ };
+ return (
+ sellers.length > 0 && {sellersHeading[locale]}
+
+ {sellers.sort((a, b) => a.data!.sellerName[locale].localeCompare(b.data!.sellerName[locale])).map(sellerDto => (
+
+ ))}
+
+ );
+ case 'page-product-categories-query':
+ let productCategoriesQuery = dynComponent as QueryComponent;
+ let productCategoriesDto = (await getProductCategoriesUsingJsonQuery(JSON.stringify(productCategoriesQuery.jsonQuery)))!;
+ let productCategories = [];
+ for (let pc = 0; pc < productCategoriesDto.items.length; pc++) {
+ let productCategoryDto = productCategoriesDto.items[pc];
+ let subCategories = await flatWalkSubCategories(productCategoryDto.id);
+ let subQueryDto = await getProductsUsingJsonQuery(JSON.stringify({ filter: { op: 'in', path: 'data.categories.iv', value: [productCategoryDto.id, ...subCategories.map((sc) => sc.id)] }}));
+ let hasProducts = subQueryDto.items.length > 0;
+ if (hasProducts) {
+ productCategories.push(productCategoryDto);
+ }
+ }
+ let productCategoriesHeading: { [key: string]: string } = {
+ 'en-US': "Product Categories",
+ 'es-US': "CategorÃas de productos",
+ 'fr-CA': "Catégories de produits",
+ };
+ return (
+ (productCategories.length > 0) && {productCategoriesHeading[locale]}
+
+ {productCategories.sort((a, b) => a.data!.categoryName[locale].localeCompare(b.data!.categoryName[locale])).map(productCategoryDto => {
+ let editToken = productCategoryDto.editToken;
+ return (
+
+ );
+ })}
+
+ );
+ case 'page-products-query':
+ let productsQuery = dynComponent as QueryComponent;
+ // console.log(JSON.stringify(productsQuery.jsonQuery));
+ let productsDto = (await getProductsUsingJsonQuery(JSON.stringify(productsQuery.jsonQuery)))!;
+ let products = productsDto.items;
+ let productsHeading: { [key: string]: string } = {
+ 'en-US': "Products",
+ 'es-US': "Productos",
+ 'fr-CA': "Produits",
+ };
+ return (
+ products.length > 0 && {productsHeading[locale]}
+
+ {products.sort((a, b) => a.data!.productName[locale].localeCompare(b.data!.productName[locale])).map(productDto => {
+ let editToken = productDto.editToken;
+ return (
+
+ );
+ })}
+
+ );
+ case 'page-product-category':
+ let productCategoryComponent = dynComponent as PageProductCategory;
+ let productCategoryId = productCategoryComponent.productCategory ? productCategoryComponent.productCategory[0] : '';
+ let productCategoryForComponent = productCategory || (await getProductCategoriesByIds(productCategoryId)).items[0].data!;
+ return (
+
+ )
+ case 'page-product':
+ let productComponent = dynComponent as PageProduct;
+ // let productId = productComponent.product ? productComponent.product[0] : '';
+ // let productDto = productDto || (await getProductsByIds(productId)).items[0];
+ return (
+
+ )
+ default:
+ return (
+ Unsupported or unknown dynamic component {dynComponent.schemaName}.
+ );
+ }
+})}
+
+
diff --git a/src/components/Content.astro b/src/components/Content.astro
new file mode 100644
index 0000000..adc6444
--- /dev/null
+++ b/src/components/Content.astro
@@ -0,0 +1,25 @@
+---
+interface Content {
+ editToken: string,
+ text: string,
+}
+
+const { editToken, text } = Astro.props;
+---
+
+
+
+
\ No newline at end of file
diff --git a/src/components/Disclaimers.astro b/src/components/Disclaimers.astro
new file mode 100644
index 0000000..7fe4206
--- /dev/null
+++ b/src/components/Disclaimers.astro
@@ -0,0 +1,16 @@
+---
+import type { Marketplace } from "../data/models/multis/Marketplace";
+import { getMarketplacesUsingJsonQuery } from "../data/api-client";
+import { renderMarkdown } from "../lib/rendering";
+
+interface Props {
+ locale: string,
+}
+
+const { locale } = Astro.props;
+
+const allMarketplacesDto = await getMarketplacesUsingJsonQuery();
+---
+{allMarketplacesDto.items.map((marketplaceDto) => (
+
+))}
\ No newline at end of file
diff --git a/src/components/Marketplace.astro b/src/components/Marketplace.astro
new file mode 100644
index 0000000..c314f8b
--- /dev/null
+++ b/src/components/Marketplace.astro
@@ -0,0 +1,115 @@
+---
+import type { Marketplace } from "../data/models/multis/Marketplace";
+import { getAssetById, getLocaleField } from "../data/api-client";
+import path from "node:path";
+import { renderMarkdown } from "../lib/rendering";
+
+interface Props {
+ marketplace: Marketplace,
+ editToken?: string,
+ locale: string,
+}
+
+const { marketplace, editToken, locale } = Astro.props;
+
+let marketplaceLogoImageAsset = await getAssetById(marketplace.logoImage[locale][0]);
+let marketplaceLogoImage = path.posix.join('/img',
+ marketplaceLogoImageAsset.links['content']
+ .href
+ .split('/')
+ .reverse()
+ .filter((_value, index, array) => index < (array.length - index - 2))
+ .reverse()
+ .join('/'));
+---
+
+
+
+ { marketplaceLogoImage &&
+ marketplaceLogoImageAsset.metadata['background-color']
+ ?
+
+ :
+
+ }
+
+ {marketplace.shortDescription && marketplace.shortDescription[locale] &&
}
+
+
+
+
+
+ {marketplace.longDescription && marketplace.longDescription[locale] &&
}
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/components/MarketplaceCard.astro b/src/components/MarketplaceCard.astro
new file mode 100644
index 0000000..89dfbbd
--- /dev/null
+++ b/src/components/MarketplaceCard.astro
@@ -0,0 +1,84 @@
+---
+import path from "node:path";
+import type { Marketplace } from "../data/models/multis/Marketplace";
+import { getAssetById } from "../data/api-client";
+
+interface Props {
+ editToken?: string,
+ marketplace: Marketplace,
+ locale: string,
+}
+
+const { editToken, marketplace, locale } = Astro.props;
+
+let marketplaceLogoImageAsset = await getAssetById(marketplace.logoImage[locale][0]);
+let marketplaceLogoImage = path.posix.join('/img',
+ marketplaceLogoImageAsset.links['content']
+ .href
+ .split('/')
+ .reverse()
+ .filter((_value, index, array) => index < (array.length - index - 2))
+ .reverse()
+ .join('/'));
+---
+
+
+
+ { marketplaceLogoImageAsset.metadata['background-color']
+ ?
+
+ :
+
+ }
+
+
+
diff --git a/src/components/Product.astro b/src/components/Product.astro
new file mode 100644
index 0000000..47c4daf
--- /dev/null
+++ b/src/components/Product.astro
@@ -0,0 +1,254 @@
+---
+import type { ContentsDto } from "../data/internals/ContentsDtoT";
+import type { Multilingual } from "../data/internals/MultilingualT";
+import type { Product } from "../data/models/multis/Product";
+import { getAssetById, getBrandsByIds, getMarketplacesByIds, getOffersByListingId } from "../data/api-client";
+import path from "node:path";
+import * as core from "../data/core/client";
+import { renderMarkdown } from "../lib/rendering";
+import { SCHEMAS } from "../data/models/schemas";
+import type { Listing } from "../data/models/multis/Listing";
+import type { Offer } from "../data/models/multis/Offer";
+import type { Marketplace } from "../data/models/multis/Marketplace";
+import ImageCarousel from "./ImageCarousel.astro";
+import type { AmazonMarketplaceConnection } from "../data/models/components/AmazonMarketplaceConnection";
+import { getSellersByIds } from "../data/api-client";
+import { DateTime } from "luxon";
+
+interface Props {
+ productDto: ContentsDto,
+ editToken?: string,
+ locale: string,
+}
+let category={ } as unknown as any;let site={ } as unknown as any
+const formatAsCurrency = (amount: number) => amount.toLocaleString(locale, { style: 'currency', currency: 'USD' });
+
+const { productDto, editToken, locale } = Astro.props;
+const product = productDto.items[0].data!;
+
+let amazonConnectorSchemaId = (await core.client.schemas.getSchema('product-marketplace-connection-amazon')).id;
+let brandDto = (await getBrandsByIds(product.brand.iv[0]));
+let possibleAmazonConnectors = product.marketplaceConnections.iv.filter((connection) => connection.connection.schemaId === amazonConnectorSchemaId);
+let amazonConnector = possibleAmazonConnectors.length > 0 ? possibleAmazonConnectors[0].connection as AmazonMarketplaceConnection : undefined;
+
+const listingsDto = await core.getContentsUsingJsonQuery(SCHEMAS.LISTINGS, JSON.stringify({
+ filter: {
+ path: "data.product.iv",
+ op: "eq",
+ value: productDto.items[0].id,
+ }
+}));
+const listingOffersDtos = listingsDto.items.map(async (listingDto) => await core.getContentsUsingJsonQuery(SCHEMAS.OFFERS, JSON.stringify({
+ filter: {
+ path: "data.listing.iv",
+ op: "eq",
+ value: listingDto.id
+ }
+})));
+
+// listingsDto.items.forEach(async (listing) => {
+// let marketplaceId = listing.data?.marketplace.iv[0]!;
+// const marketplaceDto = await core.getContentsByIds(SCHEMAS.MARKETPLACES, marketplaceId);
+// const marketplace = marketplaceDto.items[0].data!;
+// pushDisclaimer({ renderedText: renderMarkdown(marketplace.disclaimer[locale]), marketplaceEditToken: marketplaceDto.items[0].editToken! });
+// });
+
+let productListingImages: string[] = [];
+for (let listingDto of listingsDto.items) {
+ for (let assetId of listingDto.data?.marketplaceImages?.iv||[]) {
+ let assetDto = await getAssetById(assetId);
+ let assetUrl = path.posix.join('/img', assetDto.links['content']
+ .href
+ .split('/')
+ .reverse()
+ .filter((_value, index, array) => index < (array.length - index - 2))
+ .reverse()
+ .join('/'));
+ productListingImages.push(assetUrl);
+ }
+}
+
+let i18n: { [key: string]: Multilingual } = {
+ 'Brand:': {
+ 'en-US': "Brand:",
+ 'es-US': "Marca :",
+ 'fr-CA': "Marque :",
+ },
+ 'New from': {
+ 'en-US': "New from",
+ 'es-US': "Nuevo desde",
+ 'fr-CA': "Nouveau depuis",
+ },
+ 'Used from': {
+ 'en-US': "Used from",
+ 'es-US': "Usado desde",
+ 'fr-CA': "Utilisé depuis",
+ },
+ 'on': {
+ 'en-US': "on",
+ 'es-US': "en",
+ 'fr-CA': "sur",
+ },
+ 'Price information updated as of': {
+ 'en-US': "Price information updated as of",
+ 'es-US': "Información de precio actualizada a partir de",
+ 'fr-CA': "Information sur le prix mise à jour jusqu\'à ",
+ },
+ 'Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon.com at the time of purchase will apply to the purchase of this product.': {
+ 'en-US': "Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon.com at the time of purchase will apply to the purchase of this product.",
+ 'es-US': "Precios de los productos y disponibilidad son exactos a la fecha/hora indicada y están sujetos a cambios. Cualquier información sobre precios y disponibilidad que se muestre en Amazon.com al momento del pago se aplicará a la compra de este producto.",
+ 'fr-CA': "Les prix des produits et la disponibilité sont exacts à la date/heure indiquée et peuvent varier. Toute information sur les prix et la disponibilité affichés sur Amazon.com au moment de l'achat s'appliqueront à l'achat de ce produit."
+ }
+}
+
+---
+
+
+
+
+
+ { productListingImages.length == 1 &&
+
+ }
+ { productListingImages.length > 1 &&
+
{ return { src: productUrl }; } )||[]} />
+ }
+
+
+
+
+
\ No newline at end of file
diff --git a/src/components/ProductCard.astro b/src/components/ProductCard.astro
index 3132a0d..a3e22b3 100644
--- a/src/components/ProductCard.astro
+++ b/src/components/ProductCard.astro
@@ -1,26 +1,76 @@
---
-import { type Product } from '../data/products/product';
+// import { type Product } from '../data/api-models';
+import type { ContentDto } from "../data/internals/ContentDtoT";
+import type { Product } from "../data/models/multis/Product";
import CarouselSwiper from './CarouselSwiper';
import StarRating from './StarRating.astro';
+import * as core from "../data/core/client";
+import { SCHEMAS } from "../data/models/schemas";
+import type { Listing } from "../data/models/multis/Listing";
+import type { Offer } from "../data/models/multis/Offer";
+import { renderMarkdown } from "../lib/rendering";
+import type { Marketplace } from "../data/models/multis/Marketplace";
+import { getAssetById } from "../data/api-client";
+import path from "node:path";
interface Props {
- product?: Product,
+ productDto?: ContentDto,
+ locale: string,
+ editToken?: string,
}
-const { product } = Astro.props;
+const { productDto, locale, editToken } = Astro.props;
+const product = productDto?.data;
+
+const listingsDto = await core.getContentsUsingJsonQuery(SCHEMAS.LISTINGS, JSON.stringify({
+ filter: {
+ path: "data.product.iv",
+ op: "eq",
+ value: productDto?.id
+ }
+}));
+const listingOffersDtos = listingsDto.items.map(async (listingDto) => await core.getContentsUsingJsonQuery(SCHEMAS.OFFERS, JSON.stringify({
+ filter: {
+ path: "data.listing.iv",
+ op: "eq",
+ value: listingDto.id
+ }
+})));
+
+listingsDto.items.forEach(async (listing) => {
+ let marketplaceId = listing.data?.marketplace.iv[0]!;
+ const marketplaceDto = await core.getContentsByIds(SCHEMAS.MARKETPLACES, marketplaceId);
+ const marketplace = marketplaceDto.items[0].data!;
+ // disclaimers.pushDisclaimer({ renderedText: renderMarkdown(marketplace.disclaimer[locale]), marketplaceEditToken: marketplaceDto.items[0].editToken! });
+});
+
+let productListingImages: string[] = [];
+for (let listingDto of listingsDto.items) {
+ for (let assetId of listingDto.data?.marketplaceImages?.iv!||[]) {
+ let assetDto = await getAssetById(assetId);
+ let assetUrl = path.posix.join('/img', assetDto.links['content']
+ .href
+ .split('/')
+ .reverse()
+ .filter((_value, index, array) => index < (array.length - index - 2))
+ .reverse()
+ .join('/'));
+ productListingImages.push(assetUrl);
+ }
+}
---
-
-
+
+
- {product?.amazonProductDetails?.imageUrls !== undefined && product?.amazonProductDetails.imageUrls.length == 1 && }
- {product?.amazonProductDetails?.imageUrls !== undefined && product?.amazonProductDetails.imageUrls.length > 1 && { return { src: imageUrl }; })} /> }
+ {productListingImages.length === 1 && }
+ {productListingImages.length > 1 && { return { src: imageUrl }; })} /> }
- {product?.amazonProductDetails?.reviewCount} Reviews
+
- {product?.title||product?.amazonProductDetails?.title} →
+ {product?.productName[locale]} →
@@ -38,6 +88,7 @@ const { product } = Astro.props;
background-position: 100%;
transition: background-position 0.6s cubic-bezier(0.22, 1, 0.36, 1);
box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.1);
+ max-width: 29em;
}
.product-card > a {
width: 100%;
diff --git a/src/components/ProductCategory.astro b/src/components/ProductCategory.astro
new file mode 100644
index 0000000..8089c27
--- /dev/null
+++ b/src/components/ProductCategory.astro
@@ -0,0 +1,91 @@
+---
+import type { ProductCategory } from "../data/models/multis/ProductCategory";
+import { getAssetById, getLocaleField } from "../data/api-client";
+import path from "node:path";
+import { renderMarkdown } from "../lib/rendering";
+import Callout from "./Callout.astro";
+
+interface Props {
+ productCategory: ProductCategory,
+ editToken?: string,
+ locale: string,
+}
+const { productCategory, editToken, locale } = Astro.props;
+
+let productCategoryAsset = await getAssetById(productCategory.categoryImage[locale]);
+let productCategoryImageBackgroundPosition = productCategoryAsset.metadata['background-position'] || 'center';
+let productCategoryImage = path.posix.join('/img',
+ productCategoryAsset.links['content']
+ .href
+ .split('/')
+ .reverse()
+ .filter((_value, index, array) => index < (array.length - index - 2))
+ .reverse()
+ .join('/'));
+---
+
+
+
+
+
+ {getLocaleField(locale, productCategory.description) &&
}
+
+
+
+
+
\ No newline at end of file
diff --git a/src/components/ProductCategoryCard.astro b/src/components/ProductCategoryCard.astro
new file mode 100644
index 0000000..30443a7
--- /dev/null
+++ b/src/components/ProductCategoryCard.astro
@@ -0,0 +1,107 @@
+---
+import type { ProductCategory } from "../data/models/multis/ProductCategory";
+import { getAssetById } from '../data/api-client';
+import path from 'node:path';
+import { renderMarkdown } from '../lib/rendering';
+// import { BlocksRenderer, type BlocksContent } from '@strapi/blocks-react-renderer';
+
+interface Props {
+ editToken: string,
+ productCategory: ProductCategory
+ locale: string,
+}
+
+const { editToken, productCategory, locale } = Astro.props;
+
+let productCategoryAsset = await getAssetById(productCategory.categoryImage[locale]);
+let productCategoryImageBackgroundPosition = productCategoryAsset.metadata['background-position'] || 'center';
+let productCategoryImage = path.posix.join('/img',
+ productCategoryAsset.links['content']
+ .href
+ //The purpose of .split('/').reverse().filter(...2...).reverse().join('/') is to
+ //extract the last two directories from the end of the path, which we will
+ //use to form the path to the ../pages/img/[...imageLookup].astro handler, e.g.,
+ //in the form of `/img/${uuid}/${fileName}.${ext}`.
+ .split('/')
+ .reverse()
+ .filter((_value, index, array) => index < (array.length - index - 2))
+ .reverse()
+ .join('/'));
+
+const renderContext = { ...Astro.props, productCategoryImage }
+---
+
+
+
+
+
+
+
+ {productCategory.categoryName[locale]} →
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/components/Seller.astro b/src/components/Seller.astro
new file mode 100644
index 0000000..be99594
--- /dev/null
+++ b/src/components/Seller.astro
@@ -0,0 +1,114 @@
+---
+import type { Seller } from "../data/models/multis/Seller";
+import { getAssetById, getLocaleField } from "../data/api-client";
+import path from "node:path";
+import { renderMarkdown } from "../lib/rendering";
+
+interface Props {
+ seller: Seller,
+ editToken?: string,
+ locale: string,
+}
+
+const { seller, editToken, locale } = Astro.props;
+
+let sellerLogoImageAsset = seller.logoImage[locale] ? await getAssetById(seller.logoImage[locale][0]) : undefined;
+let sellerLogoImage = sellerLogoImageAsset ? path.posix.join('/img',
+ sellerLogoImageAsset.links['content']
+ .href
+ .split('/')
+ .reverse()
+ .filter((_value, index, array) => index < (array.length - index - 2))
+ .reverse()
+ .join('/')) : '';
+---
+
+
+
+ { sellerLogoImage ?
+ ( sellerLogoImage &&
+ sellerLogoImageAsset?.metadata['background-color']
+ ?
+
+ :
+
+ ) : seller.sellerName[locale]
+ }
+
+
+
+
+ {seller.sellerBio && seller.sellerBio[locale] &&
}
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/components/SellerCard.astro b/src/components/SellerCard.astro
new file mode 100644
index 0000000..f9a25d5
--- /dev/null
+++ b/src/components/SellerCard.astro
@@ -0,0 +1,87 @@
+---
+import path from "node:path";
+import type { Seller } from "../data/models/multis/Seller";
+import { getAssetById } from "../data/api-client";
+
+interface Props {
+ editToken?: string,
+ seller: Seller,
+ locale: string,
+}
+
+const { editToken, seller, locale } = Astro.props;
+
+let sellerLogoImageAsset = seller.logoImage[locale] ? await getAssetById(seller.logoImage[locale][0]) : undefined;
+let sellerLogoImage = sellerLogoImageAsset ? path.posix.join('/img',
+ sellerLogoImageAsset.links['content']
+ .href
+ .split('/')
+ .reverse()
+ .filter((_value, index, array) => index < (array.length - index - 2))
+ .reverse()
+ .join('/')) : '';
+---
+
+
+
+ { sellerLogoImage ?
+ (sellerLogoImageAsset?.metadata['background-color']
+ ?
+
+ :
+
+ ) :
+ seller.sellerName[locale]
+ }
+
+
+
diff --git a/src/components/carousel-swiper.css b/src/components/carousel-swiper.css
index 1a6ab0c..f15d538 100644
--- a/src/components/carousel-swiper.css
+++ b/src/components/carousel-swiper.css
@@ -35,6 +35,14 @@
/* background-color: coral; */
}
+.carousel-swiper .swiper-wrapper {
+ align-items: center !important;
+}
+
+.carousel-swiper .swiper-slide {
+ align-self: center !important;
+}
+
.carousel-swiper .swiper-wrapper::selection, .carousel-swiper .overlay::selection, .carousel-swiper .swiper-slide::selection, .carousel-swiper .carousel-img::selection {
background-color: transparent;
color: transparent;
@@ -61,15 +69,15 @@
background-color: rgba(35, 38, 45, 0.8);
/* filter: invert(1); */
mix-blend-mode: hard-light;
- height: 1.1em;
- width: 1.1em;
+ height: 0.7em;
+ width: 0.7em;
+ vertical-align: middle;
}
.carousel-swiper .swiper-pagination-bullet.swiper-pagination-bullet-active {
background-color: rgba(225, 20, 4, 0.8);
mix-blend-mode: hard-light;
- padding: 0.9em;
- margin-bottom: -0.3em;
+ padding: 0.75rem;
}
.carousel-swiper .swiper-button-next, .carousel-swiper .swiper-button-prev {
diff --git a/src/components/meta-social/Facebook.astro b/src/components/meta-social/Facebook.astro
new file mode 100644
index 0000000..890703d
--- /dev/null
+++ b/src/components/meta-social/Facebook.astro
@@ -0,0 +1,3 @@
+---
+
+---
\ No newline at end of file
diff --git a/src/config.ts b/src/config.ts
index 016a0ae..25231a6 100644
--- a/src/config.ts
+++ b/src/config.ts
@@ -11,27 +11,45 @@ const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename);
export interface ProcessEnv {
- AMAZON_PA_ACCESS_KEY?: string;
- AMAZON_PA_SECRET_KEY?: string;
- AMAZON_PA_HOST?: string;
- AMAZON_PA_REGION?: string;
- AMAZON_PA_PARTNER_TYPE?: string;
- AMAZON_PA_PARTNER_TAG?: string;
- GOOGLE_ADSENSE_ADS_TXT?: string;
- GOOGLE_ANALYTICS_GTAG?: string;
+ // AMAZON_PA_ACCESS_KEY?: string;
+ // AMAZON_PA_SECRET_KEY?: string;
+ // AMAZON_PA_HOST?: string;
+ // AMAZON_PA_REGION?: string;
+ // AMAZON_PA_PARTNER_TYPE?: string;
+ // AMAZON_PA_PARTNER_TAG?: string;
+ // GOOGLE_ADSENSE_ADS_TXT?: string;
+ // GOOGLE_ANALYTICS_GTAG?: string;
SITE_URL?: string;
+ STRAPI_URL?: string;
+ STRAPI_API_TOKEN?: string;
+ PORT?: string;
+ WEBHOOK_PORT?: string;
+ SQUIDEX_APP_NAME?: string;
+ SQUIDEX_CLIENT_ID?: string;
+ SQUIDEX_CLIENT_SECRET?: string;
+ SQUIDEX_ENVIRONMENT?: string;
+ SQUIDEX_PUBLIC_URL?: string;
}
export interface Config {
- AmazonProductAdvertisingAPIAccessKey: string;
- AmazonProductAdvertisingAPISecretKey: string;
- AmazonProductAdvertisingAPIHost: string;
- AmazonProductAdvertisingAPIRegion: string;
- AmazonProductAdvertisingAPIPartnerType: string;
- AmazonProductAdvertisingAPIPartnerTag: string;
- GoogleAdsenseAdsTxt: string;
- GoogleAnalyticsGTag: string;
+ // AmazonProductAdvertisingAPIAccessKey: string;
+ // AmazonProductAdvertisingAPISecretKey: string;
+ // AmazonProductAdvertisingAPIHost: string;
+ // AmazonProductAdvertisingAPIRegion: string;
+ // AmazonProductAdvertisingAPIPartnerType: string;
+ // AmazonProductAdvertisingAPIPartnerTag: string;
+ // GoogleAdsenseAdsTxt: string;
+ // GoogleAnalyticsGTag: string;
siteUrl: string;
+ strapiUrl: string;
+ strapiApiToken: string;
+ port: number;
+ webhookPort: number;
+ squidexAppName?: string;
+ squidexClientId?: string;
+ squidexClientSecret?: string;
+ squidexEnvironment?: string;
+ squidexPublicUrl?: string;
}
const env: ProcessEnv = {};
@@ -44,18 +62,42 @@ dotEnvConfig = dotenvExpand.expand({
processEnv: process.env as dotenvExpand.DotenvParseInput
});
-export const getAmazonProductAdvertisingAPIAccessKey = () => (env.AMAZON_PA_ACCESS_KEY||``).trim();
-export const getAmazonProductAdvertisingAPISecretKey = () => (env.AMAZON_PA_SECRET_KEY||``).trim();
-export const getAmazonProductAdvertisingAPIHost = () => (env.AMAZON_PA_HOST||``).trim();
-export const getAmazonProductAdvertisingAPIRegion = () => (env.AMAZON_PA_REGION||``).trim();
-export const getAmazonProductAdvertisingAPIPartnerType = () => (env.AMAZON_PA_PARTNER_TYPE||`Associate`).trim();
-export const getAmazonProductAdvertisingAPIPartnerTag = () => (env.AMAZON_PA_PARTNER_TAG||``).trim();
-export const getGoogleAnalyticsGtag = () => (env.GOOGLE_ANALYTICS_GTAG||``).trim();
-export const getGoogleAdsenseAdsTxt = () => (env.GOOGLE_ADSENSE_ADS_TXT||``).trim()||`google.com, pub-1234567890abcdef, DIRECT, fedcba9876543210`;
+// export const getAmazonProductAdvertisingAPIAccessKey = () => (env.AMAZON_PA_ACCESS_KEY||``).trim();
+// export const getAmazonProductAdvertisingAPISecretKey = () => (env.AMAZON_PA_SECRET_KEY||``).trim();
+// export const getAmazonProductAdvertisingAPIHost = () => (env.AMAZON_PA_HOST||``).trim();
+// export const getAmazonProductAdvertisingAPIRegion = () => (env.AMAZON_PA_REGION||``).trim();
+// export const getAmazonProductAdvertisingAPIPartnerType = () => (env.AMAZON_PA_PARTNER_TYPE||`Associate`).trim();
+// export const getAmazonProductAdvertisingAPIPartnerTag = () => (env.AMAZON_PA_PARTNER_TAG||``).trim();
+// export const getGoogleAnalyticsGtag = () => (env.GOOGLE_ANALYTICS_GTAG||``).trim();
+// export const getGoogleAdsenseAdsTxt = () => (env.GOOGLE_ADSENSE_ADS_TXT||``).trim()||`google.com, pub-1234567890abcdef, DIRECT, fedcba9876543210`;
export const getSiteUrl = () => trimSlashes(env.SITE_URL||`http://localhost`);
+export const getStrapiUrl = () => trimSlashes(env.STRAPI_URL||`http://localhost:1337`);
+export const getStrapiApiToken = () => trimSlashes(env.STRAPI_API_TOKEN!);
+export const getPort = () => env.PORT ? parseInt(env.PORT!) : 4321;
+export const getWebhookPort = () => env.WEBHOOK_PORT ? parseInt(env.WEBHOOK_PORT!) : 3210;
+export const getSquidexAppName = () => env.SQUIDEX_APP_NAME || undefined;
+export const getSquidexClientId = () => env.SQUIDEX_CLIENT_ID || undefined;
+export const getSquidexClientSecret = () => env.SQUIDEX_CLIENT_SECRET || undefined;
+export const getSquidexEnvironment = () => env.SQUIDEX_ENVIRONMENT || undefined;
+export const getSquidexPublicUrl = () => env.SQUIDEX_PUBLIC_URL || getSquidexEnvironment();
export const config: Config = {
- GoogleAnalyticsGTag: getGoogleAnalyticsGtag(),
- GoogleAdsenseAdsTxt: getGoogleAdsenseAdsTxt(),
+ // AmazonProductAdvertisingAPIAccessKey: getAmazonProductAdvertisingAPIAccessKey(),
+ // AmazonProductAdvertisingAPIHost: getAmazonProductAdvertisingAPIHost(),
+ // AmazonProductAdvertisingAPIPartnerTag: getAmazonProductAdvertisingAPIPartnerTag(),
+ // AmazonProductAdvertisingAPIPartnerType: getAmazonProductAdvertisingAPIPartnerType(),
+ // AmazonProductAdvertisingAPIRegion: getAmazonProductAdvertisingAPIRegion(),
+ // AmazonProductAdvertisingAPISecretKey: getAmazonProductAdvertisingAPISecretKey(),
+ // GoogleAnalyticsGTag: getGoogleAnalyticsGtag(),
+ // GoogleAdsenseAdsTxt: getGoogleAdsenseAdsTxt(),
siteUrl: getSiteUrl(),
+ strapiApiToken: getStrapiApiToken(),
+ strapiUrl: getStrapiUrl(),
+ port: getPort(),
+ webhookPort: getWebhookPort(),
+ squidexAppName: getSquidexAppName(),
+ squidexClientId: getSquidexClientId(),
+ squidexClientSecret: getSquidexClientSecret(),
+ squidexEnvironment: getSquidexEnvironment(),
+ squidexPublicUrl: getSquidexPublicUrl(),
};
diff --git a/src/data/api-client.ts b/src/data/api-client.ts
new file mode 100644
index 0000000..3551435
--- /dev/null
+++ b/src/data/api-client.ts
@@ -0,0 +1,323 @@
+import * as core from "./core/client";
+import { SCHEMAS } from "./models/schemas";
+import { getContents } from "./core/client.js";
+import { SupportedLocales, type Multilingual } from "./internals/MultilingualT";
+import type { Component } from "./internals/Component";
+import type { Brand } from "./models/multis/Brand";
+import type { Page } from "./models/multis/Page";
+import type { Site } from "./models/singles/Site";
+import type { SiteConfig } from "./models/singles/SiteConfig";
+import type { Marketplace } from "./models/multis/Marketplace";
+import type { ProductCategory } from "./models/multis/ProductCategory";
+import type { Product } from "./models/multis/Product";
+import type { Slug } from "./models/multis/Slug";
+import type { Seller } from "./models/multis/Seller";
+import type { NonMultilingual } from "./internals/NonMultilingualT";
+import type { ContentsDto } from "./internals/ContentsDtoT";
+import type { ContentData } from "@squidex/squidex/api/types/ContentData";
+import type { ContentDto } from "./internals/ContentDtoT";
+import type { Listing } from "./models/multis/Listing.js";
+import type { Offer } from "./models/multis/Offer.js";
+
+/** Generic helpers */
+
+export const getLocaleField = function (locale: SupportedLocales|string, field: Multilingual) {
+ if (field && field[locale.toString()])
+ return field[locale.toString()];
+}
+
+export function getPageComponentOfType(component: Component) {
+ return component as T;
+}
+
+/** Assets handlers */
+
+export const getAssetById = core.getAssetById;
+
+/** Brands handlers */
+
+export const getBrandsByIds = async (ids: string) =>
+ await core.getContentsByIds(SCHEMAS.BRANDS, ids);
+
+export const getBrandsByLangSlug = async (forLang: SupportedLocales|string, slug: string) =>
+ await core.getContentsByLangSlug(SCHEMAS.BRANDS, forLang, slug);
+
+export const getBrandsUsingJsonQuery = async (jsonQuery: string|undefined = undefined) =>
+ await core.getContentsUsingJsonQuery(SCHEMAS.BRANDS, jsonQuery);
+
+/** Marketplaces handlers */
+
+export const getMarketplacesByIds = async (ids: string) =>
+ await core.getContentsByIds(SCHEMAS.MARKETPLACES, ids);
+
+export const getMarketplacesByLangSlug = async (forLang: SupportedLocales|string, slug: string) =>
+ await core.getContentsByLangSlug(SCHEMAS.MARKETPLACES, forLang, slug);
+
+export const getMarketplacesUsingJsonQuery = async (jsonQuery: string|undefined = undefined) =>
+ await core.getContentsUsingJsonQuery(SCHEMAS.MARKETPLACES, jsonQuery);
+
+/** Marketplaces handlers */
+
+export const getSellersByIds = async (ids: string) =>
+ await core.getContentsByIds(SCHEMAS.SELLERS, ids);
+
+export const getSellersByLangSlug = async (forLang: SupportedLocales|string, slug: string) =>
+ await core.getContentsByLangSlug(SCHEMAS.SELLERS, forLang, slug);
+
+export const getSellersUsingJsonQuery = async (jsonQuery: string|undefined = undefined) =>
+ await core.getContentsUsingJsonQuery(SCHEMAS.SELLERS, jsonQuery);
+
+/** Pages handlers */
+
+export const getPagesByIds = async (ids: string) =>
+ await core.getContentsByIds(SCHEMAS.PAGES, ids);
+
+export const getPagesByLangSlug = async (forLang: SupportedLocales|string, slug: string) =>
+ await core.getContentsByLangSlug(SCHEMAS.PAGES, forLang, slug);
+
+export const getPagesUsingJsonQuery = async (jsonQuery: string|undefined = undefined) =>
+ await core.getContentsUsingJsonQuery(SCHEMAS.PAGES, jsonQuery);
+
+/** Product Categories handlers */
+
+export const getProductCategoriesByIds = async (ids: string) =>
+ await core.getContentsByIds(SCHEMAS.PRODUCT_CATEGORIES, ids);
+
+export const getProductCategoriesByLangSlug = async (forLang: SupportedLocales|string, slug: string) =>
+ await core.getContentsByLangSlug(SCHEMAS.PRODUCT_CATEGORIES, forLang, slug);
+
+export const getProductCategoriesUsingJsonQuery = async (jsonQuery: string|undefined = undefined) =>
+ await core.getContentsUsingJsonQuery(SCHEMAS.PRODUCT_CATEGORIES, jsonQuery);
+
+/** Products handlers */
+
+export const getProductsByIds = async (ids: string) =>
+ await core.getContentsByIds(SCHEMAS.PRODUCTS, ids);
+
+export const getProductsByLangSlug = async (forLang: SupportedLocales|string, slug: string) =>
+ await core.getContentsByLangSlug(SCHEMAS.PRODUCTS, forLang, slug);
+
+export const getProductsUsingJsonQuery = async (jsonQuery: string|undefined = undefined) =>
+ await core.getContentsUsingJsonQuery(SCHEMAS.PRODUCTS, jsonQuery);
+
+/** Product Listings handlers */
+
+export const getProductListingsByIds = async (ids: string) =>
+ await core.getContentsByIds(SCHEMAS.LISTINGS, ids);
+
+export const getProductListingsUsingJsonQuery = async (jsonQuery: string|undefined = undefined) =>
+ await core.getContentsUsingJsonQuery(SCHEMAS.LISTINGS, jsonQuery);
+
+/** Offers handlers */
+
+export const getOffersByListingId = async (listingId: string) =>
+ await core.getContentsUsingJsonQuery(SCHEMAS.OFFERS, JSON.stringify({
+ filter: {
+ path: "data.listing.iv",
+ op: "eq",
+ value: listingId
+ }
+ }));
+
+/** Slugs handlers */
+
+export const getAllSlugs = async () =>
+ await core.getContents(SCHEMAS.SLUGS);
+
+export const getSlugByLangSlug = async (forLang: SupportedLocales|string, slug: string) =>
+ await core.getContentsUsingJsonQuery(SCHEMAS.SLUGS, JSON.stringify({
+ filter: {
+ and: [
+ { path: `data.locale.iv`, op: 'eq', value: forLang },
+ { path: `data.localizedSlug.iv`, op: 'eq', value: slug }
+ ]
+ }
+ }));
+
+/** Site handlers */
+
+export const getSite = async () =>
+ await getContents(SCHEMAS.SITE);
+
+export const getSiteHomePage = async (site: Site) => {
+ if (site.homePage && site.homePage.iv.length > 0) {
+ let homePageIds: string[] = site!.homePage.iv;
+ let pageContents = getPagesByIds(homePageIds[0]);
+ return pageContents;
+ }
+ throw new Error('No site home page exists.');
+}
+
+export const getSiteConfig = async () =>
+ await getContents(SCHEMAS.SITE_CONFIG);
+
+export async function performSyncLocalizedSlugs(logFn = console.log) {
+ logFn("[sync-slugs] Begin sync localized slugs.")
+ let allSlugs = await getAllSlugs();
+ let allPages = await core.getContentsUsingJsonQuery(SCHEMAS.PAGES);
+ let allBrands = await core.getContentsUsingJsonQuery(SCHEMAS.BRANDS);
+ let allProducts = await core.getContentsUsingJsonQuery(SCHEMAS.PRODUCTS);
+ let allProductCategories = await core.getContentsUsingJsonQuery(SCHEMAS.PRODUCT_CATEGORIES);
+ let allSellers = await core.getContentsUsingJsonQuery(SCHEMAS.SELLERS);
+ let allMarketplaces = await core.getContentsUsingJsonQuery(SCHEMAS.MARKETPLACES);
+ const locales = Object.values(SupportedLocales);
+ const findSlugInMultilingual = function(slug: Slug, schema: SCHEMAS|string, contents: ContentsDto) {
+ for (let i = 0; i < contents.items.length; i++) {
+ let item = contents.items[i];
+ for (let l = 0; l < locales.length; l++) {
+ let locale = locales[l];
+ let testSlug = (item.data! as any).slug[locale]
+ if (testSlug) {
+ if (slug.locale.iv === locale
+ && slug.localizedSlug.iv === testSlug
+ && slug.referenceSchema.iv === schema
+ && slug.reference.iv.length === 1
+ && slug.reference.iv[0] === item.id) {
+ return item;
+ }
+ }
+ }
+ }
+ }
+ const findSlugInSlugs = function(locale: SupportedLocales|string, slug: Multilingual, schema: SCHEMAS|string, referenceId: string) {
+ for (let i = 0; i < allSlugs.items.length; i++) {
+ let testSlug = allSlugs.items[i].data!;
+ if (testSlug.localizedSlug.iv === slug[locale]
+ && testSlug.locale.iv === locale
+ && testSlug.referenceSchema.iv === schema
+ && testSlug.reference.iv.length === 1
+ && testSlug.reference.iv[0] === referenceId) {
+ return allSlugs.items[i];
+ }
+ }
+ }
+ let batchAddSlugsQueue: Slug[] = [];
+ allPages.items.forEach((page) => {
+ for (let l = 0; l < locales.length; l++) {
+ let locale = locales[l];
+ let foundSlugDto = findSlugInSlugs(locale, (page.data! as Page).slug, SCHEMAS.PAGES, page.id);
+ if (!foundSlugDto) {
+ //cache slug for page
+ batchAddSlugsQueue.push({
+ locale: { iv: locale },
+ localizedSlug: { iv: (page.data! as Page).slug[locale] },
+ referenceSchema: { iv: SCHEMAS.PAGES },
+ reference: { iv: [page.id] }
+ });
+ }
+ }
+ });
+ allBrands.items.forEach((brand) => {
+ for (let l = 0; l < locales.length; l++) {
+ let locale = locales[l];
+ let foundSlugDto = findSlugInSlugs(locale, (brand.data! as Brand).slug, SCHEMAS.BRANDS, brand.id);
+ if (!foundSlugDto) {
+ //cache slug for brand
+ batchAddSlugsQueue.push({
+ locale: { iv: locale },
+ localizedSlug: { iv: (brand.data! as Brand).slug[locale] },
+ referenceSchema: { iv: SCHEMAS.BRANDS },
+ reference: { iv: [brand.id] }
+ });
+ }
+ }
+ });
+ allProducts.items.forEach((product) => {
+ for (let l = 0; l < locales.length; l++) {
+ let locale = locales[l];
+ let foundSlugDto = findSlugInSlugs(locale, (product.data! as Product).slug, SCHEMAS.PRODUCTS, product.id);
+ if (!foundSlugDto) {
+ //cache slug for product
+ batchAddSlugsQueue.push({
+ locale: { iv: locale },
+ localizedSlug: { iv: (product.data! as Product).slug[locale] },
+ referenceSchema: { iv: SCHEMAS.PRODUCTS },
+ reference: { iv: [product.id] }
+ });
+ }
+ }
+ });
+ allProductCategories.items.forEach((productCategory) => {
+ for (let l = 0; l < locales.length; l++) {
+ let locale = locales[l];
+ let foundSlugDto = findSlugInSlugs(locale, (productCategory.data! as ProductCategory).slug, SCHEMAS.PRODUCT_CATEGORIES, productCategory.id);
+ if (!foundSlugDto) {
+ //cache slug for product category
+ batchAddSlugsQueue.push({
+ locale: { iv: locale },
+ localizedSlug: { iv: (productCategory.data! as ProductCategory).slug[locale] },
+ referenceSchema: { iv: SCHEMAS.PRODUCT_CATEGORIES },
+ reference: { iv: [productCategory.id] }
+ });
+ }
+ }
+ });
+ allSellers.items.forEach((seller) => {
+ for (let l = 0; l < locales.length; l++) {
+ let locale = locales[l];
+ let foundSlugDto = findSlugInSlugs(locale, (seller.data! as Seller).slug, SCHEMAS.SELLERS, seller.id);
+ if (!foundSlugDto) {
+ //cache slug for product category
+ batchAddSlugsQueue.push({
+ locale: { iv: locale },
+ localizedSlug: { iv: (seller.data! as Seller).slug[locale] },
+ referenceSchema: { iv: SCHEMAS.SELLERS },
+ reference: { iv: [seller.id] }
+ });
+ }
+ }
+ });
+ allMarketplaces.items.forEach((marketplace) => {
+ for (let l = 0; l < locales.length; l++) {
+ let locale = locales[l];
+ let foundSlugDto = findSlugInSlugs(locale, (marketplace.data! as Marketplace).slug, SCHEMAS.MARKETPLACES, marketplace.id);
+ if (!foundSlugDto) {
+ //cache slug for product category
+ batchAddSlugsQueue.push({
+ locale: { iv: locale },
+ localizedSlug: { iv: (marketplace.data! as Marketplace).slug[locale] },
+ referenceSchema: { iv: SCHEMAS.MARKETPLACES },
+ reference: { iv: [marketplace.id] }
+ });
+ }
+ }
+ });
+ let batchRemoveSlugsQueue: string[] = [];
+ allSlugs.items.forEach((slugDto) => {
+ const doesSlugExistInPages = findSlugInMultilingual(slugDto.data! as Slug, SCHEMAS.PAGES, allPages);
+ const doesSlugExistInBrands = findSlugInMultilingual(slugDto.data! as Slug, SCHEMAS.BRANDS, allBrands);
+ const doesSlugExistInProducts = findSlugInMultilingual(slugDto.data! as Slug, SCHEMAS.PRODUCTS, allProducts);
+ const doesSlugExistInProductCategories = findSlugInMultilingual(slugDto.data! as Slug, SCHEMAS.PRODUCT_CATEGORIES, allProductCategories);
+ const doesSlugExistInSellers = findSlugInMultilingual(slugDto.data! as Slug, SCHEMAS.SELLERS, allSellers);
+ const doesSlugExistInMarketplaces = findSlugInMultilingual(slugDto.data! as Slug, SCHEMAS.MARKETPLACES, allMarketplaces);
+ const doesSlugExistElsewhere = doesSlugExistInPages||doesSlugExistInBrands||doesSlugExistInProducts||doesSlugExistInProductCategories||doesSlugExistInSellers||doesSlugExistInMarketplaces;
+ const shouldPruneOrphanSlug = !doesSlugExistElsewhere;
+ if (shouldPruneOrphanSlug) {
+ //prune orphan slugs from cache
+ batchRemoveSlugsQueue.push(slugDto.id);
+ }
+ });
+ const MAX_TIME_TO_POST_SLUGS = 60;//s
+ logFn("[sync-slugs] Add", batchAddSlugsQueue.length, "slugs");
+ let bulkAddResult = await core.client.contents.postContents(SCHEMAS.SLUGS, { datas: batchAddSlugsQueue as unknown as ContentData[], publish: true }, { timeoutInSeconds: MAX_TIME_TO_POST_SLUGS });
+ logFn("[sync-slugs] Remove by id", batchRemoveSlugsQueue.length, "slugs");
+ batchRemoveSlugsQueue.forEach(async (removeId) => {
+ await core.client.contents.deleteContent(SCHEMAS.SLUGS, removeId)
+ })
+ logFn("[sync-slugs] Finish sync localized slugs.")
+}
+
+export class AmazonPAApiSyncClient {
+ public async getSyncProducts () {
+ let amazonSlug = `${SupportedLocales["en-US"]}/amazon`;
+ let amazonMarketplaceId = (await core.getContentsByLangSlug(SCHEMAS.MARKETPLACES, SupportedLocales['en-US'], amazonSlug)).items[0].id;
+ let allProducts = await core.getContentsUsingJsonQuery(SCHEMAS.PRODUCTS);
+ return allProducts.items.filter((product) => product.data?.marketplaceConnections.iv[0].marketplace[0] === amazonMarketplaceId);
+ };
+ public async getLastSync (productId: string) {
+
+ }
+}
+
+
+// console.log(await (new AmazonPAApiSyncClient()).getSyncProducts());
\ No newline at end of file
diff --git a/src/data/core/client.ts b/src/data/core/client.ts
new file mode 100644
index 0000000..b56677a
--- /dev/null
+++ b/src/data/core/client.ts
@@ -0,0 +1,41 @@
+import { config } from "../../config.js";
+import { SquidexClient } from "@squidex/squidex";
+import type { ContentsDto } from "../internals/ContentsDtoT.js";
+import type { SupportedLocales } from "../internals/MultilingualT.js";
+import type { SCHEMAS } from "../models/schemas.js";
+
+export const client = new SquidexClient({
+ appName: config.squidexAppName!,
+ clientId: config.squidexClientId!,
+ clientSecret: config.squidexClientSecret!,
+ environment: config.squidexEnvironment!,
+ tokenStore: new SquidexClient.InMemoryTokenStore(),
+ // tokenStore: new SquidexStorageTokenStore() // Keep the tokens in the local store.
+ // tokenStore: new SquidexStorageTokenStore(sessionStorage, "CustomKey")
+});
+
+export const TIMEOUT_IN_SECONDS = 10;
+
+/** Asset Handling */
+
+export const getAssetById = async (assetId: string) => (
+ await client.assets.getAsset(assetId, {timeoutInSeconds: TIMEOUT_IN_SECONDS})
+);
+
+/** Generic Content Handling */
+
+export const getContents = async (schema: SCHEMAS|string) => (
+ await client.contents.getContents(schema, { }, { timeoutInSeconds: TIMEOUT_IN_SECONDS })
+) as ContentsDto;
+
+export const getContentsByIds = async (schema: SCHEMAS|string, ids: string) => (
+ await client.contents.getContents(schema, { ids }, { timeoutInSeconds: TIMEOUT_IN_SECONDS })
+) as ContentsDto;
+
+export const getContentsUsingJsonQuery = async (schema: SCHEMAS|string, jsonQuery: string|undefined = undefined) => (
+ await client.contents.getContents(schema, { q: jsonQuery }, { timeoutInSeconds: TIMEOUT_IN_SECONDS })
+) as ContentsDto;
+
+export const getContentsByLangSlug = async (schema: SCHEMAS|string, forLang: SupportedLocales|string, slug: string) => (
+ await getContentsUsingJsonQuery(schema, JSON.stringify({ filter: { path: `data.slug.${forLang}`, op: 'eq', value: slug }}))
+);
\ No newline at end of file
diff --git a/src/data/disabled-rich-text.ts b/src/data/disabled-rich-text.ts
new file mode 100644
index 0000000..005d70a
--- /dev/null
+++ b/src/data/disabled-rich-text.ts
@@ -0,0 +1,43 @@
+//Changed my mind on using this RichText junk
+
+// export enum RichTextNodeType {
+// doc = 'doc',
+// text = 'text',
+// link = 'link',
+// }
+
+// export interface RichTextBase {
+// type: RichTextNodeType,
+// }
+
+// export class RichText implements RichTextBase {
+// public type: RichTextNodeType;
+// public text: string;
+// public marks?: []
+// public constructor(text: string) {
+// this.type = RichTextNodeType.text;
+// this.text = text;
+// }
+// }
+
+// export class RichTextDoc implements RichTextBase {
+// public type: RichTextNodeType;
+// public content: RichTextBase[];
+// public constructor(content: RichTextBase[] = []) {
+// this.type = RichTextNodeType.doc;
+// this.content = content;
+// }
+// }
+
+// export class RichTextParagraph implements RichTextBase {
+// public type: RichTextNodeType;
+// public content: RichTextBase[];
+// public constructor(content: RichTextBase[] = []) {
+// this.type = RichTextNodeType.doc;
+// this.content = content;
+// }
+// }
+
+// export interface PageNotFoundError extends Error {
+// results: any,
+// }
diff --git a/src/data/internals/Component.ts b/src/data/internals/Component.ts
new file mode 100644
index 0000000..3ecd708
--- /dev/null
+++ b/src/data/internals/Component.ts
@@ -0,0 +1,4 @@
+export interface Component {
+ schemaId?: string,
+ schemaName?: string,
+}
\ No newline at end of file
diff --git a/src/data/internals/ContentDtoT.ts b/src/data/internals/ContentDtoT.ts
new file mode 100644
index 0000000..0814628
--- /dev/null
+++ b/src/data/internals/ContentDtoT.ts
@@ -0,0 +1,5 @@
+import { Squidex } from "@squidex/squidex";
+
+export interface ContentDto extends Squidex.ContentDto {
+ data?: T;
+}
\ No newline at end of file
diff --git a/src/data/internals/ContentsDtoT.ts b/src/data/internals/ContentsDtoT.ts
new file mode 100644
index 0000000..25cd9ca
--- /dev/null
+++ b/src/data/internals/ContentsDtoT.ts
@@ -0,0 +1,7 @@
+import type { ContentDto } from "./ContentDtoT";
+import { Squidex } from "@squidex/squidex";
+
+export interface ContentsDto extends Squidex.ContentsDto {
+ /** The generic content items. */
+ items: ContentDto[];
+}
\ No newline at end of file
diff --git a/src/data/internals/MultilingualT.ts b/src/data/internals/MultilingualT.ts
new file mode 100644
index 0000000..f6fa7b2
--- /dev/null
+++ b/src/data/internals/MultilingualT.ts
@@ -0,0 +1,12 @@
+export enum SupportedLocales {
+ 'en-US' = 'en-US',
+ 'es-US' = 'es-US',
+ 'fr-CA' = 'fr-CA',
+};
+
+export interface Multilingual {
+ [key: string]: T,
+ 'en-US': T,
+ 'es-US': T,
+ 'fr-CA': T,
+};
\ No newline at end of file
diff --git a/src/data/internals/NonMultilingualT.ts b/src/data/internals/NonMultilingualT.ts
new file mode 100644
index 0000000..1105571
--- /dev/null
+++ b/src/data/internals/NonMultilingualT.ts
@@ -0,0 +1,4 @@
+export interface NonMultilingual {
+ [key: string]: T,
+ iv: T,
+}
diff --git a/src/data/models/components/AmazonMarketplaceConnection.ts b/src/data/models/components/AmazonMarketplaceConnection.ts
new file mode 100644
index 0000000..b8c3c3a
--- /dev/null
+++ b/src/data/models/components/AmazonMarketplaceConnection.ts
@@ -0,0 +1,7 @@
+import type { NonMultilingual } from "../../internals/NonMultilingualT";
+import type { MarketplaceConnection } from "./MarketplaceConnection";
+
+export interface AmazonMarketplaceConnection extends MarketplaceConnection {
+ asin: string,
+ siteStripeUrl: string,
+}
\ No newline at end of file
diff --git a/src/data/models/components/AmazonPAConfig.ts b/src/data/models/components/AmazonPAConfig.ts
new file mode 100644
index 0000000..160dbec
--- /dev/null
+++ b/src/data/models/components/AmazonPAConfig.ts
@@ -0,0 +1,13 @@
+import type { Component } from "../../internals/Component";
+
+export interface AmazonPAConfig extends Component {
+ schemaId: string,
+ accessKey: string,
+ secretKey: string,
+ partnerType: string,
+ partnerTag: string,
+ marketplace: string,
+ service: string,
+ host: string,
+ region: string,
+};
\ No newline at end of file
diff --git a/src/data/models/components/AmazonPAGetItemsRequest.ts b/src/data/models/components/AmazonPAGetItemsRequest.ts
new file mode 100644
index 0000000..71d2255
--- /dev/null
+++ b/src/data/models/components/AmazonPAGetItemsRequest.ts
@@ -0,0 +1,5 @@
+import type { Component } from "../../internals/Component";
+
+export interface AmazonPAGetItemsRequest extends Component {
+ ItemIds: { ItemId: string }[],
+}
\ No newline at end of file
diff --git a/src/data/models/components/GoogleAdSense.ts b/src/data/models/components/GoogleAdSense.ts
new file mode 100644
index 0000000..c535351
--- /dev/null
+++ b/src/data/models/components/GoogleAdSense.ts
@@ -0,0 +1,5 @@
+import type { Component } from "../../internals/Component";
+
+export interface GoogleAdSense extends Component {
+ adsTxt: string,
+};
\ No newline at end of file
diff --git a/src/data/models/components/GoogleAnalytics.ts b/src/data/models/components/GoogleAnalytics.ts
new file mode 100644
index 0000000..f77b75e
--- /dev/null
+++ b/src/data/models/components/GoogleAnalytics.ts
@@ -0,0 +1,5 @@
+import type { Component } from "../../internals/Component";
+
+export interface GoogleAnalytics extends Component {
+ gTag: string,
+};
\ No newline at end of file
diff --git a/src/data/models/components/MarketplaceConnection.ts b/src/data/models/components/MarketplaceConnection.ts
new file mode 100644
index 0000000..54bc044
--- /dev/null
+++ b/src/data/models/components/MarketplaceConnection.ts
@@ -0,0 +1,3 @@
+import type { Component } from "../../internals/Component";
+
+export interface MarketplaceConnection extends Component {}
diff --git a/src/data/models/components/PageBrand.ts b/src/data/models/components/PageBrand.ts
new file mode 100644
index 0000000..e53d027
--- /dev/null
+++ b/src/data/models/components/PageBrand.ts
@@ -0,0 +1,5 @@
+import type { Component } from "../../internals/Component";
+
+export interface PageBrand extends Component {
+ brand: string[],
+}
\ No newline at end of file
diff --git a/src/data/models/components/PageCallout.ts b/src/data/models/components/PageCallout.ts
new file mode 100644
index 0000000..d6ea6d9
--- /dev/null
+++ b/src/data/models/components/PageCallout.ts
@@ -0,0 +1,6 @@
+import type { Component } from "../../internals/Component";
+import type { Multilingual } from "../../internals/MultilingualT";
+
+export interface PageCallout extends Component {
+ text: string,
+}
\ No newline at end of file
diff --git a/src/data/models/components/PageContent.ts b/src/data/models/components/PageContent.ts
new file mode 100644
index 0000000..402e34a
--- /dev/null
+++ b/src/data/models/components/PageContent.ts
@@ -0,0 +1,5 @@
+import type { Component } from "../../internals/Component";
+
+export interface PageContent extends Component {
+ content: string,
+}
\ No newline at end of file
diff --git a/src/data/models/components/PageMarketplace.ts b/src/data/models/components/PageMarketplace.ts
new file mode 100644
index 0000000..03c9094
--- /dev/null
+++ b/src/data/models/components/PageMarketplace.ts
@@ -0,0 +1,5 @@
+import type { Component } from "../../internals/Component";
+
+export interface PageMarketplace extends Component {
+ marketplace: string[],
+}
\ No newline at end of file
diff --git a/src/data/models/components/PageProduct.ts b/src/data/models/components/PageProduct.ts
new file mode 100644
index 0000000..9a0462c
--- /dev/null
+++ b/src/data/models/components/PageProduct.ts
@@ -0,0 +1,5 @@
+import type { Component } from "../../internals/Component";
+
+export interface PageProduct extends Component {
+ product: string[],
+}
\ No newline at end of file
diff --git a/src/data/models/components/PageProductCategory.ts b/src/data/models/components/PageProductCategory.ts
new file mode 100644
index 0000000..319d898
--- /dev/null
+++ b/src/data/models/components/PageProductCategory.ts
@@ -0,0 +1,5 @@
+import type { Component } from "../../internals/Component";
+
+export interface PageProductCategory extends Component {
+ productCategory: string[],
+}
\ No newline at end of file
diff --git a/src/data/models/components/PageSeller.ts b/src/data/models/components/PageSeller.ts
new file mode 100644
index 0000000..f28c2aa
--- /dev/null
+++ b/src/data/models/components/PageSeller.ts
@@ -0,0 +1,5 @@
+import type { Component } from "../../internals/Component";
+
+export interface PageSeller extends Component {
+ seller: string[],
+}
\ No newline at end of file
diff --git a/src/data/models/components/PageSeo.ts b/src/data/models/components/PageSeo.ts
new file mode 100644
index 0000000..1d86c63
--- /dev/null
+++ b/src/data/models/components/PageSeo.ts
@@ -0,0 +1,9 @@
+import type { Component } from "../../internals/Component";
+
+export interface PageSeo extends Component {
+ metaTitle: string,
+ metaDescription: string,
+ metaImage: string,
+ keywords: string,
+ metaSocial: [],
+}
\ No newline at end of file
diff --git a/src/data/models/components/ProductMarketplaceConnection.ts b/src/data/models/components/ProductMarketplaceConnection.ts
new file mode 100644
index 0000000..828dc80
--- /dev/null
+++ b/src/data/models/components/ProductMarketplaceConnection.ts
@@ -0,0 +1,8 @@
+import type { Component } from "../../internals/Component";
+import type { NonMultilingual } from "../../internals/NonMultilingualT";
+import type { MarketplaceConnection } from "./MarketplaceConnection";
+
+export interface ProductMarketplaceConnection extends Component {
+ marketplace: string[],
+ connection: MarketplaceConnection,
+}
\ No newline at end of file
diff --git a/src/data/models/components/QueryComponent.ts b/src/data/models/components/QueryComponent.ts
new file mode 100644
index 0000000..fa04fcd
--- /dev/null
+++ b/src/data/models/components/QueryComponent.ts
@@ -0,0 +1,5 @@
+import type { Component } from "../../internals/Component";
+
+export interface QueryComponent extends Component {
+ jsonQuery?: any,
+}
\ No newline at end of file
diff --git a/src/data/models/multis/AmazonGetItem.ts b/src/data/models/multis/AmazonGetItem.ts
new file mode 100644
index 0000000..119aa6b
--- /dev/null
+++ b/src/data/models/multis/AmazonGetItem.ts
@@ -0,0 +1,9 @@
+import type { AmazonPAGetItemsRequest } from "../components/AmazonPAGetItemsRequest";
+import type { GetItemsResponse } from "amazon-pa-api5-node-ts";
+import type { NonMultilingual } from "../../internals/NonMultilingualT";
+
+export interface AmazonGetItem {
+ requestDate: NonMultilingual,
+ getItemsRequest: NonMultilingual,
+ apiResponse: NonMultilingual,
+}
\ No newline at end of file
diff --git a/src/data/models/multis/Brand.ts b/src/data/models/multis/Brand.ts
new file mode 100644
index 0000000..c02bd5d
--- /dev/null
+++ b/src/data/models/multis/Brand.ts
@@ -0,0 +1,11 @@
+import type { Multilingual } from "../../internals/MultilingualT";
+import type { NonMultilingual } from "../../internals/NonMultilingualT";
+
+export interface Brand {
+ brandName: Multilingual,
+ logoImage?: Multilingual,
+ slug: Multilingual,
+ shortDescription?: Multilingual,
+ longDescription?: Multilingual,
+ brandPage?: NonMultilingual,
+}
\ No newline at end of file
diff --git a/src/data/models/multis/Listing.ts b/src/data/models/multis/Listing.ts
new file mode 100644
index 0000000..2a111dd
--- /dev/null
+++ b/src/data/models/multis/Listing.ts
@@ -0,0 +1,9 @@
+import type { Multilingual } from "../../internals/MultilingualT";
+import type { NonMultilingual } from "../../internals/NonMultilingualT";
+
+export interface Listing {
+ product: NonMultilingual,
+ marketplace: NonMultilingual,
+ marketplaceDescription: Multilingual,
+ marketplaceImages: NonMultilingual,
+}
\ No newline at end of file
diff --git a/src/data/models/multis/Marketplace.ts b/src/data/models/multis/Marketplace.ts
new file mode 100644
index 0000000..7ff3b8b
--- /dev/null
+++ b/src/data/models/multis/Marketplace.ts
@@ -0,0 +1,12 @@
+import type { Multilingual } from "../../internals/MultilingualT";
+import type { NonMultilingual } from "../../internals/NonMultilingualT";
+
+export interface Marketplace {
+ marketplaceName: Multilingual,
+ slug: Multilingual,
+ logoImage: Multilingual,
+ marketplacePage: NonMultilingual,
+ disclaimer: Multilingual,
+ shortDescription: Multilingual,
+ longDescription: Multilingual,
+}
\ No newline at end of file
diff --git a/src/data/models/multis/Offer.ts b/src/data/models/multis/Offer.ts
new file mode 100644
index 0000000..8970a72
--- /dev/null
+++ b/src/data/models/multis/Offer.ts
@@ -0,0 +1,9 @@
+import type { NonMultilingual } from "../../internals/NonMultilingualT";
+
+export interface Offer {
+ offerDate: NonMultilingual,
+ seller: NonMultilingual,
+ listing: NonMultilingual,
+ newPrice: NonMultilingual,
+ usedPrice: NonMultilingual,
+}
diff --git a/src/data/models/multis/Page.ts b/src/data/models/multis/Page.ts
new file mode 100644
index 0000000..c655b63
--- /dev/null
+++ b/src/data/models/multis/Page.ts
@@ -0,0 +1,12 @@
+import type { PageSeo } from "../components/PageSeo";
+import type { Multilingual } from "../../internals/MultilingualT";
+import type { NonMultilingual } from "../../internals/NonMultilingualT";
+import type { Component } from "../../internals/Component";
+
+export interface Page {
+ title: Multilingual,
+ slug: Multilingual,
+ content: Multilingual,
+ seo: Multilingual,
+ parentPage: NonMultilingual,
+}
\ No newline at end of file
diff --git a/src/data/models/multis/Product.ts b/src/data/models/multis/Product.ts
new file mode 100644
index 0000000..69145cb
--- /dev/null
+++ b/src/data/models/multis/Product.ts
@@ -0,0 +1,14 @@
+import type { Multilingual } from "../../internals/MultilingualT";
+import type { NonMultilingual } from "../../internals/NonMultilingualT";
+import type { ProductMarketplaceConnection } from "../components/ProductMarketplaceConnection";
+
+export interface Product {
+ productName: Multilingual,
+ slug: Multilingual,
+ brand: NonMultilingual,
+ categories: NonMultilingual,
+ tags: Multilingual,
+ description: Multilingual,
+ marketplaceConnections: NonMultilingual,
+ productPage?: NonMultilingual,
+}
\ No newline at end of file
diff --git a/src/data/models/multis/ProductCategory.ts b/src/data/models/multis/ProductCategory.ts
new file mode 100644
index 0000000..b2f38e4
--- /dev/null
+++ b/src/data/models/multis/ProductCategory.ts
@@ -0,0 +1,10 @@
+import type { Multilingual } from "../../internals/MultilingualT";
+import type { NonMultilingual } from "../../internals/NonMultilingualT";
+
+export interface ProductCategory {
+ categoryName: Multilingual,
+ slug: Multilingual,
+ categoryImage: Multilingual,
+ description: Multilingual,
+ parentCategory: NonMultilingual,
+}
\ No newline at end of file
diff --git a/src/data/models/multis/Seller.ts b/src/data/models/multis/Seller.ts
new file mode 100644
index 0000000..f4d1105
--- /dev/null
+++ b/src/data/models/multis/Seller.ts
@@ -0,0 +1,8 @@
+import type { Multilingual } from "../../internals/MultilingualT";
+
+export interface Seller {
+ sellerName: Multilingual,
+ sellerBio: Multilingual,
+ slug: Multilingual,
+ logoImage: Multilingual,
+}
\ No newline at end of file
diff --git a/src/data/models/multis/Slug.ts b/src/data/models/multis/Slug.ts
new file mode 100644
index 0000000..e66a009
--- /dev/null
+++ b/src/data/models/multis/Slug.ts
@@ -0,0 +1,10 @@
+import type { SCHEMAS } from "../schemas";
+import type { SupportedLocales } from "../../internals/MultilingualT";
+import type { NonMultilingual } from "../../internals/NonMultilingualT";
+
+export interface Slug {
+ locale: NonMultilingual,
+ localizedSlug: NonMultilingual,
+ referenceSchema: NonMultilingual,
+ reference: NonMultilingual,
+}
\ No newline at end of file
diff --git a/src/data/models/schemas.ts b/src/data/models/schemas.ts
new file mode 100644
index 0000000..e41411f
--- /dev/null
+++ b/src/data/models/schemas.ts
@@ -0,0 +1,15 @@
+export const enum SCHEMAS {
+ AMAZON_GET_ITEMS = 'amazon-get-items',
+ BRANDS = 'brands',
+ PAGES = 'pages',
+ LISTINGS = 'listings',
+ MARKETPLACES = 'marketplaces',
+ OFFERS = 'offers',
+ PRODUCT_CATEGORIES = 'product-categories',
+ PRODUCTS = 'products',
+ SOCIAL_NETWORKS = 'social-networks',
+ SELLERS = 'sellers',
+ SITE = 'site',
+ SITE_CONFIG = 'site-config',
+ SLUGS = 'slugs',
+};
\ No newline at end of file
diff --git a/src/data/models/singles/Site.ts b/src/data/models/singles/Site.ts
new file mode 100644
index 0000000..8588f46
--- /dev/null
+++ b/src/data/models/singles/Site.ts
@@ -0,0 +1,11 @@
+import type { Multilingual } from "../../internals/MultilingualT";
+import type { NonMultilingual } from "../../internals/NonMultilingualT";
+
+export interface Site {
+ siteName: Multilingual,
+ siteUrl: Multilingual,
+ homePage: NonMultilingual,
+ siteBrand: Multilingual,
+ copyright: Multilingual,
+ footerLinks: Multilingual,
+}
\ No newline at end of file
diff --git a/src/data/models/singles/SiteConfig.ts b/src/data/models/singles/SiteConfig.ts
new file mode 100644
index 0000000..b219533
--- /dev/null
+++ b/src/data/models/singles/SiteConfig.ts
@@ -0,0 +1,10 @@
+import type { NonMultilingual } from "../../internals/NonMultilingualT";
+import type { AmazonPAConfig } from "../components/AmazonPAConfig";
+import type { GoogleAdSense } from "../components/GoogleAdSense";
+import type { GoogleAnalytics } from "../components/GoogleAnalytics";
+
+export interface SiteConfig {
+ amazonPAAPIConfig: NonMultilingual,
+ googleAdSense: NonMultilingual,
+ googleAnalytics: NonMultilingual,
+}
\ No newline at end of file
diff --git a/src/env.d.ts b/src/env.d.ts
index f964fe0..32e4e18 100644
--- a/src/env.d.ts
+++ b/src/env.d.ts
@@ -1 +1,14 @@
+///
///
+interface ImportMetaEnv {
+ readonly SITE_URL?: string;
+ readonly STRAPI_URL?: string;
+ readonly STRAPI_API_TOKEN?: string;
+ readonly PORT?: number;
+ readonly WEBHOOK_PORT?: number;
+ readonly SQUIDEX_APP_NAME?: string;
+ readonly SQUIDEX_CLIENT_ID?: string;
+ readonly SQUIDEX_CLIENT_SECRET?: string;
+ readonly SQUIDEX_ENVIRONMENT?: string;
+ readonly SQUIDEX_PUBLIC_URL?: string;
+}
\ No newline at end of file
diff --git a/src/layouts/Layout.astro b/src/layouts/Layout.astro
index 5262d85..898102f 100644
--- a/src/layouts/Layout.astro
+++ b/src/layouts/Layout.astro
@@ -2,25 +2,65 @@
import "bootstrap/dist/css/bootstrap.min.css";
import bootstrap from "bootstrap/dist/js/bootstrap.min.js?url";
import { config } from "../config";
+import { getLocaleField } from "../data/api-client";
+import type { Page } from "../data/models/multis/Page";
+import type { Site } from "../data/models/singles/Site";
+import type { SiteConfig } from "../data/models/singles/SiteConfig";
+import { interpolateString, renderMarkdown } from '../lib/rendering';
interface Props {
+ locale: string;
+ page: Page;
title: string;
+ site: Site;
+ siteEditToken: string;
+ shouldEmbedSquidexSDK: boolean;
+ siteConfig: SiteConfig,
}
-const { title } = Astro.props;
-const gTag = config.GoogleAnalyticsGTag;
+const { locale, page, site, siteConfig, siteEditToken, title, shouldEmbedSquidexSDK } = Astro.props;
+
+const lang = locale.substring(0, locale.indexOf('-'));
+const renderContext = { ...Astro.props, lang, shouldEmbedSquidexSDK };
+
+//template adjustment for site to work with layers of squidEx
+const cssFixSquidex = `
+
+`.replace(/\s*/g, '');
---
-
+
-
-
+ {title ? `${title} - ${getLocaleField(locale, site.siteName)!}` : `${site.siteName}`}
+
-
- {title}
+
@@ -31,7 +71,7 @@ const gTag = config.GoogleAnalyticsGTag;
-
+
+ )}
+ .callout p {
+ display: inline;
+ margin-bottom: 0rem;
+ }
+ .squidex-overlay-border {
+ transition: 700ms;
+ /*background: rgba(0, 119, 255, 0.25) !important;*/
+ background: linear-gradient(rgba(0, 119, 255, 0.4), rgba(0, 119, 255, 0.1)) !important;
+ padding: 1em !important;
+ border: 0.5em solid rgba(0, 119, 255, 0.75) !important;
+ border-radius: 8px !important;
+ }
+ .squidex-overlay-toolbar {
+ border-radius: 8px !important;
+ }
+ .squidex-overlay-border:hover {
+ border-radius: 8rem;
+ }
+ .squidex-overlay-schema {
+ background: linear-gradient(rgba(var(--accent-dark), 90%), rgba(var(--accent-dark), 33%)) !important;
+ border-top-left-radius: 5px !important;
+ border-bottom-left-radius: 5px !important;
+ border-bottom: 5px;
+ padding: 5rem;
+ height: unset !important;
+ }
+ .squidex-overlay-links {
+ background: linear-gradient(rgba(35, 38, 45, 90%), rgba(35, 38, 45, 33%)) !important;
+ background-color: unset !important;
+ border-top-right-radius: 5px !important;
+ height: unset !important;
+ border-bottom-right-radius: 5px !important;
+ }
+ .squidex-overlay, .squidex-overlay-schema, .squidex-overlay-links {
+ font-family: "Urbanist", system-ui, sans-serif !important;
+ font-size: 18pt !important;
+ }
+ .squidex-overlay-schema, .squidex-overlay-border:hover {
+ /*background: linear-gradient(rgba(var(--accent-dark), 66%), rgba(var(--accent-dark), 33%)) !important;*/
+ }
+ .squidex-iframe, .squidex-iframe iframe {
+ border-radius: 0.5em !important;
+ }
+
\ No newline at end of file
diff --git a/src/lib/accept-language-parser.ts b/src/lib/accept-language-parser.ts
new file mode 100644
index 0000000..ea6344c
--- /dev/null
+++ b/src/lib/accept-language-parser.ts
@@ -0,0 +1,80 @@
+/**
+ * Forked from https://github.com/opentable/accept-language-parser.
+ */
+
+const regex = /((([a-zA-Z]+(-[a-zA-Z0-9]+){0,2})|\*)(;q=[0-1](\.[0-9]+)?)?)*/g;
+
+const isString = (s: any) => typeof(s) === 'string';
+
+export interface ParsedAcceptLanguage {
+ code: string,
+ script: any,
+ region: string,
+ quality: number,
+}
+
+export interface ParsedAcceptLanguageOptions {
+ loose?: boolean,
+}
+
+export const parse = (al: string) => {
+ let strings = (al || "").match(regex);
+ return strings!.map((m) => {
+ if(!m){
+ return;
+ }
+
+ let bits = m.split(';');
+ let ietf = bits[0].split('-');
+ let hasScript = ietf.length === 3;
+
+ return {
+ code: ietf[0],
+ script: hasScript ? ietf[1] : null,
+ region: hasScript ? ietf[2] : ietf[1],
+ quality: bits[1] ? parseFloat(bits[1].split('=')[1]) : 1.0
+ } as ParsedAcceptLanguage;
+ })
+ .filter((r) => r)
+ .sort((a, b) => b!.quality - a!.quality);
+}
+
+export const pick = (supportedLanguageOrLanguages: string|string[], acceptLanguage: string, options?: ParsedAcceptLanguageOptions) => {
+ options = options || { loose: false };
+
+ if (!supportedLanguageOrLanguages || !supportedLanguageOrLanguages.length || !acceptLanguage) {
+ return null;
+ }
+
+ let parsedLanguage = parse(acceptLanguage);
+ let supportedLanguages = isString(supportedLanguageOrLanguages) ? [supportedLanguageOrLanguages] : supportedLanguageOrLanguages;
+ let supported = supportedLanguages.map((support) => {
+ let bits = support.split('-');
+ let hasScript = bits.length === 3;
+
+ return {
+ code: bits[0],
+ script: hasScript ? bits[1] : null,
+ region: hasScript ? bits[2] : bits[1]
+ };
+ });
+
+ for (let i = 0; i < parsedLanguage.length; i++) {
+ const lang = parsedLanguage[i]!;
+ const langCode = lang.code.toLowerCase();
+ const langRegion = lang.region ? lang.region.toLowerCase() : lang.region;
+ const langScript = lang.script ? lang.script.toLowerCase() : lang.script;
+ for (let j = 0; j < supported.length; j++) {
+ const supportedCode = supported[j].code.toLowerCase();
+ const supportedScript = supported[j].script ? supported[j].script!.toLowerCase() : supported[j].script;
+ const supportedRegion = supported[j].region ? supported[j].region!.toLowerCase() : supported[j].region;
+ if (langCode === supportedCode &&
+ (options.loose || !langScript || langScript === supportedScript) &&
+ (options.loose || !langRegion || langRegion === supportedRegion)) {
+ return supportedLanguages[j];
+ }
+ }
+ }
+
+ return null;
+}
diff --git a/src/lib/disclaimer.ts b/src/lib/disclaimer.ts
new file mode 100644
index 0000000..c9a0e72
--- /dev/null
+++ b/src/lib/disclaimer.ts
@@ -0,0 +1,24 @@
+// export interface DisclaimerDefinition {
+// renderedText: string,
+// marketplaceEditToken: string,
+// };
+
+// export class Disclaimers {
+// private disclaimers: DisclaimerDefinition[] = [];
+
+// public pushDisclaimer(disclaimerDefinition: DisclaimerDefinition) {
+// // if (0 !== this.disclaimers.filter((searchDisclaimers) => {
+// // if (searchDisclaimers.marketplaceEditToken === disclaimerDefinition.marketplaceEditToken) {
+// // return true;
+// // }
+// // }).length) {
+// this.disclaimers.push(disclaimerDefinition);
+// // }
+// }
+
+// public getDisclaimers() {
+// return this.disclaimers;
+// }
+// }
+
+// export type PushDisclaimerCallback = (disclaimerDefinition: DisclaimerDefinition) => void;
\ No newline at end of file
diff --git a/src/lib/locales.ts b/src/lib/locales.ts
new file mode 100644
index 0000000..e6b65d9
--- /dev/null
+++ b/src/lib/locales.ts
@@ -0,0 +1,16 @@
+export const localeUrlTestPatterns = ['en-US', 'es-US', 'fr-CA'];
+export const localeFromLang = (lang: string) => {
+ switch (lang) {
+ default: return 'en-US';
+ case 'es': return 'es-US';
+ case 'fr': return 'fr-CA';
+ }
+};
+export const overrideLocaleFromUrl = (url: string = '', orLang: string) => {
+ for (let t = 0; t < localeUrlTestPatterns.length; t++) {
+ if (url === localeUrlTestPatterns[t] || url.startsWith(`${localeUrlTestPatterns[t]}/`)) {
+ return localeUrlTestPatterns[t];
+ }
+ }
+ return orLang;
+};
\ No newline at end of file
diff --git a/src/lib/page-from-models.ts b/src/lib/page-from-models.ts
new file mode 100644
index 0000000..ad969b8
--- /dev/null
+++ b/src/lib/page-from-models.ts
@@ -0,0 +1,411 @@
+import type { Brand } from '../data/models/multis/Brand';
+import type { Page } from '../data/models/multis/Page';
+import type { ProductCategory } from '../data/models/multis/ProductCategory';
+import type { Marketplace } from '../data/models/multis/Marketplace';
+import type { Seller } from '../data/models/multis/Seller';
+import type { Product } from '../data/models/multis/Product';
+import type { QueryComponent } from '../data/models/components/QueryComponent';
+
+export interface PageForBrandParams {
+ brand: Brand,
+ brandId: string,
+ homePageId: string,
+};
+
+export interface PageForProductCategoryParams {
+ productCategory: ProductCategory,
+ productCategoryId: string,
+ homePageId: string,
+};
+
+export interface PageForMarketplaceParams {
+ marketplace: Marketplace,
+ marketplaceId: string,
+ homePageId: string,
+};
+
+export interface PageForSellerParams {
+ seller: Seller,
+ sellerId: string,
+ homePageId: string,
+};
+
+export interface PageForProductParams {
+ product: Product,
+ productId: string,
+ homePageId: string,
+};
+
+/**
+ * genericPageForBrand() will generate a default Page object given
+ * a Brand interface.
+ */
+export const genericPageForBrand = ({ brand, brandId, homePageId }: PageForBrandParams ): Page => {
+ let componentsPerLanguage = [
+ {
+ schemaId: '',
+ schemaName: 'page-breadcrumbs',
+ },
+ {
+ schemaId: '',
+ schemaName: 'page-brand',
+ brand: [brandId],
+ },
+ {
+ schemaId: '',
+ schemaName: 'page-products-query',
+ jsonQuery: {
+ filter: {
+ path: 'data.brand.iv',
+ op: 'eq',
+ value: brandId
+ }
+ },
+ } as QueryComponent,
+ ];
+ return {
+ title: brand.brandName,
+ slug: brand.slug,
+ content: {
+ "en-US": componentsPerLanguage,
+ "es-US": componentsPerLanguage,
+ "fr-CA": componentsPerLanguage,
+ },
+ seo: {
+ "en-US": {
+ schemaId: '',
+ schemaName: '',
+ keywords: brand.brandName['en-US'],
+ metaDescription: brand.shortDescription['en-US'],
+ metaImage: '',
+ metaSocial: [],
+ metaTitle: brand.brandName['en-US'],
+ },
+ "es-US": {
+ schemaId: '',
+ schemaName: '',
+ keywords: brand.brandName['es-US'],
+ metaDescription: brand.shortDescription['es-US'],
+ metaImage: '',
+ metaSocial: [],
+ metaTitle: brand.brandName['es-US'],
+ },
+ "fr-CA": {
+ schemaId: '',
+ schemaName: '',
+ keywords: brand.brandName['fr-CA'],
+ metaDescription: brand.shortDescription['fr-CA'],
+ metaImage: '',
+ metaSocial: [],
+ metaTitle: brand.brandName['fr-CA'],
+ },
+ },
+ parentPage: { iv: [homePageId] },
+ }
+};
+
+/**
+ * genericPageForProductCategory() will generate a default Page object given
+ * a ProductCategory interface.
+ */
+export const genericPageForProductCategory = ({ productCategory, productCategoryId, homePageId }: PageForProductCategoryParams ): Page => {
+ let componentsPerLanguage = [
+ {
+ schemaId: '',
+ schemaName: 'page-breadcrumbs',
+ },
+ {
+ schemaId: '',
+ schemaName: 'page-product-category',
+ productCategory: [productCategory],
+ },
+ {
+ schemaId: '',
+ schemaName: 'page-product-categories-query',
+ jsonQuery: {
+ filter: {
+ path: "data.parentCategory.iv",
+ op: "eq",
+ value: productCategoryId,
+ }
+ },
+ } as QueryComponent,
+ {
+ schemaId: '',
+ schemaName: 'page-products-query',
+ jsonQuery: {
+ filter: {
+ path: "data.categories.iv",
+ op: "eq",
+ value: productCategoryId,
+ }
+ },
+ } as QueryComponent,
+ ];
+ return {
+ title: productCategory.categoryName,
+ slug: productCategory.slug,
+ content: {
+ "en-US": componentsPerLanguage,
+ "es-US": componentsPerLanguage,
+ "fr-CA": componentsPerLanguage,
+ },
+ seo: {
+ "en-US": {
+ schemaId: '',
+ schemaName: '',
+ keywords: '',
+ metaDescription: productCategory.description['en-US'],
+ metaImage: '',
+ metaSocial: [],
+ metaTitle: productCategory.categoryName['en-US'],
+ },
+ "es-US": {
+ schemaId: '',
+ schemaName: '',
+ keywords: '',
+ metaDescription: productCategory.description['es-US'],
+ metaImage: '',
+ metaSocial: [],
+ metaTitle: productCategory.categoryName['es-US'],
+ },
+ "fr-CA": {
+ schemaId: '',
+ schemaName: '',
+ keywords: '',
+ metaDescription: productCategory.description['fr-CA'],
+ metaImage: '',
+ metaSocial: [],
+ metaTitle: productCategory.categoryName['fr-CA'],
+ },
+ },
+ parentPage: { iv: [homePageId] },
+ }
+};
+
+/**
+ * genericPageForMarketplace() will generate a default Page object given
+ * a Marketplace interface.
+ */
+export const genericPageForMarketplace = ({ marketplace, marketplaceId, homePageId }: PageForMarketplaceParams ): Page => {
+ let componentsPerLanguage = [
+ {
+ schemaId: '',
+ schemaName: 'page-breadcrumbs',
+ },
+ {
+ schemaId: '',
+ schemaName: 'page-marketplace',
+ productCategory: [marketplace],
+ },
+ {
+ schemaId: '',
+ schemaName: 'page-sellers-query',
+ // jsonQuery: JSON.stringify({
+ // filter: {
+ // path: "data.parentCategory.iv",
+ // op: "eq",
+ // value: productCategoryId,
+ // }
+ // }),
+ } as QueryComponent,
+ {
+ schemaId: '',
+ schemaName: 'page-products-query',
+ // jsonQuery: JSON.stringify({
+ // filter: {
+ // path: "data.parentCategory.iv",
+ // op: "eq",
+ // value: productCategoryId,
+ // }
+ // }),
+ } as QueryComponent,
+ ];
+ return {
+ title: marketplace.marketplaceName,
+ slug: marketplace.slug,
+ content: {
+ "en-US": componentsPerLanguage,
+ "es-US": componentsPerLanguage,
+ "fr-CA": componentsPerLanguage,
+ },
+ seo: {
+ "en-US": {
+ schemaId: '',
+ schemaName: '',
+ keywords: '',
+ metaDescription: marketplace.shortDescription['en-US'],
+ metaImage: '',
+ metaSocial: [],
+ metaTitle: marketplace.marketplaceName['en-US'],
+ },
+ "es-US": {
+ schemaId: '',
+ schemaName: '',
+ keywords: '',
+ metaDescription: marketplace.shortDescription['es-US'],
+ metaImage: '',
+ metaSocial: [],
+ metaTitle: marketplace.marketplaceName['es-US'],
+ },
+ "fr-CA": {
+ schemaId: '',
+ schemaName: '',
+ keywords: '',
+ metaDescription: marketplace.shortDescription['fr-CA'],
+ metaImage: '',
+ metaSocial: [],
+ metaTitle: marketplace.marketplaceName['fr-CA'],
+ },
+ },
+ parentPage: { iv: [homePageId] },
+ }
+};
+
+/*
+ * genericPageForSeller() will generate a default Page object given
+ * a Seller interface.
+ */
+export const genericPageForSeller = ({ seller, sellerId, homePageId }: PageForSellerParams ): Page => {
+ let componentsPerLanguage = [
+ {
+ schemaId: '',
+ schemaName: 'page-breadcrumbs',
+ },
+ {
+ schemaId: '',
+ schemaName: 'page-seller',
+ productCategory: [seller],
+ },
+ {
+ schemaId: '',
+ schemaName: 'page-marketplaces-query',
+ // jsonQuery: JSON.stringify({
+ // filter: {
+ // path: "data.parentCategory.iv",
+ // op: "eq",
+ // value: productCategoryId,
+ // }
+ // }),
+ } as QueryComponent,
+ {
+ schemaId: '',
+ schemaName: 'page-products-query',
+ // jsonQuery: JSON.stringify({
+ // filter: {
+ // path: "data.parentCategory.iv",
+ // op: "eq",
+ // value: productCategoryId,
+ // }
+ // }),
+ } as QueryComponent,
+ ];
+ return {
+ title: seller.sellerName,
+ slug: seller.slug,
+ content: {
+ "en-US": componentsPerLanguage,
+ "es-US": componentsPerLanguage,
+ "fr-CA": componentsPerLanguage,
+ },
+ seo: {
+ "en-US": {
+ schemaId: '',
+ schemaName: '',
+ keywords: '',
+ metaDescription: seller.sellerBio['en-US'],
+ metaImage: '',
+ metaSocial: [],
+ metaTitle: seller.sellerName['en-US'],
+ },
+ "es-US": {
+ schemaId: '',
+ schemaName: '',
+ keywords: '',
+ metaDescription: seller.sellerBio['es-US'],
+ metaImage: '',
+ metaSocial: [],
+ metaTitle: seller.sellerName['es-US'],
+ },
+ "fr-CA": {
+ schemaId: '',
+ schemaName: '',
+ keywords: '',
+ metaDescription: seller.sellerBio['fr-CA'],
+ metaImage: '',
+ metaSocial: [],
+ metaTitle: seller.sellerName['fr-CA'],
+ },
+ },
+ parentPage: { iv: [homePageId] },
+ }
+};
+
+/*
+ * genericPageForSeller() will generate a default Page object given
+ * a Seller interface.
+ */
+export const genericPageForProduct = ({ product, productId, homePageId }: PageForProductParams ): Page => {
+ let componentsPerLanguage = [
+ {
+ schemaId: '',
+ schemaName: 'page-breadcrumbs',
+ },
+ {
+ schemaId: '',
+ schemaName: 'page-product',
+ productCategory: [product],
+ },
+ {
+ schemaId: '',
+ schemaName: 'page-marketplaces-query',
+ // jsonQuery: JSON.stringify({
+ // filter: {
+ // path: "data.parentCategory.iv",
+ // op: "eq",
+ // value: productCategoryId,
+ // }
+ // }),
+ } as QueryComponent
+ ];
+ return {
+ title: product.productName,
+ slug: product.slug,
+ content: {
+ "en-US": componentsPerLanguage,
+ "es-US": componentsPerLanguage,
+ "fr-CA": componentsPerLanguage,
+ },
+ seo: {
+ "en-US": {
+ schemaId: '',
+ schemaName: '',
+ keywords: '',
+ metaDescription: product.description['en-US'],
+ metaImage: '',
+ metaSocial: [],
+ metaTitle: product.productName['en-US'],
+ },
+ "es-US": {
+ schemaId: '',
+ schemaName: '',
+ keywords: '',
+ metaDescription: product.description['es-US'],
+ metaImage: '',
+ metaSocial: [],
+ metaTitle: product.productName['es-US'],
+ },
+ "fr-CA": {
+ schemaId: '',
+ schemaName: '',
+ keywords: '',
+ metaDescription: product.description['fr-CA'],
+ metaImage: '',
+ metaSocial: [],
+ metaTitle: product.productName['fr-CA'],
+ },
+ },
+ parentPage: { iv: [homePageId] },
+ }
+};
+
diff --git a/src/lib/rendering.ts b/src/lib/rendering.ts
new file mode 100644
index 0000000..804253d
--- /dev/null
+++ b/src/lib/rendering.ts
@@ -0,0 +1,75 @@
+import markdownIt from "markdown-it";
+import markdownItAttrs from "markdown-it-attrs";
+import vm from 'node:vm';
+
+export const md = markdownIt().use(markdownItAttrs, {
+});
+
+function escapeRegExp(re: string) {
+ return re.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); // $& means the whole matched string
+}
+
+function makeInterpolationRegex(delimStart: string = '${', delimEnd: string = '}') {
+ delimStart = escapeRegExp(delimStart);
+ delimEnd = escapeRegExp(delimEnd);
+ return new RegExp(['(', delimStart, '[^', delimEnd, ']+', delimEnd, ')'].join(''), 'm')
+}
+
+function makeInterpolationEvalRegex(delimStart: string = '${', delimEnd: string = '}') {
+ delimStart = escapeRegExp(delimStart);
+ delimEnd = escapeRegExp(delimEnd);
+ return new RegExp([delimStart, '([^', delimEnd, ']+)', delimEnd].join(''), 'g')
+}
+
+export const interpolateString = (template: string, templateContext?: any) => {
+ const interpolationRegex = makeInterpolationRegex(); ///(\${[^}]+})/g;
+ // const interpolationEvalRegex = /\${([^}]+)}/g;
+ const interpolationEvalRegex = makeInterpolationEvalRegex();
+ const vmContext = vm.createContext(templateContext);
+ let matches = template.match(interpolationRegex);
+ while (matches && matches.length > 0) {
+ const jsCode = matches[0].replace(interpolationEvalRegex, '$1');
+ const interpolatedOutput = vm.runInContext(jsCode, vmContext, { timeout: 100, breakOnSigint: true, displayErrors: true });
+ //interpolate and iterate
+ template = template.replace(interpolationRegex, interpolatedOutput);
+ matches = template.match(interpolationRegex);
+ }
+ return template;
+}
+
+export const renderHtml = (template: string, templateContext?: any) => {
+ const interpolationRegex = /(\${[^}]+})/g;
+ const interpolationEvalRegex = /\${([^}]+)}/g;
+ const vmContext = vm.createContext(templateContext);
+ let matches = template.match(interpolationRegex);
+ while (matches && matches.length > 0) {
+ const jsCode = matches[0].replace(interpolationEvalRegex, '$1');
+ const interpolatedOutput = vm.runInContext(jsCode, vmContext, { timeout: 100, breakOnSigint: true, displayErrors: true });
+ //interpolate and iterate
+ template = template.replace(interpolationRegex, interpolatedOutput);
+ matches = template.match(interpolationRegex);
+ }
+ return template;
+}
+
+const renderCodeblock = (lang: string, template: string, templateContext?: any) => {
+ const startDelim = '```' + lang + '\n';
+ const endDelim = '\n```';
+ const interpolationRegex = makeInterpolationRegex(startDelim, endDelim);
+ const interpolationDeepMdRegex = makeInterpolationEvalRegex(startDelim, endDelim);
+ let matches = template.match(interpolationRegex);
+ while (matches && matches.length > 0) {
+ const cbCode = matches[0].replace(interpolationDeepMdRegex, '$1');
+ template = template.replace(interpolationRegex, cbCode);
+ template = interpolateString(template, templateContext);
+ matches = template.match(interpolationRegex)
+ }
+ return template;
+}
+
+export const renderMarkdown = (template: string, templateContext?: any) => {
+ // render code blocks inside of the Markdown
+ template = renderCodeblock('markdown', template, templateContext);
+ template = md.render(interpolateString(template, templateContext));
+ return template;
+}
\ No newline at end of file
diff --git a/src/lib/strapi.ts b/src/lib/strapi.ts
new file mode 100644
index 0000000..9db3f59
--- /dev/null
+++ b/src/lib/strapi.ts
@@ -0,0 +1,88 @@
+import { config } from "../config";
+import * as http from 'node:http';
+import { createWriteStream, existsSync, mkdirSync, unlinkSync } from 'node:fs';
+import fs, { mkdir } from 'node:fs/promises';
+import path from 'node:path';
+import {fileURLToPath} from 'url';
+const __filename = fileURLToPath(import.meta.url);
+const __dirname = path.dirname(__filename);
+
+interface Props {
+ endpoint: string;
+ query?: Record;
+ wrappedByKey?: string;
+ wrappedByList?: boolean;
+}
+
+/**
+ * Fetches data from the Strapi API
+ * @param endpoint - The endpoint to fetch from
+ * @param query - The query parameters to add to the url
+ * @param wrappedByKey - The key to unwrap the response from
+ * @param wrappedByList - If the response is a list, unwrap it
+ * @returns
+ */
+export async function fetchApi({
+ endpoint,
+ query,
+ wrappedByKey,
+ wrappedByList,
+ }: Props): Promise {
+ if (endpoint.startsWith('/')) {
+ endpoint = endpoint.slice(1);
+ }
+
+ const url = new URL(`${import.meta.env.STRAPI_URL}/api/${endpoint}`);
+
+ if (query) {
+ Object.entries(query).forEach(([key, value]) => {
+ url.searchParams.append(key, value);
+ });
+ }
+ const res = await fetch(url.toString(), {
+ headers: {
+ "Authorization": `bearer ${config.strapiApiToken}`,
+ },
+ });
+ let data = await res.json();
+
+ if (wrappedByKey) {
+ data = data[wrappedByKey];
+ }
+
+ if (wrappedByList) {
+ data = data[0];
+ }
+
+ return data as T;
+}
+
+export function downloadMedia(subdir: string, filename: string, url: string) {
+ // console.log('downloadMedia hit with', subdir, filename, url);
+ const imageUrl = `${config.strapiUrl}${url}`;
+ const subdirPath = path.join(__dirname, '..', '..', 'public', 'media', subdir);
+ if (!existsSync(subdirPath)) {
+ mkdirSync(subdirPath, { recursive: true });
+ }
+ const imagePath = path.join(subdirPath, filename);
+ const imageFile = createWriteStream(imagePath);
+ http.get(
+ // {
+ // headers: {
+ // "Authorization": `bearer ${config.strapiApiToken}`,
+ // },
+ // href: imageUrl,
+ // },
+ imageUrl,
+ response => {
+ response.pipe(imageFile);
+ imageFile.on('finish', () => {
+ imageFile.close();
+ //console.log(`Image downloaded as ${imagePath}`);
+ });
+ }).on('error', err => {
+ imageFile.close();
+ unlinkSync(imagePath);
+ console.error(`Error downloading image: ${err.message}`);
+ });
+}
diff --git a/src/old-data/api-models.ts b/src/old-data/api-models.ts
new file mode 100644
index 0000000..38e1912
--- /dev/null
+++ b/src/old-data/api-models.ts
@@ -0,0 +1,144 @@
+import { type BlocksContent } from '@strapi/blocks-react-renderer';
+
+export interface MetaPagination {
+ page?: number;
+ pageSize?: number;
+ pageCount?: number;
+ total?: number;
+}
+
+export interface Meta extends MetaPagination {
+}
+
+export interface Response {
+ data: T;
+ meta: Meta;
+}
+
+export interface Single {
+ id: number;
+ attributes: T;
+}
+
+export interface HasId {
+ id: number;
+}
+
+// export enum RichTextBlockType {
+// 'paragraph',
+// 'list',
+// 'text',
+// }
+
+// export enum RichTextBlockFormat {
+// 'unordered',
+// 'ordered',
+// }
+
+// export interface RichTextBlock {
+// type: RichTextBlockType;
+// format?: RichTextBlockFormat;
+// text: string;
+// }
+
+// export interface RichTextBlocks {
+// type: RichTextBlockType;
+// children: RichTextBlock[];
+// }
+
+export type RichTextBlocks = BlocksContent;
+
+export interface CreatedModified {
+ createdAt: Date;
+ updatedAt: Date;
+}
+
+export interface Site extends CreatedModified {
+ siteName: string;
+ siteUrl: string;
+ metaDescription: string;
+ categoriesCallout: RichTextBlocks;
+ brandsCallout: RichTextBlocks;
+ marketplaceCallout: RichTextBlocks;
+}
+
+export interface AmazonPAAPIConfig extends CreatedModified {
+ accessKey: string;
+ secretKey: string;
+ partnerType: string;
+ partnerTag: string;
+ marketplace: string;
+ service: string;
+ host: string;
+ region: string;
+}
+
+export interface GoogleAdsense extends CreatedModified {
+ adsTxt: string;
+}
+
+export interface GoogleAnalytics extends CreatedModified {
+ gTag: string;
+}
+
+export interface Media extends CreatedModified {
+ name: string;
+ alternativeText: string;
+ caption: string;
+ width: number;
+ height: number;
+ format: null|any;
+ hash: string;
+ ext: string;
+ mime: string;
+ size: number;
+ url: string;
+ previewUrl: string|null;
+ provider: string;
+ provider_metadata: null|any;
+}
+
+export interface Marketplace extends CreatedModified {
+ name: string;
+ slug: string;
+ shortDescription: RichTextBlocks;
+ description: RichTextBlocks;
+ disclaimer: RichTextBlocks;
+ logoImage: Response>;
+ // products: Response[]>;
+}
+
+export interface Brand extends CreatedModified {
+ name: string;
+ slug: string;
+ shortDescription: RichTextBlocks;
+ description: RichTextBlocks;
+ logoImage: Response>;
+ products: Response[]>;
+}
+
+export interface Category extends CreatedModified {
+ name: string;
+ slug: string;
+ categoryImage: Response>;
+ description: RichTextBlocks;
+ products: Response[]>;
+ parentCategories: Response[]>;
+ childCategories: Response[]>;
+}
+
+export interface Tag extends CreatedModified {
+ slug: string;
+}
+
+export interface Product extends CreatedModified {
+ name: string;
+ title: string;
+ slug: string;
+ brand: Response>;
+ callout: RichTextBlocks;
+ description: RichTextBlocks;
+ categories: Response[]>;
+ tags: Response[]>;
+ components: any[];
+}
diff --git a/src/data/brands/bell-ap.ts b/src/old-data/brands/bell-ap.ts
similarity index 99%
rename from src/data/brands/bell-ap.ts
rename to src/old-data/brands/bell-ap.ts
index 0450979..42d6a9a 100644
--- a/src/data/brands/bell-ap.ts
+++ b/src/old-data/brands/bell-ap.ts
@@ -33,7 +33,7 @@ deer-related collisions. Continue to drive safely and rest assured more deer wil
Don't let deer-related accidents hold you back from delivering safely and efficiently. Get the Bell
Automotive-22-1-01000-8 Black Deer Warning Unit today and enjoy peace of mind behind the wheel!
`.trim(),
- amazonProductId: 'B000CC4O58',
+ ASIN: 'B000CC4O58',
amazonLink: 'https://www.amazon.com/Bell-Automotive-22-1-01000-8-Black-Warning/dp/B000CC4O58?crid=38OWGTE3CGGTR&dib=eyJ2IjoiMSJ9.2hsaXGo5j3z_PO0DdSqY2dh0ERcaf1BLgOVM5jRO6_8YsWEDMVv1R9XYUsALRJPK7hWsylfyJucQttI1MRPR7YrBuBhDAJVzXue3BLjSRwHS3tzLix_0BMleTroTTDMtOyzuGpJGlkfq4ayiBl1HtOKN1HmSfUWnseEzDdmdYfiPGena7b4L1qIAz5AnMd0zdy0-YuddgQiHjM3Ha57GzK0w-HSTpHUeAIDrFQFEhcbCBnTRYPtrDEqvFlVd2E2-rmbQgqrb9YDaZo-zTNBGuHt2liqz_4hN6fwXQ9-BfPM.Atf0vKmCupgwmiW_lZj49dmQMkvMPIjQsfx3PqYlqIc&dib_tag=se&keywords=deer+alert&qid=1721016740&sprefix=deer+aler%2Caps%2C92&sr=8-17&linkCode=ll1&tag=dashersupply-20&linkId=623763eba9c22a3e4d3618007f6b13ae&language=en_US&ref_=as_li_ss_tl',
amazonProductDetails: {
"title": "Bell Automotive-22-1-01000-8 Bell Deer Warning Unit, Black, PR",
@@ -108,7 +108,7 @@ deer-related collisions. Continue to drive safely and rest assured more deer wil
Don't let deer-related accidents hold you back from delivering safely and efficiently. Get the Bell
Automotive-22-1-01001-8 Chrome Deer Warning Unit today and enjoy peace of mind behind the wheel!
`.trim(),
- amazonProductId: 'B000IG5PVU',
+ ASIN: 'B000IG5PVU',
amazonLink: 'https://www.amazon.com/Bell-Automotive-22-1-01001-8-Chrome-Warning/dp/B000IG5PVU?crid=292GBL5WF6BRS&dib=eyJ2IjoiMSJ9.bJ1O7X9g1iSFNRAATSwis8O-HyUVPobiDj9SFPCzloSL6FVx3V5odzkPH8plk5R-Y9JoWUFRYq8qwR-QjxRb6-9pCZYAnCaKv1I_GY6CMUP5F07CSo-gqPd2yMfr1YjiFHMB_CHwA7vs_eUSFT9jkEenaQtEp1_3yDHrjxTpSWUMiJGZwfzksmhStFE82p031qxt2LQxT9YpabM7XMguPc2ZFv4-PIrU55VbXxzqgf9CyVj3S_QSujOZmGuqBqgQQhVXzfL0TwQocB1xsTMVmiFepdozsBMuUFleATwNsyM.CCOSpzyeJTssD33Vns57cdSlHsXfWXPe2k1_lKfGT1M&dib_tag=se&keywords=bell+automotive+deer+alert&qid=1721018357&sprefix=bell+automotive+deer+alert%2Caps%2C69&sr=8-3&linkCode=ll1&tag=dashersupply-20&linkId=a26ad59d6d5109c7d46d43d8b1af4cad&language=en_US&ref_=as_li_ss_tl',
amazonProductDetails: {
"title": "Bell Automotive 22-1-01001-8 Chrome Deer Warning",
diff --git a/src/data/brands/brand.ts b/src/old-data/brands/brand.ts
similarity index 100%
rename from src/data/brands/brand.ts
rename to src/old-data/brands/brand.ts
diff --git a/src/data/brands/coast-example-query-and-response.txt b/src/old-data/brands/coast-example-query-and-response.ts
similarity index 96%
rename from src/data/brands/coast-example-query-and-response.txt
rename to src/old-data/brands/coast-example-query-and-response.ts
index 1dad960..1aecb89 100644
--- a/src/data/brands/coast-example-query-and-response.txt
+++ b/src/old-data/brands/coast-example-query-and-response.ts
@@ -1,8 +1,10 @@
+import type { SearchItemsResponse } from "amazon-pa-api5-node-ts";
+
/* ********** Signed Request ********** */
-https://webservices.amazon.com/!YW16LTEuMDtjb20uYW1hem9uLnBhYXBpNS52MS5Qcm9kdWN0QWR2ZXJ0aXNpbmdBUEl2MS5TZWFyY2hJdGVtczt7CiAgICAiS2V5d29yZHMiOiAiZmxhc2hsaWdodCIsCiAgICAiUmVzb3VyY2VzIjogWwogICAgICAgICJCcm93c2VOb2RlSW5mby5Ccm93c2VOb2RlcyIsCiAgICAgICAgIkJyb3dzZU5vZGVJbmZvLkJyb3dzZU5vZGVzLkFuY2VzdG9yIiwKICAgICAgICAiQnJvd3NlTm9kZUluZm8uQnJvd3NlTm9kZXMuU2FsZXNSYW5rIiwKICAgICAgICAiQnJvd3NlTm9kZUluZm8uV2Vic2l0ZVNhbGVzUmFuayIsCiAgICAgICAgIkN1c3RvbWVyUmV2aWV3cy5Db3VudCIsCiAgICAgICAgIkN1c3RvbWVyUmV2aWV3cy5TdGFyUmF0aW5nIiwKICAgICAgICAiSW1hZ2VzLlByaW1hcnkuU21hbGwiLAogICAgICAgICJJbWFnZXMuUHJpbWFyeS5NZWRpdW0iLAogICAgICAgICJJbWFnZXMuUHJpbWFyeS5MYXJnZSIsCiAgICAgICAgIkltYWdlcy5QcmltYXJ5LkhpZ2hSZXMiLAogICAgICAgICJJbWFnZXMuVmFyaWFudHMuU21hbGwiLAogICAgICAgICJJbWFnZXMuVmFyaWFudHMuTWVkaXVtIiwKICAgICAgICAiSW1hZ2VzLlZhcmlhbnRzLkxhcmdlIiwKICAgICAgICAiSW1hZ2VzLlZhcmlhbnRzLkhpZ2hSZXMiLAogICAgICAgICJJdGVtSW5mby5CeUxpbmVJbmZvIiwKICAgICAgICAiSXRlbUluZm8uQ29udGVudEluZm8iLAogICAgICAgICJJdGVtSW5mby5Db250ZW50UmF0aW5nIiwKICAgICAgICAiSXRlbUluZm8uQ2xhc3NpZmljYXRpb25zIiwKICAgICAgICAiSXRlbUluZm8uRXh0ZXJuYWxJZHMiLAogICAgICAgICJJdGVtSW5mby5GZWF0dXJlcyIsCiAgICAgICAgIkl0ZW1JbmZvLk1hbnVmYWN0dXJlSW5mbyIsCiAgICAgICAgIkl0ZW1JbmZvLlByb2R1Y3RJbmZvIiwKICAgICAgICAiSXRlbUluZm8uVGVjaG5pY2FsSW5mbyIsCiAgICAgICAgIkl0ZW1JbmZvLlRpdGxlIiwKICAgICAgICAiSXRlbUluZm8uVHJhZGVJbkluZm8iLAogICAgICAgICJPZmZlcnMuTGlzdGluZ3MuQXZhaWxhYmlsaXR5Lk1heE9yZGVyUXVhbnRpdHkiLAogICAgICAgICJPZmZlcnMuTGlzdGluZ3MuQXZhaWxhYmlsaXR5Lk1lc3NhZ2UiLAogICAgICAgICJPZmZlcnMuTGlzdGluZ3MuQXZhaWxhYmlsaXR5Lk1pbk9yZGVyUXVhbnRpdHkiLAogICAgICAgICJPZmZlcnMuTGlzdGluZ3MuQXZhaWxhYmlsaXR5LlR5cGUiLAogICAgICAgICJPZmZlcnMuTGlzdGluZ3MuQ29uZGl0aW9uIiwKICAgICAgICAiT2ZmZXJzLkxpc3RpbmdzLkNvbmRpdGlvbi5Db25kaXRpb25Ob3RlIiwKICAgICAgICAiT2ZmZXJzLkxpc3RpbmdzLkNvbmRpdGlvbi5TdWJDb25kaXRpb24iLAogICAgICAgICJPZmZlcnMuTGlzdGluZ3MuRGVsaXZlcnlJbmZvLklzQW1hem9uRnVsZmlsbGVkIiwKICAgICAgICAiT2ZmZXJzLkxpc3RpbmdzLkRlbGl2ZXJ5SW5mby5Jc0ZyZWVTaGlwcGluZ0VsaWdpYmxlIiwKICAgICAgICAiT2ZmZXJzLkxpc3RpbmdzLkRlbGl2ZXJ5SW5mby5Jc1ByaW1lRWxpZ2libGUiLAogICAgICAgICJPZmZlcnMuTGlzdGluZ3MuRGVsaXZlcnlJbmZvLlNoaXBwaW5nQ2hhcmdlcyIsCiAgICAgICAgIk9mZmVycy5MaXN0aW5ncy5Jc0J1eUJveFdpbm5lciIsCiAgICAgICAgIk9mZmVycy5MaXN0aW5ncy5Mb3lhbHR5UG9pbnRzLlBvaW50cyIsCiAgICAgICAgIk9mZmVycy5MaXN0aW5ncy5NZXJjaGFudEluZm8iLAogICAgICAgICJPZmZlcnMuTGlzdGluZ3MuUHJpY2UiLAogICAgICAgICJPZmZlcnMuTGlzdGluZ3MuUHJvZ3JhbUVsaWdpYmlsaXR5LklzUHJpbWVFeGNsdXNpdmUiLAogICAgICAgICJPZmZlcnMuTGlzdGluZ3MuUHJvZ3JhbUVsaWdpYmlsaXR5LklzUHJpbWVQYW50cnkiLAogICAgICAgICJPZmZlcnMuTGlzdGluZ3MuUHJvbW90aW9ucyIsCiAgICAgICAgIk9mZmVycy5MaXN0aW5ncy5TYXZpbmdCYXNpcyIsCiAgICAgICAgIk9mZmVycy5TdW1tYXJpZXMuSGlnaGVzdFByaWNlIiwKICAgICAgICAiT2ZmZXJzLlN1bW1hcmllcy5Mb3dlc3RQcmljZSIsCiAgICAgICAgIk9mZmVycy5TdW1tYXJpZXMuT2ZmZXJDb3VudCIsCiAgICAgICAgIlBhcmVudEFTSU4iLAogICAgICAgICJSZW50YWxPZmZlcnMuTGlzdGluZ3MuQXZhaWxhYmlsaXR5Lk1heE9yZGVyUXVhbnRpdHkiLAogICAgICAgICJSZW50YWxPZmZlcnMuTGlzdGluZ3MuQXZhaWxhYmlsaXR5Lk1lc3NhZ2UiLAogICAgICAgICJSZW50YWxPZmZlcnMuTGlzdGluZ3MuQXZhaWxhYmlsaXR5Lk1pbk9yZGVyUXVhbnRpdHkiLAogICAgICAgICJSZW50YWxPZmZlcnMuTGlzdGluZ3MuQXZhaWxhYmlsaXR5LlR5cGUiLAogICAgICAgICJSZW50YWxPZmZlcnMuTGlzdGluZ3MuQmFzZVByaWNlIiwKICAgICAgICAiUmVudGFsT2ZmZXJzLkxpc3RpbmdzLkNvbmRpdGlvbiIsCiAgICAgICAgIlJlbnRhbE9mZmVycy5MaXN0aW5ncy5Db25kaXRpb24uQ29uZGl0aW9uTm90ZSIsCiAgICAgICAgIlJlbnRhbE9mZmVycy5MaXN0aW5ncy5Db25kaXRpb24uU3ViQ29uZGl0aW9uIiwKICAgICAgICAiUmVudGFsT2ZmZXJzLkxpc3RpbmdzLkRlbGl2ZXJ5SW5mby5Jc0FtYXpvbkZ1bGZpbGxlZCIsCiAgICAgICAgIlJlbnRhbE9mZmVycy5MaXN0aW5ncy5EZWxpdmVyeUluZm8uSXNGcmVlU2hpcHBpbmdFbGlnaWJsZSIsCiAgICAgICAgIlJlbnRhbE9mZmVycy5MaXN0aW5ncy5EZWxpdmVyeUluZm8uSXNQcmltZUVsaWdpYmxlIiwKICAgICAgICAiUmVudGFsT2ZmZXJzLkxpc3RpbmdzLkRlbGl2ZXJ5SW5mby5TaGlwcGluZ0NoYXJnZXMiLAogICAgICAgICJSZW50YWxPZmZlcnMuTGlzdGluZ3MuTWVyY2hhbnRJbmZvIiwKICAgICAgICAiU2VhcmNoUmVmaW5lbWVudHMiCiAgICBdLAogICAgIkJyYW5kIjogIkNPQVNUIiwKICAgICJQYXJ0bmVyVGFnIjogImRhc2hlcnN1cHBseS0yMCIsCiAgICAiUGFydG5lclR5cGUiOiAiQXNzb2NpYXRlcyIsCiAgICAiTWFya2V0cGxhY2UiOiAid3d3LmFtYXpvbi5jb20iCn0=
+export const signedRequest = `https://webservices.amazon.com/!YW16LTEuMDtjb20uYW1hem9uLnBhYXBpNS52MS5Qcm9kdWN0QWR2ZXJ0aXNpbmdBUEl2MS5TZWFyY2hJdGVtczt7CiAgICAiS2V5d29yZHMiOiAiZmxhc2hsaWdodCIsCiAgICAiUmVzb3VyY2VzIjogWwogICAgICAgICJCcm93c2VOb2RlSW5mby5Ccm93c2VOb2RlcyIsCiAgICAgICAgIkJyb3dzZU5vZGVJbmZvLkJyb3dzZU5vZGVzLkFuY2VzdG9yIiwKICAgICAgICAiQnJvd3NlTm9kZUluZm8uQnJvd3NlTm9kZXMuU2FsZXNSYW5rIiwKICAgICAgICAiQnJvd3NlTm9kZUluZm8uV2Vic2l0ZVNhbGVzUmFuayIsCiAgICAgICAgIkN1c3RvbWVyUmV2aWV3cy5Db3VudCIsCiAgICAgICAgIkN1c3RvbWVyUmV2aWV3cy5TdGFyUmF0aW5nIiwKICAgICAgICAiSW1hZ2VzLlByaW1hcnkuU21hbGwiLAogICAgICAgICJJbWFnZXMuUHJpbWFyeS5NZWRpdW0iLAogICAgICAgICJJbWFnZXMuUHJpbWFyeS5MYXJnZSIsCiAgICAgICAgIkltYWdlcy5QcmltYXJ5LkhpZ2hSZXMiLAogICAgICAgICJJbWFnZXMuVmFyaWFudHMuU21hbGwiLAogICAgICAgICJJbWFnZXMuVmFyaWFudHMuTWVkaXVtIiwKICAgICAgICAiSW1hZ2VzLlZhcmlhbnRzLkxhcmdlIiwKICAgICAgICAiSW1hZ2VzLlZhcmlhbnRzLkhpZ2hSZXMiLAogICAgICAgICJJdGVtSW5mby5CeUxpbmVJbmZvIiwKICAgICAgICAiSXRlbUluZm8uQ29udGVudEluZm8iLAogICAgICAgICJJdGVtSW5mby5Db250ZW50UmF0aW5nIiwKICAgICAgICAiSXRlbUluZm8uQ2xhc3NpZmljYXRpb25zIiwKICAgICAgICAiSXRlbUluZm8uRXh0ZXJuYWxJZHMiLAogICAgICAgICJJdGVtSW5mby5GZWF0dXJlcyIsCiAgICAgICAgIkl0ZW1JbmZvLk1hbnVmYWN0dXJlSW5mbyIsCiAgICAgICAgIkl0ZW1JbmZvLlByb2R1Y3RJbmZvIiwKICAgICAgICAiSXRlbUluZm8uVGVjaG5pY2FsSW5mbyIsCiAgICAgICAgIkl0ZW1JbmZvLlRpdGxlIiwKICAgICAgICAiSXRlbUluZm8uVHJhZGVJbkluZm8iLAogICAgICAgICJPZmZlcnMuTGlzdGluZ3MuQXZhaWxhYmlsaXR5Lk1heE9yZGVyUXVhbnRpdHkiLAogICAgICAgICJPZmZlcnMuTGlzdGluZ3MuQXZhaWxhYmlsaXR5Lk1lc3NhZ2UiLAogICAgICAgICJPZmZlcnMuTGlzdGluZ3MuQXZhaWxhYmlsaXR5Lk1pbk9yZGVyUXVhbnRpdHkiLAogICAgICAgICJPZmZlcnMuTGlzdGluZ3MuQXZhaWxhYmlsaXR5LlR5cGUiLAogICAgICAgICJPZmZlcnMuTGlzdGluZ3MuQ29uZGl0aW9uIiwKICAgICAgICAiT2ZmZXJzLkxpc3RpbmdzLkNvbmRpdGlvbi5Db25kaXRpb25Ob3RlIiwKICAgICAgICAiT2ZmZXJzLkxpc3RpbmdzLkNvbmRpdGlvbi5TdWJDb25kaXRpb24iLAogICAgICAgICJPZmZlcnMuTGlzdGluZ3MuRGVsaXZlcnlJbmZvLklzQW1hem9uRnVsZmlsbGVkIiwKICAgICAgICAiT2ZmZXJzLkxpc3RpbmdzLkRlbGl2ZXJ5SW5mby5Jc0ZyZWVTaGlwcGluZ0VsaWdpYmxlIiwKICAgICAgICAiT2ZmZXJzLkxpc3RpbmdzLkRlbGl2ZXJ5SW5mby5Jc1ByaW1lRWxpZ2libGUiLAogICAgICAgICJPZmZlcnMuTGlzdGluZ3MuRGVsaXZlcnlJbmZvLlNoaXBwaW5nQ2hhcmdlcyIsCiAgICAgICAgIk9mZmVycy5MaXN0aW5ncy5Jc0J1eUJveFdpbm5lciIsCiAgICAgICAgIk9mZmVycy5MaXN0aW5ncy5Mb3lhbHR5UG9pbnRzLlBvaW50cyIsCiAgICAgICAgIk9mZmVycy5MaXN0aW5ncy5NZXJjaGFudEluZm8iLAogICAgICAgICJPZmZlcnMuTGlzdGluZ3MuUHJpY2UiLAogICAgICAgICJPZmZlcnMuTGlzdGluZ3MuUHJvZ3JhbUVsaWdpYmlsaXR5LklzUHJpbWVFeGNsdXNpdmUiLAogICAgICAgICJPZmZlcnMuTGlzdGluZ3MuUHJvZ3JhbUVsaWdpYmlsaXR5LklzUHJpbWVQYW50cnkiLAogICAgICAgICJPZmZlcnMuTGlzdGluZ3MuUHJvbW90aW9ucyIsCiAgICAgICAgIk9mZmVycy5MaXN0aW5ncy5TYXZpbmdCYXNpcyIsCiAgICAgICAgIk9mZmVycy5TdW1tYXJpZXMuSGlnaGVzdFByaWNlIiwKICAgICAgICAiT2ZmZXJzLlN1bW1hcmllcy5Mb3dlc3RQcmljZSIsCiAgICAgICAgIk9mZmVycy5TdW1tYXJpZXMuT2ZmZXJDb3VudCIsCiAgICAgICAgIlBhcmVudEFTSU4iLAogICAgICAgICJSZW50YWxPZmZlcnMuTGlzdGluZ3MuQXZhaWxhYmlsaXR5Lk1heE9yZGVyUXVhbnRpdHkiLAogICAgICAgICJSZW50YWxPZmZlcnMuTGlzdGluZ3MuQXZhaWxhYmlsaXR5Lk1lc3NhZ2UiLAogICAgICAgICJSZW50YWxPZmZlcnMuTGlzdGluZ3MuQXZhaWxhYmlsaXR5Lk1pbk9yZGVyUXVhbnRpdHkiLAogICAgICAgICJSZW50YWxPZmZlcnMuTGlzdGluZ3MuQXZhaWxhYmlsaXR5LlR5cGUiLAogICAgICAgICJSZW50YWxPZmZlcnMuTGlzdGluZ3MuQmFzZVByaWNlIiwKICAgICAgICAiUmVudGFsT2ZmZXJzLkxpc3RpbmdzLkNvbmRpdGlvbiIsCiAgICAgICAgIlJlbnRhbE9mZmVycy5MaXN0aW5ncy5Db25kaXRpb24uQ29uZGl0aW9uTm90ZSIsCiAgICAgICAgIlJlbnRhbE9mZmVycy5MaXN0aW5ncy5Db25kaXRpb24uU3ViQ29uZGl0aW9uIiwKICAgICAgICAiUmVudGFsT2ZmZXJzLkxpc3RpbmdzLkRlbGl2ZXJ5SW5mby5Jc0FtYXpvbkZ1bGZpbGxlZCIsCiAgICAgICAgIlJlbnRhbE9mZmVycy5MaXN0aW5ncy5EZWxpdmVyeUluZm8uSXNGcmVlU2hpcHBpbmdFbGlnaWJsZSIsCiAgICAgICAgIlJlbnRhbE9mZmVycy5MaXN0aW5ncy5EZWxpdmVyeUluZm8uSXNQcmltZUVsaWdpYmxlIiwKICAgICAgICAiUmVudGFsT2ZmZXJzLkxpc3RpbmdzLkRlbGl2ZXJ5SW5mby5TaGlwcGluZ0NoYXJnZXMiLAogICAgICAgICJSZW50YWxPZmZlcnMuTGlzdGluZ3MuTWVyY2hhbnRJbmZvIiwKICAgICAgICAiU2VhcmNoUmVmaW5lbWVudHMiCiAgICBdLAogICAgIkJyYW5kIjogIkNPQVNUIiwKICAgICJQYXJ0bmVyVGFnIjogImRhc2hlcnN1cHBseS0yMCIsCiAgICAiUGFydG5lclR5cGUiOiAiQXNzb2NpYXRlcyIsCiAgICAiTWFya2V0cGxhY2UiOiAid3d3LmFtYXpvbi5jb20iCn0=`;
/* ********** Payload ********** */
-{
+export const payload = {
"Keywords": "flashlight",
"Resources": [
"BrowseNodeInfo.BrowseNodes",
@@ -73,10 +75,10 @@ https://webservices.amazon.com/!YW16LTEuMDtjb20uYW1hem9uLnBhYXBpNS52MS5Qcm9kdWN0
"PartnerType": "Associates",
"Marketplace": "www.amazon.com",
"Operation": "SearchItems"
-}
+};
/* ********** Response ********** */
-{
+export const response: SearchItemsResponse = {
"SearchResult": {
"Items": [
{
@@ -4304,4 +4306,4 @@ https://webservices.amazon.com/!YW16LTEuMDtjb20uYW1hem9uLnBhYXBpNS52MS5Qcm9kdWN0
"SearchURL": "https://www.amazon.com/s?k=flashlight&rh=p_n_availability%3A-1%2Cp_lbr_brands_browse-bin%3ACOAST&tag=dashersupply-20&linkCode=osi",
"TotalResultCount": 181
}
-}
\ No newline at end of file
+};
\ No newline at end of file
diff --git a/src/old-data/brands/coast-query-response.json b/src/old-data/brands/coast-query-response.json
new file mode 100644
index 0000000..113f074
--- /dev/null
+++ b/src/old-data/brands/coast-query-response.json
@@ -0,0 +1,4229 @@
+{
+ "SearchResult": {
+ "Items": [
+ {
+ "ASIN": "B00UP3TOEA",
+ "BrowseNodeInfo": {
+ "BrowseNodes": [
+ {
+ "Ancestor": {
+ "Ancestor": {
+ "Ancestor": {
+ "Ancestor": {
+ "ContextFreeName": "Tools & Home Improvement",
+ "DisplayName": "Tools & Home Improvement",
+ "Id": "228013"
+ },
+ "ContextFreeName": "Home Improvement",
+ "DisplayName": "Categories",
+ "Id": "468240"
+ },
+ "ContextFreeName": "Safety & Security",
+ "DisplayName": "Safety & Security",
+ "Id": "3180231"
+ },
+ "ContextFreeName": "Flashlights",
+ "DisplayName": "Flashlights",
+ "Id": "3180261"
+ },
+ "ContextFreeName": "Handheld Flashlights",
+ "DisplayName": "Handheld Flashlights",
+ "Id": "2445457011",
+ "IsRoot": false,
+ "SalesRank": 110
+ }
+ ],
+ "WebsiteSalesRank": {
+ "SalesRank": 5442
+ }
+ },
+ "DetailPageURL": "https://www.amazon.com/dp/B00UP3TOEA?tag=dashersupply-20&linkCode=osi&th=1&psc=1",
+ "Images": {
+ "Primary": {
+ "Large": {
+ "Height": 500,
+ "URL": "https://m.media-amazon.com/images/I/310ZTNCzZlL._SL500_.jpg",
+ "Width": 500
+ },
+ "Medium": {
+ "Height": 160,
+ "URL": "https://m.media-amazon.com/images/I/310ZTNCzZlL._SL160_.jpg",
+ "Width": 160
+ },
+ "Small": {
+ "Height": 75,
+ "URL": "https://m.media-amazon.com/images/I/310ZTNCzZlL._SL75_.jpg",
+ "Width": 75
+ }
+ },
+ "Variants": [
+ {
+ "Large": {
+ "Height": 500,
+ "URL": "https://m.media-amazon.com/images/I/41bzlPNZtTL._SL500_.jpg",
+ "Width": 500
+ },
+ "Medium": {
+ "Height": 160,
+ "URL": "https://m.media-amazon.com/images/I/41bzlPNZtTL._SL160_.jpg",
+ "Width": 160
+ },
+ "Small": {
+ "Height": 75,
+ "URL": "https://m.media-amazon.com/images/I/41bzlPNZtTL._SL75_.jpg",
+ "Width": 75
+ }
+ },
+ {
+ "Large": {
+ "Height": 500,
+ "URL": "https://m.media-amazon.com/images/I/518WY9Ga6gL._SL500_.jpg",
+ "Width": 500
+ },
+ "Medium": {
+ "Height": 160,
+ "URL": "https://m.media-amazon.com/images/I/518WY9Ga6gL._SL160_.jpg",
+ "Width": 160
+ },
+ "Small": {
+ "Height": 75,
+ "URL": "https://m.media-amazon.com/images/I/518WY9Ga6gL._SL75_.jpg",
+ "Width": 75
+ }
+ },
+ {
+ "Large": {
+ "Height": 500,
+ "URL": "https://m.media-amazon.com/images/I/41yx1HiTLdL._SL500_.jpg",
+ "Width": 500
+ },
+ "Medium": {
+ "Height": 160,
+ "URL": "https://m.media-amazon.com/images/I/41yx1HiTLdL._SL160_.jpg",
+ "Width": 160
+ },
+ "Small": {
+ "Height": 75,
+ "URL": "https://m.media-amazon.com/images/I/41yx1HiTLdL._SL75_.jpg",
+ "Width": 75
+ }
+ },
+ {
+ "Large": {
+ "Height": 500,
+ "URL": "https://m.media-amazon.com/images/I/41d4+STQjZL._SL500_.jpg",
+ "Width": 500
+ },
+ "Medium": {
+ "Height": 160,
+ "URL": "https://m.media-amazon.com/images/I/41d4+STQjZL._SL160_.jpg",
+ "Width": 160
+ },
+ "Small": {
+ "Height": 75,
+ "URL": "https://m.media-amazon.com/images/I/41d4+STQjZL._SL75_.jpg",
+ "Width": 75
+ }
+ },
+ {
+ "Large": {
+ "Height": 500,
+ "URL": "https://m.media-amazon.com/images/I/41UaN-JbY4L._SL500_.jpg",
+ "Width": 500
+ },
+ "Medium": {
+ "Height": 160,
+ "URL": "https://m.media-amazon.com/images/I/41UaN-JbY4L._SL160_.jpg",
+ "Width": 160
+ },
+ "Small": {
+ "Height": 75,
+ "URL": "https://m.media-amazon.com/images/I/41UaN-JbY4L._SL75_.jpg",
+ "Width": 75
+ }
+ },
+ {
+ "Large": {
+ "Height": 500,
+ "URL": "https://m.media-amazon.com/images/I/51zAuRThJWL._SL500_.jpg",
+ "Width": 500
+ },
+ "Medium": {
+ "Height": 160,
+ "URL": "https://m.media-amazon.com/images/I/51zAuRThJWL._SL160_.jpg",
+ "Width": 160
+ },
+ "Small": {
+ "Height": 75,
+ "URL": "https://m.media-amazon.com/images/I/51zAuRThJWL._SL75_.jpg",
+ "Width": 75
+ }
+ },
+ {
+ "Large": {
+ "Height": 500,
+ "URL": "https://m.media-amazon.com/images/I/41dvpzGAyDL._SL500_.jpg",
+ "Width": 500
+ },
+ "Medium": {
+ "Height": 160,
+ "URL": "https://m.media-amazon.com/images/I/41dvpzGAyDL._SL160_.jpg",
+ "Width": 160
+ },
+ "Small": {
+ "Height": 75,
+ "URL": "https://m.media-amazon.com/images/I/41dvpzGAyDL._SL75_.jpg",
+ "Width": 75
+ }
+ },
+ {
+ "Large": {
+ "Height": 500,
+ "URL": "https://m.media-amazon.com/images/I/41N7uh5mpjL._SL500_.jpg",
+ "Width": 500
+ },
+ "Medium": {
+ "Height": 160,
+ "URL": "https://m.media-amazon.com/images/I/41N7uh5mpjL._SL160_.jpg",
+ "Width": 160
+ },
+ "Small": {
+ "Height": 75,
+ "URL": "https://m.media-amazon.com/images/I/41N7uh5mpjL._SL75_.jpg",
+ "Width": 75
+ }
+ },
+ {
+ "Large": {
+ "Height": 500,
+ "URL": "https://m.media-amazon.com/images/I/41IvNsW2csL._SL500_.jpg",
+ "Width": 500
+ },
+ "Medium": {
+ "Height": 160,
+ "URL": "https://m.media-amazon.com/images/I/41IvNsW2csL._SL160_.jpg",
+ "Width": 160
+ },
+ "Small": {
+ "Height": 75,
+ "URL": "https://m.media-amazon.com/images/I/41IvNsW2csL._SL75_.jpg",
+ "Width": 75
+ }
+ },
+ {
+ "Large": {
+ "Height": 500,
+ "URL": "https://m.media-amazon.com/images/I/31Njkc+eXSL._SL500_.jpg",
+ "Width": 500
+ },
+ "Medium": {
+ "Height": 160,
+ "URL": "https://m.media-amazon.com/images/I/31Njkc+eXSL._SL160_.jpg",
+ "Width": 160
+ },
+ "Small": {
+ "Height": 75,
+ "URL": "https://m.media-amazon.com/images/I/31Njkc+eXSL._SL75_.jpg",
+ "Width": 75
+ }
+ },
+ {
+ "Large": {
+ "Height": 500,
+ "URL": "https://m.media-amazon.com/images/I/51LHHPfeA0L._SL500_.jpg",
+ "Width": 500
+ },
+ "Medium": {
+ "Height": 160,
+ "URL": "https://m.media-amazon.com/images/I/51LHHPfeA0L._SL160_.jpg",
+ "Width": 160
+ },
+ "Small": {
+ "Height": 75,
+ "URL": "https://m.media-amazon.com/images/I/51LHHPfeA0L._SL75_.jpg",
+ "Width": 75
+ }
+ },
+ {
+ "Large": {
+ "Height": 500,
+ "URL": "https://m.media-amazon.com/images/I/31G08vaBPzL._SL500_.jpg",
+ "Width": 245
+ },
+ "Medium": {
+ "Height": 160,
+ "URL": "https://m.media-amazon.com/images/I/31G08vaBPzL._SL160_.jpg",
+ "Width": 78
+ },
+ "Small": {
+ "Height": 75,
+ "URL": "https://m.media-amazon.com/images/I/31G08vaBPzL._SL75_.jpg",
+ "Width": 36
+ }
+ },
+ {
+ "Large": {
+ "Height": 500,
+ "URL": "https://m.media-amazon.com/images/I/41aDEaU5izL._SL500_.jpg",
+ "Width": 324
+ },
+ "Medium": {
+ "Height": 160,
+ "URL": "https://m.media-amazon.com/images/I/41aDEaU5izL._SL160_.jpg",
+ "Width": 103
+ },
+ "Small": {
+ "Height": 75,
+ "URL": "https://m.media-amazon.com/images/I/41aDEaU5izL._SL75_.jpg",
+ "Width": 48
+ }
+ },
+ {
+ "Large": {
+ "Height": 500,
+ "URL": "https://m.media-amazon.com/images/I/31G08vaBPzL._SL500_.jpg",
+ "Width": 245
+ },
+ "Medium": {
+ "Height": 160,
+ "URL": "https://m.media-amazon.com/images/I/31G08vaBPzL._SL160_.jpg",
+ "Width": 78
+ },
+ "Small": {
+ "Height": 75,
+ "URL": "https://m.media-amazon.com/images/I/31G08vaBPzL._SL75_.jpg",
+ "Width": 36
+ }
+ }
+ ]
+ },
+ "ItemInfo": {
+ "ByLineInfo": {
+ "Brand": {
+ "DisplayValue": "Coast",
+ "Label": "Brand",
+ "Locale": "en_US"
+ },
+ "Manufacturer": {
+ "DisplayValue": "Coast Cutlery Company",
+ "Label": "Manufacturer",
+ "Locale": "en_US"
+ }
+ },
+ "Classifications": {
+ "Binding": {
+ "DisplayValue": "Tools & Home Improvement",
+ "Label": "Binding",
+ "Locale": "en_US"
+ },
+ "ProductGroup": {
+ "DisplayValue": "Tools",
+ "Label": "ProductGroup",
+ "Locale": "en_US"
+ }
+ },
+ "ExternalIds": {
+ "EANs": {
+ "DisplayValues": [
+ "0015286215581",
+ "0015286208187"
+ ],
+ "Label": "EAN",
+ "Locale": "en_US"
+ },
+ "UPCs": {
+ "DisplayValues": [
+ "015286215581",
+ "015286208187"
+ ],
+ "Label": "UPC",
+ "Locale": "en_US"
+ }
+ },
+ "Features": {
+ "DisplayValues": [
+ "TWIST FOCUS OPTIC: The Simple Twist Focus System Goes From An Ultra View Flood Beam To Bulls-Eye Spot Beam",
+ "BRIGHT: 500 Lumens In A Small Package Perfect For A Pocket And Every Day Carry For Medical Personnel, Law Enforcement, Pilots, Military, And More",
+ "DUAL POWER: This Light Operates With Both Standard Alkaline Batteries And Our Custom Rechargeable Batteries. Battery Cartridge And Batteries Included",
+ "TOUGH AND RELIABLE: IP54 rated design for water resistance and durable body for 1-meter drop protection. Backed by the COAST Lifetime warranty against defects in materials and workmanship",
+ "HERITAGE: For 100 Years, And Three Generations Of The Brands Family, Coast Has Made Products That Make People’s Jobs And Recreation Easier, Safer And More Enjoyable"
+ ],
+ "Label": "Features",
+ "Locale": "en_US"
+ },
+ "ManufactureInfo": {
+ "ItemPartNumber": {
+ "DisplayValue": "Lumen Penlight",
+ "Label": "PartNumber",
+ "Locale": "en_US"
+ },
+ "Model": {
+ "DisplayValue": "Lumen Penlight",
+ "Label": "Model",
+ "Locale": "en_US"
+ },
+ "Warranty": {
+ "DisplayValue": "Limited lifetime.",
+ "Label": "Warranty",
+ "Locale": "en_US"
+ }
+ },
+ "ProductInfo": {
+ "Color": {
+ "DisplayValue": "Black",
+ "Label": "Color",
+ "Locale": "en_US"
+ },
+ "IsAdultProduct": {
+ "DisplayValue": false,
+ "Label": "IsAdultProduct",
+ "Locale": "en_US"
+ },
+ "ItemDimensions": {
+ "Height": {
+ "DisplayValue": 2.4,
+ "Label": "Height",
+ "Locale": "en_US",
+ "Unit": "inches"
+ },
+ "Length": {
+ "DisplayValue": 5.8,
+ "Label": "Length",
+ "Locale": "en_US",
+ "Unit": "inches"
+ },
+ "Weight": {
+ "DisplayValue": 0.220462262,
+ "Label": "Weight",
+ "Locale": "en_US",
+ "Unit": "Pounds"
+ },
+ "Width": {
+ "DisplayValue": 3.7,
+ "Label": "Width",
+ "Locale": "en_US",
+ "Unit": "inches"
+ }
+ },
+ "UnitCount": {
+ "DisplayValue": 1,
+ "Label": "NumberOfItems",
+ "Locale": "en_US"
+ }
+ },
+ "Title": {
+ "DisplayValue": "COAST HP3R 500 Lumen Rechargeable LED Penlight with TWIST FOCUS, Black",
+ "Label": "Title",
+ "Locale": "en_US"
+ }
+ },
+ "Offers": {
+ "Listings": [
+ {
+ "Availability": {
+ "Message": "In Stock",
+ "MinOrderQuantity": 1,
+ "Type": "Now"
+ },
+ "Condition": {
+ "SubCondition": {
+ "Value": "New"
+ },
+ "Value": "New"
+ },
+ "DeliveryInfo": {
+ "IsAmazonFulfilled": true,
+ "IsFreeShippingEligible": true,
+ "IsPrimeEligible": true
+ },
+ "Id": "tKyp2Ar2%2BdW7Jip3nJxiasvfuHen5smguIkBe5gSHlVeX0mJY5nCZiqp5oRVK0ljVBeE1V4OljxYBRhtvR5%2Fxib2dnRSSQioB02LSpWCuPPmzpRTpOf4zIQ%2ByCbvTIMxPwi%2BjO24XLN32%2F4eds5PkQ%3D%3D",
+ "IsBuyBoxWinner": true,
+ "MerchantInfo": {
+ "FeedbackCount": 385,
+ "FeedbackRating": 4.68,
+ "Id": "ATVPDKIKX0DER",
+ "Name": "Amazon.com"
+ },
+ "Price": {
+ "Amount": 56.56,
+ "Currency": "USD",
+ "DisplayAmount": "$56.56",
+ "Savings": {
+ "Amount": 38.43,
+ "Currency": "USD",
+ "DisplayAmount": "$38.43 (40%)",
+ "Percentage": 40
+ }
+ },
+ "ProgramEligibility": {
+ "IsPrimeExclusive": false,
+ "IsPrimePantry": false
+ },
+ "SavingBasis": {
+ "Amount": 94.99,
+ "Currency": "USD",
+ "DisplayAmount": "$94.99",
+ "PriceType": "LIST_PRICE"
+ },
+ "ViolatesMAP": false
+ }
+ ],
+ "Summaries": [
+ {
+ "Condition": {
+ "Value": "Used"
+ },
+ "HighestPrice": {
+ "Amount": 49.76,
+ "Currency": "USD",
+ "DisplayAmount": "$49.76"
+ },
+ "LowestPrice": {
+ "Amount": 48.25,
+ "Currency": "USD",
+ "DisplayAmount": "$48.25"
+ },
+ "OfferCount": 3
+ },
+ {
+ "Condition": {
+ "Value": "New"
+ },
+ "HighestPrice": {
+ "Amount": 87.29,
+ "Currency": "USD",
+ "DisplayAmount": "$87.29"
+ },
+ "LowestPrice": {
+ "Amount": 56.55,
+ "Currency": "USD",
+ "DisplayAmount": "$56.55"
+ },
+ "OfferCount": 9
+ }
+ ]
+ },
+ "ParentASIN": "B0B18LY12L"
+ },
+ {
+ "ASIN": "B0CXYQ2GGX",
+ "BrowseNodeInfo": {
+ "BrowseNodes": [
+ {
+ "Ancestor": {
+ "Ancestor": {
+ "Ancestor": {
+ "Ancestor": {
+ "ContextFreeName": "Tools & Home Improvement",
+ "DisplayName": "Tools & Home Improvement",
+ "Id": "228013"
+ },
+ "ContextFreeName": "Home Improvement",
+ "DisplayName": "Categories",
+ "Id": "468240"
+ },
+ "ContextFreeName": "Safety & Security",
+ "DisplayName": "Safety & Security",
+ "Id": "3180231"
+ },
+ "ContextFreeName": "Flashlights",
+ "DisplayName": "Flashlights",
+ "Id": "3180261"
+ },
+ "ContextFreeName": "Handheld Flashlights",
+ "DisplayName": "Handheld Flashlights",
+ "Id": "2445457011",
+ "IsRoot": false,
+ "SalesRank": 512
+ }
+ ],
+ "WebsiteSalesRank": {
+ "SalesRank": 32747
+ }
+ },
+ "DetailPageURL": "https://www.amazon.com/dp/B0CXYQ2GGX?tag=dashersupply-20&linkCode=osi&th=1&psc=1",
+ "Images": {
+ "Primary": {
+ "Large": {
+ "Height": 500,
+ "URL": "https://m.media-amazon.com/images/I/31v0gpmwuIL._SL500_.jpg",
+ "Width": 500
+ },
+ "Medium": {
+ "Height": 160,
+ "URL": "https://m.media-amazon.com/images/I/31v0gpmwuIL._SL160_.jpg",
+ "Width": 160
+ },
+ "Small": {
+ "Height": 75,
+ "URL": "https://m.media-amazon.com/images/I/31v0gpmwuIL._SL75_.jpg",
+ "Width": 75
+ }
+ },
+ "Variants": [
+ {
+ "Large": {
+ "Height": 500,
+ "URL": "https://m.media-amazon.com/images/I/41w7wd5nGRL._SL500_.jpg",
+ "Width": 500
+ },
+ "Medium": {
+ "Height": 160,
+ "URL": "https://m.media-amazon.com/images/I/41w7wd5nGRL._SL160_.jpg",
+ "Width": 160
+ },
+ "Small": {
+ "Height": 75,
+ "URL": "https://m.media-amazon.com/images/I/41w7wd5nGRL._SL75_.jpg",
+ "Width": 75
+ }
+ },
+ {
+ "Large": {
+ "Height": 500,
+ "URL": "https://m.media-amazon.com/images/I/51r6XCD7cWL._SL500_.jpg",
+ "Width": 500
+ },
+ "Medium": {
+ "Height": 160,
+ "URL": "https://m.media-amazon.com/images/I/51r6XCD7cWL._SL160_.jpg",
+ "Width": 160
+ },
+ "Small": {
+ "Height": 75,
+ "URL": "https://m.media-amazon.com/images/I/51r6XCD7cWL._SL75_.jpg",
+ "Width": 75
+ }
+ },
+ {
+ "Large": {
+ "Height": 500,
+ "URL": "https://m.media-amazon.com/images/I/514g1-3gGdL._SL500_.jpg",
+ "Width": 500
+ },
+ "Medium": {
+ "Height": 160,
+ "URL": "https://m.media-amazon.com/images/I/514g1-3gGdL._SL160_.jpg",
+ "Width": 160
+ },
+ "Small": {
+ "Height": 75,
+ "URL": "https://m.media-amazon.com/images/I/514g1-3gGdL._SL75_.jpg",
+ "Width": 75
+ }
+ },
+ {
+ "Large": {
+ "Height": 500,
+ "URL": "https://m.media-amazon.com/images/I/41qXAlHmOsL._SL500_.jpg",
+ "Width": 500
+ },
+ "Medium": {
+ "Height": 160,
+ "URL": "https://m.media-amazon.com/images/I/41qXAlHmOsL._SL160_.jpg",
+ "Width": 160
+ },
+ "Small": {
+ "Height": 75,
+ "URL": "https://m.media-amazon.com/images/I/41qXAlHmOsL._SL75_.jpg",
+ "Width": 75
+ }
+ },
+ {
+ "Large": {
+ "Height": 500,
+ "URL": "https://m.media-amazon.com/images/I/41wRrMiMs4L._SL500_.jpg",
+ "Width": 500
+ },
+ "Medium": {
+ "Height": 160,
+ "URL": "https://m.media-amazon.com/images/I/41wRrMiMs4L._SL160_.jpg",
+ "Width": 160
+ },
+ "Small": {
+ "Height": 75,
+ "URL": "https://m.media-amazon.com/images/I/41wRrMiMs4L._SL75_.jpg",
+ "Width": 75
+ }
+ },
+ {
+ "Large": {
+ "Height": 500,
+ "URL": "https://m.media-amazon.com/images/I/41zXsc-9YKL._SL500_.jpg",
+ "Width": 500
+ },
+ "Medium": {
+ "Height": 160,
+ "URL": "https://m.media-amazon.com/images/I/41zXsc-9YKL._SL160_.jpg",
+ "Width": 160
+ },
+ "Small": {
+ "Height": 75,
+ "URL": "https://m.media-amazon.com/images/I/41zXsc-9YKL._SL75_.jpg",
+ "Width": 75
+ }
+ },
+ {
+ "Large": {
+ "Height": 500,
+ "URL": "https://m.media-amazon.com/images/I/51mBq--8HuL._SL500_.jpg",
+ "Width": 500
+ },
+ "Medium": {
+ "Height": 160,
+ "URL": "https://m.media-amazon.com/images/I/51mBq--8HuL._SL160_.jpg",
+ "Width": 160
+ },
+ "Small": {
+ "Height": 75,
+ "URL": "https://m.media-amazon.com/images/I/51mBq--8HuL._SL75_.jpg",
+ "Width": 75
+ }
+ },
+ {
+ "Large": {
+ "Height": 500,
+ "URL": "https://m.media-amazon.com/images/I/51C5bWaKRML._SL500_.jpg",
+ "Width": 500
+ },
+ "Medium": {
+ "Height": 160,
+ "URL": "https://m.media-amazon.com/images/I/51C5bWaKRML._SL160_.jpg",
+ "Width": 160
+ },
+ "Small": {
+ "Height": 75,
+ "URL": "https://m.media-amazon.com/images/I/51C5bWaKRML._SL75_.jpg",
+ "Width": 75
+ }
+ },
+ {
+ "Large": {
+ "Height": 500,
+ "URL": "https://m.media-amazon.com/images/I/41FsusIladL._SL500_.jpg",
+ "Width": 500
+ },
+ "Medium": {
+ "Height": 160,
+ "URL": "https://m.media-amazon.com/images/I/41FsusIladL._SL160_.jpg",
+ "Width": 160
+ },
+ "Small": {
+ "Height": 75,
+ "URL": "https://m.media-amazon.com/images/I/41FsusIladL._SL75_.jpg",
+ "Width": 75
+ }
+ },
+ {
+ "Large": {
+ "Height": 500,
+ "URL": "https://m.media-amazon.com/images/I/41EoCzPK4NL._SL500_.jpg",
+ "Width": 500
+ },
+ "Medium": {
+ "Height": 160,
+ "URL": "https://m.media-amazon.com/images/I/41EoCzPK4NL._SL160_.jpg",
+ "Width": 160
+ },
+ "Small": {
+ "Height": 75,
+ "URL": "https://m.media-amazon.com/images/I/41EoCzPK4NL._SL75_.jpg",
+ "Width": 75
+ }
+ },
+ {
+ "Large": {
+ "Height": 500,
+ "URL": "https://m.media-amazon.com/images/I/3113vZZmGCL._SL500_.jpg",
+ "Width": 500
+ },
+ "Medium": {
+ "Height": 160,
+ "URL": "https://m.media-amazon.com/images/I/3113vZZmGCL._SL160_.jpg",
+ "Width": 160
+ },
+ "Small": {
+ "Height": 75,
+ "URL": "https://m.media-amazon.com/images/I/3113vZZmGCL._SL75_.jpg",
+ "Width": 75
+ }
+ },
+ {
+ "Large": {
+ "Height": 500,
+ "URL": "https://m.media-amazon.com/images/I/412qQHUlnJL._SL500_.jpg",
+ "Width": 500
+ },
+ "Medium": {
+ "Height": 160,
+ "URL": "https://m.media-amazon.com/images/I/412qQHUlnJL._SL160_.jpg",
+ "Width": 160
+ },
+ "Small": {
+ "Height": 75,
+ "URL": "https://m.media-amazon.com/images/I/412qQHUlnJL._SL75_.jpg",
+ "Width": 75
+ }
+ },
+ {
+ "Large": {
+ "Height": 500,
+ "URL": "https://m.media-amazon.com/images/I/41MaT-MvnCL._SL500_.jpg",
+ "Width": 500
+ },
+ "Medium": {
+ "Height": 160,
+ "URL": "https://m.media-amazon.com/images/I/41MaT-MvnCL._SL160_.jpg",
+ "Width": 160
+ },
+ "Small": {
+ "Height": 75,
+ "URL": "https://m.media-amazon.com/images/I/41MaT-MvnCL._SL75_.jpg",
+ "Width": 75
+ }
+ }
+ ]
+ },
+ "ItemInfo": {
+ "ByLineInfo": {
+ "Brand": {
+ "DisplayValue": "Coast",
+ "Label": "Brand",
+ "Locale": "en_US"
+ },
+ "Manufacturer": {
+ "DisplayValue": "Coast",
+ "Label": "Manufacturer",
+ "Locale": "en_US"
+ }
+ },
+ "Classifications": {
+ "Binding": {
+ "DisplayValue": "Tools & Home Improvement",
+ "Label": "Binding",
+ "Locale": "en_US"
+ },
+ "ProductGroup": {
+ "DisplayValue": "Tools",
+ "Label": "ProductGroup",
+ "Locale": "en_US"
+ }
+ },
+ "ExternalIds": {
+ "EANs": {
+ "DisplayValues": [
+ "0015286310330"
+ ],
+ "Label": "EAN",
+ "Locale": "en_US"
+ },
+ "UPCs": {
+ "DisplayValues": [
+ "015286310330"
+ ],
+ "Label": "UPC",
+ "Locale": "en_US"
+ }
+ },
+ "Features": {
+ "DisplayValues": [
+ "PURE BEAM FOCUSING OPTIC: Shine two beams from one optic—using PURE BEAM technology to transition seamlessly between Ultra View Flood Beam and BULLS-EYE Spot Beam.",
+ "BEAM LOCK and SLIDE FOCUS: Set the beam just how you need it. The SLIDE FOCUS system allows you to twist the bezel and secure the beam as a flood beam, spot beam, or anywhere in between.",
+ "FIVE LIGHT MODES: Easily select from five light modes—medium, high, low, Turbo, and moon glow—to match the flashlight’s output to your need.",
+ "RECHARGEABLE: Rely on the ZITHION-X rechargeable batteries for strong performance and cost savings over time.",
+ "BACKED BY COAST LIFETIME WARRANTY: Take confidence in your product knowing it is backed by COAST’s total commitment to quality and Lifetime Warranty program."
+ ],
+ "Label": "Features",
+ "Locale": "en_US"
+ },
+ "ManufactureInfo": {
+ "ItemPartNumber": {
+ "DisplayValue": "31033",
+ "Label": "PartNumber",
+ "Locale": "en_US"
+ },
+ "Model": {
+ "DisplayValue": "31033",
+ "Label": "Model",
+ "Locale": "en_US"
+ },
+ "Warranty": {
+ "DisplayValue": "Lifetime.",
+ "Label": "Warranty",
+ "Locale": "en_US"
+ }
+ },
+ "ProductInfo": {
+ "Color": {
+ "DisplayValue": "Black",
+ "Label": "Color",
+ "Locale": "en_US"
+ },
+ "ItemDimensions": {
+ "Height": {
+ "DisplayValue": 1.9,
+ "Label": "Height",
+ "Locale": "en_US",
+ "Unit": "inches"
+ },
+ "Length": {
+ "DisplayValue": 9.1,
+ "Label": "Length",
+ "Locale": "en_US",
+ "Unit": "inches"
+ },
+ "Width": {
+ "DisplayValue": 1.9,
+ "Label": "Width",
+ "Locale": "en_US",
+ "Unit": "inches"
+ }
+ },
+ "UnitCount": {
+ "DisplayValue": 1,
+ "Label": "NumberOfItems",
+ "Locale": "en_US"
+ }
+ },
+ "Title": {
+ "DisplayValue": "Coast XP14R 4500 Lumen USB-C Rechargeable LED Flashlight with SLIDE FOCUS® and PURE BEAM® Focusing Optic, 5 Light Modes",
+ "Label": "Title",
+ "Locale": "en_US"
+ }
+ },
+ "Offers": {
+ "Listings": [
+ {
+ "Availability": {
+ "Message": "In Stock",
+ "MinOrderQuantity": 1,
+ "Type": "Now"
+ },
+ "Condition": {
+ "SubCondition": {
+ "Value": "New"
+ },
+ "Value": "New"
+ },
+ "DeliveryInfo": {
+ "IsAmazonFulfilled": true,
+ "IsFreeShippingEligible": true,
+ "IsPrimeEligible": true
+ },
+ "Id": "tKyp2Ar2%2BdW7Jip3nJxiau7mI2xIASoQLQjSKA2%2FQUJ%2Fh2Ot2sSq0zdd7M5%2BiBr0w3XDHUFE2eB%2BrEnSJxaCAV9C0nqEdC%2F5FFtVU9PNTWGPZVasJFJAE%2Fb4oPnnQkO1KPvVr%2F1hgI4AWowi%2F5lBWA%3D%3D",
+ "IsBuyBoxWinner": true,
+ "MerchantInfo": {
+ "FeedbackCount": 385,
+ "FeedbackRating": 4.68,
+ "Id": "ATVPDKIKX0DER",
+ "Name": "Amazon.com"
+ },
+ "Price": {
+ "Amount": 74.99,
+ "Currency": "USD",
+ "DisplayAmount": "$74.99"
+ },
+ "ProgramEligibility": {
+ "IsPrimeExclusive": false,
+ "IsPrimePantry": false
+ },
+ "ViolatesMAP": false
+ }
+ ],
+ "Summaries": [
+ {
+ "Condition": {
+ "Value": "New"
+ },
+ "HighestPrice": {
+ "Amount": 79.48,
+ "Currency": "USD",
+ "DisplayAmount": "$79.48"
+ },
+ "LowestPrice": {
+ "Amount": 74.99,
+ "Currency": "USD",
+ "DisplayAmount": "$74.99"
+ },
+ "OfferCount": 3
+ },
+ {
+ "Condition": {
+ "Value": "Used"
+ },
+ "HighestPrice": {
+ "Amount": 63.54,
+ "Currency": "USD",
+ "DisplayAmount": "$63.54"
+ },
+ "LowestPrice": {
+ "Amount": 61.61,
+ "Currency": "USD",
+ "DisplayAmount": "$61.61"
+ },
+ "OfferCount": 2
+ }
+ ]
+ }
+ },
+ {
+ "ASIN": "B08L8C7DTW",
+ "BrowseNodeInfo": {
+ "BrowseNodes": [
+ {
+ "Ancestor": {
+ "Ancestor": {
+ "Ancestor": {
+ "Ancestor": {
+ "ContextFreeName": "Tools & Home Improvement",
+ "DisplayName": "Tools & Home Improvement",
+ "Id": "228013"
+ },
+ "ContextFreeName": "Home Improvement",
+ "DisplayName": "Categories",
+ "Id": "468240"
+ },
+ "ContextFreeName": "Safety & Security",
+ "DisplayName": "Safety & Security",
+ "Id": "3180231"
+ },
+ "ContextFreeName": "Flashlights",
+ "DisplayName": "Flashlights",
+ "Id": "3180261"
+ },
+ "ContextFreeName": "Handheld Flashlights",
+ "DisplayName": "Handheld Flashlights",
+ "Id": "2445457011",
+ "IsRoot": false,
+ "SalesRank": 320
+ }
+ ],
+ "WebsiteSalesRank": {
+ "SalesRank": 19141
+ }
+ },
+ "DetailPageURL": "https://www.amazon.com/dp/B08L8C7DTW?tag=dashersupply-20&linkCode=osi&th=1&psc=1",
+ "Images": {
+ "Primary": {
+ "Large": {
+ "Height": 500,
+ "URL": "https://m.media-amazon.com/images/I/31pPU-a15gL._SL500_.jpg",
+ "Width": 500
+ },
+ "Medium": {
+ "Height": 160,
+ "URL": "https://m.media-amazon.com/images/I/31pPU-a15gL._SL160_.jpg",
+ "Width": 160
+ },
+ "Small": {
+ "Height": 75,
+ "URL": "https://m.media-amazon.com/images/I/31pPU-a15gL._SL75_.jpg",
+ "Width": 75
+ }
+ },
+ "Variants": [
+ {
+ "Large": {
+ "Height": 500,
+ "URL": "https://m.media-amazon.com/images/I/41X8gWKp1eL._SL500_.jpg",
+ "Width": 500
+ },
+ "Medium": {
+ "Height": 160,
+ "URL": "https://m.media-amazon.com/images/I/41X8gWKp1eL._SL160_.jpg",
+ "Width": 160
+ },
+ "Small": {
+ "Height": 75,
+ "URL": "https://m.media-amazon.com/images/I/41X8gWKp1eL._SL75_.jpg",
+ "Width": 75
+ }
+ },
+ {
+ "Large": {
+ "Height": 500,
+ "URL": "https://m.media-amazon.com/images/I/51e0GXU9LrL._SL500_.jpg",
+ "Width": 500
+ },
+ "Medium": {
+ "Height": 160,
+ "URL": "https://m.media-amazon.com/images/I/51e0GXU9LrL._SL160_.jpg",
+ "Width": 160
+ },
+ "Small": {
+ "Height": 75,
+ "URL": "https://m.media-amazon.com/images/I/51e0GXU9LrL._SL75_.jpg",
+ "Width": 75
+ }
+ },
+ {
+ "Large": {
+ "Height": 500,
+ "URL": "https://m.media-amazon.com/images/I/51Kz+sBDvTL._SL500_.jpg",
+ "Width": 500
+ },
+ "Medium": {
+ "Height": 160,
+ "URL": "https://m.media-amazon.com/images/I/51Kz+sBDvTL._SL160_.jpg",
+ "Width": 160
+ },
+ "Small": {
+ "Height": 75,
+ "URL": "https://m.media-amazon.com/images/I/51Kz+sBDvTL._SL75_.jpg",
+ "Width": 75
+ }
+ },
+ {
+ "Large": {
+ "Height": 500,
+ "URL": "https://m.media-amazon.com/images/I/51qSxhMcNgL._SL500_.jpg",
+ "Width": 500
+ },
+ "Medium": {
+ "Height": 160,
+ "URL": "https://m.media-amazon.com/images/I/51qSxhMcNgL._SL160_.jpg",
+ "Width": 160
+ },
+ "Small": {
+ "Height": 75,
+ "URL": "https://m.media-amazon.com/images/I/51qSxhMcNgL._SL75_.jpg",
+ "Width": 75
+ }
+ },
+ {
+ "Large": {
+ "Height": 500,
+ "URL": "https://m.media-amazon.com/images/I/41hTqN4cLXL._SL500_.jpg",
+ "Width": 500
+ },
+ "Medium": {
+ "Height": 160,
+ "URL": "https://m.media-amazon.com/images/I/41hTqN4cLXL._SL160_.jpg",
+ "Width": 160
+ },
+ "Small": {
+ "Height": 75,
+ "URL": "https://m.media-amazon.com/images/I/41hTqN4cLXL._SL75_.jpg",
+ "Width": 75
+ }
+ },
+ {
+ "Large": {
+ "Height": 500,
+ "URL": "https://m.media-amazon.com/images/I/51UsGvxJDfL._SL500_.jpg",
+ "Width": 500
+ },
+ "Medium": {
+ "Height": 160,
+ "URL": "https://m.media-amazon.com/images/I/51UsGvxJDfL._SL160_.jpg",
+ "Width": 160
+ },
+ "Small": {
+ "Height": 75,
+ "URL": "https://m.media-amazon.com/images/I/51UsGvxJDfL._SL75_.jpg",
+ "Width": 75
+ }
+ },
+ {
+ "Large": {
+ "Height": 500,
+ "URL": "https://m.media-amazon.com/images/I/31pDCAF-BjL._SL500_.jpg",
+ "Width": 500
+ },
+ "Medium": {
+ "Height": 160,
+ "URL": "https://m.media-amazon.com/images/I/31pDCAF-BjL._SL160_.jpg",
+ "Width": 160
+ },
+ "Small": {
+ "Height": 75,
+ "URL": "https://m.media-amazon.com/images/I/31pDCAF-BjL._SL75_.jpg",
+ "Width": 75
+ }
+ },
+ {
+ "Large": {
+ "Height": 500,
+ "URL": "https://m.media-amazon.com/images/I/41OSVfwHp1L._SL500_.jpg",
+ "Width": 500
+ },
+ "Medium": {
+ "Height": 160,
+ "URL": "https://m.media-amazon.com/images/I/41OSVfwHp1L._SL160_.jpg",
+ "Width": 160
+ },
+ "Small": {
+ "Height": 75,
+ "URL": "https://m.media-amazon.com/images/I/41OSVfwHp1L._SL75_.jpg",
+ "Width": 75
+ }
+ },
+ {
+ "Large": {
+ "Height": 500,
+ "URL": "https://m.media-amazon.com/images/I/41hq6QznHCL._SL500_.jpg",
+ "Width": 500
+ },
+ "Medium": {
+ "Height": 160,
+ "URL": "https://m.media-amazon.com/images/I/41hq6QznHCL._SL160_.jpg",
+ "Width": 160
+ },
+ "Small": {
+ "Height": 75,
+ "URL": "https://m.media-amazon.com/images/I/41hq6QznHCL._SL75_.jpg",
+ "Width": 75
+ }
+ },
+ {
+ "Large": {
+ "Height": 500,
+ "URL": "https://m.media-amazon.com/images/I/41JOj9duB1L._SL500_.jpg",
+ "Width": 500
+ },
+ "Medium": {
+ "Height": 160,
+ "URL": "https://m.media-amazon.com/images/I/41JOj9duB1L._SL160_.jpg",
+ "Width": 160
+ },
+ "Small": {
+ "Height": 75,
+ "URL": "https://m.media-amazon.com/images/I/41JOj9duB1L._SL75_.jpg",
+ "Width": 75
+ }
+ },
+ {
+ "Large": {
+ "Height": 500,
+ "URL": "https://m.media-amazon.com/images/I/51nZNCkvfJL._SL500_.jpg",
+ "Width": 500
+ },
+ "Medium": {
+ "Height": 160,
+ "URL": "https://m.media-amazon.com/images/I/51nZNCkvfJL._SL160_.jpg",
+ "Width": 160
+ },
+ "Small": {
+ "Height": 75,
+ "URL": "https://m.media-amazon.com/images/I/51nZNCkvfJL._SL75_.jpg",
+ "Width": 75
+ }
+ },
+ {
+ "Large": {
+ "Height": 500,
+ "URL": "https://m.media-amazon.com/images/I/410OoPKnopL._SL500_.jpg",
+ "Width": 500
+ },
+ "Medium": {
+ "Height": 160,
+ "URL": "https://m.media-amazon.com/images/I/410OoPKnopL._SL160_.jpg",
+ "Width": 160
+ },
+ "Small": {
+ "Height": 75,
+ "URL": "https://m.media-amazon.com/images/I/410OoPKnopL._SL75_.jpg",
+ "Width": 75
+ }
+ }
+ ]
+ },
+ "ItemInfo": {
+ "ByLineInfo": {
+ "Brand": {
+ "DisplayValue": "Coast",
+ "Label": "Brand",
+ "Locale": "en_US"
+ },
+ "Manufacturer": {
+ "DisplayValue": "Coast",
+ "Label": "Manufacturer",
+ "Locale": "en_US"
+ }
+ },
+ "Classifications": {
+ "Binding": {
+ "DisplayValue": "Tools & Home Improvement",
+ "Label": "Binding",
+ "Locale": "en_US"
+ },
+ "ProductGroup": {
+ "DisplayValue": "Tools",
+ "Label": "ProductGroup",
+ "Locale": "en_US"
+ }
+ },
+ "ExternalIds": {
+ "EANs": {
+ "DisplayValues": [
+ "0015286303721",
+ "0015286305756",
+ "0015286303226",
+ "0015286303264",
+ "0015286309471"
+ ],
+ "Label": "EAN",
+ "Locale": "en_US"
+ },
+ "UPCs": {
+ "DisplayValues": [
+ "015286303264",
+ "015286303721",
+ "015286309471",
+ "015286305756",
+ "015286303226"
+ ],
+ "Label": "UPC",
+ "Locale": "en_US"
+ }
+ },
+ "Features": {
+ "DisplayValues": [
+ "SLIDE FOCUS: COAST-patented SLIDE FOCUS optical technology shines the Ultra View Flood Beam and BULLS-EYE Spot Beam with seamless transitions at up to 220 meters.",
+ "TURBO MODE: The XP11R Not Only Features Standard Light Modes But Also Coast’S Signature Turbo Mode For 2600 Lumens Of Light For Critical Situations.",
+ "RECHARGEABLE-DUAL POWER: Each coast Rechargeable-Dual Power product comes with a ZITHION-X rechargeable battery and is compatible with either Coast Extreme Performance alkaline batteries or other brand-name battery types, depending on the product. This provides you the cost savings of using rechargeable and the flexibility of reverting to alkaline",
+ "POWER INDICATOR: The XP11R has a real-time power indicator so that you always know when to power up.",
+ "TOUGH & RELIABLE: Backed by the COAST lifetime warranty against defects in materials and workmanship. IP54 rated design for water resistance and durable body for 1-meter drop protection."
+ ],
+ "Label": "Features",
+ "Locale": "en_US"
+ },
+ "ManufactureInfo": {
+ "ItemPartNumber": {
+ "DisplayValue": "30326",
+ "Label": "PartNumber",
+ "Locale": "en_US"
+ },
+ "Model": {
+ "DisplayValue": "30326",
+ "Label": "Model",
+ "Locale": "en_US"
+ },
+ "Warranty": {
+ "DisplayValue": "Coast warranties its coast knives, tools and coast led flashlights/headlamps to be free of defects in materials and workmanship for the life of the original purchaser. This warranty does not cover normal wear and tear, nor damage resulting from misuse or neglect. Warranty does not cover batteries and charging accessories (or damage caused by either). Batteries or damage caused by batteries (i. E. Leakage) not included in the guarantee.",
+ "Label": "Warranty",
+ "Locale": "en_US"
+ }
+ },
+ "ProductInfo": {
+ "Color": {
+ "DisplayValue": "Black",
+ "Label": "Color",
+ "Locale": "en_US"
+ },
+ "ItemDimensions": {
+ "Height": {
+ "DisplayValue": 5.98,
+ "Label": "Height",
+ "Locale": "en_US",
+ "Unit": "Inches"
+ },
+ "Length": {
+ "DisplayValue": 1.48,
+ "Label": "Length",
+ "Locale": "en_US",
+ "Unit": "Inches"
+ },
+ "Weight": {
+ "DisplayValue": 0.38,
+ "Label": "Weight",
+ "Locale": "en_US",
+ "Unit": "pounds"
+ },
+ "Width": {
+ "DisplayValue": 1.48,
+ "Label": "Width",
+ "Locale": "en_US",
+ "Unit": "Inches"
+ }
+ },
+ "UnitCount": {
+ "DisplayValue": 1,
+ "Label": "NumberOfItems",
+ "Locale": "en_US"
+ }
+ },
+ "Title": {
+ "DisplayValue": "COAST XP11R 2600 Lumen USB-C Rechargeable LED Flashlight with SLIDE FOCUS and PURE BEAM Focusing Optic, 4 Light Modes",
+ "Label": "Title",
+ "Locale": "en_US"
+ }
+ },
+ "Offers": {
+ "Listings": [
+ {
+ "Availability": {
+ "Message": "In Stock",
+ "MinOrderQuantity": 1,
+ "Type": "Now"
+ },
+ "Condition": {
+ "SubCondition": {
+ "Value": "New"
+ },
+ "Value": "New"
+ },
+ "DeliveryInfo": {
+ "IsAmazonFulfilled": true,
+ "IsFreeShippingEligible": true,
+ "IsPrimeEligible": true
+ },
+ "Id": "tKyp2Ar2%2BdW7Jip3nJxiatb16Zu16QddVnCwCc66n%2Fin%2BxFxm4RdIZNH%2Bu1Qj%2BpfJnAA9HPq0xZ%2FSnTYaQWmhQbnPQl7da90fSPtKEH229ijRJC5vfNWVxMVidozIkt47VAZc20F2sItdb%2FPgcdXjg%3D%3D",
+ "IsBuyBoxWinner": true,
+ "MerchantInfo": {
+ "FeedbackCount": 385,
+ "FeedbackRating": 4.68,
+ "Id": "ATVPDKIKX0DER",
+ "Name": "Amazon.com"
+ },
+ "Price": {
+ "Amount": 50.78,
+ "Currency": "USD",
+ "DisplayAmount": "$50.78",
+ "Savings": {
+ "Amount": 19.21,
+ "Currency": "USD",
+ "DisplayAmount": "$19.21 (27%)",
+ "Percentage": 27
+ }
+ },
+ "ProgramEligibility": {
+ "IsPrimeExclusive": false,
+ "IsPrimePantry": false
+ },
+ "SavingBasis": {
+ "Amount": 69.99,
+ "Currency": "USD",
+ "DisplayAmount": "$69.99",
+ "PriceType": "LIST_PRICE"
+ },
+ "ViolatesMAP": false
+ }
+ ],
+ "Summaries": [
+ {
+ "Condition": {
+ "Value": "New"
+ },
+ "HighestPrice": {
+ "Amount": 100.5,
+ "Currency": "USD",
+ "DisplayAmount": "$100.50"
+ },
+ "LowestPrice": {
+ "Amount": 49.99,
+ "Currency": "USD",
+ "DisplayAmount": "$49.99"
+ },
+ "OfferCount": 14
+ },
+ {
+ "Condition": {
+ "Value": "Used"
+ },
+ "HighestPrice": {
+ "Amount": 47.84,
+ "Currency": "USD",
+ "DisplayAmount": "$47.84"
+ },
+ "LowestPrice": {
+ "Amount": 47.84,
+ "Currency": "USD",
+ "DisplayAmount": "$47.84"
+ },
+ "OfferCount": 2
+ }
+ ]
+ },
+ "ParentASIN": "B0D956X876"
+ },
+ {
+ "ASIN": "B0D66BXKF5",
+ "BrowseNodeInfo": {
+ "BrowseNodes": [
+ {
+ "Ancestor": {
+ "Ancestor": {
+ "Ancestor": {
+ "Ancestor": {
+ "ContextFreeName": "Tools & Home Improvement",
+ "DisplayName": "Tools & Home Improvement",
+ "Id": "228013"
+ },
+ "ContextFreeName": "Home Improvement",
+ "DisplayName": "Categories",
+ "Id": "468240"
+ },
+ "ContextFreeName": "Safety & Security",
+ "DisplayName": "Safety & Security",
+ "Id": "3180231"
+ },
+ "ContextFreeName": "Flashlights",
+ "DisplayName": "Flashlights",
+ "Id": "3180261"
+ },
+ "ContextFreeName": "Handheld Flashlights",
+ "DisplayName": "Handheld Flashlights",
+ "Id": "2445457011",
+ "IsRoot": false,
+ "SalesRank": 665
+ }
+ ],
+ "WebsiteSalesRank": {
+ "SalesRank": 43486
+ }
+ },
+ "DetailPageURL": "https://www.amazon.com/dp/B0D66BXKF5?tag=dashersupply-20&linkCode=osi&th=1&psc=1",
+ "Images": {
+ "Primary": {
+ "Large": {
+ "Height": 500,
+ "URL": "https://m.media-amazon.com/images/I/51c6MXIzzLL._SL500_.jpg",
+ "Width": 500
+ },
+ "Medium": {
+ "Height": 160,
+ "URL": "https://m.media-amazon.com/images/I/51c6MXIzzLL._SL160_.jpg",
+ "Width": 160
+ },
+ "Small": {
+ "Height": 75,
+ "URL": "https://m.media-amazon.com/images/I/51c6MXIzzLL._SL75_.jpg",
+ "Width": 75
+ }
+ },
+ "Variants": [
+ {
+ "Large": {
+ "Height": 500,
+ "URL": "https://m.media-amazon.com/images/I/51kEpBzuCcL._SL500_.jpg",
+ "Width": 500
+ },
+ "Medium": {
+ "Height": 160,
+ "URL": "https://m.media-amazon.com/images/I/51kEpBzuCcL._SL160_.jpg",
+ "Width": 160
+ },
+ "Small": {
+ "Height": 75,
+ "URL": "https://m.media-amazon.com/images/I/51kEpBzuCcL._SL75_.jpg",
+ "Width": 75
+ }
+ }
+ ]
+ },
+ "ItemInfo": {
+ "ByLineInfo": {
+ "Brand": {
+ "DisplayValue": "Coast",
+ "Label": "Brand",
+ "Locale": "en_US"
+ },
+ "Manufacturer": {
+ "DisplayValue": "Coast",
+ "Label": "Manufacturer",
+ "Locale": "en_US"
+ }
+ },
+ "Classifications": {
+ "ProductGroup": {
+ "DisplayValue": "Tools",
+ "Label": "ProductGroup",
+ "Locale": "en_US"
+ }
+ },
+ "ExternalIds": {
+ "EANs": {
+ "DisplayValues": [
+ "0015286311092"
+ ],
+ "Label": "EAN",
+ "Locale": "en_US"
+ },
+ "UPCs": {
+ "DisplayValues": [
+ "015286311092"
+ ],
+ "Label": "UPC",
+ "Locale": "en_US"
+ }
+ },
+ "Features": {
+ "DisplayValues": [
+ "Bright Illumination: Delivers an impressive 1000 lumens of brilliant LED light for outdoor activities.",
+ "Rechargeable Convenience: Features a rechargeable battery, eliminating the need for disposable batteries.",
+ "Long-Lasting: Provides up to 6 hours of runtime on high mode (1000 lumens).",
+ "Durable Construction: Made with high-quality materials for rugged and reliable performance.",
+ "Value Pack: Includes 3 flashlights, perfect for outdoor adventures or emergency preparedness."
+ ],
+ "Label": "Features",
+ "Locale": "en_US"
+ },
+ "ManufactureInfo": {
+ "ItemPartNumber": {
+ "DisplayValue": "1718612",
+ "Label": "PartNumber",
+ "Locale": "en_US"
+ },
+ "Model": {
+ "DisplayValue": "CF1000R",
+ "Label": "Model",
+ "Locale": "en_US"
+ },
+ "Warranty": {
+ "DisplayValue": "Lifetime manufacturers.",
+ "Label": "Warranty",
+ "Locale": "en_US"
+ }
+ },
+ "ProductInfo": {
+ "Color": {
+ "DisplayValue": "Black",
+ "Label": "Color",
+ "Locale": "en_US"
+ },
+ "ItemDimensions": {
+ "Height": {
+ "DisplayValue": 9.5,
+ "Label": "Height",
+ "Locale": "en_US",
+ "Unit": "inches"
+ },
+ "Length": {
+ "DisplayValue": 2.5,
+ "Label": "Length",
+ "Locale": "en_US",
+ "Unit": "inches"
+ },
+ "Width": {
+ "DisplayValue": 12,
+ "Label": "Width",
+ "Locale": "en_US",
+ "Unit": "inches"
+ }
+ },
+ "UnitCount": {
+ "DisplayValue": 3,
+ "Label": "NumberOfItems",
+ "Locale": "en_US"
+ }
+ },
+ "Title": {
+ "DisplayValue": "Coast 1000 Lumen Rechargeable LED Flashlight, Adjustable Focus, Waterproof, Dustproof, Rugged for Fishing, Hiking, Camping, Mechanic Work - Set of 3, Black, CF1000R",
+ "Label": "Title",
+ "Locale": "en_US"
+ }
+ },
+ "Offers": {
+ "Listings": [
+ {
+ "Availability": {
+ "Message": "In Stock",
+ "MinOrderQuantity": 1,
+ "Type": "Now"
+ },
+ "Condition": {
+ "SubCondition": {
+ "Value": "New"
+ },
+ "Value": "New"
+ },
+ "DeliveryInfo": {
+ "IsAmazonFulfilled": false,
+ "IsFreeShippingEligible": false,
+ "IsPrimeEligible": false
+ },
+ "Id": "tKyp2Ar2%2BdW7Jip3nJxiahzZ1FnJKBTNR9%2F%2BzWPMkdfitLpv%2F97Xj53AE816GMLsyJ2%2FlMsGU7WVpINbUwagv8LJDOXeKVA3FN7AscflBLIIE3azqrFV6o%2Bknb3NMhhhkDB%2BJJ2sg0iUNV04sIcq8M2Hs19qS6BGZG9QX6Chc05Af%2Ba%2BcJ%2F%2BmAMo5%2B39CE8N",
+ "IsBuyBoxWinner": true,
+ "MerchantInfo": {
+ "DefaultShippingCountry": "US",
+ "FeedbackCount": 43,
+ "FeedbackRating": 4.75,
+ "Id": "A38RIMN4NBLYL",
+ "Name": "ValueShop(Serial # recorded)"
+ },
+ "Price": {
+ "Amount": 29.99,
+ "Currency": "USD",
+ "DisplayAmount": "$29.99",
+ "Savings": {
+ "Amount": 10,
+ "Currency": "USD",
+ "DisplayAmount": "$10.00 (25%)",
+ "Percentage": 25
+ }
+ },
+ "ProgramEligibility": {
+ "IsPrimeExclusive": false,
+ "IsPrimePantry": false
+ },
+ "SavingBasis": {
+ "Amount": 39.99,
+ "Currency": "USD",
+ "DisplayAmount": "$39.99",
+ "PriceType": "WAS_PRICE"
+ },
+ "ViolatesMAP": false
+ }
+ ],
+ "Summaries": [
+ {
+ "Condition": {
+ "Value": "New"
+ },
+ "HighestPrice": {
+ "Amount": 49.99,
+ "Currency": "USD",
+ "DisplayAmount": "$49.99"
+ },
+ "LowestPrice": {
+ "Amount": 29.99,
+ "Currency": "USD",
+ "DisplayAmount": "$29.99"
+ },
+ "OfferCount": 13
+ },
+ {
+ "Condition": {
+ "Value": "Used"
+ },
+ "HighestPrice": {
+ "Amount": 35.99,
+ "Currency": "USD",
+ "DisplayAmount": "$35.99"
+ },
+ "LowestPrice": {
+ "Amount": 35.99,
+ "Currency": "USD",
+ "DisplayAmount": "$35.99"
+ },
+ "OfferCount": 1
+ }
+ ]
+ }
+ },
+ {
+ "ASIN": "B00CO8YV92",
+ "BrowseNodeInfo": {
+ "BrowseNodes": [
+ {
+ "Ancestor": {
+ "Ancestor": {
+ "Ancestor": {
+ "Ancestor": {
+ "ContextFreeName": "Tools & Home Improvement",
+ "DisplayName": "Tools & Home Improvement",
+ "Id": "228013"
+ },
+ "ContextFreeName": "Home Improvement",
+ "DisplayName": "Categories",
+ "Id": "468240"
+ },
+ "ContextFreeName": "Safety & Security",
+ "DisplayName": "Safety & Security",
+ "Id": "3180231"
+ },
+ "ContextFreeName": "Flashlights",
+ "DisplayName": "Flashlights",
+ "Id": "3180261"
+ },
+ "ContextFreeName": "Handheld Flashlights",
+ "DisplayName": "Handheld Flashlights",
+ "Id": "2445457011",
+ "IsRoot": false,
+ "SalesRank": 511
+ }
+ ],
+ "WebsiteSalesRank": {
+ "SalesRank": 32732
+ }
+ },
+ "DetailPageURL": "https://www.amazon.com/dp/B00CO8YV92?tag=dashersupply-20&linkCode=osi&th=1&psc=1",
+ "Images": {
+ "Primary": {
+ "Large": {
+ "Height": 500,
+ "URL": "https://m.media-amazon.com/images/I/317FNIcrACL._SL500_.jpg",
+ "Width": 500
+ },
+ "Medium": {
+ "Height": 160,
+ "URL": "https://m.media-amazon.com/images/I/317FNIcrACL._SL160_.jpg",
+ "Width": 160
+ },
+ "Small": {
+ "Height": 75,
+ "URL": "https://m.media-amazon.com/images/I/317FNIcrACL._SL75_.jpg",
+ "Width": 75
+ }
+ },
+ "Variants": [
+ {
+ "Large": {
+ "Height": 500,
+ "URL": "https://m.media-amazon.com/images/I/4196R5otB+L._SL500_.jpg",
+ "Width": 500
+ },
+ "Medium": {
+ "Height": 160,
+ "URL": "https://m.media-amazon.com/images/I/4196R5otB+L._SL160_.jpg",
+ "Width": 160
+ },
+ "Small": {
+ "Height": 75,
+ "URL": "https://m.media-amazon.com/images/I/4196R5otB+L._SL75_.jpg",
+ "Width": 75
+ }
+ },
+ {
+ "Large": {
+ "Height": 500,
+ "URL": "https://m.media-amazon.com/images/I/51BPoBlN9RL._SL500_.jpg",
+ "Width": 500
+ },
+ "Medium": {
+ "Height": 160,
+ "URL": "https://m.media-amazon.com/images/I/51BPoBlN9RL._SL160_.jpg",
+ "Width": 160
+ },
+ "Small": {
+ "Height": 75,
+ "URL": "https://m.media-amazon.com/images/I/51BPoBlN9RL._SL75_.jpg",
+ "Width": 75
+ }
+ },
+ {
+ "Large": {
+ "Height": 500,
+ "URL": "https://m.media-amazon.com/images/I/41pKhStFBnL._SL500_.jpg",
+ "Width": 500
+ },
+ "Medium": {
+ "Height": 160,
+ "URL": "https://m.media-amazon.com/images/I/41pKhStFBnL._SL160_.jpg",
+ "Width": 160
+ },
+ "Small": {
+ "Height": 75,
+ "URL": "https://m.media-amazon.com/images/I/41pKhStFBnL._SL75_.jpg",
+ "Width": 75
+ }
+ },
+ {
+ "Large": {
+ "Height": 500,
+ "URL": "https://m.media-amazon.com/images/I/41PCF2vXM5L._SL500_.jpg",
+ "Width": 500
+ },
+ "Medium": {
+ "Height": 160,
+ "URL": "https://m.media-amazon.com/images/I/41PCF2vXM5L._SL160_.jpg",
+ "Width": 160
+ },
+ "Small": {
+ "Height": 75,
+ "URL": "https://m.media-amazon.com/images/I/41PCF2vXM5L._SL75_.jpg",
+ "Width": 75
+ }
+ },
+ {
+ "Large": {
+ "Height": 500,
+ "URL": "https://m.media-amazon.com/images/I/41x-6OLpG6L._SL500_.jpg",
+ "Width": 500
+ },
+ "Medium": {
+ "Height": 160,
+ "URL": "https://m.media-amazon.com/images/I/41x-6OLpG6L._SL160_.jpg",
+ "Width": 160
+ },
+ "Small": {
+ "Height": 75,
+ "URL": "https://m.media-amazon.com/images/I/41x-6OLpG6L._SL75_.jpg",
+ "Width": 75
+ }
+ },
+ {
+ "Large": {
+ "Height": 500,
+ "URL": "https://m.media-amazon.com/images/I/41Ad23sZvHL._SL500_.jpg",
+ "Width": 500
+ },
+ "Medium": {
+ "Height": 160,
+ "URL": "https://m.media-amazon.com/images/I/41Ad23sZvHL._SL160_.jpg",
+ "Width": 160
+ },
+ "Small": {
+ "Height": 75,
+ "URL": "https://m.media-amazon.com/images/I/41Ad23sZvHL._SL75_.jpg",
+ "Width": 75
+ }
+ }
+ ]
+ },
+ "ItemInfo": {
+ "ByLineInfo": {
+ "Brand": {
+ "DisplayValue": "Coast",
+ "Label": "Brand",
+ "Locale": "en_US"
+ },
+ "Manufacturer": {
+ "DisplayValue": "Coast",
+ "Label": "Manufacturer",
+ "Locale": "en_US"
+ }
+ },
+ "Classifications": {
+ "Binding": {
+ "DisplayValue": "Apparel",
+ "Label": "Binding",
+ "Locale": "en_US"
+ },
+ "ProductGroup": {
+ "DisplayValue": "Tools",
+ "Label": "ProductGroup",
+ "Locale": "en_US"
+ }
+ },
+ "ExternalIds": {
+ "EANs": {
+ "DisplayValues": [
+ "0015286196804"
+ ],
+ "Label": "EAN",
+ "Locale": "en_US"
+ },
+ "UPCs": {
+ "DisplayValues": [
+ "015286196804"
+ ],
+ "Label": "UPC",
+ "Locale": "en_US"
+ }
+ },
+ "Features": {
+ "DisplayValues": [
+ "Bulls-Eye Spot Beam Optic: Consists Of An Extremely Bright, Centered ‘Hot Spot’ And A Very Consistent Transition Halo To Increase The Effective Viewing Area",
+ "Quick-Cycle Switch: Control Your Light Power With The Push Of A Button. Cycle Between High Power And Low Power Options",
+ "Specs: Light Output 415 Lumens (High), 155 Lumens (Low). Beam Distance: 134 Meters (High), 79 Meters (Low). Runtime: 4.5 Hours (High), 16 Hours (Low). Tested And Rated To Ansi/Fl1 Standards",
+ "Ip54 Rated Design For Water Resistance And Durable Body For 1-Meter Drop Protection"
+ ],
+ "Label": "Features",
+ "Locale": "en_US"
+ },
+ "ManufactureInfo": {
+ "ItemPartNumber": {
+ "DisplayValue": "19680",
+ "Label": "PartNumber",
+ "Locale": "en_US"
+ },
+ "Model": {
+ "DisplayValue": "19680",
+ "Label": "Model",
+ "Locale": "en_US"
+ },
+ "Warranty": {
+ "DisplayValue": "Coast warranties its coast knives, tools and coast led flashlights/headlamps to be free of defects in materials and workmanship for the life of the original purchaser. This warranty does not cover normal wear and tear, nor damage resulting from misuse or neglect. Warranty does not cover batteries and charging accessories (or damage caused by either). Batteries or damage caused by batteries (i. E. Leakage) not included in the guarantee.",
+ "Label": "Warranty",
+ "Locale": "en_US"
+ }
+ },
+ "ProductInfo": {
+ "Color": {
+ "DisplayValue": "Black",
+ "Label": "Color",
+ "Locale": "en_US"
+ },
+ "IsAdultProduct": {
+ "DisplayValue": false,
+ "Label": "IsAdultProduct",
+ "Locale": "en_US"
+ },
+ "ItemDimensions": {
+ "Height": {
+ "DisplayValue": 1.06,
+ "Label": "Height",
+ "Locale": "en_US",
+ "Unit": "inches"
+ },
+ "Length": {
+ "DisplayValue": 6.42,
+ "Label": "Length",
+ "Locale": "en_US",
+ "Unit": "inches"
+ },
+ "Weight": {
+ "DisplayValue": 0.3,
+ "Label": "Weight",
+ "Locale": "en_US",
+ "Unit": "Pounds"
+ },
+ "Width": {
+ "DisplayValue": 1.06,
+ "Label": "Width",
+ "Locale": "en_US",
+ "Unit": "inches"
+ }
+ },
+ "Size": {
+ "DisplayValue": "1 Pack",
+ "Label": "Size",
+ "Locale": "en_US"
+ },
+ "UnitCount": {
+ "DisplayValue": 1,
+ "Label": "NumberOfItems",
+ "Locale": "en_US"
+ }
+ },
+ "Title": {
+ "DisplayValue": "Coast® G26 415 Lumen Bulls-Eye™ Spot Beam LED Flashlight, Batteries Included, Black",
+ "Label": "Title",
+ "Locale": "en_US"
+ }
+ },
+ "Offers": {
+ "Listings": [
+ {
+ "Availability": {
+ "Message": "In Stock",
+ "MinOrderQuantity": 1,
+ "Type": "Now"
+ },
+ "Condition": {
+ "SubCondition": {
+ "Value": "New"
+ },
+ "Value": "New"
+ },
+ "DeliveryInfo": {
+ "IsAmazonFulfilled": true,
+ "IsFreeShippingEligible": true,
+ "IsPrimeEligible": true
+ },
+ "Id": "tKyp2Ar2%2BdW7Jip3nJxiasvzO0wc8DMKMWlW1OxgtVmzJz4iFhny2wDWXrvyPR65UXMpBhxdWYibRi%2BSLFUQ9QDiC0KbhIjJr1nGG60y80B8vfxl%2BxtiLhgvI1aI5jZ8lJx28ta7vXehr8FzE%2Fq6gA%3D%3D",
+ "IsBuyBoxWinner": true,
+ "MerchantInfo": {
+ "FeedbackCount": 385,
+ "FeedbackRating": 4.68,
+ "Id": "ATVPDKIKX0DER",
+ "Name": "Amazon.com"
+ },
+ "Price": {
+ "Amount": 14.99,
+ "Currency": "USD",
+ "DisplayAmount": "$14.99",
+ "Savings": {
+ "Amount": 15,
+ "Currency": "USD",
+ "DisplayAmount": "$15.00 (50%)",
+ "Percentage": 50
+ }
+ },
+ "ProgramEligibility": {
+ "IsPrimeExclusive": false,
+ "IsPrimePantry": false
+ },
+ "SavingBasis": {
+ "Amount": 29.99,
+ "Currency": "USD",
+ "DisplayAmount": "$29.99",
+ "PriceType": "LIST_PRICE"
+ },
+ "ViolatesMAP": false
+ }
+ ],
+ "Summaries": [
+ {
+ "Condition": {
+ "Value": "Used"
+ },
+ "HighestPrice": {
+ "Amount": 13.85,
+ "Currency": "USD",
+ "DisplayAmount": "$13.85"
+ },
+ "LowestPrice": {
+ "Amount": 13.85,
+ "Currency": "USD",
+ "DisplayAmount": "$13.85"
+ },
+ "OfferCount": 1
+ },
+ {
+ "Condition": {
+ "Value": "New"
+ },
+ "HighestPrice": {
+ "Amount": 36.82,
+ "Currency": "USD",
+ "DisplayAmount": "$36.82"
+ },
+ "LowestPrice": {
+ "Amount": 13.18,
+ "Currency": "USD",
+ "DisplayAmount": "$13.18"
+ },
+ "OfferCount": 20
+ }
+ ]
+ }
+ },
+ {
+ "ASIN": "B0CFT6H9RZ",
+ "BrowseNodeInfo": {
+ "BrowseNodes": [
+ {
+ "Ancestor": {
+ "Ancestor": {
+ "Ancestor": {
+ "Ancestor": {
+ "ContextFreeName": "Tools & Home Improvement",
+ "DisplayName": "Tools & Home Improvement",
+ "Id": "228013"
+ },
+ "ContextFreeName": "Home Improvement",
+ "DisplayName": "Categories",
+ "Id": "468240"
+ },
+ "ContextFreeName": "Safety & Security",
+ "DisplayName": "Safety & Security",
+ "Id": "3180231"
+ },
+ "ContextFreeName": "Flashlights",
+ "DisplayName": "Flashlights",
+ "Id": "3180261"
+ },
+ "ContextFreeName": "Handheld Flashlights",
+ "DisplayName": "Handheld Flashlights",
+ "Id": "2445457011",
+ "IsRoot": false,
+ "SalesRank": 912
+ }
+ ],
+ "WebsiteSalesRank": {
+ "SalesRank": 62521
+ }
+ },
+ "DetailPageURL": "https://www.amazon.com/dp/B0CFT6H9RZ?tag=dashersupply-20&linkCode=osi&th=1&psc=1",
+ "Images": {
+ "Primary": {
+ "Large": {
+ "Height": 500,
+ "URL": "https://m.media-amazon.com/images/I/31gGdKl9TTL._SL500_.jpg",
+ "Width": 500
+ },
+ "Medium": {
+ "Height": 160,
+ "URL": "https://m.media-amazon.com/images/I/31gGdKl9TTL._SL160_.jpg",
+ "Width": 160
+ },
+ "Small": {
+ "Height": 75,
+ "URL": "https://m.media-amazon.com/images/I/31gGdKl9TTL._SL75_.jpg",
+ "Width": 75
+ }
+ },
+ "Variants": [
+ {
+ "Large": {
+ "Height": 500,
+ "URL": "https://m.media-amazon.com/images/I/41HIiUBdiYL._SL500_.jpg",
+ "Width": 500
+ },
+ "Medium": {
+ "Height": 160,
+ "URL": "https://m.media-amazon.com/images/I/41HIiUBdiYL._SL160_.jpg",
+ "Width": 160
+ },
+ "Small": {
+ "Height": 75,
+ "URL": "https://m.media-amazon.com/images/I/41HIiUBdiYL._SL75_.jpg",
+ "Width": 75
+ }
+ },
+ {
+ "Large": {
+ "Height": 500,
+ "URL": "https://m.media-amazon.com/images/I/514OP9GR6+L._SL500_.jpg",
+ "Width": 500
+ },
+ "Medium": {
+ "Height": 160,
+ "URL": "https://m.media-amazon.com/images/I/514OP9GR6+L._SL160_.jpg",
+ "Width": 160
+ },
+ "Small": {
+ "Height": 75,
+ "URL": "https://m.media-amazon.com/images/I/514OP9GR6+L._SL75_.jpg",
+ "Width": 75
+ }
+ },
+ {
+ "Large": {
+ "Height": 500,
+ "URL": "https://m.media-amazon.com/images/I/51vNzssLWfL._SL500_.jpg",
+ "Width": 500
+ },
+ "Medium": {
+ "Height": 160,
+ "URL": "https://m.media-amazon.com/images/I/51vNzssLWfL._SL160_.jpg",
+ "Width": 160
+ },
+ "Small": {
+ "Height": 75,
+ "URL": "https://m.media-amazon.com/images/I/51vNzssLWfL._SL75_.jpg",
+ "Width": 75
+ }
+ },
+ {
+ "Large": {
+ "Height": 500,
+ "URL": "https://m.media-amazon.com/images/I/61xExF3DG+L._SL500_.jpg",
+ "Width": 500
+ },
+ "Medium": {
+ "Height": 160,
+ "URL": "https://m.media-amazon.com/images/I/61xExF3DG+L._SL160_.jpg",
+ "Width": 160
+ },
+ "Small": {
+ "Height": 75,
+ "URL": "https://m.media-amazon.com/images/I/61xExF3DG+L._SL75_.jpg",
+ "Width": 75
+ }
+ },
+ {
+ "Large": {
+ "Height": 500,
+ "URL": "https://m.media-amazon.com/images/I/510jhQtrecL._SL500_.jpg",
+ "Width": 500
+ },
+ "Medium": {
+ "Height": 160,
+ "URL": "https://m.media-amazon.com/images/I/510jhQtrecL._SL160_.jpg",
+ "Width": 160
+ },
+ "Small": {
+ "Height": 75,
+ "URL": "https://m.media-amazon.com/images/I/510jhQtrecL._SL75_.jpg",
+ "Width": 75
+ }
+ },
+ {
+ "Large": {
+ "Height": 500,
+ "URL": "https://m.media-amazon.com/images/I/410tyb+9oOL._SL500_.jpg",
+ "Width": 500
+ },
+ "Medium": {
+ "Height": 160,
+ "URL": "https://m.media-amazon.com/images/I/410tyb+9oOL._SL160_.jpg",
+ "Width": 160
+ },
+ "Small": {
+ "Height": 75,
+ "URL": "https://m.media-amazon.com/images/I/410tyb+9oOL._SL75_.jpg",
+ "Width": 75
+ }
+ },
+ {
+ "Large": {
+ "Height": 500,
+ "URL": "https://m.media-amazon.com/images/I/41IvTbcjdKL._SL500_.jpg",
+ "Width": 500
+ },
+ "Medium": {
+ "Height": 160,
+ "URL": "https://m.media-amazon.com/images/I/41IvTbcjdKL._SL160_.jpg",
+ "Width": 160
+ },
+ "Small": {
+ "Height": 75,
+ "URL": "https://m.media-amazon.com/images/I/41IvTbcjdKL._SL75_.jpg",
+ "Width": 75
+ }
+ },
+ {
+ "Large": {
+ "Height": 500,
+ "URL": "https://m.media-amazon.com/images/I/41P6TIyCGjL._SL500_.jpg",
+ "Width": 500
+ },
+ "Medium": {
+ "Height": 160,
+ "URL": "https://m.media-amazon.com/images/I/41P6TIyCGjL._SL160_.jpg",
+ "Width": 160
+ },
+ "Small": {
+ "Height": 75,
+ "URL": "https://m.media-amazon.com/images/I/41P6TIyCGjL._SL75_.jpg",
+ "Width": 75
+ }
+ },
+ {
+ "Large": {
+ "Height": 500,
+ "URL": "https://m.media-amazon.com/images/I/51w+0HoDaRL._SL500_.jpg",
+ "Width": 500
+ },
+ "Medium": {
+ "Height": 160,
+ "URL": "https://m.media-amazon.com/images/I/51w+0HoDaRL._SL160_.jpg",
+ "Width": 160
+ },
+ "Small": {
+ "Height": 75,
+ "URL": "https://m.media-amazon.com/images/I/51w+0HoDaRL._SL75_.jpg",
+ "Width": 75
+ }
+ }
+ ]
+ },
+ "ItemInfo": {
+ "ByLineInfo": {
+ "Brand": {
+ "DisplayValue": "Coast",
+ "Label": "Brand",
+ "Locale": "en_US"
+ },
+ "Manufacturer": {
+ "DisplayValue": "Coast",
+ "Label": "Manufacturer",
+ "Locale": "en_US"
+ }
+ },
+ "Classifications": {
+ "Binding": {
+ "DisplayValue": "Tools & Home Improvement",
+ "Label": "Binding",
+ "Locale": "en_US"
+ },
+ "ProductGroup": {
+ "DisplayValue": "Tools",
+ "Label": "ProductGroup",
+ "Locale": "en_US"
+ }
+ },
+ "ExternalIds": {
+ "EANs": {
+ "DisplayValues": [
+ "0015286309099"
+ ],
+ "Label": "EAN",
+ "Locale": "en_US"
+ },
+ "UPCs": {
+ "DisplayValues": [
+ "015286309099"
+ ],
+ "Label": "UPC",
+ "Locale": "en_US"
+ }
+ },
+ "Features": {
+ "DisplayValues": [
+ "PURE BEAM FOCUSING OPTIC: Shine two beams from one optic—using PURE BEAM technology to transition seamlessly between Ultra View Flood Beam and BULLS-EYE Spot Beam.",
+ "TWIST FOCUS: Adjust the beam shape—flood beam, spot beam, or anywhere in between—by twisting the bezel to focus the light.",
+ "DUAL POWER: Power your flashlight how it suits you best—with standard alkaline AAAs (included) or a COAST ZITHION-X ZX750 rechargeable battery (purchased separately) for added convenience and savings over time.",
+ "GRIP-TEXTURED HANDLE: Keep close control of your light with a firm grasp on the grip-textured handle.",
+ "IP67 WATERPROOF: Shine through just about anything—with a light that stands up to dust and is waterproof against full submersion down to a meter."
+ ],
+ "Label": "Features",
+ "Locale": "en_US"
+ },
+ "ManufactureInfo": {
+ "ItemPartNumber": {
+ "DisplayValue": "30909",
+ "Label": "PartNumber",
+ "Locale": "en_US"
+ },
+ "Model": {
+ "DisplayValue": "30909",
+ "Label": "Model",
+ "Locale": "en_US"
+ },
+ "Warranty": {
+ "DisplayValue": "Coast warranties its coast knives, tools and coast led flashlights/headlamps to be free of defects in materials and workmanship for the life of the original purchaser. This warranty does not cover normal wear and tear, nor damage resulting from misuse or neglect. Warranty does not cover batteries and charging accessories (or damage caused by either). Batteries or damage caused by batteries (i. E. Leakage) not included in the guarantee. Warranty exchanges do not cover the cost of shipping and handling.",
+ "Label": "Warranty",
+ "Locale": "en_US"
+ }
+ },
+ "ProductInfo": {
+ "Color": {
+ "DisplayValue": "Black",
+ "Label": "Color",
+ "Locale": "en_US"
+ },
+ "ItemDimensions": {
+ "Height": {
+ "DisplayValue": 6.125,
+ "Label": "Height",
+ "Locale": "en_US",
+ "Unit": "inches"
+ },
+ "Length": {
+ "DisplayValue": 1.5,
+ "Label": "Length",
+ "Locale": "en_US",
+ "Unit": "inches"
+ },
+ "Weight": {
+ "DisplayValue": 0.374375,
+ "Label": "Weight",
+ "Locale": "en_US",
+ "Unit": "Pounds"
+ },
+ "Width": {
+ "DisplayValue": 1.5,
+ "Label": "Width",
+ "Locale": "en_US",
+ "Unit": "inches"
+ }
+ },
+ "UnitCount": {
+ "DisplayValue": 1,
+ "Label": "NumberOfItems",
+ "Locale": "en_US"
+ }
+ },
+ "Title": {
+ "DisplayValue": "Coast GX20 1200 Lumen Waterproof Alkaline-Dual Power LED Flashlight with Twist Focus, Anti-Roll Cap and Textured Handle - Compatible with 4 x AAA Batteries (Included) or ZX750 Rechargeable Battery",
+ "Label": "Title",
+ "Locale": "en_US"
+ }
+ },
+ "Offers": {
+ "Listings": [
+ {
+ "Availability": {
+ "Message": "In Stock",
+ "MinOrderQuantity": 1,
+ "Type": "Now"
+ },
+ "Condition": {
+ "SubCondition": {
+ "Value": "New"
+ },
+ "Value": "New"
+ },
+ "DeliveryInfo": {
+ "IsAmazonFulfilled": true,
+ "IsFreeShippingEligible": true,
+ "IsPrimeEligible": true
+ },
+ "Id": "tKyp2Ar2%2BdW7Jip3nJxiasePDVRb2GVL5%2BvtQoyco%2FGrpwsPli%2Bv9nz3OrC73b%2FkqMs%2FpcPqgVbVlei05yPXg%2FIJ9fbLLyk1IwpYfsNoo68mwvZfsnwDdV9wU4xVoPnFQS2V92%2BokHnvy1i2xew4Uw%3D%3D",
+ "IsBuyBoxWinner": true,
+ "MerchantInfo": {
+ "FeedbackCount": 385,
+ "FeedbackRating": 4.68,
+ "Id": "ATVPDKIKX0DER",
+ "Name": "Amazon.com"
+ },
+ "Price": {
+ "Amount": 19.99,
+ "Currency": "USD",
+ "DisplayAmount": "$19.99"
+ },
+ "ProgramEligibility": {
+ "IsPrimeExclusive": false,
+ "IsPrimePantry": false
+ },
+ "ViolatesMAP": false
+ }
+ ],
+ "Summaries": [
+ {
+ "Condition": {
+ "Value": "Used"
+ },
+ "HighestPrice": {
+ "Amount": 18.56,
+ "Currency": "USD",
+ "DisplayAmount": "$18.56"
+ },
+ "LowestPrice": {
+ "Amount": 18,
+ "Currency": "USD",
+ "DisplayAmount": "$18.00"
+ },
+ "OfferCount": 5
+ },
+ {
+ "Condition": {
+ "Value": "New"
+ },
+ "HighestPrice": {
+ "Amount": 34.48,
+ "Currency": "USD",
+ "DisplayAmount": "$34.48"
+ },
+ "LowestPrice": {
+ "Amount": 19.99,
+ "Currency": "USD",
+ "DisplayAmount": "$19.99"
+ },
+ "OfferCount": 4
+ }
+ ]
+ }
+ },
+ {
+ "ASIN": "B005NXPVKS",
+ "BrowseNodeInfo": {
+ "BrowseNodes": [
+ {
+ "Ancestor": {
+ "Ancestor": {
+ "Ancestor": {
+ "Ancestor": {
+ "ContextFreeName": "Tools & Home Improvement",
+ "DisplayName": "Tools & Home Improvement",
+ "Id": "228013"
+ },
+ "ContextFreeName": "Home Improvement",
+ "DisplayName": "Categories",
+ "Id": "468240"
+ },
+ "ContextFreeName": "Safety & Security",
+ "DisplayName": "Safety & Security",
+ "Id": "3180231"
+ },
+ "ContextFreeName": "Flashlights",
+ "DisplayName": "Flashlights",
+ "Id": "3180261"
+ },
+ "ContextFreeName": "Handheld Flashlights",
+ "DisplayName": "Handheld Flashlights",
+ "Id": "2445457011",
+ "IsRoot": false,
+ "SalesRank": 341
+ }
+ ],
+ "WebsiteSalesRank": {
+ "SalesRank": 20650
+ }
+ },
+ "DetailPageURL": "https://www.amazon.com/dp/B005NXPVKS?tag=dashersupply-20&linkCode=osi&th=1&psc=1",
+ "Images": {
+ "Primary": {
+ "Large": {
+ "Height": 500,
+ "URL": "https://m.media-amazon.com/images/I/41O-h+D7UDL._SL500_.jpg",
+ "Width": 500
+ },
+ "Medium": {
+ "Height": 160,
+ "URL": "https://m.media-amazon.com/images/I/41O-h+D7UDL._SL160_.jpg",
+ "Width": 160
+ },
+ "Small": {
+ "Height": 75,
+ "URL": "https://m.media-amazon.com/images/I/41O-h+D7UDL._SL75_.jpg",
+ "Width": 75
+ }
+ },
+ "Variants": [
+ {
+ "Large": {
+ "Height": 500,
+ "URL": "https://m.media-amazon.com/images/I/51-sObWlVWL._SL500_.jpg",
+ "Width": 500
+ },
+ "Medium": {
+ "Height": 160,
+ "URL": "https://m.media-amazon.com/images/I/51-sObWlVWL._SL160_.jpg",
+ "Width": 160
+ },
+ "Small": {
+ "Height": 75,
+ "URL": "https://m.media-amazon.com/images/I/51-sObWlVWL._SL75_.jpg",
+ "Width": 75
+ }
+ },
+ {
+ "Large": {
+ "Height": 500,
+ "URL": "https://m.media-amazon.com/images/I/31ulPVkLcJL._SL500_.jpg",
+ "Width": 500
+ },
+ "Medium": {
+ "Height": 160,
+ "URL": "https://m.media-amazon.com/images/I/31ulPVkLcJL._SL160_.jpg",
+ "Width": 160
+ },
+ "Small": {
+ "Height": 75,
+ "URL": "https://m.media-amazon.com/images/I/31ulPVkLcJL._SL75_.jpg",
+ "Width": 75
+ }
+ },
+ {
+ "Large": {
+ "Height": 500,
+ "URL": "https://m.media-amazon.com/images/I/41yIaCwB-uL._SL500_.jpg",
+ "Width": 500
+ },
+ "Medium": {
+ "Height": 160,
+ "URL": "https://m.media-amazon.com/images/I/41yIaCwB-uL._SL160_.jpg",
+ "Width": 160
+ },
+ "Small": {
+ "Height": 75,
+ "URL": "https://m.media-amazon.com/images/I/41yIaCwB-uL._SL75_.jpg",
+ "Width": 75
+ }
+ },
+ {
+ "Large": {
+ "Height": 500,
+ "URL": "https://m.media-amazon.com/images/I/31zEiV-fy0L._SL500_.jpg",
+ "Width": 500
+ },
+ "Medium": {
+ "Height": 160,
+ "URL": "https://m.media-amazon.com/images/I/31zEiV-fy0L._SL160_.jpg",
+ "Width": 160
+ },
+ "Small": {
+ "Height": 75,
+ "URL": "https://m.media-amazon.com/images/I/31zEiV-fy0L._SL75_.jpg",
+ "Width": 75
+ }
+ },
+ {
+ "Large": {
+ "Height": 500,
+ "URL": "https://m.media-amazon.com/images/I/4170DS4AWOL._SL500_.jpg",
+ "Width": 500
+ },
+ "Medium": {
+ "Height": 160,
+ "URL": "https://m.media-amazon.com/images/I/4170DS4AWOL._SL160_.jpg",
+ "Width": 160
+ },
+ "Small": {
+ "Height": 75,
+ "URL": "https://m.media-amazon.com/images/I/4170DS4AWOL._SL75_.jpg",
+ "Width": 75
+ }
+ },
+ {
+ "Large": {
+ "Height": 500,
+ "URL": "https://m.media-amazon.com/images/I/41QHDzUZGDL._SL500_.jpg",
+ "Width": 500
+ },
+ "Medium": {
+ "Height": 160,
+ "URL": "https://m.media-amazon.com/images/I/41QHDzUZGDL._SL160_.jpg",
+ "Width": 160
+ },
+ "Small": {
+ "Height": 75,
+ "URL": "https://m.media-amazon.com/images/I/41QHDzUZGDL._SL75_.jpg",
+ "Width": 75
+ }
+ },
+ {
+ "Large": {
+ "Height": 500,
+ "URL": "https://m.media-amazon.com/images/I/41vQuXbKdrL._SL500_.jpg",
+ "Width": 500
+ },
+ "Medium": {
+ "Height": 160,
+ "URL": "https://m.media-amazon.com/images/I/41vQuXbKdrL._SL160_.jpg",
+ "Width": 160
+ },
+ "Small": {
+ "Height": 75,
+ "URL": "https://m.media-amazon.com/images/I/41vQuXbKdrL._SL75_.jpg",
+ "Width": 75
+ }
+ },
+ {
+ "Large": {
+ "Height": 500,
+ "URL": "https://m.media-amazon.com/images/I/51dg9CgXvEL._SL500_.jpg",
+ "Width": 500
+ },
+ "Medium": {
+ "Height": 160,
+ "URL": "https://m.media-amazon.com/images/I/51dg9CgXvEL._SL160_.jpg",
+ "Width": 160
+ },
+ "Small": {
+ "Height": 75,
+ "URL": "https://m.media-amazon.com/images/I/51dg9CgXvEL._SL75_.jpg",
+ "Width": 75
+ }
+ }
+ ]
+ },
+ "ItemInfo": {
+ "ByLineInfo": {
+ "Brand": {
+ "DisplayValue": "Coast",
+ "Label": "Brand",
+ "Locale": "en_US"
+ },
+ "Manufacturer": {
+ "DisplayValue": "Coast",
+ "Label": "Manufacturer",
+ "Locale": "en_US"
+ }
+ },
+ "Classifications": {
+ "Binding": {
+ "DisplayValue": "Automotive",
+ "Label": "Binding",
+ "Locale": "en_US"
+ },
+ "ProductGroup": {
+ "DisplayValue": "Tools",
+ "Label": "ProductGroup",
+ "Locale": "en_US"
+ }
+ },
+ "ContentInfo": {
+ "Languages": {
+ "DisplayValues": [
+ {
+ "DisplayValue": "English",
+ "Type": "Unknown"
+ }
+ ],
+ "Label": "Language",
+ "Locale": "en_US"
+ }
+ },
+ "ExternalIds": {
+ "EANs": {
+ "DisplayValues": [
+ "0015286192868",
+ "0015286192714",
+ "0015286216540",
+ "0015286196729"
+ ],
+ "Label": "EAN",
+ "Locale": "en_US"
+ },
+ "UPCs": {
+ "DisplayValues": [
+ "015286216540",
+ "015286192714",
+ "015286192868",
+ "015286196729"
+ ],
+ "Label": "UPC",
+ "Locale": "en_US"
+ }
+ },
+ "Features": {
+ "DisplayValues": [
+ "DUAL COLOR: White and Red beams all in one. Red light preserves night vision. Great for versatile work during the night and day.",
+ "BULLS-EYE SPOT BEAM OPTIC: Consists of an extremely bright, centered ‘hot spot’ and a very consistent transition halo to increase the effective viewing area.",
+ "SPECS: 315 lumen, 142 meter (465 ft.) beam distance and 1 hour 15 minute runtime. Tested and rated to ANSI/FL1 standards."
+ ],
+ "Label": "Features",
+ "Locale": "en_US"
+ },
+ "ManufactureInfo": {
+ "ItemPartNumber": {
+ "DisplayValue": "PX20",
+ "Label": "PartNumber",
+ "Locale": "en_US"
+ },
+ "Model": {
+ "DisplayValue": "19271",
+ "Label": "Model",
+ "Locale": "en_US"
+ },
+ "Warranty": {
+ "DisplayValue": "Backed by coast's lifetime guarantee against defects in materials and workmanship.",
+ "Label": "Warranty",
+ "Locale": "en_US"
+ }
+ },
+ "ProductInfo": {
+ "Color": {
+ "DisplayValue": "Black",
+ "Label": "Color",
+ "Locale": "en_US"
+ },
+ "ItemDimensions": {
+ "Height": {
+ "DisplayValue": 0.46,
+ "Label": "Height",
+ "Locale": "en_US",
+ "Unit": "inches"
+ },
+ "Length": {
+ "DisplayValue": 1.56,
+ "Label": "Length",
+ "Locale": "en_US",
+ "Unit": "inches"
+ },
+ "Weight": {
+ "DisplayValue": 0.2,
+ "Label": "Weight",
+ "Locale": "en_US",
+ "Unit": "pounds"
+ },
+ "Width": {
+ "DisplayValue": 0.4,
+ "Label": "Width",
+ "Locale": "en_US",
+ "Unit": "inches"
+ }
+ },
+ "Size": {
+ "DisplayValue": "155 Lumens",
+ "Label": "Size",
+ "Locale": "en_US"
+ },
+ "UnitCount": {
+ "DisplayValue": 1,
+ "Label": "NumberOfItems",
+ "Locale": "en_US"
+ }
+ },
+ "Title": {
+ "DisplayValue": "COAST PX20 Dual Color 315 Lumen LED Flashlight",
+ "Label": "Title",
+ "Locale": "en_US"
+ }
+ },
+ "Offers": {
+ "Listings": [
+ {
+ "Availability": {
+ "Message": "In stock Usually ships within 2 to 3 days.",
+ "MinOrderQuantity": 1,
+ "Type": "Now"
+ },
+ "Condition": {
+ "SubCondition": {
+ "Value": "New"
+ },
+ "Value": "New"
+ },
+ "DeliveryInfo": {
+ "IsAmazonFulfilled": false,
+ "IsFreeShippingEligible": false,
+ "IsPrimeEligible": false
+ },
+ "Id": "tKyp2Ar2%2BdW7Jip3nJxiaiGkQX6m8NuaBRJcFKHm%2B5PoKob4ZLCjsv2KBA4zd8ldDvbWWEjPJxug7jRC%2FHy%2BbX4GZk%2FYKpVVX812H0FthYRikAoVR7WuuzEaRqtC3gg94RPOgW23pMuepYL3Osh7Dneup%2F8aUokVKB7zXeO3%2Bo%2Bs5X6aXvMLOUiQOx1B%2Fh%2Fo",
+ "IsBuyBoxWinner": true,
+ "MerchantInfo": {
+ "DefaultShippingCountry": "US",
+ "FeedbackCount": 505,
+ "FeedbackRating": 3.47,
+ "Id": "A2LA3R74TUKXEY",
+ "Name": "Tool Collection Technologies"
+ },
+ "Price": {
+ "Amount": 24.24,
+ "Currency": "USD",
+ "DisplayAmount": "$24.24",
+ "Savings": {
+ "Amount": 12.03,
+ "Currency": "USD",
+ "DisplayAmount": "$12.03 (33%)",
+ "Percentage": 33
+ }
+ },
+ "ProgramEligibility": {
+ "IsPrimeExclusive": false,
+ "IsPrimePantry": false
+ },
+ "SavingBasis": {
+ "Amount": 36.27,
+ "Currency": "USD",
+ "DisplayAmount": "$36.27",
+ "PriceType": "LIST_PRICE"
+ },
+ "ViolatesMAP": false
+ }
+ ],
+ "Summaries": [
+ {
+ "Condition": {
+ "Value": "Used"
+ },
+ "HighestPrice": {
+ "Amount": 13.5,
+ "Currency": "USD",
+ "DisplayAmount": "$13.50"
+ },
+ "LowestPrice": {
+ "Amount": 13.5,
+ "Currency": "USD",
+ "DisplayAmount": "$13.50"
+ },
+ "OfferCount": 2
+ },
+ {
+ "Condition": {
+ "Value": "New"
+ },
+ "HighestPrice": {
+ "Amount": 38.76,
+ "Currency": "USD",
+ "DisplayAmount": "$38.76"
+ },
+ "LowestPrice": {
+ "Amount": 20.3,
+ "Currency": "USD",
+ "DisplayAmount": "$20.30"
+ },
+ "OfferCount": 15
+ }
+ ]
+ }
+ },
+ {
+ "ASIN": "B0CF7X87TT",
+ "BrowseNodeInfo": {
+ "BrowseNodes": [
+ {
+ "Ancestor": {
+ "Ancestor": {
+ "Ancestor": {
+ "Ancestor": {
+ "ContextFreeName": "Tools & Home Improvement",
+ "DisplayName": "Tools & Home Improvement",
+ "Id": "228013"
+ },
+ "ContextFreeName": "Home Improvement",
+ "DisplayName": "Categories",
+ "Id": "468240"
+ },
+ "ContextFreeName": "Safety & Security",
+ "DisplayName": "Safety & Security",
+ "Id": "3180231"
+ },
+ "ContextFreeName": "Flashlights",
+ "DisplayName": "Flashlights",
+ "Id": "3180261"
+ },
+ "ContextFreeName": "Handheld Flashlights",
+ "DisplayName": "Handheld Flashlights",
+ "Id": "2445457011",
+ "IsRoot": false,
+ "SalesRank": 214
+ }
+ ],
+ "WebsiteSalesRank": {
+ "SalesRank": 11840
+ }
+ },
+ "DetailPageURL": "https://www.amazon.com/dp/B0CF7X87TT?tag=dashersupply-20&linkCode=osi&th=1&psc=1",
+ "Images": {
+ "Primary": {
+ "Large": {
+ "Height": 500,
+ "URL": "https://m.media-amazon.com/images/I/31Rvxyey1GL._SL500_.jpg",
+ "Width": 500
+ },
+ "Medium": {
+ "Height": 160,
+ "URL": "https://m.media-amazon.com/images/I/31Rvxyey1GL._SL160_.jpg",
+ "Width": 160
+ },
+ "Small": {
+ "Height": 75,
+ "URL": "https://m.media-amazon.com/images/I/31Rvxyey1GL._SL75_.jpg",
+ "Width": 75
+ }
+ },
+ "Variants": [
+ {
+ "Large": {
+ "Height": 500,
+ "URL": "https://m.media-amazon.com/images/I/41ELAl7LY1L._SL500_.jpg",
+ "Width": 500
+ },
+ "Medium": {
+ "Height": 160,
+ "URL": "https://m.media-amazon.com/images/I/41ELAl7LY1L._SL160_.jpg",
+ "Width": 160
+ },
+ "Small": {
+ "Height": 75,
+ "URL": "https://m.media-amazon.com/images/I/41ELAl7LY1L._SL75_.jpg",
+ "Width": 75
+ }
+ },
+ {
+ "Large": {
+ "Height": 500,
+ "URL": "https://m.media-amazon.com/images/I/51zE4vuHyCL._SL500_.jpg",
+ "Width": 500
+ },
+ "Medium": {
+ "Height": 160,
+ "URL": "https://m.media-amazon.com/images/I/51zE4vuHyCL._SL160_.jpg",
+ "Width": 160
+ },
+ "Small": {
+ "Height": 75,
+ "URL": "https://m.media-amazon.com/images/I/51zE4vuHyCL._SL75_.jpg",
+ "Width": 75
+ }
+ },
+ {
+ "Large": {
+ "Height": 500,
+ "URL": "https://m.media-amazon.com/images/I/51smMQV+t7L._SL500_.jpg",
+ "Width": 500
+ },
+ "Medium": {
+ "Height": 160,
+ "URL": "https://m.media-amazon.com/images/I/51smMQV+t7L._SL160_.jpg",
+ "Width": 160
+ },
+ "Small": {
+ "Height": 75,
+ "URL": "https://m.media-amazon.com/images/I/51smMQV+t7L._SL75_.jpg",
+ "Width": 75
+ }
+ },
+ {
+ "Large": {
+ "Height": 500,
+ "URL": "https://m.media-amazon.com/images/I/51kX2jqhQZL._SL500_.jpg",
+ "Width": 500
+ },
+ "Medium": {
+ "Height": 160,
+ "URL": "https://m.media-amazon.com/images/I/51kX2jqhQZL._SL160_.jpg",
+ "Width": 160
+ },
+ "Small": {
+ "Height": 75,
+ "URL": "https://m.media-amazon.com/images/I/51kX2jqhQZL._SL75_.jpg",
+ "Width": 75
+ }
+ },
+ {
+ "Large": {
+ "Height": 500,
+ "URL": "https://m.media-amazon.com/images/I/61T3sNN268L._SL500_.jpg",
+ "Width": 500
+ },
+ "Medium": {
+ "Height": 160,
+ "URL": "https://m.media-amazon.com/images/I/61T3sNN268L._SL160_.jpg",
+ "Width": 160
+ },
+ "Small": {
+ "Height": 75,
+ "URL": "https://m.media-amazon.com/images/I/61T3sNN268L._SL75_.jpg",
+ "Width": 75
+ }
+ },
+ {
+ "Large": {
+ "Height": 500,
+ "URL": "https://m.media-amazon.com/images/I/51ln-fIKiAL._SL500_.jpg",
+ "Width": 500
+ },
+ "Medium": {
+ "Height": 160,
+ "URL": "https://m.media-amazon.com/images/I/51ln-fIKiAL._SL160_.jpg",
+ "Width": 160
+ },
+ "Small": {
+ "Height": 75,
+ "URL": "https://m.media-amazon.com/images/I/51ln-fIKiAL._SL75_.jpg",
+ "Width": 75
+ }
+ },
+ {
+ "Large": {
+ "Height": 500,
+ "URL": "https://m.media-amazon.com/images/I/41j-nOmeFSL._SL500_.jpg",
+ "Width": 500
+ },
+ "Medium": {
+ "Height": 160,
+ "URL": "https://m.media-amazon.com/images/I/41j-nOmeFSL._SL160_.jpg",
+ "Width": 160
+ },
+ "Small": {
+ "Height": 75,
+ "URL": "https://m.media-amazon.com/images/I/41j-nOmeFSL._SL75_.jpg",
+ "Width": 75
+ }
+ },
+ {
+ "Large": {
+ "Height": 500,
+ "URL": "https://m.media-amazon.com/images/I/41dJTHrCQFL._SL500_.jpg",
+ "Width": 500
+ },
+ "Medium": {
+ "Height": 160,
+ "URL": "https://m.media-amazon.com/images/I/41dJTHrCQFL._SL160_.jpg",
+ "Width": 160
+ },
+ "Small": {
+ "Height": 75,
+ "URL": "https://m.media-amazon.com/images/I/41dJTHrCQFL._SL75_.jpg",
+ "Width": 75
+ }
+ },
+ {
+ "Large": {
+ "Height": 500,
+ "URL": "https://m.media-amazon.com/images/I/31tALlIF8fL._SL500_.jpg",
+ "Width": 500
+ },
+ "Medium": {
+ "Height": 160,
+ "URL": "https://m.media-amazon.com/images/I/31tALlIF8fL._SL160_.jpg",
+ "Width": 160
+ },
+ "Small": {
+ "Height": 75,
+ "URL": "https://m.media-amazon.com/images/I/31tALlIF8fL._SL75_.jpg",
+ "Width": 75
+ }
+ }
+ ]
+ },
+ "ItemInfo": {
+ "ByLineInfo": {
+ "Brand": {
+ "DisplayValue": "Coast",
+ "Label": "Brand",
+ "Locale": "en_US"
+ },
+ "Manufacturer": {
+ "DisplayValue": "Coast",
+ "Label": "Manufacturer",
+ "Locale": "en_US"
+ }
+ },
+ "Classifications": {
+ "Binding": {
+ "DisplayValue": "Tools & Home Improvement",
+ "Label": "Binding",
+ "Locale": "en_US"
+ },
+ "ProductGroup": {
+ "DisplayValue": "Tools",
+ "Label": "ProductGroup",
+ "Locale": "en_US"
+ }
+ },
+ "ExternalIds": {
+ "EANs": {
+ "DisplayValues": [
+ "0015286309488"
+ ],
+ "Label": "EAN",
+ "Locale": "en_US"
+ },
+ "UPCs": {
+ "DisplayValues": [
+ "015286309488"
+ ],
+ "Label": "UPC",
+ "Locale": "en_US"
+ }
+ },
+ "Features": {
+ "DisplayValues": [
+ "Dual Optic System: Shine the right beam for the situation using separately controlled flood and spot beams.",
+ "Memory Mode: Set the SLAYER to jump right to your go-to beam choice using COAST Memory Mode to personalize the flashlight.",
+ "Removable Pocket Clip: Secure the flashlight into any pocket with the metal pocket clip, or remove the clip for an even more streamlined profile. Note: If pocket clip is removed, screws need to be reinstalled into the handle to maintain the IP Rating.",
+ "IP67 Dust Resistant and WATERPROOF: Shine through just about anything—with a light that stands up to dust and is waterproof against full submersion down to a meter.",
+ "Rechargeable: Rely on the integrated ZITHION rechargeable power system for strong performance and cost savings over time."
+ ],
+ "Label": "Features",
+ "Locale": "en_US"
+ },
+ "ManufactureInfo": {
+ "ItemPartNumber": {
+ "DisplayValue": "30948",
+ "Label": "PartNumber",
+ "Locale": "en_US"
+ },
+ "Model": {
+ "DisplayValue": "30948",
+ "Label": "Model",
+ "Locale": "en_US"
+ },
+ "Warranty": {
+ "DisplayValue": "Coast warranties its coast knives, tools and coast led flashlights/headlamps to be free of defects in materials and workmanship for the life of the original purchaser. This warranty does not cover normal wear and tear, nor damage resulting from misuse or neglect. Warranty does not cover batteries and charging accessories (or damage caused by either). Batteries or damage caused by batteries (i. E. Leakage) not included in the guarantee. Warranty exchanges do not cover the cost of shipping and handling.",
+ "Label": "Warranty",
+ "Locale": "en_US"
+ }
+ },
+ "ProductInfo": {
+ "Color": {
+ "DisplayValue": "Silver",
+ "Label": "Color",
+ "Locale": "en_US"
+ },
+ "ItemDimensions": {
+ "Height": {
+ "DisplayValue": 5.43,
+ "Label": "Height",
+ "Locale": "en_US",
+ "Unit": "inches"
+ },
+ "Length": {
+ "DisplayValue": 0.8,
+ "Label": "Length",
+ "Locale": "en_US",
+ "Unit": "inches"
+ },
+ "Weight": {
+ "DisplayValue": 0.4629707502,
+ "Label": "Weight",
+ "Locale": "en_US",
+ "Unit": "Pounds"
+ },
+ "Width": {
+ "DisplayValue": 1.1,
+ "Label": "Width",
+ "Locale": "en_US",
+ "Unit": "inches"
+ }
+ },
+ "UnitCount": {
+ "DisplayValue": 1,
+ "Label": "NumberOfItems",
+ "Locale": "en_US"
+ }
+ },
+ "Title": {
+ "DisplayValue": "Coast Slayer 1150 Lumen USB-C Rechargeable LED Flashlight with Spot/Flood, Memory Mode and Pocket Clip, Silver",
+ "Label": "Title",
+ "Locale": "en_US"
+ }
+ },
+ "Offers": {
+ "Listings": [
+ {
+ "Availability": {
+ "Message": "In Stock",
+ "MinOrderQuantity": 1,
+ "Type": "Now"
+ },
+ "Condition": {
+ "SubCondition": {
+ "Value": "New"
+ },
+ "Value": "New"
+ },
+ "DeliveryInfo": {
+ "IsAmazonFulfilled": false,
+ "IsFreeShippingEligible": false,
+ "IsPrimeEligible": false
+ },
+ "Id": "tKyp2Ar2%2BdW7Jip3nJxiarR4xrHIVVkGH85vRnZXIc5E4rdKFdtuoUPIlA%2BNsu6mJpybdh4UqwMj4lIE3jwqHU2cV085qf%2BJGkpVjnuabto8UyvEAvoitMUTQpWZU1HxkQeas%2BlFFv1UgtFV2Rwf6UnzFWE82%2BNTW69pJvFhF%2F8bub2CPcRkZQ%3D%3D",
+ "IsBuyBoxWinner": true,
+ "MerchantInfo": {
+ "DefaultShippingCountry": "US",
+ "FeedbackCount": 10,
+ "FeedbackRating": 5,
+ "Id": "A2IHSE1DQ96FE2",
+ "Name": "Palmetto Resellers LLC"
+ },
+ "Price": {
+ "Amount": 62.59,
+ "Currency": "USD",
+ "DisplayAmount": "$62.59",
+ "Savings": {
+ "Amount": 9.6,
+ "Currency": "USD",
+ "DisplayAmount": "$9.60 (13%)",
+ "Percentage": 13
+ }
+ },
+ "ProgramEligibility": {
+ "IsPrimeExclusive": false,
+ "IsPrimePantry": false
+ },
+ "SavingBasis": {
+ "Amount": 72.19,
+ "Currency": "USD",
+ "DisplayAmount": "$72.19",
+ "PriceType": "WAS_PRICE"
+ },
+ "ViolatesMAP": false
+ }
+ ],
+ "Summaries": [
+ {
+ "Condition": {
+ "Value": "Used"
+ },
+ "HighestPrice": {
+ "Amount": 67.89,
+ "Currency": "USD",
+ "DisplayAmount": "$67.89"
+ },
+ "LowestPrice": {
+ "Amount": 67.89,
+ "Currency": "USD",
+ "DisplayAmount": "$67.89"
+ },
+ "OfferCount": 2
+ },
+ {
+ "Condition": {
+ "Value": "New"
+ },
+ "HighestPrice": {
+ "Amount": 72.19,
+ "Currency": "USD",
+ "DisplayAmount": "$72.19"
+ },
+ "LowestPrice": {
+ "Amount": 62.59,
+ "Currency": "USD",
+ "DisplayAmount": "$62.59"
+ },
+ "OfferCount": 2
+ }
+ ]
+ },
+ "ParentASIN": "B0CV3X92ZT"
+ },
+ {
+ "ASIN": "B00TNOSF3I",
+ "BrowseNodeInfo": {
+ "BrowseNodes": [
+ {
+ "Ancestor": {
+ "Ancestor": {
+ "Ancestor": {
+ "Ancestor": {
+ "ContextFreeName": "Tools & Home Improvement",
+ "DisplayName": "Tools & Home Improvement",
+ "Id": "228013"
+ },
+ "ContextFreeName": "Home Improvement",
+ "DisplayName": "Categories",
+ "Id": "468240"
+ },
+ "ContextFreeName": "Safety & Security",
+ "DisplayName": "Safety & Security",
+ "Id": "3180231"
+ },
+ "ContextFreeName": "Flashlights",
+ "DisplayName": "Flashlights",
+ "Id": "3180261"
+ },
+ "ContextFreeName": "Handheld Flashlights",
+ "DisplayName": "Handheld Flashlights",
+ "Id": "2445457011",
+ "IsRoot": false,
+ "SalesRank": 726
+ },
+ {
+ "Ancestor": {
+ "Ancestor": {
+ "Ancestor": {
+ "Ancestor": {
+ "Ancestor": {
+ "Ancestor": {
+ "Ancestor": {
+ "ContextFreeName": "Tools & Home Improvement",
+ "DisplayName": "Tools & Home Improvement",
+ "Id": "228013"
+ },
+ "ContextFreeName": "Arborist Merchandising Root",
+ "DisplayName": "Arborist Merchandising Root",
+ "Id": "119968134011"
+ },
+ "ContextFreeName": "Self Service",
+ "DisplayName": "Self Service",
+ "Id": "2334101011"
+ },
+ "ContextFreeName": "Special Features Stores",
+ "DisplayName": "Special Features Stores",
+ "Id": "2334163011"
+ },
+ "ContextFreeName": "cc8b81c2-6916-4800-975c-a54eacb3a648_0",
+ "DisplayName": "cc8b81c2-6916-4800-975c-a54eacb3a648_0",
+ "Id": "119968135011"
+ },
+ "ContextFreeName": "cc8b81c2-6916-4800-975c-a54eacb3a648_501",
+ "DisplayName": "cc8b81c2-6916-4800-975c-a54eacb3a648_501",
+ "Id": "119968197011"
+ },
+ "ContextFreeName": "cc8b81c2-6916-4800-975c-a54eacb3a648_750502",
+ "DisplayName": "cc8b81c2-6916-4800-975c-a54eacb3a648_750502",
+ "Id": "119968335011"
+ },
+ "ContextFreeName": "V4 Customers Keep It - 50%",
+ "DisplayName": "V4 Customers Keep It - 50%",
+ "Id": "20594438011",
+ "IsRoot": false
+ }
+ ],
+ "WebsiteSalesRank": {
+ "SalesRank": 48421
+ }
+ },
+ "DetailPageURL": "https://www.amazon.com/dp/B00TNOSF3I?tag=dashersupply-20&linkCode=osi&th=1&psc=1",
+ "Images": {
+ "Primary": {
+ "Large": {
+ "Height": 500,
+ "URL": "https://m.media-amazon.com/images/I/31ahtlt7lrL._SL500_.jpg",
+ "Width": 500
+ },
+ "Medium": {
+ "Height": 160,
+ "URL": "https://m.media-amazon.com/images/I/31ahtlt7lrL._SL160_.jpg",
+ "Width": 160
+ },
+ "Small": {
+ "Height": 75,
+ "URL": "https://m.media-amazon.com/images/I/31ahtlt7lrL._SL75_.jpg",
+ "Width": 75
+ }
+ },
+ "Variants": [
+ {
+ "Large": {
+ "Height": 500,
+ "URL": "https://m.media-amazon.com/images/I/510d4IlFAPL._SL500_.jpg",
+ "Width": 500
+ },
+ "Medium": {
+ "Height": 160,
+ "URL": "https://m.media-amazon.com/images/I/510d4IlFAPL._SL160_.jpg",
+ "Width": 160
+ },
+ "Small": {
+ "Height": 75,
+ "URL": "https://m.media-amazon.com/images/I/510d4IlFAPL._SL75_.jpg",
+ "Width": 75
+ }
+ },
+ {
+ "Large": {
+ "Height": 500,
+ "URL": "https://m.media-amazon.com/images/I/51mWbNlY3HL._SL500_.jpg",
+ "Width": 500
+ },
+ "Medium": {
+ "Height": 160,
+ "URL": "https://m.media-amazon.com/images/I/51mWbNlY3HL._SL160_.jpg",
+ "Width": 160
+ },
+ "Small": {
+ "Height": 75,
+ "URL": "https://m.media-amazon.com/images/I/51mWbNlY3HL._SL75_.jpg",
+ "Width": 75
+ }
+ },
+ {
+ "Large": {
+ "Height": 500,
+ "URL": "https://m.media-amazon.com/images/I/41549EBDhPL._SL500_.jpg",
+ "Width": 500
+ },
+ "Medium": {
+ "Height": 160,
+ "URL": "https://m.media-amazon.com/images/I/41549EBDhPL._SL160_.jpg",
+ "Width": 160
+ },
+ "Small": {
+ "Height": 75,
+ "URL": "https://m.media-amazon.com/images/I/41549EBDhPL._SL75_.jpg",
+ "Width": 75
+ }
+ },
+ {
+ "Large": {
+ "Height": 500,
+ "URL": "https://m.media-amazon.com/images/I/51MvkJWO+iL._SL500_.jpg",
+ "Width": 500
+ },
+ "Medium": {
+ "Height": 160,
+ "URL": "https://m.media-amazon.com/images/I/51MvkJWO+iL._SL160_.jpg",
+ "Width": 160
+ },
+ "Small": {
+ "Height": 75,
+ "URL": "https://m.media-amazon.com/images/I/51MvkJWO+iL._SL75_.jpg",
+ "Width": 75
+ }
+ },
+ {
+ "Large": {
+ "Height": 500,
+ "URL": "https://m.media-amazon.com/images/I/41aYZ-BBWaL._SL500_.jpg",
+ "Width": 500
+ },
+ "Medium": {
+ "Height": 160,
+ "URL": "https://m.media-amazon.com/images/I/41aYZ-BBWaL._SL160_.jpg",
+ "Width": 160
+ },
+ "Small": {
+ "Height": 75,
+ "URL": "https://m.media-amazon.com/images/I/41aYZ-BBWaL._SL75_.jpg",
+ "Width": 75
+ }
+ },
+ {
+ "Large": {
+ "Height": 500,
+ "URL": "https://m.media-amazon.com/images/I/417JE7u-lAL._SL500_.jpg",
+ "Width": 500
+ },
+ "Medium": {
+ "Height": 160,
+ "URL": "https://m.media-amazon.com/images/I/417JE7u-lAL._SL160_.jpg",
+ "Width": 160
+ },
+ "Small": {
+ "Height": 75,
+ "URL": "https://m.media-amazon.com/images/I/417JE7u-lAL._SL75_.jpg",
+ "Width": 75
+ }
+ },
+ {
+ "Large": {
+ "Height": 500,
+ "URL": "https://m.media-amazon.com/images/I/410nUOlWo4L._SL500_.jpg",
+ "Width": 500
+ },
+ "Medium": {
+ "Height": 160,
+ "URL": "https://m.media-amazon.com/images/I/410nUOlWo4L._SL160_.jpg",
+ "Width": 160
+ },
+ "Small": {
+ "Height": 75,
+ "URL": "https://m.media-amazon.com/images/I/410nUOlWo4L._SL75_.jpg",
+ "Width": 75
+ }
+ },
+ {
+ "Large": {
+ "Height": 500,
+ "URL": "https://m.media-amazon.com/images/I/31ePvSlmC+L._SL500_.jpg",
+ "Width": 500
+ },
+ "Medium": {
+ "Height": 160,
+ "URL": "https://m.media-amazon.com/images/I/31ePvSlmC+L._SL160_.jpg",
+ "Width": 160
+ },
+ "Small": {
+ "Height": 75,
+ "URL": "https://m.media-amazon.com/images/I/31ePvSlmC+L._SL75_.jpg",
+ "Width": 75
+ }
+ },
+ {
+ "Large": {
+ "Height": 500,
+ "URL": "https://m.media-amazon.com/images/I/313RYLvolwL._SL500_.jpg",
+ "Width": 500
+ },
+ "Medium": {
+ "Height": 160,
+ "URL": "https://m.media-amazon.com/images/I/313RYLvolwL._SL160_.jpg",
+ "Width": 160
+ },
+ "Small": {
+ "Height": 75,
+ "URL": "https://m.media-amazon.com/images/I/313RYLvolwL._SL75_.jpg",
+ "Width": 75
+ }
+ },
+ {
+ "Large": {
+ "Height": 500,
+ "URL": "https://m.media-amazon.com/images/I/31UHiIQFUJL._SL500_.jpg",
+ "Width": 500
+ },
+ "Medium": {
+ "Height": 160,
+ "URL": "https://m.media-amazon.com/images/I/31UHiIQFUJL._SL160_.jpg",
+ "Width": 160
+ },
+ "Small": {
+ "Height": 75,
+ "URL": "https://m.media-amazon.com/images/I/31UHiIQFUJL._SL75_.jpg",
+ "Width": 75
+ }
+ },
+ {
+ "Large": {
+ "Height": 500,
+ "URL": "https://m.media-amazon.com/images/I/51ah2y-ptpL._SL500_.jpg",
+ "Width": 500
+ },
+ "Medium": {
+ "Height": 160,
+ "URL": "https://m.media-amazon.com/images/I/51ah2y-ptpL._SL160_.jpg",
+ "Width": 160
+ },
+ "Small": {
+ "Height": 75,
+ "URL": "https://m.media-amazon.com/images/I/51ah2y-ptpL._SL75_.jpg",
+ "Width": 75
+ }
+ },
+ {
+ "Large": {
+ "Height": 500,
+ "URL": "https://m.media-amazon.com/images/I/51dg9CgXvEL._SL500_.jpg",
+ "Width": 500
+ },
+ "Medium": {
+ "Height": 160,
+ "URL": "https://m.media-amazon.com/images/I/51dg9CgXvEL._SL160_.jpg",
+ "Width": 160
+ },
+ "Small": {
+ "Height": 75,
+ "URL": "https://m.media-amazon.com/images/I/51dg9CgXvEL._SL75_.jpg",
+ "Width": 75
+ }
+ }
+ ]
+ },
+ "ItemInfo": {
+ "ByLineInfo": {
+ "Brand": {
+ "DisplayValue": "Coast",
+ "Label": "Brand",
+ "Locale": "en_US"
+ },
+ "Contributors": [
+ {
+ "Locale": "en_US",
+ "Name": "Coast",
+ "Role": "Designer",
+ "RoleType": "designer"
+ }
+ ],
+ "Manufacturer": {
+ "DisplayValue": "COAST PRODUCTS, INC.",
+ "Label": "Manufacturer",
+ "Locale": "en_US"
+ }
+ },
+ "Classifications": {
+ "Binding": {
+ "DisplayValue": "Tools & Home Improvement",
+ "Label": "Binding",
+ "Locale": "en_US"
+ },
+ "ProductGroup": {
+ "DisplayValue": "Home Improvement",
+ "Label": "ProductGroup",
+ "Locale": "en_US"
+ }
+ },
+ "ExternalIds": {
+ "EANs": {
+ "DisplayValues": [
+ "0015286208309",
+ "0015286207692",
+ "0015286207968"
+ ],
+ "Label": "EAN",
+ "Locale": "en_US"
+ },
+ "UPCs": {
+ "DisplayValues": [
+ "015286207692",
+ "015286207968",
+ "015286208309"
+ ],
+ "Label": "UPC",
+ "Locale": "en_US"
+ }
+ },
+ "Features": {
+ "DisplayValues": [
+ "PURE-BEAM FOCUSING WITH SLIDE FOCUS: Pack two powerful beams into one and seamlessly transition—with no halos or hot spots—between short and long-range viewing. COAST’s patented focusing technology adapts to your need",
+ "Two-way clip: store It away or shine It forward. The two-way clip enables gives you flexibility to stash the light in your pocket or clip it to the brim of your hat",
+ "Flexible power: Compatible with not only just standard alkaline AA, but with rechargeable NiMH or rechargeable Lithium 14500’s as well (NiMH & Lithium not included)",
+ "SPECS: Light Output 410 lumens. Beam Distance: 130 meters. Runtime: 3 hours. Tested and rated to ANSI/FL1 standards.",
+ "Tough & reliable: backed by the Coast Lifetime against defects in materials and workmanship. IPX4 rated design for water resistance and durable body for 1-meter drop protection"
+ ],
+ "Label": "Features",
+ "Locale": "en_US"
+ },
+ "ManufactureInfo": {
+ "ItemPartNumber": {
+ "DisplayValue": "20769",
+ "Label": "PartNumber",
+ "Locale": "en_US"
+ },
+ "Model": {
+ "DisplayValue": "GIDDS2-2496544",
+ "Label": "Model",
+ "Locale": "en_US"
+ },
+ "Warranty": {
+ "DisplayValue": "N/a.",
+ "Label": "Warranty",
+ "Locale": "en_US"
+ }
+ },
+ "ProductInfo": {
+ "Color": {
+ "DisplayValue": "Black",
+ "Label": "Color",
+ "Locale": "en_US"
+ },
+ "IsAdultProduct": {
+ "DisplayValue": false,
+ "Label": "IsAdultProduct",
+ "Locale": "en_US"
+ },
+ "ItemDimensions": {
+ "Height": {
+ "DisplayValue": 8.75,
+ "Label": "Height",
+ "Locale": "en_US",
+ "Unit": "inches"
+ },
+ "Length": {
+ "DisplayValue": 5.25,
+ "Label": "Length",
+ "Locale": "en_US",
+ "Unit": "inches"
+ },
+ "Weight": {
+ "DisplayValue": 0.24,
+ "Label": "Weight",
+ "Locale": "en_US",
+ "Unit": "Pounds"
+ },
+ "Width": {
+ "DisplayValue": 8.63,
+ "Label": "Width",
+ "Locale": "en_US",
+ "Unit": "inches"
+ }
+ },
+ "Size": {
+ "DisplayValue": "1-PACK",
+ "Label": "Size",
+ "Locale": "en_US"
+ },
+ "UnitCount": {
+ "DisplayValue": 1,
+ "Label": "NumberOfItems",
+ "Locale": "en_US"
+ }
+ },
+ "Title": {
+ "DisplayValue": "COAST HX5 410 Lumen LED Flashlight, Pure Beam Focusing, Slide Focus, Pocket Clip, Weatherproof, Pocket Sized, Battery Included, Black.",
+ "Label": "Title",
+ "Locale": "en_US"
+ }
+ },
+ "Offers": {
+ "Listings": [
+ {
+ "Availability": {
+ "Message": "In Stock",
+ "MinOrderQuantity": 1,
+ "Type": "Now"
+ },
+ "Condition": {
+ "SubCondition": {
+ "Value": "New"
+ },
+ "Value": "New"
+ },
+ "DeliveryInfo": {
+ "IsAmazonFulfilled": true,
+ "IsFreeShippingEligible": true,
+ "IsPrimeEligible": true
+ },
+ "Id": "tKyp2Ar2%2BdW7Jip3nJxiasv8L5TjepqfeADtFq%2FBwOCaZrzOOBUSUBpUmsk3tYrKh8DYD9HcKTKbb%2BM%2FhCF7czkbs3ctbkNkEDPDF%2BvHBfmrk8zZayF49r8OFmh809O%2FQbthIP%2BmvTpbqvi18yzDOQ%3D%3D",
+ "IsBuyBoxWinner": true,
+ "MerchantInfo": {
+ "FeedbackCount": 385,
+ "FeedbackRating": 4.68,
+ "Id": "ATVPDKIKX0DER",
+ "Name": "Amazon.com"
+ },
+ "Price": {
+ "Amount": 25.31,
+ "Currency": "USD",
+ "DisplayAmount": "$25.31"
+ },
+ "ProgramEligibility": {
+ "IsPrimeExclusive": false,
+ "IsPrimePantry": false
+ },
+ "ViolatesMAP": false
+ }
+ ],
+ "Summaries": [
+ {
+ "Condition": {
+ "Value": "New"
+ },
+ "HighestPrice": {
+ "Amount": 39.39,
+ "Currency": "USD",
+ "DisplayAmount": "$39.39"
+ },
+ "LowestPrice": {
+ "Amount": 23.94,
+ "Currency": "USD",
+ "DisplayAmount": "$23.94"
+ },
+ "OfferCount": 25
+ }
+ ]
+ }
+ },
+ {
+ "ASIN": "B0CXYSCLV8",
+ "BrowseNodeInfo": {
+ "BrowseNodes": [
+ {
+ "Ancestor": {
+ "Ancestor": {
+ "Ancestor": {
+ "Ancestor": {
+ "ContextFreeName": "Tools & Home Improvement",
+ "DisplayName": "Tools & Home Improvement",
+ "Id": "228013"
+ },
+ "ContextFreeName": "Home Improvement",
+ "DisplayName": "Categories",
+ "Id": "468240"
+ },
+ "ContextFreeName": "Safety & Security",
+ "DisplayName": "Safety & Security",
+ "Id": "3180231"
+ },
+ "ContextFreeName": "Flashlights",
+ "DisplayName": "Flashlights",
+ "Id": "3180261"
+ },
+ "ContextFreeName": "Handheld Flashlights",
+ "DisplayName": "Handheld Flashlights",
+ "Id": "2445457011",
+ "IsRoot": false,
+ "SalesRank": 1074
+ }
+ ],
+ "WebsiteSalesRank": {
+ "SalesRank": 76416
+ }
+ },
+ "DetailPageURL": "https://www.amazon.com/dp/B0CXYSCLV8?tag=dashersupply-20&linkCode=osi&th=1&psc=1",
+ "Images": {
+ "Primary": {
+ "Large": {
+ "Height": 500,
+ "URL": "https://m.media-amazon.com/images/I/31XP6ybHzHL._SL500_.jpg",
+ "Width": 500
+ },
+ "Medium": {
+ "Height": 160,
+ "URL": "https://m.media-amazon.com/images/I/31XP6ybHzHL._SL160_.jpg",
+ "Width": 160
+ },
+ "Small": {
+ "Height": 75,
+ "URL": "https://m.media-amazon.com/images/I/31XP6ybHzHL._SL75_.jpg",
+ "Width": 75
+ }
+ },
+ "Variants": [
+ {
+ "Large": {
+ "Height": 500,
+ "URL": "https://m.media-amazon.com/images/I/4105BN4O3uL._SL500_.jpg",
+ "Width": 500
+ },
+ "Medium": {
+ "Height": 160,
+ "URL": "https://m.media-amazon.com/images/I/4105BN4O3uL._SL160_.jpg",
+ "Width": 160
+ },
+ "Small": {
+ "Height": 75,
+ "URL": "https://m.media-amazon.com/images/I/4105BN4O3uL._SL75_.jpg",
+ "Width": 75
+ }
+ },
+ {
+ "Large": {
+ "Height": 500,
+ "URL": "https://m.media-amazon.com/images/I/51w1O96yA9L._SL500_.jpg",
+ "Width": 500
+ },
+ "Medium": {
+ "Height": 160,
+ "URL": "https://m.media-amazon.com/images/I/51w1O96yA9L._SL160_.jpg",
+ "Width": 160
+ },
+ "Small": {
+ "Height": 75,
+ "URL": "https://m.media-amazon.com/images/I/51w1O96yA9L._SL75_.jpg",
+ "Width": 75
+ }
+ },
+ {
+ "Large": {
+ "Height": 500,
+ "URL": "https://m.media-amazon.com/images/I/41qDWR2oRVL._SL500_.jpg",
+ "Width": 500
+ },
+ "Medium": {
+ "Height": 160,
+ "URL": "https://m.media-amazon.com/images/I/41qDWR2oRVL._SL160_.jpg",
+ "Width": 160
+ },
+ "Small": {
+ "Height": 75,
+ "URL": "https://m.media-amazon.com/images/I/41qDWR2oRVL._SL75_.jpg",
+ "Width": 75
+ }
+ },
+ {
+ "Large": {
+ "Height": 500,
+ "URL": "https://m.media-amazon.com/images/I/41kQ5B92xNL._SL500_.jpg",
+ "Width": 500
+ },
+ "Medium": {
+ "Height": 160,
+ "URL": "https://m.media-amazon.com/images/I/41kQ5B92xNL._SL160_.jpg",
+ "Width": 160
+ },
+ "Small": {
+ "Height": 75,
+ "URL": "https://m.media-amazon.com/images/I/41kQ5B92xNL._SL75_.jpg",
+ "Width": 75
+ }
+ },
+ {
+ "Large": {
+ "Height": 500,
+ "URL": "https://m.media-amazon.com/images/I/512Xr-G6Z5L._SL500_.jpg",
+ "Width": 500
+ },
+ "Medium": {
+ "Height": 160,
+ "URL": "https://m.media-amazon.com/images/I/512Xr-G6Z5L._SL160_.jpg",
+ "Width": 160
+ },
+ "Small": {
+ "Height": 75,
+ "URL": "https://m.media-amazon.com/images/I/512Xr-G6Z5L._SL75_.jpg",
+ "Width": 75
+ }
+ },
+ {
+ "Large": {
+ "Height": 500,
+ "URL": "https://m.media-amazon.com/images/I/51kx0LZ40PL._SL500_.jpg",
+ "Width": 500
+ },
+ "Medium": {
+ "Height": 160,
+ "URL": "https://m.media-amazon.com/images/I/51kx0LZ40PL._SL160_.jpg",
+ "Width": 160
+ },
+ "Small": {
+ "Height": 75,
+ "URL": "https://m.media-amazon.com/images/I/51kx0LZ40PL._SL75_.jpg",
+ "Width": 75
+ }
+ },
+ {
+ "Large": {
+ "Height": 500,
+ "URL": "https://m.media-amazon.com/images/I/41Ql+IBmIaL._SL500_.jpg",
+ "Width": 500
+ },
+ "Medium": {
+ "Height": 160,
+ "URL": "https://m.media-amazon.com/images/I/41Ql+IBmIaL._SL160_.jpg",
+ "Width": 160
+ },
+ "Small": {
+ "Height": 75,
+ "URL": "https://m.media-amazon.com/images/I/41Ql+IBmIaL._SL75_.jpg",
+ "Width": 75
+ }
+ },
+ {
+ "Large": {
+ "Height": 500,
+ "URL": "https://m.media-amazon.com/images/I/31P1pyd5rgL._SL500_.jpg",
+ "Width": 500
+ },
+ "Medium": {
+ "Height": 160,
+ "URL": "https://m.media-amazon.com/images/I/31P1pyd5rgL._SL160_.jpg",
+ "Width": 160
+ },
+ "Small": {
+ "Height": 75,
+ "URL": "https://m.media-amazon.com/images/I/31P1pyd5rgL._SL75_.jpg",
+ "Width": 75
+ }
+ },
+ {
+ "Large": {
+ "Height": 500,
+ "URL": "https://m.media-amazon.com/images/I/51B+SkueW6L._SL500_.jpg",
+ "Width": 500
+ },
+ "Medium": {
+ "Height": 160,
+ "URL": "https://m.media-amazon.com/images/I/51B+SkueW6L._SL160_.jpg",
+ "Width": 160
+ },
+ "Small": {
+ "Height": 75,
+ "URL": "https://m.media-amazon.com/images/I/51B+SkueW6L._SL75_.jpg",
+ "Width": 75
+ }
+ }
+ ]
+ },
+ "ItemInfo": {
+ "ByLineInfo": {
+ "Brand": {
+ "DisplayValue": "Coast",
+ "Label": "Brand",
+ "Locale": "en_US"
+ },
+ "Manufacturer": {
+ "DisplayValue": "Coast",
+ "Label": "Manufacturer",
+ "Locale": "en_US"
+ }
+ },
+ "Classifications": {
+ "Binding": {
+ "DisplayValue": "Tools & Home Improvement",
+ "Label": "Binding",
+ "Locale": "en_US"
+ },
+ "ProductGroup": {
+ "DisplayValue": "Tools",
+ "Label": "ProductGroup",
+ "Locale": "en_US"
+ }
+ },
+ "ExternalIds": {
+ "EANs": {
+ "DisplayValues": [
+ "0015286310309"
+ ],
+ "Label": "EAN",
+ "Locale": "en_US"
+ },
+ "UPCs": {
+ "DisplayValues": [
+ "015286310309"
+ ],
+ "Label": "UPC",
+ "Locale": "en_US"
+ }
+ },
+ "Features": {
+ "DisplayValues": [
+ "DUAL OPTIC LIGHTING: Choose from two light sources—flood beam or spot beam—or shine them together for more power.",
+ "GRIP-TEXTURED HANDLE: Keep close control of your light with a firm grip on the textured handle.",
+ "REVERSIBLE POCKET CLIP: Securely stow the flashlight when not in use, or attach the clip at the opposite end of the handle to use it as a hands-free mount.",
+ "DUAL POWER: Power your flashlight how it suits you best—with standard alkaline AAs (included) or a COAST ZITHION-X ZX850 rechargeable battery (purchased separately) for added convenience and savings over time.",
+ "BACKED BY COAST LIFETIME WARRANTY: Take confidence in your product knowing it is backed by COAST’s total commitment to quality and Lifetime Warranty program."
+ ],
+ "Label": "Features",
+ "Locale": "en_US"
+ },
+ "ManufactureInfo": {
+ "ItemPartNumber": {
+ "DisplayValue": "31030",
+ "Label": "PartNumber",
+ "Locale": "en_US"
+ },
+ "Model": {
+ "DisplayValue": "31030",
+ "Label": "Model",
+ "Locale": "en_US"
+ },
+ "Warranty": {
+ "DisplayValue": "Lifetime.",
+ "Label": "Warranty",
+ "Locale": "en_US"
+ }
+ },
+ "ProductInfo": {
+ "Color": {
+ "DisplayValue": "Black",
+ "Label": "Color",
+ "Locale": "en_US"
+ },
+ "ItemDimensions": {
+ "Height": {
+ "DisplayValue": 1.18,
+ "Label": "Height",
+ "Locale": "en_US",
+ "Unit": "Inches"
+ },
+ "Length": {
+ "DisplayValue": 4.72,
+ "Label": "Length",
+ "Locale": "en_US",
+ "Unit": "Inches"
+ },
+ "Width": {
+ "DisplayValue": 1.18,
+ "Label": "Width",
+ "Locale": "en_US",
+ "Unit": "Inches"
+ }
+ },
+ "UnitCount": {
+ "DisplayValue": 1,
+ "Label": "NumberOfItems",
+ "Locale": "en_US"
+ }
+ },
+ "Title": {
+ "DisplayValue": "Coast PX9R Rechargeable LED Flashlight with Dual Optic Lighting, Pocket Clip and Grip-Textured Handle, 1000 Lumens",
+ "Label": "Title",
+ "Locale": "en_US"
+ }
+ },
+ "Offers": {
+ "Listings": [
+ {
+ "Availability": {
+ "MaxOrderQuantity": 27,
+ "Message": "In Stock",
+ "MinOrderQuantity": 1,
+ "Type": "Now"
+ },
+ "Condition": {
+ "SubCondition": {
+ "Value": "New"
+ },
+ "Value": "New"
+ },
+ "DeliveryInfo": {
+ "IsAmazonFulfilled": true,
+ "IsFreeShippingEligible": true,
+ "IsPrimeEligible": true
+ },
+ "Id": "tKyp2Ar2%2BdW7Jip3nJxiasy3tUiIBXq5CUu5q%2FMCafOErRT9BqzAx7g6WHOmKS5f7UKpx9lmKnYDzqqHMz2MltJTyULVkZiQ3hg5nz15EI0cdb%2BgF4%2BVldupOKeVN36lgLeA3lMRnSf8SY1c29KvLQ%3D%3D",
+ "IsBuyBoxWinner": true,
+ "MerchantInfo": {
+ "FeedbackCount": 385,
+ "FeedbackRating": 4.68,
+ "Id": "ATVPDKIKX0DER",
+ "Name": "Amazon.com"
+ },
+ "Price": {
+ "Amount": 34,
+ "Currency": "USD",
+ "DisplayAmount": "$34.00",
+ "Savings": {
+ "Amount": 5.99,
+ "Currency": "USD",
+ "DisplayAmount": "$5.99 (15%)",
+ "Percentage": 15
+ }
+ },
+ "ProgramEligibility": {
+ "IsPrimeExclusive": false,
+ "IsPrimePantry": false
+ },
+ "SavingBasis": {
+ "Amount": 39.99,
+ "Currency": "USD",
+ "DisplayAmount": "$39.99",
+ "PriceType": "LIST_PRICE"
+ },
+ "ViolatesMAP": false
+ }
+ ],
+ "Summaries": [
+ {
+ "Condition": {
+ "Value": "New"
+ },
+ "HighestPrice": {
+ "Amount": 34,
+ "Currency": "USD",
+ "DisplayAmount": "$34.00"
+ },
+ "LowestPrice": {
+ "Amount": 34,
+ "Currency": "USD",
+ "DisplayAmount": "$34.00"
+ },
+ "OfferCount": 1
+ }
+ ]
+ }
+ }
+ ],
+ "SearchRefinements": {
+ "SearchIndex": {
+ "Bins": [
+ {
+ "DisplayName": "Sports & Outdoors",
+ "Id": "SportsAndOutdoors"
+ },
+ {
+ "DisplayName": "Tools & Home Improvement",
+ "Id": "ToolsAndHomeImprovement"
+ },
+ {
+ "DisplayName": "Health, Household & Baby Care",
+ "Id": "HealthPersonalCare"
+ },
+ {
+ "DisplayName": "Industrial & Scientific",
+ "Id": "Industrial"
+ },
+ {
+ "DisplayName": "Automotive Parts & Accessories",
+ "Id": "Automotive"
+ },
+ {
+ "DisplayName": "Electronics",
+ "Id": "Electronics"
+ },
+ {
+ "DisplayName": "Office Products",
+ "Id": "OfficeProducts"
+ }
+ ],
+ "DisplayName": "Department",
+ "Id": "SearchIndex"
+ }
+ },
+ "SearchURL": "https://www.amazon.com/s?k=flashlight&rh=p_n_availability%3A-1%2Cp_lbr_brands_browse-bin%3ACOAST&tag=dashersupply-20&linkCode=osi",
+ "TotalResultCount": 181
+ }
+ }
\ No newline at end of file
diff --git a/src/data/brands/coast.ts b/src/old-data/brands/coast.ts
similarity index 81%
rename from src/data/brands/coast.ts
rename to src/old-data/brands/coast.ts
index a4135b1..678cd13 100644
--- a/src/data/brands/coast.ts
+++ b/src/old-data/brands/coast.ts
@@ -1,8 +1,41 @@
import { type Product } from '../products/product';
import { getCategoryIdForSlug } from '../categories';
+import slugify from 'slugify';
export const BRAND_STORE_SLUG = 'coast';
+import jsonSearchResults from './coast-query-response.json';
+import { type SearchItemsResponse } from 'amazon-pa-api5-node-ts';
+let parsedResults = jsonSearchResults!.SearchResult.Items.map((value) => {
+ let product: Product = {
+ categoryId: getCategoryIdForSlug('safety-equipment')!,
+ name: value.ItemInfo!.Title!.DisplayValue!,
+ title: value.ItemInfo!.Title!.DisplayValue!,
+ slug: slugify(value.ItemInfo!.Title!.DisplayValue!, {
+ replacement: '-',
+ remove: undefined,
+ lower: true,
+ strict: true,
+ locale: 'en',
+ trim: true,
+ }),
+ tags: ['flashlight', 'safety'],
+ amazonLink: value.DetailPageURL!,
+ amazonProductDetails: {
+ featureBullets: value.ItemInfo!.Features!.DisplayValues!,
+ imageUrls: [
+ value.Images!.Primary!.Large!.URL!,
+ ...value.Images!.Variants!.map((image) => image.Large.URL)
+ ],
+ price: value.Offers!.Listings![0].Price!.Amount!,
+ },
+ ASIN: value.ASIN!,
+ brandStoreSlug: BRAND_STORE_SLUG,
+ callout: `House numbers can be tricky to locate late in the evening.`
+ };
+ return product;
+})
+
export const CoastStoreProducts: Product[] = [
{
slug: 'coast-polysteel-600-led-flashlight',
@@ -38,7 +71,7 @@ Whether you're navigating through dark alleys, driveways, signaling for help, or
the COAST Polysteel 600 LED Flashlight has got your back. Its durable design and rechargeable options make it a reliable companion for
delivery drivers like you.
`.trim(),
- amazonProductId: 'B00SJRDIN2',
+ ASIN: 'B00SJRDIN2',
amazonLink: 'https://www.amazon.com/Polysteel-600-Waterproof-Flashlight-Stainless/dp/B00SJRDIN2?crid=29BV6TGKIV7U4&dib=eyJ2IjoiMSJ9.z_qqGdUikpKLO62rjeDuDoQDki7kToAVTM2kBLri4vs25y739Ll_nFVMziV7A5ZnYGQQYNujGdg5igViybnULLsVCa_T6qCk9HUVk7GuD30Jp0FrydoVV9zm-m-E9Zhi7vGbjJdDxUmYXypCL_GaGT6O6K4gf2P94QITVfbbBrjNT74VL9ZdRfs9ucPUSjkoTNLCMXcAXf4fXnJqniXk4PyFks_YYcZ9K8IDN4Fp-puEBc5lhdIp2hY4ugsmMD2v9zYNTvaTD1EaAnXVA_UXIrGwSTdg3Q2cWoqWF6sw6mo.z0JvreFTZ58D14a2IuwCSDybpR9x_CTUBSRrNlP9aZs&dib_tag=se&keywords=coast+flash+light&qid=1720695258&s=sporting-goods&sprefix=coast+flash+light%2Csporting%2C83&sr=1-27&linkCode=ll1&tag=dashersupply-20&linkId=9cfd6086ba43fac649f6884f72c7c844&language=en_US&ref_=as_li_ss_tl',
amazonProductDetails: {
"title": "COAST POLYSTEEL 600 1000 Lumen LED Flashlight with Pure Beam Twist Focus, Stainless-Steel Core, Crushproof, Black",
@@ -86,5 +119,6 @@ delivery drivers like you.
}
]
}
- }
+ },
+ ...parsedResults
];
\ No newline at end of file
diff --git a/src/old-data/brands/first-aid-only-example-query-getitems.ts b/src/old-data/brands/first-aid-only-example-query-getitems.ts
new file mode 100644
index 0000000..23e6eb2
--- /dev/null
+++ b/src/old-data/brands/first-aid-only-example-query-getitems.ts
@@ -0,0 +1,575 @@
+import type { GetItemsResponse } from "amazon-pa-api5-node-ts";
+
+/* ********** Signed Request ********** */
+export const signedRequest = `https://webservices.amazon.com/!YW16LTEuMDtjb20uYW1hem9uLnBhYXBpNS52MS5Qcm9kdWN0QWR2ZXJ0aXNpbmdBUEl2MS5HZXRJdGVtczt7CiAgICAiSXRlbUlkcyI6IFsKICAgICAgICAiQjAwMVNHNzZNVSIKICAgIF0sCiAgICAiUmVzb3VyY2VzIjogWwogICAgICAgICJCcm93c2VOb2RlSW5mby5Ccm93c2VOb2RlcyIsCiAgICAgICAgIkJyb3dzZU5vZGVJbmZvLkJyb3dzZU5vZGVzLkFuY2VzdG9yIiwKICAgICAgICAiQnJvd3NlTm9kZUluZm8uQnJvd3NlTm9kZXMuU2FsZXNSYW5rIiwKICAgICAgICAiQnJvd3NlTm9kZUluZm8uV2Vic2l0ZVNhbGVzUmFuayIsCiAgICAgICAgIkN1c3RvbWVyUmV2aWV3cy5Db3VudCIsCiAgICAgICAgIkN1c3RvbWVyUmV2aWV3cy5TdGFyUmF0aW5nIiwKICAgICAgICAiSW1hZ2VzLlByaW1hcnkuU21hbGwiLAogICAgICAgICJJbWFnZXMuUHJpbWFyeS5NZWRpdW0iLAogICAgICAgICJJbWFnZXMuUHJpbWFyeS5MYXJnZSIsCiAgICAgICAgIkltYWdlcy5QcmltYXJ5LkhpZ2hSZXMiLAogICAgICAgICJJbWFnZXMuVmFyaWFudHMuU21hbGwiLAogICAgICAgICJJbWFnZXMuVmFyaWFudHMuTWVkaXVtIiwKICAgICAgICAiSW1hZ2VzLlZhcmlhbnRzLkxhcmdlIiwKICAgICAgICAiSW1hZ2VzLlZhcmlhbnRzLkhpZ2hSZXMiLAogICAgICAgICJJdGVtSW5mby5CeUxpbmVJbmZvIiwKICAgICAgICAiSXRlbUluZm8uQ29udGVudEluZm8iLAogICAgICAgICJJdGVtSW5mby5Db250ZW50UmF0aW5nIiwKICAgICAgICAiSXRlbUluZm8uQ2xhc3NpZmljYXRpb25zIiwKICAgICAgICAiSXRlbUluZm8uRXh0ZXJuYWxJZHMiLAogICAgICAgICJJdGVtSW5mby5GZWF0dXJlcyIsCiAgICAgICAgIkl0ZW1JbmZvLk1hbnVmYWN0dXJlSW5mbyIsCiAgICAgICAgIkl0ZW1JbmZvLlByb2R1Y3RJbmZvIiwKICAgICAgICAiSXRlbUluZm8uVGVjaG5pY2FsSW5mbyIsCiAgICAgICAgIkl0ZW1JbmZvLlRpdGxlIiwKICAgICAgICAiSXRlbUluZm8uVHJhZGVJbkluZm8iLAogICAgICAgICJPZmZlcnMuTGlzdGluZ3MuQXZhaWxhYmlsaXR5Lk1heE9yZGVyUXVhbnRpdHkiLAogICAgICAgICJPZmZlcnMuTGlzdGluZ3MuQXZhaWxhYmlsaXR5Lk1lc3NhZ2UiLAogICAgICAgICJPZmZlcnMuTGlzdGluZ3MuQXZhaWxhYmlsaXR5Lk1pbk9yZGVyUXVhbnRpdHkiLAogICAgICAgICJPZmZlcnMuTGlzdGluZ3MuQXZhaWxhYmlsaXR5LlR5cGUiLAogICAgICAgICJPZmZlcnMuTGlzdGluZ3MuQ29uZGl0aW9uIiwKICAgICAgICAiT2ZmZXJzLkxpc3RpbmdzLkNvbmRpdGlvbi5Db25kaXRpb25Ob3RlIiwKICAgICAgICAiT2ZmZXJzLkxpc3RpbmdzLkNvbmRpdGlvbi5TdWJDb25kaXRpb24iLAogICAgICAgICJPZmZlcnMuTGlzdGluZ3MuRGVsaXZlcnlJbmZvLklzQW1hem9uRnVsZmlsbGVkIiwKICAgICAgICAiT2ZmZXJzLkxpc3RpbmdzLkRlbGl2ZXJ5SW5mby5Jc0ZyZWVTaGlwcGluZ0VsaWdpYmxlIiwKICAgICAgICAiT2ZmZXJzLkxpc3RpbmdzLkRlbGl2ZXJ5SW5mby5Jc1ByaW1lRWxpZ2libGUiLAogICAgICAgICJPZmZlcnMuTGlzdGluZ3MuRGVsaXZlcnlJbmZvLlNoaXBwaW5nQ2hhcmdlcyIsCiAgICAgICAgIk9mZmVycy5MaXN0aW5ncy5Jc0J1eUJveFdpbm5lciIsCiAgICAgICAgIk9mZmVycy5MaXN0aW5ncy5Mb3lhbHR5UG9pbnRzLlBvaW50cyIsCiAgICAgICAgIk9mZmVycy5MaXN0aW5ncy5NZXJjaGFudEluZm8iLAogICAgICAgICJPZmZlcnMuTGlzdGluZ3MuUHJpY2UiLAogICAgICAgICJPZmZlcnMuTGlzdGluZ3MuUHJvZ3JhbUVsaWdpYmlsaXR5LklzUHJpbWVFeGNsdXNpdmUiLAogICAgICAgICJPZmZlcnMuTGlzdGluZ3MuUHJvZ3JhbUVsaWdpYmlsaXR5LklzUHJpbWVQYW50cnkiLAogICAgICAgICJPZmZlcnMuTGlzdGluZ3MuUHJvbW90aW9ucyIsCiAgICAgICAgIk9mZmVycy5MaXN0aW5ncy5TYXZpbmdCYXNpcyIsCiAgICAgICAgIk9mZmVycy5TdW1tYXJpZXMuSGlnaGVzdFByaWNlIiwKICAgICAgICAiT2ZmZXJzLlN1bW1hcmllcy5Mb3dlc3RQcmljZSIsCiAgICAgICAgIk9mZmVycy5TdW1tYXJpZXMuT2ZmZXJDb3VudCIsCiAgICAgICAgIlBhcmVudEFTSU4iLAogICAgICAgICJSZW50YWxPZmZlcnMuTGlzdGluZ3MuQXZhaWxhYmlsaXR5Lk1heE9yZGVyUXVhbnRpdHkiLAogICAgICAgICJSZW50YWxPZmZlcnMuTGlzdGluZ3MuQXZhaWxhYmlsaXR5Lk1lc3NhZ2UiLAogICAgICAgICJSZW50YWxPZmZlcnMuTGlzdGluZ3MuQXZhaWxhYmlsaXR5Lk1pbk9yZGVyUXVhbnRpdHkiLAogICAgICAgICJSZW50YWxPZmZlcnMuTGlzdGluZ3MuQXZhaWxhYmlsaXR5LlR5cGUiLAogICAgICAgICJSZW50YWxPZmZlcnMuTGlzdGluZ3MuQmFzZVByaWNlIiwKICAgICAgICAiUmVudGFsT2ZmZXJzLkxpc3RpbmdzLkNvbmRpdGlvbiIsCiAgICAgICAgIlJlbnRhbE9mZmVycy5MaXN0aW5ncy5Db25kaXRpb24uQ29uZGl0aW9uTm90ZSIsCiAgICAgICAgIlJlbnRhbE9mZmVycy5MaXN0aW5ncy5Db25kaXRpb24uU3ViQ29uZGl0aW9uIiwKICAgICAgICAiUmVudGFsT2ZmZXJzLkxpc3RpbmdzLkRlbGl2ZXJ5SW5mby5Jc0FtYXpvbkZ1bGZpbGxlZCIsCiAgICAgICAgIlJlbnRhbE9mZmVycy5MaXN0aW5ncy5EZWxpdmVyeUluZm8uSXNGcmVlU2hpcHBpbmdFbGlnaWJsZSIsCiAgICAgICAgIlJlbnRhbE9mZmVycy5MaXN0aW5ncy5EZWxpdmVyeUluZm8uSXNQcmltZUVsaWdpYmxlIiwKICAgICAgICAiUmVudGFsT2ZmZXJzLkxpc3RpbmdzLkRlbGl2ZXJ5SW5mby5TaGlwcGluZ0NoYXJnZXMiLAogICAgICAgICJSZW50YWxPZmZlcnMuTGlzdGluZ3MuTWVyY2hhbnRJbmZvIgogICAgXSwKICAgICJQYXJ0bmVyVGFnIjogImRhc2hlcnN1cHBseS0yMCIsCiAgICAiUGFydG5lclR5cGUiOiAiQXNzb2NpYXRlcyIsCiAgICAiTWFya2V0cGxhY2UiOiAid3d3LmFtYXpvbi5jb20iCn0=`;
+
+/* ********** Payload ********** */
+export const payload = {
+ "ItemIds": [
+ "B001SG76MU"
+ ],
+ "Resources": [
+ "BrowseNodeInfo.BrowseNodes",
+ "BrowseNodeInfo.BrowseNodes.Ancestor",
+ "BrowseNodeInfo.BrowseNodes.SalesRank",
+ "BrowseNodeInfo.WebsiteSalesRank",
+ "CustomerReviews.Count",
+ "CustomerReviews.StarRating",
+ "Images.Primary.Small",
+ "Images.Primary.Medium",
+ "Images.Primary.Large",
+ "Images.Primary.HighRes",
+ "Images.Variants.Small",
+ "Images.Variants.Medium",
+ "Images.Variants.Large",
+ "Images.Variants.HighRes",
+ "ItemInfo.ByLineInfo",
+ "ItemInfo.ContentInfo",
+ "ItemInfo.ContentRating",
+ "ItemInfo.Classifications",
+ "ItemInfo.ExternalIds",
+ "ItemInfo.Features",
+ "ItemInfo.ManufactureInfo",
+ "ItemInfo.ProductInfo",
+ "ItemInfo.TechnicalInfo",
+ "ItemInfo.Title",
+ "ItemInfo.TradeInInfo",
+ "Offers.Listings.Availability.MaxOrderQuantity",
+ "Offers.Listings.Availability.Message",
+ "Offers.Listings.Availability.MinOrderQuantity",
+ "Offers.Listings.Availability.Type",
+ "Offers.Listings.Condition",
+ "Offers.Listings.Condition.ConditionNote",
+ "Offers.Listings.Condition.SubCondition",
+ "Offers.Listings.DeliveryInfo.IsAmazonFulfilled",
+ "Offers.Listings.DeliveryInfo.IsFreeShippingEligible",
+ "Offers.Listings.DeliveryInfo.IsPrimeEligible",
+ "Offers.Listings.DeliveryInfo.ShippingCharges",
+ "Offers.Listings.IsBuyBoxWinner",
+ "Offers.Listings.LoyaltyPoints.Points",
+ "Offers.Listings.MerchantInfo",
+ "Offers.Listings.Price",
+ "Offers.Listings.ProgramEligibility.IsPrimeExclusive",
+ "Offers.Listings.ProgramEligibility.IsPrimePantry",
+ "Offers.Listings.Promotions",
+ "Offers.Listings.SavingBasis",
+ "Offers.Summaries.HighestPrice",
+ "Offers.Summaries.LowestPrice",
+ "Offers.Summaries.OfferCount",
+ "ParentASIN",
+ "RentalOffers.Listings.Availability.MaxOrderQuantity",
+ "RentalOffers.Listings.Availability.Message",
+ "RentalOffers.Listings.Availability.MinOrderQuantity",
+ "RentalOffers.Listings.Availability.Type",
+ "RentalOffers.Listings.BasePrice",
+ "RentalOffers.Listings.Condition",
+ "RentalOffers.Listings.Condition.ConditionNote",
+ "RentalOffers.Listings.Condition.SubCondition",
+ "RentalOffers.Listings.DeliveryInfo.IsAmazonFulfilled",
+ "RentalOffers.Listings.DeliveryInfo.IsFreeShippingEligible",
+ "RentalOffers.Listings.DeliveryInfo.IsPrimeEligible",
+ "RentalOffers.Listings.DeliveryInfo.ShippingCharges",
+ "RentalOffers.Listings.MerchantInfo"
+ ],
+ "PartnerTag": "dashersupply-20",
+ "PartnerType": "Associates",
+ "Marketplace": "www.amazon.com",
+ "Operation": "GetItems"
+};
+
+/* ********** Response ********** */
+export const response: GetItemsResponse = {
+ "ItemsResult": {
+ "Items": [
+ {
+ "ASIN": "B001SG76MU",
+ "BrowseNodeInfo": {
+ "BrowseNodes": [
+ {
+ "Ancestor": {
+ "Ancestor": {
+ "Ancestor": {
+ "Ancestor": {
+ "Ancestor": {
+ "ContextFreeName": "Sports & Outdoors",
+ "DisplayName": "Sports & Outdoors",
+ "Id": "3375251"
+ },
+ "ContextFreeName": "Sports & Outdoors",
+ "DisplayName": "Categories",
+ "Id": "3375301"
+ },
+ "ContextFreeName": "Outdoor Recreation",
+ "DisplayName": "Outdoor Recreation",
+ "Id": "706814011"
+ },
+ "ContextFreeName": "Camping & Hiking Equipment",
+ "DisplayName": "Camping & Hiking",
+ "Id": "3400371"
+ },
+ "ContextFreeName": "Camping Safety & Survival Equipment",
+ "DisplayName": "Safety & Survival",
+ "Id": "3401081"
+ },
+ "ContextFreeName": "Camping First Aid Kits",
+ "DisplayName": "First Aid Kits",
+ "Id": "3401101",
+ "IsRoot": false,
+ "SalesRank": 7
+ },
+ {
+ "Ancestor": {
+ "Ancestor": {
+ "Ancestor": {
+ "Ancestor": {
+ "Ancestor": {
+ "Ancestor": {
+ "ContextFreeName": "Health & Household",
+ "DisplayName": "Health & Household",
+ "Id": "3760901"
+ },
+ "ContextFreeName": "Arborist Merchandising Root",
+ "DisplayName": "Arborist Merchandising Root",
+ "Id": "119756821011"
+ },
+ "ContextFreeName": "Self Service",
+ "DisplayName": "Self Service",
+ "Id": "2334097011"
+ },
+ "ContextFreeName": "Special Features Stores",
+ "DisplayName": "Special Features Stores",
+ "Id": "2334159011"
+ },
+ "ContextFreeName": "ab47f18a-1a7a-4dbe-b89a-001bfaccbe8b_0",
+ "DisplayName": "ab47f18a-1a7a-4dbe-b89a-001bfaccbe8b_0",
+ "Id": "119756826011"
+ },
+ "ContextFreeName": "ab47f18a-1a7a-4dbe-b89a-001bfaccbe8b_901",
+ "DisplayName": "ab47f18a-1a7a-4dbe-b89a-001bfaccbe8b_901",
+ "Id": "119757260011"
+ },
+ "ContextFreeName": "All First Aid",
+ "DisplayName": "All First Aid",
+ "Id": "24423742011",
+ "IsRoot": false
+ }
+ ],
+ "WebsiteSalesRank": {
+ "SalesRank": 2662
+ }
+ },
+ "DetailPageURL": "https://www.amazon.com/dp/B001SG76MU?tag=dashersupply-20&linkCode=ogi&th=1&psc=1",
+ "Images": {
+ "Primary": {
+ "Large": {
+ "Height": 500,
+ "URL": "https://m.media-amazon.com/images/I/413sfboF0mL._SL500_.jpg",
+ "Width": 500
+ },
+ "Medium": {
+ "Height": 160,
+ "URL": "https://m.media-amazon.com/images/I/413sfboF0mL._SL160_.jpg",
+ "Width": 160
+ },
+ "Small": {
+ "Height": 75,
+ "URL": "https://m.media-amazon.com/images/I/413sfboF0mL._SL75_.jpg",
+ "Width": 75
+ }
+ },
+ "Variants": [
+ {
+ "Large": {
+ "Height": 500,
+ "URL": "https://m.media-amazon.com/images/I/51PHxfhu09L._SL500_.jpg",
+ "Width": 500
+ },
+ "Medium": {
+ "Height": 160,
+ "URL": "https://m.media-amazon.com/images/I/51PHxfhu09L._SL160_.jpg",
+ "Width": 160
+ },
+ "Small": {
+ "Height": 75,
+ "URL": "https://m.media-amazon.com/images/I/51PHxfhu09L._SL75_.jpg",
+ "Width": 75
+ }
+ },
+ {
+ "Large": {
+ "Height": 500,
+ "URL": "https://m.media-amazon.com/images/I/41DrWanEf2L._SL500_.jpg",
+ "Width": 500
+ },
+ "Medium": {
+ "Height": 160,
+ "URL": "https://m.media-amazon.com/images/I/41DrWanEf2L._SL160_.jpg",
+ "Width": 160
+ },
+ "Small": {
+ "Height": 75,
+ "URL": "https://m.media-amazon.com/images/I/41DrWanEf2L._SL75_.jpg",
+ "Width": 75
+ }
+ },
+ {
+ "Large": {
+ "Height": 500,
+ "URL": "https://m.media-amazon.com/images/I/51vA72L9CkL._SL500_.jpg",
+ "Width": 500
+ },
+ "Medium": {
+ "Height": 160,
+ "URL": "https://m.media-amazon.com/images/I/51vA72L9CkL._SL160_.jpg",
+ "Width": 160
+ },
+ "Small": {
+ "Height": 75,
+ "URL": "https://m.media-amazon.com/images/I/51vA72L9CkL._SL75_.jpg",
+ "Width": 75
+ }
+ },
+ {
+ "Large": {
+ "Height": 500,
+ "URL": "https://m.media-amazon.com/images/I/41UoP-S+XuL._SL500_.jpg",
+ "Width": 500
+ },
+ "Medium": {
+ "Height": 160,
+ "URL": "https://m.media-amazon.com/images/I/41UoP-S+XuL._SL160_.jpg",
+ "Width": 160
+ },
+ "Small": {
+ "Height": 75,
+ "URL": "https://m.media-amazon.com/images/I/41UoP-S+XuL._SL75_.jpg",
+ "Width": 75
+ }
+ },
+ {
+ "Large": {
+ "Height": 500,
+ "URL": "https://m.media-amazon.com/images/I/51XP7Me5+IL._SL500_.jpg",
+ "Width": 500
+ },
+ "Medium": {
+ "Height": 160,
+ "URL": "https://m.media-amazon.com/images/I/51XP7Me5+IL._SL160_.jpg",
+ "Width": 160
+ },
+ "Small": {
+ "Height": 75,
+ "URL": "https://m.media-amazon.com/images/I/51XP7Me5+IL._SL75_.jpg",
+ "Width": 75
+ }
+ },
+ {
+ "Large": {
+ "Height": 500,
+ "URL": "https://m.media-amazon.com/images/I/51+kXOErgOL._SL500_.jpg",
+ "Width": 500
+ },
+ "Medium": {
+ "Height": 160,
+ "URL": "https://m.media-amazon.com/images/I/51+kXOErgOL._SL160_.jpg",
+ "Width": 160
+ },
+ "Small": {
+ "Height": 75,
+ "URL": "https://m.media-amazon.com/images/I/51+kXOErgOL._SL75_.jpg",
+ "Width": 75
+ }
+ },
+ {
+ "Large": {
+ "Height": 500,
+ "URL": "https://m.media-amazon.com/images/I/41rLINs+hGL._SL500_.jpg",
+ "Width": 499
+ },
+ "Medium": {
+ "Height": 160,
+ "URL": "https://m.media-amazon.com/images/I/41rLINs+hGL._SL160_.jpg",
+ "Width": 159
+ },
+ "Small": {
+ "Height": 75,
+ "URL": "https://m.media-amazon.com/images/I/41rLINs+hGL._SL75_.jpg",
+ "Width": 74
+ }
+ },
+ {
+ "Large": {
+ "Height": 500,
+ "URL": "https://m.media-amazon.com/images/I/31ZSaHsFmTL._SL500_.jpg",
+ "Width": 499
+ },
+ "Medium": {
+ "Height": 160,
+ "URL": "https://m.media-amazon.com/images/I/31ZSaHsFmTL._SL160_.jpg",
+ "Width": 159
+ },
+ "Small": {
+ "Height": 75,
+ "URL": "https://m.media-amazon.com/images/I/31ZSaHsFmTL._SL75_.jpg",
+ "Width": 74
+ }
+ },
+ {
+ "Large": {
+ "Height": 500,
+ "URL": "https://m.media-amazon.com/images/I/31-tEgCUzPL._SL500_.jpg",
+ "Width": 499
+ },
+ "Medium": {
+ "Height": 160,
+ "URL": "https://m.media-amazon.com/images/I/31-tEgCUzPL._SL160_.jpg",
+ "Width": 159
+ },
+ "Small": {
+ "Height": 75,
+ "URL": "https://m.media-amazon.com/images/I/31-tEgCUzPL._SL75_.jpg",
+ "Width": 74
+ }
+ },
+ {
+ "Large": {
+ "Height": 375,
+ "URL": "https://m.media-amazon.com/images/I/41Rw5lXzcWL._SL500_.jpg",
+ "Width": 500
+ },
+ "Medium": {
+ "Height": 120,
+ "URL": "https://m.media-amazon.com/images/I/41Rw5lXzcWL._SL160_.jpg",
+ "Width": 160
+ },
+ "Small": {
+ "Height": 56,
+ "URL": "https://m.media-amazon.com/images/I/41Rw5lXzcWL._SL75_.jpg",
+ "Width": 75
+ }
+ },
+ {
+ "Large": {
+ "Height": 375,
+ "URL": "https://m.media-amazon.com/images/I/41DHqh2WnqL._SL500_.jpg",
+ "Width": 500
+ },
+ "Medium": {
+ "Height": 120,
+ "URL": "https://m.media-amazon.com/images/I/41DHqh2WnqL._SL160_.jpg",
+ "Width": 160
+ },
+ "Small": {
+ "Height": 56,
+ "URL": "https://m.media-amazon.com/images/I/41DHqh2WnqL._SL75_.jpg",
+ "Width": 75
+ }
+ }
+ ]
+ },
+ "ItemInfo": {
+ "ByLineInfo": {
+ "Brand": {
+ "DisplayValue": "First Aid Only",
+ "Label": "Brand",
+ "Locale": "en_US"
+ },
+ "Manufacturer": {
+ "DisplayValue": "Acme United",
+ "Label": "Manufacturer",
+ "Locale": "en_US"
+ }
+ },
+ "Classifications": {
+ "Binding": {
+ "DisplayValue": "Misc.",
+ "Label": "Binding",
+ "Locale": "en_US"
+ },
+ "ProductGroup": {
+ "DisplayValue": "BISS",
+ "Label": "ProductGroup",
+ "Locale": "en_US"
+ }
+ },
+ "ContentInfo": {
+ "PublicationDate": {
+ "DisplayValue": "2018-01-01T00:00:01Z",
+ "Label": "PublicationDate",
+ "Locale": "en_US"
+ }
+ },
+ "ExternalIds": {
+ "EANs": {
+ "DisplayValues": [
+ "0738743060608"
+ ],
+ "Label": "EAN",
+ "Locale": "en_US"
+ },
+ "UPCs": {
+ "DisplayValues": [
+ "738743060608"
+ ],
+ "Label": "UPC",
+ "Locale": "en_US"
+ }
+ },
+ "Features": {
+ "DisplayValues": [
+ "Comprehensive Emergency Kit: Includes adhesive fabric and plastic bandages, antibiotic ointments, BZK antiseptic towelettes, burn cream packets, gauze roll and pads, gloves, scissors, tweezers, and other multi-use first aid items",
+ "Convenient Packaging: An ideal worksite or office first aid kit, it features a durable plastic case complete with an easy-to-carry handle for transporting first aid supplies in an emergency",
+ "Easy Access: This convenient and versatile home, office, and jobsite first aid kit features individual compartments that make accessing first aid supplies quick and easy",
+ "Compact Size: Small enough to fit nicely into a backpack, vehicle compartment, or desk drawer, this travel-size first aid kit helps you stay prepared for potential emergencies when at home, in the office, or while on the go",
+ "Personal and Professional First Aid Solutions: First Aid Only offers a full line of first aid kits, cabinets, and stations, Emergency Response Care, individual first aid products, Spill Clean Up kits, CPR care and more"
+ ],
+ "Label": "Features",
+ "Locale": "en_US"
+ },
+ "ManufactureInfo": {
+ "ItemPartNumber": {
+ "DisplayValue": "6060",
+ "Label": "PartNumber",
+ "Locale": "en_US"
+ },
+ "Model": {
+ "DisplayValue": "6060",
+ "Label": "Model",
+ "Locale": "en_US"
+ },
+ "Warranty": {
+ "DisplayValue": "Manufacturer",
+ "Label": "Warranty",
+ "Locale": "en_US"
+ }
+ },
+ "ProductInfo": {
+ "Color": {
+ "DisplayValue": "White",
+ "Label": "Color",
+ "Locale": "en_US"
+ },
+ "IsAdultProduct": {
+ "DisplayValue": false,
+ "Label": "IsAdultProduct",
+ "Locale": "en_US"
+ },
+ "ItemDimensions": {
+ "Height": {
+ "DisplayValue": 8,
+ "Label": "Height",
+ "Locale": "en_US",
+ "Unit": "inches"
+ },
+ "Length": {
+ "DisplayValue": 5,
+ "Label": "Length",
+ "Locale": "en_US",
+ "Unit": "inches"
+ },
+ "Weight": {
+ "DisplayValue": 0.8,
+ "Label": "Weight",
+ "Locale": "en_US",
+ "Unit": "Pounds"
+ },
+ "Width": {
+ "DisplayValue": 3,
+ "Label": "Width",
+ "Locale": "en_US",
+ "Unit": "inches"
+ }
+ },
+ "ReleaseDate": {
+ "DisplayValue": "2018-01-01T00:00:01Z",
+ "Label": "ReleaseDate",
+ "Locale": "en_US"
+ },
+ "Size": {
+ "DisplayValue": "57 Piece",
+ "Label": "Size",
+ "Locale": "en_US"
+ },
+ "UnitCount": {
+ "DisplayValue": 1,
+ "Label": "NumberOfItems",
+ "Locale": "en_US"
+ }
+ },
+ "Title": {
+ "DisplayValue": "First Aid Only 6060 10-Person Emergency First Aid Kit for Office, Home, and Worksites, 57 Pieces",
+ "Label": "Title",
+ "Locale": "en_US"
+ }
+ },
+ "Offers": {
+ "Listings": [
+ {
+ "Availability": {
+ "Message": "In Stock",
+ "MinOrderQuantity": 1,
+ "Type": "Now"
+ },
+ "Condition": {
+ "SubCondition": {
+ "Value": "New"
+ },
+ "Value": "New"
+ },
+ "DeliveryInfo": {
+ "IsAmazonFulfilled": true,
+ "IsFreeShippingEligible": true,
+ "IsPrimeEligible": true
+ },
+ "Id": "EeHLy5pUHgzNO7xwG3nGTlyXMscRGCy2TkNM4pN2zPDPyzqCHeou9sueJCz7yOWjlAzQzm28WmVretpxwqlrl1IKry0MFoLOO%2BE6pQSH0spbDH6jSs1bzJVbX8F4W%2BB2zzpLvoo9DOIAzEdoHHYzHA%3D%3D",
+ "IsBuyBoxWinner": true,
+ "MerchantInfo": {
+ "FeedbackCount": 385,
+ "FeedbackRating": 4.68,
+ "Id": "ATVPDKIKX0DER",
+ "Name": "Amazon.com"
+ },
+ "Price": {
+ "Amount": 20.99,
+ "Currency": "USD",
+ "DisplayAmount": "$20.99"
+ },
+ "ProgramEligibility": {
+ "IsPrimeExclusive": false,
+ "IsPrimePantry": false
+ },
+ "Promotions": [
+ {
+ "Amount": 20.99,
+ "Currency": "USD",
+ "DiscountPercent": 0,
+ "DisplayAmount": "$20.99 (0%)",
+ "Type": "SNS"
+ }
+ ],
+ "ViolatesMAP": false
+ }
+ ],
+ "Summaries": [
+ {
+ "Condition": {
+ "Value": "New"
+ },
+ "HighestPrice": {
+ "Amount": 41.16,
+ "Currency": "USD",
+ "DisplayAmount": "$41.16"
+ },
+ "LowestPrice": {
+ "Amount": 20.99,
+ "Currency": "USD",
+ "DisplayAmount": "$20.99"
+ },
+ "OfferCount": 22
+ }
+ ]
+ }
+ }
+ ]
+ }
+}
\ No newline at end of file
diff --git a/src/data/brands/first-aid-only.ts b/src/old-data/brands/first-aid-only.ts
similarity index 99%
rename from src/data/brands/first-aid-only.ts
rename to src/old-data/brands/first-aid-only.ts
index 59c6ee4..7613cc4 100644
--- a/src/data/brands/first-aid-only.ts
+++ b/src/old-data/brands/first-aid-only.ts
@@ -6,7 +6,7 @@ export const BRAND_STORE_SLUG = 'first-aid-only';
export const FirstAidOnlyStoreProducts: Product[] = [
{
amazonLink: 'https://www.amazon.com/First-Aid-Only-Weatherproof-Plastic/dp/B001SG76MU?crid=17746AVZ2R4TK&dib=eyJ2IjoiMSJ9.nehq12VwBTB17Vyx1YODXq7JYQbnOM8xv6AZRadSceLpsk33o-ES3M7UnJMkq0usrVmB1uKgdw9rxtPf7wcS1fHI_DhXIkjp7ujnBf0xvt-SjW3Xw__yU6NvYnSUmSfQzcqj49ZMu893KSypCAIPiLZ0gHo9HbRPicFsuJVBOCv5aOQoBqlLRymArai_8k9lUwtCxAfhfiDjUGk6K3s_S6IFWUP88Ff8mbyU5lkVRtbE4dRTCp-wNjM6HpxqZPSZ0A3_-PPl75PlgjsmUXIkxArreEPatqaHwyJ13X-DCQU.CWOEqmjYxSJ7yRXLCgtz9iGOSGJD53MSoPw6jzAWx7Q&dib_tag=se&keywords=first+aid+kit&qid=1720746463&sprefix=first+aid+kit%2Caps%2C95&sr=8-3-spons&sp_csd=d2lkZ2V0TmFtZT1zcF9hdGY&psc=1&linkCode=ll1&tag=dashersupply-20&linkId=385f21e08641ef9ce7ad55aebe2d30cf&language=en_US&ref_=as_li_ss_tl',
- amazonProductId: 'B001SG76MU',
+ ASIN: 'B001SG76MU',
slug: 'first-aid-only-57-pc-first-aid-kit',
categoryId: getCategoryIdForSlug('safety-equipment')!,
name: "57-pc First Aid Kit (small)",
diff --git a/src/data/brands/index.ts b/src/old-data/brands/index.ts
similarity index 100%
rename from src/data/brands/index.ts
rename to src/old-data/brands/index.ts
diff --git a/src/data/brands/invisible-glass.ts b/src/old-data/brands/invisible-glass.ts
similarity index 99%
rename from src/data/brands/invisible-glass.ts
rename to src/old-data/brands/invisible-glass.ts
index 3e33d07..ec8771c 100644
--- a/src/data/brands/invisible-glass.ts
+++ b/src/old-data/brands/invisible-glass.ts
@@ -29,7 +29,7 @@ harsh chemicals behind, making it a true joy to work with.
Experience the difference for yourself. With its powerful foaming action and guaranteed streak-free results, you'll be able to drive
with confidence and clarity - no matter what the road throws your way.
`.trim(),
- amazonProductId: 'B0007OWD2M',
+ ASIN: 'B0007OWD2M',
amazonLink: 'https://www.amazon.com/Invisible-Glass-91166-6PK-Premium-Cleaner/dp/B0007OWD2M?hvadid=80607997944702&hvnetw=o&hvqmt=e&hvbmt=be&hvdev=c&hvlocint=&hvlocphy=&hvtargid=pla-4584207585873841&th=1&linkCode=ll1&tag=dashersupply-20&linkId=a81b62e34ab769132cbe8076316b448d&language=en_US&ref_=as_li_ss_tl',
amazonProductDetails: {
"title": "Invisible Glass 91164 19-Ounce Cleaner for Auto and Home for a Streak-Free Shine, Deep Cleaning Foaming Action, Safe for Tinted and Non-Tinted Windows, Ammonia Free Foam Glass Cleaner",
diff --git a/src/data/brands/nvision.ts b/src/old-data/brands/nvision.ts
similarity index 99%
rename from src/data/brands/nvision.ts
rename to src/old-data/brands/nvision.ts
index 3e9a30c..cc1b6f9 100644
--- a/src/data/brands/nvision.ts
+++ b/src/old-data/brands/nvision.ts
@@ -42,7 +42,7 @@ choose from a simulated rattle snake sound that takes advantage of nature's best
Don't let deer-related accidents hold you back from delivering packages and efficiently. With the nVISION Trailblazer
Deer Alert, the deer will hear you coming.
`.trim(),
- amazonProductId: 'B0000DYV3N',
+ ASIN: 'B0000DYV3N',
amazonLink: 'https://www.amazon.com/Hopkins-27512VA-nVISION-Trailblazer-Electronic/dp/B0000DYV3N?crid=1OO1GL5ERA30E&dib=eyJ2IjoiMSJ9.zKSyNMASsuqR2JLuPICupB5N0gr3mV9rCY5mDLq0nteE_I7uA99eMpyrFMlp9Rmg8y29jHsu5CXS6D6rVQbf_9X5S1rixss014Om-mY44aaW9aDxw7c2k11jxYHDo9ta6vfjAUMLS_TJ-HKmB4ens05KFPYASmgh7OMturk8CsZFebU5Wl9u3RJ3msToyu4a2iozCQzToauDe_sEWZcsK3k_oPGAwotTRsG5musYpYlTlxxBgxwE3Sii0Z4T-uqDd-BNGp3DkSfu2ZtF6gn7XK1rip8COHws2H8D1C3DxqY.9gjHTeHUVufso-AO7nuU4Zys_CClKElR_HM7Y0WBmMM&dib_tag=se&keywords=trailblazer+electronic+deer+alert&qid=1721017663&sprefix=trailblazer+electronic+deer+alert%2Caps%2C69&sr=8-1&linkCode=ll1&tag=dashersupply-20&linkId=7023f7183f50617ff8e739b6eb4a427a&language=en_US&ref_=as_li_ss_tl',
amazonProductDetails:{
"title": "nVISION Hopkins 27512VA Trailblazer Electronic Deer Alert",
diff --git a/src/data/brands/rubbermaid.ts b/src/old-data/brands/rubbermaid.ts
similarity index 99%
rename from src/data/brands/rubbermaid.ts
rename to src/old-data/brands/rubbermaid.ts
index d2fb249..eb51a45 100644
--- a/src/data/brands/rubbermaid.ts
+++ b/src/old-data/brands/rubbermaid.ts
@@ -30,7 +30,7 @@ all-purpose caddy is designed to keep your essentials organized and within reach
**Get Organized:** With its 8 rounded sections and durable design, this caddy is perfect for transporting frequently used sports drink bottles or even coffee cups. This Rubbermaid Commercial Deluxe Carry Caddy has got you covered.
`.trim(),
- amazonProductId: 'B00006ICOT',
+ ASIN: 'B00006ICOT',
amazonLink: 'https://www.amazon.com/Rubbermaid-Commercial-Deluxe-Cleaning-FG315488BLA/dp/B00006ICOT?crid=23IAS1CUMM6QG&dib=eyJ2IjoiMSJ9.WRH21whjlnubmVRL4HRNIccU9p3CC9B9pvd9LCCkzqxXQggwnV0UNwmgHs868sL9Jr_1cfUHxsHCU7sTT28EMZOCdxoGo-ylie7hWbrQ75ab9SFUJMawaE14LhyNFAQ69j45EtR9kd0njMvXY9WDrBWj61TMpe6K1vl0BC-kWFz8iQqZgrRsgLNN5jbuF83nWOddYMTMZFxQXuvyPUG13LwYmOe17iPUBa03FNecKl0.-fxaqjBgRSTfoIeqegQhb9rz9lE9LJTt475JTTi0J3A&dib_tag=se&keywords=drink+carrier&qid=1719716583&sprefix=drink+carrier%2Caps%2C162&sr=8-3&linkCode=ll1&tag=dashersupply-20&linkId=1a29425189155a3bbe240c193bd1589e&language=en_US&ref_=as_li_ss_tl',
amazonProductDetails: {
"title": "Rubbermaid Commercial Products Deluxe Carry Caddy for Take-Out Coffee/Soft Drinks, Postmates/Uber Eats/Food Delivery, Cleaning Products, Sports/Water Bottles, Black",
diff --git a/src/data/brands/vortex-optics.ts b/src/old-data/brands/vortex-optics.ts
similarity index 99%
rename from src/data/brands/vortex-optics.ts
rename to src/old-data/brands/vortex-optics.ts
index ff568a2..a829e16 100644
--- a/src/data/brands/vortex-optics.ts
+++ b/src/old-data/brands/vortex-optics.ts
@@ -33,7 +33,7 @@ clarity and confidence in a variety of environments.
The Crossfire HD binoculars bring HD optics, rugged performance and high end form-factor. Add in the included GlassPak binocular harness for quick optic deployment in the field and superior protection and comfort. The Crossfire HD truly is a rare find.
`.trim(),
- amazonProductId: 'B07V3LB5DN',
+ ASIN: 'B07V3LB5DN',
amazonProductDetails: {
"title": "Vortex Optics Crossfire HD 10x42 Binoculars - HD Optical System, Tripod Adaptable, Rubber Armor, Waterproof, Fogproof, Shockproof, Included GlassPak - Unlimited, Unconditional Warranty",
"description": "The Crossfire HD binoculars bring HD optics, rugged performance and high end form-factor. Add in the included GlassPak binocular harness for quick optic deployment in the field and superior protection and comfort - The Crossfire HD truly is a rare find.",
diff --git a/src/old-data/fetch-site.ts b/src/old-data/fetch-site.ts
new file mode 100644
index 0000000..def31b5
--- /dev/null
+++ b/src/old-data/fetch-site.ts
@@ -0,0 +1,172 @@
+import { config } from "../config";
+import { fetchApi, downloadMedia } from '../lib/strapi';
+import { type AmazonPAAPIConfig, type Brand, type Category, type GoogleAdsense, type GoogleAnalytics, type HasId, type Media, type Marketplace, type Product, type Response, type Single, type Site, type Tag } from './api-models';
+
+const siteResponse = (await fetchApi>>({
+ endpoint: 'site',
+ query: {
+ 'populate': '*',
+ }
+})).data;
+
+export const site: Site = {
+ ...siteResponse.attributes,
+};
+
+const amazonPAAPIConfigResponse = (await fetchApi>>({
+ endpoint: 'amazon-pa-api-config',
+ query: {
+ 'populate': '*',
+ }
+})).data;
+
+export const amazonPAAPIConfig: AmazonPAAPIConfig = {
+ ...amazonPAAPIConfigResponse.attributes,
+}
+
+const googleAdSenseResponse = (await fetchApi>>({
+ endpoint: 'google-ad-sense',
+ query: {
+ 'populate': '*',
+ }
+})).data;
+
+export const googleAdSense: GoogleAdsense = {
+ ...googleAdSenseResponse.attributes,
+}
+
+const googleAnalyticsResponse = (await fetchApi>>({
+ endpoint: 'google-analytics',
+ query: {
+ 'populate': '*',
+ }
+})).data;
+
+export const googleAnalytics: GoogleAnalytics = {
+ ...googleAnalyticsResponse.attributes,
+}
+
+const brandsResponse = (await fetchApi[]>>({
+ endpoint: 'brands',
+ query: {
+ 'populate': '*',
+ }
+})).data;
+
+export let brands: Brand[]&HasId[] = brandsResponse.map(value => {
+ return {
+ id: value.id,
+ ...value.attributes,
+ };
+}) // sort by name ascending
+.sort((left, right) => left.name.localeCompare(right.name))
+;
+
+const marketplacesResponse = (await fetchApi[]>>({
+ endpoint: 'marketplaces',
+ query: {
+ 'populate': '*',
+ // 'populate[components][populate]': '*',
+ }
+})).data;
+
+export const marketplaces: Marketplace[]&HasId[] = marketplacesResponse.map(value => {
+ return {
+ id: value.id,
+ ...value.attributes,
+ };
+}) // sort by name ascending
+.sort((left, right) => left.name.localeCompare(right.name))
+;
+
+const categoriesResponse = (await fetchApi[]>>({
+ endpoint: 'categories',
+ query: {
+ 'populate': '*',
+ // 'populate[0]': 'parentCategories',
+ // 'populate[1]': 'childCategories',
+ // 'populate[2]': 'products',
+ // 'populate[parentCategories][populate][0]': 'parentCategories',
+ // 'populate[parentCategories[0]][populate][parentCategories[0]]': '*',
+ // 'populate[parentCategories[0]][populate][parentCategories[0]][populate][parentCategories[0]]': '*',
+ }
+})).data;
+
+export const categories: Category[]&HasId[] = categoriesResponse.map(value => {
+ return {
+ id: value.id,
+ ...value.attributes,
+ };
+}) // sort by name ascending
+.sort((left, right) => left.name.localeCompare(right.name))
+;
+
+const tagsResponse = (await fetchApi[]>>({
+ endpoint: 'tags',
+ query: {
+ 'populate': '*',
+ }
+})).data;
+
+export const tags: Tag[]&HasId[] = tagsResponse.map(value => {
+ return {
+ id: value.id,
+ ...value.attributes,
+ };
+}) // sort by name ascending
+.sort((left, right) => left.slug.localeCompare(right.slug))
+;
+
+const productsResponse = (await fetchApi[]>>({
+ endpoint: 'products',
+ query: {
+ 'populate': '*',
+ // 'populate[components][populate]': '*',
+ }
+})).data;
+
+export const products: Product[]&HasId[] = productsResponse.map(value => {
+ return {
+ id: value.id,
+ ...value.attributes,
+ };
+});
+
+// download brand images
+for (let i = 0; i < brands.length; i++) {
+ let brand = brands[i];
+ if (brand && brand.logoImage && brand.logoImage.data) {
+ let logoImageUrl = brand.logoImage.data.attributes;
+ downloadMedia('brands', `${logoImageUrl.hash}${logoImageUrl.ext}`, logoImageUrl.url);
+ brands[i].logoImage.data.attributes.url = `/media/brands/${logoImageUrl.hash}${logoImageUrl.ext}`;
+ }
+}
+
+for (let i = 0; i < marketplaces.length; i++) {
+ let marketplace = marketplaces[i];
+ if (marketplace && marketplace.logoImage && marketplace.logoImage.data) {
+ let logoImageUrl = marketplace.logoImage.data.attributes;
+ downloadMedia('marketplaces', `${logoImageUrl.hash}${logoImageUrl.ext}`, logoImageUrl.url);
+ marketplaces[i].logoImage.data.attributes.url = `/media/marketplaces/${logoImageUrl.hash}${logoImageUrl.ext}`;
+ }
+}
+
+for (let i = 0; i < categories.length; i++) {
+ let category = categories[i];
+ if (category && category.categoryImage && category.categoryImage.data) {
+ let categoryImageUrl = category.categoryImage.data.attributes;
+ downloadMedia('categories', `${categoryImageUrl.hash}${categoryImageUrl.ext}`, categoryImageUrl.url);
+ categories[i].categoryImage.data.attributes.url = `/media/categories/${categoryImageUrl.hash}${categoryImageUrl.ext}`;
+ }
+}
+
+// console.log('site', site);
+// console.log('amazonPAAPIConfig', amazonPAAPIConfig);
+// console.log('googleAdSense', googleAdSense);
+// console.log('googleAnalytics', googleAnalytics);
+// console.log('brands', brands);
+// console.log('categories', categories);
+// console.log('marketplaces', marketplaces);
+// console.log('tags', tags);
+// console.log('products', products);
+// console.log(products[0].description[0].children);
diff --git a/src/data/categories.ts b/src/old-data/offline-category-tree/categories.ts
similarity index 100%
rename from src/data/categories.ts
rename to src/old-data/offline-category-tree/categories.ts
diff --git a/src/data/products/amazon-product-details.ts b/src/old-data/products/amazon-product-details.ts
similarity index 60%
rename from src/data/products/amazon-product-details.ts
rename to src/old-data/products/amazon-product-details.ts
index b52da80..8163b76 100644
--- a/src/data/products/amazon-product-details.ts
+++ b/src/old-data/products/amazon-product-details.ts
@@ -1,6 +1,14 @@
import { type ProductAttribute } from "./product-attribute";
-export interface ProductDetails {
+export interface AmazonProductDetails {
+ /**
+ * Amazon product ID for the product.
+ */
+ ASIN?: string;
+ /**
+ * Amazon link for the product.
+ */
+ amazonLink?: string;
title?: string;
price?: number;
// listPrice?: number;
@@ -10,4 +18,4 @@ export interface ProductDetails {
reviewCount?: number;
imageUrls?: string[];
attributes?: ProductAttribute[];
-};
\ No newline at end of file
+};
diff --git a/src/data/products/index.ts b/src/old-data/products/index.ts
similarity index 61%
rename from src/data/products/index.ts
rename to src/old-data/products/index.ts
index 6358934..2136c08 100644
--- a/src/data/products/index.ts
+++ b/src/old-data/products/index.ts
@@ -193,8 +193,155 @@ export function getProductsForCategoryId(categoryId: number) {
import { config } from "../../config";
import * as ProductAdvertisingAPIv1 from 'amazon-pa-api5-node-ts';
+import { SearchItemsResourceValues } from 'amazon-pa-api5-node-ts/dist/src/model/SearchItemsResource';
let amazonClient = ProductAdvertisingAPIv1.ApiClient.instance;
amazonClient.accessKey = config.AmazonProductAdvertisingAPIAccessKey;
amazonClient.secretKey = config.AmazonProductAdvertisingAPISecretKey;
-amazonClient.region = config.AmazonProductAdvertisingAPIRegion;
amazonClient.host = config.AmazonProductAdvertisingAPIHost;
+amazonClient.region = config.AmazonProductAdvertisingAPIRegion;
+
+var api = new ProductAdvertisingAPIv1.DefaultApi();
+
+var searchItemsRequest = new ProductAdvertisingAPIv1.SearchItemsRequest();
+
+searchItemsRequest.PartnerTag = config.AmazonProductAdvertisingAPIPartnerTag;
+searchItemsRequest.PartnerType = config.AmazonProductAdvertisingAPIPartnerType;
+searchItemsRequest.Keywords = "flashlight";
+searchItemsRequest.Brand = "COAST";
+searchItemsRequest.Marketplace = "www.amazon.com";
+//Broken needs to be fixed:
+searchItemsRequest.Resources = [
+ SearchItemsResourceValues["BrowseNodeInfo.BrowseNodes"],
+ SearchItemsResourceValues["BrowseNodeInfo.BrowseNodes.Ancestor"],
+ SearchItemsResourceValues["BrowseNodeInfo.BrowseNodes.SalesRank"],
+ SearchItemsResourceValues["BrowseNodeInfo.WebsiteSalesRank"],
+ SearchItemsResourceValues["CustomerReviews.Count"],
+ SearchItemsResourceValues["CustomerReviews.StarRating"],
+ SearchItemsResourceValues["Images.Primary.Small"],
+ SearchItemsResourceValues["Images.Primary.Medium"],
+ SearchItemsResourceValues["Images.Primary.Large"],
+ SearchItemsResourceValues["Images.Primary.HighRes"],
+ SearchItemsResourceValues["Images.Variants.Small"],
+ SearchItemsResourceValues["Images.Variants.Medium"],
+ SearchItemsResourceValues["Images.Variants.Large"],
+ SearchItemsResourceValues["Images.Variants.HighRes"],
+ SearchItemsResourceValues["ItemInfo.ByLineInfo"],
+ SearchItemsResourceValues["ItemInfo.ContentInfo"],
+ SearchItemsResourceValues["ItemInfo.ContentRating"],
+ SearchItemsResourceValues["ItemInfo.Classifications"],
+ SearchItemsResourceValues["ItemInfo.ExternalIds"],
+ SearchItemsResourceValues["ItemInfo.Features"],
+ SearchItemsResourceValues["ItemInfo.ManufactureInfo"],
+ SearchItemsResourceValues["ItemInfo.ProductInfo"],
+ SearchItemsResourceValues["ItemInfo.TechnicalInfo"],
+ SearchItemsResourceValues["ItemInfo.Title"],
+ SearchItemsResourceValues["ItemInfo.TradeInInfo"],
+ SearchItemsResourceValues["Offers.Listings.Availability.MaxOrderQuantity"],
+ SearchItemsResourceValues["Offers.Listings.Availability.Message"],
+ SearchItemsResourceValues["Offers.Listings.Availability.MinOrderQuantity"],
+ SearchItemsResourceValues["Offers.Listings.Availability.Type"],
+ SearchItemsResourceValues["Offers.Listings.Condition"],
+ SearchItemsResourceValues["Offers.Listings.Condition.ConditionNote"],
+ SearchItemsResourceValues["Offers.Listings.Condition.SubCondition"],
+ SearchItemsResourceValues["Offers.Listings.DeliveryInfo.IsAmazonFulfilled"],
+ SearchItemsResourceValues["Offers.Listings.DeliveryInfo.IsFreeShippingEligible"],
+ SearchItemsResourceValues["Offers.Listings.DeliveryInfo.IsPrimeEligible"],
+ SearchItemsResourceValues["Offers.Listings.DeliveryInfo.ShippingCharges"],
+ SearchItemsResourceValues["Offers.Listings.IsBuyBoxWinner"],
+ SearchItemsResourceValues["Offers.Listings.LoyaltyPoints.Points"],
+ SearchItemsResourceValues["Offers.Listings.MerchantInfo"],
+ SearchItemsResourceValues["Offers.Listings.Price"],
+ SearchItemsResourceValues["Offers.Listings.ProgramEligibility.IsPrimeExclusive"],
+ SearchItemsResourceValues["Offers.Listings.ProgramEligibility.IsPrimePantry"],
+ SearchItemsResourceValues["Offers.Listings.Promotions"],
+ SearchItemsResourceValues["Offers.Listings.SavingBasis"],
+ SearchItemsResourceValues["Offers.Summaries.HighestPrice"],
+ SearchItemsResourceValues["Offers.Summaries.LowestPrice"],
+ SearchItemsResourceValues["Offers.Summaries.OfferCount"],
+ SearchItemsResourceValues["ParentASIN"],
+ SearchItemsResourceValues["RentalOffers.Listings.Availability.MaxOrderQuantity"],
+ SearchItemsResourceValues["RentalOffers.Listings.Availability.Message"],
+ SearchItemsResourceValues["RentalOffers.Listings.Availability.MinOrderQuantity"],
+ SearchItemsResourceValues["RentalOffers.Listings.Availability.Type"],
+ SearchItemsResourceValues["RentalOffers.Listings.BasePrice"],
+ SearchItemsResourceValues["RentalOffers.Listings.Condition"],
+ SearchItemsResourceValues["RentalOffers.Listings.Condition.ConditionNote"],
+ SearchItemsResourceValues["RentalOffers.Listings.Condition.SubCondition"],
+ SearchItemsResourceValues["RentalOffers.Listings.DeliveryInfo.IsAmazonFulfilled"],
+ SearchItemsResourceValues["RentalOffers.Listings.DeliveryInfo.IsFreeShippingEligible"],
+ SearchItemsResourceValues["RentalOffers.Listings.DeliveryInfo.IsPrimeEligible"],
+ SearchItemsResourceValues["RentalOffers.Listings.DeliveryInfo.ShippingCharges"],
+ SearchItemsResourceValues["RentalOffers.Listings.MerchantInfo"],
+ SearchItemsResourceValues["SearchRefinements"],
+];
+// function onSuccess(data) {
+// console.log('API called successfully.');
+// var searchItemsResponse = ProductAdvertisingAPIv1.SearchItemsResponse.constructFromObject(data);
+// console.log('Complete Response: \n' + JSON.stringify(searchItemsResponse, null, 1));
+// if (searchItemsResponse['SearchResult'] !== undefined) {
+// console.log('Printing First Item Information in SearchResult:');
+// var item_0 = searchItemsResponse['SearchResult']['Items'][0];
+// if (item_0 !== undefined) {
+// if (item_0['ASIN'] !== undefined) {
+// console.log('ASIN: ' + item_0['ASIN']);
+// }
+// if (item_0['DetailPageURL'] !== undefined) {
+// console.log('DetailPageURL: ' + item_0['DetailPageURL']);
+// }
+// if (
+// item_0['ItemInfo'] !== undefined &&
+// item_0['ItemInfo']['Title'] !== undefined &&
+// item_0['ItemInfo']['Title']['DisplayValue'] !== undefined
+// ) {
+// console.log('Title: ' + item_0['ItemInfo']['Title']['DisplayValue']);
+// }
+// if (
+// item_0['Offers'] !== undefined &&
+// item_0['Offers']['Listings'] !== undefined &&
+// item_0['Offers']['Listings'][0]['Price'] !== undefined &&
+// item_0['Offers']['Listings'][0]['Price']['DisplayAmount'] !== undefined
+// ) {
+// console.log('Buying Price: ' + item_0['Offers']['Listings'][0]['Price']['DisplayAmount']);
+// }
+// }
+// }
+// if (searchItemsResponse['Errors'] !== undefined) {
+// console.log('Errors:');
+// console.log('Complete Error Response: ' + JSON.stringify(searchItemsResponse['Errors'], null, 1));
+// console.log('Printing 1st Error:');
+// var error_0 = searchItemsResponse['Errors'][0];
+// console.log('Error Code: ' + error_0['Code']);
+// console.log('Error Message: ' + error_0['Message']);
+// }
+// }
+// function onError(error) {
+// console.log('Error calling PA-API 5.0!');
+// console.log('Printing Full Error Object:\n' + JSON.stringify(error, null, 1));
+// console.log('Status Code: ' + error['status']);
+// if (error['response'] !== undefined && error['response']['text'] !== undefined) {
+// console.log('Error Object: ' + JSON.stringify(error['response']['text'], null, 1));
+// }
+// }
+// api.searchItems(searchItemsRequest).then(
+// function(data) {
+// onSuccess(data);
+// },
+// function(error) {
+// onError(error);
+// }
+// );
+
+// var getItems = new ProductAdvertisingAPIv1.GetItemsRequest();
+//broken:
+// getItems.Resources = [
+// "",
+// ]
+// getItems.ItemIds
+
+// import { SearchItemsResponse } from 'amazon-pa-api5-node-ts';
+// import jsonSearchResults from '../brands/coast-query-response.json';
+
+// const results: SearchItemsResponse = jsonSearchResults as SearchItemsResponse;
+// for (let result of results.SearchResult!.Items!) {
+// console.log(result.DetailPageURL);
+// }
diff --git a/src/data/products/product-attribute.ts b/src/old-data/products/product-attribute.ts
similarity index 100%
rename from src/data/products/product-attribute.ts
rename to src/old-data/products/product-attribute.ts
diff --git a/src/data/products/product.ts b/src/old-data/products/product.ts
similarity index 74%
rename from src/data/products/product.ts
rename to src/old-data/products/product.ts
index 9bb8b3e..b6db962 100644
--- a/src/data/products/product.ts
+++ b/src/old-data/products/product.ts
@@ -1,4 +1,4 @@
-import { type ProductDetails as AmazonProductDetails } from './amazon-product-details';
+import { type AmazonProductDetails } from './amazon-product-details';
/**
* Product details.
@@ -36,14 +36,6 @@ export interface Product {
* ID of the category this product belongs to.
*/
categoryId: number;
- /**
- * Amazon product ID for the product.
- */
- amazonProductId?: string;
- /**
- * Amazon link for the product.
- */
- amazonLink?: string;
/**
* Product Details.
*/
diff --git a/src/pages/404.astro b/src/pages/404.astro
new file mode 100644
index 0000000..7fafdac
--- /dev/null
+++ b/src/pages/404.astro
@@ -0,0 +1,185 @@
+---
+/** Fallback HTTP 404 Page. */
+import Layout from "../layouts/Layout.astro";
+import type { Page } from "../data/models/multis/Page";
+import type { PageCallout } from "../data/models/components/PageCallout";
+import type { PageContent } from "../data/models/components/PageContent";
+import type { Site } from "../data/models/singles/Site";
+import type { SiteConfig } from "../data/models/singles/SiteConfig";
+import { getLocaleField, getPagesByLangSlug, getSite, getSiteConfig, getSiteHomePage } from "../data/api-client";
+import { pick as pickLanguage } from "../lib/accept-language-parser";
+import { localeUrlTestPatterns, overrideLocaleFromUrl, localeFromLang } from "../lib/locales";
+import Banner from "../components/Banner.astro";
+import ComponentRouter from "../components/ComponentRouter.astro";
+
+// if you're here you've 404'ed
+Astro.response.status = 404;
+
+const locale = overrideLocaleFromUrl(Astro.request.url, localeFromLang(pickLanguage(['en', 'es', 'fr'], Astro.request.headers.get('Accept-Language')||'en-US', { loose: true })||'en'));
+const siteDto = await getSite();
+const site: Site = siteDto.items[0].data!;
+const siteConfigDto = await getSiteConfig();
+const siteConfig: SiteConfig = siteConfigDto.items[0].data!;
+const siteName = getLocaleField(locale, site.siteName);
+const shouldEmbedSquidexSDK = import.meta.env.MODE === 'development';
+
+let pageDto;
+let page: Page|undefined;
+let title = 'HTTP 404';
+let metaDescription = 'This page cannot be displayed.';
+let isHomePage = false;
+let homePageDto;
+let homePage;
+try {
+ homePageDto = await getSiteHomePage(site);
+ homePage = homePageDto.items[0].data!;
+} catch (error) {
+ homePage = undefined;
+}
+
+try {
+ pageDto = await getPagesByLangSlug(locale, `${locale}/404`);
+ page = pageDto.items[0].data!;
+ title = page.title[locale] || title;
+ metaDescription = page.seo[locale].metaDescription || metaDescription;
+ isHomePage = false;
+} catch (error) {
+ if (!page) {
+ page = {
+ parentPage: { iv: [] },
+ content: {
+ "en-US": [
+ {
+ schemaId: '',
+ schemaName: 'page-breadcrumbs',
+ },
+ {
+ schemaId: '',
+ schemaName: 'page-callout',
+ text: '404 Page Not Found',
+ } as PageCallout,
+ {
+ schemaId: '',
+ schemaName: 'page-content',
+ content: 'This page cannot be displayed.',
+ } as PageContent,
+ ],
+ "es-US": [
+ {
+ schemaId: '',
+ schemaName: 'page-breadcrumbs',
+ },
+ {
+ schemaId: '',
+ schemaName: 'page-callout',
+ text: '404 Page Not Found'
+ } as PageCallout,
+ {
+ schemaId: '',
+ schemaName: 'page-content',
+ content: 'This page cannot be displayed.',
+ } as PageContent,
+ ],
+ "fr-CA": [
+ {
+ schemaId: '',
+ schemaName: 'page-breadcrumbs',
+ },
+ {
+ schemaId: '',
+ schemaName: 'page-callout',
+ text: '404 Page Not Found'
+ } as PageCallout,
+ {
+ schemaId: '',
+ schemaName: 'page-content',
+ content: 'This page cannot be displayed.',
+ } as PageContent,
+ ]
+ },
+ slug: {
+ "en-US": Astro.url.pathname.replace(/^[\/\\]|[\/\\]$/g, '').replace(locale, 'en-US'),
+ "es-US": Astro.url.pathname.replace(/^[\/\\]|[\/\\]$/g, '').replace(locale, 'es-US'),
+ "fr-CA": Astro.url.pathname.replace(/^[\/\\]|[\/\\]$/g, '').replace(locale, 'fr-CA'),
+ },
+ title: {
+ "en-US": "HTTP 404",
+ "es-US": "HTTP 404",
+ "fr-CA": "HTTP 404"
+ },
+ seo: {
+ "en-US": {
+ keywords: "",
+ metaDescription: "This page cannot be displayed.",
+ metaImage: "",
+ metaSocial: [],
+ metaTitle: "",
+ schemaId: "",
+ schemaName: ""
+ },
+ "es-US": {
+ keywords: "",
+ metaDescription: "La página que estás buscando no puede ser mostrada.",
+ metaImage: "",
+ metaSocial: [],
+ metaTitle: "",
+ schemaId: "",
+ schemaName: ""
+ },
+ "fr-CA": {
+ keywords: "",
+ metaDescription: "La page que vous cherchez ne peut pas être affichée.",
+ metaImage: "",
+ metaSocial: [],
+ metaTitle: "",
+ schemaId: "",
+ schemaName: ""
+ }
+ }
+ }
+ }
+}
+---
+
+
+
+ {
+ // Object.entries(SupportedLanguages).map((supportedLanguage) => {
+ // return (
+ //
+ // );
+ // })
+ }
+
+
+
+
+
+
+
+
diff --git a/src/pages/[...routeLookup].astro b/src/pages/[...routeLookup].astro
new file mode 100644
index 0000000..aabf532
--- /dev/null
+++ b/src/pages/[...routeLookup].astro
@@ -0,0 +1,164 @@
+---
+import Layout from "../layouts/Layout.astro";
+import { getBrandsByLangSlug, getLocaleField, getPagesByLangSlug, getProductCategoriesByLangSlug, getSite, getSlugByLangSlug, getSiteConfig, getSiteHomePage, getPagesByIds, getMarketplacesByLangSlug, getProductsByLangSlug, getSellersByLangSlug } from "../data/api-client";
+import { genericPageForBrand, genericPageForMarketplace, genericPageForProduct, genericPageForProductCategory, genericPageForSeller } from "../lib/page-from-models";
+import { SupportedLocales } from "../data/internals/MultilingualT";
+import { SCHEMAS } from "../data/models/schemas";
+import type { Brand } from "../data/models/multis/Brand";
+import type { Page } from "../data/models/multis/Page";
+import type { ProductCategory } from "../data/models/multis/ProductCategory";
+import type { Site } from "../data/models/singles/Site";
+import type { Slug } from "../data/models/multis/Slug";
+import type { SiteConfig } from "../data/models/singles/SiteConfig";
+import { pick as pickLanguage } from "../lib/accept-language-parser";
+import { localeUrlTestPatterns, overrideLocaleFromUrl, localeFromLang } from "../lib/locales";
+import Banner from "../components/Banner.astro";
+import ComponentRouter from "../components/ComponentRouter.astro";
+import { renderMarkdown } from "../lib/rendering";
+import Disclaimers from "../components/Disclaimers.astro";
+
+const { routeLookup, resource, id } = Astro.params;
+
+const isSiteHomepage = (url?: string) => !url || url === '/';
+const isLocaleHomepage = (url: string) => {
+ for (let t = 0; t < localeUrlTestPatterns.length; t++) {
+ if (url === localeUrlTestPatterns[t] || url === `${localeUrlTestPatterns[t]}/`) {
+ return true;
+ }
+ }
+ return false;
+}
+const locale = overrideLocaleFromUrl(routeLookup!, localeFromLang(pickLanguage(['en', 'es', 'fr'], Astro.request.headers.get('Accept-Language')||'en-US', { loose: true })||'en'));
+
+const siteConfigDto = await getSiteConfig();
+const siteConfig = siteConfigDto.items[0].data!;
+
+const siteDto = await getSite();
+const site = siteDto.items[0].data!;
+const siteEditToken = siteDto.items[0].editToken;
+
+let isHomePage: boolean = false;
+let homePageDto = await getSiteHomePage(site);
+let homePage: Page = homePageDto.items[0].data!;
+let homePageId = homePageDto.items[0].id;
+let pageDto;
+let page: Page;
+let brandDto;
+let productCategory;
+let brand: Brand|undefined;
+let pageEditToken: string;
+
+if (isSiteHomepage(routeLookup)) {
+ Astro.response.headers.set('Vary', 'Accept-Language');
+ return Astro.redirect(`${locale}/`, 303);
+}
+
+Astro.response.headers.set('Content-Type', 'text/html; charset=utf-8');
+
+const redirect404NotFound = () => { return Astro.rewrite(`${locale}/404/`); }
+
+if (isLocaleHomepage(routeLookup!)) {
+ isHomePage = true;
+ pageDto = homePageDto;
+ page = homePage;
+ pageEditToken = homePageDto.items[0].editToken!;
+}
+else {
+ const slugDto = await getSlugByLangSlug(locale, routeLookup!);
+ if (slugDto && slugDto.items && slugDto.items.length > 0) {
+ let objectId = (slugDto.items[0].data as unknown as any as Slug).reference.iv[0]
+ switch (slugDto.items[0].data?.referenceSchema.iv) {
+ case SCHEMAS.BRANDS:
+ return Astro.rewrite(`/view/brands/${locale}/${objectId}`);
+ case SCHEMAS.MARKETPLACES:
+ return Astro.rewrite(`/view/marketplaces/${locale}/${objectId}`);
+ case SCHEMAS.PAGES:
+ return Astro.rewrite(`/view/pages/${locale}/${objectId}`);
+ case SCHEMAS.PRODUCT_CATEGORIES:
+ return Astro.rewrite(`/view/product-categories/${locale}/${objectId}`);
+ case SCHEMAS.PRODUCTS:
+ return Astro.rewrite(`/view/products/${locale}/${objectId}`);
+ case SCHEMAS.SELLERS:
+ return Astro.rewrite(`/view/sellers/${locale}/${objectId}`);
+ default:
+ return redirect404NotFound();
+ }
+ }
+ else {
+ return redirect404NotFound();
+ }
+}
+
+if (!page) {
+ //this code can never be reached, but if it can be reached then the compiler
+ //will let me know all return branches for setting page weren't handled
+ //so leave it here:
+ return redirect404NotFound();
+}
+
+const title = getLocaleField(locale, page?.title)||'';
+const metaDescription = getLocaleField(locale, page?.seo)?.metaDescription || '';
+const siteName = getLocaleField(locale, site.siteName);
+const pageContent = getLocaleField(locale, page?.content)!;
+const shouldEmbedSquidexSDK = import.meta.env.MODE === 'development';
+const renderContext = {
+ ...Astro.params,
+ title,
+ metaDescription,
+ siteName,
+ pageComponents: pageContent,
+ page,
+ site,
+ isHomePage,
+ isLocaleHomepage: isLocaleHomepage(routeLookup!),
+ shouldEmbedSquidexSDK,
+}
+---
+
+
+ { metaDescription && }
+ {
+ Object.entries(SupportedLocales).map((supportedLanguage) => {
+ return (
+
+ );
+ })
+ }
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/pages/img/[...imageLookup].ts b/src/pages/img/[...imageLookup].ts
new file mode 100644
index 0000000..eab1cd9
--- /dev/null
+++ b/src/pages/img/[...imageLookup].ts
@@ -0,0 +1,36 @@
+import { getImage } from "astro:assets";
+import { config } from "../../config"
+import path from "node:path";
+import { getAssetById } from "../../data/api-client";
+
+/**
+ * Proxies the asset resources from Squidex with a properly joined path.
+ * Access this endpoint using the format `/img/{uuid}/{fileName}.{fileExt}`.
+ * @param param0
+ * @returns
+ */
+export async function GET({ request, rewrite }) {
+ const url = new URL(request.url);
+ const assetId = path.posix.dirname(url.pathname.replace(/^\/img\//, '')); //removes /img/ then extracts the uuid
+ const uuidRegex = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/;
+ const match = assetId.match(uuidRegex);
+ if (match) { //validates what we extracted was a valid uuid and not something else
+ try { //as long as there are no errors
+ const asset = await getAssetById(assetId);
+ const mimeType = asset.mimeType;
+ const imageLookup = path.posix.join(`/api/assets/${config.squidexAppName}`, url.pathname.replace(/^\/img\//, ''));
+
+ const response = await fetch(`${config.squidexEnvironment}${imageLookup}`);
+ const buffer = Buffer.from(await response.arrayBuffer());
+
+ return new Response(buffer, {
+ headers: { "Content-Type": mimeType },
+ });
+ } catch(err: any) { //but if there's an error, it's probably because it doesn't exist
+ return rewrite('/404')
+ }
+ }
+ else {
+ return rewrite('/404')
+ }
+}
\ No newline at end of file
diff --git a/src/pages/index.astro b/src/pages/index.astro
deleted file mode 100644
index 5f9cf5c..0000000
--- a/src/pages/index.astro
+++ /dev/null
@@ -1,108 +0,0 @@
----
-import Layout from '../layouts/Layout.astro';
-import CategoryCard from '../components/CategoryCard.astro';
-import BrandCard from '../components/BrandCard.astro';
-import { ALL_CATEGORIES } from '../data/categories';
-import { ALL_BRANDS } from '../data/brands';
-import { getProductsForCategoryId } from '../data/products';
----
-
-
-
- Dasher Supply
-
- Your one-stop shop for all your after-market Dasher supplies.
-
-
- {ALL_CATEGORIES.children.filter(categoryNode => getProductsForCategoryId(categoryNode.value.id).length > 0).sort((left, right) => left.value.category.localeCompare(right.value.category)).map(categoryNode => (
-
- ))}
-
-
- We choose brand names you can trust. As an Amazon Associate I earn from qualifying purchases.
-
-
- {ALL_BRANDS.map(brand => (
-
- ))}
-
-
-
- { /* Temporarily enabled on full blast. */ }
- As an Amazon Associate I earn from qualifying purchases.
- Check out the latest Prime Day deals on Amazon.
-
-
-
-
diff --git a/src/pages/preview/pages/[...previewPagesLookup].astro b/src/pages/preview/pages/[...previewPagesLookup].astro
new file mode 100644
index 0000000..83caa27
--- /dev/null
+++ b/src/pages/preview/pages/[...previewPagesLookup].astro
@@ -0,0 +1,8 @@
+---
+import Layout from "../../../layouts/Layout.astro";
+
+const { previewPageLookup, resource, id } = Astro.params;
+
+
+---
+{Astro.url.pathname}
\ No newline at end of file
diff --git a/src/pages/view/brands/[...brandLookup].astro b/src/pages/view/brands/[...brandLookup].astro
new file mode 100644
index 0000000..8695721
--- /dev/null
+++ b/src/pages/view/brands/[...brandLookup].astro
@@ -0,0 +1,115 @@
+---
+import Layout from "../../../layouts/Layout.astro";
+import { getBrandsByIds, getSite, getSiteConfig, getSiteHomePage } from "../../../data/api-client";
+import { genericPageForBrand } from "../../../lib/page-from-models";
+import { SupportedLocales } from "../../../data/internals/MultilingualT";
+import type { Page } from "../../../data/models/multis/Page";
+import type { Site } from "../../../data/models/singles/Site";
+import { pick as pickLanguage } from "../../../lib/accept-language-parser";
+import { overrideLocaleFromUrl, localeFromLang } from "../../../lib/locales";
+import Banner from "../../../components/Banner.astro";
+import ComponentRouter from "../../../components/ComponentRouter.astro";
+import Disclaimers from "../../../components/Disclaimers.astro";
+
+const { brandLookup, resource, id } = Astro.params;
+
+const locale = overrideLocaleFromUrl(brandLookup!, localeFromLang(pickLanguage(['en', 'es', 'fr'], Astro.request.headers.get('Accept-Language')||'en-US', { loose: true })||'en'));
+
+const brandLookupParts = brandLookup?.split('/')||[];
+if (brandLookupParts?.length < 2) {
+ return Astro.rewrite(`${locale}/404/`);
+}
+const brandId = brandLookupParts[1];
+const brandDto = await getBrandsByIds(brandId);
+
+if (brandDto.items.length < 1) {
+ return Astro.rewrite(`${locale}/404/`);
+}
+else if (brandDto.items[0].data && brandDto.items[0].data.brandPage && brandDto.items[0].data.brandPage.iv && brandDto.items[0].data.brandPage.iv.length) {
+ return Astro.rewrite(`/views/pages/${locale}/${brandDto.items[0].data.brandPage.iv[0]}`);
+}
+
+const siteConfigDto = await getSiteConfig();
+const siteConfig = siteConfigDto.items[0].data!;
+
+const siteDto = await getSite();
+const site: Site = siteDto.items[0].data!;
+const siteEditToken = siteDto.items[0].editToken;
+
+const homePageId = site.homePage.iv[0];
+const homePageDto = await getSiteHomePage(site);
+const homePage: Page = homePageDto.items[0].data!;
+
+const brand = brandDto.items[0].data!;
+
+Astro.response.headers.set('Content-Type', 'text/html; charset=utf-8');
+
+const page = genericPageForBrand({brand, brandId, homePageId});
+const pageEditToken = brandDto.items[0].editToken;
+
+const title = page?.title[locale]||'';
+const metaDescription = page?.seo[locale]?.metaDescription || '';
+const siteName = site.siteName[locale];
+const pageContent = page?.content[locale]!;
+const shouldEmbedSquidexSDK = import.meta.env.MODE === 'development';
+const renderContext = {
+ ...Astro.params,
+ title,
+ metaDescription,
+ siteName,
+ pageComponents: pageContent,
+ page,
+ site,
+ isHomePage: false,
+ isLocaleHomepage: false,
+ shouldEmbedSquidexSDK,
+}
+---
+
+
+ { metaDescription && }
+ {
+ Object.entries(SupportedLocales).map((supportedLanguage) => {
+ return (
+
+ );
+ })
+ }
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/pages/view/marketplaces/[...marketplaceLookup].astro b/src/pages/view/marketplaces/[...marketplaceLookup].astro
new file mode 100644
index 0000000..9036178
--- /dev/null
+++ b/src/pages/view/marketplaces/[...marketplaceLookup].astro
@@ -0,0 +1,115 @@
+---
+import Layout from "../../../layouts/Layout.astro";
+import { getMarketplacesByIds, getSite, getSiteConfig, getSiteHomePage } from "../../../data/api-client";
+import { genericPageForMarketplace } from "../../../lib/page-from-models";
+import { SupportedLocales } from "../../../data/internals/MultilingualT";
+import type { Page } from "../../../data/models/multis/Page";
+import type { Site } from "../../../data/models/singles/Site";
+import { pick as pickLanguage } from "../../../lib/accept-language-parser";
+import { overrideLocaleFromUrl, localeFromLang } from "../../../lib/locales";
+import Banner from "../../../components/Banner.astro";
+import ComponentRouter from "../../../components/ComponentRouter.astro";
+import Disclaimers from "../../../components/Disclaimers.astro";
+
+const { marketplaceLookup, resource, id } = Astro.params;
+
+const locale = overrideLocaleFromUrl(marketplaceLookup!, localeFromLang(pickLanguage(['en', 'es', 'fr'], Astro.request.headers.get('Accept-Language')||'en-US', { loose: true })||'en'));
+
+const marketplaceLookupParts = marketplaceLookup?.split('/')||[];
+if (marketplaceLookupParts?.length < 2) {
+ return Astro.rewrite(`${locale}/404/`);
+}
+const marketplaceId = marketplaceLookupParts[1];
+const marketplaceDto = await getMarketplacesByIds(marketplaceId);
+
+if (marketplaceDto.items.length < 1) {
+ return Astro.rewrite(`${locale}/404/`);
+}
+else if (marketplaceDto.items[0].data && marketplaceDto.items[0].data.marketplacePage && marketplaceDto.items[0].data.marketplacePage.iv && marketplaceDto.items[0].data.marketplacePage.iv.length) {
+ return Astro.rewrite(`/views/pages/${locale}/${marketplaceDto.items[0].data.marketplacePage.iv[0]}`);
+}
+
+const siteConfigDto = await getSiteConfig();
+const siteConfig = siteConfigDto.items[0].data!;
+
+const siteDto = await getSite();
+const site: Site = siteDto.items[0].data!;
+const siteEditToken = siteDto.items[0].editToken;
+
+const homePageId = site.homePage.iv[0];
+const homePageDto = await getSiteHomePage(site);
+const homePage: Page = homePageDto.items[0].data!;
+
+const marketplace = marketplaceDto.items[0].data!;
+
+Astro.response.headers.set('Content-Type', 'text/html; charset=utf-8');
+
+const page = genericPageForMarketplace({marketplace, marketplaceId, homePageId});
+const pageEditToken = marketplaceDto.items[0].editToken;
+
+const title = page?.title[locale]||'';
+const metaDescription = page?.seo[locale]?.metaDescription || '';
+const siteName = site.siteName[locale];
+const pageContent = page?.content[locale]!;
+const shouldEmbedSquidexSDK = import.meta.env.MODE === 'development';
+const renderContext = {
+ ...Astro.params,
+ title,
+ metaDescription,
+ siteName,
+ pageComponents: pageContent,
+ page,
+ site,
+ isHomePage: false,
+ isLocaleHomepage: false,
+ shouldEmbedSquidexSDK,
+}
+---
+
+
+ { metaDescription && }
+ {
+ Object.entries(SupportedLocales).map((supportedLanguage) => {
+ return (
+
+ );
+ })
+ }
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/pages/view/pages/[...pageLookup].astro b/src/pages/view/pages/[...pageLookup].astro
new file mode 100644
index 0000000..1d7adbf
--- /dev/null
+++ b/src/pages/view/pages/[...pageLookup].astro
@@ -0,0 +1,120 @@
+---
+import Layout from "../../../layouts/Layout.astro";
+import { getPagesByIds, getSite, getSiteConfig, getSiteHomePage } from "../../../data/api-client";
+import { SupportedLocales } from "../../../data/internals/MultilingualT";
+import type { Page } from "../../../data/models/multis/Page";
+import type { Site } from "../../../data/models/singles/Site";
+import { pick as pickLanguage } from "../../../lib/accept-language-parser";
+import { localeUrlTestPatterns, overrideLocaleFromUrl, localeFromLang } from "../../../lib/locales";
+import Banner from "../../../components/Banner.astro";
+import ComponentRouter from "../../../components/ComponentRouter.astro";
+import Disclaimers from "../../../components/Disclaimers.astro";
+
+const { pageLookup, resource, id } = Astro.params;
+
+const isSiteHomepage = (url?: string) => !url || url === '/';
+const isLocaleHomepage = (url: string) => {
+ for (let t = 0; t < localeUrlTestPatterns.length; t++) {
+ if (url === localeUrlTestPatterns[t] || url === `${localeUrlTestPatterns[t]}/`) {
+ return true;
+ }
+ }
+ return false;
+}
+const locale = overrideLocaleFromUrl(pageLookup!, localeFromLang(pickLanguage(['en', 'es', 'fr'], Astro.request.headers.get('Accept-Language')||'en-US', { loose: true })||'en'));
+
+const pageLookupParts = pageLookup?.split('/')||[];
+if (pageLookupParts?.length < 2) {
+ return Astro.rewrite(`${locale}/404/`);
+}
+const pageId = pageLookupParts[1];
+const pageDto = await getPagesByIds(pageId);
+if (pageDto.items.length < 1) {
+ return Astro.rewrite(`${locale}/404/`);
+}
+
+const siteConfigDto = await getSiteConfig();
+const siteConfig = siteConfigDto.items[0].data!;
+
+const siteDto = await getSite();
+const site: Site = siteDto.items[0].data!;
+const siteEditToken = siteDto.items[0].editToken;
+
+const homePageId = site.homePage.iv[0];
+const homePageDto = await getSiteHomePage(site);
+const homePage: Page = homePageDto.items[0].data!;
+
+const page = pageDto.items[0].data!;
+
+Astro.response.headers.set('Content-Type', 'text/html; charset=utf-8');
+
+const pageEditToken = pageDto.items[0].editToken;
+
+const title = page?.title[locale]||'';
+const metaDescription = page?.seo[locale]?.metaDescription || '';
+const siteName = site.siteName[locale];
+const pageContent = page?.content[locale]!;
+const shouldEmbedSquidexSDK = import.meta.env.MODE === 'development';
+
+let isHomePage: boolean = false;
+
+const renderContext = {
+ ...Astro.params,
+ title,
+ metaDescription,
+ siteName,
+ pageComponents: pageContent,
+ page,
+ site,
+ isHomePage: false,
+ isLocaleHomepage: false,
+ shouldEmbedSquidexSDK,
+}
+---
+
+
+ { metaDescription && }
+ {
+ Object.entries(SupportedLocales).map((supportedLanguage) => {
+ return (
+
+ );
+ })
+ }
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/pages/view/product-categories/[...productCategoryLookup].astro b/src/pages/view/product-categories/[...productCategoryLookup].astro
new file mode 100644
index 0000000..2eb570e
--- /dev/null
+++ b/src/pages/view/product-categories/[...productCategoryLookup].astro
@@ -0,0 +1,117 @@
+---
+import Layout from "../../../layouts/Layout.astro";
+import { getProductCategoriesByIds, getSite, getSiteConfig, getSiteHomePage } from "../../../data/api-client";
+import { genericPageForProductCategory } from "../../../lib/page-from-models";
+import { SupportedLocales } from "../../../data/internals/MultilingualT";
+import type { Page } from "../../../data/models/multis/Page";
+import type { Site } from "../../../data/models/singles/Site";
+import { pick as pickLanguage } from "../../../lib/accept-language-parser";
+import { overrideLocaleFromUrl, localeFromLang } from "../../../lib/locales";
+import Banner from "../../../components/Banner.astro";
+import ComponentRouter from "../../../components/ComponentRouter.astro";
+import Disclaimers from "../../../components/Disclaimers.astro";
+
+const { productCategoryLookup, resource, id } = Astro.params;
+
+const locale = overrideLocaleFromUrl(productCategoryLookup!, localeFromLang(pickLanguage(['en', 'es', 'fr'], Astro.request.headers.get('Accept-Language')||'en-US', { loose: true })||'en'));
+
+const productCategoryLookupParts = productCategoryLookup?.split('/')||[];
+if (productCategoryLookupParts?.length < 2) {
+ return Astro.rewrite(`${locale}/404/`);
+}
+const productCategoryId = productCategoryLookupParts[1];
+const productCategoryDto = await getProductCategoriesByIds(productCategoryId);
+
+if (productCategoryDto.items.length < 1) {
+ return Astro.rewrite(`${locale}/404/`);
+}
+//to support product category special pages on the backend
+// else if (productCategoryDto.items[0].data && productCategoryDto.items[0].data.productCategoryPage && productCategoryDto.items[0].data.productCategoryPage.iv && productCategoryDto.items[0].data.productCategoryPage.iv.length) {
+// return Astro.rewrite(`/views/pages/${locale}/${productCategoryDto.items[0].data.productCategoryPage.iv[0]}`);
+// }
+
+const siteConfigDto = await getSiteConfig();
+const siteConfig = siteConfigDto.items[0].data!;
+
+const siteDto = await getSite();
+const site: Site = siteDto.items[0].data!;
+const siteEditToken = siteDto.items[0].editToken;
+
+const homePageId = site.homePage.iv[0];
+const homePageDto = await getSiteHomePage(site);
+const homePage: Page = homePageDto.items[0].data!;
+
+const productCategory = productCategoryDto.items[0].data!;
+
+Astro.response.headers.set('Content-Type', 'text/html; charset=utf-8');
+
+const page = genericPageForProductCategory({productCategory, productCategoryId, homePageId});
+const pageEditToken = productCategoryDto.items[0].editToken;
+
+const title = page?.title[locale]||'';
+const metaDescription = page?.seo[locale]?.metaDescription || '';
+const siteName = site.siteName[locale];
+const pageContent = page?.content[locale]!;
+const shouldEmbedSquidexSDK = import.meta.env.MODE === 'development';
+const renderContext = {
+ ...Astro.params,
+ title,
+ metaDescription,
+ siteName,
+ pageComponents: pageContent,
+ page,
+ site,
+ isHomePage: false,
+ isLocaleHomepage: false,
+ shouldEmbedSquidexSDK,
+}
+---
+
+
+ { metaDescription && }
+ {
+ Object.entries(SupportedLocales).map((supportedLanguage) => {
+ return (
+
+ );
+ })
+ }
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/pages/view/products/[...productLookup].astro b/src/pages/view/products/[...productLookup].astro
new file mode 100644
index 0000000..97cd671
--- /dev/null
+++ b/src/pages/view/products/[...productLookup].astro
@@ -0,0 +1,129 @@
+---
+import Layout from "../../../layouts/Layout.astro";
+import { getProductsByIds, getSite, getSiteConfig, getSiteHomePage } from "../../../data/api-client";
+import { genericPageForProduct } from "../../../lib/page-from-models";
+import { SupportedLocales } from "../../../data/internals/MultilingualT";
+import type { Page } from "../../../data/models/multis/Page";
+import type { Site } from "../../../data/models/singles/Site";
+import { pick as pickLanguage } from "../../../lib/accept-language-parser";
+import { overrideLocaleFromUrl, localeFromLang } from "../../../lib/locales";
+import Banner from "../../../components/Banner.astro";
+import ComponentRouter from "../../../components/ComponentRouter.astro";
+// import { Disclaimers } from "../../../lib/disclaimer";
+import { renderMarkdown } from "../../../lib/rendering";
+import Disclaimers from "../../../components/Disclaimers.astro";
+
+const { productLookup, resource, id } = Astro.params;
+
+const locale = overrideLocaleFromUrl(productLookup!, localeFromLang(pickLanguage(['en', 'es', 'fr'], Astro.request.headers.get('Accept-Language')||'en-US', { loose: true })||'en'));
+
+const productLookupParts = productLookup?.split('/')||[];
+if (productLookupParts?.length < 2) {
+ return Astro.rewrite(`${locale}/404/`);
+}
+const productId = productLookupParts[1];
+const productDto = await getProductsByIds(productId);
+
+if (productDto.items.length < 1) {
+ return Astro.rewrite(`${locale}/404/`);
+}
+// to support product category special pages on the backend
+// else if (productDto.items[0].data && productDto.items[0].data.productPage && productDto.items[0].data.productPage.iv && productDto.items[0].data.productPage.iv.length) {
+// return Astro.rewrite(`/views/pages/${locale}/${productDto.items[0].data.productPage.iv[0]}`);
+// }
+
+const siteConfigDto = await getSiteConfig();
+const siteConfig = siteConfigDto.items[0].data!;
+
+const siteDto = await getSite();
+const site: Site = siteDto.items[0].data!;
+const siteEditToken = siteDto.items[0].editToken;
+
+const homePageId = site.homePage.iv[0];
+const homePageDto = await getSiteHomePage(site);
+const homePage: Page = homePageDto.items[0].data!;
+
+const product = productDto.items[0].data!;
+
+Astro.response.headers.set('Content-Type', 'text/html; charset=utf-8');
+
+const page = genericPageForProduct({product, productId, homePageId});
+const pageEditToken = productDto.items[0].editToken;
+
+const title = page?.title[locale]||'';
+const metaDescription = page?.seo[locale]?.metaDescription || '';
+const siteName = site.siteName[locale];
+const pageContent = page?.content[locale]!;
+const shouldEmbedSquidexSDK = import.meta.env.MODE === 'development';
+const renderContext = {
+ ...Astro.params,
+ title,
+ metaDescription,
+ siteName,
+ pageComponents: pageContent,
+ page,
+ site,
+ isHomePage: false,
+ isLocaleHomepage: false,
+ shouldEmbedSquidexSDK,
+ // disclaimers,
+}
+---
+
+
+ { metaDescription && }
+ {
+ Object.entries(SupportedLocales).map((supportedLanguage) => {
+ return (
+
+ );
+ })
+ }
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/pages/view/sellers/[...sellerLookup].astro b/src/pages/view/sellers/[...sellerLookup].astro
new file mode 100644
index 0000000..2423c6e
--- /dev/null
+++ b/src/pages/view/sellers/[...sellerLookup].astro
@@ -0,0 +1,115 @@
+---
+import Layout from "../../../layouts/Layout.astro";
+import { getSellersByIds, getSite, getSiteConfig, getSiteHomePage } from "../../../data/api-client";
+import { genericPageForSeller } from "../../../lib/page-from-models";
+import { SupportedLocales } from "../../../data/internals/MultilingualT";
+import type { Page } from "../../../data/models/multis/Page";
+import type { Site } from "../../../data/models/singles/Site";
+import { pick as pickLanguage } from "../../../lib/accept-language-parser";
+import { overrideLocaleFromUrl, localeFromLang } from "../../../lib/locales";
+import Banner from "../../../components/Banner.astro";
+import ComponentRouter from "../../../components/ComponentRouter.astro";
+import Disclaimers from "../../../components/Disclaimers.astro";
+
+const { sellerLookup, resource, id } = Astro.params;
+
+const locale = overrideLocaleFromUrl(sellerLookup!, localeFromLang(pickLanguage(['en', 'es', 'fr'], Astro.request.headers.get('Accept-Language')||'en-US', { loose: true })||'en'));
+
+const sellerLookupParts = sellerLookup?.split('/')||[];
+if (sellerLookupParts?.length < 2) {
+ return Astro.rewrite(`${locale}/404/`);
+}
+const sellerId = sellerLookupParts[1];
+const sellerDto = await getSellersByIds(sellerId);
+
+if (sellerDto.items.length < 1) {
+ return Astro.rewrite(`${locale}/404/`);
+}
+// else if (sellerDto.items[0].data && sellerDto.items[0].data.sellerPage && sellerDto.items[0].data.sellerPage.iv && sellerDto.items[0].data.sellerPage.iv.length) {
+// return Astro.rewrite(`/views/pages/${locale}/${sellerDto.items[0].data.sellerPage.iv[0]}`);
+// }
+
+const siteConfigDto = await getSiteConfig();
+const siteConfig = siteConfigDto.items[0].data!;
+
+const siteDto = await getSite();
+const site: Site = siteDto.items[0].data!;
+const siteEditToken = siteDto.items[0].editToken;
+
+const homePageId = site.homePage.iv[0];
+const homePageDto = await getSiteHomePage(site);
+const homePage: Page = homePageDto.items[0].data!;
+
+const seller = sellerDto.items[0].data!;
+
+Astro.response.headers.set('Content-Type', 'text/html; charset=utf-8');
+
+const page = genericPageForSeller({seller, sellerId, homePageId});
+const pageEditToken = sellerDto.items[0].editToken;
+
+const title = page?.title[locale]||'';
+const metaDescription = page?.seo[locale]?.metaDescription || '';
+const siteName = site.siteName[locale];
+const pageContent = page?.content[locale]!;
+const shouldEmbedSquidexSDK = import.meta.env.MODE === 'development';
+const renderContext = {
+ ...Astro.params,
+ title,
+ metaDescription,
+ siteName,
+ pageComponents: pageContent,
+ page,
+ site,
+ isHomePage: false,
+ isLocaleHomepage: false,
+ shouldEmbedSquidexSDK,
+}
+---
+
+
+ { metaDescription && }
+ {
+ Object.entries(SupportedLocales).map((supportedLanguage) => {
+ return (
+
+ );
+ })
+ }
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/pages/[productLookup].astro b/src/pages1/[...productLookup].astro
similarity index 71%
rename from src/pages/[productLookup].astro
rename to src/pages1/[...productLookup].astro
index d91ac13..935bb89 100644
--- a/src/pages/[productLookup].astro
+++ b/src/pages1/[...productLookup].astro
@@ -1,51 +1,46 @@
---
import Layout from '../layouts/Layout.astro';
-import { type Category, ALL_CATEGORIES } from '../data/categories';
-import { type Product, ALL_PRODUCTS } from '../data/products';
-import { type Brand, ALL_BRANDS } from '../data/brands';
+import { type Brand, type Category, type Product } from '../data/api-models';
+import { brands, categories, marketplaces, products, site } from '../data/fetch-site';
+import { BlocksRenderer, type BlocksContent } from '@strapi/blocks-react-renderer';
import StarRating from '../components/StarRating.astro';
import ImageCarousel from '../components/ImageCarousel.astro';
-import markdownIt from 'markdown-it';
-import markdownItAttrs from 'markdown-it-attrs';
-import type { TreeNode } from '../types/tree';
-const md = markdownIt({
- html: true,
- linkify: true,
- typographer: true,
-}).use(
- markdownItAttrs, {
- // optional, these are default options
- leftDelimiter: '{',
- rightDelimiter: '}',
- allowedAttributes: [] // empty array = all attributes are allowed
- }
-);
+import Breadcrumbs from '../components/Breadcrumbs.astro';
type ProductStaticPath = { params: { productLookup: string }};
export function getStaticPaths() {
- return ALL_PRODUCTS.map((product) => { return {
- params: {
- productLookup: product.slug
- }
- }});
+ return products.map((product) => {
+ return {
+ params: {
+ productLookup: product.slug
+ }
+ }
+ })
}
const formatAsCurrency = (amount: number) => amount.toLocaleString('en-US', { style: 'currency', currency: 'USD' });
const { productLookup } = Astro.params;
-const product: Product = ALL_PRODUCTS.find(p => p.slug === productLookup)!;
-const categoryNode: TreeNode = ALL_CATEGORIES.findOneRecursive(c => c.id === product.categoryId)!;
-const category: Category = categoryNode.value;
-const brand: Brand = ALL_BRANDS.find(b => b.slug === product.brandStoreSlug)!;
+const product: Product = products.find(p => p.slug === productLookup)!;
+const category = product.categories.data[0].attributes;
+const brand = product?.brand?.data?.attributes;
+const isAnyAmazon = true;//product.amazonLink;
+const showDisclaimers = isAnyAmazon;
---
-
+
-
-
- {product?.callout || category.description}
-
+
+
+
+
+
{product?.name}
@@ -66,15 +61,15 @@ const brand: Brand = ALL_BRANDS.find(b => b.slug === product.brandStoreSlug)!;
{product?.amazonProductDetails?.reviewCount} Reviews
- { product?.brandStoreSlug &&
+ { product?.brand?.data &&
• Brand {brand?.name}
}
{ product?.description &&
-
+
}
{ !product?.description &&
-
+
{product?.amazonProductDetails?.featureBullets?.map(featureBullet => (
{featureBullet}
))}
@@ -90,8 +85,12 @@ const brand: Brand = ALL_BRANDS.find(b => b.slug === product.brandStoreSlug)!;
- {product?.amazonLink &&
- As an Amazon Associate I earn from qualifying purchases. Check out the latest Prime Day deals on Amazon.
+ {showDisclaimers &&
+
+ {isAnyAmazon &&
+ marketplaces.filter(marketplace => marketplace.name === 'Amazon').map(marketplace => )
+ }
+
}
@@ -114,7 +113,6 @@ const brand: Brand = ALL_BRANDS.find(b => b.slug === product.brandStoreSlug)!;
margin-bottom: 1em;
font-family: "Holtwood One SC", sans-serif;
font-weight: 600;
- font-style: bold;
text-shadow: -3px -3px 3px rgba(var(--accent-light), 7%), 1px -1px 0 rgba(var(--accent-light), 10%), -2px 2px 0 rgba(var(--accent-light), 5%), 3px 3px 0 rgba(var(--accent-light), 10%);
}
.text-gradient {
@@ -136,7 +134,7 @@ const brand: Brand = ALL_BRANDS.find(b => b.slug === product.brandStoreSlug)!;
font-weight: 400;
font-style: normal;
}
- .instructions {
+ .callout {
margin-bottom: 2rem;
border: 1px solid rgba(var(--accent-light), 25%);
background: linear-gradient(rgba(var(--accent-dark), 66%), rgba(var(--accent-dark), 33%));
@@ -148,7 +146,7 @@ const brand: Brand = ALL_BRANDS.find(b => b.slug === product.brandStoreSlug)!;
font-size: 2.2rem;
text-align: center;
}
- .instructions code {
+ .callout code {
font-size: 0.8em;
font-weight: bold;
background: rgba(var(--accent-light), 12%);
@@ -156,7 +154,7 @@ const brand: Brand = ALL_BRANDS.find(b => b.slug === product.brandStoreSlug)!;
border-radius: 4px;
padding: 0.3em 0.4em;
}
- .instructions strong {
+ .callout strong {
color: rgb(var(--accent-light));
}
.link-card-grid {
diff --git a/src/pages/about.astro b/src/pages1/about.astro
similarity index 86%
rename from src/pages/about.astro
rename to src/pages1/about.astro
index 3714b3d..48832f4 100644
--- a/src/pages/about.astro
+++ b/src/pages1/about.astro
@@ -1,15 +1,18 @@
---
import Layout from '../layouts/Layout.astro';
import CategoryCard from '../components/CategoryCard.astro';
-// import { about } from '../data/about';
-import { ALL_CATEGORIES } from '../data/categories';
+import Breadcrumbs from '../components/Breadcrumbs.astro';
+import { site, marketplaces } from '../data/fetch-site';
+import { BlocksRenderer } from '@strapi/blocks-react-renderer';
---
-
+
-
-
-
+
+
Your one-stop shop for all your after-market Dasher supplies.
@@ -17,7 +20,7 @@ import { ALL_CATEGORIES } from '../data/categories';
Who We Are
- Dasher Supply is a concept niche wish for delivery drivers of all sorts, including Dashers, like myself.
+ {site.siteName} is a concept niche wish for delivery drivers of all sorts, including Dashers, like myself.
Assisted by artificial intelligence (AI) large language models (LLMs), I have hand-curated these fine products
from around the web and presented them to you as they relate to your expertise in delivery services.
@@ -29,19 +32,19 @@ import { ALL_CATEGORIES } from '../data/categories';
Our Mission
- Dasher Supply strives to document the latest and best quality accesories to help you along your route. I have
+ {site.siteName} strives to document the latest and best quality accesories to help you along your route. I have
hand-picked each of these products because I believe each one of these are indispensible tools of the trade from
brands you can trust. I've shopped ahead so you don't have to. Cut through the noise. Begin all of
your shopping journeys here.
Who We Aren't
- Dasher Supply is not endorsed by or affiliated with DoorDash .
+ {site.siteName} is not endorsed by or affiliated with DoorDash .
How I Earn Money
As an Amazon Associate I earn from qualifying purchases.
- Apart from this Dasher Supply website, as a DoorDash Dasher I earn by completing deliveries.
+ Apart from this {site.siteName} website, as a DoorDash Dasher I earn by completing deliveries.
Cookies?
@@ -49,7 +52,7 @@ import { ALL_CATEGORIES } from '../data/categories';
Contact
- You may contact me about anything related to Dasher Supply at the email address,
+ You may contact me about anything related to {site.siteName} at the email address,
dashersupply@daball.me . I look forward to the opportunity to serve you better. If
you have any product suggestions based on your experience, be sure to reach out to me and let me know; provide URL links if you
have them. I'm committed to showcasing the products and services that fellow delivery drivers rave about, so that
@@ -117,9 +120,7 @@ import { ALL_CATEGORIES } from '../data/categories';
- { /* Temporarily enabled on full blast. */ }
- As an Amazon Associate I earn from qualifying purchases.
- Check out the latest Prime Day deals on Amazon.
+ {marketplaces.map(marketplace => )}
@@ -143,7 +144,6 @@ import { ALL_CATEGORIES } from '../data/categories';
margin-bottom: 1em;
font-family: "Holtwood One SC", sans-serif;
font-weight: 600;
- font-style: bold;
text-shadow: -5px -5px 3px rgba(var(--accent-light), 7%), 3px -3px 0 rgba(var(--accent-light), 10%), -2px 2px 0 rgba(var(--accent-light), 5%), 5px 5px 0 rgba(var(--accent-light), 10%);
}
.text-gradient {
diff --git a/src/pages/ads.txt.ts b/src/pages1/ads.txt.ts
similarity index 100%
rename from src/pages/ads.txt.ts
rename to src/pages1/ads.txt.ts
diff --git a/src/pages/brand/[brandLookup].astro b/src/pages1/brand/[brandLookup].astro
similarity index 64%
rename from src/pages/brand/[brandLookup].astro
rename to src/pages1/brand/[brandLookup].astro
index e9b80d1..daeeaf6 100644
--- a/src/pages/brand/[brandLookup].astro
+++ b/src/pages1/brand/[brandLookup].astro
@@ -1,28 +1,15 @@
---
import Layout from '../../layouts/Layout.astro';
-// import { useState, useEffect } from 'react';
-import { type Brand, ALL_BRANDS } from '../../data/brands';
-import { type Product, ALL_PRODUCTS } from '../../data/products';
import ProductCard from '../../components/ProductCard.astro';
-import markdownIt from 'markdown-it';
-import markdownItAttrs from 'markdown-it-attrs';
-const md = markdownIt({
- html: true,
- linkify: true,
- typographer: true,
-}).use(
- markdownItAttrs, {
- // optional, these are default options
- leftDelimiter: '{',
- rightDelimiter: '}',
- allowedAttributes: [] // empty array = all attributes are allowed
- }
-);
+import { brands, marketplaces, site } from '../../data/fetch-site';
+import type { Brand, Product } from '../../data/api-models';
+import { BlocksRenderer } from '@strapi/blocks-react-renderer';
+import Breadcrumbs from '../../components/Breadcrumbs.astro';
type BrandStaticPath = { params: { brandLookup: string }};
export function getStaticPaths() {
- return ALL_BRANDS.map((brand: Brand) => { return {
+ return brands.map((brand: Brand) => { return {
params: {
brandLookup: brand.slug
}
@@ -30,24 +17,34 @@ export function getStaticPaths() {
}
const { brandLookup } = Astro.params;
-const brand: Brand = ALL_BRANDS.find(b => b.slug === brandLookup)!;
-const brandProducts: Product[] = ALL_PRODUCTS.filter(p => p.brandStoreSlug === brand.slug)||[];
-const isAnyAmazon = brandProducts.find(p => p.amazonLink) || false;
+const brand: Brand = brands.find(b => b.slug === brandLookup)!;
+const brandProducts: Product[] = brand.products.data.map(data => data.attributes);
+const isAnyAmazon = true; //brandProducts.find(p => p.amazonLink) || false;
+const showDisclaimers = isAnyAmazon;
---
-
+
-
+
+
- {brand.logoUrl &&
}
+ {brand.logoImage &&
+ brand.logoImage.data &&
+ brand.logoImage.data.attributes &&
+ brand.logoImage.data.attributes.url &&
+
+ }
- {brand.shortDescription &&
}
+ {brand.shortDescription &&
}
- {brand.description &&
}
+ {brand.description &&
}
-
+
{brandProducts.map((product, id) => (
p.amazonLink) || false;
))}
- {isAnyAmazon &&
- As an Amazon Associate I earn from qualifying purchases. Check out the latest Prime Day deals on Amazon.
+ {showDisclaimers &&
+
+ {isAnyAmazon &&
+ marketplaces.filter(marketplace => marketplace.name === 'Amazon').map(marketplace => )
+ }
+
}
@@ -80,7 +81,6 @@ const isAnyAmazon = brandProducts.find(p => p.amazonLink) || false;
margin-bottom: 1em;
font-family: "Holtwood One SC", sans-serif;
font-weight: 600;
- font-style: bold;
text-shadow: -5px -5px 3px rgba(var(--accent-light), 7%), 3px -3px 0 rgba(var(--accent-light), 10%), -2px 2px 0 rgba(var(--accent-light), 5%), 5px 5px 0 rgba(var(--accent-light), 10%);
}
.text-gradient {
diff --git a/src/pages/category/[...categoryLookup].astro b/src/pages1/category/[...categoryLookup].astro
similarity index 50%
rename from src/pages/category/[...categoryLookup].astro
rename to src/pages1/category/[...categoryLookup].astro
index bd77d10..32462d9 100644
--- a/src/pages/category/[...categoryLookup].astro
+++ b/src/pages1/category/[...categoryLookup].astro
@@ -1,36 +1,72 @@
---
import Layout from '../../layouts/Layout.astro';
-// import { useState, useEffect } from 'react';
-import { ALL_CATEGORIES, type Category, getCategoryNodeForSlug } from '../../data/categories';
-import { ALL_PRODUCTS } from '../../data/products';
import ProductCard from '../../components/ProductCard.astro';
-import { DeepArray } from '../../types/deep-array';
+import { BlocksRenderer } from '@strapi/blocks-react-renderer';
+import { type Category, type HasId, type Product } from '../../data/api-models';
+import { site, categories, marketplaces } from '../../data/fetch-site';
+import Breadcrumbs, { type Breadcrumb } from '../../components/Breadcrumbs.astro';
+import CategoryCard from '../../components/ProductCategoryCard.astro';
type CategoryStaticPath = { params: { categoryLookup: string }};
export function getStaticPaths() {
- return ALL_CATEGORIES.getAllNodes().filter(categoryNode => categoryNode.value.slug !== undefined).map(categoryNode => { return {
- params: {
- categoryLookup: categoryNode.value.slug!
- }
- }});
+ return categories.filter(category => !!category.slug).map(category => {
+ return {
+ params: {
+ categoryLookup: category.slug,
+ }
+ };
+ });
}
const { categoryLookup } = Astro.params;
-const categoryNode = getCategoryNodeForSlug(categoryLookup);
-const category = categoryNode!.value;
-const categoryProducts = ALL_PRODUCTS.filter(p => p.categoryId === category.id)!;
-const isAnyAmazon = categoryProducts.find(p => p.amazonLink) || false;
+const category: Category&HasId = categories.filter(category => category.slug === categoryLookup)[0]! as Category&HasId;
+const categoryProducts: Product[] = category.products.data.map(data => data.attributes);
+const listedSubCategories = categories
+ // show only subcategories
+ .filter(cat => cat.parentCategories.data.length && cat.parentCategories.data.find(parent => parent.id === category.id))
+ // show only categories containing products
+ // .filter(cat => cat.products.data.length)
+ ;
+const categoryBreadcrumbs: Breadcrumb[] = (() => {
+ let breadcrumbs: Breadcrumb[] = [];
+ const addBreadcrumb = (category: Category) => {
+ breadcrumbs.push({
+ text: category.name,
+ url: `/category/${category.slug}`,
+ })
+ };
+ const recurseIntoParent = (category: Category) => {
+ if (category.slug) {
+ addBreadcrumb(category);
+ }
+ if (category.parentCategories && category.parentCategories.data && category.parentCategories.data.length) {
+ const parent0 = category.parentCategories.data[0].attributes;
+ recurseIntoParent(parent0)
+ }
+ }
+ recurseIntoParent(category);
+ return breadcrumbs.reverse();
+})();
+const isAnyAmazon = true; //categoryProducts.find(p => p.amazonLink) || false;
+const showDisclaimers = isAnyAmazon;
---
-
+
-
-
- {category.description}
-
+
+
+
+
+
-
+
+ {listedSubCategories.map(category =>
+
+ )}
{categoryProducts.map((product, id) => (
p.amazonLink) || false;
- {isAnyAmazon &&
- As an Amazon Associate I earn from qualifying purchases. Check out the latest Prime Day deals on Amazon.
+ {showDisclaimers &&
+
+ {isAnyAmazon &&
+ marketplaces.filter(marketplace => marketplace.name === 'Amazon').map(marketplace => )
+ }
+
}
@@ -65,7 +105,6 @@ const isAnyAmazon = categoryProducts.find(p => p.amazonLink) || false;
margin-bottom: 1em;
font-family: "Holtwood One SC", sans-serif;
font-weight: 600;
- font-style: bold;
text-shadow: -5px -5px 3px rgba(var(--accent-light), 7%), 3px -3px 0 rgba(var(--accent-light), 10%), -2px 2px 0 rgba(var(--accent-light), 5%), 5px 5px 0 rgba(var(--accent-light), 10%);
}
.text-gradient {
@@ -85,7 +124,7 @@ const isAnyAmazon = categoryProducts.find(p => p.amazonLink) || false;
font-weight: 400;
font-style: normal;
}
- .instructions {
+ .callout {
margin-bottom: 2rem;
border: 1px solid rgba(var(--accent-light), 25%);
background: linear-gradient(rgba(var(--accent-dark), 66%), rgba(var(--accent-dark), 33%));
@@ -97,7 +136,7 @@ const isAnyAmazon = categoryProducts.find(p => p.amazonLink) || false;
font-size: 2.2rem;
text-align: center;
}
- .instructions code {
+ .callout code {
font-size: 0.8em;
font-weight: bold;
background: rgba(var(--accent-light), 12%);
@@ -105,7 +144,7 @@ const isAnyAmazon = categoryProducts.find(p => p.amazonLink) || false;
border-radius: 4px;
padding: 0.3em 0.4em;
}
- .instructions strong {
+ .callout strong {
color: rgb(var(--accent-light));
}
.link-card-grid {
diff --git a/src/pages1/index.astro b/src/pages1/index.astro
new file mode 100644
index 0000000..cc7d8db
--- /dev/null
+++ b/src/pages1/index.astro
@@ -0,0 +1,127 @@
+---
+import Layout from '../layouts/Layout.astro';
+import CategoryCard from '../components/ProductCategoryCard.astro';
+import BrandCard from '../components/BrandCard.astro';
+import { BlocksRenderer } from '@strapi/blocks-react-renderer';
+import { brands, categories, marketplaces, site } from '../data/fetch-site';
+import MarketplaceCard from '../components/MarketplaceCard.astro';
+import { type Category, type HasId } from '../data/api-models';
+
+const topLevelCategoryId: Category&HasId = categories.filter(category => category.parentCategories.data.length === 0)[0]! as Category&HasId;
+const listedCategories = categories
+ // show only top level categories
+ .filter(category => category.parentCategories.data.length && category.parentCategories.data[0].id === topLevelCategoryId.id)
+ // show only categories containing products
+ // .filter(category => category.products.data.length)
+ ;
+---
+
+
+
+ {site.siteName}
+
+
+
+
+ {listedCategories.map(category =>
+
+ )}
+
+
+
+
+
+ {brands.map(brand => (
+
+ ))}
+
+
+
+
+
+ {marketplaces.map(marketplace => (
+
+ ))}
+
+
+
+ {marketplaces.map(marketplace => )}
+
+
+
+
diff --git a/src/pages1/marketplace/[marketplaceLookup].astro b/src/pages1/marketplace/[marketplaceLookup].astro
new file mode 100644
index 0000000..1d1209a
--- /dev/null
+++ b/src/pages1/marketplace/[marketplaceLookup].astro
@@ -0,0 +1,174 @@
+---
+import Layout from '../../layouts/Layout.astro';
+import ProductCard from '../../components/ProductCard.astro';
+import { marketplaces, products, site } from '../../data/fetch-site';
+import type { Marketplace, Product } from '../../data/api-models';
+import { BlocksRenderer } from '@strapi/blocks-react-renderer';
+import Breadcrumbs from '../../components/Breadcrumbs.astro';
+
+type MarketplaceStaticPath = { params: { marketplaceLookup: string }};
+
+export function getStaticPaths() {
+ return marketplaces.map((marketplace: Marketplace) => { return {
+ params: {
+ marketplaceLookup: marketplace.slug
+ }
+ }});
+}
+
+const { marketplaceLookup } = Astro.params;
+const marketplace: Marketplace = marketplaces.find(marketplace => marketplace.slug === marketplaceLookup)!;
+const marketplaceProducts: Product[] = []; //ALL_PRODUCTS.filter(p => p.brandStoreSlug === brand.slug)||[];
+const isAnyAmazon = true;//brandProducts.find(p => p.amazonLink) || false;
+const showDisclaimers = isAnyAmazon;
+---
+
+
+
+
+
+
+
+ {marketplace.logoImage &&
+ marketplace.logoImage.data &&
+ marketplace.logoImage.data.attributes &&
+ marketplace.logoImage.data.attributes.url &&
+
+ }
+
+ {marketplace.shortDescription &&
}
+
+
+ {marketplace.description &&
}
+
+
+ {marketplaceProducts.map((product, id) => (
+
+ ))}
+
+
+ {showDisclaimers &&
+
+ {isAnyAmazon &&
+ marketplaces.filter(marketplace => marketplace.name === 'Amazon').map(marketplace => )
+ }
+
+ }
+
+
+
diff --git a/src/pages/robots.txt.ts b/src/pages1/robots.txt.ts
similarity index 100%
rename from src/pages/robots.txt.ts
rename to src/pages1/robots.txt.ts
diff --git a/src/scraper/amazon.ts b/src/scraper/amazon.ts
index 98719fa..14ec63c 100644
--- a/src/scraper/amazon.ts
+++ b/src/scraper/amazon.ts
@@ -3,7 +3,7 @@
*/
import cheerio, { type CheerioAPI } from 'cheerio';
-import { type ProductDetails } from '../data/products/amazon-product-details';
+import { type AmazonProductDetails } from '../data/products/amazon-product-details';
import { type ProductAttribute } from '../data/products/product-attribute';
import { parseNumberFromSelector } from './utils';
@@ -67,7 +67,7 @@ const extractFeatureBullets = ($: CheerioAPI): string[] => {
/**
* Scrapes the product details from the given Cheerio object.
*/
-export const extractProductDetails = ($: CheerioAPI): ProductDetails => {
+export const extractProductDetails = ($: CheerioAPI): AmazonProductDetails => {
const title = $(SELECTORS.TITLE).text().trim();
const description = $(SELECTORS.DESCRIPTION).text()!.trim();
diff --git a/tsconfig.json b/tsconfig.json
index 032ad64..1037fa5 100644
--- a/tsconfig.json
+++ b/tsconfig.json
@@ -1,7 +1,11 @@
{
"extends": "astro/tsconfigs/strict",
"compilerOptions": {
+ "extendedDiagnostics": true,
"jsx": "react-jsx",
"jsxImportSource": "react"
+ },
+ "ts-node": {
+ "esm": true,
}
}
\ No newline at end of file