├── .nvmrc
├── .npmrc
├── src
├── routes
│ ├── +layout.svelte
│ ├── +page.server.ts
│ ├── +layout.server.ts
│ ├── +page.svelte
│ └── +layout.ts
├── test
│ ├── Link.svelte
│ ├── WithContext.svelte
│ ├── createEvent.ts
│ ├── join.spec.ts
│ ├── i18n.ts
│ ├── parse.spec.ts
│ ├── detector.spec.ts
│ ├── SvelteI18next.spec.ts
│ └── Trans.spec.ts
├── lib
│ ├── provider.svelte
│ ├── index.ts
│ ├── context.ts
│ ├── store.ts
│ ├── types.ts
│ ├── Node.svelte
│ ├── utils
│ │ ├── misc.ts
│ │ └── parse.ts
│ ├── request.ts
│ ├── Trans.svelte
│ ├── detector.ts
│ └── i18n.ts
├── i18n.server.ts
├── app.html
├── app.d.ts
├── i18n.ts
└── hooks.server.ts
├── static
├── locales
│ ├── en
│ │ ├── errors.json
│ │ └── common.json
│ └── es
│ │ ├── errors.json
│ │ └── common.json
└── favicon.png
├── vitest-setup.ts
├── .gitignore
├── .eslintignore
├── .prettierignore
├── .prettierrc
├── vite.config.ts
├── .eslintrc.cjs
├── .eslintrc.js
├── tsconfig.json
├── svelte.config.js
├── LICENSE
├── package.json
├── README.md
└── pnpm-lock.yaml
/.nvmrc:
--------------------------------------------------------------------------------
1 | v18.14.0
2 |
--------------------------------------------------------------------------------
/.npmrc:
--------------------------------------------------------------------------------
1 | engine-strict=true
2 |
--------------------------------------------------------------------------------
/src/routes/+layout.svelte:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/static/locales/en/errors.json:
--------------------------------------------------------------------------------
1 | {}
2 |
--------------------------------------------------------------------------------
/static/locales/es/errors.json:
--------------------------------------------------------------------------------
1 | {}
2 |
--------------------------------------------------------------------------------
/src/test/Link.svelte:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/static/favicon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/maximux13/svelte-i18next/HEAD/static/favicon.png
--------------------------------------------------------------------------------
/static/locales/en/common.json:
--------------------------------------------------------------------------------
1 | {
2 | "title": "Svelte i18next - Hello {{name}}!",
3 | "world": "World"
4 | }
5 |
--------------------------------------------------------------------------------
/static/locales/es/common.json:
--------------------------------------------------------------------------------
1 | {
2 | "title": "Svelte i18next - Hola {{name}}!",
3 | "world": "Mundo"
4 | }
5 |
--------------------------------------------------------------------------------
/vitest-setup.ts:
--------------------------------------------------------------------------------
1 | import * as matchers from '@testing-library/jest-dom/matchers';
2 | import { expect } from 'vitest';
3 |
4 | expect.extend(matchers);
5 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | .DS_Store
2 | node_modules
3 | /build
4 | /dist
5 | /.svelte-kit
6 | /package
7 | .env
8 | .env.*
9 | !.env.example
10 | vite.config.js.timestamp-*
11 | vite.config.ts.timestamp-*
12 | coverage/
--------------------------------------------------------------------------------
/.eslintignore:
--------------------------------------------------------------------------------
1 | .DS_Store
2 | node_modules
3 | /build
4 | /.svelte-kit
5 | /package
6 | .env
7 | .env.*
8 | !.env.example
9 |
10 | # Ignore files for PNPM, NPM and YARN
11 | pnpm-lock.yaml
12 | package-lock.json
13 | yarn.lock
14 |
--------------------------------------------------------------------------------
/.prettierignore:
--------------------------------------------------------------------------------
1 | .DS_Store
2 | node_modules
3 | /build
4 | /.svelte-kit
5 | /package
6 | .env
7 | .env.*
8 | !.env.example
9 |
10 | # Ignore files for PNPM, NPM and YARN
11 | pnpm-lock.yaml
12 | package-lock.json
13 | yarn.lock
14 |
--------------------------------------------------------------------------------
/src/routes/+page.server.ts:
--------------------------------------------------------------------------------
1 | import type { PageServerLoad } from './$types';
2 |
3 | export const load: PageServerLoad = async ({ locals, depends }) => {
4 | depends('i18n:lng');
5 |
6 | return { world: locals.i18n.t('world') };
7 | };
8 |
--------------------------------------------------------------------------------
/src/routes/+layout.server.ts:
--------------------------------------------------------------------------------
1 | import type { LayoutServerLoad } from './$types';
2 |
3 | export const load: LayoutServerLoad = async ({ locals, depends }) => {
4 | depends('i18n:lng');
5 |
6 | return { i18n: locals.i18n.initOptions };
7 | };
8 |
--------------------------------------------------------------------------------
/src/test/WithContext.svelte:
--------------------------------------------------------------------------------
1 |
6 |
7 |
8 |
9 |
10 |
--------------------------------------------------------------------------------
/.prettierrc:
--------------------------------------------------------------------------------
1 | {
2 | "useTabs": false,
3 | "singleQuote": true,
4 | "trailingComma": "none",
5 | "printWidth": 100,
6 | "plugins": ["prettier-plugin-svelte"],
7 | "pluginSearchDirs": ["."],
8 | "overrides": [{ "files": "*.svelte", "options": { "parser": "svelte" } }]
9 | }
10 |
--------------------------------------------------------------------------------
/src/lib/provider.svelte:
--------------------------------------------------------------------------------
1 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/src/lib/index.ts:
--------------------------------------------------------------------------------
1 | export { default as SvelteI18next } from './i18n';
2 | export { default as SvelteI18nProvider } from './provider.svelte';
3 | export { default as useI18n } from './context';
4 | export { default as Trans } from './Trans.svelte';
5 | export { default as createFetchRequest } from './request';
6 | export * from './store';
7 | export * from './types';
8 |
--------------------------------------------------------------------------------
/src/i18n.server.ts:
--------------------------------------------------------------------------------
1 | import Backend from 'i18next-fs-backend';
2 |
3 | import { SvelteI18next } from '$lib';
4 |
5 | import i18n from './i18n';
6 |
7 | const i18next = new SvelteI18next({
8 | i18next: {
9 | ...i18n,
10 | backend: { loadPath: '/locales/{{lng}}/{{ns}}.json' }
11 | },
12 | backend: Backend
13 | });
14 |
15 | export default i18next;
16 |
--------------------------------------------------------------------------------
/src/app.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | %sveltekit.head%
8 |
9 |
10 | %sveltekit.body%
11 |
12 |
13 |
--------------------------------------------------------------------------------
/vite.config.ts:
--------------------------------------------------------------------------------
1 | import { sveltekit } from '@sveltejs/kit/vite';
2 | import { defineConfig } from 'vitest/config';
3 |
4 | export default defineConfig({
5 | plugins: [sveltekit()],
6 | test: {
7 | coverage: {
8 | provider: 'v8'
9 | },
10 | include: ['src/**/*.{test,spec}.{js,ts}'],
11 | globals: true,
12 | environment: 'jsdom',
13 | setupFiles: ['./vitest-setup.ts']
14 | }
15 | });
16 |
--------------------------------------------------------------------------------
/src/lib/context.ts:
--------------------------------------------------------------------------------
1 | import { getContext as getSvelteContext } from 'svelte';
2 |
3 | import { error } from '$lib/utils/misc';
4 |
5 | import type { i18n } from 'i18next';
6 | import type { Writable } from 'svelte/store';
7 |
8 | export default function getContext() {
9 | const context = getSvelteContext('i18n') as Writable;
10 |
11 | if (!context) {
12 | error('No context found. Are you using the component outside of a ?');
13 | }
14 |
15 | return context;
16 | }
17 |
--------------------------------------------------------------------------------
/src/app.d.ts:
--------------------------------------------------------------------------------
1 | // See https://kit.svelte.dev/docs/types#app
2 | // for information about these interfaces
3 |
4 | // See https://kit.svelte.dev/docs/types#app
5 |
6 | // for information about these interfaces
7 | declare global {
8 | namespace App {
9 | // interface Error {}
10 | interface Locals {
11 | i18n: import('$lib').i18nLocals['i18n'];
12 | }
13 | // interface PageData {}
14 | // interface Platform {}
15 | // interface Locals {}
16 | }
17 | }
18 |
19 | export {};
20 |
--------------------------------------------------------------------------------
/src/i18n.ts:
--------------------------------------------------------------------------------
1 | import type { InitOptions } from 'i18next';
2 |
3 | export default {
4 | // This is the list of languages your application supports
5 | supportedLngs: ['en', 'es'],
6 | // This is the language you want to use in case
7 | // if the user language is not in the supportedLngs
8 | fallbackLng: 'en',
9 | // The default namespace of i18next is "translation", but you can customize it here
10 | defaultNS: 'common',
11 | // This is the list of namespaces your application supports
12 | ns: ['common', 'errors']
13 | } as InitOptions;
14 |
--------------------------------------------------------------------------------
/src/routes/+page.svelte:
--------------------------------------------------------------------------------
1 |
6 |
7 |
8 | {$i18n.t('title', { name: world })}
9 |
10 |
11 | Welcome to SvelteKit
12 | Visit kit.svelte.dev to read the documentation
13 |
14 | {$i18n.t('title', { name: world })}
15 |
16 |
17 |
18 |
--------------------------------------------------------------------------------
/.eslintrc.cjs:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | root: true,
3 | parser: '@typescript-eslint/parser',
4 | extends: ['eslint:recommended', 'plugin:@typescript-eslint/recommended', 'prettier'],
5 | plugins: ['svelte3', '@typescript-eslint'],
6 | ignorePatterns: ['*.cjs'],
7 | overrides: [{ files: ['*.svelte'], processor: 'svelte3/svelte3' }],
8 | settings: {
9 | 'svelte3/typescript': () => require('typescript')
10 | },
11 | parserOptions: {
12 | sourceType: 'module',
13 | ecmaVersion: 2020
14 | },
15 | env: {
16 | browser: true,
17 | es2017: true,
18 | node: true
19 | }
20 | };
21 |
--------------------------------------------------------------------------------
/.eslintrc.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | root: true,
3 | parser: '@typescript-eslint/parser',
4 | extends: ['eslint:recommended', 'plugin:@typescript-eslint/recommended', 'prettier'],
5 | plugins: ['svelte3', '@typescript-eslint'],
6 | ignorePatterns: ['*.cjs'],
7 | overrides: [{ files: ['*.svelte'], processor: 'svelte3/svelte3' }],
8 | settings: {
9 | 'svelte3/typescript': () => require('typescript')
10 | },
11 | parserOptions: {
12 | sourceType: 'module',
13 | ecmaVersion: 2020
14 | },
15 | env: {
16 | browser: true,
17 | es2017: true,
18 | node: true
19 | }
20 | };
21 |
--------------------------------------------------------------------------------
/src/routes/+layout.ts:
--------------------------------------------------------------------------------
1 | import type { LayoutLoad } from './$types';
2 |
3 | import { createInstance } from 'i18next';
4 | import Backend from 'i18next-http-backend';
5 | import LanguageDetector from 'i18next-browser-languagedetector';
6 |
7 | import { createStore } from '$lib';
8 |
9 | export const load: LayoutLoad = async ({ data }) => {
10 | const i18next = createInstance();
11 |
12 | i18next
13 | .use(Backend)
14 | .use(LanguageDetector)
15 | .init({
16 | ...data.i18n,
17 | detection: { caches: ['cookie'], order: ['htmlTag'] }
18 | });
19 |
20 | const store = createStore(i18next);
21 |
22 | return { i18n: store };
23 | };
24 |
--------------------------------------------------------------------------------
/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "./.svelte-kit/tsconfig.json",
3 | "compilerOptions": {
4 | "allowJs": true,
5 | "checkJs": true,
6 | "esModuleInterop": true,
7 | "forceConsistentCasingInFileNames": true,
8 | "resolveJsonModule": true,
9 | "skipLibCheck": true,
10 | "sourceMap": true,
11 | "strict": true,
12 | "types": ["@testing-library/jest-dom"]
13 | }
14 | // Path aliases are handled by https://kit.svelte.dev/docs/configuration#alias
15 | //
16 | // If you want to overwrite includes/excludes, make sure to copy over the relevant includes/excludes
17 | // from the referenced tsconfig.json - TypeScript does not merge them in
18 | }
19 |
--------------------------------------------------------------------------------
/svelte.config.js:
--------------------------------------------------------------------------------
1 | import adapter from '@sveltejs/adapter-auto';
2 | import { vitePreprocess } from '@sveltejs/kit/vite';
3 |
4 | /** @type {import('@sveltejs/kit').Config} */
5 | const config = {
6 | // Consult https://kit.svelte.dev/docs/integrations#preprocessors
7 | // for more information about preprocessors
8 | preprocess: vitePreprocess(),
9 |
10 | kit: {
11 | // adapter-auto only supports some environments, see https://kit.svelte.dev/docs/adapter-auto for a list.
12 | // If your environment is not supported or you settled on a specific environment, switch out the adapter.
13 | // See https://kit.svelte.dev/docs/adapters for more information about adapters.
14 | adapter: adapter()
15 | }
16 | };
17 |
18 | export default config;
19 |
--------------------------------------------------------------------------------
/src/lib/store.ts:
--------------------------------------------------------------------------------
1 | import { writable } from 'svelte/store';
2 | import type { i18n } from 'i18next';
3 |
4 | import { invalidate } from '$app/navigation';
5 | import { browser } from '$app/environment';
6 |
7 | export type i18nStore = ReturnType;
8 |
9 | export const createStore = (instance: i18n) => {
10 | const store = writable(instance);
11 |
12 | instance.on('initialized', () => {
13 | store.set(instance);
14 | });
15 |
16 | instance.on('loaded', () => {
17 | store.set(instance);
18 | });
19 |
20 | instance.on('added', () => {
21 | store.set(instance);
22 | });
23 |
24 | instance.on('languageChanged', () => {
25 | if (browser) invalidate('i18n:lng');
26 | else store.set(instance);
27 | });
28 |
29 | return store;
30 | };
31 |
--------------------------------------------------------------------------------
/src/lib/types.ts:
--------------------------------------------------------------------------------
1 | import type { ComponentType } from 'svelte';
2 | import type { i18n, InitOptions } from 'i18next';
3 |
4 | export interface i18nLocals {
5 | i18n: i18n & { initOptions: Partial };
6 | }
7 |
8 | export type Component = ComponentType | string | { component: Component; props?: any };
9 |
10 | export type ComponentMap =
11 | | Component[]
12 | | {
13 | [key: string]: Component;
14 | };
15 |
16 | export type ContentNode =
17 | | {
18 | type: 'text';
19 | children: string;
20 | }
21 | | {
22 | type: 'html';
23 | tag: string;
24 | props: Record;
25 | children: ContentNode[];
26 | }
27 | | {
28 | type: 'svelte';
29 | component: Component;
30 | props: Record;
31 | children: ContentNode[];
32 | };
33 |
--------------------------------------------------------------------------------
/src/hooks.server.ts:
--------------------------------------------------------------------------------
1 | import { resolve } from 'node:path';
2 |
3 | import { createInstance } from 'i18next';
4 | import Backend from 'i18next-fs-backend';
5 |
6 | import type { Handle } from '@sveltejs/kit';
7 |
8 | import i18n from './i18n';
9 | import i18next from './i18n.server';
10 |
11 | export const handle: Handle = async (props) => {
12 | const { event } = props;
13 |
14 | const instance = createInstance();
15 | const lng = await i18next.getLocale(event);
16 | const ns = await i18next.getNamespaces(event);
17 |
18 | await instance.use(Backend).init({
19 | ...i18n,
20 | backend: { loadPath: resolve('./static/locales/{{lng}}/{{ns}}.json') },
21 | lng,
22 | ns
23 | });
24 |
25 | const initOptions = i18next.getInitOptions(instance);
26 |
27 | event.locals.i18n = Object.assign(instance, { initOptions });
28 |
29 | return props.resolve(event, {
30 | transformPageChunk: ({ html }) => html.replace('', ``)
31 | });
32 | };
33 |
--------------------------------------------------------------------------------
/src/lib/Node.svelte:
--------------------------------------------------------------------------------
1 |
16 |
17 | {#if node.type === 'text'}
18 | {node.children}
19 | {:else if node.type === 'html'}
20 |
21 | {#each node.children as child}
22 |
23 | {/each}
24 |
25 | {:else if node.type === 'svelte' && isSvelteComponent(node.component)}
26 |
27 | {#each node.children as child}
28 |
29 | {/each}
30 |
31 | {/if}
32 |
--------------------------------------------------------------------------------
/src/test/createEvent.ts:
--------------------------------------------------------------------------------
1 | import { vi } from 'vitest';
2 | import { i18n } from './i18n';
3 | import type { Cookies, RequestEvent } from '@sveltejs/kit';
4 |
5 | export function createEvent({
6 | url,
7 | routeId,
8 | params = {},
9 | headers = new Headers()
10 | }: {
11 | url: URL | string;
12 | routeId: string;
13 | params?: Record;
14 | headers?: Headers;
15 | }): RequestEvent {
16 | return {
17 | cookies: {
18 | get: vi.fn(),
19 | getAll: vi.fn(),
20 | set: vi.fn(),
21 | delete: vi.fn(),
22 | serialize: vi.fn()
23 | } as Cookies,
24 | fetch: fetch,
25 | getClientAddress: () => '',
26 | locals: {
27 | i18n: Object.assign(i18n, { initOptions: { fallbackLng: 'en' } })
28 | },
29 | isDataRequest: false,
30 | isSubRequest: false,
31 | params: params,
32 | platform: 'node',
33 | request: new Request(url, {
34 | headers
35 | }),
36 | route: { id: routeId || null },
37 | setHeaders: vi.fn(),
38 | url: new URL(url)
39 | };
40 | }
41 |
--------------------------------------------------------------------------------
/src/lib/utils/misc.ts:
--------------------------------------------------------------------------------
1 | export function warn(message: string) {
2 | console.warn('svelte-i18next:: ' + message);
3 | }
4 |
5 | export function error(message: string) {
6 | throw new Error('svelte-i18next:: ' + message);
7 | }
8 |
9 | /**
10 | * Joins multiple path segments into a single path string. The resulting path is normalized by removing any trailing slashes and ensuring that there is exactly one leading slash.
11 | *
12 | * @param paths - The path segments to join.
13 | * @returns The joined path string.
14 | */
15 | export function join(...segments: string[]) {
16 | const cleanedSegments = segments.map((segment) => segment.replace(/^\/+|\/+$/g, ''));
17 |
18 | // Filter out any empty strings
19 | const nonEmptySegments = cleanedSegments.filter((segment) => segment.length > 0);
20 |
21 | // Join the segments using the forward slash separator
22 | let joinedPath = nonEmptySegments.join('/');
23 |
24 | // Add a leading slash if the original first segment had one
25 | if (segments.length > 0 && segments[0].startsWith('/')) {
26 | joinedPath = '/' + joinedPath;
27 | }
28 |
29 | return joinedPath;
30 | }
31 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2023 Andres Felipe Alarcon
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/src/test/join.spec.ts:
--------------------------------------------------------------------------------
1 | import { join } from '$lib/utils/misc';
2 |
3 | import { describe, expect, it } from 'vitest';
4 |
5 | describe('join', () => {
6 | it('should join path segments using the system-specific separator', () => {
7 | expect(join('path', 'to', 'file.txt')).toBe('path/to/file.txt');
8 | expect(join('path/', '/to/', '/file.txt')).toBe('path/to/file.txt');
9 | expect(join('/path', 'to', 'file.txt')).toBe('/path/to/file.txt');
10 | expect(join('/path/', '/to/', '/file.txt')).toBe('/path/to/file.txt');
11 | });
12 |
13 | it('should normalize the resulting path by removing any trailing slashes and ensuring that there is exactly one leading slash', () => {
14 | expect(join('path/', 'to/', 'file.txt/')).toBe('path/to/file.txt');
15 | expect(join('/path/', '/to/', '/file.txt/')).toBe('/path/to/file.txt');
16 | expect(join('path', 'to', 'file.txt')).toBe('path/to/file.txt');
17 | expect(join('/path', '/to', '/file.txt')).toBe('/path/to/file.txt');
18 | });
19 |
20 | it('should handle empty path segments', () => {
21 | expect(join('', 'path', '', 'to', '', 'file.txt')).toBe('path/to/file.txt');
22 | expect(join('', '', '', '')).toBe('');
23 | });
24 | });
25 |
--------------------------------------------------------------------------------
/src/lib/request.ts:
--------------------------------------------------------------------------------
1 | import type { HttpBackendOptions, RequestCallback } from 'i18next-http-backend';
2 |
3 | export default function createFetchRequest(_fetch: typeof fetch): HttpBackendOptions['request'] {
4 | let omitFetchOptions = false;
5 |
6 | function fetchIt(url: string, options: RequestInit, callback: RequestCallback) {
7 | _fetch(url, options)
8 | .then((response) => {
9 | if (!response.ok) {
10 | return callback(response.statusText || 'Error', {
11 | status: response.status,
12 | data: ''
13 | });
14 | }
15 |
16 | response
17 | .text()
18 | .then((data) => {
19 | callback(null, { status: response.status, data });
20 | })
21 | .catch((err) => callback(err, { status: 400, data: '' }));
22 | })
23 | .catch((err) => callback(err, { status: 400, data: '' }));
24 | }
25 |
26 | return (options, url, payload, callback) => {
27 | const headers = Object.assign(
28 | {},
29 | typeof options.customHeaders === 'function' ? options.customHeaders() : options.customHeaders
30 | );
31 |
32 | if (payload) headers['Content-Type'] = 'application/json';
33 |
34 | const reqOptions =
35 | typeof options.requestOptions === 'function'
36 | ? options.requestOptions(payload)
37 | : options.requestOptions;
38 |
39 | const fetchOptions = Object.assign(
40 | {
41 | method: payload ? 'POST' : 'GET',
42 | body: payload ? (options as any)?.['stringify']?.(payload) : undefined,
43 | headers
44 | },
45 | omitFetchOptions ? {} : reqOptions
46 | );
47 |
48 | try {
49 | fetchIt(url, fetchOptions, callback);
50 | } catch (e: any) {
51 | if (
52 | !reqOptions ||
53 | Object.keys(reqOptions).length === 0 ||
54 | !e.message ||
55 | e.message.indexOf('not implemented') < 0
56 | ) {
57 | return callback(e, { status: e.status ?? 400, data: '' });
58 | }
59 | try {
60 | Object.keys(reqOptions).forEach((opt) => {
61 | delete (fetchOptions as any)[opt];
62 | });
63 |
64 | fetchIt(url, fetchOptions, callback);
65 | omitFetchOptions = true;
66 | } catch (err: any) {
67 | return callback(err, { status: err.status ?? 400, data: '' });
68 | }
69 | }
70 | };
71 | }
72 |
--------------------------------------------------------------------------------
/src/lib/Trans.svelte:
--------------------------------------------------------------------------------
1 |
75 |
76 |
77 | {#each parsedContent as node (node.children)}
78 |
79 | {/each}
80 |
81 |
--------------------------------------------------------------------------------
/src/test/i18n.ts:
--------------------------------------------------------------------------------
1 | import { createStore } from '$lib/store';
2 | import { createInstance } from 'i18next';
3 |
4 | export const i18n = createInstance();
5 |
6 | i18n.init({
7 | lng: 'en',
8 | fallbackLng: 'en',
9 | resources: {
10 | en: {
11 | translation: {
12 | // Simple text
13 | simple_text: 'Simple text',
14 | // Interpolation
15 | interpolation: 'Hello {{name}}',
16 | // Interpolation with function
17 | interpolation_function: 'Hello {{name, uppercase}}',
18 | // Numeric tag
19 | numeric_tag: 'Hello <0>world0>',
20 | // Named tag
21 | named_tag: 'Hello world',
22 | // Numeric tag found twice in the same sentence
23 | numeric_tag_twice: 'Hello <0>world0> and <0>universe0>',
24 | // Named tag found twice in the same sentence
25 | named_tag_twice: 'Hello world and universe',
26 | // Nested tags
27 | nested_tags: 'This is <0>bold <1>and italic1>0>',
28 | // Svelte component
29 | svelte_component: 'This is a <0>svelte component0>',
30 | // Interpolation with tag
31 | interpolation_with_tag: 'Hello <0>{{name}}0>',
32 | // Interpolation with nested tags
33 | interpolation_with_nested_tags: 'Hello <0><1>{{name}}1>0>',
34 | // Interpolation with svelte component
35 | interpolation_with_svelte_component: 'Hello <0><1>{{name}}1>0>',
36 | // Interpolation with svelte component and nested tags
37 | interpolation_with_svelte_component_and_nested_tags: 'Hello <0><1>{{name}}1>0>',
38 | // Translation with context
39 | greeting_male: 'Hello Mr. {{name}}',
40 | greeting_female: 'Hello Mrs. {{name}}',
41 | // Translation with pluralization
42 | count_one: 'You have {{count}} message',
43 | count_other: 'You have {{count}} messages',
44 | // Missing tag
45 | missing_tag: 'Hello <0>world0>',
46 | // Array of elements
47 | array_elements: ['Hello', 'world']
48 | },
49 | other: {
50 | simple_text: 'Simple text (other)'
51 | }
52 | },
53 | es: {
54 | translation: {
55 | simple_text: 'Texto simple'
56 | }
57 | }
58 | },
59 | interpolation: {
60 | escapeValue: false, // not needed for react!!
61 | format(value, format) {
62 | if (format === 'uppercase') return value.toUpperCase();
63 | return value;
64 | }
65 | }
66 | });
67 |
68 | export const store = createStore(i18n);
69 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "@maximux13/svelte-i18next",
3 | "description": "Add internationalization (i18n) support to your SvelteKit project",
4 | "sideEffects": false,
5 | "repository": {
6 | "type": "git",
7 | "url": "git+https://github.com/maximux13/svelte-i18next.git"
8 | },
9 | "engines": {
10 | "node": ">=18.0.0"
11 | },
12 | "keywords": [
13 | "svelte",
14 | "i18n",
15 | "i18next",
16 | "kit"
17 | ],
18 | "author": {
19 | "name": "Andres Alarcon",
20 | "email": "maximux13@gmail.com",
21 | "url": "https://github.com/maximux13"
22 | },
23 | "bugs": {
24 | "url": "https://github.com/maximux13/svelte-i18next/issues"
25 | },
26 | "homepage": "https://github.com/maximux13/svelte-i18next#readme",
27 | "version": "2.0.0",
28 | "license": "MIT",
29 | "scripts": {
30 | "dev": "vite dev",
31 | "build": "vite build && npm run package",
32 | "preview": "vite preview",
33 | "package": "svelte-kit sync && svelte-package && publint",
34 | "prepublishOnly": "npm run package",
35 | "check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json",
36 | "check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch",
37 | "test:unit": "vitest",
38 | "lint": "prettier --plugin-search-dir . --check . && eslint .",
39 | "format": "prettier --plugin-search-dir . --write .",
40 | "release": "pnpx np"
41 | },
42 | "exports": {
43 | ".": {
44 | "types": "./dist/index.d.ts",
45 | "svelte": "./dist/index.js"
46 | }
47 | },
48 | "files": [
49 | "dist"
50 | ],
51 | "peerDependencies": {
52 | "@sveltejs/kit": "^1.8.5",
53 | "i18next": "^22.4.10",
54 | "i18next-http-backend": "^2.1.1",
55 | "svelte": "^3.55.1 || ^4.0.0"
56 | },
57 | "devDependencies": {
58 | "@sveltejs/adapter-auto": "^2.0.0",
59 | "@sveltejs/kit": "^1.25.0",
60 | "@sveltejs/package": "^2.2.2",
61 | "@testing-library/dom": "^9.3.3",
62 | "@testing-library/jest-dom": "^6.1.3",
63 | "@testing-library/svelte": "^4.0.3",
64 | "@types/accept-language-parser": "^1.5.3",
65 | "@types/testing-library__jest-dom": "^6.0.0",
66 | "@typescript-eslint/eslint-plugin": "^5.54.0",
67 | "@typescript-eslint/parser": "^5.54.0",
68 | "@vitest/coverage-v8": "^0.34.6",
69 | "eslint": "^8.28.0",
70 | "eslint-config-prettier": "^8.5.0",
71 | "eslint-plugin-svelte": "2.36.0-next.2",
72 | "i18next": "^22.5.1",
73 | "i18next-browser-languagedetector": "^7.1.0",
74 | "i18next-fs-backend": "^2.2.0",
75 | "i18next-http-backend": "^2.2.2",
76 | "jsdom": "^22.1.0",
77 | "prettier": "^3.1.0",
78 | "prettier-plugin-svelte": "^3.1.2",
79 | "publint": "^0.1.9",
80 | "svelte": "^4.2.0",
81 | "svelte-check": "^3.5.2",
82 | "tslib": "^2.4.1",
83 | "typescript": "^4.9.3",
84 | "vite": "^4.0.0",
85 | "vitest": "0.34.6"
86 | },
87 | "svelte": "./dist/index.js",
88 | "types": "./dist/index.d.ts",
89 | "type": "module",
90 | "dependencies": {
91 | "accept-language-parser": "^1.5.0",
92 | "intl-parse-accept-language": "^1.0.0"
93 | },
94 | "np": {
95 | "testScript": "test:unit"
96 | },
97 | "publishConfig": {
98 | "access": "public"
99 | }
100 | }
101 |
--------------------------------------------------------------------------------
/src/lib/utils/parse.ts:
--------------------------------------------------------------------------------
1 | import { warn } from './misc';
2 |
3 | import type { ComponentMap, ContentNode } from '$lib/types';
4 | import type { ComponentType } from 'svelte';
5 |
6 | const isArrayComponentMap = (components: ComponentMap): components is ComponentType[] =>
7 | Array.isArray(components);
8 |
9 | const isObjectComponentMap = (
10 | components: ComponentMap
11 | ): components is Record => typeof components === 'object';
12 |
13 | const isComponentWithProps = (
14 | component: ComponentType | { component: ComponentType; props?: any }
15 | ): component is { component: ComponentType; props: any } =>
16 | typeof component === 'object' && 'component' in component;
17 |
18 | export function text(text: string): Extract {
19 | return { type: 'text', children: text };
20 | }
21 |
22 | export function html(
23 | tag: string,
24 | children: ContentNode[] = [],
25 | props: Record = {}
26 | ): Extract {
27 | return { type: 'html', tag, children, props };
28 | }
29 |
30 | export function svelte(
31 | component: any,
32 | children: ContentNode[] = [],
33 | props: Record = {}
34 | ): Extract {
35 | return { type: 'svelte', component, children, props };
36 | }
37 |
38 | /**
39 | * Parses the given translation content to produce a structured representation of it.
40 | *
41 | * @param {string} content - The translation string with embedded tags.
42 | * @param {Array|string} components - An array or object of components or HTML tags to interpolate.
43 | * @returns {Array} A structured array representation of the content with its components.
44 | */
45 | function parseContent(content: string, components: ComponentMap): ContentNode[] {
46 | const regExp = /<(\d+|[\w_]+)>(.*?)<\/\1>/gs;
47 | const result: ContentNode[] = [];
48 | let match;
49 | let lastIndex = 0;
50 |
51 | while ((match = regExp.exec(content)) !== null) {
52 | const [fullMatch, tag, innerContent] = match;
53 |
54 | if (match.index > lastIndex) {
55 | const text = content.substring(lastIndex, match.index);
56 | result.push({ type: 'text', children: text });
57 | }
58 |
59 | let Component;
60 | let props = {};
61 |
62 | if (isArrayComponentMap(components) && !isNaN(Number(tag))) {
63 | Component = components[parseInt(tag)];
64 | }
65 |
66 | if (isObjectComponentMap(components)) {
67 | Component = components[tag];
68 | }
69 |
70 | if (!Component) {
71 | warn(`No component found for tag <${tag}>.`);
72 | result.push(text(innerContent));
73 | lastIndex = match.index + fullMatch.length;
74 | continue;
75 | }
76 |
77 | if (isComponentWithProps(Component)) {
78 | props = Component.props || {};
79 | Component = Component.component;
80 | }
81 |
82 | if (typeof Component === 'string') {
83 | result.push(html(Component, parseContent(innerContent, components), props));
84 | } else {
85 | result.push(svelte(Component, parseContent(innerContent, components), props));
86 | }
87 | lastIndex = match.index + fullMatch.length;
88 | }
89 |
90 | if (lastIndex < content.length) {
91 | result.push(text(content.substring(lastIndex)));
92 | }
93 |
94 | return result;
95 | }
96 |
97 | export default parseContent;
98 |
--------------------------------------------------------------------------------
/src/test/parse.spec.ts:
--------------------------------------------------------------------------------
1 | import { test } from 'vitest';
2 |
3 | import parse from '$lib/utils/parse';
4 |
5 | import type { ComponentType } from 'svelte';
6 | import type { ComponentMap } from '$lib/types';
7 |
8 | function text(text: string) {
9 | return { type: 'text', children: text };
10 | }
11 |
12 | function html(tag: string, children: any[] = [], props: any = {}) {
13 | return { type: 'html', tag, children, props };
14 | }
15 |
16 | function svelte(component: any, children: any[] = [], props: any = {}) {
17 | return { type: 'svelte', component, children, props };
18 | }
19 |
20 | test('should handle simple text without tags', ({ expect }) => {
21 | const content = 'Simple text';
22 | const components = [] as ComponentMap;
23 | const result = parse(content, components);
24 | expect(result).toEqual([text(content)]);
25 | });
26 |
27 | test('should handle text with numeric tags', ({ expect }) => {
28 | const content = 'Hello <0>world0>';
29 | const components = ['strong'];
30 | const result = parse(content, components);
31 | expect(result).toEqual([text('Hello '), html('strong', [text('world')])]);
32 | });
33 |
34 | test('should handle text with named tags', ({ expect }) => {
35 | const content = 'Hello world';
36 | const components = { strongTag: 'strong' };
37 | const result = parse(content, components);
38 | expect(result).toEqual([text('Hello '), html('strong', [text('world')])]);
39 | });
40 |
41 | test('should handle nested tags', ({ expect }) => {
42 | const content = 'This is <0>bold <1>and italic1>0>';
43 | const components = ['strong', 'em'];
44 | const result = parse(content, components);
45 | expect(result).toEqual([
46 | text('This is '),
47 | html('strong', [text('bold '), html('em', [text('and italic')])])
48 | ]);
49 | });
50 |
51 | test('should handle svelte components', ({ expect }) => {
52 | const FakeComponent = {} as ComponentType; // Just a placeholder for testing
53 | const content = 'This is a <0>svelte component0>';
54 | const components = [FakeComponent];
55 | const result = parse(content, components);
56 | expect(result).toEqual([text('This is a '), svelte(FakeComponent, [text('svelte component')])]);
57 | });
58 |
59 | test('should handle components with props', ({ expect }) => {
60 | const FakeComponent = {} as ComponentType;
61 | const content = 'This is a <0>svelte component with props0>';
62 | const components = [{ component: FakeComponent, props: { propKey: 'propValue' } }];
63 | const result = parse(content, components);
64 | expect(result).toEqual([
65 | text('This is a '),
66 | svelte(FakeComponent, [text('svelte component with props')], { propKey: 'propValue' })
67 | ]);
68 | });
69 |
70 | test('should handle unmatched tags', ({ expect }) => {
71 | const content = 'This is a <0>test0> and <1>another test1>';
72 | const components: ComponentMap = ['strong'];
73 | const result = parse(content, components);
74 | expect(result).toEqual([
75 | text('This is a '),
76 | html('strong', [text('test')]),
77 | text(' and '),
78 | text('another test')
79 | ]);
80 | });
81 |
82 | test('should handle consecutive tags', ({ expect }) => {
83 | const content = 'This is <0>bold0><1>italic1>';
84 | const components: ComponentMap = ['strong', 'em'];
85 | const result = parse(content, components);
86 | expect(result).toEqual([
87 | text('This is '),
88 | html('strong', [text('bold')]),
89 | html('em', [text('italic')])
90 | ]);
91 | });
92 |
--------------------------------------------------------------------------------
/src/lib/detector.ts:
--------------------------------------------------------------------------------
1 | import { pick } from 'accept-language-parser';
2 | import { parseAcceptLanguage } from 'intl-parse-accept-language';
3 |
4 | import type { Cookies, RequestEvent, ServerLoadEvent } from '@sveltejs/kit';
5 | import type { InitOptions } from 'i18next';
6 |
7 | export type Params = Partial>;
8 | export type EventLike = ServerLoadEvent | RequestEvent;
9 |
10 | export const DEFAULT_PARAM = 'lng';
11 | export const DEFAULT_COOKIE_NAME = 'i18next';
12 |
13 | /**
14 | * `LanguageDetectorOptions`
15 |
16 | * @property {string} cookie - The name of the cookie to use for language detection.
17 | * @property {string} param - The query parameter to look for. Defaults to 'lng'.
18 | * @property order - An array of the order in which to check for the language.
19 | * @property supportedLngs - An array of languages that are supported by the application.
20 | * @property fallbackLng - The language to use if the language can't be detected.
21 | */
22 | export type LanguageDetectorOptions = {
23 | cookie?: string;
24 | param?: string;
25 | order?: Array<'params' | 'cookie' | 'header'>;
26 | supportedLngs?: InitOptions['supportedLngs'];
27 | fallbackLng?: InitOptions['fallbackLng'];
28 | };
29 |
30 | export default class LanguageDetector {
31 | constructor(private options: LanguageDetectorOptions) {}
32 |
33 | public async detect(event: EventLike): Promise {
34 | const orders = this.options.order ?? (['params', 'cookie', 'header'] as const);
35 |
36 | let locale: string | null = null;
37 |
38 | for (const order of orders) {
39 | if (order === 'params') {
40 | locale = this.fromParams(event.params);
41 | }
42 |
43 | if (order === 'cookie') {
44 | locale = this.fromCookie(event.cookies);
45 | }
46 |
47 | if (order === 'header') {
48 | locale = this.fromHeader(event.request);
49 | }
50 |
51 | if (locale) return locale;
52 | }
53 |
54 | return (
55 | (this.options.fallbackLng as string) ||
56 | (this.options.supportedLngs && Array.isArray(this.options.supportedLngs)
57 | ? this.options.supportedLngs[0]
58 | : this.options.supportedLngs)
59 | );
60 | }
61 |
62 | private fromParams(params: Params) {
63 | const param = params?.[this.options.param || DEFAULT_PARAM];
64 | if (!param) return null;
65 |
66 | return this.pick(param);
67 | }
68 |
69 | private fromCookie(cookies: Cookies) {
70 | const cookie = cookies.get(this.options.cookie ?? DEFAULT_COOKIE_NAME);
71 | if (!cookie) return null;
72 |
73 | return this.pick(cookie);
74 | }
75 |
76 | private fromHeader(request: Request) {
77 | const header = request.headers.get('Accept-Language');
78 | if (!header) return null;
79 |
80 | const locales = parseAcceptLanguage(header, {
81 | validate: Intl.DateTimeFormat.supportedLocalesOf,
82 | ignoreWildcard: true
83 | });
84 |
85 | return this.pick(locales.join(','));
86 | }
87 |
88 | private pick(lang: string | undefined) {
89 | const supportedLngs = Array.isArray(this.options.supportedLngs)
90 | ? this.options.supportedLngs
91 | : [this.options.supportedLngs];
92 |
93 | return (
94 | pick(supportedLngs, lang ?? (this.options.fallbackLng as string), {
95 | loose: false
96 | }) ||
97 | pick(supportedLngs, lang ?? (this.options.fallbackLng as string), {
98 | loose: true
99 | })
100 | );
101 | }
102 | }
103 |
--------------------------------------------------------------------------------
/src/test/detector.spec.ts:
--------------------------------------------------------------------------------
1 | import { describe, expect, test, vi } from 'vitest';
2 |
3 | import LanguageDetector from '$lib/detector';
4 |
5 | import { createEvent } from './createEvent';
6 |
7 | describe('detector', () => {
8 | test('should exits', () => {
9 | expect(LanguageDetector).toBeDefined();
10 | });
11 |
12 | const detector = new LanguageDetector({
13 | cookie: 'i18next',
14 | param: 'lng',
15 | order: ['params', 'cookie', 'header'],
16 | supportedLngs: ['en', 'es'],
17 | fallbackLng: 'en'
18 | });
19 |
20 | test('should detect language from params', async () => {
21 | const event = createEvent({
22 | url: 'http://localhost:3000',
23 | routeId: 'index',
24 | params: { lng: 'es' }
25 | });
26 |
27 | const result = await detector.detect(event);
28 |
29 | expect(result).toBe('es');
30 | });
31 |
32 | test('should detect language from cookie', async () => {
33 | const event = createEvent({
34 | url: 'http://localhost:3000',
35 | routeId: 'index'
36 | });
37 |
38 | event.cookies.get = vi.fn().mockReturnValue('es');
39 |
40 | const result = await detector.detect(event);
41 |
42 | expect(result).toBe('es');
43 | });
44 |
45 | test('should detect language from header', async () => {
46 | const event = createEvent({
47 | url: 'http://localhost:3000',
48 | routeId: 'index',
49 | headers: new Headers({ 'accept-language': 'es-CO' })
50 | });
51 |
52 | const result = await detector.detect(event);
53 |
54 | expect(result).toBe('es');
55 | });
56 |
57 | test('should detect language based on order', async () => {
58 | const event = createEvent({
59 | url: 'http://localhost:3000',
60 | routeId: 'index',
61 | params: { lng: 'en' },
62 | headers: new Headers({ 'accept-language': 'es' })
63 | });
64 |
65 | event.cookies.get = vi.fn().mockReturnValue('fr');
66 |
67 | const headerFirst = new LanguageDetector({
68 | cookie: 'i18next',
69 | param: 'lng',
70 | order: ['header', 'cookie', 'params'],
71 | supportedLngs: ['en', 'es', 'fr'],
72 | fallbackLng: 'en'
73 | });
74 |
75 | const result = await headerFirst.detect(event);
76 |
77 | expect(result).toBe('es');
78 |
79 | const cookieFirst = new LanguageDetector({
80 | cookie: 'i18next',
81 | param: 'lng',
82 | order: ['cookie', 'header', 'params'],
83 | supportedLngs: ['en', 'es', 'fr'],
84 | fallbackLng: 'en'
85 | });
86 |
87 | const result2 = await cookieFirst.detect(event);
88 |
89 | expect(result2).toBe('fr');
90 |
91 | const paramsFirst = new LanguageDetector({
92 | cookie: 'i18next',
93 | param: 'lng',
94 | order: ['params', 'header', 'cookie'],
95 | supportedLngs: ['en', 'es', 'fr'],
96 | fallbackLng: 'en'
97 | });
98 |
99 | const result3 = await paramsFirst.detect(event);
100 |
101 | expect(result3).toBe('en');
102 | });
103 |
104 | test('should detect language from header with multiple languages', async () => {
105 | const event = createEvent({
106 | url: 'http://localhost:3000',
107 | routeId: 'index',
108 | headers: new Headers({ 'accept-language': 'es-CO, en-US' })
109 | });
110 |
111 | const result = await detector.detect(event);
112 |
113 | expect(result).toBe('es');
114 | });
115 |
116 | test('should detect language from header with multiple languages and unsupported language', async () => {
117 | const event = createEvent({
118 | url: 'http://localhost:3000',
119 | routeId: 'index',
120 | headers: new Headers({ 'accept-language': 'fr, en-US' })
121 | });
122 |
123 | const result = await detector.detect(event);
124 |
125 | expect(result).toBe('en');
126 | });
127 |
128 | test('should fallback to default language if no language is detected', async () => {
129 | const event = createEvent({
130 | url: 'http://localhost:3000',
131 | routeId: 'index'
132 | });
133 |
134 | const result = await detector.detect(event);
135 |
136 | expect(result).toBe('en');
137 | });
138 |
139 | test('should fallback to default language if detected language is not supported', async () => {
140 | const event = createEvent({
141 | url: 'http://localhost:3000',
142 | routeId: 'index',
143 | headers: new Headers({ 'accept-language': 'fr' })
144 | });
145 |
146 | const result = await detector.detect(event);
147 |
148 | expect(result).toBe('en');
149 | });
150 |
151 | test('should fallback to default language if detected language is not supported and multiple languages are sent', async () => {
152 | const event = createEvent({
153 | url: 'http://localhost:3000',
154 | routeId: 'index',
155 | headers: new Headers({ 'accept-language': 'fr, zh' })
156 | });
157 |
158 | const result = await detector.detect(event);
159 |
160 | expect(result).toBe('en');
161 | });
162 | });
163 |
--------------------------------------------------------------------------------
/src/test/SvelteI18next.spec.ts:
--------------------------------------------------------------------------------
1 | import { describe, expect, test, vi } from 'vitest';
2 |
3 | import { SvelteI18next } from '$lib';
4 | import { createEvent } from './createEvent';
5 |
6 | process.cwd = vi.fn().mockReturnValue('/Mock/');
7 |
8 | class TestSvelteI18next extends SvelteI18next {
9 | protected async resolveRoute(path: string) {
10 | const routes = {
11 | '/Mock/src/routes/+page': { config: { ns: 'rootPageNS' } },
12 | '/Mock/src/routes/+page.server': { config: { ns: 'rootPageServerNS' } },
13 | '/Mock/src/routes/+layout': { config: { ns: 'rootLayoutNS' } },
14 | '/Mock/src/routes/+layout.server': { config: { ns: 'rootLayoutServerNS' } },
15 | '/Mock/src/routes/a/+page': { config: { ns: 'aPageNS' } },
16 | '/Mock/src/routes/a/+layout': { config: { ns: 'aLayoutNS' } },
17 | '/Mock/src/routes/a/b/+page.server': { config: { ns: 'abPageServerNS' } },
18 | '/Mock/src/routes/a/b/c/+layout.server': { config: { ns: 'abcLayoutServerNS' } },
19 | '/Mock/src/routes/(A)/+layout': { config: { ns: '(A)aaLayoutNS' } },
20 | '/Mock/src/routes/(A)/aa/+page.server': { config: { ns: '(A)aaPageServerNS' } },
21 | '/Mock/src/routes/(A)/(B)/bb/+page.server': { config: { ns: '(A)(B)bbPageServerNS' } }
22 | };
23 |
24 | return routes[path as keyof typeof routes] || {};
25 | }
26 | }
27 |
28 | describe('SvelteI18next', () => {
29 | const instance = new TestSvelteI18next({
30 | i18next: {
31 | defaultNS: 'translation',
32 | supportedLngs: ['en', 'es'],
33 | resources: {
34 | en: {
35 | translation: {
36 | key: 'key'
37 | }
38 | },
39 | es: {
40 | translation: {
41 | key: 'Schlüssel'
42 | }
43 | }
44 | }
45 | }
46 | });
47 |
48 | test('should be defined', () => {
49 | expect(SvelteI18next).toBeDefined();
50 | });
51 |
52 | test.each`
53 | routeId | expected
54 | ${'/'} | ${['translation', 'rootPageNS', 'rootPageServerNS', 'rootLayoutNS', 'rootLayoutServerNS']}
55 | ${'/a'} | ${['translation', 'aPageNS', 'aLayoutNS', 'rootLayoutNS', 'rootLayoutServerNS']}
56 | ${'/a/b'} | ${['translation', 'abPageServerNS', 'aLayoutNS', 'rootLayoutNS', 'rootLayoutServerNS']}
57 | ${'/a/b/c'} | ${['translation', 'abcLayoutServerNS', 'aLayoutNS', 'rootLayoutNS', 'rootLayoutServerNS']}
58 | ${'/(A)/aa'} | ${['translation', '(A)aaPageServerNS', '(A)aaLayoutNS', 'rootLayoutNS', 'rootLayoutServerNS']}
59 | ${'/(A)/(B)/bb'} | ${['translation', '(A)(B)bbPageServerNS', '(A)aaLayoutNS', 'rootLayoutNS', 'rootLayoutServerNS']}
60 | `('should provide a the right namespaces for $routeId', async ({ routeId, expected }) => {
61 | const event = createEvent({
62 | url: 'http://localhost:3000/' + routeId,
63 | routeId
64 | });
65 |
66 | const ns = await instance.getNamespaces(event);
67 |
68 | expect(ns).toEqual(expected);
69 | });
70 |
71 | test('should provide a fixedT function', async () => {
72 | const event = createEvent({
73 | url: 'http://localhost:3000/',
74 | routeId: '/'
75 | });
76 |
77 | const fixedT = await instance.getFixedT(event);
78 |
79 | expect(fixedT).toBeDefined();
80 | expect(fixedT('key')).toEqual('key');
81 | });
82 |
83 | test('should provide a fixedT function with a custom namespace', async () => {
84 | const event = createEvent({
85 | url: 'http://localhost:3000/',
86 | routeId: '/'
87 | });
88 |
89 | const fixedT = await instance.getFixedT(event, { namespaces: ['a', 'b'] });
90 |
91 | expect(fixedT).toBeDefined();
92 | expect(fixedT('key')).toEqual('key');
93 | expect('ns' in fixedT && fixedT['ns']).toEqual(['a', 'b']);
94 | });
95 |
96 | test('should provide a fixedT function with a custom locale', async () => {
97 | const event = createEvent({
98 | url: 'http://localhost:3000/',
99 | routeId: '/'
100 | });
101 |
102 | const fixedT = await instance.getFixedT(event, { locale: 'es' });
103 |
104 | expect(fixedT).toBeDefined();
105 | expect(fixedT('key')).toEqual('Schlüssel');
106 | expect('lng' in fixedT && fixedT['lng']).toEqual('es');
107 | });
108 |
109 | test('should provide a fixedT function with a custom options', async () => {
110 | const event = createEvent({
111 | url: 'http://localhost:3000/',
112 | routeId: '/'
113 | });
114 |
115 | const fixedT = await instance.getFixedT(event, {
116 | locale: 'fr',
117 | options: { fallbackLng: 'en' }
118 | });
119 |
120 | expect(fixedT).toBeDefined();
121 | expect(fixedT('key')).toEqual('key');
122 | });
123 |
124 | test('should detect the locale from the event', async () => {
125 | const event = createEvent({
126 | url: 'http://localhost:3000/',
127 | routeId: '/',
128 | headers: new Headers({
129 | 'accept-language': 'es'
130 | })
131 | });
132 |
133 | const locale = await instance.getLocale(event);
134 |
135 | expect(locale).toEqual('es');
136 |
137 | const event2 = createEvent({
138 | url: 'http://localhost:3000/',
139 | routeId: '/',
140 | params: {
141 | lng: 'es'
142 | }
143 | });
144 |
145 | const locale2 = await instance.getLocale(event2);
146 |
147 | expect(locale2).toEqual('es');
148 |
149 | const event3 = createEvent({
150 | url: 'http://localhost:3000/',
151 | routeId: '/'
152 | });
153 |
154 | event3.cookies.get = vi.fn((name: string) => {
155 | if (name === 'i18next') return 'es';
156 | return undefined;
157 | });
158 |
159 | const locale3 = await instance.getLocale(event3);
160 |
161 | expect(locale3).toEqual('es');
162 | });
163 | });
164 |
--------------------------------------------------------------------------------
/src/lib/i18n.ts:
--------------------------------------------------------------------------------
1 | import {
2 | createInstance,
3 | type InitOptions,
4 | type NewableModule,
5 | type BackendModule,
6 | type Namespace,
7 | type i18n
8 | } from 'i18next';
9 |
10 | import type { Cookies } from '@sveltejs/kit';
11 |
12 | import LanguageDetector, {
13 | type LanguageDetectorOptions,
14 | type Params,
15 | type EventLike
16 | } from './detector';
17 |
18 | import { join } from '$lib/utils/misc';
19 |
20 | /**
21 | * `SvelteI18nextOptions`
22 | *
23 | * @property {InitOptions} i18next - InitOptions
24 | * @property {BackendModule} - The backend module to use.
25 | * @property {LanguageDetectorOptions} detector - This is the language detector config.
26 | */
27 | export type SvelteI18nextOptions = {
28 | i18next: InitOptions;
29 | backend?: NewableModule>;
30 | detector?: LanguageDetectorOptions;
31 | };
32 |
33 | /**
34 | * `DetectOptions`
35 | *
36 | * @property {Cookies} cookies - The cookies that were sent with the request.
37 | * @property {Params} params - The parameters of the request.
38 | * @property {Request} request - The request object
39 | */
40 | export type DetectOptions = { cookies: Cookies; params: Params; request: Request };
41 |
42 | export default class SvelteI18next {
43 | private detector: LanguageDetector;
44 |
45 | constructor(private options: SvelteI18nextOptions) {
46 | this.detector = new LanguageDetector({
47 | ...options.detector,
48 | supportedLngs: options.detector?.supportedLngs ?? this.options.i18next.supportedLngs,
49 | fallbackLng: options.detector?.fallbackLng ?? this.options.i18next.fallbackLng
50 | });
51 | }
52 |
53 | private async createInstance(options: InitOptions) {
54 | let instance = createInstance();
55 |
56 | const initOptions = { ...this.options.i18next, ...options };
57 |
58 | if (this.options.backend) instance = instance.use(this.options.backend);
59 |
60 | await instance.init({
61 | ...initOptions,
62 | backend: {
63 | ...initOptions.backend
64 | }
65 | });
66 |
67 | return instance;
68 | }
69 |
70 | protected async resolveRoute(path: string) {
71 | try {
72 | const { config } = await import(path /* @vite-ignore */);
73 |
74 | return { config };
75 | } catch {
76 | return {};
77 | }
78 | }
79 |
80 | /**
81 | * It returns the options that will be passed to the i18next client instance
82 | * @param {i18n} instance - i18n - the instance of the i18n class
83 | */
84 | public getInitOptions(instance: i18n) {
85 | const resources = instance.store.data;
86 | const { backend, ...initOptions } = this.options.i18next;
87 |
88 | return {
89 | ...initOptions,
90 | resources,
91 | lng: instance.language,
92 | ns: instance.options.ns,
93 | fallbackLng: instance.store.options.fallbackLng
94 | };
95 | }
96 |
97 | /**
98 | * It returns the locale of the user following the order defined on the
99 | * detector order config key (`e.g: ['params', 'cookie', 'header']`) or fallback language
100 | * provided in the i18next config.
101 | *
102 | * @param {EventLike} event - EventLike - The event to detect the locale from.
103 | * @returns The locale of the user.
104 | */
105 | public async getLocale(event: EventLike) {
106 | return this.detector.detect(event);
107 | }
108 |
109 | /**
110 | * If the route has a namespace, return it, otherwise return the default namespace
111 | * @param {EventLike} event - EventLike - This is the event that is passed to the handler.
112 | * @returns An array of namespaces.
113 | */
114 | public async getNamespaces(event: EventLike): Promise {
115 | if (!event.route.id) return [];
116 |
117 | const ns = this.options.i18next.ns ?? this.options.i18next.defaultNS;
118 | const namespaces = Array.isArray(ns) ? [...ns] : [ns];
119 | const route = event.route.id;
120 | const paths = ['', ...route.slice(1).split('/').filter(Boolean)];
121 | const cwd = process.cwd();
122 | const self = this;
123 |
124 | async function addNamespace(path: string) {
125 | const file = await self.resolveRoute(path);
126 | if (!file?.config?.ns) return;
127 |
128 | const config = file.config;
129 | if (typeof config.ns === 'string') namespaces.push(config.ns);
130 | else namespaces.push(...config.ns);
131 | }
132 |
133 | await addNamespace(join(cwd, '/src/routes/', `${route}`, '/+page'));
134 | await addNamespace(join(cwd, '/src/routes/', `${route}`, '/+page.server'));
135 |
136 | while (paths.length > 0) {
137 | const route = paths.join('/');
138 | await addNamespace(join(cwd, '/src/routes/', `${route}`, '/+layout'));
139 | await addNamespace(join(cwd, '/src/routes/', `${route}`, '/+layout.server'));
140 | paths.pop();
141 | }
142 |
143 | return [...new Set(namespaces)].filter(Boolean);
144 | }
145 |
146 | /**
147 | * It creates an i18next instance, changes the language to the one specified in the options or the
148 | * one returned by the getLocale function, and returns the fixedT function
149 | *
150 | * @param {EventLike} event - The event object that was passed to the handler.
151 | * @param options
152 | * @param {string} options.locale - fixed locale string
153 | * @param {Namespace} options.namespace - override default namespace
154 | * @param {InitOptions} options.options - init options forwarded to the i18next instance
155 | *
156 | * @returns A function that returns a translation for a given key.
157 | */
158 | public async getFixedT(
159 | event: EventLike,
160 | options: {
161 | locale?: string;
162 | namespaces?: N;
163 | options?: InitOptions;
164 | } = {}
165 | ) {
166 | const ns = options.namespaces ?? (this.options.i18next.defaultNS as string);
167 |
168 | const [instance, lng] = await Promise.all([
169 | this.createInstance({
170 | ...this.options.i18next,
171 | ...options.options,
172 | ns
173 | }),
174 |
175 | options.locale ?? (await this.getLocale(event))
176 | ]);
177 |
178 | await instance.changeLanguage(lng);
179 |
180 | return instance.getFixedT(lng, options.namespaces);
181 | }
182 | }
183 |
--------------------------------------------------------------------------------
/src/test/Trans.spec.ts:
--------------------------------------------------------------------------------
1 | import { describe, test, expect, vi } from 'vitest';
2 | import { act, render } from '@testing-library/svelte';
3 | import { createInstance } from 'i18next';
4 |
5 | import Trans from '$lib/Trans.svelte';
6 | import TransWithContext from './WithContext.svelte';
7 | import Link from './Link.svelte';
8 | import { store } from './i18n';
9 | import { createStore } from '$lib/store';
10 |
11 | describe('', () => {
12 | test.each`
13 | key | props | expected
14 | ${'simple_text'} | ${{}} | ${'Simple text'}
15 | ${'interpolation'} | ${{ values: { name: 'John' } }} | ${'Hello John'}
16 | ${'interpolation_function'} | ${{ values: { name: 'John' } }} | ${'Hello JOHN'}
17 | ${'numeric_tag'} | ${{ components: ['strong'] }} | ${'Hello world'}
18 | ${'named_tag'} | ${{ components: { a: 'strong' } }} | ${'Hello world'}
19 | ${'numeric_tag_twice'} | ${{ components: ['strong'] }} | ${'Hello world and universe'}
20 | ${'named_tag_twice'} | ${{ components: { a: 'strong' } }} | ${'Hello world and universe'}
21 | ${'nested_tags'} | ${{ components: ['strong', 'i'] }} | ${'This is bold and italic'}
22 | ${'svelte_component'} | ${{ components: [Link] }} | ${'This is a svelte component'}
23 | ${'interpolation_with_tag'} | ${{ values: { name: 'John' }, components: ['strong'] }} | ${'Hello John'}
24 | ${'interpolation_with_nested_tags'} | ${{ values: { name: 'John' }, components: ['strong', 'i'] }} | ${'Hello John'}
25 | ${'interpolation_with_svelte_component'} | ${{ values: { name: 'John' }, components: [Link, 'strong'] }} | ${'Hello John'}
26 | ${'interpolation_with_svelte_component_and_nested_tags'} | ${{ values: { name: 'John' }, components: [Link, 'strong'] }} | ${'Hello John'}
27 | ${'greeting'} | ${{ values: { name: 'John' }, context: 'male' }} | ${'Hello Mr. John'}
28 | ${'greeting'} | ${{ values: { name: 'Jane' }, context: 'female' }} | ${'Hello Mrs. Jane'}
29 | ${'count'} | ${{ count: 1 }} | ${'You have 1 message'}
30 | ${'count'} | ${{ count: 2 }} | ${'You have 2 messages'}
31 | ${'array_elements'} | ${{ tOptions: { joinArrays: ' ' } }} | ${'Hello world'}
32 | `('should render "$key" key', async ({ key, props, expected }) => {
33 | const { container } = render(Trans, { props: { i18n: store, key, ...props } });
34 |
35 | expect(container.textContent).toBe(expected);
36 | });
37 |
38 | test('should render html component', async () => {
39 | render(Trans, { props: { i18n: store, key: 'numeric_tag', components: ['strong'] } });
40 |
41 | expect(document.querySelector('strong')).toBeInTheDocument();
42 | expect(document.querySelector('strong')).toHaveTextContent('world');
43 | });
44 |
45 | test('should render svelte component', async () => {
46 | render(Trans, { props: { i18n: store, key: 'numeric_tag', components: [Link] } });
47 |
48 | expect(document.querySelector('a')).toBeInTheDocument();
49 | expect(document.querySelector('a')).toHaveTextContent('world');
50 | });
51 |
52 | test('should pass down props to component', async () => {
53 | render(Trans, {
54 | props: {
55 | i18n: store,
56 | key: 'nested_tags',
57 | components: [
58 | { component: 'strong', props: { class: 'bold' } },
59 | { component: Link, props: { href: 'https://example.com' } }
60 | ]
61 | }
62 | });
63 |
64 | expect(document.querySelector('strong')).toBeInTheDocument();
65 | expect(document.querySelector('strong')).toHaveClass('bold');
66 | expect(document.querySelector('a')).toBeInTheDocument();
67 | expect(document.querySelector('a')).toHaveAttribute('href', 'https://example.com');
68 | });
69 |
70 | test('should render named tag', async () => {
71 | render(Trans, {
72 | props: {
73 | i18n: store,
74 | defaultValue: 'Hello world and universe',
75 | components: {
76 | a: { component: 'strong', props: { class: 'bold' } },
77 | b: { component: 'i', props: { class: 'italic' } }
78 | }
79 | }
80 | });
81 |
82 | expect(document.querySelector('strong')).toBeInTheDocument();
83 | expect(document.querySelector('strong')).toHaveClass('bold');
84 | expect(document.querySelector('i')).toBeInTheDocument();
85 | expect(document.querySelector('i')).toHaveClass('italic');
86 | });
87 |
88 | test('should warn when missing tag', async () => {
89 | window.console.warn = vi.fn();
90 |
91 | render(Trans, {
92 | props: {
93 | i18n: store,
94 | key: 'missing_tag'
95 | }
96 | });
97 |
98 | expect(window.console.warn).toHaveBeenCalled();
99 | expect(window.console.warn).toHaveBeenCalledWith(
100 | 'svelte-i18next:: No component found for tag <0>.'
101 | );
102 | });
103 |
104 | test('should render key from other namespace', async () => {
105 | render(Trans, {
106 | props: {
107 | i18n: store,
108 | key: 'simple_text',
109 | ns: 'other'
110 | }
111 | });
112 |
113 | expect(document.body).toHaveTextContent('Simple text (other)');
114 | });
115 |
116 | test('should render key from other language', async () => {
117 | render(Trans, {
118 | props: {
119 | i18n: store,
120 | key: 'simple_text',
121 | tOptions: {
122 | lng: 'es'
123 | }
124 | }
125 | });
126 |
127 | expect(document.body).toHaveTextContent('Texto simple');
128 | });
129 |
130 | test('should allow to override t function', async () => {
131 | const instance = createInstance();
132 | instance.init({
133 | lng: 'en',
134 | fallbackLng: 'en',
135 | resources: {
136 | en: {
137 | translation: {
138 | simple_text: 'Simple text with custom t function'
139 | }
140 | }
141 | }
142 | });
143 |
144 | render(Trans, {
145 | props: {
146 | i18n: store,
147 | key: 'simple_text',
148 | t: instance.t.bind(instance)
149 | }
150 | });
151 |
152 | expect(document.body).toHaveTextContent('Simple text with custom t function');
153 | });
154 |
155 | test('should use default value when key is missing', async () => {
156 | render(Trans, {
157 | props: {
158 | i18n: store,
159 | key: 'missing_key',
160 | defaultValue: 'Default value'
161 | }
162 | });
163 |
164 | expect(document.body).toHaveTextContent('Default value');
165 | });
166 |
167 | test('should use i18n instance from context', async () => {
168 | render(TransWithContext, {
169 | props: {
170 | key: 'simple_text'
171 | }
172 | });
173 |
174 | expect(document.body).toHaveTextContent('Simple text');
175 | });
176 |
177 | test('should update content when i18n instance changes', async () => {
178 | const instance = createInstance();
179 |
180 | instance.init({
181 | lng: 'en',
182 | fallbackLng: 'en',
183 | resources: {
184 | en: {
185 | translation: {
186 | simple_text: 'Simple text'
187 | }
188 | },
189 | es: {
190 | translation: {
191 | simple_text: 'Texto simple'
192 | }
193 | }
194 | }
195 | });
196 |
197 | render(Trans, {
198 | props: {
199 | i18n: createStore(instance),
200 | key: 'simple_text'
201 | }
202 | });
203 |
204 | expect(document.body).toHaveTextContent('Simple text');
205 |
206 | await act(() => {
207 | instance.changeLanguage('es');
208 | });
209 |
210 | expect(document.body).toHaveTextContent('Texto simple');
211 | });
212 | });
213 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Svelte.i18next
2 |
3 | 
4 | 
5 | 
6 |
7 | ## Table of Contents
8 |
9 | - [Introduction](#introduction)
10 | - [Installation](#installation)
11 | - [Configuration](#configuration)
12 | - [Usage](#usage)
13 | - [Advanced Features](#advanced-features)
14 | - [Managing Namespaces](#managing-namespaces)
15 | - [getFixedT](#getfixedt)
16 | - [Trans Component](#trans-component)
17 | - [Acknowledgements](#acknowledgements)
18 | - [Troubleshooting](#troubleshooting)
19 | - [License](#license)
20 |
21 | ## Introduction
22 |
23 | [Svelte.i18next](https://github.com/maximux13/svelte-i18next) is a library that makes it easy to add internationalization (i18n) support to your [SvelteKit](https://kit.svelte.dev/). It provides a simple interface for configuring [i18next](https://www.i18next.com/) and managing translations.
24 |
25 | ## Installation
26 |
27 | To install Svelte.i18next, simply run:
28 |
29 | ```bash
30 | pnpm install @maximux13/svelte-i18next i18next i18next-browser-languagedetector i18next-http-backend
31 | ```
32 |
33 | ## Configuration
34 |
35 | To set up Svelte.i18next in your project, you'll need to go through the following configuration steps:
36 |
37 | ### i18n Config File
38 |
39 | Step 1: Create an i18n Configuration File
40 |
41 | Create a file named src/i18n.ts and populate it with the i18n configuration. Here is an example:
42 |
43 | ```ts
44 | export default {
45 | supportedLngs: ['en', 'es'], // Supported languages
46 | fallbackLng: 'en', // Fallback language
47 | defaultNS: 'common' // Default namespace
48 | };
49 | ```
50 |
51 | ### Locale Files
52 |
53 | Step 2: Create Locale Files
54 |
55 | Create locale JSON files inside the static/locales/{lng}/{ns}.json directory. Replace {lng} with the language code (e.g., en, es) and {ns} with the namespace (e.g., common).
56 |
57 | Example content for `static/locales/en/common.json`:
58 |
59 | ```json
60 | {
61 | "title": "Svelte i18next - Hello {{name}}!",
62 | "world": "World"
63 | }
64 | ```
65 |
66 | ### Server Initialization
67 |
68 | Step 3: Initialize SvelteI18next Instance
69 |
70 | In your src/i18n.server.ts, initialize a new SvelteI18next instance as shown below:
71 |
72 | ```ts
73 | // src/i18n.server.ts
74 | import Backend from 'i18next-http-backend';
75 | import { SvelteI18next } from '@maximux13/svelte-i18next';
76 | import i18n from './i18n';
77 |
78 | const i18next = new SvelteI18next({
79 | i18next: {
80 | ...i18n,
81 | backend: { loadPath: '/locales/{{lng}}/{{ns}}.json' }
82 | },
83 | backend: Backend
84 | });
85 |
86 | export default i18next;
87 | ```
88 |
89 | ### Add Server Hook
90 |
91 | Step 4: Add Server Hook
92 |
93 | Create a server hook to initialize i18next in src/hook.server.ts:
94 |
95 | ```ts
96 | import type { Handle } from '@sveltejs/kit';
97 | import { createInstance } from 'i18next';
98 | import Backend from 'i18next-http-backend';
99 |
100 | import i18n from './i18n';
101 | import i18next from './i18n.server';
102 |
103 | import { createFetchRequest } from '@maximux13/svelte-i18next';
104 |
105 | export const handle: Handle = async (props) => {
106 | const { event, resolve } = props;
107 |
108 | const instance = createInstance();
109 | const lng = await i18next.getLocale(event);
110 | const ns = await i18next.getNamespaces(event);
111 | const request = createFetchRequest(event.fetch);
112 |
113 | await instance
114 | .use(Backend)
115 | .init({ ...i18n, backend: { loadPath: '/locales/{{lng}}/{{ns}}.json', request }, lng, ns });
116 |
117 | const initOptions = i18next.getInitOptions(instance);
118 |
119 | event.locals.i18n = Object.assign(instance, { initOptions });
120 |
121 | return resolve(event, {
122 | transformPageChunk: ({ html }) => html.replace('', ``)
123 | });
124 | };
125 | ```
126 |
127 | ### Client Initialization
128 |
129 | Step 5: Client Instance Setup
130 |
131 | Finally, set up a client instance to expose i18next functionalities in your code. For example, in src/routes/+layout.server.ts and src/routes/+layout.ts:
132 |
133 | `src/routes/+layout.server.ts`
134 |
135 | ```ts
136 | import type { LayoutServerLoad } from './$types';
137 |
138 | export const load: LayoutServerLoad = async ({ locals, depends }) => {
139 | depends('i18n:lng');
140 |
141 | return { i18n: locals.i18n.initOptions };
142 | };
143 | ```
144 |
145 | `src/routes/+layout.ts`
146 |
147 | ```ts
148 | import type { LayoutLoad } from './$types';
149 |
150 | import i18next from 'i18next';
151 | import Backend from 'i18next-http-backend';
152 | import LanguageDetector from 'i18next-browser-languagedetector';
153 |
154 | import { createStore } from '@maximux13/svelte-i18next';
155 |
156 | export const load: LayoutLoad = async ({ data }) => {
157 | i18next
158 | .use(Backend)
159 | .use(LanguageDetector)
160 | .init({
161 | ...data.i18n,
162 | detection: { caches: ['cookie'], order: ['htmlTag'] }
163 | });
164 |
165 | const store = createStore(i18next);
166 |
167 | return { i18n: store };
168 | };
169 | ```
170 |
171 | ## Usage
172 |
173 | Once you've completed the [Configuration](#configuration) steps, you can start using Svelte.i18next in your Svelte components and server-side code.
174 |
175 | ### In Svelte Components
176 |
177 | You can use the i18n store in your Svelte components to access translations. Here's an example:
178 |
179 | ```svelte
180 |
185 |
186 | {$i18n.t('title', { name: $i18n.t('world') })}
187 | ```
188 |
189 | ### In Svelte Server Code
190 |
191 | You can also use i18n functionalities in your server-side code. For instance:
192 |
193 | ```ts
194 | // Example in a server-side Svelte file
195 | import type { PageServerLoad } from './$types';
196 |
197 | export const load: PageServerLoad = async ({ locals, depends }) => {
198 | depends('i18n:lng');
199 |
200 | return { world: locals.i18n.t('world') };
201 | };
202 | ```
203 |
204 | **Note**: We use `depends('i18n:lng');` to invalidate the data when the language changes. This invalidation is triggered by the i18n store when calling `$i18n.changeLanguage` method.
205 |
206 | ## Advanced Features
207 |
208 | ### Managing Namespaces
209 |
210 | To manage namespaces, specify which namespaces should be loaded on each page by setting the `ns` property in your page or layout configuration. For example:
211 |
212 | ```ts
213 | // src/routes/page.(server).ts
214 | export const config = {
215 | ns: ['page']
216 | };
217 | ```
218 |
219 | This will load the `page` namespace for the corresponding page. You can also use an array to load multiple namespaces:
220 |
221 | ```ts
222 | export const config = {
223 | ns: ['page', 'otherNamespace']
224 | };
225 | ```
226 |
227 | ### getFixedT
228 |
229 | The `getFixedT` function allows you to use a fixed translation function in your server-side code. Example:
230 |
231 | ```ts
232 | // Inside a server-side Svelte file
233 | export function GET(event) {
234 | const t = i18next.getFixedT(event, { locale: 'en', namespaces: 'test', options: {} });
235 | return new Response(t('title'));
236 | }
237 | ```
238 |
239 | ### Trans Component
240 |
241 | The `Trans` component provides a convenient way to include complex translations with HTML tags and Svelte components.
242 |
243 | **Props**
244 |
245 | | Prop | Type | Description |
246 | | ------------ | ------------ | --------------------------------------------------------- |
247 | | i18n | i18n | i18n store instance (required if not wrapped in provider) |
248 | | t | i18n.t | Custom translation function |
249 | | tOptions | object | Options to pass to the translation function |
250 | | key | string | Translation key |
251 | | values | object | Values for interpolation |
252 | | count | number | Count for pluralization |
253 | | context | string | Context for pluralization |
254 | | ns | string | Namespace |
255 | | defaultValue | string | Default value |
256 | | components | array/object | Components to be used for interpolation |
257 |
258 | For detailed usage of the `Trans` component, please refer to [this section](#trans-component-usage).
259 |
260 | ### Trans Component Usage
261 |
262 | The `Trans` component is designed to handle more complex translations that may include HTML tags, variables, and even Svelte components. Below are some examples and use-cases where you might find the `Trans` component useful.
263 |
264 | #### Basic Usage
265 |
266 | At its simplest, the `Trans` component can be used to translate static text.
267 |
268 | ```svelte
269 |
270 | ```
271 |
272 | #### With Variables
273 |
274 | You can also pass variables for interpolation.
275 |
276 | ```svelte
277 |
278 | ```
279 |
280 | #### With HTML Tags
281 |
282 | HTML tags can be included in the translation string and mapped to actual HTML tags using the `components` prop.
283 |
284 | **Example translation string**: `Click here`
285 |
286 | ```svelte
287 |
288 | ```
289 |
290 | #### Different Ways to Declare Components
291 |
292 | ##### As a String
293 |
294 | You can declare the component as a string, representing the HTML tag name.
295 |
296 | ```svelte
297 |
298 | ```
299 |
300 | ##### As an Object
301 |
302 | You can also declare the component as an object, providing more options including props.
303 |
304 | ```svelte
305 |
311 | ```
312 |
313 | ##### As a Svelte Component
314 |
315 | You can use a Svelte component directly and pass props to it.
316 |
317 | ```svelte
318 |
324 | ```
325 |
326 | #### `components` as an Array or Object
327 |
328 | The `components` prop can either be an array or an object, depending on your needs.
329 |
330 | ##### As an Array
331 |
332 | When declared as an array, the components will replace the tags in the order they appear in the translation string.
333 |
334 | **Translation string**: `Hello <0>World0> and <1>universe1>`
335 |
336 | ```svelte
337 |
338 | ```
339 |
340 | ##### As an Object
341 |
342 | When declared as an object, you can use meaningful keys to represent your tags, making your code more readable.
343 |
344 | **Translation string**: `Hello World and universe`
345 |
346 | ```svelte
347 |
348 | ```
349 |
350 | #### Passing Props to Components
351 |
352 | You can pass additional props to the components by using the object notation.
353 |
354 | ```svelte
355 |
362 | ```
363 |
364 | #### Advanced Props
365 |
366 | The `Trans` component also accepts a number of advanced props like `count`, `context`, `defaultValue`, and so on.
367 |
368 | ```svelte
369 |
370 | ```
371 |
372 | This could translate to "5 items" depending on your translation string and pluralization rules.
373 |
374 | ## Acknowledgements
375 |
376 | This library was inspired by the excellent work of SergioDXA on the [remix-i18next](https://github.com/sergiodxa/remix-i18next) library. Special thanks to all contributors and users for their support and feedback.
377 |
378 | ## Troubleshooting
379 |
380 | If you encounter any issues while using Svelte.i18next, please refer to the following resources for guidance:
381 |
382 | - **Documentation**: Make sure to read the documentation carefully for any configuration or usage details you might have missed.
383 | - **GitHub Issues**: Feel free to open an issue on our [GitHub repository](https://github.com/maximux13/svelte-i18next/issues) if you encounter bugs or have feature requests.
384 | - **Community Support**: For general questions and discussions, you can join the [Svelte community](https://svelte.dev/chat) or other relevant forums.
385 |
386 | ## License
387 |
388 | This project is licensed under the MIT License. For more details, see the [LICENSE](LICENSE) file in the repository.
389 |
--------------------------------------------------------------------------------
/pnpm-lock.yaml:
--------------------------------------------------------------------------------
1 | lockfileVersion: '6.0'
2 |
3 | settings:
4 | autoInstallPeers: true
5 | excludeLinksFromLockfile: false
6 |
7 | dependencies:
8 | accept-language-parser:
9 | specifier: ^1.5.0
10 | version: 1.5.0
11 | intl-parse-accept-language:
12 | specifier: ^1.0.0
13 | version: 1.0.0
14 |
15 | devDependencies:
16 | '@sveltejs/adapter-auto':
17 | specifier: ^2.0.0
18 | version: 2.0.0(@sveltejs/kit@1.25.0)
19 | '@sveltejs/kit':
20 | specifier: ^1.25.0
21 | version: 1.25.0(svelte@4.2.0)(vite@4.1.4)
22 | '@sveltejs/package':
23 | specifier: ^2.2.2
24 | version: 2.2.2(svelte@4.2.0)(typescript@4.9.5)
25 | '@testing-library/dom':
26 | specifier: ^9.3.3
27 | version: 9.3.3
28 | '@testing-library/jest-dom':
29 | specifier: ^6.1.3
30 | version: 6.1.3(vitest@0.34.6)
31 | '@testing-library/svelte':
32 | specifier: ^4.0.3
33 | version: 4.0.3(svelte@4.2.0)
34 | '@types/accept-language-parser':
35 | specifier: ^1.5.3
36 | version: 1.5.3
37 | '@types/testing-library__jest-dom':
38 | specifier: ^6.0.0
39 | version: 6.0.0(vitest@0.34.6)
40 | '@typescript-eslint/eslint-plugin':
41 | specifier: ^5.54.0
42 | version: 5.54.0(@typescript-eslint/parser@5.54.0)(eslint@8.35.0)(typescript@4.9.5)
43 | '@typescript-eslint/parser':
44 | specifier: ^5.54.0
45 | version: 5.54.0(eslint@8.35.0)(typescript@4.9.5)
46 | '@vitest/coverage-v8':
47 | specifier: ^0.34.6
48 | version: 0.34.6(vitest@0.34.6)
49 | eslint:
50 | specifier: ^8.28.0
51 | version: 8.35.0
52 | eslint-config-prettier:
53 | specifier: ^8.5.0
54 | version: 8.6.0(eslint@8.35.0)
55 | eslint-plugin-svelte:
56 | specifier: 2.36.0-next.2
57 | version: 2.36.0-next.2(eslint@8.35.0)(svelte@4.2.0)
58 | i18next:
59 | specifier: ^22.5.1
60 | version: 22.5.1
61 | i18next-browser-languagedetector:
62 | specifier: ^7.1.0
63 | version: 7.1.0
64 | i18next-fs-backend:
65 | specifier: ^2.2.0
66 | version: 2.2.0
67 | i18next-http-backend:
68 | specifier: ^2.2.2
69 | version: 2.2.2
70 | jsdom:
71 | specifier: ^22.1.0
72 | version: 22.1.0
73 | prettier:
74 | specifier: ^3.1.0
75 | version: 3.1.0
76 | prettier-plugin-svelte:
77 | specifier: ^3.1.2
78 | version: 3.1.2(prettier@3.1.0)(svelte@4.2.0)
79 | publint:
80 | specifier: ^0.1.9
81 | version: 0.1.9
82 | svelte:
83 | specifier: ^4.2.0
84 | version: 4.2.0
85 | svelte-check:
86 | specifier: ^3.5.2
87 | version: 3.5.2(postcss@8.4.31)(svelte@4.2.0)
88 | tslib:
89 | specifier: ^2.4.1
90 | version: 2.5.0
91 | typescript:
92 | specifier: ^4.9.3
93 | version: 4.9.5
94 | vite:
95 | specifier: ^4.0.0
96 | version: 4.1.4(@types/node@20.8.3)
97 | vitest:
98 | specifier: 0.34.6
99 | version: 0.34.6(jsdom@22.1.0)
100 |
101 | packages:
102 |
103 | /@adobe/css-tools@4.3.1:
104 | resolution: {integrity: sha512-/62yikz7NLScCGAAST5SHdnjaDJQBDq0M2muyRTpf2VQhw6StBg2ALiu73zSJQ4fMVLA+0uBhBHAle7Wg+2kSg==}
105 | dev: true
106 |
107 | /@ampproject/remapping@2.2.1:
108 | resolution: {integrity: sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==}
109 | engines: {node: '>=6.0.0'}
110 | dependencies:
111 | '@jridgewell/gen-mapping': 0.3.3
112 | '@jridgewell/trace-mapping': 0.3.19
113 | dev: true
114 |
115 | /@babel/code-frame@7.22.13:
116 | resolution: {integrity: sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==}
117 | engines: {node: '>=6.9.0'}
118 | dependencies:
119 | '@babel/highlight': 7.22.20
120 | chalk: 2.4.2
121 | dev: true
122 |
123 | /@babel/helper-validator-identifier@7.22.20:
124 | resolution: {integrity: sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==}
125 | engines: {node: '>=6.9.0'}
126 | dev: true
127 |
128 | /@babel/highlight@7.22.20:
129 | resolution: {integrity: sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==}
130 | engines: {node: '>=6.9.0'}
131 | dependencies:
132 | '@babel/helper-validator-identifier': 7.22.20
133 | chalk: 2.4.2
134 | js-tokens: 4.0.0
135 | dev: true
136 |
137 | /@babel/runtime@7.21.0:
138 | resolution: {integrity: sha512-xwII0//EObnq89Ji5AKYQaRYiW/nZ3llSv29d49IuxPhKbtJoLP+9QUUZ4nVragQVtaVGeZrpB+ZtG/Pdy/POw==}
139 | engines: {node: '>=6.9.0'}
140 | dependencies:
141 | regenerator-runtime: 0.13.11
142 | dev: true
143 |
144 | /@bcoe/v8-coverage@0.2.3:
145 | resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==}
146 | dev: true
147 |
148 | /@esbuild/android-arm64@0.16.17:
149 | resolution: {integrity: sha512-MIGl6p5sc3RDTLLkYL1MyL8BMRN4tLMRCn+yRJJmEDvYZ2M7tmAf80hx1kbNEUX2KJ50RRtxZ4JHLvCfuB6kBg==}
150 | engines: {node: '>=12'}
151 | cpu: [arm64]
152 | os: [android]
153 | requiresBuild: true
154 | dev: true
155 | optional: true
156 |
157 | /@esbuild/android-arm@0.16.17:
158 | resolution: {integrity: sha512-N9x1CMXVhtWEAMS7pNNONyA14f71VPQN9Cnavj1XQh6T7bskqiLLrSca4O0Vr8Wdcga943eThxnVp3JLnBMYtw==}
159 | engines: {node: '>=12'}
160 | cpu: [arm]
161 | os: [android]
162 | requiresBuild: true
163 | dev: true
164 | optional: true
165 |
166 | /@esbuild/android-x64@0.16.17:
167 | resolution: {integrity: sha512-a3kTv3m0Ghh4z1DaFEuEDfz3OLONKuFvI4Xqczqx4BqLyuFaFkuaG4j2MtA6fuWEFeC5x9IvqnX7drmRq/fyAQ==}
168 | engines: {node: '>=12'}
169 | cpu: [x64]
170 | os: [android]
171 | requiresBuild: true
172 | dev: true
173 | optional: true
174 |
175 | /@esbuild/darwin-arm64@0.16.17:
176 | resolution: {integrity: sha512-/2agbUEfmxWHi9ARTX6OQ/KgXnOWfsNlTeLcoV7HSuSTv63E4DqtAc+2XqGw1KHxKMHGZgbVCZge7HXWX9Vn+w==}
177 | engines: {node: '>=12'}
178 | cpu: [arm64]
179 | os: [darwin]
180 | requiresBuild: true
181 | dev: true
182 | optional: true
183 |
184 | /@esbuild/darwin-x64@0.16.17:
185 | resolution: {integrity: sha512-2By45OBHulkd9Svy5IOCZt376Aa2oOkiE9QWUK9fe6Tb+WDr8hXL3dpqi+DeLiMed8tVXspzsTAvd0jUl96wmg==}
186 | engines: {node: '>=12'}
187 | cpu: [x64]
188 | os: [darwin]
189 | requiresBuild: true
190 | dev: true
191 | optional: true
192 |
193 | /@esbuild/freebsd-arm64@0.16.17:
194 | resolution: {integrity: sha512-mt+cxZe1tVx489VTb4mBAOo2aKSnJ33L9fr25JXpqQqzbUIw/yzIzi+NHwAXK2qYV1lEFp4OoVeThGjUbmWmdw==}
195 | engines: {node: '>=12'}
196 | cpu: [arm64]
197 | os: [freebsd]
198 | requiresBuild: true
199 | dev: true
200 | optional: true
201 |
202 | /@esbuild/freebsd-x64@0.16.17:
203 | resolution: {integrity: sha512-8ScTdNJl5idAKjH8zGAsN7RuWcyHG3BAvMNpKOBaqqR7EbUhhVHOqXRdL7oZvz8WNHL2pr5+eIT5c65kA6NHug==}
204 | engines: {node: '>=12'}
205 | cpu: [x64]
206 | os: [freebsd]
207 | requiresBuild: true
208 | dev: true
209 | optional: true
210 |
211 | /@esbuild/linux-arm64@0.16.17:
212 | resolution: {integrity: sha512-7S8gJnSlqKGVJunnMCrXHU9Q8Q/tQIxk/xL8BqAP64wchPCTzuM6W3Ra8cIa1HIflAvDnNOt2jaL17vaW+1V0g==}
213 | engines: {node: '>=12'}
214 | cpu: [arm64]
215 | os: [linux]
216 | requiresBuild: true
217 | dev: true
218 | optional: true
219 |
220 | /@esbuild/linux-arm@0.16.17:
221 | resolution: {integrity: sha512-iihzrWbD4gIT7j3caMzKb/RsFFHCwqqbrbH9SqUSRrdXkXaygSZCZg1FybsZz57Ju7N/SHEgPyaR0LZ8Zbe9gQ==}
222 | engines: {node: '>=12'}
223 | cpu: [arm]
224 | os: [linux]
225 | requiresBuild: true
226 | dev: true
227 | optional: true
228 |
229 | /@esbuild/linux-ia32@0.16.17:
230 | resolution: {integrity: sha512-kiX69+wcPAdgl3Lonh1VI7MBr16nktEvOfViszBSxygRQqSpzv7BffMKRPMFwzeJGPxcio0pdD3kYQGpqQ2SSg==}
231 | engines: {node: '>=12'}
232 | cpu: [ia32]
233 | os: [linux]
234 | requiresBuild: true
235 | dev: true
236 | optional: true
237 |
238 | /@esbuild/linux-loong64@0.16.17:
239 | resolution: {integrity: sha512-dTzNnQwembNDhd654cA4QhbS9uDdXC3TKqMJjgOWsC0yNCbpzfWoXdZvp0mY7HU6nzk5E0zpRGGx3qoQg8T2DQ==}
240 | engines: {node: '>=12'}
241 | cpu: [loong64]
242 | os: [linux]
243 | requiresBuild: true
244 | dev: true
245 | optional: true
246 |
247 | /@esbuild/linux-mips64el@0.16.17:
248 | resolution: {integrity: sha512-ezbDkp2nDl0PfIUn0CsQ30kxfcLTlcx4Foz2kYv8qdC6ia2oX5Q3E/8m6lq84Dj/6b0FrkgD582fJMIfHhJfSw==}
249 | engines: {node: '>=12'}
250 | cpu: [mips64el]
251 | os: [linux]
252 | requiresBuild: true
253 | dev: true
254 | optional: true
255 |
256 | /@esbuild/linux-ppc64@0.16.17:
257 | resolution: {integrity: sha512-dzS678gYD1lJsW73zrFhDApLVdM3cUF2MvAa1D8K8KtcSKdLBPP4zZSLy6LFZ0jYqQdQ29bjAHJDgz0rVbLB3g==}
258 | engines: {node: '>=12'}
259 | cpu: [ppc64]
260 | os: [linux]
261 | requiresBuild: true
262 | dev: true
263 | optional: true
264 |
265 | /@esbuild/linux-riscv64@0.16.17:
266 | resolution: {integrity: sha512-ylNlVsxuFjZK8DQtNUwiMskh6nT0vI7kYl/4fZgV1llP5d6+HIeL/vmmm3jpuoo8+NuXjQVZxmKuhDApK0/cKw==}
267 | engines: {node: '>=12'}
268 | cpu: [riscv64]
269 | os: [linux]
270 | requiresBuild: true
271 | dev: true
272 | optional: true
273 |
274 | /@esbuild/linux-s390x@0.16.17:
275 | resolution: {integrity: sha512-gzy7nUTO4UA4oZ2wAMXPNBGTzZFP7mss3aKR2hH+/4UUkCOyqmjXiKpzGrY2TlEUhbbejzXVKKGazYcQTZWA/w==}
276 | engines: {node: '>=12'}
277 | cpu: [s390x]
278 | os: [linux]
279 | requiresBuild: true
280 | dev: true
281 | optional: true
282 |
283 | /@esbuild/linux-x64@0.16.17:
284 | resolution: {integrity: sha512-mdPjPxfnmoqhgpiEArqi4egmBAMYvaObgn4poorpUaqmvzzbvqbowRllQ+ZgzGVMGKaPkqUmPDOOFQRUFDmeUw==}
285 | engines: {node: '>=12'}
286 | cpu: [x64]
287 | os: [linux]
288 | requiresBuild: true
289 | dev: true
290 | optional: true
291 |
292 | /@esbuild/netbsd-x64@0.16.17:
293 | resolution: {integrity: sha512-/PzmzD/zyAeTUsduZa32bn0ORug+Jd1EGGAUJvqfeixoEISYpGnAezN6lnJoskauoai0Jrs+XSyvDhppCPoKOA==}
294 | engines: {node: '>=12'}
295 | cpu: [x64]
296 | os: [netbsd]
297 | requiresBuild: true
298 | dev: true
299 | optional: true
300 |
301 | /@esbuild/openbsd-x64@0.16.17:
302 | resolution: {integrity: sha512-2yaWJhvxGEz2RiftSk0UObqJa/b+rIAjnODJgv2GbGGpRwAfpgzyrg1WLK8rqA24mfZa9GvpjLcBBg8JHkoodg==}
303 | engines: {node: '>=12'}
304 | cpu: [x64]
305 | os: [openbsd]
306 | requiresBuild: true
307 | dev: true
308 | optional: true
309 |
310 | /@esbuild/sunos-x64@0.16.17:
311 | resolution: {integrity: sha512-xtVUiev38tN0R3g8VhRfN7Zl42YCJvyBhRKw1RJjwE1d2emWTVToPLNEQj/5Qxc6lVFATDiy6LjVHYhIPrLxzw==}
312 | engines: {node: '>=12'}
313 | cpu: [x64]
314 | os: [sunos]
315 | requiresBuild: true
316 | dev: true
317 | optional: true
318 |
319 | /@esbuild/win32-arm64@0.16.17:
320 | resolution: {integrity: sha512-ga8+JqBDHY4b6fQAmOgtJJue36scANy4l/rL97W+0wYmijhxKetzZdKOJI7olaBaMhWt8Pac2McJdZLxXWUEQw==}
321 | engines: {node: '>=12'}
322 | cpu: [arm64]
323 | os: [win32]
324 | requiresBuild: true
325 | dev: true
326 | optional: true
327 |
328 | /@esbuild/win32-ia32@0.16.17:
329 | resolution: {integrity: sha512-WnsKaf46uSSF/sZhwnqE4L/F89AYNMiD4YtEcYekBt9Q7nj0DiId2XH2Ng2PHM54qi5oPrQ8luuzGszqi/veig==}
330 | engines: {node: '>=12'}
331 | cpu: [ia32]
332 | os: [win32]
333 | requiresBuild: true
334 | dev: true
335 | optional: true
336 |
337 | /@esbuild/win32-x64@0.16.17:
338 | resolution: {integrity: sha512-y+EHuSchhL7FjHgvQL/0fnnFmO4T1bhvWANX6gcnqTjtnKWbTvUMCpGnv2+t+31d7RzyEAYAd4u2fnIhHL6N/Q==}
339 | engines: {node: '>=12'}
340 | cpu: [x64]
341 | os: [win32]
342 | requiresBuild: true
343 | dev: true
344 | optional: true
345 |
346 | /@eslint-community/eslint-utils@4.4.0(eslint@8.35.0):
347 | resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==}
348 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
349 | peerDependencies:
350 | eslint: ^6.0.0 || ^7.0.0 || >=8.0.0
351 | dependencies:
352 | eslint: 8.35.0
353 | eslint-visitor-keys: 3.4.3
354 | dev: true
355 |
356 | /@eslint/eslintrc@2.0.0:
357 | resolution: {integrity: sha512-fluIaaV+GyV24CCu/ggiHdV+j4RNh85yQnAYS/G2mZODZgGmmlrgCydjUcV3YvxCm9x8nMAfThsqTni4KiXT4A==}
358 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
359 | dependencies:
360 | ajv: 6.12.6
361 | debug: 4.3.4
362 | espree: 9.4.1
363 | globals: 13.20.0
364 | ignore: 5.2.4
365 | import-fresh: 3.3.0
366 | js-yaml: 4.1.0
367 | minimatch: 3.1.2
368 | strip-json-comments: 3.1.1
369 | transitivePeerDependencies:
370 | - supports-color
371 | dev: true
372 |
373 | /@eslint/js@8.35.0:
374 | resolution: {integrity: sha512-JXdzbRiWclLVoD8sNUjR443VVlYqiYmDVT6rGUEIEHU5YJW0gaVZwV2xgM7D4arkvASqD0IlLUVjHiFuxaftRw==}
375 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
376 | dev: true
377 |
378 | /@humanwhocodes/config-array@0.11.8:
379 | resolution: {integrity: sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==}
380 | engines: {node: '>=10.10.0'}
381 | dependencies:
382 | '@humanwhocodes/object-schema': 1.2.1
383 | debug: 4.3.4
384 | minimatch: 3.1.2
385 | transitivePeerDependencies:
386 | - supports-color
387 | dev: true
388 |
389 | /@humanwhocodes/module-importer@1.0.1:
390 | resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==}
391 | engines: {node: '>=12.22'}
392 | dev: true
393 |
394 | /@humanwhocodes/object-schema@1.2.1:
395 | resolution: {integrity: sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==}
396 | dev: true
397 |
398 | /@istanbuljs/schema@0.1.3:
399 | resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==}
400 | engines: {node: '>=8'}
401 | dev: true
402 |
403 | /@jest/schemas@29.6.3:
404 | resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==}
405 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
406 | dependencies:
407 | '@sinclair/typebox': 0.27.8
408 | dev: true
409 |
410 | /@jridgewell/gen-mapping@0.3.3:
411 | resolution: {integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==}
412 | engines: {node: '>=6.0.0'}
413 | dependencies:
414 | '@jridgewell/set-array': 1.1.2
415 | '@jridgewell/sourcemap-codec': 1.4.15
416 | '@jridgewell/trace-mapping': 0.3.19
417 | dev: true
418 |
419 | /@jridgewell/resolve-uri@3.1.0:
420 | resolution: {integrity: sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==}
421 | engines: {node: '>=6.0.0'}
422 | dev: true
423 |
424 | /@jridgewell/set-array@1.1.2:
425 | resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==}
426 | engines: {node: '>=6.0.0'}
427 | dev: true
428 |
429 | /@jridgewell/sourcemap-codec@1.4.14:
430 | resolution: {integrity: sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==}
431 | dev: true
432 |
433 | /@jridgewell/sourcemap-codec@1.4.15:
434 | resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==}
435 | dev: true
436 |
437 | /@jridgewell/trace-mapping@0.3.17:
438 | resolution: {integrity: sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==}
439 | dependencies:
440 | '@jridgewell/resolve-uri': 3.1.0
441 | '@jridgewell/sourcemap-codec': 1.4.14
442 | dev: true
443 |
444 | /@jridgewell/trace-mapping@0.3.19:
445 | resolution: {integrity: sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==}
446 | dependencies:
447 | '@jridgewell/resolve-uri': 3.1.0
448 | '@jridgewell/sourcemap-codec': 1.4.15
449 | dev: true
450 |
451 | /@nodelib/fs.scandir@2.1.5:
452 | resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==}
453 | engines: {node: '>= 8'}
454 | dependencies:
455 | '@nodelib/fs.stat': 2.0.5
456 | run-parallel: 1.2.0
457 | dev: true
458 |
459 | /@nodelib/fs.stat@2.0.5:
460 | resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==}
461 | engines: {node: '>= 8'}
462 | dev: true
463 |
464 | /@nodelib/fs.walk@1.2.8:
465 | resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==}
466 | engines: {node: '>= 8'}
467 | dependencies:
468 | '@nodelib/fs.scandir': 2.1.5
469 | fastq: 1.15.0
470 | dev: true
471 |
472 | /@polka/url@1.0.0-next.21:
473 | resolution: {integrity: sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g==}
474 | dev: true
475 |
476 | /@sinclair/typebox@0.27.8:
477 | resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==}
478 | dev: true
479 |
480 | /@sveltejs/adapter-auto@2.0.0(@sveltejs/kit@1.25.0):
481 | resolution: {integrity: sha512-b+gkHFZgD771kgV3aO4avHFd7y1zhmMYy9i6xOK7m/rwmwaRO8gnF5zBc0Rgca80B2PMU1bKNxyBTHA14OzUAQ==}
482 | peerDependencies:
483 | '@sveltejs/kit': ^1.0.0
484 | dependencies:
485 | '@sveltejs/kit': 1.25.0(svelte@4.2.0)(vite@4.1.4)
486 | import-meta-resolve: 2.2.1
487 | dev: true
488 |
489 | /@sveltejs/kit@1.25.0(svelte@4.2.0)(vite@4.1.4):
490 | resolution: {integrity: sha512-+VqMWJJYtcLoF8hYkdqY2qs/MPaawrMwA/gNBJW2o2UrcuYdNiy0ZZnjQQuPD33df/VcAulnoeyzF5ZtaajFEw==}
491 | engines: {node: ^16.14 || >=18}
492 | hasBin: true
493 | requiresBuild: true
494 | peerDependencies:
495 | svelte: ^3.54.0 || ^4.0.0-next.0
496 | vite: ^4.0.0
497 | dependencies:
498 | '@sveltejs/vite-plugin-svelte': 2.4.6(svelte@4.2.0)(vite@4.1.4)
499 | '@types/cookie': 0.5.1
500 | cookie: 0.5.0
501 | devalue: 4.3.2
502 | esm-env: 1.0.0
503 | kleur: 4.1.5
504 | magic-string: 0.30.0
505 | mime: 3.0.0
506 | sade: 1.8.1
507 | set-cookie-parser: 2.6.0
508 | sirv: 2.0.2
509 | svelte: 4.2.0
510 | tiny-glob: 0.2.9
511 | undici: 5.23.0
512 | vite: 4.1.4(@types/node@20.8.3)
513 | transitivePeerDependencies:
514 | - supports-color
515 | dev: true
516 |
517 | /@sveltejs/package@2.2.2(svelte@4.2.0)(typescript@4.9.5):
518 | resolution: {integrity: sha512-rP3sVv6cAntcdcG4r4KspLU6nZYYUrHJBAX3Arrw0KJFdgxtlsi2iDwN0Jwr/vIkgjcU0ZPWM8kkT5kpZDlWAw==}
519 | engines: {node: ^16.14 || >=18}
520 | hasBin: true
521 | peerDependencies:
522 | svelte: ^3.44.0 || ^4.0.0
523 | dependencies:
524 | chokidar: 3.5.3
525 | kleur: 4.1.5
526 | sade: 1.8.1
527 | semver: 7.5.4
528 | svelte: 4.2.0
529 | svelte2tsx: 0.6.22(svelte@4.2.0)(typescript@4.9.5)
530 | transitivePeerDependencies:
531 | - typescript
532 | dev: true
533 |
534 | /@sveltejs/vite-plugin-svelte-inspector@1.0.4(@sveltejs/vite-plugin-svelte@2.4.6)(svelte@4.2.0)(vite@4.1.4):
535 | resolution: {integrity: sha512-zjiuZ3yydBtwpF3bj0kQNV0YXe+iKE545QGZVTaylW3eAzFr+pJ/cwK8lZEaRp4JtaJXhD5DyWAV4AxLh6DgaQ==}
536 | engines: {node: ^14.18.0 || >= 16}
537 | peerDependencies:
538 | '@sveltejs/vite-plugin-svelte': ^2.2.0
539 | svelte: ^3.54.0 || ^4.0.0
540 | vite: ^4.0.0
541 | dependencies:
542 | '@sveltejs/vite-plugin-svelte': 2.4.6(svelte@4.2.0)(vite@4.1.4)
543 | debug: 4.3.4
544 | svelte: 4.2.0
545 | vite: 4.1.4(@types/node@20.8.3)
546 | transitivePeerDependencies:
547 | - supports-color
548 | dev: true
549 |
550 | /@sveltejs/vite-plugin-svelte@2.4.6(svelte@4.2.0)(vite@4.1.4):
551 | resolution: {integrity: sha512-zO79p0+DZnXPnF0ltIigWDx/ux7Ni+HRaFOw720Qeivc1azFUrJxTl0OryXVibYNx1hCboGia1NRV3x8RNv4cA==}
552 | engines: {node: ^14.18.0 || >= 16}
553 | peerDependencies:
554 | svelte: ^3.54.0 || ^4.0.0
555 | vite: ^4.0.0
556 | dependencies:
557 | '@sveltejs/vite-plugin-svelte-inspector': 1.0.4(@sveltejs/vite-plugin-svelte@2.4.6)(svelte@4.2.0)(vite@4.1.4)
558 | debug: 4.3.4
559 | deepmerge: 4.3.1
560 | kleur: 4.1.5
561 | magic-string: 0.30.3
562 | svelte: 4.2.0
563 | svelte-hmr: 0.15.3(svelte@4.2.0)
564 | vite: 4.1.4(@types/node@20.8.3)
565 | vitefu: 0.2.4(vite@4.1.4)
566 | transitivePeerDependencies:
567 | - supports-color
568 | dev: true
569 |
570 | /@testing-library/dom@9.3.3:
571 | resolution: {integrity: sha512-fB0R+fa3AUqbLHWyxXa2kGVtf1Fe1ZZFr0Zp6AIbIAzXb2mKbEXl+PCQNUOaq5lbTab5tfctfXRNsWXxa2f7Aw==}
572 | engines: {node: '>=14'}
573 | dependencies:
574 | '@babel/code-frame': 7.22.13
575 | '@babel/runtime': 7.21.0
576 | '@types/aria-query': 5.0.2
577 | aria-query: 5.1.3
578 | chalk: 4.1.2
579 | dom-accessibility-api: 0.5.16
580 | lz-string: 1.5.0
581 | pretty-format: 27.5.1
582 | dev: true
583 |
584 | /@testing-library/jest-dom@6.1.3(vitest@0.34.6):
585 | resolution: {integrity: sha512-YzpjRHoCBWPzpPNtg6gnhasqtE/5O4qz8WCwDEaxtfnPO6gkaLrnuXusrGSPyhIGPezr1HM7ZH0CFaUTY9PJEQ==}
586 | engines: {node: '>=14', npm: '>=6', yarn: '>=1'}
587 | peerDependencies:
588 | '@jest/globals': '>= 28'
589 | '@types/jest': '>= 28'
590 | jest: '>= 28'
591 | vitest: '>= 0.32'
592 | peerDependenciesMeta:
593 | '@jest/globals':
594 | optional: true
595 | '@types/jest':
596 | optional: true
597 | jest:
598 | optional: true
599 | vitest:
600 | optional: true
601 | dependencies:
602 | '@adobe/css-tools': 4.3.1
603 | '@babel/runtime': 7.21.0
604 | aria-query: 5.3.0
605 | chalk: 3.0.0
606 | css.escape: 1.5.1
607 | dom-accessibility-api: 0.5.16
608 | lodash: 4.17.21
609 | redent: 3.0.0
610 | vitest: 0.34.6(jsdom@22.1.0)
611 | dev: true
612 |
613 | /@testing-library/svelte@4.0.3(svelte@4.2.0):
614 | resolution: {integrity: sha512-GldAnyGEOn5gMwME+hLVQrnfuKZFB+it5YOMnRBHX+nqeHMsSa18HeqkdvGqtqLpvn81xV7R7EYFb500ngUfXA==}
615 | engines: {node: '>= 10'}
616 | peerDependencies:
617 | svelte: ^3 || ^4
618 | dependencies:
619 | '@testing-library/dom': 9.3.3
620 | svelte: 4.2.0
621 | dev: true
622 |
623 | /@tootallnate/once@2.0.0:
624 | resolution: {integrity: sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==}
625 | engines: {node: '>= 10'}
626 | dev: true
627 |
628 | /@types/accept-language-parser@1.5.3:
629 | resolution: {integrity: sha512-S8oM29O6nnRC3/+rwYV7GBYIIgNIZ52PCxqBG7OuItq9oATnYWy8FfeLKwvq5F7pIYjeeBSCI7y+l+Z9UEQpVQ==}
630 | dev: true
631 |
632 | /@types/aria-query@5.0.2:
633 | resolution: {integrity: sha512-PHKZuMN+K5qgKIWhBodXzQslTo5P+K/6LqeKXS6O/4liIDdZqaX5RXrCK++LAw+y/nptN48YmUMFiQHRSWYwtQ==}
634 | dev: true
635 |
636 | /@types/chai-subset@1.3.3:
637 | resolution: {integrity: sha512-frBecisrNGz+F4T6bcc+NLeolfiojh5FxW2klu669+8BARtyQv2C/GkNW6FUodVe4BroGMP/wER/YDGc7rEllw==}
638 | dependencies:
639 | '@types/chai': 4.3.6
640 | dev: true
641 |
642 | /@types/chai@4.3.6:
643 | resolution: {integrity: sha512-VOVRLM1mBxIRxydiViqPcKn6MIxZytrbMpd6RJLIWKxUNr3zux8no0Oc7kJx0WAPIitgZ0gkrDS+btlqQpubpw==}
644 | dev: true
645 |
646 | /@types/cookie@0.5.1:
647 | resolution: {integrity: sha512-COUnqfB2+ckwXXSFInsFdOAWQzCCx+a5hq2ruyj+Vjund94RJQd4LG2u9hnvJrTgunKAaax7ancBYlDrNYxA0g==}
648 | dev: true
649 |
650 | /@types/estree@1.0.1:
651 | resolution: {integrity: sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA==}
652 | dev: true
653 |
654 | /@types/istanbul-lib-coverage@2.0.4:
655 | resolution: {integrity: sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==}
656 | dev: true
657 |
658 | /@types/json-schema@7.0.11:
659 | resolution: {integrity: sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==}
660 | dev: true
661 |
662 | /@types/node@20.8.3:
663 | resolution: {integrity: sha512-jxiZQFpb+NlH5kjW49vXxvxTjeeqlbsnTAdBTKpzEdPs9itay7MscYXz3Fo9VYFEsfQ6LJFitHad3faerLAjCw==}
664 | dev: true
665 |
666 | /@types/pug@2.0.7:
667 | resolution: {integrity: sha512-I469DU0UXNC1aHepwirWhu9YKg5fkxohZD95Ey/5A7lovC+Siu+MCLffva87lnfThaOrw9Vb1DUN5t55oULAAw==}
668 | dev: true
669 |
670 | /@types/semver@7.3.13:
671 | resolution: {integrity: sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw==}
672 | dev: true
673 |
674 | /@types/testing-library__jest-dom@6.0.0(vitest@0.34.6):
675 | resolution: {integrity: sha512-bnreXCgus6IIadyHNlN/oI5FfX4dWgvGhOPvpr7zzCYDGAPIfvyIoAozMBINmhmsVuqV0cncejF2y5KC7ScqOg==}
676 | deprecated: This is a stub types definition. @testing-library/jest-dom provides its own type definitions, so you do not need this installed.
677 | dependencies:
678 | '@testing-library/jest-dom': 6.1.3(vitest@0.34.6)
679 | transitivePeerDependencies:
680 | - '@jest/globals'
681 | - '@types/jest'
682 | - jest
683 | - vitest
684 | dev: true
685 |
686 | /@typescript-eslint/eslint-plugin@5.54.0(@typescript-eslint/parser@5.54.0)(eslint@8.35.0)(typescript@4.9.5):
687 | resolution: {integrity: sha512-+hSN9BdSr629RF02d7mMtXhAJvDTyCbprNYJKrXETlul/Aml6YZwd90XioVbjejQeHbb3R8Dg0CkRgoJDxo8aw==}
688 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
689 | peerDependencies:
690 | '@typescript-eslint/parser': ^5.0.0
691 | eslint: ^6.0.0 || ^7.0.0 || ^8.0.0
692 | typescript: '*'
693 | peerDependenciesMeta:
694 | typescript:
695 | optional: true
696 | dependencies:
697 | '@typescript-eslint/parser': 5.54.0(eslint@8.35.0)(typescript@4.9.5)
698 | '@typescript-eslint/scope-manager': 5.54.0
699 | '@typescript-eslint/type-utils': 5.54.0(eslint@8.35.0)(typescript@4.9.5)
700 | '@typescript-eslint/utils': 5.54.0(eslint@8.35.0)(typescript@4.9.5)
701 | debug: 4.3.4
702 | eslint: 8.35.0
703 | grapheme-splitter: 1.0.4
704 | ignore: 5.2.4
705 | natural-compare-lite: 1.4.0
706 | regexpp: 3.2.0
707 | semver: 7.3.8
708 | tsutils: 3.21.0(typescript@4.9.5)
709 | typescript: 4.9.5
710 | transitivePeerDependencies:
711 | - supports-color
712 | dev: true
713 |
714 | /@typescript-eslint/parser@5.54.0(eslint@8.35.0)(typescript@4.9.5):
715 | resolution: {integrity: sha512-aAVL3Mu2qTi+h/r04WI/5PfNWvO6pdhpeMRWk9R7rEV4mwJNzoWf5CCU5vDKBsPIFQFjEq1xg7XBI2rjiMXQbQ==}
716 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
717 | peerDependencies:
718 | eslint: ^6.0.0 || ^7.0.0 || ^8.0.0
719 | typescript: '*'
720 | peerDependenciesMeta:
721 | typescript:
722 | optional: true
723 | dependencies:
724 | '@typescript-eslint/scope-manager': 5.54.0
725 | '@typescript-eslint/types': 5.54.0
726 | '@typescript-eslint/typescript-estree': 5.54.0(typescript@4.9.5)
727 | debug: 4.3.4
728 | eslint: 8.35.0
729 | typescript: 4.9.5
730 | transitivePeerDependencies:
731 | - supports-color
732 | dev: true
733 |
734 | /@typescript-eslint/scope-manager@5.54.0:
735 | resolution: {integrity: sha512-VTPYNZ7vaWtYna9M4oD42zENOBrb+ZYyCNdFs949GcN8Miwn37b8b7eMj+EZaq7VK9fx0Jd+JhmkhjFhvnovhg==}
736 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
737 | dependencies:
738 | '@typescript-eslint/types': 5.54.0
739 | '@typescript-eslint/visitor-keys': 5.54.0
740 | dev: true
741 |
742 | /@typescript-eslint/type-utils@5.54.0(eslint@8.35.0)(typescript@4.9.5):
743 | resolution: {integrity: sha512-WI+WMJ8+oS+LyflqsD4nlXMsVdzTMYTxl16myXPaCXnSgc7LWwMsjxQFZCK/rVmTZ3FN71Ct78ehO9bRC7erYQ==}
744 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
745 | peerDependencies:
746 | eslint: '*'
747 | typescript: '*'
748 | peerDependenciesMeta:
749 | typescript:
750 | optional: true
751 | dependencies:
752 | '@typescript-eslint/typescript-estree': 5.54.0(typescript@4.9.5)
753 | '@typescript-eslint/utils': 5.54.0(eslint@8.35.0)(typescript@4.9.5)
754 | debug: 4.3.4
755 | eslint: 8.35.0
756 | tsutils: 3.21.0(typescript@4.9.5)
757 | typescript: 4.9.5
758 | transitivePeerDependencies:
759 | - supports-color
760 | dev: true
761 |
762 | /@typescript-eslint/types@5.54.0:
763 | resolution: {integrity: sha512-nExy+fDCBEgqblasfeE3aQ3NuafBUxZxgxXcYfzYRZFHdVvk5q60KhCSkG0noHgHRo/xQ/BOzURLZAafFpTkmQ==}
764 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
765 | dev: true
766 |
767 | /@typescript-eslint/typescript-estree@5.54.0(typescript@4.9.5):
768 | resolution: {integrity: sha512-X2rJG97Wj/VRo5YxJ8Qx26Zqf0RRKsVHd4sav8NElhbZzhpBI8jU54i6hfo9eheumj4oO4dcRN1B/zIVEqR/MQ==}
769 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
770 | peerDependencies:
771 | typescript: '*'
772 | peerDependenciesMeta:
773 | typescript:
774 | optional: true
775 | dependencies:
776 | '@typescript-eslint/types': 5.54.0
777 | '@typescript-eslint/visitor-keys': 5.54.0
778 | debug: 4.3.4
779 | globby: 11.1.0
780 | is-glob: 4.0.3
781 | semver: 7.3.8
782 | tsutils: 3.21.0(typescript@4.9.5)
783 | typescript: 4.9.5
784 | transitivePeerDependencies:
785 | - supports-color
786 | dev: true
787 |
788 | /@typescript-eslint/utils@5.54.0(eslint@8.35.0)(typescript@4.9.5):
789 | resolution: {integrity: sha512-cuwm8D/Z/7AuyAeJ+T0r4WZmlnlxQ8wt7C7fLpFlKMR+dY6QO79Cq1WpJhvZbMA4ZeZGHiRWnht7ZJ8qkdAunw==}
790 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
791 | peerDependencies:
792 | eslint: ^6.0.0 || ^7.0.0 || ^8.0.0
793 | dependencies:
794 | '@types/json-schema': 7.0.11
795 | '@types/semver': 7.3.13
796 | '@typescript-eslint/scope-manager': 5.54.0
797 | '@typescript-eslint/types': 5.54.0
798 | '@typescript-eslint/typescript-estree': 5.54.0(typescript@4.9.5)
799 | eslint: 8.35.0
800 | eslint-scope: 5.1.1
801 | eslint-utils: 3.0.0(eslint@8.35.0)
802 | semver: 7.3.8
803 | transitivePeerDependencies:
804 | - supports-color
805 | - typescript
806 | dev: true
807 |
808 | /@typescript-eslint/visitor-keys@5.54.0:
809 | resolution: {integrity: sha512-xu4wT7aRCakGINTLGeyGqDn+78BwFlggwBjnHa1ar/KaGagnmwLYmlrXIrgAaQ3AE1Vd6nLfKASm7LrFHNbKGA==}
810 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
811 | dependencies:
812 | '@typescript-eslint/types': 5.54.0
813 | eslint-visitor-keys: 3.3.0
814 | dev: true
815 |
816 | /@vitest/coverage-v8@0.34.6(vitest@0.34.6):
817 | resolution: {integrity: sha512-fivy/OK2d/EsJFoEoxHFEnNGTg+MmdZBAVK9Ka4qhXR2K3J0DS08vcGVwzDtXSuUMabLv4KtPcpSKkcMXFDViw==}
818 | peerDependencies:
819 | vitest: '>=0.32.0 <1'
820 | dependencies:
821 | '@ampproject/remapping': 2.2.1
822 | '@bcoe/v8-coverage': 0.2.3
823 | istanbul-lib-coverage: 3.2.0
824 | istanbul-lib-report: 3.0.1
825 | istanbul-lib-source-maps: 4.0.1
826 | istanbul-reports: 3.1.6
827 | magic-string: 0.30.4
828 | picocolors: 1.0.0
829 | std-env: 3.4.3
830 | test-exclude: 6.0.0
831 | v8-to-istanbul: 9.1.3
832 | vitest: 0.34.6(jsdom@22.1.0)
833 | transitivePeerDependencies:
834 | - supports-color
835 | dev: true
836 |
837 | /@vitest/expect@0.34.6:
838 | resolution: {integrity: sha512-QUzKpUQRc1qC7qdGo7rMK3AkETI7w18gTCUrsNnyjjJKYiuUB9+TQK3QnR1unhCnWRC0AbKv2omLGQDF/mIjOw==}
839 | dependencies:
840 | '@vitest/spy': 0.34.6
841 | '@vitest/utils': 0.34.6
842 | chai: 4.3.10
843 | dev: true
844 |
845 | /@vitest/runner@0.34.6:
846 | resolution: {integrity: sha512-1CUQgtJSLF47NnhN+F9X2ycxUP0kLHQ/JWvNHbeBfwW8CzEGgeskzNnHDyv1ieKTltuR6sdIHV+nmR6kPxQqzQ==}
847 | dependencies:
848 | '@vitest/utils': 0.34.6
849 | p-limit: 4.0.0
850 | pathe: 1.1.1
851 | dev: true
852 |
853 | /@vitest/snapshot@0.34.6:
854 | resolution: {integrity: sha512-B3OZqYn6k4VaN011D+ve+AA4whM4QkcwcrwaKwAbyyvS/NB1hCWjFIBQxAQQSQir9/RtyAAGuq+4RJmbn2dH4w==}
855 | dependencies:
856 | magic-string: 0.30.4
857 | pathe: 1.1.1
858 | pretty-format: 29.7.0
859 | dev: true
860 |
861 | /@vitest/spy@0.34.6:
862 | resolution: {integrity: sha512-xaCvneSaeBw/cz8ySmF7ZwGvL0lBjfvqc1LpQ/vcdHEvpLn3Ff1vAvjw+CoGn0802l++5L/pxb7whwcWAw+DUQ==}
863 | dependencies:
864 | tinyspy: 2.2.0
865 | dev: true
866 |
867 | /@vitest/utils@0.34.6:
868 | resolution: {integrity: sha512-IG5aDD8S6zlvloDsnzHw0Ut5xczlF+kv2BOTo+iXfPr54Yhi5qbVOgGB1hZaVq4iJ4C/MZ2J0y15IlsV/ZcI0A==}
869 | dependencies:
870 | diff-sequences: 29.6.3
871 | loupe: 2.3.6
872 | pretty-format: 29.7.0
873 | dev: true
874 |
875 | /abab@2.0.6:
876 | resolution: {integrity: sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==}
877 | dev: true
878 |
879 | /accept-language-parser@1.5.0:
880 | resolution: {integrity: sha512-QhyTbMLYo0BBGg1aWbeMG4ekWtds/31BrEU+DONOg/7ax23vxpL03Pb7/zBmha2v7vdD3AyzZVWBVGEZxKOXWw==}
881 | dev: false
882 |
883 | /acorn-jsx@5.3.2(acorn@8.11.2):
884 | resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==}
885 | peerDependencies:
886 | acorn: ^6.0.0 || ^7.0.0 || ^8.0.0
887 | dependencies:
888 | acorn: 8.11.2
889 | dev: true
890 |
891 | /acorn-jsx@5.3.2(acorn@8.8.2):
892 | resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==}
893 | peerDependencies:
894 | acorn: ^6.0.0 || ^7.0.0 || ^8.0.0
895 | dependencies:
896 | acorn: 8.8.2
897 | dev: true
898 |
899 | /acorn-walk@8.2.0:
900 | resolution: {integrity: sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==}
901 | engines: {node: '>=0.4.0'}
902 | dev: true
903 |
904 | /acorn@8.10.0:
905 | resolution: {integrity: sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==}
906 | engines: {node: '>=0.4.0'}
907 | hasBin: true
908 | dev: true
909 |
910 | /acorn@8.11.2:
911 | resolution: {integrity: sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==}
912 | engines: {node: '>=0.4.0'}
913 | hasBin: true
914 | dev: true
915 |
916 | /acorn@8.8.2:
917 | resolution: {integrity: sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==}
918 | engines: {node: '>=0.4.0'}
919 | hasBin: true
920 | dev: true
921 |
922 | /agent-base@6.0.2:
923 | resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==}
924 | engines: {node: '>= 6.0.0'}
925 | dependencies:
926 | debug: 4.3.4
927 | transitivePeerDependencies:
928 | - supports-color
929 | dev: true
930 |
931 | /ajv@6.12.6:
932 | resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==}
933 | dependencies:
934 | fast-deep-equal: 3.1.3
935 | fast-json-stable-stringify: 2.1.0
936 | json-schema-traverse: 0.4.1
937 | uri-js: 4.4.1
938 | dev: true
939 |
940 | /ansi-regex@5.0.1:
941 | resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
942 | engines: {node: '>=8'}
943 | dev: true
944 |
945 | /ansi-styles@3.2.1:
946 | resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==}
947 | engines: {node: '>=4'}
948 | dependencies:
949 | color-convert: 1.9.3
950 | dev: true
951 |
952 | /ansi-styles@4.3.0:
953 | resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
954 | engines: {node: '>=8'}
955 | dependencies:
956 | color-convert: 2.0.1
957 | dev: true
958 |
959 | /ansi-styles@5.2.0:
960 | resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==}
961 | engines: {node: '>=10'}
962 | dev: true
963 |
964 | /anymatch@3.1.3:
965 | resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==}
966 | engines: {node: '>= 8'}
967 | dependencies:
968 | normalize-path: 3.0.0
969 | picomatch: 2.3.1
970 | dev: true
971 |
972 | /argparse@2.0.1:
973 | resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
974 | dev: true
975 |
976 | /aria-query@5.1.3:
977 | resolution: {integrity: sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==}
978 | dependencies:
979 | deep-equal: 2.2.2
980 | dev: true
981 |
982 | /aria-query@5.3.0:
983 | resolution: {integrity: sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==}
984 | dependencies:
985 | dequal: 2.0.3
986 | dev: true
987 |
988 | /array-buffer-byte-length@1.0.0:
989 | resolution: {integrity: sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==}
990 | dependencies:
991 | call-bind: 1.0.2
992 | is-array-buffer: 3.0.2
993 | dev: true
994 |
995 | /array-union@2.1.0:
996 | resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==}
997 | engines: {node: '>=8'}
998 | dev: true
999 |
1000 | /assertion-error@1.1.0:
1001 | resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==}
1002 | dev: true
1003 |
1004 | /asynckit@0.4.0:
1005 | resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==}
1006 | dev: true
1007 |
1008 | /available-typed-arrays@1.0.5:
1009 | resolution: {integrity: sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==}
1010 | engines: {node: '>= 0.4'}
1011 | dev: true
1012 |
1013 | /axobject-query@3.2.1:
1014 | resolution: {integrity: sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg==}
1015 | dependencies:
1016 | dequal: 2.0.3
1017 | dev: true
1018 |
1019 | /balanced-match@1.0.2:
1020 | resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
1021 | dev: true
1022 |
1023 | /binary-extensions@2.2.0:
1024 | resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==}
1025 | engines: {node: '>=8'}
1026 | dev: true
1027 |
1028 | /brace-expansion@1.1.11:
1029 | resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
1030 | dependencies:
1031 | balanced-match: 1.0.2
1032 | concat-map: 0.0.1
1033 | dev: true
1034 |
1035 | /brace-expansion@2.0.1:
1036 | resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==}
1037 | dependencies:
1038 | balanced-match: 1.0.2
1039 | dev: true
1040 |
1041 | /braces@3.0.2:
1042 | resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==}
1043 | engines: {node: '>=8'}
1044 | dependencies:
1045 | fill-range: 7.0.1
1046 | dev: true
1047 |
1048 | /buffer-crc32@0.2.13:
1049 | resolution: {integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==}
1050 | dev: true
1051 |
1052 | /busboy@1.6.0:
1053 | resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==}
1054 | engines: {node: '>=10.16.0'}
1055 | dependencies:
1056 | streamsearch: 1.1.0
1057 | dev: true
1058 |
1059 | /cac@6.7.14:
1060 | resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==}
1061 | engines: {node: '>=8'}
1062 | dev: true
1063 |
1064 | /call-bind@1.0.2:
1065 | resolution: {integrity: sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==}
1066 | dependencies:
1067 | function-bind: 1.1.1
1068 | get-intrinsic: 1.2.1
1069 | dev: true
1070 |
1071 | /callsites@3.1.0:
1072 | resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==}
1073 | engines: {node: '>=6'}
1074 | dev: true
1075 |
1076 | /chai@4.3.10:
1077 | resolution: {integrity: sha512-0UXG04VuVbruMUYbJ6JctvH0YnC/4q3/AkT18q4NaITo91CUm0liMS9VqzT9vZhVQ/1eqPanMWjBM+Juhfb/9g==}
1078 | engines: {node: '>=4'}
1079 | dependencies:
1080 | assertion-error: 1.1.0
1081 | check-error: 1.0.3
1082 | deep-eql: 4.1.3
1083 | get-func-name: 2.0.2
1084 | loupe: 2.3.6
1085 | pathval: 1.1.1
1086 | type-detect: 4.0.8
1087 | dev: true
1088 |
1089 | /chalk@2.4.2:
1090 | resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==}
1091 | engines: {node: '>=4'}
1092 | dependencies:
1093 | ansi-styles: 3.2.1
1094 | escape-string-regexp: 1.0.5
1095 | supports-color: 5.5.0
1096 | dev: true
1097 |
1098 | /chalk@3.0.0:
1099 | resolution: {integrity: sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==}
1100 | engines: {node: '>=8'}
1101 | dependencies:
1102 | ansi-styles: 4.3.0
1103 | supports-color: 7.2.0
1104 | dev: true
1105 |
1106 | /chalk@4.1.2:
1107 | resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
1108 | engines: {node: '>=10'}
1109 | dependencies:
1110 | ansi-styles: 4.3.0
1111 | supports-color: 7.2.0
1112 | dev: true
1113 |
1114 | /check-error@1.0.3:
1115 | resolution: {integrity: sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==}
1116 | dependencies:
1117 | get-func-name: 2.0.2
1118 | dev: true
1119 |
1120 | /chokidar@3.5.3:
1121 | resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==}
1122 | engines: {node: '>= 8.10.0'}
1123 | dependencies:
1124 | anymatch: 3.1.3
1125 | braces: 3.0.2
1126 | glob-parent: 5.1.2
1127 | is-binary-path: 2.1.0
1128 | is-glob: 4.0.3
1129 | normalize-path: 3.0.0
1130 | readdirp: 3.6.0
1131 | optionalDependencies:
1132 | fsevents: 2.3.3
1133 | dev: true
1134 |
1135 | /code-red@1.0.4:
1136 | resolution: {integrity: sha512-7qJWqItLA8/VPVlKJlFXU+NBlo/qyfs39aJcuMT/2ere32ZqvF5OSxgdM5xOfJJ7O429gg2HM47y8v9P+9wrNw==}
1137 | dependencies:
1138 | '@jridgewell/sourcemap-codec': 1.4.15
1139 | '@types/estree': 1.0.1
1140 | acorn: 8.10.0
1141 | estree-walker: 3.0.3
1142 | periscopic: 3.1.0
1143 | dev: true
1144 |
1145 | /color-convert@1.9.3:
1146 | resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==}
1147 | dependencies:
1148 | color-name: 1.1.3
1149 | dev: true
1150 |
1151 | /color-convert@2.0.1:
1152 | resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
1153 | engines: {node: '>=7.0.0'}
1154 | dependencies:
1155 | color-name: 1.1.4
1156 | dev: true
1157 |
1158 | /color-name@1.1.3:
1159 | resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==}
1160 | dev: true
1161 |
1162 | /color-name@1.1.4:
1163 | resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
1164 | dev: true
1165 |
1166 | /combined-stream@1.0.8:
1167 | resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==}
1168 | engines: {node: '>= 0.8'}
1169 | dependencies:
1170 | delayed-stream: 1.0.0
1171 | dev: true
1172 |
1173 | /concat-map@0.0.1:
1174 | resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
1175 | dev: true
1176 |
1177 | /convert-source-map@2.0.0:
1178 | resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==}
1179 | dev: true
1180 |
1181 | /cookie@0.5.0:
1182 | resolution: {integrity: sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==}
1183 | engines: {node: '>= 0.6'}
1184 | dev: true
1185 |
1186 | /cross-fetch@3.1.6:
1187 | resolution: {integrity: sha512-riRvo06crlE8HiqOwIpQhxwdOk4fOeR7FVM/wXoxchFEqMNUjvbs3bfo4OTgMEMHzppd4DxFBDbyySj8Cv781g==}
1188 | dependencies:
1189 | node-fetch: 2.7.0
1190 | transitivePeerDependencies:
1191 | - encoding
1192 | dev: true
1193 |
1194 | /cross-spawn@7.0.3:
1195 | resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==}
1196 | engines: {node: '>= 8'}
1197 | dependencies:
1198 | path-key: 3.1.1
1199 | shebang-command: 2.0.0
1200 | which: 2.0.2
1201 | dev: true
1202 |
1203 | /css-tree@2.3.1:
1204 | resolution: {integrity: sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==}
1205 | engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0}
1206 | dependencies:
1207 | mdn-data: 2.0.30
1208 | source-map-js: 1.0.2
1209 | dev: true
1210 |
1211 | /css.escape@1.5.1:
1212 | resolution: {integrity: sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==}
1213 | dev: true
1214 |
1215 | /cssesc@3.0.0:
1216 | resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==}
1217 | engines: {node: '>=4'}
1218 | hasBin: true
1219 | dev: true
1220 |
1221 | /cssstyle@3.0.0:
1222 | resolution: {integrity: sha512-N4u2ABATi3Qplzf0hWbVCdjenim8F3ojEXpBDF5hBpjzW182MjNGLqfmQ0SkSPeQ+V86ZXgeH8aXj6kayd4jgg==}
1223 | engines: {node: '>=14'}
1224 | dependencies:
1225 | rrweb-cssom: 0.6.0
1226 | dev: true
1227 |
1228 | /data-urls@4.0.0:
1229 | resolution: {integrity: sha512-/mMTei/JXPqvFqQtfyTowxmJVwr2PVAeCcDxyFf6LhoOu/09TX2OX3kb2wzi4DMXcfj4OItwDOnhl5oziPnT6g==}
1230 | engines: {node: '>=14'}
1231 | dependencies:
1232 | abab: 2.0.6
1233 | whatwg-mimetype: 3.0.0
1234 | whatwg-url: 12.0.1
1235 | dev: true
1236 |
1237 | /debug@4.3.4:
1238 | resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==}
1239 | engines: {node: '>=6.0'}
1240 | peerDependencies:
1241 | supports-color: '*'
1242 | peerDependenciesMeta:
1243 | supports-color:
1244 | optional: true
1245 | dependencies:
1246 | ms: 2.1.2
1247 | dev: true
1248 |
1249 | /decimal.js@10.4.3:
1250 | resolution: {integrity: sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==}
1251 | dev: true
1252 |
1253 | /dedent-js@1.0.1:
1254 | resolution: {integrity: sha512-OUepMozQULMLUmhxS95Vudo0jb0UchLimi3+pQ2plj61Fcy8axbP9hbiD4Sz6DPqn6XG3kfmziVfQ1rSys5AJQ==}
1255 | dev: true
1256 |
1257 | /deep-eql@4.1.3:
1258 | resolution: {integrity: sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==}
1259 | engines: {node: '>=6'}
1260 | dependencies:
1261 | type-detect: 4.0.8
1262 | dev: true
1263 |
1264 | /deep-equal@2.2.2:
1265 | resolution: {integrity: sha512-xjVyBf0w5vH0I42jdAZzOKVldmPgSulmiyPRywoyq7HXC9qdgo17kxJE+rdnif5Tz6+pIrpJI8dCpMNLIGkUiA==}
1266 | dependencies:
1267 | array-buffer-byte-length: 1.0.0
1268 | call-bind: 1.0.2
1269 | es-get-iterator: 1.1.3
1270 | get-intrinsic: 1.2.1
1271 | is-arguments: 1.1.1
1272 | is-array-buffer: 3.0.2
1273 | is-date-object: 1.0.5
1274 | is-regex: 1.1.4
1275 | is-shared-array-buffer: 1.0.2
1276 | isarray: 2.0.5
1277 | object-is: 1.1.5
1278 | object-keys: 1.1.1
1279 | object.assign: 4.1.4
1280 | regexp.prototype.flags: 1.5.1
1281 | side-channel: 1.0.4
1282 | which-boxed-primitive: 1.0.2
1283 | which-collection: 1.0.1
1284 | which-typed-array: 1.1.11
1285 | dev: true
1286 |
1287 | /deep-is@0.1.4:
1288 | resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==}
1289 | dev: true
1290 |
1291 | /deepmerge@4.3.1:
1292 | resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==}
1293 | engines: {node: '>=0.10.0'}
1294 | dev: true
1295 |
1296 | /define-data-property@1.1.0:
1297 | resolution: {integrity: sha512-UzGwzcjyv3OtAvolTj1GoyNYzfFR+iqbGjcnBEENZVCpM4/Ng1yhGNvS3lR/xDS74Tb2wGG9WzNSNIOS9UVb2g==}
1298 | engines: {node: '>= 0.4'}
1299 | dependencies:
1300 | get-intrinsic: 1.2.1
1301 | gopd: 1.0.1
1302 | has-property-descriptors: 1.0.0
1303 | dev: true
1304 |
1305 | /define-properties@1.2.1:
1306 | resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==}
1307 | engines: {node: '>= 0.4'}
1308 | dependencies:
1309 | define-data-property: 1.1.0
1310 | has-property-descriptors: 1.0.0
1311 | object-keys: 1.1.1
1312 | dev: true
1313 |
1314 | /delayed-stream@1.0.0:
1315 | resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==}
1316 | engines: {node: '>=0.4.0'}
1317 | dev: true
1318 |
1319 | /dequal@2.0.3:
1320 | resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==}
1321 | engines: {node: '>=6'}
1322 | dev: true
1323 |
1324 | /detect-indent@6.1.0:
1325 | resolution: {integrity: sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==}
1326 | engines: {node: '>=8'}
1327 | dev: true
1328 |
1329 | /devalue@4.3.2:
1330 | resolution: {integrity: sha512-KqFl6pOgOW+Y6wJgu80rHpo2/3H07vr8ntR9rkkFIRETewbf5GaYYcakYfiKz89K+sLsuPkQIZaXDMjUObZwWg==}
1331 | dev: true
1332 |
1333 | /diff-sequences@29.6.3:
1334 | resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==}
1335 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
1336 | dev: true
1337 |
1338 | /dir-glob@3.0.1:
1339 | resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==}
1340 | engines: {node: '>=8'}
1341 | dependencies:
1342 | path-type: 4.0.0
1343 | dev: true
1344 |
1345 | /doctrine@3.0.0:
1346 | resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==}
1347 | engines: {node: '>=6.0.0'}
1348 | dependencies:
1349 | esutils: 2.0.3
1350 | dev: true
1351 |
1352 | /dom-accessibility-api@0.5.16:
1353 | resolution: {integrity: sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==}
1354 | dev: true
1355 |
1356 | /domexception@4.0.0:
1357 | resolution: {integrity: sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw==}
1358 | engines: {node: '>=12'}
1359 | dependencies:
1360 | webidl-conversions: 7.0.0
1361 | dev: true
1362 |
1363 | /entities@4.5.0:
1364 | resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==}
1365 | engines: {node: '>=0.12'}
1366 | dev: true
1367 |
1368 | /es-get-iterator@1.1.3:
1369 | resolution: {integrity: sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==}
1370 | dependencies:
1371 | call-bind: 1.0.2
1372 | get-intrinsic: 1.2.1
1373 | has-symbols: 1.0.3
1374 | is-arguments: 1.1.1
1375 | is-map: 2.0.2
1376 | is-set: 2.0.2
1377 | is-string: 1.0.7
1378 | isarray: 2.0.5
1379 | stop-iteration-iterator: 1.0.0
1380 | dev: true
1381 |
1382 | /es6-promise@3.3.1:
1383 | resolution: {integrity: sha512-SOp9Phqvqn7jtEUxPWdWfWoLmyt2VaJ6MpvP9Comy1MceMXqE6bxvaTu4iaxpYYPzhny28Lc+M87/c2cPK6lDg==}
1384 | dev: true
1385 |
1386 | /esbuild@0.16.17:
1387 | resolution: {integrity: sha512-G8LEkV0XzDMNwXKgM0Jwu3nY3lSTwSGY6XbxM9cr9+s0T/qSV1q1JVPBGzm3dcjhCic9+emZDmMffkwgPeOeLg==}
1388 | engines: {node: '>=12'}
1389 | hasBin: true
1390 | requiresBuild: true
1391 | optionalDependencies:
1392 | '@esbuild/android-arm': 0.16.17
1393 | '@esbuild/android-arm64': 0.16.17
1394 | '@esbuild/android-x64': 0.16.17
1395 | '@esbuild/darwin-arm64': 0.16.17
1396 | '@esbuild/darwin-x64': 0.16.17
1397 | '@esbuild/freebsd-arm64': 0.16.17
1398 | '@esbuild/freebsd-x64': 0.16.17
1399 | '@esbuild/linux-arm': 0.16.17
1400 | '@esbuild/linux-arm64': 0.16.17
1401 | '@esbuild/linux-ia32': 0.16.17
1402 | '@esbuild/linux-loong64': 0.16.17
1403 | '@esbuild/linux-mips64el': 0.16.17
1404 | '@esbuild/linux-ppc64': 0.16.17
1405 | '@esbuild/linux-riscv64': 0.16.17
1406 | '@esbuild/linux-s390x': 0.16.17
1407 | '@esbuild/linux-x64': 0.16.17
1408 | '@esbuild/netbsd-x64': 0.16.17
1409 | '@esbuild/openbsd-x64': 0.16.17
1410 | '@esbuild/sunos-x64': 0.16.17
1411 | '@esbuild/win32-arm64': 0.16.17
1412 | '@esbuild/win32-ia32': 0.16.17
1413 | '@esbuild/win32-x64': 0.16.17
1414 | dev: true
1415 |
1416 | /escape-string-regexp@1.0.5:
1417 | resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==}
1418 | engines: {node: '>=0.8.0'}
1419 | dev: true
1420 |
1421 | /escape-string-regexp@4.0.0:
1422 | resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
1423 | engines: {node: '>=10'}
1424 | dev: true
1425 |
1426 | /eslint-compat-utils@0.1.2(eslint@8.35.0):
1427 | resolution: {integrity: sha512-Jia4JDldWnFNIru1Ehx1H5s9/yxiRHY/TimCuUc0jNexew3cF1gI6CYZil1ociakfWO3rRqFjl1mskBblB3RYg==}
1428 | engines: {node: '>=12'}
1429 | peerDependencies:
1430 | eslint: '>=6.0.0'
1431 | dependencies:
1432 | eslint: 8.35.0
1433 | dev: true
1434 |
1435 | /eslint-config-prettier@8.6.0(eslint@8.35.0):
1436 | resolution: {integrity: sha512-bAF0eLpLVqP5oEVUFKpMA+NnRFICwn9X8B5jrR9FcqnYBuPbqWEjTEspPWMj5ye6czoSLDweCzSo3Ko7gGrZaA==}
1437 | hasBin: true
1438 | peerDependencies:
1439 | eslint: '>=7.0.0'
1440 | dependencies:
1441 | eslint: 8.35.0
1442 | dev: true
1443 |
1444 | /eslint-plugin-svelte@2.36.0-next.2(eslint@8.35.0)(svelte@4.2.0):
1445 | resolution: {integrity: sha512-CAvGRWAKN4zbkENpI0pxiORSfpRpp5qN+fUZCRKmahb3Axve7WoGvtoy1hzEpz8barNElUFXZ+zauAt421vvVA==}
1446 | engines: {node: ^14.17.0 || >=16.0.0}
1447 | peerDependencies:
1448 | eslint: ^7.0.0 || ^8.0.0-0
1449 | svelte: ^3.37.0 || ^4.0.0 || ^5.0.0-next.8
1450 | peerDependenciesMeta:
1451 | svelte:
1452 | optional: true
1453 | dependencies:
1454 | '@eslint-community/eslint-utils': 4.4.0(eslint@8.35.0)
1455 | '@jridgewell/sourcemap-codec': 1.4.15
1456 | debug: 4.3.4
1457 | eslint: 8.35.0
1458 | eslint-compat-utils: 0.1.2(eslint@8.35.0)
1459 | esutils: 2.0.3
1460 | known-css-properties: 0.29.0
1461 | postcss: 8.4.31
1462 | postcss-load-config: 3.1.4(postcss@8.4.31)
1463 | postcss-safe-parser: 6.0.0(postcss@8.4.31)
1464 | postcss-selector-parser: 6.0.13
1465 | semver: 7.5.4
1466 | svelte: 4.2.0
1467 | svelte-eslint-parser: 0.34.0-next.5(svelte@4.2.0)
1468 | transitivePeerDependencies:
1469 | - supports-color
1470 | - ts-node
1471 | dev: true
1472 |
1473 | /eslint-scope@5.1.1:
1474 | resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==}
1475 | engines: {node: '>=8.0.0'}
1476 | dependencies:
1477 | esrecurse: 4.3.0
1478 | estraverse: 4.3.0
1479 | dev: true
1480 |
1481 | /eslint-scope@7.1.1:
1482 | resolution: {integrity: sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==}
1483 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
1484 | dependencies:
1485 | esrecurse: 4.3.0
1486 | estraverse: 5.3.0
1487 | dev: true
1488 |
1489 | /eslint-scope@7.2.2:
1490 | resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==}
1491 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
1492 | dependencies:
1493 | esrecurse: 4.3.0
1494 | estraverse: 5.3.0
1495 | dev: true
1496 |
1497 | /eslint-utils@3.0.0(eslint@8.35.0):
1498 | resolution: {integrity: sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==}
1499 | engines: {node: ^10.0.0 || ^12.0.0 || >= 14.0.0}
1500 | peerDependencies:
1501 | eslint: '>=5'
1502 | dependencies:
1503 | eslint: 8.35.0
1504 | eslint-visitor-keys: 2.1.0
1505 | dev: true
1506 |
1507 | /eslint-visitor-keys@2.1.0:
1508 | resolution: {integrity: sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==}
1509 | engines: {node: '>=10'}
1510 | dev: true
1511 |
1512 | /eslint-visitor-keys@3.3.0:
1513 | resolution: {integrity: sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==}
1514 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
1515 | dev: true
1516 |
1517 | /eslint-visitor-keys@3.4.3:
1518 | resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==}
1519 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
1520 | dev: true
1521 |
1522 | /eslint@8.35.0:
1523 | resolution: {integrity: sha512-BxAf1fVL7w+JLRQhWl2pzGeSiGqbWumV4WNvc9Rhp6tiCtm4oHnyPBSEtMGZwrQgudFQ+otqzWoPB7x+hxoWsw==}
1524 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
1525 | hasBin: true
1526 | dependencies:
1527 | '@eslint/eslintrc': 2.0.0
1528 | '@eslint/js': 8.35.0
1529 | '@humanwhocodes/config-array': 0.11.8
1530 | '@humanwhocodes/module-importer': 1.0.1
1531 | '@nodelib/fs.walk': 1.2.8
1532 | ajv: 6.12.6
1533 | chalk: 4.1.2
1534 | cross-spawn: 7.0.3
1535 | debug: 4.3.4
1536 | doctrine: 3.0.0
1537 | escape-string-regexp: 4.0.0
1538 | eslint-scope: 7.1.1
1539 | eslint-utils: 3.0.0(eslint@8.35.0)
1540 | eslint-visitor-keys: 3.3.0
1541 | espree: 9.4.1
1542 | esquery: 1.4.2
1543 | esutils: 2.0.3
1544 | fast-deep-equal: 3.1.3
1545 | file-entry-cache: 6.0.1
1546 | find-up: 5.0.0
1547 | glob-parent: 6.0.2
1548 | globals: 13.20.0
1549 | grapheme-splitter: 1.0.4
1550 | ignore: 5.2.4
1551 | import-fresh: 3.3.0
1552 | imurmurhash: 0.1.4
1553 | is-glob: 4.0.3
1554 | is-path-inside: 3.0.3
1555 | js-sdsl: 4.3.0
1556 | js-yaml: 4.1.0
1557 | json-stable-stringify-without-jsonify: 1.0.1
1558 | levn: 0.4.1
1559 | lodash.merge: 4.6.2
1560 | minimatch: 3.1.2
1561 | natural-compare: 1.4.0
1562 | optionator: 0.9.1
1563 | regexpp: 3.2.0
1564 | strip-ansi: 6.0.1
1565 | strip-json-comments: 3.1.1
1566 | text-table: 0.2.0
1567 | transitivePeerDependencies:
1568 | - supports-color
1569 | dev: true
1570 |
1571 | /esm-env@1.0.0:
1572 | resolution: {integrity: sha512-Cf6VksWPsTuW01vU9Mk/3vRue91Zevka5SjyNf3nEpokFRuqt/KjUQoGAwq9qMmhpLTHmXzSIrFRw8zxWzmFBA==}
1573 | dev: true
1574 |
1575 | /espree@9.4.1:
1576 | resolution: {integrity: sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg==}
1577 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
1578 | dependencies:
1579 | acorn: 8.8.2
1580 | acorn-jsx: 5.3.2(acorn@8.8.2)
1581 | eslint-visitor-keys: 3.3.0
1582 | dev: true
1583 |
1584 | /espree@9.6.1:
1585 | resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==}
1586 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
1587 | dependencies:
1588 | acorn: 8.11.2
1589 | acorn-jsx: 5.3.2(acorn@8.11.2)
1590 | eslint-visitor-keys: 3.4.3
1591 | dev: true
1592 |
1593 | /esquery@1.4.2:
1594 | resolution: {integrity: sha512-JVSoLdTlTDkmjFmab7H/9SL9qGSyjElT3myyKp7krqjVFQCDLmj1QFaCLRFBszBKI0XVZaiiXvuPIX3ZwHe1Ng==}
1595 | engines: {node: '>=0.10'}
1596 | dependencies:
1597 | estraverse: 5.3.0
1598 | dev: true
1599 |
1600 | /esrecurse@4.3.0:
1601 | resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==}
1602 | engines: {node: '>=4.0'}
1603 | dependencies:
1604 | estraverse: 5.3.0
1605 | dev: true
1606 |
1607 | /estraverse@4.3.0:
1608 | resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==}
1609 | engines: {node: '>=4.0'}
1610 | dev: true
1611 |
1612 | /estraverse@5.3.0:
1613 | resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==}
1614 | engines: {node: '>=4.0'}
1615 | dev: true
1616 |
1617 | /estree-walker@3.0.3:
1618 | resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==}
1619 | dependencies:
1620 | '@types/estree': 1.0.1
1621 | dev: true
1622 |
1623 | /esutils@2.0.3:
1624 | resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==}
1625 | engines: {node: '>=0.10.0'}
1626 | dev: true
1627 |
1628 | /fast-deep-equal@3.1.3:
1629 | resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==}
1630 | dev: true
1631 |
1632 | /fast-glob@3.2.12:
1633 | resolution: {integrity: sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==}
1634 | engines: {node: '>=8.6.0'}
1635 | dependencies:
1636 | '@nodelib/fs.stat': 2.0.5
1637 | '@nodelib/fs.walk': 1.2.8
1638 | glob-parent: 5.1.2
1639 | merge2: 1.4.1
1640 | micromatch: 4.0.5
1641 | dev: true
1642 |
1643 | /fast-json-stable-stringify@2.1.0:
1644 | resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==}
1645 | dev: true
1646 |
1647 | /fast-levenshtein@2.0.6:
1648 | resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==}
1649 | dev: true
1650 |
1651 | /fastq@1.15.0:
1652 | resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==}
1653 | dependencies:
1654 | reusify: 1.0.4
1655 | dev: true
1656 |
1657 | /file-entry-cache@6.0.1:
1658 | resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==}
1659 | engines: {node: ^10.12.0 || >=12.0.0}
1660 | dependencies:
1661 | flat-cache: 3.0.4
1662 | dev: true
1663 |
1664 | /fill-range@7.0.1:
1665 | resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==}
1666 | engines: {node: '>=8'}
1667 | dependencies:
1668 | to-regex-range: 5.0.1
1669 | dev: true
1670 |
1671 | /find-up@5.0.0:
1672 | resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==}
1673 | engines: {node: '>=10'}
1674 | dependencies:
1675 | locate-path: 6.0.0
1676 | path-exists: 4.0.0
1677 | dev: true
1678 |
1679 | /flat-cache@3.0.4:
1680 | resolution: {integrity: sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==}
1681 | engines: {node: ^10.12.0 || >=12.0.0}
1682 | dependencies:
1683 | flatted: 3.2.7
1684 | rimraf: 3.0.2
1685 | dev: true
1686 |
1687 | /flatted@3.2.7:
1688 | resolution: {integrity: sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==}
1689 | dev: true
1690 |
1691 | /for-each@0.3.3:
1692 | resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==}
1693 | dependencies:
1694 | is-callable: 1.2.7
1695 | dev: true
1696 |
1697 | /form-data@4.0.0:
1698 | resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==}
1699 | engines: {node: '>= 6'}
1700 | dependencies:
1701 | asynckit: 0.4.0
1702 | combined-stream: 1.0.8
1703 | mime-types: 2.1.35
1704 | dev: true
1705 |
1706 | /fs.realpath@1.0.0:
1707 | resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==}
1708 | dev: true
1709 |
1710 | /fsevents@2.3.3:
1711 | resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
1712 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
1713 | os: [darwin]
1714 | requiresBuild: true
1715 | dev: true
1716 | optional: true
1717 |
1718 | /function-bind@1.1.1:
1719 | resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==}
1720 | dev: true
1721 |
1722 | /functions-have-names@1.2.3:
1723 | resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==}
1724 | dev: true
1725 |
1726 | /get-func-name@2.0.2:
1727 | resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==}
1728 | dev: true
1729 |
1730 | /get-intrinsic@1.2.1:
1731 | resolution: {integrity: sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==}
1732 | dependencies:
1733 | function-bind: 1.1.1
1734 | has: 1.0.3
1735 | has-proto: 1.0.1
1736 | has-symbols: 1.0.3
1737 | dev: true
1738 |
1739 | /glob-parent@5.1.2:
1740 | resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
1741 | engines: {node: '>= 6'}
1742 | dependencies:
1743 | is-glob: 4.0.3
1744 | dev: true
1745 |
1746 | /glob-parent@6.0.2:
1747 | resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==}
1748 | engines: {node: '>=10.13.0'}
1749 | dependencies:
1750 | is-glob: 4.0.3
1751 | dev: true
1752 |
1753 | /glob@7.2.3:
1754 | resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==}
1755 | dependencies:
1756 | fs.realpath: 1.0.0
1757 | inflight: 1.0.6
1758 | inherits: 2.0.4
1759 | minimatch: 3.1.2
1760 | once: 1.4.0
1761 | path-is-absolute: 1.0.1
1762 | dev: true
1763 |
1764 | /glob@8.1.0:
1765 | resolution: {integrity: sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==}
1766 | engines: {node: '>=12'}
1767 | dependencies:
1768 | fs.realpath: 1.0.0
1769 | inflight: 1.0.6
1770 | inherits: 2.0.4
1771 | minimatch: 5.1.6
1772 | once: 1.4.0
1773 | dev: true
1774 |
1775 | /globals@13.20.0:
1776 | resolution: {integrity: sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==}
1777 | engines: {node: '>=8'}
1778 | dependencies:
1779 | type-fest: 0.20.2
1780 | dev: true
1781 |
1782 | /globalyzer@0.1.0:
1783 | resolution: {integrity: sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q==}
1784 | dev: true
1785 |
1786 | /globby@11.1.0:
1787 | resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==}
1788 | engines: {node: '>=10'}
1789 | dependencies:
1790 | array-union: 2.1.0
1791 | dir-glob: 3.0.1
1792 | fast-glob: 3.2.12
1793 | ignore: 5.2.4
1794 | merge2: 1.4.1
1795 | slash: 3.0.0
1796 | dev: true
1797 |
1798 | /globrex@0.1.2:
1799 | resolution: {integrity: sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==}
1800 | dev: true
1801 |
1802 | /gopd@1.0.1:
1803 | resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==}
1804 | dependencies:
1805 | get-intrinsic: 1.2.1
1806 | dev: true
1807 |
1808 | /graceful-fs@4.2.11:
1809 | resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==}
1810 | dev: true
1811 |
1812 | /grapheme-splitter@1.0.4:
1813 | resolution: {integrity: sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==}
1814 | dev: true
1815 |
1816 | /has-bigints@1.0.2:
1817 | resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==}
1818 | dev: true
1819 |
1820 | /has-flag@3.0.0:
1821 | resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==}
1822 | engines: {node: '>=4'}
1823 | dev: true
1824 |
1825 | /has-flag@4.0.0:
1826 | resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
1827 | engines: {node: '>=8'}
1828 | dev: true
1829 |
1830 | /has-property-descriptors@1.0.0:
1831 | resolution: {integrity: sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==}
1832 | dependencies:
1833 | get-intrinsic: 1.2.1
1834 | dev: true
1835 |
1836 | /has-proto@1.0.1:
1837 | resolution: {integrity: sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==}
1838 | engines: {node: '>= 0.4'}
1839 | dev: true
1840 |
1841 | /has-symbols@1.0.3:
1842 | resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==}
1843 | engines: {node: '>= 0.4'}
1844 | dev: true
1845 |
1846 | /has-tostringtag@1.0.0:
1847 | resolution: {integrity: sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==}
1848 | engines: {node: '>= 0.4'}
1849 | dependencies:
1850 | has-symbols: 1.0.3
1851 | dev: true
1852 |
1853 | /has@1.0.3:
1854 | resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==}
1855 | engines: {node: '>= 0.4.0'}
1856 | dependencies:
1857 | function-bind: 1.1.1
1858 | dev: true
1859 |
1860 | /html-encoding-sniffer@3.0.0:
1861 | resolution: {integrity: sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==}
1862 | engines: {node: '>=12'}
1863 | dependencies:
1864 | whatwg-encoding: 2.0.0
1865 | dev: true
1866 |
1867 | /html-escaper@2.0.2:
1868 | resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==}
1869 | dev: true
1870 |
1871 | /http-proxy-agent@5.0.0:
1872 | resolution: {integrity: sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==}
1873 | engines: {node: '>= 6'}
1874 | dependencies:
1875 | '@tootallnate/once': 2.0.0
1876 | agent-base: 6.0.2
1877 | debug: 4.3.4
1878 | transitivePeerDependencies:
1879 | - supports-color
1880 | dev: true
1881 |
1882 | /https-proxy-agent@5.0.1:
1883 | resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==}
1884 | engines: {node: '>= 6'}
1885 | dependencies:
1886 | agent-base: 6.0.2
1887 | debug: 4.3.4
1888 | transitivePeerDependencies:
1889 | - supports-color
1890 | dev: true
1891 |
1892 | /i18next-browser-languagedetector@7.1.0:
1893 | resolution: {integrity: sha512-cr2k7u1XJJ4HTOjM9GyOMtbOA47RtUoWRAtt52z43r3AoMs2StYKyjS3URPhzHaf+mn10hY9dZWamga5WPQjhA==}
1894 | dependencies:
1895 | '@babel/runtime': 7.21.0
1896 | dev: true
1897 |
1898 | /i18next-fs-backend@2.2.0:
1899 | resolution: {integrity: sha512-VOPHhdDX0M/csRqEw+9Ectpf6wvTIg1MZDfAHxc3JKnAlJz7fcZSAKAeyDohOq0xuLx57esYpJopIvBaRb0Bag==}
1900 | dev: true
1901 |
1902 | /i18next-http-backend@2.2.2:
1903 | resolution: {integrity: sha512-mJu4ZqzDtBiU3O4GV9AbK5ekEqoDMdMnCl3pkdXmb5b8yoIH//u8FsmIe6C5qXb3teZu+j6VMi20tjUgzeABiw==}
1904 | dependencies:
1905 | cross-fetch: 3.1.6
1906 | transitivePeerDependencies:
1907 | - encoding
1908 | dev: true
1909 |
1910 | /i18next@22.5.1:
1911 | resolution: {integrity: sha512-8TGPgM3pAD+VRsMtUMNknRz3kzqwp/gPALrWMsDnmC1mKqJwpWyooQRLMcbTwq8z8YwSmuj+ZYvc+xCuEpkssA==}
1912 | dependencies:
1913 | '@babel/runtime': 7.21.0
1914 | dev: true
1915 |
1916 | /iconv-lite@0.6.3:
1917 | resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==}
1918 | engines: {node: '>=0.10.0'}
1919 | dependencies:
1920 | safer-buffer: 2.1.2
1921 | dev: true
1922 |
1923 | /ignore-walk@5.0.1:
1924 | resolution: {integrity: sha512-yemi4pMf51WKT7khInJqAvsIGzoqYXblnsz0ql8tM+yi1EKYTY1evX4NAbJrLL/Aanr2HyZeluqU+Oi7MGHokw==}
1925 | engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0}
1926 | dependencies:
1927 | minimatch: 5.1.6
1928 | dev: true
1929 |
1930 | /ignore@5.2.4:
1931 | resolution: {integrity: sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==}
1932 | engines: {node: '>= 4'}
1933 | dev: true
1934 |
1935 | /import-fresh@3.3.0:
1936 | resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==}
1937 | engines: {node: '>=6'}
1938 | dependencies:
1939 | parent-module: 1.0.1
1940 | resolve-from: 4.0.0
1941 | dev: true
1942 |
1943 | /import-meta-resolve@2.2.1:
1944 | resolution: {integrity: sha512-C6lLL7EJPY44kBvA80gq4uMsVFw5x3oSKfuMl1cuZ2RkI5+UJqQXgn+6hlUew0y4ig7Ypt4CObAAIzU53Nfpuw==}
1945 | dev: true
1946 |
1947 | /imurmurhash@0.1.4:
1948 | resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==}
1949 | engines: {node: '>=0.8.19'}
1950 | dev: true
1951 |
1952 | /indent-string@4.0.0:
1953 | resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==}
1954 | engines: {node: '>=8'}
1955 | dev: true
1956 |
1957 | /inflight@1.0.6:
1958 | resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==}
1959 | dependencies:
1960 | once: 1.4.0
1961 | wrappy: 1.0.2
1962 | dev: true
1963 |
1964 | /inherits@2.0.4:
1965 | resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
1966 | dev: true
1967 |
1968 | /internal-slot@1.0.5:
1969 | resolution: {integrity: sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==}
1970 | engines: {node: '>= 0.4'}
1971 | dependencies:
1972 | get-intrinsic: 1.2.1
1973 | has: 1.0.3
1974 | side-channel: 1.0.4
1975 | dev: true
1976 |
1977 | /intl-parse-accept-language@1.0.0:
1978 | resolution: {integrity: sha512-YFMSV91JNBOSjw1cOfw2tup6hDP7mkz+2AUV7W1L1AM6ntgI75qC1ZeFpjPGMrWp+upmBRTX2fJWQ8c7jsUWpA==}
1979 | engines: {node: '>=14'}
1980 | dev: false
1981 |
1982 | /is-arguments@1.1.1:
1983 | resolution: {integrity: sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==}
1984 | engines: {node: '>= 0.4'}
1985 | dependencies:
1986 | call-bind: 1.0.2
1987 | has-tostringtag: 1.0.0
1988 | dev: true
1989 |
1990 | /is-array-buffer@3.0.2:
1991 | resolution: {integrity: sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==}
1992 | dependencies:
1993 | call-bind: 1.0.2
1994 | get-intrinsic: 1.2.1
1995 | is-typed-array: 1.1.12
1996 | dev: true
1997 |
1998 | /is-bigint@1.0.4:
1999 | resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==}
2000 | dependencies:
2001 | has-bigints: 1.0.2
2002 | dev: true
2003 |
2004 | /is-binary-path@2.1.0:
2005 | resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==}
2006 | engines: {node: '>=8'}
2007 | dependencies:
2008 | binary-extensions: 2.2.0
2009 | dev: true
2010 |
2011 | /is-boolean-object@1.1.2:
2012 | resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==}
2013 | engines: {node: '>= 0.4'}
2014 | dependencies:
2015 | call-bind: 1.0.2
2016 | has-tostringtag: 1.0.0
2017 | dev: true
2018 |
2019 | /is-callable@1.2.7:
2020 | resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==}
2021 | engines: {node: '>= 0.4'}
2022 | dev: true
2023 |
2024 | /is-core-module@2.11.0:
2025 | resolution: {integrity: sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==}
2026 | dependencies:
2027 | has: 1.0.3
2028 | dev: true
2029 |
2030 | /is-date-object@1.0.5:
2031 | resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==}
2032 | engines: {node: '>= 0.4'}
2033 | dependencies:
2034 | has-tostringtag: 1.0.0
2035 | dev: true
2036 |
2037 | /is-extglob@2.1.1:
2038 | resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
2039 | engines: {node: '>=0.10.0'}
2040 | dev: true
2041 |
2042 | /is-glob@4.0.3:
2043 | resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
2044 | engines: {node: '>=0.10.0'}
2045 | dependencies:
2046 | is-extglob: 2.1.1
2047 | dev: true
2048 |
2049 | /is-map@2.0.2:
2050 | resolution: {integrity: sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==}
2051 | dev: true
2052 |
2053 | /is-number-object@1.0.7:
2054 | resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==}
2055 | engines: {node: '>= 0.4'}
2056 | dependencies:
2057 | has-tostringtag: 1.0.0
2058 | dev: true
2059 |
2060 | /is-number@7.0.0:
2061 | resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
2062 | engines: {node: '>=0.12.0'}
2063 | dev: true
2064 |
2065 | /is-path-inside@3.0.3:
2066 | resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==}
2067 | engines: {node: '>=8'}
2068 | dev: true
2069 |
2070 | /is-potential-custom-element-name@1.0.1:
2071 | resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==}
2072 | dev: true
2073 |
2074 | /is-reference@3.0.2:
2075 | resolution: {integrity: sha512-v3rht/LgVcsdZa3O2Nqs+NMowLOxeOm7Ay9+/ARQ2F+qEoANRcqrjAZKGN0v8ymUetZGgkp26LTnGT7H0Qo9Pg==}
2076 | dependencies:
2077 | '@types/estree': 1.0.1
2078 | dev: true
2079 |
2080 | /is-regex@1.1.4:
2081 | resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==}
2082 | engines: {node: '>= 0.4'}
2083 | dependencies:
2084 | call-bind: 1.0.2
2085 | has-tostringtag: 1.0.0
2086 | dev: true
2087 |
2088 | /is-set@2.0.2:
2089 | resolution: {integrity: sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==}
2090 | dev: true
2091 |
2092 | /is-shared-array-buffer@1.0.2:
2093 | resolution: {integrity: sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==}
2094 | dependencies:
2095 | call-bind: 1.0.2
2096 | dev: true
2097 |
2098 | /is-string@1.0.7:
2099 | resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==}
2100 | engines: {node: '>= 0.4'}
2101 | dependencies:
2102 | has-tostringtag: 1.0.0
2103 | dev: true
2104 |
2105 | /is-symbol@1.0.4:
2106 | resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==}
2107 | engines: {node: '>= 0.4'}
2108 | dependencies:
2109 | has-symbols: 1.0.3
2110 | dev: true
2111 |
2112 | /is-typed-array@1.1.12:
2113 | resolution: {integrity: sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==}
2114 | engines: {node: '>= 0.4'}
2115 | dependencies:
2116 | which-typed-array: 1.1.11
2117 | dev: true
2118 |
2119 | /is-weakmap@2.0.1:
2120 | resolution: {integrity: sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==}
2121 | dev: true
2122 |
2123 | /is-weakset@2.0.2:
2124 | resolution: {integrity: sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==}
2125 | dependencies:
2126 | call-bind: 1.0.2
2127 | get-intrinsic: 1.2.1
2128 | dev: true
2129 |
2130 | /isarray@2.0.5:
2131 | resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==}
2132 | dev: true
2133 |
2134 | /isexe@2.0.0:
2135 | resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
2136 | dev: true
2137 |
2138 | /istanbul-lib-coverage@3.2.0:
2139 | resolution: {integrity: sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==}
2140 | engines: {node: '>=8'}
2141 | dev: true
2142 |
2143 | /istanbul-lib-report@3.0.1:
2144 | resolution: {integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==}
2145 | engines: {node: '>=10'}
2146 | dependencies:
2147 | istanbul-lib-coverage: 3.2.0
2148 | make-dir: 4.0.0
2149 | supports-color: 7.2.0
2150 | dev: true
2151 |
2152 | /istanbul-lib-source-maps@4.0.1:
2153 | resolution: {integrity: sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==}
2154 | engines: {node: '>=10'}
2155 | dependencies:
2156 | debug: 4.3.4
2157 | istanbul-lib-coverage: 3.2.0
2158 | source-map: 0.6.1
2159 | transitivePeerDependencies:
2160 | - supports-color
2161 | dev: true
2162 |
2163 | /istanbul-reports@3.1.6:
2164 | resolution: {integrity: sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg==}
2165 | engines: {node: '>=8'}
2166 | dependencies:
2167 | html-escaper: 2.0.2
2168 | istanbul-lib-report: 3.0.1
2169 | dev: true
2170 |
2171 | /js-sdsl@4.3.0:
2172 | resolution: {integrity: sha512-mifzlm2+5nZ+lEcLJMoBK0/IH/bDg8XnJfd/Wq6IP+xoCjLZsTOnV2QpxlVbX9bMnkl5PdEjNtBJ9Cj1NjifhQ==}
2173 | dev: true
2174 |
2175 | /js-tokens@4.0.0:
2176 | resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
2177 | dev: true
2178 |
2179 | /js-yaml@4.1.0:
2180 | resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==}
2181 | hasBin: true
2182 | dependencies:
2183 | argparse: 2.0.1
2184 | dev: true
2185 |
2186 | /jsdom@22.1.0:
2187 | resolution: {integrity: sha512-/9AVW7xNbsBv6GfWho4TTNjEo9fe6Zhf9O7s0Fhhr3u+awPwAJMKwAMXnkk5vBxflqLW9hTHX/0cs+P3gW+cQw==}
2188 | engines: {node: '>=16'}
2189 | peerDependencies:
2190 | canvas: ^2.5.0
2191 | peerDependenciesMeta:
2192 | canvas:
2193 | optional: true
2194 | dependencies:
2195 | abab: 2.0.6
2196 | cssstyle: 3.0.0
2197 | data-urls: 4.0.0
2198 | decimal.js: 10.4.3
2199 | domexception: 4.0.0
2200 | form-data: 4.0.0
2201 | html-encoding-sniffer: 3.0.0
2202 | http-proxy-agent: 5.0.0
2203 | https-proxy-agent: 5.0.1
2204 | is-potential-custom-element-name: 1.0.1
2205 | nwsapi: 2.2.7
2206 | parse5: 7.1.2
2207 | rrweb-cssom: 0.6.0
2208 | saxes: 6.0.0
2209 | symbol-tree: 3.2.4
2210 | tough-cookie: 4.1.3
2211 | w3c-xmlserializer: 4.0.0
2212 | webidl-conversions: 7.0.0
2213 | whatwg-encoding: 2.0.0
2214 | whatwg-mimetype: 3.0.0
2215 | whatwg-url: 12.0.1
2216 | ws: 8.14.2
2217 | xml-name-validator: 4.0.0
2218 | transitivePeerDependencies:
2219 | - bufferutil
2220 | - supports-color
2221 | - utf-8-validate
2222 | dev: true
2223 |
2224 | /json-schema-traverse@0.4.1:
2225 | resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==}
2226 | dev: true
2227 |
2228 | /json-stable-stringify-without-jsonify@1.0.1:
2229 | resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==}
2230 | dev: true
2231 |
2232 | /jsonc-parser@3.2.0:
2233 | resolution: {integrity: sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==}
2234 | dev: true
2235 |
2236 | /kleur@4.1.5:
2237 | resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==}
2238 | engines: {node: '>=6'}
2239 | dev: true
2240 |
2241 | /known-css-properties@0.29.0:
2242 | resolution: {integrity: sha512-Ne7wqW7/9Cz54PDt4I3tcV+hAyat8ypyOGzYRJQfdxnnjeWsTxt1cy8pjvvKeI5kfXuyvULyeeAvwvvtAX3ayQ==}
2243 | dev: true
2244 |
2245 | /levn@0.4.1:
2246 | resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==}
2247 | engines: {node: '>= 0.8.0'}
2248 | dependencies:
2249 | prelude-ls: 1.2.1
2250 | type-check: 0.4.0
2251 | dev: true
2252 |
2253 | /lilconfig@2.1.0:
2254 | resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==}
2255 | engines: {node: '>=10'}
2256 | dev: true
2257 |
2258 | /local-pkg@0.4.3:
2259 | resolution: {integrity: sha512-SFppqq5p42fe2qcZQqqEOiVRXl+WCP1MdT6k7BDEW1j++sp5fIY+/fdRQitvKgB5BrBcmrs5m/L0v2FrU5MY1g==}
2260 | engines: {node: '>=14'}
2261 | dev: true
2262 |
2263 | /locate-character@3.0.0:
2264 | resolution: {integrity: sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA==}
2265 | dev: true
2266 |
2267 | /locate-path@6.0.0:
2268 | resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==}
2269 | engines: {node: '>=10'}
2270 | dependencies:
2271 | p-locate: 5.0.0
2272 | dev: true
2273 |
2274 | /lodash.merge@4.6.2:
2275 | resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==}
2276 | dev: true
2277 |
2278 | /lodash@4.17.21:
2279 | resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==}
2280 | dev: true
2281 |
2282 | /loupe@2.3.6:
2283 | resolution: {integrity: sha512-RaPMZKiMy8/JruncMU5Bt6na1eftNoo++R4Y+N2FrxkDVTrGvcyzFTsaGif4QTeKESheMGegbhw6iUAq+5A8zA==}
2284 | dependencies:
2285 | get-func-name: 2.0.2
2286 | dev: true
2287 |
2288 | /lower-case@2.0.2:
2289 | resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==}
2290 | dependencies:
2291 | tslib: 2.5.0
2292 | dev: true
2293 |
2294 | /lru-cache@6.0.0:
2295 | resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==}
2296 | engines: {node: '>=10'}
2297 | dependencies:
2298 | yallist: 4.0.0
2299 | dev: true
2300 |
2301 | /lz-string@1.5.0:
2302 | resolution: {integrity: sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==}
2303 | hasBin: true
2304 | dev: true
2305 |
2306 | /magic-string@0.27.0:
2307 | resolution: {integrity: sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA==}
2308 | engines: {node: '>=12'}
2309 | dependencies:
2310 | '@jridgewell/sourcemap-codec': 1.4.15
2311 | dev: true
2312 |
2313 | /magic-string@0.30.0:
2314 | resolution: {integrity: sha512-LA+31JYDJLs82r2ScLrlz1GjSgu66ZV518eyWT+S8VhyQn/JL0u9MeBOvQMGYiPk1DBiSN9DDMOcXvigJZaViQ==}
2315 | engines: {node: '>=12'}
2316 | dependencies:
2317 | '@jridgewell/sourcemap-codec': 1.4.14
2318 | dev: true
2319 |
2320 | /magic-string@0.30.3:
2321 | resolution: {integrity: sha512-B7xGbll2fG/VjP+SWg4sX3JynwIU0mjoTc6MPpKNuIvftk6u6vqhDnk1R80b8C2GBR6ywqy+1DcKBrevBg+bmw==}
2322 | engines: {node: '>=12'}
2323 | dependencies:
2324 | '@jridgewell/sourcemap-codec': 1.4.15
2325 | dev: true
2326 |
2327 | /magic-string@0.30.4:
2328 | resolution: {integrity: sha512-Q/TKtsC5BPm0kGqgBIF9oXAs/xEf2vRKiIB4wCRQTJOQIByZ1d+NnUOotvJOvNpi5RNIgVOMC3pOuaP1ZTDlVg==}
2329 | engines: {node: '>=12'}
2330 | dependencies:
2331 | '@jridgewell/sourcemap-codec': 1.4.15
2332 | dev: true
2333 |
2334 | /make-dir@4.0.0:
2335 | resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==}
2336 | engines: {node: '>=10'}
2337 | dependencies:
2338 | semver: 7.5.4
2339 | dev: true
2340 |
2341 | /mdn-data@2.0.30:
2342 | resolution: {integrity: sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==}
2343 | dev: true
2344 |
2345 | /merge2@1.4.1:
2346 | resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==}
2347 | engines: {node: '>= 8'}
2348 | dev: true
2349 |
2350 | /micromatch@4.0.5:
2351 | resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==}
2352 | engines: {node: '>=8.6'}
2353 | dependencies:
2354 | braces: 3.0.2
2355 | picomatch: 2.3.1
2356 | dev: true
2357 |
2358 | /mime-db@1.52.0:
2359 | resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==}
2360 | engines: {node: '>= 0.6'}
2361 | dev: true
2362 |
2363 | /mime-types@2.1.35:
2364 | resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==}
2365 | engines: {node: '>= 0.6'}
2366 | dependencies:
2367 | mime-db: 1.52.0
2368 | dev: true
2369 |
2370 | /mime@3.0.0:
2371 | resolution: {integrity: sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==}
2372 | engines: {node: '>=10.0.0'}
2373 | hasBin: true
2374 | dev: true
2375 |
2376 | /min-indent@1.0.1:
2377 | resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==}
2378 | engines: {node: '>=4'}
2379 | dev: true
2380 |
2381 | /minimatch@3.1.2:
2382 | resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
2383 | dependencies:
2384 | brace-expansion: 1.1.11
2385 | dev: true
2386 |
2387 | /minimatch@5.1.6:
2388 | resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==}
2389 | engines: {node: '>=10'}
2390 | dependencies:
2391 | brace-expansion: 2.0.1
2392 | dev: true
2393 |
2394 | /minimist@1.2.8:
2395 | resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==}
2396 | dev: true
2397 |
2398 | /mkdirp@0.5.6:
2399 | resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==}
2400 | hasBin: true
2401 | dependencies:
2402 | minimist: 1.2.8
2403 | dev: true
2404 |
2405 | /mlly@1.4.2:
2406 | resolution: {integrity: sha512-i/Ykufi2t1EZ6NaPLdfnZk2AX8cs0d+mTzVKuPfqPKPatxLApaBoxJQ9x1/uckXtrS/U5oisPMDkNs0yQTaBRg==}
2407 | dependencies:
2408 | acorn: 8.10.0
2409 | pathe: 1.1.1
2410 | pkg-types: 1.0.3
2411 | ufo: 1.3.1
2412 | dev: true
2413 |
2414 | /mri@1.2.0:
2415 | resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==}
2416 | engines: {node: '>=4'}
2417 | dev: true
2418 |
2419 | /mrmime@1.0.1:
2420 | resolution: {integrity: sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw==}
2421 | engines: {node: '>=10'}
2422 | dev: true
2423 |
2424 | /ms@2.1.2:
2425 | resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==}
2426 | dev: true
2427 |
2428 | /nanoid@3.3.4:
2429 | resolution: {integrity: sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==}
2430 | engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
2431 | hasBin: true
2432 | dev: true
2433 |
2434 | /nanoid@3.3.7:
2435 | resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==}
2436 | engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
2437 | hasBin: true
2438 | dev: true
2439 |
2440 | /natural-compare-lite@1.4.0:
2441 | resolution: {integrity: sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==}
2442 | dev: true
2443 |
2444 | /natural-compare@1.4.0:
2445 | resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==}
2446 | dev: true
2447 |
2448 | /no-case@3.0.4:
2449 | resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==}
2450 | dependencies:
2451 | lower-case: 2.0.2
2452 | tslib: 2.5.0
2453 | dev: true
2454 |
2455 | /node-fetch@2.7.0:
2456 | resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==}
2457 | engines: {node: 4.x || >=6.0.0}
2458 | peerDependencies:
2459 | encoding: ^0.1.0
2460 | peerDependenciesMeta:
2461 | encoding:
2462 | optional: true
2463 | dependencies:
2464 | whatwg-url: 5.0.0
2465 | dev: true
2466 |
2467 | /normalize-path@3.0.0:
2468 | resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
2469 | engines: {node: '>=0.10.0'}
2470 | dev: true
2471 |
2472 | /npm-bundled@2.0.1:
2473 | resolution: {integrity: sha512-gZLxXdjEzE/+mOstGDqR6b0EkhJ+kM6fxM6vUuckuctuVPh80Q6pw/rSZj9s4Gex9GxWtIicO1pc8DB9KZWudw==}
2474 | engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0}
2475 | dependencies:
2476 | npm-normalize-package-bin: 2.0.0
2477 | dev: true
2478 |
2479 | /npm-normalize-package-bin@2.0.0:
2480 | resolution: {integrity: sha512-awzfKUO7v0FscrSpRoogyNm0sajikhBWpU0QMrW09AMi9n1PoKU6WaIqUzuJSQnpciZZmJ/jMZ2Egfmb/9LiWQ==}
2481 | engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0}
2482 | dev: true
2483 |
2484 | /npm-packlist@5.1.3:
2485 | resolution: {integrity: sha512-263/0NGrn32YFYi4J533qzrQ/krmmrWwhKkzwTuM4f/07ug51odoaNjUexxO4vxlzURHcmYMH1QjvHjsNDKLVg==}
2486 | engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0}
2487 | hasBin: true
2488 | dependencies:
2489 | glob: 8.1.0
2490 | ignore-walk: 5.0.1
2491 | npm-bundled: 2.0.1
2492 | npm-normalize-package-bin: 2.0.0
2493 | dev: true
2494 |
2495 | /nwsapi@2.2.7:
2496 | resolution: {integrity: sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ==}
2497 | dev: true
2498 |
2499 | /object-inspect@1.12.3:
2500 | resolution: {integrity: sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==}
2501 | dev: true
2502 |
2503 | /object-is@1.1.5:
2504 | resolution: {integrity: sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==}
2505 | engines: {node: '>= 0.4'}
2506 | dependencies:
2507 | call-bind: 1.0.2
2508 | define-properties: 1.2.1
2509 | dev: true
2510 |
2511 | /object-keys@1.1.1:
2512 | resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==}
2513 | engines: {node: '>= 0.4'}
2514 | dev: true
2515 |
2516 | /object.assign@4.1.4:
2517 | resolution: {integrity: sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==}
2518 | engines: {node: '>= 0.4'}
2519 | dependencies:
2520 | call-bind: 1.0.2
2521 | define-properties: 1.2.1
2522 | has-symbols: 1.0.3
2523 | object-keys: 1.1.1
2524 | dev: true
2525 |
2526 | /once@1.4.0:
2527 | resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
2528 | dependencies:
2529 | wrappy: 1.0.2
2530 | dev: true
2531 |
2532 | /optionator@0.9.1:
2533 | resolution: {integrity: sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==}
2534 | engines: {node: '>= 0.8.0'}
2535 | dependencies:
2536 | deep-is: 0.1.4
2537 | fast-levenshtein: 2.0.6
2538 | levn: 0.4.1
2539 | prelude-ls: 1.2.1
2540 | type-check: 0.4.0
2541 | word-wrap: 1.2.3
2542 | dev: true
2543 |
2544 | /p-limit@3.1.0:
2545 | resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==}
2546 | engines: {node: '>=10'}
2547 | dependencies:
2548 | yocto-queue: 0.1.0
2549 | dev: true
2550 |
2551 | /p-limit@4.0.0:
2552 | resolution: {integrity: sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==}
2553 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
2554 | dependencies:
2555 | yocto-queue: 1.0.0
2556 | dev: true
2557 |
2558 | /p-locate@5.0.0:
2559 | resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==}
2560 | engines: {node: '>=10'}
2561 | dependencies:
2562 | p-limit: 3.1.0
2563 | dev: true
2564 |
2565 | /parent-module@1.0.1:
2566 | resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==}
2567 | engines: {node: '>=6'}
2568 | dependencies:
2569 | callsites: 3.1.0
2570 | dev: true
2571 |
2572 | /parse5@7.1.2:
2573 | resolution: {integrity: sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==}
2574 | dependencies:
2575 | entities: 4.5.0
2576 | dev: true
2577 |
2578 | /pascal-case@3.1.2:
2579 | resolution: {integrity: sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==}
2580 | dependencies:
2581 | no-case: 3.0.4
2582 | tslib: 2.5.0
2583 | dev: true
2584 |
2585 | /path-exists@4.0.0:
2586 | resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==}
2587 | engines: {node: '>=8'}
2588 | dev: true
2589 |
2590 | /path-is-absolute@1.0.1:
2591 | resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==}
2592 | engines: {node: '>=0.10.0'}
2593 | dev: true
2594 |
2595 | /path-key@3.1.1:
2596 | resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==}
2597 | engines: {node: '>=8'}
2598 | dev: true
2599 |
2600 | /path-parse@1.0.7:
2601 | resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==}
2602 | dev: true
2603 |
2604 | /path-type@4.0.0:
2605 | resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==}
2606 | engines: {node: '>=8'}
2607 | dev: true
2608 |
2609 | /pathe@1.1.1:
2610 | resolution: {integrity: sha512-d+RQGp0MAYTIaDBIMmOfMwz3E+LOZnxx1HZd5R18mmCZY0QBlK0LDZfPc8FW8Ed2DlvsuE6PRjroDY+wg4+j/Q==}
2611 | dev: true
2612 |
2613 | /pathval@1.1.1:
2614 | resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==}
2615 | dev: true
2616 |
2617 | /periscopic@3.1.0:
2618 | resolution: {integrity: sha512-vKiQ8RRtkl9P+r/+oefh25C3fhybptkHKCZSPlcXiJux2tJF55GnEj3BVn4A5gKfq9NWWXXrxkHBwVPUfH0opw==}
2619 | dependencies:
2620 | '@types/estree': 1.0.1
2621 | estree-walker: 3.0.3
2622 | is-reference: 3.0.2
2623 | dev: true
2624 |
2625 | /picocolors@1.0.0:
2626 | resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==}
2627 | dev: true
2628 |
2629 | /picomatch@2.3.1:
2630 | resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
2631 | engines: {node: '>=8.6'}
2632 | dev: true
2633 |
2634 | /pkg-types@1.0.3:
2635 | resolution: {integrity: sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A==}
2636 | dependencies:
2637 | jsonc-parser: 3.2.0
2638 | mlly: 1.4.2
2639 | pathe: 1.1.1
2640 | dev: true
2641 |
2642 | /postcss-load-config@3.1.4(postcss@8.4.31):
2643 | resolution: {integrity: sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==}
2644 | engines: {node: '>= 10'}
2645 | peerDependencies:
2646 | postcss: '>=8.0.9'
2647 | ts-node: '>=9.0.0'
2648 | peerDependenciesMeta:
2649 | postcss:
2650 | optional: true
2651 | ts-node:
2652 | optional: true
2653 | dependencies:
2654 | lilconfig: 2.1.0
2655 | postcss: 8.4.31
2656 | yaml: 1.10.2
2657 | dev: true
2658 |
2659 | /postcss-safe-parser@6.0.0(postcss@8.4.31):
2660 | resolution: {integrity: sha512-FARHN8pwH+WiS2OPCxJI8FuRJpTVnn6ZNFiqAM2aeW2LwTHWWmWgIyKC6cUo0L8aeKiF/14MNvnpls6R2PBeMQ==}
2661 | engines: {node: '>=12.0'}
2662 | peerDependencies:
2663 | postcss: ^8.3.3
2664 | dependencies:
2665 | postcss: 8.4.31
2666 | dev: true
2667 |
2668 | /postcss-scss@4.0.9(postcss@8.4.31):
2669 | resolution: {integrity: sha512-AjKOeiwAitL/MXxQW2DliT28EKukvvbEWx3LBmJIRN8KfBGZbRTxNYW0kSqi1COiTZ57nZ9NW06S6ux//N1c9A==}
2670 | engines: {node: '>=12.0'}
2671 | peerDependencies:
2672 | postcss: ^8.4.29
2673 | dependencies:
2674 | postcss: 8.4.31
2675 | dev: true
2676 |
2677 | /postcss-selector-parser@6.0.13:
2678 | resolution: {integrity: sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==}
2679 | engines: {node: '>=4'}
2680 | dependencies:
2681 | cssesc: 3.0.0
2682 | util-deprecate: 1.0.2
2683 | dev: true
2684 |
2685 | /postcss@8.4.21:
2686 | resolution: {integrity: sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg==}
2687 | engines: {node: ^10 || ^12 || >=14}
2688 | dependencies:
2689 | nanoid: 3.3.4
2690 | picocolors: 1.0.0
2691 | source-map-js: 1.0.2
2692 | dev: true
2693 |
2694 | /postcss@8.4.31:
2695 | resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==}
2696 | engines: {node: ^10 || ^12 || >=14}
2697 | dependencies:
2698 | nanoid: 3.3.7
2699 | picocolors: 1.0.0
2700 | source-map-js: 1.0.2
2701 | dev: true
2702 |
2703 | /prelude-ls@1.2.1:
2704 | resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==}
2705 | engines: {node: '>= 0.8.0'}
2706 | dev: true
2707 |
2708 | /prettier-plugin-svelte@3.1.2(prettier@3.1.0)(svelte@4.2.0):
2709 | resolution: {integrity: sha512-7xfMZtwgAWHMT0iZc8jN4o65zgbAQ3+O32V6W7pXrqNvKnHnkoyQCGCbKeUyXKZLbYE0YhFRnamfxfkEGxm8qA==}
2710 | peerDependencies:
2711 | prettier: ^3.0.0
2712 | svelte: ^3.2.0 || ^4.0.0-next.0 || ^5.0.0-next.0
2713 | dependencies:
2714 | prettier: 3.1.0
2715 | svelte: 4.2.0
2716 | dev: true
2717 |
2718 | /prettier@3.1.0:
2719 | resolution: {integrity: sha512-TQLvXjq5IAibjh8EpBIkNKxO749UEWABoiIZehEPiY4GNpVdhaFKqSTu+QrlU6D2dPAfubRmtJTi4K4YkQ5eXw==}
2720 | engines: {node: '>=14'}
2721 | hasBin: true
2722 | dev: true
2723 |
2724 | /pretty-format@27.5.1:
2725 | resolution: {integrity: sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==}
2726 | engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0}
2727 | dependencies:
2728 | ansi-regex: 5.0.1
2729 | ansi-styles: 5.2.0
2730 | react-is: 17.0.2
2731 | dev: true
2732 |
2733 | /pretty-format@29.7.0:
2734 | resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==}
2735 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
2736 | dependencies:
2737 | '@jest/schemas': 29.6.3
2738 | ansi-styles: 5.2.0
2739 | react-is: 18.2.0
2740 | dev: true
2741 |
2742 | /psl@1.9.0:
2743 | resolution: {integrity: sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==}
2744 | dev: true
2745 |
2746 | /publint@0.1.9:
2747 | resolution: {integrity: sha512-O53y7vbePxuGFmEjgcrafMSlDpOJwOkj8YdexOt7yWlv7SB3rXoT3mHknyMJ3lf2UFH5Bmt6tnIkHcOTR6dEoA==}
2748 | engines: {node: '>=16'}
2749 | hasBin: true
2750 | dependencies:
2751 | npm-packlist: 5.1.3
2752 | picocolors: 1.0.0
2753 | sade: 1.8.1
2754 | dev: true
2755 |
2756 | /punycode@2.3.0:
2757 | resolution: {integrity: sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==}
2758 | engines: {node: '>=6'}
2759 | dev: true
2760 |
2761 | /querystringify@2.2.0:
2762 | resolution: {integrity: sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==}
2763 | dev: true
2764 |
2765 | /queue-microtask@1.2.3:
2766 | resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
2767 | dev: true
2768 |
2769 | /react-is@17.0.2:
2770 | resolution: {integrity: sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==}
2771 | dev: true
2772 |
2773 | /react-is@18.2.0:
2774 | resolution: {integrity: sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==}
2775 | dev: true
2776 |
2777 | /readdirp@3.6.0:
2778 | resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==}
2779 | engines: {node: '>=8.10.0'}
2780 | dependencies:
2781 | picomatch: 2.3.1
2782 | dev: true
2783 |
2784 | /redent@3.0.0:
2785 | resolution: {integrity: sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==}
2786 | engines: {node: '>=8'}
2787 | dependencies:
2788 | indent-string: 4.0.0
2789 | strip-indent: 3.0.0
2790 | dev: true
2791 |
2792 | /regenerator-runtime@0.13.11:
2793 | resolution: {integrity: sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==}
2794 | dev: true
2795 |
2796 | /regexp.prototype.flags@1.5.1:
2797 | resolution: {integrity: sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==}
2798 | engines: {node: '>= 0.4'}
2799 | dependencies:
2800 | call-bind: 1.0.2
2801 | define-properties: 1.2.1
2802 | set-function-name: 2.0.1
2803 | dev: true
2804 |
2805 | /regexpp@3.2.0:
2806 | resolution: {integrity: sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==}
2807 | engines: {node: '>=8'}
2808 | dev: true
2809 |
2810 | /requires-port@1.0.0:
2811 | resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==}
2812 | dev: true
2813 |
2814 | /resolve-from@4.0.0:
2815 | resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==}
2816 | engines: {node: '>=4'}
2817 | dev: true
2818 |
2819 | /resolve@1.22.1:
2820 | resolution: {integrity: sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==}
2821 | hasBin: true
2822 | dependencies:
2823 | is-core-module: 2.11.0
2824 | path-parse: 1.0.7
2825 | supports-preserve-symlinks-flag: 1.0.0
2826 | dev: true
2827 |
2828 | /reusify@1.0.4:
2829 | resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==}
2830 | engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
2831 | dev: true
2832 |
2833 | /rimraf@2.7.1:
2834 | resolution: {integrity: sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==}
2835 | hasBin: true
2836 | dependencies:
2837 | glob: 7.2.3
2838 | dev: true
2839 |
2840 | /rimraf@3.0.2:
2841 | resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==}
2842 | hasBin: true
2843 | dependencies:
2844 | glob: 7.2.3
2845 | dev: true
2846 |
2847 | /rollup@3.17.3:
2848 | resolution: {integrity: sha512-p5LaCXiiOL/wrOkj8djsIDFmyU9ysUxcyW+EKRLHb6TKldJzXpImjcRSR+vgo09DBdofGcOoLOsRyxxG2n5/qQ==}
2849 | engines: {node: '>=14.18.0', npm: '>=8.0.0'}
2850 | hasBin: true
2851 | optionalDependencies:
2852 | fsevents: 2.3.3
2853 | dev: true
2854 |
2855 | /rrweb-cssom@0.6.0:
2856 | resolution: {integrity: sha512-APM0Gt1KoXBz0iIkkdB/kfvGOwC4UuJFeG/c+yV7wSc7q96cG/kJ0HiYCnzivD9SB53cLV1MlHFNfOuPaadYSw==}
2857 | dev: true
2858 |
2859 | /run-parallel@1.2.0:
2860 | resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==}
2861 | dependencies:
2862 | queue-microtask: 1.2.3
2863 | dev: true
2864 |
2865 | /sade@1.8.1:
2866 | resolution: {integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==}
2867 | engines: {node: '>=6'}
2868 | dependencies:
2869 | mri: 1.2.0
2870 | dev: true
2871 |
2872 | /safer-buffer@2.1.2:
2873 | resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==}
2874 | dev: true
2875 |
2876 | /sander@0.5.1:
2877 | resolution: {integrity: sha512-3lVqBir7WuKDHGrKRDn/1Ye3kwpXaDOMsiRP1wd6wpZW56gJhsbp5RqQpA6JG/P+pkXizygnr1dKR8vzWaVsfA==}
2878 | dependencies:
2879 | es6-promise: 3.3.1
2880 | graceful-fs: 4.2.11
2881 | mkdirp: 0.5.6
2882 | rimraf: 2.7.1
2883 | dev: true
2884 |
2885 | /saxes@6.0.0:
2886 | resolution: {integrity: sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==}
2887 | engines: {node: '>=v12.22.7'}
2888 | dependencies:
2889 | xmlchars: 2.2.0
2890 | dev: true
2891 |
2892 | /semver@7.3.8:
2893 | resolution: {integrity: sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==}
2894 | engines: {node: '>=10'}
2895 | hasBin: true
2896 | dependencies:
2897 | lru-cache: 6.0.0
2898 | dev: true
2899 |
2900 | /semver@7.5.4:
2901 | resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==}
2902 | engines: {node: '>=10'}
2903 | hasBin: true
2904 | dependencies:
2905 | lru-cache: 6.0.0
2906 | dev: true
2907 |
2908 | /set-cookie-parser@2.6.0:
2909 | resolution: {integrity: sha512-RVnVQxTXuerk653XfuliOxBP81Sf0+qfQE73LIYKcyMYHG94AuH0kgrQpRDuTZnSmjpysHmzxJXKNfa6PjFhyQ==}
2910 | dev: true
2911 |
2912 | /set-function-name@2.0.1:
2913 | resolution: {integrity: sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==}
2914 | engines: {node: '>= 0.4'}
2915 | dependencies:
2916 | define-data-property: 1.1.0
2917 | functions-have-names: 1.2.3
2918 | has-property-descriptors: 1.0.0
2919 | dev: true
2920 |
2921 | /shebang-command@2.0.0:
2922 | resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==}
2923 | engines: {node: '>=8'}
2924 | dependencies:
2925 | shebang-regex: 3.0.0
2926 | dev: true
2927 |
2928 | /shebang-regex@3.0.0:
2929 | resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==}
2930 | engines: {node: '>=8'}
2931 | dev: true
2932 |
2933 | /side-channel@1.0.4:
2934 | resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==}
2935 | dependencies:
2936 | call-bind: 1.0.2
2937 | get-intrinsic: 1.2.1
2938 | object-inspect: 1.12.3
2939 | dev: true
2940 |
2941 | /siginfo@2.0.0:
2942 | resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==}
2943 | dev: true
2944 |
2945 | /sirv@2.0.2:
2946 | resolution: {integrity: sha512-4Qog6aE29nIjAOKe/wowFTxOdmbEZKb+3tsLljaBRzJwtqto0BChD2zzH0LhgCSXiI+V7X+Y45v14wBZQ1TK3w==}
2947 | engines: {node: '>= 10'}
2948 | dependencies:
2949 | '@polka/url': 1.0.0-next.21
2950 | mrmime: 1.0.1
2951 | totalist: 3.0.0
2952 | dev: true
2953 |
2954 | /slash@3.0.0:
2955 | resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==}
2956 | engines: {node: '>=8'}
2957 | dev: true
2958 |
2959 | /sorcery@0.11.0:
2960 | resolution: {integrity: sha512-J69LQ22xrQB1cIFJhPfgtLuI6BpWRiWu1Y3vSsIwK/eAScqJxd/+CJlUuHQRdX2C9NGFamq+KqNywGgaThwfHw==}
2961 | hasBin: true
2962 | dependencies:
2963 | '@jridgewell/sourcemap-codec': 1.4.15
2964 | buffer-crc32: 0.2.13
2965 | minimist: 1.2.8
2966 | sander: 0.5.1
2967 | dev: true
2968 |
2969 | /source-map-js@1.0.2:
2970 | resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==}
2971 | engines: {node: '>=0.10.0'}
2972 | dev: true
2973 |
2974 | /source-map@0.6.1:
2975 | resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
2976 | engines: {node: '>=0.10.0'}
2977 | dev: true
2978 |
2979 | /stackback@0.0.2:
2980 | resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==}
2981 | dev: true
2982 |
2983 | /std-env@3.4.3:
2984 | resolution: {integrity: sha512-f9aPhy8fYBuMN+sNfakZV18U39PbalgjXG3lLB9WkaYTxijru61wb57V9wxxNthXM5Sd88ETBWi29qLAsHO52Q==}
2985 | dev: true
2986 |
2987 | /stop-iteration-iterator@1.0.0:
2988 | resolution: {integrity: sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ==}
2989 | engines: {node: '>= 0.4'}
2990 | dependencies:
2991 | internal-slot: 1.0.5
2992 | dev: true
2993 |
2994 | /streamsearch@1.1.0:
2995 | resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==}
2996 | engines: {node: '>=10.0.0'}
2997 | dev: true
2998 |
2999 | /strip-ansi@6.0.1:
3000 | resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
3001 | engines: {node: '>=8'}
3002 | dependencies:
3003 | ansi-regex: 5.0.1
3004 | dev: true
3005 |
3006 | /strip-indent@3.0.0:
3007 | resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==}
3008 | engines: {node: '>=8'}
3009 | dependencies:
3010 | min-indent: 1.0.1
3011 | dev: true
3012 |
3013 | /strip-json-comments@3.1.1:
3014 | resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
3015 | engines: {node: '>=8'}
3016 | dev: true
3017 |
3018 | /strip-literal@1.3.0:
3019 | resolution: {integrity: sha512-PugKzOsyXpArk0yWmUwqOZecSO0GH0bPoctLcqNDH9J04pVW3lflYE0ujElBGTloevcxF5MofAOZ7C5l2b+wLg==}
3020 | dependencies:
3021 | acorn: 8.10.0
3022 | dev: true
3023 |
3024 | /supports-color@5.5.0:
3025 | resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==}
3026 | engines: {node: '>=4'}
3027 | dependencies:
3028 | has-flag: 3.0.0
3029 | dev: true
3030 |
3031 | /supports-color@7.2.0:
3032 | resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
3033 | engines: {node: '>=8'}
3034 | dependencies:
3035 | has-flag: 4.0.0
3036 | dev: true
3037 |
3038 | /supports-preserve-symlinks-flag@1.0.0:
3039 | resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
3040 | engines: {node: '>= 0.4'}
3041 | dev: true
3042 |
3043 | /svelte-check@3.5.2(postcss@8.4.31)(svelte@4.2.0):
3044 | resolution: {integrity: sha512-5a/YWbiH4c+AqAUP+0VneiV5bP8YOk9JL3jwvN+k2PEPLgpu85bjQc5eE67+eIZBBwUEJzmO3I92OqKcqbp3fw==}
3045 | hasBin: true
3046 | peerDependencies:
3047 | svelte: ^3.55.0 || ^4.0.0-next.0 || ^4.0.0
3048 | dependencies:
3049 | '@jridgewell/trace-mapping': 0.3.17
3050 | chokidar: 3.5.3
3051 | fast-glob: 3.2.12
3052 | import-fresh: 3.3.0
3053 | picocolors: 1.0.0
3054 | sade: 1.8.1
3055 | svelte: 4.2.0
3056 | svelte-preprocess: 5.0.4(postcss@8.4.31)(svelte@4.2.0)(typescript@5.2.2)
3057 | typescript: 5.2.2
3058 | transitivePeerDependencies:
3059 | - '@babel/core'
3060 | - coffeescript
3061 | - less
3062 | - postcss
3063 | - postcss-load-config
3064 | - pug
3065 | - sass
3066 | - stylus
3067 | - sugarss
3068 | dev: true
3069 |
3070 | /svelte-eslint-parser@0.34.0-next.5(svelte@4.2.0):
3071 | resolution: {integrity: sha512-Q8vcpmPv6hiqLsk6uHBngt3CzT5VuXMW/6YmztxqHDrYkMBfyOsr3gBJSuKp+cdMrn7IhVSet4NGJX1nOXz5Kw==}
3072 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
3073 | peerDependencies:
3074 | svelte: ^3.37.0 || ^4.0.0 || ^5.0.0-next.10
3075 | peerDependenciesMeta:
3076 | svelte:
3077 | optional: true
3078 | dependencies:
3079 | eslint-scope: 7.2.2
3080 | eslint-visitor-keys: 3.4.3
3081 | espree: 9.6.1
3082 | postcss: 8.4.31
3083 | postcss-scss: 4.0.9(postcss@8.4.31)
3084 | svelte: 4.2.0
3085 | dev: true
3086 |
3087 | /svelte-hmr@0.15.3(svelte@4.2.0):
3088 | resolution: {integrity: sha512-41snaPswvSf8TJUhlkoJBekRrABDXDMdpNpT2tfHIv4JuhgvHqLMhEPGtaQn0BmbNSTkuz2Ed20DF2eHw0SmBQ==}
3089 | engines: {node: ^12.20 || ^14.13.1 || >= 16}
3090 | peerDependencies:
3091 | svelte: ^3.19.0 || ^4.0.0
3092 | dependencies:
3093 | svelte: 4.2.0
3094 | dev: true
3095 |
3096 | /svelte-preprocess@5.0.4(postcss@8.4.31)(svelte@4.2.0)(typescript@5.2.2):
3097 | resolution: {integrity: sha512-ABia2QegosxOGsVlsSBJvoWeXy1wUKSfF7SWJdTjLAbx/Y3SrVevvvbFNQqrSJw89+lNSsM58SipmZJ5SRi5iw==}
3098 | engines: {node: '>= 14.10.0'}
3099 | requiresBuild: true
3100 | peerDependencies:
3101 | '@babel/core': ^7.10.2
3102 | coffeescript: ^2.5.1
3103 | less: ^3.11.3 || ^4.0.0
3104 | postcss: ^7 || ^8
3105 | postcss-load-config: ^2.1.0 || ^3.0.0 || ^4.0.0
3106 | pug: ^3.0.0
3107 | sass: ^1.26.8
3108 | stylus: ^0.55.0
3109 | sugarss: ^2.0.0 || ^3.0.0 || ^4.0.0
3110 | svelte: ^3.23.0 || ^4.0.0-next.0 || ^4.0.0
3111 | typescript: '>=3.9.5 || ^4.0.0 || ^5.0.0'
3112 | peerDependenciesMeta:
3113 | '@babel/core':
3114 | optional: true
3115 | coffeescript:
3116 | optional: true
3117 | less:
3118 | optional: true
3119 | postcss:
3120 | optional: true
3121 | postcss-load-config:
3122 | optional: true
3123 | pug:
3124 | optional: true
3125 | sass:
3126 | optional: true
3127 | stylus:
3128 | optional: true
3129 | sugarss:
3130 | optional: true
3131 | typescript:
3132 | optional: true
3133 | dependencies:
3134 | '@types/pug': 2.0.7
3135 | detect-indent: 6.1.0
3136 | magic-string: 0.27.0
3137 | postcss: 8.4.31
3138 | sorcery: 0.11.0
3139 | strip-indent: 3.0.0
3140 | svelte: 4.2.0
3141 | typescript: 5.2.2
3142 | dev: true
3143 |
3144 | /svelte2tsx@0.6.22(svelte@4.2.0)(typescript@4.9.5):
3145 | resolution: {integrity: sha512-eFCfz0juaWeanbwGeQV21kPMwH3LKhfrUYRy1PqRmlieuHvJs8VeK7CaoHJdpBZWCXba2cltHVdywJmwOGhbww==}
3146 | peerDependencies:
3147 | svelte: ^3.55 || ^4.0.0-next.0 || ^4.0
3148 | typescript: ^4.9.4 || ^5.0.0
3149 | dependencies:
3150 | dedent-js: 1.0.1
3151 | pascal-case: 3.1.2
3152 | svelte: 4.2.0
3153 | typescript: 4.9.5
3154 | dev: true
3155 |
3156 | /svelte@4.2.0:
3157 | resolution: {integrity: sha512-kVsdPjDbLrv74SmLSUzAsBGquMs4MPgWGkGLpH+PjOYnFOziAvENVzgJmyOCV2gntxE32aNm8/sqNKD6LbIpeQ==}
3158 | engines: {node: '>=16'}
3159 | dependencies:
3160 | '@ampproject/remapping': 2.2.1
3161 | '@jridgewell/sourcemap-codec': 1.4.15
3162 | '@jridgewell/trace-mapping': 0.3.19
3163 | acorn: 8.10.0
3164 | aria-query: 5.3.0
3165 | axobject-query: 3.2.1
3166 | code-red: 1.0.4
3167 | css-tree: 2.3.1
3168 | estree-walker: 3.0.3
3169 | is-reference: 3.0.2
3170 | locate-character: 3.0.0
3171 | magic-string: 0.30.0
3172 | periscopic: 3.1.0
3173 | dev: true
3174 |
3175 | /symbol-tree@3.2.4:
3176 | resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==}
3177 | dev: true
3178 |
3179 | /test-exclude@6.0.0:
3180 | resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==}
3181 | engines: {node: '>=8'}
3182 | dependencies:
3183 | '@istanbuljs/schema': 0.1.3
3184 | glob: 7.2.3
3185 | minimatch: 3.1.2
3186 | dev: true
3187 |
3188 | /text-table@0.2.0:
3189 | resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==}
3190 | dev: true
3191 |
3192 | /tiny-glob@0.2.9:
3193 | resolution: {integrity: sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg==}
3194 | dependencies:
3195 | globalyzer: 0.1.0
3196 | globrex: 0.1.2
3197 | dev: true
3198 |
3199 | /tinybench@2.5.1:
3200 | resolution: {integrity: sha512-65NKvSuAVDP/n4CqH+a9w2kTlLReS9vhsAP06MWx+/89nMinJyB2icyl58RIcqCmIggpojIGeuJGhjU1aGMBSg==}
3201 | dev: true
3202 |
3203 | /tinypool@0.7.0:
3204 | resolution: {integrity: sha512-zSYNUlYSMhJ6Zdou4cJwo/p7w5nmAH17GRfU/ui3ctvjXFErXXkruT4MWW6poDeXgCaIBlGLrfU6TbTXxyGMww==}
3205 | engines: {node: '>=14.0.0'}
3206 | dev: true
3207 |
3208 | /tinyspy@2.2.0:
3209 | resolution: {integrity: sha512-d2eda04AN/cPOR89F7Xv5bK/jrQEhmcLFe6HFldoeO9AJtps+fqEnh486vnT/8y4bw38pSyxDcTCAq+Ks2aJTg==}
3210 | engines: {node: '>=14.0.0'}
3211 | dev: true
3212 |
3213 | /to-regex-range@5.0.1:
3214 | resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
3215 | engines: {node: '>=8.0'}
3216 | dependencies:
3217 | is-number: 7.0.0
3218 | dev: true
3219 |
3220 | /totalist@3.0.0:
3221 | resolution: {integrity: sha512-eM+pCBxXO/njtF7vdFsHuqb+ElbxqtI4r5EAvk6grfAFyJ6IvWlSkfZ5T9ozC6xWw3Fj1fGoSmrl0gUs46JVIw==}
3222 | engines: {node: '>=6'}
3223 | dev: true
3224 |
3225 | /tough-cookie@4.1.3:
3226 | resolution: {integrity: sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==}
3227 | engines: {node: '>=6'}
3228 | dependencies:
3229 | psl: 1.9.0
3230 | punycode: 2.3.0
3231 | universalify: 0.2.0
3232 | url-parse: 1.5.10
3233 | dev: true
3234 |
3235 | /tr46@0.0.3:
3236 | resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==}
3237 | dev: true
3238 |
3239 | /tr46@4.1.1:
3240 | resolution: {integrity: sha512-2lv/66T7e5yNyhAAC4NaKe5nVavzuGJQVVtRYLyQ2OI8tsJ61PMLlelehb0wi2Hx6+hT/OJUWZcw8MjlSRnxvw==}
3241 | engines: {node: '>=14'}
3242 | dependencies:
3243 | punycode: 2.3.0
3244 | dev: true
3245 |
3246 | /tslib@1.14.1:
3247 | resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==}
3248 | dev: true
3249 |
3250 | /tslib@2.5.0:
3251 | resolution: {integrity: sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==}
3252 | dev: true
3253 |
3254 | /tsutils@3.21.0(typescript@4.9.5):
3255 | resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==}
3256 | engines: {node: '>= 6'}
3257 | peerDependencies:
3258 | typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta'
3259 | dependencies:
3260 | tslib: 1.14.1
3261 | typescript: 4.9.5
3262 | dev: true
3263 |
3264 | /type-check@0.4.0:
3265 | resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==}
3266 | engines: {node: '>= 0.8.0'}
3267 | dependencies:
3268 | prelude-ls: 1.2.1
3269 | dev: true
3270 |
3271 | /type-detect@4.0.8:
3272 | resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==}
3273 | engines: {node: '>=4'}
3274 | dev: true
3275 |
3276 | /type-fest@0.20.2:
3277 | resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==}
3278 | engines: {node: '>=10'}
3279 | dev: true
3280 |
3281 | /typescript@4.9.5:
3282 | resolution: {integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==}
3283 | engines: {node: '>=4.2.0'}
3284 | hasBin: true
3285 | dev: true
3286 |
3287 | /typescript@5.2.2:
3288 | resolution: {integrity: sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==}
3289 | engines: {node: '>=14.17'}
3290 | hasBin: true
3291 | dev: true
3292 |
3293 | /ufo@1.3.1:
3294 | resolution: {integrity: sha512-uY/99gMLIOlJPwATcMVYfqDSxUR9//AUcgZMzwfSTJPDKzA1S8mX4VLqa+fiAtveraQUBCz4FFcwVZBGbwBXIw==}
3295 | dev: true
3296 |
3297 | /undici@5.23.0:
3298 | resolution: {integrity: sha512-1D7w+fvRsqlQ9GscLBwcAJinqcZGHUKjbOmXdlE/v8BvEGXjeWAax+341q44EuTcHXXnfyKNbKRq4Lg7OzhMmg==}
3299 | engines: {node: '>=14.0'}
3300 | dependencies:
3301 | busboy: 1.6.0
3302 | dev: true
3303 |
3304 | /universalify@0.2.0:
3305 | resolution: {integrity: sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==}
3306 | engines: {node: '>= 4.0.0'}
3307 | dev: true
3308 |
3309 | /uri-js@4.4.1:
3310 | resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==}
3311 | dependencies:
3312 | punycode: 2.3.0
3313 | dev: true
3314 |
3315 | /url-parse@1.5.10:
3316 | resolution: {integrity: sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==}
3317 | dependencies:
3318 | querystringify: 2.2.0
3319 | requires-port: 1.0.0
3320 | dev: true
3321 |
3322 | /util-deprecate@1.0.2:
3323 | resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==}
3324 | dev: true
3325 |
3326 | /v8-to-istanbul@9.1.3:
3327 | resolution: {integrity: sha512-9lDD+EVI2fjFsMWXc6dy5JJzBsVTcQ2fVkfBvncZ6xJWG9wtBhOldG+mHkSL0+V1K/xgZz0JDO5UT5hFwHUghg==}
3328 | engines: {node: '>=10.12.0'}
3329 | dependencies:
3330 | '@jridgewell/trace-mapping': 0.3.19
3331 | '@types/istanbul-lib-coverage': 2.0.4
3332 | convert-source-map: 2.0.0
3333 | dev: true
3334 |
3335 | /vite-node@0.34.6(@types/node@20.8.3):
3336 | resolution: {integrity: sha512-nlBMJ9x6n7/Amaz6F3zJ97EBwR2FkzhBRxF5e+jE6LA3yi6Wtc2lyTij1OnDMIr34v5g/tVQtsVAzhT0jc5ygA==}
3337 | engines: {node: '>=v14.18.0'}
3338 | hasBin: true
3339 | dependencies:
3340 | cac: 6.7.14
3341 | debug: 4.3.4
3342 | mlly: 1.4.2
3343 | pathe: 1.1.1
3344 | picocolors: 1.0.0
3345 | vite: 4.1.4(@types/node@20.8.3)
3346 | transitivePeerDependencies:
3347 | - '@types/node'
3348 | - less
3349 | - sass
3350 | - stylus
3351 | - sugarss
3352 | - supports-color
3353 | - terser
3354 | dev: true
3355 |
3356 | /vite@4.1.4(@types/node@20.8.3):
3357 | resolution: {integrity: sha512-3knk/HsbSTKEin43zHu7jTwYWv81f8kgAL99G5NWBcA1LKvtvcVAC4JjBH1arBunO9kQka+1oGbrMKOjk4ZrBg==}
3358 | engines: {node: ^14.18.0 || >=16.0.0}
3359 | hasBin: true
3360 | peerDependencies:
3361 | '@types/node': '>= 14'
3362 | less: '*'
3363 | sass: '*'
3364 | stylus: '*'
3365 | sugarss: '*'
3366 | terser: ^5.4.0
3367 | peerDependenciesMeta:
3368 | '@types/node':
3369 | optional: true
3370 | less:
3371 | optional: true
3372 | sass:
3373 | optional: true
3374 | stylus:
3375 | optional: true
3376 | sugarss:
3377 | optional: true
3378 | terser:
3379 | optional: true
3380 | dependencies:
3381 | '@types/node': 20.8.3
3382 | esbuild: 0.16.17
3383 | postcss: 8.4.21
3384 | resolve: 1.22.1
3385 | rollup: 3.17.3
3386 | optionalDependencies:
3387 | fsevents: 2.3.3
3388 | dev: true
3389 |
3390 | /vitefu@0.2.4(vite@4.1.4):
3391 | resolution: {integrity: sha512-fanAXjSaf9xXtOOeno8wZXIhgia+CZury481LsDaV++lSvcU2R9Ch2bPh3PYFyoHW+w9LqAeYRISVQjUIew14g==}
3392 | peerDependencies:
3393 | vite: ^3.0.0 || ^4.0.0
3394 | peerDependenciesMeta:
3395 | vite:
3396 | optional: true
3397 | dependencies:
3398 | vite: 4.1.4(@types/node@20.8.3)
3399 | dev: true
3400 |
3401 | /vitest@0.34.6(jsdom@22.1.0):
3402 | resolution: {integrity: sha512-+5CALsOvbNKnS+ZHMXtuUC7nL8/7F1F2DnHGjSsszX8zCjWSSviphCb/NuS9Nzf4Q03KyyDRBAXhF/8lffME4Q==}
3403 | engines: {node: '>=v14.18.0'}
3404 | hasBin: true
3405 | peerDependencies:
3406 | '@edge-runtime/vm': '*'
3407 | '@vitest/browser': '*'
3408 | '@vitest/ui': '*'
3409 | happy-dom: '*'
3410 | jsdom: '*'
3411 | playwright: '*'
3412 | safaridriver: '*'
3413 | webdriverio: '*'
3414 | peerDependenciesMeta:
3415 | '@edge-runtime/vm':
3416 | optional: true
3417 | '@vitest/browser':
3418 | optional: true
3419 | '@vitest/ui':
3420 | optional: true
3421 | happy-dom:
3422 | optional: true
3423 | jsdom:
3424 | optional: true
3425 | playwright:
3426 | optional: true
3427 | safaridriver:
3428 | optional: true
3429 | webdriverio:
3430 | optional: true
3431 | dependencies:
3432 | '@types/chai': 4.3.6
3433 | '@types/chai-subset': 1.3.3
3434 | '@types/node': 20.8.3
3435 | '@vitest/expect': 0.34.6
3436 | '@vitest/runner': 0.34.6
3437 | '@vitest/snapshot': 0.34.6
3438 | '@vitest/spy': 0.34.6
3439 | '@vitest/utils': 0.34.6
3440 | acorn: 8.10.0
3441 | acorn-walk: 8.2.0
3442 | cac: 6.7.14
3443 | chai: 4.3.10
3444 | debug: 4.3.4
3445 | jsdom: 22.1.0
3446 | local-pkg: 0.4.3
3447 | magic-string: 0.30.4
3448 | pathe: 1.1.1
3449 | picocolors: 1.0.0
3450 | std-env: 3.4.3
3451 | strip-literal: 1.3.0
3452 | tinybench: 2.5.1
3453 | tinypool: 0.7.0
3454 | vite: 4.1.4(@types/node@20.8.3)
3455 | vite-node: 0.34.6(@types/node@20.8.3)
3456 | why-is-node-running: 2.2.2
3457 | transitivePeerDependencies:
3458 | - less
3459 | - sass
3460 | - stylus
3461 | - sugarss
3462 | - supports-color
3463 | - terser
3464 | dev: true
3465 |
3466 | /w3c-xmlserializer@4.0.0:
3467 | resolution: {integrity: sha512-d+BFHzbiCx6zGfz0HyQ6Rg69w9k19nviJspaj4yNscGjrHu94sVP+aRm75yEbCh+r2/yR+7q6hux9LVtbuTGBw==}
3468 | engines: {node: '>=14'}
3469 | dependencies:
3470 | xml-name-validator: 4.0.0
3471 | dev: true
3472 |
3473 | /webidl-conversions@3.0.1:
3474 | resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==}
3475 | dev: true
3476 |
3477 | /webidl-conversions@7.0.0:
3478 | resolution: {integrity: sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==}
3479 | engines: {node: '>=12'}
3480 | dev: true
3481 |
3482 | /whatwg-encoding@2.0.0:
3483 | resolution: {integrity: sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==}
3484 | engines: {node: '>=12'}
3485 | dependencies:
3486 | iconv-lite: 0.6.3
3487 | dev: true
3488 |
3489 | /whatwg-mimetype@3.0.0:
3490 | resolution: {integrity: sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==}
3491 | engines: {node: '>=12'}
3492 | dev: true
3493 |
3494 | /whatwg-url@12.0.1:
3495 | resolution: {integrity: sha512-Ed/LrqB8EPlGxjS+TrsXcpUond1mhccS3pchLhzSgPCnTimUCKj3IZE75pAs5m6heB2U2TMerKFUXheyHY+VDQ==}
3496 | engines: {node: '>=14'}
3497 | dependencies:
3498 | tr46: 4.1.1
3499 | webidl-conversions: 7.0.0
3500 | dev: true
3501 |
3502 | /whatwg-url@5.0.0:
3503 | resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==}
3504 | dependencies:
3505 | tr46: 0.0.3
3506 | webidl-conversions: 3.0.1
3507 | dev: true
3508 |
3509 | /which-boxed-primitive@1.0.2:
3510 | resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==}
3511 | dependencies:
3512 | is-bigint: 1.0.4
3513 | is-boolean-object: 1.1.2
3514 | is-number-object: 1.0.7
3515 | is-string: 1.0.7
3516 | is-symbol: 1.0.4
3517 | dev: true
3518 |
3519 | /which-collection@1.0.1:
3520 | resolution: {integrity: sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==}
3521 | dependencies:
3522 | is-map: 2.0.2
3523 | is-set: 2.0.2
3524 | is-weakmap: 2.0.1
3525 | is-weakset: 2.0.2
3526 | dev: true
3527 |
3528 | /which-typed-array@1.1.11:
3529 | resolution: {integrity: sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew==}
3530 | engines: {node: '>= 0.4'}
3531 | dependencies:
3532 | available-typed-arrays: 1.0.5
3533 | call-bind: 1.0.2
3534 | for-each: 0.3.3
3535 | gopd: 1.0.1
3536 | has-tostringtag: 1.0.0
3537 | dev: true
3538 |
3539 | /which@2.0.2:
3540 | resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
3541 | engines: {node: '>= 8'}
3542 | hasBin: true
3543 | dependencies:
3544 | isexe: 2.0.0
3545 | dev: true
3546 |
3547 | /why-is-node-running@2.2.2:
3548 | resolution: {integrity: sha512-6tSwToZxTOcotxHeA+qGCq1mVzKR3CwcJGmVcY+QE8SHy6TnpFnh8PAvPNHYr7EcuVeG0QSMxtYCuO1ta/G/oA==}
3549 | engines: {node: '>=8'}
3550 | hasBin: true
3551 | dependencies:
3552 | siginfo: 2.0.0
3553 | stackback: 0.0.2
3554 | dev: true
3555 |
3556 | /word-wrap@1.2.3:
3557 | resolution: {integrity: sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==}
3558 | engines: {node: '>=0.10.0'}
3559 | dev: true
3560 |
3561 | /wrappy@1.0.2:
3562 | resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
3563 | dev: true
3564 |
3565 | /ws@8.14.2:
3566 | resolution: {integrity: sha512-wEBG1ftX4jcglPxgFCMJmZ2PLtSbJ2Peg6TmpJFTbe9GZYOQCDPdMYu/Tm0/bGZkw8paZnJY45J4K2PZrLYq8g==}
3567 | engines: {node: '>=10.0.0'}
3568 | peerDependencies:
3569 | bufferutil: ^4.0.1
3570 | utf-8-validate: '>=5.0.2'
3571 | peerDependenciesMeta:
3572 | bufferutil:
3573 | optional: true
3574 | utf-8-validate:
3575 | optional: true
3576 | dev: true
3577 |
3578 | /xml-name-validator@4.0.0:
3579 | resolution: {integrity: sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==}
3580 | engines: {node: '>=12'}
3581 | dev: true
3582 |
3583 | /xmlchars@2.2.0:
3584 | resolution: {integrity: sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==}
3585 | dev: true
3586 |
3587 | /yallist@4.0.0:
3588 | resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==}
3589 | dev: true
3590 |
3591 | /yaml@1.10.2:
3592 | resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==}
3593 | engines: {node: '>= 6'}
3594 | dev: true
3595 |
3596 | /yocto-queue@0.1.0:
3597 | resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
3598 | engines: {node: '>=10'}
3599 | dev: true
3600 |
3601 | /yocto-queue@1.0.0:
3602 | resolution: {integrity: sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==}
3603 | engines: {node: '>=12.20'}
3604 | dev: true
3605 |
--------------------------------------------------------------------------------