0
Fork 0
mirror of https://github.com/verdaccio/verdaccio.git synced 2024-12-16 21:56:25 -05:00

chore: migrate config package to vitest (#4760)

* chore: migrate config package to vitest

* Update pnpm-lock.yaml

* improve win32 test

* Create moody-mugs-pay.md
This commit is contained in:
Juan Picado 2024-08-03 09:52:18 +02:00 committed by GitHub
parent 8ef7a285e5
commit 8c10a3ec31
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
18 changed files with 408 additions and 326 deletions

View file

@ -0,0 +1,5 @@
---
'@verdaccio/config': patch
---
chore: improve debug code and refactor code

View file

@ -88,7 +88,7 @@
"@verdaccio/eslint-config": "workspace:*",
"@verdaccio/types": "workspace:*",
"@verdaccio/ui-theme": "workspace:*",
"@vitest/coverage-v8": "0.34.6",
"@vitest/coverage-v8": "2.0.5",
"aria-query": "5.1.3",
"babel-core": "7.0.0-bridge.0",
"babel-jest": "29.7.0",
@ -128,7 +128,7 @@
"verdaccio-auth-memory": "workspace:*",
"verdaccio-htpasswd": "workspace:*",
"verdaccio-memory": "workspace:*",
"vitest": "1.6.0"
"vitest": "2.0.4"
},
"scripts": {
"prepare": "husky install",

View file

@ -26,11 +26,11 @@
"verdaccio"
],
"engines": {
"node": ">=12"
"node": ">=14"
},
"scripts": {
"clean": "rimraf ./build",
"test": "jest",
"test": "vitest run",
"type-check": "tsc --noEmit -p tsconfig.build.json",
"build:types": "tsc --emitDeclarationOnly -p tsconfig.build.json",
"build:js": "babel src/ --out-dir build/ --copy-files --extensions \".ts,.tsx\" --source-maps",

View file

@ -1,16 +1,13 @@
import buildDebug from 'debug';
import fs from 'fs';
import _ from 'lodash';
import os from 'os';
import path from 'path';
import { CHARACTER_ENCODING } from '@verdaccio/core';
import { fileExists, folderExists } from './config-utils';
const CONFIG_FILE = 'config.yaml';
const XDG = 'xdg';
const WIN = 'win';
const WIN32 = 'win32';
// eslint-disable-next-line
const pkgJSON = {
name: 'verdaccio',
@ -18,23 +15,27 @@ const pkgJSON = {
export type SetupDirectory = {
path: string;
type: string;
type: 'xdg' | 'win' | 'win32' | 'def' | 'old';
};
const debug = buildDebug('verdaccio:config');
const debug = buildDebug('verdaccio:config:config-path');
/**
* Find and get the first config file that match.
* @return {String} the config file path
*/
function findConfigFile(configPath?: string): string {
debug('searching for config file %o', configPath);
if (typeof configPath !== 'undefined') {
return path.resolve(configPath);
const configLocation = path.resolve(configPath);
debug('custom location %s', configLocation);
return configLocation;
}
const configPaths: SetupDirectory[] = getConfigPaths();
debug('%o posible locations found', configPaths.length);
if (_.isEmpty(configPaths)) {
if (configPaths.length === 0) {
debug('no configuration files can be processed');
// this should never happens
throw new Error('no configuration files can be processed');
}
@ -45,12 +46,12 @@ function findConfigFile(configPath?: string): string {
);
if (typeof primaryConf !== 'undefined') {
debug('previous location exist already %s', primaryConf?.path);
debug('at least one primary location detected at %s', primaryConf?.path);
return primaryConf.path;
}
// @ts-ignore
return createConfigFile(_.head(configPaths)).path;
debug('no previous location found, creating a new one');
debug('generating the first match path location %s', configPaths[0].path);
return createConfigFile(configPaths[0]).path;
}
function createConfigFile(configLocation: SetupDirectory): SetupDirectory {
@ -63,25 +64,37 @@ function createConfigFile(configLocation: SetupDirectory): SetupDirectory {
return configLocation;
}
export function readDefaultConfig(): Buffer {
export function readDefaultConfig(): string {
const pathDefaultConf: string = path.resolve(__dirname, 'conf/default.yaml');
try {
debug('default configuration file %s', pathDefaultConf);
debug('the path of default config used from %s', pathDefaultConf);
fs.accessSync(pathDefaultConf, fs.constants.R_OK);
debug('configuration file has enough permissions for reading');
} catch {
debug('configuration file does not have enough permissions for reading');
throw new TypeError('configuration file does not have enough permissions for reading');
}
// @ts-ignore
return fs.readFileSync(pathDefaultConf, CHARACTER_ENCODING.UTF8);
return fs.readFileSync(pathDefaultConf, 'utf8');
}
function createConfigFolder(configLocation): void {
fs.mkdirSync(path.dirname(configLocation.path), { recursive: true });
debug(`Creating default config file in %o`, configLocation?.path);
const folder = path.dirname(configLocation.path);
debug(`creating default config file folder at %o`, folder);
fs.mkdirSync(folder, { recursive: true });
debug(`folder %o created`, folder);
}
function updateStorageLinks(configLocation, defaultConfig): string {
/**
* Update the storage links to the new location if it is necessary.
* @param configLocation
* @param defaultConfig
* @returns
*/
function updateStorageLinks(configLocation: SetupDirectory, defaultConfig: string): string {
debug('checking storage links for %s and type %s', configLocation.path, configLocation.type);
if (configLocation.type !== XDG) {
debug(`skip storage override for %s`, configLocation.type);
return defaultConfig;
}
@ -114,7 +127,11 @@ function getConfigPaths(): SetupDirectory[] {
return listPaths.reduce(function (acc, currentValue: SetupDirectory | void): SetupDirectory[] {
if (typeof currentValue !== 'undefined') {
debug('directory detected path %s for type %s', currentValue?.path, currentValue.type);
debug(
'posible directory path generated %s for type %s',
currentValue?.path,
currentValue.type
);
acc.push(currentValue);
}
return acc;
@ -123,11 +140,22 @@ function getConfigPaths(): SetupDirectory[] {
/**
* Get XDG_CONFIG_HOME or HOME location (usually unix)
*
* The XDG_CONFIG_HOME environment variable is also part of the XDG Base Directory Specification,
* which aims to standardize the locations where applications store configuration files and other
* user-specific data on Unix-like operating systems.
*
*
*
* https://specifications.freedesktop.org/basedir-spec/latest/
*
*
* @returns
*/
const getXDGDirectory = (): SetupDirectory | void => {
const xDGConfigPath =
process.env.XDG_CONFIG_HOME || (process.env.HOME && path.join(process.env.HOME, '.config'));
debug('XDGConfig folder path %s', xDGConfigPath);
if (xDGConfigPath && folderExists(xDGConfigPath)) {
debug('XDGConfig folder path %s', xDGConfigPath);
return {
@ -143,11 +171,11 @@ const getXDGDirectory = (): SetupDirectory | void => {
* @returns
*/
const getWindowsDirectory = (): SetupDirectory | void => {
if (process.platform === WIN32 && process.env.APPDATA && folderExists(process.env.APPDATA)) {
debug('is windows appdata: %s', process.env.APPDATA);
if (os.platform() === 'win32' && process.env.APPDATA && folderExists(process.env.APPDATA)) {
debug('windows appdata folder path %s', process.env.APPDATA);
return {
path: path.resolve(path.join(process.env.APPDATA, pkgJSON.name, CONFIG_FILE)),
type: WIN,
type: 'win',
};
}
};
@ -158,8 +186,10 @@ const getWindowsDirectory = (): SetupDirectory | void => {
* @returns
*/
const getRelativeDefaultDirectory = (): SetupDirectory => {
const relativePath = path.resolve(path.join('.', pkgJSON.name, CONFIG_FILE));
debug('relative folder path %s', relativePath);
return {
path: path.resolve(path.join('.', pkgJSON.name, CONFIG_FILE)),
path: relativePath,
type: 'def',
};
};
@ -169,8 +199,10 @@ const getRelativeDefaultDirectory = (): SetupDirectory => {
* @returns
*/
const getOldDirectory = (): SetupDirectory => {
const oldPath = path.resolve(path.join('.', CONFIG_FILE));
debug('old folder path %s', oldPath);
return {
path: path.resolve(path.join('.', CONFIG_FILE)),
path: oldPath,
type: 'old',
};
};

View file

@ -1,5 +1,8 @@
import buildDebug from 'debug';
import fs from 'fs';
const debug = buildDebug('verdaccio:config:config-utils');
/**
* Check whether the path already exist.
* @param {String} path
@ -7,9 +10,13 @@ import fs from 'fs';
*/
export function folderExists(path: string): boolean {
try {
debug('check folder exist', path);
const stat = fs.statSync(path);
return stat.isDirectory();
const isDirectory = stat.isDirectory();
debug('folder exist', isDirectory);
return isDirectory;
} catch (_: any) {
debug('folder %s does not exist', path);
return false;
}
}
@ -21,9 +28,13 @@ export function folderExists(path: string): boolean {
*/
export function fileExists(path: string): boolean {
try {
debug('check file exist', path);
const stat = fs.statSync(path);
return stat.isFile();
const isFile = stat.isFile();
debug('file exist', isFile);
return isFile;
} catch (_: any) {
debug('file %s does not exist', path);
return false;
}
}

View file

@ -1,6 +1,6 @@
// Jest Snapshot v1, https://goo.gl/fbAQLP
// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html
exports[`Config builder should create a configuration file as yaml 1`] = `
exports[`Config builder > should create a configuration file as yaml 1`] = `
"uplinks:
upstream:
url: https://registry.verdaccio.org

View file

@ -1,6 +1,6 @@
// Jest Snapshot v1, https://goo.gl/fbAQLP
// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html
exports[`parse fromJStoYAML basic conversion roundtrip 1`] = `
exports[`parse > fromJStoYAML > basic conversion roundtrip 1`] = `
"storage: ./storage_default_storage
uplinks:
npmjs:

View file

@ -1,3 +1,5 @@
import { describe, expect, test } from 'vitest';
import { getUserAgent } from '../src';
describe('getUserAgent', () => {

View file

@ -1,3 +1,5 @@
import { describe, expect, test } from 'vitest';
import { ConfigBuilder } from '../src';
describe('Config builder', () => {

View file

@ -1,5 +1,6 @@
import fs from 'fs';
import path from 'path';
import { describe, expect, test } from 'vitest';
import { fileUtils } from '@verdaccio/core';

View file

@ -1,4 +1,5 @@
import path from 'path';
import { describe, expect, test } from 'vitest';
import { fileExists, folderExists } from '../src/config-utils';

View file

@ -1,106 +1,127 @@
import fs from 'fs';
import os from 'os';
import { afterEach, beforeEach, describe, expect, test, vi } from 'vitest';
import { findConfigFile } from '../src/config-path';
const mockmkDir = jest.fn();
const mockaccessSync = jest.fn();
const mockwriteFile = jest.fn();
jest.mock('fs', () => {
const fsOri = jest.requireActual('fs');
return {
...fsOri,
statSync: (path) => ({
isDirectory: () => {
if (path.match(/fail/)) {
throw Error('file does not exist');
}
return true;
},
}),
accessSync: (a) => mockaccessSync(a),
mkdirSync: (a) => mockmkDir(a),
writeFileSync: (a) => mockwriteFile(a),
};
});
jest.mock('fs');
describe('config-path', () => {
let statSyncMock;
let mkdirSyncMock;
let writeFileSyncMock;
let platformMock;
let accessSyncMock;
let fakeStats = {
isDirectory: vi.fn().mockReturnValue(true),
};
beforeEach(() => {
jest.clearAllMocks();
jest.resetAllMocks();
// Mock only statSync method
statSyncMock = vi.spyOn(fs, 'statSync');
mkdirSyncMock = vi.spyOn(fs, 'mkdirSync');
writeFileSyncMock = vi.spyOn(fs, 'writeFileSync');
accessSyncMock = vi.spyOn(fs, 'accessSync');
platformMock = vi.spyOn(os, 'platform');
platformMock.mockReturnValue('linux');
});
afterEach(() => {
// Restore the original implementation after each test
statSyncMock.mockRestore();
vi.unstubAllEnvs();
});
describe('findConfigFile', () => {
if (os.platform() !== 'win32') {
describe('using defiled location from arguments', () => {
test('with custom location', () => {
expect(findConfigFile('/home/user/custom/location/config.yaml')).toEqual(
'/home/user/custom/location/config.yaml'
);
expect(mockwriteFile).not.toHaveBeenCalled();
expect(mockmkDir).not.toHaveBeenCalled();
});
describe('using defiled location from arguments', () => {
test('with custom location', () => {
// mock
statSyncMock.mockReturnValue(fakeStats);
mkdirSyncMock.mockReturnValue(true);
writeFileSyncMock.mockReturnValue(undefined);
expect(findConfigFile('/home/user/custom/location/config.yaml')).toEqual(
'/home/user/custom/location/config.yaml'
);
expect(writeFileSyncMock).not.toHaveBeenCalled();
expect(mkdirSyncMock).not.toHaveBeenCalled();
});
});
describe('whith env variables', () => {
test('the env XDG_CONFIG_HOME is defined and the directory exist but config file is missing', async () => {
// mock
statSyncMock.mockReturnValue(fakeStats);
mkdirSyncMock.mockReturnValue(true);
writeFileSyncMock.mockReturnValue(undefined);
// node env variable
vi.stubEnv('XDG_CONFIG_HOME', '/home/user');
expect(findConfigFile()).toEqual('/home/user/verdaccio/config.yaml');
expect(writeFileSyncMock).toHaveBeenCalledWith(
'/home/user/verdaccio/config.yaml',
expect.stringContaining('packages')
);
});
describe('whith env variables', () => {
test('with XDG_CONFIG_HOME if directory exist but config file is missing', () => {
process.env.XDG_CONFIG_HOME = '/home/user';
expect(findConfigFile()).toEqual('/home/user/verdaccio/config.yaml');
expect(mockwriteFile).toHaveBeenCalledWith('/home/user/verdaccio/config.yaml');
expect(mockmkDir).toHaveBeenCalledWith('/home/user/verdaccio');
});
test('with HOME if directory exist but config file is missing', () => {
delete process.env.XDG_CONFIG_HOME;
process.env.HOME = '/home/user';
expect(findConfigFile()).toEqual('/home/user/.config/verdaccio/config.yaml');
expect(mockwriteFile).toHaveBeenCalledWith('/home/user/.config/verdaccio/config.yaml');
expect(mockmkDir).toHaveBeenCalledWith('/home/user/.config/verdaccio');
});
describe('error handling', () => {
test('XDG_CONFIG_HOME is not directory fallback to default', () => {
process.env.XDG_CONFIG_HOME = '/home/user/fail';
mockaccessSync.mockImplementation(() => {});
mockwriteFile.mockImplementation(() => {});
expect(findConfigFile()).toMatch('packages/config/verdaccio/config.yaml');
});
test('no permissions on read default config file', () => {
process.env.XDG_CONFIG_HOME = '/home/user';
mockaccessSync.mockImplementation(() => {
throw new Error('error on write file');
});
expect(function () {
findConfigFile();
}).toThrow(/configuration file does not have enough permissions for reading/);
});
});
test('with HOME if directory exist but config file is missing', () => {
// mock
statSyncMock.mockReturnValue(fakeStats);
mkdirSyncMock.mockReturnValue(true);
writeFileSyncMock.mockReturnValue(undefined);
vi.stubEnv('XDG_CONFIG_HOME', '');
vi.stubEnv('HOME', '/home/user');
expect(findConfigFile()).toEqual('/home/user/.config/verdaccio/config.yaml');
expect(writeFileSyncMock).toHaveBeenCalledWith(
'/home/user/.config/verdaccio/config.yaml',
expect.stringContaining('packages')
);
expect(mkdirSyncMock).toHaveBeenCalledWith(
'/home/user/.config/verdaccio',
expect.anything()
);
});
describe('with no env variables', () => {
test('with relative location', () => {
mockaccessSync.mockImplementation(() => {});
delete process.env.XDG_CONFIG_HOME;
delete process.env.HOME;
process.env.APPDATA = '/app/data/';
describe('error handling', () => {
test('XDG_CONFIG_HOME is not directory fallback to default', () => {
// mock
statSyncMock.mockReturnValue({
isDirectory: vi.fn().mockReturnValue(false),
});
mkdirSyncMock.mockReturnValue(true);
writeFileSyncMock.mockReturnValue(undefined);
// node env variable
vi.stubEnv('XDG_CONFIG_HOME', '/home/user/fail');
expect(findConfigFile()).toMatch('packages/config/verdaccio/config.yaml');
expect(mockwriteFile).toHaveBeenCalled();
expect(mockmkDir).toHaveBeenCalled();
});
test('no permissions on read default config file', () => {
vi.stubEnv('XDG_CONFIG_HOME', '/home/user');
accessSyncMock.mockImplementation(() => {
throw new Error('error on write file');
});
expect(function () {
findConfigFile();
}).toThrow(/configuration file does not have enough permissions for reading/);
});
});
} else {
test('with windows as directory exist but config file is missing', () => {
delete process.env.XDG_CONFIG_HOME;
delete process.env.HOME;
process.env.APPDATA = '/app/data/';
expect(findConfigFile()).toMatch('\\app\\data\\verdaccio\\config.yaml');
expect(mockwriteFile).toHaveBeenCalled();
expect(mockmkDir).toHaveBeenCalled();
});
describe('with no env variables', () => {
test('with relative location', () => {
// mock
statSyncMock.mockReturnValue(fakeStats);
mkdirSyncMock.mockReturnValue(true);
writeFileSyncMock.mockReturnValue(undefined);
accessSyncMock.mockImplementation(() => {});
platformMock.mockReturnValue('win32');
// delete process.env.XDG_CONFIG_HOME;
vi.stubEnv('XDG_CONFIG_HOME', '');
vi.stubEnv('HOME', '');
vi.stubEnv('APPDATA', '/app/data/');
expect(findConfigFile()).toMatch('/app/data/verdaccio/config.yaml');
expect(writeFileSyncMock).toHaveBeenCalled();
expect(mkdirSyncMock).toHaveBeenCalled();
});
}
});
});
});

View file

@ -1,5 +1,6 @@
import _ from 'lodash';
import path from 'path';
import { describe, expect, test } from 'vitest';
import {
Config,
@ -22,7 +23,7 @@ const resolveConf = (conf) => {
return path.join(__dirname, `../src/conf/${name}${ext.startsWith('.') ? ext : '.yaml'}`);
};
const itif = (condition) => (condition ? it : it.skip);
const itif = (condition) => (condition ? test : test.skip);
const checkDefaultUplink = (config) => {
expect(_.isObject(config.uplinks[DEFAULT_UPLINK])).toBeTruthy();

View file

@ -1,4 +1,5 @@
import _ from 'lodash';
import { describe, expect, test } from 'vitest';
import { parseConfigFile } from '../src';
import { PACKAGE_ACCESS, normalisePackageAccess, normalizeUserList } from '../src/package-access';

View file

@ -1,3 +1,5 @@
import { expect, test } from 'vitest';
import { TOKEN_VALID_LENGTH, generateRandomSecretKey } from '../src/token';
test('token test valid length', () => {

View file

@ -1,3 +1,5 @@
import { describe, expect, test } from 'vitest';
import { normalisePackageAccess, parseConfigFile } from '../src';
import { hasProxyTo, sanityCheckUplinksProps, uplinkSanityCheck } from '../src/uplinks';
import { parseConfigurationFile } from './utils';

View file

@ -1,3 +1,5 @@
import { describe, expect, test } from 'vitest';
import { ROLES, createAnonymousRemoteUser, createRemoteUser } from '../src';
describe('createRemoteUser and createAnonymousRemoteUser', () => {

View file

@ -228,8 +228,8 @@ importers:
specifier: workspace:*
version: link:packages/plugins/ui-theme
'@vitest/coverage-v8':
specifier: 0.34.6
version: 0.34.6(vitest@1.6.0)
specifier: 2.0.5
version: 2.0.5(vitest@2.0.4)
aria-query:
specifier: 5.1.3
version: 5.1.3
@ -348,8 +348,8 @@ importers:
specifier: workspace:*
version: link:packages/plugins/memory
vitest:
specifier: 1.6.0
version: 1.6.0(@types/node@20.14.12)
specifier: 2.0.4
version: 2.0.4(@types/node@20.14.12)
e2e/cli/cli-commons:
devDependencies:
@ -2512,12 +2512,12 @@ packages:
'@algolia/requester-common': 4.24.0
dev: false
/@ampproject/remapping@2.2.1:
resolution: {integrity: sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==}
/@ampproject/remapping@2.3.0:
resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==}
engines: {node: '>=6.0.0'}
dependencies:
'@jridgewell/gen-mapping': 0.3.3
'@jridgewell/trace-mapping': 0.3.20
'@jridgewell/gen-mapping': 0.3.5
'@jridgewell/trace-mapping': 0.3.25
/@babel/cli@7.24.8(@babel/core@7.24.9):
resolution: {integrity: sha512-isdp+G6DpRyKc+3Gqxy2rjzgF7Zj9K0mzLNnxz+E/fgeag8qT3vVulX4gY9dGO1q0y+0lUv6V3a+uhUzMzrwXg==}
@ -2579,7 +2579,7 @@ packages:
'@babel/generator': 7.23.3
'@babel/helper-module-transforms': 7.25.0(@babel/core@7.12.9)
'@babel/helpers': 7.23.9
'@babel/parser': 7.23.9
'@babel/parser': 7.25.0
'@babel/template': 7.25.0
'@babel/traverse': 7.23.3
'@babel/types': 7.25.0
@ -2598,7 +2598,7 @@ packages:
resolution: {integrity: sha512-5e3FI4Q3M3Pbr21+5xJwCv6ZT6KmGkI0vw3Tozy5ODAQFTIWe37iT8Cr7Ice2Ntb+M3iSKCEWMB1MBgKrW3whg==}
engines: {node: '>=6.9.0'}
dependencies:
'@ampproject/remapping': 2.2.1
'@ampproject/remapping': 2.3.0
'@babel/code-frame': 7.24.7
'@babel/generator': 7.24.10
'@babel/helper-compilation-targets': 7.24.8
@ -2653,8 +2653,8 @@ packages:
engines: {node: '>=6.9.0'}
dependencies:
'@babel/types': 7.23.9
'@jridgewell/gen-mapping': 0.3.3
'@jridgewell/trace-mapping': 0.3.20
'@jridgewell/gen-mapping': 0.3.5
'@jridgewell/trace-mapping': 0.3.25
jsesc: 2.5.2
/@babel/generator@7.24.10:
@ -2871,7 +2871,7 @@ packages:
resolution: {integrity: sha512-MJJwhkoGy5c4ehfoRyrJ/owKeMl19U54h27YYftT0o2teQ3FJ3nQUf/I3LlJsX4l3qlw7WRXUmiyajvHXoTubQ==}
engines: {node: '>=6.9.0'}
dependencies:
'@babel/types': 7.24.9
'@babel/types': 7.25.0
/@babel/helper-member-expression-to-functions@7.24.8:
resolution: {integrity: sha512-LABppdt+Lp/RlBxqrh4qgf1oEH/WxdzQNDJIu5gC/W1GyvPVrOBiItmmM8wan2fm4oYqFuFfkXmlGpLQhPY8CA==}
@ -4884,8 +4884,8 @@ packages:
'@babel/helper-function-name': 7.23.0
'@babel/helper-hoist-variables': 7.22.5
'@babel/helper-split-export-declaration': 7.22.6
'@babel/parser': 7.23.9
'@babel/types': 7.23.9
'@babel/parser': 7.25.0
'@babel/types': 7.25.0
debug: 4.3.6(supports-color@5.5.0)
globals: 11.12.0
transitivePeerDependencies:
@ -7276,7 +7276,7 @@ packages:
resolution: {integrity: sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
dependencies:
'@jridgewell/trace-mapping': 0.3.20
'@jridgewell/trace-mapping': 0.3.25
callsites: 3.1.0
graceful-fs: 4.2.11
@ -7407,8 +7407,8 @@ packages:
/@jridgewell/source-map@0.3.5:
resolution: {integrity: sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==}
dependencies:
'@jridgewell/gen-mapping': 0.3.3
'@jridgewell/trace-mapping': 0.3.20
'@jridgewell/gen-mapping': 0.3.5
'@jridgewell/trace-mapping': 0.3.25
/@jridgewell/source-map@0.3.6:
resolution: {integrity: sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==}
@ -9782,11 +9782,11 @@ packages:
dependencies:
'@babel/core': 7.24.9
'@babel/generator': 7.23.6
'@babel/parser': 7.23.9
'@babel/parser': 7.25.0
'@babel/plugin-transform-react-jsx': 7.22.15(@babel/core@7.24.9)
'@babel/preset-env': 7.25.0(@babel/core@7.24.9)
'@babel/traverse': 7.23.9
'@babel/types': 7.23.9
'@babel/types': 7.25.0
'@storybook/csf': 0.0.2--canary.4566f4d.1
'@storybook/mdx1-csf': 0.0.1(@babel/core@7.24.9)
core-js: 3.35.0
@ -11609,64 +11609,77 @@ packages:
http-status-codes: 2.2.0
dev: true
/@vitest/coverage-v8@0.34.6(vitest@1.6.0):
resolution: {integrity: sha512-fivy/OK2d/EsJFoEoxHFEnNGTg+MmdZBAVK9Ka4qhXR2K3J0DS08vcGVwzDtXSuUMabLv4KtPcpSKkcMXFDViw==}
/@vitest/coverage-v8@2.0.5(vitest@2.0.4):
resolution: {integrity: sha512-qeFcySCg5FLO2bHHSa0tAZAOnAUbp4L6/A5JDuj9+bt53JREl8hpLjLHEWF0e/gWc8INVpJaqA7+Ene2rclpZg==}
peerDependencies:
vitest: '>=0.32.0 <1'
vitest: 2.0.5
dependencies:
'@ampproject/remapping': 2.2.1
'@ampproject/remapping': 2.3.0
'@bcoe/v8-coverage': 0.2.3
istanbul-lib-coverage: 3.2.0
debug: 4.3.6(supports-color@5.5.0)
istanbul-lib-coverage: 3.2.2
istanbul-lib-report: 3.0.1
istanbul-lib-source-maps: 4.0.1
istanbul-reports: 3.1.6
magic-string: 0.30.4
picocolors: 1.0.0
std-env: 3.4.3
test-exclude: 6.0.0
v8-to-istanbul: 9.1.3
vitest: 1.6.0(@types/node@20.14.12)
istanbul-lib-source-maps: 5.0.6
istanbul-reports: 3.1.7
magic-string: 0.30.10
magicast: 0.3.4
std-env: 3.7.0
test-exclude: 7.0.1
tinyrainbow: 1.2.0
vitest: 2.0.4(@types/node@20.14.12)
transitivePeerDependencies:
- supports-color
dev: true
/@vitest/expect@1.6.0:
resolution: {integrity: sha512-ixEvFVQjycy/oNgHjqsL6AZCDduC+tflRluaHIzKIsdbzkLn2U/iBnVeJwB6HsIjQBdfMR8Z0tRxKUsvFJEeWQ==}
/@vitest/expect@2.0.4:
resolution: {integrity: sha512-39jr5EguIoanChvBqe34I8m1hJFI4+jxvdOpD7gslZrVQBKhh8H9eD7J/LJX4zakrw23W+dITQTDqdt43xVcJw==}
dependencies:
'@vitest/spy': 1.6.0
'@vitest/utils': 1.6.0
chai: 4.3.10
'@vitest/spy': 2.0.4
'@vitest/utils': 2.0.4
chai: 5.1.1
tinyrainbow: 1.2.0
dev: true
/@vitest/runner@1.6.0:
resolution: {integrity: sha512-P4xgwPjwesuBiHisAVz/LSSZtDjOTPYZVmNAnpHHSR6ONrf8eCJOFRvUwdHn30F5M1fxhqtl7QZQUk2dprIXAg==}
/@vitest/pretty-format@2.0.4:
resolution: {integrity: sha512-RYZl31STbNGqf4l2eQM1nvKPXE0NhC6Eq0suTTePc4mtMQ1Fn8qZmjV4emZdEdG2NOWGKSCrHZjmTqDCDoeFBw==}
dependencies:
'@vitest/utils': 1.6.0
p-limit: 5.0.0
pathe: 1.1.1
tinyrainbow: 1.2.0
dev: true
/@vitest/snapshot@1.6.0:
resolution: {integrity: sha512-+Hx43f8Chus+DCmygqqfetcAZrDJwvTj0ymqjQq4CvmpKFSTVteEOBzCusu1x2tt4OJcvBflyHUE0DZSLgEMtQ==}
/@vitest/pretty-format@2.0.5:
resolution: {integrity: sha512-h8k+1oWHfwTkyTkb9egzwNMfJAEx4veaPSnMeKbVSjp4euqGSbQlm5+6VHwTr7u4FJslVVsUG5nopCaAYdOmSQ==}
dependencies:
tinyrainbow: 1.2.0
dev: true
/@vitest/runner@2.0.4:
resolution: {integrity: sha512-Gk+9Su/2H2zNfNdeJR124gZckd5st4YoSuhF1Rebi37qTXKnqYyFCd9KP4vl2cQHbtuVKjfEKrNJxHHCW8thbQ==}
dependencies:
'@vitest/utils': 2.0.4
pathe: 1.1.2
dev: true
/@vitest/snapshot@2.0.4:
resolution: {integrity: sha512-or6Mzoz/pD7xTvuJMFYEtso1vJo1S5u6zBTinfl+7smGUhqybn6VjzCDMhmTyVOFWwkCMuNjmNNxnyXPgKDoPw==}
dependencies:
'@vitest/pretty-format': 2.0.4
magic-string: 0.30.10
pathe: 1.1.1
pretty-format: 29.7.0
pathe: 1.1.2
dev: true
/@vitest/spy@1.6.0:
resolution: {integrity: sha512-leUTap6B/cqi/bQkXUu6bQV5TZPx7pmMBKBQiI0rJA8c3pB56ZsaTbREnF7CJfmvAS4V2cXIBAh/3rVwrrCYgw==}
/@vitest/spy@2.0.4:
resolution: {integrity: sha512-uTXU56TNoYrTohb+6CseP8IqNwlNdtPwEO0AWl+5j7NelS6x0xZZtP0bDWaLvOfUbaYwhhWp1guzXUxkC7mW7Q==}
dependencies:
tinyspy: 2.2.1
tinyspy: 3.0.0
dev: true
/@vitest/utils@1.6.0:
resolution: {integrity: sha512-21cPiuGMoMZwiOHa2i4LXkMkMkCGzA+MVFV70jRwHo95dL4x/ts5GZhML1QWuy7yfp3WzK3lRvZi3JnXTYqrBw==}
/@vitest/utils@2.0.4:
resolution: {integrity: sha512-Zc75QuuoJhOBnlo99ZVUkJIuq4Oj0zAkrQ2VzCqNCx6wAwViHEh5Fnp4fiJTE9rA+sAoXRf00Z9xGgfEzV6fzQ==}
dependencies:
diff-sequences: 29.6.3
'@vitest/pretty-format': 2.0.4
estree-walker: 3.0.3
loupe: 2.3.7
pretty-format: 29.7.0
loupe: 3.1.1
tinyrainbow: 1.2.0
dev: true
/@vue/compiler-core@3.4.34:
@ -12183,12 +12196,6 @@ packages:
engines: {node: '>=0.4.0'}
hasBin: true
/acorn@8.12.0:
resolution: {integrity: sha512-RTvkC4w+KNXrM39/lWCUaG0IbRkWdCv7W/IOW9oU6SawyxulvkQy5HQPVTKxEjczcUvapcrw3cFx/60VN/NRNw==}
engines: {node: '>=0.4.0'}
hasBin: true
dev: true
/acorn@8.12.1:
resolution: {integrity: sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==}
engines: {node: '>=0.4.0'}
@ -12727,8 +12734,9 @@ packages:
util: 0.10.3
dev: true
/assertion-error@1.1.0:
resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==}
/assertion-error@2.0.1:
resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==}
engines: {node: '>=12'}
dev: true
/assign-symbols@1.0.0:
@ -13836,17 +13844,15 @@ packages:
/ccount@2.0.1:
resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==}
/chai@4.3.10:
resolution: {integrity: sha512-0UXG04VuVbruMUYbJ6JctvH0YnC/4q3/AkT18q4NaITo91CUm0liMS9VqzT9vZhVQ/1eqPanMWjBM+Juhfb/9g==}
engines: {node: '>=4'}
/chai@5.1.1:
resolution: {integrity: sha512-pT1ZgP8rPNqUgieVaEY+ryQr6Q4HXNg8Ei9UnLUrjN4IA7dvQC5JB+/kxVcPNDHyBcc/26CXPkbNzq3qwrOEKA==}
engines: {node: '>=12'}
dependencies:
assertion-error: 1.1.0
check-error: 1.0.3
deep-eql: 4.1.3
get-func-name: 2.0.2
loupe: 2.3.6
pathval: 1.1.1
type-detect: 4.0.8
assertion-error: 2.0.1
check-error: 2.1.1
deep-eql: 5.0.2
loupe: 3.1.1
pathval: 2.0.0
dev: true
/chalk@1.1.3:
@ -13918,10 +13924,9 @@ packages:
/chardet@0.7.0:
resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==}
/check-error@1.0.3:
resolution: {integrity: sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==}
dependencies:
get-func-name: 2.0.2
/check-error@2.1.1:
resolution: {integrity: sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==}
engines: {node: '>= 16'}
dev: true
/check-more-types@2.24.0:
@ -14401,10 +14406,6 @@ packages:
yargs: 17.7.2
dev: true
/confbox@0.1.7:
resolution: {integrity: sha512-uJcB/FKZtBMCJpK8MQji6bJHgu1tixKPxRLeGkNzBoOZzpnZUJm0jm2/sBDWcuBx1dYgxV4JU+g5hmNxCyAmdA==}
dev: true
/configstore@5.0.1:
resolution: {integrity: sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==}
engines: {node: '>=8'}
@ -15798,11 +15799,9 @@ packages:
babel-plugin-macros:
optional: true
/deep-eql@4.1.3:
resolution: {integrity: sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==}
/deep-eql@5.0.2:
resolution: {integrity: sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==}
engines: {node: '>=6'}
dependencies:
type-detect: 4.0.8
dev: true
/deep-equal@1.1.1:
@ -18749,6 +18748,18 @@ packages:
minipass: 7.0.4
path-scurry: 1.10.1
/glob@10.4.5:
resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==}
hasBin: true
dependencies:
foreground-child: 3.1.1
jackspeak: 3.4.3
minimatch: 9.0.5
minipass: 7.1.2
package-json-from-dist: 1.0.0
path-scurry: 1.11.1
dev: true
/glob@7.2.3:
resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==}
deprecated: Glob versions prior to v9 are no longer supported
@ -20460,6 +20471,10 @@ packages:
resolution: {integrity: sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==}
engines: {node: '>=8'}
/istanbul-lib-coverage@3.2.2:
resolution: {integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==}
engines: {node: '>=8'}
/istanbul-lib-instrument@5.2.1:
resolution: {integrity: sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==}
engines: {node: '>=8'}
@ -20488,7 +20503,7 @@ packages:
resolution: {integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==}
engines: {node: '>=10'}
dependencies:
istanbul-lib-coverage: 3.2.0
istanbul-lib-coverage: 3.2.2
make-dir: 4.0.0
supports-color: 7.2.0
@ -20502,6 +20517,17 @@ packages:
transitivePeerDependencies:
- supports-color
/istanbul-lib-source-maps@5.0.6:
resolution: {integrity: sha512-yg2d+Em4KizZC5niWhQaIomgf5WlL4vOOjZ5xGCmF8SnPE/mDWWXgvRExdcpCgh9lLRRa1/fSYp2ymmbJ1pI+A==}
engines: {node: '>=10'}
dependencies:
'@jridgewell/trace-mapping': 0.3.25
debug: 4.3.6(supports-color@5.5.0)
istanbul-lib-coverage: 3.2.2
transitivePeerDependencies:
- supports-color
dev: true
/istanbul-reports@3.1.6:
resolution: {integrity: sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg==}
engines: {node: '>=8'}
@ -20509,6 +20535,14 @@ packages:
html-escaper: 2.0.2
istanbul-lib-report: 3.0.1
/istanbul-reports@3.1.7:
resolution: {integrity: sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==}
engines: {node: '>=8'}
dependencies:
html-escaper: 2.0.2
istanbul-lib-report: 3.0.1
dev: true
/iterate-iterator@1.0.2:
resolution: {integrity: sha512-t91HubM4ZDQ70M9wqp+pcNpu8OyJ9UAtXntT/Bcsvp5tZMnz9vRa+IunKXeI8AnfZMTv0jNuVEmGeLSMjVvfPw==}
dev: true
@ -20548,6 +20582,14 @@ packages:
optionalDependencies:
'@pkgjs/parseargs': 0.11.0
/jackspeak@3.4.3:
resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==}
dependencies:
'@isaacs/cliui': 8.0.2
optionalDependencies:
'@pkgjs/parseargs': 0.11.0
dev: true
/jake@10.9.1:
resolution: {integrity: sha512-61btcOHNnLnsOdtLgA5efqQWjnSi/vow5HbI7HMdKKWqvrKR1bLK3BPlJn9gcSaP2ewuamUSMB5XEy76KUIS2w==}
engines: {node: '>=10'}
@ -21114,10 +21156,6 @@ packages:
/js-tokens@4.0.0:
resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
/js-tokens@9.0.0:
resolution: {integrity: sha512-WriZw1luRMlmV3LGJaR6QOJjWwgLUTf89OwT2lUOyjX2dJGBwgmIkbcz+7WFZjrZM635JOIR517++e/67CP9dQ==}
dev: true
/js-yaml@3.14.1:
resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==}
hasBin: true
@ -21664,14 +21702,6 @@ packages:
resolution: {integrity: sha512-AgQGZisAlTPbTEzrHPb6q+NYBMD+DP9uvGSIjSUM5uG+0jG15cb8axWpxuOIqrmQjn6scaaH8JwloiP27b2KXA==}
dev: false
/local-pkg@0.5.0:
resolution: {integrity: sha512-ok6z3qlYyCDS4ZEU27HaU6x/xZa9Whf8jD4ptH5UZTQYZVYeb9bnZ3ojVhiJNLiXK1Hfc0GNbLXcmZ5plLDDBg==}
engines: {node: '>=14'}
dependencies:
mlly: 1.7.1
pkg-types: 1.0.3
dev: true
/localstorage-memory@1.0.3:
resolution: {integrity: sha512-t9P8WB6DcVttbw/W4PIE8HOqum8Qlvx5SjR6oInwR9Uia0EEmyUeBh7S+weKByW+l/f45Bj4L/dgZikGFDM6ng==}
@ -21813,15 +21843,8 @@ packages:
signal-exit: 3.0.7
dev: true
/loupe@2.3.6:
resolution: {integrity: sha512-RaPMZKiMy8/JruncMU5Bt6na1eftNoo++R4Y+N2FrxkDVTrGvcyzFTsaGif4QTeKESheMGegbhw6iUAq+5A8zA==}
deprecated: Please upgrade to 2.3.7 which fixes GHSA-4q6p-r6v2-jvc5
dependencies:
get-func-name: 2.0.2
dev: true
/loupe@2.3.7:
resolution: {integrity: sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==}
/loupe@3.1.1:
resolution: {integrity: sha512-edNu/8D5MKVfGVFRhFf8aAxiTM6Wumfz5XsaatSxlD3w4R1d/WEKUTydCdPGbl9K7QG/Ca3GnDV2sIKIpXRQcw==}
dependencies:
get-func-name: 2.0.2
dev: true
@ -21854,6 +21877,10 @@ packages:
resolution: {integrity: sha512-/1clY/ui8CzjKFyjdvwPWJUYKiFVXG2I2cY0ssG7h4+hwk+XOIX7ZSG9Q7TW8TW3Kp3BUSqgFWBLgL4PJ+Blag==}
engines: {node: 14 || >=16.14}
/lru-cache@10.4.3:
resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==}
dev: true
/lru-cache@4.1.5:
resolution: {integrity: sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==}
dependencies:
@ -21890,11 +21917,12 @@ packages:
'@jridgewell/sourcemap-codec': 1.4.15
dev: true
/magic-string@0.30.4:
resolution: {integrity: sha512-Q/TKtsC5BPm0kGqgBIF9oXAs/xEf2vRKiIB4wCRQTJOQIByZ1d+NnUOotvJOvNpi5RNIgVOMC3pOuaP1ZTDlVg==}
engines: {node: '>=12'}
/magicast@0.3.4:
resolution: {integrity: sha512-TyDF/Pn36bBji9rWKHlZe+PZb6Mx5V8IHCSxk7X4aljM4e/vyDvZZYwHewdVaqiA0nb3ghfHU/6AUpDxWoER2Q==}
dependencies:
'@jridgewell/sourcemap-codec': 1.4.15
'@babel/parser': 7.25.0
'@babel/types': 7.25.0
source-map-js: 1.2.0
dev: true
/make-dir@2.1.0:
@ -22777,6 +22805,11 @@ packages:
resolution: {integrity: sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==}
engines: {node: '>=16 || 14 >=14.17'}
/minipass@7.1.2:
resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==}
engines: {node: '>=16 || 14 >=14.17'}
dev: true
/minizlib@2.1.2:
resolution: {integrity: sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==}
engines: {node: '>= 8'}
@ -22826,15 +22859,6 @@ packages:
engines: {node: '>=10'}
hasBin: true
/mlly@1.7.1:
resolution: {integrity: sha512-rrVRZRELyQzrIUAVMHxP97kv+G786pHmOKzuFII8zDYahFBS7qnHh2AlYSl1GAHhaMPCz6/oHjVMcfFYgFYHgA==}
dependencies:
acorn: 8.12.0
pathe: 1.1.2
pkg-types: 1.1.1
ufo: 1.5.3
dev: true
/mockdate@3.0.5:
resolution: {integrity: sha512-iniQP4rj1FhBdBYS/+eQv7j1tadJ9lJtdzgOpvsOHng/GbcDh2Fhdeq+ZRldrPYdXvCyfFUmFeEwEGXZB5I/AQ==}
dev: true
@ -24000,13 +24024,6 @@ packages:
yocto-queue: 1.1.1
dev: true
/p-limit@5.0.0:
resolution: {integrity: sha512-/Eaoq+QyLSiXQ4lyYV23f14mZRQcXnxfHrN0vCai+ak9G0pp9iEQukIIZq5NccEvwRB8PUnZT0KsOoDCINS1qQ==}
engines: {node: '>=18'}
dependencies:
yocto-queue: 1.0.0
dev: true
/p-locate@3.0.0:
resolution: {integrity: sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==}
engines: {node: '>=6'}
@ -24088,6 +24105,10 @@ packages:
resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==}
engines: {node: '>=6'}
/package-json-from-dist@1.0.0:
resolution: {integrity: sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==}
dev: true
/package-json@6.5.0:
resolution: {integrity: sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==}
engines: {node: '>=8'}
@ -24344,6 +24365,14 @@ packages:
lru-cache: 10.1.0
minipass: 7.0.4
/path-scurry@1.11.1:
resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==}
engines: {node: '>=16 || 14 >=14.18'}
dependencies:
lru-cache: 10.4.3
minipass: 7.1.2
dev: true
/path-to-regexp@0.1.7:
resolution: {integrity: sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==}
@ -24381,16 +24410,13 @@ packages:
resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==}
engines: {node: '>=8'}
/pathe@1.1.1:
resolution: {integrity: sha512-d+RQGp0MAYTIaDBIMmOfMwz3E+LOZnxx1HZd5R18mmCZY0QBlK0LDZfPc8FW8Ed2DlvsuE6PRjroDY+wg4+j/Q==}
dev: true
/pathe@1.1.2:
resolution: {integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==}
dev: true
/pathval@1.1.1:
resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==}
/pathval@2.0.0:
resolution: {integrity: sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==}
engines: {node: '>= 14.16'}
dev: true
/pbkdf2@3.1.2:
@ -24545,22 +24571,6 @@ packages:
find-up: 6.3.0
dev: true
/pkg-types@1.0.3:
resolution: {integrity: sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A==}
dependencies:
jsonc-parser: 3.2.0
mlly: 1.7.1
pathe: 1.1.1
dev: true
/pkg-types@1.1.1:
resolution: {integrity: sha512-ko14TjmDuQJ14zsotODv7dBlwxKhUKQEhuhmbqo1uCi9BB0Z2alo/wAXg6q1dTR5TyuqYyWhjtfe/Tsh+X28jQ==}
dependencies:
confbox: 0.1.7
mlly: 1.7.1
pathe: 1.1.2
dev: true
/pkg-up@3.1.0:
resolution: {integrity: sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==}
engines: {node: '>=8'}
@ -25651,15 +25661,6 @@ packages:
picocolors: 1.0.0
source-map-js: 1.0.2
/postcss@8.4.38:
resolution: {integrity: sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==}
engines: {node: ^10 || ^12 || >=14}
dependencies:
nanoid: 3.3.7
picocolors: 1.0.0
source-map-js: 1.2.0
dev: true
/postcss@8.4.40:
resolution: {integrity: sha512-YF2kKIUzAofPMpfH6hOi2cGnv/HrUlfucspc7pDyvv7kGdqXrfj8SCl/t8owkEgKEuu8ZcRjSOxFxVLqwChZ2Q==}
engines: {node: ^10 || ^12 || >=14}
@ -28694,12 +28695,6 @@ packages:
resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
engines: {node: '>=8'}
/strip-literal@2.1.0:
resolution: {integrity: sha512-Op+UycaUt/8FbN/Z2TWPBLge3jWrP3xj10f3fnYxf052bKuS3EKs1ZQcVGjnEMdsNVAM+plXRdmjrZ/KgG3Skw==}
dependencies:
js-tokens: 9.0.0
dev: true
/style-loader@1.3.0(webpack@4.47.0):
resolution: {integrity: sha512-V7TCORko8rs9rIqkSrlMfkqA63DfoGBBJmK1kKGCcSi+BWb4cqz0SRsnp4l6rU5iwOEd0/2ePv68SV22VXon4Q==}
engines: {node: '>= 8.9.0'}
@ -29284,6 +29279,15 @@ packages:
glob: 7.2.3
minimatch: 3.1.2
/test-exclude@7.0.1:
resolution: {integrity: sha512-pFYqmTw68LXVjeWJMST4+borgQP2AyMNbg1BpZh9LbyhUeNkeaPF9gzfPGUAnSMV3qPYdWUwDIjjCLiSDOl7vg==}
engines: {node: '>=18'}
dependencies:
'@istanbuljs/schema': 0.1.3
glob: 10.4.5
minimatch: 9.0.5
dev: true
/text-table@0.2.0:
resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==}
@ -29334,13 +29338,18 @@ packages:
resolution: {integrity: sha512-1/eK7zUnIklz4JUUlL+658n58XO2hHLQfSk1Zf2LKieUjxidN16eKFEoDEfjHc3ohofSSqK3X5yO6VGb6iW8Lw==}
dev: true
/tinypool@0.8.4:
resolution: {integrity: sha512-i11VH5gS6IFeLY3gMBQ00/MmLncVP7JLXOw1vlgkytLmJK7QnEr7NXf0LBdxfmNPAeyetukOk0bOYrJrFGjYJQ==}
/tinypool@1.0.0:
resolution: {integrity: sha512-KIKExllK7jp3uvrNtvRBYBWBOAXSX8ZvoaD8T+7KB/QHIuoJW3Pmr60zucywjAlMb5TeXUkcs/MWeWLu0qvuAQ==}
engines: {node: ^18.0.0 || >=20.0.0}
dev: true
/tinyrainbow@1.2.0:
resolution: {integrity: sha512-weEDEq7Z5eTHPDh4xjX789+fHfF+P8boiFB+0vbWzpbnbsEr/GRaohi/uMKxg8RZMXnl1ItAi/IUHWMsjDV7kQ==}
engines: {node: '>=14.0.0'}
dev: true
/tinyspy@2.2.1:
resolution: {integrity: sha512-KYad6Vy5VDWV4GH3fjpseMQ/XU2BhIYP7Vzd0LG44qRWm/Yt2WCOTicFdvmgo6gWaqooMQCawTtILVQJupKu7A==}
/tinyspy@3.0.0:
resolution: {integrity: sha512-q5nmENpTHgiPVd1cJDDc9cVoYN5x4vCvwT3FMilvKPKneCBZAxn2YWQjDF0UMcE9k0Cay1gBiDfTMU0g+mPMQA==}
engines: {node: '>=14.0.0'}
dev: true
@ -29866,10 +29875,6 @@ packages:
/ua-parser-js@0.7.35:
resolution: {integrity: sha512-veRf7dawaj9xaWEu9HoTVn5Pggtc/qj+kqTOFvNiN1l0YdxwC1kvel57UCjThjGa3BHBihE8/UJAHI+uQHmd/g==}
/ufo@1.5.3:
resolution: {integrity: sha512-Y7HYmWaFwPUmkoQCUIAYpKqkOf+SbVj/2fJJZ4RJMCfZp0rTGwRbzQD+HghfnhKOjL9E01okqz+ncJskGYfBNw==}
dev: true
/uglify-js@3.19.0:
resolution: {integrity: sha512-wNKHUY2hYYkf6oSFfhwwiHo4WCHzHmzcXsqXYTN9ja3iApYIFbb2U6ics9hBcYLHcYGQoAlwnZlTrf3oF+BL/Q==}
engines: {node: '>=0.8.0'}
@ -30461,7 +30466,7 @@ packages:
resolution: {integrity: sha512-9lDD+EVI2fjFsMWXc6dy5JJzBsVTcQ2fVkfBvncZ6xJWG9wtBhOldG+mHkSL0+V1K/xgZz0JDO5UT5hFwHUghg==}
engines: {node: '>=10.12.0'}
dependencies:
'@jridgewell/trace-mapping': 0.3.20
'@jridgewell/trace-mapping': 0.3.25
'@types/istanbul-lib-coverage': 2.0.4
convert-source-map: 2.0.0
@ -30558,15 +30563,15 @@ packages:
remove-trailing-separator: 1.1.0
replace-ext: 1.0.1
/vite-node@1.6.0(@types/node@20.14.12):
resolution: {integrity: sha512-de6HJgzC+TFzOu0NTC4RAIsyf/DY/ibWDYQUcuEA84EMHhcefTUGkjFHKKEJhQN4A+6I0u++kr3l36ZF2d7XRw==}
/vite-node@2.0.4(@types/node@20.14.12):
resolution: {integrity: sha512-ZpJVkxcakYtig5iakNeL7N3trufe3M6vGuzYAr4GsbCTwobDeyPJpE4cjDhhPluv8OvQCFzu2LWp6GkoKRITXA==}
engines: {node: ^18.0.0 || >=20.0.0}
hasBin: true
dependencies:
cac: 6.7.14
debug: 4.3.6(supports-color@5.5.0)
pathe: 1.1.1
picocolors: 1.0.0
pathe: 1.1.2
tinyrainbow: 1.2.0
vite: 5.3.1(@types/node@20.14.12)
transitivePeerDependencies:
- '@types/node'
@ -30609,21 +30614,21 @@ packages:
dependencies:
'@types/node': 20.14.12
esbuild: 0.21.5
postcss: 8.4.38
postcss: 8.4.40
rollup: 4.18.0
optionalDependencies:
fsevents: 2.3.3
dev: true
/vitest@1.6.0(@types/node@20.14.12):
resolution: {integrity: sha512-H5r/dN06swuFnzNFhq/dnz37bPXnq8xB2xB5JOVk8K09rUtoeNN+LHWkoQ0A/i3hvbUKKcCei9KpbxqHMLhLLA==}
/vitest@2.0.4(@types/node@20.14.12):
resolution: {integrity: sha512-luNLDpfsnxw5QSW4bISPe6tkxVvv5wn2BBs/PuDRkhXZ319doZyLOBr1sjfB5yCEpTiU7xCAdViM8TNVGPwoog==}
engines: {node: ^18.0.0 || >=20.0.0}
hasBin: true
peerDependencies:
'@edge-runtime/vm': '*'
'@types/node': ^18.0.0 || >=20.0.0
'@vitest/browser': 1.6.0
'@vitest/ui': 1.6.0
'@vitest/browser': 2.0.4
'@vitest/ui': 2.0.4
happy-dom: '*'
jsdom: '*'
peerDependenciesMeta:
@ -30640,27 +30645,26 @@ packages:
jsdom:
optional: true
dependencies:
'@ampproject/remapping': 2.3.0
'@types/node': 20.14.12
'@vitest/expect': 1.6.0
'@vitest/runner': 1.6.0
'@vitest/snapshot': 1.6.0
'@vitest/spy': 1.6.0
'@vitest/utils': 1.6.0
acorn-walk: 8.3.3
chai: 4.3.10
'@vitest/expect': 2.0.4
'@vitest/pretty-format': 2.0.5
'@vitest/runner': 2.0.4
'@vitest/snapshot': 2.0.4
'@vitest/spy': 2.0.4
'@vitest/utils': 2.0.4
chai: 5.1.1
debug: 4.3.6(supports-color@5.5.0)
execa: 8.0.1
local-pkg: 0.5.0
magic-string: 0.30.10
pathe: 1.1.1
picocolors: 1.0.0
pathe: 1.1.2
std-env: 3.7.0
strip-literal: 2.1.0
tinybench: 2.8.0
tinypool: 0.8.4
tinypool: 1.0.0
tinyrainbow: 1.2.0
vite: 5.3.1(@types/node@20.14.12)
vite-node: 1.6.0(@types/node@20.14.12)
why-is-node-running: 2.2.2
vite-node: 2.0.4(@types/node@20.14.12)
why-is-node-running: 2.3.0
transitivePeerDependencies:
- less
- lightningcss
@ -31563,8 +31567,8 @@ packages:
dependencies:
isexe: 2.0.0
/why-is-node-running@2.2.2:
resolution: {integrity: sha512-6tSwToZxTOcotxHeA+qGCq1mVzKR3CwcJGmVcY+QE8SHy6TnpFnh8PAvPNHYr7EcuVeG0QSMxtYCuO1ta/G/oA==}
/why-is-node-running@2.3.0:
resolution: {integrity: sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==}
engines: {node: '>=8'}
hasBin: true
dependencies:
@ -31987,11 +31991,6 @@ packages:
resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
engines: {node: '>=10'}
/yocto-queue@1.0.0:
resolution: {integrity: sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==}
engines: {node: '>=12.20'}
dev: true
/yocto-queue@1.1.1:
resolution: {integrity: sha512-b4JR1PFR10y1mKjhHY9LaGo6tmrgjit7hxVIeAmyMw3jegXR4dhYqLaQF5zMXZxY7tLpMyJeLjr1C4rLmkVe8g==}
engines: {node: '>=12.20'}