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 @@
+
+
+[
](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 @@
+
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 @@
+
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 @@
+
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 @@
+
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 @@
+
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
+
+
+
+{GENDER, select, male {He is your friend.} female {She is your friend.} other {They are your friend.}}
+
+
+
+Please log in to continue.
+
+
+
+Log Out
+
+
+
+You have %d new messages
+
+
+
+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 @@
+
+
+
+
+
+Mi solicitud
+
+
+
+{GÉNERO, selecciona, masculino {Él es tu amigo.} mujer {Ella es tu amiga.} other {Es tu amigo.}}
+
+
+
+Inicie sesión para continuar.
+
+
+
+Cerrar sesión
+
+
+
+Tienes mensajes %d nuevos
+
+
+
+¡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 @@
+
+
+
+
+
+Ma candidature
+
+
+
+{GENRE, sélectionné, homme {C'est ton ami.} femme {Elle est ton amie.} autre {Ils sont ton ami.}}
+
+
+
+Veuillez vous connecter pour continuer.
+
+
+
+Déconnectez-vous
+
+
+
+Vous avez de %d nouveaux messages
+
+
+
+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
+
+
+My Application
+
+
+
+%1 is your friend.
+
+
+
+Please log in to continue.
+
+
+
+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
+
+
+Mi solicitud
+
+
+
+%1 es tu amigo.
+
+
+
+Inicie sesión para continuar.
+
+
+
+¡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
+
+
+Ma candidature
+
+
+
+%1 est votre ami.
+
+
+
+Veuillez vous connecter pour continuer.
+
+
+
+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/**',
+ ],
+ },
+ },
+});