From da21030000eda65819c70528f91cb6f8c9b3c31d Mon Sep 17 00:00:00 2001 From: Guz013 <43732358+Guz013@users.noreply.github.com> Date: Fri, 25 Aug 2023 17:31:56 -0300 Subject: [PATCH] =?UTF-8?q?feat:=20=E2=9C=A8=20add=20eslint-plugin-i?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/cli/src/cli.js | 7 +- packages/cli/src/configs.js | 3 +- packages/cli/src/configsFile.js | 8 +- packages/cli/src/configsProcessor.js | 6 +- packages/cli/src/lib/astUtils.js | 21 +- .../cli/src/lib/{str.js => capitalize.js} | 4 +- packages/cli/src/lib/count.js | 3 +- packages/cli/src/packageInstaller.js | 9 +- packages/cli/src/types.d.ts | 18 +- packages/cli/src/workspace.js | 3 +- packages/config/index.d.ts | 8 +- packages/config/package.json | 2 + .../config/src/@types/eslint-plugin-i.d.ts | 26 ++ packages/config/src/configs/common.js | 18 ++ packages/config/src/configs/environments.js | 3 +- packages/config/src/configs/formatting.js | 10 + packages/config/src/configs/index.js | 3 +- packages/config/src/configs/recommended.js | 44 +++ packages/config/src/eslintrc-compact.js | 8 +- packages/config/src/presets/index.js | 3 +- packages/config/src/types.d.ts | 8 +- pnpm-lock.yaml | 299 +++++++++++++++--- 22 files changed, 415 insertions(+), 99 deletions(-) rename packages/cli/src/lib/{str.js => capitalize.js} (71%) create mode 100644 packages/config/src/@types/eslint-plugin-i.d.ts diff --git a/packages/cli/src/cli.js b/packages/cli/src/cli.js index 3dec266..d9b16ce 100644 --- a/packages/cli/src/cli.js +++ b/packages/cli/src/cli.js @@ -8,8 +8,8 @@ import { createSpinner } from 'nanospinner'; import count from './lib/count.js'; import prompts from 'prompts'; import ConfigsFile from './configsFile.js'; -import * as cardinal from 'cardinal'; -import ansi from 'sisteransi'; +import cardinal from 'cardinal'; +import { erase } from 'sisteransi'; import PackageInstaller from './packageInstaller.js'; import notNull from './lib/notNull.js'; @@ -29,6 +29,7 @@ export default class Cli { */ constructor(args) { this.#program + .argument('[url-to-config]') .option('--packages ') .option('--dir ', undefined) .option('--merge-to-root') @@ -109,7 +110,7 @@ export default class Cli { initial: true, })).write; - stdout.write(ansi.erase.lines(pkg.configFile.content.split('\n').length + 2)); + stdout.write(erase.lines(pkg.configFile.content.split('\n').length + 2)); if (shouldWrite) await fileHandler.write(pkg.configFile.path, pkg.configFile.content); diff --git a/packages/cli/src/configs.js b/packages/cli/src/configs.js index 7f40b1b..2607961 100644 --- a/packages/cli/src/configs.js +++ b/packages/cli/src/configs.js @@ -1,6 +1,6 @@ /** @type {import('./types').Config[]} */ -export default [ +const cliConfig = [ { name: 'framework', type: 'multiple', @@ -31,3 +31,4 @@ export default [ }], }, ]; +export default cliConfig; diff --git a/packages/cli/src/configsFile.js b/packages/cli/src/configsFile.js index 152a05f..1d22cf0 100644 --- a/packages/cli/src/configsFile.js +++ b/packages/cli/src/configsFile.js @@ -1,6 +1,6 @@ import path from 'node:path'; import notNull from './lib/notNull.js'; -import * as recast from 'recast'; +import { parse, prettyPrint } from 'recast'; import fs from 'node:fs/promises'; import { existsSync } from 'node:fs'; import astUtils from './lib/astUtils.js'; @@ -160,7 +160,7 @@ export default class ConfigsWriter { /** @type {{program: Program}} */ // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call - const { program: exportTemplateAst } = recast.parse([ + const { program: exportTemplateAst } = parse([ '/** @type {import(\'eslint\').Linter.FlatConfig[]} */', 'export default [', '', @@ -304,7 +304,7 @@ export default class ConfigsWriter { /** @type {{program: Program}} */ // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment - const { program: ast } = recast.parse(existingConfig, { parser: (await import('recast/parsers/babel.js')) }); + const { program: ast } = parse(existingConfig, { parser: (await import('recast/parsers/babel.js')) }); await this.addDefaultExport(ast); @@ -327,7 +327,7 @@ export default class ConfigsWriter { this.addElementsToExport(ast, elements); this.addPackageImports(ast, config.imports); - const finalCode = recast.prettyPrint(ast, { parser: (await import('recast/parsers/babel.js')) }).code; + const finalCode = prettyPrint(ast, { parser: (await import('recast/parsers/babel.js')) }).code; return finalCode; } diff --git a/packages/cli/src/configsProcessor.js b/packages/cli/src/configsProcessor.js index 9916fc3..6424ed1 100755 --- a/packages/cli/src/configsProcessor.js +++ b/packages/cli/src/configsProcessor.js @@ -3,7 +3,7 @@ import path from 'node:path'; import glob from 'picomatch'; import prompts from 'prompts'; import c from 'picocolors'; -import str from './lib/str.js'; +import capitalize from './lib/capitalize.js'; export default class ConfigsProcessor { /** @type {string} */ @@ -75,13 +75,13 @@ export default class ConfigsProcessor { for (const config of configs) { /** @type {import('prompts').Choice[]} */ - const configChoices = config.options.map(option => {return { title: `${str.capitalize(option.name)}`, value: option.name };}); + const configChoices = config.options.map(option => {return { title: `${capitalize(option.name)}`, value: option.name };}); /** @type {Record} */ const selectedOptions = await prompts({ name: config.name, type: config.type === 'multiple' ? 'multiselect' : 'select', - message: str.capitalize(config.name), + message: capitalize(config.name), choices: config.type === 'confirm' ? [ { title: 'Yes', diff --git a/packages/cli/src/lib/astUtils.js b/packages/cli/src/lib/astUtils.js index 824d48d..be0607c 100644 --- a/packages/cli/src/lib/astUtils.js +++ b/packages/cli/src/lib/astUtils.js @@ -1,4 +1,4 @@ -import * as recast from 'recast'; +import { parse, print } from 'recast'; /** * @typedef {( @@ -23,7 +23,7 @@ import * as recast from 'recast'; * @param {VariableInit} [init] Initial value of the variable * @returns {VariableDeclaration} The variable declaration ast node object */ -export function createVariable(identifier, kind = 'const', init) { +function createVariable(identifier, kind = 'const', init) { return { type: 'VariableDeclaration', kind, @@ -39,10 +39,10 @@ export function createVariable(identifier, kind = 'const', init) { * @param {string} string The expression in string * @returns {ExpressionOrIdentifier | undefined} The expression or identifier node of that string (undefined if string is not a expression) */ -export function stringToExpression(string) { +function stringToExpression(string) { /** @type {ExpressionOrIdentifier} */ // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access - const e = recast.parse(string).program.body[0].expression; + const e = parse(string).program.body[0].expression; if (['MemberExpression', 'Identifier', 'CallExpression', 'NewExpression'].includes(e.type)) return e; else return undefined; } @@ -52,7 +52,7 @@ export function stringToExpression(string) { * @param {ExpressionOrIdentifier | SpreadElement} element The element to be search * @returns {ExpressionOrIdentifier | undefined} The element of the array founded, undefined if it isn't found */ -export function findInArray(array, element) { +function findInArray(array, element) { /** @type {ExpressionOrIdentifier[]} */ // @ts-expect-error The array should have just tge type above @@ -66,8 +66,8 @@ export function findInArray(array, element) { return n; }).filter(n => n && n.type === element.type); - const toStringElements = filteredElements.map(n => recast.print(n).code); - const toStringElement = recast.print(element).code; + const toStringElements = filteredElements.map(n => print(n).code); + const toStringElement = print(element).code; const idx = toStringElements.findIndex(e => e === toStringElement); return filteredElements[idx]; @@ -77,7 +77,7 @@ export function findInArray(array, element) { * @param {ExpressionOrIdentifier} expression The expression to be spread * @returns {SpreadElement} The spread element node */ -export function toSpreadElement(expression) { +function toSpreadElement(expression) { return { type: 'SpreadElement', argument: expression, @@ -95,7 +95,7 @@ export function toSpreadElement(expression) { * @param {import('estree').ImportDeclaration} [body] The body of the import declaration to start with * @returns {ImportDeclarationHelper} A helper object for manipulating the import declaration */ -export function createImportDeclaration(source, defaultImported, body) { +function createImportDeclaration(source, defaultImported, body) { const helper = { /** @type {import('estree').ImportDeclaration} */ body: body ?? { @@ -161,10 +161,11 @@ export function createImportDeclaration(source, defaultImported, body) { } -export default { +const astUtils = { createVariable, stringToExpression, toSpreadElement, findInArray, createImportDeclaration, }; +export default astUtils; diff --git a/packages/cli/src/lib/str.js b/packages/cli/src/lib/capitalize.js similarity index 71% rename from packages/cli/src/lib/str.js rename to packages/cli/src/lib/capitalize.js index 257b0d4..2f0dd9d 100644 --- a/packages/cli/src/lib/str.js +++ b/packages/cli/src/lib/capitalize.js @@ -3,8 +3,6 @@ * @param {string} str - The string to capitalize * @returns {string} The capitalized string */ -function capitalize(str) { +export default function capitalize(str) { return str[0].toUpperCase() + str.slice(1); } - -export default { capitalize }; diff --git a/packages/cli/src/lib/count.js b/packages/cli/src/lib/count.js index d772dcd..c1f6384 100644 --- a/packages/cli/src/lib/count.js +++ b/packages/cli/src/lib/count.js @@ -9,4 +9,5 @@ function packagesWithConfigs(packages) { ).reduce((partial, sum) => partial + sum, 0); } -export default { packagesWithConfigs }; +const count = { packagesWithConfigs }; +export default count; diff --git a/packages/cli/src/packageInstaller.js b/packages/cli/src/packageInstaller.js index 4d9ca9b..a1760a5 100644 --- a/packages/cli/src/packageInstaller.js +++ b/packages/cli/src/packageInstaller.js @@ -1,11 +1,10 @@ -import { existsSync } from 'node:fs'; +import { existsSync, readFileSync } from 'node:fs'; import { join } from 'node:path'; import { exec } from 'node:child_process'; import { createSpinner } from 'nanospinner'; import c from 'picocolors'; -import * as recast from 'recast'; +import { parse, prettyPrint } from 'recast'; import { readFile, writeFile } from 'node:fs/promises'; -import { readFileSync } from 'node:fs'; /** @@ -78,7 +77,7 @@ class DenoHandler { const configFile = await readFile(configPath, 'utf8'); /** @type {{program: import('estree').Program}}*/ // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment - const { program: ast } = recast.parse(configFile, { parser: (await import('recast/parsers/babel.js')) }); + const { program: ast } = parse(configFile, { parser: (await import('recast/parsers/babel.js')) }); ast.body.map((node) => { if (node.type !== 'ImportDeclaration') return node; @@ -89,7 +88,7 @@ class DenoHandler { return node; }); - await writeFile(configPath, recast.prettyPrint(ast).code, 'utf-8'); + await writeFile(configPath, prettyPrint(ast).code, 'utf-8'); console.log(c.green('Added npm: specifier to dependencies')); diff --git a/packages/cli/src/types.d.ts b/packages/cli/src/types.d.ts index e784a55..f0b536a 100644 --- a/packages/cli/src/types.d.ts +++ b/packages/cli/src/types.d.ts @@ -1,15 +1,19 @@ import type { OptionValues } from 'commander'; -export type PackageManagerName = 'npm' | 'pnpm' | 'yarn' | 'bun' | 'deno'; +type PackageManagerName = 'npm' | 'pnpm' | 'yarn' | 'bun' | 'deno'; -export type CliArgs = { +type CliArgs = { packages?: string[] mergeToRoot?: boolean installPkgs?: boolean | PackageManagerName dir: string } & OptionValues; -export type Config = { +interface PackageManagerHandler { + install(path: string, packages: string[]): Promise | void +} + +type Config = { name: string type: 'single' | 'multiple' manual?: boolean @@ -37,7 +41,7 @@ export type Config = { }] }; -export interface Package { +interface Package { root?: boolean name: string path: string @@ -47,7 +51,7 @@ export interface Package { configFile?: ConfigFile } -export interface ConfigFile { +interface ConfigFile { path: string imports: Map configs: string[] @@ -56,6 +60,4 @@ export interface ConfigFile { content?: string } -export interface PackageManagerHandler { - install(path: string, packages: string[]): Promise | void -} +export type { PackageManagerName, PackageManagerHandler, CliArgs, Config, Package, ConfigFile }; diff --git a/packages/cli/src/workspace.js b/packages/cli/src/workspace.js index f4fd0e0..0c88d1c 100644 --- a/packages/cli/src/workspace.js +++ b/packages/cli/src/workspace.js @@ -2,7 +2,6 @@ import fs from 'node:fs/promises'; import { existsSync } from 'node:fs'; import YAML from 'yaml'; import path, { join } from 'node:path'; -import glob from 'picomatch'; import picomatch from 'picomatch'; @@ -85,7 +84,7 @@ export default class Workspace { const paths = (await fs.readdir(directory)) .map((f) => path.normalize(join(directory, f))) - .filter((p) => !glob.isMatch(p, ignores)); + .filter((p) => !picomatch.isMatch(p, ignores)); /** @type {string[]} */ const files = []; diff --git a/packages/config/index.d.ts b/packages/config/index.d.ts index 34e3970..fbdbe3b 100644 --- a/packages/config/index.d.ts +++ b/packages/config/index.d.ts @@ -7,9 +7,9 @@ import type { Linter } from 'eslint'; * @param environment - An object with environment variables to be declared and used by the configuration. * @returns The array of ESLint's configuration objects. */ -export async function defineConfig(config: Config, environment?: EnvOptions): Promise; +async function defineConfig(config: Config, environment?: EnvOptions): Promise; -export const configs: Readonly<{ +const configs: Readonly<{ /** * **This configuration is necessary to be used before any other one**. * Common configuration for using ESLit rules overrides. @@ -50,6 +50,8 @@ export const configs: Readonly<{ jsdoc: Linter.FlatConfig }>; -export const presets: Readonly<{ +const presets: Readonly<{ default: Linter.FlatConfig[] }>; + +export { presets, configs, defineConfig }; diff --git a/packages/config/package.json b/packages/config/package.json index 65256b7..5da6312 100644 --- a/packages/config/package.json +++ b/packages/config/package.json @@ -43,6 +43,8 @@ "@eslint/js": "^8.47.0", "@typescript-eslint/eslint-plugin": "^6.4.1", "@typescript-eslint/parser": "^6.4.1", + "eslint-import-resolver-typescript": "^3.6.0", + "eslint-plugin-i": "2.28.0-2", "eslint-plugin-jsdoc": "^46.5.0", "globals": "^13.21.0" }, diff --git a/packages/config/src/@types/eslint-plugin-i.d.ts b/packages/config/src/@types/eslint-plugin-i.d.ts new file mode 100644 index 0000000..a002c13 --- /dev/null +++ b/packages/config/src/@types/eslint-plugin-i.d.ts @@ -0,0 +1,26 @@ +import type { ESLint, Linter } from 'eslint'; + +/** + * @see {@link https://www.npmjs.com/package/eslint-plugin-import npm package} + * @summary ESLint plugin with rules that help validate proper imports. + * + * --- + * **Note:** Types in this project where overridden to be compatible with ESLint new flat + * config types. ESlint already has backwards compatibility for plugins not created in the + * new flat config. + */ +declare module 'eslint-plugin-i' { + interface importEslintPlugin extends ESLint.Plugin { + configs: { + recommended: { + rules: Linter.RulesRecord + } + typescript: { + rules: Linter.RulesRecord + } + } + } + declare const plugin: importEslintPlugin; + export default plugin; +} + diff --git a/packages/config/src/configs/common.js b/packages/config/src/configs/common.js index f3880f3..ac3e018 100644 --- a/packages/config/src/configs/common.js +++ b/packages/config/src/configs/common.js @@ -1,6 +1,9 @@ import tsESLint from '@typescript-eslint/eslint-plugin'; import tsParser from '@typescript-eslint/parser'; + +// eslint-disable-next-line import/namespace, import/default, import/no-named-as-default, import/no-named-as-default-member import jsdoc from 'eslint-plugin-jsdoc'; +import importPlugin from 'eslint-plugin-i'; /** * **This configuration is necessary to be used before any other one**. @@ -13,6 +16,18 @@ const config = { '@typescript-eslint': tsESLint, // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment 'jsdoc': jsdoc, + // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment + 'import': importPlugin, + }, + settings: { + 'import/extensions': ['.js', '.cjs', '.mjs', '.ts', '.cts', '.mts'], + 'import/parsers': { + '@typescript-eslint/parser': ['.js', '.cjs', '.mjs', '.ts', '.cts', '.mts'], + }, + 'import/resolver': { + typescript: true, + node: true, + }, }, languageOptions: { parser: tsParser, @@ -31,5 +46,8 @@ const config = { () => {return JSON.parse(process.env.ESLIT_ECMASCRIPT ?? '"latest"');} )(), }, + rules: { + ...importPlugin.configs['typescript'].rules, + }, }; export default config; diff --git a/packages/config/src/configs/environments.js b/packages/config/src/configs/environments.js index 6420ef4..f8f21d7 100644 --- a/packages/config/src/configs/environments.js +++ b/packages/config/src/configs/environments.js @@ -41,4 +41,5 @@ const browser = { }, }; -export default { node, deno, browser }; +const environments = { node, deno, browser }; +export default environments; diff --git a/packages/config/src/configs/formatting.js b/packages/config/src/configs/formatting.js index 63e70bf..0210dea 100644 --- a/packages/config/src/configs/formatting.js +++ b/packages/config/src/configs/formatting.js @@ -7,6 +7,16 @@ const config = { rules: { // Formatting rules + 'import/consistent-type-specifier-style': ['error', 'prefer-top-level'], + + 'import/exports-last': 'error', + + 'import/first': 'error', + + 'import/group-exports': 'error', + + 'import/newline-after-import': ['error', { considerComments: true }], + 'brace-style': 'off', '@typescript-eslint/brace-style': ['error', 'stroustrup', { allowSingleLine: true }], diff --git a/packages/config/src/configs/index.js b/packages/config/src/configs/index.js index 4bce908..1f5ada2 100644 --- a/packages/config/src/configs/index.js +++ b/packages/config/src/configs/index.js @@ -5,4 +5,5 @@ import recommended from './recommended.js'; import environments from './environments.js'; import common from './common.js'; -export default { formatting, jsdoc, typescript, recommended, environments, common }; +const configs = { formatting, jsdoc, typescript, recommended, environments, common }; +export default configs; diff --git a/packages/config/src/configs/recommended.js b/packages/config/src/configs/recommended.js index aa2d80a..f63bba3 100644 --- a/packages/config/src/configs/recommended.js +++ b/packages/config/src/configs/recommended.js @@ -1,5 +1,6 @@ import tsESlint from '@typescript-eslint/eslint-plugin'; import js from '@eslint/js'; +import importPlugin from 'eslint-plugin-i'; /** * Recommended configuration overrides of ESLit @@ -12,6 +13,49 @@ const config = { ...tsESlint.configs['recommended-requiring-type-checking'].rules, ...tsESlint.configs['eslint-recommended'].rules, ...tsESlint.configs.strict.rules, + ...importPlugin.configs['recommended'].rules, + + 'import/extensions': ['error', 'always', { ignorePackages: true }], + + 'import/no-anonymous-default-export': ['error'], + + 'import/no-absolute-path': 'error', + + 'import/no-amd': 'error', + + 'import/no-commonjs': 'error', + + 'import/no-cycle': 'error', + + 'import/no-deprecated': 'error', + + 'import/no-duplicates': ['error', { 'prefer-inline': false }], + + 'import/no-empty-named-blocks': 'error', + + 'import/no-extraneous-dependencies': 'error', + + 'import/no-import-module-exports': 'error', + + 'import/no-mutable-exports': 'error', + + 'import/no-named-as-default-member': 'error', + + 'import/no-named-as-default': 'warn', + + 'import/no-named-default': 'error', + + 'import/no-namespace': 'error', + + 'import/no-relative-packages': 'error', + + 'import/no-self-import': 'error', + + 'import/no-unassigned-import': ['error', { allow: ['**/*.{scss,less,css}'] }], + + 'import/no-useless-path-segments': 'error', + + 'import/prefer-default-export': 'error', '@typescript-eslint/ban-ts-comment': ['error', { 'ts-ignore': 'allow-with-description', diff --git a/packages/config/src/eslintrc-compact.js b/packages/config/src/eslintrc-compact.js index 0281fd3..c51e6d1 100644 --- a/packages/config/src/eslintrc-compact.js +++ b/packages/config/src/eslintrc-compact.js @@ -5,11 +5,13 @@ import path from 'node:path'; import { fileURLToPath } from 'node:url'; // mimic CommonJS variables -export const __filename = fileURLToPath(import.meta.url); -export const __dirname = path.dirname(__filename); +const __filename = fileURLToPath(import.meta.url); +const __dirname = path.dirname(__filename); -export const eslintrc = new FlatCompat({ +const eslintrc = new FlatCompat({ baseDirectory: __dirname, recommendedConfig: javascript.configs.recommended, allConfig: javascript.configs.all, }); + +export { eslintrc, __filename, __dirname }; diff --git a/packages/config/src/presets/index.js b/packages/config/src/presets/index.js index 8d8d502..9db6564 100644 --- a/packages/config/src/presets/index.js +++ b/packages/config/src/presets/index.js @@ -1,4 +1,5 @@ import defaultPreset from './default.js'; -export default { default: defaultPreset }; +const presets = { default: defaultPreset }; +export default presets; diff --git a/packages/config/src/types.d.ts b/packages/config/src/types.d.ts index 00bb991..dee115a 100644 --- a/packages/config/src/types.d.ts +++ b/packages/config/src/types.d.ts @@ -2,9 +2,9 @@ import type { FlatCompat } from '@eslint/eslintrc'; import type { Linter } from 'eslint'; type MaybePromise = Promise | T; -export type Config = Linter.FlatConfig[] | ((eslintrc: FlatCompat) => MaybePromise); +type Config = Linter.FlatConfig[] | ((eslintrc: FlatCompat) => MaybePromise); -export interface EnvOptions { +interface EnvOptions { ESLIT_TSCONFIG?: string | string[] | true ESLIT_ROOT?: string ESLIT_INDENT?: 'tab' | 'space' | number @@ -41,7 +41,7 @@ export interface EnvOptions { [ENV: string]: unknown } -export type inferrableTypesOptions = [ +type inferrableTypesOptions = [ 'never' | 'always', { /** @see {@link https://typescript-eslint.io/rules/no-inferrable-types#ignoreparameters} */ @@ -52,3 +52,5 @@ export type inferrableTypesOptions = [ returnValues?: boolean }, ] | 'never' | 'always'; + +export type { inferrableTypesOptions, EnvOptions, Config }; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index ed0d821..74a4572 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -151,6 +151,12 @@ importers: '@typescript-eslint/parser': specifier: ^6.4.1 version: 6.4.1(eslint@8.47.0)(typescript@5.1.6) + eslint-import-resolver-typescript: + specifier: ^3.6.0 + version: 3.6.0(@typescript-eslint/parser@6.4.1)(eslint-plugin-import@2.28.1)(eslint@8.47.0) + eslint-plugin-i: + specifier: 2.28.0-2 + version: 2.28.0-2(@typescript-eslint/parser@6.4.1)(eslint-import-resolver-typescript@3.6.0)(eslint@8.47.0) eslint-plugin-jsdoc: specifier: ^46.5.0 version: 46.5.0(eslint@8.47.0) @@ -894,6 +900,10 @@ packages: /@types/json-schema@7.0.12: resolution: {integrity: sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==} + /@types/json5@0.0.29: + resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} + dev: false + /@types/minimist@1.2.2: resolution: {integrity: sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==} dev: true @@ -1263,16 +1273,37 @@ packages: dependencies: call-bind: 1.0.2 is-array-buffer: 3.0.2 - dev: true /array-ify@1.0.0: resolution: {integrity: sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==} dev: true + /array-includes@3.1.6: + resolution: {integrity: sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.0 + es-abstract: 1.22.1 + get-intrinsic: 1.2.1 + is-string: 1.0.7 + dev: false + /array-union@2.1.0: resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} engines: {node: '>=8'} + /array.prototype.findlastindex@1.2.2: + resolution: {integrity: sha512-tb5thFFlUcp7NdNF6/MpDk/1r/4awWG1FIz3YqDf+/zJSTezBb+/5WViH41obXULHVpDzoiCLpJ/ZO9YbJMsdw==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.0 + es-abstract: 1.22.1 + es-shim-unscopables: 1.0.0 + get-intrinsic: 1.2.1 + dev: false + /array.prototype.flat@1.3.1: resolution: {integrity: sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA==} engines: {node: '>= 0.4'} @@ -1281,7 +1312,16 @@ packages: define-properties: 1.2.0 es-abstract: 1.22.1 es-shim-unscopables: 1.0.0 - dev: true + + /array.prototype.flatmap@1.3.1: + resolution: {integrity: sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.0 + es-abstract: 1.22.1 + es-shim-unscopables: 1.0.0 + dev: false /arraybuffer.prototype.slice@1.0.1: resolution: {integrity: sha512-09x0ZWFEjj4WD8PDbykUwo3t9arLn8NIzmmYEJFpYekOAQjpkGSyrQhNoRTcwwcFRu+ycWF78QZ63oWTqSjBcw==} @@ -1293,7 +1333,6 @@ packages: get-intrinsic: 1.2.1 is-array-buffer: 3.0.2 is-shared-array-buffer: 1.0.2 - dev: true /arrify@1.0.1: resolution: {integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==} @@ -1580,6 +1619,17 @@ packages: resolution: {integrity: sha512-68s5jYdlvasItOJnCuI2Q9s4q98g0pCyL3HrcKJu8KNugUl8ahgmZYg38ysLTgQjjXX3H8CJLkAvWrclWfcalw==} dev: true + /debug@3.2.7: + resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + dependencies: + ms: 2.1.2 + dev: false + /debug@4.3.4: resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} engines: {node: '>=6.0'} @@ -1645,6 +1695,13 @@ packages: dependencies: path-type: 4.0.0 + /doctrine@2.1.0: + resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} + engines: {node: '>=0.10.0'} + dependencies: + esutils: 2.0.3 + dev: false + /doctrine@3.0.0: resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} engines: {node: '>=6.0.0'} @@ -1667,6 +1724,14 @@ packages: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} dev: true + /enhanced-resolve@5.15.0: + resolution: {integrity: sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==} + engines: {node: '>=10.13.0'} + dependencies: + graceful-fs: 4.2.11 + tapable: 2.2.1 + dev: false + /enquirer@2.4.1: resolution: {integrity: sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==} engines: {node: '>=8.6'} @@ -1724,7 +1789,6 @@ packages: typed-array-length: 1.0.4 unbox-primitive: 1.0.2 which-typed-array: 1.1.11 - dev: true /es-set-tostringtag@2.0.1: resolution: {integrity: sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==} @@ -1733,13 +1797,11 @@ packages: get-intrinsic: 1.2.1 has: 1.0.3 has-tostringtag: 1.0.0 - dev: true /es-shim-unscopables@1.0.0: resolution: {integrity: sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==} dependencies: has: 1.0.3 - dev: true /es-to-primitive@1.2.1: resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} @@ -1748,7 +1810,6 @@ packages: is-callable: 1.2.7 is-date-object: 1.0.5 is-symbol: 1.0.4 - dev: true /es6-object-assign@1.1.0: resolution: {integrity: sha512-MEl9uirslVwqQU369iHNWZXsI8yaZYGg/D65aOgZkeyFJwHYSxilf7rQzXKI7DdDuBPrBXbfk3sl9hJhmd5AUw==} @@ -1802,6 +1863,127 @@ packages: resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} engines: {node: '>=10'} + /eslint-import-resolver-node@0.3.9: + resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==} + dependencies: + debug: 3.2.7 + is-core-module: 2.13.0 + resolve: 1.22.4 + transitivePeerDependencies: + - supports-color + dev: false + + /eslint-import-resolver-typescript@3.6.0(@typescript-eslint/parser@6.4.1)(eslint-plugin-import@2.28.1)(eslint@8.47.0): + resolution: {integrity: sha512-QTHR9ddNnn35RTxlaEnx2gCxqFlF2SEN0SE2d17SqwyM7YOSI2GHWRYp5BiRkObTUNYPupC/3Fq2a0PpT+EKpg==} + engines: {node: ^14.18.0 || >=16.0.0} + peerDependencies: + eslint: '*' + eslint-plugin-import: '*' + dependencies: + debug: 4.3.4 + enhanced-resolve: 5.15.0 + eslint: 8.47.0 + eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.4.1)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.0)(eslint@8.47.0) + eslint-plugin-import: 2.28.1(@typescript-eslint/parser@6.4.1)(eslint-import-resolver-typescript@3.6.0)(eslint@8.47.0) + fast-glob: 3.3.1 + get-tsconfig: 4.7.0 + is-core-module: 2.13.0 + is-glob: 4.0.3 + transitivePeerDependencies: + - '@typescript-eslint/parser' + - eslint-import-resolver-node + - eslint-import-resolver-webpack + - supports-color + dev: false + + /eslint-module-utils@2.8.0(@typescript-eslint/parser@6.4.1)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.0)(eslint@8.47.0): + resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==} + engines: {node: '>=4'} + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: '*' + eslint-import-resolver-node: '*' + eslint-import-resolver-typescript: '*' + eslint-import-resolver-webpack: '*' + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true + eslint: + optional: true + eslint-import-resolver-node: + optional: true + eslint-import-resolver-typescript: + optional: true + eslint-import-resolver-webpack: + optional: true + dependencies: + '@typescript-eslint/parser': 6.4.1(eslint@8.47.0)(typescript@5.1.6) + debug: 3.2.7 + eslint: 8.47.0 + eslint-import-resolver-node: 0.3.9 + eslint-import-resolver-typescript: 3.6.0(@typescript-eslint/parser@6.4.1)(eslint-plugin-import@2.28.1)(eslint@8.47.0) + transitivePeerDependencies: + - supports-color + dev: false + + /eslint-plugin-i@2.28.0-2(@typescript-eslint/parser@6.4.1)(eslint-import-resolver-typescript@3.6.0)(eslint@8.47.0): + resolution: {integrity: sha512-z48kG4qmE4TmiLcxbmvxMT5ycwvPkXaWW0XpU1L768uZaTbiDbxsHMEdV24JHlOR1xDsPpKW39BfP/pRdYIwFA==} + engines: {node: '>=12'} + peerDependencies: + eslint: ^7.2.0 || ^8 + dependencies: + debug: 3.2.7 + doctrine: 2.1.0 + eslint: 8.47.0 + eslint-import-resolver-node: 0.3.9 + eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.4.1)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.0)(eslint@8.47.0) + get-tsconfig: 4.7.0 + is-glob: 4.0.3 + minimatch: 3.1.2 + resolve: 1.22.4 + semver: 7.5.4 + transitivePeerDependencies: + - '@typescript-eslint/parser' + - eslint-import-resolver-typescript + - eslint-import-resolver-webpack + - supports-color + dev: false + + /eslint-plugin-import@2.28.1(@typescript-eslint/parser@6.4.1)(eslint-import-resolver-typescript@3.6.0)(eslint@8.47.0): + resolution: {integrity: sha512-9I9hFlITvOV55alzoKBI+K9q74kv0iKMeY6av5+umsNwayt59fz692daGyjR+oStBQgx6nwR9rXldDev3Clw+A==} + engines: {node: '>=4'} + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true + dependencies: + '@typescript-eslint/parser': 6.4.1(eslint@8.47.0)(typescript@5.1.6) + array-includes: 3.1.6 + array.prototype.findlastindex: 1.2.2 + array.prototype.flat: 1.3.1 + array.prototype.flatmap: 1.3.1 + debug: 3.2.7 + doctrine: 2.1.0 + eslint: 8.47.0 + eslint-import-resolver-node: 0.3.9 + eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.4.1)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.0)(eslint@8.47.0) + has: 1.0.3 + is-core-module: 2.13.0 + is-glob: 4.0.3 + minimatch: 3.1.2 + object.fromentries: 2.0.6 + object.groupby: 1.0.0 + object.values: 1.1.6 + semver: 6.3.1 + tsconfig-paths: 3.14.2 + transitivePeerDependencies: + - eslint-import-resolver-typescript + - eslint-import-resolver-webpack + - supports-color + dev: false + /eslint-plugin-jsdoc@46.5.0(eslint@8.47.0): resolution: {integrity: sha512-aulXdA4I1dyWpzyS1Nh/GNoS6PavzeucxEapnMR4JUERowWvaEk2Y4A5irpHAcdXtBBHLVe8WIhdXNjoAlGQgA==} engines: {node: '>=16'} @@ -2180,11 +2362,9 @@ packages: define-properties: 1.2.0 es-abstract: 1.22.1 functions-have-names: 1.2.3 - dev: true /functions-have-names@1.2.3: resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} - dev: true /get-caller-file@2.0.5: resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} @@ -2205,7 +2385,12 @@ packages: dependencies: call-bind: 1.0.2 get-intrinsic: 1.2.1 - dev: true + + /get-tsconfig@4.7.0: + resolution: {integrity: sha512-pmjiZ7xtB8URYm74PlGJozDNyhvsVLUcpBa8DZBG3bWHwaHa9bPiRpiSfovw+fjhwONSCWKRyk+JQHEGZmMrzw==} + dependencies: + resolve-pkg-maps: 1.0.0 + dev: false /glob-parent@5.1.2: resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} @@ -2240,7 +2425,6 @@ packages: engines: {node: '>= 0.4'} dependencies: define-properties: 1.2.0 - dev: true /globby@11.1.0: resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} @@ -2260,7 +2444,6 @@ packages: /graceful-fs@4.2.11: resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} - dev: true /grapheme-splitter@1.0.4: resolution: {integrity: sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==} @@ -2276,7 +2459,6 @@ packages: /has-bigints@1.0.2: resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} - dev: true /has-flag@3.0.0: resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} @@ -2373,7 +2555,6 @@ packages: get-intrinsic: 1.2.1 has: 1.0.3 side-channel: 1.0.4 - dev: true /is-arguments@1.1.1: resolution: {integrity: sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==} @@ -2389,7 +2570,6 @@ packages: call-bind: 1.0.2 get-intrinsic: 1.2.1 is-typed-array: 1.1.12 - dev: true /is-arrayish@0.2.1: resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} @@ -2399,7 +2579,6 @@ packages: resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} dependencies: has-bigints: 1.0.2 - dev: true /is-binary-path@2.1.0: resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} @@ -2414,7 +2593,6 @@ packages: dependencies: call-bind: 1.0.2 has-tostringtag: 1.0.0 - dev: true /is-builtin-module@3.2.1: resolution: {integrity: sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==} @@ -2438,14 +2616,12 @@ packages: resolution: {integrity: sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==} dependencies: has: 1.0.3 - dev: true /is-date-object@1.0.5: resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} engines: {node: '>= 0.4'} dependencies: has-tostringtag: 1.0.0 - dev: true /is-extglob@2.1.1: resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} @@ -2480,14 +2656,12 @@ packages: /is-negative-zero@2.0.2: resolution: {integrity: sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==} engines: {node: '>= 0.4'} - dev: true /is-number-object@1.0.7: resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} engines: {node: '>= 0.4'} dependencies: has-tostringtag: 1.0.0 - dev: true /is-number@7.0.0: resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} @@ -2519,20 +2693,17 @@ packages: dependencies: call-bind: 1.0.2 has-tostringtag: 1.0.0 - dev: true /is-shared-array-buffer@1.0.2: resolution: {integrity: sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==} dependencies: call-bind: 1.0.2 - dev: true /is-string@1.0.7: resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} engines: {node: '>= 0.4'} dependencies: has-tostringtag: 1.0.0 - dev: true /is-subdir@1.2.0: resolution: {integrity: sha512-2AT6j+gXe/1ueqbW6fLZJiIw3F8iXGJtt0yDrZaBhAZEG1raiTxKWU+IPqMCzQAXOUCKdA4UDMgacKH25XG2Cw==} @@ -2546,7 +2717,6 @@ packages: engines: {node: '>= 0.4'} dependencies: has-symbols: 1.0.3 - dev: true /is-typed-array@1.1.12: resolution: {integrity: sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==} @@ -2558,7 +2728,6 @@ packages: resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} dependencies: call-bind: 1.0.2 - dev: true /is-windows@1.0.2: resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==} @@ -2567,7 +2736,6 @@ packages: /isarray@2.0.5: resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} - dev: true /isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} @@ -2605,6 +2773,13 @@ packages: /json-stable-stringify-without-jsonify@1.0.1: resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} + /json5@1.0.2: + resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} + hasBin: true + dependencies: + minimist: 1.2.8 + dev: false + /jsonfile@4.0.0: resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==} optionalDependencies: @@ -2775,7 +2950,6 @@ packages: /minimist@1.2.8: resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} - dev: true /mixme@0.5.9: resolution: {integrity: sha512-VC5fg6ySUscaWUpI4gxCBTQMH2RdUpNrk+MsbpCYtIvf9SBJdiUey4qE7BXviJsJR4nDQxCZ+3yaYNW3guz/Pw==} @@ -2849,7 +3023,6 @@ packages: /object-inspect@1.12.3: resolution: {integrity: sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==} - dev: true /object-is@1.1.5: resolution: {integrity: sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==} @@ -2871,7 +3044,33 @@ packages: define-properties: 1.2.0 has-symbols: 1.0.3 object-keys: 1.1.1 - dev: true + + /object.fromentries@2.0.6: + resolution: {integrity: sha512-VciD13dswC4j1Xt5394WR4MzmAQmlgN72phd/riNp9vtD7tp4QQWJ0R4wvclXcafgcYK8veHRed2W6XeGBvcfg==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.0 + es-abstract: 1.22.1 + dev: false + + /object.groupby@1.0.0: + resolution: {integrity: sha512-70MWG6NfRH9GnbZOikuhPPYzpUpof9iW2J9E4dW7FXTqPNb6rllE6u39SKwwiNh8lCwX3DDb5OgcKGiEBrTTyw==} + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.0 + es-abstract: 1.22.1 + get-intrinsic: 1.2.1 + dev: false + + /object.values@1.1.6: + resolution: {integrity: sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.0 + es-abstract: 1.22.1 + dev: false /once@1.4.0: resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} @@ -2971,7 +3170,6 @@ packages: /path-parse@1.0.7: resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} - dev: true /path-type@4.0.0: resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} @@ -3155,7 +3353,6 @@ packages: call-bind: 1.0.2 define-properties: 1.2.0 functions-have-names: 1.2.3 - dev: true /regexpp@3.2.0: resolution: {integrity: sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==} @@ -3180,6 +3377,10 @@ packages: engines: {node: '>=8'} dev: true + /resolve-pkg-maps@1.0.0: + resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} + dev: false + /resolve@1.22.4: resolution: {integrity: sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg==} hasBin: true @@ -3187,7 +3388,6 @@ packages: is-core-module: 2.13.0 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 - dev: true /reusify@1.0.4: resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} @@ -3234,7 +3434,6 @@ packages: get-intrinsic: 1.2.1 has-symbols: 1.0.3 isarray: 2.0.5 - dev: true /safe-regex-test@1.0.0: resolution: {integrity: sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==} @@ -3242,7 +3441,6 @@ packages: call-bind: 1.0.2 get-intrinsic: 1.2.1 is-regex: 1.1.4 - dev: true /safer-buffer@2.1.2: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} @@ -3262,6 +3460,11 @@ packages: hasBin: true dev: true + /semver@6.3.1: + resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} + hasBin: true + dev: false + /semver@7.5.4: resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==} engines: {node: '>=10'} @@ -3305,7 +3508,6 @@ packages: call-bind: 1.0.2 get-intrinsic: 1.2.1 object-inspect: 1.12.3 - dev: true /signal-exit@3.0.7: resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} @@ -3418,7 +3620,6 @@ packages: call-bind: 1.0.2 define-properties: 1.2.0 es-abstract: 1.22.1 - dev: true /string.prototype.trimend@1.0.6: resolution: {integrity: sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==} @@ -3426,7 +3627,6 @@ packages: call-bind: 1.0.2 define-properties: 1.2.0 es-abstract: 1.22.1 - dev: true /string.prototype.trimstart@1.0.6: resolution: {integrity: sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==} @@ -3434,7 +3634,6 @@ packages: call-bind: 1.0.2 define-properties: 1.2.0 es-abstract: 1.22.1 - dev: true /strip-ansi@6.0.1: resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} @@ -3445,7 +3644,6 @@ packages: /strip-bom@3.0.0: resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} engines: {node: '>=4'} - dev: true /strip-indent@3.0.0: resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} @@ -3474,7 +3672,6 @@ packages: /supports-preserve-symlinks-flag@1.0.0: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} - dev: true /svelte-check@3.4.3(postcss@8.4.25)(svelte@4.0.5): resolution: {integrity: sha512-O07soQFY3X0VDt+bcGc6D5naz0cLtjwnmNP9JsEBPVyMemFEqUhL2OdLqvkl5H/u8Jwm50EiAU4BPRn5iin/kg==} @@ -3594,6 +3791,11 @@ packages: periscopic: 3.1.0 dev: true + /tapable@2.2.1: + resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} + engines: {node: '>=6'} + dev: false + /term-size@2.2.1: resolution: {integrity: sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==} engines: {node: '>=8'} @@ -3638,6 +3840,15 @@ packages: typescript: 5.1.6 dev: false + /tsconfig-paths@3.14.2: + resolution: {integrity: sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g==} + dependencies: + '@types/json5': 0.0.29 + json5: 1.0.2 + minimist: 1.2.8 + strip-bom: 3.0.0 + dev: false + /tslib@1.14.1: resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} dev: true @@ -3767,7 +3978,6 @@ packages: call-bind: 1.0.2 get-intrinsic: 1.2.1 is-typed-array: 1.1.12 - dev: true /typed-array-byte-length@1.0.0: resolution: {integrity: sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==} @@ -3777,7 +3987,6 @@ packages: for-each: 0.3.3 has-proto: 1.0.1 is-typed-array: 1.1.12 - dev: true /typed-array-byte-offset@1.0.0: resolution: {integrity: sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==} @@ -3788,7 +3997,6 @@ packages: for-each: 0.3.3 has-proto: 1.0.1 is-typed-array: 1.1.12 - dev: true /typed-array-length@1.0.4: resolution: {integrity: sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==} @@ -3796,7 +4004,6 @@ packages: call-bind: 1.0.2 for-each: 0.3.3 is-typed-array: 1.1.12 - dev: true /typescript@5.0.2: resolution: {integrity: sha512-wVORMBGO/FAs/++blGNeAVdbNKtIh1rbBL2EyQ1+J9lClJ93KiiKe8PmFIVdXhHcyv44SL9oglmfeSsndo0jRw==} @@ -3816,7 +4023,6 @@ packages: has-bigints: 1.0.2 has-symbols: 1.0.3 which-boxed-primitive: 1.0.2 - dev: true /undici@5.22.1: resolution: {integrity: sha512-Ji2IJhFXZY0x/0tVBXeQwgPlLWw13GVzpsWPQ3rV50IFMMof2I55PZZxtm4P6iNq+L5znYN9nSTAq0ZyE6lSJw==} @@ -3923,7 +4129,6 @@ packages: is-number-object: 1.0.7 is-string: 1.0.7 is-symbol: 1.0.4 - dev: true /which-module@2.0.1: resolution: {integrity: sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==}