diff --git a/.eslintignore b/.eslintignore new file mode 100644 index 0000000..c028be5 --- /dev/null +++ b/.eslintignore @@ -0,0 +1,3 @@ +tests/fixtures/file-types-metafile/file15-js/ +tests/fixtures/file-types-metafile/file14-ts/ +docs/code-examples/ diff --git a/.eslintrc.cjs b/.eslintrc.cjs new file mode 100644 index 0000000..5b022b0 --- /dev/null +++ b/.eslintrc.cjs @@ -0,0 +1,28 @@ +module.exports = { + root: true, + env: { + node: true, + }, + extends: [ + 'eslint:recommended', + 'plugin:@typescript-eslint/recommended-type-checked', + 'airbnb-base', + 'airbnb-typescript/base', + ], + parserOptions: { + project: ['tsconfig.json', 'tsconfig.node.json'], + tsconfigRootDir: __dirname, + }, + parser: '@typescript-eslint/parser', + plugins: [ + '@typescript-eslint', + ], + rules: { + 'no-console': process.env.NODE_ENV === 'production' ? 'warn' : 'off', + 'no-debugger': process.env.NODE_ENV === 'production' ? 'warn' : 'off', + 'import/extensions': 'off', + 'import/prefer-default-export': 'off', + 'max-len': ['error', { code: 120 }], + 'prefer-destructuring': 'off', + }, +}; diff --git a/.github/workflows/deploy-docs.yml b/.github/workflows/deploy-docs.yml new file mode 100644 index 0000000..d1a5ff1 --- /dev/null +++ b/.github/workflows/deploy-docs.yml @@ -0,0 +1,38 @@ +name: Deploy Docs + +on: + push: + branches: + - main + +permissions: + contents: write + +jobs: + deploy-docs: + name: Deploy Docs + runs-on: [ self-hosted, Linux ] + env: + NODE_OPTIONS: --max_old_space_size=8192 + steps: + - name: Checkout + uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Setup Node.js + uses: actions/setup-node@v4 + with: + node-version: 20 + + - name: Build Docs + run: | + cd docs + npm ci + npm run build + + - name: Update Docs Branch + uses: JamesIves/github-pages-deploy-action@v4 + with: + branch: gh-pages + folder: docs/.vitepress/dist diff --git a/.github/workflows/qa.yml b/.github/workflows/qa.yml new file mode 100644 index 0000000..f0b3954 --- /dev/null +++ b/.github/workflows/qa.yml @@ -0,0 +1,109 @@ +name: QA checks + +on: + pull_request: + branches: + - main + + push: + branches: + - docs + +jobs: + lint: + name: Lint, Typecheck, Test and Build source files + runs-on: [ self-hosted, Linux ] + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Setup Node + uses: actions/setup-node@v4 + with: + node-version: 20 + + - name: Install dependencies + run: npm ci + + - name: Lint source files + run: npm run lint + + - name: Check types + run: npm run typecheck + + - name: Run tests + run: npm run test:coverage + + - name: Build package + run: npm run build + + - name: 'Report Coverage' + if: always() + uses: davelosert/vitest-coverage-report-action@v2 + + - name: Gather data + id: data + run: | + VERSION=$(node -p "require('./package.json').version") + echo "version=$VERSION" >> "$GITHUB_OUTPUT" + LICENSE=$(node -p "require('./package.json').license") + echo "license=$LICENSE" >> "$GITHUB_OUTPUT" + COVERAGE=50 + echo "coverage=$COVERAGE" >> "$GITHUB_OUTPUT" + BRANCH=${GITHUB_REF#refs/heads/} + echo "branch=$BRANCH" >> "${GITHUB_OUTPUT}" + shell: bash + + - uses: actions/checkout@v4 + with: + ref: gh-badges + + - name: Create badges directory + run: mkdir -p "${{ steps.data.outputs.branch }}" + shell: bash + + - name: Generate version badge + uses: emibcn/badge-action@v2.0.2 + with: + label: npm + status: ${{ steps.data.outputs.version }} + color: 066fef + path: ${{ steps.data.outputs.branch }}/version.svg + + - name: Generate coverage badge + uses: emibcn/badge-action@v2.0.2 + with: + label: coverage + status: ${{ steps.data.outputs.coverage }}% + color: ${{ steps.data.outputs.coverage > 90 && 'green' + || steps.data.outputs.coverage > 80 && 'yellow,green' + || steps.data.outputs.coverage > 70 && 'yellow' + || steps.data.outputs.coverage > 60 && 'orange,yellow' + || steps.data.outputs.coverage > 50 && 'orange' + || steps.data.outputs.coverage > 40 && 'red,orange' + || steps.data.outputs.coverage > 30 && 'red,red,orange' + || steps.data.outputs.coverage > 20 && 'red,red,red,orange' + || 'red' }} + path: ${{ steps.data.outputs.branch }}/coverage.svg + + - name: Generate license badge + uses: emibcn/badge-action@v2.0.2 + with: + label: license + status: ${{ steps.data.outputs.license }} + color: 066fef,ffffff + path: ${{ steps.data.outputs.branch }}/license.svg + + - name: Commit files + run: | + git config --local user.email "${{ github.actor_id }}+github-actions[bot]@users.noreply.github.com" + git config --local user.name "github-actions[bot]" + git add . + git status + git commit -m "Update badges" + + - name: Push changes + uses: ad-m/github-push-action@v0.8.0 + with: + github_token: ${{ secrets.GITHUB_TOKEN }} + branch: gh-badges diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 0000000..d283785 --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,75 @@ +name: Release CI + +on: + push: + branches: + - main + +permissions: + contents: write + pull-requests: write + +jobs: + ci: + name: CI Init + runs-on: [ self-hosted, Linux ] + outputs: + action: ${{ steps.init.outputs.action }} + steps: + - id: init + uses: localazy/release/init@v2 + + prepare: + name: Prepare Release PR + needs: ci + if: needs.ci.outputs.action == 'prepare' + runs-on: [ self-hosted, Linux ] + steps: + - uses: localazy/release/prepare@v2 + with: + node-version: 20 + app-id: ${{ secrets.AUTH_APP_ID }} + app-key: ${{ secrets.AUTH_APP_KEY }} + + publish: + name: Publish Release + needs: ci + if: needs.ci.outputs.action == 'publish' + runs-on: [ self-hosted, Linux ] + steps: + - uses: localazy/release/publish@v2 + with: + node-version: 20 + app-id: ${{ secrets.AUTH_APP_ID }} + app-key: ${{ secrets.AUTH_APP_KEY }} + npm-publish: public + npm-token: ${{ secrets.NPM_AUTH_TOKEN_PUBLIC }} + + deploy-docs: + name: Deploy Docs + needs: publish + runs-on: [ self-hosted, Linux ] + env: + NODE_OPTIONS: --max_old_space_size=8192 + steps: + - name: Checkout + uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Setup Node.js + uses: actions/setup-node@v4 + with: + node-version: 20 + + - name: Build Docs + run: | + cd docs + npm ci + npm run docs:build + + - name: Update Docs Branch + uses: JamesIves/github-pages-deploy-action@v4 + with: + branch: gh-pages + folder: docs/.vuepress/dist diff --git a/.npmrc b/.npmrc new file mode 100644 index 0000000..b215581 --- /dev/null +++ b/.npmrc @@ -0,0 +1 @@ +fund=false diff --git a/.nvmrc b/.nvmrc new file mode 100644 index 0000000..209e3ef --- /dev/null +++ b/.nvmrc @@ -0,0 +1 @@ +20 diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..0d1bcb1 --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2024 Localazy + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/README.md b/README.md new file mode 100644 index 0000000..e637c83 --- /dev/null +++ b/README.md @@ -0,0 +1,46 @@ +
+ +[Localazy](https://localazy.com) + +### 📦 `@localazy/cdn-client` + +Node.js module that allows you to easily interact with the [Localazy CDN](https://localazy.com/docs/cdn/cdn-introduction). + +[**Documentation**](https://localazy.github.io/cdn-client/)  |  +[**Getting Started**](https://localazy.github.io/cdn-client/get-started/introduction.html)  |  +[**API Reference**](https://localazy.github.io/cdn-client/reference/client-api.html)  |  +[**Live Demo**]() + +
+ +## 🔧 Install + +```bash +npm install @localazy/cdn-client +# or use your favorite package manager +``` + +For more information, visit the [installation guide](https://localazy.com/docs/cdn/cdn-introduction). + +## 🛟 Support + +- [Intercom chat](https://localazy.com) +- [GitHub issues](https://github.com/localazy/cdn-client/issues) +- [Discussion forum](https://discuss.localazy.com/) +- [team@localazy.com](mailto:team@localazy.com) + +## 💙 Localazy Ecosystem + +Check out other npm packages from Localazy: + +- [@localazy/cli](https://www.npmjs.com/package/@localazy/cli) +- [@localazy/api-client](https://www.npmjs.com/package/@localazy/api-client) +- [@localazy/cdn-client](https://www.npmjs.com/package/@localazy/cdn-client) +- [@localazy/languages](https://www.npmjs.com/package/@localazy/languages) +- [@localazy/strapi-plugin](https://www.npmjs.com/package/@localazy/strapi-plugin) + +Discover all available [integration options and localization examples](https://github.com/localazy). + +## 📜 License + +Code released under the [MIT license](LICENSE). diff --git a/assets/es.svg b/assets/es.svg new file mode 100644 index 0000000..8056088 --- /dev/null +++ b/assets/es.svg @@ -0,0 +1,8 @@ + + + + + + ES + + diff --git a/assets/js.svg b/assets/js.svg new file mode 100644 index 0000000..de4b085 --- /dev/null +++ b/assets/js.svg @@ -0,0 +1,8 @@ + + + + + + JS + + diff --git a/assets/ts.svg b/assets/ts.svg new file mode 100644 index 0000000..1aac275 --- /dev/null +++ b/assets/ts.svg @@ -0,0 +1,8 @@ + + + + + + TS + + diff --git a/docs/.gitignore b/docs/.gitignore new file mode 100644 index 0000000..e330f78 --- /dev/null +++ b/docs/.gitignore @@ -0,0 +1,2 @@ +node_modules +.vitepress/cache diff --git a/docs/.vitepress/config.mts b/docs/.vitepress/config.mts new file mode 100644 index 0000000..81e857f --- /dev/null +++ b/docs/.vitepress/config.mts @@ -0,0 +1,126 @@ +import { defineConfig } from 'vitepress'; +import { tabsMarkdownPlugin } from 'vitepress-plugin-tabs'; +import { npmCommandsMarkdownPlugin } from 'vitepress-plugin-npm-commands'; +import { version } from '../../package.json'; +import container from 'markdown-it-container'; +import { renderSandbox } from 'vitepress-plugin-sandpack'; + +export default defineConfig({ + title: 'CDN Client', + description: 'Localazy CDN Client Documentation', + head: [ + ['link', { rel: 'icon', href: '/cdn-client/favicon.ico' }], + ['link', { rel: 'stylesheet', href: 'https://fonts.googleapis.com/css2?family=Roboto:ital,wght@0,100;0,300;0,400;0,500;0,700;0,900;1,100;1,300;1,400;1,500;1,700;1,900&display=swap' }] + ], + base: '/cdn-client/', + + markdown: { + lineNumbers: true, + config(md) { + md.use(tabsMarkdownPlugin); + md.use(npmCommandsMarkdownPlugin); + // rule of 'html tag name' to 'component name' + // 'sanbox' -> 'Sandbox' + // 'my-sandbox' -> MySandbox + // 'sandbox-react-demo' -> SandboxReactDemo + md.use(container, 'sandbox', { + render(tokens, idx) { + return renderSandbox(tokens, idx, 'sandbox'); + } + }); + }, + // https://shiki.style + theme: { + light: 'github-light', + dark: 'github-dark' + } + }, + + themeConfig: { + logo: { src: 'https://localazy.com/directus9/assets/89c7bdc9-387c-4267-9632-64afcddb8e5a', width: 24, height: 24 }, + + nav: nav(), + + sidebar: [ + { + text: 'Get Started', + items: [ + { text: 'Introduction', link: '/get-started/introduction' }, + { text: 'Install', link: '/get-started/install' }, + { text: 'Metafile', link: '/get-started/metafile' } + ] + }, + { + text: 'Usage', + items: [ + { + text: 'Get locales', + link: '/usage/get-locales' + }, + { + text: 'Get content', + link: '/usage/get-content', + items: [ + { text: 'Selecting data', link: '/usage/get-content#selecting-data' }, + { text: 'Single file', link: '/usage/get-content#single-file' }, + { text: 'Multiple files', link: '/usage/get-content#multiple-files' } + ] + }, + ] + }, + // { + // text: 'Sandbox', + // items: [ + // { text: 'Live demo', link: '/sandbox/live-demo' } + // ] + // }, + // { + // text: 'Examples', + // items: [ + // { text: 'i18next', link: '/examples/i18next' } + // ] + // }, + { + text: 'Reference', + items: [ + { text: 'Client API', link: '/reference/client-api' }, + { text: 'Types', link: '/reference/types' } + ] + } + ], + + search: { + provider: 'local' + }, + + socialLinks: [ + { icon: 'npm', link: 'https://www.npmjs.com/package/@localazy/cdn-client' }, + { icon: 'github', link: 'https://github.com/localazy/cdn-client' }, + ], + + externalLinkIcon: true, + } +}); + +function nav() { + return [ + { + text: 'Get Started', + link: '/get-started/introduction', + activeMatch: '/get-started/' + }, + { + text: version, + items: [ + { + text: 'Releases', + link: 'https://github.com/localazy/cdn-client/releases' + }, + { + text: 'Changelog', + link: 'https://github.com/localazy/cdn-client/blob/main/CHANGELOG.md' + } + ] + } + ]; +} diff --git a/docs/.vitepress/theme/components/FooterLinks.vue b/docs/.vitepress/theme/components/FooterLinks.vue new file mode 100644 index 0000000..eb08924 --- /dev/null +++ b/docs/.vitepress/theme/components/FooterLinks.vue @@ -0,0 +1,251 @@ + + + + + diff --git a/docs/.vitepress/theme/components/ZoomImg.vue b/docs/.vitepress/theme/components/ZoomImg.vue new file mode 100644 index 0000000..95c2e2f --- /dev/null +++ b/docs/.vitepress/theme/components/ZoomImg.vue @@ -0,0 +1,35 @@ + + + + + diff --git a/docs/.vitepress/theme/components/test.svg b/docs/.vitepress/theme/components/test.svg new file mode 100644 index 0000000..5c3a395 --- /dev/null +++ b/docs/.vitepress/theme/components/test.svg @@ -0,0 +1,3 @@ + + + diff --git a/docs/.vitepress/theme/index.ts b/docs/.vitepress/theme/index.ts new file mode 100644 index 0000000..9a1e542 --- /dev/null +++ b/docs/.vitepress/theme/index.ts @@ -0,0 +1,27 @@ +import { h } from 'vue'; +import { EnhanceAppContext, Theme } from 'vitepress'; +import { enhanceAppWithTabs } from 'vitepress-plugin-tabs/client'; +import DefaultTheme from 'vitepress/theme'; +import FooterLinks from './components/FooterLinks.vue'; +import ZoomImg from './components/ZoomImg.vue'; +import { Sandbox } from 'vitepress-plugin-sandpack'; +import 'vitepress-plugin-sandpack/dist/style.css'; +import './style.css'; + +export default { + ...DefaultTheme, + + Layout: () => { + return h(DefaultTheme.Layout, null, { + 'layout-bottom': () => h(FooterLinks), + }); + }, + + enhanceApp(ctx: EnhanceAppContext) { + DefaultTheme.enhanceApp(ctx); + + enhanceAppWithTabs(ctx.app); + ctx.app.component('ZoomImg', ZoomImg); + ctx.app.component('Sandbox', Sandbox); + } +} satisfies Theme; diff --git a/docs/.vitepress/theme/style.css b/docs/.vitepress/theme/style.css new file mode 100644 index 0000000..7c9a7f1 --- /dev/null +++ b/docs/.vitepress/theme/style.css @@ -0,0 +1,189 @@ +/* Localazy Theme colors */ + +:root { + --primary-darken-4: #021c3c; + --primary-darken-3: #032c5e; + --primary-darken-2: #04418b; + --primary-darken-1: #0558bd; + --primary: #066fef; + --primary-lighten-1: #2e8dfa; + --primary-lighten-2: #6aaefb; + --primary-lighten-3: #a1cbfd; + --primary-lighten-4: #d7eafe; + --primary-lighten-5: #f5faff; +} + +/** + * Customize default theme styling by overriding CSS variables: + * https://github.com/vuejs/vitepress/blob/main/src/client/theme-default/styles/vars.css + */ + +/** + * Colors + * + * Each colors have exact same color scale system with 3 levels of solid + * colors with different brightness, and 1 soft color. + * + * - `XXX-1`: The most solid color used mainly for colored text. It must + * satisfy the contrast ratio against when used on top of `XXX-soft`. + * + * - `XXX-2`: The color used mainly for hover state of the button. + * + * - `XXX-3`: The color for solid background, such as bg color of the button. + * It must satisfy the contrast ratio with pure white (#ffffff) text on + * top of it. + * + * - `XXX-soft`: The color used for subtle background such as custom container + * or badges. It must satisfy the contrast ratio when putting `XXX-1` colors + * on top of it. + * + * The soft color must be semi transparent alpha channel. This is crucial + * because it allows adding multiple "soft" colors on top of each other + * to create a accent, such as when having inline code block inside + * custom containers. + * + * - `default`: The color used purely for subtle indication without any + * special meanings attched to it such as bg color for menu hover state. + * + * - `brand`: Used for primary brand colors, such as link text, button with + * brand theme, etc. + * + * - `tip`: Used to indicate useful information. The default theme uses the + * brand color for this by default. + * + * - `warning`: Used to indicate warning to the users. Used in custom + * container, badges, etc. + * + * - `danger`: Used to show error, or dangerous message to the users. Used + * in custom container, badges, etc. + * -------------------------------------------------------------------------- */ + +:root { + --vp-c-default-1: var(--vp-c-gray-1); + --vp-c-default-2: var(--vp-c-gray-2); + --vp-c-default-3: var(--vp-c-gray-3); + --vp-c-default-soft: var(--vp-c-gray-soft); + + --vp-c-brand-1: var(--primary); + --vp-c-brand-2: var(--primary-darken-1); + --vp-c-brand-3: var(--primary-darken-2); + --vp-c-brand-soft: var(--primary-lighten-4); + + --vp-c-tip-1: var(--vp-c-brand-1); + --vp-c-tip-2: var(--vp-c-brand-2); + --vp-c-tip-3: var(--vp-c-brand-3); + --vp-c-tip-soft: var(--vp-c-brand-soft); + + --vp-c-warning-1: var(--vp-c-yellow-1); + --vp-c-warning-2: var(--vp-c-yellow-2); + --vp-c-warning-3: var(--vp-c-yellow-3); + --vp-c-warning-soft: var(--vp-c-yellow-soft); + + --vp-c-danger-1: var(--vp-c-red-1); + --vp-c-danger-2: var(--vp-c-red-2); + --vp-c-danger-3: var(--vp-c-red-3); + --vp-c-danger-soft: var(--vp-c-red-soft); +} + +/** + * Component: Link + * -------------------------------------------------------------------------- */ + +.dark { + --vp-code-link-color: var(--primary-lighten-1); + --vp-code-link-hover-color: var(--primary); +} + +/** + * Component: Button + * -------------------------------------------------------------------------- */ + +:root { + --vp-button-brand-bg: var(--vp-c-brand-1); + --vp-button-brand-hover-bg: var(--vp-c-brand-2); + --vp-button-brand-active-bg: var(--vp-c-brand-3); +} + +/** + * Component: Home + * -------------------------------------------------------------------------- */ + +@media (min-width: 960px) { + .image-src.VPImage { + max-width: 400px; + max-height: 400px; + } +} + +/** + * Component: Custom Block + * -------------------------------------------------------------------------- */ + +:root { + --vp-custom-block-tip-border: transparent; + --vp-custom-block-tip-text: var(--vp-c-text-1); + --vp-custom-block-tip-bg: var(--vp-c-brand-soft); + --vp-custom-block-tip-code-bg: var(--vp-c-brand-soft); +} + +/** + * Component: Algolia + * -------------------------------------------------------------------------- */ + +.DocSearch { + --docsearch-primary-color: var(--vp-c-brand-1) !important; +} + +/** + * Component: Code Block + * -------------------------------------------------------------------------- */ + +:root { + --vp-code-block-divider-color: var(--vp-c-gray-1); + --vp-code-block-bg: var(--vp-c-bg); +} + +div[class*='language-'] { + border: 1px solid var(--vp-c-gray-1); +} + +/** + * Typography + * -------------------------------------------------------------------------- */ + +:root { + --vp-font-family-base: Roboto, 'Chinese Quotes', 'Inter var', 'Inter', ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Helvetica Neue', Helvetica, Arial, 'Noto Sans', sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji'; + --vp-font-family-mono: ui-monospace, SFMono-Regular, 'SF Mono', Menlo, Monaco, Consolas, 'Liberation Mono', 'Courier New', monospace; +} + +details > summary { + cursor: pointer; +} + +/** + * External Link Icon + * -------------------------------------------------------------------------- */ + +:root { + --external-link-icon: url('data:image/svg+xml,'); + --external-link-margin-left: 5px; + --external-link-margin-right: 3px; +} + +.VPNavBarMenu .VPLink.link, +.vp-doc a { + display: inline-flex; + align-items: center; +} + +:is(.vp-external-link-icon, .vp-doc a[href*='://'], .vp-doc a[target='_blank']):not(.no-icon)::after { + --icon: var(--external-link-icon); + display: inline-flex; + margin-left: var(--external-link-margin-left); + width: 14px; + height: 14px; +} + +.vp-doc a[target='_blank']::after { + margin-right: var(--external-link-margin-right); +} diff --git a/docs/code-examples/metafile.json b/docs/code-examples/metafile.json new file mode 100644 index 0000000..142f6f1 --- /dev/null +++ b/docs/code-examples/metafile.json @@ -0,0 +1,68 @@ +{ + "projectUrl": "https://localazy.com/p/cdnarticle", + "baseLocale": "en", + "timestamp": -8465065979062673572, + "files": { + "dfe5b84c1598c8c56b6f1a11efcd483bb3f417ea": { + "file": "file.json", + "path": "", + "library": "", + "module": "", + "buildType": "", + "timestamp": "-8465065979062673572", + "productFlavors": [], + "locales": [ + { + "language": "en", + "region": "", + "script": "", + "isRtl": false, + "name": "English", + "localizedName": "English", + "uri": "/_a855374211039568660198b39c31/_e0/dfe5b84c1598c8c56b6f1a11efcd483bb3f417ea/en/file.json", + "timestamp": "-9223300000000000000" + }, + { + "language": "de", + "region": "", + "script": "", + "isRtl": false, + "name": "German", + "localizedName": "Deutsch", + "uri": "/_a855374211039568660198b39c31/_e0/dfe5b84c1598c8c56b6f1a11efcd483bb3f417ea/de/file.json", + "timestamp": "-8549898287605285711" + }, + { + "language": "es", + "region": "", + "script": "", + "isRtl": false, + "name": "Spanish", + "localizedName": "Español", + "uri": "/_a855374211039568660198b39c31/_e0/dfe5b84c1598c8c56b6f1a11efcd483bb3f417ea/es/file.json", + "timestamp": "-8550050401790927404" + }, + { + "language": "pt", + "region": "PT", + "script": "", + "isRtl": false, + "name": "European Portuguese", + "localizedName": "Português Europeu", + "uri": "/_a855374211039568660198b39c31/_e0/dfe5b84c1598c8c56b6f1a11efcd483bb3f417ea/pt-PT/file.json", + "timestamp": "-8550051169379505755" + }, + { + "language": "vi", + "region": "", + "script": "", + "isRtl": false, + "name": "Vietnamese", + "localizedName": "Tiếng Việt", + "uri": "/_a855374211039568660198b39c31/_e0/dfe5b84c1598c8c56b6f1a11efcd483bb3f417ea/vi/file.json", + "timestamp": "-8465065979062673572" + } + ] + } + } +} diff --git a/docs/code-examples/reference/create.js b/docs/code-examples/reference/create.js new file mode 100644 index 0000000..4f1f650 --- /dev/null +++ b/docs/code-examples/reference/create.js @@ -0,0 +1,5 @@ +import { CdnClient } from '@localazy/cdn-client'; + +const cdn = await CdnClient.create({ // [!code warning] + metafile: 'https://delivery.localazy.com/_a855374211039568660198b39c31/_e0.v2.json', // [!code warning] +}); // [!code warning] diff --git a/docs/code-examples/reference/fetch.js b/docs/code-examples/reference/fetch.js new file mode 100644 index 0000000..4c99bcd --- /dev/null +++ b/docs/code-examples/reference/fetch.js @@ -0,0 +1,10 @@ +import { CdnClient } from '@localazy/cdn-client'; + +const cdn = await CdnClient.create({ + metafile: 'https://delivery.localazy.com/_a855374211039568660198b39c31/_e0.v2.json', +}); + +const response = await cdn.fetch({ // [!code warning] + files: cdn.metafile.files.first(), // [!code warning] + locales: 'en', // [!code warning] +}); // [!code warning] diff --git a/docs/code-examples/reference/metafile-base-locale.js b/docs/code-examples/reference/metafile-base-locale.js new file mode 100644 index 0000000..145e1ce --- /dev/null +++ b/docs/code-examples/reference/metafile-base-locale.js @@ -0,0 +1,7 @@ +import { CdnClient } from '@localazy/cdn-client'; + +const cdn = await CdnClient.create({ + metafile: 'https://delivery.localazy.com/_a855374211039568660198b39c31/_e0.v2.json', +}); + +const baseLocale = cdn.metafile.baseLocale; // [!code warning] diff --git a/docs/code-examples/reference/metafile-files-filter.js b/docs/code-examples/reference/metafile-files-filter.js new file mode 100644 index 0000000..6b218d3 --- /dev/null +++ b/docs/code-examples/reference/metafile-files-filter.js @@ -0,0 +1,9 @@ +import { CdnClient } from '@localazy/cdn-client'; + +const cdn = await CdnClient.create({ + metafile: 'https://delivery.localazy.com/_a855374211039568660198b39c31/_e0.v2.json', +}); + +const files = cdn.metafile.files.filter({ // [!code warning] + id: 'dfe5b84c1598c8c56b6f1a11efcd483bb3f417ea', // [!code warning] +}); // [!code warning] diff --git a/docs/code-examples/reference/metafile-files-find.js b/docs/code-examples/reference/metafile-files-find.js new file mode 100644 index 0000000..6b33d46 --- /dev/null +++ b/docs/code-examples/reference/metafile-files-find.js @@ -0,0 +1,9 @@ +import { CdnClient } from '@localazy/cdn-client'; + +const cdn = await CdnClient.create({ + metafile: 'https://delivery.localazy.com/_a855374211039568660198b39c31/_e0.v2.json', +}); + +const file = cdn.metafile.files.find({ // [!code warning] + id: 'dfe5b84c1598c8c56b6f1a11efcd483bb3f417ea', // [!code warning] +}); // [!code warning] diff --git a/docs/code-examples/reference/metafile-files-first.js b/docs/code-examples/reference/metafile-files-first.js new file mode 100644 index 0000000..187aee0 --- /dev/null +++ b/docs/code-examples/reference/metafile-files-first.js @@ -0,0 +1,7 @@ +import { CdnClient } from '@localazy/cdn-client'; + +const cdn = await CdnClient.create({ + metafile: 'https://delivery.localazy.com/_a855374211039568660198b39c31/_e0.v2.json', +}); + +const file = cdn.metafile.files.first(); // [!code warning] diff --git a/docs/code-examples/reference/metafile-files-list.js b/docs/code-examples/reference/metafile-files-list.js new file mode 100644 index 0000000..d564721 --- /dev/null +++ b/docs/code-examples/reference/metafile-files-list.js @@ -0,0 +1,7 @@ +import { CdnClient } from '@localazy/cdn-client'; + +const cdn = await CdnClient.create({ + metafile: 'https://delivery.localazy.com/_a855374211039568660198b39c31/_e0.v2.json', +}); + +const files = cdn.metafile.files.list(); // [!code warning] diff --git a/docs/code-examples/reference/metafile-locales.js b/docs/code-examples/reference/metafile-locales.js new file mode 100644 index 0000000..7093910 --- /dev/null +++ b/docs/code-examples/reference/metafile-locales.js @@ -0,0 +1,7 @@ +import { CdnClient } from '@localazy/cdn-client'; + +const cdn = await CdnClient.create({ + metafile: 'https://delivery.localazy.com/_a855374211039568660198b39c31/_e0.v2.json', +}); + +const locales = cdn.metafile.locales(); // [!code warning] diff --git a/docs/code-examples/reference/metafile-project-url.js b/docs/code-examples/reference/metafile-project-url.js new file mode 100644 index 0000000..5cee679 --- /dev/null +++ b/docs/code-examples/reference/metafile-project-url.js @@ -0,0 +1,7 @@ +import { CdnClient } from '@localazy/cdn-client'; + +const cdn = await CdnClient.create({ + metafile: 'https://delivery.localazy.com/_a855374211039568660198b39c31/_e0.v2.json', +}); + +const projectUrl = cdn.metafile.projectUrl; // [!code warning] diff --git a/docs/code-examples/reference/metafile-refresh.js b/docs/code-examples/reference/metafile-refresh.js new file mode 100644 index 0000000..3dc6e66 --- /dev/null +++ b/docs/code-examples/reference/metafile-refresh.js @@ -0,0 +1,7 @@ +import { CdnClient } from '@localazy/cdn-client'; + +const cdn = await CdnClient.create({ + metafile: 'https://delivery.localazy.com/_a855374211039568660198b39c31/_e0.v2.json', +}); + +await cdn.metafile.refresh(); // [!code warning] diff --git a/docs/code-examples/reference/metafile-switch.js b/docs/code-examples/reference/metafile-switch.js new file mode 100644 index 0000000..0b3af07 --- /dev/null +++ b/docs/code-examples/reference/metafile-switch.js @@ -0,0 +1,7 @@ +import { CdnClient } from '@localazy/cdn-client'; + +const cdn = await CdnClient.create({ + metafile: 'https://delivery.localazy.com/_a855374211039568660198b39c31/_e0.v2.json', +}); + +await cdn.metafile.switch({ metafile: 'different-metafile-url' }); // [!code warning] diff --git a/docs/code-examples/reference/metafile-url.js b/docs/code-examples/reference/metafile-url.js new file mode 100644 index 0000000..20f101f --- /dev/null +++ b/docs/code-examples/reference/metafile-url.js @@ -0,0 +1,7 @@ +import { CdnClient } from '@localazy/cdn-client'; + +const cdn = await CdnClient.create({ + metafile: 'https://delivery.localazy.com/_a855374211039568660198b39c31/_e0.v2.json', +}); + +const url = cdn.metafile.url; // [!code warning] diff --git a/docs/code-examples/reference/results/fetch.js b/docs/code-examples/reference/results/fetch.js new file mode 100644 index 0000000..b1c1e08 --- /dev/null +++ b/docs/code-examples/reference/results/fetch.js @@ -0,0 +1,6 @@ +const response = { + cdn_info: 'With the CDN you can deliver the translation files instantly', + cdn_testing: "We're testing the CDN", + hello_localazy: 'Hello Localazy!', + using_javascript: 'In this project we decided to use JavaScript', +}; diff --git a/docs/code-examples/reference/results/metafile-base-locale.js b/docs/code-examples/reference/results/metafile-base-locale.js new file mode 100644 index 0000000..66d28f5 --- /dev/null +++ b/docs/code-examples/reference/results/metafile-base-locale.js @@ -0,0 +1,10 @@ +const baseLocale = { + locale: 'en', + isBaseLocale: true, + language: 'en', + region: '', + script: '', + isRtl: false, + name: 'English', + localizedName: 'English', +}; diff --git a/docs/code-examples/reference/results/metafile-files-filter.js b/docs/code-examples/reference/results/metafile-files-filter.js new file mode 100644 index 0000000..4092a89 --- /dev/null +++ b/docs/code-examples/reference/results/metafile-files-filter.js @@ -0,0 +1,38 @@ +const files = [ + { + id: 'dfe5b84c1598c8c56b6f1a11efcd483bb3f417ea', + file: 'file.json', + path: '', + library: '', + module: '', + buildType: '', + productFlavors: [], + locales: [ + { + locale: 'en', + isBaseLocale: true, + uri: 'https://delivery.localazy.com/_a855374211039568660198b39c31/_e0/dfe5b84c1598c8c56b6f1a11efcd483bb3f417ea/en/file.json', + }, + { + locale: 'de', + isBaseLocale: false, + uri: 'https://delivery.localazy.com/_a855374211039568660198b39c31/_e0/dfe5b84c1598c8c56b6f1a11efcd483bb3f417ea/de/file.json', + }, + { + locale: 'es', + isBaseLocale: false, + uri: 'https://delivery.localazy.com/_a855374211039568660198b39c31/_e0/dfe5b84c1598c8c56b6f1a11efcd483bb3f417ea/es/file.json', + }, + { + locale: 'pt_PT', + isBaseLocale: false, + uri: 'https://delivery.localazy.com/_a855374211039568660198b39c31/_e0/dfe5b84c1598c8c56b6f1a11efcd483bb3f417ea/pt-PT/file.json', + }, + { + locale: 'vi', + isBaseLocale: false, + uri: 'https://delivery.localazy.com/_a855374211039568660198b39c31/_e0/dfe5b84c1598c8c56b6f1a11efcd483bb3f417ea/vi/file.json', + }, + ], + }, +]; diff --git a/docs/code-examples/reference/results/metafile-files-find.js b/docs/code-examples/reference/results/metafile-files-find.js new file mode 100644 index 0000000..60f9f7c --- /dev/null +++ b/docs/code-examples/reference/results/metafile-files-find.js @@ -0,0 +1,36 @@ +const file = { + id: 'dfe5b84c1598c8c56b6f1a11efcd483bb3f417ea', + file: 'file.json', + path: '', + library: '', + module: '', + buildType: '', + productFlavors: [], + locales: [ + { + locale: 'en', + isBaseLocale: true, + uri: 'https://delivery.localazy.com/_a855374211039568660198b39c31/_e0/dfe5b84c1598c8c56b6f1a11efcd483bb3f417ea/en/file.json', + }, + { + locale: 'de', + isBaseLocale: false, + uri: 'https://delivery.localazy.com/_a855374211039568660198b39c31/_e0/dfe5b84c1598c8c56b6f1a11efcd483bb3f417ea/de/file.json', + }, + { + locale: 'es', + isBaseLocale: false, + uri: 'https://delivery.localazy.com/_a855374211039568660198b39c31/_e0/dfe5b84c1598c8c56b6f1a11efcd483bb3f417ea/es/file.json', + }, + { + locale: 'pt_PT', + isBaseLocale: false, + uri: 'https://delivery.localazy.com/_a855374211039568660198b39c31/_e0/dfe5b84c1598c8c56b6f1a11efcd483bb3f417ea/pt-PT/file.json', + }, + { + locale: 'vi', + isBaseLocale: false, + uri: 'https://delivery.localazy.com/_a855374211039568660198b39c31/_e0/dfe5b84c1598c8c56b6f1a11efcd483bb3f417ea/vi/file.json', + }, + ], +}; diff --git a/docs/code-examples/reference/results/metafile-files-first.js b/docs/code-examples/reference/results/metafile-files-first.js new file mode 100644 index 0000000..60f9f7c --- /dev/null +++ b/docs/code-examples/reference/results/metafile-files-first.js @@ -0,0 +1,36 @@ +const file = { + id: 'dfe5b84c1598c8c56b6f1a11efcd483bb3f417ea', + file: 'file.json', + path: '', + library: '', + module: '', + buildType: '', + productFlavors: [], + locales: [ + { + locale: 'en', + isBaseLocale: true, + uri: 'https://delivery.localazy.com/_a855374211039568660198b39c31/_e0/dfe5b84c1598c8c56b6f1a11efcd483bb3f417ea/en/file.json', + }, + { + locale: 'de', + isBaseLocale: false, + uri: 'https://delivery.localazy.com/_a855374211039568660198b39c31/_e0/dfe5b84c1598c8c56b6f1a11efcd483bb3f417ea/de/file.json', + }, + { + locale: 'es', + isBaseLocale: false, + uri: 'https://delivery.localazy.com/_a855374211039568660198b39c31/_e0/dfe5b84c1598c8c56b6f1a11efcd483bb3f417ea/es/file.json', + }, + { + locale: 'pt_PT', + isBaseLocale: false, + uri: 'https://delivery.localazy.com/_a855374211039568660198b39c31/_e0/dfe5b84c1598c8c56b6f1a11efcd483bb3f417ea/pt-PT/file.json', + }, + { + locale: 'vi', + isBaseLocale: false, + uri: 'https://delivery.localazy.com/_a855374211039568660198b39c31/_e0/dfe5b84c1598c8c56b6f1a11efcd483bb3f417ea/vi/file.json', + }, + ], +}; diff --git a/docs/code-examples/reference/results/metafile-files-list.js b/docs/code-examples/reference/results/metafile-files-list.js new file mode 100644 index 0000000..4092a89 --- /dev/null +++ b/docs/code-examples/reference/results/metafile-files-list.js @@ -0,0 +1,38 @@ +const files = [ + { + id: 'dfe5b84c1598c8c56b6f1a11efcd483bb3f417ea', + file: 'file.json', + path: '', + library: '', + module: '', + buildType: '', + productFlavors: [], + locales: [ + { + locale: 'en', + isBaseLocale: true, + uri: 'https://delivery.localazy.com/_a855374211039568660198b39c31/_e0/dfe5b84c1598c8c56b6f1a11efcd483bb3f417ea/en/file.json', + }, + { + locale: 'de', + isBaseLocale: false, + uri: 'https://delivery.localazy.com/_a855374211039568660198b39c31/_e0/dfe5b84c1598c8c56b6f1a11efcd483bb3f417ea/de/file.json', + }, + { + locale: 'es', + isBaseLocale: false, + uri: 'https://delivery.localazy.com/_a855374211039568660198b39c31/_e0/dfe5b84c1598c8c56b6f1a11efcd483bb3f417ea/es/file.json', + }, + { + locale: 'pt_PT', + isBaseLocale: false, + uri: 'https://delivery.localazy.com/_a855374211039568660198b39c31/_e0/dfe5b84c1598c8c56b6f1a11efcd483bb3f417ea/pt-PT/file.json', + }, + { + locale: 'vi', + isBaseLocale: false, + uri: 'https://delivery.localazy.com/_a855374211039568660198b39c31/_e0/dfe5b84c1598c8c56b6f1a11efcd483bb3f417ea/vi/file.json', + }, + ], + }, +]; diff --git a/docs/code-examples/reference/results/metafile-locales.js b/docs/code-examples/reference/results/metafile-locales.js new file mode 100644 index 0000000..0682de6 --- /dev/null +++ b/docs/code-examples/reference/results/metafile-locales.js @@ -0,0 +1,42 @@ +const locales = [ + { + locale: 'en', + isBaseLocale: true, + language: 'en', + region: '', + script: '', + isRtl: false, + name: 'English', + localizedName: 'English', + }, + { + locale: 'ms_BN', + isBaseLocale: false, + language: 'ms', + region: 'BN', + script: '', + isRtl: false, + name: 'Malay (Brunei)', + localizedName: 'Malay (Brunei)', + }, + { + locale: 'ms#Arab', + isBaseLocale: false, + language: 'ms', + region: '', + script: 'Arab', + isRtl: false, + name: 'Malay (Arabic)', + localizedName: 'Malay (Arabic)', + }, + { + locale: 'ms_ID#Latn', + isBaseLocale: false, + language: 'ms', + region: 'ID', + script: 'Latn', + isRtl: false, + name: 'Malay (Indonesia, Latin)', + localizedName: 'Malay (Indonesia, Latin)', + }, +]; diff --git a/docs/code-examples/reference/results/metafile-project-url.js b/docs/code-examples/reference/results/metafile-project-url.js new file mode 100644 index 0000000..0343a71 --- /dev/null +++ b/docs/code-examples/reference/results/metafile-project-url.js @@ -0,0 +1 @@ +const projectUrl = 'https://localazy.com/p/cdnarticle'; diff --git a/docs/code-examples/reference/results/metafile-url.js b/docs/code-examples/reference/results/metafile-url.js new file mode 100644 index 0000000..f07e75c --- /dev/null +++ b/docs/code-examples/reference/results/metafile-url.js @@ -0,0 +1 @@ +const url = 'https://delivery.localazy.com/_a855374211039568660198b39c31/_e0.v2.json'; diff --git a/docs/code-examples/usage/get-all-files-all-locales.js b/docs/code-examples/usage/get-all-files-all-locales.js new file mode 100644 index 0000000..2a339ad --- /dev/null +++ b/docs/code-examples/usage/get-all-files-all-locales.js @@ -0,0 +1,7 @@ +import { CdnClient } from '@localazy/cdn-client'; + +const cdn = await CdnClient.create({ + metafile: 'https://delivery.localazy.com/_a855374211039568660198b39c31/_e0.v2.json', +}); + +const response = await cdn.fetch(); // [!code warning] diff --git a/docs/code-examples/usage/get-all-locales-except-base-locale.js b/docs/code-examples/usage/get-all-locales-except-base-locale.js new file mode 100644 index 0000000..64cf4ae --- /dev/null +++ b/docs/code-examples/usage/get-all-locales-except-base-locale.js @@ -0,0 +1,9 @@ +import { CdnClient } from '@localazy/cdn-client'; + +const cdn = await CdnClient.create({ + metafile: 'https://delivery.localazy.com/_a855374211039568660198b39c31/_e0.v2.json', +}); + +const locales = cdn.metafile.locales({ // [!code warning] + excludeBaseLocale: true, // [!code warning] +}); // [!code warning] diff --git a/docs/code-examples/usage/get-all-locales.js b/docs/code-examples/usage/get-all-locales.js new file mode 100644 index 0000000..7093910 --- /dev/null +++ b/docs/code-examples/usage/get-all-locales.js @@ -0,0 +1,7 @@ +import { CdnClient } from '@localazy/cdn-client'; + +const cdn = await CdnClient.create({ + metafile: 'https://delivery.localazy.com/_a855374211039568660198b39c31/_e0.v2.json', +}); + +const locales = cdn.metafile.locales(); // [!code warning] diff --git a/docs/code-examples/usage/get-base-locale.js b/docs/code-examples/usage/get-base-locale.js new file mode 100644 index 0000000..145e1ce --- /dev/null +++ b/docs/code-examples/usage/get-base-locale.js @@ -0,0 +1,7 @@ +import { CdnClient } from '@localazy/cdn-client'; + +const cdn = await CdnClient.create({ + metafile: 'https://delivery.localazy.com/_a855374211039568660198b39c31/_e0.v2.json', +}); + +const baseLocale = cdn.metafile.baseLocale; // [!code warning] diff --git a/docs/code-examples/usage/get-multiple-files-all-locales.js b/docs/code-examples/usage/get-multiple-files-all-locales.js new file mode 100644 index 0000000..99c0c48 --- /dev/null +++ b/docs/code-examples/usage/get-multiple-files-all-locales.js @@ -0,0 +1,9 @@ +import { CdnClient } from '@localazy/cdn-client'; + +const cdn = await CdnClient.create({ + metafile: 'https://delivery.localazy.com/_a855374211039568660198b39c31/_e0.v2.json', +}); + +const response = await cdn.fetch({ // [!code warning] + files: cdn.metafile.files.list(), // [!code warning] +}); // [!code warning] diff --git a/docs/code-examples/usage/get-multiple-files-multiple-locales.js b/docs/code-examples/usage/get-multiple-files-multiple-locales.js new file mode 100644 index 0000000..e4166a9 --- /dev/null +++ b/docs/code-examples/usage/get-multiple-files-multiple-locales.js @@ -0,0 +1,10 @@ +import { CdnClient } from '@localazy/cdn-client'; + +const cdn = await CdnClient.create({ + metafile: 'https://delivery.localazy.com/_a855374211039568660198b39c31/_e0.v2.json', +}); + +const response = await cdn.fetch({ // [!code warning] + files: cdn.metafile.files.list(), // [!code warning] + locales: ['en', 'de'], // [!code warning] +}); // [!code warning] diff --git a/docs/code-examples/usage/get-multiple-files-single-locale.js b/docs/code-examples/usage/get-multiple-files-single-locale.js new file mode 100644 index 0000000..867e0a0 --- /dev/null +++ b/docs/code-examples/usage/get-multiple-files-single-locale.js @@ -0,0 +1,10 @@ +import { CdnClient } from '@localazy/cdn-client'; + +const cdn = await CdnClient.create({ + metafile: 'https://delivery.localazy.com/_a855374211039568660198b39c31/_e0.v2.json', +}); + +const response = await cdn.fetch({ // [!code warning] + files: cdn.metafile.files.list(), // [!code warning] + locales: 'en', // [!code warning] +}); // [!code warning] diff --git a/docs/code-examples/usage/get-single-file-all-locales.js b/docs/code-examples/usage/get-single-file-all-locales.js new file mode 100644 index 0000000..7ce310e --- /dev/null +++ b/docs/code-examples/usage/get-single-file-all-locales.js @@ -0,0 +1,9 @@ +import { CdnClient } from '@localazy/cdn-client'; + +const cdn = await CdnClient.create({ + metafile: 'https://delivery.localazy.com/_a855374211039568660198b39c31/_e0.v2.json', +}); + +const response = await cdn.fetch({ // [!code warning] + files: cdn.metafile.files.first(), // [!code warning] +}); // [!code warning] diff --git a/docs/code-examples/usage/get-single-file-multiple-locales.js b/docs/code-examples/usage/get-single-file-multiple-locales.js new file mode 100644 index 0000000..560ddee --- /dev/null +++ b/docs/code-examples/usage/get-single-file-multiple-locales.js @@ -0,0 +1,10 @@ +import { CdnClient } from '@localazy/cdn-client'; + +const cdn = await CdnClient.create({ + metafile: 'https://delivery.localazy.com/_a855374211039568660198b39c31/_e0.v2.json', +}); + +const response = await cdn.fetch({ // [!code warning] + files: cdn.metafile.files.first(), // [!code warning] + locales: ['en', 'de'], // [!code warning] +}); // [!code warning] diff --git a/docs/code-examples/usage/get-single-file-single-locale.js b/docs/code-examples/usage/get-single-file-single-locale.js new file mode 100644 index 0000000..4c99bcd --- /dev/null +++ b/docs/code-examples/usage/get-single-file-single-locale.js @@ -0,0 +1,10 @@ +import { CdnClient } from '@localazy/cdn-client'; + +const cdn = await CdnClient.create({ + metafile: 'https://delivery.localazy.com/_a855374211039568660198b39c31/_e0.v2.json', +}); + +const response = await cdn.fetch({ // [!code warning] + files: cdn.metafile.files.first(), // [!code warning] + locales: 'en', // [!code warning] +}); // [!code warning] diff --git a/docs/code-examples/usage/results/get-all-files-all-locales.js b/docs/code-examples/usage/results/get-all-files-all-locales.js new file mode 100644 index 0000000..f2225fe --- /dev/null +++ b/docs/code-examples/usage/results/get-all-files-all-locales.js @@ -0,0 +1,34 @@ +const response = { + dfe5b84c1598c8c56b6f1a11efcd483bb3f417ea: { + en: { + cdn_info: 'With the CDN you can deliver the translation files instantly', + cdn_testing: "We're testing the CDN", + hello_localazy: 'Hello Localazy!', + using_javascript: 'In this project we decided to use JavaScript', + }, + de: { + cdn_info: 'Mit dem CDN können Sie die Übersetzungsdateien sofort liefern', + cdn_testing: 'Wir testen das CDN', + hello_localazy: 'Hallo Localazy!', + using_javascript: 'In diesem Projekt haben wir uns für JavaScript entschieden', + }, + es: { + cdn_info: 'Con la CDN puedes entregar los archivos de traducción al instante', + cdn_testing: 'Estamos probando la CDN', + hello_localazy: 'Hola, Localazy!', + using_javascript: 'En este proyecto hemos decidido utilizar JavaScript', + }, + pt_PT: { + cdn_info: 'Com o CDN pode entregar os ficheiros de tradução instantaneamente', + cdn_testing: 'Estamos a testar o CDN', + hello_localazy: 'Olá Localazy!', + using_javascript: 'Neste projecto, decidimos utilizar JavaScript', + }, + vi: { + cdn_info: 'Với CDN, bạn có thể cung cấp các tệp dịch ngay lập tức', + cdn_testing: 'Chúng tôi đang thử nghiệm CDN', + hello_localazy: 'Chào Localazy!', + using_javascript: 'Trong dự án này, chúng tôi quyết định sử dụng JavaScript', + }, + }, +}; diff --git a/docs/code-examples/usage/results/get-all-locales-except-base-locale.js b/docs/code-examples/usage/results/get-all-locales-except-base-locale.js new file mode 100644 index 0000000..730eb30 --- /dev/null +++ b/docs/code-examples/usage/results/get-all-locales-except-base-locale.js @@ -0,0 +1,32 @@ +const locales = [ + { + isBaseLocale: false, + isRtl: false, + language: 'ms', + locale: 'ms_BN', + localizedName: 'Malay (Brunei)', + name: 'Malay (Brunei)', + region: 'BN', + script: '', + }, + { + isBaseLocale: false, + isRtl: false, + language: 'ms', + locale: 'ms#Arab', + localizedName: 'Malay (Arabic)', + name: 'Malay (Arabic)', + region: '', + script: 'Arab', + }, + { + isBaseLocale: false, + isRtl: false, + language: 'ms', + locale: 'ms_ID#Latn', + localizedName: 'Malay (Indonesia, Latin)', + name: 'Malay (Indonesia, Latin)', + region: 'ID', + script: 'Latn', + }, +]; diff --git a/docs/code-examples/usage/results/get-all-locales.js b/docs/code-examples/usage/results/get-all-locales.js new file mode 100644 index 0000000..b92e0e7 --- /dev/null +++ b/docs/code-examples/usage/results/get-all-locales.js @@ -0,0 +1,42 @@ +const locales = [ + { + isBaseLocale: true, + isRtl: false, + language: 'en', + locale: 'en', + localizedName: 'English', + name: 'English', + region: '', + script: '', + }, + { + isBaseLocale: false, + isRtl: false, + language: 'ms', + locale: 'ms_BN', + localizedName: 'Malay (Brunei)', + name: 'Malay (Brunei)', + region: 'BN', + script: '', + }, + { + isBaseLocale: false, + isRtl: false, + language: 'ms', + locale: 'ms#Arab', + localizedName: 'Malay (Arabic)', + name: 'Malay (Arabic)', + region: '', + script: 'Arab', + }, + { + isBaseLocale: false, + isRtl: false, + language: 'ms', + locale: 'ms_ID#Latn', + localizedName: 'Malay (Indonesia, Latin)', + name: 'Malay (Indonesia, Latin)', + region: 'ID', + script: 'Latn', + }, +]; diff --git a/docs/code-examples/usage/results/get-base-locale.js b/docs/code-examples/usage/results/get-base-locale.js new file mode 100644 index 0000000..0596400 --- /dev/null +++ b/docs/code-examples/usage/results/get-base-locale.js @@ -0,0 +1,10 @@ +const baseLocale = { + isBaseLocale: true, + isRtl: false, + language: 'en', + locale: 'en', + localizedName: 'English', + name: 'English', + region: '', + script: '', +}; diff --git a/docs/code-examples/usage/results/get-multiple-files-all-locales.js b/docs/code-examples/usage/results/get-multiple-files-all-locales.js new file mode 100644 index 0000000..f2225fe --- /dev/null +++ b/docs/code-examples/usage/results/get-multiple-files-all-locales.js @@ -0,0 +1,34 @@ +const response = { + dfe5b84c1598c8c56b6f1a11efcd483bb3f417ea: { + en: { + cdn_info: 'With the CDN you can deliver the translation files instantly', + cdn_testing: "We're testing the CDN", + hello_localazy: 'Hello Localazy!', + using_javascript: 'In this project we decided to use JavaScript', + }, + de: { + cdn_info: 'Mit dem CDN können Sie die Übersetzungsdateien sofort liefern', + cdn_testing: 'Wir testen das CDN', + hello_localazy: 'Hallo Localazy!', + using_javascript: 'In diesem Projekt haben wir uns für JavaScript entschieden', + }, + es: { + cdn_info: 'Con la CDN puedes entregar los archivos de traducción al instante', + cdn_testing: 'Estamos probando la CDN', + hello_localazy: 'Hola, Localazy!', + using_javascript: 'En este proyecto hemos decidido utilizar JavaScript', + }, + pt_PT: { + cdn_info: 'Com o CDN pode entregar os ficheiros de tradução instantaneamente', + cdn_testing: 'Estamos a testar o CDN', + hello_localazy: 'Olá Localazy!', + using_javascript: 'Neste projecto, decidimos utilizar JavaScript', + }, + vi: { + cdn_info: 'Với CDN, bạn có thể cung cấp các tệp dịch ngay lập tức', + cdn_testing: 'Chúng tôi đang thử nghiệm CDN', + hello_localazy: 'Chào Localazy!', + using_javascript: 'Trong dự án này, chúng tôi quyết định sử dụng JavaScript', + }, + }, +}; diff --git a/docs/code-examples/usage/results/get-multiple-files-multiple-locales.js b/docs/code-examples/usage/results/get-multiple-files-multiple-locales.js new file mode 100644 index 0000000..eeec07e --- /dev/null +++ b/docs/code-examples/usage/results/get-multiple-files-multiple-locales.js @@ -0,0 +1,16 @@ +const response = { + dfe5b84c1598c8c56b6f1a11efcd483bb3f417ea: { + en: { + cdn_info: 'With the CDN you can deliver the translation files instantly', + cdn_testing: "We're testing the CDN", + hello_localazy: 'Hello Localazy!', + using_javascript: 'In this project we decided to use JavaScript', + }, + de: { + cdn_info: 'Mit dem CDN können Sie die Übersetzungsdateien sofort liefern', + cdn_testing: 'Wir testen das CDN', + hello_localazy: 'Hallo Localazy!', + using_javascript: 'In diesem Projekt haben wir uns für JavaScript entschieden', + }, + }, +}; diff --git a/docs/code-examples/usage/results/get-multiple-files-single-locale.js b/docs/code-examples/usage/results/get-multiple-files-single-locale.js new file mode 100644 index 0000000..cac00a2 --- /dev/null +++ b/docs/code-examples/usage/results/get-multiple-files-single-locale.js @@ -0,0 +1,10 @@ +const response = { + dfe5b84c1598c8c56b6f1a11efcd483bb3f417ea: { + en: { + cdn_info: 'With the CDN you can deliver the translation files instantly', + cdn_testing: "We're testing the CDN", + hello_localazy: 'Hello Localazy!', + using_javascript: 'In this project we decided to use JavaScript', + }, + }, +}; diff --git a/docs/code-examples/usage/results/get-single-file-all-locales.js b/docs/code-examples/usage/results/get-single-file-all-locales.js new file mode 100644 index 0000000..48674d9 --- /dev/null +++ b/docs/code-examples/usage/results/get-single-file-all-locales.js @@ -0,0 +1,32 @@ +const response = { + en: { + cdn_info: 'With the CDN you can deliver the translation files instantly', + cdn_testing: 'We\'re testing the CDN', + hello_localazy: 'Hello Localazy!', + using_javascript: 'In this project we decided to use JavaScript', + }, + de: { + cdn_info: 'Mit dem CDN können Sie die Übersetzungsdateien sofort liefern', + cdn_testing: 'Wir testen das CDN', + hello_localazy: 'Hallo Localazy!', + using_javascript: 'In diesem Projekt haben wir uns für JavaScript entschieden', + }, + es: { + cdn_info: 'Con la CDN puedes entregar los archivos de traducción al instante', + cdn_testing: 'Estamos probando la CDN', + hello_localazy: 'Hola, Localazy!', + using_javascript: 'En este proyecto hemos decidido utilizar JavaScript', + }, + pt_PT: { + cdn_info: 'Com o CDN pode entregar os ficheiros de tradução instantaneamente', + cdn_testing: 'Estamos a testar o CDN', + hello_localazy: 'Olá Localazy!', + using_javascript: 'Neste projecto, decidimos utilizar JavaScript', + }, + vi: { + cdn_info: 'Với CDN, bạn có thể cung cấp các tệp dịch ngay lập tức', + cdn_testing: 'Chúng tôi đang thử nghiệm CDN', + hello_localazy: 'Chào Localazy!', + using_javascript: 'Trong dự án này, chúng tôi quyết định sử dụng JavaScript', + }, +}; diff --git a/docs/code-examples/usage/results/get-single-file-multiple-locales.js b/docs/code-examples/usage/results/get-single-file-multiple-locales.js new file mode 100644 index 0000000..7f59360 --- /dev/null +++ b/docs/code-examples/usage/results/get-single-file-multiple-locales.js @@ -0,0 +1,14 @@ +const response = { + en: { + cdn_info: 'With the CDN you can deliver the translation files instantly', + cdn_testing: 'We\'re testing the CDN', + hello_localazy: 'Hello Localazy!', + using_javascript: 'In this project we decided to use JavaScript', + }, + de: { + cdn_info: 'Mit dem CDN können Sie die Übersetzungsdateien sofort liefern', + cdn_testing: 'Wir testen das CDN', + hello_localazy: 'Hallo Localazy!', + using_javascript: 'In diesem Projekt haben wir uns für JavaScript entschieden', + }, +}; diff --git a/docs/code-examples/usage/results/get-single-file-single-locale.js b/docs/code-examples/usage/results/get-single-file-single-locale.js new file mode 100644 index 0000000..ec423d3 --- /dev/null +++ b/docs/code-examples/usage/results/get-single-file-single-locale.js @@ -0,0 +1,6 @@ +const response = { + cdn_info: 'With the CDN you can deliver the translation files instantly', + cdn_testing: 'We\'re testing the CDN', + hello_localazy: 'Hello Localazy!', + using_javascript: 'In this project we decided to use JavaScript', +}; diff --git a/docs/examples/i18next.md b/docs/examples/i18next.md new file mode 100644 index 0000000..63c177f --- /dev/null +++ b/docs/examples/i18next.md @@ -0,0 +1,44 @@ +# i18next + +## Install + +```shell +npm install @localazy/cdn-client // [!=npm auto] +``` + +## Usage + +```javascript +import i18next from 'i18next'; +import { CdnClient } from '@localazy/cdn-client'; + +class LocalazyI18next { + constructor(cdn, file) { + this.cdn = cdn; + this.file = file; + this.type = 'backend'; + } + + read(language, namespace, callback) { + this.cdn.fetch({ files: this.file, locales: language }) + .then((value) => callback(null, value)) + .catch((e) => callback(e, null)); + } +} + +const cdn = new CdnClient({ metafile: 'https://delivery.localazy.com/_a855374211039568660198b39c31/_e0.v2.json' }); +const file = cdn.metafile.files.first(); +const cdnPlugin = new LocalazyI18next(cdn, file); + +i18next + .use(cdnPlugin) + .init( + { + lng: 'en', + fallbackLng: false + }, + () => { + document.getElementById('output').innerHTML = i18next.t('cdn_info'); + } + ); +``` diff --git a/docs/get-started/install.md b/docs/get-started/install.md new file mode 100644 index 0000000..78f4747 --- /dev/null +++ b/docs/get-started/install.md @@ -0,0 +1,60 @@ +# Install + +You can install the CDN Client as a Node.js module or import it directly in the browser. + +## Node.js module + +Use your favourite package manager to install the CDN Client. + +```shell +npm install @localazy/cdn-client // [!=npm auto] +``` + +CDN Client is written in TypeScript and provides type definitions. You can import it using TypeScript, ESM, or CommonJS syntax. + +:::tabs + +== TS +```typescript +import { CdnClient } from '@localazy/cdn-client'; +``` + +== ESM +```javascript +import { CdnClient } from '@localazy/cdn-client'; +``` + +== CommonJS +```javascript +const { CdnClient } = require('@localazy/cdn-client'); +``` + +::: + + +## Browser + +You can import the CDN Client directly in the browser using a script tag. Choose between ESM or UMD bundle. + +CDN Client depends on [Axios](https://axios-http.com/docs/intro), so you need to include it before the CDN Client. + +:::tabs + +== ESM +``` + +== UMD + + +``` + +::: diff --git a/docs/get-started/introduction.md b/docs/get-started/introduction.md new file mode 100644 index 0000000..d069074 --- /dev/null +++ b/docs/get-started/introduction.md @@ -0,0 +1,18 @@ +# Introduction + +The **Localazy CDN Client** is a Node.js library that offers functionalities to fetch translation strings from JSON files published on +the [Localazy CDN](https://localazy.com/docs/cdn/cdn-introduction). + +Content can be fetched from JSON file as object or as plain text for other file types. + +## How it works + + + +When translators add translations to your project, they are automatically published to the [Localazy CDN](https://localazy.com/docs/cdn/cdn-introduction). + +Every published project has its own [metafile](metafile.md) that contains information about the project files and their translated versions. + +Under the hood, the CDN Client fetches the [metafile](metafile.md) and uses it to get the urls of the files and their translations. + +You simply select files and languages you want to fetch and the CDN Client does the rest. diff --git a/docs/get-started/metafile.md b/docs/get-started/metafile.md new file mode 100644 index 0000000..7a65aa3 --- /dev/null +++ b/docs/get-started/metafile.md @@ -0,0 +1,33 @@ +# Metafile + +Metafile is a JSON file containing information about the project files and their translated versions. + +Metafile is generated automatically when the Localazy project is published. + +You can read more about the metafiles in the [Localazy CDN - Metafiles](https://localazy.com/docs/cdn/cdn-metafiles) documentation. + +To use a CDN Client, you need to provide the [metafile URL](#metafile-url) of your project. + +## Metafile URL + +To get your project metafile URL use the following steps: + +- select the project from your [Dashboard](https://localazy.com/my/dashboard) +- navigate to **Translation Delivery > CDN** +- click on the **Metafile URL** button + + + +The **CDN Meta File** dialog will appear and then: + +- click on the **Copy** button to copy the metafile URL to your clipboard + + + +## Example Metafile + +In this documentation, we will use the following metafile to demonstrate the CDN Client functionalities. + +https://delivery.localazy.com/_a855374211039568660198b39c31/_e0.v2.json + +<<< ../code-examples/metafile.json diff --git a/docs/get-started/working-example.md b/docs/get-started/working-example.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/index.md b/docs/index.md new file mode 100644 index 0000000..c28255b --- /dev/null +++ b/docs/index.md @@ -0,0 +1,35 @@ +--- +# https://vitepress.dev/reference/default-theme-home-page +layout: home + +hero: + text: Localazy CDN Client + tagline: Node.js module that allows you to easily interact with the Localazy CDN + image: + src: /hero.svg + alt: Localazy CDN Client + actions: + - theme: brand + text: Get Started + link: /get-started/introduction + - theme: alt + text: API Reference + link: /reference/client-api + +features: + - title: Universal package + icon: 📦 + details: Supports TS, ESM, CommonJS and UMD. + - title: Multi-language support + icon: ⚡️ + details: Supports React, Vue, Angular, Svelte, and all other frameworks. + - title: Quick to start + icon: 🚀 + details: Easy to use and well-documented. + - title: Written in TypeScript + details: Provides type definitions. + icon: + src: /ts.svg + width: 48 + height: 48 +--- diff --git a/docs/package-lock.json b/docs/package-lock.json new file mode 100644 index 0000000..f946a25 --- /dev/null +++ b/docs/package-lock.json @@ -0,0 +1,3825 @@ +{ + "name": "docs", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "devDependencies": { + "medium-zoom": "^1.1.0", + "sass": "^1.71.1", + "vitepress": "^1.0.0-rc.45", + "vitepress-plugin-image-viewer": "^1.1.3", + "vitepress-plugin-npm-commands": "^0.6.0", + "vitepress-plugin-sandpack": "^1.1.4", + "vitepress-plugin-tabs": "^0.5.0", + "vue": "^3.4.21" + } + }, + "node_modules/@algolia/autocomplete-core": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-core/-/autocomplete-core-1.9.3.tgz", + "integrity": "sha512-009HdfugtGCdC4JdXUbVJClA0q0zh24yyePn+KUGk3rP7j8FEe/m5Yo/z65gn6nP/cM39PxpzqKrL7A6fP6PPw==", + "dev": true, + "dependencies": { + "@algolia/autocomplete-plugin-algolia-insights": "1.9.3", + "@algolia/autocomplete-shared": "1.9.3" + } + }, + "node_modules/@algolia/autocomplete-plugin-algolia-insights": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-plugin-algolia-insights/-/autocomplete-plugin-algolia-insights-1.9.3.tgz", + "integrity": "sha512-a/yTUkcO/Vyy+JffmAnTWbr4/90cLzw+CC3bRbhnULr/EM0fGNvM13oQQ14f2moLMcVDyAx/leczLlAOovhSZg==", + "dev": true, + "dependencies": { + "@algolia/autocomplete-shared": "1.9.3" + }, + "peerDependencies": { + "search-insights": ">= 1 < 3" + } + }, + "node_modules/@algolia/autocomplete-preset-algolia": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.9.3.tgz", + "integrity": "sha512-d4qlt6YmrLMYy95n5TB52wtNDr6EgAIPH81dvvvW8UmuWRgxEtY0NJiPwl/h95JtG2vmRM804M0DSwMCNZlzRA==", + "dev": true, + "dependencies": { + "@algolia/autocomplete-shared": "1.9.3" + }, + "peerDependencies": { + "@algolia/client-search": ">= 4.9.1 < 6", + "algoliasearch": ">= 4.9.1 < 6" + } + }, + "node_modules/@algolia/autocomplete-shared": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-shared/-/autocomplete-shared-1.9.3.tgz", + "integrity": "sha512-Wnm9E4Ye6Rl6sTTqjoymD+l8DjSTHsHboVRYrKgEt8Q7UHm9nYbqhN/i0fhUYA3OAEH7WA8x3jfpnmJm3rKvaQ==", + "dev": true, + "peerDependencies": { + "@algolia/client-search": ">= 4.9.1 < 6", + "algoliasearch": ">= 4.9.1 < 6" + } + }, + "node_modules/@algolia/cache-browser-local-storage": { + "version": "4.22.1", + "resolved": "https://registry.npmjs.org/@algolia/cache-browser-local-storage/-/cache-browser-local-storage-4.22.1.tgz", + "integrity": "sha512-Sw6IAmOCvvP6QNgY9j+Hv09mvkvEIDKjYW8ow0UDDAxSXy664RBNQk3i/0nt7gvceOJ6jGmOTimaZoY1THmU7g==", + "dev": true, + "dependencies": { + "@algolia/cache-common": "4.22.1" + } + }, + "node_modules/@algolia/cache-common": { + "version": "4.22.1", + "resolved": "https://registry.npmjs.org/@algolia/cache-common/-/cache-common-4.22.1.tgz", + "integrity": "sha512-TJMBKqZNKYB9TptRRjSUtevJeQVXRmg6rk9qgFKWvOy8jhCPdyNZV1nB3SKGufzvTVbomAukFR8guu/8NRKBTA==", + "dev": true + }, + "node_modules/@algolia/cache-in-memory": { + "version": "4.22.1", + "resolved": "https://registry.npmjs.org/@algolia/cache-in-memory/-/cache-in-memory-4.22.1.tgz", + "integrity": "sha512-ve+6Ac2LhwpufuWavM/aHjLoNz/Z/sYSgNIXsinGofWOysPilQZPUetqLj8vbvi+DHZZaYSEP9H5SRVXnpsNNw==", + "dev": true, + "dependencies": { + "@algolia/cache-common": "4.22.1" + } + }, + "node_modules/@algolia/client-account": { + "version": "4.22.1", + "resolved": "https://registry.npmjs.org/@algolia/client-account/-/client-account-4.22.1.tgz", + "integrity": "sha512-k8m+oegM2zlns/TwZyi4YgCtyToackkOpE+xCaKCYfBfDtdGOaVZCM5YvGPtK+HGaJMIN/DoTL8asbM3NzHonw==", + "dev": true, + "dependencies": { + "@algolia/client-common": "4.22.1", + "@algolia/client-search": "4.22.1", + "@algolia/transporter": "4.22.1" + } + }, + "node_modules/@algolia/client-analytics": { + "version": "4.22.1", + "resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-4.22.1.tgz", + "integrity": "sha512-1ssi9pyxyQNN4a7Ji9R50nSdISIumMFDwKNuwZipB6TkauJ8J7ha/uO60sPJFqQyqvvI+px7RSNRQT3Zrvzieg==", + "dev": true, + "dependencies": { + "@algolia/client-common": "4.22.1", + "@algolia/client-search": "4.22.1", + "@algolia/requester-common": "4.22.1", + "@algolia/transporter": "4.22.1" + } + }, + "node_modules/@algolia/client-common": { + "version": "4.22.1", + "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-4.22.1.tgz", + "integrity": "sha512-IvaL5v9mZtm4k4QHbBGDmU3wa/mKokmqNBqPj0K7lcR8ZDKzUorhcGp/u8PkPC/e0zoHSTvRh7TRkGX3Lm7iOQ==", + "dev": true, + "dependencies": { + "@algolia/requester-common": "4.22.1", + "@algolia/transporter": "4.22.1" + } + }, + "node_modules/@algolia/client-personalization": { + "version": "4.22.1", + "resolved": "https://registry.npmjs.org/@algolia/client-personalization/-/client-personalization-4.22.1.tgz", + "integrity": "sha512-sl+/klQJ93+4yaqZ7ezOttMQ/nczly/3GmgZXJ1xmoewP5jmdP/X/nV5U7EHHH3hCUEHeN7X1nsIhGPVt9E1cQ==", + "dev": true, + "dependencies": { + "@algolia/client-common": "4.22.1", + "@algolia/requester-common": "4.22.1", + "@algolia/transporter": "4.22.1" + } + }, + "node_modules/@algolia/client-search": { + "version": "4.22.1", + "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-4.22.1.tgz", + "integrity": "sha512-yb05NA4tNaOgx3+rOxAmFztgMTtGBi97X7PC3jyNeGiwkAjOZc2QrdZBYyIdcDLoI09N0gjtpClcackoTN0gPA==", + "dev": true, + "dependencies": { + "@algolia/client-common": "4.22.1", + "@algolia/requester-common": "4.22.1", + "@algolia/transporter": "4.22.1" + } + }, + "node_modules/@algolia/logger-common": { + "version": "4.22.1", + "resolved": "https://registry.npmjs.org/@algolia/logger-common/-/logger-common-4.22.1.tgz", + "integrity": "sha512-OnTFymd2odHSO39r4DSWRFETkBufnY2iGUZNrMXpIhF5cmFE8pGoINNPzwg02QLBlGSaLqdKy0bM8S0GyqPLBg==", + "dev": true + }, + "node_modules/@algolia/logger-console": { + "version": "4.22.1", + "resolved": "https://registry.npmjs.org/@algolia/logger-console/-/logger-console-4.22.1.tgz", + "integrity": "sha512-O99rcqpVPKN1RlpgD6H3khUWylU24OXlzkavUAMy6QZd1776QAcauE3oP8CmD43nbaTjBexZj2nGsBH9Tc0FVA==", + "dev": true, + "dependencies": { + "@algolia/logger-common": "4.22.1" + } + }, + "node_modules/@algolia/requester-browser-xhr": { + "version": "4.22.1", + "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-4.22.1.tgz", + "integrity": "sha512-dtQGYIg6MteqT1Uay3J/0NDqD+UciHy3QgRbk7bNddOJu+p3hzjTRYESqEnoX/DpEkaNYdRHUKNylsqMpgwaEw==", + "dev": true, + "dependencies": { + "@algolia/requester-common": "4.22.1" + } + }, + "node_modules/@algolia/requester-common": { + "version": "4.22.1", + "resolved": "https://registry.npmjs.org/@algolia/requester-common/-/requester-common-4.22.1.tgz", + "integrity": "sha512-dgvhSAtg2MJnR+BxrIFqlLtkLlVVhas9HgYKMk2Uxiy5m6/8HZBL40JVAMb2LovoPFs9I/EWIoFVjOrFwzn5Qg==", + "dev": true + }, + "node_modules/@algolia/requester-node-http": { + "version": "4.22.1", + "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-4.22.1.tgz", + "integrity": "sha512-JfmZ3MVFQkAU+zug8H3s8rZ6h0ahHZL/SpMaSasTCGYR5EEJsCc8SI5UZ6raPN2tjxa5bxS13BRpGSBUens7EA==", + "dev": true, + "dependencies": { + "@algolia/requester-common": "4.22.1" + } + }, + "node_modules/@algolia/transporter": { + "version": "4.22.1", + "resolved": "https://registry.npmjs.org/@algolia/transporter/-/transporter-4.22.1.tgz", + "integrity": "sha512-kzWgc2c9IdxMa3YqA6TN0NW5VrKYYW/BELIn7vnLyn+U/RFdZ4lxxt9/8yq3DKV5snvoDzzO4ClyejZRdV3lMQ==", + "dev": true, + "dependencies": { + "@algolia/cache-common": "4.22.1", + "@algolia/logger-common": "4.22.1", + "@algolia/requester-common": "4.22.1" + } + }, + "node_modules/@babel/parser": { + "version": "7.24.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.0.tgz", + "integrity": "sha512-QuP/FxEAzMSjXygs8v4N9dvdXzEHN4W1oF3PxuWAtPo08UdM17u89RDMgjLn/mlc56iM0HlLmVkO/wgR+rDgHg==", + "dev": true, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@codemirror/autocomplete": { + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/@codemirror/autocomplete/-/autocomplete-6.14.0.tgz", + "integrity": "sha512-Kx9BCSOLKmqNXEvmViuzsBQJ2VEa/wWwOATNpixOa+suttTV3rDnAUtAIt5ObAUFjXvZakWfFfF/EbxELnGLzQ==", + "dev": true, + "dependencies": { + "@codemirror/language": "^6.0.0", + "@codemirror/state": "^6.0.0", + "@codemirror/view": "^6.17.0", + "@lezer/common": "^1.0.0" + }, + "peerDependencies": { + "@codemirror/language": "^6.0.0", + "@codemirror/state": "^6.0.0", + "@codemirror/view": "^6.0.0", + "@lezer/common": "^1.0.0" + } + }, + "node_modules/@codemirror/commands": { + "version": "6.3.3", + "resolved": "https://registry.npmjs.org/@codemirror/commands/-/commands-6.3.3.tgz", + "integrity": "sha512-dO4hcF0fGT9tu1Pj1D2PvGvxjeGkbC6RGcZw6Qs74TH+Ed1gw98jmUgd2axWvIZEqTeTuFrg1lEB1KV6cK9h1A==", + "dev": true, + "dependencies": { + "@codemirror/language": "^6.0.0", + "@codemirror/state": "^6.4.0", + "@codemirror/view": "^6.0.0", + "@lezer/common": "^1.1.0" + } + }, + "node_modules/@codemirror/lang-css": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/@codemirror/lang-css/-/lang-css-6.2.1.tgz", + "integrity": "sha512-/UNWDNV5Viwi/1lpr/dIXJNWiwDxpw13I4pTUAsNxZdg6E0mI2kTQb0P2iHczg1Tu+H4EBgJR+hYhKiHKko7qg==", + "dev": true, + "dependencies": { + "@codemirror/autocomplete": "^6.0.0", + "@codemirror/language": "^6.0.0", + "@codemirror/state": "^6.0.0", + "@lezer/common": "^1.0.2", + "@lezer/css": "^1.0.0" + } + }, + "node_modules/@codemirror/lang-html": { + "version": "6.4.8", + "resolved": "https://registry.npmjs.org/@codemirror/lang-html/-/lang-html-6.4.8.tgz", + "integrity": "sha512-tE2YK7wDlb9ZpAH6mpTPiYm6rhfdQKVDa5r9IwIFlwwgvVaKsCfuKKZoJGWsmMZIf3FQAuJ5CHMPLymOtg1hXw==", + "dev": true, + "dependencies": { + "@codemirror/autocomplete": "^6.0.0", + "@codemirror/lang-css": "^6.0.0", + "@codemirror/lang-javascript": "^6.0.0", + "@codemirror/language": "^6.4.0", + "@codemirror/state": "^6.0.0", + "@codemirror/view": "^6.17.0", + "@lezer/common": "^1.0.0", + "@lezer/css": "^1.1.0", + "@lezer/html": "^1.3.0" + } + }, + "node_modules/@codemirror/lang-javascript": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/@codemirror/lang-javascript/-/lang-javascript-6.2.2.tgz", + "integrity": "sha512-VGQfY+FCc285AhWuwjYxQyUQcYurWlxdKYT4bqwr3Twnd5wP5WSeu52t4tvvuWmljT4EmgEgZCqSieokhtY8hg==", + "dev": true, + "dependencies": { + "@codemirror/autocomplete": "^6.0.0", + "@codemirror/language": "^6.6.0", + "@codemirror/lint": "^6.0.0", + "@codemirror/state": "^6.0.0", + "@codemirror/view": "^6.17.0", + "@lezer/common": "^1.0.0", + "@lezer/javascript": "^1.0.0" + } + }, + "node_modules/@codemirror/language": { + "version": "6.10.1", + "resolved": "https://registry.npmjs.org/@codemirror/language/-/language-6.10.1.tgz", + "integrity": "sha512-5GrXzrhq6k+gL5fjkAwt90nYDmjlzTIJV8THnxNFtNKWotMIlzzN+CpqxqwXOECnUdOndmSeWntVrVcv5axWRQ==", + "dev": true, + "dependencies": { + "@codemirror/state": "^6.0.0", + "@codemirror/view": "^6.23.0", + "@lezer/common": "^1.1.0", + "@lezer/highlight": "^1.0.0", + "@lezer/lr": "^1.0.0", + "style-mod": "^4.0.0" + } + }, + "node_modules/@codemirror/lint": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/@codemirror/lint/-/lint-6.5.0.tgz", + "integrity": "sha512-+5YyicIaaAZKU8K43IQi8TBy6mF6giGeWAH7N96Z5LC30Wm5JMjqxOYIE9mxwMG1NbhT2mA3l9hA4uuKUM3E5g==", + "dev": true, + "dependencies": { + "@codemirror/state": "^6.0.0", + "@codemirror/view": "^6.0.0", + "crelt": "^1.0.5" + } + }, + "node_modules/@codemirror/state": { + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/@codemirror/state/-/state-6.4.1.tgz", + "integrity": "sha512-QkEyUiLhsJoZkbumGZlswmAhA7CBU02Wrz7zvH4SrcifbsqwlXShVXg65f3v/ts57W3dqyamEriMhij1Z3Zz4A==", + "dev": true + }, + "node_modules/@codemirror/view": { + "version": "6.25.1", + "resolved": "https://registry.npmjs.org/@codemirror/view/-/view-6.25.1.tgz", + "integrity": "sha512-2LXLxsQnHDdfGzDvjzAwZh2ZviNJm7im6tGpa0IONIDnFd8RZ80D2SNi8PDi6YjKcMoMRK20v6OmKIdsrwsyoQ==", + "dev": true, + "dependencies": { + "@codemirror/state": "^6.4.0", + "style-mod": "^4.1.0", + "w3c-keyname": "^2.2.4" + } + }, + "node_modules/@codesandbox/nodebox": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/@codesandbox/nodebox/-/nodebox-0.1.8.tgz", + "integrity": "sha512-2VRS6JDSk+M+pg56GA6CryyUSGPjBEe8Pnae0QL3jJF1mJZJVMDKr93gJRtBbLkfZN6LD/DwMtf+2L0bpWrjqg==", + "dev": true, + "dependencies": { + "outvariant": "^1.4.0", + "strict-event-emitter": "^0.4.3" + } + }, + "node_modules/@codesandbox/sandpack-client": { + "version": "2.13.2", + "resolved": "https://registry.npmjs.org/@codesandbox/sandpack-client/-/sandpack-client-2.13.2.tgz", + "integrity": "sha512-uAuxQOF7p8y4m7H0ojedDcWRf62xVK7UIYIJoX5LkhcV0SW1BTXcRkVNuR0/MSCSv+Og1dBeV8+Xpye9PX0quA==", + "dev": true, + "dependencies": { + "@codesandbox/nodebox": "0.1.8", + "buffer": "^6.0.3", + "dequal": "^2.0.2", + "outvariant": "1.4.0", + "static-browser-server": "1.0.3" + } + }, + "node_modules/@codesandbox/sandpack-themes": { + "version": "2.0.21", + "resolved": "https://registry.npmjs.org/@codesandbox/sandpack-themes/-/sandpack-themes-2.0.21.tgz", + "integrity": "sha512-CMH/MO/dh6foPYb/3eSn2Cu/J3+1+/81Fsaj7VggICkCrmRk0qG5dmgjGAearPTnRkOGORIPHuRqwNXgw0E6YQ==", + "dev": true + }, + "node_modules/@docsearch/css": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/@docsearch/css/-/css-3.5.2.tgz", + "integrity": "sha512-SPiDHaWKQZpwR2siD0KQUwlStvIAnEyK6tAE2h2Wuoq8ue9skzhlyVQ1ddzOxX6khULnAALDiR/isSF3bnuciA==", + "dev": true + }, + "node_modules/@docsearch/js": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/@docsearch/js/-/js-3.5.2.tgz", + "integrity": "sha512-p1YFTCDflk8ieHgFJYfmyHBki1D61+U9idwrLh+GQQMrBSP3DLGKpy0XUJtPjAOPltcVbqsTjiPFfH7JImjUNg==", + "dev": true, + "dependencies": { + "@docsearch/react": "3.5.2", + "preact": "^10.0.0" + } + }, + "node_modules/@docsearch/react": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/@docsearch/react/-/react-3.5.2.tgz", + "integrity": "sha512-9Ahcrs5z2jq/DcAvYtvlqEBHImbm4YJI8M9y0x6Tqg598P40HTEkX7hsMcIuThI+hTFxRGZ9hll0Wygm2yEjng==", + "dev": true, + "dependencies": { + "@algolia/autocomplete-core": "1.9.3", + "@algolia/autocomplete-preset-algolia": "1.9.3", + "@docsearch/css": "3.5.2", + "algoliasearch": "^4.19.1" + }, + "peerDependencies": { + "@types/react": ">= 16.8.0 < 19.0.0", + "react": ">= 16.8.0 < 19.0.0", + "react-dom": ">= 16.8.0 < 19.0.0", + "search-insights": ">= 1 < 3" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "react": { + "optional": true + }, + "react-dom": { + "optional": true + }, + "search-insights": { + "optional": true + } + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.19.12.tgz", + "integrity": "sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.19.12.tgz", + "integrity": "sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.19.12.tgz", + "integrity": "sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.19.12.tgz", + "integrity": "sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.12.tgz", + "integrity": "sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.19.12.tgz", + "integrity": "sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.12.tgz", + "integrity": "sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.19.12.tgz", + "integrity": "sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.19.12.tgz", + "integrity": "sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.19.12.tgz", + "integrity": "sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.19.12.tgz", + "integrity": "sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.19.12.tgz", + "integrity": "sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.19.12.tgz", + "integrity": "sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.19.12.tgz", + "integrity": "sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.19.12.tgz", + "integrity": "sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.19.12.tgz", + "integrity": "sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.12.tgz", + "integrity": "sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.19.12.tgz", + "integrity": "sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.19.12.tgz", + "integrity": "sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.19.12.tgz", + "integrity": "sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.19.12.tgz", + "integrity": "sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.19.12.tgz", + "integrity": "sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.12.tgz", + "integrity": "sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", + "dev": true + }, + "node_modules/@lezer/common": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@lezer/common/-/common-1.2.1.tgz", + "integrity": "sha512-yemX0ZD2xS/73llMZIK6KplkjIjf2EvAHcinDi/TfJ9hS25G0388+ClHt6/3but0oOxinTcQHJLDXh6w1crzFQ==", + "dev": true + }, + "node_modules/@lezer/css": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/@lezer/css/-/css-1.1.8.tgz", + "integrity": "sha512-7JhxupKuMBaWQKjQoLtzhGj83DdnZY9MckEOG5+/iLKNK2ZJqKc6hf6uc0HjwCX7Qlok44jBNqZhHKDhEhZYLA==", + "dev": true, + "dependencies": { + "@lezer/common": "^1.2.0", + "@lezer/highlight": "^1.0.0", + "@lezer/lr": "^1.0.0" + } + }, + "node_modules/@lezer/highlight": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@lezer/highlight/-/highlight-1.2.0.tgz", + "integrity": "sha512-WrS5Mw51sGrpqjlh3d4/fOwpEV2Hd3YOkp9DBt4k8XZQcoTHZFB7sx030A6OcahF4J1nDQAa3jXlTVVYH50IFA==", + "dev": true, + "dependencies": { + "@lezer/common": "^1.0.0" + } + }, + "node_modules/@lezer/html": { + "version": "1.3.9", + "resolved": "https://registry.npmjs.org/@lezer/html/-/html-1.3.9.tgz", + "integrity": "sha512-MXxeCMPyrcemSLGaTQEZx0dBUH0i+RPl8RN5GwMAzo53nTsd/Unc/t5ZxACeQoyPUM5/GkPLRUs2WliOImzkRA==", + "dev": true, + "dependencies": { + "@lezer/common": "^1.2.0", + "@lezer/highlight": "^1.0.0", + "@lezer/lr": "^1.0.0" + } + }, + "node_modules/@lezer/javascript": { + "version": "1.4.13", + "resolved": "https://registry.npmjs.org/@lezer/javascript/-/javascript-1.4.13.tgz", + "integrity": "sha512-5IBr8LIO3xJdJH1e9aj/ZNLE4LSbdsx25wFmGRAZsj2zSmwAYjx26JyU/BYOCpRQlu1jcv1z3vy4NB9+UkfRow==", + "dev": true, + "dependencies": { + "@lezer/common": "^1.2.0", + "@lezer/highlight": "^1.1.3", + "@lezer/lr": "^1.3.0" + } + }, + "node_modules/@lezer/lr": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@lezer/lr/-/lr-1.4.0.tgz", + "integrity": "sha512-Wst46p51km8gH0ZUmeNrtpRYmdlRHUpN1DQd3GFAyKANi8WVz8c2jHYTf1CVScFaCjQw1iO3ZZdqGDxQPRErTg==", + "dev": true, + "dependencies": { + "@lezer/common": "^1.0.0" + } + }, + "node_modules/@open-draft/deferred-promise": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@open-draft/deferred-promise/-/deferred-promise-2.2.0.tgz", + "integrity": "sha512-CecwLWx3rhxVQF6V4bAgPS5t+So2sTbPgAzafKkVizyi7tlwpcFpdFqq+wqF2OwNBmqFuu6tOyouTuxgpMfzmA==", + "dev": true + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.12.0.tgz", + "integrity": "sha512-+ac02NL/2TCKRrJu2wffk1kZ+RyqxVUlbjSagNgPm94frxtr+XDL12E5Ll1enWskLrtrZ2r8L3wED1orIibV/w==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.12.0.tgz", + "integrity": "sha512-OBqcX2BMe6nvjQ0Nyp7cC90cnumt8PXmO7Dp3gfAju/6YwG0Tj74z1vKrfRz7qAv23nBcYM8BCbhrsWqO7PzQQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.12.0.tgz", + "integrity": "sha512-X64tZd8dRE/QTrBIEs63kaOBG0b5GVEd3ccoLtyf6IdXtHdh8h+I56C2yC3PtC9Ucnv0CpNFJLqKFVgCYe0lOQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.12.0.tgz", + "integrity": "sha512-cc71KUZoVbUJmGP2cOuiZ9HSOP14AzBAThn3OU+9LcA1+IUqswJyR1cAJj3Mg55HbjZP6OLAIscbQsQLrpgTOg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.12.0.tgz", + "integrity": "sha512-a6w/Y3hyyO6GlpKL2xJ4IOh/7d+APaqLYdMf86xnczU3nurFTaVN9s9jOXQg97BE4nYm/7Ga51rjec5nfRdrvA==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.12.0.tgz", + "integrity": "sha512-0fZBq27b+D7Ar5CQMofVN8sggOVhEtzFUwOwPppQt0k+VR+7UHMZZY4y+64WJ06XOhBTKXtQB/Sv0NwQMXyNAA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.12.0.tgz", + "integrity": "sha512-eTvzUS3hhhlgeAv6bfigekzWZjaEX9xP9HhxB0Dvrdbkk5w/b+1Sxct2ZuDxNJKzsRStSq1EaEkVSEe7A7ipgQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.12.0.tgz", + "integrity": "sha512-ix+qAB9qmrCRiaO71VFfY8rkiAZJL8zQRXveS27HS+pKdjwUfEhqo2+YF2oI+H/22Xsiski+qqwIBxVewLK7sw==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.12.0.tgz", + "integrity": "sha512-TenQhZVOtw/3qKOPa7d+QgkeM6xY0LtwzR8OplmyL5LrgTWIXpTQg2Q2ycBf8jm+SFW2Wt/DTn1gf7nFp3ssVA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.12.0.tgz", + "integrity": "sha512-LfFdRhNnW0zdMvdCb5FNuWlls2WbbSridJvxOvYWgSBOYZtgBfW9UGNJG//rwMqTX1xQE9BAodvMH9tAusKDUw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.12.0.tgz", + "integrity": "sha512-JPDxovheWNp6d7AHCgsUlkuCKvtu3RB55iNEkaQcf0ttsDU/JZF+iQnYcQJSk/7PtT4mjjVG8N1kpwnI9SLYaw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.12.0.tgz", + "integrity": "sha512-fjtuvMWRGJn1oZacG8IPnzIV6GF2/XG+h71FKn76OYFqySXInJtseAqdprVTDTyqPxQOG9Exak5/E9Z3+EJ8ZA==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.12.0.tgz", + "integrity": "sha512-ZYmr5mS2wd4Dew/JjT0Fqi2NPB/ZhZ2VvPp7SmvPZb4Y1CG/LRcS6tcRo2cYU7zLK5A7cdbhWnnWmUjoI4qapg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@shikijs/core": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-1.1.7.tgz", + "integrity": "sha512-gTYLUIuD1UbZp/11qozD3fWpUTuMqPSf3svDMMrL0UmlGU7D9dPw/V1FonwAorCUJBltaaESxq90jrSjQyGixg==", + "dev": true + }, + "node_modules/@shikijs/transformers": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/@shikijs/transformers/-/transformers-1.1.7.tgz", + "integrity": "sha512-lXz011ao4+rvweps/9h3CchBfzb1U5OtP5D51Tqc9lQYdLblWMIxQxH6Ybe1GeGINcEVM4goMyPrI0JvlIp4UQ==", + "dev": true, + "dependencies": { + "shiki": "1.1.7" + } + }, + "node_modules/@stitches/core": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@stitches/core/-/core-1.2.8.tgz", + "integrity": "sha512-Gfkvwk9o9kE9r9XNBmJRfV8zONvXThnm1tcuojL04Uy5uRyqg93DC83lDebl0rocZCfKSjUv+fWYtMQmEDJldg==", + "dev": true + }, + "node_modules/@types/estree": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", + "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", + "dev": true + }, + "node_modules/@types/linkify-it": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@types/linkify-it/-/linkify-it-3.0.5.tgz", + "integrity": "sha512-yg6E+u0/+Zjva+buc3EIb+29XEg4wltq7cSmd4Uc2EE/1nUVmxyzpX6gUXD0V8jIrG0r7YeOGVIbYRkxeooCtw==", + "dev": true + }, + "node_modules/@types/markdown-it": { + "version": "13.0.7", + "resolved": "https://registry.npmjs.org/@types/markdown-it/-/markdown-it-13.0.7.tgz", + "integrity": "sha512-U/CBi2YUUcTHBt5tjO2r5QV/x0Po6nsYwQU4Y04fBS6vfoImaiZ6f8bi3CjTCxBPQSO1LMyUqkByzi8AidyxfA==", + "dev": true, + "dependencies": { + "@types/linkify-it": "*", + "@types/mdurl": "*" + } + }, + "node_modules/@types/mdurl": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/mdurl/-/mdurl-1.0.5.tgz", + "integrity": "sha512-6L6VymKTzYSrEf4Nev4Xa1LCHKrlTlYCBMTlQKFuddo1CvQcE52I0mwfOJayueUC7MJuXOeHTcIU683lzd0cUA==", + "dev": true + }, + "node_modules/@types/web-bluetooth": { + "version": "0.0.20", + "resolved": "https://registry.npmjs.org/@types/web-bluetooth/-/web-bluetooth-0.0.20.tgz", + "integrity": "sha512-g9gZnnXVq7gM7v3tJCWV/qw7w+KeOlSHAhgF9RytFyifW6AF61hdT2ucrYhPq9hLs5JIryeupHV3qGk95dH9ow==", + "dev": true + }, + "node_modules/@vitejs/plugin-vue": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-5.0.4.tgz", + "integrity": "sha512-WS3hevEszI6CEVEx28F8RjTX97k3KsrcY6kvTg7+Whm5y3oYvcqzVeGCU3hxSAn4uY2CLCkeokkGKpoctccilQ==", + "dev": true, + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "peerDependencies": { + "vite": "^5.0.0", + "vue": "^3.2.25" + } + }, + "node_modules/@vue/compiler-core": { + "version": "3.4.21", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.4.21.tgz", + "integrity": "sha512-MjXawxZf2SbZszLPYxaFCjxfibYrzr3eYbKxwpLR9EQN+oaziSu3qKVbwBERj1IFIB8OLUewxB5m/BFzi613og==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.23.9", + "@vue/shared": "3.4.21", + "entities": "^4.5.0", + "estree-walker": "^2.0.2", + "source-map-js": "^1.0.2" + } + }, + "node_modules/@vue/compiler-dom": { + "version": "3.4.21", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.4.21.tgz", + "integrity": "sha512-IZC6FKowtT1sl0CR5DpXSiEB5ayw75oT2bma1BEhV7RRR1+cfwLrxc2Z8Zq/RGFzJ8w5r9QtCOvTjQgdn0IKmA==", + "dev": true, + "dependencies": { + "@vue/compiler-core": "3.4.21", + "@vue/shared": "3.4.21" + } + }, + "node_modules/@vue/compiler-sfc": { + "version": "3.4.21", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.4.21.tgz", + "integrity": "sha512-me7epoTxYlY+2CUM7hy9PCDdpMPfIwrOvAXud2Upk10g4YLv9UBW7kL798TvMeDhPthkZ0CONNrK2GoeI1ODiQ==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.23.9", + "@vue/compiler-core": "3.4.21", + "@vue/compiler-dom": "3.4.21", + "@vue/compiler-ssr": "3.4.21", + "@vue/shared": "3.4.21", + "estree-walker": "^2.0.2", + "magic-string": "^0.30.7", + "postcss": "^8.4.35", + "source-map-js": "^1.0.2" + } + }, + "node_modules/@vue/compiler-ssr": { + "version": "3.4.21", + "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.4.21.tgz", + "integrity": "sha512-M5+9nI2lPpAsgXOGQobnIueVqc9sisBFexh5yMIMRAPYLa7+5wEJs8iqOZc1WAa9WQbx9GR2twgznU8LTIiZ4Q==", + "dev": true, + "dependencies": { + "@vue/compiler-dom": "3.4.21", + "@vue/shared": "3.4.21" + } + }, + "node_modules/@vue/devtools-api": { + "version": "7.0.16", + "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-7.0.16.tgz", + "integrity": "sha512-fZG2CG8624qphMf4aj59zNHckMx1G3lxODUuyM9USKuLznXCh66TP+tEbPOCcml16hA0GizJ4D8w6F34hrfbcw==", + "dev": true, + "dependencies": { + "@vue/devtools-kit": "^7.0.16" + } + }, + "node_modules/@vue/devtools-kit": { + "version": "7.0.16", + "resolved": "https://registry.npmjs.org/@vue/devtools-kit/-/devtools-kit-7.0.16.tgz", + "integrity": "sha512-IA8SSGiZbNgOi4wLT3mRvd71Q9KE0KvMfGk6haa2GZ6bL2K/xMA8Fvvj3o1maspfUXrGcCXutaqbLqbGx/espQ==", + "dev": true, + "dependencies": { + "@vue/devtools-shared": "^7.0.16", + "hookable": "^5.5.3", + "mitt": "^3.0.1", + "perfect-debounce": "^1.0.0", + "speakingurl": "^14.0.1" + }, + "peerDependencies": { + "vue": "^3.0.0" + } + }, + "node_modules/@vue/devtools-shared": { + "version": "7.0.16", + "resolved": "https://registry.npmjs.org/@vue/devtools-shared/-/devtools-shared-7.0.16.tgz", + "integrity": "sha512-Lew4FrGjDjmanaUWSueNE1Rre83k7jQpttc17MaoVw0eARWU5DgZ1F/g9GNUMZXVjbP9rwE+LL3gd9XfXCfkvA==", + "dev": true, + "dependencies": { + "rfdc": "^1.3.1" + } + }, + "node_modules/@vue/reactivity": { + "version": "3.4.21", + "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.4.21.tgz", + "integrity": "sha512-UhenImdc0L0/4ahGCyEzc/pZNwVgcglGy9HVzJ1Bq2Mm9qXOpP8RyNTjookw/gOCUlXSEtuZ2fUg5nrHcoqJcw==", + "dev": true, + "dependencies": { + "@vue/shared": "3.4.21" + } + }, + "node_modules/@vue/runtime-core": { + "version": "3.4.21", + "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.4.21.tgz", + "integrity": "sha512-pQthsuYzE1XcGZznTKn73G0s14eCJcjaLvp3/DKeYWoFacD9glJoqlNBxt3W2c5S40t6CCcpPf+jG01N3ULyrA==", + "dev": true, + "dependencies": { + "@vue/reactivity": "3.4.21", + "@vue/shared": "3.4.21" + } + }, + "node_modules/@vue/runtime-dom": { + "version": "3.4.21", + "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.4.21.tgz", + "integrity": "sha512-gvf+C9cFpevsQxbkRBS1NpU8CqxKw0ebqMvLwcGQrNpx6gqRDodqKqA+A2VZZpQ9RpK2f9yfg8VbW/EpdFUOJw==", + "dev": true, + "dependencies": { + "@vue/runtime-core": "3.4.21", + "@vue/shared": "3.4.21", + "csstype": "^3.1.3" + } + }, + "node_modules/@vue/server-renderer": { + "version": "3.4.21", + "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.4.21.tgz", + "integrity": "sha512-aV1gXyKSN6Rz+6kZ6kr5+Ll14YzmIbeuWe7ryJl5muJ4uwSwY/aStXTixx76TwkZFJLm1aAlA/HSWEJ4EyiMkg==", + "dev": true, + "dependencies": { + "@vue/compiler-ssr": "3.4.21", + "@vue/shared": "3.4.21" + }, + "peerDependencies": { + "vue": "3.4.21" + } + }, + "node_modules/@vue/shared": { + "version": "3.4.21", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.4.21.tgz", + "integrity": "sha512-PuJe7vDIi6VYSinuEbUIQgMIRZGgM8e4R+G+/dQTk0X1NEdvgvvgv7m+rfmDH1gZzyA1OjjoWskvHlfRNfQf3g==", + "dev": true + }, + "node_modules/@vueuse/core": { + "version": "10.9.0", + "resolved": "https://registry.npmjs.org/@vueuse/core/-/core-10.9.0.tgz", + "integrity": "sha512-/1vjTol8SXnx6xewDEKfS0Ra//ncg4Hb0DaZiwKf7drgfMsKFExQ+FnnENcN6efPen+1kIzhLQoGSy0eDUVOMg==", + "dev": true, + "dependencies": { + "@types/web-bluetooth": "^0.0.20", + "@vueuse/metadata": "10.9.0", + "@vueuse/shared": "10.9.0", + "vue-demi": ">=0.14.7" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@vueuse/core/node_modules/vue-demi": { + "version": "0.14.7", + "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.7.tgz", + "integrity": "sha512-EOG8KXDQNwkJILkx/gPcoL/7vH+hORoBaKgGe+6W7VFMvCYJfmF2dGbvgDroVnI8LU7/kTu8mbjRZGBU1z9NTA==", + "dev": true, + "hasInstallScript": true, + "bin": { + "vue-demi-fix": "bin/vue-demi-fix.js", + "vue-demi-switch": "bin/vue-demi-switch.js" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "@vue/composition-api": "^1.0.0-rc.1", + "vue": "^3.0.0-0 || ^2.6.0" + }, + "peerDependenciesMeta": { + "@vue/composition-api": { + "optional": true + } + } + }, + "node_modules/@vueuse/integrations": { + "version": "10.9.0", + "resolved": "https://registry.npmjs.org/@vueuse/integrations/-/integrations-10.9.0.tgz", + "integrity": "sha512-acK+A01AYdWSvL4BZmCoJAcyHJ6EqhmkQEXbQLwev1MY7NBnS+hcEMx/BzVoR9zKI+UqEPMD9u6PsyAuiTRT4Q==", + "dev": true, + "dependencies": { + "@vueuse/core": "10.9.0", + "@vueuse/shared": "10.9.0", + "vue-demi": ">=0.14.7" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "async-validator": "*", + "axios": "*", + "change-case": "*", + "drauu": "*", + "focus-trap": "*", + "fuse.js": "*", + "idb-keyval": "*", + "jwt-decode": "*", + "nprogress": "*", + "qrcode": "*", + "sortablejs": "*", + "universal-cookie": "*" + }, + "peerDependenciesMeta": { + "async-validator": { + "optional": true + }, + "axios": { + "optional": true + }, + "change-case": { + "optional": true + }, + "drauu": { + "optional": true + }, + "focus-trap": { + "optional": true + }, + "fuse.js": { + "optional": true + }, + "idb-keyval": { + "optional": true + }, + "jwt-decode": { + "optional": true + }, + "nprogress": { + "optional": true + }, + "qrcode": { + "optional": true + }, + "sortablejs": { + "optional": true + }, + "universal-cookie": { + "optional": true + } + } + }, + "node_modules/@vueuse/integrations/node_modules/vue-demi": { + "version": "0.14.7", + "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.7.tgz", + "integrity": "sha512-EOG8KXDQNwkJILkx/gPcoL/7vH+hORoBaKgGe+6W7VFMvCYJfmF2dGbvgDroVnI8LU7/kTu8mbjRZGBU1z9NTA==", + "dev": true, + "hasInstallScript": true, + "bin": { + "vue-demi-fix": "bin/vue-demi-fix.js", + "vue-demi-switch": "bin/vue-demi-switch.js" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "@vue/composition-api": "^1.0.0-rc.1", + "vue": "^3.0.0-0 || ^2.6.0" + }, + "peerDependenciesMeta": { + "@vue/composition-api": { + "optional": true + } + } + }, + "node_modules/@vueuse/metadata": { + "version": "10.9.0", + "resolved": "https://registry.npmjs.org/@vueuse/metadata/-/metadata-10.9.0.tgz", + "integrity": "sha512-iddNbg3yZM0X7qFY2sAotomgdHK7YJ6sKUvQqbvwnf7TmaVPxS4EJydcNsVejNdS8iWCtDk+fYXr7E32nyTnGA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@vueuse/shared": { + "version": "10.9.0", + "resolved": "https://registry.npmjs.org/@vueuse/shared/-/shared-10.9.0.tgz", + "integrity": "sha512-Uud2IWncmAfJvRaFYzv5OHDli+FbOzxiVEQdLCKQKLyhz94PIyFC3CHcH7EDMwIn8NPtD06+PNbC/PiO0LGLtw==", + "dev": true, + "dependencies": { + "vue-demi": ">=0.14.7" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@vueuse/shared/node_modules/vue-demi": { + "version": "0.14.7", + "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.7.tgz", + "integrity": "sha512-EOG8KXDQNwkJILkx/gPcoL/7vH+hORoBaKgGe+6W7VFMvCYJfmF2dGbvgDroVnI8LU7/kTu8mbjRZGBU1z9NTA==", + "dev": true, + "hasInstallScript": true, + "bin": { + "vue-demi-fix": "bin/vue-demi-fix.js", + "vue-demi-switch": "bin/vue-demi-switch.js" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "@vue/composition-api": "^1.0.0-rc.1", + "vue": "^3.0.0-0 || ^2.6.0" + }, + "peerDependenciesMeta": { + "@vue/composition-api": { + "optional": true + } + } + }, + "node_modules/algoliasearch": { + "version": "4.22.1", + "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-4.22.1.tgz", + "integrity": "sha512-jwydKFQJKIx9kIZ8Jm44SdpigFwRGPESaxZBaHSV0XWN2yBJAOT4mT7ppvlrpA4UGzz92pqFnVKr/kaZXrcreg==", + "dev": true, + "dependencies": { + "@algolia/cache-browser-local-storage": "4.22.1", + "@algolia/cache-common": "4.22.1", + "@algolia/cache-in-memory": "4.22.1", + "@algolia/client-account": "4.22.1", + "@algolia/client-analytics": "4.22.1", + "@algolia/client-common": "4.22.1", + "@algolia/client-personalization": "4.22.1", + "@algolia/client-search": "4.22.1", + "@algolia/logger-common": "4.22.1", + "@algolia/logger-console": "4.22.1", + "@algolia/requester-browser-xhr": "4.22.1", + "@algolia/requester-common": "4.22.1", + "@algolia/requester-node-http": "4.22.1", + "@algolia/transporter": "4.22.1" + } + }, + "node_modules/anser": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/anser/-/anser-2.1.1.tgz", + "integrity": "sha512-nqLm4HxOTpeLOxcmB3QWmV5TcDFhW9y/fyQ+hivtDFcK4OQ+pQ5fzPnXHM1Mfcm0VkLtvVi1TCPr++Qy0Q/3EQ==", + "dev": true + }, + "node_modules/ansi-to-vue3": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ansi-to-vue3/-/ansi-to-vue3-0.1.2.tgz", + "integrity": "sha512-mkfWeVNBKfmpoWLeLqmAeKQalqvOyAhhMnndqu1oJZEzz8tn56mbUqJC7OfvB8cOEg70ooKjmgeIZoI0i9cdxw==", + "dev": true, + "dependencies": { + "anser": "^2.1.1", + "escape-carriage": "^1.3.1" + }, + "engines": { + "node": ">=16", + "npm": ">=7" + }, + "peerDependencies": { + "vue": "^3.2.0" + }, + "peerDependenciesMeta": { + "vue": { + "optional": true + } + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true, + "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/binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, + "node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dev": true, + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/clean-set": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/clean-set/-/clean-set-1.1.2.tgz", + "integrity": "sha512-cA8uCj0qSoG9e0kevyOWXwPaELRPVg5Pxp6WskLMwerx257Zfnh8Nl0JBH59d7wQzij2CK7qEfJQK3RjuKKIug==", + "dev": true + }, + "node_modules/crelt": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/crelt/-/crelt-1.0.6.tgz", + "integrity": "sha512-VQ2MBenTq1fWZUH9DJNGti7kKv6EeAuYr3cLwxUWhIu1baTaXh4Ib5W2CqHVqib4/MqbYGJqiL3Zb8GJZr3l4g==", + "dev": true + }, + "node_modules/csstype": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", + "dev": true + }, + "node_modules/dequal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/dotenv": { + "version": "16.4.5", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz", + "integrity": "sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, + "node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "dev": true, + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/esbuild": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.19.12.tgz", + "integrity": "sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.19.12", + "@esbuild/android-arm": "0.19.12", + "@esbuild/android-arm64": "0.19.12", + "@esbuild/android-x64": "0.19.12", + "@esbuild/darwin-arm64": "0.19.12", + "@esbuild/darwin-x64": "0.19.12", + "@esbuild/freebsd-arm64": "0.19.12", + "@esbuild/freebsd-x64": "0.19.12", + "@esbuild/linux-arm": "0.19.12", + "@esbuild/linux-arm64": "0.19.12", + "@esbuild/linux-ia32": "0.19.12", + "@esbuild/linux-loong64": "0.19.12", + "@esbuild/linux-mips64el": "0.19.12", + "@esbuild/linux-ppc64": "0.19.12", + "@esbuild/linux-riscv64": "0.19.12", + "@esbuild/linux-s390x": "0.19.12", + "@esbuild/linux-x64": "0.19.12", + "@esbuild/netbsd-x64": "0.19.12", + "@esbuild/openbsd-x64": "0.19.12", + "@esbuild/sunos-x64": "0.19.12", + "@esbuild/win32-arm64": "0.19.12", + "@esbuild/win32-ia32": "0.19.12", + "@esbuild/win32-x64": "0.19.12" + } + }, + "node_modules/escape-carriage": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/escape-carriage/-/escape-carriage-1.3.1.tgz", + "integrity": "sha512-GwBr6yViW3ttx1kb7/Oh+gKQ1/TrhYwxKqVmg5gS+BK+Qe2KrOa/Vh7w3HPBvgGf0LfcDGoY9I6NHKoA5Hozhw==", + "dev": true + }, + "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==", + "dev": true + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/focus-trap": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/focus-trap/-/focus-trap-7.5.4.tgz", + "integrity": "sha512-N7kHdlgsO/v+iD/dMoJKtsSqs5Dz/dXZVebRgJw23LDk+jMi/974zyiOYDziY2JPp8xivq9BmUGwIJMiuSBi7w==", + "dev": true, + "dependencies": { + "tabbable": "^6.2.0" + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/hookable": { + "version": "5.5.3", + "resolved": "https://registry.npmjs.org/hookable/-/hookable-5.5.3.tgz", + "integrity": "sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==", + "dev": true + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "dev": true, + "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/immutable": { + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.5.tgz", + "integrity": "sha512-8eabxkth9gZatlwl5TBuJnCsoTADlL6ftEr7A4qgdaTsPyreilDSnUk57SO+jfKcNtxPa22U5KK6DSeAYhpBJw==", + "dev": true + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/klona": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.6.tgz", + "integrity": "sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/lz-string": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.5.0.tgz", + "integrity": "sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==", + "dev": true, + "bin": { + "lz-string": "bin/bin.js" + } + }, + "node_modules/magic-string": { + "version": "0.30.8", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.8.tgz", + "integrity": "sha512-ISQTe55T2ao7XtlAStud6qwYPZjE4GK1S/BeVPus4jrq6JuOnQ00YKQC581RWhR122W7msZV263KzVeLoqidyQ==", + "dev": true, + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.4.15" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/mark.js": { + "version": "8.11.1", + "resolved": "https://registry.npmjs.org/mark.js/-/mark.js-8.11.1.tgz", + "integrity": "sha512-1I+1qpDt4idfgLQG+BNWmrqku+7/2bi5nLf4YwF8y8zXvmfiTBY3PV3ZibfrjBueCByROpuBjLLFCajqkgYoLQ==", + "dev": true + }, + "node_modules/markdown-it-container": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/markdown-it-container/-/markdown-it-container-3.0.0.tgz", + "integrity": "sha512-y6oKTq4BB9OQuY/KLfk/O3ysFhB3IMYoIWhGJEidXt1NQFocFK2sA2t0NYZAMyMShAGL6x5OPIbrmXPIqaN9rw==", + "dev": true + }, + "node_modules/medium-zoom": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/medium-zoom/-/medium-zoom-1.1.0.tgz", + "integrity": "sha512-ewyDsp7k4InCUp3jRmwHBRFGyjBimKps/AJLjRSox+2q/2H4p/PNpQf+pwONWlJiOudkBXtbdmVbFjqyybfTmQ==", + "dev": true + }, + "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==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/minisearch": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/minisearch/-/minisearch-6.3.0.tgz", + "integrity": "sha512-ihFnidEeU8iXzcVHy74dhkxh/dn8Dc08ERl0xwoMMGqp4+LvRSCgicb+zGqWthVokQKvCSxITlh3P08OzdTYCQ==", + "dev": true + }, + "node_modules/mitt": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mitt/-/mitt-3.0.1.tgz", + "integrity": "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==", + "dev": true + }, + "node_modules/nanoid": { + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm-to-yarn": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/npm-to-yarn/-/npm-to-yarn-2.2.1.tgz", + "integrity": "sha512-O/j/ROyX0KGLG7O6Ieut/seQ0oiTpHF2tXAcFbpdTLQFiaNtkyTXXocM1fwpaa60dg1qpWj0nHlbNhx6qwuENQ==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/nebrelbug/npm-to-yarn?sponsor=1" + } + }, + "node_modules/outvariant": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/outvariant/-/outvariant-1.4.0.tgz", + "integrity": "sha512-AlWY719RF02ujitly7Kk/0QlV+pXGFDHrHf9O2OKqyqgBieaPOIeuSkL8sRK6j2WK+/ZAURq2kZsY0d8JapUiw==", + "dev": true + }, + "node_modules/perfect-debounce": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/perfect-debounce/-/perfect-debounce-1.0.0.tgz", + "integrity": "sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==", + "dev": true + }, + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/postcss": { + "version": "8.4.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.35.tgz", + "integrity": "sha512-u5U8qYpBCpN13BsiEB0CbR1Hhh4Gc0zLFuedrHJKMctHCHAGrMdG0PRM/KErzAL3CU6/eckEtmHNB3x6e3c0vA==", + "dev": true, + "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.0", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/preact": { + "version": "10.19.6", + "resolved": "https://registry.npmjs.org/preact/-/preact-10.19.6.tgz", + "integrity": "sha512-gympg+T2Z1fG1unB8NH29yHJwnEaCH37Z32diPDku316OTnRPeMbiRV9kTrfZpocXjdfnWuFUl/Mj4BHaf6gnw==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/preact" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/rfdc": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.1.tgz", + "integrity": "sha512-r5a3l5HzYlIC68TpmYKlxWjmOP6wiPJ1vWv2HeLhNsRZMrCkxeqxiHlQ21oXmQ4F3SiryXBHhAD7JZqvOJjFmg==", + "dev": true + }, + "node_modules/rollup": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.12.0.tgz", + "integrity": "sha512-wz66wn4t1OHIJw3+XU7mJJQV/2NAfw5OAk6G6Hoo3zcvz/XOfQ52Vgi+AN4Uxoxi0KBBwk2g8zPrTDA4btSB/Q==", + "dev": true, + "dependencies": { + "@types/estree": "1.0.5" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.12.0", + "@rollup/rollup-android-arm64": "4.12.0", + "@rollup/rollup-darwin-arm64": "4.12.0", + "@rollup/rollup-darwin-x64": "4.12.0", + "@rollup/rollup-linux-arm-gnueabihf": "4.12.0", + "@rollup/rollup-linux-arm64-gnu": "4.12.0", + "@rollup/rollup-linux-arm64-musl": "4.12.0", + "@rollup/rollup-linux-riscv64-gnu": "4.12.0", + "@rollup/rollup-linux-x64-gnu": "4.12.0", + "@rollup/rollup-linux-x64-musl": "4.12.0", + "@rollup/rollup-win32-arm64-msvc": "4.12.0", + "@rollup/rollup-win32-ia32-msvc": "4.12.0", + "@rollup/rollup-win32-x64-msvc": "4.12.0", + "fsevents": "~2.3.2" + } + }, + "node_modules/sandpack-vue3": { + "version": "3.1.11", + "resolved": "https://registry.npmjs.org/sandpack-vue3/-/sandpack-vue3-3.1.11.tgz", + "integrity": "sha512-VuXLTvKJJEZa2TPqhWhN6kZ/LWW7igo/3QzMRiYdJnRpR7FfpCd3sSWtIExmv2MILFkLrIb3hH0M1e2LA0SEoQ==", + "dev": true, + "dependencies": { + "@codemirror/autocomplete": "^6.12.0", + "@codemirror/commands": "^6.3.3", + "@codemirror/lang-css": "^6.2.1", + "@codemirror/lang-html": "^6.4.8", + "@codemirror/lang-javascript": "^6.2.1", + "@codemirror/language": "^6.10.0", + "@codemirror/state": "^6.4.0", + "@codemirror/view": "^6.23.1", + "@codesandbox/sandpack-client": "^2.11.2", + "@lezer/highlight": "^1.2.0", + "@stitches/core": "^1.2.8", + "ansi-to-vue3": "^0.1.2", + "clean-set": "^1.1.2", + "dequal": "^2.0.3", + "lz-string": "^1.5.0" + }, + "engines": { + "node": ">=16" + }, + "peerDependencies": { + "vue": ">=3.2.0" + }, + "peerDependenciesMeta": { + "vue": { + "optional": true + } + } + }, + "node_modules/sass": { + "version": "1.71.1", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.71.1.tgz", + "integrity": "sha512-wovtnV2PxzteLlfNzbgm1tFXPLoZILYAMJtvoXXkD7/+1uP41eKkIt1ypWq5/q2uT94qHjXehEYfmjKOvjL9sg==", + "dev": true, + "dependencies": { + "chokidar": ">=3.0.0 <4.0.0", + "immutable": "^4.0.0", + "source-map-js": ">=0.6.2 <2.0.0" + }, + "bin": { + "sass": "sass.js" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/search-insights": { + "version": "2.13.0", + "resolved": "https://registry.npmjs.org/search-insights/-/search-insights-2.13.0.tgz", + "integrity": "sha512-Orrsjf9trHHxFRuo9/rzm0KIWmgzE8RMlZMzuhZOJ01Rnz3D0YBAe+V6473t6/H6c7irs6Lt48brULAiRWb3Vw==", + "dev": true, + "peer": true + }, + "node_modules/shiki": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/shiki/-/shiki-1.1.7.tgz", + "integrity": "sha512-9kUTMjZtcPH3i7vHunA6EraTPpPOITYTdA5uMrvsJRexktqP0s7P3s9HVK80b4pP42FRVe03D7fT3NmJv2yYhw==", + "dev": true, + "dependencies": { + "@shikijs/core": "1.1.7" + } + }, + "node_modules/source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/speakingurl": { + "version": "14.0.1", + "resolved": "https://registry.npmjs.org/speakingurl/-/speakingurl-14.0.1.tgz", + "integrity": "sha512-1POYv7uv2gXoyGFpBCmpDVSNV74IfsWlDW216UPjbWufNf+bSU6GdbDsxdcxtfwb4xlI3yxzOTKClUosxARYrQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-browser-server": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/static-browser-server/-/static-browser-server-1.0.3.tgz", + "integrity": "sha512-ZUyfgGDdFRbZGGJQ1YhiM930Yczz5VlbJObrQLlk24+qNHVQx4OlLcYswEUo3bIyNAbQUIUR9Yr5/Hqjzqb4zA==", + "dev": true, + "dependencies": { + "@open-draft/deferred-promise": "^2.1.0", + "dotenv": "^16.0.3", + "mime-db": "^1.52.0", + "outvariant": "^1.3.0" + } + }, + "node_modules/strict-event-emitter": { + "version": "0.4.6", + "resolved": "https://registry.npmjs.org/strict-event-emitter/-/strict-event-emitter-0.4.6.tgz", + "integrity": "sha512-12KWeb+wixJohmnwNFerbyiBrAlq5qJLwIt38etRtKtmmHyDSoGlIqFE9wx+4IwG0aDjI7GV8tc8ZccjWZZtTg==", + "dev": true + }, + "node_modules/style-mod": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/style-mod/-/style-mod-4.1.2.tgz", + "integrity": "sha512-wnD1HyVqpJUI2+eKZ+eo1UwghftP6yuFheBqqe+bWCotBjC2K1YnteJILRMs3SM4V/0dLEW1SC27MWP5y+mwmw==", + "dev": true + }, + "node_modules/tabbable": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/tabbable/-/tabbable-6.2.0.tgz", + "integrity": "sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==", + "dev": true + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/viewerjs": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/viewerjs/-/viewerjs-1.11.6.tgz", + "integrity": "sha512-TlhdSp2oEOLFXvEp4psKaeTjR5zBjTRcM/sHUN8PkV1UWuY8HKC8n7GaVdW5Xqnwdr/F1OmzLik1QwDjI4w/nw==", + "dev": true + }, + "node_modules/vite": { + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.1.5.tgz", + "integrity": "sha512-BdN1xh0Of/oQafhU+FvopafUp6WaYenLU/NFoL5WyJL++GxkNfieKzBhM24H3HVsPQrlAqB7iJYTHabzaRed5Q==", + "dev": true, + "dependencies": { + "esbuild": "^0.19.3", + "postcss": "^8.4.35", + "rollup": "^4.2.0" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || >=20.0.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } + } + }, + "node_modules/vitepress": { + "version": "1.0.0-rc.45", + "resolved": "https://registry.npmjs.org/vitepress/-/vitepress-1.0.0-rc.45.tgz", + "integrity": "sha512-/OiYsu5UKpQKA2c0BAZkfyywjfauDjvXyv6Mo4Ra57m5n4Bxg1HgUGoth1CLH2vwUbR/BHvDA9zOM0RDvgeSVQ==", + "dev": true, + "dependencies": { + "@docsearch/css": "^3.5.2", + "@docsearch/js": "^3.5.2", + "@shikijs/core": "^1.1.5", + "@shikijs/transformers": "^1.1.5", + "@types/markdown-it": "^13.0.7", + "@vitejs/plugin-vue": "^5.0.4", + "@vue/devtools-api": "^7.0.14", + "@vueuse/core": "^10.7.2", + "@vueuse/integrations": "^10.7.2", + "focus-trap": "^7.5.4", + "mark.js": "8.11.1", + "minisearch": "^6.3.0", + "shiki": "^1.1.5", + "vite": "^5.1.3", + "vue": "^3.4.19" + }, + "bin": { + "vitepress": "bin/vitepress.js" + }, + "peerDependencies": { + "markdown-it-mathjax3": "^4.3.2", + "postcss": "^8.4.35" + }, + "peerDependenciesMeta": { + "markdown-it-mathjax3": { + "optional": true + }, + "postcss": { + "optional": true + } + } + }, + "node_modules/vitepress-plugin-image-viewer": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/vitepress-plugin-image-viewer/-/vitepress-plugin-image-viewer-1.1.3.tgz", + "integrity": "sha512-cKN3W9zWtG4oXRyzMDLq7A7o7BOEL4F+Ez8xBLqmWS+CllBPCgXOMwLJ9V9Tc+zNrKpisEyA8SrLzcFbJhdBqA==", + "dev": true, + "dependencies": { + "viewerjs": "^1.11.3" + } + }, + "node_modules/vitepress-plugin-npm-commands": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/vitepress-plugin-npm-commands/-/vitepress-plugin-npm-commands-0.6.0.tgz", + "integrity": "sha512-eqMR2NqvaBmCeu7kjXmv5Nd9oDXOlw0ooCxGYJFCf/3oK+Fv+q0l5rHnmW8EUOtJEU5ryjdB4Q3dzQxCeSqUIw==", + "dev": true, + "dependencies": { + "klona": "^2.0.6", + "npm-to-yarn": "^2.1.0" + }, + "peerDependencies": { + "vitepress": "^1.0.0-rc.27", + "vitepress-plugin-tabs": "^0.5.0" + } + }, + "node_modules/vitepress-plugin-sandpack": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/vitepress-plugin-sandpack/-/vitepress-plugin-sandpack-1.1.4.tgz", + "integrity": "sha512-8ZAQLpg9VDY1o8wCjEQeKgfTnmxaV/1thElx5mhA6QbKpzo7Jo8WSYcWYA7yTCvBfTY+Blt8ngwXRnwbNbw5ig==", + "dev": true, + "dependencies": { + "@codesandbox/sandpack-themes": "^2.0.21", + "markdown-it-container": "^3.0.0", + "sandpack-vue3": "^3.1.9" + }, + "engines": { + "node": ">=16" + }, + "peerDependencies": { + "vite": ">=4.0.0", + "vitepress": "^1.0.0-beta.1", + "vue": ">=3.2.0" + }, + "peerDependenciesMeta": { + "vite": { + "optional": true + }, + "vitepress": { + "optional": true + }, + "vue": { + "optional": true + } + } + }, + "node_modules/vitepress-plugin-tabs": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/vitepress-plugin-tabs/-/vitepress-plugin-tabs-0.5.0.tgz", + "integrity": "sha512-SIhFWwGsUkTByfc2b279ray/E0Jt8vDTsM1LiHxmCOBAEMmvzIBZSuYYT1DpdDTiS3SuJieBheJkYnwCq/yD9A==", + "dev": true, + "peerDependencies": { + "vitepress": "^1.0.0-rc.27", + "vue": "^3.3.8" + } + }, + "node_modules/vue": { + "version": "3.4.21", + "resolved": "https://registry.npmjs.org/vue/-/vue-3.4.21.tgz", + "integrity": "sha512-5hjyV/jLEIKD/jYl4cavMcnzKwjMKohureP8ejn3hhEjwhWIhWeuzL2kJAjzl/WyVsgPY56Sy4Z40C3lVshxXA==", + "dev": true, + "dependencies": { + "@vue/compiler-dom": "3.4.21", + "@vue/compiler-sfc": "3.4.21", + "@vue/runtime-dom": "3.4.21", + "@vue/server-renderer": "3.4.21", + "@vue/shared": "3.4.21" + }, + "peerDependencies": { + "typescript": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/w3c-keyname": { + "version": "2.2.8", + "resolved": "https://registry.npmjs.org/w3c-keyname/-/w3c-keyname-2.2.8.tgz", + "integrity": "sha512-dpojBhNsCNN7T82Tm7k26A6G9ML3NkhDsnw9n/eoxSRlVBB4CEtIQ/KTCLI2Fwf3ataSXRhYFkQi3SlnFwPvPQ==", + "dev": true + } + }, + "dependencies": { + "@algolia/autocomplete-core": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-core/-/autocomplete-core-1.9.3.tgz", + "integrity": "sha512-009HdfugtGCdC4JdXUbVJClA0q0zh24yyePn+KUGk3rP7j8FEe/m5Yo/z65gn6nP/cM39PxpzqKrL7A6fP6PPw==", + "dev": true, + "requires": { + "@algolia/autocomplete-plugin-algolia-insights": "1.9.3", + "@algolia/autocomplete-shared": "1.9.3" + } + }, + "@algolia/autocomplete-plugin-algolia-insights": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-plugin-algolia-insights/-/autocomplete-plugin-algolia-insights-1.9.3.tgz", + "integrity": "sha512-a/yTUkcO/Vyy+JffmAnTWbr4/90cLzw+CC3bRbhnULr/EM0fGNvM13oQQ14f2moLMcVDyAx/leczLlAOovhSZg==", + "dev": true, + "requires": { + "@algolia/autocomplete-shared": "1.9.3" + } + }, + "@algolia/autocomplete-preset-algolia": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.9.3.tgz", + "integrity": "sha512-d4qlt6YmrLMYy95n5TB52wtNDr6EgAIPH81dvvvW8UmuWRgxEtY0NJiPwl/h95JtG2vmRM804M0DSwMCNZlzRA==", + "dev": true, + "requires": { + "@algolia/autocomplete-shared": "1.9.3" + } + }, + "@algolia/autocomplete-shared": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-shared/-/autocomplete-shared-1.9.3.tgz", + "integrity": "sha512-Wnm9E4Ye6Rl6sTTqjoymD+l8DjSTHsHboVRYrKgEt8Q7UHm9nYbqhN/i0fhUYA3OAEH7WA8x3jfpnmJm3rKvaQ==", + "dev": true, + "requires": {} + }, + "@algolia/cache-browser-local-storage": { + "version": "4.22.1", + "resolved": "https://registry.npmjs.org/@algolia/cache-browser-local-storage/-/cache-browser-local-storage-4.22.1.tgz", + "integrity": "sha512-Sw6IAmOCvvP6QNgY9j+Hv09mvkvEIDKjYW8ow0UDDAxSXy664RBNQk3i/0nt7gvceOJ6jGmOTimaZoY1THmU7g==", + "dev": true, + "requires": { + "@algolia/cache-common": "4.22.1" + } + }, + "@algolia/cache-common": { + "version": "4.22.1", + "resolved": "https://registry.npmjs.org/@algolia/cache-common/-/cache-common-4.22.1.tgz", + "integrity": "sha512-TJMBKqZNKYB9TptRRjSUtevJeQVXRmg6rk9qgFKWvOy8jhCPdyNZV1nB3SKGufzvTVbomAukFR8guu/8NRKBTA==", + "dev": true + }, + "@algolia/cache-in-memory": { + "version": "4.22.1", + "resolved": "https://registry.npmjs.org/@algolia/cache-in-memory/-/cache-in-memory-4.22.1.tgz", + "integrity": "sha512-ve+6Ac2LhwpufuWavM/aHjLoNz/Z/sYSgNIXsinGofWOysPilQZPUetqLj8vbvi+DHZZaYSEP9H5SRVXnpsNNw==", + "dev": true, + "requires": { + "@algolia/cache-common": "4.22.1" + } + }, + "@algolia/client-account": { + "version": "4.22.1", + "resolved": "https://registry.npmjs.org/@algolia/client-account/-/client-account-4.22.1.tgz", + "integrity": "sha512-k8m+oegM2zlns/TwZyi4YgCtyToackkOpE+xCaKCYfBfDtdGOaVZCM5YvGPtK+HGaJMIN/DoTL8asbM3NzHonw==", + "dev": true, + "requires": { + "@algolia/client-common": "4.22.1", + "@algolia/client-search": "4.22.1", + "@algolia/transporter": "4.22.1" + } + }, + "@algolia/client-analytics": { + "version": "4.22.1", + "resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-4.22.1.tgz", + "integrity": "sha512-1ssi9pyxyQNN4a7Ji9R50nSdISIumMFDwKNuwZipB6TkauJ8J7ha/uO60sPJFqQyqvvI+px7RSNRQT3Zrvzieg==", + "dev": true, + "requires": { + "@algolia/client-common": "4.22.1", + "@algolia/client-search": "4.22.1", + "@algolia/requester-common": "4.22.1", + "@algolia/transporter": "4.22.1" + } + }, + "@algolia/client-common": { + "version": "4.22.1", + "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-4.22.1.tgz", + "integrity": "sha512-IvaL5v9mZtm4k4QHbBGDmU3wa/mKokmqNBqPj0K7lcR8ZDKzUorhcGp/u8PkPC/e0zoHSTvRh7TRkGX3Lm7iOQ==", + "dev": true, + "requires": { + "@algolia/requester-common": "4.22.1", + "@algolia/transporter": "4.22.1" + } + }, + "@algolia/client-personalization": { + "version": "4.22.1", + "resolved": "https://registry.npmjs.org/@algolia/client-personalization/-/client-personalization-4.22.1.tgz", + "integrity": "sha512-sl+/klQJ93+4yaqZ7ezOttMQ/nczly/3GmgZXJ1xmoewP5jmdP/X/nV5U7EHHH3hCUEHeN7X1nsIhGPVt9E1cQ==", + "dev": true, + "requires": { + "@algolia/client-common": "4.22.1", + "@algolia/requester-common": "4.22.1", + "@algolia/transporter": "4.22.1" + } + }, + "@algolia/client-search": { + "version": "4.22.1", + "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-4.22.1.tgz", + "integrity": "sha512-yb05NA4tNaOgx3+rOxAmFztgMTtGBi97X7PC3jyNeGiwkAjOZc2QrdZBYyIdcDLoI09N0gjtpClcackoTN0gPA==", + "dev": true, + "requires": { + "@algolia/client-common": "4.22.1", + "@algolia/requester-common": "4.22.1", + "@algolia/transporter": "4.22.1" + } + }, + "@algolia/logger-common": { + "version": "4.22.1", + "resolved": "https://registry.npmjs.org/@algolia/logger-common/-/logger-common-4.22.1.tgz", + "integrity": "sha512-OnTFymd2odHSO39r4DSWRFETkBufnY2iGUZNrMXpIhF5cmFE8pGoINNPzwg02QLBlGSaLqdKy0bM8S0GyqPLBg==", + "dev": true + }, + "@algolia/logger-console": { + "version": "4.22.1", + "resolved": "https://registry.npmjs.org/@algolia/logger-console/-/logger-console-4.22.1.tgz", + "integrity": "sha512-O99rcqpVPKN1RlpgD6H3khUWylU24OXlzkavUAMy6QZd1776QAcauE3oP8CmD43nbaTjBexZj2nGsBH9Tc0FVA==", + "dev": true, + "requires": { + "@algolia/logger-common": "4.22.1" + } + }, + "@algolia/requester-browser-xhr": { + "version": "4.22.1", + "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-4.22.1.tgz", + "integrity": "sha512-dtQGYIg6MteqT1Uay3J/0NDqD+UciHy3QgRbk7bNddOJu+p3hzjTRYESqEnoX/DpEkaNYdRHUKNylsqMpgwaEw==", + "dev": true, + "requires": { + "@algolia/requester-common": "4.22.1" + } + }, + "@algolia/requester-common": { + "version": "4.22.1", + "resolved": "https://registry.npmjs.org/@algolia/requester-common/-/requester-common-4.22.1.tgz", + "integrity": "sha512-dgvhSAtg2MJnR+BxrIFqlLtkLlVVhas9HgYKMk2Uxiy5m6/8HZBL40JVAMb2LovoPFs9I/EWIoFVjOrFwzn5Qg==", + "dev": true + }, + "@algolia/requester-node-http": { + "version": "4.22.1", + "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-4.22.1.tgz", + "integrity": "sha512-JfmZ3MVFQkAU+zug8H3s8rZ6h0ahHZL/SpMaSasTCGYR5EEJsCc8SI5UZ6raPN2tjxa5bxS13BRpGSBUens7EA==", + "dev": true, + "requires": { + "@algolia/requester-common": "4.22.1" + } + }, + "@algolia/transporter": { + "version": "4.22.1", + "resolved": "https://registry.npmjs.org/@algolia/transporter/-/transporter-4.22.1.tgz", + "integrity": "sha512-kzWgc2c9IdxMa3YqA6TN0NW5VrKYYW/BELIn7vnLyn+U/RFdZ4lxxt9/8yq3DKV5snvoDzzO4ClyejZRdV3lMQ==", + "dev": true, + "requires": { + "@algolia/cache-common": "4.22.1", + "@algolia/logger-common": "4.22.1", + "@algolia/requester-common": "4.22.1" + } + }, + "@babel/parser": { + "version": "7.24.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.0.tgz", + "integrity": "sha512-QuP/FxEAzMSjXygs8v4N9dvdXzEHN4W1oF3PxuWAtPo08UdM17u89RDMgjLn/mlc56iM0HlLmVkO/wgR+rDgHg==", + "dev": true + }, + "@codemirror/autocomplete": { + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/@codemirror/autocomplete/-/autocomplete-6.14.0.tgz", + "integrity": "sha512-Kx9BCSOLKmqNXEvmViuzsBQJ2VEa/wWwOATNpixOa+suttTV3rDnAUtAIt5ObAUFjXvZakWfFfF/EbxELnGLzQ==", + "dev": true, + "requires": { + "@codemirror/language": "^6.0.0", + "@codemirror/state": "^6.0.0", + "@codemirror/view": "^6.17.0", + "@lezer/common": "^1.0.0" + } + }, + "@codemirror/commands": { + "version": "6.3.3", + "resolved": "https://registry.npmjs.org/@codemirror/commands/-/commands-6.3.3.tgz", + "integrity": "sha512-dO4hcF0fGT9tu1Pj1D2PvGvxjeGkbC6RGcZw6Qs74TH+Ed1gw98jmUgd2axWvIZEqTeTuFrg1lEB1KV6cK9h1A==", + "dev": true, + "requires": { + "@codemirror/language": "^6.0.0", + "@codemirror/state": "^6.4.0", + "@codemirror/view": "^6.0.0", + "@lezer/common": "^1.1.0" + } + }, + "@codemirror/lang-css": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/@codemirror/lang-css/-/lang-css-6.2.1.tgz", + "integrity": "sha512-/UNWDNV5Viwi/1lpr/dIXJNWiwDxpw13I4pTUAsNxZdg6E0mI2kTQb0P2iHczg1Tu+H4EBgJR+hYhKiHKko7qg==", + "dev": true, + "requires": { + "@codemirror/autocomplete": "^6.0.0", + "@codemirror/language": "^6.0.0", + "@codemirror/state": "^6.0.0", + "@lezer/common": "^1.0.2", + "@lezer/css": "^1.0.0" + } + }, + "@codemirror/lang-html": { + "version": "6.4.8", + "resolved": "https://registry.npmjs.org/@codemirror/lang-html/-/lang-html-6.4.8.tgz", + "integrity": "sha512-tE2YK7wDlb9ZpAH6mpTPiYm6rhfdQKVDa5r9IwIFlwwgvVaKsCfuKKZoJGWsmMZIf3FQAuJ5CHMPLymOtg1hXw==", + "dev": true, + "requires": { + "@codemirror/autocomplete": "^6.0.0", + "@codemirror/lang-css": "^6.0.0", + "@codemirror/lang-javascript": "^6.0.0", + "@codemirror/language": "^6.4.0", + "@codemirror/state": "^6.0.0", + "@codemirror/view": "^6.17.0", + "@lezer/common": "^1.0.0", + "@lezer/css": "^1.1.0", + "@lezer/html": "^1.3.0" + } + }, + "@codemirror/lang-javascript": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/@codemirror/lang-javascript/-/lang-javascript-6.2.2.tgz", + "integrity": "sha512-VGQfY+FCc285AhWuwjYxQyUQcYurWlxdKYT4bqwr3Twnd5wP5WSeu52t4tvvuWmljT4EmgEgZCqSieokhtY8hg==", + "dev": true, + "requires": { + "@codemirror/autocomplete": "^6.0.0", + "@codemirror/language": "^6.6.0", + "@codemirror/lint": "^6.0.0", + "@codemirror/state": "^6.0.0", + "@codemirror/view": "^6.17.0", + "@lezer/common": "^1.0.0", + "@lezer/javascript": "^1.0.0" + } + }, + "@codemirror/language": { + "version": "6.10.1", + "resolved": "https://registry.npmjs.org/@codemirror/language/-/language-6.10.1.tgz", + "integrity": "sha512-5GrXzrhq6k+gL5fjkAwt90nYDmjlzTIJV8THnxNFtNKWotMIlzzN+CpqxqwXOECnUdOndmSeWntVrVcv5axWRQ==", + "dev": true, + "requires": { + "@codemirror/state": "^6.0.0", + "@codemirror/view": "^6.23.0", + "@lezer/common": "^1.1.0", + "@lezer/highlight": "^1.0.0", + "@lezer/lr": "^1.0.0", + "style-mod": "^4.0.0" + } + }, + "@codemirror/lint": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/@codemirror/lint/-/lint-6.5.0.tgz", + "integrity": "sha512-+5YyicIaaAZKU8K43IQi8TBy6mF6giGeWAH7N96Z5LC30Wm5JMjqxOYIE9mxwMG1NbhT2mA3l9hA4uuKUM3E5g==", + "dev": true, + "requires": { + "@codemirror/state": "^6.0.0", + "@codemirror/view": "^6.0.0", + "crelt": "^1.0.5" + } + }, + "@codemirror/state": { + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/@codemirror/state/-/state-6.4.1.tgz", + "integrity": "sha512-QkEyUiLhsJoZkbumGZlswmAhA7CBU02Wrz7zvH4SrcifbsqwlXShVXg65f3v/ts57W3dqyamEriMhij1Z3Zz4A==", + "dev": true + }, + "@codemirror/view": { + "version": "6.25.1", + "resolved": "https://registry.npmjs.org/@codemirror/view/-/view-6.25.1.tgz", + "integrity": "sha512-2LXLxsQnHDdfGzDvjzAwZh2ZviNJm7im6tGpa0IONIDnFd8RZ80D2SNi8PDi6YjKcMoMRK20v6OmKIdsrwsyoQ==", + "dev": true, + "requires": { + "@codemirror/state": "^6.4.0", + "style-mod": "^4.1.0", + "w3c-keyname": "^2.2.4" + } + }, + "@codesandbox/nodebox": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/@codesandbox/nodebox/-/nodebox-0.1.8.tgz", + "integrity": "sha512-2VRS6JDSk+M+pg56GA6CryyUSGPjBEe8Pnae0QL3jJF1mJZJVMDKr93gJRtBbLkfZN6LD/DwMtf+2L0bpWrjqg==", + "dev": true, + "requires": { + "outvariant": "^1.4.0", + "strict-event-emitter": "^0.4.3" + } + }, + "@codesandbox/sandpack-client": { + "version": "2.13.2", + "resolved": "https://registry.npmjs.org/@codesandbox/sandpack-client/-/sandpack-client-2.13.2.tgz", + "integrity": "sha512-uAuxQOF7p8y4m7H0ojedDcWRf62xVK7UIYIJoX5LkhcV0SW1BTXcRkVNuR0/MSCSv+Og1dBeV8+Xpye9PX0quA==", + "dev": true, + "requires": { + "@codesandbox/nodebox": "0.1.8", + "buffer": "^6.0.3", + "dequal": "^2.0.2", + "outvariant": "1.4.0", + "static-browser-server": "1.0.3" + } + }, + "@codesandbox/sandpack-themes": { + "version": "2.0.21", + "resolved": "https://registry.npmjs.org/@codesandbox/sandpack-themes/-/sandpack-themes-2.0.21.tgz", + "integrity": "sha512-CMH/MO/dh6foPYb/3eSn2Cu/J3+1+/81Fsaj7VggICkCrmRk0qG5dmgjGAearPTnRkOGORIPHuRqwNXgw0E6YQ==", + "dev": true + }, + "@docsearch/css": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/@docsearch/css/-/css-3.5.2.tgz", + "integrity": "sha512-SPiDHaWKQZpwR2siD0KQUwlStvIAnEyK6tAE2h2Wuoq8ue9skzhlyVQ1ddzOxX6khULnAALDiR/isSF3bnuciA==", + "dev": true + }, + "@docsearch/js": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/@docsearch/js/-/js-3.5.2.tgz", + "integrity": "sha512-p1YFTCDflk8ieHgFJYfmyHBki1D61+U9idwrLh+GQQMrBSP3DLGKpy0XUJtPjAOPltcVbqsTjiPFfH7JImjUNg==", + "dev": true, + "requires": { + "@docsearch/react": "3.5.2", + "preact": "^10.0.0" + } + }, + "@docsearch/react": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/@docsearch/react/-/react-3.5.2.tgz", + "integrity": "sha512-9Ahcrs5z2jq/DcAvYtvlqEBHImbm4YJI8M9y0x6Tqg598P40HTEkX7hsMcIuThI+hTFxRGZ9hll0Wygm2yEjng==", + "dev": true, + "requires": { + "@algolia/autocomplete-core": "1.9.3", + "@algolia/autocomplete-preset-algolia": "1.9.3", + "@docsearch/css": "3.5.2", + "algoliasearch": "^4.19.1" + } + }, + "@esbuild/aix-ppc64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.19.12.tgz", + "integrity": "sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA==", + "dev": true, + "optional": true + }, + "@esbuild/android-arm": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.19.12.tgz", + "integrity": "sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w==", + "dev": true, + "optional": true + }, + "@esbuild/android-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.19.12.tgz", + "integrity": "sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA==", + "dev": true, + "optional": true + }, + "@esbuild/android-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.19.12.tgz", + "integrity": "sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew==", + "dev": true, + "optional": true + }, + "@esbuild/darwin-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.12.tgz", + "integrity": "sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g==", + "dev": true, + "optional": true + }, + "@esbuild/darwin-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.19.12.tgz", + "integrity": "sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A==", + "dev": true, + "optional": true + }, + "@esbuild/freebsd-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.12.tgz", + "integrity": "sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA==", + "dev": true, + "optional": true + }, + "@esbuild/freebsd-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.19.12.tgz", + "integrity": "sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg==", + "dev": true, + "optional": true + }, + "@esbuild/linux-arm": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.19.12.tgz", + "integrity": "sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w==", + "dev": true, + "optional": true + }, + "@esbuild/linux-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.19.12.tgz", + "integrity": "sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA==", + "dev": true, + "optional": true + }, + "@esbuild/linux-ia32": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.19.12.tgz", + "integrity": "sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA==", + "dev": true, + "optional": true + }, + "@esbuild/linux-loong64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.19.12.tgz", + "integrity": "sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA==", + "dev": true, + "optional": true + }, + "@esbuild/linux-mips64el": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.19.12.tgz", + "integrity": "sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w==", + "dev": true, + "optional": true + }, + "@esbuild/linux-ppc64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.19.12.tgz", + "integrity": "sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg==", + "dev": true, + "optional": true + }, + "@esbuild/linux-riscv64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.19.12.tgz", + "integrity": "sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg==", + "dev": true, + "optional": true + }, + "@esbuild/linux-s390x": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.19.12.tgz", + "integrity": "sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg==", + "dev": true, + "optional": true + }, + "@esbuild/linux-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.12.tgz", + "integrity": "sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg==", + "dev": true, + "optional": true + }, + "@esbuild/netbsd-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.19.12.tgz", + "integrity": "sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA==", + "dev": true, + "optional": true + }, + "@esbuild/openbsd-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.19.12.tgz", + "integrity": "sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw==", + "dev": true, + "optional": true + }, + "@esbuild/sunos-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.19.12.tgz", + "integrity": "sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA==", + "dev": true, + "optional": true + }, + "@esbuild/win32-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.19.12.tgz", + "integrity": "sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A==", + "dev": true, + "optional": true + }, + "@esbuild/win32-ia32": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.19.12.tgz", + "integrity": "sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ==", + "dev": true, + "optional": true + }, + "@esbuild/win32-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.12.tgz", + "integrity": "sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA==", + "dev": true, + "optional": true + }, + "@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", + "dev": true + }, + "@lezer/common": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@lezer/common/-/common-1.2.1.tgz", + "integrity": "sha512-yemX0ZD2xS/73llMZIK6KplkjIjf2EvAHcinDi/TfJ9hS25G0388+ClHt6/3but0oOxinTcQHJLDXh6w1crzFQ==", + "dev": true + }, + "@lezer/css": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/@lezer/css/-/css-1.1.8.tgz", + "integrity": "sha512-7JhxupKuMBaWQKjQoLtzhGj83DdnZY9MckEOG5+/iLKNK2ZJqKc6hf6uc0HjwCX7Qlok44jBNqZhHKDhEhZYLA==", + "dev": true, + "requires": { + "@lezer/common": "^1.2.0", + "@lezer/highlight": "^1.0.0", + "@lezer/lr": "^1.0.0" + } + }, + "@lezer/highlight": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@lezer/highlight/-/highlight-1.2.0.tgz", + "integrity": "sha512-WrS5Mw51sGrpqjlh3d4/fOwpEV2Hd3YOkp9DBt4k8XZQcoTHZFB7sx030A6OcahF4J1nDQAa3jXlTVVYH50IFA==", + "dev": true, + "requires": { + "@lezer/common": "^1.0.0" + } + }, + "@lezer/html": { + "version": "1.3.9", + "resolved": "https://registry.npmjs.org/@lezer/html/-/html-1.3.9.tgz", + "integrity": "sha512-MXxeCMPyrcemSLGaTQEZx0dBUH0i+RPl8RN5GwMAzo53nTsd/Unc/t5ZxACeQoyPUM5/GkPLRUs2WliOImzkRA==", + "dev": true, + "requires": { + "@lezer/common": "^1.2.0", + "@lezer/highlight": "^1.0.0", + "@lezer/lr": "^1.0.0" + } + }, + "@lezer/javascript": { + "version": "1.4.13", + "resolved": "https://registry.npmjs.org/@lezer/javascript/-/javascript-1.4.13.tgz", + "integrity": "sha512-5IBr8LIO3xJdJH1e9aj/ZNLE4LSbdsx25wFmGRAZsj2zSmwAYjx26JyU/BYOCpRQlu1jcv1z3vy4NB9+UkfRow==", + "dev": true, + "requires": { + "@lezer/common": "^1.2.0", + "@lezer/highlight": "^1.1.3", + "@lezer/lr": "^1.3.0" + } + }, + "@lezer/lr": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@lezer/lr/-/lr-1.4.0.tgz", + "integrity": "sha512-Wst46p51km8gH0ZUmeNrtpRYmdlRHUpN1DQd3GFAyKANi8WVz8c2jHYTf1CVScFaCjQw1iO3ZZdqGDxQPRErTg==", + "dev": true, + "requires": { + "@lezer/common": "^1.0.0" + } + }, + "@open-draft/deferred-promise": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@open-draft/deferred-promise/-/deferred-promise-2.2.0.tgz", + "integrity": "sha512-CecwLWx3rhxVQF6V4bAgPS5t+So2sTbPgAzafKkVizyi7tlwpcFpdFqq+wqF2OwNBmqFuu6tOyouTuxgpMfzmA==", + "dev": true + }, + "@rollup/rollup-android-arm-eabi": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.12.0.tgz", + "integrity": "sha512-+ac02NL/2TCKRrJu2wffk1kZ+RyqxVUlbjSagNgPm94frxtr+XDL12E5Ll1enWskLrtrZ2r8L3wED1orIibV/w==", + "dev": true, + "optional": true + }, + "@rollup/rollup-android-arm64": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.12.0.tgz", + "integrity": "sha512-OBqcX2BMe6nvjQ0Nyp7cC90cnumt8PXmO7Dp3gfAju/6YwG0Tj74z1vKrfRz7qAv23nBcYM8BCbhrsWqO7PzQQ==", + "dev": true, + "optional": true + }, + "@rollup/rollup-darwin-arm64": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.12.0.tgz", + "integrity": "sha512-X64tZd8dRE/QTrBIEs63kaOBG0b5GVEd3ccoLtyf6IdXtHdh8h+I56C2yC3PtC9Ucnv0CpNFJLqKFVgCYe0lOQ==", + "dev": true, + "optional": true + }, + "@rollup/rollup-darwin-x64": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.12.0.tgz", + "integrity": "sha512-cc71KUZoVbUJmGP2cOuiZ9HSOP14AzBAThn3OU+9LcA1+IUqswJyR1cAJj3Mg55HbjZP6OLAIscbQsQLrpgTOg==", + "dev": true, + "optional": true + }, + "@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.12.0.tgz", + "integrity": "sha512-a6w/Y3hyyO6GlpKL2xJ4IOh/7d+APaqLYdMf86xnczU3nurFTaVN9s9jOXQg97BE4nYm/7Ga51rjec5nfRdrvA==", + "dev": true, + "optional": true + }, + "@rollup/rollup-linux-arm64-gnu": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.12.0.tgz", + "integrity": "sha512-0fZBq27b+D7Ar5CQMofVN8sggOVhEtzFUwOwPppQt0k+VR+7UHMZZY4y+64WJ06XOhBTKXtQB/Sv0NwQMXyNAA==", + "dev": true, + "optional": true + }, + "@rollup/rollup-linux-arm64-musl": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.12.0.tgz", + "integrity": "sha512-eTvzUS3hhhlgeAv6bfigekzWZjaEX9xP9HhxB0Dvrdbkk5w/b+1Sxct2ZuDxNJKzsRStSq1EaEkVSEe7A7ipgQ==", + "dev": true, + "optional": true + }, + "@rollup/rollup-linux-riscv64-gnu": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.12.0.tgz", + "integrity": "sha512-ix+qAB9qmrCRiaO71VFfY8rkiAZJL8zQRXveS27HS+pKdjwUfEhqo2+YF2oI+H/22Xsiski+qqwIBxVewLK7sw==", + "dev": true, + "optional": true + }, + "@rollup/rollup-linux-x64-gnu": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.12.0.tgz", + "integrity": "sha512-TenQhZVOtw/3qKOPa7d+QgkeM6xY0LtwzR8OplmyL5LrgTWIXpTQg2Q2ycBf8jm+SFW2Wt/DTn1gf7nFp3ssVA==", + "dev": true, + "optional": true + }, + "@rollup/rollup-linux-x64-musl": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.12.0.tgz", + "integrity": "sha512-LfFdRhNnW0zdMvdCb5FNuWlls2WbbSridJvxOvYWgSBOYZtgBfW9UGNJG//rwMqTX1xQE9BAodvMH9tAusKDUw==", + "dev": true, + "optional": true + }, + "@rollup/rollup-win32-arm64-msvc": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.12.0.tgz", + "integrity": "sha512-JPDxovheWNp6d7AHCgsUlkuCKvtu3RB55iNEkaQcf0ttsDU/JZF+iQnYcQJSk/7PtT4mjjVG8N1kpwnI9SLYaw==", + "dev": true, + "optional": true + }, + "@rollup/rollup-win32-ia32-msvc": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.12.0.tgz", + "integrity": "sha512-fjtuvMWRGJn1oZacG8IPnzIV6GF2/XG+h71FKn76OYFqySXInJtseAqdprVTDTyqPxQOG9Exak5/E9Z3+EJ8ZA==", + "dev": true, + "optional": true + }, + "@rollup/rollup-win32-x64-msvc": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.12.0.tgz", + "integrity": "sha512-ZYmr5mS2wd4Dew/JjT0Fqi2NPB/ZhZ2VvPp7SmvPZb4Y1CG/LRcS6tcRo2cYU7zLK5A7cdbhWnnWmUjoI4qapg==", + "dev": true, + "optional": true + }, + "@shikijs/core": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-1.1.7.tgz", + "integrity": "sha512-gTYLUIuD1UbZp/11qozD3fWpUTuMqPSf3svDMMrL0UmlGU7D9dPw/V1FonwAorCUJBltaaESxq90jrSjQyGixg==", + "dev": true + }, + "@shikijs/transformers": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/@shikijs/transformers/-/transformers-1.1.7.tgz", + "integrity": "sha512-lXz011ao4+rvweps/9h3CchBfzb1U5OtP5D51Tqc9lQYdLblWMIxQxH6Ybe1GeGINcEVM4goMyPrI0JvlIp4UQ==", + "dev": true, + "requires": { + "shiki": "1.1.7" + } + }, + "@stitches/core": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@stitches/core/-/core-1.2.8.tgz", + "integrity": "sha512-Gfkvwk9o9kE9r9XNBmJRfV8zONvXThnm1tcuojL04Uy5uRyqg93DC83lDebl0rocZCfKSjUv+fWYtMQmEDJldg==", + "dev": true + }, + "@types/estree": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", + "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", + "dev": true + }, + "@types/linkify-it": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@types/linkify-it/-/linkify-it-3.0.5.tgz", + "integrity": "sha512-yg6E+u0/+Zjva+buc3EIb+29XEg4wltq7cSmd4Uc2EE/1nUVmxyzpX6gUXD0V8jIrG0r7YeOGVIbYRkxeooCtw==", + "dev": true + }, + "@types/markdown-it": { + "version": "13.0.7", + "resolved": "https://registry.npmjs.org/@types/markdown-it/-/markdown-it-13.0.7.tgz", + "integrity": "sha512-U/CBi2YUUcTHBt5tjO2r5QV/x0Po6nsYwQU4Y04fBS6vfoImaiZ6f8bi3CjTCxBPQSO1LMyUqkByzi8AidyxfA==", + "dev": true, + "requires": { + "@types/linkify-it": "*", + "@types/mdurl": "*" + } + }, + "@types/mdurl": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/mdurl/-/mdurl-1.0.5.tgz", + "integrity": "sha512-6L6VymKTzYSrEf4Nev4Xa1LCHKrlTlYCBMTlQKFuddo1CvQcE52I0mwfOJayueUC7MJuXOeHTcIU683lzd0cUA==", + "dev": true + }, + "@types/web-bluetooth": { + "version": "0.0.20", + "resolved": "https://registry.npmjs.org/@types/web-bluetooth/-/web-bluetooth-0.0.20.tgz", + "integrity": "sha512-g9gZnnXVq7gM7v3tJCWV/qw7w+KeOlSHAhgF9RytFyifW6AF61hdT2ucrYhPq9hLs5JIryeupHV3qGk95dH9ow==", + "dev": true + }, + "@vitejs/plugin-vue": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-5.0.4.tgz", + "integrity": "sha512-WS3hevEszI6CEVEx28F8RjTX97k3KsrcY6kvTg7+Whm5y3oYvcqzVeGCU3hxSAn4uY2CLCkeokkGKpoctccilQ==", + "dev": true, + "requires": {} + }, + "@vue/compiler-core": { + "version": "3.4.21", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.4.21.tgz", + "integrity": "sha512-MjXawxZf2SbZszLPYxaFCjxfibYrzr3eYbKxwpLR9EQN+oaziSu3qKVbwBERj1IFIB8OLUewxB5m/BFzi613og==", + "dev": true, + "requires": { + "@babel/parser": "^7.23.9", + "@vue/shared": "3.4.21", + "entities": "^4.5.0", + "estree-walker": "^2.0.2", + "source-map-js": "^1.0.2" + } + }, + "@vue/compiler-dom": { + "version": "3.4.21", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.4.21.tgz", + "integrity": "sha512-IZC6FKowtT1sl0CR5DpXSiEB5ayw75oT2bma1BEhV7RRR1+cfwLrxc2Z8Zq/RGFzJ8w5r9QtCOvTjQgdn0IKmA==", + "dev": true, + "requires": { + "@vue/compiler-core": "3.4.21", + "@vue/shared": "3.4.21" + } + }, + "@vue/compiler-sfc": { + "version": "3.4.21", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.4.21.tgz", + "integrity": "sha512-me7epoTxYlY+2CUM7hy9PCDdpMPfIwrOvAXud2Upk10g4YLv9UBW7kL798TvMeDhPthkZ0CONNrK2GoeI1ODiQ==", + "dev": true, + "requires": { + "@babel/parser": "^7.23.9", + "@vue/compiler-core": "3.4.21", + "@vue/compiler-dom": "3.4.21", + "@vue/compiler-ssr": "3.4.21", + "@vue/shared": "3.4.21", + "estree-walker": "^2.0.2", + "magic-string": "^0.30.7", + "postcss": "^8.4.35", + "source-map-js": "^1.0.2" + } + }, + "@vue/compiler-ssr": { + "version": "3.4.21", + "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.4.21.tgz", + "integrity": "sha512-M5+9nI2lPpAsgXOGQobnIueVqc9sisBFexh5yMIMRAPYLa7+5wEJs8iqOZc1WAa9WQbx9GR2twgznU8LTIiZ4Q==", + "dev": true, + "requires": { + "@vue/compiler-dom": "3.4.21", + "@vue/shared": "3.4.21" + } + }, + "@vue/devtools-api": { + "version": "7.0.16", + "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-7.0.16.tgz", + "integrity": "sha512-fZG2CG8624qphMf4aj59zNHckMx1G3lxODUuyM9USKuLznXCh66TP+tEbPOCcml16hA0GizJ4D8w6F34hrfbcw==", + "dev": true, + "requires": { + "@vue/devtools-kit": "^7.0.16" + } + }, + "@vue/devtools-kit": { + "version": "7.0.16", + "resolved": "https://registry.npmjs.org/@vue/devtools-kit/-/devtools-kit-7.0.16.tgz", + "integrity": "sha512-IA8SSGiZbNgOi4wLT3mRvd71Q9KE0KvMfGk6haa2GZ6bL2K/xMA8Fvvj3o1maspfUXrGcCXutaqbLqbGx/espQ==", + "dev": true, + "requires": { + "@vue/devtools-shared": "^7.0.16", + "hookable": "^5.5.3", + "mitt": "^3.0.1", + "perfect-debounce": "^1.0.0", + "speakingurl": "^14.0.1" + } + }, + "@vue/devtools-shared": { + "version": "7.0.16", + "resolved": "https://registry.npmjs.org/@vue/devtools-shared/-/devtools-shared-7.0.16.tgz", + "integrity": "sha512-Lew4FrGjDjmanaUWSueNE1Rre83k7jQpttc17MaoVw0eARWU5DgZ1F/g9GNUMZXVjbP9rwE+LL3gd9XfXCfkvA==", + "dev": true, + "requires": { + "rfdc": "^1.3.1" + } + }, + "@vue/reactivity": { + "version": "3.4.21", + "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.4.21.tgz", + "integrity": "sha512-UhenImdc0L0/4ahGCyEzc/pZNwVgcglGy9HVzJ1Bq2Mm9qXOpP8RyNTjookw/gOCUlXSEtuZ2fUg5nrHcoqJcw==", + "dev": true, + "requires": { + "@vue/shared": "3.4.21" + } + }, + "@vue/runtime-core": { + "version": "3.4.21", + "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.4.21.tgz", + "integrity": "sha512-pQthsuYzE1XcGZznTKn73G0s14eCJcjaLvp3/DKeYWoFacD9glJoqlNBxt3W2c5S40t6CCcpPf+jG01N3ULyrA==", + "dev": true, + "requires": { + "@vue/reactivity": "3.4.21", + "@vue/shared": "3.4.21" + } + }, + "@vue/runtime-dom": { + "version": "3.4.21", + "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.4.21.tgz", + "integrity": "sha512-gvf+C9cFpevsQxbkRBS1NpU8CqxKw0ebqMvLwcGQrNpx6gqRDodqKqA+A2VZZpQ9RpK2f9yfg8VbW/EpdFUOJw==", + "dev": true, + "requires": { + "@vue/runtime-core": "3.4.21", + "@vue/shared": "3.4.21", + "csstype": "^3.1.3" + } + }, + "@vue/server-renderer": { + "version": "3.4.21", + "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.4.21.tgz", + "integrity": "sha512-aV1gXyKSN6Rz+6kZ6kr5+Ll14YzmIbeuWe7ryJl5muJ4uwSwY/aStXTixx76TwkZFJLm1aAlA/HSWEJ4EyiMkg==", + "dev": true, + "requires": { + "@vue/compiler-ssr": "3.4.21", + "@vue/shared": "3.4.21" + } + }, + "@vue/shared": { + "version": "3.4.21", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.4.21.tgz", + "integrity": "sha512-PuJe7vDIi6VYSinuEbUIQgMIRZGgM8e4R+G+/dQTk0X1NEdvgvvgv7m+rfmDH1gZzyA1OjjoWskvHlfRNfQf3g==", + "dev": true + }, + "@vueuse/core": { + "version": "10.9.0", + "resolved": "https://registry.npmjs.org/@vueuse/core/-/core-10.9.0.tgz", + "integrity": "sha512-/1vjTol8SXnx6xewDEKfS0Ra//ncg4Hb0DaZiwKf7drgfMsKFExQ+FnnENcN6efPen+1kIzhLQoGSy0eDUVOMg==", + "dev": true, + "requires": { + "@types/web-bluetooth": "^0.0.20", + "@vueuse/metadata": "10.9.0", + "@vueuse/shared": "10.9.0", + "vue-demi": ">=0.14.7" + }, + "dependencies": { + "vue-demi": { + "version": "0.14.7", + "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.7.tgz", + "integrity": "sha512-EOG8KXDQNwkJILkx/gPcoL/7vH+hORoBaKgGe+6W7VFMvCYJfmF2dGbvgDroVnI8LU7/kTu8mbjRZGBU1z9NTA==", + "dev": true, + "requires": {} + } + } + }, + "@vueuse/integrations": { + "version": "10.9.0", + "resolved": "https://registry.npmjs.org/@vueuse/integrations/-/integrations-10.9.0.tgz", + "integrity": "sha512-acK+A01AYdWSvL4BZmCoJAcyHJ6EqhmkQEXbQLwev1MY7NBnS+hcEMx/BzVoR9zKI+UqEPMD9u6PsyAuiTRT4Q==", + "dev": true, + "requires": { + "@vueuse/core": "10.9.0", + "@vueuse/shared": "10.9.0", + "vue-demi": ">=0.14.7" + }, + "dependencies": { + "vue-demi": { + "version": "0.14.7", + "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.7.tgz", + "integrity": "sha512-EOG8KXDQNwkJILkx/gPcoL/7vH+hORoBaKgGe+6W7VFMvCYJfmF2dGbvgDroVnI8LU7/kTu8mbjRZGBU1z9NTA==", + "dev": true, + "requires": {} + } + } + }, + "@vueuse/metadata": { + "version": "10.9.0", + "resolved": "https://registry.npmjs.org/@vueuse/metadata/-/metadata-10.9.0.tgz", + "integrity": "sha512-iddNbg3yZM0X7qFY2sAotomgdHK7YJ6sKUvQqbvwnf7TmaVPxS4EJydcNsVejNdS8iWCtDk+fYXr7E32nyTnGA==", + "dev": true + }, + "@vueuse/shared": { + "version": "10.9.0", + "resolved": "https://registry.npmjs.org/@vueuse/shared/-/shared-10.9.0.tgz", + "integrity": "sha512-Uud2IWncmAfJvRaFYzv5OHDli+FbOzxiVEQdLCKQKLyhz94PIyFC3CHcH7EDMwIn8NPtD06+PNbC/PiO0LGLtw==", + "dev": true, + "requires": { + "vue-demi": ">=0.14.7" + }, + "dependencies": { + "vue-demi": { + "version": "0.14.7", + "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.7.tgz", + "integrity": "sha512-EOG8KXDQNwkJILkx/gPcoL/7vH+hORoBaKgGe+6W7VFMvCYJfmF2dGbvgDroVnI8LU7/kTu8mbjRZGBU1z9NTA==", + "dev": true, + "requires": {} + } + } + }, + "algoliasearch": { + "version": "4.22.1", + "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-4.22.1.tgz", + "integrity": "sha512-jwydKFQJKIx9kIZ8Jm44SdpigFwRGPESaxZBaHSV0XWN2yBJAOT4mT7ppvlrpA4UGzz92pqFnVKr/kaZXrcreg==", + "dev": true, + "requires": { + "@algolia/cache-browser-local-storage": "4.22.1", + "@algolia/cache-common": "4.22.1", + "@algolia/cache-in-memory": "4.22.1", + "@algolia/client-account": "4.22.1", + "@algolia/client-analytics": "4.22.1", + "@algolia/client-common": "4.22.1", + "@algolia/client-personalization": "4.22.1", + "@algolia/client-search": "4.22.1", + "@algolia/logger-common": "4.22.1", + "@algolia/logger-console": "4.22.1", + "@algolia/requester-browser-xhr": "4.22.1", + "@algolia/requester-common": "4.22.1", + "@algolia/requester-node-http": "4.22.1", + "@algolia/transporter": "4.22.1" + } + }, + "anser": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/anser/-/anser-2.1.1.tgz", + "integrity": "sha512-nqLm4HxOTpeLOxcmB3QWmV5TcDFhW9y/fyQ+hivtDFcK4OQ+pQ5fzPnXHM1Mfcm0VkLtvVi1TCPr++Qy0Q/3EQ==", + "dev": true + }, + "ansi-to-vue3": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ansi-to-vue3/-/ansi-to-vue3-0.1.2.tgz", + "integrity": "sha512-mkfWeVNBKfmpoWLeLqmAeKQalqvOyAhhMnndqu1oJZEzz8tn56mbUqJC7OfvB8cOEg70ooKjmgeIZoI0i9cdxw==", + "dev": true, + "requires": { + "anser": "^2.1.1", + "escape-carriage": "^1.3.1" + } + }, + "anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true + }, + "binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "dev": true, + "requires": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, + "chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dev": true, + "requires": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "fsevents": "~2.3.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + } + }, + "clean-set": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/clean-set/-/clean-set-1.1.2.tgz", + "integrity": "sha512-cA8uCj0qSoG9e0kevyOWXwPaELRPVg5Pxp6WskLMwerx257Zfnh8Nl0JBH59d7wQzij2CK7qEfJQK3RjuKKIug==", + "dev": true + }, + "crelt": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/crelt/-/crelt-1.0.6.tgz", + "integrity": "sha512-VQ2MBenTq1fWZUH9DJNGti7kKv6EeAuYr3cLwxUWhIu1baTaXh4Ib5W2CqHVqib4/MqbYGJqiL3Zb8GJZr3l4g==", + "dev": true + }, + "csstype": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", + "dev": true + }, + "dequal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "dev": true + }, + "dotenv": { + "version": "16.4.5", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz", + "integrity": "sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==", + "dev": true + }, + "entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "dev": true + }, + "esbuild": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.19.12.tgz", + "integrity": "sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg==", + "dev": true, + "requires": { + "@esbuild/aix-ppc64": "0.19.12", + "@esbuild/android-arm": "0.19.12", + "@esbuild/android-arm64": "0.19.12", + "@esbuild/android-x64": "0.19.12", + "@esbuild/darwin-arm64": "0.19.12", + "@esbuild/darwin-x64": "0.19.12", + "@esbuild/freebsd-arm64": "0.19.12", + "@esbuild/freebsd-x64": "0.19.12", + "@esbuild/linux-arm": "0.19.12", + "@esbuild/linux-arm64": "0.19.12", + "@esbuild/linux-ia32": "0.19.12", + "@esbuild/linux-loong64": "0.19.12", + "@esbuild/linux-mips64el": "0.19.12", + "@esbuild/linux-ppc64": "0.19.12", + "@esbuild/linux-riscv64": "0.19.12", + "@esbuild/linux-s390x": "0.19.12", + "@esbuild/linux-x64": "0.19.12", + "@esbuild/netbsd-x64": "0.19.12", + "@esbuild/openbsd-x64": "0.19.12", + "@esbuild/sunos-x64": "0.19.12", + "@esbuild/win32-arm64": "0.19.12", + "@esbuild/win32-ia32": "0.19.12", + "@esbuild/win32-x64": "0.19.12" + } + }, + "escape-carriage": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/escape-carriage/-/escape-carriage-1.3.1.tgz", + "integrity": "sha512-GwBr6yViW3ttx1kb7/Oh+gKQ1/TrhYwxKqVmg5gS+BK+Qe2KrOa/Vh7w3HPBvgGf0LfcDGoY9I6NHKoA5Hozhw==", + "dev": true + }, + "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==", + "dev": true + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "focus-trap": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/focus-trap/-/focus-trap-7.5.4.tgz", + "integrity": "sha512-N7kHdlgsO/v+iD/dMoJKtsSqs5Dz/dXZVebRgJw23LDk+jMi/974zyiOYDziY2JPp8xivq9BmUGwIJMiuSBi7w==", + "dev": true, + "requires": { + "tabbable": "^6.2.0" + } + }, + "fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "optional": true + }, + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + }, + "hookable": { + "version": "5.5.3", + "resolved": "https://registry.npmjs.org/hookable/-/hookable-5.5.3.tgz", + "integrity": "sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==", + "dev": true + }, + "ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "dev": true + }, + "immutable": { + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.5.tgz", + "integrity": "sha512-8eabxkth9gZatlwl5TBuJnCsoTADlL6ftEr7A4qgdaTsPyreilDSnUk57SO+jfKcNtxPa22U5KK6DSeAYhpBJw==", + "dev": true + }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true + }, + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "klona": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.6.tgz", + "integrity": "sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==", + "dev": true + }, + "lz-string": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.5.0.tgz", + "integrity": "sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==", + "dev": true + }, + "magic-string": { + "version": "0.30.8", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.8.tgz", + "integrity": "sha512-ISQTe55T2ao7XtlAStud6qwYPZjE4GK1S/BeVPus4jrq6JuOnQ00YKQC581RWhR122W7msZV263KzVeLoqidyQ==", + "dev": true, + "requires": { + "@jridgewell/sourcemap-codec": "^1.4.15" + } + }, + "mark.js": { + "version": "8.11.1", + "resolved": "https://registry.npmjs.org/mark.js/-/mark.js-8.11.1.tgz", + "integrity": "sha512-1I+1qpDt4idfgLQG+BNWmrqku+7/2bi5nLf4YwF8y8zXvmfiTBY3PV3ZibfrjBueCByROpuBjLLFCajqkgYoLQ==", + "dev": true + }, + "markdown-it-container": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/markdown-it-container/-/markdown-it-container-3.0.0.tgz", + "integrity": "sha512-y6oKTq4BB9OQuY/KLfk/O3ysFhB3IMYoIWhGJEidXt1NQFocFK2sA2t0NYZAMyMShAGL6x5OPIbrmXPIqaN9rw==", + "dev": true + }, + "medium-zoom": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/medium-zoom/-/medium-zoom-1.1.0.tgz", + "integrity": "sha512-ewyDsp7k4InCUp3jRmwHBRFGyjBimKps/AJLjRSox+2q/2H4p/PNpQf+pwONWlJiOudkBXtbdmVbFjqyybfTmQ==", + "dev": true + }, + "mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true + }, + "minisearch": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/minisearch/-/minisearch-6.3.0.tgz", + "integrity": "sha512-ihFnidEeU8iXzcVHy74dhkxh/dn8Dc08ERl0xwoMMGqp4+LvRSCgicb+zGqWthVokQKvCSxITlh3P08OzdTYCQ==", + "dev": true + }, + "mitt": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mitt/-/mitt-3.0.1.tgz", + "integrity": "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==", + "dev": true + }, + "nanoid": { + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", + "dev": true + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true + }, + "npm-to-yarn": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/npm-to-yarn/-/npm-to-yarn-2.2.1.tgz", + "integrity": "sha512-O/j/ROyX0KGLG7O6Ieut/seQ0oiTpHF2tXAcFbpdTLQFiaNtkyTXXocM1fwpaa60dg1qpWj0nHlbNhx6qwuENQ==", + "dev": true + }, + "outvariant": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/outvariant/-/outvariant-1.4.0.tgz", + "integrity": "sha512-AlWY719RF02ujitly7Kk/0QlV+pXGFDHrHf9O2OKqyqgBieaPOIeuSkL8sRK6j2WK+/ZAURq2kZsY0d8JapUiw==", + "dev": true + }, + "perfect-debounce": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/perfect-debounce/-/perfect-debounce-1.0.0.tgz", + "integrity": "sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==", + "dev": true + }, + "picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true + }, + "postcss": { + "version": "8.4.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.35.tgz", + "integrity": "sha512-u5U8qYpBCpN13BsiEB0CbR1Hhh4Gc0zLFuedrHJKMctHCHAGrMdG0PRM/KErzAL3CU6/eckEtmHNB3x6e3c0vA==", + "dev": true, + "requires": { + "nanoid": "^3.3.7", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + } + }, + "preact": { + "version": "10.19.6", + "resolved": "https://registry.npmjs.org/preact/-/preact-10.19.6.tgz", + "integrity": "sha512-gympg+T2Z1fG1unB8NH29yHJwnEaCH37Z32diPDku316OTnRPeMbiRV9kTrfZpocXjdfnWuFUl/Mj4BHaf6gnw==", + "dev": true + }, + "readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "requires": { + "picomatch": "^2.2.1" + } + }, + "rfdc": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.1.tgz", + "integrity": "sha512-r5a3l5HzYlIC68TpmYKlxWjmOP6wiPJ1vWv2HeLhNsRZMrCkxeqxiHlQ21oXmQ4F3SiryXBHhAD7JZqvOJjFmg==", + "dev": true + }, + "rollup": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.12.0.tgz", + "integrity": "sha512-wz66wn4t1OHIJw3+XU7mJJQV/2NAfw5OAk6G6Hoo3zcvz/XOfQ52Vgi+AN4Uxoxi0KBBwk2g8zPrTDA4btSB/Q==", + "dev": true, + "requires": { + "@rollup/rollup-android-arm-eabi": "4.12.0", + "@rollup/rollup-android-arm64": "4.12.0", + "@rollup/rollup-darwin-arm64": "4.12.0", + "@rollup/rollup-darwin-x64": "4.12.0", + "@rollup/rollup-linux-arm-gnueabihf": "4.12.0", + "@rollup/rollup-linux-arm64-gnu": "4.12.0", + "@rollup/rollup-linux-arm64-musl": "4.12.0", + "@rollup/rollup-linux-riscv64-gnu": "4.12.0", + "@rollup/rollup-linux-x64-gnu": "4.12.0", + "@rollup/rollup-linux-x64-musl": "4.12.0", + "@rollup/rollup-win32-arm64-msvc": "4.12.0", + "@rollup/rollup-win32-ia32-msvc": "4.12.0", + "@rollup/rollup-win32-x64-msvc": "4.12.0", + "@types/estree": "1.0.5", + "fsevents": "~2.3.2" + } + }, + "sandpack-vue3": { + "version": "3.1.11", + "resolved": "https://registry.npmjs.org/sandpack-vue3/-/sandpack-vue3-3.1.11.tgz", + "integrity": "sha512-VuXLTvKJJEZa2TPqhWhN6kZ/LWW7igo/3QzMRiYdJnRpR7FfpCd3sSWtIExmv2MILFkLrIb3hH0M1e2LA0SEoQ==", + "dev": true, + "requires": { + "@codemirror/autocomplete": "^6.12.0", + "@codemirror/commands": "^6.3.3", + "@codemirror/lang-css": "^6.2.1", + "@codemirror/lang-html": "^6.4.8", + "@codemirror/lang-javascript": "^6.2.1", + "@codemirror/language": "^6.10.0", + "@codemirror/state": "^6.4.0", + "@codemirror/view": "^6.23.1", + "@codesandbox/sandpack-client": "^2.11.2", + "@lezer/highlight": "^1.2.0", + "@stitches/core": "^1.2.8", + "ansi-to-vue3": "^0.1.2", + "clean-set": "^1.1.2", + "dequal": "^2.0.3", + "lz-string": "^1.5.0" + } + }, + "sass": { + "version": "1.71.1", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.71.1.tgz", + "integrity": "sha512-wovtnV2PxzteLlfNzbgm1tFXPLoZILYAMJtvoXXkD7/+1uP41eKkIt1ypWq5/q2uT94qHjXehEYfmjKOvjL9sg==", + "dev": true, + "requires": { + "chokidar": ">=3.0.0 <4.0.0", + "immutable": "^4.0.0", + "source-map-js": ">=0.6.2 <2.0.0" + } + }, + "search-insights": { + "version": "2.13.0", + "resolved": "https://registry.npmjs.org/search-insights/-/search-insights-2.13.0.tgz", + "integrity": "sha512-Orrsjf9trHHxFRuo9/rzm0KIWmgzE8RMlZMzuhZOJ01Rnz3D0YBAe+V6473t6/H6c7irs6Lt48brULAiRWb3Vw==", + "dev": true, + "peer": true + }, + "shiki": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/shiki/-/shiki-1.1.7.tgz", + "integrity": "sha512-9kUTMjZtcPH3i7vHunA6EraTPpPOITYTdA5uMrvsJRexktqP0s7P3s9HVK80b4pP42FRVe03D7fT3NmJv2yYhw==", + "dev": true, + "requires": { + "@shikijs/core": "1.1.7" + } + }, + "source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "dev": true + }, + "speakingurl": { + "version": "14.0.1", + "resolved": "https://registry.npmjs.org/speakingurl/-/speakingurl-14.0.1.tgz", + "integrity": "sha512-1POYv7uv2gXoyGFpBCmpDVSNV74IfsWlDW216UPjbWufNf+bSU6GdbDsxdcxtfwb4xlI3yxzOTKClUosxARYrQ==", + "dev": true + }, + "static-browser-server": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/static-browser-server/-/static-browser-server-1.0.3.tgz", + "integrity": "sha512-ZUyfgGDdFRbZGGJQ1YhiM930Yczz5VlbJObrQLlk24+qNHVQx4OlLcYswEUo3bIyNAbQUIUR9Yr5/Hqjzqb4zA==", + "dev": true, + "requires": { + "@open-draft/deferred-promise": "^2.1.0", + "dotenv": "^16.0.3", + "mime-db": "^1.52.0", + "outvariant": "^1.3.0" + } + }, + "strict-event-emitter": { + "version": "0.4.6", + "resolved": "https://registry.npmjs.org/strict-event-emitter/-/strict-event-emitter-0.4.6.tgz", + "integrity": "sha512-12KWeb+wixJohmnwNFerbyiBrAlq5qJLwIt38etRtKtmmHyDSoGlIqFE9wx+4IwG0aDjI7GV8tc8ZccjWZZtTg==", + "dev": true + }, + "style-mod": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/style-mod/-/style-mod-4.1.2.tgz", + "integrity": "sha512-wnD1HyVqpJUI2+eKZ+eo1UwghftP6yuFheBqqe+bWCotBjC2K1YnteJILRMs3SM4V/0dLEW1SC27MWP5y+mwmw==", + "dev": true + }, + "tabbable": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/tabbable/-/tabbable-6.2.0.tgz", + "integrity": "sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==", + "dev": true + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + }, + "viewerjs": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/viewerjs/-/viewerjs-1.11.6.tgz", + "integrity": "sha512-TlhdSp2oEOLFXvEp4psKaeTjR5zBjTRcM/sHUN8PkV1UWuY8HKC8n7GaVdW5Xqnwdr/F1OmzLik1QwDjI4w/nw==", + "dev": true + }, + "vite": { + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.1.5.tgz", + "integrity": "sha512-BdN1xh0Of/oQafhU+FvopafUp6WaYenLU/NFoL5WyJL++GxkNfieKzBhM24H3HVsPQrlAqB7iJYTHabzaRed5Q==", + "dev": true, + "requires": { + "esbuild": "^0.19.3", + "fsevents": "~2.3.3", + "postcss": "^8.4.35", + "rollup": "^4.2.0" + } + }, + "vitepress": { + "version": "1.0.0-rc.45", + "resolved": "https://registry.npmjs.org/vitepress/-/vitepress-1.0.0-rc.45.tgz", + "integrity": "sha512-/OiYsu5UKpQKA2c0BAZkfyywjfauDjvXyv6Mo4Ra57m5n4Bxg1HgUGoth1CLH2vwUbR/BHvDA9zOM0RDvgeSVQ==", + "dev": true, + "requires": { + "@docsearch/css": "^3.5.2", + "@docsearch/js": "^3.5.2", + "@shikijs/core": "^1.1.5", + "@shikijs/transformers": "^1.1.5", + "@types/markdown-it": "^13.0.7", + "@vitejs/plugin-vue": "^5.0.4", + "@vue/devtools-api": "^7.0.14", + "@vueuse/core": "^10.7.2", + "@vueuse/integrations": "^10.7.2", + "focus-trap": "^7.5.4", + "mark.js": "8.11.1", + "minisearch": "^6.3.0", + "shiki": "^1.1.5", + "vite": "^5.1.3", + "vue": "^3.4.19" + } + }, + "vitepress-plugin-image-viewer": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/vitepress-plugin-image-viewer/-/vitepress-plugin-image-viewer-1.1.3.tgz", + "integrity": "sha512-cKN3W9zWtG4oXRyzMDLq7A7o7BOEL4F+Ez8xBLqmWS+CllBPCgXOMwLJ9V9Tc+zNrKpisEyA8SrLzcFbJhdBqA==", + "dev": true, + "requires": { + "viewerjs": "^1.11.3" + } + }, + "vitepress-plugin-npm-commands": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/vitepress-plugin-npm-commands/-/vitepress-plugin-npm-commands-0.6.0.tgz", + "integrity": "sha512-eqMR2NqvaBmCeu7kjXmv5Nd9oDXOlw0ooCxGYJFCf/3oK+Fv+q0l5rHnmW8EUOtJEU5ryjdB4Q3dzQxCeSqUIw==", + "dev": true, + "requires": { + "klona": "^2.0.6", + "npm-to-yarn": "^2.1.0" + } + }, + "vitepress-plugin-sandpack": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/vitepress-plugin-sandpack/-/vitepress-plugin-sandpack-1.1.4.tgz", + "integrity": "sha512-8ZAQLpg9VDY1o8wCjEQeKgfTnmxaV/1thElx5mhA6QbKpzo7Jo8WSYcWYA7yTCvBfTY+Blt8ngwXRnwbNbw5ig==", + "dev": true, + "requires": { + "@codesandbox/sandpack-themes": "^2.0.21", + "markdown-it-container": "^3.0.0", + "sandpack-vue3": "^3.1.9" + } + }, + "vitepress-plugin-tabs": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/vitepress-plugin-tabs/-/vitepress-plugin-tabs-0.5.0.tgz", + "integrity": "sha512-SIhFWwGsUkTByfc2b279ray/E0Jt8vDTsM1LiHxmCOBAEMmvzIBZSuYYT1DpdDTiS3SuJieBheJkYnwCq/yD9A==", + "dev": true, + "requires": {} + }, + "vue": { + "version": "3.4.21", + "resolved": "https://registry.npmjs.org/vue/-/vue-3.4.21.tgz", + "integrity": "sha512-5hjyV/jLEIKD/jYl4cavMcnzKwjMKohureP8ejn3hhEjwhWIhWeuzL2kJAjzl/WyVsgPY56Sy4Z40C3lVshxXA==", + "dev": true, + "requires": { + "@vue/compiler-dom": "3.4.21", + "@vue/compiler-sfc": "3.4.21", + "@vue/runtime-dom": "3.4.21", + "@vue/server-renderer": "3.4.21", + "@vue/shared": "3.4.21" + } + }, + "w3c-keyname": { + "version": "2.2.8", + "resolved": "https://registry.npmjs.org/w3c-keyname/-/w3c-keyname-2.2.8.tgz", + "integrity": "sha512-dpojBhNsCNN7T82Tm7k26A6G9ML3NkhDsnw9n/eoxSRlVBB4CEtIQ/KTCLI2Fwf3ataSXRhYFkQi3SlnFwPvPQ==", + "dev": true + } + } +} diff --git a/docs/package.json b/docs/package.json new file mode 100644 index 0000000..1c73e19 --- /dev/null +++ b/docs/package.json @@ -0,0 +1,17 @@ +{ + "scripts": { + "dev": "vitepress dev", + "build": "vitepress build", + "preview": "vitepress preview" + }, + "devDependencies": { + "medium-zoom": "^1.1.0", + "sass": "^1.71.1", + "vitepress": "^1.0.0-rc.45", + "vitepress-plugin-image-viewer": "^1.1.3", + "vitepress-plugin-npm-commands": "^0.6.0", + "vitepress-plugin-sandpack": "^1.1.4", + "vitepress-plugin-tabs": "^0.5.0", + "vue": "^3.4.21" + } +} diff --git a/docs/public/favicon.ico b/docs/public/favicon.ico new file mode 100644 index 0000000..070537a Binary files /dev/null and b/docs/public/favicon.ico differ diff --git a/docs/public/hero.svg b/docs/public/hero.svg new file mode 100644 index 0000000..d7d4572 --- /dev/null +++ b/docs/public/hero.svg @@ -0,0 +1,264 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/public/localazy-cdn-client.svg b/docs/public/localazy-cdn-client.svg new file mode 100644 index 0000000..e23fe77 --- /dev/null +++ b/docs/public/localazy-cdn-client.svg @@ -0,0 +1,40 @@ + + + + + + + + + +
+ Localazy automatically +
+ publishes content to CDN +
+
+ + + + CDN + + + + +
+ Download translated +
+ files using CDN Client +
+
+ + + +
+ Your +
+ App +
+
+
+
diff --git a/docs/public/localazy-logo-white-large.svg b/docs/public/localazy-logo-white-large.svg new file mode 100644 index 0000000..9042951 --- /dev/null +++ b/docs/public/localazy-logo-white-large.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/docs/public/localazy-logo-white.svg b/docs/public/localazy-logo-white.svg new file mode 100644 index 0000000..8677a2b --- /dev/null +++ b/docs/public/localazy-logo-white.svg @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + diff --git a/docs/public/metafile-url-copy.png b/docs/public/metafile-url-copy.png new file mode 100644 index 0000000..7ea8b0c Binary files /dev/null and b/docs/public/metafile-url-copy.png differ diff --git a/docs/public/metafile-url.png b/docs/public/metafile-url.png new file mode 100644 index 0000000..20eee82 Binary files /dev/null and b/docs/public/metafile-url.png differ diff --git a/docs/public/ts.svg b/docs/public/ts.svg new file mode 100644 index 0000000..1aac275 --- /dev/null +++ b/docs/public/ts.svg @@ -0,0 +1,8 @@ + + + + + + TS + + diff --git a/docs/reference/client-api.md b/docs/reference/client-api.md new file mode 100644 index 0000000..ed2111e --- /dev/null +++ b/docs/reference/client-api.md @@ -0,0 +1,284 @@ +--- +outline: [ 2, 3 ] +--- + +# Client API + +## Constructor + +--- + +### create(options, config?) + +Fetch the metafile and create a new CDN client instance. + +<<< ../code-examples/reference/create.js + +#### Parameters + +| Name | Type | Description | +|----------------------------------------------|-----------------------------------------------------------------|:----------------------| +| options | [`CdnClientOptions`](types.md#cdnclientoptions) | CDN client options. | +| config | [`CreateAxiosDefaults`](https://axios-http.com/docs/req_config) | Axios request config. | + +#### Returns + +| Type | Description | +|:-----------------------------------------------------------------------------------------------|:---------------------| +| Promise<[`CdnClient`](https://github.com/localazy/cdn-client/blob/main/src/cdn/cdn-client.ts)> | CDN client instance. | + +> [!NOTE] +> Metafile is fetched only once and then cached. If you want to refresh the metafile, use the [`metafile.refresh()`](#metafile-refresh-config) function. + +## Locales + +--- + +### metafile.locales(options?) + +Get all project locales. + +<<< ../code-examples/reference/metafile-locales.js + +
example result + +<<< ../code-examples/reference/results/metafile-locales.js +
+ +#### Parameters + +| Name | Type | Description | +|-----------------------------------------------|---------------------------------------------------|:-----------------| +| options | [`CdnLocalesOptions`](types.md#cdnlocalesoptions) | Locales options. | + +#### Returns + +| Type | Description | +|-------------------------------------|:-----------------| +| [`CdnLocale[]`](types.md#cdnlocale) | Project locales. | + +--- + +### metafile.baseLocale + +Get the base locale of the project. + +<<< ../code-examples/reference/metafile-base-locale.js + +
example result + +<<< ../code-examples/reference/results/metafile-base-locale.js +
+ +#### Returns + +| Type | Description | +|-----------------------------------|:----------------------------| +| [`CdnLocale`](types.md#cdnlocale) | Base locale of the project. | + +## Files content + +--- + +### fetch(options?) + +Get the content of the project files. + +Optional parameter `options.files` can be a single [`CdnFile`](types.md#cdnfile) object or an array of [`CdnFile`](types.md#cdnfile) objects. [`CdnFile`](types.md#cdnfile) objects +are returned by the metafile functions [`metafile.files.list()`](#metafile-files-list), [`metafile.files.filter()`](#metafile-files-filter-options), +[`metafile.files.find()`](#metafile-files-find-options), [`metafile.files.first()`](#metafile-files-first). +Alternatively, it can be a single file ID or an array of file IDs. If not provided, all files are fetched. + +Optional parameter `options.locales` can be a single locale or an array of locales. If not provided, all locales are fetched. + +<<< ../code-examples/reference/fetch.js + +
example result + +<<< ../code-examples/reference/results/fetch.js +
+ +#### Parameters + +| Name | Type | Description | +|-----------------------------------------------|-----------------------------------------------|:------------------------------------------------------| +| options | [`CdnFetchOptions`](types.md#cdnfetchoptions) | Options object containing selected files and locales. | + +#### Returns + +| Type | Description | +|------------------------------------------------|:-----------------------------------------------------------------| +| Promise<[`CdnResponse`](types.md#cdnresponse)> | Object containing the content of the selected files and locales. | + +## Metafile content + +--- + +### metafile.files.list() + +Get all project files. + +<<< ../code-examples/reference/metafile-files-list.js + +
example result + +<<< ../code-examples/reference/results/metafile-files-list.js +
+ +#### Returns + +| Type | Description | +|---------------------------------|:-------------------| +| [`CdnFile[]`](types.md#cdnfile) | All project files. | + +--- + +### metafile.files.filter(options) + +Filter project files. + +Parameter `options` can be an object with file properties to filter by or a function that returns a boolean value. Check +the [`CdnFilesSearchOptions`](types.md#cdnfilessearchoptions) type for more details. + +<<< ../code-examples/reference/metafile-files-filter.js + +
example result + +<<< ../code-examples/reference/results/metafile-files-filter.js +
+ +#### Parameters + +| Name | Type | Description | +|---------|-----------------------------------------------------------|:----------------------| +| options | [`CdnFilesSearchOptions`](types.md#cdnfilessearchoptions) | Files filter options. | + +#### Returns + +| Type | Description | +|---------------------------------|:---------------| +| [`CdnFile[]`](types.md#cdnfile) | Project files. | + +--- + +### metafile.files.find(options) + +Get a project file. + +Parameter `options` can be an object with file properties to find by or a function that returns a boolean value. Check the +[`CdnFilesSearchOptions`](types.md#cdnfilessearchoptions) type for more details. + +<<< ../code-examples/reference/metafile-files-find.js + +
example result + +<<< ../code-examples/reference/results/metafile-files-find.js +
+ +#### Parameters + +| Name | Type | Description | +|---------|-----------------------------------------------------------|:-------------------| +| options | [`CdnFilesSearchOptions`](types.md#cdnfilessearchoptions) | Find file options. | + +#### Returns + +| Type | Description | +|----------------------------------------------|:-----------------------------| +| [`CdnFile`](types.md#cdnfile) \| `undefined` | Project file or `undefined`. | + +--- + +### metafile.files.first() + +Get first project file. + +<<< ../code-examples/reference/metafile-files-first.js + +
example result + +<<< ../code-examples/reference/results/metafile-files-first.js +
+ +#### Returns + +| Type | Description | +|-------------------------------|:--------------------| +| [`CdnFile`](types.md#cdnfile) | First project file. | + +--- + +### metafile.url + +Get URL of current metafile. + +<<< ../code-examples/reference/metafile-url.js + +
example result + +<<< ../code-examples/reference/results/metafile-url.js +
+ +#### Returns + +| Type | Description | +|----------|:--------------| +| `string` | Metafile URL. | + +--- + +### metafile.projectUrl + +Get URL of the project to which the metafile belongs. + +<<< ../code-examples/reference/metafile-project-url.js + +
example result + +<<< ../code-examples/reference/results/metafile-project-url.js +
+ +#### Returns + +| Type | Description | +|----------|:-------------| +| `string` | Project URL. | + +--- + +### metafile.refresh(config?) + +Refresh the [metafile](../get-started/metafile.md). + +<<< ../code-examples/reference/metafile-refresh.js + +#### Parameters + +| Name | Type | Description | +|----------------------------------------------|-----------------------------------------------------------------|:----------------------| +| config | [`CreateAxiosDefaults`](https://axios-http.com/docs/req_config) | Axios request config. | + +#### Returns + +| Type | +|:----------------| +| Promise<`void`> | + +--- + +### metafile.switch(options, config?) + +Switch to a different [metafile](../get-started/metafile.md). + +<<< ../code-examples/reference/metafile-switch.js + +#### Parameters + +| Name | Type | Description | +|----------------------------------------------|-----------------------------------------------------------------|:----------------------| +| options | [`CdnClientOptions`](types.md#cdnclientoptions) | CDN client options. | +| config | [`CreateAxiosDefaults`](https://axios-http.com/docs/req_config) | Axios request config. | + +| Type | +|:----------------| +| Promise<`void`> | diff --git a/docs/reference/types.md b/docs/reference/types.md new file mode 100644 index 0000000..45b741c --- /dev/null +++ b/docs/reference/types.md @@ -0,0 +1,33 @@ +# TypeScript definitions + +## CdnClientOptions + +<<< ../../src/types/cdn-client-options.ts#typedef + +## CdnLocale + +<<< ../../src/types/cdn-locale.ts#typedef + +## CdnLocalesOptions + +<<< ../../src/types/cdn-locales-options.ts#typedef + +## CdnFetchOptions + +<<< ../../src/types/cdn-fetch-options.ts#typedef + +## CdnResponse + +<<< ../../src/types/cdn-response.ts#typedef + +## CdnFile + +<<< ../../src/types/cdn-file.ts#typedef + +## CdnFileLocale + +<<< ../../src/types/cdn-file-locale.ts#typedef + +## CdnFilesSearchOptions + +<<< ../../src/types/cdn-files-search-options.ts#typedef diff --git a/docs/sandbox/live-demo.md b/docs/sandbox/live-demo.md new file mode 100644 index 0000000..0098157 --- /dev/null +++ b/docs/sandbox/live-demo.md @@ -0,0 +1,31 @@ +# Live demo + +[//]: # (::: sandbox {template=vanilla}) + +[//]: # () +[//]: # (```js index.js) + +[//]: # (import { CdnClient } from '@localazy/cdn-client';) + +[//]: # () +[//]: # (const fetch = async () => {) + +[//]: # ( const cdn = await CdnClient.create({) + +[//]: # ( metafile: 'https://delivery.localazy.com/_a855374211039568660198b39c31/_e0.v2.json') + +[//]: # ( });) + +[//]: # () +[//]: # ( const response = await cdn.files({ only: cdn.metafile.files.first() })) + +[//]: # ( .locales({ only: 'en' })) + +[//]: # ( .fetch(); ) + +[//]: # (}) + +[//]: # (```) + +[//]: # () +[//]: # (:::) diff --git a/docs/usage/get-content.md b/docs/usage/get-content.md new file mode 100644 index 0000000..5766e50 --- /dev/null +++ b/docs/usage/get-content.md @@ -0,0 +1,103 @@ +--- +outline: [ 2, 3 ] +--- + +# Get content + +Once you have initialized the [CdnClient](../reference/client-api.md#constructor), you can get content of one or multiple files that are present in +the [metafile](../get-started/metafile.md). + +## Selecting data + +You can select the data you want by specifying the `files` and the `locales` parameters in the [`fetch()`](../reference/client-api.md#fetch-options) function. + +As the `files` parameter, you can pass single or multiple [`CdnFile`](../reference/types.md#cdnfile) objects, which are returned by the metafile content +functions [`metafile.files.list()`](../reference/client-api.md#metafile-files-list), [`metafile.files.filter()`](../reference/client-api.md#metafile-files-filter-options), [`metafile.files.find()`](../reference/client-api.md#metafile-files-find-options), [`metafile.files.first()`](../reference/client-api.md#metafile-files-first). +Alternatively, you can use the file id or an array of file ids. If none is provided, all files are fetched. + +As the `locales` parameter, you can pass a locale code or an array of locale codes. If none is provided, all locales are fetched. + +## Single file + +In following examples, a single file returned from [`metafile.files.first()`](../reference/client-api.md#metafile-files-first) is used to demonstrate the usage of the [`fetch()`](../reference/client-api.md#fetch-options) function. + +### Get single locale + +Get the locale keys for single file and single locale. + +<<< ../code-examples/usage/get-single-file-single-locale.js + +
example result + +<<< ../code-examples/usage/results/get-single-file-single-locale.js +
+ +### Get multiple locales + +Get the locale keys for single file and multiple locales. + +<<< ../code-examples/usage/get-single-file-multiple-locales.js + +
example result + +<<< ../code-examples/usage/results/get-single-file-multiple-locales.js +
+ +### Get all locales + +Get the locale keys for single file and all locales. + +<<< ../code-examples/usage/get-single-file-all-locales.js + +
example result + +<<< ../code-examples/usage/results/get-single-file-all-locales.js +
+ +## Multiple files + +### Get single locale + +Get the locale keys for multiple files and single locale. + +<<< ../code-examples/usage/get-multiple-files-single-locale.js + +
example result + +<<< ../code-examples/usage/results/get-multiple-files-single-locale.js +
+ +### Get multiple locales + +Get the locale keys for multiple files and multiple locales. + +<<< ../code-examples/usage/get-multiple-files-multiple-locales.js + +
example result + +<<< ../code-examples/usage/results/get-multiple-files-multiple-locales.js +
+ +### Get all locales + +Get the locale keys for multiple files and all locales. + +<<< ../code-examples/usage/get-multiple-files-all-locales.js + +
example result + +<<< ../code-examples/usage/results/get-multiple-files-all-locales.js +
+ +## All files content + +### Get all locales + +Get the locale keys for all files and all locales. + +<<< ../code-examples/usage/get-all-files-all-locales.js + +
example result + +<<< ../code-examples/usage/results/get-all-files-all-locales.js +
diff --git a/docs/usage/get-locales.md b/docs/usage/get-locales.md new file mode 100644 index 0000000..0cc8d50 --- /dev/null +++ b/docs/usage/get-locales.md @@ -0,0 +1,30 @@ +# Get locales + +Once you have initialized the [CdnClient](../reference/client-api.md#constructor), you can get the locales that are available in the [metafile](../get-started/metafile.md). + +## Get all locales + +<<< ../code-examples/usage/get-all-locales.js + +
example result + +<<< ../code-examples/usage/results/get-all-locales.js +
+ +## Get all locales except the base locale + +<<< ../code-examples/usage/get-all-locales-except-base-locale.js + +
example result + +<<< ../code-examples/usage/results/get-all-locales-except-base-locale.js +
+ +## Get base locale + +<<< ../code-examples/usage/get-base-locale.js + +
example result + +<<< ../code-examples/usage/results/get-base-locale.js +
diff --git a/docs/usage/metafile.md b/docs/usage/metafile.md new file mode 100644 index 0000000..b6d71eb --- /dev/null +++ b/docs/usage/metafile.md @@ -0,0 +1,27 @@ +# Usage + +## List all files from the metafile + +```javascript +cdn.metafile.files.list(); +``` + +
example result + +```javascript +[ + { + id: 'dfe5b84c1598c8c56b6f1a11efcd483bb3f417ea', + file: 'file.json', + path: '', + library: '', + module: '', + buildType: '', + productFlavors: [], + baseLocale: 'en', + metafileLocales: [ ... ] + } +] + +``` +
diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..a0a5c6b --- /dev/null +++ b/package-lock.json @@ -0,0 +1,10110 @@ +{ + "name": "@localazy/cdn-client", + "version": "1.0.0", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "@localazy/cdn-client", + "version": "1.0.0", + "license": "MIT", + "dependencies": { + "axios": "^1.6.7", + "lodash": "^4.17.21" + }, + "devDependencies": { + "@types/lodash": "^4.17.0", + "@types/node": "^20.11.26", + "@typescript-eslint/eslint-plugin": "^7.2.0", + "@typescript-eslint/parser": "^7.2.0", + "@vitest/coverage-v8": "^1.3.1", + "@vitest/ui": "^1.3.1", + "axios-mock-adapter": "^1.22.0", + "eslint": "^8.57.0", + "eslint-config-airbnb-base": "^15.0.0", + "eslint-config-airbnb-typescript": "^18.0.0", + "reexport": "^1.4.1", + "rollup-plugin-terser": "^7.0.2", + "typedoc": "^0.25.12", + "typedoc-plugin-markdown": "^3.17.1", + "typedoc-plugin-missing-exports": "^2.2.0", + "vite": "^5.1.6", + "vite-plugin-dts": "^3.7.3", + "vitest": "^1.3.1" + } + }, + "node_modules/@aashutoshrathi/word-wrap": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", + "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", + "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.5.tgz", + "integrity": "sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==", + "dev": true, + "dependencies": { + "@babel/highlight": "^7.23.4", + "chalk": "^2.4.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/code-frame/node_modules/ansi-styles": { + "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==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/code-frame/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/code-frame/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==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/@babel/code-frame/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==", + "dev": true + }, + "node_modules/@babel/code-frame/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@babel/code-frame/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/code-frame/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz", + "integrity": "sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", + "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.23.4.tgz", + "integrity": "sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==", + "dev": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.22.20", + "chalk": "^2.4.2", + "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight/node_modules/ansi-styles": { + "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==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "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/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==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/@babel/highlight/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==", + "dev": true + }, + "node_modules/@babel/highlight/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@babel/highlight/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/parser": { + "version": "7.23.9", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.9.tgz", + "integrity": "sha512-9tcKgqKbs3xGJ+NtKF2ndOBBLVwPjl1SHxPQkd36r3Dlirw3xWUeGaTbqr7uGZcTaxkVNwc+03SVP7aCdWrTlA==", + "dev": true, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/types": { + "version": "7.23.9", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.9.tgz", + "integrity": "sha512-dQjSq/7HaSjRM43FFGnv5keM2HsxpmyV1PfaSVm0nzzjwwTmjOe6J4bC8e3+pTEIgHaHj+1ZlLThRJ2auc/w1Q==", + "dev": true, + "dependencies": { + "@babel/helper-string-parser": "^7.23.4", + "@babel/helper-validator-identifier": "^7.22.20", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@bcoe/v8-coverage": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", + "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", + "dev": true + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.19.12.tgz", + "integrity": "sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.19.12.tgz", + "integrity": "sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.19.12.tgz", + "integrity": "sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.19.12.tgz", + "integrity": "sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.12.tgz", + "integrity": "sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.19.12.tgz", + "integrity": "sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.12.tgz", + "integrity": "sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.19.12.tgz", + "integrity": "sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.19.12.tgz", + "integrity": "sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.19.12.tgz", + "integrity": "sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.19.12.tgz", + "integrity": "sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.19.12.tgz", + "integrity": "sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.19.12.tgz", + "integrity": "sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.19.12.tgz", + "integrity": "sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.19.12.tgz", + "integrity": "sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.19.12.tgz", + "integrity": "sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.12.tgz", + "integrity": "sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.19.12.tgz", + "integrity": "sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.19.12.tgz", + "integrity": "sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.19.12.tgz", + "integrity": "sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.19.12.tgz", + "integrity": "sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.19.12.tgz", + "integrity": "sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.12.tgz", + "integrity": "sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", + "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz", + "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==", + "dev": true, + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", + "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", + "dev": true, + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.6.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/eslintrc/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/@eslint/eslintrc/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/@eslint/js": { + "version": "8.57.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz", + "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.11.14", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", + "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", + "dev": true, + "dependencies": { + "@humanwhocodes/object-schema": "^2.0.2", + "debug": "^4.3.1", + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/config-array/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/@humanwhocodes/config-array/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.2.tgz", + "integrity": "sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==", + "dev": true + }, + "node_modules/@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/schemas": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", + "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", + "dev": true, + "dependencies": { + "@sinclair/typebox": "^0.27.8" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", + "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", + "dev": true, + "dependencies": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", + "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.5.tgz", + "integrity": "sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", + "dev": true + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.22", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.22.tgz", + "integrity": "sha512-Wf963MzWtA2sjrNt+g18IAln9lKnlRp+K2eH4jjIoF1wYeq3aMREpG09xhlhdzS0EjwU7qmUJYangWa+151vZw==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@microsoft/api-extractor": { + "version": "7.39.0", + "resolved": "https://registry.npmjs.org/@microsoft/api-extractor/-/api-extractor-7.39.0.tgz", + "integrity": "sha512-PuXxzadgnvp+wdeZFPonssRAj/EW4Gm4s75TXzPk09h3wJ8RS3x7typf95B4vwZRrPTQBGopdUl+/vHvlPdAcg==", + "dev": true, + "dependencies": { + "@microsoft/api-extractor-model": "7.28.3", + "@microsoft/tsdoc": "0.14.2", + "@microsoft/tsdoc-config": "~0.16.1", + "@rushstack/node-core-library": "3.62.0", + "@rushstack/rig-package": "0.5.1", + "@rushstack/ts-command-line": "4.17.1", + "colors": "~1.2.1", + "lodash": "~4.17.15", + "resolve": "~1.22.1", + "semver": "~7.5.4", + "source-map": "~0.6.1", + "typescript": "5.3.3" + }, + "bin": { + "api-extractor": "bin/api-extractor" + } + }, + "node_modules/@microsoft/api-extractor-model": { + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@microsoft/api-extractor-model/-/api-extractor-model-7.28.3.tgz", + "integrity": "sha512-wT/kB2oDbdZXITyDh2SQLzaWwTOFbV326fP0pUwNW00WeliARs0qjmXBWmGWardEzp2U3/axkO3Lboqun6vrig==", + "dev": true, + "dependencies": { + "@microsoft/tsdoc": "0.14.2", + "@microsoft/tsdoc-config": "~0.16.1", + "@rushstack/node-core-library": "3.62.0" + } + }, + "node_modules/@microsoft/tsdoc": { + "version": "0.14.2", + "resolved": "https://registry.npmjs.org/@microsoft/tsdoc/-/tsdoc-0.14.2.tgz", + "integrity": "sha512-9b8mPpKrfeGRuhFH5iO1iwCLeIIsV6+H1sRfxbkoGXIyQE2BTsPd9zqSqQJ+pv5sJ/hT5M1zvOFL02MnEezFug==", + "dev": true + }, + "node_modules/@microsoft/tsdoc-config": { + "version": "0.16.2", + "resolved": "https://registry.npmjs.org/@microsoft/tsdoc-config/-/tsdoc-config-0.16.2.tgz", + "integrity": "sha512-OGiIzzoBLgWWR0UdRJX98oYO+XKGf7tiK4Zk6tQ/E4IJqGCe7dvkTvgDZV5cFJUzLGDOjeAXrnZoA6QkVySuxw==", + "dev": true, + "dependencies": { + "@microsoft/tsdoc": "0.14.2", + "ajv": "~6.12.6", + "jju": "~1.4.0", + "resolve": "~1.19.0" + } + }, + "node_modules/@microsoft/tsdoc-config/node_modules/resolve": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.19.0.tgz", + "integrity": "sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg==", + "dev": true, + "dependencies": { + "is-core-module": "^2.1.0", + "path-parse": "^1.0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@polka/url": { + "version": "1.0.0-next.25", + "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.25.tgz", + "integrity": "sha512-j7P6Rgr3mmtdkeDGTe0E/aYyWEWVtc5yFXtHCRHs28/jptDEWfaVOc5T7cblqy1XKPPfCxJc/8DwQ5YgLOZOVQ==", + "dev": true + }, + "node_modules/@rollup/pluginutils": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.1.0.tgz", + "integrity": "sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g==", + "dev": true, + "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==", + "dev": true + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.9.6.tgz", + "integrity": "sha512-MVNXSSYN6QXOulbHpLMKYi60ppyO13W9my1qogeiAqtjb2yR4LSmfU2+POvDkLzhjYLXz9Rf9+9a3zFHW1Lecg==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.9.6.tgz", + "integrity": "sha512-T14aNLpqJ5wzKNf5jEDpv5zgyIqcpn1MlwCrUXLrwoADr2RkWA0vOWP4XxbO9aiO3dvMCQICZdKeDrFl7UMClw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.9.6.tgz", + "integrity": "sha512-CqNNAyhRkTbo8VVZ5R85X73H3R5NX9ONnKbXuHisGWC0qRbTTxnF1U4V9NafzJbgGM0sHZpdO83pLPzq8uOZFw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.9.6.tgz", + "integrity": "sha512-zRDtdJuRvA1dc9Mp6BWYqAsU5oeLixdfUvkTHuiYOHwqYuQ4YgSmi6+/lPvSsqc/I0Omw3DdICx4Tfacdzmhog==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.9.6.tgz", + "integrity": "sha512-oNk8YXDDnNyG4qlNb6is1ojTOGL/tRhbbKeE/YuccItzerEZT68Z9gHrY3ROh7axDc974+zYAPxK5SH0j/G+QQ==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.9.6.tgz", + "integrity": "sha512-Z3O60yxPtuCYobrtzjo0wlmvDdx2qZfeAWTyfOjEDqd08kthDKexLpV97KfAeUXPosENKd8uyJMRDfFMxcYkDQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.9.6.tgz", + "integrity": "sha512-gpiG0qQJNdYEVad+1iAsGAbgAnZ8j07FapmnIAQgODKcOTjLEWM9sRb+MbQyVsYCnA0Im6M6QIq6ax7liws6eQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.9.6.tgz", + "integrity": "sha512-+uCOcvVmFUYvVDr27aiyun9WgZk0tXe7ThuzoUTAukZJOwS5MrGbmSlNOhx1j80GdpqbOty05XqSl5w4dQvcOA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.9.6.tgz", + "integrity": "sha512-HUNqM32dGzfBKuaDUBqFB7tP6VMN74eLZ33Q9Y1TBqRDn+qDonkAUyKWwF9BR9unV7QUzffLnz9GrnKvMqC/fw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.9.6.tgz", + "integrity": "sha512-ch7M+9Tr5R4FK40FHQk8VnML0Szi2KRujUgHXd/HjuH9ifH72GUmw6lStZBo3c3GB82vHa0ZoUfjfcM7JiiMrQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.9.6.tgz", + "integrity": "sha512-VD6qnR99dhmTQ1mJhIzXsRcTBvTjbfbGGwKAHcu+52cVl15AC/kplkhxzW/uT0Xl62Y/meBKDZvoJSJN+vTeGA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.9.6.tgz", + "integrity": "sha512-J9AFDq/xiRI58eR2NIDfyVmTYGyIZmRcvcAoJ48oDld/NTR8wyiPUu2X/v1navJ+N/FGg68LEbX3Ejd6l8B7MQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.9.6.tgz", + "integrity": "sha512-jqzNLhNDvIZOrt69Ce4UjGRpXJBzhUBzawMwnaDAwyHriki3XollsewxWzOzz+4yOFDkuJHtTsZFwMxhYJWmLQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rushstack/node-core-library": { + "version": "3.62.0", + "resolved": "https://registry.npmjs.org/@rushstack/node-core-library/-/node-core-library-3.62.0.tgz", + "integrity": "sha512-88aJn2h8UpSvdwuDXBv1/v1heM6GnBf3RjEy6ZPP7UnzHNCqOHA2Ut+ScYUbXcqIdfew9JlTAe3g+cnX9xQ/Aw==", + "dev": true, + "dependencies": { + "colors": "~1.2.1", + "fs-extra": "~7.0.1", + "import-lazy": "~4.0.0", + "jju": "~1.4.0", + "resolve": "~1.22.1", + "semver": "~7.5.4", + "z-schema": "~5.0.2" + }, + "peerDependencies": { + "@types/node": "*" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@rushstack/rig-package": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/@rushstack/rig-package/-/rig-package-0.5.1.tgz", + "integrity": "sha512-pXRYSe29TjRw7rqxD4WS3HN/sRSbfr+tJs4a9uuaSIBAITbUggygdhuG0VrO0EO+QqH91GhYMN4S6KRtOEmGVA==", + "dev": true, + "dependencies": { + "resolve": "~1.22.1", + "strip-json-comments": "~3.1.1" + } + }, + "node_modules/@rushstack/ts-command-line": { + "version": "4.17.1", + "resolved": "https://registry.npmjs.org/@rushstack/ts-command-line/-/ts-command-line-4.17.1.tgz", + "integrity": "sha512-2jweO1O57BYP5qdBGl6apJLB+aRIn5ccIRTPDyULh0KMwVzFqWtw6IZWt1qtUoZD/pD2RNkIOosH6Cq45rIYeg==", + "dev": true, + "dependencies": { + "@types/argparse": "1.0.38", + "argparse": "~1.0.9", + "colors": "~1.2.1", + "string-argv": "~0.3.1" + } + }, + "node_modules/@rushstack/ts-command-line/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/@sinclair/typebox": { + "version": "0.27.8", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", + "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", + "dev": true + }, + "node_modules/@types/argparse": { + "version": "1.0.38", + "resolved": "https://registry.npmjs.org/@types/argparse/-/argparse-1.0.38.tgz", + "integrity": "sha512-ebDJ9b0e702Yr7pWgB0jzm+CX4Srzz8RcXtLJDJB+BSccqMa36uyH/zUsSYao5+BD1ytv3k3rPYCq4mAE1hsXA==", + "dev": true + }, + "node_modules/@types/estree": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", + "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", + "dev": true + }, + "node_modules/@types/istanbul-lib-coverage": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", + "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", + "dev": true + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true + }, + "node_modules/@types/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", + "dev": true, + "peer": true + }, + "node_modules/@types/lodash": { + "version": "4.17.0", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.0.tgz", + "integrity": "sha512-t7dhREVv6dbNj0q17X12j7yDG4bD/DHYX7o5/DbDxobP0HnGPgpRz2Ej77aL7TZT3DSw13fqUTj8J4mMnqa7WA==", + "dev": true + }, + "node_modules/@types/node": { + "version": "20.11.26", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.26.tgz", + "integrity": "sha512-YwOMmyhNnAWijOBQweOJnQPl068Oqd4K3OFbTc6AHJwzweUwwWG3GIFY74OKks2PJUDkQPeddOQES9mLn1CTEQ==", + "dev": true, + "dependencies": { + "undici-types": "~5.26.4" + } + }, + "node_modules/@types/semver": { + "version": "7.5.8", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.8.tgz", + "integrity": "sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==", + "dev": true + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.2.0.tgz", + "integrity": "sha512-mdekAHOqS9UjlmyF/LSs6AIEvfceV749GFxoBAjwAv0nkevfKHWQFDMcBZWUiIC5ft6ePWivXoS36aKQ0Cy3sw==", + "dev": true, + "dependencies": { + "@eslint-community/regexpp": "^4.5.1", + "@typescript-eslint/scope-manager": "7.2.0", + "@typescript-eslint/type-utils": "7.2.0", + "@typescript-eslint/utils": "7.2.0", + "@typescript-eslint/visitor-keys": "7.2.0", + "debug": "^4.3.4", + "graphemer": "^1.4.0", + "ignore": "^5.2.4", + "natural-compare": "^1.4.0", + "semver": "^7.5.4", + "ts-api-utils": "^1.0.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^7.0.0", + "eslint": "^8.56.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.2.0.tgz", + "integrity": "sha512-5FKsVcHTk6TafQKQbuIVkXq58Fnbkd2wDL4LB7AURN7RUOu1utVP+G8+6u3ZhEroW3DF6hyo3ZEXxgKgp4KeCg==", + "dev": true, + "dependencies": { + "@typescript-eslint/scope-manager": "7.2.0", + "@typescript-eslint/types": "7.2.0", + "@typescript-eslint/typescript-estree": "7.2.0", + "@typescript-eslint/visitor-keys": "7.2.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.56.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.2.0.tgz", + "integrity": "sha512-Qh976RbQM/fYtjx9hs4XkayYujB/aPwglw2choHmf3zBjB4qOywWSdt9+KLRdHubGcoSwBnXUH2sR3hkyaERRg==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "7.2.0", + "@typescript-eslint/visitor-keys": "7.2.0" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.2.0.tgz", + "integrity": "sha512-xHi51adBHo9O9330J8GQYQwrKBqbIPJGZZVQTHHmy200hvkLZFWJIFtAG/7IYTWUyun6DE6w5InDReePJYJlJA==", + "dev": true, + "dependencies": { + "@typescript-eslint/typescript-estree": "7.2.0", + "@typescript-eslint/utils": "7.2.0", + "debug": "^4.3.4", + "ts-api-utils": "^1.0.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.56.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/types": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.2.0.tgz", + "integrity": "sha512-XFtUHPI/abFhm4cbCDc5Ykc8npOKBSJePY3a3s+lwumt7XWJuzP5cZcfZ610MIPHjQjNsOLlYK8ASPaNG8UiyA==", + "dev": true, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.2.0.tgz", + "integrity": "sha512-cyxS5WQQCoBwSakpMrvMXuMDEbhOo9bNHHrNcEWis6XHx6KF518tkF1wBvKIn/tpq5ZpUYK7Bdklu8qY0MsFIA==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "7.2.0", + "@typescript-eslint/visitor-keys": "7.2.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "minimatch": "9.0.3", + "semver": "^7.5.4", + "ts-api-utils": "^1.0.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/utils": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.2.0.tgz", + "integrity": "sha512-YfHpnMAGb1Eekpm3XRK8hcMwGLGsnT6L+7b2XyRv6ouDuJU1tZir1GS2i0+VXRatMwSI1/UfcyPe53ADkU+IuA==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.4.0", + "@types/json-schema": "^7.0.12", + "@types/semver": "^7.5.0", + "@typescript-eslint/scope-manager": "7.2.0", + "@typescript-eslint/types": "7.2.0", + "@typescript-eslint/typescript-estree": "7.2.0", + "semver": "^7.5.4" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.56.0" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.2.0.tgz", + "integrity": "sha512-c6EIQRHhcpl6+tO8EMR+kjkkV+ugUNXOmeASA1rlzkd8EPIriavpWoiEz1HR/VLhbVIdhqnV6E7JZm00cBDx2A==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "7.2.0", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@ungap/structured-clone": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", + "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", + "dev": true + }, + "node_modules/@vitest/coverage-v8": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-1.3.1.tgz", + "integrity": "sha512-UuBnkSJUNE9rdHjDCPyJ4fYuMkoMtnghes1XohYa4At0MS3OQSAo97FrbwSLRshYsXThMZy1+ybD/byK5llyIg==", + "dev": true, + "dependencies": { + "@ampproject/remapping": "^2.2.1", + "@bcoe/v8-coverage": "^0.2.3", + "debug": "^4.3.4", + "istanbul-lib-coverage": "^3.2.2", + "istanbul-lib-report": "^3.0.1", + "istanbul-lib-source-maps": "^4.0.1", + "istanbul-reports": "^3.1.6", + "magic-string": "^0.30.5", + "magicast": "^0.3.3", + "picocolors": "^1.0.0", + "std-env": "^3.5.0", + "test-exclude": "^6.0.0", + "v8-to-istanbul": "^9.2.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "vitest": "1.3.1" + } + }, + "node_modules/@vitest/expect": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-1.3.1.tgz", + "integrity": "sha512-xofQFwIzfdmLLlHa6ag0dPV8YsnKOCP1KdAeVVh34vSjN2dcUiXYCD9htu/9eM7t8Xln4v03U9HLxLpPlsXdZw==", + "dev": true, + "dependencies": { + "@vitest/spy": "1.3.1", + "@vitest/utils": "1.3.1", + "chai": "^4.3.10" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/runner": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-1.3.1.tgz", + "integrity": "sha512-5FzF9c3jG/z5bgCnjr8j9LNq/9OxV2uEBAITOXfoe3rdZJTdO7jzThth7FXv/6b+kdY65tpRQB7WaKhNZwX+Kg==", + "dev": true, + "dependencies": { + "@vitest/utils": "1.3.1", + "p-limit": "^5.0.0", + "pathe": "^1.1.1" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/runner/node_modules/p-limit": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-5.0.0.tgz", + "integrity": "sha512-/Eaoq+QyLSiXQ4lyYV23f14mZRQcXnxfHrN0vCai+ak9G0pp9iEQukIIZq5NccEvwRB8PUnZT0KsOoDCINS1qQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^1.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@vitest/runner/node_modules/yocto-queue": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz", + "integrity": "sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==", + "dev": true, + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@vitest/snapshot": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-1.3.1.tgz", + "integrity": "sha512-EF++BZbt6RZmOlE3SuTPu/NfwBF6q4ABS37HHXzs2LUVPBLx2QoY/K0fKpRChSo8eLiuxcbCVfqKgx/dplCDuQ==", + "dev": true, + "dependencies": { + "magic-string": "^0.30.5", + "pathe": "^1.1.1", + "pretty-format": "^29.7.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/spy": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-1.3.1.tgz", + "integrity": "sha512-xAcW+S099ylC9VLU7eZfdT9myV67Nor9w9zhf0mGCYJSO+zM2839tOeROTdikOi/8Qeusffvxb/MyBSOja1Uig==", + "dev": true, + "dependencies": { + "tinyspy": "^2.2.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/ui": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@vitest/ui/-/ui-1.3.1.tgz", + "integrity": "sha512-2UrFLJ62c/eJGPHcclstMKlAR7E1WB1ITe1isuowEPJJHi3HfqofvsUqQ1cGrEF7kitG1DJuwURUA3HLDtQkXA==", + "dev": true, + "dependencies": { + "@vitest/utils": "1.3.1", + "fast-glob": "^3.3.2", + "fflate": "^0.8.1", + "flatted": "^3.2.9", + "pathe": "^1.1.1", + "picocolors": "^1.0.0", + "sirv": "^2.0.4" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "vitest": "1.3.1" + } + }, + "node_modules/@vitest/utils": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-1.3.1.tgz", + "integrity": "sha512-d3Waie/299qqRyHTm2DjADeTaNdNSVsnwHPWrs20JMpjh6eiVq7ggggweO8rc4arhf6rRkWuHKwvxGvejUXZZQ==", + "dev": true, + "dependencies": { + "diff-sequences": "^29.6.3", + "estree-walker": "^3.0.3", + "loupe": "^2.3.7", + "pretty-format": "^29.7.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@volar/language-core": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@volar/language-core/-/language-core-1.11.1.tgz", + "integrity": "sha512-dOcNn3i9GgZAcJt43wuaEykSluAuOkQgzni1cuxLxTV0nJKanQztp7FxyswdRILaKH+P2XZMPRp2S4MV/pElCw==", + "dev": true, + "dependencies": { + "@volar/source-map": "1.11.1" + } + }, + "node_modules/@volar/source-map": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@volar/source-map/-/source-map-1.11.1.tgz", + "integrity": "sha512-hJnOnwZ4+WT5iupLRnuzbULZ42L7BWWPMmruzwtLhJfpDVoZLjNBxHDi2sY2bgZXCKlpU5XcsMFoYrsQmPhfZg==", + "dev": true, + "dependencies": { + "muggle-string": "^0.3.1" + } + }, + "node_modules/@volar/typescript": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@volar/typescript/-/typescript-1.11.1.tgz", + "integrity": "sha512-iU+t2mas/4lYierSnoFOeRFQUhAEMgsFuQxoxvwn5EdQopw43j+J27a4lt9LMInx1gLJBC6qL14WYGlgymaSMQ==", + "dev": true, + "dependencies": { + "@volar/language-core": "1.11.1", + "path-browserify": "^1.0.1" + } + }, + "node_modules/@vue/compiler-core": { + "version": "3.4.15", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.4.15.tgz", + "integrity": "sha512-XcJQVOaxTKCnth1vCxEChteGuwG6wqnUHxAm1DO3gCz0+uXKaJNx8/digSz4dLALCy8n2lKq24jSUs8segoqIw==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.23.6", + "@vue/shared": "3.4.15", + "entities": "^4.5.0", + "estree-walker": "^2.0.2", + "source-map-js": "^1.0.2" + } + }, + "node_modules/@vue/compiler-core/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==", + "dev": true + }, + "node_modules/@vue/compiler-dom": { + "version": "3.4.15", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.4.15.tgz", + "integrity": "sha512-wox0aasVV74zoXyblarOM3AZQz/Z+OunYcIHe1OsGclCHt8RsRm04DObjefaI82u6XDzv+qGWZ24tIsRAIi5MQ==", + "dev": true, + "dependencies": { + "@vue/compiler-core": "3.4.15", + "@vue/shared": "3.4.15" + } + }, + "node_modules/@vue/language-core": { + "version": "1.8.27", + "resolved": "https://registry.npmjs.org/@vue/language-core/-/language-core-1.8.27.tgz", + "integrity": "sha512-L8Kc27VdQserNaCUNiSFdDl9LWT24ly8Hpwf1ECy3aFb9m6bDhBGQYOujDm21N7EW3moKIOKEanQwe1q5BK+mA==", + "dev": true, + "dependencies": { + "@volar/language-core": "~1.11.1", + "@volar/source-map": "~1.11.1", + "@vue/compiler-dom": "^3.3.0", + "@vue/shared": "^3.3.0", + "computeds": "^0.0.1", + "minimatch": "^9.0.3", + "muggle-string": "^0.3.1", + "path-browserify": "^1.0.1", + "vue-template-compiler": "^2.7.14" + }, + "peerDependencies": { + "typescript": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@vue/shared": { + "version": "3.4.15", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.4.15.tgz", + "integrity": "sha512-KzfPTxVaWfB+eGcGdbSf4CWdaXcGDqckoeXUh7SB3fZdEtzPCK2Vq9B/lRRL3yutax/LWITz+SwvgyOxz5V75g==", + "dev": true + }, + "node_modules/acorn": { + "version": "8.11.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", + "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/acorn-walk": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.2.tgz", + "integrity": "sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "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==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-sequence-parser": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ansi-sequence-parser/-/ansi-sequence-parser-1.1.1.tgz", + "integrity": "sha512-vJXt3yiaUL4UU546s3rPXlsry/RnM730G1+HkpKE012AN0sx1eOrxSu95oKDIonskeLTijMgqWZ3uDEe3NFvyg==", + "dev": true + }, + "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==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/array-buffer-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz", + "integrity": "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.5", + "is-array-buffer": "^3.0.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-includes": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.7.tgz", + "integrity": "sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==", + "dev": true, + "peer": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "get-intrinsic": "^1.2.1", + "is-string": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/array.prototype.findlastindex": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.3.tgz", + "integrity": "sha512-LzLoiOMAxvy+Gd3BAq3B7VeIgPdo+Q8hthvKtXybMvRV0jrXfJM/t8mw7nNlpEcVlVUnCnM2KSX4XU5HmpodOA==", + "dev": true, + "peer": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0", + "get-intrinsic": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flat": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz", + "integrity": "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==", + "dev": true, + "peer": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flatmap": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz", + "integrity": "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==", + "dev": true, + "peer": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/arraybuffer.prototype.slice": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.2.tgz", + "integrity": "sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw==", + "dev": true, + "dependencies": { + "array-buffer-byte-length": "^1.0.0", + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "get-intrinsic": "^1.2.1", + "is-array-buffer": "^3.0.2", + "is-shared-array-buffer": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/assertion-error": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", + "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + }, + "node_modules/available-typed-arrays": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.6.tgz", + "integrity": "sha512-j1QzY8iPNPG4o4xmO3ptzpRxTciqD3MgEHtifP/YnJpIo58Xu+ne4BejlbkuaLfXn/nz6HFiw29bLpj2PNMdGg==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/axios": { + "version": "1.6.7", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.7.tgz", + "integrity": "sha512-/hDJGff6/c7u0hDkvkGxR/oy6CbCs8ziCsC7SqmhjfozqiJGc8Z11wrv9z9lYfY4K8l+H9TpjcMDX0xOZmx+RA==", + "dependencies": { + "follow-redirects": "^1.15.4", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } + }, + "node_modules/axios-mock-adapter": { + "version": "1.22.0", + "resolved": "https://registry.npmjs.org/axios-mock-adapter/-/axios-mock-adapter-1.22.0.tgz", + "integrity": "sha512-dmI0KbkyAhntUR05YY96qg2H6gg0XMl2+qTW0xmYg6Up+BFBAJYRLROMXRdDEL06/Wqwa0TJThAYvFtSFdRCZw==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.3", + "is-buffer": "^2.0.5" + }, + "peerDependencies": { + "axios": ">= 0.17.0" + } + }, + "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==", + "dev": true + }, + "node_modules/binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "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==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "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==", + "dev": true + }, + "node_modules/cac": { + "version": "6.7.14", + "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz", + "integrity": "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/call-bind": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.5.tgz", + "integrity": "sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.1", + "set-function-length": "^1.1.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/chai": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.4.1.tgz", + "integrity": "sha512-13sOfMv2+DWduEU+/xbun3LScLoqN17nBeTLUsmDfKdoiC1fr0n9PU4guu4AhRcOVFk/sW8LyZWHuhWtQZiF+g==", + "dev": true, + "dependencies": { + "assertion-error": "^1.1.0", + "check-error": "^1.0.3", + "deep-eql": "^4.1.3", + "get-func-name": "^2.0.2", + "loupe": "^2.3.6", + "pathval": "^1.1.1", + "type-detect": "^4.0.8" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/check-error": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.3.tgz", + "integrity": "sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==", + "dev": true, + "dependencies": { + "get-func-name": "^2.0.2" + }, + "engines": { + "node": "*" + } + }, + "node_modules/chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chokidar/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "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==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "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==", + "dev": true + }, + "node_modules/colors": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.2.5.tgz", + "integrity": "sha512-erNRLao/Y3Fv54qUa0LBB+//Uf3YwMUmdJinN20yMXm9zdKKqH9wt7R9IIVZ+K7ShzfpLV/Zg8+VyrBJYB4lpg==", + "dev": true, + "engines": { + "node": ">=0.1.90" + } + }, + "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==", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/commander": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", + "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", + "dev": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/computeds": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/computeds/-/computeds-0.0.1.tgz", + "integrity": "sha512-7CEBgcMjVmitjYo5q8JTJVra6X5mQ20uTThdK+0kR7UEaDrAWEQcRiBtWJzga4eRpP6afNwwLsX2SET2JhVB1Q==", + "dev": true + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "node_modules/confusing-browser-globals": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.11.tgz", + "integrity": "sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==", + "dev": true + }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/de-indent": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/de-indent/-/de-indent-1.0.2.tgz", + "integrity": "sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==", + "dev": true + }, + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/deep-eql": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.3.tgz", + "integrity": "sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==", + "dev": true, + "dependencies": { + "type-detect": "^4.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, + "node_modules/define-data-property": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.1.tgz", + "integrity": "sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.2.1", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "dev": true, + "dependencies": { + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/diff-sequences": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", + "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", + "dev": true, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "dev": true, + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/es-abstract": { + "version": "1.22.3", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.3.tgz", + "integrity": "sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA==", + "dev": true, + "dependencies": { + "array-buffer-byte-length": "^1.0.0", + "arraybuffer.prototype.slice": "^1.0.2", + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.5", + "es-set-tostringtag": "^2.0.1", + "es-to-primitive": "^1.2.1", + "function.prototype.name": "^1.1.6", + "get-intrinsic": "^1.2.2", + "get-symbol-description": "^1.0.0", + "globalthis": "^1.0.3", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0", + "internal-slot": "^1.0.5", + "is-array-buffer": "^3.0.2", + "is-callable": "^1.2.7", + "is-negative-zero": "^2.0.2", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "is-string": "^1.0.7", + "is-typed-array": "^1.1.12", + "is-weakref": "^1.0.2", + "object-inspect": "^1.13.1", + "object-keys": "^1.1.1", + "object.assign": "^4.1.4", + "regexp.prototype.flags": "^1.5.1", + "safe-array-concat": "^1.0.1", + "safe-regex-test": "^1.0.0", + "string.prototype.trim": "^1.2.8", + "string.prototype.trimend": "^1.0.7", + "string.prototype.trimstart": "^1.0.7", + "typed-array-buffer": "^1.0.0", + "typed-array-byte-length": "^1.0.0", + "typed-array-byte-offset": "^1.0.0", + "typed-array-length": "^1.0.4", + "unbox-primitive": "^1.0.2", + "which-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-errors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.0.0.tgz", + "integrity": "sha512-yHV74THqMJUyFKkHyN7hyENcEZM3Dj2a2IrdClY+IT4BFQHkIVwlh8s6uZfjsFydMdNHv0F5mWgAA3ajFbsvVQ==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.2.tgz", + "integrity": "sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.2.2", + "has-tostringtag": "^1.0.0", + "hasown": "^2.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-shim-unscopables": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz", + "integrity": "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==", + "dev": true, + "peer": true, + "dependencies": { + "hasown": "^2.0.0" + } + }, + "node_modules/es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "dependencies": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/esbuild": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.19.12.tgz", + "integrity": "sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.19.12", + "@esbuild/android-arm": "0.19.12", + "@esbuild/android-arm64": "0.19.12", + "@esbuild/android-x64": "0.19.12", + "@esbuild/darwin-arm64": "0.19.12", + "@esbuild/darwin-x64": "0.19.12", + "@esbuild/freebsd-arm64": "0.19.12", + "@esbuild/freebsd-x64": "0.19.12", + "@esbuild/linux-arm": "0.19.12", + "@esbuild/linux-arm64": "0.19.12", + "@esbuild/linux-ia32": "0.19.12", + "@esbuild/linux-loong64": "0.19.12", + "@esbuild/linux-mips64el": "0.19.12", + "@esbuild/linux-ppc64": "0.19.12", + "@esbuild/linux-riscv64": "0.19.12", + "@esbuild/linux-s390x": "0.19.12", + "@esbuild/linux-x64": "0.19.12", + "@esbuild/netbsd-x64": "0.19.12", + "@esbuild/openbsd-x64": "0.19.12", + "@esbuild/sunos-x64": "0.19.12", + "@esbuild/win32-arm64": "0.19.12", + "@esbuild/win32-ia32": "0.19.12", + "@esbuild/win32-x64": "0.19.12" + } + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint": { + "version": "8.57.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz", + "integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.4", + "@eslint/js": "8.57.0", + "@humanwhocodes/config-array": "^0.11.14", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "@ungap/structured-clone": "^1.2.0", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.2.2", + "eslint-visitor-keys": "^3.4.3", + "espree": "^9.6.1", + "esquery": "^1.4.2", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-config-airbnb-base": { + "version": "15.0.0", + "resolved": "https://registry.npmjs.org/eslint-config-airbnb-base/-/eslint-config-airbnb-base-15.0.0.tgz", + "integrity": "sha512-xaX3z4ZZIcFLvh2oUNvcX5oEofXda7giYmuplVxoOg5A7EXJMrUyqRgR+mhDhPK8LZ4PttFOBvCYDbX3sUoUig==", + "dev": true, + "dependencies": { + "confusing-browser-globals": "^1.0.10", + "object.assign": "^4.1.2", + "object.entries": "^1.1.5", + "semver": "^6.3.0" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + }, + "peerDependencies": { + "eslint": "^7.32.0 || ^8.2.0", + "eslint-plugin-import": "^2.25.2" + } + }, + "node_modules/eslint-config-airbnb-base/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/eslint-config-airbnb-typescript": { + "version": "18.0.0", + "resolved": "https://registry.npmjs.org/eslint-config-airbnb-typescript/-/eslint-config-airbnb-typescript-18.0.0.tgz", + "integrity": "sha512-oc+Lxzgzsu8FQyFVa4QFaVKiitTYiiW3frB9KYW5OWdPrqFc7FzxgB20hP4cHMlr+MBzGcLl3jnCOVOydL9mIg==", + "dev": true, + "dependencies": { + "eslint-config-airbnb-base": "^15.0.0" + }, + "peerDependencies": { + "@typescript-eslint/eslint-plugin": "^7.0.0", + "@typescript-eslint/parser": "^7.0.0", + "eslint": "^8.56.0" + } + }, + "node_modules/eslint-import-resolver-node": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", + "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", + "dev": true, + "peer": true, + "dependencies": { + "debug": "^3.2.7", + "is-core-module": "^2.13.0", + "resolve": "^1.22.4" + } + }, + "node_modules/eslint-import-resolver-node/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "peer": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-module-utils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz", + "integrity": "sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==", + "dev": true, + "peer": true, + "dependencies": { + "debug": "^3.2.7" + }, + "engines": { + "node": ">=4" + }, + "peerDependenciesMeta": { + "eslint": { + "optional": true + } + } + }, + "node_modules/eslint-module-utils/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "peer": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-plugin-import": { + "version": "2.29.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.29.1.tgz", + "integrity": "sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==", + "dev": true, + "peer": true, + "dependencies": { + "array-includes": "^3.1.7", + "array.prototype.findlastindex": "^1.2.3", + "array.prototype.flat": "^1.3.2", + "array.prototype.flatmap": "^1.3.2", + "debug": "^3.2.7", + "doctrine": "^2.1.0", + "eslint-import-resolver-node": "^0.3.9", + "eslint-module-utils": "^2.8.0", + "hasown": "^2.0.0", + "is-core-module": "^2.13.1", + "is-glob": "^4.0.3", + "minimatch": "^3.1.2", + "object.fromentries": "^2.0.7", + "object.groupby": "^1.0.1", + "object.values": "^1.1.7", + "semver": "^6.3.1", + "tsconfig-paths": "^3.15.0" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" + } + }, + "node_modules/eslint-plugin-import/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "peer": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/eslint-plugin-import/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "peer": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-plugin-import/node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "peer": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint-plugin-import/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "peer": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/eslint-plugin-import/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "peer": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/eslint-scope": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/eslint/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/espree": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "dev": true, + "dependencies": { + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esquery": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", + "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", + "dev": true, + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estree-walker": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "dev": true, + "dependencies": { + "@types/estree": "^1.0.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/execa": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz", + "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^8.0.1", + "human-signals": "^5.0.0", + "is-stream": "^3.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^5.1.0", + "onetime": "^6.0.0", + "signal-exit": "^4.1.0", + "strip-final-newline": "^3.0.0" + }, + "engines": { + "node": ">=16.17" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "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==", + "dev": true + }, + "node_modules/fast-glob": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true + }, + "node_modules/fastq": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.0.tgz", + "integrity": "sha512-zGygtijUMT7jnk3h26kUms3BkSDp4IfIKjmnqI2tvx6nuBfiF1UqOxbnLfzdv+apBy+53oaImsKtMw/xYbW+1w==", + "dev": true, + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/fflate": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/fflate/-/fflate-0.8.2.tgz", + "integrity": "sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A==", + "dev": true + }, + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat-cache": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", + "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", + "dev": true, + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.3", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/flatted": { + "version": "3.2.9", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.9.tgz", + "integrity": "sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==", + "dev": true + }, + "node_modules/follow-redirects": { + "version": "1.15.5", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.5.tgz", + "integrity": "sha512-vSFWUON1B+yAw1VN4xMfxgn5fTUiaOzAJCKBwIIgT/+7CuGy9+r+5gITvP62j3RmaD5Ph65UaERdOSRGUzZtgw==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "dev": true, + "dependencies": { + "is-callable": "^1.1.3" + } + }, + "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==", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fs-extra": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", + "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/function.prototype.name": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", + "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "functions-have-names": "^1.2.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-func-name": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz", + "integrity": "sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.3.tgz", + "integrity": "sha512-JIcZczvcMVE7AUOP+X72bh8HqHBRxFdz5PDHYtNG/lE3yk9b3KZBJlwFcTyPYjg3L4RLLmZJzvjxhaZVapxFrQ==", + "dev": true, + "dependencies": { + "es-errors": "^1.0.0", + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-stream": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz", + "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==", + "dev": true, + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/get-symbol-description": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", + "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/glob/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/glob/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globalthis": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", + "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", + "dev": true, + "dependencies": { + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true + }, + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true + }, + "node_modules/handlebars": { + "version": "4.7.8", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.8.tgz", + "integrity": "sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==", + "dev": true, + "dependencies": { + "minimist": "^1.2.5", + "neo-async": "^2.6.2", + "source-map": "^0.6.1", + "wordwrap": "^1.0.0" + }, + "bin": { + "handlebars": "bin/handlebars" + }, + "engines": { + "node": ">=0.4.7" + }, + "optionalDependencies": { + "uglify-js": "^3.1.4" + } + }, + "node_modules/has-bigints": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz", + "integrity": "sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.2.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", + "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", + "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true, + "bin": { + "he": "bin/he" + } + }, + "node_modules/html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true + }, + "node_modules/human-signals": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz", + "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==", + "dev": true, + "engines": { + "node": ">=16.17.0" + } + }, + "node_modules/ignore": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", + "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/import-lazy": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-4.0.0.tgz", + "integrity": "sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dev": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/internal-slot": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.6.tgz", + "integrity": "sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.2.2", + "hasown": "^2.0.0", + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-array-buffer": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz", + "integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "dev": true, + "dependencies": { + "has-bigints": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-boolean-object": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-buffer": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", + "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "engines": { + "node": ">=4" + } + }, + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-core-module": { + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", + "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", + "dev": true, + "dependencies": { + "hasown": "^2.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-negative-zero": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", + "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-number-object": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-shared-array-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", + "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", + "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", + "dev": true, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typed-array": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz", + "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==", + "dev": true, + "dependencies": { + "which-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakref": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "node_modules/istanbul-lib-coverage": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", + "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-report": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", + "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", + "dev": true, + "dependencies": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^4.0.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-source-maps": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", + "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", + "dev": true, + "dependencies": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-reports": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.6.tgz", + "integrity": "sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg==", + "dev": true, + "dependencies": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-worker": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", + "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", + "dev": true, + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^7.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/jju": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/jju/-/jju-1.4.0.tgz", + "integrity": "sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA==", + "dev": true + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "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==", + "dev": true + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true + }, + "node_modules/json5": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", + "dev": true, + "peer": true, + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/jsonc-parser": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.1.tgz", + "integrity": "sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA==", + "dev": true + }, + "node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "dev": true, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/kolorist": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/kolorist/-/kolorist-1.8.0.tgz", + "integrity": "sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==", + "dev": true + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/local-pkg": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-0.5.0.tgz", + "integrity": "sha512-ok6z3qlYyCDS4ZEU27HaU6x/xZa9Whf8jD4ptH5UZTQYZVYeb9bnZ3ojVhiJNLiXK1Hfc0GNbLXcmZ5plLDDBg==", + "dev": true, + "dependencies": { + "mlly": "^1.4.2", + "pkg-types": "^1.0.3" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "node_modules/lodash.get": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", + "integrity": "sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==", + "dev": true + }, + "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==", + "dev": true + }, + "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==", + "dev": true + }, + "node_modules/loupe": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.7.tgz", + "integrity": "sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==", + "dev": true, + "dependencies": { + "get-func-name": "^2.0.1" + } + }, + "node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/lunr": { + "version": "2.3.9", + "resolved": "https://registry.npmjs.org/lunr/-/lunr-2.3.9.tgz", + "integrity": "sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==", + "dev": true + }, + "node_modules/magic-string": { + "version": "0.30.8", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.8.tgz", + "integrity": "sha512-ISQTe55T2ao7XtlAStud6qwYPZjE4GK1S/BeVPus4jrq6JuOnQ00YKQC581RWhR122W7msZV263KzVeLoqidyQ==", + "dev": true, + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.4.15" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/magicast": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/magicast/-/magicast-0.3.3.tgz", + "integrity": "sha512-ZbrP1Qxnpoes8sz47AM0z08U+jW6TyRgZzcWy3Ma3vDhJttwMwAFDMMQFobwdBxByBD46JYmxRzeF7w2+wJEuw==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.23.6", + "@babel/types": "^7.23.6", + "source-map-js": "^1.0.2" + } + }, + "node_modules/make-dir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", + "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", + "dev": true, + "dependencies": { + "semver": "^7.5.3" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/marked": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/marked/-/marked-4.3.0.tgz", + "integrity": "sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A==", + "dev": true, + "bin": { + "marked": "bin/marked.js" + }, + "engines": { + "node": ">= 12" + } + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "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==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", + "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "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==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/mlly": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/mlly/-/mlly-1.6.1.tgz", + "integrity": "sha512-vLgaHvaeunuOXHSmEbZ9izxPx3USsk8KCQ8iC+aTlp5sKRSoZvwhHh5L9VbKSaVC6sJDqbyohIS76E2VmHIPAA==", + "dev": true, + "dependencies": { + "acorn": "^8.11.3", + "pathe": "^1.1.2", + "pkg-types": "^1.0.3", + "ufo": "^1.3.2" + } + }, + "node_modules/mrmime": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.0.tgz", + "integrity": "sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/muggle-string": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/muggle-string/-/muggle-string-0.3.1.tgz", + "integrity": "sha512-ckmWDJjphvd/FvZawgygcUeQCxzvohjFO5RxTjj4eq8kw359gFF3E1brjfI+viLMxss5JrHTDRHZvu2/tuy0Qg==", + "dev": true + }, + "node_modules/nanoid": { + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true + }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm-run-path": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz", + "integrity": "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==", + "dev": true, + "dependencies": { + "path-key": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npm-run-path/node_modules/path-key": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", + "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/object-inspect": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", + "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.assign": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", + "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.entries": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.7.tgz", + "integrity": "sha512-jCBs/0plmPsOnrKAfFQXRG2NFjlhZgjjcBLSmTnEhU8U6vVTsVe8ANeQJCHTl3gSsI4J+0emOoCgoKlmQPMgmA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.fromentries": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.7.tgz", + "integrity": "sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==", + "dev": true, + "peer": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.groupby": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.1.tgz", + "integrity": "sha512-HqaQtqLnp/8Bn4GL16cj+CUYbnpe1bh0TtEaWvybszDG4tgxCJuRpV8VGuvNaI1fAnI4lUJzDG55MXcOH4JZcQ==", + "dev": true, + "peer": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "get-intrinsic": "^1.2.1" + } + }, + "node_modules/object.values": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.7.tgz", + "integrity": "sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==", + "dev": true, + "peer": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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==", + "dev": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", + "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", + "dev": true, + "dependencies": { + "mimic-fn": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/optionator": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", + "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", + "dev": true, + "dependencies": { + "@aashutoshrathi/word-wrap": "^1.2.3", + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "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==", + "dev": true + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/pathe": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz", + "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==", + "dev": true + }, + "node_modules/pathval": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", + "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pkg-types": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.0.3.tgz", + "integrity": "sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A==", + "dev": true, + "dependencies": { + "jsonc-parser": "^3.2.0", + "mlly": "^1.2.0", + "pathe": "^1.1.0" + } + }, + "node_modules/postcss": { + "version": "8.4.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.35.tgz", + "integrity": "sha512-u5U8qYpBCpN13BsiEB0CbR1Hhh4Gc0zLFuedrHJKMctHCHAGrMdG0PRM/KErzAL3CU6/eckEtmHNB3x6e3c0vA==", + "dev": true, + "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.0", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, + "dependencies": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "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/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "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==", + "dev": true, + "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/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "dev": true + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/reexport": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/reexport/-/reexport-1.4.1.tgz", + "integrity": "sha512-RpL+Q+R0ZX9teEza1ZUoxPhF4WGCFjf4172AMjsKZx9hWbnIi18gOiO+KxMHu3xaJ+xkoH3stnFr5g1SZzv6hw==", + "dev": true, + "dependencies": { + "chokidar": "^3.5.3", + "commander": "^10.0.0", + "globby": "^13.1.3" + }, + "bin": { + "reexport": "bin/reexport.js" + } + }, + "node_modules/reexport/node_modules/globby": { + "version": "13.2.2", + "resolved": "https://registry.npmjs.org/globby/-/globby-13.2.2.tgz", + "integrity": "sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==", + "dev": true, + "dependencies": { + "dir-glob": "^3.0.1", + "fast-glob": "^3.3.0", + "ignore": "^5.2.4", + "merge2": "^1.4.1", + "slash": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/reexport/node_modules/slash": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", + "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/regexp.prototype.flags": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.1.tgz", + "integrity": "sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "set-function-name": "^2.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "dev": true, + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rollup": { + "version": "2.79.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.1.tgz", + "integrity": "sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==", + "dev": true, + "peer": true, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=10.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/rollup-plugin-terser": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/rollup-plugin-terser/-/rollup-plugin-terser-7.0.2.tgz", + "integrity": "sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==", + "deprecated": "This package has been deprecated and is no longer maintained. Please use @rollup/plugin-terser", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.10.4", + "jest-worker": "^26.2.1", + "serialize-javascript": "^4.0.0", + "terser": "^5.0.0" + }, + "peerDependencies": { + "rollup": "^2.0.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==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/safe-array-concat": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.0.tgz", + "integrity": "sha512-ZdQ0Jeb9Ofti4hbt5lX3T2JcAamT9hfzYU1MNB+z/jaEbB6wfFfPIR/zEORmZqobkCCJhSjodobH6WHNmJ97dg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.5", + "get-intrinsic": "^1.2.2", + "has-symbols": "^1.0.3", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">=0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "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/safe-regex-test": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.2.tgz", + "integrity": "sha512-83S9w6eFq12BBIJYvjMux6/dkirb8+4zJRA9cxNBVb7Wq5fJBW+Xze48WqR8pxua7bDuAaaAxtVVd4Idjp1dBQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.5", + "get-intrinsic": "^1.2.2", + "is-regex": "^1.1.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/serialize-javascript": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", + "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", + "dev": true, + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/set-function-length": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.0.tgz", + "integrity": "sha512-4DBHDoyHlM1IRPGYcoxexgh67y4ueR53FKV1yyxwFMY7aCqcN/38M1+SwZ/qJQ8iLv7+ck385ot4CcisOAPT9w==", + "dev": true, + "dependencies": { + "define-data-property": "^1.1.1", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.2", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/set-function-name": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.1.tgz", + "integrity": "sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==", + "dev": true, + "dependencies": { + "define-data-property": "^1.0.1", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/shiki": { + "version": "0.14.7", + "resolved": "https://registry.npmjs.org/shiki/-/shiki-0.14.7.tgz", + "integrity": "sha512-dNPAPrxSc87ua2sKJ3H5dQ/6ZaY8RNnaAqK+t0eG7p0Soi2ydiqbGOTaZCqaYvA/uZYfS1LJnemt3Q+mSfcPCg==", + "dev": true, + "dependencies": { + "ansi-sequence-parser": "^1.1.0", + "jsonc-parser": "^3.2.0", + "vscode-oniguruma": "^1.7.0", + "vscode-textmate": "^8.0.0" + } + }, + "node_modules/side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/siginfo": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz", + "integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==", + "dev": true + }, + "node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/sirv": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/sirv/-/sirv-2.0.4.tgz", + "integrity": "sha512-94Bdh3cC2PKrbgSOUqTiGPWVZeSiXfKOVZNJniWoqrWrRkB1CJzBU3NEbiTsPcYy1lDsANA/THzS+9WBiy5nfQ==", + "dev": true, + "dependencies": { + "@polka/url": "^1.0.0-next.24", + "mrmime": "^2.0.0", + "totalist": "^3.0.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "dev": true + }, + "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==", + "dev": true + }, + "node_modules/std-env": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.7.0.tgz", + "integrity": "sha512-JPbdCEQLj1w5GilpiHAx3qJvFndqybBysA3qUOnznweH4QbNYUsW/ea8QzSrnh0vNsezMMw5bcVool8lM0gwzg==", + "dev": true + }, + "node_modules/string-argv": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.2.tgz", + "integrity": "sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==", + "dev": true, + "engines": { + "node": ">=0.6.19" + } + }, + "node_modules/string.prototype.trim": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz", + "integrity": "sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.7.tgz", + "integrity": "sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz", + "integrity": "sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "dev": true, + "peer": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/strip-final-newline": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", + "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/strip-literal": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-literal/-/strip-literal-2.0.0.tgz", + "integrity": "sha512-f9vHgsCWBq2ugHAkGMiiYY+AYG0D/cbloKKg0nhaaaSNsujdGIpVXCNsrJpCKr5M0f4aI31mr13UjY6GAuXCKA==", + "dev": true, + "dependencies": { + "js-tokens": "^8.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/strip-literal/node_modules/js-tokens": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-8.0.3.tgz", + "integrity": "sha512-UfJMcSJc+SEXEl9lH/VLHSZbThQyLpw1vLO1Lb+j4RWDvG3N2f7yj3PVQA3cmkTBNldJ9eFnM+xEXxHIXrYiJw==", + "dev": true + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/terser": { + "version": "5.27.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.27.0.tgz", + "integrity": "sha512-bi1HRwVRskAjheeYl291n3JC4GgO/Ty4z1nVs5AAsmonJulGxpSektecnNedrwK9C7vpvVtcX3cw00VSLt7U2A==", + "dev": true, + "dependencies": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.8.2", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/terser/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "node_modules/test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "dev": true, + "dependencies": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/test-exclude/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/test-exclude/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true + }, + "node_modules/tinybench": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.6.0.tgz", + "integrity": "sha512-N8hW3PG/3aOoZAN5V/NSAEDz0ZixDSSt5b/a05iqtpgfLWMSVuCo7w0k2vVvEjdrIoeGqZzweX2WlyioNIHchA==", + "dev": true + }, + "node_modules/tinypool": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-0.8.2.tgz", + "integrity": "sha512-SUszKYe5wgsxnNOVlBYO6IC+8VGWdVGZWAqUxp3UErNBtptZvWbwyUOyzNL59zigz2rCA92QiL3wvG+JDSdJdQ==", + "dev": true, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/tinyspy": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-2.2.1.tgz", + "integrity": "sha512-KYad6Vy5VDWV4GH3fjpseMQ/XU2BhIYP7Vzd0LG44qRWm/Yt2WCOTicFdvmgo6gWaqooMQCawTtILVQJupKu7A==", + "dev": true, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/totalist": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/totalist/-/totalist-3.0.1.tgz", + "integrity": "sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/ts-api-utils": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.0.3.tgz", + "integrity": "sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg==", + "dev": true, + "engines": { + "node": ">=16.13.0" + }, + "peerDependencies": { + "typescript": ">=4.2.0" + } + }, + "node_modules/tsconfig-paths": { + "version": "3.15.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", + "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==", + "dev": true, + "peer": true, + "dependencies": { + "@types/json5": "^0.0.29", + "json5": "^1.0.2", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + } + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/typed-array-buffer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz", + "integrity": "sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.1", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/typed-array-byte-length": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz", + "integrity": "sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "has-proto": "^1.0.1", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-byte-offset": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz", + "integrity": "sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==", + "dev": true, + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "has-proto": "^1.0.1", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-length": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", + "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "is-typed-array": "^1.1.9" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typedoc": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.25.12.tgz", + "integrity": "sha512-F+qhkK2VoTweDXd1c42GS/By2DvI2uDF4/EpG424dTexSHdtCH52C6IcAvMA6jR3DzAWZjHpUOW+E02kyPNUNw==", + "dev": true, + "dependencies": { + "lunr": "^2.3.9", + "marked": "^4.3.0", + "minimatch": "^9.0.3", + "shiki": "^0.14.7" + }, + "bin": { + "typedoc": "bin/typedoc" + }, + "engines": { + "node": ">= 16" + }, + "peerDependencies": { + "typescript": "4.6.x || 4.7.x || 4.8.x || 4.9.x || 5.0.x || 5.1.x || 5.2.x || 5.3.x || 5.4.x" + } + }, + "node_modules/typedoc-plugin-markdown": { + "version": "3.17.1", + "resolved": "https://registry.npmjs.org/typedoc-plugin-markdown/-/typedoc-plugin-markdown-3.17.1.tgz", + "integrity": "sha512-QzdU3fj0Kzw2XSdoL15ExLASt2WPqD7FbLeaqwT70+XjKyTshBnUlQA5nNREO1C2P8Uen0CDjsBLMsCQ+zd0lw==", + "dev": true, + "dependencies": { + "handlebars": "^4.7.7" + }, + "peerDependencies": { + "typedoc": ">=0.24.0" + } + }, + "node_modules/typedoc-plugin-missing-exports": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/typedoc-plugin-missing-exports/-/typedoc-plugin-missing-exports-2.2.0.tgz", + "integrity": "sha512-2+XR1IcyQ5UwXZVJe9NE6HrLmNufT9i5OwoIuuj79VxuA3eYq+Y6itS9rnNV1D7UeQnUSH8kISYD73gHE5zw+w==", + "dev": true, + "peerDependencies": { + "typedoc": "0.24.x || 0.25.x" + } + }, + "node_modules/typescript": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.3.3.tgz", + "integrity": "sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/ufo": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.4.0.tgz", + "integrity": "sha512-Hhy+BhRBleFjpJ2vchUNN40qgkh0366FWJGqVLYBHev0vpHTrXSA0ryT+74UiW6KWsldNurQMKGqCm1M2zBciQ==", + "dev": true + }, + "node_modules/uglify-js": { + "version": "3.17.4", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz", + "integrity": "sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==", + "dev": true, + "optional": true, + "bin": { + "uglifyjs": "bin/uglifyjs" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/unbox-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", + "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", + "which-boxed-primitive": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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==", + "dev": true + }, + "node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/v8-to-istanbul": { + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.2.0.tgz", + "integrity": "sha512-/EH/sDgxU2eGxajKdwLCDmQ4FWq+kpi3uCmBGpw1xJtnAxEjlD8j8PEiGWpCIMIs3ciNAgH0d3TTJiUkYzyZjA==", + "dev": true, + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.12", + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^2.0.0" + }, + "engines": { + "node": ">=10.12.0" + } + }, + "node_modules/validator": { + "version": "13.11.0", + "resolved": "https://registry.npmjs.org/validator/-/validator-13.11.0.tgz", + "integrity": "sha512-Ii+sehpSfZy+At5nPdnyMhx78fEoPDkR2XW/zimHEL3MyGJQOCQ7WeP20jPYRz7ZCpcKLB21NxuXHF3bxjStBQ==", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/vite": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.1.6.tgz", + "integrity": "sha512-yYIAZs9nVfRJ/AiOLCA91zzhjsHUgMjB+EigzFb6W2XTLO8JixBCKCjvhKZaye+NKYHCrkv3Oh50dH9EdLU2RA==", + "dev": true, + "dependencies": { + "esbuild": "^0.19.3", + "postcss": "^8.4.35", + "rollup": "^4.2.0" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || >=20.0.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } + } + }, + "node_modules/vite-node": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-1.3.1.tgz", + "integrity": "sha512-azbRrqRxlWTJEVbzInZCTchx0X69M/XPTCz4H+TLvlTcR/xH/3hkRqhOakT41fMJCMzXTu4UvegkZiEoJAWvng==", + "dev": true, + "dependencies": { + "cac": "^6.7.14", + "debug": "^4.3.4", + "pathe": "^1.1.1", + "picocolors": "^1.0.0", + "vite": "^5.0.0" + }, + "bin": { + "vite-node": "vite-node.mjs" + }, + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/vite-plugin-dts": { + "version": "3.7.3", + "resolved": "https://registry.npmjs.org/vite-plugin-dts/-/vite-plugin-dts-3.7.3.tgz", + "integrity": "sha512-26eTlBYdpjRLWCsTJebM8vkCieE+p9gP3raf+ecDnzzK5E3FG6VE1wcy55OkRpfWWVlVvKkYFe6uvRHYWx7Nog==", + "dev": true, + "dependencies": { + "@microsoft/api-extractor": "7.39.0", + "@rollup/pluginutils": "^5.1.0", + "@vue/language-core": "^1.8.26", + "debug": "^4.3.4", + "kolorist": "^1.8.0", + "vue-tsc": "^1.8.26" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "peerDependencies": { + "typescript": "*", + "vite": "*" + }, + "peerDependenciesMeta": { + "vite": { + "optional": true + } + } + }, + "node_modules/vite/node_modules/rollup": { + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.9.6.tgz", + "integrity": "sha512-05lzkCS2uASX0CiLFybYfVkwNbKZG5NFQ6Go0VWyogFTXXbR039UVsegViTntkk4OglHBdF54ccApXRRuXRbsg==", + "dev": true, + "dependencies": { + "@types/estree": "1.0.5" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.9.6", + "@rollup/rollup-android-arm64": "4.9.6", + "@rollup/rollup-darwin-arm64": "4.9.6", + "@rollup/rollup-darwin-x64": "4.9.6", + "@rollup/rollup-linux-arm-gnueabihf": "4.9.6", + "@rollup/rollup-linux-arm64-gnu": "4.9.6", + "@rollup/rollup-linux-arm64-musl": "4.9.6", + "@rollup/rollup-linux-riscv64-gnu": "4.9.6", + "@rollup/rollup-linux-x64-gnu": "4.9.6", + "@rollup/rollup-linux-x64-musl": "4.9.6", + "@rollup/rollup-win32-arm64-msvc": "4.9.6", + "@rollup/rollup-win32-ia32-msvc": "4.9.6", + "@rollup/rollup-win32-x64-msvc": "4.9.6", + "fsevents": "~2.3.2" + } + }, + "node_modules/vitest": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-1.3.1.tgz", + "integrity": "sha512-/1QJqXs8YbCrfv/GPQ05wAZf2eakUPLPa18vkJAKE7RXOKfVHqMZZ1WlTjiwl6Gcn65M5vpNUB6EFLnEdRdEXQ==", + "dev": true, + "dependencies": { + "@vitest/expect": "1.3.1", + "@vitest/runner": "1.3.1", + "@vitest/snapshot": "1.3.1", + "@vitest/spy": "1.3.1", + "@vitest/utils": "1.3.1", + "acorn-walk": "^8.3.2", + "chai": "^4.3.10", + "debug": "^4.3.4", + "execa": "^8.0.1", + "local-pkg": "^0.5.0", + "magic-string": "^0.30.5", + "pathe": "^1.1.1", + "picocolors": "^1.0.0", + "std-env": "^3.5.0", + "strip-literal": "^2.0.0", + "tinybench": "^2.5.1", + "tinypool": "^0.8.2", + "vite": "^5.0.0", + "vite-node": "1.3.1", + "why-is-node-running": "^2.2.2" + }, + "bin": { + "vitest": "vitest.mjs" + }, + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "@edge-runtime/vm": "*", + "@types/node": "^18.0.0 || >=20.0.0", + "@vitest/browser": "1.3.1", + "@vitest/ui": "1.3.1", + "happy-dom": "*", + "jsdom": "*" + }, + "peerDependenciesMeta": { + "@edge-runtime/vm": { + "optional": true + }, + "@types/node": { + "optional": true + }, + "@vitest/browser": { + "optional": true + }, + "@vitest/ui": { + "optional": true + }, + "happy-dom": { + "optional": true + }, + "jsdom": { + "optional": true + } + } + }, + "node_modules/vscode-oniguruma": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/vscode-oniguruma/-/vscode-oniguruma-1.7.0.tgz", + "integrity": "sha512-L9WMGRfrjOhgHSdOYgCt/yRMsXzLDJSL7BPrOZt73gU0iWO4mpqzqQzOz5srxqTvMBaR0XZTSrVWo4j55Rc6cA==", + "dev": true + }, + "node_modules/vscode-textmate": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/vscode-textmate/-/vscode-textmate-8.0.0.tgz", + "integrity": "sha512-AFbieoL7a5LMqcnOF04ji+rpXadgOXnZsxQr//r83kLPr7biP7am3g9zbaZIaBGwBRWeSvoMD4mgPdX3e4NWBg==", + "dev": true + }, + "node_modules/vue-template-compiler": { + "version": "2.7.16", + "resolved": "https://registry.npmjs.org/vue-template-compiler/-/vue-template-compiler-2.7.16.tgz", + "integrity": "sha512-AYbUWAJHLGGQM7+cNTELw+KsOG9nl2CnSv467WobS5Cv9uk3wFcnr1Etsz2sEIHEZvw1U+o9mRlEO6QbZvUPGQ==", + "dev": true, + "dependencies": { + "de-indent": "^1.0.2", + "he": "^1.2.0" + } + }, + "node_modules/vue-tsc": { + "version": "1.8.27", + "resolved": "https://registry.npmjs.org/vue-tsc/-/vue-tsc-1.8.27.tgz", + "integrity": "sha512-WesKCAZCRAbmmhuGl3+VrdWItEvfoFIPXOvUJkjULi+x+6G/Dy69yO3TBRJDr9eUlmsNAwVmxsNZxvHKzbkKdg==", + "dev": true, + "dependencies": { + "@volar/typescript": "~1.11.1", + "@vue/language-core": "1.8.27", + "semver": "^7.5.4" + }, + "bin": { + "vue-tsc": "bin/vue-tsc.js" + }, + "peerDependencies": { + "typescript": "*" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dev": true, + "dependencies": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-typed-array": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.14.tgz", + "integrity": "sha512-VnXFiIW8yNn9kIHN88xvZ4yOWchftKDsRJ8fEPacX/wl1lOvBrhsJ/OeJCXq7B0AaijRuqgzSKalJoPk+D8MPg==", + "dev": true, + "dependencies": { + "available-typed-arrays": "^1.0.6", + "call-bind": "^1.0.5", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/why-is-node-running": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.2.2.tgz", + "integrity": "sha512-6tSwToZxTOcotxHeA+qGCq1mVzKR3CwcJGmVcY+QE8SHy6TnpFnh8PAvPNHYr7EcuVeG0QSMxtYCuO1ta/G/oA==", + "dev": true, + "dependencies": { + "siginfo": "^2.0.0", + "stackback": "0.0.2" + }, + "bin": { + "why-is-node-running": "cli.js" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==", + "dev": true + }, + "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==", + "dev": true + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/z-schema": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/z-schema/-/z-schema-5.0.5.tgz", + "integrity": "sha512-D7eujBWkLa3p2sIpJA0d1pr7es+a7m0vFAnZLlCEKq/Ij2k0MLi9Br2UPxoxdYystm5K1yeBGzub0FlYUEWj2Q==", + "dev": true, + "dependencies": { + "lodash.get": "^4.4.2", + "lodash.isequal": "^4.5.0", + "validator": "^13.7.0" + }, + "bin": { + "z-schema": "bin/z-schema" + }, + "engines": { + "node": ">=8.0.0" + }, + "optionalDependencies": { + "commander": "^9.4.1" + } + }, + "node_modules/z-schema/node_modules/commander": { + "version": "9.5.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", + "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", + "dev": true, + "optional": true, + "engines": { + "node": "^12.20.0 || >=14" + } + } + }, + "dependencies": { + "@aashutoshrathi/word-wrap": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", + "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", + "dev": true + }, + "@ampproject/remapping": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", + "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", + "dev": true, + "requires": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "@babel/code-frame": { + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.5.tgz", + "integrity": "sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==", + "dev": true, + "requires": { + "@babel/highlight": "^7.23.4", + "chalk": "^2.4.2" + }, + "dependencies": { + "ansi-styles": { + "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==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "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==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "@babel/helper-string-parser": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz", + "integrity": "sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==", + "dev": true + }, + "@babel/helper-validator-identifier": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", + "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", + "dev": true + }, + "@babel/highlight": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.23.4.tgz", + "integrity": "sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.22.20", + "chalk": "^2.4.2", + "js-tokens": "^4.0.0" + }, + "dependencies": { + "ansi-styles": { + "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==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "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==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "@babel/parser": { + "version": "7.23.9", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.9.tgz", + "integrity": "sha512-9tcKgqKbs3xGJ+NtKF2ndOBBLVwPjl1SHxPQkd36r3Dlirw3xWUeGaTbqr7uGZcTaxkVNwc+03SVP7aCdWrTlA==", + "dev": true + }, + "@babel/types": { + "version": "7.23.9", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.9.tgz", + "integrity": "sha512-dQjSq/7HaSjRM43FFGnv5keM2HsxpmyV1PfaSVm0nzzjwwTmjOe6J4bC8e3+pTEIgHaHj+1ZlLThRJ2auc/w1Q==", + "dev": true, + "requires": { + "@babel/helper-string-parser": "^7.23.4", + "@babel/helper-validator-identifier": "^7.22.20", + "to-fast-properties": "^2.0.0" + } + }, + "@bcoe/v8-coverage": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", + "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", + "dev": true + }, + "@esbuild/aix-ppc64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.19.12.tgz", + "integrity": "sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA==", + "dev": true, + "optional": true + }, + "@esbuild/android-arm": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.19.12.tgz", + "integrity": "sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w==", + "dev": true, + "optional": true + }, + "@esbuild/android-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.19.12.tgz", + "integrity": "sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA==", + "dev": true, + "optional": true + }, + "@esbuild/android-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.19.12.tgz", + "integrity": "sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew==", + "dev": true, + "optional": true + }, + "@esbuild/darwin-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.12.tgz", + "integrity": "sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g==", + "dev": true, + "optional": true + }, + "@esbuild/darwin-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.19.12.tgz", + "integrity": "sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A==", + "dev": true, + "optional": true + }, + "@esbuild/freebsd-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.12.tgz", + "integrity": "sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA==", + "dev": true, + "optional": true + }, + "@esbuild/freebsd-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.19.12.tgz", + "integrity": "sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg==", + "dev": true, + "optional": true + }, + "@esbuild/linux-arm": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.19.12.tgz", + "integrity": "sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w==", + "dev": true, + "optional": true + }, + "@esbuild/linux-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.19.12.tgz", + "integrity": "sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA==", + "dev": true, + "optional": true + }, + "@esbuild/linux-ia32": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.19.12.tgz", + "integrity": "sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA==", + "dev": true, + "optional": true + }, + "@esbuild/linux-loong64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.19.12.tgz", + "integrity": "sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA==", + "dev": true, + "optional": true + }, + "@esbuild/linux-mips64el": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.19.12.tgz", + "integrity": "sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w==", + "dev": true, + "optional": true + }, + "@esbuild/linux-ppc64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.19.12.tgz", + "integrity": "sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg==", + "dev": true, + "optional": true + }, + "@esbuild/linux-riscv64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.19.12.tgz", + "integrity": "sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg==", + "dev": true, + "optional": true + }, + "@esbuild/linux-s390x": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.19.12.tgz", + "integrity": "sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg==", + "dev": true, + "optional": true + }, + "@esbuild/linux-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.12.tgz", + "integrity": "sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg==", + "dev": true, + "optional": true + }, + "@esbuild/netbsd-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.19.12.tgz", + "integrity": "sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA==", + "dev": true, + "optional": true + }, + "@esbuild/openbsd-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.19.12.tgz", + "integrity": "sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw==", + "dev": true, + "optional": true + }, + "@esbuild/sunos-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.19.12.tgz", + "integrity": "sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA==", + "dev": true, + "optional": true + }, + "@esbuild/win32-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.19.12.tgz", + "integrity": "sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A==", + "dev": true, + "optional": true + }, + "@esbuild/win32-ia32": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.19.12.tgz", + "integrity": "sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ==", + "dev": true, + "optional": true + }, + "@esbuild/win32-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.12.tgz", + "integrity": "sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA==", + "dev": true, + "optional": true + }, + "@eslint-community/eslint-utils": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", + "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^3.3.0" + } + }, + "@eslint-community/regexpp": { + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz", + "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==", + "dev": true + }, + "@eslint/eslintrc": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", + "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", + "dev": true, + "requires": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.6.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "dependencies": { + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + } + } + }, + "@eslint/js": { + "version": "8.57.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz", + "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==", + "dev": true + }, + "@humanwhocodes/config-array": { + "version": "0.11.14", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", + "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", + "dev": true, + "requires": { + "@humanwhocodes/object-schema": "^2.0.2", + "debug": "^4.3.1", + "minimatch": "^3.0.5" + }, + "dependencies": { + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + } + } + }, + "@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true + }, + "@humanwhocodes/object-schema": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.2.tgz", + "integrity": "sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==", + "dev": true + }, + "@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "dev": true + }, + "@jest/schemas": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", + "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", + "dev": true, + "requires": { + "@sinclair/typebox": "^0.27.8" + } + }, + "@jridgewell/gen-mapping": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", + "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", + "dev": true, + "requires": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "@jridgewell/resolve-uri": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", + "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", + "dev": true + }, + "@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "dev": true + }, + "@jridgewell/source-map": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.5.tgz", + "integrity": "sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==", + "dev": true, + "requires": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", + "dev": true + }, + "@jridgewell/trace-mapping": { + "version": "0.3.22", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.22.tgz", + "integrity": "sha512-Wf963MzWtA2sjrNt+g18IAln9lKnlRp+K2eH4jjIoF1wYeq3aMREpG09xhlhdzS0EjwU7qmUJYangWa+151vZw==", + "dev": true, + "requires": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "@microsoft/api-extractor": { + "version": "7.39.0", + "resolved": "https://registry.npmjs.org/@microsoft/api-extractor/-/api-extractor-7.39.0.tgz", + "integrity": "sha512-PuXxzadgnvp+wdeZFPonssRAj/EW4Gm4s75TXzPk09h3wJ8RS3x7typf95B4vwZRrPTQBGopdUl+/vHvlPdAcg==", + "dev": true, + "requires": { + "@microsoft/api-extractor-model": "7.28.3", + "@microsoft/tsdoc": "0.14.2", + "@microsoft/tsdoc-config": "~0.16.1", + "@rushstack/node-core-library": "3.62.0", + "@rushstack/rig-package": "0.5.1", + "@rushstack/ts-command-line": "4.17.1", + "colors": "~1.2.1", + "lodash": "~4.17.15", + "resolve": "~1.22.1", + "semver": "~7.5.4", + "source-map": "~0.6.1", + "typescript": "5.3.3" + } + }, + "@microsoft/api-extractor-model": { + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@microsoft/api-extractor-model/-/api-extractor-model-7.28.3.tgz", + "integrity": "sha512-wT/kB2oDbdZXITyDh2SQLzaWwTOFbV326fP0pUwNW00WeliARs0qjmXBWmGWardEzp2U3/axkO3Lboqun6vrig==", + "dev": true, + "requires": { + "@microsoft/tsdoc": "0.14.2", + "@microsoft/tsdoc-config": "~0.16.1", + "@rushstack/node-core-library": "3.62.0" + } + }, + "@microsoft/tsdoc": { + "version": "0.14.2", + "resolved": "https://registry.npmjs.org/@microsoft/tsdoc/-/tsdoc-0.14.2.tgz", + "integrity": "sha512-9b8mPpKrfeGRuhFH5iO1iwCLeIIsV6+H1sRfxbkoGXIyQE2BTsPd9zqSqQJ+pv5sJ/hT5M1zvOFL02MnEezFug==", + "dev": true + }, + "@microsoft/tsdoc-config": { + "version": "0.16.2", + "resolved": "https://registry.npmjs.org/@microsoft/tsdoc-config/-/tsdoc-config-0.16.2.tgz", + "integrity": "sha512-OGiIzzoBLgWWR0UdRJX98oYO+XKGf7tiK4Zk6tQ/E4IJqGCe7dvkTvgDZV5cFJUzLGDOjeAXrnZoA6QkVySuxw==", + "dev": true, + "requires": { + "@microsoft/tsdoc": "0.14.2", + "ajv": "~6.12.6", + "jju": "~1.4.0", + "resolve": "~1.19.0" + }, + "dependencies": { + "resolve": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.19.0.tgz", + "integrity": "sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg==", + "dev": true, + "requires": { + "is-core-module": "^2.1.0", + "path-parse": "^1.0.6" + } + } + } + }, + "@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + } + }, + "@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true + }, + "@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "requires": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + } + }, + "@polka/url": { + "version": "1.0.0-next.25", + "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.25.tgz", + "integrity": "sha512-j7P6Rgr3mmtdkeDGTe0E/aYyWEWVtc5yFXtHCRHs28/jptDEWfaVOc5T7cblqy1XKPPfCxJc/8DwQ5YgLOZOVQ==", + "dev": true + }, + "@rollup/pluginutils": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.1.0.tgz", + "integrity": "sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g==", + "dev": true, + "requires": { + "@types/estree": "^1.0.0", + "estree-walker": "^2.0.2", + "picomatch": "^2.3.1" + }, + "dependencies": { + "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==", + "dev": true + } + } + }, + "@rollup/rollup-android-arm-eabi": { + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.9.6.tgz", + "integrity": "sha512-MVNXSSYN6QXOulbHpLMKYi60ppyO13W9my1qogeiAqtjb2yR4LSmfU2+POvDkLzhjYLXz9Rf9+9a3zFHW1Lecg==", + "dev": true, + "optional": true + }, + "@rollup/rollup-android-arm64": { + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.9.6.tgz", + "integrity": "sha512-T14aNLpqJ5wzKNf5jEDpv5zgyIqcpn1MlwCrUXLrwoADr2RkWA0vOWP4XxbO9aiO3dvMCQICZdKeDrFl7UMClw==", + "dev": true, + "optional": true + }, + "@rollup/rollup-darwin-arm64": { + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.9.6.tgz", + "integrity": "sha512-CqNNAyhRkTbo8VVZ5R85X73H3R5NX9ONnKbXuHisGWC0qRbTTxnF1U4V9NafzJbgGM0sHZpdO83pLPzq8uOZFw==", + "dev": true, + "optional": true + }, + "@rollup/rollup-darwin-x64": { + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.9.6.tgz", + "integrity": "sha512-zRDtdJuRvA1dc9Mp6BWYqAsU5oeLixdfUvkTHuiYOHwqYuQ4YgSmi6+/lPvSsqc/I0Omw3DdICx4Tfacdzmhog==", + "dev": true, + "optional": true + }, + "@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.9.6.tgz", + "integrity": "sha512-oNk8YXDDnNyG4qlNb6is1ojTOGL/tRhbbKeE/YuccItzerEZT68Z9gHrY3ROh7axDc974+zYAPxK5SH0j/G+QQ==", + "dev": true, + "optional": true + }, + "@rollup/rollup-linux-arm64-gnu": { + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.9.6.tgz", + "integrity": "sha512-Z3O60yxPtuCYobrtzjo0wlmvDdx2qZfeAWTyfOjEDqd08kthDKexLpV97KfAeUXPosENKd8uyJMRDfFMxcYkDQ==", + "dev": true, + "optional": true + }, + "@rollup/rollup-linux-arm64-musl": { + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.9.6.tgz", + "integrity": "sha512-gpiG0qQJNdYEVad+1iAsGAbgAnZ8j07FapmnIAQgODKcOTjLEWM9sRb+MbQyVsYCnA0Im6M6QIq6ax7liws6eQ==", + "dev": true, + "optional": true + }, + "@rollup/rollup-linux-riscv64-gnu": { + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.9.6.tgz", + "integrity": "sha512-+uCOcvVmFUYvVDr27aiyun9WgZk0tXe7ThuzoUTAukZJOwS5MrGbmSlNOhx1j80GdpqbOty05XqSl5w4dQvcOA==", + "dev": true, + "optional": true + }, + "@rollup/rollup-linux-x64-gnu": { + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.9.6.tgz", + "integrity": "sha512-HUNqM32dGzfBKuaDUBqFB7tP6VMN74eLZ33Q9Y1TBqRDn+qDonkAUyKWwF9BR9unV7QUzffLnz9GrnKvMqC/fw==", + "dev": true, + "optional": true + }, + "@rollup/rollup-linux-x64-musl": { + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.9.6.tgz", + "integrity": "sha512-ch7M+9Tr5R4FK40FHQk8VnML0Szi2KRujUgHXd/HjuH9ifH72GUmw6lStZBo3c3GB82vHa0ZoUfjfcM7JiiMrQ==", + "dev": true, + "optional": true + }, + "@rollup/rollup-win32-arm64-msvc": { + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.9.6.tgz", + "integrity": "sha512-VD6qnR99dhmTQ1mJhIzXsRcTBvTjbfbGGwKAHcu+52cVl15AC/kplkhxzW/uT0Xl62Y/meBKDZvoJSJN+vTeGA==", + "dev": true, + "optional": true + }, + "@rollup/rollup-win32-ia32-msvc": { + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.9.6.tgz", + "integrity": "sha512-J9AFDq/xiRI58eR2NIDfyVmTYGyIZmRcvcAoJ48oDld/NTR8wyiPUu2X/v1navJ+N/FGg68LEbX3Ejd6l8B7MQ==", + "dev": true, + "optional": true + }, + "@rollup/rollup-win32-x64-msvc": { + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.9.6.tgz", + "integrity": "sha512-jqzNLhNDvIZOrt69Ce4UjGRpXJBzhUBzawMwnaDAwyHriki3XollsewxWzOzz+4yOFDkuJHtTsZFwMxhYJWmLQ==", + "dev": true, + "optional": true + }, + "@rushstack/node-core-library": { + "version": "3.62.0", + "resolved": "https://registry.npmjs.org/@rushstack/node-core-library/-/node-core-library-3.62.0.tgz", + "integrity": "sha512-88aJn2h8UpSvdwuDXBv1/v1heM6GnBf3RjEy6ZPP7UnzHNCqOHA2Ut+ScYUbXcqIdfew9JlTAe3g+cnX9xQ/Aw==", + "dev": true, + "requires": { + "colors": "~1.2.1", + "fs-extra": "~7.0.1", + "import-lazy": "~4.0.0", + "jju": "~1.4.0", + "resolve": "~1.22.1", + "semver": "~7.5.4", + "z-schema": "~5.0.2" + } + }, + "@rushstack/rig-package": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/@rushstack/rig-package/-/rig-package-0.5.1.tgz", + "integrity": "sha512-pXRYSe29TjRw7rqxD4WS3HN/sRSbfr+tJs4a9uuaSIBAITbUggygdhuG0VrO0EO+QqH91GhYMN4S6KRtOEmGVA==", + "dev": true, + "requires": { + "resolve": "~1.22.1", + "strip-json-comments": "~3.1.1" + } + }, + "@rushstack/ts-command-line": { + "version": "4.17.1", + "resolved": "https://registry.npmjs.org/@rushstack/ts-command-line/-/ts-command-line-4.17.1.tgz", + "integrity": "sha512-2jweO1O57BYP5qdBGl6apJLB+aRIn5ccIRTPDyULh0KMwVzFqWtw6IZWt1qtUoZD/pD2RNkIOosH6Cq45rIYeg==", + "dev": true, + "requires": { + "@types/argparse": "1.0.38", + "argparse": "~1.0.9", + "colors": "~1.2.1", + "string-argv": "~0.3.1" + }, + "dependencies": { + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "requires": { + "sprintf-js": "~1.0.2" + } + } + } + }, + "@sinclair/typebox": { + "version": "0.27.8", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", + "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", + "dev": true + }, + "@types/argparse": { + "version": "1.0.38", + "resolved": "https://registry.npmjs.org/@types/argparse/-/argparse-1.0.38.tgz", + "integrity": "sha512-ebDJ9b0e702Yr7pWgB0jzm+CX4Srzz8RcXtLJDJB+BSccqMa36uyH/zUsSYao5+BD1ytv3k3rPYCq4mAE1hsXA==", + "dev": true + }, + "@types/estree": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", + "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", + "dev": true + }, + "@types/istanbul-lib-coverage": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", + "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", + "dev": true + }, + "@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true + }, + "@types/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", + "dev": true, + "peer": true + }, + "@types/lodash": { + "version": "4.17.0", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.0.tgz", + "integrity": "sha512-t7dhREVv6dbNj0q17X12j7yDG4bD/DHYX7o5/DbDxobP0HnGPgpRz2Ej77aL7TZT3DSw13fqUTj8J4mMnqa7WA==", + "dev": true + }, + "@types/node": { + "version": "20.11.26", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.26.tgz", + "integrity": "sha512-YwOMmyhNnAWijOBQweOJnQPl068Oqd4K3OFbTc6AHJwzweUwwWG3GIFY74OKks2PJUDkQPeddOQES9mLn1CTEQ==", + "dev": true, + "requires": { + "undici-types": "~5.26.4" + } + }, + "@types/semver": { + "version": "7.5.8", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.8.tgz", + "integrity": "sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==", + "dev": true + }, + "@typescript-eslint/eslint-plugin": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.2.0.tgz", + "integrity": "sha512-mdekAHOqS9UjlmyF/LSs6AIEvfceV749GFxoBAjwAv0nkevfKHWQFDMcBZWUiIC5ft6ePWivXoS36aKQ0Cy3sw==", + "dev": true, + "requires": { + "@eslint-community/regexpp": "^4.5.1", + "@typescript-eslint/scope-manager": "7.2.0", + "@typescript-eslint/type-utils": "7.2.0", + "@typescript-eslint/utils": "7.2.0", + "@typescript-eslint/visitor-keys": "7.2.0", + "debug": "^4.3.4", + "graphemer": "^1.4.0", + "ignore": "^5.2.4", + "natural-compare": "^1.4.0", + "semver": "^7.5.4", + "ts-api-utils": "^1.0.1" + } + }, + "@typescript-eslint/parser": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.2.0.tgz", + "integrity": "sha512-5FKsVcHTk6TafQKQbuIVkXq58Fnbkd2wDL4LB7AURN7RUOu1utVP+G8+6u3ZhEroW3DF6hyo3ZEXxgKgp4KeCg==", + "dev": true, + "requires": { + "@typescript-eslint/scope-manager": "7.2.0", + "@typescript-eslint/types": "7.2.0", + "@typescript-eslint/typescript-estree": "7.2.0", + "@typescript-eslint/visitor-keys": "7.2.0", + "debug": "^4.3.4" + } + }, + "@typescript-eslint/scope-manager": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.2.0.tgz", + "integrity": "sha512-Qh976RbQM/fYtjx9hs4XkayYujB/aPwglw2choHmf3zBjB4qOywWSdt9+KLRdHubGcoSwBnXUH2sR3hkyaERRg==", + "dev": true, + "requires": { + "@typescript-eslint/types": "7.2.0", + "@typescript-eslint/visitor-keys": "7.2.0" + } + }, + "@typescript-eslint/type-utils": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.2.0.tgz", + "integrity": "sha512-xHi51adBHo9O9330J8GQYQwrKBqbIPJGZZVQTHHmy200hvkLZFWJIFtAG/7IYTWUyun6DE6w5InDReePJYJlJA==", + "dev": true, + "requires": { + "@typescript-eslint/typescript-estree": "7.2.0", + "@typescript-eslint/utils": "7.2.0", + "debug": "^4.3.4", + "ts-api-utils": "^1.0.1" + } + }, + "@typescript-eslint/types": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.2.0.tgz", + "integrity": "sha512-XFtUHPI/abFhm4cbCDc5Ykc8npOKBSJePY3a3s+lwumt7XWJuzP5cZcfZ610MIPHjQjNsOLlYK8ASPaNG8UiyA==", + "dev": true + }, + "@typescript-eslint/typescript-estree": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.2.0.tgz", + "integrity": "sha512-cyxS5WQQCoBwSakpMrvMXuMDEbhOo9bNHHrNcEWis6XHx6KF518tkF1wBvKIn/tpq5ZpUYK7Bdklu8qY0MsFIA==", + "dev": true, + "requires": { + "@typescript-eslint/types": "7.2.0", + "@typescript-eslint/visitor-keys": "7.2.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "minimatch": "9.0.3", + "semver": "^7.5.4", + "ts-api-utils": "^1.0.1" + } + }, + "@typescript-eslint/utils": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.2.0.tgz", + "integrity": "sha512-YfHpnMAGb1Eekpm3XRK8hcMwGLGsnT6L+7b2XyRv6ouDuJU1tZir1GS2i0+VXRatMwSI1/UfcyPe53ADkU+IuA==", + "dev": true, + "requires": { + "@eslint-community/eslint-utils": "^4.4.0", + "@types/json-schema": "^7.0.12", + "@types/semver": "^7.5.0", + "@typescript-eslint/scope-manager": "7.2.0", + "@typescript-eslint/types": "7.2.0", + "@typescript-eslint/typescript-estree": "7.2.0", + "semver": "^7.5.4" + } + }, + "@typescript-eslint/visitor-keys": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.2.0.tgz", + "integrity": "sha512-c6EIQRHhcpl6+tO8EMR+kjkkV+ugUNXOmeASA1rlzkd8EPIriavpWoiEz1HR/VLhbVIdhqnV6E7JZm00cBDx2A==", + "dev": true, + "requires": { + "@typescript-eslint/types": "7.2.0", + "eslint-visitor-keys": "^3.4.1" + } + }, + "@ungap/structured-clone": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", + "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", + "dev": true + }, + "@vitest/coverage-v8": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-1.3.1.tgz", + "integrity": "sha512-UuBnkSJUNE9rdHjDCPyJ4fYuMkoMtnghes1XohYa4At0MS3OQSAo97FrbwSLRshYsXThMZy1+ybD/byK5llyIg==", + "dev": true, + "requires": { + "@ampproject/remapping": "^2.2.1", + "@bcoe/v8-coverage": "^0.2.3", + "debug": "^4.3.4", + "istanbul-lib-coverage": "^3.2.2", + "istanbul-lib-report": "^3.0.1", + "istanbul-lib-source-maps": "^4.0.1", + "istanbul-reports": "^3.1.6", + "magic-string": "^0.30.5", + "magicast": "^0.3.3", + "picocolors": "^1.0.0", + "std-env": "^3.5.0", + "test-exclude": "^6.0.0", + "v8-to-istanbul": "^9.2.0" + } + }, + "@vitest/expect": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-1.3.1.tgz", + "integrity": "sha512-xofQFwIzfdmLLlHa6ag0dPV8YsnKOCP1KdAeVVh34vSjN2dcUiXYCD9htu/9eM7t8Xln4v03U9HLxLpPlsXdZw==", + "dev": true, + "requires": { + "@vitest/spy": "1.3.1", + "@vitest/utils": "1.3.1", + "chai": "^4.3.10" + } + }, + "@vitest/runner": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-1.3.1.tgz", + "integrity": "sha512-5FzF9c3jG/z5bgCnjr8j9LNq/9OxV2uEBAITOXfoe3rdZJTdO7jzThth7FXv/6b+kdY65tpRQB7WaKhNZwX+Kg==", + "dev": true, + "requires": { + "@vitest/utils": "1.3.1", + "p-limit": "^5.0.0", + "pathe": "^1.1.1" + }, + "dependencies": { + "p-limit": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-5.0.0.tgz", + "integrity": "sha512-/Eaoq+QyLSiXQ4lyYV23f14mZRQcXnxfHrN0vCai+ak9G0pp9iEQukIIZq5NccEvwRB8PUnZT0KsOoDCINS1qQ==", + "dev": true, + "requires": { + "yocto-queue": "^1.0.0" + } + }, + "yocto-queue": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz", + "integrity": "sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==", + "dev": true + } + } + }, + "@vitest/snapshot": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-1.3.1.tgz", + "integrity": "sha512-EF++BZbt6RZmOlE3SuTPu/NfwBF6q4ABS37HHXzs2LUVPBLx2QoY/K0fKpRChSo8eLiuxcbCVfqKgx/dplCDuQ==", + "dev": true, + "requires": { + "magic-string": "^0.30.5", + "pathe": "^1.1.1", + "pretty-format": "^29.7.0" + } + }, + "@vitest/spy": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-1.3.1.tgz", + "integrity": "sha512-xAcW+S099ylC9VLU7eZfdT9myV67Nor9w9zhf0mGCYJSO+zM2839tOeROTdikOi/8Qeusffvxb/MyBSOja1Uig==", + "dev": true, + "requires": { + "tinyspy": "^2.2.0" + } + }, + "@vitest/ui": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@vitest/ui/-/ui-1.3.1.tgz", + "integrity": "sha512-2UrFLJ62c/eJGPHcclstMKlAR7E1WB1ITe1isuowEPJJHi3HfqofvsUqQ1cGrEF7kitG1DJuwURUA3HLDtQkXA==", + "dev": true, + "requires": { + "@vitest/utils": "1.3.1", + "fast-glob": "^3.3.2", + "fflate": "^0.8.1", + "flatted": "^3.2.9", + "pathe": "^1.1.1", + "picocolors": "^1.0.0", + "sirv": "^2.0.4" + } + }, + "@vitest/utils": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-1.3.1.tgz", + "integrity": "sha512-d3Waie/299qqRyHTm2DjADeTaNdNSVsnwHPWrs20JMpjh6eiVq7ggggweO8rc4arhf6rRkWuHKwvxGvejUXZZQ==", + "dev": true, + "requires": { + "diff-sequences": "^29.6.3", + "estree-walker": "^3.0.3", + "loupe": "^2.3.7", + "pretty-format": "^29.7.0" + } + }, + "@volar/language-core": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@volar/language-core/-/language-core-1.11.1.tgz", + "integrity": "sha512-dOcNn3i9GgZAcJt43wuaEykSluAuOkQgzni1cuxLxTV0nJKanQztp7FxyswdRILaKH+P2XZMPRp2S4MV/pElCw==", + "dev": true, + "requires": { + "@volar/source-map": "1.11.1" + } + }, + "@volar/source-map": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@volar/source-map/-/source-map-1.11.1.tgz", + "integrity": "sha512-hJnOnwZ4+WT5iupLRnuzbULZ42L7BWWPMmruzwtLhJfpDVoZLjNBxHDi2sY2bgZXCKlpU5XcsMFoYrsQmPhfZg==", + "dev": true, + "requires": { + "muggle-string": "^0.3.1" + } + }, + "@volar/typescript": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@volar/typescript/-/typescript-1.11.1.tgz", + "integrity": "sha512-iU+t2mas/4lYierSnoFOeRFQUhAEMgsFuQxoxvwn5EdQopw43j+J27a4lt9LMInx1gLJBC6qL14WYGlgymaSMQ==", + "dev": true, + "requires": { + "@volar/language-core": "1.11.1", + "path-browserify": "^1.0.1" + } + }, + "@vue/compiler-core": { + "version": "3.4.15", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.4.15.tgz", + "integrity": "sha512-XcJQVOaxTKCnth1vCxEChteGuwG6wqnUHxAm1DO3gCz0+uXKaJNx8/digSz4dLALCy8n2lKq24jSUs8segoqIw==", + "dev": true, + "requires": { + "@babel/parser": "^7.23.6", + "@vue/shared": "3.4.15", + "entities": "^4.5.0", + "estree-walker": "^2.0.2", + "source-map-js": "^1.0.2" + }, + "dependencies": { + "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==", + "dev": true + } + } + }, + "@vue/compiler-dom": { + "version": "3.4.15", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.4.15.tgz", + "integrity": "sha512-wox0aasVV74zoXyblarOM3AZQz/Z+OunYcIHe1OsGclCHt8RsRm04DObjefaI82u6XDzv+qGWZ24tIsRAIi5MQ==", + "dev": true, + "requires": { + "@vue/compiler-core": "3.4.15", + "@vue/shared": "3.4.15" + } + }, + "@vue/language-core": { + "version": "1.8.27", + "resolved": "https://registry.npmjs.org/@vue/language-core/-/language-core-1.8.27.tgz", + "integrity": "sha512-L8Kc27VdQserNaCUNiSFdDl9LWT24ly8Hpwf1ECy3aFb9m6bDhBGQYOujDm21N7EW3moKIOKEanQwe1q5BK+mA==", + "dev": true, + "requires": { + "@volar/language-core": "~1.11.1", + "@volar/source-map": "~1.11.1", + "@vue/compiler-dom": "^3.3.0", + "@vue/shared": "^3.3.0", + "computeds": "^0.0.1", + "minimatch": "^9.0.3", + "muggle-string": "^0.3.1", + "path-browserify": "^1.0.1", + "vue-template-compiler": "^2.7.14" + } + }, + "@vue/shared": { + "version": "3.4.15", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.4.15.tgz", + "integrity": "sha512-KzfPTxVaWfB+eGcGdbSf4CWdaXcGDqckoeXUh7SB3fZdEtzPCK2Vq9B/lRRL3yutax/LWITz+SwvgyOxz5V75g==", + "dev": true + }, + "acorn": { + "version": "8.11.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", + "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", + "dev": true + }, + "acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "requires": {} + }, + "acorn-walk": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.2.tgz", + "integrity": "sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==", + "dev": true + }, + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true + }, + "ansi-sequence-parser": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ansi-sequence-parser/-/ansi-sequence-parser-1.1.1.tgz", + "integrity": "sha512-vJXt3yiaUL4UU546s3rPXlsry/RnM730G1+HkpKE012AN0sx1eOrxSu95oKDIonskeLTijMgqWZ3uDEe3NFvyg==", + "dev": true + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "array-buffer-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz", + "integrity": "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==", + "dev": true, + "requires": { + "call-bind": "^1.0.5", + "is-array-buffer": "^3.0.4" + } + }, + "array-includes": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.7.tgz", + "integrity": "sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==", + "dev": true, + "peer": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "get-intrinsic": "^1.2.1", + "is-string": "^1.0.7" + } + }, + "array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true + }, + "array.prototype.findlastindex": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.3.tgz", + "integrity": "sha512-LzLoiOMAxvy+Gd3BAq3B7VeIgPdo+Q8hthvKtXybMvRV0jrXfJM/t8mw7nNlpEcVlVUnCnM2KSX4XU5HmpodOA==", + "dev": true, + "peer": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0", + "get-intrinsic": "^1.2.1" + } + }, + "array.prototype.flat": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz", + "integrity": "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==", + "dev": true, + "peer": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0" + } + }, + "array.prototype.flatmap": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz", + "integrity": "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==", + "dev": true, + "peer": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0" + } + }, + "arraybuffer.prototype.slice": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.2.tgz", + "integrity": "sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw==", + "dev": true, + "requires": { + "array-buffer-byte-length": "^1.0.0", + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "get-intrinsic": "^1.2.1", + "is-array-buffer": "^3.0.2", + "is-shared-array-buffer": "^1.0.2" + } + }, + "assertion-error": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", + "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", + "dev": true + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + }, + "available-typed-arrays": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.6.tgz", + "integrity": "sha512-j1QzY8iPNPG4o4xmO3ptzpRxTciqD3MgEHtifP/YnJpIo58Xu+ne4BejlbkuaLfXn/nz6HFiw29bLpj2PNMdGg==", + "dev": true + }, + "axios": { + "version": "1.6.7", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.7.tgz", + "integrity": "sha512-/hDJGff6/c7u0hDkvkGxR/oy6CbCs8ziCsC7SqmhjfozqiJGc8Z11wrv9z9lYfY4K8l+H9TpjcMDX0xOZmx+RA==", + "requires": { + "follow-redirects": "^1.15.4", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } + }, + "axios-mock-adapter": { + "version": "1.22.0", + "resolved": "https://registry.npmjs.org/axios-mock-adapter/-/axios-mock-adapter-1.22.0.tgz", + "integrity": "sha512-dmI0KbkyAhntUR05YY96qg2H6gg0XMl2+qTW0xmYg6Up+BFBAJYRLROMXRdDEL06/Wqwa0TJThAYvFtSFdRCZw==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.3", + "is-buffer": "^2.0.5" + } + }, + "balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true + }, + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "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==", + "dev": true + }, + "cac": { + "version": "6.7.14", + "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz", + "integrity": "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==", + "dev": true + }, + "call-bind": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.5.tgz", + "integrity": "sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==", + "dev": true, + "requires": { + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.1", + "set-function-length": "^1.1.1" + } + }, + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true + }, + "chai": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.4.1.tgz", + "integrity": "sha512-13sOfMv2+DWduEU+/xbun3LScLoqN17nBeTLUsmDfKdoiC1fr0n9PU4guu4AhRcOVFk/sW8LyZWHuhWtQZiF+g==", + "dev": true, + "requires": { + "assertion-error": "^1.1.0", + "check-error": "^1.0.3", + "deep-eql": "^4.1.3", + "get-func-name": "^2.0.2", + "loupe": "^2.3.6", + "pathval": "^1.1.1", + "type-detect": "^4.0.8" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "check-error": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.3.tgz", + "integrity": "sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==", + "dev": true, + "requires": { + "get-func-name": "^2.0.2" + } + }, + "chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "dev": true, + "requires": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "fsevents": "~2.3.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "dependencies": { + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + } + } + }, + "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==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "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==", + "dev": true + }, + "colors": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.2.5.tgz", + "integrity": "sha512-erNRLao/Y3Fv54qUa0LBB+//Uf3YwMUmdJinN20yMXm9zdKKqH9wt7R9IIVZ+K7ShzfpLV/Zg8+VyrBJYB4lpg==", + "dev": true + }, + "combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "commander": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", + "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", + "dev": true + }, + "computeds": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/computeds/-/computeds-0.0.1.tgz", + "integrity": "sha512-7CEBgcMjVmitjYo5q8JTJVra6X5mQ20uTThdK+0kR7UEaDrAWEQcRiBtWJzga4eRpP6afNwwLsX2SET2JhVB1Q==", + "dev": true + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "confusing-browser-globals": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.11.tgz", + "integrity": "sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==", + "dev": true + }, + "convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true + }, + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "de-indent": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/de-indent/-/de-indent-1.0.2.tgz", + "integrity": "sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==", + "dev": true + }, + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "deep-eql": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.3.tgz", + "integrity": "sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==", + "dev": true, + "requires": { + "type-detect": "^4.0.0" + } + }, + "deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, + "define-data-property": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.1.tgz", + "integrity": "sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==", + "dev": true, + "requires": { + "get-intrinsic": "^1.2.1", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.0" + } + }, + "define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "dev": true, + "requires": { + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + } + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==" + }, + "diff-sequences": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", + "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", + "dev": true + }, + "dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "requires": { + "path-type": "^4.0.0" + } + }, + "doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, + "entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "dev": true + }, + "es-abstract": { + "version": "1.22.3", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.3.tgz", + "integrity": "sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA==", + "dev": true, + "requires": { + "array-buffer-byte-length": "^1.0.0", + "arraybuffer.prototype.slice": "^1.0.2", + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.5", + "es-set-tostringtag": "^2.0.1", + "es-to-primitive": "^1.2.1", + "function.prototype.name": "^1.1.6", + "get-intrinsic": "^1.2.2", + "get-symbol-description": "^1.0.0", + "globalthis": "^1.0.3", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0", + "internal-slot": "^1.0.5", + "is-array-buffer": "^3.0.2", + "is-callable": "^1.2.7", + "is-negative-zero": "^2.0.2", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "is-string": "^1.0.7", + "is-typed-array": "^1.1.12", + "is-weakref": "^1.0.2", + "object-inspect": "^1.13.1", + "object-keys": "^1.1.1", + "object.assign": "^4.1.4", + "regexp.prototype.flags": "^1.5.1", + "safe-array-concat": "^1.0.1", + "safe-regex-test": "^1.0.0", + "string.prototype.trim": "^1.2.8", + "string.prototype.trimend": "^1.0.7", + "string.prototype.trimstart": "^1.0.7", + "typed-array-buffer": "^1.0.0", + "typed-array-byte-length": "^1.0.0", + "typed-array-byte-offset": "^1.0.0", + "typed-array-length": "^1.0.4", + "unbox-primitive": "^1.0.2", + "which-typed-array": "^1.1.13" + } + }, + "es-errors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.0.0.tgz", + "integrity": "sha512-yHV74THqMJUyFKkHyN7hyENcEZM3Dj2a2IrdClY+IT4BFQHkIVwlh8s6uZfjsFydMdNHv0F5mWgAA3ajFbsvVQ==", + "dev": true + }, + "es-set-tostringtag": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.2.tgz", + "integrity": "sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q==", + "dev": true, + "requires": { + "get-intrinsic": "^1.2.2", + "has-tostringtag": "^1.0.0", + "hasown": "^2.0.0" + } + }, + "es-shim-unscopables": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz", + "integrity": "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==", + "dev": true, + "peer": true, + "requires": { + "hasown": "^2.0.0" + } + }, + "es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "esbuild": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.19.12.tgz", + "integrity": "sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg==", + "dev": true, + "requires": { + "@esbuild/aix-ppc64": "0.19.12", + "@esbuild/android-arm": "0.19.12", + "@esbuild/android-arm64": "0.19.12", + "@esbuild/android-x64": "0.19.12", + "@esbuild/darwin-arm64": "0.19.12", + "@esbuild/darwin-x64": "0.19.12", + "@esbuild/freebsd-arm64": "0.19.12", + "@esbuild/freebsd-x64": "0.19.12", + "@esbuild/linux-arm": "0.19.12", + "@esbuild/linux-arm64": "0.19.12", + "@esbuild/linux-ia32": "0.19.12", + "@esbuild/linux-loong64": "0.19.12", + "@esbuild/linux-mips64el": "0.19.12", + "@esbuild/linux-ppc64": "0.19.12", + "@esbuild/linux-riscv64": "0.19.12", + "@esbuild/linux-s390x": "0.19.12", + "@esbuild/linux-x64": "0.19.12", + "@esbuild/netbsd-x64": "0.19.12", + "@esbuild/openbsd-x64": "0.19.12", + "@esbuild/sunos-x64": "0.19.12", + "@esbuild/win32-arm64": "0.19.12", + "@esbuild/win32-ia32": "0.19.12", + "@esbuild/win32-x64": "0.19.12" + } + }, + "escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true + }, + "eslint": { + "version": "8.57.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz", + "integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==", + "dev": true, + "requires": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.4", + "@eslint/js": "8.57.0", + "@humanwhocodes/config-array": "^0.11.14", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "@ungap/structured-clone": "^1.2.0", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.2.2", + "eslint-visitor-keys": "^3.4.3", + "espree": "^9.6.1", + "esquery": "^1.4.2", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" + }, + "dependencies": { + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + } + } + }, + "eslint-config-airbnb-base": { + "version": "15.0.0", + "resolved": "https://registry.npmjs.org/eslint-config-airbnb-base/-/eslint-config-airbnb-base-15.0.0.tgz", + "integrity": "sha512-xaX3z4ZZIcFLvh2oUNvcX5oEofXda7giYmuplVxoOg5A7EXJMrUyqRgR+mhDhPK8LZ4PttFOBvCYDbX3sUoUig==", + "dev": true, + "requires": { + "confusing-browser-globals": "^1.0.10", + "object.assign": "^4.1.2", + "object.entries": "^1.1.5", + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true + } + } + }, + "eslint-config-airbnb-typescript": { + "version": "18.0.0", + "resolved": "https://registry.npmjs.org/eslint-config-airbnb-typescript/-/eslint-config-airbnb-typescript-18.0.0.tgz", + "integrity": "sha512-oc+Lxzgzsu8FQyFVa4QFaVKiitTYiiW3frB9KYW5OWdPrqFc7FzxgB20hP4cHMlr+MBzGcLl3jnCOVOydL9mIg==", + "dev": true, + "requires": { + "eslint-config-airbnb-base": "^15.0.0" + } + }, + "eslint-import-resolver-node": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", + "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", + "dev": true, + "peer": true, + "requires": { + "debug": "^3.2.7", + "is-core-module": "^2.13.0", + "resolve": "^1.22.4" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "peer": true, + "requires": { + "ms": "^2.1.1" + } + } + } + }, + "eslint-module-utils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz", + "integrity": "sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==", + "dev": true, + "peer": true, + "requires": { + "debug": "^3.2.7" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "peer": true, + "requires": { + "ms": "^2.1.1" + } + } + } + }, + "eslint-plugin-import": { + "version": "2.29.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.29.1.tgz", + "integrity": "sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==", + "dev": true, + "peer": true, + "requires": { + "array-includes": "^3.1.7", + "array.prototype.findlastindex": "^1.2.3", + "array.prototype.flat": "^1.3.2", + "array.prototype.flatmap": "^1.3.2", + "debug": "^3.2.7", + "doctrine": "^2.1.0", + "eslint-import-resolver-node": "^0.3.9", + "eslint-module-utils": "^2.8.0", + "hasown": "^2.0.0", + "is-core-module": "^2.13.1", + "is-glob": "^4.0.3", + "minimatch": "^3.1.2", + "object.fromentries": "^2.0.7", + "object.groupby": "^1.0.1", + "object.values": "^1.1.7", + "semver": "^6.3.1", + "tsconfig-paths": "^3.15.0" + }, + "dependencies": { + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "peer": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "peer": true, + "requires": { + "ms": "^2.1.1" + } + }, + "doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "peer": true, + "requires": { + "esutils": "^2.0.2" + } + }, + "minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "peer": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "peer": true + } + } + }, + "eslint-scope": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + } + }, + "eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true + }, + "espree": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "dev": true, + "requires": { + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + } + }, + "esquery": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", + "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", + "dev": true, + "requires": { + "estraverse": "^5.1.0" + } + }, + "esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "requires": { + "estraverse": "^5.2.0" + } + }, + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + }, + "estree-walker": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "dev": true, + "requires": { + "@types/estree": "^1.0.0" + } + }, + "esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true + }, + "execa": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz", + "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.3", + "get-stream": "^8.0.1", + "human-signals": "^5.0.0", + "is-stream": "^3.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^5.1.0", + "onetime": "^6.0.0", + "signal-exit": "^4.1.0", + "strip-final-newline": "^3.0.0" + } + }, + "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==", + "dev": true + }, + "fast-glob": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "dependencies": { + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + } + } + }, + "fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true + }, + "fastq": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.0.tgz", + "integrity": "sha512-zGygtijUMT7jnk3h26kUms3BkSDp4IfIKjmnqI2tvx6nuBfiF1UqOxbnLfzdv+apBy+53oaImsKtMw/xYbW+1w==", + "dev": true, + "requires": { + "reusify": "^1.0.4" + } + }, + "fflate": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/fflate/-/fflate-0.8.2.tgz", + "integrity": "sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A==", + "dev": true + }, + "file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "requires": { + "flat-cache": "^3.0.4" + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "requires": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + } + }, + "flat-cache": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", + "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", + "dev": true, + "requires": { + "flatted": "^3.2.9", + "keyv": "^4.5.3", + "rimraf": "^3.0.2" + } + }, + "flatted": { + "version": "3.2.9", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.9.tgz", + "integrity": "sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==", + "dev": true + }, + "follow-redirects": { + "version": "1.15.5", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.5.tgz", + "integrity": "sha512-vSFWUON1B+yAw1VN4xMfxgn5fTUiaOzAJCKBwIIgT/+7CuGy9+r+5gITvP62j3RmaD5Ph65UaERdOSRGUzZtgw==" + }, + "for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "dev": true, + "requires": { + "is-callable": "^1.1.3" + } + }, + "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==", + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + } + }, + "fs-extra": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", + "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, + "fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "optional": true + }, + "function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true + }, + "function.prototype.name": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", + "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "functions-have-names": "^1.2.3" + } + }, + "functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "dev": true + }, + "get-func-name": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz", + "integrity": "sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==", + "dev": true + }, + "get-intrinsic": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.3.tgz", + "integrity": "sha512-JIcZczvcMVE7AUOP+X72bh8HqHBRxFdz5PDHYtNG/lE3yk9b3KZBJlwFcTyPYjg3L4RLLmZJzvjxhaZVapxFrQ==", + "dev": true, + "requires": { + "es-errors": "^1.0.0", + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + } + }, + "get-stream": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz", + "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==", + "dev": true + }, + "get-symbol-description": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", + "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + } + }, + "glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "dependencies": { + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + } + } + }, + "glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "requires": { + "is-glob": "^4.0.3" + } + }, + "globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "dev": true, + "requires": { + "type-fest": "^0.20.2" + } + }, + "globalthis": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", + "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", + "dev": true, + "requires": { + "define-properties": "^1.1.3" + } + }, + "globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "requires": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + } + }, + "gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dev": true, + "requires": { + "get-intrinsic": "^1.1.3" + } + }, + "graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true + }, + "graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true + }, + "handlebars": { + "version": "4.7.8", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.8.tgz", + "integrity": "sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==", + "dev": true, + "requires": { + "minimist": "^1.2.5", + "neo-async": "^2.6.2", + "source-map": "^0.6.1", + "uglify-js": "^3.1.4", + "wordwrap": "^1.0.0" + } + }, + "has-bigints": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "has-property-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz", + "integrity": "sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==", + "dev": true, + "requires": { + "get-intrinsic": "^1.2.2" + } + }, + "has-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", + "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "dev": true + }, + "has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "dev": true + }, + "has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "dev": true, + "requires": { + "has-symbols": "^1.0.3" + } + }, + "hasown": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", + "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==", + "dev": true, + "requires": { + "function-bind": "^1.1.2" + } + }, + "he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true + }, + "html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true + }, + "human-signals": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz", + "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==", + "dev": true + }, + "ignore": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", + "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", + "dev": true + }, + "import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + } + }, + "import-lazy": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-4.0.0.tgz", + "integrity": "sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==", + "dev": true + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "internal-slot": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.6.tgz", + "integrity": "sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg==", + "dev": true, + "requires": { + "get-intrinsic": "^1.2.2", + "hasown": "^2.0.0", + "side-channel": "^1.0.4" + } + }, + "is-array-buffer": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz", + "integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.1" + } + }, + "is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "dev": true, + "requires": { + "has-bigints": "^1.0.1" + } + }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-boolean-object": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "is-buffer": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", + "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", + "dev": true + }, + "is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "dev": true + }, + "is-core-module": { + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", + "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", + "dev": true, + "requires": { + "hasown": "^2.0.0" + } + }, + "is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true + }, + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-negative-zero": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", + "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", + "dev": true + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "is-number-object": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true + }, + "is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "is-shared-array-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", + "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2" + } + }, + "is-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", + "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", + "dev": true + }, + "is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "dev": true, + "requires": { + "has-symbols": "^1.0.2" + } + }, + "is-typed-array": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz", + "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==", + "dev": true, + "requires": { + "which-typed-array": "^1.1.14" + } + }, + "is-weakref": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.2" + } + }, + "isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "istanbul-lib-coverage": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", + "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", + "dev": true + }, + "istanbul-lib-report": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", + "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", + "dev": true, + "requires": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^4.0.0", + "supports-color": "^7.1.0" + } + }, + "istanbul-lib-source-maps": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", + "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", + "dev": true, + "requires": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" + } + }, + "istanbul-reports": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.6.tgz", + "integrity": "sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg==", + "dev": true, + "requires": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + } + }, + "jest-worker": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", + "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", + "dev": true, + "requires": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^7.0.0" + } + }, + "jju": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/jju/-/jju-1.4.0.tgz", + "integrity": "sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA==", + "dev": true + }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "requires": { + "argparse": "^2.0.1" + } + }, + "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==", + "dev": true + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true + }, + "json5": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", + "dev": true, + "peer": true, + "requires": { + "minimist": "^1.2.0" + } + }, + "jsonc-parser": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.1.tgz", + "integrity": "sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA==", + "dev": true + }, + "jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6" + } + }, + "keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "requires": { + "json-buffer": "3.0.1" + } + }, + "kolorist": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/kolorist/-/kolorist-1.8.0.tgz", + "integrity": "sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==", + "dev": true + }, + "levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + } + }, + "local-pkg": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-0.5.0.tgz", + "integrity": "sha512-ok6z3qlYyCDS4ZEU27HaU6x/xZa9Whf8jD4ptH5UZTQYZVYeb9bnZ3ojVhiJNLiXK1Hfc0GNbLXcmZ5plLDDBg==", + "dev": true, + "requires": { + "mlly": "^1.4.2", + "pkg-types": "^1.0.3" + } + }, + "locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "requires": { + "p-locate": "^5.0.0" + } + }, + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "lodash.get": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", + "integrity": "sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==", + "dev": true + }, + "lodash.isequal": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", + "integrity": "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==", + "dev": true + }, + "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==", + "dev": true + }, + "loupe": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.7.tgz", + "integrity": "sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==", + "dev": true, + "requires": { + "get-func-name": "^2.0.1" + } + }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "lunr": { + "version": "2.3.9", + "resolved": "https://registry.npmjs.org/lunr/-/lunr-2.3.9.tgz", + "integrity": "sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==", + "dev": true + }, + "magic-string": { + "version": "0.30.8", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.8.tgz", + "integrity": "sha512-ISQTe55T2ao7XtlAStud6qwYPZjE4GK1S/BeVPus4jrq6JuOnQ00YKQC581RWhR122W7msZV263KzVeLoqidyQ==", + "dev": true, + "requires": { + "@jridgewell/sourcemap-codec": "^1.4.15" + } + }, + "magicast": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/magicast/-/magicast-0.3.3.tgz", + "integrity": "sha512-ZbrP1Qxnpoes8sz47AM0z08U+jW6TyRgZzcWy3Ma3vDhJttwMwAFDMMQFobwdBxByBD46JYmxRzeF7w2+wJEuw==", + "dev": true, + "requires": { + "@babel/parser": "^7.23.6", + "@babel/types": "^7.23.6", + "source-map-js": "^1.0.2" + } + }, + "make-dir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", + "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", + "dev": true, + "requires": { + "semver": "^7.5.3" + } + }, + "marked": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/marked/-/marked-4.3.0.tgz", + "integrity": "sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A==", + "dev": true + }, + "merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, + "merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true + }, + "micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "requires": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + } + }, + "mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" + }, + "mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "requires": { + "mime-db": "1.52.0" + } + }, + "mimic-fn": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", + "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", + "dev": true + }, + "minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } + }, + "minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true + }, + "mlly": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/mlly/-/mlly-1.6.1.tgz", + "integrity": "sha512-vLgaHvaeunuOXHSmEbZ9izxPx3USsk8KCQ8iC+aTlp5sKRSoZvwhHh5L9VbKSaVC6sJDqbyohIS76E2VmHIPAA==", + "dev": true, + "requires": { + "acorn": "^8.11.3", + "pathe": "^1.1.2", + "pkg-types": "^1.0.3", + "ufo": "^1.3.2" + } + }, + "mrmime": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.0.tgz", + "integrity": "sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw==", + "dev": true + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "muggle-string": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/muggle-string/-/muggle-string-0.3.1.tgz", + "integrity": "sha512-ckmWDJjphvd/FvZawgygcUeQCxzvohjFO5RxTjj4eq8kw359gFF3E1brjfI+viLMxss5JrHTDRHZvu2/tuy0Qg==", + "dev": true + }, + "nanoid": { + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", + "dev": true + }, + "natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true + }, + "neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true + }, + "npm-run-path": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz", + "integrity": "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==", + "dev": true, + "requires": { + "path-key": "^4.0.0" + }, + "dependencies": { + "path-key": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", + "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", + "dev": true + } + } + }, + "object-inspect": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", + "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", + "dev": true + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true + }, + "object.assign": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", + "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" + } + }, + "object.entries": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.7.tgz", + "integrity": "sha512-jCBs/0plmPsOnrKAfFQXRG2NFjlhZgjjcBLSmTnEhU8U6vVTsVe8ANeQJCHTl3gSsI4J+0emOoCgoKlmQPMgmA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + } + }, + "object.fromentries": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.7.tgz", + "integrity": "sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==", + "dev": true, + "peer": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + } + }, + "object.groupby": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.1.tgz", + "integrity": "sha512-HqaQtqLnp/8Bn4GL16cj+CUYbnpe1bh0TtEaWvybszDG4tgxCJuRpV8VGuvNaI1fAnI4lUJzDG55MXcOH4JZcQ==", + "dev": true, + "peer": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "get-intrinsic": "^1.2.1" + } + }, + "object.values": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.7.tgz", + "integrity": "sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==", + "dev": true, + "peer": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + } + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "onetime": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", + "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", + "dev": true, + "requires": { + "mimic-fn": "^4.0.0" + } + }, + "optionator": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", + "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", + "dev": true, + "requires": { + "@aashutoshrathi/word-wrap": "^1.2.3", + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0" + } + }, + "p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "requires": { + "yocto-queue": "^0.1.0" + } + }, + "p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "requires": { + "p-limit": "^3.0.2" + } + }, + "parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "requires": { + "callsites": "^3.0.0" + } + }, + "path-browserify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", + "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", + "dev": true + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true + }, + "path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true + }, + "pathe": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz", + "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==", + "dev": true + }, + "pathval": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", + "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", + "dev": true + }, + "picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true + }, + "pkg-types": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.0.3.tgz", + "integrity": "sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A==", + "dev": true, + "requires": { + "jsonc-parser": "^3.2.0", + "mlly": "^1.2.0", + "pathe": "^1.1.0" + } + }, + "postcss": { + "version": "8.4.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.35.tgz", + "integrity": "sha512-u5U8qYpBCpN13BsiEB0CbR1Hhh4Gc0zLFuedrHJKMctHCHAGrMdG0PRM/KErzAL3CU6/eckEtmHNB3x6e3c0vA==", + "dev": true, + "requires": { + "nanoid": "^3.3.7", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + } + }, + "prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true + }, + "pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, + "requires": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true + } + } + }, + "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==" + }, + "punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true + }, + "queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true + }, + "randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "requires": { + "safe-buffer": "^5.1.0" + } + }, + "react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "dev": true + }, + "readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "requires": { + "picomatch": "^2.2.1" + } + }, + "reexport": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/reexport/-/reexport-1.4.1.tgz", + "integrity": "sha512-RpL+Q+R0ZX9teEza1ZUoxPhF4WGCFjf4172AMjsKZx9hWbnIi18gOiO+KxMHu3xaJ+xkoH3stnFr5g1SZzv6hw==", + "dev": true, + "requires": { + "chokidar": "^3.5.3", + "commander": "^10.0.0", + "globby": "^13.1.3" + }, + "dependencies": { + "globby": { + "version": "13.2.2", + "resolved": "https://registry.npmjs.org/globby/-/globby-13.2.2.tgz", + "integrity": "sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==", + "dev": true, + "requires": { + "dir-glob": "^3.0.1", + "fast-glob": "^3.3.0", + "ignore": "^5.2.4", + "merge2": "^1.4.1", + "slash": "^4.0.0" + } + }, + "slash": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", + "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", + "dev": true + } + } + }, + "regexp.prototype.flags": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.1.tgz", + "integrity": "sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "set-function-name": "^2.0.0" + } + }, + "resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "dev": true, + "requires": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + } + }, + "resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true + }, + "reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true + }, + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "rollup": { + "version": "2.79.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.1.tgz", + "integrity": "sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==", + "dev": true, + "peer": true, + "requires": { + "fsevents": "~2.3.2" + } + }, + "rollup-plugin-terser": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/rollup-plugin-terser/-/rollup-plugin-terser-7.0.2.tgz", + "integrity": "sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.10.4", + "jest-worker": "^26.2.1", + "serialize-javascript": "^4.0.0", + "terser": "^5.0.0" + } + }, + "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==", + "dev": true, + "requires": { + "queue-microtask": "^1.2.2" + } + }, + "safe-array-concat": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.0.tgz", + "integrity": "sha512-ZdQ0Jeb9Ofti4hbt5lX3T2JcAamT9hfzYU1MNB+z/jaEbB6wfFfPIR/zEORmZqobkCCJhSjodobH6WHNmJ97dg==", + "dev": true, + "requires": { + "call-bind": "^1.0.5", + "get-intrinsic": "^1.2.2", + "has-symbols": "^1.0.3", + "isarray": "^2.0.5" + } + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true + }, + "safe-regex-test": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.2.tgz", + "integrity": "sha512-83S9w6eFq12BBIJYvjMux6/dkirb8+4zJRA9cxNBVb7Wq5fJBW+Xze48WqR8pxua7bDuAaaAxtVVd4Idjp1dBQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.5", + "get-intrinsic": "^1.2.2", + "is-regex": "^1.1.4" + } + }, + "semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "serialize-javascript": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", + "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", + "dev": true, + "requires": { + "randombytes": "^2.1.0" + } + }, + "set-function-length": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.0.tgz", + "integrity": "sha512-4DBHDoyHlM1IRPGYcoxexgh67y4ueR53FKV1yyxwFMY7aCqcN/38M1+SwZ/qJQ8iLv7+ck385ot4CcisOAPT9w==", + "dev": true, + "requires": { + "define-data-property": "^1.1.1", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.2", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.1" + } + }, + "set-function-name": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.1.tgz", + "integrity": "sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==", + "dev": true, + "requires": { + "define-data-property": "^1.0.1", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.0" + } + }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true + }, + "shiki": { + "version": "0.14.7", + "resolved": "https://registry.npmjs.org/shiki/-/shiki-0.14.7.tgz", + "integrity": "sha512-dNPAPrxSc87ua2sKJ3H5dQ/6ZaY8RNnaAqK+t0eG7p0Soi2ydiqbGOTaZCqaYvA/uZYfS1LJnemt3Q+mSfcPCg==", + "dev": true, + "requires": { + "ansi-sequence-parser": "^1.1.0", + "jsonc-parser": "^3.2.0", + "vscode-oniguruma": "^1.7.0", + "vscode-textmate": "^8.0.0" + } + }, + "side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + } + }, + "siginfo": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz", + "integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==", + "dev": true + }, + "signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true + }, + "sirv": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/sirv/-/sirv-2.0.4.tgz", + "integrity": "sha512-94Bdh3cC2PKrbgSOUqTiGPWVZeSiXfKOVZNJniWoqrWrRkB1CJzBU3NEbiTsPcYy1lDsANA/THzS+9WBiy5nfQ==", + "dev": true, + "requires": { + "@polka/url": "^1.0.0-next.24", + "mrmime": "^2.0.0", + "totalist": "^3.0.0" + } + }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "dev": true + }, + "source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "dev": true + }, + "stackback": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz", + "integrity": "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==", + "dev": true + }, + "std-env": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.7.0.tgz", + "integrity": "sha512-JPbdCEQLj1w5GilpiHAx3qJvFndqybBysA3qUOnznweH4QbNYUsW/ea8QzSrnh0vNsezMMw5bcVool8lM0gwzg==", + "dev": true + }, + "string-argv": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.2.tgz", + "integrity": "sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==", + "dev": true + }, + "string.prototype.trim": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz", + "integrity": "sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + } + }, + "string.prototype.trimend": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.7.tgz", + "integrity": "sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + } + }, + "string.prototype.trimstart": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz", + "integrity": "sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "dev": true, + "peer": true + }, + "strip-final-newline": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", + "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", + "dev": true + }, + "strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true + }, + "strip-literal": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-literal/-/strip-literal-2.0.0.tgz", + "integrity": "sha512-f9vHgsCWBq2ugHAkGMiiYY+AYG0D/cbloKKg0nhaaaSNsujdGIpVXCNsrJpCKr5M0f4aI31mr13UjY6GAuXCKA==", + "dev": true, + "requires": { + "js-tokens": "^8.0.2" + }, + "dependencies": { + "js-tokens": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-8.0.3.tgz", + "integrity": "sha512-UfJMcSJc+SEXEl9lH/VLHSZbThQyLpw1vLO1Lb+j4RWDvG3N2f7yj3PVQA3cmkTBNldJ9eFnM+xEXxHIXrYiJw==", + "dev": true + } + } + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true + }, + "terser": { + "version": "5.27.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.27.0.tgz", + "integrity": "sha512-bi1HRwVRskAjheeYl291n3JC4GgO/Ty4z1nVs5AAsmonJulGxpSektecnNedrwK9C7vpvVtcX3cw00VSLt7U2A==", + "dev": true, + "requires": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.8.2", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "dependencies": { + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + } + } + }, + "test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "dev": true, + "requires": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + }, + "dependencies": { + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + } + } + }, + "text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true + }, + "tinybench": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.6.0.tgz", + "integrity": "sha512-N8hW3PG/3aOoZAN5V/NSAEDz0ZixDSSt5b/a05iqtpgfLWMSVuCo7w0k2vVvEjdrIoeGqZzweX2WlyioNIHchA==", + "dev": true + }, + "tinypool": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-0.8.2.tgz", + "integrity": "sha512-SUszKYe5wgsxnNOVlBYO6IC+8VGWdVGZWAqUxp3UErNBtptZvWbwyUOyzNL59zigz2rCA92QiL3wvG+JDSdJdQ==", + "dev": true + }, + "tinyspy": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-2.2.1.tgz", + "integrity": "sha512-KYad6Vy5VDWV4GH3fjpseMQ/XU2BhIYP7Vzd0LG44qRWm/Yt2WCOTicFdvmgo6gWaqooMQCawTtILVQJupKu7A==", + "dev": true + }, + "to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "dev": true + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + }, + "totalist": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/totalist/-/totalist-3.0.1.tgz", + "integrity": "sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==", + "dev": true + }, + "ts-api-utils": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.0.3.tgz", + "integrity": "sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg==", + "dev": true, + "requires": {} + }, + "tsconfig-paths": { + "version": "3.15.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", + "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==", + "dev": true, + "peer": true, + "requires": { + "@types/json5": "^0.0.29", + "json5": "^1.0.2", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + } + }, + "type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1" + } + }, + "type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "dev": true + }, + "type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true + }, + "typed-array-buffer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz", + "integrity": "sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.1", + "is-typed-array": "^1.1.10" + } + }, + "typed-array-byte-length": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz", + "integrity": "sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "has-proto": "^1.0.1", + "is-typed-array": "^1.1.10" + } + }, + "typed-array-byte-offset": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz", + "integrity": "sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==", + "dev": true, + "requires": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "has-proto": "^1.0.1", + "is-typed-array": "^1.1.10" + } + }, + "typed-array-length": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", + "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "is-typed-array": "^1.1.9" + } + }, + "typedoc": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.25.12.tgz", + "integrity": "sha512-F+qhkK2VoTweDXd1c42GS/By2DvI2uDF4/EpG424dTexSHdtCH52C6IcAvMA6jR3DzAWZjHpUOW+E02kyPNUNw==", + "dev": true, + "requires": { + "lunr": "^2.3.9", + "marked": "^4.3.0", + "minimatch": "^9.0.3", + "shiki": "^0.14.7" + } + }, + "typedoc-plugin-markdown": { + "version": "3.17.1", + "resolved": "https://registry.npmjs.org/typedoc-plugin-markdown/-/typedoc-plugin-markdown-3.17.1.tgz", + "integrity": "sha512-QzdU3fj0Kzw2XSdoL15ExLASt2WPqD7FbLeaqwT70+XjKyTshBnUlQA5nNREO1C2P8Uen0CDjsBLMsCQ+zd0lw==", + "dev": true, + "requires": { + "handlebars": "^4.7.7" + } + }, + "typedoc-plugin-missing-exports": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/typedoc-plugin-missing-exports/-/typedoc-plugin-missing-exports-2.2.0.tgz", + "integrity": "sha512-2+XR1IcyQ5UwXZVJe9NE6HrLmNufT9i5OwoIuuj79VxuA3eYq+Y6itS9rnNV1D7UeQnUSH8kISYD73gHE5zw+w==", + "dev": true, + "requires": {} + }, + "typescript": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.3.3.tgz", + "integrity": "sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==", + "dev": true + }, + "ufo": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.4.0.tgz", + "integrity": "sha512-Hhy+BhRBleFjpJ2vchUNN40qgkh0366FWJGqVLYBHev0vpHTrXSA0ryT+74UiW6KWsldNurQMKGqCm1M2zBciQ==", + "dev": true + }, + "uglify-js": { + "version": "3.17.4", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz", + "integrity": "sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==", + "dev": true, + "optional": true + }, + "unbox-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", + "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", + "which-boxed-primitive": "^1.0.2" + } + }, + "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==", + "dev": true + }, + "universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true + }, + "uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "requires": { + "punycode": "^2.1.0" + } + }, + "v8-to-istanbul": { + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.2.0.tgz", + "integrity": "sha512-/EH/sDgxU2eGxajKdwLCDmQ4FWq+kpi3uCmBGpw1xJtnAxEjlD8j8PEiGWpCIMIs3ciNAgH0d3TTJiUkYzyZjA==", + "dev": true, + "requires": { + "@jridgewell/trace-mapping": "^0.3.12", + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^2.0.0" + } + }, + "validator": { + "version": "13.11.0", + "resolved": "https://registry.npmjs.org/validator/-/validator-13.11.0.tgz", + "integrity": "sha512-Ii+sehpSfZy+At5nPdnyMhx78fEoPDkR2XW/zimHEL3MyGJQOCQ7WeP20jPYRz7ZCpcKLB21NxuXHF3bxjStBQ==", + "dev": true + }, + "vite": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.1.6.tgz", + "integrity": "sha512-yYIAZs9nVfRJ/AiOLCA91zzhjsHUgMjB+EigzFb6W2XTLO8JixBCKCjvhKZaye+NKYHCrkv3Oh50dH9EdLU2RA==", + "dev": true, + "requires": { + "esbuild": "^0.19.3", + "fsevents": "~2.3.3", + "postcss": "^8.4.35", + "rollup": "^4.2.0" + }, + "dependencies": { + "rollup": { + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.9.6.tgz", + "integrity": "sha512-05lzkCS2uASX0CiLFybYfVkwNbKZG5NFQ6Go0VWyogFTXXbR039UVsegViTntkk4OglHBdF54ccApXRRuXRbsg==", + "dev": true, + "requires": { + "@rollup/rollup-android-arm-eabi": "4.9.6", + "@rollup/rollup-android-arm64": "4.9.6", + "@rollup/rollup-darwin-arm64": "4.9.6", + "@rollup/rollup-darwin-x64": "4.9.6", + "@rollup/rollup-linux-arm-gnueabihf": "4.9.6", + "@rollup/rollup-linux-arm64-gnu": "4.9.6", + "@rollup/rollup-linux-arm64-musl": "4.9.6", + "@rollup/rollup-linux-riscv64-gnu": "4.9.6", + "@rollup/rollup-linux-x64-gnu": "4.9.6", + "@rollup/rollup-linux-x64-musl": "4.9.6", + "@rollup/rollup-win32-arm64-msvc": "4.9.6", + "@rollup/rollup-win32-ia32-msvc": "4.9.6", + "@rollup/rollup-win32-x64-msvc": "4.9.6", + "@types/estree": "1.0.5", + "fsevents": "~2.3.2" + } + } + } + }, + "vite-node": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-1.3.1.tgz", + "integrity": "sha512-azbRrqRxlWTJEVbzInZCTchx0X69M/XPTCz4H+TLvlTcR/xH/3hkRqhOakT41fMJCMzXTu4UvegkZiEoJAWvng==", + "dev": true, + "requires": { + "cac": "^6.7.14", + "debug": "^4.3.4", + "pathe": "^1.1.1", + "picocolors": "^1.0.0", + "vite": "^5.0.0" + } + }, + "vite-plugin-dts": { + "version": "3.7.3", + "resolved": "https://registry.npmjs.org/vite-plugin-dts/-/vite-plugin-dts-3.7.3.tgz", + "integrity": "sha512-26eTlBYdpjRLWCsTJebM8vkCieE+p9gP3raf+ecDnzzK5E3FG6VE1wcy55OkRpfWWVlVvKkYFe6uvRHYWx7Nog==", + "dev": true, + "requires": { + "@microsoft/api-extractor": "7.39.0", + "@rollup/pluginutils": "^5.1.0", + "@vue/language-core": "^1.8.26", + "debug": "^4.3.4", + "kolorist": "^1.8.0", + "vue-tsc": "^1.8.26" + } + }, + "vitest": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-1.3.1.tgz", + "integrity": "sha512-/1QJqXs8YbCrfv/GPQ05wAZf2eakUPLPa18vkJAKE7RXOKfVHqMZZ1WlTjiwl6Gcn65M5vpNUB6EFLnEdRdEXQ==", + "dev": true, + "requires": { + "@vitest/expect": "1.3.1", + "@vitest/runner": "1.3.1", + "@vitest/snapshot": "1.3.1", + "@vitest/spy": "1.3.1", + "@vitest/utils": "1.3.1", + "acorn-walk": "^8.3.2", + "chai": "^4.3.10", + "debug": "^4.3.4", + "execa": "^8.0.1", + "local-pkg": "^0.5.0", + "magic-string": "^0.30.5", + "pathe": "^1.1.1", + "picocolors": "^1.0.0", + "std-env": "^3.5.0", + "strip-literal": "^2.0.0", + "tinybench": "^2.5.1", + "tinypool": "^0.8.2", + "vite": "^5.0.0", + "vite-node": "1.3.1", + "why-is-node-running": "^2.2.2" + } + }, + "vscode-oniguruma": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/vscode-oniguruma/-/vscode-oniguruma-1.7.0.tgz", + "integrity": "sha512-L9WMGRfrjOhgHSdOYgCt/yRMsXzLDJSL7BPrOZt73gU0iWO4mpqzqQzOz5srxqTvMBaR0XZTSrVWo4j55Rc6cA==", + "dev": true + }, + "vscode-textmate": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/vscode-textmate/-/vscode-textmate-8.0.0.tgz", + "integrity": "sha512-AFbieoL7a5LMqcnOF04ji+rpXadgOXnZsxQr//r83kLPr7biP7am3g9zbaZIaBGwBRWeSvoMD4mgPdX3e4NWBg==", + "dev": true + }, + "vue-template-compiler": { + "version": "2.7.16", + "resolved": "https://registry.npmjs.org/vue-template-compiler/-/vue-template-compiler-2.7.16.tgz", + "integrity": "sha512-AYbUWAJHLGGQM7+cNTELw+KsOG9nl2CnSv467WobS5Cv9uk3wFcnr1Etsz2sEIHEZvw1U+o9mRlEO6QbZvUPGQ==", + "dev": true, + "requires": { + "de-indent": "^1.0.2", + "he": "^1.2.0" + } + }, + "vue-tsc": { + "version": "1.8.27", + "resolved": "https://registry.npmjs.org/vue-tsc/-/vue-tsc-1.8.27.tgz", + "integrity": "sha512-WesKCAZCRAbmmhuGl3+VrdWItEvfoFIPXOvUJkjULi+x+6G/Dy69yO3TBRJDr9eUlmsNAwVmxsNZxvHKzbkKdg==", + "dev": true, + "requires": { + "@volar/typescript": "~1.11.1", + "@vue/language-core": "1.8.27", + "semver": "^7.5.4" + } + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dev": true, + "requires": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + } + }, + "which-typed-array": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.14.tgz", + "integrity": "sha512-VnXFiIW8yNn9kIHN88xvZ4yOWchftKDsRJ8fEPacX/wl1lOvBrhsJ/OeJCXq7B0AaijRuqgzSKalJoPk+D8MPg==", + "dev": true, + "requires": { + "available-typed-arrays": "^1.0.6", + "call-bind": "^1.0.5", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.1" + } + }, + "why-is-node-running": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.2.2.tgz", + "integrity": "sha512-6tSwToZxTOcotxHeA+qGCq1mVzKR3CwcJGmVcY+QE8SHy6TnpFnh8PAvPNHYr7EcuVeG0QSMxtYCuO1ta/G/oA==", + "dev": true, + "requires": { + "siginfo": "^2.0.0", + "stackback": "0.0.2" + } + }, + "wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==", + "dev": true + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true + }, + "z-schema": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/z-schema/-/z-schema-5.0.5.tgz", + "integrity": "sha512-D7eujBWkLa3p2sIpJA0d1pr7es+a7m0vFAnZLlCEKq/Ij2k0MLi9Br2UPxoxdYystm5K1yeBGzub0FlYUEWj2Q==", + "dev": true, + "requires": { + "commander": "^9.4.1", + "lodash.get": "^4.4.2", + "lodash.isequal": "^4.5.0", + "validator": "^13.7.0" + }, + "dependencies": { + "commander": { + "version": "9.5.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", + "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", + "dev": true, + "optional": true + } + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..103dcd2 --- /dev/null +++ b/package.json @@ -0,0 +1,91 @@ +{ + "name": "@localazy/cdn-client", + "version": "1.0.0", + "description": "Node.js module that allows you to easily interact with the Localazy CDN.", + "author": "Localazy ", + "license": "MIT", + "repository": { + "type": "git", + "url": "git+https://github.com/localazy/cdn-client" + }, + "bugs": { + "url": "https://github.com/localazy/cdn-client/issues" + }, + "homepage": "https://github.com/localazy/cdn-client#readme", + "keywords": [ + "Localazy", + "Localazy CDN", + "CDN", + "TypeScript", + "internationalization", + "translation", + "localization", + "globalization", + "i18n", + "t9n", + "l10n", + "g11n" + ], + "type": "module", + "module": "./dist/localazy-cdn.min.js", + "main": "./dist/cjs/localazy-cdn.min.cjs", + "unpkg": "./dist/umd/localazy-cdn.umd.min.cjs", + "types": "./dist/index.d.ts", + "exports": { + ".": { + "import": { + "default": "./dist/localazy-cdn.js", + "types": "./dist/index.d.ts" + }, + "require": { + "default": "./dist/cjs/localazy-cdn.cjs", + "types": "./dist/index.d.ts" + } + } + }, + "files": [ + "dist/**/*", + "README.md" + ], + "scripts": { + "dev": "vite & npm run main-ts:watch", + "build": "rimraf dist && npm run main-ts:build && vite build", + "main-ts:build": "reexport src/main.ts", + "main-ts:watch": "reexport --watch src/main.ts", + "check": "npm run typecheck && npm run test:coverage && npm run lint", + "typecheck": "npx tsc --noemit", + "test": "vitest", + "test:coverage": "vitest run --coverage", + "test:ui": "vitest --ui", + "test:debug": "vitest --inspect-brk --no-file-parallelism", + "lint": "bash -c 'eslint --ext .ts,.js,.mjs,.cjs --ignore-path <(cat .gitignore .eslintignore) .'", + "lint:fix": "npm run lint -- --fix", + "typedoc": "npm run docs:html && npm run docs:md", + "typedoc:html": "rimraf typedoc/html/* && typedoc --plugin typedoc-plugin-missing-exports --tsconfig tsconfig.typedoc.json --out typedoc/html src/main.ts", + "typedoc:md": "rimraf typedoc/md/* && typedoc --plugin typedoc-plugin-markdown --plugin typedoc-plugin-missing-exports --tsconfig tsconfig.typedoc.json --out typedoc/md src/main.ts" + }, + "dependencies": { + "axios": "^1.6.7", + "lodash": "^4.17.21" + }, + "devDependencies": { + "@types/lodash": "^4.17.0", + "@types/node": "^20.11.26", + "@typescript-eslint/eslint-plugin": "^7.2.0", + "@typescript-eslint/parser": "^7.2.0", + "@vitest/coverage-v8": "^1.3.1", + "@vitest/ui": "^1.3.1", + "axios-mock-adapter": "^1.22.0", + "eslint": "^8.57.0", + "eslint-config-airbnb-base": "^15.0.0", + "eslint-config-airbnb-typescript": "^18.0.0", + "reexport": "^1.4.1", + "rollup-plugin-terser": "^7.0.2", + "typedoc": "^0.25.12", + "typedoc-plugin-markdown": "^3.17.1", + "typedoc-plugin-missing-exports": "^2.2.0", + "vite": "^5.1.6", + "vite-plugin-dts": "^3.7.3", + "vitest": "^1.3.1" + } +} diff --git a/src/cdn/api/api.ts b/src/cdn/api/api.ts new file mode 100644 index 0000000..97fb5dc --- /dev/null +++ b/src/cdn/api/api.ts @@ -0,0 +1,36 @@ +import { AxiosRequestConfig, AxiosResponse, ResponseType } from 'axios'; +import { IMetafile } from '@/interfaces/i-metafile'; +import { ApiLocaleRequest } from '@/types/api-locale-request'; +import { Context } from '@/cdn/context/context'; + +export class Api { + protected context: Context; + + constructor(context: Context) { + this.context = context; + } + + public async fetchLocale(options: ApiLocaleRequest): Promise { + const config: AxiosRequestConfig = { reference: options }; + + if (this.context.cache.has(options)) { + return new Promise((resolve): void => { + resolve({ + data: this.context.cache.get(options), + config, + } as AxiosResponse); + }); + } + + const responseType: ResponseType = /\.(json|json5)$/.test(options.metafileFile.file) ? 'json' : 'text'; + + return this.context.client.get(options.metafileLocale.uri, { ...config, responseType }); + } + + public async fetchMetafile(config?: AxiosRequestConfig): Promise> { + return this.context.client.get( + this.context.metafile.params.jsonPath, + config, + ); + } +} diff --git a/src/cdn/cache/locales-cache.ts b/src/cdn/cache/locales-cache.ts new file mode 100644 index 0000000..6fb82f1 --- /dev/null +++ b/src/cdn/cache/locales-cache.ts @@ -0,0 +1,68 @@ +import uniq from 'lodash/uniq'; +import { ICacheAdapter } from '@/interfaces/i-cache-adapter'; +import { CacheKeyMetafileOptions } from '@/types/cache-key-metafile-options'; +import { CacheGetLocalesRequest } from '@/types/cache-get-locales-request'; +import { CacheHasLocalesRequest } from '@/types/cache-has-locales-request'; +import { CacheStoreLocalesRequest } from '@/types/cache-store-locales-request'; +import { MemoryCacheAdapter } from '@/cdn/cache/memory-cache-adapter'; +import { Context } from '@/cdn/context/context'; + +export class LocalesCache { + protected context: Context; + + protected cacheAdapter: ICacheAdapter; + + constructor(context: Context) { + this.context = context; + this.cacheAdapter = new MemoryCacheAdapter(); + } + + public setIfMissed(options: CacheStoreLocalesRequest): void { + const { metafileFile, metafileLocale, data }: CacheStoreLocalesRequest = options; + + const key: string = this.keyFromMetafile({ + metafileFile, + metafileLocale, + }); + + if (!this.cacheAdapter.has(key)) { + this.cacheAdapter.set(key, data); + } + } + + public has(options: CacheHasLocalesRequest): boolean { + const key: string = this.keyFromMetafile(options); + + return this.cacheAdapter.has(key); + } + + public get(options: CacheGetLocalesRequest): object | string | undefined { + const key: string = this.keyFromMetafile(options); + + return this.cacheAdapter.get(key); + } + + public flush(): void { + this.cacheAdapter.flush(); + } + + protected keyFromMetafile(options: CacheKeyMetafileOptions): string { + const { metafileFile, metafileLocale }: CacheKeyMetafileOptions = options; + const productFlavors: string = [...uniq(metafileFile.productFlavors)].sort().join('-'); + + const indices: string[] = [ + this.context.metafile.params.cdnId, + metafileFile.id, + metafileFile.file, + metafileFile.path, + metafileFile.library, + metafileFile.module, + metafileFile.buildType, + productFlavors, + metafileLocale.locale, + metafileLocale.timestamp.toString(), + ]; + + return indices.filter((key: string): boolean => key !== '').join('-'); + } +} diff --git a/src/cdn/cache/memory-cache-adapter.ts b/src/cdn/cache/memory-cache-adapter.ts new file mode 100644 index 0000000..3149e59 --- /dev/null +++ b/src/cdn/cache/memory-cache-adapter.ts @@ -0,0 +1,25 @@ +import { ICacheAdapter } from '@/interfaces/i-cache-adapter'; + +export class MemoryCacheAdapter implements ICacheAdapter { + protected map: Map; + + constructor() { + this.map = new Map(); + } + + public get(key: K): V | undefined { + return this.map.get(key); + } + + public has(key: K): boolean { + return this.map.has(key); + } + + public set(key: K, value: V): void { + this.map.set(key, value); + } + + public flush(): void { + this.map = new Map(); + } +} diff --git a/src/cdn/cdn-client.ts b/src/cdn/cdn-client.ts new file mode 100644 index 0000000..0d1519a --- /dev/null +++ b/src/cdn/cdn-client.ts @@ -0,0 +1,53 @@ +import { AxiosRequestConfig, CreateAxiosDefaults } from 'axios'; +import isString from 'lodash/isString'; +import { CdnFetchOptions } from '@/types/cdn-fetch-options'; +import { CdnResponse } from '@/types/cdn-response'; +import { CdnCache } from '@/cdn/methods/cdn-cache'; +import { MetafileContext } from '@/cdn/context/metafile-context'; +import { Context } from '@/cdn/context/context'; +import { CdnMetafile } from '@/cdn/methods/cdn-metafile'; +import { RequestBuilder } from '@/cdn/request/request-builder'; +import { AxiosHttpAdapter } from '@/cdn/http/axios-http-adapter'; +import { CdnClientOptions } from '@/types/cdn-client-options'; + +export class CdnClient { + public metafile: CdnMetafile; + + public cache: CdnCache; + + protected context: Context; + + protected constructor(options: CdnClientOptions, config?: CreateAxiosDefaults) { + const metafileContext: MetafileContext = new MetafileContext(options); + const client: AxiosHttpAdapter = new AxiosHttpAdapter(metafileContext.params.baseUrl, config); + + this.context = new Context({ metafileContext, cdn: this, client }); + this.metafile = new CdnMetafile(this.context); + this.cache = new CdnCache(this.context); + } + + public fetch = async (options?: CdnFetchOptions): Promise => { + const { files, locales, excludeBaseLocale }: CdnFetchOptions = options || {}; + const requestBuilder: RequestBuilder = new RequestBuilder(this.context) + .addFiles(files) + .addLocales(locales, excludeBaseLocale); + + return requestBuilder.getCdnRequest().execute(); + }; + + public static async create(options: CdnClientOptions, config?: CreateAxiosDefaults): Promise { + if (!options) { + throw new Error('Invalid param: missing required "options" parameter.'); + } + + if (!isString(options.metafile)) { + throw new Error('Invalid param: "options.metafile" must be string.'); + } + + const cdn: CdnClient = new CdnClient(options, config); + + await cdn.metafile.refresh(config as AxiosRequestConfig); + + return cdn; + } +} diff --git a/src/cdn/context/context.ts b/src/cdn/context/context.ts new file mode 100644 index 0000000..30bb533 --- /dev/null +++ b/src/cdn/context/context.ts @@ -0,0 +1,30 @@ +import { Api } from '@/cdn/api/api'; +import { LocalesCache } from '@/cdn/cache/locales-cache'; +import { CdnClient } from '@/cdn/cdn-client'; +import { ResponseFactory } from '@/cdn/response/response-factory'; +import { ContextOptions } from '@/types/context-options'; +import { MetafileContext } from '@/cdn/context/metafile-context'; +import { IHttpAdapter } from '@/interfaces/i-http-adapter'; + +export class Context { + public metafile: MetafileContext; + + public cdn: CdnClient; + + public client: IHttpAdapter; + + public api: Api; + + public cache: LocalesCache; + + public responseFactory: ResponseFactory; + + constructor(options: ContextOptions) { + this.metafile = options.metafileContext; + this.cdn = options.cdn; + this.client = options.client; + this.api = new Api(this); + this.cache = new LocalesCache(this); + this.responseFactory = new ResponseFactory(this); + } +} diff --git a/src/cdn/context/metafile-context.ts b/src/cdn/context/metafile-context.ts new file mode 100644 index 0000000..381c217 --- /dev/null +++ b/src/cdn/context/metafile-context.ts @@ -0,0 +1,24 @@ +import { MetafileData } from '@/cdn/metafile/metafile-data'; +import { IMetafile } from '@/interfaces/i-metafile'; +import { MetafileParams } from '@/cdn/metafile/metafile-params'; +import { CdnClientOptions } from '@/types/cdn-client-options'; + +export class MetafileContext { + public params: MetafileParams; + + public parsedData: IMetafile | null; + + public data: MetafileData; + + constructor(options: CdnClientOptions) { + this.params = new MetafileParams(options.metafile); + this.parsedData = null; + this.data = MetafileData.createEmpty(this.params); + } + + public setMetafile(metafile: IMetafile): void { + this.parsedData = metafile; + + this.data = new MetafileData(metafile, this.params); + } +} diff --git a/src/cdn/http/axios-http-adapter.ts b/src/cdn/http/axios-http-adapter.ts new file mode 100644 index 0000000..a7b46d6 --- /dev/null +++ b/src/cdn/http/axios-http-adapter.ts @@ -0,0 +1,20 @@ +import axios, { AxiosInstance, AxiosRequestConfig, CreateAxiosDefaults } from 'axios'; +import { IHttpAdapter } from '@/interfaces/i-http-adapter'; + +export class AxiosHttpAdapter implements IHttpAdapter { + public client: AxiosInstance; + + constructor(baseUrl: string, config?: CreateAxiosDefaults) { + this.client = AxiosHttpAdapter.clientFactory(baseUrl, config); + } + + protected static clientFactory(baseURL: string, config?: CreateAxiosDefaults): AxiosInstance { + const clientConfig: CreateAxiosDefaults = { baseURL, ...config }; + + return axios.create(clientConfig); + } + + get(url: string, config?: AxiosRequestConfig): Promise { + return this.client.get(url, config); + } +} diff --git a/src/cdn/metafile/metafile-data.ts b/src/cdn/metafile/metafile-data.ts new file mode 100644 index 0000000..21f3b03 --- /dev/null +++ b/src/cdn/metafile/metafile-data.ts @@ -0,0 +1,94 @@ +import uniqBy from 'lodash/uniqBy'; +import { MetafileParams } from '@/cdn/metafile/metafile-params'; +import { CdnLocale } from '@/types/cdn-locale'; +import { MetafileLocale } from '@/cdn/metafile/metafile-locale'; +import { IMetafile } from '@/interfaces/i-metafile'; +import { IMetafileFileLocale } from '@/interfaces/i-metafile-file-locale'; +import { IMetafileFiles } from '@/interfaces/i-metafile-files'; +import { MetafileFile } from '@/cdn/metafile/metafile-file'; +import { MetafileOptions } from '@/types/metafile-options'; +import { FilesMap } from '@/types/files-map'; + +export class MetafileData implements Omit { + public projectUrl: string; + + public baseLocale: CdnLocale; + + public locales: CdnLocale[]; + + public timestamp: number; + + public files: MetafileFile[]; + + public filesMap: FilesMap; + + constructor(options: MetafileOptions, params: MetafileParams) { + this.projectUrl = options.projectUrl; + this.timestamp = options.timestamp; + this.files = MetafileData.filesFactory(options.files, options.baseLocale, params); + this.filesMap = MetafileData.filesMapFactory(this.files); + this.locales = MetafileData.localesFactory(this.files); + this.baseLocale = this.locales.find((locale: CdnLocale) => locale.isBaseLocale) as CdnLocale; + } + + public static createEmpty(params: MetafileParams): MetafileData { + return new MetafileData( + { + projectUrl: '', + baseLocale: '', + timestamp: 0, + files: {}, + }, + params, + ); + } + + protected static filesFactory(files: IMetafileFiles, baseLocale: string, params: MetafileParams): MetafileFile[] { + return Object.keys(files).reduce( + (acc: MetafileFile[], cur: string) => { + const locales: MetafileLocale[] = files[cur].locales.map( + (locale: IMetafileFileLocale) => new MetafileLocale(locale, baseLocale), + ); + + acc.push( + new MetafileFile({ + ...files[cur], + id: cur, + locales, + baseUrl: params.baseUrl, + }), + ); + + return acc; + }, + [], + ); + } + + protected static filesMapFactory(files: MetafileFile[]): FilesMap { + return files.reduce( + (acc: FilesMap, cur: MetafileFile) => { + acc[cur.id] = cur; + + return acc; + }, + {}, + ); + } + + protected static localesFactory(files: MetafileFile[]): CdnLocale[] { + const locales: CdnLocale[] = files.reduce( + (acc: CdnLocale[], cur: MetafileFile) => { + acc.push( + ...cur.locales.map( + (locale: MetafileLocale): CdnLocale => locale.toCdnLocale(), + ), + ); + return acc; + }, + [], + ); + + return uniqBy(locales, (cdnLocale: CdnLocale) => cdnLocale.locale); + } +} diff --git a/src/cdn/metafile/metafile-file.ts b/src/cdn/metafile/metafile-file.ts new file mode 100644 index 0000000..9322890 --- /dev/null +++ b/src/cdn/metafile/metafile-file.ts @@ -0,0 +1,57 @@ +import { CdnFile } from '@/types/cdn-file'; +import { CdnFileLocale } from '@/types/cdn-file-locale'; +import { MetafileLocale } from '@/cdn/metafile/metafile-locale'; +import { IMetafileFile } from '@/interfaces/i-metafile-file'; +import { MetafileFileOptions } from '@/types/metafile-file-options'; + +export class MetafileFile implements Omit { + public id: string; + + public file: string; + + public path: string; + + public library: string; + + public module: string; + + public buildType: string; + + public timestamp: number; + + public productFlavors: string[]; + + public locales: MetafileLocale[]; + + protected baseUrl: string; + + constructor(options: MetafileFileOptions) { + this.id = options.id; + this.file = options.file; + this.path = options.path; + this.library = options.library; + this.module = options.module; + this.buildType = options.buildType; + this.timestamp = options.timestamp; + this.productFlavors = options.productFlavors; + this.locales = options.locales; + this.baseUrl = options.baseUrl; + } + + public toCdnFile(): CdnFile { + return { + id: this.id, + file: this.file, + path: this.path, + library: this.library, + module: this.module, + buildType: this.buildType, + productFlavors: this.productFlavors, + locales: this.locales.map((locale: MetafileLocale): CdnFileLocale => ({ + locale: locale.locale, + isBaseLocale: locale.isBaseLocale, + uri: `${this.baseUrl}${locale.uri}`, + })), + }; + } +} diff --git a/src/cdn/metafile/metafile-locale.ts b/src/cdn/metafile/metafile-locale.ts new file mode 100644 index 0000000..ccf296f --- /dev/null +++ b/src/cdn/metafile/metafile-locale.ts @@ -0,0 +1,67 @@ +import { CdnLocale } from '@/types/cdn-locale'; +import { IMetafileFileLocale } from '@/interfaces/i-metafile-file-locale'; + +export class MetafileLocale implements IMetafileFileLocale { + public language: string; + + public region: string; + + public script: string; + + public isRtl: boolean; + + public name: string; + + public localizedName: string; + + public uri: string; + + public timestamp: number; + + protected baseLocale: string; + + constructor(options: IMetafileFileLocale, baseLocale: string) { + this.language = options.language; + this.region = options.region; + this.script = options.script; + this.isRtl = options.isRtl; + this.name = options.name; + this.localizedName = options.localizedName; + this.uri = options.uri; + this.timestamp = options.timestamp; + this.baseLocale = baseLocale; + } + + get locale(): string { + if (this.language && this.region && this.script) { + return `${this.language}_${this.region}#${this.script}`; + } + + if (this.language && this.script) { + return `${this.language}#${this.script}`; + } + + if (this.language && this.region) { + return `${this.language}_${this.region}`; + } + + return this.language; + } + + get isBaseLocale(): boolean { + return this.locale === this.baseLocale; + } + + public toCdnLocale(): CdnLocale { + return { + locale: this.locale, + isBaseLocale: this.isBaseLocale, + language: this.language, + region: this.region, + script: this.script, + isRtl: this.isRtl, + name: this.name, + localizedName: this.localizedName, + }; + } +} diff --git a/src/cdn/metafile/metafile-params.ts b/src/cdn/metafile/metafile-params.ts new file mode 100644 index 0000000..951e5dc --- /dev/null +++ b/src/cdn/metafile/metafile-params.ts @@ -0,0 +1,51 @@ +import { IMetafileParams } from '@/interfaces/i-metafile-params'; + +export class MetafileParams implements IMetafileParams { + protected options: IMetafileParams; + + constructor(metafileUrl: string) { + this.options = MetafileParams.parseMetafileUrl(metafileUrl); + } + + get url(): string { + return this.options.url; + } + + get baseUrl(): string { + return this.options.baseUrl; + } + + get cdnId(): string { + return this.options.cdnId; + } + + get jsonPath(): string { + return this.options.jsonPath; + } + + protected static parseMetafileUrl(metafileUrl: string): IMetafileParams { + let url: URL; + + try { + url = new URL(metafileUrl); + } catch (e) { + throw new Error('Invalid param: "options.metafile" cannot be parsed as url.'); + } + + const matches: string[] | null = url.pathname.match(/^\/(.*?)\/(.*?)\.(v2.json|js|ts)$/); + + if (matches === null || matches.length !== 4) { + throw new Error('Invalid param: "options.metafile" contains invalid metafile url.'); + } + + const cdnId: string = matches[1]; + const tagId: string = matches[2]; + + return { + url: metafileUrl, + baseUrl: url.origin, + cdnId, + jsonPath: `/${cdnId}/${tagId}.v2.json`, + }; + } +} diff --git a/src/cdn/methods/cdn-base.ts b/src/cdn/methods/cdn-base.ts new file mode 100644 index 0000000..203aa9d --- /dev/null +++ b/src/cdn/methods/cdn-base.ts @@ -0,0 +1,9 @@ +import { Context } from '@/cdn/context/context'; + +export abstract class CdnBase { + protected context: Context; + + constructor(context: Context) { + this.context = context; + } +} diff --git a/src/cdn/methods/cdn-cache.ts b/src/cdn/methods/cdn-cache.ts new file mode 100644 index 0000000..31b4b09 --- /dev/null +++ b/src/cdn/methods/cdn-cache.ts @@ -0,0 +1,7 @@ +import { CdnBase } from '@/cdn/methods/cdn-base'; + +export class CdnCache extends CdnBase { + public flush = (): void => { + this.context.cache.flush(); + }; +} diff --git a/src/cdn/methods/cdn-metafile-files.ts b/src/cdn/methods/cdn-metafile-files.ts new file mode 100644 index 0000000..eacfefd --- /dev/null +++ b/src/cdn/methods/cdn-metafile-files.ts @@ -0,0 +1,63 @@ +import filter from 'lodash/filter'; +import find from 'lodash/find'; +import isFunction from 'lodash/isFunction'; +import isPlainObject from 'lodash/isPlainObject'; +import matches from 'lodash/matches'; +import { CdnFile } from '@/types/cdn-file'; +import { MetafileFile } from '@/cdn/metafile/metafile-file'; +import { CdnBase } from '@/cdn/methods/cdn-base'; +import { CdnFilesSearchOptions } from '@/types/cdn-files-search-options'; + +export class CdnMetafileFiles extends CdnBase { + public list = (): CdnFile[] => CdnMetafileFiles.transformFiles(this.context.metafile.data.files); + + public filter = (options: CdnFilesSearchOptions): CdnFile[] => { + if (!options) { + throw new Error('Invalid param: missing required "options" parameter.'); + } + + if (!isFunction(options) && !(isPlainObject(options))) { + throw new Error('Invalid param: "options" must be function or object.'); + } + + const files: CdnFile[] = CdnMetafileFiles.transformFiles(this.context.metafile.data.files); + + if (isFunction(options)) { + return files.filter(options); + } + + return filter(files, matches(options)); + }; + + public find = (options: CdnFilesSearchOptions): CdnFile | undefined => { + if (!options) { + throw new Error('Invalid param: missing required "options" parameter.'); + } + + if (!isFunction(options) && !isPlainObject(options)) { + throw new Error('Invalid param: "options" must be function or object.'); + } + + const files: CdnFile[] = CdnMetafileFiles.transformFiles(this.context.metafile.data.files); + + if (isFunction(options)) { + return files.find(options); + } + + return find(files, matches(options)); + }; + + public first = (): CdnFile => { + if (this.context.metafile.data.files.length === 0) { + throw new Error('File is missing in downloaded metafile.'); + } + + const files: CdnFile[] = CdnMetafileFiles.transformFiles(this.context.metafile.data.files); + + return files[0]; + }; + + protected static transformFiles = (files: MetafileFile[]): CdnFile[] => files.map( + (file: MetafileFile) => file.toCdnFile(), + ); +} diff --git a/src/cdn/methods/cdn-metafile.ts b/src/cdn/methods/cdn-metafile.ts new file mode 100644 index 0000000..3efb5d6 --- /dev/null +++ b/src/cdn/methods/cdn-metafile.ts @@ -0,0 +1,53 @@ +import { AxiosRequestConfig, AxiosResponse } from 'axios'; +import { MetafileParams } from '@/cdn/metafile/metafile-params'; +import { CdnClientOptions } from '@/types/cdn-client-options'; +import { Context } from '@/cdn/context/context'; +import { MetafileData } from '@/cdn/metafile/metafile-data'; +import { CdnBase } from '@/cdn/methods/cdn-base'; +import { CdnMetafileFiles } from '@/cdn/methods/cdn-metafile-files'; +import { CdnLocalesOptions } from '@/types/cdn-locales-options'; +import { IMetafile } from '@/interfaces/i-metafile'; +import { CdnLocale } from '@/types/cdn-locale'; + +export class CdnMetafile extends CdnBase { + public files: CdnMetafileFiles; + + constructor(context: Context) { + super(context); + + this.files = new CdnMetafileFiles(context); + } + + get projectUrl(): string { + return this.context.metafile.data.projectUrl; + } + + get baseLocale(): CdnLocale { + return this.context.metafile.data.baseLocale; + } + + get url(): string { + return this.context.metafile.params.url; + } + + public locales = (options?: CdnLocalesOptions): CdnLocale[] => { + const { excludeBaseLocale }: CdnLocalesOptions = options || {}; + const { locales }: MetafileData = this.context.metafile.data; + + return excludeBaseLocale + ? locales.filter((cdnLocale: CdnLocale): boolean => !cdnLocale.isBaseLocale) + : locales; + }; + + public refresh = async (config?: AxiosRequestConfig): Promise => { + const response: AxiosResponse = await this.context.api.fetchMetafile(config); + + this.context.metafile.setMetafile(response.data); + }; + + public switch = async (options: CdnClientOptions, config?: AxiosRequestConfig): Promise => { + this.context.metafile.params = new MetafileParams(options.metafile); + + await this.refresh(config); + }; +} diff --git a/src/cdn/request/locales-map.ts b/src/cdn/request/locales-map.ts new file mode 100644 index 0000000..6872ebf --- /dev/null +++ b/src/cdn/request/locales-map.ts @@ -0,0 +1,14 @@ +import { Context } from '@/cdn/context/context'; +import { LocalesMapData } from '@/types/locales-map-data'; +import { LocalesMapOptions } from '@/types/locales-map-options'; + +export class LocalesMap { + public data: LocalesMapData; + + protected context: Context; + + constructor(options: LocalesMapOptions) { + this.context = options.context; + this.data = options.data || {}; + } +} diff --git a/src/cdn/request/request-builder.ts b/src/cdn/request/request-builder.ts new file mode 100644 index 0000000..0014777 --- /dev/null +++ b/src/cdn/request/request-builder.ts @@ -0,0 +1,152 @@ +import isPlainObject from 'lodash/isPlainObject'; +import isUndefined from 'lodash/isUndefined'; +import isString from 'lodash/isString'; +import isArray from 'lodash/isArray'; +import { CdnFile } from '@/types/cdn-file'; +import { MetafileLocale } from '@/cdn/metafile/metafile-locale'; +import { LocalesMap } from '@/cdn/request/locales-map'; +import { Context } from '@/cdn/context/context'; +import { MetafileFile } from '@/cdn/metafile/metafile-file'; +import { IRequestBuilder } from '@/interfaces/i-request-builder'; +import { Request } from '@/cdn/request/request'; + +export class RequestBuilder implements IRequestBuilder { + protected context: Context; + + protected request: Request; + + constructor(context: Context) { + this.context = context; + this.request = new Request(this.context); + } + + public addFiles(files?: (CdnFile | string)[] | CdnFile | string): RequestBuilder { + if (!(isPlainObject(files) || isString(files) || isUndefined(files) || isArray(files))) { + throw new Error('Invalid param: "request.files" must be object, array, string or undefined.'); + } + + if (isArray(files)) { + files.forEach((i: CdnFile | string): void => { + if (!(isPlainObject(i) || isString(i))) { + throw new Error('Invalid param: array "request.files" must contain objects or strings.'); + } + }); + } + + if (isString(files)) { + this.request.hasSingleFileResponse = true; + + const file: MetafileFile | undefined = this.context.metafile.data.files.find( + (i: MetafileFile): boolean => i.id === files, + ); + + if (!(file instanceof MetafileFile)) { + throw new Error(`File not found: "${files}".`); + } + + this.request.files = [file]; + } else if (isUndefined(files)) { + this.request.files = [...this.context.metafile.data.files]; + } else if (isArray(files)) { + this.request.files = files.map((file: CdnFile | string): MetafileFile => { + let metafileFile: MetafileFile; + + if (isString(file)) { + const foundFile: MetafileFile | undefined = this.context.metafile.data.files.find( + (i: MetafileFile): boolean => i.id === file, + ); + + if (isUndefined(foundFile)) { + throw new Error(`File not found: "${file}".`); + } + + metafileFile = foundFile; + } else { + const foundFile: MetafileFile | undefined = this.context.metafile.data.files.find( + (i: MetafileFile): boolean => i.id === file.id, + ); + + if (isUndefined(foundFile)) { + throw new Error(`File not found: "${file.id}".`); + } + + metafileFile = foundFile; + } + + return metafileFile; + }); + } else if (isPlainObject(files)) { + this.request.hasSingleFileResponse = true; + + const foundFile: MetafileFile | undefined = this.context.metafile.data.files.find( + (i: MetafileFile): boolean => i.id === files.id, + ); + + if (isUndefined(foundFile)) { + throw new Error(`File not found: "${files.id}".`); + } + + this.request.files = [foundFile]; + } + + return this; + } + + public addLocales(locales?: string[] | string, excludeBaseLocale?: boolean): RequestBuilder { + if (!(isString(locales) || isUndefined(locales) || isArray(locales))) { + throw new Error('Invalid param: "request.locales" must be array, string or undefined.'); + } + + if (isArray(locales)) { + locales.forEach((i: MetafileFile | string): void => { + if (!isString(i)) { + throw new Error('Invalid param: array "request.locales" must contain strings.'); + } + }); + } + + if (isString(locales)) { + this.request.hasSingleLocaleResponse = true; + this.request.files.reduce( + (acc: LocalesMap, cur: MetafileFile) => { + acc.data[cur.id] = cur.locales.filter( + (metafileLocale: MetafileLocale): boolean => metafileLocale.locale === locales, + ); + + return acc; + }, + this.request.localesMap, + ); + } else if (isUndefined(locales)) { + this.request.files.reduce( + (acc: LocalesMap, cur: MetafileFile) => { + acc.data[cur.id] = excludeBaseLocale + ? cur.locales.filter((metafileLocale: MetafileLocale): boolean => !metafileLocale.isBaseLocale) + : cur.locales; + + return acc; + }, + this.request.localesMap, + ); + } else if (isArray(locales)) { + this.request.files.reduce( + (acc: LocalesMap, cur: MetafileFile) => { + acc.data[cur.id] = cur.locales.filter( + (metafileLocale: MetafileLocale) => locales.includes(metafileLocale.locale), + ); + + return acc; + }, + this.request.localesMap, + ); + } + + return this; + } + + public getCdnRequest(): Request { + const result: Request = this.request; + this.request = new Request(this.context); + return result; + } +} diff --git a/src/cdn/request/request.ts b/src/cdn/request/request.ts new file mode 100644 index 0000000..59b04d0 --- /dev/null +++ b/src/cdn/request/request.ts @@ -0,0 +1,54 @@ +import { AxiosResponse } from 'axios'; +import { Context } from '@/cdn/context/context'; +import { MetafileFile } from '@/cdn/metafile/metafile-file'; +import { MetafileLocale } from '@/cdn/metafile/metafile-locale'; +import { LocalesMap } from '@/cdn/request/locales-map'; +import { CdnResponse } from '@/types/cdn-response'; + +export class Request { + public files: MetafileFile[]; + + public localesMap: LocalesMap; + + public hasSingleFileResponse: boolean; + + public hasSingleLocaleResponse: boolean; + + protected context: Context; + + constructor(context: Context) { + this.files = []; + this.localesMap = new LocalesMap({ context }); + this.hasSingleFileResponse = false; + this.hasSingleLocaleResponse = false; + this.context = context; + } + + public async execute(): Promise { + return this.context.responseFactory.createCdnResponse({ + responses: await Promise.all(this.getPromises()), + localesMap: this.localesMap, + hasSingleFileResponse: this.hasSingleFileResponse, + hasSingleLocaleResponse: this.hasSingleLocaleResponse, + }); + } + + protected getPromises(): Promise>[] { + return this.files.reduce( + (acc: Promise>[], cur: MetafileFile) => { + if (this.localesMap.data[cur.id]) { + acc.push( + ...this.localesMap.data[cur.id].map( + (metafileLocale: MetafileLocale) => this.context.api.fetchLocale({ + metafileFile: cur, + metafileLocale, + }), + ), + ); + } + return acc; + }, + [], + ); + } +} diff --git a/src/cdn/response/response-factory.ts b/src/cdn/response/response-factory.ts new file mode 100644 index 0000000..6639b4e --- /dev/null +++ b/src/cdn/response/response-factory.ts @@ -0,0 +1,87 @@ +import { AxiosResponse } from 'axios'; +import { Context } from '@/cdn/context/context'; +import { MetafileFile } from '@/cdn/metafile/metafile-file'; +import { MetafileLocale } from '@/cdn/metafile/metafile-locale'; +import { ResponseFactoryOptions } from '@/types/response-factory-options'; +import { CacheStoreLocalesRequest } from '@/types/cache-store-locales-request'; +import { CdnResponse } from '@/types/cdn-response'; + +export class ResponseFactory { + protected context: Context; + + constructor(context: Context) { + this.context = context; + } + + public createCdnResponse(options: ResponseFactoryOptions): CdnResponse { + const { responses, hasSingleFileResponse, hasSingleLocaleResponse }: ResponseFactoryOptions = options; + + if (responses.length === 0) { + return {}; + } + + this.cacheResponses(responses); + + return hasSingleFileResponse && hasSingleLocaleResponse + ? responses[0].data + : ResponseFactory.transformResponsesToOutput(options); + } + + protected cacheResponses(responses: AxiosResponse[]): void { + responses.forEach((response: AxiosResponse): void => { + const { + metafileFile, + metafileLocale, + }: Partial = ResponseFactory.extractReference(response); + + if (metafileFile && metafileLocale) { + this.context.cache.setIfMissed({ metafileFile, metafileLocale, data: response.data }); + } + }); + } + + protected static transformResponsesToOutput(options: ResponseFactoryOptions): CdnResponse { + const { responses, hasSingleFileResponse }: ResponseFactoryOptions = options; + + return responses.reduce( + (acc: CdnResponse, cur: AxiosResponse) => { + const { + metafileFile, + metafileLocale, + }: Partial = ResponseFactory.extractReference(cur); + + if (metafileFile && metafileLocale) { + if (hasSingleFileResponse) { + // @ts-expect-error fix output type + acc[metafileLocale.locale] = cur.data; + } else { + // @ts-expect-error fix output type + if (!acc[metafileFile.id]) { + // @ts-expect-error fix output type + acc[metafileFile.id] = {}; + } + + // @ts-expect-error fix output type + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access + acc[metafileFile.id][metafileLocale.locale] = cur.data; + } + } + + return acc; + }, + {}, + ); + } + + protected static extractReference(response: AxiosResponse): Partial { + const metafileFile: MetafileFile | undefined = response.config.reference?.metafileFile; + const metafileLocale: MetafileLocale | undefined = response.config.reference?.metafileLocale; + const { data }: AxiosResponse = response; + + return { + metafileFile, + metafileLocale, + data, + }; + } +} diff --git a/src/interfaces/i-cache-adapter.ts b/src/interfaces/i-cache-adapter.ts new file mode 100644 index 0000000..22c2cca --- /dev/null +++ b/src/interfaces/i-cache-adapter.ts @@ -0,0 +1,6 @@ +export interface ICacheAdapter { + has: (key: K) => boolean, + get: (key: K) => V | undefined, + set: (key: K, value: V) => void, + flush: () => void, +} diff --git a/src/interfaces/i-http-adapter.ts b/src/interfaces/i-http-adapter.ts new file mode 100644 index 0000000..4453034 --- /dev/null +++ b/src/interfaces/i-http-adapter.ts @@ -0,0 +1,5 @@ +import { AxiosRequestConfig } from 'axios'; + +export interface IHttpAdapter { + get(url: string, config?: AxiosRequestConfig): Promise; +} diff --git a/src/interfaces/i-locales-cache-item.ts b/src/interfaces/i-locales-cache-item.ts new file mode 100644 index 0000000..13dd952 --- /dev/null +++ b/src/interfaces/i-locales-cache-item.ts @@ -0,0 +1,7 @@ +import { MetafileFile } from '@/cdn/metafile/metafile-file'; +import { MetafileLocale } from '@/cdn/metafile/metafile-locale'; + +export interface ILocalesCacheItem { + metafileFile: MetafileFile; + metafileLocale: MetafileLocale; +} diff --git a/src/interfaces/i-metafile-file-locale.ts b/src/interfaces/i-metafile-file-locale.ts new file mode 100644 index 0000000..86f9d12 --- /dev/null +++ b/src/interfaces/i-metafile-file-locale.ts @@ -0,0 +1,10 @@ +export interface IMetafileFileLocale { + language: string; + region: string; + script: string; + isRtl: boolean; + name: string; + localizedName: string; + uri: string; + timestamp: number; +} diff --git a/src/interfaces/i-metafile-file.ts b/src/interfaces/i-metafile-file.ts new file mode 100644 index 0000000..d92a00d --- /dev/null +++ b/src/interfaces/i-metafile-file.ts @@ -0,0 +1,12 @@ +import { IMetafileFileLocale } from '@/interfaces/i-metafile-file-locale'; + +export interface IMetafileFile { + file: string; + path: string; + library: string; + module: string; + buildType: string; + timestamp: number; + productFlavors: string[]; + locales: IMetafileFileLocale[]; +} diff --git a/src/interfaces/i-metafile-files.ts b/src/interfaces/i-metafile-files.ts new file mode 100644 index 0000000..175c62f --- /dev/null +++ b/src/interfaces/i-metafile-files.ts @@ -0,0 +1,5 @@ +import { IMetafileFile } from '@/interfaces/i-metafile-file'; + +export interface IMetafileFiles { + [id: string]: IMetafileFile; +} diff --git a/src/interfaces/i-metafile-params.ts b/src/interfaces/i-metafile-params.ts new file mode 100644 index 0000000..b2aba9d --- /dev/null +++ b/src/interfaces/i-metafile-params.ts @@ -0,0 +1,6 @@ +export interface IMetafileParams { + url: string; + baseUrl: string; + cdnId: string; + jsonPath: string; +} diff --git a/src/interfaces/i-metafile.ts b/src/interfaces/i-metafile.ts new file mode 100644 index 0000000..5781b36 --- /dev/null +++ b/src/interfaces/i-metafile.ts @@ -0,0 +1,8 @@ +import { IMetafileFiles } from '@/interfaces/i-metafile-files'; + +export interface IMetafile { + projectUrl: string; + baseLocale: string; + timestamp: number; + files: IMetafileFiles; +} diff --git a/src/interfaces/i-request-builder.ts b/src/interfaces/i-request-builder.ts new file mode 100644 index 0000000..d2af31a --- /dev/null +++ b/src/interfaces/i-request-builder.ts @@ -0,0 +1,10 @@ +import { Request } from '@/cdn/request/request'; +import { CdnFile } from '@/types/cdn-file'; + +export interface IRequestBuilder { + addFiles(request?: (CdnFile | string)[] | CdnFile | string): IRequestBuilder; + + addLocales(request?: string[] | string, excludeBaseLocale?: boolean): IRequestBuilder; + + getCdnRequest(): Request; +} diff --git a/src/main.ts b/src/main.ts new file mode 100644 index 0000000..0d22b1f --- /dev/null +++ b/src/main.ts @@ -0,0 +1,68 @@ +/** + * DO NOT EDIT EXPORTS IN THIS FILE. + * EXPORTS ARE AUTO-GENERATED BASED ON INSTRUCTIONS IN `@reexport` COMMENTS. + * + * Use these scripts: + * - npm run main-ts:build + * - npm run main-ts:watch + * + * Please note that `npm run dev` script already contains `run main-ts:watch`. + * + * Available variables for reexport configuration: + * https://github.com/ViliamKopecky/reexport#available-variables + */ + +// @reexport ./**/*[!*.d].ts:export * from '@/$TS_PATH'; +export * from '@/cdn/api/api'; +export * from '@/cdn/cache/locales-cache'; +export * from '@/cdn/cache/memory-cache-adapter'; +export * from '@/cdn/cdn-client'; +export * from '@/cdn/context/context'; +export * from '@/cdn/context/metafile-context'; +export * from '@/cdn/http/axios-http-adapter'; +export * from '@/cdn/metafile/metafile-data'; +export * from '@/cdn/metafile/metafile-file'; +export * from '@/cdn/metafile/metafile-locale'; +export * from '@/cdn/metafile/metafile-params'; +export * from '@/cdn/methods/cdn-base'; +export * from '@/cdn/methods/cdn-cache'; +export * from '@/cdn/methods/cdn-metafile-files'; +export * from '@/cdn/methods/cdn-metafile'; +export * from '@/cdn/request/locales-map'; +export * from '@/cdn/request/request-builder'; +export * from '@/cdn/request/request'; +export * from '@/cdn/response/response-factory'; +export * from '@/interfaces/i-cache-adapter'; +export * from '@/interfaces/i-http-adapter'; +export * from '@/interfaces/i-locales-cache-item'; +export * from '@/interfaces/i-metafile-file-locale'; +export * from '@/interfaces/i-metafile-file'; +export * from '@/interfaces/i-metafile-files'; +export * from '@/interfaces/i-metafile-params'; +export * from '@/interfaces/i-metafile'; +export * from '@/interfaces/i-request-builder'; +export * from '@/types/api-locale-request'; +export * from '@/types/cache-get-locales-request'; +export * from '@/types/cache-has-locales-request'; +export * from '@/types/cache-key-metafile-options'; +export * from '@/types/cache-store-locales-request'; +export * from '@/types/cdn-client-options'; +export * from '@/types/cdn-fetch-options'; +export * from '@/types/cdn-file-locale'; +export * from '@/types/cdn-file'; +export * from '@/types/cdn-files-search-options'; +export * from '@/types/cdn-locale'; +export * from '@/types/cdn-locales-options'; +export * from '@/types/cdn-response'; +export * from '@/types/context-options'; +export * from '@/types/exclude-base-locale'; +export * from '@/types/file-response'; +export * from '@/types/files-map'; +export * from '@/types/json-response'; +export * from '@/types/locale-response'; +export * from '@/types/locales-map-data'; +export * from '@/types/locales-map-options'; +export * from '@/types/metafile-file-options'; +export * from '@/types/metafile-options'; +export * from '@/types/response-factory-options'; +// @end-reexport diff --git a/src/shims-axios.d.ts b/src/shims-axios.d.ts new file mode 100644 index 0000000..ae81a0b --- /dev/null +++ b/src/shims-axios.d.ts @@ -0,0 +1,12 @@ +import 'axios'; +import { MetafileFile } from '@/cdn/metafile/metafile-file'; +import { MetafileLocale } from '@/cdn/metafile/metafile-locale'; + +declare module 'axios' { + export interface AxiosRequestConfig { + reference?: { + metafileFile?: MetafileFile, + metafileLocale?: MetafileLocale, + }, + } +} diff --git a/src/types/api-locale-request.ts b/src/types/api-locale-request.ts new file mode 100644 index 0000000..e1a0d25 --- /dev/null +++ b/src/types/api-locale-request.ts @@ -0,0 +1,3 @@ +import { ILocalesCacheItem } from '@/interfaces/i-locales-cache-item'; + +export type ApiLocaleRequest = ILocalesCacheItem; diff --git a/src/types/cache-get-locales-request.ts b/src/types/cache-get-locales-request.ts new file mode 100644 index 0000000..eeff029 --- /dev/null +++ b/src/types/cache-get-locales-request.ts @@ -0,0 +1,3 @@ +import { ILocalesCacheItem } from '@/interfaces/i-locales-cache-item'; + +export type CacheGetLocalesRequest = ILocalesCacheItem; diff --git a/src/types/cache-has-locales-request.ts b/src/types/cache-has-locales-request.ts new file mode 100644 index 0000000..368591c --- /dev/null +++ b/src/types/cache-has-locales-request.ts @@ -0,0 +1,3 @@ +import { ILocalesCacheItem } from '@/interfaces/i-locales-cache-item'; + +export type CacheHasLocalesRequest = ILocalesCacheItem; diff --git a/src/types/cache-key-metafile-options.ts b/src/types/cache-key-metafile-options.ts new file mode 100644 index 0000000..863aad0 --- /dev/null +++ b/src/types/cache-key-metafile-options.ts @@ -0,0 +1,3 @@ +import { ILocalesCacheItem } from '@/interfaces/i-locales-cache-item'; + +export type CacheKeyMetafileOptions = ILocalesCacheItem; diff --git a/src/types/cache-store-locales-request.ts b/src/types/cache-store-locales-request.ts new file mode 100644 index 0000000..e3a7831 --- /dev/null +++ b/src/types/cache-store-locales-request.ts @@ -0,0 +1,5 @@ +import { ILocalesCacheItem } from '@/interfaces/i-locales-cache-item'; + +export type CacheStoreLocalesRequest = ILocalesCacheItem & { + data: object | string +}; diff --git a/src/types/cdn-client-options.ts b/src/types/cdn-client-options.ts new file mode 100644 index 0000000..02b745a --- /dev/null +++ b/src/types/cdn-client-options.ts @@ -0,0 +1,8 @@ +// #region typedef +export type CdnClientOptions = { + /** + * Project metafile URL. + */ + metafile: string; +}; +// #endregion typedef diff --git a/src/types/cdn-fetch-options.ts b/src/types/cdn-fetch-options.ts new file mode 100644 index 0000000..25ce3a0 --- /dev/null +++ b/src/types/cdn-fetch-options.ts @@ -0,0 +1,24 @@ +import { CdnFile } from '@/types/cdn-file'; + +// #region typedef +export type CdnFetchOptions = { + /** + * Select single or multiple files to fetch from the CDN. + * + * Default: all files in the metafile. + */ + files?: (CdnFile | string)[] | CdnFile | string; + + /** + * Select single or multiple locales to fetch from the CDN. + * + * Default: all locales in the metafile. + */ + locales?: string[] | string, + + /** + * Exclude the base locale from the list of locales to fetch. + */ + excludeBaseLocale?: boolean; +}; +// #endregion typedef diff --git a/src/types/cdn-file-locale.ts b/src/types/cdn-file-locale.ts new file mode 100644 index 0000000..4632e88 --- /dev/null +++ b/src/types/cdn-file-locale.ts @@ -0,0 +1,18 @@ +// #region typedef +export type CdnFileLocale = { + /** + * Locale code. + */ + locale: string; + + /** + * Boolean indicating if this is the base locale. + */ + isBaseLocale: boolean; + + /** + * File URI. + */ + uri: string; +}; +// #endregion typedef diff --git a/src/types/cdn-file.ts b/src/types/cdn-file.ts new file mode 100644 index 0000000..1469aac --- /dev/null +++ b/src/types/cdn-file.ts @@ -0,0 +1,45 @@ +import { CdnFileLocale } from '@/types/cdn-file-locale'; + +// #region typedef +export type CdnFile = { + /** + * File ID. + */ + id: string; + + /** + * File name. + */ + file: string; + + /** + * File path. + */ + path: string; + + /** + * File library. + */ + library: string; + + /** + * File module. + */ + module: string; + + /** + * File build type. + */ + buildType: string; + + /** + * File product flavors. + */ + productFlavors: string[]; + + /** + * File locales. + */ + locales: CdnFileLocale[]; +}; +// #endregion typedef diff --git a/src/types/cdn-files-search-options.ts b/src/types/cdn-files-search-options.ts new file mode 100644 index 0000000..02f0bc8 --- /dev/null +++ b/src/types/cdn-files-search-options.ts @@ -0,0 +1,15 @@ +import { CdnFile } from '@/types/cdn-file'; + +// #region typedef +export type CdnFilesSearchOptions = + | ((file: CdnFile, index?: number, array?: CdnFile[]) => boolean) + | { + id?: string; + file?: string; + path?: string; + library?: string; + module?: string; + buildType?: string; + productFlavors?: string[]; + }; +// #endregion typedef diff --git a/src/types/cdn-locale.ts b/src/types/cdn-locale.ts new file mode 100644 index 0000000..f17db09 --- /dev/null +++ b/src/types/cdn-locale.ts @@ -0,0 +1,43 @@ +// #region typedef +export type CdnLocale = { + /** + * Locale code. + */ + locale: string; + + /** + * Boolean indicating if this is the base locale. + */ + isBaseLocale: boolean; + + /** + * Language code. + */ + language: string; + + /** + * Region code. + */ + region?: string; + + /** + * Script code. + */ + script?: string; + + /** + * Boolean indicating if the locale is right-to-left. + */ + isRtl: boolean; + + /** + * Locale name. + */ + name: string; + + /** + * Localized locale name. + */ + localizedName: string; +}; +// #endregion typedef diff --git a/src/types/cdn-locales-options.ts b/src/types/cdn-locales-options.ts new file mode 100644 index 0000000..8140366 --- /dev/null +++ b/src/types/cdn-locales-options.ts @@ -0,0 +1,6 @@ +export type CdnLocalesOptions = { + /** + * Exclude the base locale from the list of locales. + */ + excludeBaseLocale?: boolean; +}; diff --git a/src/types/cdn-response.ts b/src/types/cdn-response.ts new file mode 100644 index 0000000..d554b58 --- /dev/null +++ b/src/types/cdn-response.ts @@ -0,0 +1,26 @@ +export type CdnResponse = + /** + * Map of file IDs with locales map as value. + */ + | { + [fileId: string]: { + /** + * Map of locales with file content as value. + */ + [locale: string]: object | string; + }; + } + /** + * Map of locales with file content as value. + */ + | { + [locale: string]: object | string; + } + /** + * File content. + */ + | object + /** + * File content as string for non-JSON files. + */ + | string; diff --git a/src/types/context-options.ts b/src/types/context-options.ts new file mode 100644 index 0000000..9b327db --- /dev/null +++ b/src/types/context-options.ts @@ -0,0 +1,9 @@ +import { CdnClient } from '@/cdn/cdn-client'; +import { MetafileContext } from '@/cdn/context/metafile-context'; +import { IHttpAdapter } from '@/interfaces/i-http-adapter'; + +export type ContextOptions = { + metafileContext: MetafileContext; + cdn: CdnClient; + client: IHttpAdapter; +}; diff --git a/src/types/exclude-base-locale.ts b/src/types/exclude-base-locale.ts new file mode 100644 index 0000000..051c153 --- /dev/null +++ b/src/types/exclude-base-locale.ts @@ -0,0 +1,3 @@ +export type ExcludeBaseLocale = { + excludeBaseLocale?: boolean; +}; diff --git a/src/types/file-response.ts b/src/types/file-response.ts new file mode 100644 index 0000000..eb8ba20 --- /dev/null +++ b/src/types/file-response.ts @@ -0,0 +1,5 @@ +import { LocaleResponse } from '@/types/locale-response'; + +export type FileResponse = { + [fileId: string]: LocaleResponse +}; diff --git a/src/types/files-map.ts b/src/types/files-map.ts new file mode 100644 index 0000000..3f00cd5 --- /dev/null +++ b/src/types/files-map.ts @@ -0,0 +1,5 @@ +import { MetafileFile } from '@/cdn/metafile/metafile-file'; + +export type FilesMap = { + [id: string]: MetafileFile; +}; diff --git a/src/types/json-response.ts b/src/types/json-response.ts new file mode 100644 index 0000000..1ff7738 --- /dev/null +++ b/src/types/json-response.ts @@ -0,0 +1,3 @@ +export type JsonResponse = { + [key: string]: Record +}; diff --git a/src/types/locale-response.ts b/src/types/locale-response.ts new file mode 100644 index 0000000..139fbe6 --- /dev/null +++ b/src/types/locale-response.ts @@ -0,0 +1,5 @@ +import { JsonResponse } from '@/types/json-response'; + +export type LocaleResponse = { + [locale: string]: JsonResponse +}; diff --git a/src/types/locales-map-data.ts b/src/types/locales-map-data.ts new file mode 100644 index 0000000..4b902d1 --- /dev/null +++ b/src/types/locales-map-data.ts @@ -0,0 +1,5 @@ +import { MetafileLocale } from '@/cdn/metafile/metafile-locale'; + +export type LocalesMapData = { + [key: string]: MetafileLocale[] +}; diff --git a/src/types/locales-map-options.ts b/src/types/locales-map-options.ts new file mode 100644 index 0000000..e5dd719 --- /dev/null +++ b/src/types/locales-map-options.ts @@ -0,0 +1,8 @@ +import { Context } from '@/cdn/context/context'; + +import { LocalesMapData } from '@/types/locales-map-data'; + +export type LocalesMapOptions = { + context: Context, + data?: LocalesMapData +}; diff --git a/src/types/metafile-file-options.ts b/src/types/metafile-file-options.ts new file mode 100644 index 0000000..88781ae --- /dev/null +++ b/src/types/metafile-file-options.ts @@ -0,0 +1,8 @@ +import { MetafileLocale } from '@/cdn/metafile/metafile-locale'; +import { IMetafileFile } from '@/interfaces/i-metafile-file'; + +export type MetafileFileOptions = Omit & { + id: string; + locales: MetafileLocale[]; + baseUrl: string; +}; diff --git a/src/types/metafile-options.ts b/src/types/metafile-options.ts new file mode 100644 index 0000000..8d4deb1 --- /dev/null +++ b/src/types/metafile-options.ts @@ -0,0 +1,3 @@ +import { IMetafile } from '@/interfaces/i-metafile'; + +export type MetafileOptions = IMetafile; diff --git a/src/types/response-factory-options.ts b/src/types/response-factory-options.ts new file mode 100644 index 0000000..fa18021 --- /dev/null +++ b/src/types/response-factory-options.ts @@ -0,0 +1,10 @@ +import { AxiosResponse } from 'axios'; +import { LocalesMap } from '@/cdn/request/locales-map'; +import { CdnResponse } from '@/types/cdn-response'; + +export type ResponseFactoryOptions = { + responses: AxiosResponse[]; + localesMap: LocalesMap; + hasSingleFileResponse: boolean; + hasSingleLocaleResponse: boolean; +}; diff --git a/tests/cdn-files-types.spec.ts b/tests/cdn-files-types.spec.ts new file mode 100644 index 0000000..2300123 --- /dev/null +++ b/tests/cdn-files-types.spec.ts @@ -0,0 +1,269 @@ +import { + describe, test, expect, beforeEach, +} from 'vitest'; +import { fileTypesMetafile } from '@tests/fixtures'; +import { CdnClient } from '@/main'; + +let cdn: CdnClient; + +describe('File types', (): void => { + beforeEach(async (): Promise => { + fileTypesMetafile.mockAxios(); + + cdn = await CdnClient.create({ + metafile: fileTypesMetafile.url.metafile, + }); + }); + + test('JSON file', async (): Promise => { + expect( + await cdn.fetch({ + files: ['file01-json'], + }), + ).toStrictEqual({ + 'file01-json': { + en: fileTypesMetafile.serverResponses.file01.en, + es: fileTypesMetafile.serverResponses.file01.es, + fr: fileTypesMetafile.serverResponses.file01.fr, + }, + }); + }); + + test('JSON5 file', async (): Promise => { + expect( + await cdn.fetch({ + files: ['file02-json5'], + }), + ).toStrictEqual({ + 'file02-json5': { + en: fileTypesMetafile.serverResponses.file02.en, + es: fileTypesMetafile.serverResponses.file02.es, + fr: fileTypesMetafile.serverResponses.file02.fr, + }, + }); + }); + + test('NEON file', async (): Promise => { + expect( + await cdn.fetch({ + files: ['file03-neon'], + }), + ).toStrictEqual({ + 'file03-neon': { + en: fileTypesMetafile.serverResponses.file03.en, + es: fileTypesMetafile.serverResponses.file03.es, + fr: fileTypesMetafile.serverResponses.file03.fr, + }, + }); + }); + + test('YAML file', async (): Promise => { + expect( + await cdn.fetch({ + files: ['file04-yaml'], + }), + ).toStrictEqual({ + 'file04-yaml': { + en: fileTypesMetafile.serverResponses.file04.en, + es: fileTypesMetafile.serverResponses.file04.es, + fr: fileTypesMetafile.serverResponses.file04.fr, + }, + }); + }); + + test('XML file', async (): Promise => { + expect( + await cdn.fetch({ + files: ['file05-xml'], + }), + ).toStrictEqual({ + 'file05-xml': { + en: fileTypesMetafile.serverResponses.file05.en, + es: fileTypesMetafile.serverResponses.file05.es, + fr: fileTypesMetafile.serverResponses.file05.fr, + }, + }); + }); + + test('SRT file', async (): Promise => { + expect( + await cdn.fetch({ + files: ['file06-srt'], + }), + ).toStrictEqual({ + 'file06-srt': { + en: fileTypesMetafile.serverResponses.file06.en, + es: fileTypesMetafile.serverResponses.file06.es, + fr: fileTypesMetafile.serverResponses.file06.fr, + }, + }); + }); + + test('INI file', async (): Promise => { + expect( + await cdn.fetch({ + files: ['file07-ini'], + }), + ).toStrictEqual({ + 'file07-ini': { + en: fileTypesMetafile.serverResponses.file07.en, + es: fileTypesMetafile.serverResponses.file07.es, + fr: fileTypesMetafile.serverResponses.file07.fr, + }, + }); + }); + + test('strings file', async (): Promise => { + expect( + await cdn.fetch({ + files: ['file08-strings'], + }), + ).toStrictEqual({ + 'file08-strings': { + en: fileTypesMetafile.serverResponses.file08.en, + es: fileTypesMetafile.serverResponses.file08.es, + fr: fileTypesMetafile.serverResponses.file08.fr, + }, + }); + }); + + test('TOML file', async (): Promise => { + expect( + await cdn.fetch({ + files: ['file09-toml'], + }), + ).toStrictEqual({ + 'file09-toml': { + en: fileTypesMetafile.serverResponses.file09.en, + es: fileTypesMetafile.serverResponses.file09.es, + fr: fileTypesMetafile.serverResponses.file09.fr, + }, + }); + }); + + test('RESX file', async (): Promise => { + expect( + await cdn.fetch({ + files: ['file10-resx'], + }), + ).toStrictEqual({ + 'file10-resx': { + en: fileTypesMetafile.serverResponses.file10.en, + es: fileTypesMetafile.serverResponses.file10.es, + fr: fileTypesMetafile.serverResponses.file10.fr, + }, + }); + }); + + test('XLIFF file', async (): Promise => { + expect( + await cdn.fetch({ + files: ['file11-xliff'], + }), + ).toStrictEqual({ + 'file11-xliff': { + en: fileTypesMetafile.serverResponses.file11.en, + es: fileTypesMetafile.serverResponses.file11.es, + fr: fileTypesMetafile.serverResponses.file11.fr, + }, + }); + }); + + test('properties file', async (): Promise => { + expect( + await cdn.fetch({ + files: ['file12-properties'], + }), + ).toStrictEqual({ + 'file12-properties': { + en: fileTypesMetafile.serverResponses.file12.en, + es: fileTypesMetafile.serverResponses.file12.es, + fr: fileTypesMetafile.serverResponses.file12.fr, + }, + }); + }); + + test('CSV file', async (): Promise => { + expect( + await cdn.fetch({ + files: ['file13-csv'], + }), + ).toStrictEqual({ + 'file13-csv': { + en: fileTypesMetafile.serverResponses.file13.en, + es: fileTypesMetafile.serverResponses.file13.es, + fr: fileTypesMetafile.serverResponses.file13.fr, + }, + }); + }); + + test('QT-TS file', async (): Promise => { + expect( + await cdn.fetch({ + files: ['file14-ts'], + }), + ).toStrictEqual({ + 'file14-ts': { + en: fileTypesMetafile.serverResponses.file14.en, + es: fileTypesMetafile.serverResponses.file14.es, + fr: fileTypesMetafile.serverResponses.file14.fr, + }, + }); + }); + + test('JS file', async (): Promise => { + expect( + await cdn.fetch({ + files: ['file15-js'], + }), + ).toStrictEqual({ + 'file15-js': { + en: fileTypesMetafile.serverResponses.file15.en, + es: fileTypesMetafile.serverResponses.file15.es, + fr: fileTypesMetafile.serverResponses.file15.fr, + }, + }); + }); + + test('PHP file', async (): Promise => { + expect( + await cdn.fetch({ + files: ['file16-php'], + }), + ).toStrictEqual({ + 'file16-php': { + en: fileTypesMetafile.serverResponses.file16.en, + es: fileTypesMetafile.serverResponses.file16.es, + fr: fileTypesMetafile.serverResponses.file16.fr, + }, + }); + }); + + test('POT file', async (): Promise => { + expect( + await cdn.fetch({ + files: ['file17-pot'], + }), + ).toStrictEqual({ + 'file17-pot': { + en: fileTypesMetafile.serverResponses.file17.en, + es: fileTypesMetafile.serverResponses.file17.es, + fr: fileTypesMetafile.serverResponses.file17.fr, + }, + }); + }); + + test('PO file', async (): Promise => { + expect( + await cdn.fetch({ + files: ['file18-po'], + }), + ).toStrictEqual({ + 'file18-po': { + en: fileTypesMetafile.serverResponses.file18.en, + es: fileTypesMetafile.serverResponses.file18.es, + fr: fileTypesMetafile.serverResponses.file18.fr, + }, + }); + }); +}); diff --git a/tests/cdn-files.spec.ts b/tests/cdn-files.spec.ts new file mode 100644 index 0000000..e36f333 --- /dev/null +++ b/tests/cdn-files.spec.ts @@ -0,0 +1,143 @@ +import { + describe, test, expect, beforeEach, +} from 'vitest'; +import { completeMetafile } from '@tests/fixtures'; +import { CdnResponse, CdnClient, CdnFile } from '@/main'; + +describe('cdn.fetch()', (): void => { + let cdn: CdnClient; + + beforeEach(async (): Promise => { + completeMetafile.mockAxios(); + + cdn = await CdnClient.create({ + metafile: completeMetafile.url.metafile, + }); + }); + + test('Fetch all files with all locales', async (): Promise => { + const result: CdnResponse = await cdn.fetch(); + expect(result).toStrictEqual(completeMetafile.cdnResponses.allFilesAllLocales); + }); + + test('Fetch all files with all locales, exclude base locale', async (): Promise => { + const result: CdnResponse = await cdn.fetch({ + excludeBaseLocale: true, + }); + expect(result).toStrictEqual(completeMetafile.cdnResponses.allFilesAllLocalesExcludeBase); + }); + + test('Fetch all files with selected locales only', async (): Promise => { + const result: CdnResponse = await cdn.fetch({ + locales: ['en', 'ms_ID#Latn'], + }); + expect(result).toStrictEqual(completeMetafile.cdnResponses.allFilesSelectedLocales); + }); + + test('Fetch selected files with all locales', async (): Promise => { + const result: CdnResponse = await cdn.fetch({ + files: [cdn.metafile.files.first()], + }); + expect(result).toStrictEqual(completeMetafile.cdnResponses.selectedFilesAllLocales); + + const result2: CdnResponse = await cdn.fetch({ + files: ['file01'], + }); + expect(result2).toStrictEqual(completeMetafile.cdnResponses.selectedFilesAllLocales); + + const result3: CdnResponse = await cdn.fetch({ + files: [cdn.metafile.files.first()], + }); + expect(result3).toStrictEqual(completeMetafile.cdnResponses.selectedFilesAllLocales); + + const result4: CdnResponse = await cdn.fetch({ + files: ['file01'], + }); + expect(result4).toStrictEqual(completeMetafile.cdnResponses.selectedFilesAllLocales); + }); + + test('Fetch selected files with all locales, exclude base locale', async (): Promise => { + const result: CdnResponse = await cdn.fetch({ + files: [cdn.metafile.files.first()], + excludeBaseLocale: true, + }); + expect(result).toStrictEqual(completeMetafile.cdnResponses.selectedFilesAllLocalesExcludeBase); + + const result2: CdnResponse = await cdn.fetch({ + files: ['file01'], + excludeBaseLocale: true, + }); + expect(result2).toStrictEqual(completeMetafile.cdnResponses.selectedFilesAllLocalesExcludeBase); + }); + + test('Fetch selected files with selected locales only', async (): Promise => { + const result: CdnResponse = await cdn.fetch({ + files: cdn.metafile.files.filter( + (metafileFile: CdnFile) => ['file01', 'file03'].includes(metafileFile.id), + ), + locales: ['en', 'ms_BN'], + }); + expect(result).toStrictEqual(completeMetafile.cdnResponses.selectedFilesSelectedLocales); + + const result2: CdnResponse = await cdn.fetch({ + files: ['file01', 'file03'], + locales: ['en', 'ms_BN'], + }); + expect(result2).toStrictEqual(completeMetafile.cdnResponses.selectedFilesSelectedLocales); + }); + + test('Fetch single file with all locales', async (): Promise => { + const result: CdnResponse = await cdn.fetch({ + files: cdn.metafile.files.first(), + }); + expect(result).toStrictEqual(completeMetafile.cdnResponses.singleFileAllLocales); + + const result2: CdnResponse = await cdn.fetch({ + files: 'file01', + }); + expect(result2).toStrictEqual(completeMetafile.cdnResponses.singleFileAllLocales); + }); + + test('Fetch single file with all locales, exclude base locale', async (): Promise => { + const result: CdnResponse = await cdn.fetch({ + files: cdn.metafile.files.first(), + excludeBaseLocale: true, + }); + expect(result).toStrictEqual(completeMetafile.cdnResponses.singleFileAllLocalesExcludeBase); + + const result2: CdnResponse = await cdn.fetch({ + files: 'file01', + excludeBaseLocale: true, + }); + expect(result2).toStrictEqual(completeMetafile.cdnResponses.singleFileAllLocalesExcludeBase); + }); + + test('Fetch single file with selected locales only', async (): Promise => { + const result: CdnResponse = await cdn.fetch({ + files: cdn.metafile.files.first(), + locales: ['en', 'ms'], + }); + expect(result).toStrictEqual(completeMetafile.cdnResponses.singleFileSelectedLocales); + + const result2: CdnResponse = await cdn.fetch({ + files: 'file01', + locales: ['en', 'ms'], + }); + expect(result2).toStrictEqual(completeMetafile.cdnResponses.singleFileSelectedLocales); + }); + + test('Fetch single file with single locale', async (): Promise => { + const result: CdnResponse = await cdn.fetch({ + files: cdn.metafile.files.first(), + locales: 'en', + }); + expect(result).toStrictEqual(completeMetafile.serverResponses.file01.en); + }); + + test('Ignore non-existing locales', async (): Promise => { + const result: CdnResponse = await cdn.fetch({ + locales: ['jp', 'es', 'fi'], + }); + expect(result).toStrictEqual({}); + }); +}); diff --git a/tests/cdn-metafile-files.spec.ts b/tests/cdn-metafile-files.spec.ts new file mode 100644 index 0000000..e30fe20 --- /dev/null +++ b/tests/cdn-metafile-files.spec.ts @@ -0,0 +1,43 @@ +import { + describe, test, expectTypeOf, beforeEach, +} from 'vitest'; +import { completeMetafile } from '@tests/fixtures'; +import { CdnClient, CdnFile } from '@/main'; + +let cdn: CdnClient; + +describe('cdn.metafile.files', (): void => { + beforeEach(async (): Promise => { + completeMetafile.mockAxios(); + + cdn = await CdnClient.create({ + metafile: completeMetafile.url.metafile, + }); + }); + + test('List all metafile files', (): void => { + const result: CdnFile[] = cdn.metafile.files.list(); + + expectTypeOf(result).toMatchTypeOf(); + }); + + test('List first metafile file', (): void => { + const result: CdnFile = cdn.metafile.files.first(); + + expectTypeOf(result).toMatchTypeOf(); + }); + + test('Find metafile file', (): void => { + const result: CdnFile | undefined = cdn.metafile.files.find({ id: 'file01' }); + + expectTypeOf(result).toMatchTypeOf(); + }); + + test('Filter metafile files', (): void => { + const result: CdnFile[] = cdn.metafile.files.filter( + (metafileFile: CdnFile) => ['file01', 'file03'].includes(metafileFile.id), + ); + + expectTypeOf(result).toMatchTypeOf(); + }); +}); diff --git a/tests/cdn-metafile.spec.ts b/tests/cdn-metafile.spec.ts new file mode 100644 index 0000000..5d80ad5 --- /dev/null +++ b/tests/cdn-metafile.spec.ts @@ -0,0 +1,90 @@ +import { + describe, test, expect, beforeEach, +} from 'vitest'; +import { completeMetafile, completeMetafileV2, singleFileMetafile } from '@tests/fixtures'; +import { CdnClient, CdnLocale, CdnResponse } from '@/main'; + +let cdn: CdnClient; + +describe('cdn.metafile', (): void => { + beforeEach(async (): Promise => { + completeMetafile.mockAxios(); + + cdn = await CdnClient.create({ + metafile: completeMetafile.url.metafile, + }); + }); + + test('Get metafile URL', (): void => { + expect(cdn.metafile.url).toBe(completeMetafile.url.metafile); + }); + + test('Get project URL', (): void => { + expect(cdn.metafile.projectUrl).toBe(completeMetafile.serverResponses.metafile.projectUrl); + }); + + test('Refresh metafile, flush cache and fetch all files', async (): Promise => { + const result: CdnResponse = await cdn.fetch(); + expect(result).toStrictEqual(completeMetafile.cdnResponses.allFilesAllLocales); + + completeMetafileV2.mockAxios(); + await cdn.metafile.refresh(); + cdn.cache.flush(); + + const result2: CdnResponse = await cdn.fetch(); + expect(result2).toStrictEqual(completeMetafileV2.cdnResponses.allFilesAllLocales); + }); + + test('Refresh metafile and fetch only files with changed timestamp', async (): Promise => { + const result: CdnResponse = await cdn.fetch(); + expect(result).toStrictEqual(completeMetafile.cdnResponses.allFilesAllLocales); + + completeMetafileV2.mockAxios(); + await cdn.metafile.refresh(); + + const result2: CdnResponse = await cdn.fetch(); + expect(result2).toStrictEqual({ + file01: { + en: completeMetafileV2.serverResponses.file01.en, + ms_BN: completeMetafileV2.serverResponses.file01.msBn, + 'ms#Arab': completeMetafile.serverResponses.file01.msArab, + 'ms_ID#Latn': completeMetafile.serverResponses.file01.msIdLatn, + }, + file02: { + en: completeMetafile.serverResponses.file02.en, + ms_BN: completeMetafile.serverResponses.file02.msBn, + 'ms#Arab': completeMetafile.serverResponses.file02.msArab, + 'ms_ID#Latn': completeMetafile.serverResponses.file02.msIdLatn, + }, + file03: { + en: completeMetafile.serverResponses.file03.en, + ms_BN: completeMetafile.serverResponses.file03.msBn, + 'ms#Arab': completeMetafile.serverResponses.file03.msArab, + 'ms_ID#Latn': completeMetafile.serverResponses.file03.msIdLatn, + }, + }); + }); + + test('Switch metafile', async (): Promise => { + const result: CdnResponse = await cdn.fetch(); + expect(result).toStrictEqual(completeMetafile.cdnResponses.allFilesAllLocales); + + singleFileMetafile.mockAxios(); + await cdn.metafile.switch({ metafile: singleFileMetafile.url.metafile }); + + const result2: CdnResponse = await cdn.fetch(); + expect(result2).toStrictEqual(singleFileMetafile.cdnResponses.allFilesAllLocales); + }); + + test('Get base locale', (): void => { + expect(cdn.metafile.baseLocale).toStrictEqual(completeMetafile.cdnResponses.baseLocale); + }); + + test('Get all locales', (): void => { + const result: CdnLocale[] = cdn.metafile.locales(); + expect(result).toStrictEqual(completeMetafile.cdnResponses.locales); + + const result2: CdnLocale[] = cdn.metafile.locales({ excludeBaseLocale: true }); + expect(result2).toStrictEqual(completeMetafile.cdnResponses.localesExceptBaseLocale); + }); +}); diff --git a/tests/cdn.spec.ts b/tests/cdn.spec.ts new file mode 100644 index 0000000..db7029b --- /dev/null +++ b/tests/cdn.spec.ts @@ -0,0 +1,32 @@ +import { + describe, test, beforeEach, expectTypeOf, +} from 'vitest'; +import { completeMetafile } from '@tests/fixtures'; +import { CdnClient } from '@/main'; + +let cdn: CdnClient; + +describe('cdn', (): void => { + beforeEach(async (): Promise => { + completeMetafile.mockAxios(); + + cdn = await CdnClient.create({ + metafile: completeMetafile.url.metafile, + }); + }); + + test('Verify methods', (): void => { + expectTypeOf(cdn.metafile.url).toBeString(); + expectTypeOf(cdn.metafile.projectUrl).toBeString(); + expectTypeOf(cdn.metafile.refresh).toBeFunction(); + expectTypeOf(cdn.metafile.switch).toBeFunction(); + expectTypeOf(cdn.metafile.baseLocale).toBeObject(); + expectTypeOf(cdn.metafile.locales).toBeFunction(); + expectTypeOf(cdn.metafile.files.list).toBeFunction(); + expectTypeOf(cdn.metafile.files.first).toBeFunction(); + expectTypeOf(cdn.metafile.files.find).toBeFunction(); + expectTypeOf(cdn.metafile.files.filter).toBeFunction(); + expectTypeOf(cdn.fetch).toBeFunction(); + expectTypeOf(cdn.cache.flush).toBeFunction(); + }); +}); diff --git a/tests/errors-http.spec.ts b/tests/errors-http.spec.ts new file mode 100644 index 0000000..22e8087 --- /dev/null +++ b/tests/errors-http.spec.ts @@ -0,0 +1,23 @@ +import { + describe, test, expect, +} from 'vitest'; +import { serverErrorMetafile } from '@tests/fixtures'; +import { CdnClient } from '@/main'; + +describe('Test error responses', (): void => { + test('Server returns 404 when fetching metafile', async (): Promise => { + serverErrorMetafile.mockAxios(404); + + await expect(async (): Promise => { + await CdnClient.create({ metafile: serverErrorMetafile.url.metafile }); + }).rejects.toThrowError('Request failed with status code 404'); + }); + + test('Server returns 500 when fetching metafile', async (): Promise => { + serverErrorMetafile.mockAxios(500); + + await expect(async (): Promise => { + await CdnClient.create({ metafile: serverErrorMetafile.url.metafile }); + }).rejects.toThrowError('Request failed with status code 500'); + }); +}); diff --git a/tests/errors-responses.spec.ts b/tests/errors-responses.spec.ts new file mode 100644 index 0000000..16c8a20 --- /dev/null +++ b/tests/errors-responses.spec.ts @@ -0,0 +1,138 @@ +import { + describe, test, expect, +} from 'vitest'; +import { completeMetafile, emptyMetafile, filesWithoutLocalesMetafile } from '@tests/fixtures'; +import { CdnClient, CdnFile } from '@/main'; + +describe('Test error responses', (): void => { + test('Invalid metafile url', async (): Promise => { + completeMetafile.mockAxios(); + + await expect(async (): Promise => { + // @ts-expect-error invalid param + await CdnClient.create(); + }).rejects.toThrowError('Invalid param: missing required "options" parameter.'); + + await expect(async (): Promise => { + // @ts-expect-error invalid param + await CdnClient.create({ metafile: false }); + }).rejects.toThrowError('Invalid param: "options.metafile" must be string.'); + + await expect(async (): Promise => { + await CdnClient.create({ metafile: 'random-string' }); + }).rejects.toThrowError('Invalid param: "options.metafile" cannot be parsed as url.'); + + await expect(async (): Promise => { + await CdnClient.create({ metafile: 'https://wrong-link' }); + }).rejects.toThrowError('Invalid param: "options.metafile" contains invalid metafile url.'); + }); + + test('Missing files in metafile.json', async (): Promise => { + emptyMetafile.mockAxios(); + const cdn: CdnClient = await CdnClient.create({ metafile: emptyMetafile.url.metafile }); + + expect((): void => { + cdn.metafile.files.first(); + }).toThrowError('File is missing in downloaded metafile.'); + + expect(cdn.metafile.locales()).toStrictEqual([]); + + expect(cdn.metafile.files.list()).toStrictEqual([]); + + expect(cdn.metafile.files.find({ id: 'file01' })).toBeUndefined(); + + expect(cdn.metafile.files.find((i: CdnFile): boolean => i.id === 'file01')).toBeUndefined(); + + expect(cdn.metafile.files.filter({ id: 'file01' })).toStrictEqual([]); + + expect(cdn.metafile.files.filter((i: CdnFile): boolean => i.id === 'file01')).toStrictEqual([]); + }); + + test('Missing locales in metafile.json', async (): Promise => { + filesWithoutLocalesMetafile.mockAxios(); + const cdn: CdnClient = await CdnClient.create({ metafile: filesWithoutLocalesMetafile.url.metafile }); + + expect(cdn.metafile.locales()).toStrictEqual([]); + }); + + test('Invalid cdn.metafile.files.find() parameters', async (): Promise => { + emptyMetafile.mockAxios(); + const cdn: CdnClient = await CdnClient.create({ metafile: emptyMetafile.url.metafile }); + + expect((): void => { + // @ts-expect-error invalid param + cdn.metafile.files.find(); + }).toThrowError('Invalid param: missing required "options" parameter.'); + + expect((): void => { + // @ts-expect-error invalid param + cdn.metafile.files.find([]); + }).toThrowError('Invalid param: "options" must be function or object.'); + }); + + test('Invalid cdn.metafile.files.filter() parameters', async (): Promise => { + emptyMetafile.mockAxios(); + const cdn: CdnClient = await CdnClient.create({ metafile: emptyMetafile.url.metafile }); + + expect((): void => { + // @ts-expect-error invalid param + cdn.metafile.files.filter(); + }).toThrowError('Invalid param: missing required "options" parameter.'); + + expect((): void => { + // @ts-expect-error invalid param + cdn.metafile.files.filter([]); + }).toThrowError('Invalid param: "options" must be function or object.'); + }); + + test('Invalid cdn.fetch() params', async (): Promise => { + completeMetafile.mockAxios(); + const cdn: CdnClient = await CdnClient.create({ metafile: completeMetafile.url.metafile }); + + await expect(async (): Promise => { + // @ts-expect-error invalid param + await cdn.fetch({ files: 123 }); + }).rejects.toThrowError('Invalid param: "request.files" must be object, array, string or undefined.'); + + await expect(async (): Promise => { + // @ts-expect-error invalid param + await cdn.fetch({ files: [123] }); + }).rejects.toThrowError('Invalid param: array "request.files" must contain objects or strings.'); + + await expect(async (): Promise => { + await cdn.fetch({ files: 'random-string' }); + }).rejects.toThrowError('File not found: "random-string".'); + + await expect(async (): Promise => { + await cdn.fetch({ files: ['random-string'] }); + }).rejects.toThrowError('File not found: "random-string".'); + + await expect(async (): Promise => { + // @ts-expect-error invalid param + await cdn.fetch({ files: { id: 'random-string' } }); + }).rejects.toThrowError('File not found: "random-string".'); + + await expect(async (): Promise => { + // @ts-expect-error invalid param + await cdn.fetch({ files: [{ id: 'random-string' }] }); + }).rejects.toThrowError('File not found: "random-string".'); + + await expect(async (): Promise => { + // @ts-expect-error invalid param + await cdn.fetch({ locales: 123 }); + }).rejects.toThrowError('Invalid param: "request.locales" must be array, string or undefined.'); + + await expect(async (): Promise => { + // @ts-expect-error invalid param + await cdn.fetch({ locales: [123] }); + }).rejects.toThrowError('Invalid param: array "request.locales" must contain strings.'); + + expect( + await cdn.fetch({ locales: 'random-string' }), + ).toStrictEqual({}); + + expect( + await cdn.fetch({ locales: ['random-string'] }), + ).toStrictEqual({}); + }); +}); diff --git a/tests/fixtures/complete-metafile-v2/file01/en/file.json b/tests/fixtures/complete-metafile-v2/file01/en/file.json new file mode 100644 index 0000000..aeba97c --- /dev/null +++ b/tests/fixtures/complete-metafile-v2/file01/en/file.json @@ -0,0 +1,5 @@ +{ + "cdn_info": "With the CDN you can deliver the translation files instantly", + "cdn_testing": "We're testing the CDN", + "updated_content": "Updated content" +} diff --git a/tests/fixtures/complete-metafile-v2/file01/ms-BN/file.json b/tests/fixtures/complete-metafile-v2/file01/ms-BN/file.json new file mode 100644 index 0000000..cae2c3d --- /dev/null +++ b/tests/fixtures/complete-metafile-v2/file01/ms-BN/file.json @@ -0,0 +1,5 @@ +{ + "cdn_info": "Dengan CDN anda boleh menyampaikan fail terjemahan dengan serta-merta", + "cdn_testing": "Kami sedang menguji CDN", + "updated_content": "Kandungan yang dikemas kini" +} diff --git a/tests/fixtures/complete-metafile-v2/index.ts b/tests/fixtures/complete-metafile-v2/index.ts new file mode 100644 index 0000000..48c24fe --- /dev/null +++ b/tests/fixtures/complete-metafile-v2/index.ts @@ -0,0 +1,67 @@ +import axiosMock from '@tests/mocks/axios-mock'; +import { url } from '@tests/fixtures/complete-metafile'; +import completeMetafileV2 from '@tests/fixtures/complete-metafile-v2/metafile.json'; +import file01En from '@tests/fixtures/complete-metafile-v2/file01/en/file.json'; +import file01MSBn from '@tests/fixtures/complete-metafile-v2/file01/ms-BN/file.json'; + +export const serverResponses = { + metafile: completeMetafileV2, + file01: { + en: file01En, + msBn: file01MSBn, + msArab: {}, + msIdLatn: {}, + }, + file02: { + en: {}, + msBn: {}, + msArab: {}, + msIdLatn: {}, + }, + file03: { + en: {}, + msBn: {}, + msArab: {}, + msIdLatn: {}, + }, +}; + +export const cdnResponses = { + allFilesAllLocales: { + file01: { + en: serverResponses.file01.en, + ms_BN: serverResponses.file01.msBn, + 'ms#Arab': serverResponses.file01.msArab, + 'ms_ID#Latn': serverResponses.file01.msIdLatn, + }, + file02: { + en: serverResponses.file02.en, + ms_BN: serverResponses.file02.msBn, + 'ms#Arab': serverResponses.file02.msArab, + 'ms_ID#Latn': serverResponses.file02.msIdLatn, + }, + file03: { + en: serverResponses.file03.en, + ms_BN: serverResponses.file03.msBn, + 'ms#Arab': serverResponses.file03.msArab, + 'ms_ID#Latn': serverResponses.file03.msIdLatn, + }, + }, +}; + +export const mockAxios = (): void => { + axiosMock.reset(); + axiosMock.onGet(url.metafile).reply(200, serverResponses.metafile); + axiosMock.onGet(url.file01.en).reply(200, serverResponses.file01.en); + axiosMock.onGet(url.file01.msBn).reply(200, serverResponses.file01.msBn); + axiosMock.onGet(url.file01.msArab).reply(200, serverResponses.file01.msArab); + axiosMock.onGet(url.file01.msIdLatn).reply(200, serverResponses.file01.msIdLatn); + axiosMock.onGet(url.file02.en).reply(200, serverResponses.file02.en); + axiosMock.onGet(url.file02.msBn).reply(200, serverResponses.file02.msBn); + axiosMock.onGet(url.file02.msArab).reply(200, serverResponses.file02.msArab); + axiosMock.onGet(url.file02.msIdLatn).reply(200, serverResponses.file02.msIdLatn); + axiosMock.onGet(url.file03.en).reply(200, serverResponses.file03.en); + axiosMock.onGet(url.file03.msBn).reply(200, serverResponses.file03.msBn); + axiosMock.onGet(url.file03.msArab).reply(200, serverResponses.file03.msArab); + axiosMock.onGet(url.file03.msIdLatn).reply(200, serverResponses.file03.msIdLatn); +}; diff --git a/tests/fixtures/complete-metafile-v2/metafile.json b/tests/fixtures/complete-metafile-v2/metafile.json new file mode 100644 index 0000000..c055bb4 --- /dev/null +++ b/tests/fixtures/complete-metafile-v2/metafile.json @@ -0,0 +1,160 @@ +{ + "projectUrl": "https://localazy.com/p/cdnarticle", + "baseLocale": "en", + "timestamp": 1700000000, + "files": { + "file01": { + "file": "file.json", + "path": "", + "library": "", + "module": "", + "buildType": "", + "timestamp": 1700000000, + "productFlavors": [], + "locales": [ + { + "language": "en", + "region": "", + "script": "", + "isRtl": false, + "name": "English", + "localizedName": "English", + "uri": "/complete-metafile/_e0/file01/en/file.json", + "timestamp": 1700000001 + }, + { + "language": "ms", + "region": "BN", + "script": "", + "isRtl": false, + "name": "Malay (Brunei)", + "localizedName": "Malay (Brunei)", + "uri": "/complete-metafile/_e0/file01/ms-BN/file.json", + "timestamp": 1700000001 + }, + { + "language": "ms", + "region": "", + "script": "Arab", + "isRtl": false, + "name": "Malay (Arabic)", + "localizedName": "Malay (Arabic)", + "uri": "/complete-metafile/_e0/file01/ms-Arab/file.json", + "timestamp": 1700000000 + }, + { + "language": "ms", + "region": "ID", + "script": "Latn", + "isRtl": false, + "name": "Malay (Indonesia, Latin)", + "localizedName": "Malay (Indonesia, Latin)", + "uri": "/complete-metafile/_e0/file01/ms-ID-Latn/file.json", + "timestamp": 1700000000 + } + ] + }, + "file02": { + "file": "file.json", + "path": "", + "library": "lib", + "module": "", + "buildType": "", + "timestamp": 1700000000, + "productFlavors": [], + "locales": [ + { + "language": "en", + "region": "", + "script": "", + "isRtl": false, + "name": "English", + "localizedName": "English", + "uri": "/complete-metafile/_e0/file02/en/file.json", + "timestamp": 1700000000 + }, + { + "language": "ms", + "region": "BN", + "script": "", + "isRtl": false, + "name": "Malay (Brunei)", + "localizedName": "Malay (Brunei)", + "uri": "/complete-metafile/_e0/file02/ms-BN/file.json", + "timestamp": 1700000000 + }, + { + "language": "ms", + "region": "", + "script": "Arab", + "isRtl": false, + "name": "Malay (Arabic)", + "localizedName": "Malay (Arabic)", + "uri": "/complete-metafile/_e0/file02/ms-Arab/file.json", + "timestamp": 1700000000 + }, + { + "language": "ms", + "region": "ID", + "script": "Latn", + "isRtl": false, + "name": "Malay (Indonesia, Latin)", + "localizedName": "Malay (Indonesia, Latin)", + "uri": "/complete-metafile/_e0/file02/ms-ID-Latn/file.json", + "timestamp": 1700000000 + } + ] + }, + "file03": { + "file": "file.json", + "path": "", + "library": "lib", + "module": "auth", + "buildType": "", + "timestamp": 1700000000, + "productFlavors": [], + "locales": [ + { + "language": "en", + "region": "", + "script": "", + "isRtl": false, + "name": "English", + "localizedName": "English", + "uri": "/complete-metafile/_e0/file03/en/file.json", + "timestamp": 1700000000 + }, + { + "language": "ms", + "region": "BN", + "script": "", + "isRtl": false, + "name": "Malay (Brunei)", + "localizedName": "Malay (Brunei)", + "uri": "/complete-metafile/_e0/file03/ms-BN/file.json", + "timestamp": 1700000000 + }, + { + "language": "ms", + "region": "", + "script": "Arab", + "isRtl": false, + "name": "Malay (Arabic)", + "localizedName": "Malay (Arabic)", + "uri": "/complete-metafile/_e0/file03/ms-Arab/file.json", + "timestamp": 1700000000 + }, + { + "language": "ms", + "region": "ID", + "script": "Latn", + "isRtl": false, + "name": "Malay (Indonesia, Latin)", + "localizedName": "Malay (Indonesia, Latin)", + "uri": "/complete-metafile/_e0/file03/ms-ID-Latn/file.json", + "timestamp": 1700000000 + } + ] + } + } +} diff --git a/tests/fixtures/complete-metafile/file01/en/file.json b/tests/fixtures/complete-metafile/file01/en/file.json new file mode 100644 index 0000000..ca5596a --- /dev/null +++ b/tests/fixtures/complete-metafile/file01/en/file.json @@ -0,0 +1,4 @@ +{ + "cdn_info": "With the CDN you can deliver the translation files instantly", + "cdn_testing": "We're testing the CDN" +} diff --git a/tests/fixtures/complete-metafile/file01/ms-Arab/file.json b/tests/fixtures/complete-metafile/file01/ms-Arab/file.json new file mode 100644 index 0000000..fc231d7 --- /dev/null +++ b/tests/fixtures/complete-metafile/file01/ms-Arab/file.json @@ -0,0 +1,4 @@ +{ + "cdn_info": "Dengan CDN anda boleh menyampaikan fail terjemahan dengan serta-merta", + "cdn_testing": "Kami sedang menguji CDN" +} diff --git a/tests/fixtures/complete-metafile/file01/ms-BN/file.json b/tests/fixtures/complete-metafile/file01/ms-BN/file.json new file mode 100644 index 0000000..fc231d7 --- /dev/null +++ b/tests/fixtures/complete-metafile/file01/ms-BN/file.json @@ -0,0 +1,4 @@ +{ + "cdn_info": "Dengan CDN anda boleh menyampaikan fail terjemahan dengan serta-merta", + "cdn_testing": "Kami sedang menguji CDN" +} diff --git a/tests/fixtures/complete-metafile/file01/ms-ID-Latn/file.json b/tests/fixtures/complete-metafile/file01/ms-ID-Latn/file.json new file mode 100644 index 0000000..fc231d7 --- /dev/null +++ b/tests/fixtures/complete-metafile/file01/ms-ID-Latn/file.json @@ -0,0 +1,4 @@ +{ + "cdn_info": "Dengan CDN anda boleh menyampaikan fail terjemahan dengan serta-merta", + "cdn_testing": "Kami sedang menguji CDN" +} diff --git a/tests/fixtures/complete-metafile/file02/en/file.json b/tests/fixtures/complete-metafile/file02/en/file.json new file mode 100644 index 0000000..bdc8b65 --- /dev/null +++ b/tests/fixtures/complete-metafile/file02/en/file.json @@ -0,0 +1,3 @@ +{ + "using_javascript": "In this project we decided to use JavaScript" +} diff --git a/tests/fixtures/complete-metafile/file02/ms-Arab/file.json b/tests/fixtures/complete-metafile/file02/ms-Arab/file.json new file mode 100644 index 0000000..6bb976e --- /dev/null +++ b/tests/fixtures/complete-metafile/file02/ms-Arab/file.json @@ -0,0 +1,3 @@ +{ + "using_javascript": "Dalam projek ini kami memutuskan untuk menggunakan JavaScript" +} diff --git a/tests/fixtures/complete-metafile/file02/ms-BN/file.json b/tests/fixtures/complete-metafile/file02/ms-BN/file.json new file mode 100644 index 0000000..6bb976e --- /dev/null +++ b/tests/fixtures/complete-metafile/file02/ms-BN/file.json @@ -0,0 +1,3 @@ +{ + "using_javascript": "Dalam projek ini kami memutuskan untuk menggunakan JavaScript" +} diff --git a/tests/fixtures/complete-metafile/file02/ms-ID-Latn/file.json b/tests/fixtures/complete-metafile/file02/ms-ID-Latn/file.json new file mode 100644 index 0000000..6bb976e --- /dev/null +++ b/tests/fixtures/complete-metafile/file02/ms-ID-Latn/file.json @@ -0,0 +1,3 @@ +{ + "using_javascript": "Dalam projek ini kami memutuskan untuk menggunakan JavaScript" +} diff --git a/tests/fixtures/complete-metafile/file03/en/file.json b/tests/fixtures/complete-metafile/file03/en/file.json new file mode 100644 index 0000000..5cccb29 --- /dev/null +++ b/tests/fixtures/complete-metafile/file03/en/file.json @@ -0,0 +1,3 @@ +{ + "hello_localazy": "Hello Localazy!" +} diff --git a/tests/fixtures/complete-metafile/file03/ms-Arab/file.json b/tests/fixtures/complete-metafile/file03/ms-Arab/file.json new file mode 100644 index 0000000..0fcaccc --- /dev/null +++ b/tests/fixtures/complete-metafile/file03/ms-Arab/file.json @@ -0,0 +1,3 @@ +{ + "hello_localazy": "Helo Localazy!" +} diff --git a/tests/fixtures/complete-metafile/file03/ms-BN/file.json b/tests/fixtures/complete-metafile/file03/ms-BN/file.json new file mode 100644 index 0000000..0fcaccc --- /dev/null +++ b/tests/fixtures/complete-metafile/file03/ms-BN/file.json @@ -0,0 +1,3 @@ +{ + "hello_localazy": "Helo Localazy!" +} diff --git a/tests/fixtures/complete-metafile/file03/ms-ID-Latn/file.json b/tests/fixtures/complete-metafile/file03/ms-ID-Latn/file.json new file mode 100644 index 0000000..0fcaccc --- /dev/null +++ b/tests/fixtures/complete-metafile/file03/ms-ID-Latn/file.json @@ -0,0 +1,3 @@ +{ + "hello_localazy": "Helo Localazy!" +} diff --git a/tests/fixtures/complete-metafile/index.ts b/tests/fixtures/complete-metafile/index.ts new file mode 100644 index 0000000..1a6668c --- /dev/null +++ b/tests/fixtures/complete-metafile/index.ts @@ -0,0 +1,265 @@ +import axiosMock from '@tests/mocks/axios-mock'; +import completeMetafile from '@tests/fixtures/complete-metafile/metafile.json'; +import file01En from '@tests/fixtures/complete-metafile/file01/en/file.json'; +import file01MsBn from '@tests/fixtures/complete-metafile/file01/ms-BN/file.json'; +import file01MsArab from '@tests/fixtures/complete-metafile/file01/ms-Arab/file.json'; +import file01MsIdLatn from '@tests/fixtures/complete-metafile/file01/ms-ID-Latn/file.json'; +import file02En from '@tests/fixtures/complete-metafile/file02/en/file.json'; +import file02MsBn from '@tests/fixtures/complete-metafile/file02/ms-BN/file.json'; +import file02MsArab from '@tests/fixtures/complete-metafile/file02/ms-Arab/file.json'; +import file02MsIdLatn from '@tests/fixtures/complete-metafile/file02/ms-ID-Latn/file.json'; +import file03En from '@tests/fixtures/complete-metafile/file03/en/file.json'; +import file03MsBn from '@tests/fixtures/complete-metafile/file03/ms-BN/file.json'; +import file03MsArab from '@tests/fixtures/complete-metafile/file03/ms-Arab/file.json'; +import file03MsIdLatn from '@tests/fixtures/complete-metafile/file03/ms-ID-Latn/file.json'; + +const baseUrl: string = 'https://delivery.localazy.com'; +const file01Locales = completeMetafile.files.file01.locales; +const file02Locales = completeMetafile.files.file02.locales; +const file03Locales = completeMetafile.files.file03.locales; + +export const url = { + metafile: `${baseUrl}/complete-metafile/_e0.v2.json`, + + file01: { + en: `${baseUrl}${file01Locales[0].uri}`, + msBn: `${baseUrl}${file01Locales[1].uri}`, + msArab: `${baseUrl}${file01Locales[2].uri}`, + msIdLatn: `${baseUrl}${file01Locales[3].uri}`, + }, + file02: { + en: `${baseUrl}${file02Locales[0].uri}`, + msBn: `${baseUrl}${file02Locales[1].uri}`, + msArab: `${baseUrl}${file02Locales[2].uri}`, + msIdLatn: `${baseUrl}${file02Locales[3].uri}`, + }, + file03: { + en: `${baseUrl}${file03Locales[0].uri}`, + msBn: `${baseUrl}${file03Locales[1].uri}`, + msArab: `${baseUrl}${file03Locales[2].uri}`, + msIdLatn: `${baseUrl}${file03Locales[3].uri}`, + }, +}; + +export const serverResponses = { + metafile: completeMetafile, + file01: { + en: file01En, + msBn: file01MsBn, + msArab: file01MsArab, + msIdLatn: file01MsIdLatn, + }, + file02: { + en: file02En, + msBn: file02MsBn, + msArab: file02MsArab, + msIdLatn: file02MsIdLatn, + }, + file03: { + en: file03En, + msBn: file03MsBn, + msArab: file03MsArab, + msIdLatn: file03MsIdLatn, + }, +}; + +export const cdnResponses = { + allFilesAllLocales: { + file01: { + en: serverResponses.file01.en, + ms_BN: serverResponses.file01.msBn, + 'ms#Arab': serverResponses.file01.msArab, + 'ms_ID#Latn': serverResponses.file01.msIdLatn, + }, + file02: { + en: serverResponses.file02.en, + ms_BN: serverResponses.file02.msBn, + 'ms#Arab': serverResponses.file02.msArab, + 'ms_ID#Latn': serverResponses.file02.msIdLatn, + }, + file03: { + en: serverResponses.file03.en, + ms_BN: serverResponses.file03.msBn, + 'ms#Arab': serverResponses.file03.msArab, + 'ms_ID#Latn': serverResponses.file03.msIdLatn, + }, + }, + allFilesAllLocalesExcludeBase: { + file01: { + ms_BN: serverResponses.file01.msBn, + 'ms#Arab': serverResponses.file01.msArab, + 'ms_ID#Latn': serverResponses.file01.msIdLatn, + }, + file02: { + ms_BN: serverResponses.file02.msBn, + 'ms#Arab': serverResponses.file02.msArab, + 'ms_ID#Latn': serverResponses.file02.msIdLatn, + }, + file03: { + ms_BN: serverResponses.file03.msBn, + 'ms#Arab': serverResponses.file03.msArab, + 'ms_ID#Latn': serverResponses.file03.msIdLatn, + }, + }, + allFilesSelectedLocales: { + file01: { + en: serverResponses.file01.en, + 'ms_ID#Latn': serverResponses.file01.msIdLatn, + }, + file02: { + en: serverResponses.file02.en, + 'ms_ID#Latn': serverResponses.file02.msIdLatn, + }, + file03: { + en: serverResponses.file03.en, + 'ms_ID#Latn': serverResponses.file03.msIdLatn, + }, + }, + selectedFilesAllLocales: { + file01: { + en: serverResponses.file01.en, + ms_BN: serverResponses.file01.msBn, + 'ms#Arab': serverResponses.file01.msArab, + 'ms_ID#Latn': serverResponses.file01.msIdLatn, + }, + }, + selectedFilesAllLocalesExcludeBase: { + file01: { + ms_BN: serverResponses.file01.msBn, + 'ms#Arab': serverResponses.file01.msArab, + 'ms_ID#Latn': serverResponses.file01.msIdLatn, + }, + }, + selectedFilesSelectedLocales: { + file01: { + en: serverResponses.file01.en, + ms_BN: serverResponses.file01.msBn, + }, + file03: { + en: serverResponses.file03.en, + ms_BN: serverResponses.file03.msBn, + }, + }, + singleFileAllLocales: { + en: serverResponses.file01.en, + ms_BN: serverResponses.file01.msBn, + 'ms#Arab': serverResponses.file01.msArab, + 'ms_ID#Latn': serverResponses.file01.msIdLatn, + }, + singleFileAllLocalesExcludeBase: { + ms_BN: serverResponses.file01.msBn, + 'ms#Arab': serverResponses.file01.msArab, + 'ms_ID#Latn': serverResponses.file01.msIdLatn, + }, + singleFileSelectedLocales: { + en: serverResponses.file01.en, + }, + firstFileLocales: [ + 'en', + 'ms', + 'ms_BN', + 'ms#Arab', + 'ms_ID#Latn', + ], + locales: [ + { + isBaseLocale: true, + isRtl: false, + language: 'en', + locale: 'en', + localizedName: 'English', + name: 'English', + region: '', + script: '', + }, + { + isBaseLocale: false, + isRtl: false, + language: 'ms', + locale: 'ms_BN', + localizedName: 'Malay (Brunei)', + name: 'Malay (Brunei)', + region: 'BN', + script: '', + }, + { + isBaseLocale: false, + isRtl: false, + language: 'ms', + locale: 'ms#Arab', + localizedName: 'Malay (Arabic)', + name: 'Malay (Arabic)', + region: '', + script: 'Arab', + }, + { + isBaseLocale: false, + isRtl: false, + language: 'ms', + locale: 'ms_ID#Latn', + localizedName: 'Malay (Indonesia, Latin)', + name: 'Malay (Indonesia, Latin)', + region: 'ID', + script: 'Latn', + }, + ], + localesExceptBaseLocale: [ + { + isBaseLocale: false, + isRtl: false, + language: 'ms', + locale: 'ms_BN', + localizedName: 'Malay (Brunei)', + name: 'Malay (Brunei)', + region: 'BN', + script: '', + }, + { + isBaseLocale: false, + isRtl: false, + language: 'ms', + locale: 'ms#Arab', + localizedName: 'Malay (Arabic)', + name: 'Malay (Arabic)', + region: '', + script: 'Arab', + }, + { + isBaseLocale: false, + isRtl: false, + language: 'ms', + locale: 'ms_ID#Latn', + localizedName: 'Malay (Indonesia, Latin)', + name: 'Malay (Indonesia, Latin)', + region: 'ID', + script: 'Latn', + }, + ], + baseLocale: { + isBaseLocale: true, + isRtl: false, + language: 'en', + locale: 'en', + localizedName: 'English', + name: 'English', + region: '', + script: '', + }, +}; + +export const mockAxios = (): void => { + axiosMock.reset(); + axiosMock.onGet(url.metafile).reply(200, serverResponses.metafile); + axiosMock.onGet(url.file01.en).reply(200, serverResponses.file01.en); + axiosMock.onGet(url.file01.msBn).reply(200, serverResponses.file01.msBn); + axiosMock.onGet(url.file01.msArab).reply(200, serverResponses.file01.msArab); + axiosMock.onGet(url.file01.msIdLatn).reply(200, serverResponses.file01.msIdLatn); + axiosMock.onGet(url.file02.en).reply(200, serverResponses.file02.en); + axiosMock.onGet(url.file02.msBn).reply(200, serverResponses.file02.msBn); + axiosMock.onGet(url.file02.msArab).reply(200, serverResponses.file02.msArab); + axiosMock.onGet(url.file02.msIdLatn).reply(200, serverResponses.file02.msIdLatn); + axiosMock.onGet(url.file03.en).reply(200, serverResponses.file03.en); + axiosMock.onGet(url.file03.msBn).reply(200, serverResponses.file03.msBn); + axiosMock.onGet(url.file03.msArab).reply(200, serverResponses.file03.msArab); + axiosMock.onGet(url.file03.msIdLatn).reply(200, serverResponses.file03.msIdLatn); +}; diff --git a/tests/fixtures/complete-metafile/metafile.json b/tests/fixtures/complete-metafile/metafile.json new file mode 100644 index 0000000..60f3db1 --- /dev/null +++ b/tests/fixtures/complete-metafile/metafile.json @@ -0,0 +1,160 @@ +{ + "projectUrl": "https://localazy.com/p/cdnarticle", + "baseLocale": "en", + "timestamp": 1700000000, + "files": { + "file01": { + "file": "file.json", + "path": "", + "library": "", + "module": "", + "buildType": "", + "timestamp": 1700000000, + "productFlavors": [], + "locales": [ + { + "language": "en", + "region": "", + "script": "", + "isRtl": false, + "name": "English", + "localizedName": "English", + "uri": "/complete-metafile/_e0/file01/en/file.json", + "timestamp": 1700000000 + }, + { + "language": "ms", + "region": "BN", + "script": "", + "isRtl": false, + "name": "Malay (Brunei)", + "localizedName": "Malay (Brunei)", + "uri": "/complete-metafile/_e0/file01/ms-BN/file.json", + "timestamp": 1700000000 + }, + { + "language": "ms", + "region": "", + "script": "Arab", + "isRtl": false, + "name": "Malay (Arabic)", + "localizedName": "Malay (Arabic)", + "uri": "/complete-metafile/_e0/file01/ms-Arab/file.json", + "timestamp": 1700000000 + }, + { + "language": "ms", + "region": "ID", + "script": "Latn", + "isRtl": false, + "name": "Malay (Indonesia, Latin)", + "localizedName": "Malay (Indonesia, Latin)", + "uri": "/complete-metafile/_e0/file01/ms-ID-Latn/file.json", + "timestamp": 1700000000 + } + ] + }, + "file02": { + "file": "file.json", + "path": "", + "library": "lib", + "module": "", + "buildType": "", + "timestamp": 1700000000, + "productFlavors": [], + "locales": [ + { + "language": "en", + "region": "", + "script": "", + "isRtl": false, + "name": "English", + "localizedName": "English", + "uri": "/complete-metafile/_e0/file02/en/file.json", + "timestamp": 1700000000 + }, + { + "language": "ms", + "region": "BN", + "script": "", + "isRtl": false, + "name": "Malay (Brunei)", + "localizedName": "Malay (Brunei)", + "uri": "/complete-metafile/_e0/file02/ms-BN/file.json", + "timestamp": 1700000000 + }, + { + "language": "ms", + "region": "", + "script": "Arab", + "isRtl": false, + "name": "Malay (Arabic)", + "localizedName": "Malay (Arabic)", + "uri": "/complete-metafile/_e0/file02/ms-Arab/file.json", + "timestamp": 1700000000 + }, + { + "language": "ms", + "region": "ID", + "script": "Latn", + "isRtl": false, + "name": "Malay (Indonesia, Latin)", + "localizedName": "Malay (Indonesia, Latin)", + "uri": "/complete-metafile/_e0/file02/ms-ID-Latn/file.json", + "timestamp": 1700000000 + } + ] + }, + "file03": { + "file": "file.json", + "path": "", + "library": "lib", + "module": "auth", + "buildType": "", + "timestamp": 1700000000, + "productFlavors": [], + "locales": [ + { + "language": "en", + "region": "", + "script": "", + "isRtl": false, + "name": "English", + "localizedName": "English", + "uri": "/complete-metafile/_e0/file03/en/file.json", + "timestamp": 1700000000 + }, + { + "language": "ms", + "region": "BN", + "script": "", + "isRtl": false, + "name": "Malay (Brunei)", + "localizedName": "Malay (Brunei)", + "uri": "/complete-metafile/_e0/file03/ms-BN/file.json", + "timestamp": 1700000000 + }, + { + "language": "ms", + "region": "", + "script": "Arab", + "isRtl": false, + "name": "Malay (Arabic)", + "localizedName": "Malay (Arabic)", + "uri": "/complete-metafile/_e0/file03/ms-Arab/file.json", + "timestamp": 1700000000 + }, + { + "language": "ms", + "region": "ID", + "script": "Latn", + "isRtl": false, + "name": "Malay (Indonesia, Latin)", + "localizedName": "Malay (Indonesia, Latin)", + "uri": "/complete-metafile/_e0/file03/ms-ID-Latn/file.json", + "timestamp": 1700000000 + } + ] + } + } +} diff --git a/tests/fixtures/empty-metafile/index.ts b/tests/fixtures/empty-metafile/index.ts new file mode 100644 index 0000000..cdc1b1f --- /dev/null +++ b/tests/fixtures/empty-metafile/index.ts @@ -0,0 +1,17 @@ +import axiosMock from '@tests/mocks/axios-mock'; +import emptyFileMetafile from '@tests/fixtures/empty-metafile/metafile.json'; + +const baseUrl: string = 'https://delivery.localazy.com'; + +export const url = { + metafile: `${baseUrl}/empty-metafile/_e0.v2.json`, +}; + +export const serverResponses = { + metafile: emptyFileMetafile, +}; + +export const mockAxios = (): void => { + axiosMock.reset(); + axiosMock.onGet(url.metafile).reply(200, serverResponses.metafile); +}; diff --git a/tests/fixtures/empty-metafile/metafile.json b/tests/fixtures/empty-metafile/metafile.json new file mode 100644 index 0000000..c375b6e --- /dev/null +++ b/tests/fixtures/empty-metafile/metafile.json @@ -0,0 +1,7 @@ +{ + "projectUrl": "https://localazy.com/p/cdnarticle", + "baseLocale": "en", + "timestamp": 1700000000, + "files": { + } +} diff --git a/tests/fixtures/file-types-metafile/file01-json/en/plain.json b/tests/fixtures/file-types-metafile/file01-json/en/plain.json new file mode 100644 index 0000000..21a44ca --- /dev/null +++ b/tests/fixtures/file-types-metafile/file01-json/en/plain.json @@ -0,0 +1,38 @@ +{ + "app_title": "My Application", + "back_button": "Back", + "cancel_button": "Cancel", + "change_password_button": "Change Password", + "confirmation_message": "Are you sure you want to proceed?", + "confirmation_title": "Confirmation", + "continue_button": "Continue", + "delete_account_button": "Delete Account", + "error_message": "An error has occurred", + "finish_button": "Finish", + "forgot_password": "Forgot Password?", + "home_tab": "Home", + "language_selection": "Language", + "loading_message": "Loading...", + "login_button": "Log In", + "logout_button": "Log Out", + "messages_tab": "Messages", + "next_button": "Next", + "no_button": "No", + "no_results": "No results found", + "notifications_title": "Notifications", + "password_placeholder": "Enter your password", + "privacy_policy": "Privacy Policy", + "profile_tab": "Profile", + "profile_title": "My Profile", + "remember_me": "Remember Me", + "save_changes_button": "Save Changes", + "search_placeholder": "Search...", + "settings_tab": "Settings", + "settings_title": "Settings", + "signup_button": "Sign Up", + "submit_button": "Submit", + "terms_of_service": "Terms of Service", + "username_placeholder": "Enter your username", + "welcome_message": "Welcome to My Application!", + "yes_button": "Yes" +} \ No newline at end of file diff --git a/tests/fixtures/file-types-metafile/file01-json/es/plain.json b/tests/fixtures/file-types-metafile/file01-json/es/plain.json new file mode 100644 index 0000000..2a63840 --- /dev/null +++ b/tests/fixtures/file-types-metafile/file01-json/es/plain.json @@ -0,0 +1,38 @@ +{ + "app_title": "Mi solicitud", + "back_button": "Atrás", + "cancel_button": "Cancelar", + "change_password_button": "Cambiar contraseña", + "confirmation_message": "¿Está seguro de que desea continuar?", + "confirmation_title": "Confirmación", + "continue_button": "Continuar", + "delete_account_button": "Eliminar cuenta", + "error_message": "Se ha producido un error", + "finish_button": "Finalizar", + "forgot_password": "¿Ha olvidado la contraseña?", + "home_tab": "Inicio", + "language_selection": "Idioma", + "loading_message": "Cargando...", + "login_button": "Iniciar sesión", + "logout_button": "Cerrar sesión", + "messages_tab": "Mensajes", + "next_button": "Próxima", + "no_button": "No", + "no_results": "No se han encontrado resultados", + "notifications_title": "Notificaciones", + "password_placeholder": "Introduce tu contraseña", + "privacy_policy": "Política de privacidad", + "profile_tab": "Perfil", + "profile_title": "Mi perfil", + "remember_me": "Recuérdame", + "save_changes_button": "Guardar cambios", + "search_placeholder": "Buscar...", + "settings_tab": "Ajustes", + "settings_title": "Ajustes", + "signup_button": "Inscríbase", + "submit_button": "Enviar", + "terms_of_service": "Términos de servicio", + "username_placeholder": "Introduce tu nombre de usuario", + "welcome_message": "¡Bienvenido a My Application!", + "yes_button": "Sí" +} \ No newline at end of file diff --git a/tests/fixtures/file-types-metafile/file01-json/fr/plain.json b/tests/fixtures/file-types-metafile/file01-json/fr/plain.json new file mode 100644 index 0000000..6909aad --- /dev/null +++ b/tests/fixtures/file-types-metafile/file01-json/fr/plain.json @@ -0,0 +1,38 @@ +{ + "app_title": "Ma candidature", + "back_button": "Retour", + "cancel_button": "Annuler", + "change_password_button": "Changer le mot de passe", + "confirmation_message": "Êtes-vous sûr de vouloir continuer ?", + "confirmation_title": "Confirmer", + "continue_button": "Continuer", + "delete_account_button": "Supprimer le compte", + "error_message": "Une erreur s'est produite", + "finish_button": "Terminer", + "forgot_password": "Mot de passe oublié ?", + "home_tab": "Accueil", + "language_selection": "Langue", + "loading_message": "Chargement en cours...", + "login_button": "Connectez-vous", + "logout_button": "Déconnectez-vous", + "messages_tab": "Méssages", + "next_button": "Suivant", + "no_button": "Non", + "no_results": "Aucun résultat n'a été trouvé", + "notifications_title": "Les notifications", + "password_placeholder": "Entrez votre mot de passe", + "privacy_policy": "Politique de confidentialité", + "profile_tab": "Profil", + "profile_title": "Mon profil", + "remember_me": "Souvenez-vous de moi", + "save_changes_button": "Enregistrer les modifications", + "search_placeholder": "Rechercher...", + "settings_tab": "Réglages", + "settings_title": "Réglages", + "signup_button": "INSCRIVEZ-VOUS", + "submit_button": "Soumettre", + "terms_of_service": "Conditions générales d'utilisation", + "username_placeholder": "Entrez votre nom d'utilisateur", + "welcome_message": "Bienvenue sur Ma candidature !", + "yes_button": "Oui" +} diff --git a/tests/fixtures/file-types-metafile/file02-json5/en/texts.json5 b/tests/fixtures/file-types-metafile/file02-json5/en/texts.json5 new file mode 100644 index 0000000..07f7664 --- /dev/null +++ b/tests/fixtures/file-types-metafile/file02-json5/en/texts.json5 @@ -0,0 +1,52 @@ +{ + "app": { + "farewellMessage": "Goodbye and thank you for using our app!", + "loginPrompt": "Please log in to continue.", + "logoutButton": "Log Out", + "title": "My Application", + "welcomeMessage": "Welcome, {user_name}!" + }, + "authentication": { + "alreadyHaveAccount": "Already have an account? Log In", + "emailPlaceholder": "Enter your email", + "passwordPlaceholder": "Enter your password", + "passwordReset": "Reset your password", + "rememberMe": "Remember Me", + "signUp": "Sign Up" + }, + "contact": { + "aboutUs": "About Us", + "us": "Contact Us" + }, + "errors": { + "message": "Something went wrong. Please try again.", + "networkError": "Please check your internet connection and try again." + }, + "feedback": { + "prompt": "Tell us what you think about the app!", + "submitFeedback": "Submit Feedback" + }, + "gender": { + "choice": { + "female": "She is your friend.", + "male": "He is your friend.", + "other": "They are your friend." + } + }, + "messages": { + "pluralMessage": "You have ${count} new messages" + }, + "profile": { + "editProfile": "Edit Profile", + "pageTitle": "Your Profile" + }, + "settings": { + "disableNotifications": "Disable Notifications", + "enableNotifications": "Enable Notifications", + "languageSelectLabel": "Choose your language:", + "notificationsLabel": "Notifications", + "privacyPolicy": "Privacy Policy", + "termsOfService": "Terms of Service", + "title": "Settings" + } +} \ No newline at end of file diff --git a/tests/fixtures/file-types-metafile/file02-json5/es/texts.json5 b/tests/fixtures/file-types-metafile/file02-json5/es/texts.json5 new file mode 100644 index 0000000..620dee7 --- /dev/null +++ b/tests/fixtures/file-types-metafile/file02-json5/es/texts.json5 @@ -0,0 +1,52 @@ +{ + "app": { + "farewellMessage": "¡Adiós y gracias por usar nuestra aplicación!", + "loginPrompt": "Inicie sesión para continuar.", + "logoutButton": "Cerrar sesión", + "title": "Mi solicitud", + "welcomeMessage": "¡Bienvenido,{user_name}!" + }, + "authentication": { + "alreadyHaveAccount": "¿Ya tienes una cuenta? Iniciar sesión", + "emailPlaceholder": "Introduce tu correo electrónico", + "passwordPlaceholder": "Introduce tu contraseña", + "passwordReset": "Restablecer la contraseña", + "rememberMe": "Recuérdame", + "signUp": "Inscríbase" + }, + "contact": { + "aboutUs": "Acerca de nosotros", + "us": "Póngase en contacto con nosotros" + }, + "errors": { + "message": "Algo salió mal. Por favor, inténtelo de nuevo.", + "networkError": "Comprueba tu conexión a Internet e inténtalo de nuevo." + }, + "feedback": { + "prompt": "¡Cuéntanos lo que piensas de la aplicación!", + "submitFeedback": "Enviar comentarios" + }, + "gender": { + "choice": { + "female": "Es tu amiga.", + "male": "Es tu amigo.", + "other": "Son tus amigos." + } + }, + "messages": { + "pluralMessage": "Tienes mensajes ${count} nuevos" + }, + "profile": { + "editProfile": "Editar perfil", + "pageTitle": "Tu perfil" + }, + "settings": { + "disableNotifications": "Desactivar las notificaciones", + "enableNotifications": "Habilitar notificaciones", + "languageSelectLabel": "Elige tu idioma:", + "notificationsLabel": "Notificaciones", + "privacyPolicy": "Política de privacidad", + "termsOfService": "Términos de servicio", + "title": "Ajustes" + } +} \ No newline at end of file diff --git a/tests/fixtures/file-types-metafile/file02-json5/fr/texts.json5 b/tests/fixtures/file-types-metafile/file02-json5/fr/texts.json5 new file mode 100644 index 0000000..6d1e101 --- /dev/null +++ b/tests/fixtures/file-types-metafile/file02-json5/fr/texts.json5 @@ -0,0 +1,52 @@ +{ + "app": { + "farewellMessage": "Au revoir et merci d'avoir utilisé notre application !", + "loginPrompt": "Veuillez vous connecter pour continuer.", + "logoutButton": "Déconnectez-vous", + "title": "Ma candidature", + "welcomeMessage": "Bienvenue, {user_name} !" + }, + "authentication": { + "alreadyHaveAccount": "Vous avez déjà un compte ? Se connecter", + "emailPlaceholder": "Entrez votre e-mail", + "passwordPlaceholder": "Entrez votre mot de passe", + "passwordReset": "Réinitialisez votre mot de passe", + "rememberMe": "Souvenez-vous de moi", + "signUp": "INSCRIVEZ-VOUS" + }, + "contact": { + "aboutUs": "À propos de nous", + "us": "Nous contacter" + }, + "errors": { + "message": "Quelque chose s'est mal passé. Veuillez réessayer.", + "networkError": "Vérifiez votre connexion Internet et réessayez." + }, + "feedback": { + "prompt": "Dites-nous ce que vous pensez de l'application !", + "submitFeedback": "Soumettre des commentaires" + }, + "gender": { + "choice": { + "female": "C'est ton amie.", + "male": "C'est ton ami.", + "other": "Ce sont tes amis." + } + }, + "messages": { + "pluralMessage": "Vous avez de ${count} nouveaux messages" + }, + "profile": { + "editProfile": "Modifier le profil", + "pageTitle": "Votre profil" + }, + "settings": { + "disableNotifications": "Désactiver les notifications", + "enableNotifications": "Activer les notifications", + "languageSelectLabel": "Choisissez votre langue :", + "notificationsLabel": "Les notifications", + "privacyPolicy": "Politique de confidentialité", + "termsOfService": "Conditions générales d'utilisation", + "title": "Réglages" + } +} diff --git a/tests/fixtures/file-types-metafile/file03-neon/en/plain.neon b/tests/fixtures/file-types-metafile/file03-neon/en/plain.neon new file mode 100644 index 0000000..0154ac1 --- /dev/null +++ b/tests/fixtures/file-types-metafile/file03-neon/en/plain.neon @@ -0,0 +1,5 @@ +{ + "datePickerMinuteOne": "1 minute", + "datePickerMinuteOther": "%minute minutes", + "singleString": "This is just a normal string." +} \ No newline at end of file diff --git a/tests/fixtures/file-types-metafile/file03-neon/es/plain.neon b/tests/fixtures/file-types-metafile/file03-neon/es/plain.neon new file mode 100644 index 0000000..f22251c --- /dev/null +++ b/tests/fixtures/file-types-metafile/file03-neon/es/plain.neon @@ -0,0 +1,5 @@ +{ + "datePickerMinuteOne": "1 minuto", + "datePickerMinuteOther": "%mminuto 5 minutos", + "singleString": "Esta es solo una cadena normal." +} \ No newline at end of file diff --git a/tests/fixtures/file-types-metafile/file03-neon/fr/plain.neon b/tests/fixtures/file-types-metafile/file03-neon/fr/plain.neon new file mode 100644 index 0000000..b5a8207 --- /dev/null +++ b/tests/fixtures/file-types-metafile/file03-neon/fr/plain.neon @@ -0,0 +1,5 @@ +{ + "datePickerMinuteOne": "1 minute", + "datePickerMinuteOther": "%m5 minutes", + "singleString": "Il s'agit simplement d'une chaîne normale." +} \ No newline at end of file diff --git a/tests/fixtures/file-types-metafile/file04-yaml/en/plain.yaml b/tests/fixtures/file-types-metafile/file04-yaml/en/plain.yaml new file mode 100644 index 0000000..54bfaa0 --- /dev/null +++ b/tests/fixtures/file-types-metafile/file04-yaml/en/plain.yaml @@ -0,0 +1,35 @@ +--- +about_us: "About Us" +already_have_account: "Already have an account? Log In" +app_title: "My Application" +contact_us: "Contact Us" +disable_notifications: "Disable Notifications" +edit_profile: "Edit Profile" +email_placeholder: "Enter your email" +enable_notifications: "Enable Notifications" +error_message: "Something went wrong. Please try again." +farewell_message: "Goodbye and thank you for using our app!" +feedback_prompt: "Tell us what you think about the app!" +gender_choice: + female: "She is your friend." + male: "He is your friend." + other: "They are your friend." +language_select_label: "Choose your language:" +login_prompt: "Please log in to continue." +logout_button: "Log Out" +network_error: "Please check your internet connection and try again." +notifications_label: "Notifications" +password_placeholder: "Enter your password" +password_reset: "Reset your password" +plural_message: + zero: "You have no new messages" + one: "You have one new message" + other: "You have {count} new messages" +privacy_policy: "Privacy Policy" +profile_page_title: "Your Profile" +remember_me: "Remember Me" +settings: "Settings" +sign_up: "Sign Up" +submit_feedback: "Submit Feedback" +terms_of_service: "Terms of Service" +welcome_message: "Welcome, {user_name}!" diff --git a/tests/fixtures/file-types-metafile/file04-yaml/es/plain.yaml b/tests/fixtures/file-types-metafile/file04-yaml/es/plain.yaml new file mode 100644 index 0000000..56b2605 --- /dev/null +++ b/tests/fixtures/file-types-metafile/file04-yaml/es/plain.yaml @@ -0,0 +1,34 @@ +--- +about_us: "Acerca de nosotros" +already_have_account: "¿Ya tienes una cuenta? Iniciar sesión" +app_title: "Mi solicitud" +contact_us: "Póngase en contacto con nosotros" +disable_notifications: "Desactivar las notificaciones" +edit_profile: "Editar perfil" +email_placeholder: "Introduce tu correo electrónico" +enable_notifications: "Habilitar notificaciones" +error_message: "Algo salió mal. Por favor, inténtelo de nuevo." +farewell_message: "¡Adiós y gracias por usar nuestra aplicación!" +feedback_prompt: "¡Cuéntanos lo que piensas de la aplicación!" +gender_choice: + female: "Es tu amiga." + male: "Es tu amigo." + other: "Son tus amigos." +language_select_label: "Elige tu idioma:" +login_prompt: "Inicie sesión para continuar." +logout_button: "Cerrar sesión" +network_error: "Comprueba tu conexión a Internet e inténtalo de nuevo." +notifications_label: "Notificaciones" +password_placeholder: "Introduce tu contraseña" +password_reset: "Restablecer la contraseña" +plural_message: + one: "Tienes un mensaje nuevo" + other: "Tienes mensajes {count} nuevos" +privacy_policy: "Política de privacidad" +profile_page_title: "Tu perfil" +remember_me: "Recuérdame" +settings: "Ajustes" +sign_up: "Inscríbase" +submit_feedback: "Enviar comentarios" +terms_of_service: "Términos de servicio" +welcome_message: "¡Bienvenido,{user_name}!" diff --git a/tests/fixtures/file-types-metafile/file04-yaml/fr/plain.yaml b/tests/fixtures/file-types-metafile/file04-yaml/fr/plain.yaml new file mode 100644 index 0000000..3f420de --- /dev/null +++ b/tests/fixtures/file-types-metafile/file04-yaml/fr/plain.yaml @@ -0,0 +1,34 @@ +--- +about_us: "À propos de nous" +already_have_account: "Vous avez déjà un compte\_? Se connecter" +app_title: "Ma candidature" +contact_us: "Nous contacter" +disable_notifications: "Désactiver les notifications" +edit_profile: "Modifier le profil" +email_placeholder: "Entrez votre e-mail" +enable_notifications: "Activer les notifications" +error_message: "Quelque chose s'est mal passé. Veuillez réessayer." +farewell_message: "Au revoir et merci d'avoir utilisé notre application\_!" +feedback_prompt: "Dites-nous ce que vous pensez de l'application\_!" +gender_choice: + female: "C'est ton amie." + male: "C'est ton ami." + other: "Ce sont tes amis." +language_select_label: "Choisissez votre langue\_:" +login_prompt: "Veuillez vous connecter pour continuer." +logout_button: "Déconnectez-vous" +network_error: "Vérifiez votre connexion Internet et réessayez." +notifications_label: "Les notifications" +password_placeholder: "Entrez votre mot de passe" +password_reset: "Réinitialisez votre mot de passe" +plural_message: + one: "Vous avez un nouveau message" + other: "Vous avez de {count} nouveaux messages" +privacy_policy: "Politique de confidentialité" +profile_page_title: "Votre profil" +remember_me: "Souvenez-vous de moi" +settings: "Réglages" +sign_up: "INSCRIVEZ-VOUS" +submit_feedback: "Soumettre des commentaires" +terms_of_service: "Conditions générales d'utilisation" +welcome_message: "Bienvenue, {user_name}\_!" diff --git a/tests/fixtures/file-types-metafile/file05-xml/en/resources.xml b/tests/fixtures/file-types-metafile/file05-xml/en/resources.xml new file mode 100644 index 0000000..c3d65ba --- /dev/null +++ b/tests/fixtures/file-types-metafile/file05-xml/en/resources.xml @@ -0,0 +1,33 @@ + + + "About Us" + "Already have an account? Log In" + "My Application" + "Contact Us" + "Disable Notifications" + "Edit Profile" + "Enter your email" + "Enable Notifications" + "Something went wrong. Please try again." + "Goodbye and thank you for using our app!" + "Tell us what you think about the app!" + "She is your friend." + "He is your friend." + "They are your friend." + "Choose your language:" + "Please log in to continue." + "Log Out" + "Please check your internet connection and try again." + "Notifications" + "Enter your password" + "Reset your password" + "You have %1$d new messages" + "Privacy Policy" + "Your Profile" + "Remember Me" + "Settings" + "Sign Up" + "Submit Feedback" + "Terms of Service" + "Welcome, %1$s!" + \ No newline at end of file diff --git a/tests/fixtures/file-types-metafile/file05-xml/es/resources.xml b/tests/fixtures/file-types-metafile/file05-xml/es/resources.xml new file mode 100644 index 0000000..105bb4c --- /dev/null +++ b/tests/fixtures/file-types-metafile/file05-xml/es/resources.xml @@ -0,0 +1,33 @@ + + + "Acerca de nosotros" + "¿Ya tienes una cuenta? Iniciar sesión" + "Mi solicitud" + "Póngase en contacto con nosotros" + "Desactivar las notificaciones" + "Editar perfil" + "Introduce tu correo electrónico" + "Habilitar notificaciones" + "Algo salió mal. Por favor, inténtelo de nuevo." + "¡Adiós y gracias por usar nuestra aplicación!" + "¡Cuéntanos lo que piensas de la aplicación!" + "Es tu amiga." + "Es tu amigo." + "Son tus amigos." + "Elige tu idioma:" + "Inicie sesión para continuar." + "Cerrar sesión" + "Comprueba tu conexión a Internet e inténtalo de nuevo." + "Notificaciones" + "Introduce tu contraseña" + "Restablecer la contraseña" + "Tienes mensajes %1$d nuevos" + "Política de privacidad" + "Tu perfil" + "Recuérdame" + "Ajustes" + "Inscríbase" + "Enviar comentarios" + "Términos de servicio" + "¡Bienvenido,%1$s!" + \ No newline at end of file diff --git a/tests/fixtures/file-types-metafile/file05-xml/fr/resources.xml b/tests/fixtures/file-types-metafile/file05-xml/fr/resources.xml new file mode 100644 index 0000000..a8ff0b1 --- /dev/null +++ b/tests/fixtures/file-types-metafile/file05-xml/fr/resources.xml @@ -0,0 +1,33 @@ + + + "À propos de nous" + "Vous avez déjà un compte ? Se connecter" + "Ma candidature" + "Nous contacter" + "Désactiver les notifications" + "Modifier le profil" + "Entrez votre e-mail" + "Activer les notifications" + "Quelque chose s\'est mal passé. Veuillez réessayer." + "Au revoir et merci d\'avoir utilisé notre application !" + "Dites-nous ce que vous pensez de l\'application !" + "C\'est ton amie." + "C\'est ton ami." + "Ce sont tes amis." + "Choisissez votre langue :" + "Veuillez vous connecter pour continuer." + "Déconnectez-vous" + "Vérifiez votre connexion Internet et réessayez." + "Les notifications" + "Entrez votre mot de passe" + "Réinitialisez votre mot de passe" + "Vous avez de %1$d nouveaux messages" + "Politique de confidentialité" + "Votre profil" + "Souvenez-vous de moi" + "Réglages" + "INSCRIVEZ-VOUS" + "Soumettre des commentaires" + "Conditions générales d\'utilisation" + "Bienvenue, %1$s !" + \ No newline at end of file diff --git a/tests/fixtures/file-types-metafile/file06-srt/en/subtitles.srt b/tests/fixtures/file-types-metafile/file06-srt/en/subtitles.srt new file mode 100644 index 0000000..6c135db --- /dev/null +++ b/tests/fixtures/file-types-metafile/file06-srt/en/subtitles.srt @@ -0,0 +1,30 @@ +1 +00:00:01,000 --> 00:00:03,000 +Welcome to our presentation. + +2 +00:00:05,000 --> 00:00:10,000 +Today we will discuss the importance +of localization in software development. + +3 +00:00:15,000 --> 00:00:20,000 +Localization ensures that your application +is accessible to a global audience. + +4 +00:00:22,000 --> 00:00:25,000 +We will cover topics like cultural nuances, + +5 +00:00:25,200 --> 00:00:27,000 +date and time formats, + +6 +00:00:27,200 --> 00:00:29,000 +and text directionality. + +7 +00:00:32,000 --> 00:00:35,000 +Thank you for joining us! + diff --git a/tests/fixtures/file-types-metafile/file06-srt/es/subtitles.srt b/tests/fixtures/file-types-metafile/file06-srt/es/subtitles.srt new file mode 100644 index 0000000..43a3fc3 --- /dev/null +++ b/tests/fixtures/file-types-metafile/file06-srt/es/subtitles.srt @@ -0,0 +1,30 @@ +1 +00:00:01,000 --> 00:00:03,000 +Bienvenido a nuestra presentaci?n. + +2 +00:00:05,000 --> 00:00:10,000 +Hoy vamos a hablar de la importancia +de la localizaci?n en el desarrollo de software. + +3 +00:00:15,000 --> 00:00:20,000 +La localizaci?n garantiza que su aplicaci?n +es accesible para una audiencia global. + +4 +00:00:22,000 --> 00:00:25,000 +Cubriremos temas como los matices culturales, + +5 +00:00:25,200 --> 00:00:27,000 +formatos de fecha y hora, + +6 +00:00:27,200 --> 00:00:29,000 +y direccionalidad del texto. + +7 +00:00:32,000 --> 00:00:35,000 +?Gracias por acompa?arnos! + diff --git a/tests/fixtures/file-types-metafile/file06-srt/fr/subtitles.srt b/tests/fixtures/file-types-metafile/file06-srt/fr/subtitles.srt new file mode 100644 index 0000000..054753a --- /dev/null +++ b/tests/fixtures/file-types-metafile/file06-srt/fr/subtitles.srt @@ -0,0 +1,30 @@ +1 +00:00:01,000 --> 00:00:03,000 +Bienvenue ? notre pr?sentation. + +2 +00:00:05,000 --> 00:00:10,000 +Aujourd'hui, nous discuterons de l'importance +de la localisation dans le d?veloppement de logiciels. + +3 +00:00:15,000 --> 00:00:20,000 +La localisation garantit que votre application +est accessible ? un public mondial. + +4 +00:00:22,000 --> 00:00:25,000 +Nous aborderons des sujets tels que les nuances culturelles, + +5 +00:00:25,200 --> 00:00:27,000 +formats de date et d'heure, + +6 +00:00:27,200 --> 00:00:29,000 +et la directionnalit? du texte. + +7 +00:00:32,000 --> 00:00:35,000 +Merci de vous joindre ? nous?! + diff --git a/tests/fixtures/file-types-metafile/file07-ini/en/plain.ini b/tests/fixtures/file-types-metafile/file07-ini/en/plain.ini new file mode 100644 index 0000000..6260d6d --- /dev/null +++ b/tests/fixtures/file-types-metafile/file07-ini/en/plain.ini @@ -0,0 +1,29 @@ +about_us = About Us +already_have_account = Already have an account? Log In +app_title = My Application +contact_us = Contact Us +disable_notifications = Disable Notifications +edit_profile = Edit Profile +email_placeholder = Enter your email +enable_notifications = Enable Notifications +error_message = Something went wrong. Please try again. +farewell_message = Goodbye and thank you for using our app! +feedback_prompt = Tell us what you think about the app! +gender_choice = They are your friend. +language_select_label = Choose your language\: +login_prompt = Please log in to continue. +logout_button = Log Out +network_error = Please check your internet connection and try again. +notifications_label = Notifications +password_placeholder = Enter your password +password_reset = Reset your password +plural_message = You have {count} new messages +privacy_policy = Privacy Policy +profile_page_title = Your Profile +remember_me = Remember Me +settings = Settings +sign_up = Sign Up +submit_feedback = Submit Feedback +terms_of_service = Terms of Service +welcome_message = Welcome, {user_name}! + diff --git a/tests/fixtures/file-types-metafile/file07-ini/es/plain.ini b/tests/fixtures/file-types-metafile/file07-ini/es/plain.ini new file mode 100644 index 0000000..8a48d5e --- /dev/null +++ b/tests/fixtures/file-types-metafile/file07-ini/es/plain.ini @@ -0,0 +1,29 @@ +about_us = Acerca de nosotros +already_have_account = ¿Ya tienes una cuenta? Iniciar sesión +app_title = Mi solicitud +contact_us = Póngase en contacto con nosotros +disable_notifications = Desactivar las notificaciones +edit_profile = Editar perfil +email_placeholder = Introduce tu correo electrónico +enable_notifications = Habilitar notificaciones +error_message = Algo salió mal. Por favor, inténtelo de nuevo. +farewell_message = ¡Adiós y gracias por usar nuestra aplicación! +feedback_prompt = ¡Cuéntanos lo que piensas de la aplicación! +gender_choice = Son tus amigos. +language_select_label = Elige tu idioma\: +login_prompt = Inicie sesión para continuar. +logout_button = Cerrar sesión +network_error = Comprueba tu conexión a Internet e inténtalo de nuevo. +notifications_label = Notificaciones +password_placeholder = Introduce tu contraseña +password_reset = Restablecer la contraseña +plural_message = Tienes mensajes {count} nuevos +privacy_policy = Política de privacidad +profile_page_title = Tu perfil +remember_me = Recuérdame +settings = Ajustes +sign_up = Inscríbase +submit_feedback = Enviar comentarios +terms_of_service = Términos de servicio +welcome_message = ¡Bienvenido,{user_name}! + diff --git a/tests/fixtures/file-types-metafile/file07-ini/fr/plain.ini b/tests/fixtures/file-types-metafile/file07-ini/fr/plain.ini new file mode 100644 index 0000000..3b7ed57 --- /dev/null +++ b/tests/fixtures/file-types-metafile/file07-ini/fr/plain.ini @@ -0,0 +1,29 @@ +about_us = À propos de nous +already_have_account = Vous avez déjà un compte ? Se connecter +app_title = Ma candidature +contact_us = Nous contacter +disable_notifications = Désactiver les notifications +edit_profile = Modifier le profil +email_placeholder = Entrez votre e-mail +enable_notifications = Activer les notifications +error_message = Quelque chose s\'est mal passé. Veuillez réessayer. +farewell_message = Au revoir et merci d\'avoir utilisé notre application ! +feedback_prompt = Dites-nous ce que vous pensez de l\'application ! +gender_choice = Ce sont tes amis. +language_select_label = Choisissez votre langue \: +login_prompt = Veuillez vous connecter pour continuer. +logout_button = Déconnectez-vous +network_error = Vérifiez votre connexion Internet et réessayez. +notifications_label = Les notifications +password_placeholder = Entrez votre mot de passe +password_reset = Réinitialisez votre mot de passe +plural_message = Vous avez de {count} nouveaux messages +privacy_policy = Politique de confidentialité +profile_page_title = Votre profil +remember_me = Souvenez-vous de moi +settings = Réglages +sign_up = INSCRIVEZ-VOUS +submit_feedback = Soumettre des commentaires +terms_of_service = Conditions générales d\'utilisation +welcome_message = Bienvenue, {user_name} ! + diff --git a/tests/fixtures/file-types-metafile/file08-strings/en/Localizable.strings b/tests/fixtures/file-types-metafile/file08-strings/en/Localizable.strings new file mode 100644 index 0000000..989e4ca --- /dev/null +++ b/tests/fixtures/file-types-metafile/file08-strings/en/Localizable.strings @@ -0,0 +1,32 @@ +"About Us" = "About Us"; +"Already have an account? Log In" = "Already have an account? Log In"; +"Choose your language:" = "Choose your language:"; +"Contact Us" = "Contact Us"; +"Disable Notifications" = "Disable Notifications"; +"Edit Profile" = "Edit Profile"; +"Enable Notifications" = "Enable Notifications"; +"Enter your email" = "Enter your email"; +"Enter your password" = "Enter your password"; +"Goodbye and thank you for using our app!" = "Goodbye and thank you for using our app!"; +"He is your friend." = "He is your friend."; +"Log Out" = "Log Out"; +"My Application" = "My Application"; +"Notifications" = "Notifications"; +"Please check your internet connection and try again." = "Please check your internet connection and try again."; +"Please log in to continue." = "Please log in to continue."; +"Privacy Policy" = "Privacy Policy"; +"Remember Me" = "Remember Me"; +"Reset your password" = "Reset your password"; +"Settings" = "Settings"; +"She is your friend." = "She is your friend."; +"Sign Up" = "Sign Up"; +"Something went wrong. Please try again." = "Something went wrong. Please try again."; +"Submit Feedback" = "Submit Feedback"; +"Tell us what you think about the app!" = "Tell us what you think about the app!"; +"Terms of Service" = "Terms of Service"; +"They are your friend." = "They are your friend."; +"Welcome, %@!" = "Welcome, %@!"; +"You have %d new messages" = "You have %d new messages"; +"You have no new messages" = "You have no new messages"; +"You have one new message" = "You have one new message"; +"Your Profile" = "Your Profile"; diff --git a/tests/fixtures/file-types-metafile/file08-strings/es/Localizable.strings b/tests/fixtures/file-types-metafile/file08-strings/es/Localizable.strings new file mode 100644 index 0000000..b312717 --- /dev/null +++ b/tests/fixtures/file-types-metafile/file08-strings/es/Localizable.strings @@ -0,0 +1,32 @@ +"About Us" = "Acerca de nosotros"; +"Already have an account? Log In" = "¿Ya tienes una cuenta? Iniciar sesión"; +"Choose your language:" = "Elige tu idioma:"; +"Contact Us" = "Póngase en contacto con nosotros"; +"Disable Notifications" = "Desactivar las notificaciones"; +"Edit Profile" = "Editar perfil"; +"Enable Notifications" = "Habilitar notificaciones"; +"Enter your email" = "Introduce tu correo electrónico"; +"Enter your password" = "Introduce tu contraseña"; +"Goodbye and thank you for using our app!" = "¡Adiós y gracias por usar nuestra aplicación!"; +"He is your friend." = "Es tu amigo."; +"Log Out" = "Cerrar sesión"; +"My Application" = "Mi solicitud"; +"Notifications" = "Notificaciones"; +"Please check your internet connection and try again." = "Comprueba tu conexión a Internet e inténtalo de nuevo."; +"Please log in to continue." = "Inicie sesión para continuar."; +"Privacy Policy" = "Política de privacidad"; +"Remember Me" = "Recuérdame"; +"Reset your password" = "Restablecer la contraseña"; +"Settings" = "Ajustes"; +"She is your friend." = "Es tu amiga."; +"Sign Up" = "Inscríbase"; +"Something went wrong. Please try again." = "Algo salió mal. Por favor, inténtelo de nuevo."; +"Submit Feedback" = "Enviar comentarios"; +"Tell us what you think about the app!" = "¡Cuéntanos lo que piensas de la aplicación!"; +"Terms of Service" = "Términos de servicio"; +"They are your friend." = "Son tus amigos."; +"Welcome, %@!" = "¡Bienvenido,%@!"; +"You have %d new messages" = "Tienes mensajes %d nuevos"; +"You have no new messages" = "No tienes mensajes nuevos"; +"You have one new message" = "Tienes un mensaje nuevo"; +"Your Profile" = "Tu perfil"; diff --git a/tests/fixtures/file-types-metafile/file08-strings/fr/Localizable.strings b/tests/fixtures/file-types-metafile/file08-strings/fr/Localizable.strings new file mode 100644 index 0000000..ba6ee1a --- /dev/null +++ b/tests/fixtures/file-types-metafile/file08-strings/fr/Localizable.strings @@ -0,0 +1,32 @@ +"About Us" = "À propos de nous"; +"Already have an account? Log In" = "Vous avez déjà un compte ? Se connecter"; +"Choose your language:" = "Choisissez votre langue :"; +"Contact Us" = "Nous contacter"; +"Disable Notifications" = "Désactiver les notifications"; +"Edit Profile" = "Modifier le profil"; +"Enable Notifications" = "Activer les notifications"; +"Enter your email" = "Entrez votre e-mail"; +"Enter your password" = "Entrez votre mot de passe"; +"Goodbye and thank you for using our app!" = "Au revoir et merci d'avoir utilisé notre application !"; +"He is your friend." = "C'est ton ami."; +"Log Out" = "Déconnectez-vous"; +"My Application" = "Ma candidature"; +"Notifications" = "Les notifications"; +"Please check your internet connection and try again." = "Vérifiez votre connexion Internet et réessayez."; +"Please log in to continue." = "Veuillez vous connecter pour continuer."; +"Privacy Policy" = "Politique de confidentialité"; +"Remember Me" = "Souvenez-vous de moi"; +"Reset your password" = "Réinitialisez votre mot de passe"; +"Settings" = "Réglages"; +"She is your friend." = "C'est ton amie."; +"Sign Up" = "INSCRIVEZ-VOUS"; +"Something went wrong. Please try again." = "Quelque chose s'est mal passé. Veuillez réessayer."; +"Submit Feedback" = "Soumettre des commentaires"; +"Tell us what you think about the app!" = "Dites-nous ce que vous pensez de l'application !"; +"Terms of Service" = "Conditions générales d'utilisation"; +"They are your friend." = "Ce sont tes amis."; +"Welcome, %@!" = "Bienvenue, %@ !"; +"You have %d new messages" = "Vous avez de %d nouveaux messages"; +"You have no new messages" = "Vous n'avez aucun nouveau message"; +"You have one new message" = "Vous avez un nouveau message"; +"Your Profile" = "Votre profil"; diff --git a/tests/fixtures/file-types-metafile/file09-toml/en/file.toml b/tests/fixtures/file-types-metafile/file09-toml/en/file.toml new file mode 100644 index 0000000..eb138d9 --- /dev/null +++ b/tests/fixtures/file-types-metafile/file09-toml/en/file.toml @@ -0,0 +1,35 @@ +[app] +about_us = "About Us" +already_have_account = "Already have an account? Log In!" +contact_us = "Contact Us" +disable_notifications = "Disable Notifications" +edit_profile = "Edit Profile" +email_placeholder = "Enter your email" +enable_notifications = "Enable Notifications" +error_message = "Something went wrong. Please try again." +farewell_message = "Goodbye and thank you for using our app!" +feedback_prompt = "Tell us what you think about the app!" +language_select_label = "Choose your language:" +login_prompt = "Please log in to continue." +logout_button = "Log Out" +network_error = "Please check your internet connection and try again." +notifications_label = "Notifications" +password_placeholder = "Enter your password" +password_reset = "Reset your password" +privacy_policy = "Privacy Policy" +profile_page_title = "Your Profile" +remember_me = "Remember Me" +settings = "Settings" +sign_up = "Sign Up" +submit_feedback = "Submit Feedback" +terms_of_service = "Terms of Service" +title = "My Application" +welcome_message = "Welcome, {user_name}!" +[gender] +choice_female = "She is your friend." +choice_male = "He is your friend." +choice_other = "They are your friend." +[messages] +plural_one = "You have one new message" +plural_other = "You have {count} new messages" +plural_zero = "You have no new messages" diff --git a/tests/fixtures/file-types-metafile/file09-toml/es/file.toml b/tests/fixtures/file-types-metafile/file09-toml/es/file.toml new file mode 100644 index 0000000..d4475a2 --- /dev/null +++ b/tests/fixtures/file-types-metafile/file09-toml/es/file.toml @@ -0,0 +1,35 @@ +[app] +about_us = "Acerca de nosotros" +already_have_account = "¿Ya tienes una cuenta? ¡Inicia sesión!" +contact_us = "Póngase en contacto con nosotros" +disable_notifications = "Desactivar las notificaciones" +edit_profile = "Editar perfil" +email_placeholder = "Introduce tu correo electrónico" +enable_notifications = "Habilitar notificaciones" +error_message = "Algo salió mal. Por favor, inténtelo de nuevo." +farewell_message = "¡Adiós y gracias por usar nuestra aplicación!" +feedback_prompt = "¡Cuéntanos lo que piensas de la aplicación!" +language_select_label = "Elige tu idioma:" +login_prompt = "Inicie sesión para continuar." +logout_button = "Cerrar sesión" +network_error = "Comprueba tu conexión a Internet e inténtalo de nuevo." +notifications_label = "Notificaciones" +password_placeholder = "Introduce tu contraseña" +password_reset = "Restablecer la contraseña" +privacy_policy = "Política de privacidad" +profile_page_title = "Tu perfil" +remember_me = "Recuérdame" +settings = "Ajustes" +sign_up = "Inscríbase" +submit_feedback = "Enviar comentarios" +terms_of_service = "Términos de servicio" +title = "Mi solicitud" +welcome_message = "¡Bienvenido,{user_name}!" +[gender] +choice_female = "Es tu amiga." +choice_male = "Es tu amigo." +choice_other = "Son tus amigos." +[messages] +plural_one = "Tienes un mensaje nuevo" +plural_other = "Tienes mensajes {count} nuevos" +plural_zero = "No tienes mensajes nuevos" diff --git a/tests/fixtures/file-types-metafile/file09-toml/fr/file.toml b/tests/fixtures/file-types-metafile/file09-toml/fr/file.toml new file mode 100644 index 0000000..90ea1bd --- /dev/null +++ b/tests/fixtures/file-types-metafile/file09-toml/fr/file.toml @@ -0,0 +1,35 @@ +[app] +about_us = "À propos de nous" +already_have_account = "Vous avez déjà un compte ? Connectez-vous !" +contact_us = "Nous contacter" +disable_notifications = "Désactiver les notifications" +edit_profile = "Modifier le profil" +email_placeholder = "Entrez votre e-mail" +enable_notifications = "Activer les notifications" +error_message = "Quelque chose s'est mal passé. Veuillez réessayer." +farewell_message = "Au revoir et merci d'avoir utilisé notre application !" +feedback_prompt = "Dites-nous ce que vous pensez de l'application !" +language_select_label = "Choisissez votre langue :" +login_prompt = "Veuillez vous connecter pour continuer." +logout_button = "Déconnectez-vous" +network_error = "Vérifiez votre connexion Internet et réessayez." +notifications_label = "Les notifications" +password_placeholder = "Entrez votre mot de passe" +password_reset = "Réinitialisez votre mot de passe" +privacy_policy = "Politique de confidentialité" +profile_page_title = "Votre profil" +remember_me = "Souvenez-vous de moi" +settings = "Réglages" +sign_up = "INSCRIVEZ-VOUS" +submit_feedback = "Soumettre des commentaires" +terms_of_service = "Conditions générales d'utilisation" +title = "Ma candidature" +welcome_message = "Bienvenue, {user_name} !" +[gender] +choice_female = "C'est ton amie." +choice_male = "C'est ton ami." +choice_other = "Ce sont tes amis." +[messages] +plural_one = "Vous avez un nouveau message" +plural_other = "Vous avez de {count} nouveaux messages" +plural_zero = "Vous n'avez aucun nouveau message" diff --git a/tests/fixtures/file-types-metafile/file10-resx/en/resources.resx b/tests/fixtures/file-types-metafile/file10-resx/en/resources.resx new file mode 100644 index 0000000..c1eade7 --- /dev/null +++ b/tests/fixtures/file-types-metafile/file10-resx/en/resources.resx @@ -0,0 +1,110 @@ + + +text/microsoft-resx + + +2.0 + + +System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + +System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + +About Us + + +Already have an account? Log In + + +My Application + + +Contact Us + + +Disable Notifications + + +Edit Profile + + +Enter your email + + +Enable Notifications + + +Something went wrong. Please try again. + + +Goodbye and thank you for using our app! + + +Tell us what you think about the app! + + +She is your friend. + + +He is your friend. + + +They are your friend. + + +Choose your language: + + +Please log in to continue. + + +Log Out + + +Please check your internet connection and try again. + + +Notifications + + +Enter your password + + +Reset your password + + +You have one new message + + +You have {count} new messages + + +You have no new messages + + +Privacy Policy + + +Your Profile + + +Remember Me + + +Settings + + +Sign Up + + +Submit Feedback + + +Terms of Service + + +Welcome, {user_name}! + + diff --git a/tests/fixtures/file-types-metafile/file10-resx/es/resources.resx b/tests/fixtures/file-types-metafile/file10-resx/es/resources.resx new file mode 100644 index 0000000..85b3983 --- /dev/null +++ b/tests/fixtures/file-types-metafile/file10-resx/es/resources.resx @@ -0,0 +1,110 @@ + + +text/microsoft-resx + + +2.0 + + +System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + +System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + +Acerca de nosotros + + +¿Ya tienes una cuenta? Iniciar sesión + + +Mi solicitud + + +Póngase en contacto con nosotros + + +Desactivar las notificaciones + + +Editar perfil + + +Introduce tu correo electrónico + + +Habilitar notificaciones + + +Algo salió mal. Por favor, inténtelo de nuevo. + + +¡Adiós y gracias por usar nuestra aplicación! + + +¡Cuéntanos lo que piensas de la aplicación! + + +Es tu amiga. + + +Es tu amigo. + + +Son tus amigos. + + +Elige tu idioma: + + +Inicie sesión para continuar. + + +Cerrar sesión + + +Comprueba tu conexión a Internet e inténtalo de nuevo. + + +Notificaciones + + +Introduce tu contraseña + + +Restablecer la contraseña + + +Tienes un mensaje nuevo + + +Tienes mensajes {count} nuevos + + +No tienes mensajes nuevos + + +Política de privacidad + + +Tu perfil + + +Recuérdame + + +Ajustes + + +Inscríbase + + +Enviar comentarios + + +Términos de servicio + + +¡Bienvenido,{user_name}! + + diff --git a/tests/fixtures/file-types-metafile/file10-resx/fr/resources.resx b/tests/fixtures/file-types-metafile/file10-resx/fr/resources.resx new file mode 100644 index 0000000..afb94d8 --- /dev/null +++ b/tests/fixtures/file-types-metafile/file10-resx/fr/resources.resx @@ -0,0 +1,110 @@ + + +text/microsoft-resx + + +2.0 + + +System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + +System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + +À propos de nous + + +Vous avez déjà un compte ? Se connecter + + +Ma candidature + + +Nous contacter + + +Désactiver les notifications + + +Modifier le profil + + +Entrez votre e-mail + + +Activer les notifications + + +Quelque chose s'est mal passé. Veuillez réessayer. + + +Au revoir et merci d'avoir utilisé notre application ! + + +Dites-nous ce que vous pensez de l'application ! + + +C'est ton amie. + + +C'est ton ami. + + +Ce sont tes amis. + + +Choisissez votre langue : + + +Veuillez vous connecter pour continuer. + + +Déconnectez-vous + + +Vérifiez votre connexion Internet et réessayez. + + +Les notifications + + +Entrez votre mot de passe + + +Réinitialisez votre mot de passe + + +Vous avez un nouveau message + + +Vous avez de {count} nouveaux messages + + +Vous n'avez aucun nouveau message + + +Politique de confidentialité + + +Votre profil + + +Souvenez-vous de moi + + +Réglages + + +INSCRIVEZ-VOUS + + +Soumettre des commentaires + + +Conditions générales d'utilisation + + +Bienvenue, {user_name} ! + + diff --git a/tests/fixtures/file-types-metafile/file11-xliff/en/translate.xliff b/tests/fixtures/file-types-metafile/file11-xliff/en/translate.xliff new file mode 100644 index 0000000..eba4d14 --- /dev/null +++ b/tests/fixtures/file-types-metafile/file11-xliff/en/translate.xliff @@ -0,0 +1,30 @@ + + + + +My Application +My Application + + +{GENDER, select, male {He is your friend.} female {She is your friend.} other {They are your friend.}} +{GENDER, select, male {He is your friend.} female {She is your friend.} other {They are your friend.}} + + +Please log in to continue. +Please log in to continue. + + +Log Out +Log Out + + +You have %d new messages +You have %d new messages + + +Welcome, %s! +Welcome, %s! + + + + diff --git a/tests/fixtures/file-types-metafile/file11-xliff/es/translate.xliff b/tests/fixtures/file-types-metafile/file11-xliff/es/translate.xliff new file mode 100644 index 0000000..6bdcc0f --- /dev/null +++ b/tests/fixtures/file-types-metafile/file11-xliff/es/translate.xliff @@ -0,0 +1,30 @@ + + + + +My Application +Mi solicitud + + +{GENDER, select, male {He is your friend.} female {She is your friend.} other {They are your friend.}} +{GÉNERO, selecciona, masculino {Él es tu amigo.} mujer {Ella es tu amiga.} other {Es tu amigo.}} + + +Please log in to continue. +Inicie sesión para continuar. + + +Log Out +Cerrar sesión + + +You have %d new messages +Tienes mensajes %d nuevos + + +Welcome, %s! +¡Bienvenido,%s! + + + + diff --git a/tests/fixtures/file-types-metafile/file11-xliff/fr/translate.xliff b/tests/fixtures/file-types-metafile/file11-xliff/fr/translate.xliff new file mode 100644 index 0000000..f0f4e04 --- /dev/null +++ b/tests/fixtures/file-types-metafile/file11-xliff/fr/translate.xliff @@ -0,0 +1,30 @@ + + + + +My Application +Ma candidature + + +{GENDER, select, male {He is your friend.} female {She is your friend.} other {They are your friend.}} +{GENRE, sélectionné, homme {C'est ton ami.} femme {Elle est ton amie.} autre {Ils sont ton ami.}} + + +Please log in to continue. +Veuillez vous connecter pour continuer. + + +Log Out +Déconnectez-vous + + +You have %d new messages +Vous avez de %d nouveaux messages + + +Welcome, %s! +Bienvenue, %s ! + + + + diff --git a/tests/fixtures/file-types-metafile/file12-properties/en/local.properties b/tests/fixtures/file-types-metafile/file12-properties/en/local.properties new file mode 100644 index 0000000..7081eb2 --- /dev/null +++ b/tests/fixtures/file-types-metafile/file12-properties/en/local.properties @@ -0,0 +1,32 @@ +network_error=Please check your internet connection and try again. +submit_feedback=Submit Feedback +email_placeholder=Enter your email +contact_us=Contact Us +welcome_message=Welcome, {user_name}\! +logout_button=Log Out +language_select_label=Choose your language\: +gender_choice_male=He is your friend. +plural_message_other=You have {count} new messages +about_us=About Us +gender_choice_other=They are your friend. +terms_of_service=Terms of Service +remember_me=Remember Me +farewell_message=Goodbye and thank you for using our app\! +edit_profile=Edit Profile +feedback_prompt=Tell us what you think about the app\! +error_message=Something went wrong. Please try again. +plural_message_one=You have one new message +plural_message_zero=You have no new messages +settings=Settings +password_placeholder=Enter your password +notifications_label=Notifications +password_reset=Reset your password +sign_up=Sign Up +disable_notifications=Disable Notifications +app_title=My Application +already_have_account=Already have an account? Log In +enable_notifications=Enable Notifications +gender_choice_female=She is your friend. +privacy_policy=Privacy Policy +login_prompt=Please log in to continue. +profile_page_title=Your Profile diff --git a/tests/fixtures/file-types-metafile/file12-properties/es/local.properties b/tests/fixtures/file-types-metafile/file12-properties/es/local.properties new file mode 100644 index 0000000..0bf1477 --- /dev/null +++ b/tests/fixtures/file-types-metafile/file12-properties/es/local.properties @@ -0,0 +1,32 @@ +network_error=Comprueba tu conexión a Internet e inténtalo de nuevo. +submit_feedback=Enviar comentarios +email_placeholder=Introduce tu correo electrónico +contact_us=Póngase en contacto con nosotros +welcome_message=¡Bienvenido,{user_name}\! +logout_button=Cerrar sesión +language_select_label=Elige tu idioma\: +gender_choice_male=Es tu amigo. +plural_message_other=Tienes mensajes {count} nuevos +about_us=Acerca de nosotros +gender_choice_other=Son tus amigos. +terms_of_service=Términos de servicio +remember_me=Recuérdame +farewell_message=¡Adiós y gracias por usar nuestra aplicación\! +edit_profile=Editar perfil +feedback_prompt=¡Cuéntanos lo que piensas de la aplicación\! +error_message=Algo salió mal. Por favor, inténtelo de nuevo. +plural_message_one=Tienes un mensaje nuevo +plural_message_zero=No tienes mensajes nuevos +settings=Ajustes +password_placeholder=Introduce tu contraseña +notifications_label=Notificaciones +password_reset=Restablecer la contraseña +sign_up=Inscríbase +disable_notifications=Desactivar las notificaciones +app_title=Mi solicitud +already_have_account=¿Ya tienes una cuenta? Iniciar sesión +enable_notifications=Habilitar notificaciones +gender_choice_female=Es tu amiga. +privacy_policy=Política de privacidad +login_prompt=Inicie sesión para continuar. +profile_page_title=Tu perfil diff --git a/tests/fixtures/file-types-metafile/file12-properties/fr/local.properties b/tests/fixtures/file-types-metafile/file12-properties/fr/local.properties new file mode 100644 index 0000000..fcee2cd --- /dev/null +++ b/tests/fixtures/file-types-metafile/file12-properties/fr/local.properties @@ -0,0 +1,32 @@ +network_error=Vérifiez votre connexion Internet et réessayez. +submit_feedback=Soumettre des commentaires +email_placeholder=Entrez votre e-mail +contact_us=Nous contacter +welcome_message=Bienvenue, {user_name} \! +logout_button=Déconnectez-vous +language_select_label=Choisissez votre langue \: +gender_choice_male=C'est ton ami. +plural_message_other=Vous avez de {count} nouveaux messages +about_us=À propos de nous +gender_choice_other=Ce sont tes amis. +terms_of_service=Conditions générales d'utilisation +remember_me=Souvenez-vous de moi +farewell_message=Au revoir et merci d'avoir utilisé notre application \! +edit_profile=Modifier le profil +feedback_prompt=Dites-nous ce que vous pensez de l'application \! +error_message=Quelque chose s'est mal passé. Veuillez réessayer. +plural_message_one=Vous avez un nouveau message +plural_message_zero=Vous n'avez aucun nouveau message +settings=Réglages +password_placeholder=Entrez votre mot de passe +notifications_label=Les notifications +password_reset=Réinitialisez votre mot de passe +sign_up=INSCRIVEZ-VOUS +disable_notifications=Désactiver les notifications +app_title=Ma candidature +already_have_account=Vous avez déjà un compte ? Se connecter +enable_notifications=Activer les notifications +gender_choice_female=C'est ton amie. +privacy_policy=Politique de confidentialité +login_prompt=Veuillez vous connecter pour continuer. +profile_page_title=Votre profil diff --git a/tests/fixtures/file-types-metafile/file13-csv/en/export.csv b/tests/fixtures/file-types-metafile/file13-csv/en/export.csv new file mode 100644 index 0000000..a7dca1e --- /dev/null +++ b/tests/fixtures/file-types-metafile/file13-csv/en/export.csv @@ -0,0 +1,29 @@ +key,en +about_us,Option to read about the app creators +already_have_account,Prompt for users who already have an account +app_title,The title of the application +contact_us,Option to contact the app creators +disable_notifications,Option to disable notifications +edit_profile,Option to edit user's profile +email_placeholder,Placeholder text for email input field +enable_notifications,Option to enable notifications +error_message,Error message for general errors +farewell_message,Farewell message when the user logs out +feedback_prompt,Prompt message to ask for user's feedback +gender_choice,Generic message for friend without specifying gender +language_select_label,Label for language selection dropdown +login_prompt,Prompt message for the user to log in +logout_button,Label for the logout button +network_error,Error message for network errors +notifications_label,Label for the notifications +password_placeholder,Placeholder text for password input field +password_reset,Option to reset password +plural_message,"Message displaying the number of new messages, with a plural placeholder" +privacy_policy,Link text for privacy policy +profile_page_title,Title for the user's profile page +remember_me,Option for the app to remember the user +settings,Label for the settings option +sign_up,Button text for signing up +submit_feedback,Button text to submit feedback +terms_of_service,Link text for terms of service +welcome_message,Welcome message with placeholder for the user's name diff --git a/tests/fixtures/file-types-metafile/file13-csv/es/export.csv b/tests/fixtures/file-types-metafile/file13-csv/es/export.csv new file mode 100644 index 0000000..8d9c61a --- /dev/null +++ b/tests/fixtures/file-types-metafile/file13-csv/es/export.csv @@ -0,0 +1,29 @@ +key,es +about_us,Opción para leer sobre los creadores de la aplicación +already_have_account,Preguntar a los usuarios que ya tienen una cuenta +app_title,El título de la solicitud +contact_us,Opción de contactar con los creadores de la aplicación +disable_notifications,Opción para deshabilitar las notificaciones +edit_profile,Opción para editar el perfil del usuario +email_placeholder,Texto de marcador de posición para el campo de entrada de correo electrónico +enable_notifications,Opción para habilitar las notificaciones +error_message,Mensaje de error para errores generales +farewell_message,Mensaje de despedida cuando el usuario cierra sesión +feedback_prompt,Mensaje rápido para solicitar la opinión del usuario +gender_choice,Mensaje genérico para un amigo sin especificar el género +language_select_label,Etiqueta para el menú desplegable de selección de idioma +login_prompt,Mensaje para que el usuario inicie sesión +logout_button,Etiqueta para el botón de cierre de sesión +network_error,Mensaje de error para errores de red +notifications_label,Etiqueta para las notificaciones +password_placeholder,Texto de marcador de posición para el campo de entrada de contraseña +password_reset,Opción para restablecer la contraseña +plural_message,"Mensaje que muestra el número de mensajes nuevos, con un marcador de posición plural" +privacy_policy,Texto del enlace a la política de privacidad +profile_page_title,Título de la página de perfil del usuario +remember_me,Opción para que la aplicación recuerde al usuario +settings,Etiqueta para la opción de configuración +sign_up,Texto del botón para registrarse +submit_feedback,Texto del botón para enviar comentarios +terms_of_service,Texto del enlace para ver los términos de servicio +welcome_message,Mensaje de bienvenida con marcador de posición para el nombre del usuario diff --git a/tests/fixtures/file-types-metafile/file13-csv/fr/export.csv b/tests/fixtures/file-types-metafile/file13-csv/fr/export.csv new file mode 100644 index 0000000..50e53f9 --- /dev/null +++ b/tests/fixtures/file-types-metafile/file13-csv/fr/export.csv @@ -0,0 +1,29 @@ +key,fr +about_us,Option pour en savoir plus sur les créateurs de l'application +already_have_account,Invite pour les utilisateurs qui ont déjà un compte +app_title,Le titre de la demande +contact_us,Possibilité de contacter les créateurs de l'application +disable_notifications,Option pour désactiver les notifications +edit_profile,Possibilité de modifier le profil de l'utilisateur +email_placeholder,Texte d'espace réservé pour le champ de saisie de l'e-mail +enable_notifications,Option pour activer les notifications +error_message,Message d'erreur pour les erreurs générales +farewell_message,Message d'adieu lorsque l'utilisateur se déconnecte +feedback_prompt,Message rapide pour demander l'avis de l'utilisateur +gender_choice,Message générique pour un ami sans préciser son sexe +language_select_label,Libellé pour la liste déroulante de sélection de la langue +login_prompt,Message invitant l'utilisateur à se connecter +logout_button,Libellé du bouton de déconnexion +network_error,Message d'erreur en cas d'erreur réseau +notifications_label,Étiquette pour les notifications +password_placeholder,Texte de remplacement pour le champ de saisie du mot de passe +password_reset,Option pour réinitialiser le mot de passe +plural_message,"Message affichant le nombre de nouveaux messages, avec un espace réservé au pluriel" +privacy_policy,Texte du lien pour la politique de confidentialité +profile_page_title,Titre de la page de profil de l'utilisateur +remember_me,Option permettant à l'application de se souvenir de l'utilisateur +settings,Libellé de l'option de configuration +sign_up,Texte du bouton pour s'inscrire +submit_feedback,Texte du bouton pour envoyer des commentaires +terms_of_service,Texte du lien pour les conditions d'utilisation +welcome_message,Message de bienvenue avec espace réservé pour le nom de l'utilisateur diff --git a/tests/fixtures/file-types-metafile/file14-ts/en/resources.ts b/tests/fixtures/file-types-metafile/file14-ts/en/resources.ts new file mode 100644 index 0000000..ef48ee2 --- /dev/null +++ b/tests/fixtures/file-types-metafile/file14-ts/en/resources.ts @@ -0,0 +1,22 @@ + + + +Application + +app_title +My Application + + +gender_choice +%1 is your friend. + + +login_prompt +Please log in to continue. + + +welcome_message +Welcome, %1! + + + diff --git a/tests/fixtures/file-types-metafile/file14-ts/es/resources.ts b/tests/fixtures/file-types-metafile/file14-ts/es/resources.ts new file mode 100644 index 0000000..4560acb --- /dev/null +++ b/tests/fixtures/file-types-metafile/file14-ts/es/resources.ts @@ -0,0 +1,22 @@ + + + +Application + +app_title +Mi solicitud + + +gender_choice +%1 es tu amigo. + + +login_prompt +Inicie sesión para continuar. + + +welcome_message +¡Bienvenido, %1! + + + diff --git a/tests/fixtures/file-types-metafile/file14-ts/fr/resources.ts b/tests/fixtures/file-types-metafile/file14-ts/fr/resources.ts new file mode 100644 index 0000000..7a0d0e0 --- /dev/null +++ b/tests/fixtures/file-types-metafile/file14-ts/fr/resources.ts @@ -0,0 +1,22 @@ + + + +Application + +app_title +Ma candidature + + +gender_choice +%1 est votre ami. + + +login_prompt +Veuillez vous connecter pour continuer. + + +welcome_message +Bienvenue, %1 ! + + + diff --git a/tests/fixtures/file-types-metafile/file15-js/en/default.js b/tests/fixtures/file-types-metafile/file15-js/en/default.js new file mode 100644 index 0000000..ea9f661 --- /dev/null +++ b/tests/fixtures/file-types-metafile/file15-js/en/default.js @@ -0,0 +1,52 @@ +export default { + app: { + appTitle: "My Application", + farewellMessage: "Goodbye and thank you for using our app!", + loginPrompt: "Please log in to continue.", + logoutButton: "Log Out", + welcomeMessage: "Welcome, {user_name}!" + }, + authentication: { + emailPlaceholder: "Enter your email", + passwordPlaceholder: "Enter your password", + passwordReset: "Reset your password", + rememberMe: "Remember Me", + signUp: "Sign Up" + }, + errors: { + errorMessage: "Something went wrong. Please try again.", + networkError: "Please check your internet connection and try again." + }, + feedback: { + feedbackPrompt: "Tell us what you think about the app!", + submitFeedback: "Submit Feedback" + }, + gender: { + genderChoice_female: "She is your friend.", + genderChoice_male: "He is your friend.", + genderChoice_other: "They are your friend." + }, + messages: { + pluralMessage_one: "You have one new message", + pluralMessage_other: "You have {count} new messages", + pluralMessage_zero: "You have no new messages" + }, + misc: { + aboutUs: "About Us", + alreadyHaveAccount: "Already have an account? Log In", + disableNotifications: "Disable Notifications", + enableNotifications: "Enable Notifications" + }, + profile: { + contactUs: "Contact Us", + editProfile: "Edit Profile", + profilePageTitle: "Your Profile" + }, + settings: { + languageSelectLabel: "Choose your language:", + notificationsLabel: "Notifications", + privacyPolicy: "Privacy Policy", + settingsTitle: "Settings", + termsOfService: "Terms of Service" + } +}; diff --git a/tests/fixtures/file-types-metafile/file15-js/es/default.js b/tests/fixtures/file-types-metafile/file15-js/es/default.js new file mode 100644 index 0000000..524c269 --- /dev/null +++ b/tests/fixtures/file-types-metafile/file15-js/es/default.js @@ -0,0 +1,52 @@ +export default { + app: { + appTitle: "Mi solicitud", + farewellMessage: "¡Adiós y gracias por usar nuestra aplicación!", + loginPrompt: "Inicie sesión para continuar.", + logoutButton: "Cerrar sesión", + welcomeMessage: "¡Bienvenido,{user_name}!" + }, + authentication: { + emailPlaceholder: "Introduce tu correo electrónico", + passwordPlaceholder: "Introduce tu contraseña", + passwordReset: "Restablecer la contraseña", + rememberMe: "Recuérdame", + signUp: "Inscríbase" + }, + errors: { + errorMessage: "Algo salió mal. Por favor, inténtelo de nuevo.", + networkError: "Comprueba tu conexión a Internet e inténtalo de nuevo." + }, + feedback: { + feedbackPrompt: "¡Cuéntanos lo que piensas de la aplicación!", + submitFeedback: "Enviar comentarios" + }, + gender: { + genderChoice_female: "Es tu amiga.", + genderChoice_male: "Es tu amigo.", + genderChoice_other: "Son tus amigos." + }, + messages: { + pluralMessage_one: "Tienes un mensaje nuevo", + pluralMessage_other: "Tienes mensajes {count} nuevos", + pluralMessage_zero: "No tienes mensajes nuevos" + }, + misc: { + aboutUs: "Acerca de nosotros", + alreadyHaveAccount: "¿Ya tienes una cuenta? Iniciar sesión", + disableNotifications: "Desactivar las notificaciones", + enableNotifications: "Habilitar notificaciones" + }, + profile: { + contactUs: "Póngase en contacto con nosotros", + editProfile: "Editar perfil", + profilePageTitle: "Tu perfil" + }, + settings: { + languageSelectLabel: "Elige tu idioma:", + notificationsLabel: "Notificaciones", + privacyPolicy: "Política de privacidad", + settingsTitle: "Ajustes", + termsOfService: "Términos de servicio" + } +}; diff --git a/tests/fixtures/file-types-metafile/file15-js/fr/default.js b/tests/fixtures/file-types-metafile/file15-js/fr/default.js new file mode 100644 index 0000000..0a8cc4f --- /dev/null +++ b/tests/fixtures/file-types-metafile/file15-js/fr/default.js @@ -0,0 +1,52 @@ +export default { + app: { + appTitle: "Ma candidature", + farewellMessage: "Au revoir et merci d'avoir utilisé notre application !", + loginPrompt: "Veuillez vous connecter pour continuer.", + logoutButton: "Déconnectez-vous", + welcomeMessage: "Bienvenue, {user_name} !" + }, + authentication: { + emailPlaceholder: "Entrez votre e-mail", + passwordPlaceholder: "Entrez votre mot de passe", + passwordReset: "Réinitialisez votre mot de passe", + rememberMe: "Souvenez-vous de moi", + signUp: "INSCRIVEZ-VOUS" + }, + errors: { + errorMessage: "Quelque chose s'est mal passé. Veuillez réessayer.", + networkError: "Vérifiez votre connexion Internet et réessayez." + }, + feedback: { + feedbackPrompt: "Dites-nous ce que vous pensez de l'application !", + submitFeedback: "Soumettre des commentaires" + }, + gender: { + genderChoice_female: "C'est ton amie.", + genderChoice_male: "C'est ton ami.", + genderChoice_other: "Ce sont tes amis." + }, + messages: { + pluralMessage_one: "Vous avez un nouveau message", + pluralMessage_other: "Vous avez de {count} nouveaux messages", + pluralMessage_zero: "Vous n'avez aucun nouveau message" + }, + misc: { + aboutUs: "À propos de nous", + alreadyHaveAccount: "Vous avez déjà un compte ? Se connecter", + disableNotifications: "Désactiver les notifications", + enableNotifications: "Activer les notifications" + }, + profile: { + contactUs: "Nous contacter", + editProfile: "Modifier le profil", + profilePageTitle: "Votre profil" + }, + settings: { + languageSelectLabel: "Choisissez votre langue :", + notificationsLabel: "Les notifications", + privacyPolicy: "Politique de confidentialité", + settingsTitle: "Réglages", + termsOfService: "Conditions générales d'utilisation" + } +}; diff --git a/tests/fixtures/file-types-metafile/file16-php/en/structured.php b/tests/fixtures/file-types-metafile/file16-php/en/structured.php new file mode 100644 index 0000000..bece500 --- /dev/null +++ b/tests/fixtures/file-types-metafile/file16-php/en/structured.php @@ -0,0 +1,58 @@ + [ + "farewell_message" => "Goodbye and thank you for using our app!", + "login_prompt" => "Please log in to continue.", + "logout_button" => "Log Out", + "title" => "My Application", + "welcome_message" => "Welcome, {user_name}!" + ], + "authentication" => [ + "already_have_account" => "Already have an account? Log In", + "email_placeholder" => "Enter your email", + "password_placeholder" => "Enter your password", + "password_reset" => "Reset your password", + "remember_me" => "Remember Me", + "sign_up" => "Sign Up" + ], + "contact" => [ + "about_us" => "About Us", + "us" => "Contact Us" + ], + "errors" => [ + "message" => "Something went wrong. Please try again.", + "network_error" => "Please check your internet connection and try again." + ], + "feedback" => [ + "prompt" => "Tell us what you think about the app!", + "submit_feedback" => "Submit Feedback" + ], + "gender" => [ + "choice" => [ + "female" => "She is your friend.", + "male" => "He is your friend.", + "other" => "They are your friend." + ] + ], + "messages" => [ + "plural" => [ + "zero" => "You have no new messages", + "one" => "You have one new message", + "other" => "You have {count} new messages" + ] + ], + "profile" => [ + "edit_profile" => "Edit Profile", + "page_title" => "Your Profile" + ], + "settings" => [ + "disable_notifications" => "Disable Notifications", + "enable_notifications" => "Enable Notifications", + "language_select_label" => "Choose your language:", + "notifications_label" => "Notifications", + "privacy_policy" => "Privacy Policy", + "terms_of_service" => "Terms of Service", + "title" => "Settings" + ] +]; +?> \ No newline at end of file diff --git a/tests/fixtures/file-types-metafile/file16-php/es/structured.php b/tests/fixtures/file-types-metafile/file16-php/es/structured.php new file mode 100644 index 0000000..7a388a4 --- /dev/null +++ b/tests/fixtures/file-types-metafile/file16-php/es/structured.php @@ -0,0 +1,57 @@ + [ + "farewell_message" => "¡Adiós y gracias por usar nuestra aplicación!", + "login_prompt" => "Inicie sesión para continuar.", + "logout_button" => "Cerrar sesión", + "title" => "Mi solicitud", + "welcome_message" => "¡Bienvenido,{user_name}!" + ], + "authentication" => [ + "already_have_account" => "¿Ya tienes una cuenta? Iniciar sesión", + "email_placeholder" => "Introduce tu correo electrónico", + "password_placeholder" => "Introduce tu contraseña", + "password_reset" => "Restablecer la contraseña", + "remember_me" => "Recuérdame", + "sign_up" => "Inscríbase" + ], + "contact" => [ + "about_us" => "Acerca de nosotros", + "us" => "Póngase en contacto con nosotros" + ], + "errors" => [ + "message" => "Algo salió mal. Por favor, inténtelo de nuevo.", + "network_error" => "Comprueba tu conexión a Internet e inténtalo de nuevo." + ], + "feedback" => [ + "prompt" => "¡Cuéntanos lo que piensas de la aplicación!", + "submit_feedback" => "Enviar comentarios" + ], + "gender" => [ + "choice" => [ + "female" => "Es tu amiga.", + "male" => "Es tu amigo.", + "other" => "Son tus amigos." + ] + ], + "messages" => [ + "plural" => [ + "one" => "Tienes un mensaje nuevo", + "other" => "Tienes mensajes {count} nuevos" + ] + ], + "profile" => [ + "edit_profile" => "Editar perfil", + "page_title" => "Tu perfil" + ], + "settings" => [ + "disable_notifications" => "Desactivar las notificaciones", + "enable_notifications" => "Habilitar notificaciones", + "language_select_label" => "Elige tu idioma:", + "notifications_label" => "Notificaciones", + "privacy_policy" => "Política de privacidad", + "terms_of_service" => "Términos de servicio", + "title" => "Ajustes" + ] +]; +?> \ No newline at end of file diff --git a/tests/fixtures/file-types-metafile/file16-php/fr/structured.php b/tests/fixtures/file-types-metafile/file16-php/fr/structured.php new file mode 100644 index 0000000..20f343d --- /dev/null +++ b/tests/fixtures/file-types-metafile/file16-php/fr/structured.php @@ -0,0 +1,57 @@ + [ + "farewell_message" => "Au revoir et merci d'avoir utilisé notre application !", + "login_prompt" => "Veuillez vous connecter pour continuer.", + "logout_button" => "Déconnectez-vous", + "title" => "Ma candidature", + "welcome_message" => "Bienvenue, {user_name} !" + ], + "authentication" => [ + "already_have_account" => "Vous avez déjà un compte ? Se connecter", + "email_placeholder" => "Entrez votre e-mail", + "password_placeholder" => "Entrez votre mot de passe", + "password_reset" => "Réinitialisez votre mot de passe", + "remember_me" => "Souvenez-vous de moi", + "sign_up" => "INSCRIVEZ-VOUS" + ], + "contact" => [ + "about_us" => "À propos de nous", + "us" => "Nous contacter" + ], + "errors" => [ + "message" => "Quelque chose s'est mal passé. Veuillez réessayer.", + "network_error" => "Vérifiez votre connexion Internet et réessayez." + ], + "feedback" => [ + "prompt" => "Dites-nous ce que vous pensez de l'application !", + "submit_feedback" => "Soumettre des commentaires" + ], + "gender" => [ + "choice" => [ + "female" => "C'est ton amie.", + "male" => "C'est ton ami.", + "other" => "Ce sont tes amis." + ] + ], + "messages" => [ + "plural" => [ + "one" => "Vous avez un nouveau message", + "other" => "Vous avez de {count} nouveaux messages" + ] + ], + "profile" => [ + "edit_profile" => "Modifier le profil", + "page_title" => "Votre profil" + ], + "settings" => [ + "disable_notifications" => "Désactiver les notifications", + "enable_notifications" => "Activer les notifications", + "language_select_label" => "Choisissez votre langue :", + "notifications_label" => "Les notifications", + "privacy_policy" => "Politique de confidentialité", + "terms_of_service" => "Conditions générales d'utilisation", + "title" => "Réglages" + ] +]; +?> \ No newline at end of file diff --git a/tests/fixtures/file-types-metafile/file17-pot/en/messages.pot b/tests/fixtures/file-types-metafile/file17-pot/en/messages.pot new file mode 100644 index 0000000..fbf09b0 --- /dev/null +++ b/tests/fixtures/file-types-metafile/file17-pot/en/messages.pot @@ -0,0 +1,99 @@ +msgid "" +msgstr "" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Localazy (https://localazy.com)\n" +"Project-Id-Version: CDN\n" +"Language: en\n" +"Plural-Forms: nplurals=2; plural=(n==1) ? 0 : 1;\n" + +msgid "About Us" +msgstr "About Us" + +msgid "Already have an account? Log In" +msgstr "Already have an account? Log In" + +msgid "Choose your language:" +msgstr "Choose your language:" + +msgid "Contact Us" +msgstr "Contact Us" + +msgid "Disable Notifications" +msgstr "Disable Notifications" + +msgid "Edit Profile" +msgstr "Edit Profile" + +msgid "Enable Notifications" +msgstr "Enable Notifications" + +msgid "Enter your email" +msgstr "Enter your email" + +msgid "Enter your password" +msgstr "Enter your password" + +msgid "Goodbye and thank you for using our app!" +msgstr "Goodbye and thank you for using our app!" + +msgctxt "male" +msgid "He is your friend." +msgstr "He is your friend." + +msgid "Log Out" +msgstr "Log Out" + +msgid "My Application" +msgstr "My Application" + +msgid "Notifications" +msgstr "Notifications" + +msgid "Please check your internet connection and try again." +msgstr "Please check your internet connection and try again." + +msgid "Please log in to continue." +msgstr "Please log in to continue." + +msgid "Privacy Policy" +msgstr "Privacy Policy" + +msgid "Remember Me" +msgstr "Remember Me" + +msgid "Reset your password" +msgstr "Reset your password" + +msgid "Settings" +msgstr "Settings" + +msgctxt "female" +msgid "She is your friend." +msgstr "She is your friend." + +msgid "Sign Up" +msgstr "Sign Up" + +msgid "Something went wrong. Please try again." +msgstr "Something went wrong. Please try again." + +msgid "Submit Feedback" +msgstr "Submit Feedback" + +msgid "Tell us what you think about the app!" +msgstr "Tell us what you think about the app!" + +msgid "Terms of Service" +msgstr "Terms of Service" + +msgctxt "other" +msgid "They are your friend." +msgstr "They are your friend." + +msgid "Welcome, {user_name}!" +msgstr "Welcome, {user_name}!" + +msgid "Your Profile" +msgstr "Your Profile" diff --git a/tests/fixtures/file-types-metafile/file17-pot/es/messages.pot b/tests/fixtures/file-types-metafile/file17-pot/es/messages.pot new file mode 100644 index 0000000..f37a101 --- /dev/null +++ b/tests/fixtures/file-types-metafile/file17-pot/es/messages.pot @@ -0,0 +1,99 @@ +msgid "" +msgstr "" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Localazy (https://localazy.com)\n" +"Project-Id-Version: CDN\n" +"Language: es\n" +"Plural-Forms: nplurals=2; plural=(n==1) ? 0 : 1;\n" + +msgid "About Us" +msgstr "Acerca de nosotros" + +msgid "Already have an account? Log In" +msgstr "¿Ya tienes una cuenta? Iniciar sesión" + +msgid "Choose your language:" +msgstr "Elige tu idioma:" + +msgid "Contact Us" +msgstr "Póngase en contacto con nosotros" + +msgid "Disable Notifications" +msgstr "Desactivar las notificaciones" + +msgid "Edit Profile" +msgstr "Editar perfil" + +msgid "Enable Notifications" +msgstr "Habilitar notificaciones" + +msgid "Enter your email" +msgstr "Introduce tu correo electrónico" + +msgid "Enter your password" +msgstr "Introduce tu contraseña" + +msgid "Goodbye and thank you for using our app!" +msgstr "¡Adiós y gracias por usar nuestra aplicación!" + +msgctxt "male" +msgid "He is your friend." +msgstr "Es tu amigo." + +msgid "Log Out" +msgstr "Cerrar sesión" + +msgid "My Application" +msgstr "Mi solicitud" + +msgid "Notifications" +msgstr "Notificaciones" + +msgid "Please check your internet connection and try again." +msgstr "Comprueba tu conexión a Internet e inténtalo de nuevo." + +msgid "Please log in to continue." +msgstr "Inicie sesión para continuar." + +msgid "Privacy Policy" +msgstr "Política de privacidad" + +msgid "Remember Me" +msgstr "Recuérdame" + +msgid "Reset your password" +msgstr "Restablecer la contraseña" + +msgid "Settings" +msgstr "Ajustes" + +msgctxt "female" +msgid "She is your friend." +msgstr "Es tu amiga." + +msgid "Sign Up" +msgstr "Inscríbase" + +msgid "Something went wrong. Please try again." +msgstr "Algo salió mal. Por favor, inténtelo de nuevo." + +msgid "Submit Feedback" +msgstr "Enviar comentarios" + +msgid "Tell us what you think about the app!" +msgstr "¡Cuéntanos lo que piensas de la aplicación!" + +msgid "Terms of Service" +msgstr "Términos de servicio" + +msgctxt "other" +msgid "They are your friend." +msgstr "Son tus amigos." + +msgid "Welcome, {user_name}!" +msgstr "¡Bienvenido,{user_name}!" + +msgid "Your Profile" +msgstr "Tu perfil" diff --git a/tests/fixtures/file-types-metafile/file17-pot/fr/messages.pot b/tests/fixtures/file-types-metafile/file17-pot/fr/messages.pot new file mode 100644 index 0000000..a4c1ae6 --- /dev/null +++ b/tests/fixtures/file-types-metafile/file17-pot/fr/messages.pot @@ -0,0 +1,99 @@ +msgid "" +msgstr "" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Localazy (https://localazy.com)\n" +"Project-Id-Version: CDN\n" +"Language: fr\n" +"Plural-Forms: nplurals=2; plural=(n==0 || n==1) ? 0 : 1;\n" + +msgid "About Us" +msgstr "À propos de nous" + +msgid "Already have an account? Log In" +msgstr "Vous avez déjà un compte ? Se connecter" + +msgid "Choose your language:" +msgstr "Choisissez votre langue :" + +msgid "Contact Us" +msgstr "Nous contacter" + +msgid "Disable Notifications" +msgstr "Désactiver les notifications" + +msgid "Edit Profile" +msgstr "Modifier le profil" + +msgid "Enable Notifications" +msgstr "Activer les notifications" + +msgid "Enter your email" +msgstr "Entrez votre e-mail" + +msgid "Enter your password" +msgstr "Entrez votre mot de passe" + +msgid "Goodbye and thank you for using our app!" +msgstr "Au revoir et merci d'avoir utilisé notre application !" + +msgctxt "male" +msgid "He is your friend." +msgstr "C'est ton ami." + +msgid "Log Out" +msgstr "Déconnectez-vous" + +msgid "My Application" +msgstr "Ma candidature" + +msgid "Notifications" +msgstr "Les notifications" + +msgid "Please check your internet connection and try again." +msgstr "Vérifiez votre connexion Internet et réessayez." + +msgid "Please log in to continue." +msgstr "Veuillez vous connecter pour continuer." + +msgid "Privacy Policy" +msgstr "Politique de confidentialité" + +msgid "Remember Me" +msgstr "Souvenez-vous de moi" + +msgid "Reset your password" +msgstr "Réinitialisez votre mot de passe" + +msgid "Settings" +msgstr "Réglages" + +msgctxt "female" +msgid "She is your friend." +msgstr "C'est ton amie." + +msgid "Sign Up" +msgstr "INSCRIVEZ-VOUS" + +msgid "Something went wrong. Please try again." +msgstr "Quelque chose s'est mal passé. Veuillez réessayer." + +msgid "Submit Feedback" +msgstr "Soumettre des commentaires" + +msgid "Tell us what you think about the app!" +msgstr "Dites-nous ce que vous pensez de l'application !" + +msgid "Terms of Service" +msgstr "Conditions générales d'utilisation" + +msgctxt "other" +msgid "They are your friend." +msgstr "Ce sont tes amis." + +msgid "Welcome, {user_name}!" +msgstr "Bienvenue, {user_name} !" + +msgid "Your Profile" +msgstr "Votre profil" diff --git a/tests/fixtures/file-types-metafile/file18-po/en/messages.po b/tests/fixtures/file-types-metafile/file18-po/en/messages.po new file mode 100644 index 0000000..c616552 --- /dev/null +++ b/tests/fixtures/file-types-metafile/file18-po/en/messages.po @@ -0,0 +1,101 @@ +msgid "" +msgstr "" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Localazy (https://localazy.com)\n" +"Project-Id-Version: CDN\n" +"Language: en\n" +"Plural-Forms: nplurals=2; plural=(n==1) ? 0 : 1;\n" + +msgid "aboutUs" +msgstr "aboutUs" + +msgid "alreadyHaveAccount" +msgstr "alreadyHaveAccount" + +msgid "appTitle" +msgstr "appTitle" + +msgid "contactUs" +msgstr "contactUs" + +msgid "disableNotifications" +msgstr "disableNotifications" + +msgid "editProfile" +msgstr "editProfile" + +msgid "emailPlaceholder" +msgstr "emailPlaceholder" + +msgid "enableNotifications" +msgstr "enableNotifications" + +msgid "errorMessage" +msgstr "errorMessage" + +msgid "farewellMessage" +msgstr "farewellMessage" + +msgid "feedbackPrompt" +msgstr "feedbackPrompt" + +msgctxt "female" +msgid "genderChoice" +msgstr "genderChoice" + +msgctxt "male" +msgid "genderChoice" +msgstr "genderChoice" + +msgctxt "other" +msgid "genderChoice" +msgstr "genderChoice" + +msgid "languageSelectLabel" +msgstr "languageSelectLabel" + +msgid "loginPrompt" +msgstr "loginPrompt" + +msgid "logoutButton" +msgstr "logoutButton" + +msgid "networkError" +msgstr "networkError" + +msgid "notificationsLabel" +msgstr "notificationsLabel" + +msgid "pluralMessage" +msgid_plural "pluralMessages" +msgstr[0] "You have no new messages" +msgstr[1] "You have one new message" + +msgid "passwordPlaceholder" +msgstr "passwordPlaceholder" + +msgid "privacyPolicy" +msgstr "privacyPolicy" + +msgid "profilePageTitle" +msgstr "profilePageTitle" + +msgid "rememberMe" +msgstr "rememberMe" + +msgid "settings" +msgstr "settings" + +msgid "signUp" +msgstr "signUp" + +msgid "submitFeedback" +msgstr "submitFeedback" + +msgid "termsOfService" +msgstr "termsOfService" + +msgid "welcomeMessage" +msgstr "welcomeMessage" diff --git a/tests/fixtures/file-types-metafile/file18-po/es/messages.po b/tests/fixtures/file-types-metafile/file18-po/es/messages.po new file mode 100644 index 0000000..1d01448 --- /dev/null +++ b/tests/fixtures/file-types-metafile/file18-po/es/messages.po @@ -0,0 +1,101 @@ +msgid "" +msgstr "" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Localazy (https://localazy.com)\n" +"Project-Id-Version: CDN\n" +"Language: es\n" +"Plural-Forms: nplurals=2; plural=(n==1) ? 0 : 1;\n" + +msgid "aboutUs" +msgstr "Acerca de nosotros" + +msgid "alreadyHaveAccount" +msgstr "Ya tengo una cuenta" + +msgid "appTitle" +msgstr "Título de la aplicación" + +msgid "contactUs" +msgstr "CONTÁCTANOS" + +msgid "disableNotifications" +msgstr "Desactivar las notificaciones" + +msgid "editProfile" +msgstr "Editar perfil" + +msgid "emailPlaceholder" +msgstr "Marcador de posición de correo electrónico" + +msgid "enableNotifications" +msgstr "Habilitar notificaciones" + +msgid "errorMessage" +msgstr "Mensaje de error" + +msgid "farewellMessage" +msgstr "Mensaje de despedida" + +msgid "feedbackPrompt" +msgstr "Mensaje de comentarios" + +msgctxt "female" +msgid "genderChoice" +msgstr "Elección de género" + +msgctxt "male" +msgid "genderChoice" +msgstr "Elección de género" + +msgctxt "other" +msgid "genderChoice" +msgstr "Elección de género" + +msgid "languageSelectLabel" +msgstr "Etiqueta de selección de idioma" + +msgid "loginPrompt" +msgstr "Mensaje de inicio de sesión" + +msgid "logoutButton" +msgstr "Botón de cierre de sesión" + +msgid "networkError" +msgstr "Error de red" + +msgid "notificationsLabel" +msgstr "Etiqueta de notificaciones" + +msgid "pluralMessage" +msgid_plural "pluralMessages" +msgstr[0] "No tienes mensajes nuevos" +msgstr[1] "Tienes un mensaje nuevo" + +msgid "passwordPlaceholder" +msgstr "Marcador de contraseña" + +msgid "privacyPolicy" +msgstr "Política de privacidad" + +msgid "profilePageTitle" +msgstr "Título de la página de perfil" + +msgid "rememberMe" +msgstr "Recuérdame" + +msgid "settings" +msgstr "Ajustes" + +msgid "signUp" +msgstr "Inscríbase" + +msgid "submitFeedback" +msgstr "Enviar comentarios" + +msgid "termsOfService" +msgstr "Términos de servicio" + +msgid "welcomeMessage" +msgstr "Mensaje de bienvenida" diff --git a/tests/fixtures/file-types-metafile/file18-po/fr/messages.po b/tests/fixtures/file-types-metafile/file18-po/fr/messages.po new file mode 100644 index 0000000..4ebe82e --- /dev/null +++ b/tests/fixtures/file-types-metafile/file18-po/fr/messages.po @@ -0,0 +1,101 @@ +msgid "" +msgstr "" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Localazy (https://localazy.com)\n" +"Project-Id-Version: CDN\n" +"Language: fr\n" +"Plural-Forms: nplurals=2; plural=(n==0 || n==1) ? 0 : 1;\n" + +msgid "aboutUs" +msgstr "À propos de nous" + +msgid "alreadyHaveAccount" +msgstr "Vous avez déjà un compte" + +msgid "appTitle" +msgstr "Titre de l'application" + +msgid "contactUs" +msgstr "Nous contacter" + +msgid "disableNotifications" +msgstr "Désactiver les notifications" + +msgid "editProfile" +msgstr "Modifier le profil" + +msgid "emailPlaceholder" +msgstr "Espace réservé aux e-mails" + +msgid "enableNotifications" +msgstr "Activer les notifications" + +msgid "errorMessage" +msgstr "Message d'erreur" + +msgid "farewellMessage" +msgstr "Message d'adieu" + +msgid "feedbackPrompt" +msgstr "Prompte de commentaires" + +msgctxt "female" +msgid "genderChoice" +msgstr "Choix du sexe" + +msgctxt "male" +msgid "genderChoice" +msgstr "Choix du sexe" + +msgctxt "other" +msgid "genderChoice" +msgstr "Choix du sexe" + +msgid "languageSelectLabel" +msgstr "Libellé de sélection de la langue" + +msgid "loginPrompt" +msgstr "Prompte de connexion" + +msgid "logoutButton" +msgstr "Bouton de déconnexion" + +msgid "networkError" +msgstr "Erreur réseau" + +msgid "notificationsLabel" +msgstr "Étiquette de notifications" + +msgid "pluralMessage" +msgid_plural "pluralMessages" +msgstr[0] "Vous n'avez aucun nouveau message" +msgstr[1] "Vous avez un nouveau message" + +msgid "passwordPlaceholder" +msgstr "Espace réservé au mot de passe" + +msgid "privacyPolicy" +msgstr "Politique de confidentialité" + +msgid "profilePageTitle" +msgstr "Titre de la page de profil" + +msgid "rememberMe" +msgstr "Souvenez-vous de moi" + +msgid "settings" +msgstr "Réglages" + +msgid "signUp" +msgstr "S'inscrire" + +msgid "submitFeedback" +msgstr "Soumettre des commentaires" + +msgid "termsOfService" +msgstr "Conditions générales d'utilisation" + +msgid "welcomeMessage" +msgstr "Message de bienvenue" diff --git a/tests/fixtures/file-types-metafile/index.ts b/tests/fixtures/file-types-metafile/index.ts new file mode 100644 index 0000000..79a95e4 --- /dev/null +++ b/tests/fixtures/file-types-metafile/index.ts @@ -0,0 +1,314 @@ +import axiosMock from '@tests/mocks/axios-mock'; +import fileTypesMetafile from '@tests/fixtures/file-types-metafile/metafile.json'; +import { resolve } from 'node:path'; +import { readFileSync } from 'node:fs'; + +const file01En: object = JSON.parse(readFileSync(resolve(__dirname, 'file01-json/en/plain.json')).toString()) as object; +const file01Es: object = JSON.parse(readFileSync(resolve(__dirname, 'file01-json/es/plain.json')).toString()) as object; +const file01Fr: object = JSON.parse(readFileSync(resolve(__dirname, 'file01-json/fr/plain.json')).toString()) as object; +const file02En: object = JSON.parse( + readFileSync(resolve(__dirname, 'file02-json5/en/texts.json5')).toString(), +) as object; +const file02Es: object = JSON.parse( + readFileSync(resolve(__dirname, 'file02-json5/es/texts.json5')).toString(), +) as object; +const file02Fr: object = JSON.parse( + readFileSync(resolve(__dirname, 'file02-json5/fr/texts.json5')).toString(), +) as object; +const file03En: string = readFileSync(resolve(__dirname, 'file03-neon/en/plain.neon')).toString(); +const file03Es: string = readFileSync(resolve(__dirname, 'file03-neon/es/plain.neon')).toString(); +const file03Fr: string = readFileSync(resolve(__dirname, 'file03-neon/fr/plain.neon')).toString(); +const file04En: string = readFileSync(resolve(__dirname, 'file04-yaml/en/plain.yaml')).toString(); +const file04Es: string = readFileSync(resolve(__dirname, 'file04-yaml/es/plain.yaml')).toString(); +const file04Fr: string = readFileSync(resolve(__dirname, 'file04-yaml/fr/plain.yaml')).toString(); +const file05En: string = readFileSync(resolve(__dirname, 'file05-xml/en/resources.xml')).toString(); +const file05Es: string = readFileSync(resolve(__dirname, 'file05-xml/es/resources.xml')).toString(); +const file05Fr: string = readFileSync(resolve(__dirname, 'file05-xml/fr/resources.xml')).toString(); +const file06En: string = readFileSync(resolve(__dirname, 'file06-srt/en/subtitles.srt')).toString(); +const file06Es: string = readFileSync(resolve(__dirname, 'file06-srt/es/subtitles.srt')).toString(); +const file06Fr: string = readFileSync(resolve(__dirname, 'file06-srt/fr/subtitles.srt')).toString(); +const file07En: string = readFileSync(resolve(__dirname, 'file07-ini/en/plain.ini')).toString(); +const file07Es: string = readFileSync(resolve(__dirname, 'file07-ini/es/plain.ini')).toString(); +const file07Fr: string = readFileSync(resolve(__dirname, 'file07-ini/fr/plain.ini')).toString(); +const file08En: string = readFileSync(resolve(__dirname, 'file08-strings/en/Localizable.strings')).toString(); +const file08Es: string = readFileSync(resolve(__dirname, 'file08-strings/es/Localizable.strings')).toString(); +const file08Fr: string = readFileSync(resolve(__dirname, 'file08-strings/fr/Localizable.strings')).toString(); +const file09En: string = readFileSync(resolve(__dirname, 'file09-toml/en/file.toml')).toString(); +const file09Es: string = readFileSync(resolve(__dirname, 'file09-toml/es/file.toml')).toString(); +const file09Fr: string = readFileSync(resolve(__dirname, 'file09-toml/fr/file.toml')).toString(); +const file10En: string = readFileSync(resolve(__dirname, 'file10-resx/en/resources.resx')).toString(); +const file10Es: string = readFileSync(resolve(__dirname, 'file10-resx/es/resources.resx')).toString(); +const file10Fr: string = readFileSync(resolve(__dirname, 'file10-resx/fr/resources.resx')).toString(); +const file11En: string = readFileSync(resolve(__dirname, 'file11-xliff/en/translate.xliff')).toString(); +const file11Es: string = readFileSync(resolve(__dirname, 'file11-xliff/es/translate.xliff')).toString(); +const file11Fr: string = readFileSync(resolve(__dirname, 'file11-xliff/fr/translate.xliff')).toString(); +const file12En: string = readFileSync(resolve(__dirname, 'file12-properties/en/local.properties')).toString(); +const file12Es: string = readFileSync(resolve(__dirname, 'file12-properties/es/local.properties')).toString(); +const file12Fr: string = readFileSync(resolve(__dirname, 'file12-properties/fr/local.properties')).toString(); +const file13En: string = readFileSync(resolve(__dirname, 'file13-csv/en/export.csv')).toString(); +const file13Es: string = readFileSync(resolve(__dirname, 'file13-csv/es/export.csv')).toString(); +const file13Fr: string = readFileSync(resolve(__dirname, 'file13-csv/fr/export.csv')).toString(); +const file14En: string = readFileSync(resolve(__dirname, 'file14-ts/en/resources.ts')).toString(); +const file14Es: string = readFileSync(resolve(__dirname, 'file14-ts/es/resources.ts')).toString(); +const file14Fr: string = readFileSync(resolve(__dirname, 'file14-ts/fr/resources.ts')).toString(); +const file15En: string = readFileSync(resolve(__dirname, 'file15-js/en/default.js')).toString(); +const file15Es: string = readFileSync(resolve(__dirname, 'file15-js/es/default.js')).toString(); +const file15Fr: string = readFileSync(resolve(__dirname, 'file15-js/fr/default.js')).toString(); +const file16En: string = readFileSync(resolve(__dirname, 'file16-php/en/structured.php')).toString(); +const file16Es: string = readFileSync(resolve(__dirname, 'file16-php/es/structured.php')).toString(); +const file16Fr: string = readFileSync(resolve(__dirname, 'file16-php/fr/structured.php')).toString(); +const file17En: string = readFileSync(resolve(__dirname, 'file17-pot/en/messages.pot')).toString(); +const file17Es: string = readFileSync(resolve(__dirname, 'file17-pot/es/messages.pot')).toString(); +const file17Fr: string = readFileSync(resolve(__dirname, 'file17-pot/fr/messages.pot')).toString(); +const file18En: string = readFileSync(resolve(__dirname, 'file18-po/en/messages.po')).toString(); +const file18Es: string = readFileSync(resolve(__dirname, 'file18-po/es/messages.po')).toString(); +const file18Fr: string = readFileSync(resolve(__dirname, 'file18-po/fr/messages.po')).toString(); + +const baseUrl: string = 'https://delivery.localazy.com'; + +export const url = { + metafile: `${baseUrl}/file-types-metafile/_e0.v2.json`, + file01: { + en: `${baseUrl}/file-types-metafile/_e0/file01-json/en/plain.json`, + es: `${baseUrl}/file-types-metafile/_e0/file01-json/es/plain.json`, + fr: `${baseUrl}/file-types-metafile/_e0/file01-json/fr/plain.json`, + }, + file02: { + en: `${baseUrl}/file-types-metafile/_e0/file02-json5/en/texts.json5`, + es: `${baseUrl}/file-types-metafile/_e0/file02-json5/es/texts.json5`, + fr: `${baseUrl}/file-types-metafile/_e0/file02-json5/fr/texts.json5`, + }, + file03: { + en: `${baseUrl}/file-types-metafile/_e0/file03-neon/en/plain.neon`, + es: `${baseUrl}/file-types-metafile/_e0/file03-neon/es/plain.neon`, + fr: `${baseUrl}/file-types-metafile/_e0/file03-neon/fr/plain.neon`, + }, + file04: { + en: `${baseUrl}/file-types-metafile/_e0/file04-yaml/en/plain.yaml`, + es: `${baseUrl}/file-types-metafile/_e0/file04-yaml/es/plain.yaml`, + fr: `${baseUrl}/file-types-metafile/_e0/file04-yaml/fr/plain.yaml`, + }, + file05: { + en: `${baseUrl}/file-types-metafile/_e0/file05-xml/en/resources.xml`, + es: `${baseUrl}/file-types-metafile/_e0/file05-xml/es/resources.xml`, + fr: `${baseUrl}/file-types-metafile/_e0/file05-xml/fr/resources.xml`, + }, + file06: { + en: `${baseUrl}/file-types-metafile/_e0/file06-srt/en/subtitles.srt`, + es: `${baseUrl}/file-types-metafile/_e0/file06-srt/es/subtitles.srt`, + fr: `${baseUrl}/file-types-metafile/_e0/file06-srt/fr/subtitles.srt`, + }, + file07: { + en: `${baseUrl}/file-types-metafile/_e0/file07-ini/en/plain.ini`, + es: `${baseUrl}/file-types-metafile/_e0/file07-ini/es/plain.ini`, + fr: `${baseUrl}/file-types-metafile/_e0/file07-ini/fr/plain.ini`, + }, + file08: { + en: `${baseUrl}/file-types-metafile/_e0/file08-strings/en/Localizable.strings`, + es: `${baseUrl}/file-types-metafile/_e0/file08-strings/es/Localizable.strings`, + fr: `${baseUrl}/file-types-metafile/_e0/file08-strings/fr/Localizable.strings`, + }, + file09: { + en: `${baseUrl}/file-types-metafile/_e0/file09-toml/en/file.toml`, + es: `${baseUrl}/file-types-metafile/_e0/file09-toml/es/file.toml`, + fr: `${baseUrl}/file-types-metafile/_e0/file09-toml/fr/file.toml`, + }, + file10: { + en: `${baseUrl}/file-types-metafile/_e0/file10-resx/en/resources.resx`, + es: `${baseUrl}/file-types-metafile/_e0/file10-resx/es/resources.resx`, + fr: `${baseUrl}/file-types-metafile/_e0/file10-resx/fr/resources.resx`, + }, + file11: { + en: `${baseUrl}/file-types-metafile/_e0/file11-xliff/en/translate.xliff`, + es: `${baseUrl}/file-types-metafile/_e0/file11-xliff/es/translate.xliff`, + fr: `${baseUrl}/file-types-metafile/_e0/file11-xliff/fr/translate.xliff`, + }, + file12: { + en: `${baseUrl}/file-types-metafile/_e0/file12-properties/en/local.properties`, + es: `${baseUrl}/file-types-metafile/_e0/file12-properties/es/local.properties`, + fr: `${baseUrl}/file-types-metafile/_e0/file12-properties/fr/local.properties`, + }, + file13: { + en: `${baseUrl}/file-types-metafile/_e0/file13-csv/en/export.csv`, + es: `${baseUrl}/file-types-metafile/_e0/file13-csv/es/export.csv`, + fr: `${baseUrl}/file-types-metafile/_e0/file13-csv/fr/export.csv`, + }, + file14: { + en: `${baseUrl}/file-types-metafile/_e0/file14-ts/en/resources.ts`, + es: `${baseUrl}/file-types-metafile/_e0/file14-ts/es/resources.ts`, + fr: `${baseUrl}/file-types-metafile/_e0/file14-ts/fr/resources.ts`, + }, + file15: { + en: `${baseUrl}/file-types-metafile/_e0/file15-js/en/default.js`, + es: `${baseUrl}/file-types-metafile/_e0/file15-js/es/default.js`, + fr: `${baseUrl}/file-types-metafile/_e0/file15-js/fr/default.js`, + }, + file16: { + en: `${baseUrl}/file-types-metafile/_e0/file16-php/en/structured.php`, + es: `${baseUrl}/file-types-metafile/_e0/file16-php/es/structured.php`, + fr: `${baseUrl}/file-types-metafile/_e0/file16-php/fr/structured.php`, + }, + file17: { + en: `${baseUrl}/file-types-metafile/_e0/file17-pot/en/messages.pot`, + es: `${baseUrl}/file-types-metafile/_e0/file17-pot/es/messages.pot`, + fr: `${baseUrl}/file-types-metafile/_e0/file17-pot/fr/messages.pot`, + }, + file18: { + en: `${baseUrl}/file-types-metafile/_e0/file18-po/en/messages.po`, + es: `${baseUrl}/file-types-metafile/_e0/file18-po/es/messages.po`, + fr: `${baseUrl}/file-types-metafile/_e0/file18-po/fr/messages.po`, + }, +}; + +export const serverResponses = { + metafile: fileTypesMetafile, + file01: { + en: file01En, + es: file01Es, + fr: file01Fr, + }, + file02: { + en: file02En, + es: file02Es, + fr: file02Fr, + }, + file03: { + en: file03En, + es: file03Es, + fr: file03Fr, + }, + file04: { + en: file04En, + es: file04Es, + fr: file04Fr, + }, + file05: { + en: file05En, + es: file05Es, + fr: file05Fr, + }, + file06: { + en: file06En, + es: file06Es, + fr: file06Fr, + }, + file07: { + en: file07En, + es: file07Es, + fr: file07Fr, + }, + file08: { + en: file08En, + es: file08Es, + fr: file08Fr, + }, + file09: { + en: file09En, + es: file09Es, + fr: file09Fr, + }, + file10: { + en: file10En, + es: file10Es, + fr: file10Fr, + }, + file11: { + en: file11En, + es: file11Es, + fr: file11Fr, + }, + file12: { + en: file12En, + es: file12Es, + fr: file12Fr, + }, + file13: { + en: file13En, + es: file13Es, + fr: file13Fr, + }, + file14: { + en: file14En, + es: file14Es, + fr: file14Fr, + }, + file15: { + en: file15En, + es: file15Es, + fr: file15Fr, + }, + file16: { + en: file16En, + es: file16Es, + fr: file16Fr, + }, + file17: { + en: file17En, + es: file17Es, + fr: file17Fr, + }, + file18: { + en: file18En, + es: file18Es, + fr: file18Fr, + }, +}; + +export const mockAxios = (): void => { + axiosMock.reset(); + axiosMock.onGet(url.metafile).reply(200, serverResponses.metafile); + axiosMock.onGet(url.file01.en).reply(200, serverResponses.file01.en); + axiosMock.onGet(url.file01.es).reply(200, serverResponses.file01.es); + axiosMock.onGet(url.file01.fr).reply(200, serverResponses.file01.fr); + axiosMock.onGet(url.file02.en).reply(200, serverResponses.file02.en); + axiosMock.onGet(url.file02.es).reply(200, serverResponses.file02.es); + axiosMock.onGet(url.file02.fr).reply(200, serverResponses.file02.fr); + axiosMock.onGet(url.file03.en).reply(200, serverResponses.file03.en); + axiosMock.onGet(url.file03.es).reply(200, serverResponses.file03.es); + axiosMock.onGet(url.file03.fr).reply(200, serverResponses.file03.fr); + axiosMock.onGet(url.file04.en).reply(200, serverResponses.file04.en); + axiosMock.onGet(url.file04.es).reply(200, serverResponses.file04.es); + axiosMock.onGet(url.file04.fr).reply(200, serverResponses.file04.fr); + axiosMock.onGet(url.file05.en).reply(200, serverResponses.file05.en); + axiosMock.onGet(url.file05.es).reply(200, serverResponses.file05.es); + axiosMock.onGet(url.file05.fr).reply(200, serverResponses.file05.fr); + axiosMock.onGet(url.file06.en).reply(200, serverResponses.file06.en); + axiosMock.onGet(url.file06.es).reply(200, serverResponses.file06.es); + axiosMock.onGet(url.file06.fr).reply(200, serverResponses.file06.fr); + axiosMock.onGet(url.file07.en).reply(200, serverResponses.file07.en); + axiosMock.onGet(url.file07.es).reply(200, serverResponses.file07.es); + axiosMock.onGet(url.file07.fr).reply(200, serverResponses.file07.fr); + axiosMock.onGet(url.file08.en).reply(200, serverResponses.file08.en); + axiosMock.onGet(url.file08.es).reply(200, serverResponses.file08.es); + axiosMock.onGet(url.file08.fr).reply(200, serverResponses.file08.fr); + axiosMock.onGet(url.file09.en).reply(200, serverResponses.file09.en); + axiosMock.onGet(url.file09.es).reply(200, serverResponses.file09.es); + axiosMock.onGet(url.file09.fr).reply(200, serverResponses.file09.fr); + axiosMock.onGet(url.file10.en).reply(200, serverResponses.file10.en); + axiosMock.onGet(url.file10.es).reply(200, serverResponses.file10.es); + axiosMock.onGet(url.file10.fr).reply(200, serverResponses.file10.fr); + axiosMock.onGet(url.file11.en).reply(200, serverResponses.file11.en); + axiosMock.onGet(url.file11.es).reply(200, serverResponses.file11.es); + axiosMock.onGet(url.file11.fr).reply(200, serverResponses.file11.fr); + axiosMock.onGet(url.file12.en).reply(200, serverResponses.file12.en); + axiosMock.onGet(url.file12.es).reply(200, serverResponses.file12.es); + axiosMock.onGet(url.file12.fr).reply(200, serverResponses.file12.fr); + axiosMock.onGet(url.file13.en).reply(200, serverResponses.file13.en); + axiosMock.onGet(url.file13.es).reply(200, serverResponses.file13.es); + axiosMock.onGet(url.file13.fr).reply(200, serverResponses.file13.fr); + axiosMock.onGet(url.file14.en).reply(200, serverResponses.file14.en); + axiosMock.onGet(url.file14.es).reply(200, serverResponses.file14.es); + axiosMock.onGet(url.file14.fr).reply(200, serverResponses.file14.fr); + axiosMock.onGet(url.file15.en).reply(200, serverResponses.file15.en); + axiosMock.onGet(url.file15.es).reply(200, serverResponses.file15.es); + axiosMock.onGet(url.file15.fr).reply(200, serverResponses.file15.fr); + axiosMock.onGet(url.file16.en).reply(200, serverResponses.file16.en); + axiosMock.onGet(url.file16.es).reply(200, serverResponses.file16.es); + axiosMock.onGet(url.file16.fr).reply(200, serverResponses.file16.fr); + axiosMock.onGet(url.file17.en).reply(200, serverResponses.file17.en); + axiosMock.onGet(url.file17.es).reply(200, serverResponses.file17.es); + axiosMock.onGet(url.file17.fr).reply(200, serverResponses.file17.fr); + axiosMock.onGet(url.file18.en).reply(200, serverResponses.file18.en); + axiosMock.onGet(url.file18.es).reply(200, serverResponses.file18.es); + axiosMock.onGet(url.file18.fr).reply(200, serverResponses.file18.fr); +}; diff --git a/tests/fixtures/file-types-metafile/metafile.json b/tests/fixtures/file-types-metafile/metafile.json new file mode 100644 index 0000000..b7aafbd --- /dev/null +++ b/tests/fixtures/file-types-metafile/metafile.json @@ -0,0 +1,745 @@ +{ + "projectUrl": "https://localazy.com/p/cdn", + "baseLocale": "en", + "timestamp": 1700000000, + "files": { + "file01-json": { + "file": "plain.json", + "path": "", + "library": "", + "module": "", + "buildType": "", + "timestamp": 1700000000, + "productFlavors": [ ], + "locales": [ + { + "language": "en", + "region": "", + "script": "", + "isRtl": false, + "name": "English", + "localizedName": "English", + "uri": "/file-types-metafile/_e0/file01-json/en/plain.json", + "timestamp": 1700000000 + }, + { + "language": "es", + "region": "", + "script": "", + "isRtl": false, + "name": "Spanish", + "localizedName": "Español", + "uri": "/file-types-metafile/_e0/file01-json/es/plain.json", + "timestamp": 1700000000 + }, + { + "language": "fr", + "region": "", + "script": "", + "isRtl": false, + "name": "French", + "localizedName": "Français", + "uri": "/file-types-metafile/_e0/file01-json/fr/plain.json", + "timestamp": 1700000000 + } + ] + }, + "file02-json5": { + "file": "texts.json5", + "path": "", + "library": "", + "module": "", + "buildType": "", + "timestamp": 1700000000, + "productFlavors": [ ], + "locales": [ + { + "language": "en", + "region": "", + "script": "", + "isRtl": false, + "name": "English", + "localizedName": "English", + "uri": "/file-types-metafile/_e0/file02-json5/en/texts.json5", + "timestamp": 1700000000 + }, + { + "language": "es", + "region": "", + "script": "", + "isRtl": false, + "name": "Spanish", + "localizedName": "Español", + "uri": "/file-types-metafile/_e0/file02-json5/es/texts.json5", + "timestamp": 1700000000 + }, + { + "language": "fr", + "region": "", + "script": "", + "isRtl": false, + "name": "French", + "localizedName": "Français", + "uri": "/file-types-metafile/_e0/file02-json5/fr/texts.json5", + "timestamp": 1700000000 + } + ] + }, + "file03-neon": { + "file": "plain.neon", + "path": "", + "library": "", + "module": "", + "buildType": "", + "timestamp": 1700000000, + "productFlavors": [ ], + "locales": [ + { + "language": "en", + "region": "", + "script": "", + "isRtl": false, + "name": "English", + "localizedName": "English", + "uri": "/file-types-metafile/_e0/file03-neon/en/plain.neon", + "timestamp": 1700000000 + }, + { + "language": "es", + "region": "", + "script": "", + "isRtl": false, + "name": "Spanish", + "localizedName": "Español", + "uri": "/file-types-metafile/_e0/file03-neon/es/plain.neon", + "timestamp": 1700000000 + }, + { + "language": "fr", + "region": "", + "script": "", + "isRtl": false, + "name": "French", + "localizedName": "Français", + "uri": "/file-types-metafile/_e0/file03-neon/fr/plain.neon", + "timestamp": 1700000000 + } + ] + }, + "file04-yaml": { + "file": "plain.yaml", + "path": "", + "library": "", + "module": "", + "buildType": "", + "timestamp": 1700000000, + "productFlavors": [ ], + "locales": [ + { + "language": "en", + "region": "", + "script": "", + "isRtl": false, + "name": "English", + "localizedName": "English", + "uri": "/file-types-metafile/_e0/file04-yaml/en/plain.yaml", + "timestamp": 1700000000 + }, + { + "language": "es", + "region": "", + "script": "", + "isRtl": false, + "name": "Spanish", + "localizedName": "Español", + "uri": "/file-types-metafile/_e0/file04-yaml/es/plain.yaml", + "timestamp": 1700000000 + }, + { + "language": "fr", + "region": "", + "script": "", + "isRtl": false, + "name": "French", + "localizedName": "Français", + "uri": "/file-types-metafile/_e0/file04-yaml/fr/plain.yaml", + "timestamp": 1700000000 + } + ] + }, + "file05-xml": { + "file": "resources.xml", + "path": "", + "library": "", + "module": "", + "buildType": "", + "timestamp": 1700000000, + "productFlavors": [ ], + "locales": [ + { + "language": "en", + "region": "", + "script": "", + "isRtl": false, + "name": "English", + "localizedName": "English", + "uri": "/file-types-metafile/_e0/file05-xml/en/resources.xml", + "timestamp": 1700000000 + }, + { + "language": "es", + "region": "", + "script": "", + "isRtl": false, + "name": "Spanish", + "localizedName": "Español", + "uri": "/file-types-metafile/_e0/file05-xml/es/resources.xml", + "timestamp": 1700000000 + }, + { + "language": "fr", + "region": "", + "script": "", + "isRtl": false, + "name": "French", + "localizedName": "Français", + "uri": "/file-types-metafile/_e0/file05-xml/fr/resources.xml", + "timestamp": 1700000000 + } + ] + }, + "file06-srt": { + "file": "subtitles.srt", + "path": "", + "library": "", + "module": "", + "buildType": "", + "timestamp": 1700000000, + "productFlavors": [ ], + "locales": [ + { + "language": "en", + "region": "", + "script": "", + "isRtl": false, + "name": "English", + "localizedName": "English", + "uri": "/file-types-metafile/_e0/file06-srt/en/subtitles.srt", + "timestamp": 1700000000 + }, + { + "language": "es", + "region": "", + "script": "", + "isRtl": false, + "name": "Spanish", + "localizedName": "Español", + "uri": "/file-types-metafile/_e0/file06-srt/es/subtitles.srt", + "timestamp": 1700000000 + }, + { + "language": "fr", + "region": "", + "script": "", + "isRtl": false, + "name": "French", + "localizedName": "Français", + "uri": "/file-types-metafile/_e0/file06-srt/fr/subtitles.srt", + "timestamp": 1700000000 + } + ] + }, + "file07-ini": { + "file": "plain.ini", + "path": "", + "library": "", + "module": "", + "buildType": "", + "timestamp": 1700000000, + "productFlavors": [ ], + "locales": [ + { + "language": "en", + "region": "", + "script": "", + "isRtl": false, + "name": "English", + "localizedName": "English", + "uri": "/file-types-metafile/_e0/file07-ini/en/plain.ini", + "timestamp": 1700000000 + }, + { + "language": "es", + "region": "", + "script": "", + "isRtl": false, + "name": "Spanish", + "localizedName": "Español", + "uri": "/file-types-metafile/_e0/file07-ini/es/plain.ini", + "timestamp": 1700000000 + }, + { + "language": "fr", + "region": "", + "script": "", + "isRtl": false, + "name": "French", + "localizedName": "Français", + "uri": "/file-types-metafile/_e0/file07-ini/fr/plain.ini", + "timestamp": 1700000000 + } + ] + }, + "file08-strings": { + "file": "Localizable.strings", + "path": "", + "library": "", + "module": "", + "buildType": "", + "timestamp": 1700000000, + "productFlavors": [ ], + "locales": [ + { + "language": "en", + "region": "", + "script": "", + "isRtl": false, + "name": "English", + "localizedName": "English", + "uri": "/file-types-metafile/_e0/file08-strings/en/Localizable.strings", + "timestamp": 1700000000 + }, + { + "language": "es", + "region": "", + "script": "", + "isRtl": false, + "name": "Spanish", + "localizedName": "Español", + "uri": "/file-types-metafile/_e0/file08-strings/es/Localizable.strings", + "timestamp": 1700000000 + }, + { + "language": "fr", + "region": "", + "script": "", + "isRtl": false, + "name": "French", + "localizedName": "Français", + "uri": "/file-types-metafile/_e0/file08-strings/fr/Localizable.strings", + "timestamp": 1700000000 + } + ] + }, + "file09-toml": { + "file": "file.toml", + "path": "", + "library": "", + "module": "", + "buildType": "", + "timestamp": 1700000000, + "productFlavors": [ ], + "locales": [ + { + "language": "en", + "region": "", + "script": "", + "isRtl": false, + "name": "English", + "localizedName": "English", + "uri": "/file-types-metafile/_e0/file09-toml/en/file.toml", + "timestamp": 1700000000 + }, + { + "language": "es", + "region": "", + "script": "", + "isRtl": false, + "name": "Spanish", + "localizedName": "Español", + "uri": "/file-types-metafile/_e0/file09-toml/es/file.toml", + "timestamp": 1700000000 + }, + { + "language": "fr", + "region": "", + "script": "", + "isRtl": false, + "name": "French", + "localizedName": "Français", + "uri": "/file-types-metafile/_e0/file09-toml/fr/file.toml", + "timestamp": 1700000000 + } + ] + }, + "file10-resx": { + "file": "resources.resx", + "path": "", + "library": "", + "module": "", + "buildType": "", + "timestamp": 1700000000, + "productFlavors": [ ], + "locales": [ + { + "language": "en", + "region": "", + "script": "", + "isRtl": false, + "name": "English", + "localizedName": "English", + "uri": "/file-types-metafile/_e0/file10-resx/en/resources.resx", + "timestamp": 1700000000 + }, + { + "language": "es", + "region": "", + "script": "", + "isRtl": false, + "name": "Spanish", + "localizedName": "Español", + "uri": "/file-types-metafile/_e0/file10-resx/es/resources.resx", + "timestamp": 1700000000 + }, + { + "language": "fr", + "region": "", + "script": "", + "isRtl": false, + "name": "French", + "localizedName": "Français", + "uri": "/file-types-metafile/_e0/file10-resx/fr/resources.resx", + "timestamp": 1700000000 + } + ] + }, + "file11-xliff": { + "file": "translate.xliff", + "path": "", + "library": "", + "module": "", + "buildType": "", + "timestamp": 1700000000, + "productFlavors": [ ], + "locales": [ + { + "language": "en", + "region": "", + "script": "", + "isRtl": false, + "name": "English", + "localizedName": "English", + "uri": "/file-types-metafile/_e0/file11-xliff/en/translate.xliff", + "timestamp": 1700000000 + }, + { + "language": "es", + "region": "", + "script": "", + "isRtl": false, + "name": "Spanish", + "localizedName": "Español", + "uri": "/file-types-metafile/_e0/file11-xliff/es/translate.xliff", + "timestamp": 1700000000 + }, + { + "language": "fr", + "region": "", + "script": "", + "isRtl": false, + "name": "French", + "localizedName": "Français", + "uri": "/file-types-metafile/_e0/file11-xliff/fr/translate.xliff", + "timestamp": 1700000000 + } + ] + }, + "file12-properties": { + "file": "local.properties", + "path": "", + "library": "", + "module": "", + "buildType": "", + "timestamp": 1700000000, + "productFlavors": [ ], + "locales": [ + { + "language": "en", + "region": "", + "script": "", + "isRtl": false, + "name": "English", + "localizedName": "English", + "uri": "/file-types-metafile/_e0/file12-properties/en/local.properties", + "timestamp": 1700000000 + }, + { + "language": "es", + "region": "", + "script": "", + "isRtl": false, + "name": "Spanish", + "localizedName": "Español", + "uri": "/file-types-metafile/_e0/file12-properties/es/local.properties", + "timestamp": 1700000000 + }, + { + "language": "fr", + "region": "", + "script": "", + "isRtl": false, + "name": "French", + "localizedName": "Français", + "uri": "/file-types-metafile/_e0/file12-properties/fr/local.properties", + "timestamp": 1700000000 + } + ] + }, + "file13-csv": { + "file": "export.csv", + "path": "", + "library": "", + "module": "", + "buildType": "", + "timestamp": 1700000000, + "productFlavors": [ ], + "locales": [ + { + "language": "en", + "region": "", + "script": "", + "isRtl": false, + "name": "English", + "localizedName": "English", + "uri": "/file-types-metafile/_e0/file13-csv/en/export.csv", + "timestamp": 1700000000 + }, + { + "language": "es", + "region": "", + "script": "", + "isRtl": false, + "name": "Spanish", + "localizedName": "Español", + "uri": "/file-types-metafile/_e0/file13-csv/es/export.csv", + "timestamp": 1700000000 + }, + { + "language": "fr", + "region": "", + "script": "", + "isRtl": false, + "name": "French", + "localizedName": "Français", + "uri": "/file-types-metafile/_e0/file13-csv/fr/export.csv", + "timestamp": 1700000000 + } + ] + }, + "file14-ts": { + "file": "resources.ts", + "path": "", + "library": "", + "module": "", + "buildType": "", + "timestamp": 1700000000, + "productFlavors": [ ], + "locales": [ + { + "language": "en", + "region": "", + "script": "", + "isRtl": false, + "name": "English", + "localizedName": "English", + "uri": "/file-types-metafile/_e0/file14-ts/en/resources.ts", + "timestamp": 1700000000 + }, + { + "language": "es", + "region": "", + "script": "", + "isRtl": false, + "name": "Spanish", + "localizedName": "Español", + "uri": "/file-types-metafile/_e0/file14-ts/es/resources.ts", + "timestamp": 1700000000 + }, + { + "language": "fr", + "region": "", + "script": "", + "isRtl": false, + "name": "French", + "localizedName": "Français", + "uri": "/file-types-metafile/_e0/file14-ts/fr/resources.ts", + "timestamp": 1700000000 + } + ] + }, + "file15-js": { + "file": "default.js", + "path": "", + "library": "", + "module": "", + "buildType": "", + "timestamp": 1700000000, + "productFlavors": [ ], + "locales": [ + { + "language": "en", + "region": "", + "script": "", + "isRtl": false, + "name": "English", + "localizedName": "English", + "uri": "/file-types-metafile/_e0/file15-js/en/default.js", + "timestamp": 1700000000 + }, + { + "language": "es", + "region": "", + "script": "", + "isRtl": false, + "name": "Spanish", + "localizedName": "Español", + "uri": "/file-types-metafile/_e0/file15-js/es/default.js", + "timestamp": 1700000000 + }, + { + "language": "fr", + "region": "", + "script": "", + "isRtl": false, + "name": "French", + "localizedName": "Français", + "uri": "/file-types-metafile/_e0/file15-js/fr/default.js", + "timestamp": 1700000000 + } + ] + }, + "file16-php": { + "file": "structured.php", + "path": "", + "library": "", + "module": "", + "buildType": "", + "timestamp": 1700000000, + "productFlavors": [ ], + "locales": [ + { + "language": "en", + "region": "", + "script": "", + "isRtl": false, + "name": "English", + "localizedName": "English", + "uri": "/file-types-metafile/_e0/file16-php/en/structured.php", + "timestamp": 1700000000 + }, + { + "language": "es", + "region": "", + "script": "", + "isRtl": false, + "name": "Spanish", + "localizedName": "Español", + "uri": "/file-types-metafile/_e0/file16-php/es/structured.php", + "timestamp": 1700000000 + }, + { + "language": "fr", + "region": "", + "script": "", + "isRtl": false, + "name": "French", + "localizedName": "Français", + "uri": "/file-types-metafile/_e0/file16-php/fr/structured.php", + "timestamp": 1700000000 + } + ] + }, + "file17-pot": { + "file": "messages.pot", + "path": "", + "library": "", + "module": "", + "buildType": "", + "timestamp": 1700000000, + "productFlavors": [ ], + "locales": [ + { + "language": "en", + "region": "", + "script": "", + "isRtl": false, + "name": "English", + "localizedName": "English", + "uri": "/file-types-metafile/_e0/file17-pot/en/messages.pot", + "timestamp": 1700000000 + }, + { + "language": "es", + "region": "", + "script": "", + "isRtl": false, + "name": "Spanish", + "localizedName": "Español", + "uri": "/file-types-metafile/_e0/file17-pot/es/messages.pot", + "timestamp": 1700000000 + }, + { + "language": "fr", + "region": "", + "script": "", + "isRtl": false, + "name": "French", + "localizedName": "Français", + "uri": "/file-types-metafile/_e0/file17-pot/fr/messages.pot", + "timestamp": 1700000000 + } + ] + }, + "file18-po": { + "file": "messages.po", + "path": "", + "library": "", + "module": "", + "buildType": "", + "timestamp": 1700000000, + "productFlavors": [ ], + "locales": [ + { + "language": "en", + "region": "", + "script": "", + "isRtl": false, + "name": "English", + "localizedName": "English", + "uri": "/file-types-metafile/_e0/file18-po/en/messages.po", + "timestamp": 1700000000 + }, + { + "language": "es", + "region": "", + "script": "", + "isRtl": false, + "name": "Spanish", + "localizedName": "Español", + "uri": "/file-types-metafile/_e0/file18-po/es/messages.po", + "timestamp": 1700000000 + }, + { + "language": "fr", + "region": "", + "script": "", + "isRtl": false, + "name": "French", + "localizedName": "Français", + "uri": "/file-types-metafile/_e0/file18-po/fr/messages.po", + "timestamp": 1700000000 + } + ] + } + } +} diff --git a/tests/fixtures/files-without-locales-metafile/index.ts b/tests/fixtures/files-without-locales-metafile/index.ts new file mode 100644 index 0000000..2a290c5 --- /dev/null +++ b/tests/fixtures/files-without-locales-metafile/index.ts @@ -0,0 +1,18 @@ +import axiosMock from '@tests/mocks/axios-mock'; +import filesWithoutLocalesMetafile + from '@tests/fixtures/files-without-locales-metafile/metafile.json'; + +const baseUrl: string = 'https://delivery.localazy.com'; + +export const url = { + metafile: `${baseUrl}/files-without-locales-metafile/_e0.v2.json`, +}; + +export const serverResponses = { + metafile: filesWithoutLocalesMetafile, +}; + +export const mockAxios = (): void => { + axiosMock.reset(); + axiosMock.onGet(url.metafile).reply(200, serverResponses.metafile); +}; diff --git a/tests/fixtures/files-without-locales-metafile/metafile.json b/tests/fixtures/files-without-locales-metafile/metafile.json new file mode 100644 index 0000000..43b48f5 --- /dev/null +++ b/tests/fixtures/files-without-locales-metafile/metafile.json @@ -0,0 +1,18 @@ +{ + "projectUrl": "https://localazy.com/p/cdnarticle", + "baseLocale": "en", + "timestamp": 1700000000, + "files": { + "file01": { + "file": "file.json", + "path": "", + "library": "", + "module": "", + "buildType": "", + "timestamp": 1700000000, + "productFlavors": [], + "locales": [ + ] + } + } +} diff --git a/tests/fixtures/index.ts b/tests/fixtures/index.ts new file mode 100644 index 0000000..ff6d3d1 --- /dev/null +++ b/tests/fixtures/index.ts @@ -0,0 +1,7 @@ +export * as completeMetafile from '@tests/fixtures/complete-metafile'; +export * as completeMetafileV2 from '@tests/fixtures/complete-metafile-v2'; +export * as singleFileMetafile from '@tests/fixtures/single-file-metafile'; +export * as emptyMetafile from '@tests/fixtures/empty-metafile'; +export * as filesWithoutLocalesMetafile from '@tests/fixtures/files-without-locales-metafile'; +export * as fileTypesMetafile from '@tests/fixtures/file-types-metafile'; +export * as serverErrorMetafile from '@tests/fixtures/server-error-metafile'; diff --git a/tests/fixtures/server-error-metafile/index.ts b/tests/fixtures/server-error-metafile/index.ts new file mode 100644 index 0000000..97bd5ad --- /dev/null +++ b/tests/fixtures/server-error-metafile/index.ts @@ -0,0 +1,12 @@ +import axiosMock from '@tests/mocks/axios-mock'; + +const baseUrl: string = 'https://delivery.localazy.com'; + +export const url = { + metafile: `${baseUrl}/single-file-metafile/_e0.v2.json`, +}; + +export const mockAxios = (code: number = 500): void => { + axiosMock.reset(); + axiosMock.onGet(url.metafile).reply(code); +}; diff --git a/tests/fixtures/single-file-metafile/file01/en/file.json b/tests/fixtures/single-file-metafile/file01/en/file.json new file mode 100644 index 0000000..4435195 --- /dev/null +++ b/tests/fixtures/single-file-metafile/file01/en/file.json @@ -0,0 +1,6 @@ +{ + "cdn_info": "With the CDN you can deliver the translation files instantly", + "cdn_testing": "We're testing the CDN", + "hello_localazy": "Hello Localazy!", + "using_javascript": "In this project we decided to use JavaScript" +} diff --git a/tests/fixtures/single-file-metafile/file01/ms/file.json b/tests/fixtures/single-file-metafile/file01/ms/file.json new file mode 100644 index 0000000..6017d79 --- /dev/null +++ b/tests/fixtures/single-file-metafile/file01/ms/file.json @@ -0,0 +1,6 @@ +{ + "cdn_info": "Dengan CDN anda boleh menyampaikan fail terjemahan dengan serta-merta", + "cdn_testing": "Kami sedang menguji CDN", + "hello_localazy": "Helo Localazy!", + "using_javascript": "Dalam projek ini kami memutuskan untuk menggunakan JavaScript" +} diff --git a/tests/fixtures/single-file-metafile/index.ts b/tests/fixtures/single-file-metafile/index.ts new file mode 100644 index 0000000..4c29c0b --- /dev/null +++ b/tests/fixtures/single-file-metafile/index.ts @@ -0,0 +1,39 @@ +import axiosMock from '@tests/mocks/axios-mock'; +import singleFileMetafile from '@tests/fixtures/single-file-metafile/metafile.json'; +import file01En from '@tests/fixtures/single-file-metafile/file01/en/file.json'; +import file01Ms from '@tests/fixtures/single-file-metafile/file01/ms/file.json'; + +const baseUrl: string = 'https://delivery.localazy.com'; +const file01Locales = singleFileMetafile.files.file01.locales; + +export const url = { + metafile: `${baseUrl}/single-file-metafile/_e0.v2.json`, + file01: { + en: `${baseUrl}${file01Locales[0].uri}`, + ms: `${baseUrl}${file01Locales[1].uri}`, + }, +}; + +export const serverResponses = { + metafile: singleFileMetafile, + file01: { + en: file01En, + ms: file01Ms, + }, +}; + +export const cdnResponses = { + allFilesAllLocales: { + file01: { + en: serverResponses.file01.en, + ms: serverResponses.file01.ms, + }, + }, +}; + +export const mockAxios = (): void => { + axiosMock.reset(); + axiosMock.onGet(url.metafile).reply(200, serverResponses.metafile); + axiosMock.onGet(url.file01.en).reply(200, serverResponses.file01.en); + axiosMock.onGet(url.file01.ms).reply(200, serverResponses.file01.ms); +}; diff --git a/tests/fixtures/single-file-metafile/metafile.json b/tests/fixtures/single-file-metafile/metafile.json new file mode 100644 index 0000000..665be5f --- /dev/null +++ b/tests/fixtures/single-file-metafile/metafile.json @@ -0,0 +1,38 @@ +{ + "projectUrl": "https://localazy.com/p/cdnarticle", + "baseLocale": "en", + "timestamp": 1700000000, + "files": { + "file01": { + "file": "file.json", + "path": "", + "library": "", + "module": "", + "buildType": "", + "timestamp": 1700000000, + "productFlavors": [], + "locales": [ + { + "language": "en", + "region": "", + "script": "", + "isRtl": false, + "name": "English", + "localizedName": "English", + "uri": "/single-file-metafile/_e0/file01/en/file.json", + "timestamp": 1700000000 + }, + { + "language": "ms", + "region": "", + "script": "", + "isRtl": false, + "name": "Malay", + "localizedName": "Malay", + "uri": "/single-file-metafile/_e0/file01/ms/file.json", + "timestamp": 1700000000 + } + ] + } + } +} diff --git a/tests/mocks/axios-mock.ts b/tests/mocks/axios-mock.ts new file mode 100644 index 0000000..a793529 --- /dev/null +++ b/tests/mocks/axios-mock.ts @@ -0,0 +1,6 @@ +import MockAdapter from 'axios-mock-adapter'; +import axios from 'axios'; + +export default new MockAdapter(axios, { + onNoMatch: 'throwException', +}); diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..c7e5e1b --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,34 @@ +{ + "compilerOptions": { + "target": "ESNext", + "module": "ESNext", + "moduleResolution": "Node", + "esModuleInterop": true, + "forceConsistentCasingInFileNames": true, + "sourceMap": true, + "resolveJsonModule": true, + "skipLibCheck": true, + "strict": true, + "declaration": true, + "baseUrl": "src", + "paths": { + "@/*": [ + "./*" + ], + "@tests/*": [ + "./../tests/*" + ] + }, + "types": [ + "@types/node", + "@types/lodash" + ] + }, + "exclude": [ + "node_modules", + "coverage", + "typedoc", + "dist", + "tests/fixtures/file-types-metafile/file14-ts/" + ] +} diff --git a/tsconfig.node.json b/tsconfig.node.json new file mode 100644 index 0000000..d01cf5c --- /dev/null +++ b/tsconfig.node.json @@ -0,0 +1,6 @@ +{ + "extends": "./tsconfig.json", + "include": [ + "**/**.cjs" + ] +} diff --git a/tsconfig.typedoc.json b/tsconfig.typedoc.json new file mode 100644 index 0000000..f6f9dda --- /dev/null +++ b/tsconfig.typedoc.json @@ -0,0 +1,6 @@ +{ + "extends": "./tsconfig.json", + "include": [ + "src" + ] +} diff --git a/vite.config.ts b/vite.config.ts new file mode 100644 index 0000000..94d3e71 --- /dev/null +++ b/vite.config.ts @@ -0,0 +1,102 @@ +/* eslint-disable import/no-extraneous-dependencies */ +import { defineConfig } from 'vite'; +import { resolve } from 'node:path'; +import dts from 'vite-plugin-dts'; +import { terser } from 'rollup-plugin-terser'; +import pkg from './package.json'; + +const banner: string = `/* ${pkg.name}@${pkg.version} + * (c) ${new Date().getFullYear()} ${pkg.author} + * @license MIT */\n`; + +export default defineConfig({ + resolve: { + alias: { + '@/': `${resolve(__dirname, '')}/src/`, + }, + }, + + build: { + lib: { + entry: resolve(__dirname, 'src/main.ts'), + }, + + minify: false, + sourcemap: true, + + rollupOptions: { + output: [ + { + format: 'es', + entryFileNames: 'localazy-cdn.js', + banner, + }, + { + format: 'es', + entryFileNames: 'localazy-cdn.min.js', + banner, + plugins: [ + // minify output + // @ts-expect-error plugin is compatible + // eslint-disable-next-line @typescript-eslint/no-unsafe-call + terser(), + ], + }, + { + format: 'cjs', + dir: 'dist/cjs', + entryFileNames: 'localazy-cdn.cjs', + banner, + }, + { + format: 'cjs', + dir: 'dist/cjs', + entryFileNames: 'localazy-cdn.min.cjs', + plugins: [ + // minify output + // @ts-expect-error plugin is compatible + // eslint-disable-next-line @typescript-eslint/no-unsafe-call + terser(), + ], + }, + { + format: 'umd', + dir: 'dist/umd', + entryFileNames: 'localazy-cdn.umd.cjs', + banner, + name: 'LocalazyCDN', + globals: { + axios: 'axios', + }, + }, + { + format: 'umd', + dir: 'dist/umd', + entryFileNames: 'localazy-cdn.umd.min.cjs', + name: 'LocalazyCDN', + globals: { + axios: 'axios', + }, + plugins: [ + // minify output + // @ts-expect-error plugin is compatible + // eslint-disable-next-line @typescript-eslint/no-unsafe-call + terser(), + ], + }, + ], + + external: [ + ...Object.keys(pkg.dependencies || {}), + ...Object.keys(pkg.devDependencies || {}), + // node internals + // 'https', + ], + }, + }, + + plugins: [ + // Generate index.d.ts file. + dts({ rollupTypes: true }), + ], +}); diff --git a/vitest.config.ts b/vitest.config.ts new file mode 100644 index 0000000..140c2b7 --- /dev/null +++ b/vitest.config.ts @@ -0,0 +1,27 @@ +/* eslint-disable import/no-extraneous-dependencies */ +import { resolve } from 'node:path'; +import { configDefaults, defineConfig } from 'vitest/config'; + +export default defineConfig({ + resolve: { + alias: { + '@/': `${resolve(__dirname, '')}/src/`, + '@tests/': `${resolve(__dirname, '')}/tests/`, + }, + }, + + test: { + coverage: { + reporter: [ + ...configDefaults.coverage.reporter || [], + 'json-summary', + ], + reportOnFailure: true, + exclude: [ + ...configDefaults.coverage.exclude || [], + 'typedoc/**', + 'docs/**', + ], + }, + }, +});