From 7940389a6864a8e782fd47bfba45d4a94b669ebc Mon Sep 17 00:00:00 2001 From: Dom Geargeoura Date: Sun, 1 Oct 2023 13:58:14 +0100 Subject: [PATCH 001/105] configurator class added wip --- src/Configurator.ts | 356 ++++++++++++++++++++++++++++++++++++++++++++ src/index.ts | 78 +++++----- 2 files changed, 394 insertions(+), 40 deletions(-) create mode 100644 src/Configurator.ts diff --git a/src/Configurator.ts b/src/Configurator.ts new file mode 100644 index 0000000..8104387 --- /dev/null +++ b/src/Configurator.ts @@ -0,0 +1,356 @@ +import path from 'path'; +import fs from 'fs'; +import ora from 'ora'; +import picocolors from 'picocolors'; +import { $ } from 'execa'; + +import prompts from 'prompts'; +// import { markdownTable } from 'markdown-table'; + +import { oops } from './utils.js'; +// import { ChoiceValuesType } from './questions.js'; + +import PackageManager, { PackageManagerKindEnum } from './PackageManager.js'; + +type NextraPropsType = { + projectDirectoryPath: string; + packageManagerChoice: PackageManagerKindEnum; +}; + +export interface NextJsConfigType { + appRouter: boolean; + eslint: boolean; + srcDir: boolean; + tailwind: boolean; + typescript: boolean; +} + +const { green } = picocolors; + +class Configurator { + private root: string; + private configsPath: string; + private markdownDirPath: string; + private markdownArr: string[]; + private packageScriptsObj: Record; + private configsArr: string[]; + private dependenciesArr: string[]; + private devDepndenciesArr: string[]; + private nextConfig = {} as NextJsConfigType; + private packageManager = {} as PackageManager; + private promptAnswers = {} as prompts.Answers; + private spinner; + + constructor({ + projectDirectoryPath, + packageManagerChoice: packageManagerKind, + }: NextraPropsType) { + this.configsPath = path.resolve(path.join('src', 'templates')); + this.markdownDirPath = path.resolve(path.join('src', 'markdown')); + this.root = path.resolve(projectDirectoryPath); + this.markdownArr = []; + this.configsArr = []; + this.packageScriptsObj = {}; + this.dependenciesArr = []; + this.devDepndenciesArr = []; + this.spinner = ora(); + this.packageManager = new PackageManager({ + packageManagerKind, + root: this.root, + }); + } + + public setPromptAnswers = (answers: prompts.Answers) => { + this.promptAnswers = answers; + }; + + public createNextApp = async () => { + const pm = this.packageManager.getKind(); + try { + console.log(`\n`); + await $({ + stdio: 'inherit', + })`npx create-next-app@latest ${this.root} --use-${pm}`; + } catch (error) { + oops(); + throw new Error(`\n${error}`); + } + + return this.getNextConfig(); + }; + + public getNextConfig = () => { + const artifactExists = (fileName: string) => { + try { + return fs.existsSync(path.join(this.root, fileName)); + } catch (e) { + console.log({ e }); + } + }; + + const typescript = artifactExists('tsconfig.json') || false; + this.nextConfig = { + appRouter: !artifactExists('src/pages') || false, + eslint: artifactExists('.eslintrc.json') || false, + tailwind: + artifactExists(`tailwind.config.${typescript ? 'ts' : 'js'}`) || false, + srcDir: artifactExists('src') || false, + typescript, + }; + + return this.nextConfig; + }; + + public configure = async () => { + if (Object.entries(this.promptAnswers).length === 0) return; + + if (this.promptAnswers.configurePrettier) { + await this.configurePrettier(); + } + + if (this.promptAnswers.configureJestRTL) await this.configureJestRTL(); + + if (this.promptAnswers.configureCypress) { + await this.configureCypress(); + } + + if ( + (this.nextConfig.eslint || this.promptAnswers.configurePrettier) && + this.promptAnswers.configureLintStaged + ) { + await this.configureLintStaged(); + } + + if (this.promptAnswers.configureHusky) { + await this.configureGitHusky(); + } + + if (this.promptAnswers.configureStorybook) { + await this.configureStorybook(); + } + + if (this.promptAnswers.configureDocker) { + await this.configureDocker(); + } + + if (this.promptAnswers.configureDotEnvFiles.length > 0) { + await this.configureEnvVars(); + } + + if (this.promptAnswers.configureSelectedDependencies.length > 0) { + await this.configureSelectedDependencies(); + } + + console.log({ + packageScriptsObj: this.packageScriptsObj, + configsArr: this.configsArr, + dependenciesArr: this.dependenciesArr, + devDepndenciesArr: this.devDepndenciesArr, + markdownArr: this.markdownArr, + }); + + // generate + }; + + public configureCypress = async () => { + this.configsArr.push('cypress'); + this.devDepndenciesArr.push('cypress'); + this.packageScriptsObj = { + ...this.packageScriptsObj, + e2e: 'cypress run', + }; + await this.addMarkdownFragmentToMarkdownArr('cypress'); + }; + + public configureDocker = async () => { + this.configsArr.push(...['docker-compose.yml', 'Dockerfile', 'Makefile']); + this.addMarkdownFragmentToMarkdownArr('cypdockerress'); + }; + + public configureEnvVars = async () => {}; + + public configureGitHusky = async () => {}; + + public configureJestRTL = async () => { + this.configsArr.push('jest.config.js'); + this.devDepndenciesArr.push( + ...[ + 'jest', + 'jest-environment-jsdom', + '@testing-library/jest-dom', + '@testing-library/user-event', + '@testing-library/react', + 'cypress', + 'eslint-plugin-testing-library', + ] + ); + + this.packageScriptsObj = { + ...this.packageScriptsObj, + test: 'jest', + 'test:watch': 'jest --watch', + 'test:coverage': 'jest --coverage', + 'test:ci': 'jest --ci --coverage', + }; + + await this.addMarkdownFragmentToMarkdownArr('jestRTL'); + }; + + public configureLintStaged = async () => {}; + + public configureEslint = async () => {}; + + public configureNext = async () => { + const pm = this.packageManager.getKind(); + + this.configsArr.push('next.config.js'); + + this.packageScriptsObj = { + ...this.packageScriptsObj, + 'build:standalone': 'BUILD_STANDALONE=true next build', + 'start:standalone': 'node ./.next/standalone/server.js', + 'build-start': `next build && next start`, + 'build-start:standalone': `${pm} run build:standalone && ${pm} run start:standalone`, + }; + + if (this.promptAnswers.configureNextImageOptimisation) { + this.dependenciesArr.push('sharp'); + } + + await this.addMarkdownFragmentToMarkdownArr('jestRTL'); + }; + + public configureStorybook = async () => { + this.configsArr.push('.storybook'); + this.devDepndenciesArr.push( + ...[ + '@storybook/addon-essentials', + '@storybook/addon-interactions', + '@storybook/addon-links', + '@storybook/addon-onboarding', + '@storybook/blocks', + '@storybook/nextjs', + '@storybook/react', + '@storybook/testing-library', + 'eslint-plugin-storybook', + 'storybook', + ] + ); + + this.packageScriptsObj = { + ...this.packageScriptsObj, + storybook: 'storybook dev -p 6006', + 'build-storybook': 'storybook build', + }; + + await this.addMarkdownFragmentToMarkdownArr('storybook'); + }; + + public configurePrettier = async () => { + this.configsArr.push(...['.prettierrc.json', '.prettierignore']); + + this.devDepndenciesArr.push(...['prettier', 'eslint-config-prettier']); + if (!this.nextConfig.eslint) this.devDepndenciesArr.push('eslint'); + + this.packageScriptsObj = { + ...this.packageScriptsObj, + 'format:check': 'prettier --check .', + 'format:write': 'prettier --write .', + }; + + await this.addMarkdownFragmentToMarkdownArr('prettier'); + }; + + public configureSelectedDependencies = async () => { + const dependencies = this.promptAnswers.configureSelectedDependencies + .filter(({ saveDev }: { saveDev: boolean }) => !saveDev) + .map(({ module }: { module: string }) => module); + + const devDependencies = this.promptAnswers.configureSelectedDependencies + .filter(({ saveDev }: { saveDev: boolean }) => saveDev) + .map(({ module }: { module: string }) => module); + + this.dependenciesArr.push(...dependencies); + this.devDepndenciesArr.push(...devDependencies); + }; + + public cleanUp = async () => { + // clean up ie format files + write Readme - maybe other stuff TBC + this.spinner.start('Cleaning up'); + try { + if (this.promptAnswers.configurePrettier) { + await $({ + cwd: this.root, + })`${this.packageManager.getKind()} run format:write`; + } + + await this.generateReadme(); + + this.spinner.succeed(); + } catch (error) { + this.spinner.fail(); + oops(); + throw new Error(`\n${error}`); + } + + return this.configurationCompleteMessage(); + }; + + private configurationCompleteMessage = () => { + return `${green( + 'Success!' + )} The following configurations were made: TBC... `; + }; + + private addMarkdownFragmentToMarkdownArr = async ( + markdownFileName: string + ) => { + const filepath = path.join(this.markdownDirPath, `${markdownFileName}.md`); + + if (fs.existsSync(filepath)) { + try { + const markdown = await fs.promises.readFile(filepath, 'utf8'); + this.markdownArr.push(markdown); + } catch (error) { + oops(); + throw new Error(`${error}`); + } + } + }; + + private generateReadme = async () => { + try { + const markdown = this.markdownArr.join('\n\n'); + await fs.promises.writeFile(path.join(this.root, 'README.md'), markdown); + } catch (error) { + oops(); + throw new Error(`${error}`); + } + }; + + private copyTemplate = async ( + template: string | string[], + recursive: boolean = false + ) => { + if (typeof template === 'string') { + return await fs.promises.cp( + path.join(this.configsPath, template), + path.join(this.root, template), + { recursive } + ); + } + + if (Array.isArray(template) && template.length > 0) { + const copyFiles = template.map((file) => + fs.promises.cp( + path.join(this.configsPath, file), + path.join(this.root, file) + ) + ); + + return await Promise.all(copyFiles); + } + }; +} + +export default Configurator; diff --git a/src/index.ts b/src/index.ts index eee0b9b..cbe3511 100644 --- a/src/index.ts +++ b/src/index.ts @@ -8,7 +8,7 @@ import prompt from 'prompts'; import { goodbye } from './utils.js'; -import Nextra from './Nextra.js'; +import Configurator from './Configurator.js'; import questions from './questions.js'; console.log('\n', figlet.textSync('Nextra'), '\n\n'); @@ -34,13 +34,11 @@ program questions.packageManagerPrompt ); - const nextra = new Nextra({ + const configurator = new Configurator({ projectDirectoryPath, packageManagerChoice, }); - const nextConfig = await nextra.createNextApp(); - const answers = await prompt([ questions.configureNextImageOptimisation, questions.configurePrettier, @@ -60,7 +58,7 @@ program answers.configureDotEnvFiles.length > 0; if (hasAnswers) { - nextra.setPromptAnswers(answers); + configurator.setPromptAnswers(answers); } else { // nothing to configure! goodbye(); @@ -78,51 +76,51 @@ Configuring project with following configurations: `); - await nextra.configureNext(); + await configurator.configure(); - if (answers.configurePrettier) { - await nextra.configurePrettier(); - } + // if (answers.configurePrettier) { + // await nextra.configurePrettier(); + // } - if (answers.configureJestRTL) { - await nextra.configureJestRTL(); - } + // if (answers.configureJestRTL) { + // await nextra.configureJestRTL(); + // } - if (answers.configureCypress) { - await nextra.configureCypress(); - } + // if (answers.configureCypress) { + // await nextra.configureCypress(); + // } - if ( - (nextConfig.eslint || answers.configurePrettier) && - answers.configureLintStaged - ) { - await nextra.configureLintStaged(); - } + // if ( + // (nextConfig.eslint || answers.configurePrettier) && + // answers.configureLintStaged + // ) { + // await nextra.configureLintStaged(); + // } - if (answers.configureHusky) { - await nextra.configureGitHusky(); - } + // if (answers.configureHusky) { + // await nextra.configureGitHusky(); + // } - if (answers.configureStorybook) { - await nextra.configureStorybook(); - } + // if (answers.configureStorybook) { + // await nextra.configureStorybook(); + // } - if (answers.configureDocker) { - await nextra.configureDocker(); - } + // if (answers.configureDocker) { + // await nextra.configureDocker(); + // } - if (answers.configureDotEnvFiles.length > 0) { - await nextra.configureEnvVars(answers.configureDotEnvFiles); - } + // if (answers.configureDotEnvFiles.length > 0) { + // await nextra.configureEnvVars(answers.configureDotEnvFiles); + // } - if (answers.configureSelectedDependencies.length > 0) { - await nextra.configureSelectedDependencies( - answers.configureSelectedDependencies - ); - } + // if (answers.configureSelectedDependencies.length > 0) { + // await nextra.configureSelectedDependencies( + // answers.configureSelectedDependencies + // ); + // } - const configurationCompleteMessage = await nextra.cleanUp(); - console.log(`\n` + configurationCompleteMessage); + // const configurationCompleteMessage = await nextra.cleanUp(); + // console.log(`\n` + configurationCompleteMessage); }); program.parse(); From ccf4639d4a5f9a915d8fc7ea2c75ecf8f1e8be91 Mon Sep 17 00:00:00 2001 From: Dominic Geargeoura Date: Tue, 3 Oct 2023 12:22:57 +0100 Subject: [PATCH 002/105] configurator changes --- package-lock.json | 22 ++ package.json | 1 + src/Configurator.ts | 548 ++++++++++++++++++++------------ src/PackageManager.ts | 39 +-- src/index.ts | 62 +--- src/templates/.stylelintrc.json | 4 + 6 files changed, 408 insertions(+), 268 deletions(-) create mode 100644 src/templates/.stylelintrc.json diff --git a/package-lock.json b/package-lock.json index c7df88b..13015a2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -29,6 +29,7 @@ "esbuild": "^0.19.3", "eslint": "^8.48.0", "eslint-config-prettier": "^9.0.0", + "eslint-define-config": "^1.23.0", "husky": "^8.0.0", "leasot": "^13.3.0", "markdown-table": "^3.0.3", @@ -1839,6 +1840,27 @@ "eslint": ">=7.0.0" } }, + "node_modules/eslint-define-config": { + "version": "1.23.0", + "resolved": "https://registry.npmjs.org/eslint-define-config/-/eslint-define-config-1.23.0.tgz", + "integrity": "sha512-4mMyu0JuBkQHsCtR+42irIQdFLmLIW+pMAVcyOV/gZRL4O1R8iuH0eMG3oL3Cbi1eo9fDAfT5CIHVHgdyxcf6w==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/Shinigami92" + }, + { + "type": "paypal", + "url": "https://www.paypal.com/donate/?hosted_button_id=L7GY729FBKTZY" + } + ], + "engines": { + "node": "^16.13.0 || >=18.0.0", + "npm": ">=7.0.0", + "pnpm": ">= 8.6.0" + } + }, "node_modules/eslint-scope": { "version": "7.2.2", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", diff --git a/package.json b/package.json index ce61035..ade41dc 100644 --- a/package.json +++ b/package.json @@ -44,6 +44,7 @@ "esbuild": "^0.19.3", "eslint": "^8.48.0", "eslint-config-prettier": "^9.0.0", + "eslint-define-config": "^1.23.0", "husky": "^8.0.0", "leasot": "^13.3.0", "markdown-table": "^3.0.3", diff --git a/src/Configurator.ts b/src/Configurator.ts index 8104387..389af5d 100644 --- a/src/Configurator.ts +++ b/src/Configurator.ts @@ -5,10 +5,8 @@ import picocolors from 'picocolors'; import { $ } from 'execa'; import prompts from 'prompts'; -// import { markdownTable } from 'markdown-table'; import { oops } from './utils.js'; -// import { ChoiceValuesType } from './questions.js'; import PackageManager, { PackageManagerKindEnum } from './PackageManager.js'; @@ -25,21 +23,33 @@ export interface NextJsConfigType { typescript: boolean; } +export interface ConfigurationObjectsType { + markdown: string[]; + configFiles: string[]; + configDirectories: string[]; + packageScripts: Record; + packageDependencies: string[]; + packageDevDependencies: string[]; +} + const { green } = picocolors; class Configurator { private root: string; private configsPath: string; private markdownDirPath: string; - private markdownArr: string[]; - private packageScriptsObj: Record; - private configsArr: string[]; - private dependenciesArr: string[]; - private devDepndenciesArr: string[]; private nextConfig = {} as NextJsConfigType; private packageManager = {} as PackageManager; private promptAnswers = {} as prompts.Answers; private spinner; + private configurationObjects = { + markdown: [], + configFiles: [], + configDirectories: [], + packageScripts: {}, + packageDependencies: [], + packageDevDependencies: [], + } as ConfigurationObjectsType; constructor({ projectDirectoryPath, @@ -48,11 +58,6 @@ class Configurator { this.configsPath = path.resolve(path.join('src', 'templates')); this.markdownDirPath = path.resolve(path.join('src', 'markdown')); this.root = path.resolve(projectDirectoryPath); - this.markdownArr = []; - this.configsArr = []; - this.packageScriptsObj = {}; - this.dependenciesArr = []; - this.devDepndenciesArr = []; this.spinner = ora(); this.packageManager = new PackageManager({ packageManagerKind, @@ -66,27 +71,21 @@ class Configurator { public createNextApp = async () => { const pm = this.packageManager.getKind(); - try { - console.log(`\n`); - await $({ - stdio: 'inherit', - })`npx create-next-app@latest ${this.root} --use-${pm}`; - } catch (error) { + console.log(`\n`); + + await $({ + stdio: 'inherit', + })`npx create-next-app@latest ${this.root} --use-${pm}`.catch((error) => { oops(); throw new Error(`\n${error}`); - } + }); return this.getNextConfig(); }; public getNextConfig = () => { - const artifactExists = (fileName: string) => { - try { - return fs.existsSync(path.join(this.root, fileName)); - } catch (e) { - console.log({ e }); - } - }; + const artifactExists = (fileName: string) => + fs.existsSync(path.join(this.root, fileName)); const typescript = artifactExists('tsconfig.json') || false; this.nextConfig = { @@ -101,198 +100,355 @@ class Configurator { return this.nextConfig; }; - public configure = async () => { - if (Object.entries(this.promptAnswers).length === 0) return; - - if (this.promptAnswers.configurePrettier) { - await this.configurePrettier(); + public prepare = async () => { + const pm = this.packageManager.getKind(); + const { + configureCypress, + configureDocker, + configureHusky, + configureJestRTL, + configurePrettier, + configureSelectedDependencies, + configureStorybook, + } = this.promptAnswers; + + // Next updates to default config + this.configurationObjects.configFiles.push('next.config.js'); + this.configurationObjects.packageScripts = { + ...this.configurationObjects.packageScripts, + 'build:standalone': 'BUILD_STANDALONE=true next build', + 'start:standalone': 'node ./.next/standalone/server.js', + 'build-start': `next build && next start`, + 'build-start:standalone': `${pm} run build:standalone && ${pm} run start:standalone`, + }; + if (this.promptAnswers.configureNextImageOptimisation) { + this.configurationObjects.packageDependencies.push('sharp'); } + await this.addMarkdownFragmentToMarkdownArr('jestRTL'); - if (this.promptAnswers.configureJestRTL) await this.configureJestRTL(); - - if (this.promptAnswers.configureCypress) { - await this.configureCypress(); + // CYPRESS + if (configureCypress) { + this.configurationObjects.configDirectories.push('cypress'); + this.configurationObjects.packageDevDependencies.push('cypress'); + this.configurationObjects.packageScripts = { + ...this.configurationObjects.packageScripts, + e2e: 'cypress run', + }; + await this.addMarkdownFragmentToMarkdownArr('cypress'); } - if ( - (this.nextConfig.eslint || this.promptAnswers.configurePrettier) && - this.promptAnswers.configureLintStaged - ) { - await this.configureLintStaged(); + // DOCKER + if (configureDocker) { + this.configurationObjects.configFiles.push( + ...['docker-compose.yml', 'Dockerfile', 'Makefile'] + ); + this.addMarkdownFragmentToMarkdownArr('cypdockerress'); } - if (this.promptAnswers.configureHusky) { - await this.configureGitHusky(); + // PRETTIER + if (configurePrettier) { + this.configurationObjects.configFiles.push( + ...['.prettierrc.json', '.prettierignore'] + ); + this.configurationObjects.packageDevDependencies.push( + ...['prettier', 'eslint-config-prettier'] + ); + if (!this.nextConfig.eslint) { + this.configurationObjects.packageDevDependencies.push('eslint'); + } + this.configurationObjects.packageScripts = { + ...this.configurationObjects.packageScripts, + 'format:check': 'prettier --check .', + 'format:write': 'prettier --write .', + }; + await this.addMarkdownFragmentToMarkdownArr('prettier'); } - if (this.promptAnswers.configureStorybook) { - await this.configureStorybook(); + // STORYBOOK + if (configureStorybook) { + this.configurationObjects.configDirectories.push('.storybook'); + this.configurationObjects.packageDevDependencies.push( + ...[ + '@storybook/addon-essentials', + '@storybook/addon-interactions', + '@storybook/addon-links', + '@storybook/addon-onboarding', + '@storybook/blocks', + '@storybook/nextjs', + '@storybook/react', + '@storybook/testing-library', + 'eslint-plugin-storybook', + 'storybook', + ] + ); + this.configurationObjects.packageScripts = { + ...this.configurationObjects.packageScripts, + storybook: 'storybook dev -p 6006', + 'build-storybook': 'storybook build', + }; + await this.addMarkdownFragmentToMarkdownArr('storybook'); } - if (this.promptAnswers.configureDocker) { - await this.configureDocker(); + // JEST / RTL + if (configureJestRTL) { + this.configurationObjects.configFiles.push('jest.config.js'); + this.configurationObjects.packageDevDependencies.push( + ...[ + 'jest', + 'jest-environment-jsdom', + '@testing-library/jest-dom', + '@testing-library/user-event', + '@testing-library/react', + 'cypress', + 'eslint-plugin-testing-library', + ] + ); + this.configurationObjects.packageScripts = { + ...this.configurationObjects.packageScripts, + test: 'jest', + 'test:watch': 'jest --watch', + 'test:coverage': 'jest --coverage', + 'test:ci': 'jest --ci --coverage', + }; + await this.addMarkdownFragmentToMarkdownArr('jestRTL'); } - if (this.promptAnswers.configureDotEnvFiles.length > 0) { - await this.configureEnvVars(); + // HUSKY + if (configureHusky) { + await this.addMarkdownFragmentToMarkdownArr('git'); + await this.addMarkdownFragmentToMarkdownArr('husky'); } - if (this.promptAnswers.configureSelectedDependencies.length > 0) { - await this.configureSelectedDependencies(); - } + // SELECTED DEPENDENCIES + if ( + configureSelectedDependencies && + configureSelectedDependencies.length > 0 + ) { + const dependencies = this.promptAnswers.configureSelectedDependencies + .filter(({ saveDev }: { saveDev: boolean }) => !saveDev) + .map(({ module }: { module: string }) => module); - console.log({ - packageScriptsObj: this.packageScriptsObj, - configsArr: this.configsArr, - dependenciesArr: this.dependenciesArr, - devDepndenciesArr: this.devDepndenciesArr, - markdownArr: this.markdownArr, - }); + const devDependencies = this.promptAnswers.configureSelectedDependencies + .filter(({ saveDev }: { saveDev: boolean }) => saveDev) + .map(({ module }: { module: string }) => module); - // generate - }; + this.configurationObjects.packageDependencies.push(...dependencies); + this.configurationObjects.packageDevDependencies.push(...devDependencies); + } - public configureCypress = async () => { - this.configsArr.push('cypress'); - this.devDepndenciesArr.push('cypress'); - this.packageScriptsObj = { - ...this.packageScriptsObj, - e2e: 'cypress run', - }; - await this.addMarkdownFragmentToMarkdownArr('cypress'); + return this.configurationObjects; }; - public configureDocker = async () => { - this.configsArr.push(...['docker-compose.yml', 'Dockerfile', 'Makefile']); - this.addMarkdownFragmentToMarkdownArr('cypdockerress'); - }; + public installConfigureGitHusky = async () => { + const $execa = $({ cwd: this.root }); + const pm = this.packageManager.getKind(); - public configureEnvVars = async () => {}; - - public configureGitHusky = async () => {}; - - public configureJestRTL = async () => { - this.configsArr.push('jest.config.js'); - this.devDepndenciesArr.push( - ...[ - 'jest', - 'jest-environment-jsdom', - '@testing-library/jest-dom', - '@testing-library/user-event', - '@testing-library/react', - 'cypress', - 'eslint-plugin-testing-library', - ] - ); + this.spinner.start('Configuring Git and Husky'); - this.packageScriptsObj = { - ...this.packageScriptsObj, - test: 'jest', - 'test:watch': 'jest --watch', - 'test:coverage': 'jest --coverage', - 'test:ci': 'jest --ci --coverage', - }; + await $execa`git init`; - await this.addMarkdownFragmentToMarkdownArr('jestRTL'); - }; + let huskyInit = 'npx husky-init && npm install'; - public configureLintStaged = async () => {}; + if (pm === PackageManagerKindEnum.YARN) { + huskyInit = 'yarn dlx husky-init --yarn2 && yarn'; + } - public configureEslint = async () => {}; + if (pm === PackageManagerKindEnum.PNPM) { + huskyInit = 'pnpm dlx husky-init && pnpm install'; + } - public configureNext = async () => { - const pm = this.packageManager.getKind(); + if (pm === PackageManagerKindEnum.BUN) { + huskyInit = 'bunx husky-init && bun install'; + } - this.configsArr.push('next.config.js'); + await $execa`${huskyInit}`.catch((error) => { + oops(); + this.spinner.fail(); + throw new Error(`${error}`); + }); - this.packageScriptsObj = { - ...this.packageScriptsObj, - 'build:standalone': 'BUILD_STANDALONE=true next build', - 'start:standalone': 'node ./.next/standalone/server.js', - 'build-start': `next build && next start`, - 'build-start:standalone': `${pm} run build:standalone && ${pm} run start:standalone`, - }; + // rewrite husky pre-commit commands based on choices + const huskyPreCommitStr = + `#!/usr/bin/env sh\n. "$(dirname -- "$0")/_/husky.sh"` + + (this.nextConfig.eslint + ? `\n\nnpm run lint:check\n\nnpm run lint:fix` + : '') + + (this.promptAnswers.configurePrettier ? `\n\nnpm run format:write` : ''); + + await fs.promises + .writeFile( + path.join(this.root, '.husky', 'pre-commit'), + huskyPreCommitStr, + 'utf8' + ) + .catch((error) => { + oops(); + this.spinner.fail(); + throw new Error(`${error}`); + }); - if (this.promptAnswers.configureNextImageOptimisation) { - this.dependenciesArr.push('sharp'); + this.spinner.succeed(); + }; + + public installDependencies = async () => { + this.spinner.start('Installing Dependencies'); + + const { packageDependencies, packageDevDependencies } = + this.configurationObjects; + + if (packageDependencies.length > 0) { + await this.packageManager.addToDevDependencies(packageDependencies); } - await this.addMarkdownFragmentToMarkdownArr('jestRTL'); - }; + if (packageDevDependencies.length > 0) { + await this.packageManager.addToDevDependencies(packageDevDependencies); + } - public configureStorybook = async () => { - this.configsArr.push('.storybook'); - this.devDepndenciesArr.push( - ...[ - '@storybook/addon-essentials', - '@storybook/addon-interactions', - '@storybook/addon-links', - '@storybook/addon-onboarding', - '@storybook/blocks', - '@storybook/nextjs', - '@storybook/react', - '@storybook/testing-library', - 'eslint-plugin-storybook', - 'storybook', - ] - ); + if (this.promptAnswers.configureGitHusky) { + await this.installConfigureGitHusky(); + } - this.packageScriptsObj = { - ...this.packageScriptsObj, - storybook: 'storybook dev -p 6006', - 'build-storybook': 'storybook build', - }; + this.spinner.succeed(); + }; - await this.addMarkdownFragmentToMarkdownArr('storybook'); + public configurePackageFile = async () => { + const { configureLintStaged, configurePrettier } = this.promptAnswers; + const { packageScripts } = this.configurationObjects; + + // package scripts + await this.packageManager.addToPackage('scripts', packageScripts); + + // lint-staged + if ((configureLintStaged && this.nextConfig.eslint) || configurePrettier) { + const lintStaged: Record = { + '**/*.{js,jsx}': ['lint:check', 'lint:fix', 'format:write'], + '**/*.{ts,tsx}': [ + 'lint:check', + 'lint:fix', + 'format:write', + 'build --noEmit', + ], + '**/*.css': ['format:write', 'stylelint'], + '**/*.{md, yml, yaml}': ['format:write'], + }; + await this.packageManager.addToPackage('lint-staged', lintStaged); + } }; - public configurePrettier = async () => { - this.configsArr.push(...['.prettierrc.json', '.prettierignore']); + public configureEslint = async () => { + const { configurePrettier, configureStorybook } = this.promptAnswers; + const { packageDevDependencies } = this.configurationObjects; - this.devDepndenciesArr.push(...['prettier', 'eslint-config-prettier']); - if (!this.nextConfig.eslint) this.devDepndenciesArr.push('eslint'); + const hasPrettier = + configurePrettier && packageDevDependencies.includes('prettier'); + const hasTsEslint = packageDevDependencies.includes( + 'eslint-config-prettier' + ); - this.packageScriptsObj = { - ...this.packageScriptsObj, - 'format:check': 'prettier --check .', - 'format:write': 'prettier --write .', + const hasStorybook = + configureStorybook && + packageDevDependencies.includes('eslint-plugin-storybook'); + + const hasRTL = packageDevDependencies.includes('@testing-library/react'); + + if (!this.nextConfig.eslint || !configurePrettier) return; + + const eslint = { + root: true, + plugins: [ + ...(hasTsEslint ? ['@typescript-eslint'] : []), + ...(hasRTL ? ['testing-library'] : []), + ], + extends: [ + 'next/core-web-vitals', + ...(hasTsEslint ? ['plugin:@typescript-eslint/recommended'] : []), + ...(hasStorybook ? ['plugin:storybook/recommended'] : []), + ...(hasPrettier ? ['prettier'] : []), + ], + rules: { + '@typescript-eslint/no-unused-vars': 'error', + '@typescript-eslint/no-explicit-any': 'error', + }, + overrides: [ + ...(hasRTL + ? [ + { + files: [ + '**/__tests__/**/*.[jt]s?(x)', + '**/?(*.)+(spec|test).[jt]s?(x)', + ], + extends: ['plugin:testing-library/react'], + }, + ] + : []), + ], }; - await this.addMarkdownFragmentToMarkdownArr('prettier'); + await fs.promises + .writeFile(path.join(this.root, '.eslintrc.json'), JSON.stringify(eslint)) + .catch((error) => { + oops(); + throw new Error(`${error}`); + }); }; - public configureSelectedDependencies = async () => { - const dependencies = this.promptAnswers.configureSelectedDependencies - .filter(({ saveDev }: { saveDev: boolean }) => !saveDev) - .map(({ module }: { module: string }) => module); + public buildConfigs = async () => { + this.spinner.start('Building configs'); + const { configDirectories, configFiles } = this.configurationObjects; + const { configureDotEnvFiles } = this.promptAnswers; + + const configs = []; + // Directories & Files + if (configDirectories.length > 0) { + configs.push(this.copyTemplate(configDirectories, true)); + } + + if (configFiles.length > 0) { + configs.push(this.copyTemplate(configFiles)); + } + + if (configs.length >= 1) { + await Promise.all(configs).catch((error) => { + oops(); + this.spinner.fail(); + throw new Error(`${error}`); + }); + } - const devDependencies = this.promptAnswers.configureSelectedDependencies - .filter(({ saveDev }: { saveDev: boolean }) => saveDev) - .map(({ module }: { module: string }) => module); + // .env files + if (configureDotEnvFiles.length > 0) { + const copyEnvFiles = configureDotEnvFiles.map( + (file: string) => $`touch ${path.join(this.root, file)}` + ); + await Promise.all(copyEnvFiles).catch((error) => { + oops(); + this.spinner.fail(); + throw new Error(`${error}`); + }); + } - this.dependenciesArr.push(...dependencies); - this.devDepndenciesArr.push(...devDependencies); + await this.configureEslint(); + this.spinner.succeed(); }; public cleanUp = async () => { // clean up ie format files + write Readme - maybe other stuff TBC this.spinner.start('Cleaning up'); - try { - if (this.promptAnswers.configurePrettier) { - await $({ - cwd: this.root, - })`${this.packageManager.getKind()} run format:write`; - } - - await this.generateReadme(); - this.spinner.succeed(); - } catch (error) { - this.spinner.fail(); - oops(); - throw new Error(`\n${error}`); + if (this.promptAnswers.configurePrettier) { + await $({ + cwd: this.root, + })`${this.packageManager.getKind()} run format:write` + .then(() => this.spinner.succeed()) + .catch((error) => { + this.spinner.fail(); + oops(); + console.log(`${error}`); + }); } + if (this.spinner.isSpinning) this.spinner.succeed(); + return this.configurationCompleteMessage(); }; @@ -305,50 +461,52 @@ class Configurator { private addMarkdownFragmentToMarkdownArr = async ( markdownFileName: string ) => { - const filepath = path.join(this.markdownDirPath, `${markdownFileName}.md`); + const markdownFilePath = path.join( + this.markdownDirPath, + `${markdownFileName}.md` + ); - if (fs.existsSync(filepath)) { - try { - const markdown = await fs.promises.readFile(filepath, 'utf8'); - this.markdownArr.push(markdown); - } catch (error) { - oops(); - throw new Error(`${error}`); - } + if (fs.existsSync(markdownFilePath)) { + await fs.promises + .readFile(markdownFilePath, 'utf8') + .then((markdown) => this.configurationObjects.markdown.push(markdown)) + .catch((error) => { + oops(); + throw new Error(`${error}`); + }); } }; - private generateReadme = async () => { - try { - const markdown = this.markdownArr.join('\n\n'); - await fs.promises.writeFile(path.join(this.root, 'README.md'), markdown); - } catch (error) { - oops(); - throw new Error(`${error}`); - } + public generateReadme = async () => { + this.spinner.start('Generating Readme'); + const markdown = this.configurationObjects.markdown.join('\n\n'); + await fs.promises + .writeFile(path.join(this.root, 'README.md'), markdown) + .then(() => this.spinner.succeed()) + .catch((error) => { + this.spinner.fail(); + oops(); + throw new Error(`${error}`); + }); }; private copyTemplate = async ( - template: string | string[], + template: string[], recursive: boolean = false ) => { - if (typeof template === 'string') { - return await fs.promises.cp( - path.join(this.configsPath, template), - path.join(this.root, template), - { recursive } - ); - } - if (Array.isArray(template) && template.length > 0) { const copyFiles = template.map((file) => fs.promises.cp( path.join(this.configsPath, file), - path.join(this.root, file) + path.join(this.root, file), + { recursive } ) ); - return await Promise.all(copyFiles); + return await Promise.all(copyFiles).catch((error) => { + oops(); + throw new Error(`${error}`); + }); } }; } diff --git a/src/PackageManager.ts b/src/PackageManager.ts index 666dfff..05e2eaa 100644 --- a/src/PackageManager.ts +++ b/src/PackageManager.ts @@ -18,6 +18,7 @@ export enum PackageManagerAddEnum { export enum PackageManagerSaveDevEnum { DEV = '--dev', SAVE_DEV = '--save-dev', + ONLY_DEV = '--only=dev', } export type PackageManagerPropsType = { @@ -25,7 +26,10 @@ export type PackageManagerPropsType = { root: string; }; -export type AddToPackageType = Record>; +export type AddToPackageType = Record< + string, + string | string[] | Record +>; class PackageManager { private packageManagerKind: PackageManagerKindEnum; @@ -42,39 +46,26 @@ class PackageManager { return this.packageManagerKind; } - public getCmds(): { - add: PackageManagerAddEnum; - saveDev: PackageManagerSaveDevEnum; - } { - const pm = this.getKind(); - return { - add: - pm === PackageManagerKindEnum.NPM - ? PackageManagerAddEnum.INSTALL - : PackageManagerAddEnum.ADD, - saveDev: - pm === PackageManagerKindEnum.YARN || PackageManagerKindEnum.BUN - ? PackageManagerSaveDevEnum.DEV // --dev - : PackageManagerSaveDevEnum.SAVE_DEV, // --save-dev - }; - } - public async addToDependencies( dependencies: string[], - addToDependencies: boolean = false + addToDevDependencies: boolean = false ) { if (!Array.isArray(dependencies) || dependencies.length === 0) return; try { - const { add, saveDev } = this.getCmds(); + const pm = this.getKind(); + const add = + pm === PackageManagerKindEnum.NPM + ? PackageManagerAddEnum.INSTALL + : PackageManagerAddEnum.ADD; + const deps = [...dependencies]; - if (addToDependencies) deps.push(saveDev); + if (addToDevDependencies) deps.push('-D'); - const { stdout } = await execa(this.getKind(), [add, ...deps], { + await execa(this.getKind(), [add, ...deps], { cwd: this.cwd, + // stdio: 'inherit', }); - - return stdout; } catch (error) { throw new Error(`${error}`); } diff --git a/src/index.ts b/src/index.ts index cbe3511..4a4f14e 100644 --- a/src/index.ts +++ b/src/index.ts @@ -39,6 +39,9 @@ program packageManagerChoice, }); + // const nextConfig = + await configurator.createNextApp(); + const answers = await prompt([ questions.configureNextImageOptimisation, questions.configurePrettier, @@ -62,10 +65,9 @@ program } else { // nothing to configure! goodbye(); - return console.log(` - Looks like you've passed on all the Netxra configuration options. Maybe next time! - Thanks for using Nextra! - `); + return console.log( + `Looks like you've passed on all the Netxra configuration options. Maybe next time!` + ); } console.log(` @@ -76,51 +78,13 @@ Configuring project with following configurations: `); - await configurator.configure(); - - // if (answers.configurePrettier) { - // await nextra.configurePrettier(); - // } - - // if (answers.configureJestRTL) { - // await nextra.configureJestRTL(); - // } - - // if (answers.configureCypress) { - // await nextra.configureCypress(); - // } - - // if ( - // (nextConfig.eslint || answers.configurePrettier) && - // answers.configureLintStaged - // ) { - // await nextra.configureLintStaged(); - // } - - // if (answers.configureHusky) { - // await nextra.configureGitHusky(); - // } - - // if (answers.configureStorybook) { - // await nextra.configureStorybook(); - // } - - // if (answers.configureDocker) { - // await nextra.configureDocker(); - // } - - // if (answers.configureDotEnvFiles.length > 0) { - // await nextra.configureEnvVars(answers.configureDotEnvFiles); - // } - - // if (answers.configureSelectedDependencies.length > 0) { - // await nextra.configureSelectedDependencies( - // answers.configureSelectedDependencies - // ); - // } - - // const configurationCompleteMessage = await nextra.cleanUp(); - // console.log(`\n` + configurationCompleteMessage); + await configurator + .prepare() + .then(() => configurator.configurePackageFile()) + .then(() => configurator.installDependencies()) + .then(() => configurator.buildConfigs()) + .then(() => configurator.generateReadme()) + .then(() => configurator.cleanUp()); }); program.parse(); diff --git a/src/templates/.stylelintrc.json b/src/templates/.stylelintrc.json new file mode 100644 index 0000000..10f1021 --- /dev/null +++ b/src/templates/.stylelintrc.json @@ -0,0 +1,4 @@ +{ + "extends": ["stylelint-config-standard"], + "rules": {} +} From 5eb49f4ebec80a3eeccba8938384e645e1ece5c4 Mon Sep 17 00:00:00 2001 From: Dominic Geargeoura Date: Tue, 3 Oct 2023 12:27:52 +0100 Subject: [PATCH 003/105] fixes --- src/Configurator.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Configurator.ts b/src/Configurator.ts index 389af5d..c7e333c 100644 --- a/src/Configurator.ts +++ b/src/Configurator.ts @@ -124,7 +124,7 @@ class Configurator { if (this.promptAnswers.configureNextImageOptimisation) { this.configurationObjects.packageDependencies.push('sharp'); } - await this.addMarkdownFragmentToMarkdownArr('jestRTL'); + await this.addMarkdownFragmentToMarkdownArr('next'); // CYPRESS if (configureCypress) { @@ -142,7 +142,7 @@ class Configurator { this.configurationObjects.configFiles.push( ...['docker-compose.yml', 'Dockerfile', 'Makefile'] ); - this.addMarkdownFragmentToMarkdownArr('cypdockerress'); + this.addMarkdownFragmentToMarkdownArr('docker'); } // PRETTIER From ff0f546d20ce2ca4d0394560eeb22fd80c26d4eb Mon Sep 17 00:00:00 2001 From: Dominic Geargeoura Date: Tue, 3 Oct 2023 16:48:30 +0100 Subject: [PATCH 004/105] configurator refactor --- src/Configurator.ts | 363 +++++++++++++++++++---------------- src/index.ts | 14 +- src/templates/.editorconfig | 13 ++ src/templates/jest.config.js | 8 +- 4 files changed, 220 insertions(+), 178 deletions(-) create mode 100644 src/templates/.editorconfig diff --git a/src/Configurator.ts b/src/Configurator.ts index c7e333c..3868551 100644 --- a/src/Configurator.ts +++ b/src/Configurator.ts @@ -9,6 +9,7 @@ import prompts from 'prompts'; import { oops } from './utils.js'; import PackageManager, { PackageManagerKindEnum } from './PackageManager.js'; +import { configureLintStaged } from './questions.js'; type NextraPropsType = { projectDirectoryPath: string; @@ -42,13 +43,25 @@ class Configurator { private packageManager = {} as PackageManager; private promptAnswers = {} as prompts.Answers; private spinner; + private use = { + cypress: false, + eslint: false, + husky: false, + jest: false, + lintStaged: false, + prettier: false, + reactTestingLibrary: false, + storybook: false, + tsEslint: false, + typescript: false, + }; private configurationObjects = { - markdown: [], - configFiles: [], configDirectories: [], - packageScripts: {}, + configFiles: [], + markdown: [], packageDependencies: [], packageDevDependencies: [], + packageScripts: {}, } as ConfigurationObjectsType; constructor({ @@ -65,6 +78,15 @@ class Configurator { }); } + public run = async () => { + await this.prepare() + .then(() => this.configurePackageFile()) + .then(() => this.installDependencies()) + .then(() => this.buildConfigs()) + .then(() => this.generateReadme()) + .then(() => this.cleanUp()); + }; + public setPromptAnswers = (answers: prompts.Answers) => { this.promptAnswers = answers; }; @@ -84,16 +106,19 @@ class Configurator { }; public getNextConfig = () => { - const artifactExists = (fileName: string) => + if (Object.keys(this.nextConfig).length > 1) { + return this.nextConfig; + } + + const exists = (fileName: string) => fs.existsSync(path.join(this.root, fileName)); - const typescript = artifactExists('tsconfig.json') || false; + const typescript = exists('tsconfig.json') || false; this.nextConfig = { - appRouter: !artifactExists('src/pages') || false, - eslint: artifactExists('.eslintrc.json') || false, - tailwind: - artifactExists(`tailwind.config.${typescript ? 'ts' : 'js'}`) || false, - srcDir: artifactExists('src') || false, + appRouter: !exists('src/pages') || false, + eslint: exists('.eslintrc.json') || false, + tailwind: exists(`tailwind.config.${typescript ? 'ts' : 'js'}`) || false, + srcDir: exists('src') || false, typescript, }; @@ -112,129 +137,120 @@ class Configurator { configureStorybook, } = this.promptAnswers; - // Next updates to default config - this.configurationObjects.configFiles.push('next.config.js'); + const configFiles = [ + 'next.config.js', + ...(configureDocker + ? ['docker-compose.yml', 'Dockerfile', 'Makefile'] + : []), + ...(configurePrettier ? ['.prettierrc.json', '.prettierignore'] : []), + ...(configureJestRTL ? ['jest.config.js'] : []), + ]; + + this.configurationObjects.configFiles.push(...configFiles); + + const configDirectories = [ + ...(configureCypress ? ['cypress'] : []), + ...(configureStorybook ? ['.storybook'] : []), + ]; + + this.configurationObjects.configDirectories.push(...configDirectories); + this.configurationObjects.packageScripts = { - ...this.configurationObjects.packageScripts, 'build:standalone': 'BUILD_STANDALONE=true next build', 'start:standalone': 'node ./.next/standalone/server.js', 'build-start': `next build && next start`, 'build-start:standalone': `${pm} run build:standalone && ${pm} run start:standalone`, + ...(configurePrettier + ? { + 'format:check': 'prettier --check .', + 'format:write': 'prettier --write .', + } + : {}), + ...(configureJestRTL + ? { + test: 'jest', + 'test:watch': 'jest --watch', + 'test:coverage': 'jest --coverage', + 'test:ci': 'jest --ci --coverage', + } + : {}), + ...(configureCypress ? { e2e: 'cypress run' } : {}), + ...(configureStorybook + ? { + storybook: 'storybook dev -p 6006', + 'build-storybook': 'storybook build', + } + : {}), }; - if (this.promptAnswers.configureNextImageOptimisation) { - this.configurationObjects.packageDependencies.push('sharp'); - } - await this.addMarkdownFragmentToMarkdownArr('next'); - - // CYPRESS - if (configureCypress) { - this.configurationObjects.configDirectories.push('cypress'); - this.configurationObjects.packageDevDependencies.push('cypress'); - this.configurationObjects.packageScripts = { - ...this.configurationObjects.packageScripts, - e2e: 'cypress run', - }; - await this.addMarkdownFragmentToMarkdownArr('cypress'); - } - // DOCKER - if (configureDocker) { - this.configurationObjects.configFiles.push( - ...['docker-compose.yml', 'Dockerfile', 'Makefile'] + const dependencies = [ + ...(this.promptAnswers.configureNextImageOptimisation ? ['sharp'] : []), + ]; + + this.configurationObjects.packageDependencies.push(...dependencies); + + const devDependencies = [ + ...(configureCypress ? ['cypress'] : []), + ...(!this.nextConfig.eslint ? ['eslint'] : []), + ...(configurePrettier ? ['prettier', 'eslint-config-prettier'] : []), + ...(configureStorybook + ? [ + '@storybook/addon-essentials', + '@storybook/addon-interactions', + '@storybook/addon-links', + '@storybook/addon-onboarding', + '@storybook/blocks', + '@storybook/nextjs', + '@storybook/react', + '@storybook/testing-library', + 'eslint-plugin-storybook', + 'storybook', + ] + : []), + ...(configureJestRTL + ? [ + 'jest', + 'jest-environment-jsdom', + '@testing-library/jest-dom', + '@testing-library/user-event', + '@testing-library/react', + 'cypress', + 'eslint-plugin-testing-library', + ] + : []), + ]; + + this.configurationObjects.packageDevDependencies.push(...devDependencies); + + if (configureSelectedDependencies?.length > 0) { + this.configurationObjects.packageDependencies.push( + ...configureSelectedDependencies + .filter(({ saveDev }: { saveDev: boolean }) => !saveDev) + .map(({ module }: { module: string }) => module) ); - this.addMarkdownFragmentToMarkdownArr('docker'); - } - // PRETTIER - if (configurePrettier) { - this.configurationObjects.configFiles.push( - ...['.prettierrc.json', '.prettierignore'] - ); this.configurationObjects.packageDevDependencies.push( - ...['prettier', 'eslint-config-prettier'] + ...configureSelectedDependencies + .filter(({ saveDev }: { saveDev: boolean }) => saveDev) + .map(({ module }: { module: string }) => module) ); - if (!this.nextConfig.eslint) { - this.configurationObjects.packageDevDependencies.push('eslint'); - } - this.configurationObjects.packageScripts = { - ...this.configurationObjects.packageScripts, - 'format:check': 'prettier --check .', - 'format:write': 'prettier --write .', - }; - await this.addMarkdownFragmentToMarkdownArr('prettier'); } - // STORYBOOK - if (configureStorybook) { - this.configurationObjects.configDirectories.push('.storybook'); - this.configurationObjects.packageDevDependencies.push( - ...[ - '@storybook/addon-essentials', - '@storybook/addon-interactions', - '@storybook/addon-links', - '@storybook/addon-onboarding', - '@storybook/blocks', - '@storybook/nextjs', - '@storybook/react', - '@storybook/testing-library', - 'eslint-plugin-storybook', - 'storybook', - ] - ); - this.configurationObjects.packageScripts = { - ...this.configurationObjects.packageScripts, - storybook: 'storybook dev -p 6006', - 'build-storybook': 'storybook build', - }; - await this.addMarkdownFragmentToMarkdownArr('storybook'); - } + const markdownFiles = [ + 'next.md', + ...(configureCypress ? ['cypress.md'] : []), + ...(configureDocker ? ['docker.md'] : []), + ...(configurePrettier ? ['prettier.md'] : []), + ...(configureStorybook ? ['storybook.md'] : []), + ...(configureJestRTL ? ['jestRTL.md'] : []), + ...(configureLintStaged ? ['lint-staged.md'] : []), + ...(configureHusky ? ['git.md', 'husky.md'] : []), + ...(configureLintStaged ? ['selected-dependencies.md'] : []), + ]; - // JEST / RTL - if (configureJestRTL) { - this.configurationObjects.configFiles.push('jest.config.js'); - this.configurationObjects.packageDevDependencies.push( - ...[ - 'jest', - 'jest-environment-jsdom', - '@testing-library/jest-dom', - '@testing-library/user-event', - '@testing-library/react', - 'cypress', - 'eslint-plugin-testing-library', - ] - ); - this.configurationObjects.packageScripts = { - ...this.configurationObjects.packageScripts, - test: 'jest', - 'test:watch': 'jest --watch', - 'test:coverage': 'jest --coverage', - 'test:ci': 'jest --ci --coverage', - }; - await this.addMarkdownFragmentToMarkdownArr('jestRTL'); - } + const markdowns = await this.getFromFiles(markdownFiles); - // HUSKY - if (configureHusky) { - await this.addMarkdownFragmentToMarkdownArr('git'); - await this.addMarkdownFragmentToMarkdownArr('husky'); - } - - // SELECTED DEPENDENCIES - if ( - configureSelectedDependencies && - configureSelectedDependencies.length > 0 - ) { - const dependencies = this.promptAnswers.configureSelectedDependencies - .filter(({ saveDev }: { saveDev: boolean }) => !saveDev) - .map(({ module }: { module: string }) => module); - - const devDependencies = this.promptAnswers.configureSelectedDependencies - .filter(({ saveDev }: { saveDev: boolean }) => saveDev) - .map(({ module }: { module: string }) => module); - - this.configurationObjects.packageDependencies.push(...dependencies); - this.configurationObjects.packageDevDependencies.push(...devDependencies); - } + this.configurationObjects.markdown = markdowns; return this.configurationObjects; }; @@ -245,21 +261,20 @@ class Configurator { this.spinner.start('Configuring Git and Husky'); - await $execa`git init`; - - let huskyInit = 'npx husky-init && npm install'; - - if (pm === PackageManagerKindEnum.YARN) { - huskyInit = 'yarn dlx husky-init --yarn2 && yarn'; - } - - if (pm === PackageManagerKindEnum.PNPM) { - huskyInit = 'pnpm dlx husky-init && pnpm install'; - } + await $execa`git init`.catch((error) => { + oops(); + this.spinner.fail(); + throw new Error(`${error}`); + }); - if (pm === PackageManagerKindEnum.BUN) { - huskyInit = 'bunx husky-init && bun install'; - } + const huskyInit = + pm === PackageManagerKindEnum.YARN + ? `yarn dlx husky-init --yarn2 && yarn` + : pm === PackageManagerKindEnum.PNPM + ? `pnpm dlx husky-init && pnpm install` + : pm === PackageManagerKindEnum.BUN + ? 'bunx husky-init && bun install' + : 'npx husky-init && npm install'; await $execa`${huskyInit}`.catch((error) => { oops(); @@ -313,24 +328,51 @@ class Configurator { public configurePackageFile = async () => { const { configureLintStaged, configurePrettier } = this.promptAnswers; - const { packageScripts } = this.configurationObjects; + const { packageScripts, packageDevDependencies } = + this.configurationObjects; + + const hasPrettier = + configurePrettier && packageDevDependencies.includes('prettier'); + + const hasEslint = + this.nextConfig.eslint || packageDevDependencies.includes('eslint'); + + const hasTsEslint = packageDevDependencies.includes( + '@typescript-eslint/eslint-plugin' + ); + + const hasJest = packageDevDependencies.includes('jest'); // package scripts await this.packageManager.addToPackage('scripts', packageScripts); // lint-staged - if ((configureLintStaged && this.nextConfig.eslint) || configurePrettier) { - const lintStaged: Record = { - '**/*.{js,jsx}': ['lint:check', 'lint:fix', 'format:write'], - '**/*.{ts,tsx}': [ - 'lint:check', - 'lint:fix', - 'format:write', - 'build --noEmit', + if ( + configureLintStaged && + (hasEslint || hasTsEslint || hasPrettier || hasJest) + ) { + let lintStaged: Record = { + '**/*.{js,jsx}': [ + ...(hasPrettier ? ['format:write'] : []), + ...(hasEslint ? ['lint:check', 'lint:fix'] : []), + ...(hasJest ? ['test'] : []), ], - '**/*.css': ['format:write', 'stylelint'], '**/*.{md, yml, yaml}': ['format:write'], + '**/*.css': ['format:write'], }; + + if (hasTsEslint) { + lintStaged = { + ...lintStaged, + '**/*.{ts,tsx}': [ + ...(hasPrettier ? ['format:write'] : []), + ...(hasTsEslint ? ['lint:check', 'lint:fix'] : []), + ...(hasJest ? ['test'] : []), + 'build --noEmit', + ], + }; + } + await this.packageManager.addToPackage('lint-staged', lintStaged); } }; @@ -340,17 +382,20 @@ class Configurator { const { packageDevDependencies } = this.configurationObjects; const hasPrettier = - configurePrettier && packageDevDependencies.includes('prettier'); + configurePrettier && + packageDevDependencies.includes('prettier') && + packageDevDependencies.includes('eslint-config-prettier'); + const hasTsEslint = packageDevDependencies.includes( - 'eslint-config-prettier' + '@typescript-eslint/eslint-plugin' ); + const hasRTL = packageDevDependencies.includes('@testing-library/react'); + const hasStorybook = configureStorybook && packageDevDependencies.includes('eslint-plugin-storybook'); - const hasRTL = packageDevDependencies.includes('@testing-library/react'); - if (!this.nextConfig.eslint || !configurePrettier) return; const eslint = { @@ -458,23 +503,19 @@ class Configurator { )} The following configurations were made: TBC... `; }; - private addMarkdownFragmentToMarkdownArr = async ( - markdownFileName: string - ) => { - const markdownFilePath = path.join( - this.markdownDirPath, - `${markdownFileName}.md` + private getFromFiles = async (filenames: string[]) => { + const filePaths = filenames.map((filename) => + path.join(this.markdownDirPath, filename) ); - if (fs.existsSync(markdownFilePath)) { - await fs.promises - .readFile(markdownFilePath, 'utf8') - .then((markdown) => this.configurationObjects.markdown.push(markdown)) - .catch((error) => { - oops(); - throw new Error(`${error}`); - }); - } + const readFiles = filePaths.map((filePath) => + fs.readFileSync(filePath, 'utf8') + ); + + return await Promise.all(readFiles).catch((error) => { + oops(); + throw new Error(`${error}`); + }); }; public generateReadme = async () => { diff --git a/src/index.ts b/src/index.ts index 4a4f14e..c295557 100644 --- a/src/index.ts +++ b/src/index.ts @@ -60,9 +60,7 @@ program answers.configureSelectedDependencies.length > 0 || answers.configureDotEnvFiles.length > 0; - if (hasAnswers) { - configurator.setPromptAnswers(answers); - } else { + if (!hasAnswers) { // nothing to configure! goodbye(); return console.log( @@ -70,6 +68,8 @@ program ); } + configurator.setPromptAnswers(answers); + console.log(` Using ${packageManagerChoice}. @@ -78,13 +78,7 @@ Configuring project with following configurations: `); - await configurator - .prepare() - .then(() => configurator.configurePackageFile()) - .then(() => configurator.installDependencies()) - .then(() => configurator.buildConfigs()) - .then(() => configurator.generateReadme()) - .then(() => configurator.cleanUp()); + await configurator.run(); }); program.parse(); diff --git a/src/templates/.editorconfig b/src/templates/.editorconfig new file mode 100644 index 0000000..6e87a00 --- /dev/null +++ b/src/templates/.editorconfig @@ -0,0 +1,13 @@ +# Editor configuration, see http://editorconfig.org +root = true + +[*] +charset = utf-8 +indent_style = space +indent_size = 2 +insert_final_newline = true +trim_trailing_whitespace = true + +[*.md] +max_line_length = off +trim_trailing_whitespace = false diff --git a/src/templates/jest.config.js b/src/templates/jest.config.js index 538f72c..e8f4a0c 100644 --- a/src/templates/jest.config.js +++ b/src/templates/jest.config.js @@ -1,15 +1,9 @@ const nextJest = require('next/jest') - const createJestConfig = nextJest({ - // Provide the path to your Next.js app to load next.config.js and .env files in your test environment dir: './', }) - -// Add any custom config to be passed to Jest const customJestConfig = { - setupFilesAfterEnv: ['/jest.setup.js'], + moduleDirectories: ['node_modules', '/'], testEnvironment: 'jest-environment-jsdom', } - -// createJestConfig is exported this way to ensure that next/jest can load the Next.js config which is async module.exports = createJestConfig(customJestConfig) From 52dc26bd14ed34730749cf23a3a7966577793886 Mon Sep 17 00:00:00 2001 From: Dominic Geargeoura Date: Tue, 3 Oct 2023 18:06:15 +0100 Subject: [PATCH 005/105] more refactor, added use object to configurator class --- src/Configurator.ts | 38 +++++++++++++++++++++++++++++++++++++- src/PackageManager.ts | 6 ------ 2 files changed, 37 insertions(+), 7 deletions(-) diff --git a/src/Configurator.ts b/src/Configurator.ts index 3868551..92e4882 100644 --- a/src/Configurator.ts +++ b/src/Configurator.ts @@ -45,6 +45,7 @@ class Configurator { private spinner; private use = { cypress: false, + docker: false, eslint: false, husky: false, jest: false, @@ -54,6 +55,7 @@ class Configurator { storybook: false, tsEslint: false, typescript: false, + selectedDependencies: false, }; private configurationObjects = { configDirectories: [], @@ -214,7 +216,6 @@ class Configurator { '@testing-library/jest-dom', '@testing-library/user-event', '@testing-library/react', - 'cypress', 'eslint-plugin-testing-library', ] : []), @@ -252,9 +253,44 @@ class Configurator { this.configurationObjects.markdown = markdowns; + this.setUse(); + return this.configurationObjects; }; + private setUse = () => { + const { + configureCypress: cypress, + configureDocker: docker, + configureHusky: husky, + configureJestRTL: reactTestingLibrary, + configurePrettier: prettier, + configureSelectedDependencies: selectedDependencies, + configureStorybook: storybook, + configureLintStaged: lintStaged, + } = this.promptAnswers; + + const { typescript, eslint } = this.nextConfig; + const { packageDevDependencies } = this.configurationObjects; + + this.use = { + cypress, + eslint, + docker, + husky, + jest: reactTestingLibrary, // TODO make Jest a seperate prompt choice + lintStaged, + prettier: prettier && packageDevDependencies.includes('prettier'), + reactTestingLibrary, + storybook, + tsEslint: + eslint && + packageDevDependencies.includes('eslint-plugin-testing-library'), + typescript, + selectedDependencies, + }; + }; + public installConfigureGitHusky = async () => { const $execa = $({ cwd: this.root }); const pm = this.packageManager.getKind(); diff --git a/src/PackageManager.ts b/src/PackageManager.ts index 05e2eaa..e299708 100644 --- a/src/PackageManager.ts +++ b/src/PackageManager.ts @@ -15,12 +15,6 @@ export enum PackageManagerAddEnum { INSTALL = 'install', } -export enum PackageManagerSaveDevEnum { - DEV = '--dev', - SAVE_DEV = '--save-dev', - ONLY_DEV = '--only=dev', -} - export type PackageManagerPropsType = { packageManagerKind: PackageManagerKindEnum; root: string; From 70aa9507752ac46940e08f05becb73db871e87f8 Mon Sep 17 00:00:00 2001 From: Dominic Geargeoura Date: Tue, 3 Oct 2023 19:45:58 +0100 Subject: [PATCH 006/105] tweaks --- src/Configurator.ts | 105 ++++++++++++++++++++++---------------------- 1 file changed, 53 insertions(+), 52 deletions(-) diff --git a/src/Configurator.ts b/src/Configurator.ts index 92e4882..1f2f85a 100644 --- a/src/Configurator.ts +++ b/src/Configurator.ts @@ -33,6 +33,21 @@ export interface ConfigurationObjectsType { packageDevDependencies: string[]; } +export interface UseType { + cypress: boolean; + docker: boolean; + eslint: boolean; + husky: boolean; + jest: boolean; + lintStaged: boolean; + prettier: boolean; + reactTestingLibrary: boolean; + storybook: boolean; + tsEslint: boolean; + typescript: boolean; + selectedDependencies: boolean; +} + const { green } = picocolors; class Configurator { @@ -42,29 +57,9 @@ class Configurator { private nextConfig = {} as NextJsConfigType; private packageManager = {} as PackageManager; private promptAnswers = {} as prompts.Answers; + private use = {} as UseType; + private configurationObjects = {} as ConfigurationObjectsType; private spinner; - private use = { - cypress: false, - docker: false, - eslint: false, - husky: false, - jest: false, - lintStaged: false, - prettier: false, - reactTestingLibrary: false, - storybook: false, - tsEslint: false, - typescript: false, - selectedDependencies: false, - }; - private configurationObjects = { - configDirectories: [], - configFiles: [], - markdown: [], - packageDependencies: [], - packageDevDependencies: [], - packageScripts: {}, - } as ConfigurationObjectsType; constructor({ projectDirectoryPath, @@ -139,7 +134,7 @@ class Configurator { configureStorybook, } = this.promptAnswers; - const configFiles = [ + this.configurationObjects.configFiles = [ 'next.config.js', ...(configureDocker ? ['docker-compose.yml', 'Dockerfile', 'Makefile'] @@ -148,15 +143,11 @@ class Configurator { ...(configureJestRTL ? ['jest.config.js'] : []), ]; - this.configurationObjects.configFiles.push(...configFiles); - - const configDirectories = [ + this.configurationObjects.configDirectories = [ ...(configureCypress ? ['cypress'] : []), ...(configureStorybook ? ['.storybook'] : []), ]; - this.configurationObjects.configDirectories.push(...configDirectories); - this.configurationObjects.packageScripts = { 'build:standalone': 'BUILD_STANDALONE=true next build', 'start:standalone': 'node ./.next/standalone/server.js', @@ -185,15 +176,17 @@ class Configurator { : {}), }; - const dependencies = [ + this.configurationObjects.packageDependencies = [ ...(this.promptAnswers.configureNextImageOptimisation ? ['sharp'] : []), ]; - this.configurationObjects.packageDependencies.push(...dependencies); - - const devDependencies = [ + this.configurationObjects.packageDevDependencies = [ ...(configureCypress ? ['cypress'] : []), ...(!this.nextConfig.eslint ? ['eslint'] : []), + ...(this.nextConfig.typescript && this.nextConfig.eslint + ? ['@typescript-eslint/eslint-plugin'] + : []), + ...(configureLintStaged ? ['lint-staged'] : []), ...(configurePrettier ? ['prettier', 'eslint-config-prettier'] : []), ...(configureStorybook ? [ @@ -221,8 +214,6 @@ class Configurator { : []), ]; - this.configurationObjects.packageDevDependencies.push(...devDependencies); - if (configureSelectedDependencies?.length > 0) { this.configurationObjects.packageDependencies.push( ...configureSelectedDependencies @@ -260,40 +251,38 @@ class Configurator { private setUse = () => { const { - configureCypress: cypress, configureDocker: docker, configureHusky: husky, - configureJestRTL: reactTestingLibrary, - configurePrettier: prettier, configureSelectedDependencies: selectedDependencies, - configureStorybook: storybook, - configureLintStaged: lintStaged, } = this.promptAnswers; const { typescript, eslint } = this.nextConfig; const { packageDevDependencies } = this.configurationObjects; this.use = { - cypress, + cypress: packageDevDependencies.includes('cypress'), eslint, docker, husky, - jest: reactTestingLibrary, // TODO make Jest a seperate prompt choice - lintStaged, - prettier: prettier && packageDevDependencies.includes('prettier'), - reactTestingLibrary, - storybook, + jest: packageDevDependencies.includes('jest'), // TODO make Jest a seperate prompt choice + lintStaged: packageDevDependencies.includes('lint-staged'), + prettier: packageDevDependencies.includes('prettier'), + reactTestingLibrary: packageDevDependencies.includes( + '@testing-library/react' + ), + storybook: packageDevDependencies.includes('storybook'), tsEslint: eslint && packageDevDependencies.includes('eslint-plugin-testing-library'), typescript, - selectedDependencies, + selectedDependencies: selectedDependencies?.length > 0, }; }; public installConfigureGitHusky = async () => { const $execa = $({ cwd: this.root }); const pm = this.packageManager.getKind(); + const { use } = this; this.spinner.start('Configuring Git and Husky'); @@ -319,12 +308,24 @@ class Configurator { }); // rewrite husky pre-commit commands based on choices - const huskyPreCommitStr = - `#!/usr/bin/env sh\n. "$(dirname -- "$0")/_/husky.sh"` + - (this.nextConfig.eslint - ? `\n\nnpm run lint:check\n\nnpm run lint:fix` - : '') + - (this.promptAnswers.configurePrettier ? `\n\nnpm run format:write` : ''); + let huskyPreCommitStr = `#!/usr/bin/env sh\n. "$(dirname -- "$0")/_/husky.sh"`; + + if (use.husky && use.lintStaged) { + huskyPreCommitStr += `\n\${pm} run lint-staged`; + } else { + if (use.eslint) { + huskyPreCommitStr += `\n\${pm} run format:write`; + } + + if (use.prettier) { + huskyPreCommitStr += + `\n\${pm} run lint:check` + `\n\${pm} run lint:fix`; + } + + if (use.typescript) { + huskyPreCommitStr += `\n\${pm} run build --no-emit`; + } + } await fs.promises .writeFile( From a5999a2f1cc56f12cc4529a5ce520b5d83a02abd Mon Sep 17 00:00:00 2001 From: Dominic Geargeoura Date: Tue, 3 Oct 2023 19:55:44 +0100 Subject: [PATCH 007/105] tweaks --- src/Configurator.ts | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/src/Configurator.ts b/src/Configurator.ts index 1f2f85a..6119718 100644 --- a/src/Configurator.ts +++ b/src/Configurator.ts @@ -520,16 +520,14 @@ class Configurator { if (this.promptAnswers.configurePrettier) { await $({ cwd: this.root, - })`${this.packageManager.getKind()} run format:write` - .then(() => this.spinner.succeed()) - .catch((error) => { - this.spinner.fail(); - oops(); - console.log(`${error}`); - }); + })`${this.packageManager.getKind()} run format:write`.catch((error) => { + this.spinner.fail(); + oops(); + console.log(`${error}`); + }); } - if (this.spinner.isSpinning) this.spinner.succeed(); + this.spinner.succeed(); return this.configurationCompleteMessage(); }; From ebddbc64cc0794290b19e2e7156b3f4805e7f802 Mon Sep 17 00:00:00 2001 From: Dominic Geargeoura Date: Wed, 4 Oct 2023 13:08:08 +0100 Subject: [PATCH 008/105] some refactoring --- src/Configurator.ts | 431 +++++++++++------------ src/Nextra.ts | 510 ---------------------------- src/PackageManager.ts | 8 +- src/index.ts | 35 +- src/markdown/jest.md | 3 + src/markdown/reactTestingLibrary.md | 3 + src/questions.ts | 109 +++--- 7 files changed, 279 insertions(+), 820 deletions(-) delete mode 100644 src/Nextra.ts create mode 100644 src/markdown/jest.md create mode 100644 src/markdown/reactTestingLibrary.md diff --git a/src/Configurator.ts b/src/Configurator.ts index 6119718..64f5e2c 100644 --- a/src/Configurator.ts +++ b/src/Configurator.ts @@ -9,22 +9,15 @@ import prompts from 'prompts'; import { oops } from './utils.js'; import PackageManager, { PackageManagerKindEnum } from './PackageManager.js'; -import { configureLintStaged } from './questions.js'; +import { lintStaged } from './questions.js'; +import { ChoiceValuesType } from './questions.js'; -type NextraPropsType = { +type ConfiguratorPropsType = { projectDirectoryPath: string; packageManagerChoice: PackageManagerKindEnum; }; -export interface NextJsConfigType { - appRouter: boolean; - eslint: boolean; - srcDir: boolean; - tailwind: boolean; - typescript: boolean; -} - -export interface ConfigurationObjectsType { +export interface ConfigType { markdown: string[]; configFiles: string[]; configDirectories: string[]; @@ -33,59 +26,93 @@ export interface ConfigurationObjectsType { packageDevDependencies: string[]; } -export interface UseType { +export interface OptionsType { + appRouter: boolean; cypress: boolean; docker: boolean; + dotEnvFiles: string[]; eslint: boolean; husky: boolean; jest: boolean; lintStaged: boolean; + optionalDependencies: ChoiceValuesType[]; prettier: boolean; reactTestingLibrary: boolean; + selectedDependencies: boolean; + srcDir: boolean; storybook: boolean; - tsEslint: boolean; + tailwind: boolean; typescript: boolean; - selectedDependencies: boolean; + nextImageOptimisation: boolean; } -const { green } = picocolors; +const { cyan, green, bold } = picocolors; class Configurator { - private root: string; private configsPath: string; + private config = {} as ConfigType; + private cwd: string; private markdownDirPath: string; - private nextConfig = {} as NextJsConfigType; + private options = { + appRouter: false, + cypress: false, + docker: false, + dotEnvFiles: [], + eslint: false, + husky: false, + jest: false, + lintStaged: false, + nextImageOptimisation: false, + optionalDependencies: [], + prettier: false, + reactTestingLibrary: false, + selectedDependencies: false, + srcDir: false, + storybook: false, + tailwind: false, + typescript: false, + } as OptionsType; private packageManager = {} as PackageManager; - private promptAnswers = {} as prompts.Answers; - private use = {} as UseType; - private configurationObjects = {} as ConfigurationObjectsType; private spinner; constructor({ projectDirectoryPath, packageManagerChoice: packageManagerKind, - }: NextraPropsType) { + }: ConfiguratorPropsType) { this.configsPath = path.resolve(path.join('src', 'templates')); this.markdownDirPath = path.resolve(path.join('src', 'markdown')); - this.root = path.resolve(projectDirectoryPath); + this.cwd = path.resolve(projectDirectoryPath); this.spinner = ora(); this.packageManager = new PackageManager({ packageManagerKind, - root: this.root, + cwd: this.cwd, }); } public run = async () => { + console.log( + `Using ${bold(this.packageManager.getKind())}` + + `\n\n` + + `The configurator will now setup your next project based on your selections.` + + `\n\n` + ); + await this.prepare() .then(() => this.configurePackageFile()) - .then(() => this.installDependencies()) - .then(() => this.buildConfigs()) + .then(() => this.buildDependencyConfigs()) + .then(() => this.configurePackageFile()) .then(() => this.generateReadme()) .then(() => this.cleanUp()); }; - public setPromptAnswers = (answers: prompts.Answers) => { - this.promptAnswers = answers; + public setOptions = (answers: prompts.Answers) => { + this.options = { + ...this.options, + ...answers, + }; + + console.log({ options: this.options }); + return this.options; }; public createNextApp = async () => { @@ -94,72 +121,73 @@ class Configurator { await $({ stdio: 'inherit', - })`npx create-next-app@latest ${this.root} --use-${pm}`.catch((error) => { + })`npx create-next-app@latest ${this.cwd} --use-${pm}`.catch((error) => { oops(); throw new Error(`\n${error}`); }); - return this.getNextConfig(); + this.options = { + ...this.options, + ...this.getNextConfig(), + }; + + return this.options; }; public getNextConfig = () => { - if (Object.keys(this.nextConfig).length > 1) { - return this.nextConfig; - } - const exists = (fileName: string) => - fs.existsSync(path.join(this.root, fileName)); + fs.existsSync(path.join(this.cwd, fileName)); const typescript = exists('tsconfig.json') || false; - this.nextConfig = { + return { appRouter: !exists('src/pages') || false, eslint: exists('.eslintrc.json') || false, tailwind: exists(`tailwind.config.${typescript ? 'ts' : 'js'}`) || false, srcDir: exists('src') || false, typescript, }; - - return this.nextConfig; }; public prepare = async () => { const pm = this.packageManager.getKind(); const { - configureCypress, - configureDocker, - configureHusky, - configureJestRTL, - configurePrettier, - configureSelectedDependencies, - configureStorybook, - } = this.promptAnswers; - - this.configurationObjects.configFiles = [ + cypress, + docker, + eslint, + husky, + jest, + nextImageOptimisation, + optionalDependencies, + prettier, + reactTestingLibrary, + storybook, + typescript, + } = this.options; + + this.config.configFiles = [ 'next.config.js', - ...(configureDocker - ? ['docker-compose.yml', 'Dockerfile', 'Makefile'] - : []), - ...(configurePrettier ? ['.prettierrc.json', '.prettierignore'] : []), - ...(configureJestRTL ? ['jest.config.js'] : []), + ...(docker ? ['docker-compose.yml', 'Dockerfile', 'Makefile'] : []), + ...(prettier ? ['.prettierrc.json', '.prettierignore'] : []), + ...(jest ? ['jest.config.js'] : []), ]; - this.configurationObjects.configDirectories = [ - ...(configureCypress ? ['cypress'] : []), - ...(configureStorybook ? ['.storybook'] : []), + this.config.configDirectories = [ + ...(cypress ? ['cypress'] : []), + ...(storybook ? ['.storybook'] : []), ]; - this.configurationObjects.packageScripts = { + this.config.packageScripts = { 'build:standalone': 'BUILD_STANDALONE=true next build', 'start:standalone': 'node ./.next/standalone/server.js', 'build-start': `next build && next start`, 'build-start:standalone': `${pm} run build:standalone && ${pm} run start:standalone`, - ...(configurePrettier + ...(prettier ? { 'format:check': 'prettier --check .', 'format:write': 'prettier --write .', } : {}), - ...(configureJestRTL + ...(jest ? { test: 'jest', 'test:watch': 'jest --watch', @@ -167,8 +195,8 @@ class Configurator { 'test:ci': 'jest --ci --coverage', } : {}), - ...(configureCypress ? { e2e: 'cypress run' } : {}), - ...(configureStorybook + ...(cypress ? { e2e: 'cypress run' } : {}), + ...(storybook ? { storybook: 'storybook dev -p 6006', 'build-storybook': 'storybook build', @@ -176,19 +204,16 @@ class Configurator { : {}), }; - this.configurationObjects.packageDependencies = [ - ...(this.promptAnswers.configureNextImageOptimisation ? ['sharp'] : []), + this.config.packageDependencies = [ + ...(nextImageOptimisation ? ['sharp'] : []), ]; - this.configurationObjects.packageDevDependencies = [ - ...(configureCypress ? ['cypress'] : []), - ...(!this.nextConfig.eslint ? ['eslint'] : []), - ...(this.nextConfig.typescript && this.nextConfig.eslint - ? ['@typescript-eslint/eslint-plugin'] - : []), - ...(configureLintStaged ? ['lint-staged'] : []), - ...(configurePrettier ? ['prettier', 'eslint-config-prettier'] : []), - ...(configureStorybook + this.config.packageDevDependencies = [ + ...(cypress ? ['cypress'] : []), + ...(eslint && typescript ? ['@typescript-eslint/eslint-plugin'] : []), + ...(lintStaged ? ['lint-staged'] : []), + ...(prettier ? ['prettier', 'eslint-config-prettier'] : []), + ...(storybook ? [ '@storybook/addon-essentials', '@storybook/addon-interactions', @@ -202,10 +227,9 @@ class Configurator { 'storybook', ] : []), - ...(configureJestRTL + ...(jest ? ['jest', 'jest-environment-jsdom'] : []), + ...(reactTestingLibrary ? [ - 'jest', - 'jest-environment-jsdom', '@testing-library/jest-dom', '@testing-library/user-event', '@testing-library/react', @@ -214,15 +238,15 @@ class Configurator { : []), ]; - if (configureSelectedDependencies?.length > 0) { - this.configurationObjects.packageDependencies.push( - ...configureSelectedDependencies + if (optionalDependencies?.length > 0) { + this.config.packageDependencies.push( + ...optionalDependencies .filter(({ saveDev }: { saveDev: boolean }) => !saveDev) .map(({ module }: { module: string }) => module) ); - this.configurationObjects.packageDevDependencies.push( - ...configureSelectedDependencies + this.config.packageDevDependencies.push( + ...optionalDependencies .filter(({ saveDev }: { saveDev: boolean }) => saveDev) .map(({ module }: { module: string }) => module) ); @@ -230,59 +254,28 @@ class Configurator { const markdownFiles = [ 'next.md', - ...(configureCypress ? ['cypress.md'] : []), - ...(configureDocker ? ['docker.md'] : []), - ...(configurePrettier ? ['prettier.md'] : []), - ...(configureStorybook ? ['storybook.md'] : []), - ...(configureJestRTL ? ['jestRTL.md'] : []), - ...(configureLintStaged ? ['lint-staged.md'] : []), - ...(configureHusky ? ['git.md', 'husky.md'] : []), - ...(configureLintStaged ? ['selected-dependencies.md'] : []), + ...(cypress ? ['cypress.md'] : []), + ...(docker ? ['docker.md'] : []), + ...(prettier ? ['prettier.md'] : []), + ...(storybook ? ['storybook.md'] : []), + ...(jest ? ['jest.md'] : []), + ...(reactTestingLibrary ? ['reactTestingLibrary.md'] : []), + ...(lintStaged ? ['lint-staged.md'] : []), + ...(husky ? ['git.md', 'husky.md'] : []), + ...(lintStaged ? ['selected-dependencies.md'] : []), ]; - const markdowns = await this.getFromFiles(markdownFiles); - - this.configurationObjects.markdown = markdowns; - - this.setUse(); - - return this.configurationObjects; - }; - - private setUse = () => { - const { - configureDocker: docker, - configureHusky: husky, - configureSelectedDependencies: selectedDependencies, - } = this.promptAnswers; + const markdowns = await this.readFromFiles(markdownFiles); - const { typescript, eslint } = this.nextConfig; - const { packageDevDependencies } = this.configurationObjects; + this.config.markdown = markdowns; - this.use = { - cypress: packageDevDependencies.includes('cypress'), - eslint, - docker, - husky, - jest: packageDevDependencies.includes('jest'), // TODO make Jest a seperate prompt choice - lintStaged: packageDevDependencies.includes('lint-staged'), - prettier: packageDevDependencies.includes('prettier'), - reactTestingLibrary: packageDevDependencies.includes( - '@testing-library/react' - ), - storybook: packageDevDependencies.includes('storybook'), - tsEslint: - eslint && - packageDevDependencies.includes('eslint-plugin-testing-library'), - typescript, - selectedDependencies: selectedDependencies?.length > 0, - }; + return this.config; }; public installConfigureGitHusky = async () => { - const $execa = $({ cwd: this.root }); + const $execa = $({ cwd: this.cwd }); const pm = this.packageManager.getKind(); - const { use } = this; + const { husky, eslint, prettier, typescript } = this.options; this.spinner.start('Configuring Git and Husky'); @@ -292,45 +285,47 @@ class Configurator { throw new Error(`${error}`); }); - const huskyInit = - pm === PackageManagerKindEnum.YARN - ? `yarn dlx husky-init --yarn2 && yarn` - : pm === PackageManagerKindEnum.PNPM - ? `pnpm dlx husky-init && pnpm install` - : pm === PackageManagerKindEnum.BUN - ? 'bunx husky-init && bun install' - : 'npx husky-init && npm install'; + let huskyInit = $execa`npx husky-init && npm install`; - await $execa`${huskyInit}`.catch((error) => { - oops(); - this.spinner.fail(); - throw new Error(`${error}`); - }); + // TODO: Manual install husky - the following fails unless npm + if (pm === PackageManagerKindEnum.YARN) { + huskyInit = $execa`yarn dlx husky-init --yarn2 && yarn`; + } + + if (pm === PackageManagerKindEnum.PNPM) { + huskyInit = $execa`pnpm dlx husky-init && pnpm install`; + } + + if (pm === PackageManagerKindEnum.BUN) { + huskyInit = $execa`bunx husky-init && bun install`; + } + + await huskyInit; // rewrite husky pre-commit commands based on choices - let huskyPreCommitStr = `#!/usr/bin/env sh\n. "$(dirname -- "$0")/_/husky.sh"`; + let huskyPreCommitFile = `#!/usr/bin/env sh\n. "$(dirname -- "$0")/_/husky.sh"`; - if (use.husky && use.lintStaged) { - huskyPreCommitStr += `\n\${pm} run lint-staged`; + if (husky && lintStaged) { + huskyPreCommitFile += `$\n\n{pm} run lint-staged`; } else { - if (use.eslint) { - huskyPreCommitStr += `\n\${pm} run format:write`; + if (eslint) { + huskyPreCommitFile += `\n\n${pm} run format:write`; } - if (use.prettier) { - huskyPreCommitStr += - `\n\${pm} run lint:check` + `\n\${pm} run lint:fix`; + if (prettier) { + huskyPreCommitFile += + `\n\${pm} run lint:check` + `\n\n${pm} run lint:fix`; } - if (use.typescript) { - huskyPreCommitStr += `\n\${pm} run build --no-emit`; + if (typescript) { + huskyPreCommitFile += `\n\n${pm} run build --no-emit`; } } await fs.promises .writeFile( - path.join(this.root, '.husky', 'pre-commit'), - huskyPreCommitStr, + path.join(this.cwd, '.husky', 'pre-commit'), + huskyPreCommitFile, 'utf8' ) .catch((error) => { @@ -343,68 +338,66 @@ class Configurator { }; public installDependencies = async () => { - this.spinner.start('Installing Dependencies'); + const { packageDependencies, packageDevDependencies } = this.config; + + const dependencies = this.config.packageDependencies + .map((dep) => `- ` + cyan(dep)) + .sort() + .join(`\n`); - const { packageDependencies, packageDevDependencies } = - this.configurationObjects; + console.log(`\n\n` + `Installing Dependencies` + dependencies + `\n\n`); if (packageDependencies.length > 0) { - await this.packageManager.addToDevDependencies(packageDependencies); + await this.packageManager.addToDependencies(packageDependencies); } + const devDependencies = this.config.packageDevDependencies + .map((dep) => `- ` + cyan(dep)) + .sort() + .join(`\n`); + + console.log( + `\n\n` + `Installing devDependencies` + devDependencies + `\n\n` + ); + if (packageDevDependencies.length > 0) { await this.packageManager.addToDevDependencies(packageDevDependencies); } - if (this.promptAnswers.configureGitHusky) { - await this.installConfigureGitHusky(); + if (this.options.husky) { + // await this.installConfigureGitHusky(); } - this.spinner.succeed(); + console.log(`\n\n`); }; public configurePackageFile = async () => { - const { configureLintStaged, configurePrettier } = this.promptAnswers; - const { packageScripts, packageDevDependencies } = - this.configurationObjects; - - const hasPrettier = - configurePrettier && packageDevDependencies.includes('prettier'); - - const hasEslint = - this.nextConfig.eslint || packageDevDependencies.includes('eslint'); - - const hasTsEslint = packageDevDependencies.includes( - '@typescript-eslint/eslint-plugin' - ); - - const hasJest = packageDevDependencies.includes('jest'); + const { eslint, jest, lintStaged, prettier, typescript } = this.options; + const { packageScripts } = this.config; // package scripts await this.packageManager.addToPackage('scripts', packageScripts); // lint-staged - if ( - configureLintStaged && - (hasEslint || hasTsEslint || hasPrettier || hasJest) - ) { + if (lintStaged && (eslint || (eslint && typescript) || prettier || jest)) { let lintStaged: Record = { '**/*.{js,jsx}': [ - ...(hasPrettier ? ['format:write'] : []), - ...(hasEslint ? ['lint:check', 'lint:fix'] : []), - ...(hasJest ? ['test'] : []), + ...(prettier ? ['format:write'] : []), + ...(eslint ? ['lint:check', 'lint:fix'] : []), + ...(jest ? ['test'] : []), ], - '**/*.{md, yml, yaml}': ['format:write'], + '**/*.{md, yml, yaml, json}': ['format:write'], '**/*.css': ['format:write'], }; - if (hasTsEslint) { + if (eslint && typescript) { lintStaged = { ...lintStaged, '**/*.{ts,tsx}': [ - ...(hasPrettier ? ['format:write'] : []), - ...(hasTsEslint ? ['lint:check', 'lint:fix'] : []), - ...(hasJest ? ['test'] : []), + ...(prettier ? ['format:write'] : []), + 'lint:check', + 'lint:fix', + ...(jest ? ['test'] : []), 'build --noEmit', ], }; @@ -415,44 +408,31 @@ class Configurator { }; public configureEslint = async () => { - const { configurePrettier, configureStorybook } = this.promptAnswers; - const { packageDevDependencies } = this.configurationObjects; + const { storybook, prettier, eslint, typescript, reactTestingLibrary } = + this.options; - const hasPrettier = - configurePrettier && - packageDevDependencies.includes('prettier') && - packageDevDependencies.includes('eslint-config-prettier'); + if (!eslint) return; - const hasTsEslint = packageDevDependencies.includes( - '@typescript-eslint/eslint-plugin' - ); - - const hasRTL = packageDevDependencies.includes('@testing-library/react'); - - const hasStorybook = - configureStorybook && - packageDevDependencies.includes('eslint-plugin-storybook'); - - if (!this.nextConfig.eslint || !configurePrettier) return; - - const eslint = { - root: true, + const eslintrc = { + cwd: true, plugins: [ - ...(hasTsEslint ? ['@typescript-eslint'] : []), - ...(hasRTL ? ['testing-library'] : []), + ...(eslint && typescript ? ['@typescript-eslint'] : []), + ...(reactTestingLibrary ? ['testing-library'] : []), ], extends: [ 'next/core-web-vitals', - ...(hasTsEslint ? ['plugin:@typescript-eslint/recommended'] : []), - ...(hasStorybook ? ['plugin:storybook/recommended'] : []), - ...(hasPrettier ? ['prettier'] : []), + ...(eslint && typescript + ? ['plugin:@typescript-eslint/recommended'] + : []), + ...(storybook ? ['plugin:storybook/recommended'] : []), + ...(prettier ? ['prettier'] : []), ], rules: { '@typescript-eslint/no-unused-vars': 'error', '@typescript-eslint/no-explicit-any': 'error', }, overrides: [ - ...(hasRTL + ...(reactTestingLibrary ? [ { files: [ @@ -467,17 +447,20 @@ class Configurator { }; await fs.promises - .writeFile(path.join(this.root, '.eslintrc.json'), JSON.stringify(eslint)) + .writeFile( + path.join(this.cwd, '.eslintrc.json'), + JSON.stringify(eslintrc) + ) .catch((error) => { oops(); throw new Error(`${error}`); }); }; - public buildConfigs = async () => { - this.spinner.start('Building configs'); - const { configDirectories, configFiles } = this.configurationObjects; - const { configureDotEnvFiles } = this.promptAnswers; + public buildDependencyConfigs = async () => { + this.spinner.start('Building dependency configs'); + const { configDirectories, configFiles } = this.config; + const { dotEnvFiles } = this.options; const configs = []; // Directories & Files @@ -498,9 +481,9 @@ class Configurator { } // .env files - if (configureDotEnvFiles.length > 0) { - const copyEnvFiles = configureDotEnvFiles.map( - (file: string) => $`touch ${path.join(this.root, file)}` + if (dotEnvFiles.length > 0) { + const copyEnvFiles = dotEnvFiles.map( + (file: string) => $`touch ${path.join(this.cwd, file)}` ); await Promise.all(copyEnvFiles).catch((error) => { oops(); @@ -514,12 +497,12 @@ class Configurator { }; public cleanUp = async () => { - // clean up ie format files + write Readme - maybe other stuff TBC + // clean up ie format files - maybe other stuff TBC this.spinner.start('Cleaning up'); - if (this.promptAnswers.configurePrettier) { + if (this.options.prettier) { await $({ - cwd: this.root, + cwd: this.cwd, })`${this.packageManager.getKind()} run format:write`.catch((error) => { this.spinner.fail(); oops(); @@ -538,7 +521,7 @@ class Configurator { )} The following configurations were made: TBC... `; }; - private getFromFiles = async (filenames: string[]) => { + private readFromFiles = async (filenames: string[]) => { const filePaths = filenames.map((filename) => path.join(this.markdownDirPath, filename) ); @@ -555,9 +538,9 @@ class Configurator { public generateReadme = async () => { this.spinner.start('Generating Readme'); - const markdown = this.configurationObjects.markdown.join('\n\n'); + const markdown = this.config.markdown.join('\n\n'); await fs.promises - .writeFile(path.join(this.root, 'README.md'), markdown) + .writeFile(path.join(this.cwd, 'README.md'), markdown) .then(() => this.spinner.succeed()) .catch((error) => { this.spinner.fail(); @@ -574,7 +557,7 @@ class Configurator { const copyFiles = template.map((file) => fs.promises.cp( path.join(this.configsPath, file), - path.join(this.root, file), + path.join(this.cwd, file), { recursive } ) ); diff --git a/src/Nextra.ts b/src/Nextra.ts deleted file mode 100644 index c0157b1..0000000 --- a/src/Nextra.ts +++ /dev/null @@ -1,510 +0,0 @@ -import path from 'path'; -import fs from 'fs'; -import ora from 'ora'; -import picocolors from 'picocolors'; -import { $ } from 'execa'; - -import prompts from 'prompts'; -import { markdownTable } from 'markdown-table'; - -import { oops } from './utils.js'; -import { ChoiceValuesType } from './questions.js'; - -import PackageManager, { PackageManagerKindEnum } from './PackageManager.js'; - -type NextraPropsType = { - projectDirectoryPath: string; - packageManagerChoice: PackageManagerKindEnum; -}; - -export interface NextJsConfigType { - appRouter: boolean; - eslint: boolean; - srcDir: boolean; - tailwind: boolean; - typescript: boolean; -} - -const { green } = picocolors; - -class Nextra { - private root: string; - private configsPath: string; - private markdownDirPath: string; - private readmeMarkdownArr: string[]; - private nextConfig = {} as NextJsConfigType; - private packageManager = {} as PackageManager; - private promptAnswers = {} as prompts.Answers; - private spinner; - - constructor({ - projectDirectoryPath, - packageManagerChoice: packageManagerKind, - }: NextraPropsType) { - this.configsPath = path.resolve(path.join('src', 'templates')); - this.markdownDirPath = path.resolve(path.join('src', 'markdown')); - this.root = path.resolve(projectDirectoryPath); - this.readmeMarkdownArr = []; - this.spinner = ora(); - this.packageManager = new PackageManager({ - packageManagerKind, - root: this.root, - }); - } - - public setPromptAnswers = (answers: prompts.Answers) => { - this.promptAnswers = answers; - }; - - public createNextApp = async () => { - const pm = this.packageManager.getKind(); - try { - console.log(`\n`); - await $({ - stdio: 'inherit', - })`npx create-next-app@latest ${this.root} --use-${pm}`; - } catch (error) { - oops(); - throw new Error(`\n${error}`); - } - - return this.getNextConfig(); - }; - - public getNextConfig = () => { - const artifactExists = (fileName: string) => { - try { - return fs.existsSync(path.join(this.root, fileName)); - } catch (e) { - console.log({ e }); - } - }; - - const typescript = artifactExists('tsconfig.json') || false; - this.nextConfig = { - appRouter: !artifactExists('src/pages') || false, - eslint: artifactExists('.eslintrc.json') || false, - tailwind: - artifactExists(`tailwind.config.${typescript ? 'ts' : 'js'}`) || false, - srcDir: artifactExists('src') || false, - typescript, - }; - - return this.nextConfig; - }; - - public configureCypress = async () => { - this.spinner.start('Configuring Cypress'); - - try { - await this.packageManager.addToDevDependencies(['cypress']); - - await this.copyTemplate('cypress', true); - //await this.packageManager.addToScripts({ e2e: 'cypress run' }); - await this.packageManager.addToPackage('scripts', { e2e: 'cypress run' }); - - await this.addMarkdownFragmentToReadmeArr('cypress'); - - this.spinner.succeed(); - } catch (error) { - this.spinner.fail('Error configuring Cypress'); - oops(); - throw new Error(`\n${error}`); - } - }; - - public configureDocker = async () => { - this.spinner.start('Configuring Docker'); - - try { - await this.copyTemplate(['docker-compose.yml', 'Dockerfile', 'Makefile']); - await this.addMarkdownFragmentToReadmeArr('docker'); - - this.spinner.succeed(); - } catch (error) { - this.spinner.fail('Error configuring Docker'); - oops(); - throw new Error(`\n${error}`); - } - }; - - public configureEnvVars = async (dotEnvFileArr: string[]) => { - this.spinner.start('Adding Environment variables'); - - try { - // const copyEnvFiles = dotEnvFileArr.map((file) => - // fs.promises.cp( - // path.join(this.configsPath, '.env.example'), - // path.join(this.root, file) - // ) - // ); - - const copyEnvFiles = dotEnvFileArr.map( - (file) => $`touch ${path.join(this.root, file)}` - ); - - await Promise.all(copyEnvFiles); - - if (fs.existsSync(path.join(this.root, '.gitignore'))) { - await fs.promises.appendFile( - path.join(this.root, '.gitignore'), - `# env files - .env - .env.local` - ); - } - - this.spinner.succeed(); - } catch (error) { - this.spinner.fail('Error adding Environment variables'); - oops(); - throw new Error(`\n${error}`); - } - }; - - public configureGitHusky = async () => { - const $execa = $({ cwd: this.root }); - const pm = this.packageManager.getKind(); - - this.spinner.start('Configuring Git and Husky'); - - try { - await $execa`git init`; - - if (pm === PackageManagerKindEnum.YARN) { - await $execa`yarn dlx husky-init --yarn2 && yarn`; - } - - if (pm === PackageManagerKindEnum.PNPM) { - await $execa`pnpm dlx husky-init && pnpm install`; - } - - if (pm === PackageManagerKindEnum.NPM) { - await $execa`npx husky-init && npm install`; - } - - if (pm === PackageManagerKindEnum.BUN) { - await $execa`bunx husky-init && bun install`; - } - - await this.addMarkdownFragmentToReadmeArr('git'); - await this.addMarkdownFragmentToReadmeArr('husky'); - - // rewrite husky pre-commit commands based on choices - const huskyPreCommitStr = - `#!/usr/bin/env sh\n. "$(dirname -- "$0")/_/husky.sh"` + - (this.nextConfig.eslint - ? `\n\nnpm run lint:check\n\nnpm run lint:fix` - : '') + - (this.promptAnswers.configurePrettier - ? `\n\nnpm run format:write` - : ''); - - await fs.promises.writeFile( - path.join(this.root, '.husky', 'pre-commit'), - huskyPreCommitStr, - 'utf8' - ); - - this.spinner.succeed(); - } catch (error) { - this.spinner.fail('Error configuring Git and Husky'); - oops(); - throw new Error(`${error}`); - } - }; - - public configureJestRTL = async () => { - this.spinner.start('Configuring Jest and React Testing Library'); - - try { - await this.packageManager.addToDevDependencies([ - 'jest', - 'jest-environment-jsdom', - '@testing-library/jest-dom', - '@testing-library/user-event', - '@testing-library/react', - 'cypress', - 'eslint-plugin-testing-library', - ]); - - await this.copyTemplate('jest.config.js'); - - if (this.nextConfig.typescript) { - fs.promises.rename( - path.join(this.root, 'jest.config.js'), - path.join(this.root, 'jest.config.ts') - ); - } - - await this.packageManager.addToPackage('scripts', { - test: 'jest --watch', - 'test:ci': 'jest --ci', - }); - - await this.addMarkdownFragmentToReadmeArr('jestRTL'); - - this.spinner.succeed(); - } catch (error) { - this.spinner.fail('Error configuring Jest and React Testing Library'); - oops(); - throw new Error(`\n${error}`); - } - }; - - public configureLintStaged = async () => { - this.spinner.start('Configuring Lint-staged'); - - try { - await this.packageManager.addToDevDependencies(['lint-staged']); - - await this.copyTemplate('.lintstagedrc'); - - await this.packageManager.addToPackage('scripts', { - storybook: 'storybook dev -p 6006', - 'build-storybook': 'storybook build', - }); - - await this.addMarkdownFragmentToReadmeArr('lint-staged'); - - this.spinner.succeed(); - } catch (error) { - this.spinner.fail('Error configuring Lint-staged'); - oops(); - throw new Error(`\n${error}`); - } - }; - - public configureEslint = async () => {}; - - public configureNext = async () => { - this.spinner.start('Configuring next standalone production builds'); - - try { - // add standalone next config and build/start scripts - // https://nextjs.org/docs/pages/api-reference/next-config-js/output - - const pm = this.packageManager.getKind(); - - await this.packageManager.addToPackage('scripts', { - 'build:standalone': 'BUILD_STANDALONE=true next build', - 'start:standalone': 'node ./.next/standalone/server.js', - 'build-start': `next build && next start`, - 'build-start:standalone': `${pm} run build:standalone && ${pm} run start:standalone`, - }); - - // https://nextjs.org/docs/app/building-your-application/optimizing/images - if (this.promptAnswers.configureNextImageOptimisation) { - await this.packageManager.addToDependencies(['sharp']); - } - - await this.copyTemplate('next.config.js'); - - await this.addMarkdownFragmentToReadmeArr('next'); - - this.spinner.succeed(); - } catch (error) { - this.spinner.fail('Error configuring next standalone production builds'); - oops(); - throw new Error(`\n${error}`); - } - }; - - public configureStorybook = async () => { - this.spinner.start('Configuring Storybook'); - - try { - await this.packageManager.addToDevDependencies([ - '@storybook/addon-essentials', - '@storybook/addon-interactions', - '@storybook/addon-links', - '@storybook/addon-onboarding', - '@storybook/blocks', - '@storybook/nextjs', - '@storybook/react', - '@storybook/testing-library', - 'eslint-plugin-storybook', - 'storybook', - ]); - - await this.copyTemplate('.storybook', true); - - await this.packageManager.addToPackage('scripts', { - storybook: 'storybook dev -p 6006', - 'build-storybook': 'storybook build', - }); - - await this.addMarkdownFragmentToReadmeArr('storybook'); - - this.spinner.succeed(); - } catch (error) { - this.spinner.fail('Error configuring Storybook'); - oops(); - throw new Error(`\n${error}`); - } - }; - - public configurePrettier = async () => { - this.spinner.start('Configuring Eslint and Prettier'); - - try { - const dependencies = [ - 'prettier', - 'eslint-config-prettier', - '@typescript-eslint/eslint-plugin', - ]; - - if (!this.nextConfig.eslint) dependencies.push('eslint'); - - await this.packageManager.addToDevDependencies(dependencies); - - const copyConfigs = [ - '.eslintrc.json', - '.prettierrc.json', - '.prettierignore', - ].map((config) => this.copyTemplate(config)); - - await Promise.all(copyConfigs); - - await this.packageManager.addToPackage('scripts', { - 'lint:check': 'eslint .', - 'lint:fix': 'eslint --fix .', - 'format:check': 'prettier --check .', - 'format:write': 'prettier --write .', - }); - - await this.addMarkdownFragmentToReadmeArr('prettier'); - - this.spinner.succeed(); - } catch (error) { - this.spinner.fail('Error configuring Eslint and Prettier'); - oops(); - throw new Error(`\n${error}`); - } - }; - - public configureSelectedDependencies = async ( - selectedDependencies: [] | ChoiceValuesType[] - ) => { - if (!selectedDependencies || selectedDependencies.length === 0) return; - - this.spinner.start('Configuring selected packages'); - - try { - const dependencies = selectedDependencies - .filter(({ saveDev }) => !saveDev) - .map(({ module }) => module); - - const devDependencies = selectedDependencies - .filter(({ saveDev }) => saveDev) - .map(({ module }) => module); - - if (dependencies.length > 0) { - await this.packageManager.addToDependencies(dependencies); - } - - if (devDependencies.length > 0) { - await this.packageManager.addToDevDependencies(devDependencies); - } - - await this.addMarkdownFragmentToReadmeArr('selected-dependencies'); - - // list the selected dependency packages in the readme as a table - const tableHeader = ['Package name', 'Package description', 'Type']; - const tableData = selectedDependencies.map( - ({ module, github, description, saveDev }) => [ - `[${module}](${github})`, - description, - saveDev ? '`devDependency`' : '`dependency`', - ] - ); - - const table = markdownTable([tableHeader, ...tableData]); - this.readmeMarkdownArr.push(table); - - this.spinner.succeed(); - } catch (error) { - this.spinner.fail('Error configuring selected packages'); - oops(); - throw new Error(`\n${error}`); - } - }; - - public cleanUp = async () => { - // clean up ie format files + write Readme - maybe other stuff TBC - this.spinner.start('Cleaning up'); - try { - if (this.promptAnswers.configurePrettier) { - await $({ - cwd: this.root, - })`${this.packageManager.getKind()} run format:write`; - } - - await this.generateReadme(); - - this.spinner.succeed(); - } catch (error) { - this.spinner.fail(); - oops(); - throw new Error(`\n${error}`); - } - - return this.configurationCompleteMessage(); - }; - - private configurationCompleteMessage = () => { - return `${green( - 'Success!' - )} The following configurations were made: TBC... `; - }; - - private addMarkdownFragmentToReadmeArr = async (markdownFileName: string) => { - const filepath = path.join(this.markdownDirPath, `${markdownFileName}.md`); - - if (fs.existsSync(filepath)) { - try { - const markdown = await fs.promises.readFile(filepath, 'utf8'); - this.readmeMarkdownArr.push(markdown); - } catch (error) { - oops(); - throw new Error(`${error}`); - } - } - }; - - private generateReadme = async () => { - try { - const markdown = this.readmeMarkdownArr.join('\n\n'); - await fs.promises.writeFile(path.join(this.root, 'README.md'), markdown); - } catch (error) { - oops(); - throw new Error(`${error}`); - } - }; - - private copyTemplate = async ( - template: string | string[], - recursive: boolean = false - ) => { - if (typeof template === 'string') { - return await fs.promises.cp( - path.join(this.configsPath, template), - path.join(this.root, template), - { recursive } - ); - } - - if (Array.isArray(template) && template.length > 0) { - const copyFiles = template.map((file) => - fs.promises.cp( - path.join(this.configsPath, file), - path.join(this.root, file) - ) - ); - - return await Promise.all(copyFiles); - } - }; -} - -export default Nextra; diff --git a/src/PackageManager.ts b/src/PackageManager.ts index e299708..9c930ff 100644 --- a/src/PackageManager.ts +++ b/src/PackageManager.ts @@ -17,7 +17,7 @@ export enum PackageManagerAddEnum { export type PackageManagerPropsType = { packageManagerKind: PackageManagerKindEnum; - root: string; + cwd: string; }; export type AddToPackageType = Record< @@ -30,9 +30,9 @@ class PackageManager { private cwd: string; private packageFilePath: string; - constructor({ packageManagerKind, root }: PackageManagerPropsType) { + constructor({ packageManagerKind, cwd }: PackageManagerPropsType) { this.packageManagerKind = packageManagerKind; - this.cwd = root; + this.cwd = cwd; this.packageFilePath = path.join(this.cwd, 'package.json'); } @@ -58,7 +58,7 @@ class PackageManager { await execa(this.getKind(), [add, ...deps], { cwd: this.cwd, - // stdio: 'inherit', + stdio: 'inherit', }); } catch (error) { throw new Error(`${error}`); diff --git a/src/index.ts b/src/index.ts index c295557..2f22f5d 100644 --- a/src/index.ts +++ b/src/index.ts @@ -43,22 +43,23 @@ program await configurator.createNextApp(); const answers = await prompt([ - questions.configureNextImageOptimisation, - questions.configurePrettier, - questions.configureJestRTL, - questions.configureLintStaged, - questions.configureCypress, - questions.configureStorybook, - questions.configureHusky, - questions.configureDocker, - questions.configureDotEnvFiles, - questions.configureSelectedDependencies, + questions.nextImageOptimisation, + questions.prettier, + questions.jest, + questions.reactTestingLibrary, + questions.lintStaged, + questions.cypress, + questions.storybook, + questions.husky, + questions.docker, + questions.dotEnvFiles, + questions.optionalDependencies, ]); const hasAnswers = Object.values(answers).includes(true) || - answers.configureSelectedDependencies.length > 0 || - answers.configureDotEnvFiles.length > 0; + answers.optionalDependencies.length > 0 || + answers.dotEnvFiles.length > 0; if (!hasAnswers) { // nothing to configure! @@ -68,15 +69,7 @@ program ); } - configurator.setPromptAnswers(answers); - - console.log(` - -Using ${packageManagerChoice}. - -Configuring project with following configurations: - -`); + configurator.setOptions(answers); await configurator.run(); }); diff --git a/src/markdown/jest.md b/src/markdown/jest.md new file mode 100644 index 0000000..ce6dfb0 --- /dev/null +++ b/src/markdown/jest.md @@ -0,0 +1,3 @@ +## Jest & React Testing Library + +Info about Jest & React Testing Library diff --git a/src/markdown/reactTestingLibrary.md b/src/markdown/reactTestingLibrary.md new file mode 100644 index 0000000..ce6dfb0 --- /dev/null +++ b/src/markdown/reactTestingLibrary.md @@ -0,0 +1,3 @@ +## Jest & React Testing Library + +Info about Jest & React Testing Library diff --git a/src/questions.ts b/src/questions.ts index 709adaa..2956e85 100644 --- a/src/questions.ts +++ b/src/questions.ts @@ -32,10 +32,10 @@ export const packageManagerPrompt: PromptObject = { initial: 0, }; -export const configureDotEnvFiles: PromptObject = { +export const dotEnvFiles: PromptObject = { onState: onPromptState, type: 'multiselect', - name: 'configureDotEnvFiles', + name: 'dotEnvFiles', message: 'Select .env* files to install', choices: [ { title: '.env.example', value: '.env.example' }, @@ -47,106 +47,92 @@ export const configureDotEnvFiles: PromptObject = { initial: 0, }; -// export const configureNextStandalone: PromptObject = { -// onState: onPromptState, -// type: 'toggle', -// name: 'configureNextStandalone', -// message: `Would you like to configure ${blue( -// 'Next' -// )} for standalone production builds?`, -// initial: 'Yes', -// active: 'Yes', -// inactive: `No`, -// }; - -export const configurePrettier: PromptObject = { +export const prettier: PromptObject = { onState: onPromptState, type: 'toggle', - name: 'configurePrettier', - message: `Would you like to install and configure ${blue( - 'Prettier' - )}? (recommended)`, + name: 'prettier', + message: `Would you like to install and configure ${blue('Prettier')}?`, initial: 'Yes', active: 'Yes', inactive: `No`, }; -export const configureStorybook: PromptObject = { +export const storybook: PromptObject = { onState: onPromptState, type: 'toggle', - name: 'configureStorybook', - message: `Would you like to install and configure ${blue( - 'Storybook' - )}? (recommended)`, + name: 'storybook', + message: `Would you like to install and configure ${blue('Storybook')}?`, initial: 'Yes', active: 'Yes', inactive: `No`, }; -export const configureDocker: PromptObject = { +export const docker: PromptObject = { onState: onPromptState, type: 'toggle', - name: 'configureDocker', - message: `Would you like to add ${blue( - 'Docker' - )} configuration? (recommended)`, + name: 'docker', + message: `Would you like to add ${blue('Docker')} configuration?`, initial: 'Yes', active: 'Yes', inactive: `No`, }; -export const configureJestRTL: PromptObject = { +export const jest: PromptObject = { onState: onPromptState, type: 'toggle', - name: 'configureJestRTL', - message: `Would you like to install and configure ${blue( - 'Jest' - )} and ${`React Testing Library`}? (recommended)`, + name: 'jest', + message: `Would you like to install and configure ${blue('Jest')}?`, + initial: 'Yes', + active: 'Yes', + inactive: `No`, +}; + +export const reactTestingLibrary: PromptObject = { + onState: onPromptState, + type: (prev) => (prev === true ? 'toggle' : null), + name: 'reactTestingLibrary', + message: `Would you like to install and configure ${`React Testing Library`}?`, initial: 'Yes', active: 'Yes', inactive: `No`, }; -export const configureCypress: PromptObject = { +export const cypress: PromptObject = { onState: onPromptState, type: 'toggle', - name: 'configureCypress', - message: `Would you like to install and configure ${blue( - 'Cypress' - )}? (recommended)`, + name: 'cypress', + message: `Would you like to install and configure ${blue('Cypress')}?`, initial: 'Yes', active: 'Yes', inactive: `No`, }; -export const configureHusky: PromptObject = { +export const husky: PromptObject = { onState: onPromptState, type: 'toggle', - name: 'configureHusky', + name: 'husky', message: `Would you like to install and configure ${blue('Git')} and ${blue( 'Husky' - )}? (recommended)`, + )}?`, initial: 'Yes', active: 'Yes', inactive: `No`, }; -export const configureLintStaged: PromptObject = { +export const lintStaged: PromptObject = { onState: onPromptState, type: 'toggle', - name: 'configureLintStaged', - message: `Would you like to install and configure ${blue( - 'Lint Staged' - )}? (recommended)`, + name: 'lintStaged', + message: `Would you like to install and configure ${blue('Lint Staged')}?`, initial: 'Yes', active: 'Yes', inactive: `No`, }; -export const configureNextImageOptimisation: PromptObject = { +export const nextImageOptimisation: PromptObject = { onState: onPromptState, type: 'toggle', - name: 'configureNextImageOptimisation', + name: 'nextImageOptimisation', message: `Will you be using ${blue('Next')}'s image optimisation? `, initial: 'No', active: 'Yes', @@ -430,25 +416,26 @@ export const choices: ChoiceType[] = [ }, ]; -export const configureSelectedDependencies: PromptObject = { +export const optionalDependencies: PromptObject = { onState: onPromptState, type: 'multiselect', - name: 'configureSelectedDependencies', + name: 'optionalDependencies', message: 'Install some popular packages?', choices: choices, hint: '- Space to select. Return to submit', }; export default { + cypress, + docker, + dotEnvFiles, + husky, + jest, + lintStaged, + nextImageOptimisation, + prettier, + reactTestingLibrary, + optionalDependencies, + storybook, packageManagerPrompt, - configureCypress, - configureDocker, - configureHusky, - configureNextImageOptimisation, - configureJestRTL, - configureLintStaged, - configurePrettier, - configureSelectedDependencies, - configureStorybook, - configureDotEnvFiles, }; From 143c3f87e90fee51c2cf0856572e427f34f9bf82 Mon Sep 17 00:00:00 2001 From: Dominic Geargeoura Date: Wed, 4 Oct 2023 14:33:06 +0100 Subject: [PATCH 009/105] questions file now called prompts --- src/Configurator.ts | 8 +++--- src/index.ts | 38 +++++++++------------------ src/{questions.ts => prompts.ts} | 45 ++++++++++++++++---------------- 3 files changed, 38 insertions(+), 53 deletions(-) rename src/{questions.ts => prompts.ts} (94%) diff --git a/src/Configurator.ts b/src/Configurator.ts index 64f5e2c..8d74a83 100644 --- a/src/Configurator.ts +++ b/src/Configurator.ts @@ -9,8 +9,7 @@ import prompts from 'prompts'; import { oops } from './utils.js'; import PackageManager, { PackageManagerKindEnum } from './PackageManager.js'; -import { lintStaged } from './questions.js'; -import { ChoiceValuesType } from './questions.js'; +import { ChoiceValuesType } from './prompts.js'; type ConfiguratorPropsType = { projectDirectoryPath: string; @@ -98,7 +97,7 @@ class Configurator { ); await this.prepare() - .then(() => this.configurePackageFile()) + .then(() => this.installDependencies()) .then(() => this.buildDependencyConfigs()) .then(() => this.configurePackageFile()) .then(() => this.generateReadme()) @@ -156,6 +155,7 @@ class Configurator { eslint, husky, jest, + lintStaged, nextImageOptimisation, optionalDependencies, prettier, @@ -275,7 +275,7 @@ class Configurator { public installConfigureGitHusky = async () => { const $execa = $({ cwd: this.cwd }); const pm = this.packageManager.getKind(); - const { husky, eslint, prettier, typescript } = this.options; + const { husky, eslint, lintStaged, prettier, typescript } = this.options; this.spinner.start('Configuring Git and Husky'); diff --git a/src/index.ts b/src/index.ts index 2f22f5d..9290f23 100644 --- a/src/index.ts +++ b/src/index.ts @@ -4,12 +4,12 @@ import fs from 'fs'; import { program } from 'commander'; import figlet from 'figlet'; -import prompt from 'prompts'; +import prompts from 'prompts'; import { goodbye } from './utils.js'; import Configurator from './Configurator.js'; -import questions from './questions.js'; +import { packageManagerPrompt, configurationPrompts } from './prompts.js'; console.log('\n', figlet.textSync('Nextra'), '\n\n'); @@ -30,9 +30,7 @@ program projectDirectoryPath = path.join('tmp', projectName); } - const { packageManagerChoice } = await prompt( - questions.packageManagerPrompt - ); + const { packageManagerChoice } = await prompts(packageManagerPrompt); const configurator = new Configurator({ projectDirectoryPath, @@ -42,26 +40,14 @@ program // const nextConfig = await configurator.createNextApp(); - const answers = await prompt([ - questions.nextImageOptimisation, - questions.prettier, - questions.jest, - questions.reactTestingLibrary, - questions.lintStaged, - questions.cypress, - questions.storybook, - questions.husky, - questions.docker, - questions.dotEnvFiles, - questions.optionalDependencies, - ]); - - const hasAnswers = - Object.values(answers).includes(true) || - answers.optionalDependencies.length > 0 || - answers.dotEnvFiles.length > 0; - - if (!hasAnswers) { + const opts = await prompts(configurationPrompts); + + const hasOptions = + Object.values(opts).includes(true) || + opts.optionalDependencies.length > 0 || + opts.dotEnvFiles.length > 0; + + if (!hasOptions) { // nothing to configure! goodbye(); return console.log( @@ -69,7 +55,7 @@ program ); } - configurator.setOptions(answers); + configurator.setOptions(opts); await configurator.run(); }); diff --git a/src/questions.ts b/src/prompts.ts similarity index 94% rename from src/questions.ts rename to src/prompts.ts index 2956e85..a478e03 100644 --- a/src/questions.ts +++ b/src/prompts.ts @@ -5,7 +5,7 @@ import { PackageManagerKindEnum } from './PackageManager.js'; const { blue } = picocolors; // eslint-disable-next-line @typescript-eslint/no-explicit-any -const onPromptState = (state: any) => { +export const onPromptState = (state: any) => { if (state.aborted) { // If we don't re-enable the terminal cursor before exiting // the program, the cursor will remain hidden @@ -32,7 +32,7 @@ export const packageManagerPrompt: PromptObject = { initial: 0, }; -export const dotEnvFiles: PromptObject = { +const dotEnvFiles: PromptObject = { onState: onPromptState, type: 'multiselect', name: 'dotEnvFiles', @@ -47,7 +47,7 @@ export const dotEnvFiles: PromptObject = { initial: 0, }; -export const prettier: PromptObject = { +const prettier: PromptObject = { onState: onPromptState, type: 'toggle', name: 'prettier', @@ -57,7 +57,7 @@ export const prettier: PromptObject = { inactive: `No`, }; -export const storybook: PromptObject = { +const storybook: PromptObject = { onState: onPromptState, type: 'toggle', name: 'storybook', @@ -67,7 +67,7 @@ export const storybook: PromptObject = { inactive: `No`, }; -export const docker: PromptObject = { +const docker: PromptObject = { onState: onPromptState, type: 'toggle', name: 'docker', @@ -77,7 +77,7 @@ export const docker: PromptObject = { inactive: `No`, }; -export const jest: PromptObject = { +const jest: PromptObject = { onState: onPromptState, type: 'toggle', name: 'jest', @@ -87,7 +87,7 @@ export const jest: PromptObject = { inactive: `No`, }; -export const reactTestingLibrary: PromptObject = { +const reactTestingLibrary: PromptObject = { onState: onPromptState, type: (prev) => (prev === true ? 'toggle' : null), name: 'reactTestingLibrary', @@ -97,7 +97,7 @@ export const reactTestingLibrary: PromptObject = { inactive: `No`, }; -export const cypress: PromptObject = { +const cypress: PromptObject = { onState: onPromptState, type: 'toggle', name: 'cypress', @@ -107,7 +107,7 @@ export const cypress: PromptObject = { inactive: `No`, }; -export const husky: PromptObject = { +const husky: PromptObject = { onState: onPromptState, type: 'toggle', name: 'husky', @@ -119,7 +119,7 @@ export const husky: PromptObject = { inactive: `No`, }; -export const lintStaged: PromptObject = { +const lintStaged: PromptObject = { onState: onPromptState, type: 'toggle', name: 'lintStaged', @@ -129,7 +129,7 @@ export const lintStaged: PromptObject = { inactive: `No`, }; -export const nextImageOptimisation: PromptObject = { +const nextImageOptimisation: PromptObject = { onState: onPromptState, type: 'toggle', name: 'nextImageOptimisation', @@ -151,7 +151,7 @@ export interface ChoiceType { value: ChoiceValuesType; } -export const choices: ChoiceType[] = [ +const choices: ChoiceType[] = [ { title: 'classnames', value: { @@ -416,7 +416,7 @@ export const choices: ChoiceType[] = [ }, ]; -export const optionalDependencies: PromptObject = { +const optionalDependencies: PromptObject = { onState: onPromptState, type: 'multiselect', name: 'optionalDependencies', @@ -425,17 +425,16 @@ export const optionalDependencies: PromptObject = { hint: '- Space to select. Return to submit', }; -export default { - cypress, - docker, - dotEnvFiles, - husky, - jest, - lintStaged, +export const configurationPrompts = [ nextImageOptimisation, prettier, + jest, reactTestingLibrary, - optionalDependencies, + cypress, storybook, - packageManagerPrompt, -}; + husky, + lintStaged, + docker, + dotEnvFiles, + optionalDependencies, +]; From 0c823ecd35f34a6ce6133995aa3d7f61f5f514ba Mon Sep 17 00:00:00 2001 From: Dominic Geargeoura Date: Wed, 4 Oct 2023 14:48:00 +0100 Subject: [PATCH 010/105] clean up --- src/Configurator.ts | 31 ++++++++++++++----------------- 1 file changed, 14 insertions(+), 17 deletions(-) diff --git a/src/Configurator.ts b/src/Configurator.ts index 8d74a83..6cbbd84 100644 --- a/src/Configurator.ts +++ b/src/Configurator.ts @@ -12,17 +12,17 @@ import PackageManager, { PackageManagerKindEnum } from './PackageManager.js'; import { ChoiceValuesType } from './prompts.js'; type ConfiguratorPropsType = { - projectDirectoryPath: string; packageManagerChoice: PackageManagerKindEnum; + projectDirectoryPath: string; }; export interface ConfigType { - markdown: string[]; - configFiles: string[]; configDirectories: string[]; - packageScripts: Record; + configFiles: string[]; + markdown: string[]; packageDependencies: string[]; packageDevDependencies: string[]; + packageScripts: Record; } export interface OptionsType { @@ -109,14 +109,11 @@ class Configurator { ...this.options, ...answers, }; - - console.log({ options: this.options }); return this.options; }; public createNextApp = async () => { const pm = this.packageManager.getKind(); - console.log(`\n`); await $({ stdio: 'inherit', @@ -135,14 +132,14 @@ class Configurator { public getNextConfig = () => { const exists = (fileName: string) => - fs.existsSync(path.join(this.cwd, fileName)); + fs.existsSync(path.join(this.cwd, fileName)) || false; - const typescript = exists('tsconfig.json') || false; + const typescript = exists('tsconfig.json'); return { - appRouter: !exists('src/pages') || false, - eslint: exists('.eslintrc.json') || false, - tailwind: exists(`tailwind.config.${typescript ? 'ts' : 'js'}`) || false, - srcDir: exists('src') || false, + appRouter: !exists('src/pages'), + eslint: exists('.eslintrc.json'), + tailwind: exists(`tailwind.config.${typescript ? 'ts' : 'js'}`), + srcDir: exists('src'), typescript, }; }; @@ -241,14 +238,14 @@ class Configurator { if (optionalDependencies?.length > 0) { this.config.packageDependencies.push( ...optionalDependencies - .filter(({ saveDev }: { saveDev: boolean }) => !saveDev) - .map(({ module }: { module: string }) => module) + .filter(({ saveDev }) => !saveDev) + .map(({ module }) => module) ); this.config.packageDevDependencies.push( ...optionalDependencies - .filter(({ saveDev }: { saveDev: boolean }) => saveDev) - .map(({ module }: { module: string }) => module) + .filter(({ saveDev }) => saveDev) + .map(({ module }) => module) ); } From 069c4e0ea1c0cb6a024fc9100cf109d78668d9ed Mon Sep 17 00:00:00 2001 From: Dominic Geargeoura Date: Wed, 4 Oct 2023 15:05:02 +0100 Subject: [PATCH 011/105] clean up --- src/Configurator.ts | 26 +++++++++++++++----------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/src/Configurator.ts b/src/Configurator.ts index 6cbbd84..58e7ab2 100644 --- a/src/Configurator.ts +++ b/src/Configurator.ts @@ -297,32 +297,36 @@ class Configurator { huskyInit = $execa`bunx husky-init && bun install`; } - await huskyInit; + await huskyInit.catch((error) => { + oops(); + this.spinner.fail(); + throw new Error(`${error}`); + }); - // rewrite husky pre-commit commands based on choices - let huskyPreCommitFile = `#!/usr/bin/env sh\n. "$(dirname -- "$0")/_/husky.sh"`; + let huskyPreCommit = + `#!/usr/bin/env sh` + `\n` + `. "$(dirname -- "$0")/_/husky.sh"`; if (husky && lintStaged) { - huskyPreCommitFile += `$\n\n{pm} run lint-staged`; + huskyPreCommit += `\n\n` + `${pm} run lint-staged`; } else { - if (eslint) { - huskyPreCommitFile += `\n\n${pm} run format:write`; + if (prettier) { + huskyPreCommit += `\n\n` + `${pm} run format:write`; } - if (prettier) { - huskyPreCommitFile += - `\n\${pm} run lint:check` + `\n\n${pm} run lint:fix`; + if (eslint) { + huskyPreCommit += + `\n\n` + `${pm} run lint:check` + `\n\n` + `${pm} run lint:fix`; } if (typescript) { - huskyPreCommitFile += `\n\n${pm} run build --no-emit`; + huskyPreCommit += `\n\n` + `${pm} run build --no-emit`; } } await fs.promises .writeFile( path.join(this.cwd, '.husky', 'pre-commit'), - huskyPreCommitFile, + huskyPreCommit, 'utf8' ) .catch((error) => { From 63f5b5bc1543e3b693d47fa5ece92a795cc16fd5 Mon Sep 17 00:00:00 2001 From: Dominic Geargeoura Date: Wed, 4 Oct 2023 15:06:51 +0100 Subject: [PATCH 012/105] clean up --- src/Configurator.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Configurator.ts b/src/Configurator.ts index 58e7ab2..f03c056 100644 --- a/src/Configurator.ts +++ b/src/Configurator.ts @@ -382,13 +382,13 @@ class Configurator { // lint-staged if (lintStaged && (eslint || (eslint && typescript) || prettier || jest)) { let lintStaged: Record = { + '**/*.{md, yml, yaml, json}': ['format:write'], + '**/*.css': ['format:write'], '**/*.{js,jsx}': [ ...(prettier ? ['format:write'] : []), ...(eslint ? ['lint:check', 'lint:fix'] : []), ...(jest ? ['test'] : []), ], - '**/*.{md, yml, yaml, json}': ['format:write'], - '**/*.css': ['format:write'], }; if (eslint && typescript) { From c662e7dc50f26c33b25351c861425d358dbc6b62 Mon Sep 17 00:00:00 2001 From: Dominic Geargeoura Date: Wed, 4 Oct 2023 15:35:47 +0100 Subject: [PATCH 013/105] lint staged config refactor --- src/Configurator.ts | 44 ++++++++++++++++++++++---------------------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/src/Configurator.ts b/src/Configurator.ts index f03c056..670016c 100644 --- a/src/Configurator.ts +++ b/src/Configurator.ts @@ -346,7 +346,9 @@ class Configurator { .sort() .join(`\n`); - console.log(`\n\n` + `Installing Dependencies` + dependencies + `\n\n`); + console.log( + `\n\n` + `Installing Dependencies` + `\n\n` + dependencies + `\n\n` + ); if (packageDependencies.length > 0) { await this.packageManager.addToDependencies(packageDependencies); @@ -358,7 +360,7 @@ class Configurator { .join(`\n`); console.log( - `\n\n` + `Installing devDependencies` + devDependencies + `\n\n` + `\n\n` + `Installing devDependencies` + `\n\n` + devDependencies + `\n\n` ); if (packageDevDependencies.length > 0) { @@ -381,30 +383,28 @@ class Configurator { // lint-staged if (lintStaged && (eslint || (eslint && typescript) || prettier || jest)) { - let lintStaged: Record = { - '**/*.{md, yml, yaml, json}': ['format:write'], - '**/*.css': ['format:write'], - '**/*.{js,jsx}': [ - ...(prettier ? ['format:write'] : []), - ...(eslint ? ['lint:check', 'lint:fix'] : []), - ...(jest ? ['test'] : []), + const tsLintStaged = { + '**/*.{ts,tsx}': [ + ...(prettier ? ['npx prettier --write .'] : []), + 'npx eslint .', + 'npx eslint --fix .', + ...(jest ? ['npx jest --ci'] : []), + 'tsc --noEmit', ], }; - if (eslint && typescript) { - lintStaged = { - ...lintStaged, - '**/*.{ts,tsx}': [ - ...(prettier ? ['format:write'] : []), - 'lint:check', - 'lint:fix', - ...(jest ? ['test'] : []), - 'build --noEmit', - ], - }; - } + const lintStagedScripts = { + '**/*.{js,jsx}': [ + ...(prettier ? ['npx prettier --write .'] : []), + ...(eslint ? ['npx eslint .', 'npx eslint --fix .'] : []), + ...(jest ? ['npx jest --ci'] : []), + ], + ...(eslint && typescript ? tsLintStaged : {}), + '**/*.{md, yml, yaml, json}': ['npx prettier --write .'], + '**/*.css': ['npx prettier --write .'], // TODO: add styledlint + }; - await this.packageManager.addToPackage('lint-staged', lintStaged); + await this.packageManager.addToPackage('lint-staged', lintStagedScripts); } }; From a400f876c78158c5afd9fcf62bfe5ace9636e4cc Mon Sep 17 00:00:00 2001 From: Dominic Geargeoura Date: Wed, 4 Oct 2023 15:37:31 +0100 Subject: [PATCH 014/105] lint staged config refactor --- src/Configurator.ts | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/Configurator.ts b/src/Configurator.ts index 670016c..466d8a6 100644 --- a/src/Configurator.ts +++ b/src/Configurator.ts @@ -383,28 +383,28 @@ class Configurator { // lint-staged if (lintStaged && (eslint || (eslint && typescript) || prettier || jest)) { - const tsLintStaged = { + const tsLintStagedCmd = { '**/*.{ts,tsx}': [ ...(prettier ? ['npx prettier --write .'] : []), - 'npx eslint .', - 'npx eslint --fix .', + ...(eslint ? ['npx eslint .', 'npx eslint --fix .'] : []), + ...(jest ? ['npx jest --ci'] : []), 'tsc --noEmit', ], }; - const lintStagedScripts = { + const lintStagedCmds = { '**/*.{js,jsx}': [ ...(prettier ? ['npx prettier --write .'] : []), ...(eslint ? ['npx eslint .', 'npx eslint --fix .'] : []), ...(jest ? ['npx jest --ci'] : []), ], - ...(eslint && typescript ? tsLintStaged : {}), + ...(typescript ? tsLintStagedCmd : {}), '**/*.{md, yml, yaml, json}': ['npx prettier --write .'], '**/*.css': ['npx prettier --write .'], // TODO: add styledlint }; - await this.packageManager.addToPackage('lint-staged', lintStagedScripts); + await this.packageManager.addToPackage('lint-staged', lintStagedCmds); } }; From 9ed78d07f168f5734982598489137ae833b636c8 Mon Sep 17 00:00:00 2001 From: Dominic Geargeoura Date: Wed, 4 Oct 2023 15:41:40 +0100 Subject: [PATCH 015/105] comment --- src/Configurator.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/Configurator.ts b/src/Configurator.ts index 466d8a6..dcd67e7 100644 --- a/src/Configurator.ts +++ b/src/Configurator.ts @@ -414,6 +414,7 @@ class Configurator { if (!eslint) return; + // TODO: create a configuration for the new eslint config file type const eslintrc = { cwd: true, plugins: [ From a54533acb58cdfc13747a11d966082d79c2d5e7c Mon Sep 17 00:00:00 2001 From: Dominic Geargeoura Date: Wed, 4 Oct 2023 16:23:26 +0100 Subject: [PATCH 016/105] message --- src/Configurator.ts | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/src/Configurator.ts b/src/Configurator.ts index dcd67e7..70e94c6 100644 --- a/src/Configurator.ts +++ b/src/Configurator.ts @@ -90,10 +90,13 @@ class Configurator { public run = async () => { console.log( - `Using ${bold(this.packageManager.getKind())}` + - `\n\n` + - `The configurator will now setup your next project based on your selections.` + - `\n\n` + bold( + `Using ` + + bold(this.packageManager.getKind()) + + `\n\n` + + `The configurator will now setup your next project based on your selections.` + + `\n\n` + ) ); await this.prepare() @@ -102,6 +105,12 @@ class Configurator { .then(() => this.configurePackageFile()) .then(() => this.generateReadme()) .then(() => this.cleanUp()); + + console.log( + `\n` + + green('Success! ') + + `The following configurations were made: ` + ); }; public setOptions = (answers: prompts.Answers) => { @@ -387,7 +396,6 @@ class Configurator { '**/*.{ts,tsx}': [ ...(prettier ? ['npx prettier --write .'] : []), ...(eslint ? ['npx eslint .', 'npx eslint --fix .'] : []), - ...(jest ? ['npx jest --ci'] : []), 'tsc --noEmit', ], @@ -513,14 +521,6 @@ class Configurator { } this.spinner.succeed(); - - return this.configurationCompleteMessage(); - }; - - private configurationCompleteMessage = () => { - return `${green( - 'Success!' - )} The following configurations were made: TBC... `; }; private readFromFiles = async (filenames: string[]) => { From df70bb13022ade2c6555fd7ffbb6d072c6441779 Mon Sep 17 00:00:00 2001 From: Dominic Geargeoura Date: Wed, 4 Oct 2023 16:27:50 +0100 Subject: [PATCH 017/105] tweak --- package.json | 15 +++++++++++++++ src/index.ts | 2 +- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index ade41dc..a346744 100644 --- a/package.json +++ b/package.json @@ -63,5 +63,20 @@ "ora": "^7.0.1", "picocolors": "^1.0.0", "prompts": "^2.4.2" + }, + "lint-staged": { + "**/*.{js,jsx}": [ + "format:write", + "lint:check", + "lint:fix" + ], + "**/*.{ts,tsx}": [ + "format:write", + "lint:check", + "lint:fix" + ], + "**/*.{md, yml, yaml, json}": [ + "format:write" + ] } } diff --git a/src/index.ts b/src/index.ts index 9290f23..7be8045 100644 --- a/src/index.ts +++ b/src/index.ts @@ -51,7 +51,7 @@ program // nothing to configure! goodbye(); return console.log( - `Looks like you've passed on all the Netxra configuration options. Maybe next time!` + `Looks like you've passed on all the configuration options. Maybe next time!` ); } From 5727fd7d321e67efc225b4d565520ef179964258 Mon Sep 17 00:00:00 2001 From: Dominic Geargeoura Date: Wed, 4 Oct 2023 17:07:00 +0100 Subject: [PATCH 018/105] lint staged test --- .husky/pre-commit | 12 +- package-lock.json | 430 ++++++++++++++++++++++++++++++++++++++++++++++ package.json | 16 +- 3 files changed, 442 insertions(+), 16 deletions(-) diff --git a/.husky/pre-commit b/.husky/pre-commit index 1ba6822..8e3bef3 100755 --- a/.husky/pre-commit +++ b/.husky/pre-commit @@ -1,13 +1,13 @@ #!/usr/bin/env sh . "$(dirname -- "$0")/_/husky.sh" +npx lint-staged +# npm run lint:check -npm run lint:check +# npm run lint:fix -npm run lint:fix +# npm run format:write -npm run format:write +# npm run build --noEmit -npm run build --noEmit - -npm run todo +# npm run todo diff --git a/package-lock.json b/package-lock.json index 13015a2..66c63ce 100644 --- a/package-lock.json +++ b/package-lock.json @@ -32,6 +32,7 @@ "eslint-define-config": "^1.23.0", "husky": "^8.0.0", "leasot": "^13.3.0", + "lint-staged": "^14.0.1", "markdown-table": "^3.0.3", "pinst": "^3.0.0", "prettier": "^3.0.3", @@ -1388,6 +1389,33 @@ "url": "https://github.com/sponsors/epoberezkin" } }, + "node_modules/ansi-escapes": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-5.0.0.tgz", + "integrity": "sha512-5GFMVX8HqE/TB+FuBJGuO5XG0WrsA6ptUqoODaT/n9mmUaZFkqnBueB4leqGBCmrUHnCnC4PCZTCd0E7QQ83bA==", + "dev": true, + "dependencies": { + "type-fest": "^1.0.2" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-escapes/node_modules/type-fest": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", + "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/ansi-regex": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", @@ -1581,6 +1609,72 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/cli-truncate": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-3.1.0.tgz", + "integrity": "sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA==", + "dev": true, + "dependencies": { + "slice-ansi": "^5.0.0", + "string-width": "^5.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-truncate/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/cli-truncate/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true + }, + "node_modules/cli-truncate/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-truncate/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, "node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", @@ -1599,6 +1693,12 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, + "node_modules/colorette": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", + "dev": true + }, "node_modules/commander": { "version": "11.0.0", "resolved": "https://registry.npmjs.org/commander/-/commander-11.0.0.tgz", @@ -1954,6 +2054,12 @@ "node": ">=0.10.0" } }, + "node_modules/eventemitter3": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", + "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", + "dev": true + }, "node_modules/execa": { "version": "8.0.1", "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz", @@ -2372,6 +2478,18 @@ "node": ">=0.10.0" } }, + "node_modules/is-fullwidth-code-point": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz", + "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/is-glob": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", @@ -2662,6 +2780,129 @@ "node": ">= 0.8.0" } }, + "node_modules/lilconfig": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", + "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/lint-staged": { + "version": "14.0.1", + "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-14.0.1.tgz", + "integrity": "sha512-Mw0cL6HXnHN1ag0mN/Dg4g6sr8uf8sn98w2Oc1ECtFto9tvRF7nkXGJRbx8gPlHyoR0pLyBr2lQHbWwmUHe1Sw==", + "dev": true, + "dependencies": { + "chalk": "5.3.0", + "commander": "11.0.0", + "debug": "4.3.4", + "execa": "7.2.0", + "lilconfig": "2.1.0", + "listr2": "6.6.1", + "micromatch": "4.0.5", + "pidtree": "0.6.0", + "string-argv": "0.3.2", + "yaml": "2.3.1" + }, + "bin": { + "lint-staged": "bin/lint-staged.js" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + }, + "funding": { + "url": "https://opencollective.com/lint-staged" + } + }, + "node_modules/lint-staged/node_modules/chalk": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", + "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", + "dev": true, + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/lint-staged/node_modules/execa": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-7.2.0.tgz", + "integrity": "sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.1", + "human-signals": "^4.3.0", + "is-stream": "^3.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^5.1.0", + "onetime": "^6.0.0", + "signal-exit": "^3.0.7", + "strip-final-newline": "^3.0.0" + }, + "engines": { + "node": "^14.18.0 || ^16.14.0 || >=18.0.0" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/lint-staged/node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lint-staged/node_modules/human-signals": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-4.3.1.tgz", + "integrity": "sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==", + "dev": true, + "engines": { + "node": ">=14.18.0" + } + }, + "node_modules/lint-staged/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true + }, + "node_modules/listr2": { + "version": "6.6.1", + "resolved": "https://registry.npmjs.org/listr2/-/listr2-6.6.1.tgz", + "integrity": "sha512-+rAXGHh0fkEWdXBmX+L6mmfmXmXvDGEKzkjxO+8mP3+nI/r/CWznVBvsibXdxda9Zz0OW2e2ikphN3OwCT/jSg==", + "dev": true, + "dependencies": { + "cli-truncate": "^3.1.0", + "colorette": "^2.0.20", + "eventemitter3": "^5.0.1", + "log-update": "^5.0.1", + "rfdc": "^1.3.0", + "wrap-ansi": "^8.1.0" + }, + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "enquirer": ">= 2.3.0 < 3" + }, + "peerDependenciesMeta": { + "enquirer": { + "optional": true + } + } + }, "node_modules/locate-path": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", @@ -2715,6 +2956,52 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, + "node_modules/log-update": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/log-update/-/log-update-5.0.1.tgz", + "integrity": "sha512-5UtUDQ/6edw4ofyljDNcOVJQ4c7OjDro4h3y8e1GQL5iYElYclVHJ3zeWchylvMaKnDbDilC8irOVyexnA/Slw==", + "dev": true, + "dependencies": { + "ansi-escapes": "^5.0.0", + "cli-cursor": "^4.0.0", + "slice-ansi": "^5.0.0", + "strip-ansi": "^7.0.1", + "wrap-ansi": "^8.0.1" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-update/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/log-update/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, "node_modules/lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", @@ -3040,6 +3327,18 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, + "node_modules/pidtree": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.6.0.tgz", + "integrity": "sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==", + "dev": true, + "bin": { + "pidtree": "bin/pidtree.js" + }, + "engines": { + "node": ">=0.10" + } + }, "node_modules/pinst": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pinst/-/pinst-3.0.0.tgz", @@ -3209,6 +3508,12 @@ "node": ">=0.10.0" } }, + "node_modules/rfdc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz", + "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==", + "dev": true + }, "node_modules/rimraf": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", @@ -3382,6 +3687,34 @@ "node": ">=8" } }, + "node_modules/slice-ansi": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz", + "integrity": "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^6.0.0", + "is-fullwidth-code-point": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "node_modules/slice-ansi/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, "node_modules/source-map": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", @@ -3413,6 +3746,15 @@ "safe-buffer": "~5.2.0" } }, + "node_modules/string-argv": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.2.tgz", + "integrity": "sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==", + "dev": true, + "engines": { + "node": ">=0.6.19" + } + }, "node_modules/string-width": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/string-width/-/string-width-6.1.0.tgz", @@ -3666,6 +4008,85 @@ "node": ">= 8" } }, + "node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true + }, + "node_modules/wrap-ansi/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/wrap-ansi/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", @@ -3678,6 +4099,15 @@ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true }, + "node_modules/yaml": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.1.tgz", + "integrity": "sha512-2eHWfjaoXgTBC2jNM1LRef62VQa0umtvRiDSk6HSzW7RvS5YtkabJrwYLLEKWBc8a5U2PTSCs+dJjUTJdlHsWQ==", + "dev": true, + "engines": { + "node": ">= 14" + } + }, "node_modules/yn": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", diff --git a/package.json b/package.json index a346744..4e330ca 100644 --- a/package.json +++ b/package.json @@ -47,6 +47,7 @@ "eslint-define-config": "^1.23.0", "husky": "^8.0.0", "leasot": "^13.3.0", + "lint-staged": "^14.0.1", "markdown-table": "^3.0.3", "pinst": "^3.0.0", "prettier": "^3.0.3", @@ -65,18 +66,13 @@ "prompts": "^2.4.2" }, "lint-staged": { - "**/*.{js,jsx}": [ - "format:write", - "lint:check", - "lint:fix" - ], - "**/*.{ts,tsx}": [ - "format:write", - "lint:check", - "lint:fix" + "**/*.{js,jsx,ts,tsx}": [ + "prettier --write .", + "eslint .", + "eslint --fix ." ], "**/*.{md, yml, yaml, json}": [ - "format:write" + "prettier --write ." ] } } From 5ea3169bfb29be6de9c64a39ed593b5645cc0037 Mon Sep 17 00:00:00 2001 From: Dominic Geargeoura Date: Wed, 4 Oct 2023 17:07:50 +0100 Subject: [PATCH 019/105] lint staged test --- src/Configurator.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Configurator.ts b/src/Configurator.ts index 70e94c6..0cbae2f 100644 --- a/src/Configurator.ts +++ b/src/Configurator.ts @@ -409,7 +409,7 @@ class Configurator { ], ...(typescript ? tsLintStagedCmd : {}), '**/*.{md, yml, yaml, json}': ['npx prettier --write .'], - '**/*.css': ['npx prettier --write .'], // TODO: add styledlint + '**/*.{css,scss}': ['npx prettier --write .'], // TODO: add styledlint }; await this.packageManager.addToPackage('lint-staged', lintStagedCmds); From fb3a0dc24c5cd8f79893363ef2104688d5c7e05d Mon Sep 17 00:00:00 2001 From: Dominic Geargeoura Date: Wed, 4 Oct 2023 17:15:02 +0100 Subject: [PATCH 020/105] variable renames --- src/Configurator.ts | 46 ++++++++++++++++++++++----------------------- 1 file changed, 23 insertions(+), 23 deletions(-) diff --git a/src/Configurator.ts b/src/Configurator.ts index 0cbae2f..4b51503 100644 --- a/src/Configurator.ts +++ b/src/Configurator.ts @@ -17,8 +17,8 @@ type ConfiguratorPropsType = { }; export interface ConfigType { - configDirectories: string[]; - configFiles: string[]; + configTemplateDirectories: string[]; + configTemplateFiles: string[]; markdown: string[]; packageDependencies: string[]; packageDevDependencies: string[]; @@ -48,10 +48,10 @@ export interface OptionsType { const { cyan, green, bold } = picocolors; class Configurator { - private configsPath: string; + private configTemplatesPath: string; private config = {} as ConfigType; private cwd: string; - private markdownDirPath: string; + private markdownTemplatesPath: string; private options = { appRouter: false, cypress: false, @@ -78,8 +78,8 @@ class Configurator { projectDirectoryPath, packageManagerChoice: packageManagerKind, }: ConfiguratorPropsType) { - this.configsPath = path.resolve(path.join('src', 'templates')); - this.markdownDirPath = path.resolve(path.join('src', 'markdown')); + this.configTemplatesPath = path.resolve(path.join('src', 'templates')); + this.markdownTemplatesPath = path.resolve(path.join('src', 'markdown')); this.cwd = path.resolve(projectDirectoryPath); this.spinner = ora(); this.packageManager = new PackageManager({ @@ -170,14 +170,14 @@ class Configurator { typescript, } = this.options; - this.config.configFiles = [ + this.config.configTemplateFiles = [ 'next.config.js', ...(docker ? ['docker-compose.yml', 'Dockerfile', 'Makefile'] : []), ...(prettier ? ['.prettierrc.json', '.prettierignore'] : []), ...(jest ? ['jest.config.js'] : []), ]; - this.config.configDirectories = [ + this.config.configTemplateDirectories = [ ...(cypress ? ['cypress'] : []), ...(storybook ? ['.storybook'] : []), ]; @@ -394,22 +394,22 @@ class Configurator { if (lintStaged && (eslint || (eslint && typescript) || prettier || jest)) { const tsLintStagedCmd = { '**/*.{ts,tsx}': [ - ...(prettier ? ['npx prettier --write .'] : []), - ...(eslint ? ['npx eslint .', 'npx eslint --fix .'] : []), - ...(jest ? ['npx jest --ci'] : []), + ...(prettier ? ['prettier --write .'] : []), + ...(eslint ? ['eslint .', 'eslint --fix .'] : []), + ...(jest ? ['jest --ci'] : []), 'tsc --noEmit', ], }; const lintStagedCmds = { '**/*.{js,jsx}': [ - ...(prettier ? ['npx prettier --write .'] : []), - ...(eslint ? ['npx eslint .', 'npx eslint --fix .'] : []), - ...(jest ? ['npx jest --ci'] : []), + ...(prettier ? ['prettier --write .'] : []), + ...(eslint ? ['eslint .', ' eslint --fix .'] : []), + ...(jest ? [' jest --ci'] : []), ], ...(typescript ? tsLintStagedCmd : {}), - '**/*.{md, yml, yaml, json}': ['npx prettier --write .'], - '**/*.{css,scss}': ['npx prettier --write .'], // TODO: add styledlint + '**/*.{md, yml, yaml, json}': ['prettier --write .'], + '**/*.{css}': [' prettier --write .'], // TODO: add styledlint }; await this.packageManager.addToPackage('lint-staged', lintStagedCmds); @@ -469,17 +469,17 @@ class Configurator { public buildDependencyConfigs = async () => { this.spinner.start('Building dependency configs'); - const { configDirectories, configFiles } = this.config; + const { configTemplateDirectories, configTemplateFiles } = this.config; const { dotEnvFiles } = this.options; const configs = []; // Directories & Files - if (configDirectories.length > 0) { - configs.push(this.copyTemplate(configDirectories, true)); + if (configTemplateDirectories.length > 0) { + configs.push(this.copyTemplate(configTemplateDirectories, true)); } - if (configFiles.length > 0) { - configs.push(this.copyTemplate(configFiles)); + if (configTemplateFiles.length > 0) { + configs.push(this.copyTemplate(configTemplateFiles)); } if (configs.length >= 1) { @@ -525,7 +525,7 @@ class Configurator { private readFromFiles = async (filenames: string[]) => { const filePaths = filenames.map((filename) => - path.join(this.markdownDirPath, filename) + path.join(this.markdownTemplatesPath, filename) ); const readFiles = filePaths.map((filePath) => @@ -558,7 +558,7 @@ class Configurator { if (Array.isArray(template) && template.length > 0) { const copyFiles = template.map((file) => fs.promises.cp( - path.join(this.configsPath, file), + path.join(this.configTemplatesPath, file), path.join(this.cwd, file), { recursive } ) From 560ebb80492d5531ca9a6edaca5f285daf0f78ef Mon Sep 17 00:00:00 2001 From: Dominic Geargeoura Date: Wed, 4 Oct 2023 17:21:00 +0100 Subject: [PATCH 021/105] todo test --- .husky/pre-commit | 2 +- package.json | 5 +++-- src/Configurator.ts | 2 +- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/.husky/pre-commit b/.husky/pre-commit index 8e3bef3..df3b3d9 100755 --- a/.husky/pre-commit +++ b/.husky/pre-commit @@ -1,7 +1,7 @@ #!/usr/bin/env sh . "$(dirname -- "$0")/_/husky.sh" -npx lint-staged +npx lint-staged --concurrent false # npm run lint:check # npm run lint:fix diff --git a/package.json b/package.json index 4e330ca..d6207e4 100644 --- a/package.json +++ b/package.json @@ -66,10 +66,11 @@ "prompts": "^2.4.2" }, "lint-staged": { - "**/*.{js,jsx,ts,tsx}": [ + "**/*.[jt]s?(x)": [ "prettier --write .", "eslint .", - "eslint --fix ." + "eslint --fix .", + "leasot 'src/**/*.ts' --exit-nicely" ], "**/*.{md, yml, yaml, json}": [ "prettier --write ." diff --git a/src/Configurator.ts b/src/Configurator.ts index 4b51503..9859141 100644 --- a/src/Configurator.ts +++ b/src/Configurator.ts @@ -73,7 +73,7 @@ class Configurator { } as OptionsType; private packageManager = {} as PackageManager; private spinner; - + // TODO: test constructor({ projectDirectoryPath, packageManagerChoice: packageManagerKind, From 75fd6dafaa3b57bfc9496b75e4fc90d33ba4162b Mon Sep 17 00:00:00 2001 From: Dominic Geargeoura Date: Wed, 4 Oct 2023 17:21:33 +0100 Subject: [PATCH 022/105] todo test --- .husky/pre-commit | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.husky/pre-commit b/.husky/pre-commit index df3b3d9..9a21807 100755 --- a/.husky/pre-commit +++ b/.husky/pre-commit @@ -1,7 +1,7 @@ #!/usr/bin/env sh . "$(dirname -- "$0")/_/husky.sh" -npx lint-staged --concurrent false +npx lint-staged # npm run lint:check # npm run lint:fix From e1c64eaa31500e408a22a2e025b6da5b0d386d8b Mon Sep 17 00:00:00 2001 From: Dominic Geargeoura Date: Wed, 4 Oct 2023 17:25:25 +0100 Subject: [PATCH 023/105] todo test --- package.json | 2 +- src/index.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index d6207e4..15133d0 100644 --- a/package.json +++ b/package.json @@ -70,7 +70,7 @@ "prettier --write .", "eslint .", "eslint --fix .", - "leasot 'src/**/*.ts' --exit-nicely" + "leasot 'src/**/*.[jt]s?(x)' --exit-nicely" ], "**/*.{md, yml, yaml, json}": [ "prettier --write ." diff --git a/src/index.ts b/src/index.ts index 7be8045..12e07a8 100644 --- a/src/index.ts +++ b/src/index.ts @@ -54,7 +54,7 @@ program `Looks like you've passed on all the configuration options. Maybe next time!` ); } - + // TODO: something configurator.setOptions(opts); await configurator.run(); From 016e7218f5339a34b27d501d17d51961049a4bfe Mon Sep 17 00:00:00 2001 From: Dominic Geargeoura Date: Wed, 4 Oct 2023 17:26:51 +0100 Subject: [PATCH 024/105] todo test --- .husky/pre-commit | 8 -------- src/index.ts | 1 + 2 files changed, 1 insertion(+), 8 deletions(-) diff --git a/.husky/pre-commit b/.husky/pre-commit index 9a21807..60eca39 100755 --- a/.husky/pre-commit +++ b/.husky/pre-commit @@ -2,12 +2,4 @@ . "$(dirname -- "$0")/_/husky.sh" npx lint-staged -# npm run lint:check -# npm run lint:fix - -# npm run format:write - -# npm run build --noEmit - -# npm run todo diff --git a/src/index.ts b/src/index.ts index 12e07a8..703c740 100644 --- a/src/index.ts +++ b/src/index.ts @@ -55,6 +55,7 @@ program ); } // TODO: something + // TODO: something 2 configurator.setOptions(opts); await configurator.run(); From 146be5d6b0caae69cad7ee4c89941c38ee077b09 Mon Sep 17 00:00:00 2001 From: Dominic Geargeoura Date: Wed, 4 Oct 2023 17:27:25 +0100 Subject: [PATCH 025/105] todo test --- .husky/pre-commit | 1 + package.json | 3 +-- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.husky/pre-commit b/.husky/pre-commit index 60eca39..620201c 100755 --- a/.husky/pre-commit +++ b/.husky/pre-commit @@ -3,3 +3,4 @@ npx lint-staged +npx leasot 'src/**/*.[jt]s?(x)' --exit-nicely diff --git a/package.json b/package.json index 15133d0..b5806d0 100644 --- a/package.json +++ b/package.json @@ -69,8 +69,7 @@ "**/*.[jt]s?(x)": [ "prettier --write .", "eslint .", - "eslint --fix .", - "leasot 'src/**/*.[jt]s?(x)' --exit-nicely" + "eslint --fix ." ], "**/*.{md, yml, yaml, json}": [ "prettier --write ." From f5723dfb77eddc484590b370353a5b61fcfcc81c Mon Sep 17 00:00:00 2001 From: Dominic Geargeoura Date: Wed, 4 Oct 2023 17:37:34 +0100 Subject: [PATCH 026/105] todo test --- .lintstagedrc.cjs | 13 +++++++++++++ package.json | 10 ---------- 2 files changed, 13 insertions(+), 10 deletions(-) create mode 100644 .lintstagedrc.cjs diff --git a/.lintstagedrc.cjs b/.lintstagedrc.cjs new file mode 100644 index 0000000..4c09ce6 --- /dev/null +++ b/.lintstagedrc.cjs @@ -0,0 +1,13 @@ +module.exports = { + // Lint & Prettify TS and JS files + '**/*.(ts|tsx|js)': (filenames) => [ + `prettier --write ${filenames.join(' ')}`, + `eslint ${filenames.join(' ')}`, + `eslint --fix ${filenames.join(' ')}`, + `tsc --noEmit`, + `leasot ${filenames.join(' ')} --exit-nicely`, + ], + + '**/*.(md, yml, yaml, json)': (filenames) => + `prettier --write ${filenames.join(' ')}`, +}; diff --git a/package.json b/package.json index b5806d0..b598526 100644 --- a/package.json +++ b/package.json @@ -64,15 +64,5 @@ "ora": "^7.0.1", "picocolors": "^1.0.0", "prompts": "^2.4.2" - }, - "lint-staged": { - "**/*.[jt]s?(x)": [ - "prettier --write .", - "eslint .", - "eslint --fix ." - ], - "**/*.{md, yml, yaml, json}": [ - "prettier --write ." - ] } } From 7ea9503f46bfaef727923a4d9f050191b0d2f481 Mon Sep 17 00:00:00 2001 From: Dominic Geargeoura Date: Wed, 4 Oct 2023 17:38:15 +0100 Subject: [PATCH 027/105] todo test --- src/Configurator.ts | 2 +- src/index.ts | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/Configurator.ts b/src/Configurator.ts index 9859141..f504622 100644 --- a/src/Configurator.ts +++ b/src/Configurator.ts @@ -428,7 +428,7 @@ class Configurator { plugins: [ ...(eslint && typescript ? ['@typescript-eslint'] : []), ...(reactTestingLibrary ? ['testing-library'] : []), - ], + ], // TODO: something 0 extends: [ 'next/core-web-vitals', ...(eslint && typescript diff --git a/src/index.ts b/src/index.ts index 703c740..6992b18 100644 --- a/src/index.ts +++ b/src/index.ts @@ -41,7 +41,7 @@ program await configurator.createNextApp(); const opts = await prompts(configurationPrompts); - + // TODO: something 4 const hasOptions = Object.values(opts).includes(true) || opts.optionalDependencies.length > 0 || @@ -56,6 +56,7 @@ program } // TODO: something // TODO: something 2 + // TODO: something 3 configurator.setOptions(opts); await configurator.run(); From c4060831ba7e0f136068ec6e5e48f43a14c86f09 Mon Sep 17 00:00:00 2001 From: Dominic Geargeoura Date: Wed, 4 Oct 2023 17:39:22 +0100 Subject: [PATCH 028/105] revert test --- src/Configurator.ts | 4 ++-- src/index.ts | 6 ++---- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/src/Configurator.ts b/src/Configurator.ts index f504622..4b51503 100644 --- a/src/Configurator.ts +++ b/src/Configurator.ts @@ -73,7 +73,7 @@ class Configurator { } as OptionsType; private packageManager = {} as PackageManager; private spinner; - // TODO: test + constructor({ projectDirectoryPath, packageManagerChoice: packageManagerKind, @@ -428,7 +428,7 @@ class Configurator { plugins: [ ...(eslint && typescript ? ['@typescript-eslint'] : []), ...(reactTestingLibrary ? ['testing-library'] : []), - ], // TODO: something 0 + ], extends: [ 'next/core-web-vitals', ...(eslint && typescript diff --git a/src/index.ts b/src/index.ts index 6992b18..7be8045 100644 --- a/src/index.ts +++ b/src/index.ts @@ -41,7 +41,7 @@ program await configurator.createNextApp(); const opts = await prompts(configurationPrompts); - // TODO: something 4 + const hasOptions = Object.values(opts).includes(true) || opts.optionalDependencies.length > 0 || @@ -54,9 +54,7 @@ program `Looks like you've passed on all the configuration options. Maybe next time!` ); } - // TODO: something - // TODO: something 2 - // TODO: something 3 + configurator.setOptions(opts); await configurator.run(); From ce7388c2839145b74a942c3c7cc2178249a28099 Mon Sep 17 00:00:00 2001 From: Dominic Geargeoura Date: Wed, 4 Oct 2023 18:30:48 +0100 Subject: [PATCH 029/105] lint staged change config --- .lintstagedrc.cjs => .lintstagedrc.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename .lintstagedrc.cjs => .lintstagedrc.js (95%) diff --git a/.lintstagedrc.cjs b/.lintstagedrc.js similarity index 95% rename from .lintstagedrc.cjs rename to .lintstagedrc.js index 4c09ce6..f8011b3 100644 --- a/.lintstagedrc.cjs +++ b/.lintstagedrc.js @@ -1,4 +1,4 @@ -module.exports = { +export default { // Lint & Prettify TS and JS files '**/*.(ts|tsx|js)': (filenames) => [ `prettier --write ${filenames.join(' ')}`, From 6b0e24c6c90118d9f17b6d42fe0dcd56f1717ce5 Mon Sep 17 00:00:00 2001 From: Dominic Geargeoura Date: Wed, 4 Oct 2023 18:32:06 +0100 Subject: [PATCH 030/105] lint staged change config --- .lintstagedrc.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.lintstagedrc.js b/.lintstagedrc.js index f8011b3..bcfe8a8 100644 --- a/.lintstagedrc.js +++ b/.lintstagedrc.js @@ -1,6 +1,6 @@ export default { // Lint & Prettify TS and JS files - '**/*.(ts|tsx|js)': (filenames) => [ + '**/*.[jt]s': (filenames) => [ `prettier --write ${filenames.join(' ')}`, `eslint ${filenames.join(' ')}`, `eslint --fix ${filenames.join(' ')}`, From 189f3856c25949416f831efe02a4c4e0e35e2044 Mon Sep 17 00:00:00 2001 From: Dominic Geargeoura Date: Wed, 4 Oct 2023 18:32:54 +0100 Subject: [PATCH 031/105] lint staged change config --- .lintstagedrc.js | 1 - 1 file changed, 1 deletion(-) diff --git a/.lintstagedrc.js b/.lintstagedrc.js index bcfe8a8..3da2896 100644 --- a/.lintstagedrc.js +++ b/.lintstagedrc.js @@ -1,5 +1,4 @@ export default { - // Lint & Prettify TS and JS files '**/*.[jt]s': (filenames) => [ `prettier --write ${filenames.join(' ')}`, `eslint ${filenames.join(' ')}`, From fac45b0b765109ed44d76d7caa25d9e96b21e088 Mon Sep 17 00:00:00 2001 From: Dominic Geargeoura Date: Wed, 4 Oct 2023 18:34:24 +0100 Subject: [PATCH 032/105] lint staged tweak --- src/Configurator.ts | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/Configurator.ts b/src/Configurator.ts index 4b51503..c6e95bd 100644 --- a/src/Configurator.ts +++ b/src/Configurator.ts @@ -391,8 +391,8 @@ class Configurator { await this.packageManager.addToPackage('scripts', packageScripts); // lint-staged - if (lintStaged && (eslint || (eslint && typescript) || prettier || jest)) { - const tsLintStagedCmd = { + if (lintStaged) { + const tsLintStagedConfig = { '**/*.{ts,tsx}': [ ...(prettier ? ['prettier --write .'] : []), ...(eslint ? ['eslint .', 'eslint --fix .'] : []), @@ -401,18 +401,18 @@ class Configurator { ], }; - const lintStagedCmds = { + const lintStagedConfig = { '**/*.{js,jsx}': [ ...(prettier ? ['prettier --write .'] : []), ...(eslint ? ['eslint .', ' eslint --fix .'] : []), ...(jest ? [' jest --ci'] : []), ], - ...(typescript ? tsLintStagedCmd : {}), + ...(typescript ? tsLintStagedConfig : {}), '**/*.{md, yml, yaml, json}': ['prettier --write .'], '**/*.{css}': [' prettier --write .'], // TODO: add styledlint }; - await this.packageManager.addToPackage('lint-staged', lintStagedCmds); + await this.packageManager.addToPackage('lint-staged', lintStagedConfig); } }; From 7d217a237ff323008d3e725327d2bcc7c5450601 Mon Sep 17 00:00:00 2001 From: Dom Geargeoura Date: Thu, 5 Oct 2023 09:09:27 +0100 Subject: [PATCH 033/105] changes template paths var --- src/Configurator.ts | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/src/Configurator.ts b/src/Configurator.ts index c6e95bd..5e4e0f7 100644 --- a/src/Configurator.ts +++ b/src/Configurator.ts @@ -48,10 +48,8 @@ export interface OptionsType { const { cyan, green, bold } = picocolors; class Configurator { - private configTemplatesPath: string; private config = {} as ConfigType; private cwd: string; - private markdownTemplatesPath: string; private options = { appRouter: false, cypress: false, @@ -73,15 +71,15 @@ class Configurator { } as OptionsType; private packageManager = {} as PackageManager; private spinner; + private srcPath: string; constructor({ projectDirectoryPath, packageManagerChoice: packageManagerKind, }: ConfiguratorPropsType) { - this.configTemplatesPath = path.resolve(path.join('src', 'templates')); - this.markdownTemplatesPath = path.resolve(path.join('src', 'markdown')); this.cwd = path.resolve(projectDirectoryPath); this.spinner = ora(); + this.srcPath = path.resolve(path.join('src', 'templates')); this.packageManager = new PackageManager({ packageManagerKind, cwd: this.cwd, @@ -101,7 +99,7 @@ class Configurator { await this.prepare() .then(() => this.installDependencies()) - .then(() => this.buildDependencyConfigs()) + .then(() => this.buildConfigs()) .then(() => this.configurePackageFile()) .then(() => this.generateReadme()) .then(() => this.cleanUp()); @@ -467,8 +465,8 @@ class Configurator { }); }; - public buildDependencyConfigs = async () => { - this.spinner.start('Building dependency configs'); + public buildConfigs = async () => { + this.spinner.start('Building configs'); const { configTemplateDirectories, configTemplateFiles } = this.config; const { dotEnvFiles } = this.options; @@ -525,7 +523,7 @@ class Configurator { private readFromFiles = async (filenames: string[]) => { const filePaths = filenames.map((filename) => - path.join(this.markdownTemplatesPath, filename) + path.join(this.srcPath, 'markdown', filename) ); const readFiles = filePaths.map((filePath) => @@ -558,7 +556,7 @@ class Configurator { if (Array.isArray(template) && template.length > 0) { const copyFiles = template.map((file) => fs.promises.cp( - path.join(this.configTemplatesPath, file), + path.join(this.srcPath, 'templates', file), path.join(this.cwd, file), { recursive } ) From 353f6250b133fc0fd92de227b4441aa744d7c44f Mon Sep 17 00:00:00 2001 From: Dominic Geargeoura Date: Thu, 5 Oct 2023 10:06:05 +0100 Subject: [PATCH 034/105] husky mod --- .gitignore | 3 +- .husky/pre-commit | 6 + .lintstagedrc.js | 6 +- jest.config.js | 11 + package-lock.json | 5476 +++++++++++++++++++++++++++++++++---------- package.json | 28 +- src/Configurator.ts | 11 +- 7 files changed, 4284 insertions(+), 1257 deletions(-) create mode 100644 jest.config.js diff --git a/.gitignore b/.gitignore index 2317788..c76e965 100644 --- a/.gitignore +++ b/.gitignore @@ -131,4 +131,5 @@ dist .DS_Store -tmp \ No newline at end of file +tmp +coverage diff --git a/.husky/pre-commit b/.husky/pre-commit index 620201c..ca864c4 100755 --- a/.husky/pre-commit +++ b/.husky/pre-commit @@ -3,4 +3,10 @@ npx lint-staged +# Following is for monitoring only + +#TODOs / FIXMEs npx leasot 'src/**/*.[jt]s?(x)' --exit-nicely + +# # Test coverage +# npx jest --coverage \ No newline at end of file diff --git a/.lintstagedrc.js b/.lintstagedrc.js index 3da2896..c359226 100644 --- a/.lintstagedrc.js +++ b/.lintstagedrc.js @@ -1,12 +1,14 @@ export default { '**/*.[jt]s': (filenames) => [ + `prettier --check ${filenames.join(' ')}`, `prettier --write ${filenames.join(' ')}`, `eslint ${filenames.join(' ')}`, `eslint --fix ${filenames.join(' ')}`, `tsc --noEmit`, - `leasot ${filenames.join(' ')} --exit-nicely`, ], - '**/*.(md, yml, yaml, json)': (filenames) => + '**/*.(md, yml, yaml, json)': (filenames) => [ + `prettier --check ${filenames.join(' ')}`, `prettier --write ${filenames.join(' ')}`, + ], }; diff --git a/jest.config.js b/jest.config.js new file mode 100644 index 0000000..8745add --- /dev/null +++ b/jest.config.js @@ -0,0 +1,11 @@ +/** @type {import('ts-jest').JestConfigWithTsJest} */ + +export default { + preset: 'ts-jest', + testEnvironment: 'node', + modulePathIgnorePatterns: [ + '/dist/', + '/coverage/', + '/.husky/', + ], +}; diff --git a/package-lock.json b/package-lock.json index 66c63ce..123ec89 100644 --- a/package-lock.json +++ b/package-lock.json @@ -31,6 +31,7 @@ "eslint-config-prettier": "^9.0.0", "eslint-define-config": "^1.23.0", "husky": "^8.0.0", + "jest": "^29.7.0", "leasot": "^13.3.0", "lint-staged": "^14.0.1", "markdown-table": "^3.0.3", @@ -39,6 +40,7 @@ "rollup": "^3.29.2", "rollup-plugin-dts": "^6.0.2", "rollup-plugin-esbuild": "^6.0.1", + "ts-jest": "^29.1.1", "ts-node": "^10.9.1", "typescript": "^5.2.2" } @@ -52,6 +54,19 @@ "node": ">=0.10.0" } }, + "node_modules/@ampproject/remapping": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", + "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, "node_modules/@babel/code-frame": { "version": "7.22.13", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz", @@ -136,6 +151,123 @@ "node": ">=4" } }, + "node_modules/@babel/compat-data": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.20.tgz", + "integrity": "sha512-BQYjKbpXjoXwFW5jGqiizJQQT/aC7pFm9Ok1OWssonuguICi264lbgMzRp2ZMmRSlfkX6DsWDDcsrctK8Rwfiw==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.23.0.tgz", + "integrity": "sha512-97z/ju/Jy1rZmDxybphrBuI+jtJjFVoz7Mr9yUQVVVi+DNZE333uFQeMOqcCIy1x3WYBIbWftUSLmbNXNT7qFQ==", + "dev": true, + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.22.13", + "@babel/generator": "^7.23.0", + "@babel/helper-compilation-targets": "^7.22.15", + "@babel/helper-module-transforms": "^7.23.0", + "@babel/helpers": "^7.23.0", + "@babel/parser": "^7.23.0", + "@babel/template": "^7.22.15", + "@babel/traverse": "^7.23.0", + "@babel/types": "^7.23.0", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/core/node_modules/@babel/generator": { + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.0.tgz", + "integrity": "sha512-lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g==", + "dev": true, + "dependencies": { + "@babel/types": "^7.23.0", + "@jridgewell/gen-mapping": "^0.3.2", + "@jridgewell/trace-mapping": "^0.3.17", + "jsesc": "^2.5.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core/node_modules/@babel/traverse": { + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.0.tgz", + "integrity": "sha512-t/QaEvyIoIkwzpiZ7aoSKK8kObQYeF7T2v+dazAYCb8SXtp58zEVkWW7zAnju8FNKNdr4ScAOEDmMItbyOmEYw==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.22.13", + "@babel/generator": "^7.23.0", + "@babel/helper-environment-visitor": "^7.22.20", + "@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.0", + "@babel/types": "^7.23.0", + "debug": "^4.1.0", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core/node_modules/@babel/types": { + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.0.tgz", + "integrity": "sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==", + "dev": true, + "dependencies": { + "@babel/helper-string-parser": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.20", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core/node_modules/@jridgewell/trace-mapping": { + "version": "0.3.19", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz", + "integrity": "sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@babel/core/node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/core/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, "node_modules/@babel/generator": { "version": "7.17.7", "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.17.7.tgz", @@ -150,6 +282,46 @@ "node": ">=6.9.0" } }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.15.tgz", + "integrity": "sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.22.9", + "@babel/helper-validator-option": "^7.22.15", + "browserslist": "^4.21.9", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + }, "node_modules/@babel/helper-environment-visitor": { "version": "7.22.20", "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", @@ -160,26 +332,26 @@ } }, "node_modules/@babel/helper-function-name": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.22.5.tgz", - "integrity": "sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", + "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", "dev": true, "dependencies": { - "@babel/template": "^7.22.5", - "@babel/types": "^7.22.5" + "@babel/template": "^7.22.15", + "@babel/types": "^7.23.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-function-name/node_modules/@babel/types": { - "version": "7.22.19", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.19.tgz", - "integrity": "sha512-P7LAw/LbojPzkgp5oznjE6tQEIWbp4PkkfrZDINTro9zgBRtI324/EYsiSI7lhPbpIQ+DCeR2NNmMWANGGfZsg==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.0.tgz", + "integrity": "sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==", "dev": true, "dependencies": { "@babel/helper-string-parser": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.19", + "@babel/helper-validator-identifier": "^7.22.20", "to-fast-properties": "^2.0.0" }, "engines": { @@ -212,6 +384,86 @@ "node": ">=6.9.0" } }, + "node_modules/@babel/helper-module-imports": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz", + "integrity": "sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.15" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports/node_modules/@babel/types": { + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.0.tgz", + "integrity": "sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==", + "dev": true, + "dependencies": { + "@babel/helper-string-parser": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.20", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.23.0.tgz", + "integrity": "sha512-WhDWw1tdrlT0gMgUJSlX0IQvoO1eN279zrAUbVB+KpV2c3Tylz8+GnKOLllCS6Z/iZQEyVYxhZVUdPTqs2YYPw==", + "dev": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-module-imports": "^7.22.15", + "@babel/helper-simple-access": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/helper-validator-identifier": "^7.22.20" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", + "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", + "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-simple-access/node_modules/@babel/types": { + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.0.tgz", + "integrity": "sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==", + "dev": true, + "dependencies": { + "@babel/helper-string-parser": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.20", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@babel/helper-split-export-declaration": { "version": "7.22.6", "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", @@ -256,6 +508,98 @@ "node": ">=6.9.0" } }, + "node_modules/@babel/helper-validator-option": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.15.tgz", + "integrity": "sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.23.1", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.23.1.tgz", + "integrity": "sha512-chNpneuK18yW5Oxsr+t553UZzzAs3aZnFm4bxhebsNTeshrC95yA7l5yl7GBAG+JG1rF0F7zzD2EixK9mWSDoA==", + "dev": true, + "dependencies": { + "@babel/template": "^7.22.15", + "@babel/traverse": "^7.23.0", + "@babel/types": "^7.23.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers/node_modules/@babel/generator": { + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.0.tgz", + "integrity": "sha512-lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g==", + "dev": true, + "dependencies": { + "@babel/types": "^7.23.0", + "@jridgewell/gen-mapping": "^0.3.2", + "@jridgewell/trace-mapping": "^0.3.17", + "jsesc": "^2.5.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers/node_modules/@babel/traverse": { + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.0.tgz", + "integrity": "sha512-t/QaEvyIoIkwzpiZ7aoSKK8kObQYeF7T2v+dazAYCb8SXtp58zEVkWW7zAnju8FNKNdr4ScAOEDmMItbyOmEYw==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.22.13", + "@babel/generator": "^7.23.0", + "@babel/helper-environment-visitor": "^7.22.20", + "@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.0", + "@babel/types": "^7.23.0", + "debug": "^4.1.0", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers/node_modules/@babel/types": { + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.0.tgz", + "integrity": "sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==", + "dev": true, + "dependencies": { + "@babel/helper-string-parser": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.20", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers/node_modules/@jridgewell/trace-mapping": { + "version": "0.3.19", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz", + "integrity": "sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@babel/helpers/node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, "node_modules/@babel/highlight": { "version": "7.22.20", "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.20.tgz", @@ -342,9 +686,9 @@ } }, "node_modules/@babel/parser": { - "version": "7.22.16", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.16.tgz", - "integrity": "sha512-+gPfKv8UWeKKeJTUxe59+OobVcrYHETCsORl61EmSkmgymguYk/X5bp7GuUIXaFsc6y++v8ZxPsLSSuujqDphA==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.0.tgz", + "integrity": "sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw==", "dev": true, "bin": { "parser": "bin/babel-parser.js" @@ -353,77 +697,260 @@ "node": ">=6.0.0" } }, - "node_modules/@babel/template": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", - "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", + "node_modules/@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", "dev": true, "dependencies": { - "@babel/code-frame": "^7.22.13", - "@babel/parser": "^7.22.15", - "@babel/types": "^7.22.15" + "@babel/helper-plugin-utils": "^7.8.0" }, - "engines": { - "node": ">=6.9.0" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/template/node_modules/@babel/types": { - "version": "7.22.19", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.19.tgz", - "integrity": "sha512-P7LAw/LbojPzkgp5oznjE6tQEIWbp4PkkfrZDINTro9zgBRtI324/EYsiSI7lhPbpIQ+DCeR2NNmMWANGGfZsg==", + "node_modules/@babel/plugin-syntax-bigint": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", + "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", "dev": true, "dependencies": { - "@babel/helper-string-parser": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.19", - "to-fast-properties": "^2.0.0" + "@babel/helper-plugin-utils": "^7.8.0" }, - "engines": { - "node": ">=6.9.0" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/traverse": { - "version": "7.17.3", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.17.3.tgz", - "integrity": "sha512-5irClVky7TxRWIRtxlh2WPUUOLhcPN06AGgaQSB8AEwuyEBgJVuJ5imdHm5zxk8w0QS5T+tDfnDxAlhWjpb7cw==", + "node_modules/@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", "dev": true, "dependencies": { - "@babel/code-frame": "^7.16.7", - "@babel/generator": "^7.17.3", - "@babel/helper-environment-visitor": "^7.16.7", - "@babel/helper-function-name": "^7.16.7", - "@babel/helper-hoist-variables": "^7.16.7", - "@babel/helper-split-export-declaration": "^7.16.7", - "@babel/parser": "^7.17.3", - "@babel/types": "^7.17.0", - "debug": "^4.1.0", - "globals": "^11.1.0" + "@babel/helper-plugin-utils": "^7.12.13" }, - "engines": { - "node": ">=6.9.0" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/traverse/node_modules/globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "node_modules/@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", "dev": true, - "engines": { - "node": ">=4" + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/types": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.0.tgz", - "integrity": "sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==", + "node_modules/@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", "dev": true, "dependencies": { - "@babel/helper-validator-identifier": "^7.16.7", - "to-fast-properties": "^2.0.0" + "@babel/helper-plugin-utils": "^7.8.0" }, - "engines": { - "node": ">=6.9.0" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/plugin-syntax-jsx": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.22.5.tgz", + "integrity": "sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-typescript": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.22.5.tgz", + "integrity": "sha512-1mS2o03i7t1c6VzH6fdQ3OA8tcEIxwG18zIPRp+UY1Ihv6W+XZzBCVxExF9upussPXJ0xE9XRHwMoNs1ep/nRQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/template": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", + "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.22.13", + "@babel/parser": "^7.22.15", + "@babel/types": "^7.22.15" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template/node_modules/@babel/types": { + "version": "7.22.19", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.19.tgz", + "integrity": "sha512-P7LAw/LbojPzkgp5oznjE6tQEIWbp4PkkfrZDINTro9zgBRtI324/EYsiSI7lhPbpIQ+DCeR2NNmMWANGGfZsg==", + "dev": true, + "dependencies": { + "@babel/helper-string-parser": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.19", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.17.3", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.17.3.tgz", + "integrity": "sha512-5irClVky7TxRWIRtxlh2WPUUOLhcPN06AGgaQSB8AEwuyEBgJVuJ5imdHm5zxk8w0QS5T+tDfnDxAlhWjpb7cw==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.16.7", + "@babel/generator": "^7.17.3", + "@babel/helper-environment-visitor": "^7.16.7", + "@babel/helper-function-name": "^7.16.7", + "@babel/helper-hoist-variables": "^7.16.7", + "@babel/helper-split-export-declaration": "^7.16.7", + "@babel/parser": "^7.17.3", + "@babel/types": "^7.17.0", + "debug": "^4.1.0", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse/node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/types": { + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.0.tgz", + "integrity": "sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==", + "dev": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.16.7", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@bcoe/v8-coverage": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", + "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", + "dev": true + }, "node_modules/@cspotcode/source-map-support": { "version": "0.8.1", "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", @@ -877,918 +1404,1913 @@ "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", "dev": true }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", - "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", + "node_modules/@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", + "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", "dev": true, + "dependencies": { + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" + }, "engines": { - "node": ">=6.0.0" + "node": ">=8" } }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.15", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", - "dev": true - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", - "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "node_modules/@istanbuljs/load-nyc-config/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "dev": true, "dependencies": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" + "sprintf-js": "~1.0.2" } }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "node_modules/@istanbuljs/load-nyc-config/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dev": true, "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" }, "engines": { - "node": ">= 8" + "node": ">=8" } }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "node_modules/@istanbuljs/load-nyc-config/node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", "dev": true, - "engines": { - "node": ">= 8" + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" } }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "node_modules/@istanbuljs/load-nyc-config/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" + "p-locate": "^4.1.0" }, "engines": { - "node": ">= 8" + "node": ">=8" } }, - "node_modules/@rollup/plugin-commonjs": { - "version": "25.0.4", - "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-25.0.4.tgz", - "integrity": "sha512-L92Vz9WUZXDnlQQl3EwbypJR4+DM2EbsO+/KOcEkP4Mc6Ct453EeDB2uH9lgRwj4w5yflgNpq9pHOiY8aoUXBQ==", + "node_modules/@istanbuljs/load-nyc-config/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, "dependencies": { - "@rollup/pluginutils": "^5.0.1", - "commondir": "^1.0.1", - "estree-walker": "^2.0.2", - "glob": "^8.0.3", - "is-reference": "1.2.1", - "magic-string": "^0.27.0" + "p-try": "^2.0.0" }, "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "rollup": "^2.68.0||^3.0.0" + "node": ">=6" }, - "peerDependenciesMeta": { - "rollup": { - "optional": true - } + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@rollup/plugin-commonjs/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "node_modules/@istanbuljs/load-nyc-config/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dev": true, "dependencies": { - "balanced-match": "^1.0.0" + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/@rollup/plugin-commonjs/node_modules/glob": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", - "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "node_modules/@istanbuljs/load-nyc-config/node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^5.0.1", - "once": "^1.3.0" - }, "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">=8" } }, - "node_modules/@rollup/plugin-commonjs/node_modules/magic-string": { - "version": "0.27.0", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.27.0.tgz", - "integrity": "sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA==", + "node_modules/@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", "dev": true, - "dependencies": { - "@jridgewell/sourcemap-codec": "^1.4.13" - }, "engines": { - "node": ">=12" + "node": ">=8" } }, - "node_modules/@rollup/plugin-commonjs/node_modules/minimatch": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "node_modules/@jest/console": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.7.0.tgz", + "integrity": "sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==", "dev": true, "dependencies": { - "brace-expansion": "^2.0.1" + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "slash": "^3.0.0" }, "engines": { - "node": ">=10" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@rollup/plugin-node-resolve": { - "version": "15.2.1", - "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-15.2.1.tgz", - "integrity": "sha512-nsbUg588+GDSu8/NS8T4UAshO6xeaOfINNuXeVHcKV02LJtoRaM1SiOacClw4kws1SFiNhdLGxlbMY9ga/zs/w==", + "node_modules/@jest/core": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.7.0.tgz", + "integrity": "sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==", "dev": true, "dependencies": { - "@rollup/pluginutils": "^5.0.1", - "@types/resolve": "1.20.2", - "deepmerge": "^4.2.2", - "is-builtin-module": "^3.2.1", - "is-module": "^1.0.0", - "resolve": "^1.22.1" - }, - "engines": { - "node": ">=14.0.0" + "@jest/console": "^29.7.0", + "@jest/reporters": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "jest-changed-files": "^29.7.0", + "jest-config": "^29.7.0", + "jest-haste-map": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-resolve-dependencies": "^29.7.0", + "jest-runner": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "jest-watcher": "^29.7.0", + "micromatch": "^4.0.4", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" }, "peerDependencies": { - "rollup": "^2.78.0||^3.0.0" + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" }, "peerDependenciesMeta": { - "rollup": { + "node-notifier": { "optional": true } } }, - "node_modules/@rollup/pluginutils": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.0.4.tgz", - "integrity": "sha512-0KJnIoRI8A+a1dqOYLxH8vBf8bphDmty5QvIm2hqm7oFCFYKCAZWWd2hXgMibaPsNDhI0AtpYfQZJG47pt/k4g==", + "node_modules/@jest/core/node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", "dev": true, "dependencies": { - "@types/estree": "^1.0.0", - "estree-walker": "^2.0.2", - "picomatch": "^2.3.1" + "type-fest": "^0.21.3" }, "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "rollup": "^1.20.0||^2.0.0||^3.0.0" + "node": ">=8" }, - "peerDependenciesMeta": { - "rollup": { - "optional": true - } + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@trivago/prettier-plugin-sort-imports": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@trivago/prettier-plugin-sort-imports/-/prettier-plugin-sort-imports-4.2.0.tgz", - "integrity": "sha512-YBepjbt+ZNBVmN3ev1amQH3lWCmHyt5qTbLCp/syXJRu/Kw2koXh44qayB1gMRxcL/gV8egmjN5xWSrYyfUtyw==", + "node_modules/@jest/core/node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", "dev": true, - "dependencies": { - "@babel/generator": "7.17.7", - "@babel/parser": "^7.20.5", - "@babel/traverse": "7.17.3", - "@babel/types": "7.17.0", - "javascript-natural-sort": "0.7.1", - "lodash": "^4.17.21" - }, - "peerDependencies": { - "@vue/compiler-sfc": "3.x", - "prettier": "2.x - 3.x" + "engines": { + "node": ">=10" }, - "peerDependenciesMeta": { - "@vue/compiler-sfc": { - "optional": true - } + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@tsconfig/node10": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", - "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==", - "dev": true - }, - "node_modules/@tsconfig/node12": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", - "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", - "dev": true - }, - "node_modules/@tsconfig/node14": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", - "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", - "dev": true - }, - "node_modules/@tsconfig/node16": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", - "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", - "dev": true - }, - "node_modules/@types/estree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.1.tgz", - "integrity": "sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA==", - "dev": true - }, - "node_modules/@types/figlet": { - "version": "1.5.6", - "resolved": "https://registry.npmjs.org/@types/figlet/-/figlet-1.5.6.tgz", - "integrity": "sha512-AOdn9cKJGXpqfHeif16xeGMwWefB4nsOyxkdRMpc+PEP3nUxzu3psJfIqhjrCNW4Sejt5i6rISWmEwK0sw03mA==", - "dev": true - }, - "node_modules/@types/json-schema": { - "version": "7.0.12", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.12.tgz", - "integrity": "sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==", - "dev": true - }, - "node_modules/@types/node": { - "version": "20.5.9", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.5.9.tgz", - "integrity": "sha512-PcGNd//40kHAS3sTlzKB9C9XL4K0sTup8nbG5lC14kzEteTNuAFh9u5nA0o5TWnSG2r/JNPRXFVcHJIIeRlmqQ==", - "dev": true - }, - "node_modules/@types/prompts": { - "version": "2.4.4", - "resolved": "https://registry.npmjs.org/@types/prompts/-/prompts-2.4.4.tgz", - "integrity": "sha512-p5N9uoTH76lLvSAaYSZtBCdEXzpOOufsRjnhjVSrZGXikVGHX9+cc9ERtHRV4hvBKHyZb1bg4K+56Bd2TqUn4A==", + "node_modules/@jest/environment": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.7.0.tgz", + "integrity": "sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==", "dev": true, "dependencies": { + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", "@types/node": "*", - "kleur": "^3.0.3" + "jest-mock": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@types/resolve": { - "version": "1.20.2", - "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.20.2.tgz", - "integrity": "sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==", - "dev": true - }, - "node_modules/@types/semver": { - "version": "7.5.1", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.1.tgz", - "integrity": "sha512-cJRQXpObxfNKkFAZbJl2yjWtJCqELQIdShsogr1d2MilP8dKD9TE/nEKHkJgUNHdGKCQaf9HbIynuV2csLGVLg==", - "dev": true - }, - "node_modules/@typescript-eslint/eslint-plugin": { - "version": "6.6.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.6.0.tgz", - "integrity": "sha512-CW9YDGTQnNYMIo5lMeuiIG08p4E0cXrXTbcZ2saT/ETE7dWUrNxlijsQeU04qAAKkILiLzdQz+cGFxCJjaZUmA==", + "node_modules/@jest/expect": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.7.0.tgz", + "integrity": "sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==", "dev": true, "dependencies": { - "@eslint-community/regexpp": "^4.5.1", - "@typescript-eslint/scope-manager": "6.6.0", - "@typescript-eslint/type-utils": "6.6.0", - "@typescript-eslint/utils": "6.6.0", - "@typescript-eslint/visitor-keys": "6.6.0", - "debug": "^4.3.4", - "graphemer": "^1.4.0", - "ignore": "^5.2.4", - "natural-compare": "^1.4.0", - "semver": "^7.5.4", - "ts-api-utils": "^1.0.1" + "expect": "^29.7.0", + "jest-snapshot": "^29.7.0" }, "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "@typescript-eslint/parser": "^6.0.0 || ^6.0.0-alpha", - "eslint": "^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@typescript-eslint/parser": { - "version": "6.6.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.6.0.tgz", - "integrity": "sha512-setq5aJgUwtzGrhW177/i+DMLqBaJbdwGj2CPIVFFLE0NCliy5ujIdLHd2D1ysmlmsjdL2GWW+hR85neEfc12w==", + "node_modules/@jest/expect-utils": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.7.0.tgz", + "integrity": "sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "6.6.0", - "@typescript-eslint/types": "6.6.0", - "@typescript-eslint/typescript-estree": "6.6.0", - "@typescript-eslint/visitor-keys": "6.6.0", - "debug": "^4.3.4" + "jest-get-type": "^29.6.3" }, "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@typescript-eslint/scope-manager": { - "version": "6.6.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.6.0.tgz", - "integrity": "sha512-pT08u5W/GT4KjPUmEtc2kSYvrH8x89cVzkA0Sy2aaOUIw6YxOIjA8ilwLr/1fLjOedX1QAuBpG9XggWqIIfERw==", + "node_modules/@jest/fake-timers": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.7.0.tgz", + "integrity": "sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==", "dev": true, "dependencies": { - "@typescript-eslint/types": "6.6.0", - "@typescript-eslint/visitor-keys": "6.6.0" + "@jest/types": "^29.6.3", + "@sinonjs/fake-timers": "^10.0.2", + "@types/node": "*", + "jest-message-util": "^29.7.0", + "jest-mock": "^29.7.0", + "jest-util": "^29.7.0" }, "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@typescript-eslint/type-utils": { - "version": "6.6.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.6.0.tgz", - "integrity": "sha512-8m16fwAcEnQc69IpeDyokNO+D5spo0w1jepWWY2Q6y5ZKNuj5EhVQXjtVAeDDqvW6Yg7dhclbsz6rTtOvcwpHg==", + "node_modules/@jest/globals": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.7.0.tgz", + "integrity": "sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==", "dev": true, "dependencies": { - "@typescript-eslint/typescript-estree": "6.6.0", - "@typescript-eslint/utils": "6.6.0", - "debug": "^4.3.4", - "ts-api-utils": "^1.0.1" + "@jest/environment": "^29.7.0", + "@jest/expect": "^29.7.0", + "@jest/types": "^29.6.3", + "jest-mock": "^29.7.0" }, "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/reporters": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.7.0.tgz", + "integrity": "sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==", + "dev": true, + "dependencies": { + "@bcoe/v8-coverage": "^0.2.3", + "@jest/console": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@jridgewell/trace-mapping": "^0.3.18", + "@types/node": "*", + "chalk": "^4.0.0", + "collect-v8-coverage": "^1.0.0", + "exit": "^0.1.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-instrument": "^6.0.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.1.3", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "jest-worker": "^29.7.0", + "slash": "^3.0.0", + "string-length": "^4.0.1", + "strip-ansi": "^6.0.0", + "v8-to-istanbul": "^9.0.1" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" }, "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0" + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" }, "peerDependenciesMeta": { - "typescript": { + "node-notifier": { "optional": true } } }, - "node_modules/@typescript-eslint/types": { - "version": "6.6.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.6.0.tgz", - "integrity": "sha512-CB6QpJQ6BAHlJXdwUmiaXDBmTqIE2bzGTDLADgvqtHWuhfNP3rAOK7kAgRMAET5rDRr9Utt+qAzRBdu3AhR3sg==", + "node_modules/@jest/reporters/node_modules/@jridgewell/trace-mapping": { + "version": "0.3.19", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz", + "integrity": "sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==", "dev": true, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" } }, - "node_modules/@typescript-eslint/typescript-estree": { - "version": "6.6.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.6.0.tgz", - "integrity": "sha512-hMcTQ6Al8MP2E6JKBAaSxSVw5bDhdmbCEhGW/V8QXkb9oNsFkA4SBuOMYVPxD3jbtQ4R/vSODBsr76R6fP3tbA==", + "node_modules/@jest/schemas": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", + "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", "dev": true, "dependencies": { - "@typescript-eslint/types": "6.6.0", - "@typescript-eslint/visitor-keys": "6.6.0", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "semver": "^7.5.4", - "ts-api-utils": "^1.0.1" + "@sinclair/typebox": "^0.27.8" }, "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@typescript-eslint/utils": { - "version": "6.6.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.6.0.tgz", - "integrity": "sha512-mPHFoNa2bPIWWglWYdR0QfY9GN0CfvvXX1Sv6DlSTive3jlMTUy+an67//Gysc+0Me9pjitrq0LJp0nGtLgftw==", + "node_modules/@jest/source-map": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.6.3.tgz", + "integrity": "sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==", "dev": true, "dependencies": { - "@eslint-community/eslint-utils": "^4.4.0", - "@types/json-schema": "^7.0.12", - "@types/semver": "^7.5.0", - "@typescript-eslint/scope-manager": "6.6.0", - "@typescript-eslint/types": "6.6.0", - "@typescript-eslint/typescript-estree": "6.6.0", - "semver": "^7.5.4" + "@jridgewell/trace-mapping": "^0.3.18", + "callsites": "^3.0.0", + "graceful-fs": "^4.2.9" }, "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@typescript-eslint/visitor-keys": { - "version": "6.6.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.6.0.tgz", - "integrity": "sha512-L61uJT26cMOfFQ+lMZKoJNbAEckLe539VhTxiGHrWl5XSKQgA0RTBZJW2HFPy5T0ZvPVSD93QsrTKDkfNwJGyQ==", + "node_modules/@jest/source-map/node_modules/@jridgewell/trace-mapping": { + "version": "0.3.19", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz", + "integrity": "sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==", "dev": true, "dependencies": { - "@typescript-eslint/types": "6.6.0", - "eslint-visitor-keys": "^3.4.1" - }, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" } }, - "node_modules/acorn": { - "version": "8.10.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", - "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", + "node_modules/@jest/test-result": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.7.0.tgz", + "integrity": "sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==", "dev": true, - "bin": { - "acorn": "bin/acorn" + "dependencies": { + "@jest/console": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" }, "engines": { - "node": ">=0.4.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "node_modules/@jest/test-sequencer": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz", + "integrity": "sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==", "dev": true, - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + "dependencies": { + "@jest/test-result": "^29.7.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/acorn-walk": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", - "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", + "node_modules/@jest/transform": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz", + "integrity": "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==", "dev": true, + "dependencies": { + "@babel/core": "^7.11.6", + "@jest/types": "^29.6.3", + "@jridgewell/trace-mapping": "^0.3.18", + "babel-plugin-istanbul": "^6.1.1", + "chalk": "^4.0.0", + "convert-source-map": "^2.0.0", + "fast-json-stable-stringify": "^2.1.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.7.0", + "micromatch": "^4.0.4", + "pirates": "^4.0.4", + "slash": "^3.0.0", + "write-file-atomic": "^4.0.2" + }, "engines": { - "node": ">=0.4.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "node_modules/@jest/transform/node_modules/@jridgewell/trace-mapping": { + "version": "0.3.19", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz", + "integrity": "sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==", "dev": true, "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" } }, - "node_modules/ansi-escapes": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-5.0.0.tgz", - "integrity": "sha512-5GFMVX8HqE/TB+FuBJGuO5XG0WrsA6ptUqoODaT/n9mmUaZFkqnBueB4leqGBCmrUHnCnC4PCZTCd0E7QQ83bA==", + "node_modules/@jest/types": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", + "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", "dev": true, "dependencies": { - "type-fest": "^1.0.2" + "@jest/schemas": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" }, "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/ansi-escapes/node_modules/type-fest": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", - "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", + "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", "dev": true, - "engines": { - "node": ">=10" + "dependencies": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, "engines": { - "node": ">=8" + "node": ">=6.0.0" } }, - "node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", + "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "node": ">=6.0.0" } }, - "node_modules/arg": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", - "dev": true - }, - "node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "node_modules/array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "node_modules/@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", "dev": true, "engines": { - "node": ">=8" + "node": ">=6.0.0" } }, - "node_modules/async": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", - "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==", - "dev": true - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", "dev": true }, - "node_modules/base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/bl": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-5.1.0.tgz", - "integrity": "sha512-tv1ZJHLfTDnXE6tMHv73YgSJaWR2AFuPwMntBe7XL/GBFHnT0CLnsHMogfk5+GzCDC5ZWarSCYaIGATZt9dNsQ==", - "dependencies": { - "buffer": "^6.0.3", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - } - }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", "dev": true, "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" } }, - "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", "dev": true, "dependencies": { - "fill-range": "^7.0.1" + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" }, "engines": { - "node": ">=8" - } - }, - "node_modules/buffer": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", - "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.2.1" + "node": ">= 8" } }, - "node_modules/builtin-modules": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", - "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==", + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", "dev": true, "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">= 8" } }, - "node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", "dev": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, "engines": { - "node": ">=6" + "node": ">= 8" } }, - "node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/@rollup/plugin-commonjs": { + "version": "25.0.4", + "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-25.0.4.tgz", + "integrity": "sha512-L92Vz9WUZXDnlQQl3EwbypJR4+DM2EbsO+/KOcEkP4Mc6Ct453EeDB2uH9lgRwj4w5yflgNpq9pHOiY8aoUXBQ==", "dev": true, "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "@rollup/pluginutils": "^5.0.1", + "commondir": "^1.0.1", + "estree-walker": "^2.0.2", + "glob": "^8.0.3", + "is-reference": "1.2.1", + "magic-string": "^0.27.0" }, "engines": { - "node": ">=10" + "node": ">=14.0.0" }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/cli-cursor": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-4.0.0.tgz", - "integrity": "sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==", - "dependencies": { - "restore-cursor": "^4.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "peerDependencies": { + "rollup": "^2.68.0||^3.0.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependenciesMeta": { + "rollup": { + "optional": true + } } }, - "node_modules/cli-spinners": { - "version": "2.9.1", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.1.tgz", - "integrity": "sha512-jHgecW0pxkonBJdrKsqxgRX9AcG+u/5k0Q7WPDfi8AogLAdwxEkyYYNWwZ5GvVFoFx2uiY1eNcSK00fh+1+FyQ==", - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node_modules/@rollup/plugin-commonjs/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" } }, - "node_modules/cli-truncate": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-3.1.0.tgz", - "integrity": "sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA==", + "node_modules/@rollup/plugin-commonjs/node_modules/glob": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", "dev": true, "dependencies": { - "slice-ansi": "^5.0.0", - "string-width": "^5.0.0" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node": ">=12" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/cli-truncate/node_modules/ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "node_modules/@rollup/plugin-commonjs/node_modules/magic-string": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.27.0.tgz", + "integrity": "sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA==", "dev": true, + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.4.13" + }, "engines": { "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" } }, - "node_modules/cli-truncate/node_modules/emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "dev": true - }, - "node_modules/cli-truncate/node_modules/string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "node_modules/@rollup/plugin-commonjs/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", "dev": true, "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" + "brace-expansion": "^2.0.1" }, "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=10" } }, - "node_modules/cli-truncate/node_modules/strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "node_modules/@rollup/plugin-node-resolve": { + "version": "15.2.1", + "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-15.2.1.tgz", + "integrity": "sha512-nsbUg588+GDSu8/NS8T4UAshO6xeaOfINNuXeVHcKV02LJtoRaM1SiOacClw4kws1SFiNhdLGxlbMY9ga/zs/w==", "dev": true, "dependencies": { - "ansi-regex": "^6.0.1" + "@rollup/pluginutils": "^5.0.1", + "@types/resolve": "1.20.2", + "deepmerge": "^4.2.2", + "is-builtin-module": "^3.2.1", + "is-module": "^1.0.0", + "resolve": "^1.22.1" }, "engines": { - "node": ">=12" + "node": ">=14.0.0" }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" + "peerDependencies": { + "rollup": "^2.78.0||^3.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } } }, - "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "node_modules/@rollup/pluginutils": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.0.4.tgz", + "integrity": "sha512-0KJnIoRI8A+a1dqOYLxH8vBf8bphDmty5QvIm2hqm7oFCFYKCAZWWd2hXgMibaPsNDhI0AtpYfQZJG47pt/k4g==", "dev": true, "dependencies": { - "color-name": "~1.1.4" + "@types/estree": "^1.0.0", + "estree-walker": "^2.0.2", + "picomatch": "^2.3.1" }, "engines": { - "node": ">=7.0.0" + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } } }, - "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/colorette": { - "version": "2.0.20", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", - "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", + "node_modules/@sinclair/typebox": { + "version": "0.27.8", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", + "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", "dev": true }, - "node_modules/commander": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-11.0.0.tgz", - "integrity": "sha512-9HMlXtt/BNoYr8ooyjjNRdIilOTkVJXB+GhxMTtOKwk0R4j4lS4NpjuqmRxroBfnfTSHQIHQB7wryHhXarNjmQ==", - "engines": { - "node": ">=16" + "node_modules/@sinonjs/commons": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.0.tgz", + "integrity": "sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA==", + "dev": true, + "dependencies": { + "type-detect": "4.0.8" } }, - "node_modules/commondir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", - "dev": true - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true - }, - "node_modules/create-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", - "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", - "dev": true - }, - "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "node_modules/@sinonjs/fake-timers": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", + "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", + "dev": true, "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" + "@sinonjs/commons": "^3.0.0" } }, - "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "node_modules/@trivago/prettier-plugin-sort-imports": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@trivago/prettier-plugin-sort-imports/-/prettier-plugin-sort-imports-4.2.0.tgz", + "integrity": "sha512-YBepjbt+ZNBVmN3ev1amQH3lWCmHyt5qTbLCp/syXJRu/Kw2koXh44qayB1gMRxcL/gV8egmjN5xWSrYyfUtyw==", "dev": true, "dependencies": { - "ms": "2.1.2" + "@babel/generator": "7.17.7", + "@babel/parser": "^7.20.5", + "@babel/traverse": "7.17.3", + "@babel/types": "7.17.0", + "javascript-natural-sort": "0.7.1", + "lodash": "^4.17.21" }, - "engines": { - "node": ">=6.0" + "peerDependencies": { + "@vue/compiler-sfc": "3.x", + "prettier": "2.x - 3.x" }, "peerDependenciesMeta": { - "supports-color": { + "@vue/compiler-sfc": { "optional": true } } }, - "node_modules/deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "node_modules/@tsconfig/node10": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", + "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==", "dev": true }, - "node_modules/deepmerge": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", - "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } + "node_modules/@tsconfig/node12": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", + "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", + "dev": true }, - "node_modules/diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "node_modules/@tsconfig/node14": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", + "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", + "dev": true + }, + "node_modules/@tsconfig/node16": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", + "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", + "dev": true + }, + "node_modules/@types/babel__core": { + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.2.tgz", + "integrity": "sha512-pNpr1T1xLUc2l3xJKuPtsEky3ybxN3m4fJkknfIpTCTfIZCDW57oAg+EfCgIIp2rvCe0Wn++/FfodDS4YXxBwA==", "dev": true, - "engines": { - "node": ">=0.3.1" + "dependencies": { + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" } }, - "node_modules/dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "node_modules/@types/babel__core/node_modules/@babel/types": { + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.0.tgz", + "integrity": "sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==", "dev": true, "dependencies": { - "path-type": "^4.0.0" + "@babel/helper-string-parser": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.20", + "to-fast-properties": "^2.0.0" }, "engines": { - "node": ">=8" + "node": ">=6.9.0" + } + }, + "node_modules/@types/babel__generator": { + "version": "7.6.5", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.5.tgz", + "integrity": "sha512-h9yIuWbJKdOPLJTbmSpPzkF67e659PbQDba7ifWm5BJ8xTv+sDmS7rFmywkWOvXedGTivCdeGSIIX8WLcRTz8w==", + "dev": true, + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__template": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.2.tgz", + "integrity": "sha512-/AVzPICMhMOMYoSx9MoKpGDKdBRsIXMNByh1PXSZoa+v6ZoLa8xxtsT/uLQ/NJm0XVAWl/BvId4MlDeXJaeIZQ==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.2.tgz", + "integrity": "sha512-ojlGK1Hsfce93J0+kn3H5R73elidKUaZonirN33GSmgTUMpzI/MIFfSpF3haANe3G1bEBS9/9/QEqwTzwqFsKw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.20.7" + } + }, + "node_modules/@types/babel__traverse/node_modules/@babel/types": { + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.0.tgz", + "integrity": "sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==", + "dev": true, + "dependencies": { + "@babel/helper-string-parser": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.20", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@types/estree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.1.tgz", + "integrity": "sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA==", + "dev": true + }, + "node_modules/@types/figlet": { + "version": "1.5.6", + "resolved": "https://registry.npmjs.org/@types/figlet/-/figlet-1.5.6.tgz", + "integrity": "sha512-AOdn9cKJGXpqfHeif16xeGMwWefB4nsOyxkdRMpc+PEP3nUxzu3psJfIqhjrCNW4Sejt5i6rISWmEwK0sw03mA==", + "dev": true + }, + "node_modules/@types/graceful-fs": { + "version": "4.1.7", + "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.7.tgz", + "integrity": "sha512-MhzcwU8aUygZroVwL2jeYk6JisJrPl/oov/gsgGCue9mkgl9wjGbzReYQClxiUgFDnib9FuHqTndccKeZKxTRw==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/istanbul-lib-coverage": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", + "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==", + "dev": true + }, + "node_modules/@types/istanbul-lib-report": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", + "integrity": "sha512-gPQuzaPR5h/djlAv2apEG1HVOyj1IUs7GpfMZixU0/0KXT3pm64ylHuMUI1/Akh+sq/iikxg6Z2j+fcMDXaaTQ==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "*" + } + }, + "node_modules/@types/istanbul-reports": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.2.tgz", + "integrity": "sha512-kv43F9eb3Lhj+lr/Hn6OcLCs/sSM8bt+fIaP11rCYngfV6NVjzWXJ17owQtDQTL9tQ8WSLUrGsSJ6rJz0F1w1A==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-report": "*" + } + }, + "node_modules/@types/json-schema": { + "version": "7.0.12", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.12.tgz", + "integrity": "sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==", + "dev": true + }, + "node_modules/@types/node": { + "version": "20.5.9", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.5.9.tgz", + "integrity": "sha512-PcGNd//40kHAS3sTlzKB9C9XL4K0sTup8nbG5lC14kzEteTNuAFh9u5nA0o5TWnSG2r/JNPRXFVcHJIIeRlmqQ==", + "dev": true + }, + "node_modules/@types/prompts": { + "version": "2.4.4", + "resolved": "https://registry.npmjs.org/@types/prompts/-/prompts-2.4.4.tgz", + "integrity": "sha512-p5N9uoTH76lLvSAaYSZtBCdEXzpOOufsRjnhjVSrZGXikVGHX9+cc9ERtHRV4hvBKHyZb1bg4K+56Bd2TqUn4A==", + "dev": true, + "dependencies": { + "@types/node": "*", + "kleur": "^3.0.3" + } + }, + "node_modules/@types/resolve": { + "version": "1.20.2", + "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.20.2.tgz", + "integrity": "sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==", + "dev": true + }, + "node_modules/@types/semver": { + "version": "7.5.1", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.1.tgz", + "integrity": "sha512-cJRQXpObxfNKkFAZbJl2yjWtJCqELQIdShsogr1d2MilP8dKD9TE/nEKHkJgUNHdGKCQaf9HbIynuV2csLGVLg==", + "dev": true + }, + "node_modules/@types/stack-utils": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", + "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==", + "dev": true + }, + "node_modules/@types/yargs": { + "version": "17.0.26", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.26.tgz", + "integrity": "sha512-Y3vDy2X6zw/ZCumcwLpdhM5L7jmyGpmBCTYMHDLqT2IKVMYRRLdv6ZakA+wxhra6Z/3bwhNbNl9bDGXaFU+6rw==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@types/yargs-parser": { + "version": "21.0.1", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.1.tgz", + "integrity": "sha512-axdPBuLuEJt0c4yI5OZssC19K2Mq1uKdrfZBzuxLvaztgqUtFYZUNw7lETExPYJR9jdEoIg4mb7RQKRQzOkeGQ==", + "dev": true + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.6.0.tgz", + "integrity": "sha512-CW9YDGTQnNYMIo5lMeuiIG08p4E0cXrXTbcZ2saT/ETE7dWUrNxlijsQeU04qAAKkILiLzdQz+cGFxCJjaZUmA==", + "dev": true, + "dependencies": { + "@eslint-community/regexpp": "^4.5.1", + "@typescript-eslint/scope-manager": "6.6.0", + "@typescript-eslint/type-utils": "6.6.0", + "@typescript-eslint/utils": "6.6.0", + "@typescript-eslint/visitor-keys": "6.6.0", + "debug": "^4.3.4", + "graphemer": "^1.4.0", + "ignore": "^5.2.4", + "natural-compare": "^1.4.0", + "semver": "^7.5.4", + "ts-api-utils": "^1.0.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^6.0.0 || ^6.0.0-alpha", + "eslint": "^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.6.0.tgz", + "integrity": "sha512-setq5aJgUwtzGrhW177/i+DMLqBaJbdwGj2CPIVFFLE0NCliy5ujIdLHd2D1ysmlmsjdL2GWW+hR85neEfc12w==", + "dev": true, + "dependencies": { + "@typescript-eslint/scope-manager": "6.6.0", + "@typescript-eslint/types": "6.6.0", + "@typescript-eslint/typescript-estree": "6.6.0", + "@typescript-eslint/visitor-keys": "6.6.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.6.0.tgz", + "integrity": "sha512-pT08u5W/GT4KjPUmEtc2kSYvrH8x89cVzkA0Sy2aaOUIw6YxOIjA8ilwLr/1fLjOedX1QAuBpG9XggWqIIfERw==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "6.6.0", + "@typescript-eslint/visitor-keys": "6.6.0" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.6.0.tgz", + "integrity": "sha512-8m16fwAcEnQc69IpeDyokNO+D5spo0w1jepWWY2Q6y5ZKNuj5EhVQXjtVAeDDqvW6Yg7dhclbsz6rTtOvcwpHg==", + "dev": true, + "dependencies": { + "@typescript-eslint/typescript-estree": "6.6.0", + "@typescript-eslint/utils": "6.6.0", + "debug": "^4.3.4", + "ts-api-utils": "^1.0.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/types": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.6.0.tgz", + "integrity": "sha512-CB6QpJQ6BAHlJXdwUmiaXDBmTqIE2bzGTDLADgvqtHWuhfNP3rAOK7kAgRMAET5rDRr9Utt+qAzRBdu3AhR3sg==", + "dev": true, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.6.0.tgz", + "integrity": "sha512-hMcTQ6Al8MP2E6JKBAaSxSVw5bDhdmbCEhGW/V8QXkb9oNsFkA4SBuOMYVPxD3jbtQ4R/vSODBsr76R6fP3tbA==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "6.6.0", + "@typescript-eslint/visitor-keys": "6.6.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.5.4", + "ts-api-utils": "^1.0.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/utils": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.6.0.tgz", + "integrity": "sha512-mPHFoNa2bPIWWglWYdR0QfY9GN0CfvvXX1Sv6DlSTive3jlMTUy+an67//Gysc+0Me9pjitrq0LJp0nGtLgftw==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.4.0", + "@types/json-schema": "^7.0.12", + "@types/semver": "^7.5.0", + "@typescript-eslint/scope-manager": "6.6.0", + "@typescript-eslint/types": "6.6.0", + "@typescript-eslint/typescript-estree": "6.6.0", + "semver": "^7.5.4" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.6.0.tgz", + "integrity": "sha512-L61uJT26cMOfFQ+lMZKoJNbAEckLe539VhTxiGHrWl5XSKQgA0RTBZJW2HFPy5T0ZvPVSD93QsrTKDkfNwJGyQ==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "6.6.0", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/acorn": { + "version": "8.10.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", + "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/acorn-walk": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", + "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ansi-escapes": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-5.0.0.tgz", + "integrity": "sha512-5GFMVX8HqE/TB+FuBJGuO5XG0WrsA6ptUqoODaT/n9mmUaZFkqnBueB4leqGBCmrUHnCnC4PCZTCd0E7QQ83bA==", + "dev": true, + "dependencies": { + "type-fest": "^1.0.2" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-escapes/node_modules/type-fest": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", + "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "dev": true + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/async": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", + "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==", + "dev": true + }, + "node_modules/babel-jest": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz", + "integrity": "sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==", + "dev": true, + "dependencies": { + "@jest/transform": "^29.7.0", + "@types/babel__core": "^7.1.14", + "babel-plugin-istanbul": "^6.1.1", + "babel-preset-jest": "^29.6.3", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.8.0" + } + }, + "node_modules/babel-plugin-istanbul": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", + "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-instrument": "^5.0.4", + "test-exclude": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-plugin-istanbul/node_modules/istanbul-lib-instrument": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", + "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", + "dev": true, + "dependencies": { + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-plugin-istanbul/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/babel-plugin-jest-hoist": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz", + "integrity": "sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==", + "dev": true, + "dependencies": { + "@babel/template": "^7.3.3", + "@babel/types": "^7.3.3", + "@types/babel__core": "^7.1.14", + "@types/babel__traverse": "^7.0.6" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/babel-preset-current-node-syntax": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", + "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", + "dev": true, + "dependencies": { + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-bigint": "^7.8.3", + "@babel/plugin-syntax-class-properties": "^7.8.3", + "@babel/plugin-syntax-import-meta": "^7.8.3", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.8.3", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-top-level-await": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/babel-preset-jest": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz", + "integrity": "sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==", + "dev": true, + "dependencies": { + "babel-plugin-jest-hoist": "^29.6.3", + "babel-preset-current-node-syntax": "^1.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/bl": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-5.1.0.tgz", + "integrity": "sha512-tv1ZJHLfTDnXE6tMHv73YgSJaWR2AFuPwMntBe7XL/GBFHnT0CLnsHMogfk5+GzCDC5ZWarSCYaIGATZt9dNsQ==", + "dependencies": { + "buffer": "^6.0.3", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.22.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.1.tgz", + "integrity": "sha512-FEVc202+2iuClEhZhrWy6ZiAcRLvNMyYcxZ8raemul1DYVOVdFsbqckWLdsixQZCpJlwe77Z3UTalE7jsjnKfQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "caniuse-lite": "^1.0.30001541", + "electron-to-chromium": "^1.4.535", + "node-releases": "^2.0.13", + "update-browserslist-db": "^1.0.13" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/bs-logger": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz", + "integrity": "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==", + "dev": true, + "dependencies": { + "fast-json-stable-stringify": "2.x" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/bser": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", + "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", + "dev": true, + "dependencies": { + "node-int64": "^0.4.0" + } + }, + "node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true + }, + "node_modules/builtin-modules": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", + "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==", + "dev": true, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001546", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001546.tgz", + "integrity": "sha512-zvtSJwuQFpewSyRrI3AsftF6rM0X80mZkChIt1spBGEvRglCrjTniXvinc8JKRoqTwXAgvqTImaN9igfSMtUBw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ] + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/char-regex": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", + "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/ci-info": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", + "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "engines": { + "node": ">=8" + } + }, + "node_modules/cjs-module-lexer": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz", + "integrity": "sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==", + "dev": true + }, + "node_modules/cli-cursor": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-4.0.0.tgz", + "integrity": "sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==", + "dependencies": { + "restore-cursor": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-spinners": { + "version": "2.9.1", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.1.tgz", + "integrity": "sha512-jHgecW0pxkonBJdrKsqxgRX9AcG+u/5k0Q7WPDfi8AogLAdwxEkyYYNWwZ5GvVFoFx2uiY1eNcSK00fh+1+FyQ==", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-truncate": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-3.1.0.tgz", + "integrity": "sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA==", + "dev": true, + "dependencies": { + "slice-ansi": "^5.0.0", + "string-width": "^5.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-truncate/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/cli-truncate/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true + }, + "node_modules/cli-truncate/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-truncate/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/cliui/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/cliui/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", + "dev": true, + "engines": { + "iojs": ">= 1.0.0", + "node": ">= 0.12.0" + } + }, + "node_modules/collect-v8-coverage": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz", + "integrity": "sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==", + "dev": true + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/colorette": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", + "dev": true + }, + "node_modules/commander": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-11.0.0.tgz", + "integrity": "sha512-9HMlXtt/BNoYr8ooyjjNRdIilOTkVJXB+GhxMTtOKwk0R4j4lS4NpjuqmRxroBfnfTSHQIHQB7wryHhXarNjmQ==", + "engines": { + "node": ">=16" + } + }, + "node_modules/commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", + "dev": true + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true + }, + "node_modules/create-jest": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/create-jest/-/create-jest-29.7.0.tgz", + "integrity": "sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "jest-config": "^29.7.0", + "jest-util": "^29.7.0", + "prompts": "^2.0.1" + }, + "bin": { + "create-jest": "bin/create-jest.js" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", + "dev": true + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/dedent": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.5.1.tgz", + "integrity": "sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg==", + "dev": true, + "peerDependencies": { + "babel-plugin-macros": "^3.1.0" + }, + "peerDependenciesMeta": { + "babel-plugin-macros": { + "optional": true + } + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, + "node_modules/deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/detect-newline": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", + "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "dev": true, + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/diff-sequences": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", + "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", + "dev": true, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, "node_modules/doctrine": { @@ -1797,787 +3319,1707 @@ "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", "dev": true, "dependencies": { - "esutils": "^2.0.2" + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" + }, + "node_modules/electron-to-chromium": { + "version": "1.4.542", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.542.tgz", + "integrity": "sha512-6+cpa00G09N3sfh2joln4VUXHquWrOFx3FLZqiVQvl45+zS9DskDBTPvob+BhvFRmTBkyDSk0vvLMMRo/qc6mQ==", + "dev": true + }, + "node_modules/emittery": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz", + "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sindresorhus/emittery?sponsor=1" + } + }, + "node_modules/emoji-regex": { + "version": "10.2.1", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.2.1.tgz", + "integrity": "sha512-97g6QgOk8zlDRdgq1WxwgTMgEWGVAQvB5Fdpgc1MkNy56la5SKP9GsMXKDOdqwn90/41a8yPwIGk1Y6WVbeMQA==" + }, + "node_modules/eol": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/eol/-/eol-0.9.1.tgz", + "integrity": "sha512-Ds/TEoZjwggRoz/Q2O7SE3i4Jm66mqTDfmdHdq/7DKVk3bro9Q8h6WdXKdPqFLMoqxrDK5SVRzHVPOS6uuGtrg==", + "dev": true + }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/es-module-lexer": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.3.1.tgz", + "integrity": "sha512-JUFAyicQV9mXc3YRxPnDlrfBKpqt6hUYzz9/boprUJHs4e4KVr3XwOF70doO6gwXUor6EWZJAyWAfKki84t20Q==", + "dev": true + }, + "node_modules/esbuild": { + "version": "0.19.3", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.19.3.tgz", + "integrity": "sha512-UlJ1qUUA2jL2nNib1JTSkifQTcYTroFqRjwCFW4QYEKEsixXD5Tik9xML7zh2gTxkYTBKGHNH9y7txMwVyPbjw==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/android-arm": "0.19.3", + "@esbuild/android-arm64": "0.19.3", + "@esbuild/android-x64": "0.19.3", + "@esbuild/darwin-arm64": "0.19.3", + "@esbuild/darwin-x64": "0.19.3", + "@esbuild/freebsd-arm64": "0.19.3", + "@esbuild/freebsd-x64": "0.19.3", + "@esbuild/linux-arm": "0.19.3", + "@esbuild/linux-arm64": "0.19.3", + "@esbuild/linux-ia32": "0.19.3", + "@esbuild/linux-loong64": "0.19.3", + "@esbuild/linux-mips64el": "0.19.3", + "@esbuild/linux-ppc64": "0.19.3", + "@esbuild/linux-riscv64": "0.19.3", + "@esbuild/linux-s390x": "0.19.3", + "@esbuild/linux-x64": "0.19.3", + "@esbuild/netbsd-x64": "0.19.3", + "@esbuild/openbsd-x64": "0.19.3", + "@esbuild/sunos-x64": "0.19.3", + "@esbuild/win32-arm64": "0.19.3", + "@esbuild/win32-ia32": "0.19.3", + "@esbuild/win32-x64": "0.19.3" + } + }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint": { + "version": "8.48.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.48.0.tgz", + "integrity": "sha512-sb6DLeIuRXxeM1YljSe1KEx9/YYeZFQWcV8Rq9HfigmdDEugjLEVEa1ozDjL6YDjBpQHPJxJzze+alxi4T3OLg==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.2", + "@eslint/js": "8.48.0", + "@humanwhocodes/config-array": "^0.11.10", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.2.2", + "eslint-visitor-keys": "^3.4.3", + "espree": "^9.6.1", + "esquery": "^1.4.2", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-config-prettier": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.0.0.tgz", + "integrity": "sha512-IcJsTkJae2S35pRsRAwoCE+925rJJStOdkKnLVgtE+tEpqU0EVVM7OqrwxqgptKdX29NUwC82I5pXsGFIgSevw==", + "dev": true, + "bin": { + "eslint-config-prettier": "bin/cli.js" + }, + "peerDependencies": { + "eslint": ">=7.0.0" + } + }, + "node_modules/eslint-define-config": { + "version": "1.23.0", + "resolved": "https://registry.npmjs.org/eslint-define-config/-/eslint-define-config-1.23.0.tgz", + "integrity": "sha512-4mMyu0JuBkQHsCtR+42irIQdFLmLIW+pMAVcyOV/gZRL4O1R8iuH0eMG3oL3Cbi1eo9fDAfT5CIHVHgdyxcf6w==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/Shinigami92" + }, + { + "type": "paypal", + "url": "https://www.paypal.com/donate/?hosted_button_id=L7GY729FBKTZY" + } + ], + "engines": { + "node": "^16.13.0 || >=18.0.0", + "npm": ">=7.0.0", + "pnpm": ">= 8.6.0" + } + }, + "node_modules/eslint-scope": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/espree": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "dev": true, + "dependencies": { + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/esquery": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", + "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", + "dev": true, + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "dev": true + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eventemitter3": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", + "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", + "dev": true + }, + "node_modules/execa": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz", + "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==", + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^8.0.1", + "human-signals": "^5.0.0", + "is-stream": "^3.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^5.1.0", + "onetime": "^6.0.0", + "signal-exit": "^4.1.0", + "strip-final-newline": "^3.0.0" + }, + "engines": { + "node": ">=16.17" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/exit": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/expect": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/expect/-/expect-29.7.0.tgz", + "integrity": "sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==", + "dev": true, + "dependencies": { + "@jest/expect-utils": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "node_modules/fast-glob": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz", + "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true + }, + "node_modules/fastq": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", + "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", + "dev": true, + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/fb-watchman": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", + "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", + "dev": true, + "dependencies": { + "bser": "2.1.1" + } + }, + "node_modules/figlet": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/figlet/-/figlet-1.6.0.tgz", + "integrity": "sha512-31EQGhCEITv6+hi2ORRPyn3bulaV9Fl4xOdR169cBzH/n1UqcxsiSB/noo6SJdD7Kfb1Ljit+IgR1USvF/XbdA==", + "bin": { + "figlet": "bin/index.js" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat-cache": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.1.0.tgz", + "integrity": "sha512-OHx4Qwrrt0E4jEIcI5/Xb+f+QmJYNj2rrK8wiIdQOIrB9WrrJL8cjZvXdXuBTkkEwEqLycb5BeZDV1o2i9bTew==", + "dev": true, + "dependencies": { + "flatted": "^3.2.7", + "keyv": "^4.5.3", + "rimraf": "^3.0.2" }, "engines": { - "node": ">=6.0.0" + "node": ">=12.0.0" + } + }, + "node_modules/flatted": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", + "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", + "dev": true + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-package-type": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", + "dev": true, + "engines": { + "node": ">=8.0.0" } }, - "node_modules/eastasianwidth": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" - }, - "node_modules/emoji-regex": { - "version": "10.2.1", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.2.1.tgz", - "integrity": "sha512-97g6QgOk8zlDRdgq1WxwgTMgEWGVAQvB5Fdpgc1MkNy56la5SKP9GsMXKDOdqwn90/41a8yPwIGk1Y6WVbeMQA==" - }, - "node_modules/eol": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/eol/-/eol-0.9.1.tgz", - "integrity": "sha512-Ds/TEoZjwggRoz/Q2O7SE3i4Jm66mqTDfmdHdq/7DKVk3bro9Q8h6WdXKdPqFLMoqxrDK5SVRzHVPOS6uuGtrg==", - "dev": true + "node_modules/get-stdin": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-9.0.0.tgz", + "integrity": "sha512-dVKBjfWisLAicarI2Sf+JuBE/DghV4UzNAVe9yhEJuzeREd3JhOTE9cUaJTeSa77fsbQUK3pcOpJfM59+VKZaA==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "node_modules/es-module-lexer": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.3.1.tgz", - "integrity": "sha512-JUFAyicQV9mXc3YRxPnDlrfBKpqt6hUYzz9/boprUJHs4e4KVr3XwOF70doO6gwXUor6EWZJAyWAfKki84t20Q==", - "dev": true + "node_modules/get-stream": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz", + "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "node_modules/esbuild": { - "version": "0.19.3", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.19.3.tgz", - "integrity": "sha512-UlJ1qUUA2jL2nNib1JTSkifQTcYTroFqRjwCFW4QYEKEsixXD5Tik9xML7zh2gTxkYTBKGHNH9y7txMwVyPbjw==", + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "dev": true, - "hasInstallScript": true, - "bin": { - "esbuild": "bin/esbuild" + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" }, "engines": { - "node": ">=12" + "node": "*" }, - "optionalDependencies": { - "@esbuild/android-arm": "0.19.3", - "@esbuild/android-arm64": "0.19.3", - "@esbuild/android-x64": "0.19.3", - "@esbuild/darwin-arm64": "0.19.3", - "@esbuild/darwin-x64": "0.19.3", - "@esbuild/freebsd-arm64": "0.19.3", - "@esbuild/freebsd-x64": "0.19.3", - "@esbuild/linux-arm": "0.19.3", - "@esbuild/linux-arm64": "0.19.3", - "@esbuild/linux-ia32": "0.19.3", - "@esbuild/linux-loong64": "0.19.3", - "@esbuild/linux-mips64el": "0.19.3", - "@esbuild/linux-ppc64": "0.19.3", - "@esbuild/linux-riscv64": "0.19.3", - "@esbuild/linux-s390x": "0.19.3", - "@esbuild/linux-x64": "0.19.3", - "@esbuild/netbsd-x64": "0.19.3", - "@esbuild/openbsd-x64": "0.19.3", - "@esbuild/sunos-x64": "0.19.3", - "@esbuild/win32-arm64": "0.19.3", - "@esbuild/win32-ia32": "0.19.3", - "@esbuild/win32-x64": "0.19.3" + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/globals": { + "version": "13.21.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.21.0.tgz", + "integrity": "sha512-ybyme3s4yy/t/3s35bewwXKOf7cvzfreG2lH0lZl0JB7I4GxRP2ghxOK/Nb9EkRXdbBXZLfq/p/0W2JUONB/Gg==", "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, "engines": { - "node": ">=10" + "node": ">=8" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint": { - "version": "8.48.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.48.0.tgz", - "integrity": "sha512-sb6DLeIuRXxeM1YljSe1KEx9/YYeZFQWcV8Rq9HfigmdDEugjLEVEa1ozDjL6YDjBpQHPJxJzze+alxi4T3OLg==", + "node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", "dev": true, "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.6.1", - "@eslint/eslintrc": "^2.1.2", - "@eslint/js": "8.48.0", - "@humanwhocodes/config-array": "^0.11.10", - "@humanwhocodes/module-importer": "^1.0.1", - "@nodelib/fs.walk": "^1.2.8", - "ajv": "^6.12.4", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.3.2", - "doctrine": "^3.0.0", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.2.2", - "eslint-visitor-keys": "^3.4.3", - "espree": "^9.6.1", - "esquery": "^1.4.2", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "find-up": "^5.0.0", - "glob-parent": "^6.0.2", - "globals": "^13.19.0", - "graphemer": "^1.4.0", + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", "ignore": "^5.2.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "is-path-inside": "^3.0.3", - "js-yaml": "^4.1.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.1.2", - "natural-compare": "^1.4.0", - "optionator": "^0.9.3", - "strip-ansi": "^6.0.1", - "text-table": "^0.2.0" - }, - "bin": { - "eslint": "bin/eslint.js" + "merge2": "^1.4.1", + "slash": "^3.0.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">=10" }, "funding": { - "url": "https://opencollective.com/eslint" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint-config-prettier": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.0.0.tgz", - "integrity": "sha512-IcJsTkJae2S35pRsRAwoCE+925rJJStOdkKnLVgtE+tEpqU0EVVM7OqrwxqgptKdX29NUwC82I5pXsGFIgSevw==", + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true + }, + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true + }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", "dev": true, - "bin": { - "eslint-config-prettier": "bin/cli.js" + "dependencies": { + "function-bind": "^1.1.1" }, - "peerDependencies": { - "eslint": ">=7.0.0" + "engines": { + "node": ">= 0.4.0" } }, - "node_modules/eslint-define-config": { - "version": "1.23.0", - "resolved": "https://registry.npmjs.org/eslint-define-config/-/eslint-define-config-1.23.0.tgz", - "integrity": "sha512-4mMyu0JuBkQHsCtR+42irIQdFLmLIW+pMAVcyOV/gZRL4O1R8iuH0eMG3oL3Cbi1eo9fDAfT5CIHVHgdyxcf6w==", + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true + }, + "node_modules/human-signals": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz", + "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==", + "engines": { + "node": ">=16.17.0" + } + }, + "node_modules/husky": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/husky/-/husky-8.0.3.tgz", + "integrity": "sha512-+dQSyqPh4x1hlO1swXBiNb2HzTDN1I2IGLQx1GrBuiqFJfoMrnZWwVmatvSiO+Iz8fBUnf+lekwNo4c2LlXItg==", "dev": true, + "bin": { + "husky": "lib/bin.js" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/typicode" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", "funding": [ { "type": "github", - "url": "https://github.com/Shinigami92" + "url": "https://github.com/sponsors/feross" }, { - "type": "paypal", - "url": "https://www.paypal.com/donate/?hosted_button_id=L7GY729FBKTZY" + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" } - ], - "engines": { - "node": "^16.13.0 || >=18.0.0", - "npm": ">=7.0.0", - "pnpm": ">= 8.6.0" + ] + }, + "node_modules/ignore": { + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", + "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", + "dev": true, + "engines": { + "node": ">= 4" } }, - "node_modules/eslint-scope": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", - "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", "dev": true, "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">=6" }, "funding": { - "url": "https://opencollective.com/eslint" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint-visitor-keys": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "node_modules/import-local": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", + "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", "dev": true, + "dependencies": { + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + }, + "bin": { + "import-local-fixture": "fixtures/cli.js" + }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">=8" }, "funding": { - "url": "https://opencollective.com/eslint" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/espree": { - "version": "9.6.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", - "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", "dev": true, "dependencies": { - "acorn": "^8.9.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.4.1" + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "dev": true + }, + "node_modules/is-builtin-module": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.2.1.tgz", + "integrity": "sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==", + "dev": true, + "dependencies": { + "builtin-modules": "^3.3.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">=6" }, "funding": { - "url": "https://opencollective.com/eslint" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/esquery": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", - "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", + "node_modules/is-core-module": { + "version": "2.13.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz", + "integrity": "sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==", "dev": true, "dependencies": { - "estraverse": "^5.1.0" + "has": "^1.0.3" }, - "engines": { - "node": ">=0.10" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", "dev": true, - "dependencies": { - "estraverse": "^5.2.0" - }, "engines": { - "node": ">=4.0" + "node": ">=0.10.0" } }, - "node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "node_modules/is-fullwidth-code-point": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz", + "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==", "dev": true, "engines": { - "node": ">=4.0" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/estree-walker": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", - "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", - "dev": true - }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "node_modules/is-generator-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", + "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", "dev": true, "engines": { - "node": ">=0.10.0" + "node": ">=6" } }, - "node_modules/eventemitter3": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", - "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", - "dev": true - }, - "node_modules/execa": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz", - "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==", + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^8.0.1", - "human-signals": "^5.0.0", - "is-stream": "^3.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^5.1.0", - "onetime": "^6.0.0", - "signal-exit": "^4.1.0", - "strip-final-newline": "^3.0.0" + "is-extglob": "^2.1.1" }, "engines": { - "node": ">=16.17" + "node": ">=0.10.0" + } + }, + "node_modules/is-interactive": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-2.0.0.tgz", + "integrity": "sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==", + "engines": { + "node": ">=12" }, "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "node_modules/is-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", + "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==", "dev": true }, - "node_modules/fast-glob": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz", - "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==", + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true, - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - }, "engines": { - "node": ">=8.6.0" + "node": ">=0.12.0" } }, - "node_modules/fast-glob/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", "dev": true, - "dependencies": { - "is-glob": "^4.0.1" - }, "engines": { - "node": ">= 6" + "node": ">=8" } }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true - }, - "node_modules/fastq": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", - "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", + "node_modules/is-reference": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.2.1.tgz", + "integrity": "sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==", "dev": true, "dependencies": { - "reusify": "^1.0.4" + "@types/estree": "*" } }, - "node_modules/figlet": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/figlet/-/figlet-1.6.0.tgz", - "integrity": "sha512-31EQGhCEITv6+hi2ORRPyn3bulaV9Fl4xOdR169cBzH/n1UqcxsiSB/noo6SJdD7Kfb1Ljit+IgR1USvF/XbdA==", - "bin": { - "figlet": "bin/index.js" + "node_modules/is-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", + "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-unicode-supported": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-1.3.0.tgz", + "integrity": "sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==", + "engines": { + "node": ">=12" }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" + }, + "node_modules/istanbul-lib-coverage": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", + "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", + "dev": true, "engines": { - "node": ">= 0.4.0" + "node": ">=8" } }, - "node_modules/file-entry-cache": { + "node_modules/istanbul-lib-instrument": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.1.tgz", + "integrity": "sha512-EAMEJBsYuyyztxMxW3g7ugGPkrZsV57v0Hmv3mm1uQsmB+QnZuepg731CRaIgeUVSdmsTngOkSnauNF8p7FIhA==", "dev": true, "dependencies": { - "flat-cache": "^3.0.4" + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^7.5.4" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": ">=10" } }, - "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "node_modules/istanbul-lib-report": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", + "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", "dev": true, "dependencies": { - "to-regex-range": "^5.0.1" + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^4.0.0", + "supports-color": "^7.1.0" }, "engines": { - "node": ">=8" + "node": ">=10" } }, - "node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "node_modules/istanbul-lib-source-maps": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", + "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", "dev": true, "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" }, "engines": { "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/flat-cache": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.1.0.tgz", - "integrity": "sha512-OHx4Qwrrt0E4jEIcI5/Xb+f+QmJYNj2rrK8wiIdQOIrB9WrrJL8cjZvXdXuBTkkEwEqLycb5BeZDV1o2i9bTew==", + "node_modules/istanbul-lib-source-maps/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/istanbul-reports": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.6.tgz", + "integrity": "sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg==", "dev": true, "dependencies": { - "flatted": "^3.2.7", - "keyv": "^4.5.3", - "rimraf": "^3.0.2" + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" }, "engines": { - "node": ">=12.0.0" + "node": ">=8" } }, - "node_modules/flatted": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", - "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", - "dev": true - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "node_modules/javascript-natural-sort": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/javascript-natural-sort/-/javascript-natural-sort-0.7.1.tgz", + "integrity": "sha512-nO6jcEfZWQXDhOiBtG2KvKyEptz7RVbpGP4vTD2hLBdmNQSsCiicO2Ioinv6UI4y9ukqnBpy+XZ9H6uLNgJTlw==", "dev": true }, - "node_modules/fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "node_modules/jest": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest/-/jest-29.7.0.tgz", + "integrity": "sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==", "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], + "dependencies": { + "@jest/core": "^29.7.0", + "@jest/types": "^29.6.3", + "import-local": "^3.0.2", + "jest-cli": "^29.7.0" + }, + "bin": { + "jest": "bin/jest.js" + }, "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } } }, - "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true + "node_modules/jest-changed-files": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.7.0.tgz", + "integrity": "sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==", + "dev": true, + "dependencies": { + "execa": "^5.0.0", + "jest-util": "^29.7.0", + "p-limit": "^3.1.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } }, - "node_modules/get-stdin": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-9.0.0.tgz", - "integrity": "sha512-dVKBjfWisLAicarI2Sf+JuBE/DghV4UzNAVe9yhEJuzeREd3JhOTE9cUaJTeSa77fsbQUK3pcOpJfM59+VKZaA==", + "node_modules/jest-changed-files/node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", "dev": true, + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, "engines": { - "node": ">=12" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, - "node_modules/get-stream": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz", - "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==", + "node_modules/jest-changed-files/node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true, "engines": { - "node": ">=16" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "node_modules/jest-changed-files/node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, "engines": { - "node": "*" + "node": ">=10.17.0" + } + }, + "node_modules/jest-changed-files/node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true, + "engines": { + "node": ">=8" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "node_modules/jest-changed-files/node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", "dev": true, - "dependencies": { - "is-glob": "^4.0.3" - }, "engines": { - "node": ">=10.13.0" + "node": ">=6" } }, - "node_modules/globals": { - "version": "13.21.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.21.0.tgz", - "integrity": "sha512-ybyme3s4yy/t/3s35bewwXKOf7cvzfreG2lH0lZl0JB7I4GxRP2ghxOK/Nb9EkRXdbBXZLfq/p/0W2JUONB/Gg==", + "node_modules/jest-changed-files/node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", "dev": true, "dependencies": { - "type-fest": "^0.20.2" + "path-key": "^3.0.0" }, "engines": { "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "node_modules/jest-changed-files/node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", "dev": true, "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" + "mimic-fn": "^2.1.0" }, "engines": { - "node": ">=10" + "node": ">=6" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/graphemer": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", - "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "node_modules/jest-changed-files/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", "dev": true }, - "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "node_modules/jest-changed-files/node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", "dev": true, - "dependencies": { - "function-bind": "^1.1.1" - }, "engines": { - "node": ">= 0.4.0" + "node": ">=6" } }, - "node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "node_modules/jest-circus": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.7.0.tgz", + "integrity": "sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==", "dev": true, + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/expect": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "dedent": "^1.0.0", + "is-generator-fn": "^2.0.0", + "jest-each": "^29.7.0", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", + "p-limit": "^3.1.0", + "pretty-format": "^29.7.0", + "pure-rand": "^6.0.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-cli": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.7.0.tgz", + "integrity": "sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==", + "dev": true, + "dependencies": { + "@jest/core": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "create-jest": "^29.7.0", + "exit": "^0.1.2", + "import-local": "^3.0.2", + "jest-config": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "yargs": "^17.3.1" + }, + "bin": { + "jest": "bin/jest.js" + }, "engines": { - "node": ">=8" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } } }, - "node_modules/human-signals": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz", - "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==", + "node_modules/jest-config": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.7.0.tgz", + "integrity": "sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==", + "dev": true, + "dependencies": { + "@babel/core": "^7.11.6", + "@jest/test-sequencer": "^29.7.0", + "@jest/types": "^29.6.3", + "babel-jest": "^29.7.0", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "deepmerge": "^4.2.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-circus": "^29.7.0", + "jest-environment-node": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-runner": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "micromatch": "^4.0.4", + "parse-json": "^5.2.0", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "strip-json-comments": "^3.1.1" + }, "engines": { - "node": ">=16.17.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@types/node": "*", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "ts-node": { + "optional": true + } } }, - "node_modules/husky": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/husky/-/husky-8.0.3.tgz", - "integrity": "sha512-+dQSyqPh4x1hlO1swXBiNb2HzTDN1I2IGLQx1GrBuiqFJfoMrnZWwVmatvSiO+Iz8fBUnf+lekwNo4c2LlXItg==", + "node_modules/jest-diff": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz", + "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==", "dev": true, - "bin": { - "husky": "lib/bin.js" + "dependencies": { + "chalk": "^4.0.0", + "diff-sequences": "^29.6.3", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" }, "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/typicode" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/ignore": { - "version": "5.2.4", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", - "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", + "node_modules/jest-docblock": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.7.0.tgz", + "integrity": "sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==", "dev": true, + "dependencies": { + "detect-newline": "^3.0.0" + }, "engines": { - "node": ">= 4" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "node_modules/jest-each": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.7.0.tgz", + "integrity": "sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==", "dev": true, "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "jest-get-type": "^29.6.3", + "jest-util": "^29.7.0", + "pretty-format": "^29.7.0" }, "engines": { - "node": ">=6" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-environment-node": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.7.0.tgz", + "integrity": "sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==", + "dev": true, + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-mock": "^29.7.0", + "jest-util": "^29.7.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "node_modules/jest-get-type": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", + "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", "dev": true, "engines": { - "node": ">=0.8.19" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "node_modules/jest-haste-map": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz", + "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==", "dev": true, "dependencies": { - "once": "^1.3.0", - "wrappy": "1" + "@jest/types": "^29.6.3", + "@types/graceful-fs": "^4.1.3", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.7.0", + "jest-worker": "^29.7.0", + "micromatch": "^4.0.4", + "walker": "^1.0.8" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "optionalDependencies": { + "fsevents": "^2.3.2" } }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "node_modules/is-builtin-module": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.2.1.tgz", - "integrity": "sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==", + "node_modules/jest-leak-detector": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz", + "integrity": "sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==", "dev": true, "dependencies": { - "builtin-modules": "^3.3.0" + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" }, "engines": { - "node": ">=6" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-matcher-utils": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz", + "integrity": "sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==", + "dev": true, + "dependencies": { + "chalk": "^4.0.0", + "jest-diff": "^29.7.0", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/is-core-module": { - "version": "2.13.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz", - "integrity": "sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==", + "node_modules/jest-message-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz", + "integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==", "dev": true, "dependencies": { - "has": "^1.0.3" + "@babel/code-frame": "^7.12.13", + "@jest/types": "^29.6.3", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "node_modules/jest-mock": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz", + "integrity": "sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==", "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-util": "^29.7.0" + }, "engines": { - "node": ">=0.10.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/is-fullwidth-code-point": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz", - "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==", + "node_modules/jest-pnp-resolver": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", + "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", "dev": true, "engines": { - "node": ">=12" + "node": ">=6" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependencies": { + "jest-resolve": "*" + }, + "peerDependenciesMeta": { + "jest-resolve": { + "optional": true + } } }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "node_modules/jest-regex-util": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz", + "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==", + "dev": true, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-resolve": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.7.0.tgz", + "integrity": "sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==", "dev": true, "dependencies": { - "is-extglob": "^2.1.1" + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-pnp-resolver": "^1.2.2", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "resolve": "^1.20.0", + "resolve.exports": "^2.0.0", + "slash": "^3.0.0" }, "engines": { - "node": ">=0.10.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/is-interactive": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-2.0.0.tgz", - "integrity": "sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==", + "node_modules/jest-resolve-dependencies": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz", + "integrity": "sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==", + "dev": true, + "dependencies": { + "jest-regex-util": "^29.6.3", + "jest-snapshot": "^29.7.0" + }, "engines": { - "node": ">=12" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-runner": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.7.0.tgz", + "integrity": "sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==", + "dev": true, + "dependencies": { + "@jest/console": "^29.7.0", + "@jest/environment": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "emittery": "^0.13.1", + "graceful-fs": "^4.2.9", + "jest-docblock": "^29.7.0", + "jest-environment-node": "^29.7.0", + "jest-haste-map": "^29.7.0", + "jest-leak-detector": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-resolve": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-util": "^29.7.0", + "jest-watcher": "^29.7.0", + "jest-worker": "^29.7.0", + "p-limit": "^3.1.0", + "source-map-support": "0.5.13" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-runtime": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.7.0.tgz", + "integrity": "sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==", + "dev": true, + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/fake-timers": "^29.7.0", + "@jest/globals": "^29.7.0", + "@jest/source-map": "^29.6.3", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "cjs-module-lexer": "^1.0.0", + "collect-v8-coverage": "^1.0.0", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-mock": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", + "slash": "^3.0.0", + "strip-bom": "^4.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-snapshot": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.7.0.tgz", + "integrity": "sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==", + "dev": true, + "dependencies": { + "@babel/core": "^7.11.6", + "@babel/generator": "^7.7.2", + "@babel/plugin-syntax-jsx": "^7.7.2", + "@babel/plugin-syntax-typescript": "^7.7.2", + "@babel/types": "^7.3.3", + "@jest/expect-utils": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "babel-preset-current-node-syntax": "^1.0.0", + "chalk": "^4.0.0", + "expect": "^29.7.0", + "graceful-fs": "^4.2.9", + "jest-diff": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "natural-compare": "^1.4.0", + "pretty-format": "^29.7.0", + "semver": "^7.5.3" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/is-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", - "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==", - "dev": true + "node_modules/jest-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", + "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "node_modules/jest-validate": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz", + "integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==", "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "camelcase": "^6.2.0", + "chalk": "^4.0.0", + "jest-get-type": "^29.6.3", + "leven": "^3.1.0", + "pretty-format": "^29.7.0" + }, "engines": { - "node": ">=0.12.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "node_modules/jest-validate/node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", "dev": true, "engines": { - "node": ">=8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-reference": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.2.1.tgz", - "integrity": "sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==", + "node_modules/jest-watcher": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.7.0.tgz", + "integrity": "sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==", "dev": true, "dependencies": { - "@types/estree": "*" + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "emittery": "^0.13.1", + "jest-util": "^29.7.0", + "string-length": "^4.0.1" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/is-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", - "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", + "node_modules/jest-watcher/node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.21.3" + }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node": ">=8" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-unicode-supported": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-1.3.0.tgz", - "integrity": "sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==", + "node_modules/jest-watcher/node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true, "engines": { - "node": ">=12" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" + "node_modules/jest-worker": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", + "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", + "dev": true, + "dependencies": { + "@types/node": "*", + "jest-util": "^29.7.0", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } }, - "node_modules/javascript-natural-sort": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/javascript-natural-sort/-/javascript-natural-sort-0.7.1.tgz", - "integrity": "sha512-nO6jcEfZWQXDhOiBtG2KvKyEptz7RVbpGP4vTD2hLBdmNQSsCiicO2Ioinv6UI4y9ukqnBpy+XZ9H6uLNgJTlw==", - "dev": true + "node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } }, "node_modules/joycon": { "version": "3.1.1", @@ -2624,6 +5066,12 @@ "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", "dev": true }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true + }, "node_modules/json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", @@ -2645,6 +5093,18 @@ "node": ">= 0.6.0" } }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/keyv": { "version": "4.5.3", "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.3.tgz", @@ -2767,6 +5227,15 @@ "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, + "node_modules/leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/levn": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", @@ -2789,6 +5258,12 @@ "node": ">=10" } }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true + }, "node_modules/lint-staged": { "version": "14.0.1", "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-14.0.1.tgz", @@ -2924,6 +5399,12 @@ "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", "dev": true }, + "node_modules/lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", + "dev": true + }, "node_modules/lodash.merge": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", @@ -3026,12 +5507,36 @@ "node": ">=12" } }, + "node_modules/make-dir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", + "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", + "dev": true, + "dependencies": { + "semver": "^7.5.3" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/make-error": { "version": "1.3.6", "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", "dev": true }, + "node_modules/makeerror": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", + "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", + "dev": true, + "dependencies": { + "tmpl": "1.0.5" + } + }, "node_modules/markdown-table": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-3.0.3.tgz", @@ -3104,6 +5609,27 @@ "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", "dev": true }, + "node_modules/node-int64": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", + "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", + "dev": true + }, + "node_modules/node-releases": { + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz", + "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==", + "dev": true + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/npm-run-path": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.1.0.tgz", @@ -3257,6 +5783,15 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", @@ -3266,7 +5801,25 @@ "callsites": "^3.0.0" }, "engines": { - "node": ">=6" + "node": ">=6" + } + }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/path-exists": { @@ -3352,6 +5905,79 @@ "node": ">=12.0.0" } }, + "node_modules/pirates": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", + "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pkg-dir/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", @@ -3376,6 +6002,32 @@ "url": "https://github.com/prettier/prettier?sponsor=1" } }, + "node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, + "dependencies": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, "node_modules/prompts": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", @@ -3397,6 +6049,22 @@ "node": ">=6" } }, + "node_modules/pure-rand": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.0.4.tgz", + "integrity": "sha512-LA0Y9kxMYv47GIPJy6MI84fqTd2HmYZI83W/kM/SkKfDlajnZYfmXFTxkbY+xSBPkLJxltMa9hIkmdc29eguMA==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/dubzzz" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fast-check" + } + ] + }, "node_modules/queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", @@ -3417,6 +6085,12 @@ } ] }, + "node_modules/react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "dev": true + }, "node_modules/readable-stream": { "version": "3.6.2", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", @@ -3430,6 +6104,15 @@ "node": ">= 6" } }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/resolve": { "version": "1.22.6", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.6.tgz", @@ -3447,6 +6130,27 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/resolve-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", + "dev": true, + "dependencies": { + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-cwd/node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/resolve-from": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", @@ -3456,6 +6160,15 @@ "node": ">=4" } }, + "node_modules/resolve.exports": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz", + "integrity": "sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==", + "dev": true, + "engines": { + "node": ">=10" + } + }, "node_modules/restore-cursor": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-4.0.0.tgz", @@ -3724,6 +6437,52 @@ "node": ">=0.10.0" } }, + "node_modules/source-map-support": { + "version": "0.5.13", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", + "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", + "dev": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/source-map-support/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "dev": true + }, + "node_modules/stack-utils": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", + "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", + "dev": true, + "dependencies": { + "escape-string-regexp": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/stack-utils/node_modules/escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/stdin-discarder": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/stdin-discarder/-/stdin-discarder-0.1.0.tgz", @@ -3755,6 +6514,19 @@ "node": ">=0.6.19" } }, + "node_modules/string-length": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", + "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", + "dev": true, + "dependencies": { + "char-regex": "^1.0.2", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/string-width": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/string-width/-/string-width-6.1.0.tgz", @@ -3808,6 +6580,15 @@ "node": ">=8" } }, + "node_modules/strip-bom": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/strip-final-newline": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", @@ -3855,12 +6636,32 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "dev": true, + "dependencies": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", "dev": true }, + "node_modules/tmpl": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", + "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", + "dev": true + }, "node_modules/to-fast-properties": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", @@ -3894,6 +6695,49 @@ "typescript": ">=4.2.0" } }, + "node_modules/ts-jest": { + "version": "29.1.1", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.1.1.tgz", + "integrity": "sha512-D6xjnnbP17cC85nliwGiL+tpoKN0StpgE0TeOjXQTU6MVCfsB4v7aW05CgQ/1OywGb0x/oy9hHFnN+sczTiRaA==", + "dev": true, + "dependencies": { + "bs-logger": "0.x", + "fast-json-stable-stringify": "2.x", + "jest-util": "^29.0.0", + "json5": "^2.2.3", + "lodash.memoize": "4.x", + "make-error": "1.x", + "semver": "^7.5.3", + "yargs-parser": "^21.0.1" + }, + "bin": { + "ts-jest": "cli.js" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@babel/core": ">=7.0.0-beta.0 <8", + "@jest/types": "^29.0.0", + "babel-jest": "^29.0.0", + "jest": "^29.0.0", + "typescript": ">=4.3 <6" + }, + "peerDependenciesMeta": { + "@babel/core": { + "optional": true + }, + "@jest/types": { + "optional": true + }, + "babel-jest": { + "optional": true + }, + "esbuild": { + "optional": true + } + } + }, "node_modules/ts-node": { "version": "10.9.1", "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", @@ -3949,6 +6793,15 @@ "node": ">= 0.8.0" } }, + "node_modules/type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, "node_modules/type-fest": { "version": "0.20.2", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", @@ -3974,6 +6827,36 @@ "node": ">=14.17" } }, + "node_modules/update-browserslist-db": { + "version": "1.0.13", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", + "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, "node_modules/uri-js": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", @@ -3994,6 +6877,39 @@ "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", "dev": true }, + "node_modules/v8-to-istanbul": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.1.2.tgz", + "integrity": "sha512-ZGBe7VAivuuoQXTeckpbYKTdtjXGcm3ZUHXC0PAk0CzFyuYvwi73a58iEKI3GkGD1c3EHc+EgfR1w5pgbfzJlQ==", + "dev": true, + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.12", + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^2.0.0" + }, + "engines": { + "node": ">=10.12.0" + } + }, + "node_modules/v8-to-istanbul/node_modules/@jridgewell/trace-mapping": { + "version": "0.3.19", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz", + "integrity": "sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/walker": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", + "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", + "dev": true, + "dependencies": { + "makeerror": "1.0.12" + } + }, "node_modules/which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", @@ -4093,6 +7009,34 @@ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", "dev": true }, + "node_modules/write-file-atomic": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", + "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", + "dev": true, + "dependencies": { + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.7" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/write-file-atomic/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, "node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", @@ -4108,6 +7052,62 @@ "node": ">= 14" } }, + "node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dev": true, + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/yargs/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/yn": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", diff --git a/package.json b/package.json index b598526..37b3826 100644 --- a/package.json +++ b/package.json @@ -5,29 +5,31 @@ "main": "index.js", "type": "module", "scripts": { - "build": "npx tsc", + "build-start:standalone": "bun run build:standalone && bun run start:standalone", + "build-start": "next build && next start", + "build-storybook": "storybook build", "build:rollup": "rollup -c && tsc", - "start:build": "node ./dist/bundle.js", - "dev:start": "node --no-warnings --loader ts-node/esm ./src/index.ts", + "build:standalone": "BUILD_STANDALONE=true next build", + "build": "npx tsc", "dev:build-start": "npm run build && node ./dist/index.js", + "dev:clean": "rm -r tmp", + "dev:start": "node --no-warnings --loader ts-node/esm ./src/index.ts", + "e2e": "cypress run", "format:check": "prettier --check .", "format:write": "prettier --write .", "lint:check": "eslint .", "lint:fix": "eslint --fix .", - "test": "jest --watch", "postinstall": "husky install", - "prepack": "pinst --disable", "postpack": "pinst --enable", + "prepack": "pinst --disable", "prepare": "husky install", - "todo": "leasot 'src/**/*.ts' --exit-nicely", - "build:standalone": "BUILD_STANDALONE=true next build", + "start:build": "node ./dist/bundle.js", "start:standalone": "node ./.next/standalone/server.js", - "build-start": "next build && next start", - "build-start:standalone": "bun run build:standalone && bun run start:standalone", - "test:ci": "jest --ci", - "e2e": "cypress run", "storybook": "storybook dev -p 6006", - "build-storybook": "storybook build" + "test:ci": "jest --ci", + "test": "jest --watch", + "test:coverage": "jest", + "todo": "leasot 'src/**/*.ts' --exit-nicely" }, "keywords": [], "author": "", @@ -46,6 +48,7 @@ "eslint-config-prettier": "^9.0.0", "eslint-define-config": "^1.23.0", "husky": "^8.0.0", + "jest": "^29.7.0", "leasot": "^13.3.0", "lint-staged": "^14.0.1", "markdown-table": "^3.0.3", @@ -54,6 +57,7 @@ "rollup": "^3.29.2", "rollup-plugin-dts": "^6.0.2", "rollup-plugin-esbuild": "^6.0.1", + "ts-jest": "^29.1.1", "ts-node": "^10.9.1", "typescript": "^5.2.2" }, diff --git a/src/Configurator.ts b/src/Configurator.ts index 5e4e0f7..abcf36d 100644 --- a/src/Configurator.ts +++ b/src/Configurator.ts @@ -392,7 +392,7 @@ class Configurator { if (lintStaged) { const tsLintStagedConfig = { '**/*.{ts,tsx}': [ - ...(prettier ? ['prettier --write .'] : []), + ...(prettier ? ['prettier --check .', 'prettier --write .'] : []), ...(eslint ? ['eslint .', 'eslint --fix .'] : []), ...(jest ? ['jest --ci'] : []), 'tsc --noEmit', @@ -401,13 +401,16 @@ class Configurator { const lintStagedConfig = { '**/*.{js,jsx}': [ - ...(prettier ? ['prettier --write .'] : []), + ...(prettier ? ['prettier --check .', 'prettier --write .'] : []), ...(eslint ? ['eslint .', ' eslint --fix .'] : []), ...(jest ? [' jest --ci'] : []), ], ...(typescript ? tsLintStagedConfig : {}), - '**/*.{md, yml, yaml, json}': ['prettier --write .'], - '**/*.{css}': [' prettier --write .'], // TODO: add styledlint + '**/*.{md, yml, yaml, json}': [ + 'prettier --check .', + 'prettier --write .', + ], + '**/*.{css}': ['prettier --check .', 'prettier --write .'], // TODO: add styledlint }; await this.packageManager.addToPackage('lint-staged', lintStagedConfig); From 2fb3a350e6bedb809b3aea3418a42d2583cbcaae Mon Sep 17 00:00:00 2001 From: Dominic Geargeoura Date: Thu, 5 Oct 2023 10:27:28 +0100 Subject: [PATCH 035/105] husky mod --- .husky/pre-commit | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/.husky/pre-commit b/.husky/pre-commit index ca864c4..41f5a2a 100755 --- a/.husky/pre-commit +++ b/.husky/pre-commit @@ -1,12 +1,14 @@ #!/usr/bin/env sh . "$(dirname -- "$0")/_/husky.sh" -npx lint-staged +npx lint-staged || { printf "\nYOU HAVE ERRORS!\n--------------\n" ; exit 1; } # Following is for monitoring only - -#TODOs / FIXMEs + +printf "\nTODOs / FIXMEs\n--------------\n" + npx leasot 'src/**/*.[jt]s?(x)' --exit-nicely -# # Test coverage +printf "\n\nTEST COVERAGE\n--------------\n" + # npx jest --coverage \ No newline at end of file From b2e8eb7b581b853cb34fff45349df9db678fa9c1 Mon Sep 17 00:00:00 2001 From: Dominic Geargeoura Date: Thu, 5 Oct 2023 10:35:36 +0100 Subject: [PATCH 036/105] husky mod --- .husky/pre-commit | 5 +++-- jest.config.js => jest.config.ts | 0 2 files changed, 3 insertions(+), 2 deletions(-) rename jest.config.js => jest.config.ts (100%) diff --git a/.husky/pre-commit b/.husky/pre-commit index 41f5a2a..6b10593 100755 --- a/.husky/pre-commit +++ b/.husky/pre-commit @@ -9,6 +9,7 @@ printf "\nTODOs / FIXMEs\n--------------\n" npx leasot 'src/**/*.[jt]s?(x)' --exit-nicely -printf "\n\nTEST COVERAGE\n--------------\n" +# TODO: Add tests! +# printf "\n\nTEST COVERAGE\n--------------\n" -# npx jest --coverage \ No newline at end of file +# npx jest --coverage --ci \ No newline at end of file diff --git a/jest.config.js b/jest.config.ts similarity index 100% rename from jest.config.js rename to jest.config.ts From fb8a6fdd6653b7e66727bb509fabd0704da1f567 Mon Sep 17 00:00:00 2001 From: Dominic Geargeoura Date: Thu, 5 Oct 2023 10:36:14 +0100 Subject: [PATCH 037/105] nvmrc update > 20.x --- .nvmrc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.nvmrc b/.nvmrc index b55acec..006a817 100644 --- a/.nvmrc +++ b/.nvmrc @@ -1 +1 @@ -v20.5.0 \ No newline at end of file +v20.x \ No newline at end of file From 8a770bea762e0c5b69e9663e64049eee424b652e Mon Sep 17 00:00:00 2001 From: Dominic Geargeoura Date: Thu, 5 Oct 2023 10:37:19 +0100 Subject: [PATCH 038/105] lints steged update --- .husky/pre-commit | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.husky/pre-commit b/.husky/pre-commit index 6b10593..23c7982 100755 --- a/.husky/pre-commit +++ b/.husky/pre-commit @@ -7,7 +7,7 @@ npx lint-staged || { printf "\nYOU HAVE ERRORS!\n--------------\n" ; exit 1; } printf "\nTODOs / FIXMEs\n--------------\n" -npx leasot 'src/**/*.[jt]s?(x)' --exit-nicely +npx leasot 'src/**/*' --exit-nicely # TODO: Add tests! # printf "\n\nTEST COVERAGE\n--------------\n" From c37fed2e1c98d77c4cf64fe61be716cc303c59a3 Mon Sep 17 00:00:00 2001 From: Dominic Geargeoura Date: Thu, 5 Oct 2023 10:37:31 +0100 Subject: [PATCH 039/105] lints steged update --- .husky/pre-commit | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.husky/pre-commit b/.husky/pre-commit index 23c7982..6b10593 100755 --- a/.husky/pre-commit +++ b/.husky/pre-commit @@ -7,7 +7,7 @@ npx lint-staged || { printf "\nYOU HAVE ERRORS!\n--------------\n" ; exit 1; } printf "\nTODOs / FIXMEs\n--------------\n" -npx leasot 'src/**/*' --exit-nicely +npx leasot 'src/**/*.[jt]s?(x)' --exit-nicely # TODO: Add tests! # printf "\n\nTEST COVERAGE\n--------------\n" From c52b737417b41582c1a9e8b73f278db5b4767bfc Mon Sep 17 00:00:00 2001 From: Dominic Geargeoura Date: Thu, 5 Oct 2023 10:38:45 +0100 Subject: [PATCH 040/105] new line --- src/Configurator.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/Configurator.ts b/src/Configurator.ts index abcf36d..be1d19c 100644 --- a/src/Configurator.ts +++ b/src/Configurator.ts @@ -470,6 +470,7 @@ class Configurator { public buildConfigs = async () => { this.spinner.start('Building configs'); + const { configTemplateDirectories, configTemplateFiles } = this.config; const { dotEnvFiles } = this.options; From 0ba1302b4628a084d86bfc9cee0b82cda4496b8d Mon Sep 17 00:00:00 2001 From: Dominic Geargeoura Date: Thu, 5 Oct 2023 10:39:55 +0100 Subject: [PATCH 041/105] lints steged update --- .husky/pre-commit | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.husky/pre-commit b/.husky/pre-commit index 6b10593..0c0038e 100755 --- a/.husky/pre-commit +++ b/.husky/pre-commit @@ -5,7 +5,7 @@ npx lint-staged || { printf "\nYOU HAVE ERRORS!\n--------------\n" ; exit 1; } # Following is for monitoring only -printf "\nTODOs / FIXMEs\n--------------\n" +printf "\nTODOs / FIXMEs - you can still git push!\n--------------\n" npx leasot 'src/**/*.[jt]s?(x)' --exit-nicely From 6a044c0254116198d0848aa455dcc19bca7b0ebb Mon Sep 17 00:00:00 2001 From: Dominic Geargeoura Date: Thu, 5 Oct 2023 10:42:06 +0100 Subject: [PATCH 042/105] lint staged update --- .husky/pre-commit | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/.husky/pre-commit b/.husky/pre-commit index 0c0038e..e5643f2 100755 --- a/.husky/pre-commit +++ b/.husky/pre-commit @@ -5,11 +5,13 @@ npx lint-staged || { printf "\nYOU HAVE ERRORS!\n--------------\n" ; exit 1; } # Following is for monitoring only -printf "\nTODOs / FIXMEs - you can still git push!\n--------------\n" +printf "\nTODOs / FIXMEs\n--------------\n" npx leasot 'src/**/*.[jt]s?(x)' --exit-nicely # TODO: Add tests! # printf "\n\nTEST COVERAGE\n--------------\n" -# npx jest --coverage --ci \ No newline at end of file +# npx jest --coverage --ci + +printf "You are good to push 🚀" \ No newline at end of file From f045d54dc4f0f07809b775c6136702b092da0eb8 Mon Sep 17 00:00:00 2001 From: Dominic Geargeoura Date: Thu, 5 Oct 2023 10:42:24 +0100 Subject: [PATCH 043/105] lint staged update --- .husky/pre-commit | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.husky/pre-commit b/.husky/pre-commit index e5643f2..9a3a61f 100755 --- a/.husky/pre-commit +++ b/.husky/pre-commit @@ -14,4 +14,4 @@ npx leasot 'src/**/*.[jt]s?(x)' --exit-nicely # npx jest --coverage --ci -printf "You are good to push 🚀" \ No newline at end of file +printf "\n\nYou are good to push 🚀\n\n" \ No newline at end of file From db5d5e222bd84364ba9786977c589a4b955390f5 Mon Sep 17 00:00:00 2001 From: Dominic Geargeoura Date: Thu, 5 Oct 2023 10:43:41 +0100 Subject: [PATCH 044/105] lint staged update --- .husky/pre-commit | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.husky/pre-commit b/.husky/pre-commit index 9a3a61f..7ebe364 100755 --- a/.husky/pre-commit +++ b/.husky/pre-commit @@ -5,7 +5,7 @@ npx lint-staged || { printf "\nYOU HAVE ERRORS!\n--------------\n" ; exit 1; } # Following is for monitoring only -printf "\nTODOs / FIXMEs\n--------------\n" +printf "\nTODOs / FIXMEs - consider reviewing these\n--------------\n" npx leasot 'src/**/*.[jt]s?(x)' --exit-nicely From 459202c9d9455e2fb48d319d28c2d7ea0be46452 Mon Sep 17 00:00:00 2001 From: Dominic Geargeoura Date: Thu, 5 Oct 2023 10:44:41 +0100 Subject: [PATCH 045/105] lint staged update --- .husky/pre-commit | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.husky/pre-commit b/.husky/pre-commit index 7ebe364..2f84091 100755 --- a/.husky/pre-commit +++ b/.husky/pre-commit @@ -14,4 +14,6 @@ npx leasot 'src/**/*.[jt]s?(x)' --exit-nicely # npx jest --coverage --ci -printf "\n\nYou are good to push 🚀\n\n" \ No newline at end of file +printf "\n\n--------------------------\n" +printf "You are good to push 🚀" +printf "\n--------------------------\n\n" \ No newline at end of file From 8a6f8fcd0b127b561b7825e30034c32dd1967b00 Mon Sep 17 00:00:00 2001 From: Dominic Geargeoura Date: Thu, 5 Oct 2023 10:45:02 +0100 Subject: [PATCH 046/105] lint staged update --- .husky/pre-commit | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.husky/pre-commit b/.husky/pre-commit index 2f84091..8b6644f 100755 --- a/.husky/pre-commit +++ b/.husky/pre-commit @@ -14,6 +14,6 @@ npx leasot 'src/**/*.[jt]s?(x)' --exit-nicely # npx jest --coverage --ci -printf "\n\n--------------------------\n" +printf "\n\n--------------------------\n\n" printf "You are good to push 🚀" -printf "\n--------------------------\n\n" \ No newline at end of file +printf "\n\n--------------------------\n\n" \ No newline at end of file From 8e42e540ae45dad6542bd29b0e7bdfaddb4b9761 Mon Sep 17 00:00:00 2001 From: Dominic Geargeoura Date: Thu, 5 Oct 2023 10:45:25 +0100 Subject: [PATCH 047/105] lint staged update --- .husky/pre-commit | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.husky/pre-commit b/.husky/pre-commit index 8b6644f..98cdeae 100755 --- a/.husky/pre-commit +++ b/.husky/pre-commit @@ -15,5 +15,5 @@ npx leasot 'src/**/*.[jt]s?(x)' --exit-nicely # npx jest --coverage --ci printf "\n\n--------------------------\n\n" -printf "You are good to push 🚀" +printf "You are ready to push your code 🚀" printf "\n\n--------------------------\n\n" \ No newline at end of file From 4a17737c5313b9291f06fd945357f87ba33602c6 Mon Sep 17 00:00:00 2001 From: Dominic Geargeoura Date: Thu, 5 Oct 2023 10:45:46 +0100 Subject: [PATCH 048/105] lint staged update --- .husky/pre-commit | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.husky/pre-commit b/.husky/pre-commit index 98cdeae..6b5425b 100755 --- a/.husky/pre-commit +++ b/.husky/pre-commit @@ -14,6 +14,6 @@ npx leasot 'src/**/*.[jt]s?(x)' --exit-nicely # npx jest --coverage --ci -printf "\n\n--------------------------\n\n" -printf "You are ready to push your code 🚀" -printf "\n\n--------------------------\n\n" \ No newline at end of file +printf "\n\n--------------------\n\n" +printf "Now push your code! 🚀" +printf "\n\n--------------------\n\n" \ No newline at end of file From 36d2916be90a044490b3938c5044cabae18fe6b0 Mon Sep 17 00:00:00 2001 From: Dominic Geargeoura Date: Thu, 5 Oct 2023 10:45:58 +0100 Subject: [PATCH 049/105] lint staged update --- .husky/pre-commit | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.husky/pre-commit b/.husky/pre-commit index 6b5425b..006cdbd 100755 --- a/.husky/pre-commit +++ b/.husky/pre-commit @@ -14,6 +14,6 @@ npx leasot 'src/**/*.[jt]s?(x)' --exit-nicely # npx jest --coverage --ci -printf "\n\n--------------------\n\n" +printf "\n\n-----------------------\n\n" printf "Now push your code! 🚀" -printf "\n\n--------------------\n\n" \ No newline at end of file +printf "\n\n-----------------------\n\n" \ No newline at end of file From d05d6b98fff5d9cc75094270a24aa44ec2d451ab Mon Sep 17 00:00:00 2001 From: Dominic Geargeoura Date: Thu, 5 Oct 2023 10:46:42 +0100 Subject: [PATCH 050/105] lint staged update --- .husky/pre-commit | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.husky/pre-commit b/.husky/pre-commit index 006cdbd..d2fabbc 100755 --- a/.husky/pre-commit +++ b/.husky/pre-commit @@ -5,7 +5,8 @@ npx lint-staged || { printf "\nYOU HAVE ERRORS!\n--------------\n" ; exit 1; } # Following is for monitoring only -printf "\nTODOs / FIXMEs - consider reviewing these\n--------------\n" +printf "\nTODOs / FIXMEs - consider reviewing these" +printf "\n------------------------------------------\n" npx leasot 'src/**/*.[jt]s?(x)' --exit-nicely From 14bf4b246f22599efb833084bc147e89dcad0c59 Mon Sep 17 00:00:00 2001 From: Dominic Geargeoura Date: Thu, 5 Oct 2023 10:46:55 +0100 Subject: [PATCH 051/105] lint staged update --- .husky/pre-commit | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.husky/pre-commit b/.husky/pre-commit index d2fabbc..62810e2 100755 --- a/.husky/pre-commit +++ b/.husky/pre-commit @@ -5,7 +5,7 @@ npx lint-staged || { printf "\nYOU HAVE ERRORS!\n--------------\n" ; exit 1; } # Following is for monitoring only -printf "\nTODOs / FIXMEs - consider reviewing these" +printf "\n\nTODOs / FIXMEs - consider reviewing these" printf "\n------------------------------------------\n" npx leasot 'src/**/*.[jt]s?(x)' --exit-nicely From 7de103b0adbc8c7a415699cf57b921b7e9ecc120 Mon Sep 17 00:00:00 2001 From: Dominic Geargeoura Date: Thu, 5 Oct 2023 10:48:23 +0100 Subject: [PATCH 052/105] lint staged update --- .husky/pre-commit | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/.husky/pre-commit b/.husky/pre-commit index 62810e2..5cd39cc 100755 --- a/.husky/pre-commit +++ b/.husky/pre-commit @@ -3,11 +3,13 @@ npx lint-staged || { printf "\nYOU HAVE ERRORS!\n--------------\n" ; exit 1; } -# Following is for monitoring only - -printf "\n\nTODOs / FIXMEs - consider reviewing these" +# Following is for observability purposes + +# TODOs / FIXMEs +printf "\n\n" +printf "TODOs / FIXMEs - consider reviewing these" printf "\n------------------------------------------\n" - +# npx leasot 'src/**/*.[jt]s?(x)' --exit-nicely # TODO: Add tests! From 142ebdd7057414036b220d4b0001fdf13316c9d3 Mon Sep 17 00:00:00 2001 From: Dominic Geargeoura Date: Thu, 5 Oct 2023 10:49:16 +0100 Subject: [PATCH 053/105] lint staged update --- .husky/pre-commit | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/.husky/pre-commit b/.husky/pre-commit index 5cd39cc..7d6235c 100755 --- a/.husky/pre-commit +++ b/.husky/pre-commit @@ -1,7 +1,9 @@ #!/usr/bin/env sh . "$(dirname -- "$0")/_/husky.sh" -npx lint-staged || { printf "\nYOU HAVE ERRORS!\n--------------\n" ; exit 1; } +npx lint-staged || { + printf "\nYOU HAVE ERRORS!\n--------------\n" ; exit 1; +} # Following is for observability purposes @@ -17,6 +19,6 @@ npx leasot 'src/**/*.[jt]s?(x)' --exit-nicely # npx jest --coverage --ci -printf "\n\n-----------------------\n\n" +printf "\n------------------------------------------\n" printf "Now push your code! 🚀" -printf "\n\n-----------------------\n\n" \ No newline at end of file +printf "\n------------------------------------------\n" \ No newline at end of file From 192a6093d9b69735be0bd0d4d235ecab05d97265 Mon Sep 17 00:00:00 2001 From: Dominic Geargeoura Date: Thu, 5 Oct 2023 10:49:56 +0100 Subject: [PATCH 054/105] lint staged update --- .husky/pre-commit | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.husky/pre-commit b/.husky/pre-commit index 7d6235c..25de585 100755 --- a/.husky/pre-commit +++ b/.husky/pre-commit @@ -2,7 +2,10 @@ . "$(dirname -- "$0")/_/husky.sh" npx lint-staged || { - printf "\nYOU HAVE ERRORS!\n--------------\n" ; exit 1; + printf "\n------------------------------------------\n" + printf "\nYOU HAVE ERRORS!\n--------------\n" + printf "\n------------------------------------------\n"; + exit 1; } # Following is for observability purposes From 6fd0b0bc2e1e6496e5785125a2bbd12510a1e074 Mon Sep 17 00:00:00 2001 From: Dominic Geargeoura Date: Thu, 5 Oct 2023 10:50:14 +0100 Subject: [PATCH 055/105] lint staged update --- .husky/pre-commit | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.husky/pre-commit b/.husky/pre-commit index 25de585..ab89fc5 100755 --- a/.husky/pre-commit +++ b/.husky/pre-commit @@ -1,6 +1,8 @@ #!/usr/bin/env sh . "$(dirname -- "$0")/_/husky.sh" +printf "\n\n" + npx lint-staged || { printf "\n------------------------------------------\n" printf "\nYOU HAVE ERRORS!\n--------------\n" From 14de528da1c0b4f6db51858b5566ba8ba4cf6d81 Mon Sep 17 00:00:00 2001 From: Dominic Geargeoura Date: Thu, 5 Oct 2023 10:51:46 +0100 Subject: [PATCH 056/105] lint staged update --- .husky/pre-commit | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/.husky/pre-commit b/.husky/pre-commit index ab89fc5..38d9e49 100755 --- a/.husky/pre-commit +++ b/.husky/pre-commit @@ -4,9 +4,9 @@ printf "\n\n" npx lint-staged || { - printf "\n------------------------------------------\n" - printf "\nYOU HAVE ERRORS!\n--------------\n" - printf "\n------------------------------------------\n"; + printf "\n\n------------------------------------------\n\n" + printf "🚫 YOU HAVE ERRORS!" + printf "\n\n------------------------------------------\n\n"; exit 1; } @@ -24,6 +24,6 @@ npx leasot 'src/**/*.[jt]s?(x)' --exit-nicely # npx jest --coverage --ci -printf "\n------------------------------------------\n" +printf "\n\n------------------------------------------\n\n" printf "Now push your code! 🚀" -printf "\n------------------------------------------\n" \ No newline at end of file +printf "\n\n------------------------------------------\n\n" \ No newline at end of file From 37bc76c3838df710d65016dab1d59e75b9a33378 Mon Sep 17 00:00:00 2001 From: Dominic Geargeoura Date: Thu, 5 Oct 2023 10:52:48 +0100 Subject: [PATCH 057/105] lint staged update --- .husky/pre-commit | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/.husky/pre-commit b/.husky/pre-commit index 38d9e49..2cfa60f 100755 --- a/.husky/pre-commit +++ b/.husky/pre-commit @@ -13,11 +13,14 @@ npx lint-staged || { # Following is for observability purposes # TODOs / FIXMEs -printf "\n\n" -printf "TODOs / FIXMEs - consider reviewing these" -printf "\n------------------------------------------\n" + # -npx leasot 'src/**/*.[jt]s?(x)' --exit-nicely +npx leasot 'src/**/*.[jt]s?(x)' --exit-nicely || { + printf "\n\n" + printf "TODOs / FIXMEs - consider reviewing these" + printf "\n------------------------------------------\n" + exit 1; +} # TODO: Add tests! # printf "\n\nTEST COVERAGE\n--------------\n" From 0536945ae17cffd42e3923fd4bda5bf9ba2fdafc Mon Sep 17 00:00:00 2001 From: Dominic Geargeoura Date: Thu, 5 Oct 2023 10:53:14 +0100 Subject: [PATCH 058/105] lint staged update --- .husky/pre-commit | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.husky/pre-commit b/.husky/pre-commit index 2cfa60f..4a0eab5 100755 --- a/.husky/pre-commit +++ b/.husky/pre-commit @@ -19,7 +19,7 @@ npx leasot 'src/**/*.[jt]s?(x)' --exit-nicely || { printf "\n\n" printf "TODOs / FIXMEs - consider reviewing these" printf "\n------------------------------------------\n" - exit 1; + exit 0; } # TODO: Add tests! From d43cd264f53822b3d3593398fe33cad8d7bf5e7b Mon Sep 17 00:00:00 2001 From: Dominic Geargeoura Date: Thu, 5 Oct 2023 10:54:02 +0100 Subject: [PATCH 059/105] lint staged update --- .husky/pre-commit | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/.husky/pre-commit b/.husky/pre-commit index 4a0eab5..4833d24 100755 --- a/.husky/pre-commit +++ b/.husky/pre-commit @@ -13,14 +13,11 @@ npx lint-staged || { # Following is for observability purposes # TODOs / FIXMEs - +printf "\n\n" +printf "TODOs / FIXMEs - consider reviewing these" +printf "\n------------------------------------------\n" # -npx leasot 'src/**/*.[jt]s?(x)' --exit-nicely || { - printf "\n\n" - printf "TODOs / FIXMEs - consider reviewing these" - printf "\n------------------------------------------\n" - exit 0; -} +npx leasot 'src/**/*.[jt]s?(x)' --exit-nicely # TODO: Add tests! # printf "\n\nTEST COVERAGE\n--------------\n" From 7dde4f51ca3a8d41dfd2ae00af53439cc53422e8 Mon Sep 17 00:00:00 2001 From: Dominic Geargeoura Date: Thu, 5 Oct 2023 10:55:15 +0100 Subject: [PATCH 060/105] lint staged update --- .husky/pre-commit | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.husky/pre-commit b/.husky/pre-commit index 4833d24..27c8fc9 100755 --- a/.husky/pre-commit +++ b/.husky/pre-commit @@ -25,5 +25,5 @@ npx leasot 'src/**/*.[jt]s?(x)' --exit-nicely # npx jest --coverage --ci printf "\n\n------------------------------------------\n\n" -printf "Now push your code! 🚀" +printf '%b\n' "\033[1m"Now push your code!"\033[0m 🚀" printf "\n\n------------------------------------------\n\n" \ No newline at end of file From e4863364222cccbc0127e55df796bc74ce8ea2b7 Mon Sep 17 00:00:00 2001 From: Dominic Geargeoura Date: Thu, 5 Oct 2023 10:55:45 +0100 Subject: [PATCH 061/105] lint staged update --- .husky/pre-commit | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.husky/pre-commit b/.husky/pre-commit index 27c8fc9..bfce65c 100755 --- a/.husky/pre-commit +++ b/.husky/pre-commit @@ -25,5 +25,5 @@ npx leasot 'src/**/*.[jt]s?(x)' --exit-nicely # npx jest --coverage --ci printf "\n\n------------------------------------------\n\n" -printf '%b\n' "\033[1m"Now push your code!"\033[0m 🚀" +printf '%b\n' "\033[1m"Now push your code!"\033[0m" "🚀" printf "\n\n------------------------------------------\n\n" \ No newline at end of file From 03616c09cd658568253af31d16da2b94228b43ca Mon Sep 17 00:00:00 2001 From: Dominic Geargeoura Date: Thu, 5 Oct 2023 10:56:07 +0100 Subject: [PATCH 062/105] lint staged update --- .husky/pre-commit | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.husky/pre-commit b/.husky/pre-commit index bfce65c..5363ae6 100755 --- a/.husky/pre-commit +++ b/.husky/pre-commit @@ -25,5 +25,5 @@ npx leasot 'src/**/*.[jt]s?(x)' --exit-nicely # npx jest --coverage --ci printf "\n\n------------------------------------------\n\n" -printf '%b\n' "\033[1m"Now push your code!"\033[0m" "🚀" +printf "\033[1m"Now push your code!"\033[0m 🚀" printf "\n\n------------------------------------------\n\n" \ No newline at end of file From bdf430a4b6fe2a25c3b622e3278dde1df79290b7 Mon Sep 17 00:00:00 2001 From: Dominic Geargeoura Date: Thu, 5 Oct 2023 10:56:23 +0100 Subject: [PATCH 063/105] lint staged update --- .husky/pre-commit | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.husky/pre-commit b/.husky/pre-commit index 5363ae6..f4a7a07 100755 --- a/.husky/pre-commit +++ b/.husky/pre-commit @@ -25,5 +25,5 @@ npx leasot 'src/**/*.[jt]s?(x)' --exit-nicely # npx jest --coverage --ci printf "\n\n------------------------------------------\n\n" -printf "\033[1m"Now push your code!"\033[0m 🚀" +printf '%b' "\033[1m"Now push your code!"\033[0m 🚀" printf "\n\n------------------------------------------\n\n" \ No newline at end of file From 218083be6921204082e8850d6c01817dc1a64c6b Mon Sep 17 00:00:00 2001 From: Dominic Geargeoura Date: Thu, 5 Oct 2023 10:56:30 +0100 Subject: [PATCH 064/105] lint staged update --- .husky/pre-commit | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.husky/pre-commit b/.husky/pre-commit index f4a7a07..c73a288 100755 --- a/.husky/pre-commit +++ b/.husky/pre-commit @@ -25,5 +25,5 @@ npx leasot 'src/**/*.[jt]s?(x)' --exit-nicely # npx jest --coverage --ci printf "\n\n------------------------------------------\n\n" -printf '%b' "\033[1m"Now push your code!"\033[0m 🚀" +printf '%b ' "\033[1m"Now push your code!"\033[0m 🚀" printf "\n\n------------------------------------------\n\n" \ No newline at end of file From 91c9b26435d20afdf1b6c3274ba744c2f2d0af78 Mon Sep 17 00:00:00 2001 From: Dominic Geargeoura Date: Thu, 5 Oct 2023 13:03:20 +0100 Subject: [PATCH 065/105] jest types anded and new commander options --- package-lock.json | 11 ++++ package.json | 1 + src/Configurator.ts | 94 ++++++++++++++++------------- src/index.ts | 112 +++++++++++++++++++++++------------ src/templates/.eslintrc.json | 22 ------- src/templates/jest.config.ts | 11 ++++ 6 files changed, 149 insertions(+), 102 deletions(-) delete mode 100644 src/templates/.eslintrc.json create mode 100644 src/templates/jest.config.ts diff --git a/package-lock.json b/package-lock.json index 123ec89..c2f869e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -22,6 +22,7 @@ "@rollup/plugin-node-resolve": "^15.2.1", "@trivago/prettier-plugin-sort-imports": "^4.2.0", "@types/figlet": "^1.5.6", + "@types/jest": "^29.5.5", "@types/node": "^20.5.9", "@types/prompts": "^2.4.4", "@typescript-eslint/eslint-plugin": "^6.5.0", @@ -2239,6 +2240,16 @@ "@types/istanbul-lib-report": "*" } }, + "node_modules/@types/jest": { + "version": "29.5.5", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.5.tgz", + "integrity": "sha512-ebylz2hnsWR9mYvmBFbXJXr+33UPc4+ZdxyDXh5w0FlPBTfCVN3wPL+kuOiQt3xvrK419v7XWeAs+AeOksafXg==", + "dev": true, + "dependencies": { + "expect": "^29.0.0", + "pretty-format": "^29.0.0" + } + }, "node_modules/@types/json-schema": { "version": "7.0.12", "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.12.tgz", diff --git a/package.json b/package.json index 37b3826..a3d39db 100644 --- a/package.json +++ b/package.json @@ -39,6 +39,7 @@ "@rollup/plugin-node-resolve": "^15.2.1", "@trivago/prettier-plugin-sort-imports": "^4.2.0", "@types/figlet": "^1.5.6", + "@types/jest": "^29.5.5", "@types/node": "^20.5.9", "@types/prompts": "^2.4.4", "@typescript-eslint/eslint-plugin": "^6.5.0", diff --git a/src/Configurator.ts b/src/Configurator.ts index be1d19c..f38c3d2 100644 --- a/src/Configurator.ts +++ b/src/Configurator.ts @@ -79,7 +79,7 @@ class Configurator { }: ConfiguratorPropsType) { this.cwd = path.resolve(projectDirectoryPath); this.spinner = ora(); - this.srcPath = path.resolve(path.join('src', 'templates')); + this.srcPath = path.resolve(path.join('src')); this.packageManager = new PackageManager({ packageManagerKind, cwd: this.cwd, @@ -231,7 +231,13 @@ class Configurator { 'storybook', ] : []), - ...(jest ? ['jest', 'jest-environment-jsdom'] : []), + ...(jest + ? [ + 'jest', + 'jest-environment-jsdom', + ...(typescript ? ['@types/jest', 'ts-jest'] : []), + ] + : []), ...(reactTestingLibrary ? [ '@testing-library/jest-dom', @@ -289,22 +295,21 @@ class Configurator { throw new Error(`${error}`); }); - let huskyInit = $execa`npx husky-init && npm install`; - // TODO: Manual install husky - the following fails unless npm - if (pm === PackageManagerKindEnum.YARN) { - huskyInit = $execa`yarn dlx husky-init --yarn2 && yarn`; - } + //const huskyInit = $execa`npx husky-init && npm install`; + // if (pm === PackageManagerKindEnum.YARN) { + // huskyInit = $execa`yarn dlx husky-init --yarn2 && yarn`; + // } - if (pm === PackageManagerKindEnum.PNPM) { - huskyInit = $execa`pnpm dlx husky-init && pnpm install`; - } + // if (pm === PackageManagerKindEnum.PNPM) { + // huskyInit = $execa`pnpm dlx husky-init && pnpm install`; + // } - if (pm === PackageManagerKindEnum.BUN) { - huskyInit = $execa`bunx husky-init && bun install`; - } + // if (pm === PackageManagerKindEnum.BUN) { + // huskyInit = $execa`bunx husky-init && bun install`; + // } - await huskyInit.catch((error) => { + await $execa`npx husky-init && npm install`.catch((error) => { oops(); this.spinner.fail(); throw new Error(`${error}`); @@ -375,14 +380,14 @@ class Configurator { } if (this.options.husky) { - // await this.installConfigureGitHusky(); + await this.installConfigureGitHusky(); } console.log(`\n\n`); }; public configurePackageFile = async () => { - const { eslint, jest, lintStaged, prettier, typescript } = this.options; + const { lintStaged } = this.options; const { packageScripts } = this.config; // package scripts @@ -390,40 +395,47 @@ class Configurator { // lint-staged if (lintStaged) { - const tsLintStagedConfig = { - '**/*.{ts,tsx}': [ - ...(prettier ? ['prettier --check .', 'prettier --write .'] : []), - ...(eslint ? ['eslint .', 'eslint --fix .'] : []), - ...(jest ? ['jest --ci'] : []), - 'tsc --noEmit', - ], - }; - - const lintStagedConfig = { - '**/*.{js,jsx}': [ - ...(prettier ? ['prettier --check .', 'prettier --write .'] : []), - ...(eslint ? ['eslint .', ' eslint --fix .'] : []), - ...(jest ? [' jest --ci'] : []), - ], - ...(typescript ? tsLintStagedConfig : {}), - '**/*.{md, yml, yaml, json}': [ - 'prettier --check .', - 'prettier --write .', - ], - '**/*.{css}': ['prettier --check .', 'prettier --write .'], // TODO: add styledlint - }; - + const lintStagedConfig = this.makeLintStagedConfig(); await this.packageManager.addToPackage('lint-staged', lintStagedConfig); } }; - public configureEslint = async () => { + private makeLintStagedConfig() { + const { eslint, jest, prettier, typescript } = this.options; + + const tsLintStagedConfig = { + '**/*.{ts,tsx}': [ + ...(prettier ? ['prettier --check .', 'prettier --write .'] : []), + ...(eslint ? ['eslint .', 'eslint --fix .'] : []), + ...(jest ? ['jest --ci'] : []), + 'tsc --noEmit', + ], + }; + + const lintStagedConfig = { + '**/*.{js,jsx}': [ + ...(prettier ? ['prettier --check .', 'prettier --write .'] : []), + ...(eslint ? ['eslint .', ' eslint --fix .'] : []), + ...(jest ? [' jest --ci'] : []), + ], + ...(typescript ? tsLintStagedConfig : {}), + '**/*.{md, yml, yaml, json}': [ + 'prettier --check .', + 'prettier --write .', + ], + '**/*.{css}': ['prettier --check .', 'prettier --write .'], // TODO: add styledlint + }; + + return lintStagedConfig; + } + + private configureEslint = async () => { const { storybook, prettier, eslint, typescript, reactTestingLibrary } = this.options; if (!eslint) return; - // TODO: create a configuration for the new eslint config file type + // TODO: create a make func for the new eslint config file type const eslintrc = { cwd: true, plugins: [ diff --git a/src/index.ts b/src/index.ts index 7be8045..40dc317 100644 --- a/src/index.ts +++ b/src/index.ts @@ -19,47 +19,81 @@ program .version(`1.0.0`) .usage(' -- [options]') .argument('') - .option('-d, --dev', 'my test option') - .action(async (projectName, options) => { - let projectDirectoryPath = projectName; - - if (options?.dev) { - // if the dev flag is passed create a temp directory for the project installation - // this is for testing as otherwise we would pollute the root dir - if (!fs.existsSync('./tmp')) await fs.promises.mkdir('./tmp'); - projectDirectoryPath = path.join('tmp', projectName); + .option('--cypress', 'use cypress') + .option('--docker', 'use docker') + .option('--dotEnvFiles', 'create dot env files') + .option('--eslint', 'use eslint') + .option('--husky', 'use husky') + .option('--img-opt', 'use next Image Optimisation (install sharp)') + .option('--jest', 'use jest') + .option('--lint-staged', 'use lint-staged') + .option('--optional-dependencies ', 'install optional dependencies') + .option('--prettier', 'use prettier') + .option('--react-testing-library', 'use React testing-library') + .option('--storybook', 'use storybook') + .option('--use-bun', 'use bun as the package manager') + .option('--use-npm', 'use npm as the package manager') + .option('--use-pnpm', 'use pnpm as the package manager') + .option('--use-yarn', 'use yarn as the package manager') + .option('-d, --dev', 'run in dev mode') + .option('--clean', 'clean the tmp dev directory') + .option('-ts, --typescript', 'use typescript') + .option('--debug', 'Debug') + .action( + async ( + projectName, + // TODO: add ability to configure via cli options + options + ) => { + let projectDirectoryPath = path.resolve(projectName); + + if (options?.dev) { + // if the dev flag is passed create a temp directory for the project installation + // this is for testing as otherwise we would pollute the root dir + const tempDir = path.resolve('./tmp'); + // clean the tmp directory first + if (options.clean) { + await fs.promises.rmdir(tempDir, { recursive: true }); + } + if (!fs.existsSync(tempDir)) { + await fs.promises.mkdir(tempDir); + } + projectDirectoryPath = path.join(tempDir, projectName); + } + + const { packageManagerChoice } = await prompts(packageManagerPrompt); + + const configurator = new Configurator({ + projectDirectoryPath, + packageManagerChoice, + }); + + await configurator.createNextApp(); + + const opts = await prompts(configurationPrompts); + + const hasOptions = + Object.values(opts).includes(true) || + opts.optionalDependencies.length > 0 || + opts.dotEnvFiles.length > 0; + + if (!hasOptions) { + // nothing to configure! + goodbye(); + return console.log( + `Looks like you've passed on all the configuration options. Maybe next time!` + ); + } + + configurator.setOptions(opts); + + await configurator.run(); } + ); - const { packageManagerChoice } = await prompts(packageManagerPrompt); +program.parse(process.argv); - const configurator = new Configurator({ - projectDirectoryPath, - packageManagerChoice, - }); - - // const nextConfig = - await configurator.createNextApp(); - - const opts = await prompts(configurationPrompts); - - const hasOptions = - Object.values(opts).includes(true) || - opts.optionalDependencies.length > 0 || - opts.dotEnvFiles.length > 0; - - if (!hasOptions) { - // nothing to configure! - goodbye(); - return console.log( - `Looks like you've passed on all the configuration options. Maybe next time!` - ); - } - - configurator.setOptions(opts); - - await configurator.run(); - }); - -program.parse(); +const options = program.opts(); +if (options.debug) console.log(options); export default program; diff --git a/src/templates/.eslintrc.json b/src/templates/.eslintrc.json deleted file mode 100644 index 66b49e1..0000000 --- a/src/templates/.eslintrc.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "root": true, - "plugins": ["@typescript-eslint", "testing-library"], - "extends": [ - "next/core-web-vitals", - "plugin:@typescript-eslint/recommended", - "prettier" - ], - "rules": { - "@typescript-eslint/no-unused-vars": "error", - "@typescript-eslint/no-explicit-any": "error" - }, - "overrides": [ - { - "files": [ - "**/__tests__/**/*.[jt]s?(x)", - "**/?(*.)+(spec|test).[jt]s?(x)" - ], - "extends": ["plugin:testing-library/react"] - } - ] -} diff --git a/src/templates/jest.config.ts b/src/templates/jest.config.ts new file mode 100644 index 0000000..2e74a21 --- /dev/null +++ b/src/templates/jest.config.ts @@ -0,0 +1,11 @@ +/** @type {import('ts-jest').JestConfigWithTsJest} */ + +export default { + preset: 'ts-jest', + testEnvironment: 'node', + modulePathIgnorePatterns: [ + '/dist/', + '/coverage/', + '/.husky/', + ], +} From 92b4f094df6c56a6274a701fd2f8c7c3645dcb91 Mon Sep 17 00:00:00 2001 From: Dominic Geargeoura Date: Thu, 5 Oct 2023 13:14:00 +0100 Subject: [PATCH 066/105] make lint staged helper added --- src/Configurator.ts | 36 ++++------------------------ src/helpers/makeLintStagedConfig.ts | 37 +++++++++++++++++++++++++++++ 2 files changed, 42 insertions(+), 31 deletions(-) create mode 100644 src/helpers/makeLintStagedConfig.ts diff --git a/src/Configurator.ts b/src/Configurator.ts index f38c3d2..9efb0b9 100644 --- a/src/Configurator.ts +++ b/src/Configurator.ts @@ -7,6 +7,7 @@ import { $ } from 'execa'; import prompts from 'prompts'; import { oops } from './utils.js'; +import makeLintStagedConfig from './helpers/makeLintStagedConfig.js'; import PackageManager, { PackageManagerKindEnum } from './PackageManager.js'; import { ChoiceValuesType } from './prompts.js'; @@ -395,40 +396,13 @@ class Configurator { // lint-staged if (lintStaged) { - const lintStagedConfig = this.makeLintStagedConfig(); - await this.packageManager.addToPackage('lint-staged', lintStagedConfig); + await this.packageManager.addToPackage( + 'lint-staged', + makeLintStagedConfig(this.options) + ); } }; - private makeLintStagedConfig() { - const { eslint, jest, prettier, typescript } = this.options; - - const tsLintStagedConfig = { - '**/*.{ts,tsx}': [ - ...(prettier ? ['prettier --check .', 'prettier --write .'] : []), - ...(eslint ? ['eslint .', 'eslint --fix .'] : []), - ...(jest ? ['jest --ci'] : []), - 'tsc --noEmit', - ], - }; - - const lintStagedConfig = { - '**/*.{js,jsx}': [ - ...(prettier ? ['prettier --check .', 'prettier --write .'] : []), - ...(eslint ? ['eslint .', ' eslint --fix .'] : []), - ...(jest ? [' jest --ci'] : []), - ], - ...(typescript ? tsLintStagedConfig : {}), - '**/*.{md, yml, yaml, json}': [ - 'prettier --check .', - 'prettier --write .', - ], - '**/*.{css}': ['prettier --check .', 'prettier --write .'], // TODO: add styledlint - }; - - return lintStagedConfig; - } - private configureEslint = async () => { const { storybook, prettier, eslint, typescript, reactTestingLibrary } = this.options; diff --git a/src/helpers/makeLintStagedConfig.ts b/src/helpers/makeLintStagedConfig.ts new file mode 100644 index 0000000..7fabc33 --- /dev/null +++ b/src/helpers/makeLintStagedConfig.ts @@ -0,0 +1,37 @@ +import { OptionsType } from '../Configurator.js'; + +type LintStagedConfigType = Pick< + OptionsType, + 'eslint' | 'jest' | 'prettier' | 'typescript' +>; + +function makeLintStagedConfig({ + eslint, + jest, + prettier, + typescript, +}: LintStagedConfigType) { + const tsLintStagedConfig = { + '**/*.{ts,tsx}': [ + ...(prettier ? ['prettier --check .', 'prettier --write .'] : []), + ...(eslint ? ['eslint .', 'eslint --fix .'] : []), + ...(jest ? ['jest --ci'] : []), + 'tsc --noEmit', + ], + }; + + const lintStagedConfig = { + '**/*.{js,jsx}': [ + ...(prettier ? ['prettier --check .', 'prettier --write .'] : []), + ...(eslint ? ['eslint .', ' eslint --fix .'] : []), + ...(jest ? [' jest --ci'] : []), + ], + ...(typescript ? tsLintStagedConfig : {}), + '**/*.{md, yml, yaml, json}': ['prettier --check .', 'prettier --write .'], + '**/*.{css}': ['prettier --check .', 'prettier --write .'], // TODO: add styledlint + }; + + return lintStagedConfig; +} + +export default makeLintStagedConfig; From dd264b0b5fd03a279dd1327b27091484510213e6 Mon Sep 17 00:00:00 2001 From: Dominic Geargeoura Date: Thu, 5 Oct 2023 17:00:58 +0100 Subject: [PATCH 067/105] added test and change tsconif module resolution to bundler --- jest.config.ts | 11 +- src/Configurator.ts | 2 +- src/helpers/makeLintStagedConfig.test.ts | 147 +++++++++++++++++++++++ src/helpers/makeLintStagedConfig.ts | 21 +++- src/templates/jest.config.js | 8 +- src/templates/jest.config.ts | 11 -- src/templates/jest.setup.js | 2 + tsconfig.json | 4 +- 8 files changed, 186 insertions(+), 20 deletions(-) create mode 100644 src/helpers/makeLintStagedConfig.test.ts delete mode 100644 src/templates/jest.config.ts create mode 100644 src/templates/jest.setup.js diff --git a/jest.config.ts b/jest.config.ts index 8745add..011906e 100644 --- a/jest.config.ts +++ b/jest.config.ts @@ -2,10 +2,19 @@ export default { preset: 'ts-jest', - testEnvironment: 'node', + collectCoverageFrom: ['src/**/*.{ts,js}'], + modulePaths: ['/src/'], modulePathIgnorePatterns: [ '/dist/', '/coverage/', '/.husky/', ], + transform: { + '^.+\\.[jt]s?(x)': [ + 'ts-jest', + { + useESM: true, + }, + ], + }, }; diff --git a/src/Configurator.ts b/src/Configurator.ts index 9efb0b9..549e706 100644 --- a/src/Configurator.ts +++ b/src/Configurator.ts @@ -173,7 +173,7 @@ class Configurator { 'next.config.js', ...(docker ? ['docker-compose.yml', 'Dockerfile', 'Makefile'] : []), ...(prettier ? ['.prettierrc.json', '.prettierignore'] : []), - ...(jest ? ['jest.config.js'] : []), + ...(jest ? ['jest.config.js', 'jest.setup.js'] : []), ]; this.config.configTemplateDirectories = [ diff --git a/src/helpers/makeLintStagedConfig.test.ts b/src/helpers/makeLintStagedConfig.test.ts new file mode 100644 index 0000000..b98b3c7 --- /dev/null +++ b/src/helpers/makeLintStagedConfig.test.ts @@ -0,0 +1,147 @@ +import makeLintStagedConfig from './makeLintStagedConfig'; + +describe('makeLintStagedConfig', () => { + it('should return a valid lint-staged configuration object', () => { + const expectedConfig = { + '**/*.{js,jsx}': [ + 'prettier --check .', + 'prettier --write .', + 'eslint .', + 'eslint --fix .', + 'jest --ci', + ], + '**/*.{ts,tsx}': [ + 'prettier --check .', + 'prettier --write .', + 'eslint .', + 'eslint --fix .', + 'jest --ci', + 'tsc --noEmit', + ], + '**/*.{md, yml, yaml, json}': [ + 'prettier --check .', + 'prettier --write .', + ], + '**/*.{css}': ['prettier --check .', 'prettier --write .'], + }; + + const config = makeLintStagedConfig({ + eslint: true, + jest: true, + prettier: true, + typescript: true, + }); + + expect(config).toEqual(expectedConfig); + }); + + it('should return a valid lint-staged configuration object without TypeScript', () => { + const expectedConfig = { + '**/*.{js,jsx}': [ + 'prettier --check .', + 'prettier --write .', + 'eslint .', + 'eslint --fix .', + 'jest --ci', + ], + '**/*.{md, yml, yaml, json}': [ + 'prettier --check .', + 'prettier --write .', + ], + '**/*.{css}': ['prettier --check .', 'prettier --write .'], + }; + + const config = makeLintStagedConfig({ + eslint: true, + jest: true, + prettier: true, + typescript: false, + }); + + expect(config).toEqual(expectedConfig); + }); + + it('should return a valid lint-staged configuration object without Jest', () => { + const expectedConfig = { + '**/*.{js,jsx}': [ + 'prettier --check .', + 'prettier --write .', + 'eslint .', + 'eslint --fix .', + ], + '**/*.{ts,tsx}': [ + 'prettier --check .', + 'prettier --write .', + 'eslint .', + 'eslint --fix .', + 'tsc --noEmit', + ], + '**/*.{md, yml, yaml, json}': [ + 'prettier --check .', + 'prettier --write .', + ], + '**/*.{css}': ['prettier --check .', 'prettier --write .'], + }; + + const config = makeLintStagedConfig({ + eslint: true, + jest: false, + prettier: true, + typescript: true, + }); + + expect(config).toEqual(expectedConfig); + }); + + it('should return a valid lint-staged configuration object without Prettier', () => { + const expectedConfig = { + '**/*.{js,jsx}': ['eslint .', 'eslint --fix .', 'jest --ci'], + '**/*.{ts,tsx}': [ + 'eslint .', + 'eslint --fix .', + 'jest --ci', + 'tsc --noEmit', + ], + }; + + const config = makeLintStagedConfig({ + eslint: true, + jest: true, + prettier: false, + typescript: true, + }); + + expect(config).toEqual(expectedConfig); + }); + + it('should return a valid lint-staged configuration object without ESLint', () => { + const options = { + eslint: false, + jest: true, + prettier: true, + typescript: true, + }; + const expectedConfig = { + '**/*.{js,jsx}': [ + 'prettier --check .', + 'prettier --write .', + 'jest --ci', + ], + '**/*.{ts,tsx}': [ + 'prettier --check .', + 'prettier --write .', + 'jest --ci', + 'tsc --noEmit', + ], + '**/*.{md, yml, yaml, json}': [ + 'prettier --check .', + 'prettier --write .', + ], + '**/*.{css}': ['prettier --check .', 'prettier --write .'], // TODO: add styledlint + }; + + const config = makeLintStagedConfig(options); + + expect(config).toEqual(expectedConfig); + }); +}); diff --git a/src/helpers/makeLintStagedConfig.ts b/src/helpers/makeLintStagedConfig.ts index 7fabc33..30e7f13 100644 --- a/src/helpers/makeLintStagedConfig.ts +++ b/src/helpers/makeLintStagedConfig.ts @@ -20,15 +20,28 @@ function makeLintStagedConfig({ ], }; + const mdYmlJsonLintStagedConfig = { + '**/*.{md, yml, yaml, json}': [ + ...(prettier ? ['prettier --check .', 'prettier --write .'] : []), + ], + }; + + const stylesLintStagedConfig = { + '**/*.{css}': [ + ...(prettier ? ['prettier --check .', 'prettier --write .'] : []), + // TODO: add styledlint + ], + }; + const lintStagedConfig = { '**/*.{js,jsx}': [ ...(prettier ? ['prettier --check .', 'prettier --write .'] : []), - ...(eslint ? ['eslint .', ' eslint --fix .'] : []), - ...(jest ? [' jest --ci'] : []), + ...(eslint ? ['eslint .', 'eslint --fix .'] : []), + ...(jest ? ['jest --ci'] : []), ], ...(typescript ? tsLintStagedConfig : {}), - '**/*.{md, yml, yaml, json}': ['prettier --check .', 'prettier --write .'], - '**/*.{css}': ['prettier --check .', 'prettier --write .'], // TODO: add styledlint + ...(prettier ? mdYmlJsonLintStagedConfig : {}), + ...(prettier ? stylesLintStagedConfig : {}), }; return lintStagedConfig; diff --git a/src/templates/jest.config.js b/src/templates/jest.config.js index e8f4a0c..fd04a1c 100644 --- a/src/templates/jest.config.js +++ b/src/templates/jest.config.js @@ -1,9 +1,15 @@ const nextJest = require('next/jest') + const createJestConfig = nextJest({ + // Provide the path to your Next.js app to load next.config.js and .env files in your test environment dir: './', }) + +// Add any custom config to be passed to Jest const customJestConfig = { - moduleDirectories: ['node_modules', '/'], + setupFilesAfterEnv: ['/jest.setup.js'], testEnvironment: 'jest-environment-jsdom', } + +// createJestConfig is exported this way to ensure that next/jest can load the Next.js config which is async module.exports = createJestConfig(customJestConfig) diff --git a/src/templates/jest.config.ts b/src/templates/jest.config.ts deleted file mode 100644 index 2e74a21..0000000 --- a/src/templates/jest.config.ts +++ /dev/null @@ -1,11 +0,0 @@ -/** @type {import('ts-jest').JestConfigWithTsJest} */ - -export default { - preset: 'ts-jest', - testEnvironment: 'node', - modulePathIgnorePatterns: [ - '/dist/', - '/coverage/', - '/.husky/', - ], -} diff --git a/src/templates/jest.setup.js b/src/templates/jest.setup.js new file mode 100644 index 0000000..d5dc356 --- /dev/null +++ b/src/templates/jest.setup.js @@ -0,0 +1,2 @@ +// Learn more: https://github.com/testing-library/jest-dom +import '@testing-library/jest-dom' diff --git a/tsconfig.json b/tsconfig.json index ba3ccb3..15ae346 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,8 +1,8 @@ { "compilerOptions": { "esModuleInterop": true, - "module": "NodeNext", - "moduleResolution": "NodeNext", + "module": "ES2020", + "moduleResolution": "Bundler", "outDir": "dist", "rootDir": "src", "sourceMap": true, From e0e009c1e468f8bcb11b0bd082c52cc7ab7094d6 Mon Sep 17 00:00:00 2001 From: Dominic Geargeoura Date: Thu, 5 Oct 2023 17:02:20 +0100 Subject: [PATCH 068/105] lint staged change --- .husky/pre-commit | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.husky/pre-commit b/.husky/pre-commit index c73a288..999c35c 100755 --- a/.husky/pre-commit +++ b/.husky/pre-commit @@ -20,9 +20,9 @@ printf "\n------------------------------------------\n" npx leasot 'src/**/*.[jt]s?(x)' --exit-nicely # TODO: Add tests! -# printf "\n\nTEST COVERAGE\n--------------\n" +printf "\n\nTEST COVERAGE\n--------------\n" -# npx jest --coverage --ci +npx jest --coverage --ci printf "\n\n------------------------------------------\n\n" printf '%b ' "\033[1m"Now push your code!"\033[0m 🚀" From 302cd5ddb1f43676684fff7defb40d37ec2109ab Mon Sep 17 00:00:00 2001 From: Dominic Geargeoura Date: Thu, 5 Oct 2023 17:02:53 +0100 Subject: [PATCH 069/105] lint staged change --- .husky/pre-commit | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.husky/pre-commit b/.husky/pre-commit index 999c35c..06e4910 100755 --- a/.husky/pre-commit +++ b/.husky/pre-commit @@ -22,7 +22,7 @@ npx leasot 'src/**/*.[jt]s?(x)' --exit-nicely # TODO: Add tests! printf "\n\nTEST COVERAGE\n--------------\n" -npx jest --coverage --ci +npx jest --coverage --silent printf "\n\n------------------------------------------\n\n" printf '%b ' "\033[1m"Now push your code!"\033[0m 🚀" From 9720605c7770cf6354d885d07a85d000a6703e05 Mon Sep 17 00:00:00 2001 From: Dominic Geargeoura Date: Thu, 5 Oct 2023 17:07:04 +0100 Subject: [PATCH 070/105] testing --- .husky/pre-commit | 2 +- .lintstagedrc.js | 1 + src/helpers/makeLintStagedConfig.test.ts | 1 + 3 files changed, 3 insertions(+), 1 deletion(-) diff --git a/.husky/pre-commit b/.husky/pre-commit index 06e4910..6f35ac7 100755 --- a/.husky/pre-commit +++ b/.husky/pre-commit @@ -22,7 +22,7 @@ npx leasot 'src/**/*.[jt]s?(x)' --exit-nicely # TODO: Add tests! printf "\n\nTEST COVERAGE\n--------------\n" -npx jest --coverage --silent +npx jest --ci printf "\n\n------------------------------------------\n\n" printf '%b ' "\033[1m"Now push your code!"\033[0m 🚀" diff --git a/.lintstagedrc.js b/.lintstagedrc.js index c359226..dbeca98 100644 --- a/.lintstagedrc.js +++ b/.lintstagedrc.js @@ -4,6 +4,7 @@ export default { `prettier --write ${filenames.join(' ')}`, `eslint ${filenames.join(' ')}`, `eslint --fix ${filenames.join(' ')}`, + // `test:ci --findRelatedTests ${filenames.join(' ')}`, `tsc --noEmit`, ], diff --git a/src/helpers/makeLintStagedConfig.test.ts b/src/helpers/makeLintStagedConfig.test.ts index b98b3c7..536b474 100644 --- a/src/helpers/makeLintStagedConfig.test.ts +++ b/src/helpers/makeLintStagedConfig.test.ts @@ -2,6 +2,7 @@ import makeLintStagedConfig from './makeLintStagedConfig'; describe('makeLintStagedConfig', () => { it('should return a valid lint-staged configuration object', () => { + //test const expectedConfig = { '**/*.{js,jsx}': [ 'prettier --check .', From 78a15a882efd7415549dd0a5e839526f7cd16b5b Mon Sep 17 00:00:00 2001 From: Dominic Geargeoura Date: Thu, 5 Oct 2023 17:09:58 +0100 Subject: [PATCH 071/105] testing --- .husky/pre-commit | 1 - .husky/pre-push | 4 ++++ .lintstagedrc.js | 2 +- 3 files changed, 5 insertions(+), 2 deletions(-) create mode 100644 .husky/pre-push diff --git a/.husky/pre-commit b/.husky/pre-commit index 6f35ac7..a523c3c 100755 --- a/.husky/pre-commit +++ b/.husky/pre-commit @@ -22,7 +22,6 @@ npx leasot 'src/**/*.[jt]s?(x)' --exit-nicely # TODO: Add tests! printf "\n\nTEST COVERAGE\n--------------\n" -npx jest --ci printf "\n\n------------------------------------------\n\n" printf '%b ' "\033[1m"Now push your code!"\033[0m 🚀" diff --git a/.husky/pre-push b/.husky/pre-push new file mode 100644 index 0000000..b70b1fc --- /dev/null +++ b/.husky/pre-push @@ -0,0 +1,4 @@ +#!/usr/bin/env sh +. "$(dirname -- "$0")/_/husky.sh" + + diff --git a/.lintstagedrc.js b/.lintstagedrc.js index dbeca98..261eaa4 100644 --- a/.lintstagedrc.js +++ b/.lintstagedrc.js @@ -4,7 +4,7 @@ export default { `prettier --write ${filenames.join(' ')}`, `eslint ${filenames.join(' ')}`, `eslint --fix ${filenames.join(' ')}`, - // `test:ci --findRelatedTests ${filenames.join(' ')}`, + `jest --passWithNoTests --findRelatedTests ${filenames.join(' ')}`, `tsc --noEmit`, ], From be06db0cbfa773eb9244c224d75bcb501f3327e7 Mon Sep 17 00:00:00 2001 From: Dominic Geargeoura Date: Thu, 5 Oct 2023 19:14:44 +0100 Subject: [PATCH 072/105] rollup config start, test for helper, tes config build --- .prettierrc.json | 3 + jest.config.ts | 4 + package-lock.json | 283 ++++++++++++++++++++++- package.json | 9 +- rollup.config.js | 46 +++- src/Configurator.ts | 21 +- src/PackageManager.ts | 6 +- src/helpers/makeLintStagedConfig.test.ts | 24 +- src/helpers/makeLintStagedConfig.ts | 4 +- src/index.ts | 8 +- src/prompts.ts | 1 + src/templates/jest.config.ts | 15 ++ tsconfig.build.json | 22 ++ tsconfig.json | 4 +- 14 files changed, 391 insertions(+), 59 deletions(-) create mode 100644 src/templates/jest.config.ts create mode 100644 tsconfig.build.json diff --git a/.prettierrc.json b/.prettierrc.json index 0a72520..4d7f520 100644 --- a/.prettierrc.json +++ b/.prettierrc.json @@ -1,4 +1,7 @@ { + "plugins": ["@trivago/prettier-plugin-sort-imports"], + "importOrderSeparation": true, + "importOrder": ["^[./]"], "trailingComma": "es5", "tabWidth": 2, "semi": true, diff --git a/jest.config.ts b/jest.config.ts index 011906e..30e7b02 100644 --- a/jest.config.ts +++ b/jest.config.ts @@ -1,9 +1,13 @@ /** @type {import('ts-jest').JestConfigWithTsJest} */ export default { + extensionsToTreatAsEsm: ['.ts'], preset: 'ts-jest', collectCoverageFrom: ['src/**/*.{ts,js}'], modulePaths: ['/src/'], + moduleNameMapper: { + '(.+)\\.js': '$1', + }, modulePathIgnorePatterns: [ '/dist/', '/coverage/', diff --git a/package-lock.json b/package-lock.json index c2f869e..432e164 100644 --- a/package-lock.json +++ b/package-lock.json @@ -18,8 +18,11 @@ "prompts": "^2.4.2" }, "devDependencies": { - "@rollup/plugin-commonjs": "^25.0.4", - "@rollup/plugin-node-resolve": "^15.2.1", + "@rollup/plugin-commonjs": "^25.0.5", + "@rollup/plugin-json": "^6.0.1", + "@rollup/plugin-node-resolve": "^15.2.2", + "@rollup/plugin-terser": "^0.4.4", + "@rollup/plugin-typescript": "^11.1.5", "@trivago/prettier-plugin-sort-imports": "^4.2.0", "@types/figlet": "^1.5.6", "@types/jest": "^29.5.5", @@ -39,10 +42,12 @@ "pinst": "^3.0.0", "prettier": "^3.0.3", "rollup": "^3.29.2", + "rollup-plugin-copy": "^3.5.0", "rollup-plugin-dts": "^6.0.2", "rollup-plugin-esbuild": "^6.0.1", "ts-jest": "^29.1.1", "ts-node": "^10.9.1", + "tslib": "^2.6.2", "typescript": "^5.2.2" } }, @@ -1880,6 +1885,16 @@ "node": ">=6.0.0" } }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.5.tgz", + "integrity": "sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, "node_modules/@jridgewell/sourcemap-codec": { "version": "1.4.15", "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", @@ -1932,9 +1947,9 @@ } }, "node_modules/@rollup/plugin-commonjs": { - "version": "25.0.4", - "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-25.0.4.tgz", - "integrity": "sha512-L92Vz9WUZXDnlQQl3EwbypJR4+DM2EbsO+/KOcEkP4Mc6Ct453EeDB2uH9lgRwj4w5yflgNpq9pHOiY8aoUXBQ==", + "version": "25.0.5", + "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-25.0.5.tgz", + "integrity": "sha512-xY8r/A9oisSeSuLCTfhssyDjo9Vp/eDiRLXkg1MXCcEEgEjPmLU+ZyDB20OOD0NlyDa/8SGbK5uIggF5XTx77w==", "dev": true, "dependencies": { "@rollup/pluginutils": "^5.0.1", @@ -1948,7 +1963,7 @@ "node": ">=14.0.0" }, "peerDependencies": { - "rollup": "^2.68.0||^3.0.0" + "rollup": "^2.68.0||^3.0.0||^4.0.0" }, "peerDependenciesMeta": { "rollup": { @@ -2008,10 +2023,30 @@ "node": ">=10" } }, + "node_modules/@rollup/plugin-json": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/@rollup/plugin-json/-/plugin-json-6.0.1.tgz", + "integrity": "sha512-RgVfl5hWMkxN1h/uZj8FVESvPuBJ/uf6ly6GTj0GONnkfoBN5KC0MSz+PN2OLDgYXMhtG0mWpTrkiOjoxAIevw==", + "dev": true, + "dependencies": { + "@rollup/pluginutils": "^5.0.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, "node_modules/@rollup/plugin-node-resolve": { - "version": "15.2.1", - "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-15.2.1.tgz", - "integrity": "sha512-nsbUg588+GDSu8/NS8T4UAshO6xeaOfINNuXeVHcKV02LJtoRaM1SiOacClw4kws1SFiNhdLGxlbMY9ga/zs/w==", + "version": "15.2.2", + "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-15.2.2.tgz", + "integrity": "sha512-f64bU4OKqV0yihtxFemmuf0oj37pToCFMISCA+sJbbIAl5wcpbRO9XgWNWb1tDiWQJUcPxo6V0l59hcuZOQ3kw==", "dev": true, "dependencies": { "@rollup/pluginutils": "^5.0.1", @@ -2025,7 +2060,7 @@ "node": ">=14.0.0" }, "peerDependencies": { - "rollup": "^2.78.0||^3.0.0" + "rollup": "^2.78.0||^3.0.0||^4.0.0" }, "peerDependenciesMeta": { "rollup": { @@ -2033,6 +2068,54 @@ } } }, + "node_modules/@rollup/plugin-terser": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/@rollup/plugin-terser/-/plugin-terser-0.4.4.tgz", + "integrity": "sha512-XHeJC5Bgvs8LfukDwWZp7yeqin6ns8RTl2B9avbejt6tZqsqvVoWI7ZTQrcNsfKEDWBTnTxM8nMDkO2IFFbd0A==", + "dev": true, + "dependencies": { + "serialize-javascript": "^6.0.1", + "smob": "^1.0.0", + "terser": "^5.17.4" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^2.0.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/plugin-typescript": { + "version": "11.1.5", + "resolved": "https://registry.npmjs.org/@rollup/plugin-typescript/-/plugin-typescript-11.1.5.tgz", + "integrity": "sha512-rnMHrGBB0IUEv69Q8/JGRD/n4/n6b3nfpufUu26axhUcboUzv/twfZU8fIBbTOphRAe0v8EyxzeDpKXqGHfyDA==", + "dev": true, + "dependencies": { + "@rollup/pluginutils": "^5.0.1", + "resolve": "^1.22.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^2.14.0||^3.0.0||^4.0.0", + "tslib": "*", + "typescript": ">=3.7.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + }, + "tslib": { + "optional": true + } + } + }, "node_modules/@rollup/pluginutils": { "version": "5.0.4", "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.0.4.tgz", @@ -2207,6 +2290,25 @@ "integrity": "sha512-AOdn9cKJGXpqfHeif16xeGMwWefB4nsOyxkdRMpc+PEP3nUxzu3psJfIqhjrCNW4Sejt5i6rISWmEwK0sw03mA==", "dev": true }, + "node_modules/@types/fs-extra": { + "version": "8.1.3", + "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-8.1.3.tgz", + "integrity": "sha512-7IdV01N0u/CaVO0fuY1YmEg14HQN3+EW8mpNgg6NEfxEl/lzCa5OxlBu3iFsCAdamnYOcTQ7oEi43Xc/67Rgzw==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==", + "dev": true, + "dependencies": { + "@types/minimatch": "*", + "@types/node": "*" + } + }, "node_modules/@types/graceful-fs": { "version": "4.1.7", "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.7.tgz", @@ -2256,6 +2358,12 @@ "integrity": "sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==", "dev": true }, + "node_modules/@types/minimatch": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-5.1.2.tgz", + "integrity": "sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==", + "dev": true + }, "node_modules/@types/node": { "version": "20.5.9", "resolved": "https://registry.npmjs.org/@types/node/-/node-20.5.9.tgz", @@ -3824,6 +3932,20 @@ "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", "dev": true }, + "node_modules/fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", @@ -4226,6 +4348,15 @@ "node": ">=8" } }, + "node_modules/is-plain-object": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-3.0.1.tgz", + "integrity": "sha512-Xnpx182SBMrr/aBik8y+GuR4U1L9FqMSojwDQwPMmxyC6bvEqly9UBCxhauBF5vNh2gwWJNX6oDV7O+OM4z34g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/is-reference": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.2.1.tgz", @@ -5116,6 +5247,15 @@ "node": ">=6" } }, + "node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "dev": true, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, "node_modules/keyv": { "version": "4.5.3", "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.3.tgz", @@ -6096,6 +6236,15 @@ } ] }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, "node_modules/react-is": { "version": "18.2.0", "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", @@ -6269,6 +6418,47 @@ "fsevents": "~2.3.2" } }, + "node_modules/rollup-plugin-copy": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/rollup-plugin-copy/-/rollup-plugin-copy-3.5.0.tgz", + "integrity": "sha512-wI8D5dvYovRMx/YYKtUNt3Yxaw4ORC9xo6Gt9t22kveWz1enG9QrhVlagzwrxSC455xD1dHMKhIJkbsQ7d48BA==", + "dev": true, + "dependencies": { + "@types/fs-extra": "^8.0.1", + "colorette": "^1.1.0", + "fs-extra": "^8.1.0", + "globby": "10.0.1", + "is-plain-object": "^3.0.0" + }, + "engines": { + "node": ">=8.3" + } + }, + "node_modules/rollup-plugin-copy/node_modules/colorette": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.4.0.tgz", + "integrity": "sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g==", + "dev": true + }, + "node_modules/rollup-plugin-copy/node_modules/globby": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/globby/-/globby-10.0.1.tgz", + "integrity": "sha512-sSs4inE1FB2YQiymcmTv6NWENryABjUNPeWhOvmn4SjtKybglsyPZxFB3U1/+L1bYi0rNZDqCLlHyLYDl1Pq5A==", + "dev": true, + "dependencies": { + "@types/glob": "^7.1.1", + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.0.3", + "glob": "^7.1.3", + "ignore": "^5.1.1", + "merge2": "^1.2.3", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/rollup-plugin-dts": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/rollup-plugin-dts/-/rollup-plugin-dts-6.0.2.tgz", @@ -6367,6 +6557,15 @@ "node": ">=10" } }, + "node_modules/serialize-javascript": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.1.tgz", + "integrity": "sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==", + "dev": true, + "dependencies": { + "randombytes": "^2.1.0" + } + }, "node_modules/shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", @@ -6439,6 +6638,12 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, + "node_modules/smob": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/smob/-/smob-1.4.1.tgz", + "integrity": "sha512-9LK+E7Hv5R9u4g4C3p+jjLstaLe11MDsL21UpYaCNmapvMkYhqCV4A/f/3gyH8QjMyh6l68q9xC85vihY9ahMQ==", + "dev": true + }, "node_modules/source-map": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", @@ -6647,6 +6852,49 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/terser": { + "version": "5.21.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.21.0.tgz", + "integrity": "sha512-WtnFKrxu9kaoXuiZFSGrcAvvBqAdmKx0SFNmVNYdJamMu9yyN3I/QF0FbH4QcqJQ+y1CJnzxGIKH0cSj+FGYRw==", + "dev": true, + "dependencies": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.8.2", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/terser/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "node_modules/terser/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/terser/node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, "node_modules/test-exclude": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", @@ -6792,6 +7040,12 @@ } } }, + "node_modules/tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", + "dev": true + }, "node_modules/type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", @@ -6838,6 +7092,15 @@ "node": ">=14.17" } }, + "node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true, + "engines": { + "node": ">= 4.0.0" + } + }, "node_modules/update-browserslist-db": { "version": "1.0.13", "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", diff --git a/package.json b/package.json index a3d39db..d94544e 100644 --- a/package.json +++ b/package.json @@ -35,8 +35,11 @@ "author": "", "license": "ISC", "devDependencies": { - "@rollup/plugin-commonjs": "^25.0.4", - "@rollup/plugin-node-resolve": "^15.2.1", + "@rollup/plugin-commonjs": "^25.0.5", + "@rollup/plugin-json": "^6.0.1", + "@rollup/plugin-node-resolve": "^15.2.2", + "@rollup/plugin-terser": "^0.4.4", + "@rollup/plugin-typescript": "^11.1.5", "@trivago/prettier-plugin-sort-imports": "^4.2.0", "@types/figlet": "^1.5.6", "@types/jest": "^29.5.5", @@ -56,10 +59,12 @@ "pinst": "^3.0.0", "prettier": "^3.0.3", "rollup": "^3.29.2", + "rollup-plugin-copy": "^3.5.0", "rollup-plugin-dts": "^6.0.2", "rollup-plugin-esbuild": "^6.0.1", "ts-jest": "^29.1.1", "ts-node": "^10.9.1", + "tslib": "^2.6.2", "typescript": "^5.2.2" }, "dependencies": { diff --git a/rollup.config.js b/rollup.config.js index 81296f1..4338bc9 100644 --- a/rollup.config.js +++ b/rollup.config.js @@ -1,25 +1,47 @@ -import dts from 'rollup-plugin-dts'; -import esbuild from 'rollup-plugin-esbuild'; +import commonjs from '@rollup/plugin-commonjs'; +import json from '@rollup/plugin-json'; +import resolve from '@rollup/plugin-node-resolve'; +import terser from '@rollup/plugin-terser'; +import typescript from '@rollup/plugin-typescript'; +import copy from 'rollup-plugin-copy'; +// import esbuild from 'rollup-plugin-esbuild'; + +// TDDO: - Get roll up working :( +// TDDO: - fix circular dependency warning when building rollup export default [ { input: `src/index.ts`, - plugins: [esbuild()], + plugins: [ + json(), + commonjs({ extensions: ['.js', '.ts'] }), + resolve({ + preferBuiltins: true, + }), + typescript({ + tsconfig: './tsconfig.build.json', + }), + copy({ + targets: [ + { src: 'src/markdown', dest: 'dist/markdown' }, + { src: 'src/templates', dest: 'dist/templates' }, + ], + }), + ], output: [ { - file: `dist/bundle.js`, + file: `dist/bundle.mjs`, + format: 'esm', + sourcemap: true, + exports: 'default', + }, + { + file: `dist/bundle.min.mjs`, format: 'esm', sourcemap: true, exports: 'default', + plugins: [terser()], }, ], }, - { - input: `src/index.ts`, - plugins: [dts()], - output: { - file: `dist/bundle.d.ts`, - format: 'es', - }, - }, ]; diff --git a/src/Configurator.ts b/src/Configurator.ts index 549e706..a484023 100644 --- a/src/Configurator.ts +++ b/src/Configurator.ts @@ -1,16 +1,14 @@ -import path from 'path'; +import { $ } from 'execa'; import fs from 'fs'; import ora from 'ora'; +import path from 'path'; import picocolors from 'picocolors'; -import { $ } from 'execa'; - import prompts from 'prompts'; -import { oops } from './utils.js'; -import makeLintStagedConfig from './helpers/makeLintStagedConfig.js'; - import PackageManager, { PackageManagerKindEnum } from './PackageManager.js'; +import makeLintStagedConfig from './helpers/makeLintStagedConfig.js'; import { ChoiceValuesType } from './prompts.js'; +import { oops } from './utils.js'; type ConfiguratorPropsType = { packageManagerChoice: PackageManagerKindEnum; @@ -286,7 +284,7 @@ class Configurator { public installConfigureGitHusky = async () => { const $execa = $({ cwd: this.cwd }); const pm = this.packageManager.getKind(); - const { husky, eslint, lintStaged, prettier, typescript } = this.options; + const { eslint, jest, lintStaged, prettier, typescript } = this.options; this.spinner.start('Configuring Git and Husky'); @@ -319,11 +317,12 @@ class Configurator { let huskyPreCommit = `#!/usr/bin/env sh` + `\n` + `. "$(dirname -- "$0")/_/husky.sh"`; - if (husky && lintStaged) { + if (lintStaged) { huskyPreCommit += `\n\n` + `${pm} run lint-staged`; } else { if (prettier) { - huskyPreCommit += `\n\n` + `${pm} run format:write`; + huskyPreCommit += + `\n\n` + `${pm} run format:check` + `\n\n` + `${pm} run format:write`; } if (eslint) { @@ -331,6 +330,10 @@ class Configurator { `\n\n` + `${pm} run lint:check` + `\n\n` + `${pm} run lint:fix`; } + if (jest) { + huskyPreCommit += `\n\n` + `${pm} run test --passWithNoTests`; + } + if (typescript) { huskyPreCommit += `\n\n` + `${pm} run build --no-emit`; } diff --git a/src/PackageManager.ts b/src/PackageManager.ts index 9c930ff..d3caf46 100644 --- a/src/PackageManager.ts +++ b/src/PackageManager.ts @@ -1,7 +1,7 @@ -import path from 'path'; -import os from 'os'; -import fs from 'fs'; import { execa } from 'execa'; +import fs from 'fs'; +import os from 'os'; +import path from 'path'; export enum PackageManagerKindEnum { NPM = 'npm', diff --git a/src/helpers/makeLintStagedConfig.test.ts b/src/helpers/makeLintStagedConfig.test.ts index 536b474..087d8d2 100644 --- a/src/helpers/makeLintStagedConfig.test.ts +++ b/src/helpers/makeLintStagedConfig.test.ts @@ -1,17 +1,17 @@ -import makeLintStagedConfig from './makeLintStagedConfig'; +import makeLintStagedConfig from './makeLintStagedConfig.js'; describe('makeLintStagedConfig', () => { it('should return a valid lint-staged configuration object', () => { //test const expectedConfig = { - '**/*.{js,jsx}': [ + '**/*.js?(x)': [ 'prettier --check .', 'prettier --write .', 'eslint .', 'eslint --fix .', 'jest --ci', ], - '**/*.{ts,tsx}': [ + '**/*.ts?(x)': [ 'prettier --check .', 'prettier --write .', 'eslint .', @@ -38,7 +38,7 @@ describe('makeLintStagedConfig', () => { it('should return a valid lint-staged configuration object without TypeScript', () => { const expectedConfig = { - '**/*.{js,jsx}': [ + '**/*.js?(x)': [ 'prettier --check .', 'prettier --write .', 'eslint .', @@ -64,13 +64,13 @@ describe('makeLintStagedConfig', () => { it('should return a valid lint-staged configuration object without Jest', () => { const expectedConfig = { - '**/*.{js,jsx}': [ + '**/*.js?(x)': [ 'prettier --check .', 'prettier --write .', 'eslint .', 'eslint --fix .', ], - '**/*.{ts,tsx}': [ + '**/*.ts?(x)': [ 'prettier --check .', 'prettier --write .', 'eslint .', @@ -96,8 +96,8 @@ describe('makeLintStagedConfig', () => { it('should return a valid lint-staged configuration object without Prettier', () => { const expectedConfig = { - '**/*.{js,jsx}': ['eslint .', 'eslint --fix .', 'jest --ci'], - '**/*.{ts,tsx}': [ + '**/*.js?(x)': ['eslint .', 'eslint --fix .', 'jest --ci'], + '**/*.ts?(x)': [ 'eslint .', 'eslint --fix .', 'jest --ci', @@ -123,12 +123,8 @@ describe('makeLintStagedConfig', () => { typescript: true, }; const expectedConfig = { - '**/*.{js,jsx}': [ - 'prettier --check .', - 'prettier --write .', - 'jest --ci', - ], - '**/*.{ts,tsx}': [ + '**/*.js?(x)': ['prettier --check .', 'prettier --write .', 'jest --ci'], + '**/*.ts?(x)': [ 'prettier --check .', 'prettier --write .', 'jest --ci', diff --git a/src/helpers/makeLintStagedConfig.ts b/src/helpers/makeLintStagedConfig.ts index 30e7f13..0242410 100644 --- a/src/helpers/makeLintStagedConfig.ts +++ b/src/helpers/makeLintStagedConfig.ts @@ -12,7 +12,7 @@ function makeLintStagedConfig({ typescript, }: LintStagedConfigType) { const tsLintStagedConfig = { - '**/*.{ts,tsx}': [ + '**/*.ts?(x)': [ ...(prettier ? ['prettier --check .', 'prettier --write .'] : []), ...(eslint ? ['eslint .', 'eslint --fix .'] : []), ...(jest ? ['jest --ci'] : []), @@ -34,7 +34,7 @@ function makeLintStagedConfig({ }; const lintStagedConfig = { - '**/*.{js,jsx}': [ + '**/*.js?(x)': [ ...(prettier ? ['prettier --check .', 'prettier --write .'] : []), ...(eslint ? ['eslint .', 'eslint --fix .'] : []), ...(jest ? ['jest --ci'] : []), diff --git a/src/index.ts b/src/index.ts index 40dc317..f8a0933 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,15 +1,13 @@ #!/usr/bin/env ts-node -import path from 'path'; -import fs from 'fs'; - import { program } from 'commander'; import figlet from 'figlet'; +import fs from 'fs'; +import path from 'path'; import prompts from 'prompts'; -import { goodbye } from './utils.js'; - import Configurator from './Configurator.js'; import { packageManagerPrompt, configurationPrompts } from './prompts.js'; +import { goodbye } from './utils.js'; console.log('\n', figlet.textSync('Nextra'), '\n\n'); diff --git a/src/prompts.ts b/src/prompts.ts index a478e03..6f6ebc8 100644 --- a/src/prompts.ts +++ b/src/prompts.ts @@ -1,5 +1,6 @@ import picocolors from 'picocolors'; import { PromptObject } from 'prompts'; + import { PackageManagerKindEnum } from './PackageManager.js'; const { blue } = picocolors; diff --git a/src/templates/jest.config.ts b/src/templates/jest.config.ts new file mode 100644 index 0000000..fd04a1c --- /dev/null +++ b/src/templates/jest.config.ts @@ -0,0 +1,15 @@ +const nextJest = require('next/jest') + +const createJestConfig = nextJest({ + // Provide the path to your Next.js app to load next.config.js and .env files in your test environment + dir: './', +}) + +// Add any custom config to be passed to Jest +const customJestConfig = { + setupFilesAfterEnv: ['/jest.setup.js'], + testEnvironment: 'jest-environment-jsdom', +} + +// createJestConfig is exported this way to ensure that next/jest can load the Next.js config which is async +module.exports = createJestConfig(customJestConfig) diff --git a/tsconfig.build.json b/tsconfig.build.json new file mode 100644 index 0000000..e7b2f79 --- /dev/null +++ b/tsconfig.build.json @@ -0,0 +1,22 @@ +{ + "compilerOptions": { + "esModuleInterop": true, + "module": "NodeNext", + "moduleResolution": "NodeNext", + "outDir": "dist", + "rootDir": "src", + "sourceMap": true, + "strict": true, + "target": "ES2020" + }, + "include": ["src/**/*.ts"], + "exclude": ["node_modules", "dist", "tmp", "src/**/*.test.ts"], + "ts-node": { + "esm": true, + "compilerOptions": { + "allowImportingTsExtensions": true, + "esModuleInterop": true, + "module": "NodeNext" + } + } +} diff --git a/tsconfig.json b/tsconfig.json index 15ae346..ba3ccb3 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,8 +1,8 @@ { "compilerOptions": { "esModuleInterop": true, - "module": "ES2020", - "moduleResolution": "Bundler", + "module": "NodeNext", + "moduleResolution": "NodeNext", "outDir": "dist", "rootDir": "src", "sourceMap": true, From 977e98754d4dcf7ebde504ff7cb53f9226dac361 Mon Sep 17 00:00:00 2001 From: Dominic Geargeoura Date: Thu, 5 Oct 2023 19:15:22 +0100 Subject: [PATCH 073/105] remove precommit hook --- .husky/pre-push | 4 ---- 1 file changed, 4 deletions(-) delete mode 100644 .husky/pre-push diff --git a/.husky/pre-push b/.husky/pre-push deleted file mode 100644 index b70b1fc..0000000 --- a/.husky/pre-push +++ /dev/null @@ -1,4 +0,0 @@ -#!/usr/bin/env sh -. "$(dirname -- "$0")/_/husky.sh" - - From 5865a4e84b78b57d684fec50e10685c39d130033 Mon Sep 17 00:00:00 2001 From: Dominic Geargeoura Date: Thu, 5 Oct 2023 19:16:13 +0100 Subject: [PATCH 074/105] comment out - also prev commit was to remove pre PUSH hook --- .husky/pre-commit | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.husky/pre-commit b/.husky/pre-commit index a523c3c..f242df2 100755 --- a/.husky/pre-commit +++ b/.husky/pre-commit @@ -20,7 +20,7 @@ printf "\n------------------------------------------\n" npx leasot 'src/**/*.[jt]s?(x)' --exit-nicely # TODO: Add tests! -printf "\n\nTEST COVERAGE\n--------------\n" +# printf "\n\nTEST COVERAGE\n--------------\n" printf "\n\n------------------------------------------\n\n" From 93ad06335687948e91fc74d29a88595d41a5dbca Mon Sep 17 00:00:00 2001 From: Dom Geargeoura Date: Fri, 6 Oct 2023 09:02:02 +0100 Subject: [PATCH 075/105] merge --- package.json | 6 +----- tsconfig.json | 5 +++-- 2 files changed, 4 insertions(+), 7 deletions(-) diff --git a/package.json b/package.json index d94544e..e0fc8e2 100644 --- a/package.json +++ b/package.json @@ -25,11 +25,7 @@ "prepare": "husky install", "start:build": "node ./dist/bundle.js", "start:standalone": "node ./.next/standalone/server.js", - "storybook": "storybook dev -p 6006", - "test:ci": "jest --ci", - "test": "jest --watch", - "test:coverage": "jest", - "todo": "leasot 'src/**/*.ts' --exit-nicely" + "storybook": "storybook dev -p 6006" }, "keywords": [], "author": "", diff --git a/tsconfig.json b/tsconfig.json index ba3ccb3..38ef19f 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -7,10 +7,11 @@ "rootDir": "src", "sourceMap": true, "strict": true, - "target": "ES2020" + "target": "ESNext", + "declaration": true }, "include": ["src/**/*.ts"], - "exclude": ["node_modules", "dist", "tmp", "src/templates"], + "exclude": ["node_modules", "dist", "tmp", "src/templates", "src/**/*.test.*"], "ts-node": { "esm": true, "compilerOptions": { From 24526dc72df0330b8d875b3e5769b62f58630069 Mon Sep 17 00:00:00 2001 From: Dominic Geargeoura Date: Fri, 6 Oct 2023 09:06:35 +0100 Subject: [PATCH 076/105] rollup changes --- rollup.config.js | 18 +++++++++--------- tsconfig.build.json | 22 ---------------------- 2 files changed, 9 insertions(+), 31 deletions(-) delete mode 100644 tsconfig.build.json diff --git a/rollup.config.js b/rollup.config.js index 4338bc9..c9d8e93 100644 --- a/rollup.config.js +++ b/rollup.config.js @@ -1,6 +1,6 @@ -import commonjs from '@rollup/plugin-commonjs'; -import json from '@rollup/plugin-json'; -import resolve from '@rollup/plugin-node-resolve'; +// import commonjs from '@rollup/plugin-commonjs'; +// import json from '@rollup/plugin-json'; +// import resolve from '@rollup/plugin-node-resolve'; import terser from '@rollup/plugin-terser'; import typescript from '@rollup/plugin-typescript'; import copy from 'rollup-plugin-copy'; @@ -13,13 +13,13 @@ export default [ { input: `src/index.ts`, plugins: [ - json(), - commonjs({ extensions: ['.js', '.ts'] }), - resolve({ - preferBuiltins: true, - }), + // json(), + // commonjs({ extensions: ['.js', '.ts'] }), + // resolve({ + // preferBuiltins: true, + // }), typescript({ - tsconfig: './tsconfig.build.json', + // tsconfig: './tsconfig.build.json', }), copy({ targets: [ diff --git a/tsconfig.build.json b/tsconfig.build.json deleted file mode 100644 index e7b2f79..0000000 --- a/tsconfig.build.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "compilerOptions": { - "esModuleInterop": true, - "module": "NodeNext", - "moduleResolution": "NodeNext", - "outDir": "dist", - "rootDir": "src", - "sourceMap": true, - "strict": true, - "target": "ES2020" - }, - "include": ["src/**/*.ts"], - "exclude": ["node_modules", "dist", "tmp", "src/**/*.test.ts"], - "ts-node": { - "esm": true, - "compilerOptions": { - "allowImportingTsExtensions": true, - "esModuleInterop": true, - "module": "NodeNext" - } - } -} From 4e0c5caeaf0ceb573c5718ed849402c66de8ed35 Mon Sep 17 00:00:00 2001 From: Dominic Geargeoura Date: Fri, 6 Oct 2023 11:39:05 +0100 Subject: [PATCH 077/105] tests added --- babel.config.js | 1 + jest.config.ts => jest.config.js | 8 +- package-lock.json | 1707 +++++++++++++++++++--- package.json | 7 +- src/Configurator.ts | 35 +- src/PackageManager.ts | 2 +- src/helpers/makeLintStaged.test.ts | 555 +++++++ src/helpers/makeLintStaged.ts | 111 ++ src/helpers/makeLintStagedConfig.test.ts | 144 -- src/helpers/makeLintStagedConfig.ts | 50 - tsconfig.json | 8 +- 11 files changed, 2193 insertions(+), 435 deletions(-) create mode 100644 babel.config.js rename jest.config.ts => jest.config.js (81%) create mode 100644 src/helpers/makeLintStaged.test.ts create mode 100644 src/helpers/makeLintStaged.ts delete mode 100644 src/helpers/makeLintStagedConfig.test.ts delete mode 100644 src/helpers/makeLintStagedConfig.ts diff --git a/babel.config.js b/babel.config.js new file mode 100644 index 0000000..82b44a3 --- /dev/null +++ b/babel.config.js @@ -0,0 +1 @@ +export default { presets: ['@babel/preset-env'] }; diff --git a/jest.config.ts b/jest.config.js similarity index 81% rename from jest.config.ts rename to jest.config.js index 30e7b02..39a8dbc 100644 --- a/jest.config.ts +++ b/jest.config.js @@ -14,11 +14,7 @@ export default { '/.husky/', ], transform: { - '^.+\\.[jt]s?(x)': [ - 'ts-jest', - { - useESM: true, - }, - ], + '^.+\\.(ts|tsx)?$': 'ts-jest', + '^.+\\.(js|jsx)$': 'babel-jest', }, }; diff --git a/package-lock.json b/package-lock.json index 432e164..11ef8fd 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,6 +10,8 @@ "hasInstallScript": true, "license": "ISC", "dependencies": { + "@babel/preset-env": "^7.22.20", + "babel-jest": "^29.7.0", "commander": "^11.0.0", "execa": "^8.0.1", "figlet": "^1.6.0", @@ -36,6 +38,7 @@ "eslint-define-config": "^1.23.0", "husky": "^8.0.0", "jest": "^29.7.0", + "jest-esm-transformer": "^1.0.0", "leasot": "^13.3.0", "lint-staged": "^14.0.1", "markdown-table": "^3.0.3", @@ -64,7 +67,6 @@ "version": "2.2.1", "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", - "dev": true, "dependencies": { "@jridgewell/gen-mapping": "^0.3.0", "@jridgewell/trace-mapping": "^0.3.9" @@ -77,7 +79,6 @@ "version": "7.22.13", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz", "integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==", - "dev": true, "dependencies": { "@babel/highlight": "^7.22.13", "chalk": "^2.4.2" @@ -90,7 +91,6 @@ "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, "dependencies": { "color-convert": "^1.9.0" }, @@ -102,7 +102,6 @@ "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, "dependencies": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", @@ -116,7 +115,6 @@ "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, "dependencies": { "color-name": "1.1.3" } @@ -124,14 +122,12 @@ "node_modules/@babel/code-frame/node_modules/color-name": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" }, "node_modules/@babel/code-frame/node_modules/escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, "engines": { "node": ">=0.8.0" } @@ -140,7 +136,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, "engines": { "node": ">=4" } @@ -149,7 +144,6 @@ "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, "dependencies": { "has-flag": "^3.0.0" }, @@ -161,7 +155,6 @@ "version": "7.22.20", "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.20.tgz", "integrity": "sha512-BQYjKbpXjoXwFW5jGqiizJQQT/aC7pFm9Ok1OWssonuguICi264lbgMzRp2ZMmRSlfkX6DsWDDcsrctK8Rwfiw==", - "dev": true, "engines": { "node": ">=6.9.0" } @@ -170,7 +163,6 @@ "version": "7.23.0", "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.23.0.tgz", "integrity": "sha512-97z/ju/Jy1rZmDxybphrBuI+jtJjFVoz7Mr9yUQVVVi+DNZE333uFQeMOqcCIy1x3WYBIbWftUSLmbNXNT7qFQ==", - "dev": true, "dependencies": { "@ampproject/remapping": "^2.2.0", "@babel/code-frame": "^7.22.13", @@ -200,7 +192,6 @@ "version": "7.23.0", "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.0.tgz", "integrity": "sha512-lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g==", - "dev": true, "dependencies": { "@babel/types": "^7.23.0", "@jridgewell/gen-mapping": "^0.3.2", @@ -215,7 +206,6 @@ "version": "7.23.0", "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.0.tgz", "integrity": "sha512-t/QaEvyIoIkwzpiZ7aoSKK8kObQYeF7T2v+dazAYCb8SXtp58zEVkWW7zAnju8FNKNdr4ScAOEDmMItbyOmEYw==", - "dev": true, "dependencies": { "@babel/code-frame": "^7.22.13", "@babel/generator": "^7.23.0", @@ -236,7 +226,6 @@ "version": "7.23.0", "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.0.tgz", "integrity": "sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==", - "dev": true, "dependencies": { "@babel/helper-string-parser": "^7.22.5", "@babel/helper-validator-identifier": "^7.22.20", @@ -250,7 +239,6 @@ "version": "0.3.19", "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz", "integrity": "sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==", - "dev": true, "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" @@ -260,7 +248,6 @@ "version": "11.12.0", "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true, "engines": { "node": ">=4" } @@ -269,7 +256,6 @@ "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, "bin": { "semver": "bin/semver.js" } @@ -288,11 +274,58 @@ "node": ">=6.9.0" } }, + "node_modules/@babel/helper-annotate-as-pure": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz", + "integrity": "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==", + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-annotate-as-pure/node_modules/@babel/types": { + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.0.tgz", + "integrity": "sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==", + "dependencies": { + "@babel/helper-string-parser": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.20", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.15.tgz", + "integrity": "sha512-QkBXwGgaoC2GtGZRoma6kv7Szfv06khvhFav67ZExau2RaXzy8MpHSMO2PNoP2XtmQphJQRHFfg77Bq731Yizw==", + "dependencies": { + "@babel/types": "^7.22.15" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-builder-binary-assignment-operator-visitor/node_modules/@babel/types": { + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.0.tgz", + "integrity": "sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==", + "dependencies": { + "@babel/helper-string-parser": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.20", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@babel/helper-compilation-targets": { "version": "7.22.15", "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.15.tgz", "integrity": "sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw==", - "dev": true, "dependencies": { "@babel/compat-data": "^7.22.9", "@babel/helper-validator-option": "^7.22.15", @@ -308,7 +341,6 @@ "version": "5.1.1", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dev": true, "dependencies": { "yallist": "^3.0.2" } @@ -317,7 +349,6 @@ "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, "bin": { "semver": "bin/semver.js" } @@ -325,14 +356,81 @@ "node_modules/@babel/helper-compilation-targets/node_modules/yallist": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" + }, + "node_modules/@babel/helper-create-class-features-plugin": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.15.tgz", + "integrity": "sha512-jKkwA59IXcvSaiK2UN45kKwSC9o+KuoXsBDvHvU/7BecYIp8GQ2UwrVvFgJASUT+hBnwJx6MhvMCuMzwZZ7jlg==", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-function-name": "^7.22.5", + "@babel/helper-member-expression-to-functions": "^7.22.15", + "@babel/helper-optimise-call-expression": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-class-features-plugin/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-create-regexp-features-plugin": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.15.tgz", + "integrity": "sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w==", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "regexpu-core": "^5.3.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-regexp-features-plugin/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-define-polyfill-provider": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.2.tgz", + "integrity": "sha512-k0qnnOqHn5dK9pZpfD5XXZ9SojAITdCKRn2Lp6rnDGzIbaP0rHyMPk/4wsSxVBVz4RfN0q6VpXWP2pDGIoQ7hw==", + "dependencies": { + "@babel/helper-compilation-targets": "^7.22.6", + "@babel/helper-plugin-utils": "^7.22.5", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } }, "node_modules/@babel/helper-environment-visitor": { "version": "7.22.20", "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==", - "dev": true, "engines": { "node": ">=6.9.0" } @@ -341,7 +439,6 @@ "version": "7.23.0", "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", - "dev": true, "dependencies": { "@babel/template": "^7.22.15", "@babel/types": "^7.23.0" @@ -354,7 +451,6 @@ "version": "7.23.0", "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.0.tgz", "integrity": "sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==", - "dev": true, "dependencies": { "@babel/helper-string-parser": "^7.22.5", "@babel/helper-validator-identifier": "^7.22.20", @@ -368,7 +464,6 @@ "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", - "dev": true, "dependencies": { "@babel/types": "^7.22.5" }, @@ -380,7 +475,6 @@ "version": "7.22.19", "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.19.tgz", "integrity": "sha512-P7LAw/LbojPzkgp5oznjE6tQEIWbp4PkkfrZDINTro9zgBRtI324/EYsiSI7lhPbpIQ+DCeR2NNmMWANGGfZsg==", - "dev": true, "dependencies": { "@babel/helper-string-parser": "^7.22.5", "@babel/helper-validator-identifier": "^7.22.19", @@ -390,11 +484,34 @@ "node": ">=6.9.0" } }, + "node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.23.0.tgz", + "integrity": "sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA==", + "dependencies": { + "@babel/types": "^7.23.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-member-expression-to-functions/node_modules/@babel/types": { + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.0.tgz", + "integrity": "sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==", + "dependencies": { + "@babel/helper-string-parser": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.20", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@babel/helper-module-imports": { "version": "7.22.15", "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz", "integrity": "sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==", - "dev": true, "dependencies": { "@babel/types": "^7.22.15" }, @@ -406,7 +523,6 @@ "version": "7.23.0", "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.0.tgz", "integrity": "sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==", - "dev": true, "dependencies": { "@babel/helper-string-parser": "^7.22.5", "@babel/helper-validator-identifier": "^7.22.20", @@ -420,7 +536,6 @@ "version": "7.23.0", "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.23.0.tgz", "integrity": "sha512-WhDWw1tdrlT0gMgUJSlX0IQvoO1eN279zrAUbVB+KpV2c3Tylz8+GnKOLllCS6Z/iZQEyVYxhZVUdPTqs2YYPw==", - "dev": true, "dependencies": { "@babel/helper-environment-visitor": "^7.22.20", "@babel/helper-module-imports": "^7.22.15", @@ -435,20 +550,74 @@ "@babel/core": "^7.0.0" } }, + "node_modules/@babel/helper-optimise-call-expression": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz", + "integrity": "sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==", + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-optimise-call-expression/node_modules/@babel/types": { + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.0.tgz", + "integrity": "sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==", + "dependencies": { + "@babel/helper-string-parser": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.20", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@babel/helper-plugin-utils": { "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", - "dev": true, "engines": { "node": ">=6.9.0" } }, + "node_modules/@babel/helper-remap-async-to-generator": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.20.tgz", + "integrity": "sha512-pBGyV4uBqOns+0UvhsTO8qgl8hO89PmiDYv+/COyp1aeMcmfrfruz+/nCMFiYyFF/Knn0yfrC85ZzNFjembFTw==", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-wrap-function": "^7.22.20" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-replace-supers": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.22.20.tgz", + "integrity": "sha512-qsW0In3dbwQUbK8kejJ4R7IHVGwHJlV6lpG6UA7a9hSa2YEiAib+N1T2kr6PEeUT+Fl7najmSOS6SmAwCHK6Tw==", + "dependencies": { + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-member-expression-to-functions": "^7.22.15", + "@babel/helper-optimise-call-expression": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, "node_modules/@babel/helper-simple-access": { "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", - "dev": true, "dependencies": { "@babel/types": "^7.22.5" }, @@ -460,7 +629,30 @@ "version": "7.23.0", "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.0.tgz", "integrity": "sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==", - "dev": true, + "dependencies": { + "@babel/helper-string-parser": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.20", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz", + "integrity": "sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==", + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-skip-transparent-expression-wrappers/node_modules/@babel/types": { + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.0.tgz", + "integrity": "sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==", "dependencies": { "@babel/helper-string-parser": "^7.22.5", "@babel/helper-validator-identifier": "^7.22.20", @@ -474,7 +666,6 @@ "version": "7.22.6", "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", - "dev": true, "dependencies": { "@babel/types": "^7.22.5" }, @@ -486,7 +677,6 @@ "version": "7.22.19", "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.19.tgz", "integrity": "sha512-P7LAw/LbojPzkgp5oznjE6tQEIWbp4PkkfrZDINTro9zgBRtI324/EYsiSI7lhPbpIQ+DCeR2NNmMWANGGfZsg==", - "dev": true, "dependencies": { "@babel/helper-string-parser": "^7.22.5", "@babel/helper-validator-identifier": "^7.22.19", @@ -500,7 +690,6 @@ "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==", - "dev": true, "engines": { "node": ">=6.9.0" } @@ -509,7 +698,6 @@ "version": "7.22.20", "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", - "dev": true, "engines": { "node": ">=6.9.0" } @@ -518,7 +706,32 @@ "version": "7.22.15", "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.15.tgz", "integrity": "sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA==", - "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-wrap-function": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.22.20.tgz", + "integrity": "sha512-pms/UwkOpnQe/PDAEdV/d7dVCoBbB+R4FvYoHGZz+4VPcg7RtYy2KP7S2lbuWM6FCSgob5wshfGESbC/hzNXZw==", + "dependencies": { + "@babel/helper-function-name": "^7.22.5", + "@babel/template": "^7.22.15", + "@babel/types": "^7.22.19" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-wrap-function/node_modules/@babel/types": { + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.0.tgz", + "integrity": "sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==", + "dependencies": { + "@babel/helper-string-parser": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.20", + "to-fast-properties": "^2.0.0" + }, "engines": { "node": ">=6.9.0" } @@ -527,7 +740,6 @@ "version": "7.23.1", "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.23.1.tgz", "integrity": "sha512-chNpneuK18yW5Oxsr+t553UZzzAs3aZnFm4bxhebsNTeshrC95yA7l5yl7GBAG+JG1rF0F7zzD2EixK9mWSDoA==", - "dev": true, "dependencies": { "@babel/template": "^7.22.15", "@babel/traverse": "^7.23.0", @@ -541,7 +753,6 @@ "version": "7.23.0", "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.0.tgz", "integrity": "sha512-lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g==", - "dev": true, "dependencies": { "@babel/types": "^7.23.0", "@jridgewell/gen-mapping": "^0.3.2", @@ -556,7 +767,6 @@ "version": "7.23.0", "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.0.tgz", "integrity": "sha512-t/QaEvyIoIkwzpiZ7aoSKK8kObQYeF7T2v+dazAYCb8SXtp58zEVkWW7zAnju8FNKNdr4ScAOEDmMItbyOmEYw==", - "dev": true, "dependencies": { "@babel/code-frame": "^7.22.13", "@babel/generator": "^7.23.0", @@ -577,7 +787,6 @@ "version": "7.23.0", "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.0.tgz", "integrity": "sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==", - "dev": true, "dependencies": { "@babel/helper-string-parser": "^7.22.5", "@babel/helper-validator-identifier": "^7.22.20", @@ -591,7 +800,6 @@ "version": "0.3.19", "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz", "integrity": "sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==", - "dev": true, "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" @@ -601,7 +809,6 @@ "version": "11.12.0", "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true, "engines": { "node": ">=4" } @@ -610,7 +817,6 @@ "version": "7.22.20", "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.20.tgz", "integrity": "sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==", - "dev": true, "dependencies": { "@babel/helper-validator-identifier": "^7.22.20", "chalk": "^2.4.2", @@ -624,7 +830,6 @@ "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, "dependencies": { "color-convert": "^1.9.0" }, @@ -636,7 +841,6 @@ "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, "dependencies": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", @@ -650,7 +854,6 @@ "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, "dependencies": { "color-name": "1.1.3" } @@ -658,14 +861,12 @@ "node_modules/@babel/highlight/node_modules/color-name": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" }, "node_modules/@babel/highlight/node_modules/escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, "engines": { "node": ">=0.8.0" } @@ -674,7 +875,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, "engines": { "node": ">=4" } @@ -683,7 +883,6 @@ "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, "dependencies": { "has-flag": "^3.0.0" }, @@ -695,7 +894,6 @@ "version": "7.23.0", "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.0.tgz", "integrity": "sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw==", - "dev": true, "bin": { "parser": "bin/babel-parser.js" }, @@ -703,23 +901,62 @@ "node": ">=6.0.0" } }, - "node_modules/@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", - "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", - "dev": true, + "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.22.15.tgz", + "integrity": "sha512-FB9iYlz7rURmRJyXRKEnalYPPdn87H5no108cyuQQyMwlpJ2SJtpIUBI27kdTin956pz+LPypkPVPUTlxOmrsg==", "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@babel/core": "^7.0.0" } }, - "node_modules/@babel/plugin-syntax-bigint": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", - "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", - "dev": true, + "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.22.15.tgz", + "integrity": "sha512-Hyph9LseGvAeeXzikV88bczhsrLrIZqDPxO+sSmAunMPaGrBGhfMWzCPYTtiW9t+HzSE2wtV8e5cc5P6r1xMDQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/plugin-transform-optional-chaining": "^7.22.15" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.13.0" + } + }, + "node_modules/@babel/plugin-proposal-private-property-in-object": { + "version": "7.21.0-placeholder-for-preset-env.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", + "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-bigint": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", + "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -731,7 +968,6 @@ "version": "7.12.13", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", - "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.12.13" }, @@ -739,11 +975,74 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", + "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-dynamic-import": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", + "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-export-namespace-from": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", + "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-assertions": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.22.5.tgz", + "integrity": "sha512-rdV97N7KqsRzeNGoWUOK6yUsWarLjE5Su/Snk9IYPU9CwkWHs4t+rTGOvffTR8XGkJMTAdLfO0xVnXm8wugIJg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-attributes": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.22.5.tgz", + "integrity": "sha512-KwvoWDeNKPETmozyFE0P2rOLqh39EoQHNjqizrI5B8Vt0ZNS7M56s7dAiAqbYfiAYOuIzIh96z3iR2ktgu3tEg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, "node_modules/@babel/plugin-syntax-import-meta": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", - "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" }, @@ -755,7 +1054,6 @@ "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", - "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -782,7 +1080,6 @@ "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", - "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" }, @@ -794,7 +1091,6 @@ "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", - "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -806,7 +1102,6 @@ "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", - "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" }, @@ -818,7 +1113,6 @@ "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", - "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -830,7 +1124,6 @@ "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", - "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -842,21 +1135,888 @@ "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", - "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-typescript": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.22.5.tgz", + "integrity": "sha512-1mS2o03i7t1c6VzH6fdQ3OA8tcEIxwG18zIPRp+UY1Ihv6W+XZzBCVxExF9upussPXJ0xE9XRHwMoNs1ep/nRQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-unicode-sets-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", + "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-arrow-functions": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.22.5.tgz", + "integrity": "sha512-26lTNXoVRdAnsaDXPpvCNUq+OVWEVC6bx7Vvz9rC53F2bagUWW4u4ii2+h8Fejfh7RYqPxn+libeFBBck9muEw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-async-generator-functions": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.22.15.tgz", + "integrity": "sha512-jBm1Es25Y+tVoTi5rfd5t1KLmL8ogLKpXszboWOTTtGFGz2RKnQe2yn7HbZ+kb/B8N0FVSGQo874NSlOU1T4+w==", + "dependencies": { + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-remap-async-to-generator": "^7.22.9", + "@babel/plugin-syntax-async-generators": "^7.8.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-async-to-generator": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.22.5.tgz", + "integrity": "sha512-b1A8D8ZzE/VhNDoV1MSJTnpKkCG5bJo+19R4o4oy03zM7ws8yEMK755j61Dc3EyvdysbqH5BOOTquJ7ZX9C6vQ==", + "dependencies": { + "@babel/helper-module-imports": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-remap-async-to-generator": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoped-functions": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.22.5.tgz", + "integrity": "sha512-tdXZ2UdknEKQWKJP1KMNmuF5Lx3MymtMN/pvA+p/VEkhK8jVcQ1fzSy8KM9qRYhAf2/lV33hoMPKI/xaI9sADA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoping": { + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.23.0.tgz", + "integrity": "sha512-cOsrbmIOXmf+5YbL99/S49Y3j46k/T16b9ml8bm9lP6N9US5iQ2yBK7gpui1pg0V/WMcXdkfKbTb7HXq9u+v4g==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-class-properties": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.22.5.tgz", + "integrity": "sha512-nDkQ0NfkOhPTq8YCLiWNxp1+f9fCobEjCb0n8WdbNUBc4IB5V7P1QnX9IjpSoquKrXF5SKojHleVNs2vGeHCHQ==", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-class-static-block": { + "version": "7.22.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.22.11.tgz", + "integrity": "sha512-GMM8gGmqI7guS/llMFk1bJDkKfn3v3C4KHK9Yg1ey5qcHcOlKb0QvcMrgzvxo+T03/4szNh5lghY+fEC98Kq9g==", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.22.11", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-class-static-block": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.12.0" + } + }, + "node_modules/@babel/plugin-transform-classes": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.22.15.tgz", + "integrity": "sha512-VbbC3PGjBdE0wAWDdHM9G8Gm977pnYI0XpqMd6LrKISj8/DJXEsWqgRuTYaNE9Bv0JGhTZUzHDlMk18IpOuoqw==", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-compilation-targets": "^7.22.15", + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-function-name": "^7.22.5", + "@babel/helper-optimise-call-expression": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.9", + "@babel/helper-split-export-declaration": "^7.22.6", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-classes/node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/plugin-transform-computed-properties": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.22.5.tgz", + "integrity": "sha512-4GHWBgRf0krxPX+AaPtgBAlTgTeZmqDynokHOX7aqqAB4tHs3U2Y02zH6ETFdLZGcg9UQSD1WCmkVrE9ErHeOg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/template": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-destructuring": { + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.23.0.tgz", + "integrity": "sha512-vaMdgNXFkYrB+8lbgniSYWHsgqK5gjaMNcc84bMIOMRLH0L9AqYq3hwMdvnyqj1OPqea8UtjPEuS/DCenah1wg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-dotall-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.22.5.tgz", + "integrity": "sha512-5/Yk9QxCQCl+sOIB1WelKnVRxTJDSAIxtJLL2/pqL14ZVlbH0fUQUZa/T5/UnQtBNgghR7mfB8ERBKyKPCi7Vw==", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-duplicate-keys": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.22.5.tgz", + "integrity": "sha512-dEnYD+9BBgld5VBXHnF/DbYGp3fqGMsyxKbtD1mDyIA7AkTSpKXFhCVuj/oQVOoALfBs77DudA0BE4d5mcpmqw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-dynamic-import": { + "version": "7.22.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.22.11.tgz", + "integrity": "sha512-g/21plo58sfteWjaO0ZNVb+uEOkJNjAaHhbejrnBmu011l/eNDScmkbjCC3l4FKb10ViaGU4aOkFznSu2zRHgA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-exponentiation-operator": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.22.5.tgz", + "integrity": "sha512-vIpJFNM/FjZ4rh1myqIya9jXwrwwgFRHPjT3DkUA9ZLHuzox8jiXkOLvwm1H+PQIP3CqfC++WPKeuDi0Sjdj1g==", + "dependencies": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-export-namespace-from": { + "version": "7.22.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.22.11.tgz", + "integrity": "sha512-xa7aad7q7OiT8oNZ1mU7NrISjlSkVdMbNxn9IuLZyL9AJEhs1Apba3I+u5riX1dIkdptP5EKDG5XDPByWxtehw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-for-of": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.22.15.tgz", + "integrity": "sha512-me6VGeHsx30+xh9fbDLLPi0J1HzmeIIyenoOQHuw2D4m2SAU3NrspX5XxJLBpqn5yrLzrlw2Iy3RA//Bx27iOA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-function-name": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.22.5.tgz", + "integrity": "sha512-UIzQNMS0p0HHiQm3oelztj+ECwFnj+ZRV4KnguvlsD2of1whUeM6o7wGNj6oLwcDoAXQ8gEqfgC24D+VdIcevg==", + "dependencies": { + "@babel/helper-compilation-targets": "^7.22.5", + "@babel/helper-function-name": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-json-strings": { + "version": "7.22.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.22.11.tgz", + "integrity": "sha512-CxT5tCqpA9/jXFlme9xIBCc5RPtdDq3JpkkhgHQqtDdiTnTI0jtZ0QzXhr5DILeYifDPp2wvY2ad+7+hLMW5Pw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-json-strings": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-literals": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.22.5.tgz", + "integrity": "sha512-fTLj4D79M+mepcw3dgFBTIDYpbcB9Sm0bpm4ppXPaO+U+PKFFyV9MGRvS0gvGw62sd10kT5lRMKXAADb9pWy8g==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-logical-assignment-operators": { + "version": "7.22.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.22.11.tgz", + "integrity": "sha512-qQwRTP4+6xFCDV5k7gZBF3C31K34ut0tbEcTKxlX/0KXxm9GLcO14p570aWxFvVzx6QAfPgq7gaeIHXJC8LswQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-member-expression-literals": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.22.5.tgz", + "integrity": "sha512-RZEdkNtzzYCFl9SE9ATaUMTj2hqMb4StarOJLrZRbqqU4HSBE7UlBw9WBWQiDzrJZJdUWiMTVDI6Gv/8DPvfew==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-amd": { + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.23.0.tgz", + "integrity": "sha512-xWT5gefv2HGSm4QHtgc1sYPbseOyf+FFDo2JbpE25GWl5BqTGO9IMwTYJRoIdjsF85GE+VegHxSCUt5EvoYTAw==", + "dependencies": { + "@babel/helper-module-transforms": "^7.23.0", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-commonjs": { + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.23.0.tgz", + "integrity": "sha512-32Xzss14/UVc7k9g775yMIvkVK8xwKE0DPdP5JTapr3+Z9w4tzeOuLNY6BXDQR6BdnzIlXnCGAzsk/ICHBLVWQ==", + "dependencies": { + "@babel/helper-module-transforms": "^7.23.0", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-simple-access": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-systemjs": { + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.23.0.tgz", + "integrity": "sha512-qBej6ctXZD2f+DhlOC9yO47yEYgUh5CZNz/aBoH4j/3NOlRfJXJbY7xDQCqQVf9KbrqGzIWER1f23doHGrIHFg==", + "dependencies": { + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-module-transforms": "^7.23.0", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.20" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-umd": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.22.5.tgz", + "integrity": "sha512-+S6kzefN/E1vkSsKx8kmQuqeQsvCKCd1fraCM7zXm4SFoggI099Tr4G8U81+5gtMdUeMQ4ipdQffbKLX0/7dBQ==", + "dependencies": { + "@babel/helper-module-transforms": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.5.tgz", + "integrity": "sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-new-target": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.22.5.tgz", + "integrity": "sha512-AsF7K0Fx/cNKVyk3a+DW0JLo+Ua598/NxMRvxDnkpCIGFh43+h/v2xyhRUYf6oD8gE4QtL83C7zZVghMjHd+iw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { + "version": "7.22.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.22.11.tgz", + "integrity": "sha512-YZWOw4HxXrotb5xsjMJUDlLgcDXSfO9eCmdl1bgW4+/lAGdkjaEvOnQ4p5WKKdUgSzO39dgPl0pTnfxm0OAXcg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-numeric-separator": { + "version": "7.22.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.22.11.tgz", + "integrity": "sha512-3dzU4QGPsILdJbASKhF/V2TVP+gJya1PsueQCxIPCEcerqF21oEcrob4mzjsp2Py/1nLfF5m+xYNMDpmA8vffg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-rest-spread": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.22.15.tgz", + "integrity": "sha512-fEB+I1+gAmfAyxZcX1+ZUwLeAuuf8VIg67CTznZE0MqVFumWkh8xWtn58I4dxdVf080wn7gzWoF8vndOViJe9Q==", + "dependencies": { + "@babel/compat-data": "^7.22.9", + "@babel/helper-compilation-targets": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.22.15" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-super": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.22.5.tgz", + "integrity": "sha512-klXqyaT9trSjIUrcsYIfETAzmOEZL3cBYqOYLJxBHfMFFggmXOv+NYSX/Jbs9mzMVESw/WycLFPRx8ba/b2Ipw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-optional-catch-binding": { + "version": "7.22.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.22.11.tgz", + "integrity": "sha512-rli0WxesXUeCJnMYhzAglEjLWVDF6ahb45HuprcmQuLidBJFWjNnOzssk2kuc6e33FlLaiZhG/kUIzUMWdBKaQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-optional-chaining": { + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.23.0.tgz", + "integrity": "sha512-sBBGXbLJjxTzLBF5rFWaikMnOGOk/BmK6vVByIdEggZ7Vn6CvWXZyRkkLFK6WE0IF8jSliyOkUN6SScFgzCM0g==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-parameters": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.22.15.tgz", + "integrity": "sha512-hjk7qKIqhyzhhUvRT683TYQOFa/4cQKwQy7ALvTpODswN40MljzNDa0YldevS6tGbxwaEKVn502JmY0dP7qEtQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-private-methods": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.22.5.tgz", + "integrity": "sha512-PPjh4gyrQnGe97JTalgRGMuU4icsZFnWkzicB/fUtzlKUqvsWBKEpPPfr5a2JiyirZkHxnAqkQMO5Z5B2kK3fA==", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-private-property-in-object": { + "version": "7.22.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.22.11.tgz", + "integrity": "sha512-sSCbqZDBKHetvjSwpyWzhuHkmW5RummxJBVbYLkGkaiTOWGxml7SXt0iWa03bzxFIx7wOj3g/ILRd0RcJKBeSQ==", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-create-class-features-plugin": "^7.22.11", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-property-literals": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.22.5.tgz", + "integrity": "sha512-TiOArgddK3mK/x1Qwf5hay2pxI6wCZnvQqrFSqbtg1GLl2JcNMitVH/YnqjP+M31pLUeTfzY1HAXFDnUBV30rQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-regenerator": { + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.22.10.tgz", + "integrity": "sha512-F28b1mDt8KcT5bUyJc/U9nwzw6cV+UmTeRlXYIl2TNqMMJif0Jeey9/RQ3C4NOd2zp0/TRsDns9ttj2L523rsw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "regenerator-transform": "^0.15.2" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-reserved-words": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.22.5.tgz", + "integrity": "sha512-DTtGKFRQUDm8svigJzZHzb/2xatPc6TzNvAIJ5GqOKDsGFYgAskjRulbR/vGsPKq3OPqtexnz327qYpP57RFyA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-shorthand-properties": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.22.5.tgz", + "integrity": "sha512-vM4fq9IXHscXVKzDv5itkO1X52SmdFBFcMIBZ2FRn2nqVYqw6dBexUgMvAjHW+KXpPPViD/Yo3GrDEBaRC0QYA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-spread": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.22.5.tgz", + "integrity": "sha512-5ZzDQIGyvN4w8+dMmpohL6MBo+l2G7tfC/O2Dg7/hjpgeWvUx8FzfeOKxGog9IimPa4YekaQ9PlDqTLOljkcxg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-sticky-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.22.5.tgz", + "integrity": "sha512-zf7LuNpHG0iEeiyCNwX4j3gDg1jgt1k3ZdXBKbZSoA3BbGQGvMiSvfbZRR3Dr3aeJe3ooWFZxOOG3IRStYp2Bw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-template-literals": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.22.5.tgz", + "integrity": "sha512-5ciOehRNf+EyUeewo8NkbQiUs4d6ZxiHo6BcBcnFlgiJfu16q0bQUw9Jvo0b0gBKFG1SMhDSjeKXSYuJLeFSMA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-typeof-symbol": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.22.5.tgz", + "integrity": "sha512-bYkI5lMzL4kPii4HHEEChkD0rkc+nvnlR6+o/qdqR6zrm0Sv/nodmyLhlq2DO0YKLUNd2VePmPRjJXSBh9OIdA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-escapes": { + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.22.10.tgz", + "integrity": "sha512-lRfaRKGZCBqDlRU3UIFovdp9c9mEvlylmpod0/OatICsSfuQ9YFthRo1tpTkGsklEefZdqlEFdY4A2dwTb6ohg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-property-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.22.5.tgz", + "integrity": "sha512-HCCIb+CbJIAE6sXn5CjFQXMwkCClcOfPCzTlilJ8cUatfzwHlWQkbtV0zD338u9dZskwvuOYTuuaMaA8J5EI5A==", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.22.5.tgz", + "integrity": "sha512-028laaOKptN5vHJf9/Arr/HiJekMd41hOEZYvNsrsXqJ7YPYuX2bQxh31fkZzGmq3YqHRJzYFFAVYvKfMPKqyg==", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-sets-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.22.5.tgz", + "integrity": "sha512-lhMfi4FC15j13eKrh3DnYHjpGj6UKQHtNKTbtc1igvAhRy4+kLhV07OpLcsN0VgDEw/MjAvJO4BdMJsHwMhzCg==", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, - "node_modules/@babel/plugin-syntax-top-level-await": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", - "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", - "dev": true, + "node_modules/@babel/preset-env": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.22.20.tgz", + "integrity": "sha512-11MY04gGC4kSzlPHRfvVkNAZhUxOvm7DCJ37hPDnUENwe06npjIRAfInEMTGSb4LZK5ZgDFkv5hw0lGebHeTyg==", "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" + "@babel/compat-data": "^7.22.20", + "@babel/helper-compilation-targets": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-validator-option": "^7.22.15", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.22.15", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.22.15", + "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3", + "@babel/plugin-syntax-import-assertions": "^7.22.5", + "@babel/plugin-syntax-import-attributes": "^7.22.5", + "@babel/plugin-syntax-import-meta": "^7.10.4", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5", + "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", + "@babel/plugin-transform-arrow-functions": "^7.22.5", + "@babel/plugin-transform-async-generator-functions": "^7.22.15", + "@babel/plugin-transform-async-to-generator": "^7.22.5", + "@babel/plugin-transform-block-scoped-functions": "^7.22.5", + "@babel/plugin-transform-block-scoping": "^7.22.15", + "@babel/plugin-transform-class-properties": "^7.22.5", + "@babel/plugin-transform-class-static-block": "^7.22.11", + "@babel/plugin-transform-classes": "^7.22.15", + "@babel/plugin-transform-computed-properties": "^7.22.5", + "@babel/plugin-transform-destructuring": "^7.22.15", + "@babel/plugin-transform-dotall-regex": "^7.22.5", + "@babel/plugin-transform-duplicate-keys": "^7.22.5", + "@babel/plugin-transform-dynamic-import": "^7.22.11", + "@babel/plugin-transform-exponentiation-operator": "^7.22.5", + "@babel/plugin-transform-export-namespace-from": "^7.22.11", + "@babel/plugin-transform-for-of": "^7.22.15", + "@babel/plugin-transform-function-name": "^7.22.5", + "@babel/plugin-transform-json-strings": "^7.22.11", + "@babel/plugin-transform-literals": "^7.22.5", + "@babel/plugin-transform-logical-assignment-operators": "^7.22.11", + "@babel/plugin-transform-member-expression-literals": "^7.22.5", + "@babel/plugin-transform-modules-amd": "^7.22.5", + "@babel/plugin-transform-modules-commonjs": "^7.22.15", + "@babel/plugin-transform-modules-systemjs": "^7.22.11", + "@babel/plugin-transform-modules-umd": "^7.22.5", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.22.5", + "@babel/plugin-transform-new-target": "^7.22.5", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.22.11", + "@babel/plugin-transform-numeric-separator": "^7.22.11", + "@babel/plugin-transform-object-rest-spread": "^7.22.15", + "@babel/plugin-transform-object-super": "^7.22.5", + "@babel/plugin-transform-optional-catch-binding": "^7.22.11", + "@babel/plugin-transform-optional-chaining": "^7.22.15", + "@babel/plugin-transform-parameters": "^7.22.15", + "@babel/plugin-transform-private-methods": "^7.22.5", + "@babel/plugin-transform-private-property-in-object": "^7.22.11", + "@babel/plugin-transform-property-literals": "^7.22.5", + "@babel/plugin-transform-regenerator": "^7.22.10", + "@babel/plugin-transform-reserved-words": "^7.22.5", + "@babel/plugin-transform-shorthand-properties": "^7.22.5", + "@babel/plugin-transform-spread": "^7.22.5", + "@babel/plugin-transform-sticky-regex": "^7.22.5", + "@babel/plugin-transform-template-literals": "^7.22.5", + "@babel/plugin-transform-typeof-symbol": "^7.22.5", + "@babel/plugin-transform-unicode-escapes": "^7.22.10", + "@babel/plugin-transform-unicode-property-regex": "^7.22.5", + "@babel/plugin-transform-unicode-regex": "^7.22.5", + "@babel/plugin-transform-unicode-sets-regex": "^7.22.5", + "@babel/preset-modules": "0.1.6-no-external-plugins", + "@babel/types": "^7.22.19", + "babel-plugin-polyfill-corejs2": "^0.4.5", + "babel-plugin-polyfill-corejs3": "^0.8.3", + "babel-plugin-polyfill-regenerator": "^0.5.2", + "core-js-compat": "^3.31.0", + "semver": "^6.3.1" }, "engines": { "node": ">=6.9.0" @@ -865,26 +2025,60 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.22.5.tgz", - "integrity": "sha512-1mS2o03i7t1c6VzH6fdQ3OA8tcEIxwG18zIPRp+UY1Ihv6W+XZzBCVxExF9upussPXJ0xE9XRHwMoNs1ep/nRQ==", - "dev": true, + "node_modules/@babel/preset-env/node_modules/@babel/types": { + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.0.tgz", + "integrity": "sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-string-parser": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.20", + "to-fast-properties": "^2.0.0" }, "engines": { "node": ">=6.9.0" + } + }, + "node_modules/@babel/preset-env/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/preset-modules": { + "version": "0.1.6-no-external-plugins", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz", + "integrity": "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@babel/core": "^7.0.0-0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/@babel/regjsgen": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz", + "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==" + }, + "node_modules/@babel/runtime": { + "version": "7.23.1", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.1.tgz", + "integrity": "sha512-hC2v6p8ZSI/W0HUzh3V8C5g+NwSKzKPtJwSpTjwl0o297GP9+ZLQSkdvHz46CM3LqyoXxq+5G9komY+eSqSO0g==", + "dependencies": { + "regenerator-runtime": "^0.14.0" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/template": { "version": "7.22.15", "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", - "dev": true, "dependencies": { "@babel/code-frame": "^7.22.13", "@babel/parser": "^7.22.15", @@ -898,7 +2092,6 @@ "version": "7.22.19", "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.19.tgz", "integrity": "sha512-P7LAw/LbojPzkgp5oznjE6tQEIWbp4PkkfrZDINTro9zgBRtI324/EYsiSI7lhPbpIQ+DCeR2NNmMWANGGfZsg==", - "dev": true, "dependencies": { "@babel/helper-string-parser": "^7.22.5", "@babel/helper-validator-identifier": "^7.22.19", @@ -942,7 +2135,6 @@ "version": "7.17.0", "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.0.tgz", "integrity": "sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==", - "dev": true, "dependencies": { "@babel/helper-validator-identifier": "^7.16.7", "to-fast-properties": "^2.0.0" @@ -1414,7 +2606,6 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", - "dev": true, "dependencies": { "camelcase": "^5.3.1", "find-up": "^4.1.0", @@ -1430,7 +2621,6 @@ "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, "dependencies": { "sprintf-js": "~1.0.2" } @@ -1439,7 +2629,6 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, "dependencies": { "locate-path": "^5.0.0", "path-exists": "^4.0.0" @@ -1452,7 +2641,6 @@ "version": "3.14.1", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, "dependencies": { "argparse": "^1.0.7", "esprima": "^4.0.0" @@ -1465,7 +2653,6 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, "dependencies": { "p-locate": "^4.1.0" }, @@ -1477,7 +2664,6 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, "dependencies": { "p-try": "^2.0.0" }, @@ -1492,7 +2678,6 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, "dependencies": { "p-limit": "^2.2.0" }, @@ -1504,7 +2689,6 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true, "engines": { "node": ">=8" } @@ -1513,7 +2697,6 @@ "version": "0.1.3", "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", - "dev": true, "engines": { "node": ">=8" } @@ -1738,7 +2921,6 @@ "version": "29.6.3", "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", - "dev": true, "dependencies": { "@sinclair/typebox": "^0.27.8" }, @@ -1804,7 +2986,6 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz", "integrity": "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==", - "dev": true, "dependencies": { "@babel/core": "^7.11.6", "@jest/types": "^29.6.3", @@ -1830,7 +3011,6 @@ "version": "0.3.19", "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz", "integrity": "sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==", - "dev": true, "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" @@ -1840,7 +3020,6 @@ "version": "29.6.3", "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", - "dev": true, "dependencies": { "@jest/schemas": "^29.6.3", "@types/istanbul-lib-coverage": "^2.0.0", @@ -1857,7 +3036,6 @@ "version": "0.3.3", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", - "dev": true, "dependencies": { "@jridgewell/set-array": "^1.0.1", "@jridgewell/sourcemap-codec": "^1.4.10", @@ -1871,7 +3049,6 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", - "dev": true, "engines": { "node": ">=6.0.0" } @@ -1880,7 +3057,6 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", - "dev": true, "engines": { "node": ">=6.0.0" } @@ -1898,14 +3074,12 @@ "node_modules/@jridgewell/sourcemap-codec": { "version": "1.4.15", "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", - "dev": true + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" }, "node_modules/@jridgewell/trace-mapping": { "version": "0.3.9", "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", - "dev": true, "dependencies": { "@jridgewell/resolve-uri": "^3.0.3", "@jridgewell/sourcemap-codec": "^1.4.10" @@ -2141,8 +3315,7 @@ "node_modules/@sinclair/typebox": { "version": "0.27.8", "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", - "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", - "dev": true + "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==" }, "node_modules/@sinonjs/commons": { "version": "3.0.0", @@ -2213,7 +3386,6 @@ "version": "7.20.2", "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.2.tgz", "integrity": "sha512-pNpr1T1xLUc2l3xJKuPtsEky3ybxN3m4fJkknfIpTCTfIZCDW57oAg+EfCgIIp2rvCe0Wn++/FfodDS4YXxBwA==", - "dev": true, "dependencies": { "@babel/parser": "^7.20.7", "@babel/types": "^7.20.7", @@ -2226,7 +3398,6 @@ "version": "7.23.0", "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.0.tgz", "integrity": "sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==", - "dev": true, "dependencies": { "@babel/helper-string-parser": "^7.22.5", "@babel/helper-validator-identifier": "^7.22.20", @@ -2240,7 +3411,6 @@ "version": "7.6.5", "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.5.tgz", "integrity": "sha512-h9yIuWbJKdOPLJTbmSpPzkF67e659PbQDba7ifWm5BJ8xTv+sDmS7rFmywkWOvXedGTivCdeGSIIX8WLcRTz8w==", - "dev": true, "dependencies": { "@babel/types": "^7.0.0" } @@ -2249,7 +3419,6 @@ "version": "7.4.2", "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.2.tgz", "integrity": "sha512-/AVzPICMhMOMYoSx9MoKpGDKdBRsIXMNByh1PXSZoa+v6ZoLa8xxtsT/uLQ/NJm0XVAWl/BvId4MlDeXJaeIZQ==", - "dev": true, "dependencies": { "@babel/parser": "^7.1.0", "@babel/types": "^7.0.0" @@ -2259,7 +3428,6 @@ "version": "7.20.2", "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.2.tgz", "integrity": "sha512-ojlGK1Hsfce93J0+kn3H5R73elidKUaZonirN33GSmgTUMpzI/MIFfSpF3haANe3G1bEBS9/9/QEqwTzwqFsKw==", - "dev": true, "dependencies": { "@babel/types": "^7.20.7" } @@ -2268,7 +3436,6 @@ "version": "7.23.0", "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.0.tgz", "integrity": "sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==", - "dev": true, "dependencies": { "@babel/helper-string-parser": "^7.22.5", "@babel/helper-validator-identifier": "^7.22.20", @@ -2313,7 +3480,6 @@ "version": "4.1.7", "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.7.tgz", "integrity": "sha512-MhzcwU8aUygZroVwL2jeYk6JisJrPl/oov/gsgGCue9mkgl9wjGbzReYQClxiUgFDnib9FuHqTndccKeZKxTRw==", - "dev": true, "dependencies": { "@types/node": "*" } @@ -2321,14 +3487,12 @@ "node_modules/@types/istanbul-lib-coverage": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", - "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==", - "dev": true + "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==" }, "node_modules/@types/istanbul-lib-report": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", "integrity": "sha512-gPQuzaPR5h/djlAv2apEG1HVOyj1IUs7GpfMZixU0/0KXT3pm64ylHuMUI1/Akh+sq/iikxg6Z2j+fcMDXaaTQ==", - "dev": true, "dependencies": { "@types/istanbul-lib-coverage": "*" } @@ -2337,7 +3501,6 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.2.tgz", "integrity": "sha512-kv43F9eb3Lhj+lr/Hn6OcLCs/sSM8bt+fIaP11rCYngfV6NVjzWXJ17owQtDQTL9tQ8WSLUrGsSJ6rJz0F1w1A==", - "dev": true, "dependencies": { "@types/istanbul-lib-report": "*" } @@ -2367,8 +3530,7 @@ "node_modules/@types/node": { "version": "20.5.9", "resolved": "https://registry.npmjs.org/@types/node/-/node-20.5.9.tgz", - "integrity": "sha512-PcGNd//40kHAS3sTlzKB9C9XL4K0sTup8nbG5lC14kzEteTNuAFh9u5nA0o5TWnSG2r/JNPRXFVcHJIIeRlmqQ==", - "dev": true + "integrity": "sha512-PcGNd//40kHAS3sTlzKB9C9XL4K0sTup8nbG5lC14kzEteTNuAFh9u5nA0o5TWnSG2r/JNPRXFVcHJIIeRlmqQ==" }, "node_modules/@types/prompts": { "version": "2.4.4", @@ -2402,7 +3564,6 @@ "version": "17.0.26", "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.26.tgz", "integrity": "sha512-Y3vDy2X6zw/ZCumcwLpdhM5L7jmyGpmBCTYMHDLqT2IKVMYRRLdv6ZakA+wxhra6Z/3bwhNbNl9bDGXaFU+6rw==", - "dev": true, "dependencies": { "@types/yargs-parser": "*" } @@ -2410,8 +3571,7 @@ "node_modules/@types/yargs-parser": { "version": "21.0.1", "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.1.tgz", - "integrity": "sha512-axdPBuLuEJt0c4yI5OZssC19K2Mq1uKdrfZBzuxLvaztgqUtFYZUNw7lETExPYJR9jdEoIg4mb7RQKRQzOkeGQ==", - "dev": true + "integrity": "sha512-axdPBuLuEJt0c4yI5OZssC19K2Mq1uKdrfZBzuxLvaztgqUtFYZUNw7lETExPYJR9jdEoIg4mb7RQKRQzOkeGQ==" }, "node_modules/@typescript-eslint/eslint-plugin": { "version": "6.6.0", @@ -2688,7 +3848,6 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, "dependencies": { "color-convert": "^2.0.1" }, @@ -2703,7 +3862,6 @@ "version": "3.1.3", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "dev": true, "dependencies": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" @@ -2743,7 +3901,6 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz", "integrity": "sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==", - "dev": true, "dependencies": { "@jest/transform": "^29.7.0", "@types/babel__core": "^7.1.14", @@ -2764,7 +3921,6 @@ "version": "6.1.1", "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", - "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.0.0", "@istanbuljs/load-nyc-config": "^1.0.0", @@ -2780,7 +3936,6 @@ "version": "5.2.1", "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", - "dev": true, "dependencies": { "@babel/core": "^7.12.3", "@babel/parser": "^7.14.7", @@ -2796,7 +3951,6 @@ "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, "bin": { "semver": "bin/semver.js" } @@ -2805,7 +3959,6 @@ "version": "29.6.3", "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz", "integrity": "sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==", - "dev": true, "dependencies": { "@babel/template": "^7.3.3", "@babel/types": "^7.3.3", @@ -2816,11 +3969,54 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, + "node_modules/babel-plugin-polyfill-corejs2": { + "version": "0.4.5", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.5.tgz", + "integrity": "sha512-19hwUH5FKl49JEsvyTcoHakh6BE0wgXLLptIyKZ3PijHc/Ci521wygORCUCCred+E/twuqRyAkE02BAWPmsHOg==", + "dependencies": { + "@babel/compat-data": "^7.22.6", + "@babel/helper-define-polyfill-provider": "^0.4.2", + "semver": "^6.3.1" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-plugin-polyfill-corejs2/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/babel-plugin-polyfill-corejs3": { + "version": "0.8.4", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.4.tgz", + "integrity": "sha512-9l//BZZsPR+5XjyJMPtZSK4jv0BsTO1zDac2GC6ygx9WLGlcsnRd1Co0B2zT5fF5Ic6BZy+9m3HNZ3QcOeDKfg==", + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.4.2", + "core-js-compat": "^3.32.2" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-plugin-polyfill-regenerator": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.2.tgz", + "integrity": "sha512-tAlOptU0Xj34V1Y2PNTL4Y0FOJMDB6bZmoW39FeCQIhigGLkqu3Fj6uiXpxIf6Ij274ENdYx64y6Au+ZKlb1IA==", + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.4.2" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, "node_modules/babel-preset-current-node-syntax": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", - "dev": true, "dependencies": { "@babel/plugin-syntax-async-generators": "^7.8.4", "@babel/plugin-syntax-bigint": "^7.8.3", @@ -2843,7 +4039,6 @@ "version": "29.6.3", "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz", "integrity": "sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==", - "dev": true, "dependencies": { "babel-plugin-jest-hoist": "^29.6.3", "babel-preset-current-node-syntax": "^1.0.0" @@ -2858,8 +4053,7 @@ "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, "node_modules/base64-js": { "version": "1.5.1", @@ -2894,7 +4088,6 @@ "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -2904,7 +4097,6 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, "dependencies": { "fill-range": "^7.0.1" }, @@ -2916,7 +4108,6 @@ "version": "4.22.1", "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.1.tgz", "integrity": "sha512-FEVc202+2iuClEhZhrWy6ZiAcRLvNMyYcxZ8raemul1DYVOVdFsbqckWLdsixQZCpJlwe77Z3UTalE7jsjnKfQ==", - "dev": true, "funding": [ { "type": "opencollective", @@ -2960,7 +4151,6 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", - "dev": true, "dependencies": { "node-int64": "^0.4.0" } @@ -3019,7 +4209,6 @@ "version": "5.3.1", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true, "engines": { "node": ">=6" } @@ -3028,7 +4217,6 @@ "version": "1.0.30001546", "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001546.tgz", "integrity": "sha512-zvtSJwuQFpewSyRrI3AsftF6rM0X80mZkChIt1spBGEvRglCrjTniXvinc8JKRoqTwXAgvqTImaN9igfSMtUBw==", - "dev": true, "funding": [ { "type": "opencollective", @@ -3048,7 +4236,6 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -3073,7 +4260,6 @@ "version": "3.9.0", "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", - "dev": true, "funding": [ { "type": "github", @@ -3261,7 +4447,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, "dependencies": { "color-name": "~1.1.4" }, @@ -3272,8 +4457,7 @@ "node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "node_modules/colorette": { "version": "2.0.20", @@ -3298,14 +4482,24 @@ "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" }, "node_modules/convert-source-map": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", - "dev": true + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==" + }, + "node_modules/core-js-compat": { + "version": "3.33.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.33.0.tgz", + "integrity": "sha512-0w4LcLXsVEuNkIqwjjf9rjCoPhK8uqA4tMRh4Ge26vfLtUutshn+aRJU21I9LCJlh2QQHfisNToLjw1XEJLTWw==", + "dependencies": { + "browserslist": "^4.22.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } }, "node_modules/create-jest": { "version": "29.7.0", @@ -3351,7 +4545,6 @@ "version": "4.3.4", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, "dependencies": { "ms": "2.1.2" }, @@ -3452,8 +4645,7 @@ "node_modules/electron-to-chromium": { "version": "1.4.542", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.542.tgz", - "integrity": "sha512-6+cpa00G09N3sfh2joln4VUXHquWrOFx3FLZqiVQvl45+zS9DskDBTPvob+BhvFRmTBkyDSk0vvLMMRo/qc6mQ==", - "dev": true + "integrity": "sha512-6+cpa00G09N3sfh2joln4VUXHquWrOFx3FLZqiVQvl45+zS9DskDBTPvob+BhvFRmTBkyDSk0vvLMMRo/qc6mQ==" }, "node_modules/emittery": { "version": "0.13.1", @@ -3534,7 +4726,6 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true, "engines": { "node": ">=6" } @@ -3687,7 +4878,6 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true, "bin": { "esparse": "bin/esparse.js", "esvalidate": "bin/esvalidate.js" @@ -3739,7 +4929,6 @@ "version": "2.0.3", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -3834,8 +5023,7 @@ "node_modules/fast-json-stable-stringify": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" }, "node_modules/fast-levenshtein": { "version": "2.0.6", @@ -3856,7 +5044,6 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", - "dev": true, "dependencies": { "bser": "2.1.1" } @@ -3888,7 +5075,6 @@ "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, "dependencies": { "to-regex-range": "^5.0.1" }, @@ -3949,14 +5135,12 @@ "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" }, "node_modules/fsevents": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "dev": true, "hasInstallScript": true, "optional": true, "os": [ @@ -3969,14 +5153,12 @@ "node_modules/function-bind": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" }, "node_modules/gensync": { "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "dev": true, "engines": { "node": ">=6.9.0" } @@ -3994,7 +5176,6 @@ "version": "0.1.0", "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", - "dev": true, "engines": { "node": ">=8.0.0" } @@ -4026,7 +5207,6 @@ "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -4092,8 +5272,7 @@ "node_modules/graceful-fs": { "version": "4.2.11", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "dev": true + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" }, "node_modules/graphemer": { "version": "1.4.0", @@ -4105,7 +5284,6 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, "dependencies": { "function-bind": "^1.1.1" }, @@ -4117,7 +5295,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, "engines": { "node": ">=8" } @@ -4218,7 +5395,6 @@ "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true, "engines": { "node": ">=0.8.19" } @@ -4227,7 +5403,6 @@ "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "dev": true, "dependencies": { "once": "^1.3.0", "wrappy": "1" @@ -4263,7 +5438,6 @@ "version": "2.13.0", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz", "integrity": "sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==", - "dev": true, "dependencies": { "has": "^1.0.3" }, @@ -4334,7 +5508,6 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, "engines": { "node": ">=0.12.0" } @@ -4397,7 +5570,6 @@ "version": "3.2.0", "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", - "dev": true, "engines": { "node": ">=8" } @@ -4790,6 +5962,16 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, + "node_modules/jest-esm-transformer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/jest-esm-transformer/-/jest-esm-transformer-1.0.0.tgz", + "integrity": "sha512-FoPgeMMwy1/CEsc8tBI41i83CEO3x85RJuZi5iAMmWoARXhfgk6Jd7y+4d+z+HCkTKNVDvSWKGRhwjzU9PUbrw==", + "dev": true, + "dependencies": { + "@babel/core": "^7.4.4", + "@babel/plugin-transform-modules-commonjs": "^7.4.4" + } + }, "node_modules/jest-get-type": { "version": "29.6.3", "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", @@ -4803,7 +5985,6 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz", "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==", - "dev": true, "dependencies": { "@jest/types": "^29.6.3", "@types/graceful-fs": "^4.1.3", @@ -4907,7 +6088,6 @@ "version": "29.6.3", "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz", "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==", - "dev": true, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } @@ -5045,7 +6225,6 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", - "dev": true, "dependencies": { "@jest/types": "^29.6.3", "@types/node": "*", @@ -5137,7 +6316,6 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", - "dev": true, "dependencies": { "@types/node": "*", "jest-util": "^29.7.0", @@ -5152,7 +6330,6 @@ "version": "8.1.1", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, "dependencies": { "has-flag": "^4.0.0" }, @@ -5175,8 +6352,7 @@ "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" }, "node_modules/js-yaml": { "version": "4.1.0", @@ -5194,7 +6370,6 @@ "version": "2.5.2", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true, "bin": { "jsesc": "bin/jsesc" }, @@ -5239,7 +6414,6 @@ "version": "2.2.3", "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "dev": true, "bin": { "json5": "lib/cli.js" }, @@ -5550,6 +6724,11 @@ "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", "dev": true }, + "node_modules/lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==" + }, "node_modules/lodash.memoize": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", @@ -5683,7 +6862,6 @@ "version": "1.0.12", "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", - "dev": true, "dependencies": { "tmpl": "1.0.5" } @@ -5716,7 +6894,6 @@ "version": "4.0.5", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "dev": true, "dependencies": { "braces": "^3.0.2", "picomatch": "^2.3.1" @@ -5740,7 +6917,6 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, "dependencies": { "brace-expansion": "^1.1.7" }, @@ -5751,8 +6927,7 @@ "node_modules/ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, "node_modules/natural-compare": { "version": "1.4.0", @@ -5763,20 +6938,17 @@ "node_modules/node-int64": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", - "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", - "dev": true + "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==" }, "node_modules/node-releases": { "version": "2.0.13", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz", - "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==", - "dev": true + "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==" }, "node_modules/normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -5810,7 +6982,6 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, "dependencies": { "wrappy": "1" } @@ -5938,7 +7109,6 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true, "engines": { "node": ">=6" } @@ -5977,7 +7147,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, "engines": { "node": ">=8" } @@ -5986,7 +7155,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -6002,8 +7170,7 @@ "node_modules/path-parse": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" }, "node_modules/path-type": { "version": "4.0.0", @@ -6023,7 +7190,6 @@ "version": "2.3.1", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, "engines": { "node": ">=8.6" }, @@ -6060,7 +7226,6 @@ "version": "4.0.6", "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", - "dev": true, "engines": { "node": ">= 6" } @@ -6264,6 +7429,70 @@ "node": ">= 6" } }, + "node_modules/regenerate": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==" + }, + "node_modules/regenerate-unicode-properties": { + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.1.tgz", + "integrity": "sha512-X007RyZLsCJVVrjgEFVpLUTZwyOZk3oiL75ZcuYjlIWd6rNJtOjkBwQc5AsRrpbKVkxN6sklw/k/9m2jJYOf8Q==", + "dependencies": { + "regenerate": "^1.4.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz", + "integrity": "sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==" + }, + "node_modules/regenerator-transform": { + "version": "0.15.2", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.2.tgz", + "integrity": "sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==", + "dependencies": { + "@babel/runtime": "^7.8.4" + } + }, + "node_modules/regexpu-core": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz", + "integrity": "sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==", + "dependencies": { + "@babel/regjsgen": "^0.8.0", + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^10.1.0", + "regjsparser": "^0.9.1", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regjsparser": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", + "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", + "dependencies": { + "jsesc": "~0.5.0" + }, + "bin": { + "regjsparser": "bin/parser" + } + }, + "node_modules/regjsparser/node_modules/jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", + "bin": { + "jsesc": "bin/jsesc" + } + }, "node_modules/require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", @@ -6277,7 +7506,6 @@ "version": "1.22.6", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.6.tgz", "integrity": "sha512-njhxM7mV12JfufShqGy3Rz8j11RPdLy4xi15UurGJeoHLfJpVXKdh3ueuOqbYUcDZnffr6X739JBo5LzyahEsw==", - "dev": true, "dependencies": { "is-core-module": "^2.13.0", "path-parse": "^1.0.7", @@ -6605,7 +7833,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, "engines": { "node": ">=8" } @@ -6675,8 +7902,7 @@ "node_modules/sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", - "dev": true + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" }, "node_modules/stack-utils": { "version": "2.0.6", @@ -6832,7 +8058,6 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, "dependencies": { "has-flag": "^4.0.0" }, @@ -6844,7 +8069,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true, "engines": { "node": ">= 0.4" }, @@ -6899,7 +8123,6 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", - "dev": true, "dependencies": { "@istanbuljs/schema": "^0.1.2", "glob": "^7.1.4", @@ -6918,14 +8141,12 @@ "node_modules/tmpl": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", - "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", - "dev": true + "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==" }, "node_modules/to-fast-properties": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", - "dev": true, "engines": { "node": ">=4" } @@ -6934,7 +8155,6 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, "dependencies": { "is-number": "^7.0.0" }, @@ -7092,6 +8312,42 @@ "node": ">=14.17" } }, + "node_modules/unicode-canonical-property-names-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", + "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", + "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", + "dependencies": { + "unicode-canonical-property-names-ecmascript": "^2.0.0", + "unicode-property-aliases-ecmascript": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-value-ecmascript": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz", + "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==", + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-property-aliases-ecmascript": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", + "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", + "engines": { + "node": ">=4" + } + }, "node_modules/universalify": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", @@ -7105,7 +8361,6 @@ "version": "1.0.13", "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", - "dev": true, "funding": [ { "type": "opencollective", @@ -7179,7 +8434,6 @@ "version": "1.0.8", "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", - "dev": true, "dependencies": { "makeerror": "1.0.12" } @@ -7280,14 +8534,12 @@ "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" }, "node_modules/write-file-atomic": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", - "dev": true, "dependencies": { "imurmurhash": "^0.1.4", "signal-exit": "^3.0.7" @@ -7299,8 +8551,7 @@ "node_modules/write-file-atomic/node_modules/signal-exit": { "version": "3.0.7", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" }, "node_modules/y18n": { "version": "5.0.8", diff --git a/package.json b/package.json index e0fc8e2..90dc884 100644 --- a/package.json +++ b/package.json @@ -25,7 +25,9 @@ "prepare": "husky install", "start:build": "node ./dist/bundle.js", "start:standalone": "node ./.next/standalone/server.js", - "storybook": "storybook dev -p 6006" + "storybook": "storybook dev -p 6006", + "test": "jest", + "test:watch": "jest --watch" }, "keywords": [], "author": "", @@ -49,6 +51,7 @@ "eslint-define-config": "^1.23.0", "husky": "^8.0.0", "jest": "^29.7.0", + "jest-esm-transformer": "^1.0.0", "leasot": "^13.3.0", "lint-staged": "^14.0.1", "markdown-table": "^3.0.3", @@ -64,6 +67,8 @@ "typescript": "^5.2.2" }, "dependencies": { + "@babel/preset-env": "^7.22.20", + "babel-jest": "^29.7.0", "commander": "^11.0.0", "execa": "^8.0.1", "figlet": "^1.6.0", diff --git a/src/Configurator.ts b/src/Configurator.ts index a484023..fe5d2c8 100644 --- a/src/Configurator.ts +++ b/src/Configurator.ts @@ -6,7 +6,7 @@ import picocolors from 'picocolors'; import prompts from 'prompts'; import PackageManager, { PackageManagerKindEnum } from './PackageManager.js'; -import makeLintStagedConfig from './helpers/makeLintStagedConfig.js'; +import makeLintStaged from './helpers/makeLintStaged.js'; import { ChoiceValuesType } from './prompts.js'; import { oops } from './utils.js'; @@ -33,7 +33,9 @@ export interface OptionsType { husky: boolean; jest: boolean; lintStaged: boolean; + nextImageOptimisation: boolean; optionalDependencies: ChoiceValuesType[]; + packageManager: PackageManagerKindEnum; prettier: boolean; reactTestingLibrary: boolean; selectedDependencies: boolean; @@ -41,7 +43,6 @@ export interface OptionsType { storybook: boolean; tailwind: boolean; typescript: boolean; - nextImageOptimisation: boolean; } const { cyan, green, bold } = picocolors; @@ -60,6 +61,7 @@ class Configurator { lintStaged: false, nextImageOptimisation: false, optionalDependencies: [], + packageManager: PackageManagerKindEnum.NPM, prettier: false, reactTestingLibrary: false, selectedDependencies: false, @@ -79,6 +81,7 @@ class Configurator { this.cwd = path.resolve(projectDirectoryPath); this.spinner = ora(); this.srcPath = path.resolve(path.join('src')); + this.options.packageManager = packageManagerKind; this.packageManager = new PackageManager({ packageManagerKind, cwd: this.cwd, @@ -318,7 +321,29 @@ class Configurator { `#!/usr/bin/env sh` + `\n` + `. "$(dirname -- "$0")/_/husky.sh"`; if (lintStaged) { - huskyPreCommit += `\n\n` + `${pm} run lint-staged`; + huskyPreCommit += + `\n\n` + + `${pm} run lint-staged ` + + `||` + + `{` + + `printf "\n\n------------------------------------------\n\n"\n` + + `printf "🚫 YOU HAVE ERRORS!"` + + `printf "\n\n------------------------------------------\n\n'";` + + `exit 1;` + + `}` + + `\n\n` + + `printf"\n\n"` + + `# Following is for observability` + + `printf "\n\n"` + + `\n\n` + + `printf "TODOs / FIXMEs - consider reviewing these"` + + `printf "\n------------------------------------------\n\n"` + + `\n` + + `npx leasot 'src/**/*.[jt]s?(x)' --exit-nicely` + + `printf "\n\n------------------------------------------\n\n"` + + `printf '%b ' "${String.raw`\033`}[1m"Now push your code!"${String.raw`\033`}[0m 🚀"` + + `printf "\n\n------------------------------------------\n\n"` + + ``; } else { if (prettier) { huskyPreCommit += @@ -337,6 +362,8 @@ class Configurator { if (typescript) { huskyPreCommit += `\n\n` + `${pm} run build --no-emit`; } + // TODO: leaslot hard coded. Consider making this configurable + huskyPreCommit += `npx leasot 'src/**/*.[jt]s?(x)' --exit-nicely`; } await fs.promises @@ -401,7 +428,7 @@ class Configurator { if (lintStaged) { await this.packageManager.addToPackage( 'lint-staged', - makeLintStagedConfig(this.options) + makeLintStaged.config(this.options) ); } }; diff --git a/src/PackageManager.ts b/src/PackageManager.ts index d3caf46..5693920 100644 --- a/src/PackageManager.ts +++ b/src/PackageManager.ts @@ -1,4 +1,3 @@ -import { execa } from 'execa'; import fs from 'fs'; import os from 'os'; import path from 'path'; @@ -44,6 +43,7 @@ class PackageManager { dependencies: string[], addToDevDependencies: boolean = false ) { + const { execa } = await import('execa'); if (!Array.isArray(dependencies) || dependencies.length === 0) return; try { const pm = this.getKind(); diff --git a/src/helpers/makeLintStaged.test.ts b/src/helpers/makeLintStaged.test.ts new file mode 100644 index 0000000..6937d2a --- /dev/null +++ b/src/helpers/makeLintStaged.test.ts @@ -0,0 +1,555 @@ +import { PackageManagerKindEnum } from '../PackageManager.js'; +import makeLintStaged from './makeLintStaged.js'; + +const makeLintStagedConfig = makeLintStaged.config; +const makeLintStagedPreCommit = makeLintStaged.preCommit; +describe('makeLintStagedConfig', () => { + it('should return a valid lint-staged configuration object', () => { + //test + const expectedConfig = { + '**/*.js?(x)': [ + 'prettier --check .', + 'prettier --write .', + 'eslint .', + 'eslint --fix .', + 'jest --ci', + ], + '**/*.ts?(x)': [ + 'prettier --check .', + 'prettier --write .', + 'eslint .', + 'eslint --fix .', + 'jest --ci', + 'tsc --noEmit', + ], + '**/*.{md, yml, yaml, json}': [ + 'prettier --check .', + 'prettier --write .', + ], + '**/*.{css}': ['prettier --check .', 'prettier --write .'], + }; + + const config = makeLintStagedConfig({ + eslint: true, + jest: true, + prettier: true, + typescript: true, + }); + + expect(config).toEqual(expectedConfig); + }); + + it('should return a valid lint-staged configuration object without TypeScript', () => { + const expectedConfig = { + '**/*.js?(x)': [ + 'prettier --check .', + 'prettier --write .', + 'eslint .', + 'eslint --fix .', + 'jest --ci', + ], + '**/*.{md, yml, yaml, json}': [ + 'prettier --check .', + 'prettier --write .', + ], + '**/*.{css}': ['prettier --check .', 'prettier --write .'], + }; + + const config = makeLintStagedConfig({ + eslint: true, + jest: true, + prettier: true, + typescript: false, + }); + + expect(config).toEqual(expectedConfig); + }); + + it('should return a valid lint-staged configuration object without Jest', () => { + const expectedConfig = { + '**/*.js?(x)': [ + 'prettier --check .', + 'prettier --write .', + 'eslint .', + 'eslint --fix .', + ], + '**/*.ts?(x)': [ + 'prettier --check .', + 'prettier --write .', + 'eslint .', + 'eslint --fix .', + 'tsc --noEmit', + ], + '**/*.{md, yml, yaml, json}': [ + 'prettier --check .', + 'prettier --write .', + ], + '**/*.{css}': ['prettier --check .', 'prettier --write .'], + }; + + const config = makeLintStagedConfig({ + eslint: true, + jest: false, + prettier: true, + typescript: true, + }); + + expect(config).toEqual(expectedConfig); + }); + + it('should return a valid lint-staged configuration object without Prettier', () => { + const expectedConfig = { + '**/*.js?(x)': ['eslint .', 'eslint --fix .', 'jest --ci'], + '**/*.ts?(x)': [ + 'eslint .', + 'eslint --fix .', + 'jest --ci', + 'tsc --noEmit', + ], + }; + + const config = makeLintStagedConfig({ + eslint: true, + jest: true, + prettier: false, + typescript: true, + }); + + expect(config).toEqual(expectedConfig); + }); + + it('should return a valid lint-staged configuration object without ESLint', () => { + const options = { + eslint: false, + jest: true, + prettier: true, + typescript: true, + }; + const expectedConfig = { + '**/*.js?(x)': ['prettier --check .', 'prettier --write .', 'jest --ci'], + '**/*.ts?(x)': [ + 'prettier --check .', + 'prettier --write .', + 'jest --ci', + 'tsc --noEmit', + ], + '**/*.{md, yml, yaml, json}': [ + 'prettier --check .', + 'prettier --write .', + ], + '**/*.{css}': ['prettier --check .', 'prettier --write .'], // TODO: add styledlint + }; + + const config = makeLintStagedConfig(options); + + expect(config).toEqual(expectedConfig); + }); +}); + +describe('makeLintStagedPreCommit', () => { + describe('when lint-staged is enabled', () => { + it('should return a valid pre-commit hook script', () => { + // Arrange + const options = { + eslint: true, + jest: true, + lintStaged: true, + packageManager: PackageManagerKindEnum.NPM, + prettier: true, + typescript: true, + }; + const expectedScript = + '#!/usr/bin/env sh\n. "$(dirname -- "$0")/_/husky.sh"\n\n' + + 'npx lint-staged || { \n' + + 'printf "\n\n------------------------------------------\n\n"\n' + + 'printf "🚫 YOU HAVE ERRORS!" \n' + + 'printf "\n\n------------------------------------------\n\n";\n' + + 'exit 1;\n}\n\n' + + '# Following is for observability purposes\n\n' + + '# TODOs / FIXMEs\n' + + 'printf "\n\n"\n' + + 'printf "TODOs / FIXMEs - consider reviewing these"\n' + + 'printf "\n------------------------------------------\n"\n#\n' + + "npx leasot 'src/**/*.[jt]s?(x)' --exit-nicely\n\n" + + 'printf "\n\n------------------------------------------\n\n"\n' + + 'printf "Now push your code! 🚀"\n' + + 'printf "\n\n------------------------------------------\n\n"'; + // Act + const script = makeLintStagedPreCommit(options); + // Assert + expect(script).toEqual(expectedScript); + }); + }); + + describe('when lint-staged is disabled', () => { + describe('When the package manager is Yarn', () => { + it('should use yarn', () => { + const options = { + eslint: true, + jest: true, + lintStaged: false, + packageManager: PackageManagerKindEnum.YARN, + prettier: true, + typescript: true, + }; + + const script = makeLintStagedPreCommit(options); + + expect(script).toContain('yarn run lint:check'); + expect(script).toContain('yarn run lint:fix'); + expect(script).toContain('yarn run format:check'); + expect(script).toContain('yarn run format:write'); + }); + }); + + describe('When the package manager is Npm', () => { + it('should use Npm', () => { + const options = { + eslint: true, + jest: true, + lintStaged: false, + packageManager: PackageManagerKindEnum.NPM, + prettier: true, + typescript: true, + }; + + const script = makeLintStagedPreCommit(options); + + expect(script).toContain('npm run lint:check'); + expect(script).toContain('npm run lint:fix'); + expect(script).toContain('npm run format:check'); + expect(script).toContain('npm run format:write'); + }); + }); + + describe('When the package manager is Bun', () => { + it('should use Bun', () => { + const options = { + eslint: true, + jest: true, + lintStaged: false, + packageManager: PackageManagerKindEnum.BUN, + prettier: true, + typescript: true, + }; + + const script = makeLintStagedPreCommit(options); + + expect(script).toContain('bun run lint:check'); + expect(script).toContain('bun run lint:fix'); + expect(script).toContain('bun run format:check'); + expect(script).toContain('bun run format:write'); + }); + }); + + describe('When the package manager is Pnpm', () => { + it('should use Pnpm', () => { + const options = { + eslint: true, + jest: true, + lintStaged: false, + packageManager: PackageManagerKindEnum.PNPM, + prettier: true, + typescript: true, + }; + + const script = makeLintStagedPreCommit(options); + + expect(script).toContain('pnpm run lint:check'); + expect(script).toContain('pnpm run lint:fix'); + expect(script).toContain('pnpm run format:check'); + expect(script).toContain('pnpm run format:write'); + }); + }); + + describe('when prettier, eslint, jest, and typescript are enabled', () => { + it('should return a valid pre-commit hook script', () => { + // Arrange + const options = { + eslint: true, + jest: true, + lintStaged: false, + packageManager: PackageManagerKindEnum.NPM, + prettier: true, + typescript: true, + }; + const expectedScript = + '#!/usr/bin/env sh\n. "$(dirname -- "$0")/_/husky.sh"\n\n' + + 'npm run format:check\n\n' + + 'npm run format:write\n\n' + + 'npm run lint:check\n\n' + + 'npm run lint:fix\n\n' + + 'npm run test --passWithNoTests\n\n' + + 'npm run build --no-emit\n\n' + + '# Following is for observability purposes\n\n' + + '# TODOs / FIXMEs\n' + + 'printf "\n\n"\n' + + 'printf "TODOs / FIXMEs - consider reviewing these"\n' + + 'printf "\n------------------------------------------\n"\n#\n' + + "npx leasot 'src/**/*.[jt]s?(x)' --exit-nicely\n\n" + + 'printf "\n\n------------------------------------------\n\n"\n' + + 'printf "Now push your code! 🚀"\n' + + 'printf "\n\n------------------------------------------\n\n"'; + // Act + const script = makeLintStagedPreCommit(options); + // Assert + expect(script).toEqual(expectedScript); + }); + }); + + describe('when prettier, eslint, jest, are enabled', () => { + it('should return a valid pre-commit hook script', () => { + // Arrange + const options = { + eslint: true, + jest: true, + lintStaged: false, + packageManager: PackageManagerKindEnum.NPM, + prettier: true, + typescript: false, + }; + const expectedScript = + '#!/usr/bin/env sh\n. "$(dirname -- "$0")/_/husky.sh"\n\n' + + 'npm run format:check\n\n' + + 'npm run format:write\n\n' + + 'npm run lint:check\n\n' + + 'npm run lint:fix\n\n' + + 'npm run test --passWithNoTests\n\n' + + '# Following is for observability purposes\n\n' + + '# TODOs / FIXMEs\n' + + 'printf "\n\n"\n' + + 'printf "TODOs / FIXMEs - consider reviewing these"\n' + + 'printf "\n------------------------------------------\n"\n#\n' + + "npx leasot 'src/**/*.[jt]s?(x)' --exit-nicely\n\n" + + 'printf "\n\n------------------------------------------\n\n"\n' + + 'printf "Now push your code! 🚀"\n' + + 'printf "\n\n------------------------------------------\n\n"'; + // Act + const script = makeLintStagedPreCommit(options); + // Assert + expect(script).toEqual(expectedScript); + }); + }); + + describe('when prettier, eslint, typescript, are enabled', () => { + it('should return a valid pre-commit hook script', () => { + // Arrange + const options = { + eslint: true, + jest: false, + lintStaged: false, + packageManager: PackageManagerKindEnum.NPM, + prettier: true, + typescript: true, + }; + const expectedScript = + '#!/usr/bin/env sh\n. "$(dirname -- "$0")/_/husky.sh"\n\n' + + 'npm run format:check\n\n' + + 'npm run format:write\n\n' + + 'npm run lint:check\n\n' + + 'npm run lint:fix\n\n' + + 'npm run build --no-emit\n\n' + + '# Following is for observability purposes\n\n' + + '# TODOs / FIXMEs\n' + + 'printf "\n\n"\n' + + 'printf "TODOs / FIXMEs - consider reviewing these"\n' + + 'printf "\n------------------------------------------\n"\n#\n' + + "npx leasot 'src/**/*.[jt]s?(x)' --exit-nicely\n\n" + + 'printf "\n\n------------------------------------------\n\n"\n' + + 'printf "Now push your code! 🚀"\n' + + 'printf "\n\n------------------------------------------\n\n"'; + // Act + const script = makeLintStagedPreCommit(options); + // Assert + expect(script).toEqual(expectedScript); + }); + }); + + describe('when prettier, eslint, are enabled', () => { + it('should return a valid pre-commit hook script', () => { + // Arrange + const options = { + eslint: true, + jest: false, + lintStaged: false, + packageManager: PackageManagerKindEnum.NPM, + prettier: true, + typescript: false, + }; + const expectedScript = + '#!/usr/bin/env sh\n. "$(dirname -- "$0")/_/husky.sh"\n\n' + + 'npm run format:check\n\n' + + 'npm run format:write\n\n' + + 'npm run lint:check\n\n' + + 'npm run lint:fix\n\n' + + '# Following is for observability purposes\n\n' + + '# TODOs / FIXMEs\n' + + 'printf "\n\n"\n' + + 'printf "TODOs / FIXMEs - consider reviewing these"\n' + + 'printf "\n------------------------------------------\n"\n#\n' + + "npx leasot 'src/**/*.[jt]s?(x)' --exit-nicely\n\n" + + 'printf "\n\n------------------------------------------\n\n"\n' + + 'printf "Now push your code! 🚀"\n' + + 'printf "\n\n------------------------------------------\n\n"'; + // Act + const script = makeLintStagedPreCommit(options); + // Assert + expect(script).toEqual(expectedScript); + }); + }); + + describe('when only prettier is enabled', () => { + it('should return a valid pre-commit hook script', () => { + // Arrange + const options = { + eslint: false, + jest: false, + lintStaged: false, + packageManager: PackageManagerKindEnum.NPM, + prettier: true, + typescript: false, + }; + const expectedScript = + '#!/usr/bin/env sh\n. "$(dirname -- "$0")/_/husky.sh"\n\n' + + 'npm run format:check\n\n' + + 'npm run format:write\n\n' + + '# Following is for observability purposes\n\n' + + '# TODOs / FIXMEs\n' + + 'printf "\n\n"\n' + + 'printf "TODOs / FIXMEs - consider reviewing these"\n' + + 'printf "\n------------------------------------------\n"\n#\n' + + "npx leasot 'src/**/*.[jt]s?(x)' --exit-nicely\n\n" + + 'printf "\n\n------------------------------------------\n\n"\n' + + 'printf "Now push your code! 🚀"\n' + + 'printf "\n\n------------------------------------------\n\n"'; + // Act + const script = makeLintStagedPreCommit(options); + // Assert + expect(script).toEqual(expectedScript); + }); + }); + describe('when only eslint is enabled', () => { + it('should return a valid pre-commit hook script', () => { + // Arrange + const options = { + eslint: true, + jest: false, + lintStaged: false, + packageManager: PackageManagerKindEnum.NPM, + prettier: false, + typescript: false, + }; + const expectedScript = + '#!/usr/bin/env sh\n. "$(dirname -- "$0")/_/husky.sh"\n\n' + + 'npm run lint:check\n\n' + + 'npm run lint:fix\n\n' + + '# Following is for observability purposes\n\n' + + '# TODOs / FIXMEs\n' + + 'printf "\n\n"\n' + + 'printf "TODOs / FIXMEs - consider reviewing these"\n' + + 'printf "\n------------------------------------------\n"\n#\n' + + "npx leasot 'src/**/*.[jt]s?(x)' --exit-nicely\n\n" + + 'printf "\n\n------------------------------------------\n\n"\n' + + 'printf "Now push your code! 🚀"\n' + + 'printf "\n\n------------------------------------------\n\n"'; + // Act + const script = makeLintStagedPreCommit(options); + // Assert + expect(script).toEqual(expectedScript); + }); + }); + + describe('when only typescript is enabled', () => { + it('should return a valid pre-commit hook script', () => { + // Arrange + const options = { + eslint: false, + jest: false, + lintStaged: false, + packageManager: PackageManagerKindEnum.NPM, + prettier: false, + typescript: true, + }; + const expectedScript = + '#!/usr/bin/env sh\n. "$(dirname -- "$0")/_/husky.sh"\n\n' + + 'npm run build --no-emit\n\n' + + '# Following is for observability purposes\n\n' + + '# TODOs / FIXMEs\n' + + 'printf "\n\n"\n' + + 'printf "TODOs / FIXMEs - consider reviewing these"\n' + + 'printf "\n------------------------------------------\n"\n#\n' + + "npx leasot 'src/**/*.[jt]s?(x)' --exit-nicely\n\n" + + 'printf "\n\n------------------------------------------\n\n"\n' + + 'printf "Now push your code! 🚀"\n' + + 'printf "\n\n------------------------------------------\n\n"'; + // Act + const script = makeLintStagedPreCommit(options); + // Assert + expect(script).toEqual(expectedScript); + }); + }); + + describe('when only some checks are enabled', () => { + it('should return a valid pre-commit hook script', () => { + // Arrange + const options = { + eslint: true, + jest: false, + lintStaged: false, + packageManager: PackageManagerKindEnum.NPM, + prettier: false, + typescript: true, + }; + const expectedScript = + '#!/usr/bin/env sh\n. "$(dirname -- "$0")/_/husky.sh"\n\n' + + 'npm run lint:check\n\n' + + 'npm run lint:fix\n\n' + + 'npm run build --no-emit\n\n' + + '# Following is for observability purposes\n\n' + + '# TODOs / FIXMEs\n' + + 'printf "\n\n"\n' + + 'printf "TODOs / FIXMEs - consider reviewing these"\n' + + 'printf "\n------------------------------------------\n"\n#\n' + + "npx leasot 'src/**/*.[jt]s?(x)' --exit-nicely\n\n" + + 'printf "\n\n------------------------------------------\n\n"\n' + + 'printf "Now push your code! 🚀"\n' + + 'printf "\n\n------------------------------------------\n\n"'; + // Act + const script = makeLintStagedPreCommit(options); + // Assert + expect(script).toEqual(expectedScript); + }); + }); + + describe('when all checks are disabled', () => { + it('should return a valid pre-commit hook script', () => { + // Arrange + const options = { + eslint: false, + jest: false, + lintStaged: false, + packageManager: PackageManagerKindEnum.NPM, + prettier: false, + typescript: false, + }; + const expectedScript = + '#!/usr/bin/env sh\n. "$(dirname -- "$0")/_/husky.sh"' + + `\n\n` + + '# Following is for observability purposes\n\n' + + '# TODOs / FIXMEs\n' + + 'printf "\n\n"\n' + + 'printf "TODOs / FIXMEs - consider reviewing these"\n' + + 'printf "\n------------------------------------------\n"\n#\n' + + "npx leasot 'src/**/*.[jt]s?(x)' --exit-nicely\n\n" + + 'printf "\n\n------------------------------------------\n\n"\n' + + 'printf "Now push your code! 🚀"\n' + + 'printf "\n\n------------------------------------------\n\n"'; + // Act + const script = makeLintStagedPreCommit(options); + + // Assert + expect(script).toEqual(expectedScript); + }); + }); + }); +}); diff --git a/src/helpers/makeLintStaged.ts b/src/helpers/makeLintStaged.ts new file mode 100644 index 0000000..6288615 --- /dev/null +++ b/src/helpers/makeLintStaged.ts @@ -0,0 +1,111 @@ +import { OptionsType } from '../Configurator.js'; + +type LintStagedConfigType = Pick< + OptionsType, + 'eslint' | 'jest' | 'prettier' | 'typescript' +>; + +function makeLintStagedConfig({ + eslint, + jest, + prettier, + typescript, +}: LintStagedConfigType) { + const tsLintStagedConfig = { + '**/*.ts?(x)': [ + ...(prettier ? ['prettier --check .', 'prettier --write .'] : []), + ...(eslint ? ['eslint .', 'eslint --fix .'] : []), + ...(jest ? ['jest --ci'] : []), + 'tsc --noEmit', + ], + }; + + const mdYmlJsonLintStagedConfig = { + '**/*.{md, yml, yaml, json}': [ + ...(prettier ? ['prettier --check .', 'prettier --write .'] : []), + ], + }; + + const stylesLintStagedConfig = { + '**/*.{css}': [ + ...(prettier ? ['prettier --check .', 'prettier --write .'] : []), + // TODO: add styledlint + ], + }; + + const lintStagedConfig = { + '**/*.js?(x)': [ + ...(prettier ? ['prettier --check .', 'prettier --write .'] : []), + ...(eslint ? ['eslint .', 'eslint --fix .'] : []), + ...(jest ? ['jest --ci'] : []), + ], + ...(typescript ? tsLintStagedConfig : {}), + ...(prettier ? mdYmlJsonLintStagedConfig : {}), + ...(prettier ? stylesLintStagedConfig : {}), + }; + + return lintStagedConfig; +} + +type LintStagedPreCommitType = Pick< + OptionsType, + | 'eslint' + | 'jest' + | 'prettier' + | 'typescript' + | 'lintStaged' + | 'packageManager' +>; + +function makeLintStagedPreCommit({ + eslint, + jest, + lintStaged, + packageManager, + prettier, + typescript, +}: LintStagedPreCommitType) { + let huskyPreCommit = + '#!/usr/bin/env sh\n. "$(dirname -- "$0")/_/husky.sh"\n\n'; + if (lintStaged) { + huskyPreCommit += + 'npx lint-staged || { \n' + + 'printf "\n\n------------------------------------------\n\n"\n' + + 'printf "🚫 YOU HAVE ERRORS!" \n' + + 'printf "\n\n------------------------------------------\n\n";\n' + + 'exit 1;\n}\n\n'; + } else { + if (prettier) { + huskyPreCommit += + `${packageManager} run format:check\n\n` + + `${packageManager} run format:write\n\n`; + } + if (eslint) { + huskyPreCommit += + `${packageManager} run lint:check\n\n` + + `${packageManager} run lint:fix\n\n`; + } + if (jest) { + huskyPreCommit += `${packageManager} run test --passWithNoTests\n\n`; + } + if (typescript) { + huskyPreCommit += `${packageManager} run build --no-emit\n\n`; + } + } + huskyPreCommit += + '# Following is for observability purposes\n\n' + + '# TODOs / FIXMEs\n' + + 'printf "\n\n"\n' + + 'printf "TODOs / FIXMEs - consider reviewing these"\n' + + 'printf "\n------------------------------------------\n"\n#\n' + + "npx leasot 'src/**/*.[jt]s?(x)' --exit-nicely\n\n" + + 'printf "\n\n------------------------------------------\n\n"\n' + + 'printf "Now push your code! 🚀"\n' + + 'printf "\n\n------------------------------------------\n\n"'; + return huskyPreCommit; +} + +export default { + config: makeLintStagedConfig, + preCommit: makeLintStagedPreCommit, +}; diff --git a/src/helpers/makeLintStagedConfig.test.ts b/src/helpers/makeLintStagedConfig.test.ts deleted file mode 100644 index 087d8d2..0000000 --- a/src/helpers/makeLintStagedConfig.test.ts +++ /dev/null @@ -1,144 +0,0 @@ -import makeLintStagedConfig from './makeLintStagedConfig.js'; - -describe('makeLintStagedConfig', () => { - it('should return a valid lint-staged configuration object', () => { - //test - const expectedConfig = { - '**/*.js?(x)': [ - 'prettier --check .', - 'prettier --write .', - 'eslint .', - 'eslint --fix .', - 'jest --ci', - ], - '**/*.ts?(x)': [ - 'prettier --check .', - 'prettier --write .', - 'eslint .', - 'eslint --fix .', - 'jest --ci', - 'tsc --noEmit', - ], - '**/*.{md, yml, yaml, json}': [ - 'prettier --check .', - 'prettier --write .', - ], - '**/*.{css}': ['prettier --check .', 'prettier --write .'], - }; - - const config = makeLintStagedConfig({ - eslint: true, - jest: true, - prettier: true, - typescript: true, - }); - - expect(config).toEqual(expectedConfig); - }); - - it('should return a valid lint-staged configuration object without TypeScript', () => { - const expectedConfig = { - '**/*.js?(x)': [ - 'prettier --check .', - 'prettier --write .', - 'eslint .', - 'eslint --fix .', - 'jest --ci', - ], - '**/*.{md, yml, yaml, json}': [ - 'prettier --check .', - 'prettier --write .', - ], - '**/*.{css}': ['prettier --check .', 'prettier --write .'], - }; - - const config = makeLintStagedConfig({ - eslint: true, - jest: true, - prettier: true, - typescript: false, - }); - - expect(config).toEqual(expectedConfig); - }); - - it('should return a valid lint-staged configuration object without Jest', () => { - const expectedConfig = { - '**/*.js?(x)': [ - 'prettier --check .', - 'prettier --write .', - 'eslint .', - 'eslint --fix .', - ], - '**/*.ts?(x)': [ - 'prettier --check .', - 'prettier --write .', - 'eslint .', - 'eslint --fix .', - 'tsc --noEmit', - ], - '**/*.{md, yml, yaml, json}': [ - 'prettier --check .', - 'prettier --write .', - ], - '**/*.{css}': ['prettier --check .', 'prettier --write .'], - }; - - const config = makeLintStagedConfig({ - eslint: true, - jest: false, - prettier: true, - typescript: true, - }); - - expect(config).toEqual(expectedConfig); - }); - - it('should return a valid lint-staged configuration object without Prettier', () => { - const expectedConfig = { - '**/*.js?(x)': ['eslint .', 'eslint --fix .', 'jest --ci'], - '**/*.ts?(x)': [ - 'eslint .', - 'eslint --fix .', - 'jest --ci', - 'tsc --noEmit', - ], - }; - - const config = makeLintStagedConfig({ - eslint: true, - jest: true, - prettier: false, - typescript: true, - }); - - expect(config).toEqual(expectedConfig); - }); - - it('should return a valid lint-staged configuration object without ESLint', () => { - const options = { - eslint: false, - jest: true, - prettier: true, - typescript: true, - }; - const expectedConfig = { - '**/*.js?(x)': ['prettier --check .', 'prettier --write .', 'jest --ci'], - '**/*.ts?(x)': [ - 'prettier --check .', - 'prettier --write .', - 'jest --ci', - 'tsc --noEmit', - ], - '**/*.{md, yml, yaml, json}': [ - 'prettier --check .', - 'prettier --write .', - ], - '**/*.{css}': ['prettier --check .', 'prettier --write .'], // TODO: add styledlint - }; - - const config = makeLintStagedConfig(options); - - expect(config).toEqual(expectedConfig); - }); -}); diff --git a/src/helpers/makeLintStagedConfig.ts b/src/helpers/makeLintStagedConfig.ts deleted file mode 100644 index 0242410..0000000 --- a/src/helpers/makeLintStagedConfig.ts +++ /dev/null @@ -1,50 +0,0 @@ -import { OptionsType } from '../Configurator.js'; - -type LintStagedConfigType = Pick< - OptionsType, - 'eslint' | 'jest' | 'prettier' | 'typescript' ->; - -function makeLintStagedConfig({ - eslint, - jest, - prettier, - typescript, -}: LintStagedConfigType) { - const tsLintStagedConfig = { - '**/*.ts?(x)': [ - ...(prettier ? ['prettier --check .', 'prettier --write .'] : []), - ...(eslint ? ['eslint .', 'eslint --fix .'] : []), - ...(jest ? ['jest --ci'] : []), - 'tsc --noEmit', - ], - }; - - const mdYmlJsonLintStagedConfig = { - '**/*.{md, yml, yaml, json}': [ - ...(prettier ? ['prettier --check .', 'prettier --write .'] : []), - ], - }; - - const stylesLintStagedConfig = { - '**/*.{css}': [ - ...(prettier ? ['prettier --check .', 'prettier --write .'] : []), - // TODO: add styledlint - ], - }; - - const lintStagedConfig = { - '**/*.js?(x)': [ - ...(prettier ? ['prettier --check .', 'prettier --write .'] : []), - ...(eslint ? ['eslint .', 'eslint --fix .'] : []), - ...(jest ? ['jest --ci'] : []), - ], - ...(typescript ? tsLintStagedConfig : {}), - ...(prettier ? mdYmlJsonLintStagedConfig : {}), - ...(prettier ? stylesLintStagedConfig : {}), - }; - - return lintStagedConfig; -} - -export default makeLintStagedConfig; diff --git a/tsconfig.json b/tsconfig.json index 38ef19f..e53aa1a 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -11,7 +11,13 @@ "declaration": true }, "include": ["src/**/*.ts"], - "exclude": ["node_modules", "dist", "tmp", "src/templates", "src/**/*.test.*"], + "exclude": [ + "node_modules", + "dist", + "tmp", + "src/templates", + "src/**/*.test.*" + ], "ts-node": { "esm": true, "compilerOptions": { From 153b037d1a3f8a20d22469121a7ba56a9c4ad27d Mon Sep 17 00:00:00 2001 From: Dominic Geargeoura Date: Fri, 6 Oct 2023 11:41:19 +0100 Subject: [PATCH 078/105] tests --- src/helpers/makeLintStaged.test.ts | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/helpers/makeLintStaged.test.ts b/src/helpers/makeLintStaged.test.ts index 6937d2a..4b7419f 100644 --- a/src/helpers/makeLintStaged.test.ts +++ b/src/helpers/makeLintStaged.test.ts @@ -199,6 +199,8 @@ describe('makeLintStagedPreCommit', () => { expect(script).toContain('yarn run lint:fix'); expect(script).toContain('yarn run format:check'); expect(script).toContain('yarn run format:write'); + expect(script).toContain('yarn run test --passWithNoTests'); + expect(script).toContain('yarn run build --no-emit'); }); }); @@ -219,6 +221,8 @@ describe('makeLintStagedPreCommit', () => { expect(script).toContain('npm run lint:fix'); expect(script).toContain('npm run format:check'); expect(script).toContain('npm run format:write'); + expect(script).toContain('npm run test --passWithNoTests'); + expect(script).toContain('npm run build --no-emit'); }); }); @@ -239,6 +243,8 @@ describe('makeLintStagedPreCommit', () => { expect(script).toContain('bun run lint:fix'); expect(script).toContain('bun run format:check'); expect(script).toContain('bun run format:write'); + expect(script).toContain('bun run test --passWithNoTests'); + expect(script).toContain('bun run build --no-emit'); }); }); @@ -259,6 +265,8 @@ describe('makeLintStagedPreCommit', () => { expect(script).toContain('pnpm run lint:fix'); expect(script).toContain('pnpm run format:check'); expect(script).toContain('pnpm run format:write'); + expect(script).toContain('pnpm run test --passWithNoTests'); + expect(script).toContain('pnpm run build --no-emit'); }); }); From da6fee221140ba743cb15e3b4a905f9bd5567d14 Mon Sep 17 00:00:00 2001 From: Dominic Geargeoura Date: Fri, 6 Oct 2023 11:48:18 +0100 Subject: [PATCH 079/105] tests --- src/helpers/makeLintStaged.test.ts | 44 ++++++++++++++---------------- 1 file changed, 21 insertions(+), 23 deletions(-) diff --git a/src/helpers/makeLintStaged.test.ts b/src/helpers/makeLintStaged.test.ts index 4b7419f..9fb2b69 100644 --- a/src/helpers/makeLintStaged.test.ts +++ b/src/helpers/makeLintStaged.test.ts @@ -1,9 +1,7 @@ import { PackageManagerKindEnum } from '../PackageManager.js'; import makeLintStaged from './makeLintStaged.js'; -const makeLintStagedConfig = makeLintStaged.config; -const makeLintStagedPreCommit = makeLintStaged.preCommit; -describe('makeLintStagedConfig', () => { +describe('makeLintStaged.config', () => { it('should return a valid lint-staged configuration object', () => { //test const expectedConfig = { @@ -29,7 +27,7 @@ describe('makeLintStagedConfig', () => { '**/*.{css}': ['prettier --check .', 'prettier --write .'], }; - const config = makeLintStagedConfig({ + const config = makeLintStaged.config({ eslint: true, jest: true, prettier: true, @@ -55,7 +53,7 @@ describe('makeLintStagedConfig', () => { '**/*.{css}': ['prettier --check .', 'prettier --write .'], }; - const config = makeLintStagedConfig({ + const config = makeLintStaged.config({ eslint: true, jest: true, prettier: true, @@ -87,7 +85,7 @@ describe('makeLintStagedConfig', () => { '**/*.{css}': ['prettier --check .', 'prettier --write .'], }; - const config = makeLintStagedConfig({ + const config = makeLintStaged.config({ eslint: true, jest: false, prettier: true, @@ -108,7 +106,7 @@ describe('makeLintStagedConfig', () => { ], }; - const config = makeLintStagedConfig({ + const config = makeLintStaged.config({ eslint: true, jest: true, prettier: false, @@ -140,13 +138,13 @@ describe('makeLintStagedConfig', () => { '**/*.{css}': ['prettier --check .', 'prettier --write .'], // TODO: add styledlint }; - const config = makeLintStagedConfig(options); + const config = makeLintStaged.config(options); expect(config).toEqual(expectedConfig); }); }); -describe('makeLintStagedPreCommit', () => { +describe('makeLintStaged.preCommit', () => { describe('when lint-staged is enabled', () => { it('should return a valid pre-commit hook script', () => { // Arrange @@ -175,7 +173,7 @@ describe('makeLintStagedPreCommit', () => { 'printf "Now push your code! 🚀"\n' + 'printf "\n\n------------------------------------------\n\n"'; // Act - const script = makeLintStagedPreCommit(options); + const script = makeLintStaged.preCommit(options); // Assert expect(script).toEqual(expectedScript); }); @@ -193,7 +191,7 @@ describe('makeLintStagedPreCommit', () => { typescript: true, }; - const script = makeLintStagedPreCommit(options); + const script = makeLintStaged.preCommit(options); expect(script).toContain('yarn run lint:check'); expect(script).toContain('yarn run lint:fix'); @@ -215,7 +213,7 @@ describe('makeLintStagedPreCommit', () => { typescript: true, }; - const script = makeLintStagedPreCommit(options); + const script = makeLintStaged.preCommit(options); expect(script).toContain('npm run lint:check'); expect(script).toContain('npm run lint:fix'); @@ -237,7 +235,7 @@ describe('makeLintStagedPreCommit', () => { typescript: true, }; - const script = makeLintStagedPreCommit(options); + const script = makeLintStaged.preCommit(options); expect(script).toContain('bun run lint:check'); expect(script).toContain('bun run lint:fix'); @@ -259,7 +257,7 @@ describe('makeLintStagedPreCommit', () => { typescript: true, }; - const script = makeLintStagedPreCommit(options); + const script = makeLintStaged.preCommit(options); expect(script).toContain('pnpm run lint:check'); expect(script).toContain('pnpm run lint:fix'); @@ -299,7 +297,7 @@ describe('makeLintStagedPreCommit', () => { 'printf "Now push your code! 🚀"\n' + 'printf "\n\n------------------------------------------\n\n"'; // Act - const script = makeLintStagedPreCommit(options); + const script = makeLintStaged.preCommit(options); // Assert expect(script).toEqual(expectedScript); }); @@ -333,7 +331,7 @@ describe('makeLintStagedPreCommit', () => { 'printf "Now push your code! 🚀"\n' + 'printf "\n\n------------------------------------------\n\n"'; // Act - const script = makeLintStagedPreCommit(options); + const script = makeLintStaged.preCommit(options); // Assert expect(script).toEqual(expectedScript); }); @@ -367,7 +365,7 @@ describe('makeLintStagedPreCommit', () => { 'printf "Now push your code! 🚀"\n' + 'printf "\n\n------------------------------------------\n\n"'; // Act - const script = makeLintStagedPreCommit(options); + const script = makeLintStaged.preCommit(options); // Assert expect(script).toEqual(expectedScript); }); @@ -400,7 +398,7 @@ describe('makeLintStagedPreCommit', () => { 'printf "Now push your code! 🚀"\n' + 'printf "\n\n------------------------------------------\n\n"'; // Act - const script = makeLintStagedPreCommit(options); + const script = makeLintStaged.preCommit(options); // Assert expect(script).toEqual(expectedScript); }); @@ -431,7 +429,7 @@ describe('makeLintStagedPreCommit', () => { 'printf "Now push your code! 🚀"\n' + 'printf "\n\n------------------------------------------\n\n"'; // Act - const script = makeLintStagedPreCommit(options); + const script = makeLintStaged.preCommit(options); // Assert expect(script).toEqual(expectedScript); }); @@ -461,7 +459,7 @@ describe('makeLintStagedPreCommit', () => { 'printf "Now push your code! 🚀"\n' + 'printf "\n\n------------------------------------------\n\n"'; // Act - const script = makeLintStagedPreCommit(options); + const script = makeLintStaged.preCommit(options); // Assert expect(script).toEqual(expectedScript); }); @@ -491,7 +489,7 @@ describe('makeLintStagedPreCommit', () => { 'printf "Now push your code! 🚀"\n' + 'printf "\n\n------------------------------------------\n\n"'; // Act - const script = makeLintStagedPreCommit(options); + const script = makeLintStaged.preCommit(options); // Assert expect(script).toEqual(expectedScript); }); @@ -523,7 +521,7 @@ describe('makeLintStagedPreCommit', () => { 'printf "Now push your code! 🚀"\n' + 'printf "\n\n------------------------------------------\n\n"'; // Act - const script = makeLintStagedPreCommit(options); + const script = makeLintStaged.preCommit(options); // Assert expect(script).toEqual(expectedScript); }); @@ -553,7 +551,7 @@ describe('makeLintStagedPreCommit', () => { 'printf "Now push your code! 🚀"\n' + 'printf "\n\n------------------------------------------\n\n"'; // Act - const script = makeLintStagedPreCommit(options); + const script = makeLintStaged.preCommit(options); // Assert expect(script).toEqual(expectedScript); From 37a0b8ce52c3af3ddb4c5e2cb5ce8da32d044420 Mon Sep 17 00:00:00 2001 From: Dominic Geargeoura Date: Fri, 6 Oct 2023 12:15:30 +0100 Subject: [PATCH 080/105] tests changes --- src/helpers/makeLintStaged.test.ts | 2 +- src/helpers/makeLintStaged.ts | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/helpers/makeLintStaged.test.ts b/src/helpers/makeLintStaged.test.ts index 9fb2b69..99ee411 100644 --- a/src/helpers/makeLintStaged.test.ts +++ b/src/helpers/makeLintStaged.test.ts @@ -135,7 +135,7 @@ describe('makeLintStaged.config', () => { 'prettier --check .', 'prettier --write .', ], - '**/*.{css}': ['prettier --check .', 'prettier --write .'], // TODO: add styledlint + '**/*.{css}': ['prettier --check .', 'prettier --write .'], }; const config = makeLintStaged.config(options); diff --git a/src/helpers/makeLintStaged.ts b/src/helpers/makeLintStaged.ts index 6288615..1039782 100644 --- a/src/helpers/makeLintStaged.ts +++ b/src/helpers/makeLintStaged.ts @@ -102,6 +102,7 @@ function makeLintStagedPreCommit({ 'printf "\n\n------------------------------------------\n\n"\n' + 'printf "Now push your code! 🚀"\n' + 'printf "\n\n------------------------------------------\n\n"'; + return huskyPreCommit; } From 909de4519c9ddfc445b4dc6fae964412f05c6183 Mon Sep 17 00:00:00 2001 From: Dominic Geargeoura Date: Fri, 6 Oct 2023 13:28:35 +0100 Subject: [PATCH 081/105] tests --- src/helpers/makeLintStaged.test.ts | 266 +++++++++++++++-------------- 1 file changed, 139 insertions(+), 127 deletions(-) diff --git a/src/helpers/makeLintStaged.test.ts b/src/helpers/makeLintStaged.test.ts index 99ee411..c05dc07 100644 --- a/src/helpers/makeLintStaged.test.ts +++ b/src/helpers/makeLintStaged.test.ts @@ -2,145 +2,157 @@ import { PackageManagerKindEnum } from '../PackageManager.js'; import makeLintStaged from './makeLintStaged.js'; describe('makeLintStaged.config', () => { - it('should return a valid lint-staged configuration object', () => { - //test - const expectedConfig = { - '**/*.js?(x)': [ - 'prettier --check .', - 'prettier --write .', - 'eslint .', - 'eslint --fix .', - 'jest --ci', - ], - '**/*.ts?(x)': [ - 'prettier --check .', - 'prettier --write .', - 'eslint .', - 'eslint --fix .', - 'jest --ci', - 'tsc --noEmit', - ], - '**/*.{md, yml, yaml, json}': [ - 'prettier --check .', - 'prettier --write .', - ], - '**/*.{css}': ['prettier --check .', 'prettier --write .'], - }; - - const config = makeLintStaged.config({ - eslint: true, - jest: true, - prettier: true, - typescript: true, - }); + describe('When eslint, jest, prettier and typescript options are true', () => { + it('should return a valid lint-staged configuration object', () => { + //test + const expectedConfig = { + '**/*.js?(x)': [ + 'prettier --check .', + 'prettier --write .', + 'eslint .', + 'eslint --fix .', + 'jest --ci', + ], + '**/*.ts?(x)': [ + 'prettier --check .', + 'prettier --write .', + 'eslint .', + 'eslint --fix .', + 'jest --ci', + 'tsc --noEmit', + ], + '**/*.{md, yml, yaml, json}': [ + 'prettier --check .', + 'prettier --write .', + ], + '**/*.{css}': ['prettier --check .', 'prettier --write .'], + }; - expect(config).toEqual(expectedConfig); - }); + const config = makeLintStaged.config({ + eslint: true, + jest: true, + prettier: true, + typescript: true, + }); - it('should return a valid lint-staged configuration object without TypeScript', () => { - const expectedConfig = { - '**/*.js?(x)': [ - 'prettier --check .', - 'prettier --write .', - 'eslint .', - 'eslint --fix .', - 'jest --ci', - ], - '**/*.{md, yml, yaml, json}': [ - 'prettier --check .', - 'prettier --write .', - ], - '**/*.{css}': ['prettier --check .', 'prettier --write .'], - }; - - const config = makeLintStaged.config({ - eslint: true, - jest: true, - prettier: true, - typescript: false, + expect(config).toEqual(expectedConfig); }); - - expect(config).toEqual(expectedConfig); }); - it('should return a valid lint-staged configuration object without Jest', () => { - const expectedConfig = { - '**/*.js?(x)': [ - 'prettier --check .', - 'prettier --write .', - 'eslint .', - 'eslint --fix .', - ], - '**/*.ts?(x)': [ - 'prettier --check .', - 'prettier --write .', - 'eslint .', - 'eslint --fix .', - 'tsc --noEmit', - ], - '**/*.{md, yml, yaml, json}': [ - 'prettier --check .', - 'prettier --write .', - ], - '**/*.{css}': ['prettier --check .', 'prettier --write .'], - }; - - const config = makeLintStaged.config({ - eslint: true, - jest: false, - prettier: true, - typescript: true, - }); + describe('When typescript is false and all other options are false', () => { + it('should return a valid lint-staged configuration object', () => { + const expectedConfig = { + '**/*.js?(x)': [ + 'prettier --check .', + 'prettier --write .', + 'eslint .', + 'eslint --fix .', + 'jest --ci', + ], + '**/*.{md, yml, yaml, json}': [ + 'prettier --check .', + 'prettier --write .', + ], + '**/*.{css}': ['prettier --check .', 'prettier --write .'], + }; + + const config = makeLintStaged.config({ + eslint: true, + jest: true, + prettier: true, + typescript: false, + }); - expect(config).toEqual(expectedConfig); + expect(config).toEqual(expectedConfig); + }); }); + describe('When jest is false and all other options are false', () => { + it('should return a valid lint-staged configuration object', () => { + const expectedConfig = { + '**/*.js?(x)': [ + 'prettier --check .', + 'prettier --write .', + 'eslint .', + 'eslint --fix .', + ], + '**/*.ts?(x)': [ + 'prettier --check .', + 'prettier --write .', + 'eslint .', + 'eslint --fix .', + 'tsc --noEmit', + ], + '**/*.{md, yml, yaml, json}': [ + 'prettier --check .', + 'prettier --write .', + ], + '**/*.{css}': ['prettier --check .', 'prettier --write .'], + }; + + const config = makeLintStaged.config({ + eslint: true, + jest: false, + prettier: true, + typescript: true, + }); - it('should return a valid lint-staged configuration object without Prettier', () => { - const expectedConfig = { - '**/*.js?(x)': ['eslint .', 'eslint --fix .', 'jest --ci'], - '**/*.ts?(x)': [ - 'eslint .', - 'eslint --fix .', - 'jest --ci', - 'tsc --noEmit', - ], - }; - - const config = makeLintStaged.config({ - eslint: true, - jest: true, - prettier: false, - typescript: true, + expect(config).toEqual(expectedConfig); }); + }); + describe('When prettier is false and all other options are false', () => { + it('should return a valid lint-staged configuration object without Prettier', () => { + const expectedConfig = { + '**/*.js?(x)': ['eslint .', 'eslint --fix .', 'jest --ci'], + '**/*.ts?(x)': [ + 'eslint .', + 'eslint --fix .', + 'jest --ci', + 'tsc --noEmit', + ], + }; + + const config = makeLintStaged.config({ + eslint: true, + jest: true, + prettier: false, + typescript: true, + }); - expect(config).toEqual(expectedConfig); + expect(config).toEqual(expectedConfig); + }); }); - it('should return a valid lint-staged configuration object without ESLint', () => { - const options = { - eslint: false, - jest: true, - prettier: true, - typescript: true, - }; - const expectedConfig = { - '**/*.js?(x)': ['prettier --check .', 'prettier --write .', 'jest --ci'], - '**/*.ts?(x)': [ - 'prettier --check .', - 'prettier --write .', - 'jest --ci', - 'tsc --noEmit', - ], - '**/*.{md, yml, yaml, json}': [ - 'prettier --check .', - 'prettier --write .', - ], - '**/*.{css}': ['prettier --check .', 'prettier --write .'], - }; - - const config = makeLintStaged.config(options); - - expect(config).toEqual(expectedConfig); + describe('When eslint is false and all other options are false', () => { + it('should return a valid lint-staged configuration object without ESLint', () => { + const options = { + eslint: false, + jest: true, + prettier: true, + typescript: true, + }; + const expectedConfig = { + '**/*.js?(x)': [ + 'prettier --check .', + 'prettier --write .', + 'jest --ci', + ], + '**/*.ts?(x)': [ + 'prettier --check .', + 'prettier --write .', + 'jest --ci', + 'tsc --noEmit', + ], + '**/*.{md, yml, yaml, json}': [ + 'prettier --check .', + 'prettier --write .', + ], + '**/*.{css}': ['prettier --check .', 'prettier --write .'], + }; + + const config = makeLintStaged.config(options); + + expect(config).toEqual(expectedConfig); + }); }); }); From 92d0fb62f5400ec9da7beacdfc144c97a8e9fc2c Mon Sep 17 00:00:00 2001 From: Dominic Geargeoura Date: Fri, 6 Oct 2023 13:30:57 +0100 Subject: [PATCH 082/105] tests --- src/helpers/makeLintStaged.test.ts | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/helpers/makeLintStaged.test.ts b/src/helpers/makeLintStaged.test.ts index c05dc07..fc6bb14 100644 --- a/src/helpers/makeLintStaged.test.ts +++ b/src/helpers/makeLintStaged.test.ts @@ -40,7 +40,7 @@ describe('makeLintStaged.config', () => { }); describe('When typescript is false and all other options are false', () => { - it('should return a valid lint-staged configuration object', () => { + it('should return a valid lint-staged configuration object without typescript', () => { const expectedConfig = { '**/*.js?(x)': [ 'prettier --check .', @@ -67,7 +67,7 @@ describe('makeLintStaged.config', () => { }); }); describe('When jest is false and all other options are false', () => { - it('should return a valid lint-staged configuration object', () => { + it('should return a valid lint-staged configuration object without jest', () => { const expectedConfig = { '**/*.js?(x)': [ 'prettier --check .', @@ -193,7 +193,7 @@ describe('makeLintStaged.preCommit', () => { describe('when lint-staged is disabled', () => { describe('When the package manager is Yarn', () => { - it('should use yarn', () => { + it('should use yarn for the commands', () => { const options = { eslint: true, jest: true, @@ -215,7 +215,7 @@ describe('makeLintStaged.preCommit', () => { }); describe('When the package manager is Npm', () => { - it('should use Npm', () => { + it('should use Npm for the commands', () => { const options = { eslint: true, jest: true, @@ -237,7 +237,7 @@ describe('makeLintStaged.preCommit', () => { }); describe('When the package manager is Bun', () => { - it('should use Bun', () => { + it('should use Bun for the commands', () => { const options = { eslint: true, jest: true, @@ -259,7 +259,7 @@ describe('makeLintStaged.preCommit', () => { }); describe('When the package manager is Pnpm', () => { - it('should use Pnpm', () => { + it('should use Pnpm for the commands', () => { const options = { eslint: true, jest: true, From 1c843c87fa5e759fe7629945b18675fb9daacff0 Mon Sep 17 00:00:00 2001 From: Dom Geargeoura Date: Sat, 7 Oct 2023 21:46:02 +0100 Subject: [PATCH 083/105] cli options added --- package-lock.json | 344 +++++++++++++++++++++++++++++++++++++++----- package.json | 4 +- src/Configurator.ts | 64 +++++---- src/index.ts | 107 +++++++------- src/prompts.ts | 6 +- 5 files changed, 409 insertions(+), 116 deletions(-) diff --git a/package-lock.json b/package-lock.json index 11ef8fd..7edd6dd 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,8 +10,6 @@ "hasInstallScript": true, "license": "ISC", "dependencies": { - "@babel/preset-env": "^7.22.20", - "babel-jest": "^29.7.0", "commander": "^11.0.0", "execa": "^8.0.1", "figlet": "^1.6.0", @@ -20,6 +18,7 @@ "prompts": "^2.4.2" }, "devDependencies": { + "@babel/preset-env": "^7.22.20", "@rollup/plugin-commonjs": "^25.0.5", "@rollup/plugin-json": "^6.0.1", "@rollup/plugin-node-resolve": "^15.2.2", @@ -32,6 +31,7 @@ "@types/prompts": "^2.4.4", "@typescript-eslint/eslint-plugin": "^6.5.0", "@typescript-eslint/parser": "^6.5.0", + "babel-jest": "^29.7.0", "esbuild": "^0.19.3", "eslint": "^8.48.0", "eslint-config-prettier": "^9.0.0", @@ -67,6 +67,7 @@ "version": "2.2.1", "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", + "dev": true, "dependencies": { "@jridgewell/gen-mapping": "^0.3.0", "@jridgewell/trace-mapping": "^0.3.9" @@ -79,6 +80,7 @@ "version": "7.22.13", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz", "integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==", + "dev": true, "dependencies": { "@babel/highlight": "^7.22.13", "chalk": "^2.4.2" @@ -91,6 +93,7 @@ "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, "dependencies": { "color-convert": "^1.9.0" }, @@ -102,6 +105,7 @@ "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, "dependencies": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", @@ -115,6 +119,7 @@ "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, "dependencies": { "color-name": "1.1.3" } @@ -122,12 +127,14 @@ "node_modules/@babel/code-frame/node_modules/color-name": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true }, "node_modules/@babel/code-frame/node_modules/escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, "engines": { "node": ">=0.8.0" } @@ -136,6 +143,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, "engines": { "node": ">=4" } @@ -144,6 +152,7 @@ "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, "dependencies": { "has-flag": "^3.0.0" }, @@ -155,6 +164,7 @@ "version": "7.22.20", "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.20.tgz", "integrity": "sha512-BQYjKbpXjoXwFW5jGqiizJQQT/aC7pFm9Ok1OWssonuguICi264lbgMzRp2ZMmRSlfkX6DsWDDcsrctK8Rwfiw==", + "dev": true, "engines": { "node": ">=6.9.0" } @@ -163,6 +173,7 @@ "version": "7.23.0", "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.23.0.tgz", "integrity": "sha512-97z/ju/Jy1rZmDxybphrBuI+jtJjFVoz7Mr9yUQVVVi+DNZE333uFQeMOqcCIy1x3WYBIbWftUSLmbNXNT7qFQ==", + "dev": true, "dependencies": { "@ampproject/remapping": "^2.2.0", "@babel/code-frame": "^7.22.13", @@ -192,6 +203,7 @@ "version": "7.23.0", "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.0.tgz", "integrity": "sha512-lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g==", + "dev": true, "dependencies": { "@babel/types": "^7.23.0", "@jridgewell/gen-mapping": "^0.3.2", @@ -206,6 +218,7 @@ "version": "7.23.0", "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.0.tgz", "integrity": "sha512-t/QaEvyIoIkwzpiZ7aoSKK8kObQYeF7T2v+dazAYCb8SXtp58zEVkWW7zAnju8FNKNdr4ScAOEDmMItbyOmEYw==", + "dev": true, "dependencies": { "@babel/code-frame": "^7.22.13", "@babel/generator": "^7.23.0", @@ -226,6 +239,7 @@ "version": "7.23.0", "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.0.tgz", "integrity": "sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==", + "dev": true, "dependencies": { "@babel/helper-string-parser": "^7.22.5", "@babel/helper-validator-identifier": "^7.22.20", @@ -239,6 +253,7 @@ "version": "0.3.19", "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz", "integrity": "sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==", + "dev": true, "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" @@ -248,6 +263,7 @@ "version": "11.12.0", "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true, "engines": { "node": ">=4" } @@ -256,6 +272,7 @@ "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, "bin": { "semver": "bin/semver.js" } @@ -278,6 +295,7 @@ "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz", "integrity": "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==", + "dev": true, "dependencies": { "@babel/types": "^7.22.5" }, @@ -289,6 +307,7 @@ "version": "7.23.0", "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.0.tgz", "integrity": "sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==", + "dev": true, "dependencies": { "@babel/helper-string-parser": "^7.22.5", "@babel/helper-validator-identifier": "^7.22.20", @@ -302,6 +321,7 @@ "version": "7.22.15", "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.15.tgz", "integrity": "sha512-QkBXwGgaoC2GtGZRoma6kv7Szfv06khvhFav67ZExau2RaXzy8MpHSMO2PNoP2XtmQphJQRHFfg77Bq731Yizw==", + "dev": true, "dependencies": { "@babel/types": "^7.22.15" }, @@ -313,6 +333,7 @@ "version": "7.23.0", "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.0.tgz", "integrity": "sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==", + "dev": true, "dependencies": { "@babel/helper-string-parser": "^7.22.5", "@babel/helper-validator-identifier": "^7.22.20", @@ -326,6 +347,7 @@ "version": "7.22.15", "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.15.tgz", "integrity": "sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw==", + "dev": true, "dependencies": { "@babel/compat-data": "^7.22.9", "@babel/helper-validator-option": "^7.22.15", @@ -341,6 +363,7 @@ "version": "5.1.1", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, "dependencies": { "yallist": "^3.0.2" } @@ -349,6 +372,7 @@ "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, "bin": { "semver": "bin/semver.js" } @@ -356,12 +380,14 @@ "node_modules/@babel/helper-compilation-targets/node_modules/yallist": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true }, "node_modules/@babel/helper-create-class-features-plugin": { "version": "7.22.15", "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.15.tgz", "integrity": "sha512-jKkwA59IXcvSaiK2UN45kKwSC9o+KuoXsBDvHvU/7BecYIp8GQ2UwrVvFgJASUT+hBnwJx6MhvMCuMzwZZ7jlg==", + "dev": true, "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", "@babel/helper-environment-visitor": "^7.22.5", @@ -384,6 +410,7 @@ "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, "bin": { "semver": "bin/semver.js" } @@ -392,6 +419,7 @@ "version": "7.22.15", "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.15.tgz", "integrity": "sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w==", + "dev": true, "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", "regexpu-core": "^5.3.1", @@ -408,6 +436,7 @@ "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, "bin": { "semver": "bin/semver.js" } @@ -416,6 +445,7 @@ "version": "0.4.2", "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.2.tgz", "integrity": "sha512-k0qnnOqHn5dK9pZpfD5XXZ9SojAITdCKRn2Lp6rnDGzIbaP0rHyMPk/4wsSxVBVz4RfN0q6VpXWP2pDGIoQ7hw==", + "dev": true, "dependencies": { "@babel/helper-compilation-targets": "^7.22.6", "@babel/helper-plugin-utils": "^7.22.5", @@ -431,6 +461,7 @@ "version": "7.22.20", "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==", + "dev": true, "engines": { "node": ">=6.9.0" } @@ -439,6 +470,7 @@ "version": "7.23.0", "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", + "dev": true, "dependencies": { "@babel/template": "^7.22.15", "@babel/types": "^7.23.0" @@ -451,6 +483,7 @@ "version": "7.23.0", "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.0.tgz", "integrity": "sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==", + "dev": true, "dependencies": { "@babel/helper-string-parser": "^7.22.5", "@babel/helper-validator-identifier": "^7.22.20", @@ -464,6 +497,7 @@ "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", + "dev": true, "dependencies": { "@babel/types": "^7.22.5" }, @@ -475,6 +509,7 @@ "version": "7.22.19", "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.19.tgz", "integrity": "sha512-P7LAw/LbojPzkgp5oznjE6tQEIWbp4PkkfrZDINTro9zgBRtI324/EYsiSI7lhPbpIQ+DCeR2NNmMWANGGfZsg==", + "dev": true, "dependencies": { "@babel/helper-string-parser": "^7.22.5", "@babel/helper-validator-identifier": "^7.22.19", @@ -488,6 +523,7 @@ "version": "7.23.0", "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.23.0.tgz", "integrity": "sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA==", + "dev": true, "dependencies": { "@babel/types": "^7.23.0" }, @@ -499,6 +535,7 @@ "version": "7.23.0", "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.0.tgz", "integrity": "sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==", + "dev": true, "dependencies": { "@babel/helper-string-parser": "^7.22.5", "@babel/helper-validator-identifier": "^7.22.20", @@ -512,6 +549,7 @@ "version": "7.22.15", "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz", "integrity": "sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==", + "dev": true, "dependencies": { "@babel/types": "^7.22.15" }, @@ -523,6 +561,7 @@ "version": "7.23.0", "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.0.tgz", "integrity": "sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==", + "dev": true, "dependencies": { "@babel/helper-string-parser": "^7.22.5", "@babel/helper-validator-identifier": "^7.22.20", @@ -536,6 +575,7 @@ "version": "7.23.0", "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.23.0.tgz", "integrity": "sha512-WhDWw1tdrlT0gMgUJSlX0IQvoO1eN279zrAUbVB+KpV2c3Tylz8+GnKOLllCS6Z/iZQEyVYxhZVUdPTqs2YYPw==", + "dev": true, "dependencies": { "@babel/helper-environment-visitor": "^7.22.20", "@babel/helper-module-imports": "^7.22.15", @@ -554,6 +594,7 @@ "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz", "integrity": "sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==", + "dev": true, "dependencies": { "@babel/types": "^7.22.5" }, @@ -565,6 +606,7 @@ "version": "7.23.0", "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.0.tgz", "integrity": "sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==", + "dev": true, "dependencies": { "@babel/helper-string-parser": "^7.22.5", "@babel/helper-validator-identifier": "^7.22.20", @@ -578,6 +620,7 @@ "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", + "dev": true, "engines": { "node": ">=6.9.0" } @@ -586,6 +629,7 @@ "version": "7.22.20", "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.20.tgz", "integrity": "sha512-pBGyV4uBqOns+0UvhsTO8qgl8hO89PmiDYv+/COyp1aeMcmfrfruz+/nCMFiYyFF/Knn0yfrC85ZzNFjembFTw==", + "dev": true, "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", "@babel/helper-environment-visitor": "^7.22.20", @@ -602,6 +646,7 @@ "version": "7.22.20", "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.22.20.tgz", "integrity": "sha512-qsW0In3dbwQUbK8kejJ4R7IHVGwHJlV6lpG6UA7a9hSa2YEiAib+N1T2kr6PEeUT+Fl7najmSOS6SmAwCHK6Tw==", + "dev": true, "dependencies": { "@babel/helper-environment-visitor": "^7.22.20", "@babel/helper-member-expression-to-functions": "^7.22.15", @@ -618,6 +663,7 @@ "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", + "dev": true, "dependencies": { "@babel/types": "^7.22.5" }, @@ -629,6 +675,7 @@ "version": "7.23.0", "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.0.tgz", "integrity": "sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==", + "dev": true, "dependencies": { "@babel/helper-string-parser": "^7.22.5", "@babel/helper-validator-identifier": "^7.22.20", @@ -642,6 +689,7 @@ "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz", "integrity": "sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==", + "dev": true, "dependencies": { "@babel/types": "^7.22.5" }, @@ -653,6 +701,7 @@ "version": "7.23.0", "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.0.tgz", "integrity": "sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==", + "dev": true, "dependencies": { "@babel/helper-string-parser": "^7.22.5", "@babel/helper-validator-identifier": "^7.22.20", @@ -666,6 +715,7 @@ "version": "7.22.6", "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", + "dev": true, "dependencies": { "@babel/types": "^7.22.5" }, @@ -677,6 +727,7 @@ "version": "7.22.19", "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.19.tgz", "integrity": "sha512-P7LAw/LbojPzkgp5oznjE6tQEIWbp4PkkfrZDINTro9zgBRtI324/EYsiSI7lhPbpIQ+DCeR2NNmMWANGGfZsg==", + "dev": true, "dependencies": { "@babel/helper-string-parser": "^7.22.5", "@babel/helper-validator-identifier": "^7.22.19", @@ -690,6 +741,7 @@ "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==", + "dev": true, "engines": { "node": ">=6.9.0" } @@ -698,6 +750,7 @@ "version": "7.22.20", "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", + "dev": true, "engines": { "node": ">=6.9.0" } @@ -706,6 +759,7 @@ "version": "7.22.15", "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.15.tgz", "integrity": "sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA==", + "dev": true, "engines": { "node": ">=6.9.0" } @@ -714,6 +768,7 @@ "version": "7.22.20", "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.22.20.tgz", "integrity": "sha512-pms/UwkOpnQe/PDAEdV/d7dVCoBbB+R4FvYoHGZz+4VPcg7RtYy2KP7S2lbuWM6FCSgob5wshfGESbC/hzNXZw==", + "dev": true, "dependencies": { "@babel/helper-function-name": "^7.22.5", "@babel/template": "^7.22.15", @@ -727,6 +782,7 @@ "version": "7.23.0", "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.0.tgz", "integrity": "sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==", + "dev": true, "dependencies": { "@babel/helper-string-parser": "^7.22.5", "@babel/helper-validator-identifier": "^7.22.20", @@ -740,6 +796,7 @@ "version": "7.23.1", "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.23.1.tgz", "integrity": "sha512-chNpneuK18yW5Oxsr+t553UZzzAs3aZnFm4bxhebsNTeshrC95yA7l5yl7GBAG+JG1rF0F7zzD2EixK9mWSDoA==", + "dev": true, "dependencies": { "@babel/template": "^7.22.15", "@babel/traverse": "^7.23.0", @@ -753,6 +810,7 @@ "version": "7.23.0", "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.0.tgz", "integrity": "sha512-lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g==", + "dev": true, "dependencies": { "@babel/types": "^7.23.0", "@jridgewell/gen-mapping": "^0.3.2", @@ -767,6 +825,7 @@ "version": "7.23.0", "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.0.tgz", "integrity": "sha512-t/QaEvyIoIkwzpiZ7aoSKK8kObQYeF7T2v+dazAYCb8SXtp58zEVkWW7zAnju8FNKNdr4ScAOEDmMItbyOmEYw==", + "dev": true, "dependencies": { "@babel/code-frame": "^7.22.13", "@babel/generator": "^7.23.0", @@ -787,6 +846,7 @@ "version": "7.23.0", "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.0.tgz", "integrity": "sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==", + "dev": true, "dependencies": { "@babel/helper-string-parser": "^7.22.5", "@babel/helper-validator-identifier": "^7.22.20", @@ -800,6 +860,7 @@ "version": "0.3.19", "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz", "integrity": "sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==", + "dev": true, "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" @@ -809,6 +870,7 @@ "version": "11.12.0", "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true, "engines": { "node": ">=4" } @@ -817,6 +879,7 @@ "version": "7.22.20", "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.20.tgz", "integrity": "sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==", + "dev": true, "dependencies": { "@babel/helper-validator-identifier": "^7.22.20", "chalk": "^2.4.2", @@ -830,6 +893,7 @@ "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, "dependencies": { "color-convert": "^1.9.0" }, @@ -841,6 +905,7 @@ "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, "dependencies": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", @@ -854,6 +919,7 @@ "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, "dependencies": { "color-name": "1.1.3" } @@ -861,12 +927,14 @@ "node_modules/@babel/highlight/node_modules/color-name": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true }, "node_modules/@babel/highlight/node_modules/escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, "engines": { "node": ">=0.8.0" } @@ -875,6 +943,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, "engines": { "node": ">=4" } @@ -883,6 +952,7 @@ "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, "dependencies": { "has-flag": "^3.0.0" }, @@ -894,6 +964,7 @@ "version": "7.23.0", "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.0.tgz", "integrity": "sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw==", + "dev": true, "bin": { "parser": "bin/babel-parser.js" }, @@ -905,6 +976,7 @@ "version": "7.22.15", "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.22.15.tgz", "integrity": "sha512-FB9iYlz7rURmRJyXRKEnalYPPdn87H5no108cyuQQyMwlpJ2SJtpIUBI27kdTin956pz+LPypkPVPUTlxOmrsg==", + "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, @@ -919,6 +991,7 @@ "version": "7.22.15", "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.22.15.tgz", "integrity": "sha512-Hyph9LseGvAeeXzikV88bczhsrLrIZqDPxO+sSmAunMPaGrBGhfMWzCPYTtiW9t+HzSE2wtV8e5cc5P6r1xMDQ==", + "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", @@ -935,6 +1008,7 @@ "version": "7.21.0-placeholder-for-preset-env.2", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", + "dev": true, "engines": { "node": ">=6.9.0" }, @@ -946,6 +1020,7 @@ "version": "7.8.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -957,6 +1032,7 @@ "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", + "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -968,6 +1044,7 @@ "version": "7.12.13", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.12.13" }, @@ -979,6 +1056,7 @@ "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", + "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.14.5" }, @@ -993,6 +1071,7 @@ "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", + "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -1004,6 +1083,7 @@ "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", + "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.8.3" }, @@ -1015,6 +1095,7 @@ "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.22.5.tgz", "integrity": "sha512-rdV97N7KqsRzeNGoWUOK6yUsWarLjE5Su/Snk9IYPU9CwkWHs4t+rTGOvffTR8XGkJMTAdLfO0xVnXm8wugIJg==", + "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, @@ -1029,6 +1110,7 @@ "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.22.5.tgz", "integrity": "sha512-KwvoWDeNKPETmozyFE0P2rOLqh39EoQHNjqizrI5B8Vt0ZNS7M56s7dAiAqbYfiAYOuIzIh96z3iR2ktgu3tEg==", + "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, @@ -1043,6 +1125,7 @@ "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", + "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" }, @@ -1054,6 +1137,7 @@ "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -1080,6 +1164,7 @@ "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" }, @@ -1091,6 +1176,7 @@ "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -1102,6 +1188,7 @@ "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" }, @@ -1113,6 +1200,7 @@ "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -1124,6 +1212,7 @@ "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -1135,6 +1224,7 @@ "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -1146,6 +1236,7 @@ "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", + "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.14.5" }, @@ -1160,6 +1251,7 @@ "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.14.5" }, @@ -1189,6 +1281,7 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", + "dev": true, "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.18.6", "@babel/helper-plugin-utils": "^7.18.6" @@ -1204,6 +1297,7 @@ "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.22.5.tgz", "integrity": "sha512-26lTNXoVRdAnsaDXPpvCNUq+OVWEVC6bx7Vvz9rC53F2bagUWW4u4ii2+h8Fejfh7RYqPxn+libeFBBck9muEw==", + "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, @@ -1218,6 +1312,7 @@ "version": "7.22.15", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.22.15.tgz", "integrity": "sha512-jBm1Es25Y+tVoTi5rfd5t1KLmL8ogLKpXszboWOTTtGFGz2RKnQe2yn7HbZ+kb/B8N0FVSGQo874NSlOU1T4+w==", + "dev": true, "dependencies": { "@babel/helper-environment-visitor": "^7.22.5", "@babel/helper-plugin-utils": "^7.22.5", @@ -1235,6 +1330,7 @@ "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.22.5.tgz", "integrity": "sha512-b1A8D8ZzE/VhNDoV1MSJTnpKkCG5bJo+19R4o4oy03zM7ws8yEMK755j61Dc3EyvdysbqH5BOOTquJ7ZX9C6vQ==", + "dev": true, "dependencies": { "@babel/helper-module-imports": "^7.22.5", "@babel/helper-plugin-utils": "^7.22.5", @@ -1251,6 +1347,7 @@ "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.22.5.tgz", "integrity": "sha512-tdXZ2UdknEKQWKJP1KMNmuF5Lx3MymtMN/pvA+p/VEkhK8jVcQ1fzSy8KM9qRYhAf2/lV33hoMPKI/xaI9sADA==", + "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, @@ -1265,6 +1362,7 @@ "version": "7.23.0", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.23.0.tgz", "integrity": "sha512-cOsrbmIOXmf+5YbL99/S49Y3j46k/T16b9ml8bm9lP6N9US5iQ2yBK7gpui1pg0V/WMcXdkfKbTb7HXq9u+v4g==", + "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, @@ -1279,6 +1377,7 @@ "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.22.5.tgz", "integrity": "sha512-nDkQ0NfkOhPTq8YCLiWNxp1+f9fCobEjCb0n8WdbNUBc4IB5V7P1QnX9IjpSoquKrXF5SKojHleVNs2vGeHCHQ==", + "dev": true, "dependencies": { "@babel/helper-create-class-features-plugin": "^7.22.5", "@babel/helper-plugin-utils": "^7.22.5" @@ -1294,6 +1393,7 @@ "version": "7.22.11", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.22.11.tgz", "integrity": "sha512-GMM8gGmqI7guS/llMFk1bJDkKfn3v3C4KHK9Yg1ey5qcHcOlKb0QvcMrgzvxo+T03/4szNh5lghY+fEC98Kq9g==", + "dev": true, "dependencies": { "@babel/helper-create-class-features-plugin": "^7.22.11", "@babel/helper-plugin-utils": "^7.22.5", @@ -1310,6 +1410,7 @@ "version": "7.22.15", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.22.15.tgz", "integrity": "sha512-VbbC3PGjBdE0wAWDdHM9G8Gm977pnYI0XpqMd6LrKISj8/DJXEsWqgRuTYaNE9Bv0JGhTZUzHDlMk18IpOuoqw==", + "dev": true, "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", "@babel/helper-compilation-targets": "^7.22.15", @@ -1332,6 +1433,7 @@ "version": "11.12.0", "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true, "engines": { "node": ">=4" } @@ -1340,6 +1442,7 @@ "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.22.5.tgz", "integrity": "sha512-4GHWBgRf0krxPX+AaPtgBAlTgTeZmqDynokHOX7aqqAB4tHs3U2Y02zH6ETFdLZGcg9UQSD1WCmkVrE9ErHeOg==", + "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", "@babel/template": "^7.22.5" @@ -1355,6 +1458,7 @@ "version": "7.23.0", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.23.0.tgz", "integrity": "sha512-vaMdgNXFkYrB+8lbgniSYWHsgqK5gjaMNcc84bMIOMRLH0L9AqYq3hwMdvnyqj1OPqea8UtjPEuS/DCenah1wg==", + "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, @@ -1369,6 +1473,7 @@ "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.22.5.tgz", "integrity": "sha512-5/Yk9QxCQCl+sOIB1WelKnVRxTJDSAIxtJLL2/pqL14ZVlbH0fUQUZa/T5/UnQtBNgghR7mfB8ERBKyKPCi7Vw==", + "dev": true, "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.22.5", "@babel/helper-plugin-utils": "^7.22.5" @@ -1384,6 +1489,7 @@ "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.22.5.tgz", "integrity": "sha512-dEnYD+9BBgld5VBXHnF/DbYGp3fqGMsyxKbtD1mDyIA7AkTSpKXFhCVuj/oQVOoALfBs77DudA0BE4d5mcpmqw==", + "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, @@ -1398,6 +1504,7 @@ "version": "7.22.11", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.22.11.tgz", "integrity": "sha512-g/21plo58sfteWjaO0ZNVb+uEOkJNjAaHhbejrnBmu011l/eNDScmkbjCC3l4FKb10ViaGU4aOkFznSu2zRHgA==", + "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", "@babel/plugin-syntax-dynamic-import": "^7.8.3" @@ -1413,6 +1520,7 @@ "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.22.5.tgz", "integrity": "sha512-vIpJFNM/FjZ4rh1myqIya9jXwrwwgFRHPjT3DkUA9ZLHuzox8jiXkOLvwm1H+PQIP3CqfC++WPKeuDi0Sjdj1g==", + "dev": true, "dependencies": { "@babel/helper-builder-binary-assignment-operator-visitor": "^7.22.5", "@babel/helper-plugin-utils": "^7.22.5" @@ -1428,6 +1536,7 @@ "version": "7.22.11", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.22.11.tgz", "integrity": "sha512-xa7aad7q7OiT8oNZ1mU7NrISjlSkVdMbNxn9IuLZyL9AJEhs1Apba3I+u5riX1dIkdptP5EKDG5XDPByWxtehw==", + "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", "@babel/plugin-syntax-export-namespace-from": "^7.8.3" @@ -1443,6 +1552,7 @@ "version": "7.22.15", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.22.15.tgz", "integrity": "sha512-me6VGeHsx30+xh9fbDLLPi0J1HzmeIIyenoOQHuw2D4m2SAU3NrspX5XxJLBpqn5yrLzrlw2Iy3RA//Bx27iOA==", + "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, @@ -1457,6 +1567,7 @@ "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.22.5.tgz", "integrity": "sha512-UIzQNMS0p0HHiQm3oelztj+ECwFnj+ZRV4KnguvlsD2of1whUeM6o7wGNj6oLwcDoAXQ8gEqfgC24D+VdIcevg==", + "dev": true, "dependencies": { "@babel/helper-compilation-targets": "^7.22.5", "@babel/helper-function-name": "^7.22.5", @@ -1473,6 +1584,7 @@ "version": "7.22.11", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.22.11.tgz", "integrity": "sha512-CxT5tCqpA9/jXFlme9xIBCc5RPtdDq3JpkkhgHQqtDdiTnTI0jtZ0QzXhr5DILeYifDPp2wvY2ad+7+hLMW5Pw==", + "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", "@babel/plugin-syntax-json-strings": "^7.8.3" @@ -1488,6 +1600,7 @@ "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.22.5.tgz", "integrity": "sha512-fTLj4D79M+mepcw3dgFBTIDYpbcB9Sm0bpm4ppXPaO+U+PKFFyV9MGRvS0gvGw62sd10kT5lRMKXAADb9pWy8g==", + "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, @@ -1502,6 +1615,7 @@ "version": "7.22.11", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.22.11.tgz", "integrity": "sha512-qQwRTP4+6xFCDV5k7gZBF3C31K34ut0tbEcTKxlX/0KXxm9GLcO14p570aWxFvVzx6QAfPgq7gaeIHXJC8LswQ==", + "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" @@ -1517,6 +1631,7 @@ "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.22.5.tgz", "integrity": "sha512-RZEdkNtzzYCFl9SE9ATaUMTj2hqMb4StarOJLrZRbqqU4HSBE7UlBw9WBWQiDzrJZJdUWiMTVDI6Gv/8DPvfew==", + "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, @@ -1531,6 +1646,7 @@ "version": "7.23.0", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.23.0.tgz", "integrity": "sha512-xWT5gefv2HGSm4QHtgc1sYPbseOyf+FFDo2JbpE25GWl5BqTGO9IMwTYJRoIdjsF85GE+VegHxSCUt5EvoYTAw==", + "dev": true, "dependencies": { "@babel/helper-module-transforms": "^7.23.0", "@babel/helper-plugin-utils": "^7.22.5" @@ -1546,6 +1662,7 @@ "version": "7.23.0", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.23.0.tgz", "integrity": "sha512-32Xzss14/UVc7k9g775yMIvkVK8xwKE0DPdP5JTapr3+Z9w4tzeOuLNY6BXDQR6BdnzIlXnCGAzsk/ICHBLVWQ==", + "dev": true, "dependencies": { "@babel/helper-module-transforms": "^7.23.0", "@babel/helper-plugin-utils": "^7.22.5", @@ -1562,6 +1679,7 @@ "version": "7.23.0", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.23.0.tgz", "integrity": "sha512-qBej6ctXZD2f+DhlOC9yO47yEYgUh5CZNz/aBoH4j/3NOlRfJXJbY7xDQCqQVf9KbrqGzIWER1f23doHGrIHFg==", + "dev": true, "dependencies": { "@babel/helper-hoist-variables": "^7.22.5", "@babel/helper-module-transforms": "^7.23.0", @@ -1579,6 +1697,7 @@ "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.22.5.tgz", "integrity": "sha512-+S6kzefN/E1vkSsKx8kmQuqeQsvCKCd1fraCM7zXm4SFoggI099Tr4G8U81+5gtMdUeMQ4ipdQffbKLX0/7dBQ==", + "dev": true, "dependencies": { "@babel/helper-module-transforms": "^7.22.5", "@babel/helper-plugin-utils": "^7.22.5" @@ -1594,6 +1713,7 @@ "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.5.tgz", "integrity": "sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==", + "dev": true, "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.22.5", "@babel/helper-plugin-utils": "^7.22.5" @@ -1609,6 +1729,7 @@ "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.22.5.tgz", "integrity": "sha512-AsF7K0Fx/cNKVyk3a+DW0JLo+Ua598/NxMRvxDnkpCIGFh43+h/v2xyhRUYf6oD8gE4QtL83C7zZVghMjHd+iw==", + "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, @@ -1623,6 +1744,7 @@ "version": "7.22.11", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.22.11.tgz", "integrity": "sha512-YZWOw4HxXrotb5xsjMJUDlLgcDXSfO9eCmdl1bgW4+/lAGdkjaEvOnQ4p5WKKdUgSzO39dgPl0pTnfxm0OAXcg==", + "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" @@ -1638,6 +1760,7 @@ "version": "7.22.11", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.22.11.tgz", "integrity": "sha512-3dzU4QGPsILdJbASKhF/V2TVP+gJya1PsueQCxIPCEcerqF21oEcrob4mzjsp2Py/1nLfF5m+xYNMDpmA8vffg==", + "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", "@babel/plugin-syntax-numeric-separator": "^7.10.4" @@ -1653,6 +1776,7 @@ "version": "7.22.15", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.22.15.tgz", "integrity": "sha512-fEB+I1+gAmfAyxZcX1+ZUwLeAuuf8VIg67CTznZE0MqVFumWkh8xWtn58I4dxdVf080wn7gzWoF8vndOViJe9Q==", + "dev": true, "dependencies": { "@babel/compat-data": "^7.22.9", "@babel/helper-compilation-targets": "^7.22.15", @@ -1671,6 +1795,7 @@ "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.22.5.tgz", "integrity": "sha512-klXqyaT9trSjIUrcsYIfETAzmOEZL3cBYqOYLJxBHfMFFggmXOv+NYSX/Jbs9mzMVESw/WycLFPRx8ba/b2Ipw==", + "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", "@babel/helper-replace-supers": "^7.22.5" @@ -1686,6 +1811,7 @@ "version": "7.22.11", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.22.11.tgz", "integrity": "sha512-rli0WxesXUeCJnMYhzAglEjLWVDF6ahb45HuprcmQuLidBJFWjNnOzssk2kuc6e33FlLaiZhG/kUIzUMWdBKaQ==", + "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" @@ -1701,6 +1827,7 @@ "version": "7.23.0", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.23.0.tgz", "integrity": "sha512-sBBGXbLJjxTzLBF5rFWaikMnOGOk/BmK6vVByIdEggZ7Vn6CvWXZyRkkLFK6WE0IF8jSliyOkUN6SScFgzCM0g==", + "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", @@ -1717,6 +1844,7 @@ "version": "7.22.15", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.22.15.tgz", "integrity": "sha512-hjk7qKIqhyzhhUvRT683TYQOFa/4cQKwQy7ALvTpODswN40MljzNDa0YldevS6tGbxwaEKVn502JmY0dP7qEtQ==", + "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, @@ -1731,6 +1859,7 @@ "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.22.5.tgz", "integrity": "sha512-PPjh4gyrQnGe97JTalgRGMuU4icsZFnWkzicB/fUtzlKUqvsWBKEpPPfr5a2JiyirZkHxnAqkQMO5Z5B2kK3fA==", + "dev": true, "dependencies": { "@babel/helper-create-class-features-plugin": "^7.22.5", "@babel/helper-plugin-utils": "^7.22.5" @@ -1746,6 +1875,7 @@ "version": "7.22.11", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.22.11.tgz", "integrity": "sha512-sSCbqZDBKHetvjSwpyWzhuHkmW5RummxJBVbYLkGkaiTOWGxml7SXt0iWa03bzxFIx7wOj3g/ILRd0RcJKBeSQ==", + "dev": true, "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", "@babel/helper-create-class-features-plugin": "^7.22.11", @@ -1763,6 +1893,7 @@ "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.22.5.tgz", "integrity": "sha512-TiOArgddK3mK/x1Qwf5hay2pxI6wCZnvQqrFSqbtg1GLl2JcNMitVH/YnqjP+M31pLUeTfzY1HAXFDnUBV30rQ==", + "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, @@ -1777,6 +1908,7 @@ "version": "7.22.10", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.22.10.tgz", "integrity": "sha512-F28b1mDt8KcT5bUyJc/U9nwzw6cV+UmTeRlXYIl2TNqMMJif0Jeey9/RQ3C4NOd2zp0/TRsDns9ttj2L523rsw==", + "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", "regenerator-transform": "^0.15.2" @@ -1792,6 +1924,7 @@ "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.22.5.tgz", "integrity": "sha512-DTtGKFRQUDm8svigJzZHzb/2xatPc6TzNvAIJ5GqOKDsGFYgAskjRulbR/vGsPKq3OPqtexnz327qYpP57RFyA==", + "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, @@ -1806,6 +1939,7 @@ "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.22.5.tgz", "integrity": "sha512-vM4fq9IXHscXVKzDv5itkO1X52SmdFBFcMIBZ2FRn2nqVYqw6dBexUgMvAjHW+KXpPPViD/Yo3GrDEBaRC0QYA==", + "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, @@ -1820,6 +1954,7 @@ "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.22.5.tgz", "integrity": "sha512-5ZzDQIGyvN4w8+dMmpohL6MBo+l2G7tfC/O2Dg7/hjpgeWvUx8FzfeOKxGog9IimPa4YekaQ9PlDqTLOljkcxg==", + "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" @@ -1835,6 +1970,7 @@ "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.22.5.tgz", "integrity": "sha512-zf7LuNpHG0iEeiyCNwX4j3gDg1jgt1k3ZdXBKbZSoA3BbGQGvMiSvfbZRR3Dr3aeJe3ooWFZxOOG3IRStYp2Bw==", + "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, @@ -1849,6 +1985,7 @@ "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.22.5.tgz", "integrity": "sha512-5ciOehRNf+EyUeewo8NkbQiUs4d6ZxiHo6BcBcnFlgiJfu16q0bQUw9Jvo0b0gBKFG1SMhDSjeKXSYuJLeFSMA==", + "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, @@ -1863,6 +2000,7 @@ "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.22.5.tgz", "integrity": "sha512-bYkI5lMzL4kPii4HHEEChkD0rkc+nvnlR6+o/qdqR6zrm0Sv/nodmyLhlq2DO0YKLUNd2VePmPRjJXSBh9OIdA==", + "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, @@ -1877,6 +2015,7 @@ "version": "7.22.10", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.22.10.tgz", "integrity": "sha512-lRfaRKGZCBqDlRU3UIFovdp9c9mEvlylmpod0/OatICsSfuQ9YFthRo1tpTkGsklEefZdqlEFdY4A2dwTb6ohg==", + "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, @@ -1891,6 +2030,7 @@ "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.22.5.tgz", "integrity": "sha512-HCCIb+CbJIAE6sXn5CjFQXMwkCClcOfPCzTlilJ8cUatfzwHlWQkbtV0zD338u9dZskwvuOYTuuaMaA8J5EI5A==", + "dev": true, "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.22.5", "@babel/helper-plugin-utils": "^7.22.5" @@ -1906,6 +2046,7 @@ "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.22.5.tgz", "integrity": "sha512-028laaOKptN5vHJf9/Arr/HiJekMd41hOEZYvNsrsXqJ7YPYuX2bQxh31fkZzGmq3YqHRJzYFFAVYvKfMPKqyg==", + "dev": true, "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.22.5", "@babel/helper-plugin-utils": "^7.22.5" @@ -1921,6 +2062,7 @@ "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.22.5.tgz", "integrity": "sha512-lhMfi4FC15j13eKrh3DnYHjpGj6UKQHtNKTbtc1igvAhRy4+kLhV07OpLcsN0VgDEw/MjAvJO4BdMJsHwMhzCg==", + "dev": true, "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.22.5", "@babel/helper-plugin-utils": "^7.22.5" @@ -1936,6 +2078,7 @@ "version": "7.22.20", "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.22.20.tgz", "integrity": "sha512-11MY04gGC4kSzlPHRfvVkNAZhUxOvm7DCJ37hPDnUENwe06npjIRAfInEMTGSb4LZK5ZgDFkv5hw0lGebHeTyg==", + "dev": true, "dependencies": { "@babel/compat-data": "^7.22.20", "@babel/helper-compilation-targets": "^7.22.15", @@ -2029,6 +2172,7 @@ "version": "7.23.0", "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.0.tgz", "integrity": "sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==", + "dev": true, "dependencies": { "@babel/helper-string-parser": "^7.22.5", "@babel/helper-validator-identifier": "^7.22.20", @@ -2042,6 +2186,7 @@ "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, "bin": { "semver": "bin/semver.js" } @@ -2050,6 +2195,7 @@ "version": "0.1.6-no-external-plugins", "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz", "integrity": "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==", + "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.0.0", "@babel/types": "^7.4.4", @@ -2062,12 +2208,14 @@ "node_modules/@babel/regjsgen": { "version": "0.8.0", "resolved": "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz", - "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==" + "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==", + "dev": true }, "node_modules/@babel/runtime": { "version": "7.23.1", "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.1.tgz", "integrity": "sha512-hC2v6p8ZSI/W0HUzh3V8C5g+NwSKzKPtJwSpTjwl0o297GP9+ZLQSkdvHz46CM3LqyoXxq+5G9komY+eSqSO0g==", + "dev": true, "dependencies": { "regenerator-runtime": "^0.14.0" }, @@ -2079,6 +2227,7 @@ "version": "7.22.15", "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", + "dev": true, "dependencies": { "@babel/code-frame": "^7.22.13", "@babel/parser": "^7.22.15", @@ -2092,6 +2241,7 @@ "version": "7.22.19", "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.19.tgz", "integrity": "sha512-P7LAw/LbojPzkgp5oznjE6tQEIWbp4PkkfrZDINTro9zgBRtI324/EYsiSI7lhPbpIQ+DCeR2NNmMWANGGfZsg==", + "dev": true, "dependencies": { "@babel/helper-string-parser": "^7.22.5", "@babel/helper-validator-identifier": "^7.22.19", @@ -2135,6 +2285,7 @@ "version": "7.17.0", "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.0.tgz", "integrity": "sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==", + "dev": true, "dependencies": { "@babel/helper-validator-identifier": "^7.16.7", "to-fast-properties": "^2.0.0" @@ -2606,6 +2757,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", + "dev": true, "dependencies": { "camelcase": "^5.3.1", "find-up": "^4.1.0", @@ -2621,6 +2773,7 @@ "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, "dependencies": { "sprintf-js": "~1.0.2" } @@ -2629,6 +2782,7 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, "dependencies": { "locate-path": "^5.0.0", "path-exists": "^4.0.0" @@ -2641,6 +2795,7 @@ "version": "3.14.1", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, "dependencies": { "argparse": "^1.0.7", "esprima": "^4.0.0" @@ -2653,6 +2808,7 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, "dependencies": { "p-locate": "^4.1.0" }, @@ -2664,6 +2820,7 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, "dependencies": { "p-try": "^2.0.0" }, @@ -2678,6 +2835,7 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, "dependencies": { "p-limit": "^2.2.0" }, @@ -2689,6 +2847,7 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, "engines": { "node": ">=8" } @@ -2697,6 +2856,7 @@ "version": "0.1.3", "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "dev": true, "engines": { "node": ">=8" } @@ -2921,6 +3081,7 @@ "version": "29.6.3", "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", + "dev": true, "dependencies": { "@sinclair/typebox": "^0.27.8" }, @@ -2986,6 +3147,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz", "integrity": "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==", + "dev": true, "dependencies": { "@babel/core": "^7.11.6", "@jest/types": "^29.6.3", @@ -3011,6 +3173,7 @@ "version": "0.3.19", "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz", "integrity": "sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==", + "dev": true, "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" @@ -3020,6 +3183,7 @@ "version": "29.6.3", "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", + "dev": true, "dependencies": { "@jest/schemas": "^29.6.3", "@types/istanbul-lib-coverage": "^2.0.0", @@ -3036,6 +3200,7 @@ "version": "0.3.3", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", + "dev": true, "dependencies": { "@jridgewell/set-array": "^1.0.1", "@jridgewell/sourcemap-codec": "^1.4.10", @@ -3049,6 +3214,7 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", + "dev": true, "engines": { "node": ">=6.0.0" } @@ -3057,6 +3223,7 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "dev": true, "engines": { "node": ">=6.0.0" } @@ -3074,12 +3241,14 @@ "node_modules/@jridgewell/sourcemap-codec": { "version": "1.4.15", "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", + "dev": true }, "node_modules/@jridgewell/trace-mapping": { "version": "0.3.9", "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "dev": true, "dependencies": { "@jridgewell/resolve-uri": "^3.0.3", "@jridgewell/sourcemap-codec": "^1.4.10" @@ -3315,7 +3484,8 @@ "node_modules/@sinclair/typebox": { "version": "0.27.8", "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", - "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==" + "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", + "dev": true }, "node_modules/@sinonjs/commons": { "version": "3.0.0", @@ -3386,6 +3556,7 @@ "version": "7.20.2", "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.2.tgz", "integrity": "sha512-pNpr1T1xLUc2l3xJKuPtsEky3ybxN3m4fJkknfIpTCTfIZCDW57oAg+EfCgIIp2rvCe0Wn++/FfodDS4YXxBwA==", + "dev": true, "dependencies": { "@babel/parser": "^7.20.7", "@babel/types": "^7.20.7", @@ -3398,6 +3569,7 @@ "version": "7.23.0", "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.0.tgz", "integrity": "sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==", + "dev": true, "dependencies": { "@babel/helper-string-parser": "^7.22.5", "@babel/helper-validator-identifier": "^7.22.20", @@ -3411,6 +3583,7 @@ "version": "7.6.5", "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.5.tgz", "integrity": "sha512-h9yIuWbJKdOPLJTbmSpPzkF67e659PbQDba7ifWm5BJ8xTv+sDmS7rFmywkWOvXedGTivCdeGSIIX8WLcRTz8w==", + "dev": true, "dependencies": { "@babel/types": "^7.0.0" } @@ -3419,6 +3592,7 @@ "version": "7.4.2", "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.2.tgz", "integrity": "sha512-/AVzPICMhMOMYoSx9MoKpGDKdBRsIXMNByh1PXSZoa+v6ZoLa8xxtsT/uLQ/NJm0XVAWl/BvId4MlDeXJaeIZQ==", + "dev": true, "dependencies": { "@babel/parser": "^7.1.0", "@babel/types": "^7.0.0" @@ -3428,6 +3602,7 @@ "version": "7.20.2", "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.2.tgz", "integrity": "sha512-ojlGK1Hsfce93J0+kn3H5R73elidKUaZonirN33GSmgTUMpzI/MIFfSpF3haANe3G1bEBS9/9/QEqwTzwqFsKw==", + "dev": true, "dependencies": { "@babel/types": "^7.20.7" } @@ -3436,6 +3611,7 @@ "version": "7.23.0", "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.0.tgz", "integrity": "sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==", + "dev": true, "dependencies": { "@babel/helper-string-parser": "^7.22.5", "@babel/helper-validator-identifier": "^7.22.20", @@ -3480,6 +3656,7 @@ "version": "4.1.7", "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.7.tgz", "integrity": "sha512-MhzcwU8aUygZroVwL2jeYk6JisJrPl/oov/gsgGCue9mkgl9wjGbzReYQClxiUgFDnib9FuHqTndccKeZKxTRw==", + "dev": true, "dependencies": { "@types/node": "*" } @@ -3487,12 +3664,14 @@ "node_modules/@types/istanbul-lib-coverage": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", - "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==" + "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==", + "dev": true }, "node_modules/@types/istanbul-lib-report": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", "integrity": "sha512-gPQuzaPR5h/djlAv2apEG1HVOyj1IUs7GpfMZixU0/0KXT3pm64ylHuMUI1/Akh+sq/iikxg6Z2j+fcMDXaaTQ==", + "dev": true, "dependencies": { "@types/istanbul-lib-coverage": "*" } @@ -3501,6 +3680,7 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.2.tgz", "integrity": "sha512-kv43F9eb3Lhj+lr/Hn6OcLCs/sSM8bt+fIaP11rCYngfV6NVjzWXJ17owQtDQTL9tQ8WSLUrGsSJ6rJz0F1w1A==", + "dev": true, "dependencies": { "@types/istanbul-lib-report": "*" } @@ -3530,7 +3710,8 @@ "node_modules/@types/node": { "version": "20.5.9", "resolved": "https://registry.npmjs.org/@types/node/-/node-20.5.9.tgz", - "integrity": "sha512-PcGNd//40kHAS3sTlzKB9C9XL4K0sTup8nbG5lC14kzEteTNuAFh9u5nA0o5TWnSG2r/JNPRXFVcHJIIeRlmqQ==" + "integrity": "sha512-PcGNd//40kHAS3sTlzKB9C9XL4K0sTup8nbG5lC14kzEteTNuAFh9u5nA0o5TWnSG2r/JNPRXFVcHJIIeRlmqQ==", + "dev": true }, "node_modules/@types/prompts": { "version": "2.4.4", @@ -3564,6 +3745,7 @@ "version": "17.0.26", "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.26.tgz", "integrity": "sha512-Y3vDy2X6zw/ZCumcwLpdhM5L7jmyGpmBCTYMHDLqT2IKVMYRRLdv6ZakA+wxhra6Z/3bwhNbNl9bDGXaFU+6rw==", + "dev": true, "dependencies": { "@types/yargs-parser": "*" } @@ -3571,7 +3753,8 @@ "node_modules/@types/yargs-parser": { "version": "21.0.1", "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.1.tgz", - "integrity": "sha512-axdPBuLuEJt0c4yI5OZssC19K2Mq1uKdrfZBzuxLvaztgqUtFYZUNw7lETExPYJR9jdEoIg4mb7RQKRQzOkeGQ==" + "integrity": "sha512-axdPBuLuEJt0c4yI5OZssC19K2Mq1uKdrfZBzuxLvaztgqUtFYZUNw7lETExPYJR9jdEoIg4mb7RQKRQzOkeGQ==", + "dev": true }, "node_modules/@typescript-eslint/eslint-plugin": { "version": "6.6.0", @@ -3848,6 +4031,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, "dependencies": { "color-convert": "^2.0.1" }, @@ -3862,6 +4046,7 @@ "version": "3.1.3", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, "dependencies": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" @@ -3901,6 +4086,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz", "integrity": "sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==", + "dev": true, "dependencies": { "@jest/transform": "^29.7.0", "@types/babel__core": "^7.1.14", @@ -3921,6 +4107,7 @@ "version": "6.1.1", "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", + "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.0.0", "@istanbuljs/load-nyc-config": "^1.0.0", @@ -3936,6 +4123,7 @@ "version": "5.2.1", "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", + "dev": true, "dependencies": { "@babel/core": "^7.12.3", "@babel/parser": "^7.14.7", @@ -3951,6 +4139,7 @@ "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, "bin": { "semver": "bin/semver.js" } @@ -3959,6 +4148,7 @@ "version": "29.6.3", "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz", "integrity": "sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==", + "dev": true, "dependencies": { "@babel/template": "^7.3.3", "@babel/types": "^7.3.3", @@ -3973,6 +4163,7 @@ "version": "0.4.5", "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.5.tgz", "integrity": "sha512-19hwUH5FKl49JEsvyTcoHakh6BE0wgXLLptIyKZ3PijHc/Ci521wygORCUCCred+E/twuqRyAkE02BAWPmsHOg==", + "dev": true, "dependencies": { "@babel/compat-data": "^7.22.6", "@babel/helper-define-polyfill-provider": "^0.4.2", @@ -3986,6 +4177,7 @@ "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, "bin": { "semver": "bin/semver.js" } @@ -3994,6 +4186,7 @@ "version": "0.8.4", "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.4.tgz", "integrity": "sha512-9l//BZZsPR+5XjyJMPtZSK4jv0BsTO1zDac2GC6ygx9WLGlcsnRd1Co0B2zT5fF5Ic6BZy+9m3HNZ3QcOeDKfg==", + "dev": true, "dependencies": { "@babel/helper-define-polyfill-provider": "^0.4.2", "core-js-compat": "^3.32.2" @@ -4006,6 +4199,7 @@ "version": "0.5.2", "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.2.tgz", "integrity": "sha512-tAlOptU0Xj34V1Y2PNTL4Y0FOJMDB6bZmoW39FeCQIhigGLkqu3Fj6uiXpxIf6Ij274ENdYx64y6Au+ZKlb1IA==", + "dev": true, "dependencies": { "@babel/helper-define-polyfill-provider": "^0.4.2" }, @@ -4017,6 +4211,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", + "dev": true, "dependencies": { "@babel/plugin-syntax-async-generators": "^7.8.4", "@babel/plugin-syntax-bigint": "^7.8.3", @@ -4039,6 +4234,7 @@ "version": "29.6.3", "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz", "integrity": "sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==", + "dev": true, "dependencies": { "babel-plugin-jest-hoist": "^29.6.3", "babel-preset-current-node-syntax": "^1.0.0" @@ -4053,7 +4249,8 @@ "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true }, "node_modules/base64-js": { "version": "1.5.1", @@ -4088,6 +4285,7 @@ "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -4097,6 +4295,7 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, "dependencies": { "fill-range": "^7.0.1" }, @@ -4108,6 +4307,7 @@ "version": "4.22.1", "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.1.tgz", "integrity": "sha512-FEVc202+2iuClEhZhrWy6ZiAcRLvNMyYcxZ8raemul1DYVOVdFsbqckWLdsixQZCpJlwe77Z3UTalE7jsjnKfQ==", + "dev": true, "funding": [ { "type": "opencollective", @@ -4151,6 +4351,7 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", + "dev": true, "dependencies": { "node-int64": "^0.4.0" } @@ -4209,6 +4410,7 @@ "version": "5.3.1", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, "engines": { "node": ">=6" } @@ -4217,6 +4419,7 @@ "version": "1.0.30001546", "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001546.tgz", "integrity": "sha512-zvtSJwuQFpewSyRrI3AsftF6rM0X80mZkChIt1spBGEvRglCrjTniXvinc8JKRoqTwXAgvqTImaN9igfSMtUBw==", + "dev": true, "funding": [ { "type": "opencollective", @@ -4236,6 +4439,7 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -4260,6 +4464,7 @@ "version": "3.9.0", "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", + "dev": true, "funding": [ { "type": "github", @@ -4447,6 +4652,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, "dependencies": { "color-name": "~1.1.4" }, @@ -4457,7 +4663,8 @@ "node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true }, "node_modules/colorette": { "version": "2.0.20", @@ -4482,17 +4689,20 @@ "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true }, "node_modules/convert-source-map": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==" + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true }, "node_modules/core-js-compat": { "version": "3.33.0", "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.33.0.tgz", "integrity": "sha512-0w4LcLXsVEuNkIqwjjf9rjCoPhK8uqA4tMRh4Ge26vfLtUutshn+aRJU21I9LCJlh2QQHfisNToLjw1XEJLTWw==", + "dev": true, "dependencies": { "browserslist": "^4.22.1" }, @@ -4545,6 +4755,7 @@ "version": "4.3.4", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, "dependencies": { "ms": "2.1.2" }, @@ -4645,7 +4856,8 @@ "node_modules/electron-to-chromium": { "version": "1.4.542", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.542.tgz", - "integrity": "sha512-6+cpa00G09N3sfh2joln4VUXHquWrOFx3FLZqiVQvl45+zS9DskDBTPvob+BhvFRmTBkyDSk0vvLMMRo/qc6mQ==" + "integrity": "sha512-6+cpa00G09N3sfh2joln4VUXHquWrOFx3FLZqiVQvl45+zS9DskDBTPvob+BhvFRmTBkyDSk0vvLMMRo/qc6mQ==", + "dev": true }, "node_modules/emittery": { "version": "0.13.1", @@ -4726,6 +4938,7 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true, "engines": { "node": ">=6" } @@ -4878,6 +5091,7 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true, "bin": { "esparse": "bin/esparse.js", "esvalidate": "bin/esvalidate.js" @@ -4929,6 +5143,7 @@ "version": "2.0.3", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, "engines": { "node": ">=0.10.0" } @@ -5023,7 +5238,8 @@ "node_modules/fast-json-stable-stringify": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true }, "node_modules/fast-levenshtein": { "version": "2.0.6", @@ -5044,6 +5260,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", + "dev": true, "dependencies": { "bser": "2.1.1" } @@ -5075,6 +5292,7 @@ "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, "dependencies": { "to-regex-range": "^5.0.1" }, @@ -5135,12 +5353,14 @@ "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true }, "node_modules/fsevents": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, "hasInstallScript": true, "optional": true, "os": [ @@ -5153,12 +5373,14 @@ "node_modules/function-bind": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true }, "node_modules/gensync": { "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, "engines": { "node": ">=6.9.0" } @@ -5176,6 +5398,7 @@ "version": "0.1.0", "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", + "dev": true, "engines": { "node": ">=8.0.0" } @@ -5207,6 +5430,7 @@ "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -5272,7 +5496,8 @@ "node_modules/graceful-fs": { "version": "4.2.11", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true }, "node_modules/graphemer": { "version": "1.4.0", @@ -5284,6 +5509,7 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, "dependencies": { "function-bind": "^1.1.1" }, @@ -5295,6 +5521,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, "engines": { "node": ">=8" } @@ -5395,6 +5622,7 @@ "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, "engines": { "node": ">=0.8.19" } @@ -5403,6 +5631,7 @@ "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dev": true, "dependencies": { "once": "^1.3.0", "wrappy": "1" @@ -5438,6 +5667,7 @@ "version": "2.13.0", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz", "integrity": "sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==", + "dev": true, "dependencies": { "has": "^1.0.3" }, @@ -5508,6 +5738,7 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, "engines": { "node": ">=0.12.0" } @@ -5570,6 +5801,7 @@ "version": "3.2.0", "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", + "dev": true, "engines": { "node": ">=8" } @@ -5985,6 +6217,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz", "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==", + "dev": true, "dependencies": { "@jest/types": "^29.6.3", "@types/graceful-fs": "^4.1.3", @@ -6088,6 +6321,7 @@ "version": "29.6.3", "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz", "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==", + "dev": true, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } @@ -6225,6 +6459,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", + "dev": true, "dependencies": { "@jest/types": "^29.6.3", "@types/node": "*", @@ -6316,6 +6551,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", + "dev": true, "dependencies": { "@types/node": "*", "jest-util": "^29.7.0", @@ -6330,6 +6566,7 @@ "version": "8.1.1", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, "dependencies": { "has-flag": "^4.0.0" }, @@ -6352,7 +6589,8 @@ "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true }, "node_modules/js-yaml": { "version": "4.1.0", @@ -6370,6 +6608,7 @@ "version": "2.5.2", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true, "bin": { "jsesc": "bin/jsesc" }, @@ -6414,6 +6653,7 @@ "version": "2.2.3", "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, "bin": { "json5": "lib/cli.js" }, @@ -6727,7 +6967,8 @@ "node_modules/lodash.debounce": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==" + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", + "dev": true }, "node_modules/lodash.memoize": { "version": "4.1.2", @@ -6862,6 +7103,7 @@ "version": "1.0.12", "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", + "dev": true, "dependencies": { "tmpl": "1.0.5" } @@ -6894,6 +7136,7 @@ "version": "4.0.5", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, "dependencies": { "braces": "^3.0.2", "picomatch": "^2.3.1" @@ -6917,6 +7160,7 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, "dependencies": { "brace-expansion": "^1.1.7" }, @@ -6927,7 +7171,8 @@ "node_modules/ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true }, "node_modules/natural-compare": { "version": "1.4.0", @@ -6938,17 +7183,20 @@ "node_modules/node-int64": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", - "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==" + "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", + "dev": true }, "node_modules/node-releases": { "version": "2.0.13", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz", - "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==" + "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==", + "dev": true }, "node_modules/normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, "engines": { "node": ">=0.10.0" } @@ -6982,6 +7230,7 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, "dependencies": { "wrappy": "1" } @@ -7109,6 +7358,7 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, "engines": { "node": ">=6" } @@ -7147,6 +7397,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, "engines": { "node": ">=8" } @@ -7155,6 +7406,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, "engines": { "node": ">=0.10.0" } @@ -7170,7 +7422,8 @@ "node_modules/path-parse": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true }, "node_modules/path-type": { "version": "4.0.0", @@ -7190,6 +7443,7 @@ "version": "2.3.1", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, "engines": { "node": ">=8.6" }, @@ -7226,6 +7480,7 @@ "version": "4.0.6", "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", + "dev": true, "engines": { "node": ">= 6" } @@ -7432,12 +7687,14 @@ "node_modules/regenerate": { "version": "1.4.2", "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", - "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==" + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", + "dev": true }, "node_modules/regenerate-unicode-properties": { "version": "10.1.1", "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.1.tgz", "integrity": "sha512-X007RyZLsCJVVrjgEFVpLUTZwyOZk3oiL75ZcuYjlIWd6rNJtOjkBwQc5AsRrpbKVkxN6sklw/k/9m2jJYOf8Q==", + "dev": true, "dependencies": { "regenerate": "^1.4.2" }, @@ -7448,12 +7705,14 @@ "node_modules/regenerator-runtime": { "version": "0.14.0", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz", - "integrity": "sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==" + "integrity": "sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==", + "dev": true }, "node_modules/regenerator-transform": { "version": "0.15.2", "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.2.tgz", "integrity": "sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==", + "dev": true, "dependencies": { "@babel/runtime": "^7.8.4" } @@ -7462,6 +7721,7 @@ "version": "5.3.2", "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz", "integrity": "sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==", + "dev": true, "dependencies": { "@babel/regjsgen": "^0.8.0", "regenerate": "^1.4.2", @@ -7478,6 +7738,7 @@ "version": "0.9.1", "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", + "dev": true, "dependencies": { "jsesc": "~0.5.0" }, @@ -7489,6 +7750,7 @@ "version": "0.5.0", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", + "dev": true, "bin": { "jsesc": "bin/jsesc" } @@ -7506,6 +7768,7 @@ "version": "1.22.6", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.6.tgz", "integrity": "sha512-njhxM7mV12JfufShqGy3Rz8j11RPdLy4xi15UurGJeoHLfJpVXKdh3ueuOqbYUcDZnffr6X739JBo5LzyahEsw==", + "dev": true, "dependencies": { "is-core-module": "^2.13.0", "path-parse": "^1.0.7", @@ -7833,6 +8096,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, "engines": { "node": ">=8" } @@ -7902,7 +8166,8 @@ "node_modules/sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "dev": true }, "node_modules/stack-utils": { "version": "2.0.6", @@ -8058,6 +8323,7 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, "dependencies": { "has-flag": "^4.0.0" }, @@ -8069,6 +8335,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, "engines": { "node": ">= 0.4" }, @@ -8123,6 +8390,7 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "dev": true, "dependencies": { "@istanbuljs/schema": "^0.1.2", "glob": "^7.1.4", @@ -8141,12 +8409,14 @@ "node_modules/tmpl": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", - "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==" + "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", + "dev": true }, "node_modules/to-fast-properties": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "dev": true, "engines": { "node": ">=4" } @@ -8155,6 +8425,7 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, "dependencies": { "is-number": "^7.0.0" }, @@ -8316,6 +8587,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", + "dev": true, "engines": { "node": ">=4" } @@ -8324,6 +8596,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", + "dev": true, "dependencies": { "unicode-canonical-property-names-ecmascript": "^2.0.0", "unicode-property-aliases-ecmascript": "^2.0.0" @@ -8336,6 +8609,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz", "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==", + "dev": true, "engines": { "node": ">=4" } @@ -8344,6 +8618,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", + "dev": true, "engines": { "node": ">=4" } @@ -8361,6 +8636,7 @@ "version": "1.0.13", "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", + "dev": true, "funding": [ { "type": "opencollective", @@ -8434,6 +8710,7 @@ "version": "1.0.8", "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", + "dev": true, "dependencies": { "makeerror": "1.0.12" } @@ -8534,12 +8811,14 @@ "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true }, "node_modules/write-file-atomic": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", + "dev": true, "dependencies": { "imurmurhash": "^0.1.4", "signal-exit": "^3.0.7" @@ -8551,7 +8830,8 @@ "node_modules/write-file-atomic/node_modules/signal-exit": { "version": "3.0.7", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true }, "node_modules/y18n": { "version": "5.0.8", diff --git a/package.json b/package.json index 90dc884..072a9bb 100644 --- a/package.json +++ b/package.json @@ -33,6 +33,7 @@ "author": "", "license": "ISC", "devDependencies": { + "@babel/preset-env": "^7.22.20", "@rollup/plugin-commonjs": "^25.0.5", "@rollup/plugin-json": "^6.0.1", "@rollup/plugin-node-resolve": "^15.2.2", @@ -45,6 +46,7 @@ "@types/prompts": "^2.4.4", "@typescript-eslint/eslint-plugin": "^6.5.0", "@typescript-eslint/parser": "^6.5.0", + "babel-jest": "^29.7.0", "esbuild": "^0.19.3", "eslint": "^8.48.0", "eslint-config-prettier": "^9.0.0", @@ -67,8 +69,6 @@ "typescript": "^5.2.2" }, "dependencies": { - "@babel/preset-env": "^7.22.20", - "babel-jest": "^29.7.0", "commander": "^11.0.0", "execa": "^8.0.1", "figlet": "^1.6.0", diff --git a/src/Configurator.ts b/src/Configurator.ts index fe5d2c8..aab1979 100644 --- a/src/Configurator.ts +++ b/src/Configurator.ts @@ -33,7 +33,7 @@ export interface OptionsType { husky: boolean; jest: boolean; lintStaged: boolean; - nextImageOptimisation: boolean; + imageOptimisation: boolean; optionalDependencies: ChoiceValuesType[]; packageManager: PackageManagerKindEnum; prettier: boolean; @@ -59,7 +59,7 @@ class Configurator { husky: false, jest: false, lintStaged: false, - nextImageOptimisation: false, + imageOptimisation: false, optionalDependencies: [], packageManager: PackageManagerKindEnum.NPM, prettier: false, @@ -88,7 +88,9 @@ class Configurator { }); } - public run = async () => { + public run = async (options: prompts.Answers) => { + this.setOptions(options); + console.log( bold( `Using ` + @@ -126,15 +128,18 @@ class Configurator { await $({ stdio: 'inherit', - })`npx create-next-app@latest ${this.cwd} --use-${pm}`.catch((error) => { - oops(); - throw new Error(`\n${error}`); - }); - - this.options = { - ...this.options, - ...this.getNextConfig(), - }; + })`npx create-next-app@latest ${this.cwd} --use-${pm}` + .catch((error) => { + oops(); + throw new Error(`\n${error}`); + }) + .finally( + () => + (this.options = { + ...this.options, + ...this.getNextConfig(), + }) + ); return this.options; }; @@ -162,7 +167,7 @@ class Configurator { husky, jest, lintStaged, - nextImageOptimisation, + imageOptimisation, optionalDependencies, prettier, reactTestingLibrary, @@ -210,9 +215,7 @@ class Configurator { : {}), }; - this.config.packageDependencies = [ - ...(nextImageOptimisation ? ['sharp'] : []), - ]; + this.config.packageDependencies = [...(imageOptimisation ? ['sharp'] : [])]; this.config.packageDevDependencies = [ ...(cypress ? ['cypress'] : []), @@ -439,9 +442,22 @@ class Configurator { if (!eslint) return; + const overides = [ + ...(reactTestingLibrary + ? [ + { + files: [ + '**/__tests__/**/*.[jt]s?(x)', + '**/?(*.)+(spec|test).[jt]s?(x)', + ], + extends: ['plugin:testing-library/react'], + }, + ] + : []), + ]; // TODO: create a make func for the new eslint config file type const eslintrc = { - cwd: true, + root: true, plugins: [ ...(eslint && typescript ? ['@typescript-eslint'] : []), ...(reactTestingLibrary ? ['testing-library'] : []), @@ -458,19 +474,7 @@ class Configurator { '@typescript-eslint/no-unused-vars': 'error', '@typescript-eslint/no-explicit-any': 'error', }, - overrides: [ - ...(reactTestingLibrary - ? [ - { - files: [ - '**/__tests__/**/*.[jt]s?(x)', - '**/?(*.)+(spec|test).[jt]s?(x)', - ], - extends: ['plugin:testing-library/react'], - }, - ] - : []), - ], + ...(overides.length > 0 ? overides : []), }; await fs.promises diff --git a/src/index.ts b/src/index.ts index f8a0933..006a290 100644 --- a/src/index.ts +++ b/src/index.ts @@ -5,10 +5,20 @@ import fs from 'fs'; import path from 'path'; import prompts from 'prompts'; -import Configurator from './Configurator.js'; +import Configurator, { OptionsType } from './Configurator.js'; +import { PackageManagerKindEnum } from './PackageManager.js'; import { packageManagerPrompt, configurationPrompts } from './prompts.js'; import { goodbye } from './utils.js'; +export interface ProgramOptionsType extends OptionsType { + dev?: boolean; + clean?: boolean; + useNpm?: PackageManagerKindEnum.NPM; + useYarn?: PackageManagerKindEnum.YARN; + usePnpm?: PackageManagerKindEnum.PNPM; + useBun?: PackageManagerKindEnum.BUN; +} + console.log('\n', figlet.textSync('Nextra'), '\n\n'); program @@ -22,10 +32,9 @@ program .option('--dotEnvFiles', 'create dot env files') .option('--eslint', 'use eslint') .option('--husky', 'use husky') - .option('--img-opt', 'use next Image Optimisation (install sharp)') + .option('--image-optimisation', 'use next Image Optimisation (install sharp)') .option('--jest', 'use jest') .option('--lint-staged', 'use lint-staged') - .option('--optional-dependencies ', 'install optional dependencies') .option('--prettier', 'use prettier') .option('--react-testing-library', 'use React testing-library') .option('--storybook', 'use storybook') @@ -37,61 +46,61 @@ program .option('--clean', 'clean the tmp dev directory') .option('-ts, --typescript', 'use typescript') .option('--debug', 'Debug') - .action( - async ( - projectName, - // TODO: add ability to configure via cli options - options - ) => { - let projectDirectoryPath = path.resolve(projectName); + .action(async (projectName, options: ProgramOptionsType) => { + let projectDirectoryPath = path.resolve(projectName); - if (options?.dev) { - // if the dev flag is passed create a temp directory for the project installation - // this is for testing as otherwise we would pollute the root dir - const tempDir = path.resolve('./tmp'); - // clean the tmp directory first - if (options.clean) { - await fs.promises.rmdir(tempDir, { recursive: true }); - } - if (!fs.existsSync(tempDir)) { - await fs.promises.mkdir(tempDir); - } - projectDirectoryPath = path.join(tempDir, projectName); + if (options?.dev) { + // if the dev flag is passed create a temp directory for the project installation + // this is for testing as otherwise we would pollute the root dir + const tempDir = path.resolve('./tmp'); + // clean the tmp directory first + if (options.clean) { + await fs.promises.rmdir(tempDir, { recursive: true }); } + if (!fs.existsSync(tempDir)) { + await fs.promises.mkdir(tempDir); + } + projectDirectoryPath = path.join(tempDir, projectName); + } - const { packageManagerChoice } = await prompts(packageManagerPrompt); - - const configurator = new Configurator({ - projectDirectoryPath, - packageManagerChoice, - }); + const { packageManagerChoice } = options?.useNpm + ? { packageManagerChoice: PackageManagerKindEnum.NPM } + : options?.useYarn + ? { packageManagerChoice: PackageManagerKindEnum.YARN } + : options?.usePnpm + ? { packageManagerChoice: PackageManagerKindEnum.PNPM } + : options?.useBun + ? { packageManagerChoice: PackageManagerKindEnum.BUN } + : await prompts(packageManagerPrompt); - await configurator.createNextApp(); + const configurator = new Configurator({ + projectDirectoryPath, + packageManagerChoice, + }); - const opts = await prompts(configurationPrompts); + await configurator.createNextApp(); - const hasOptions = - Object.values(opts).includes(true) || - opts.optionalDependencies.length > 0 || - opts.dotEnvFiles.length > 0; + // strip out the options that have been passed in as cli options + const filteredConfigurationPrompts = configurationPrompts.filter( + ({ name }) => !Object.keys(options).includes(name as string) + ); - if (!hasOptions) { - // nothing to configure! - goodbye(); - return console.log( - `Looks like you've passed on all the configuration options. Maybe next time!` - ); - } + const opts = await prompts(filteredConfigurationPrompts); - configurator.setOptions(opts); + const hasOptions = + Object.values(opts).includes(true) || + opts.optionalDependencies.length > 0 || + opts.dotEnvFiles.length > 0; - await configurator.run(); + if (!hasOptions) { + // nothing to configure! + goodbye(); + return console.log( + `Looks like you've passed on all the configuration options. Maybe next time!` + ); } - ); - -program.parse(process.argv); -const options = program.opts(); -if (options.debug) console.log(options); + await configurator.run(opts); + }); -export default program; +program.parse(process.argv); diff --git a/src/prompts.ts b/src/prompts.ts index 6f6ebc8..ccb68e1 100644 --- a/src/prompts.ts +++ b/src/prompts.ts @@ -130,10 +130,10 @@ const lintStaged: PromptObject = { inactive: `No`, }; -const nextImageOptimisation: PromptObject = { +const imageOptimisation: PromptObject = { onState: onPromptState, type: 'toggle', - name: 'nextImageOptimisation', + name: 'imageOptimisation', message: `Will you be using ${blue('Next')}'s image optimisation? `, initial: 'No', active: 'Yes', @@ -427,7 +427,7 @@ const optionalDependencies: PromptObject = { }; export const configurationPrompts = [ - nextImageOptimisation, + imageOptimisation, prettier, jest, reactTestingLibrary, From 87b1d81fda75552072f3eaa96e20e41ad4fb8bce Mon Sep 17 00:00:00 2001 From: Dom Geargeoura Date: Sat, 7 Oct 2023 21:59:44 +0100 Subject: [PATCH 084/105] lint stages test changes --- src/helpers/makeLintStaged.test.ts | 60 +++++++++++++++--------------- 1 file changed, 29 insertions(+), 31 deletions(-) diff --git a/src/helpers/makeLintStaged.test.ts b/src/helpers/makeLintStaged.test.ts index fc6bb14..558573e 100644 --- a/src/helpers/makeLintStaged.test.ts +++ b/src/helpers/makeLintStaged.test.ts @@ -4,7 +4,6 @@ import makeLintStaged from './makeLintStaged.js'; describe('makeLintStaged.config', () => { describe('When eslint, jest, prettier and typescript options are true', () => { it('should return a valid lint-staged configuration object', () => { - //test const expectedConfig = { '**/*.js?(x)': [ 'prettier --check .', @@ -159,7 +158,6 @@ describe('makeLintStaged.config', () => { describe('makeLintStaged.preCommit', () => { describe('when lint-staged is enabled', () => { it('should return a valid pre-commit hook script', () => { - // Arrange const options = { eslint: true, jest: true, @@ -168,6 +166,7 @@ describe('makeLintStaged.preCommit', () => { prettier: true, typescript: true, }; + const expectedScript = '#!/usr/bin/env sh\n. "$(dirname -- "$0")/_/husky.sh"\n\n' + 'npx lint-staged || { \n' + @@ -184,9 +183,9 @@ describe('makeLintStaged.preCommit', () => { 'printf "\n\n------------------------------------------\n\n"\n' + 'printf "Now push your code! 🚀"\n' + 'printf "\n\n------------------------------------------\n\n"'; - // Act + const script = makeLintStaged.preCommit(options); - // Assert + expect(script).toEqual(expectedScript); }); }); @@ -282,7 +281,6 @@ describe('makeLintStaged.preCommit', () => { describe('when prettier, eslint, jest, and typescript are enabled', () => { it('should return a valid pre-commit hook script', () => { - // Arrange const options = { eslint: true, jest: true, @@ -291,6 +289,7 @@ describe('makeLintStaged.preCommit', () => { prettier: true, typescript: true, }; + const expectedScript = '#!/usr/bin/env sh\n. "$(dirname -- "$0")/_/husky.sh"\n\n' + 'npm run format:check\n\n' + @@ -308,16 +307,15 @@ describe('makeLintStaged.preCommit', () => { 'printf "\n\n------------------------------------------\n\n"\n' + 'printf "Now push your code! 🚀"\n' + 'printf "\n\n------------------------------------------\n\n"'; - // Act + const script = makeLintStaged.preCommit(options); - // Assert + expect(script).toEqual(expectedScript); }); }); describe('when prettier, eslint, jest, are enabled', () => { it('should return a valid pre-commit hook script', () => { - // Arrange const options = { eslint: true, jest: true, @@ -326,6 +324,7 @@ describe('makeLintStaged.preCommit', () => { prettier: true, typescript: false, }; + const expectedScript = '#!/usr/bin/env sh\n. "$(dirname -- "$0")/_/husky.sh"\n\n' + 'npm run format:check\n\n' + @@ -342,16 +341,15 @@ describe('makeLintStaged.preCommit', () => { 'printf "\n\n------------------------------------------\n\n"\n' + 'printf "Now push your code! 🚀"\n' + 'printf "\n\n------------------------------------------\n\n"'; - // Act + const script = makeLintStaged.preCommit(options); - // Assert + expect(script).toEqual(expectedScript); }); }); describe('when prettier, eslint, typescript, are enabled', () => { it('should return a valid pre-commit hook script', () => { - // Arrange const options = { eslint: true, jest: false, @@ -360,6 +358,7 @@ describe('makeLintStaged.preCommit', () => { prettier: true, typescript: true, }; + const expectedScript = '#!/usr/bin/env sh\n. "$(dirname -- "$0")/_/husky.sh"\n\n' + 'npm run format:check\n\n' + @@ -376,16 +375,15 @@ describe('makeLintStaged.preCommit', () => { 'printf "\n\n------------------------------------------\n\n"\n' + 'printf "Now push your code! 🚀"\n' + 'printf "\n\n------------------------------------------\n\n"'; - // Act + const script = makeLintStaged.preCommit(options); - // Assert + expect(script).toEqual(expectedScript); }); }); describe('when prettier, eslint, are enabled', () => { it('should return a valid pre-commit hook script', () => { - // Arrange const options = { eslint: true, jest: false, @@ -394,6 +392,7 @@ describe('makeLintStaged.preCommit', () => { prettier: true, typescript: false, }; + const expectedScript = '#!/usr/bin/env sh\n. "$(dirname -- "$0")/_/husky.sh"\n\n' + 'npm run format:check\n\n' + @@ -409,16 +408,15 @@ describe('makeLintStaged.preCommit', () => { 'printf "\n\n------------------------------------------\n\n"\n' + 'printf "Now push your code! 🚀"\n' + 'printf "\n\n------------------------------------------\n\n"'; - // Act + const script = makeLintStaged.preCommit(options); - // Assert + expect(script).toEqual(expectedScript); }); }); describe('when only prettier is enabled', () => { it('should return a valid pre-commit hook script', () => { - // Arrange const options = { eslint: false, jest: false, @@ -427,6 +425,7 @@ describe('makeLintStaged.preCommit', () => { prettier: true, typescript: false, }; + const expectedScript = '#!/usr/bin/env sh\n. "$(dirname -- "$0")/_/husky.sh"\n\n' + 'npm run format:check\n\n' + @@ -440,15 +439,14 @@ describe('makeLintStaged.preCommit', () => { 'printf "\n\n------------------------------------------\n\n"\n' + 'printf "Now push your code! 🚀"\n' + 'printf "\n\n------------------------------------------\n\n"'; - // Act + const script = makeLintStaged.preCommit(options); - // Assert + expect(script).toEqual(expectedScript); }); }); describe('when only eslint is enabled', () => { it('should return a valid pre-commit hook script', () => { - // Arrange const options = { eslint: true, jest: false, @@ -457,6 +455,7 @@ describe('makeLintStaged.preCommit', () => { prettier: false, typescript: false, }; + const expectedScript = '#!/usr/bin/env sh\n. "$(dirname -- "$0")/_/husky.sh"\n\n' + 'npm run lint:check\n\n' + @@ -470,16 +469,15 @@ describe('makeLintStaged.preCommit', () => { 'printf "\n\n------------------------------------------\n\n"\n' + 'printf "Now push your code! 🚀"\n' + 'printf "\n\n------------------------------------------\n\n"'; - // Act + const script = makeLintStaged.preCommit(options); - // Assert + expect(script).toEqual(expectedScript); }); }); describe('when only typescript is enabled', () => { it('should return a valid pre-commit hook script', () => { - // Arrange const options = { eslint: false, jest: false, @@ -488,6 +486,7 @@ describe('makeLintStaged.preCommit', () => { prettier: false, typescript: true, }; + const expectedScript = '#!/usr/bin/env sh\n. "$(dirname -- "$0")/_/husky.sh"\n\n' + 'npm run build --no-emit\n\n' + @@ -500,16 +499,15 @@ describe('makeLintStaged.preCommit', () => { 'printf "\n\n------------------------------------------\n\n"\n' + 'printf "Now push your code! 🚀"\n' + 'printf "\n\n------------------------------------------\n\n"'; - // Act + const script = makeLintStaged.preCommit(options); - // Assert + expect(script).toEqual(expectedScript); }); }); describe('when only some checks are enabled', () => { it('should return a valid pre-commit hook script', () => { - // Arrange const options = { eslint: true, jest: false, @@ -518,6 +516,7 @@ describe('makeLintStaged.preCommit', () => { prettier: false, typescript: true, }; + const expectedScript = '#!/usr/bin/env sh\n. "$(dirname -- "$0")/_/husky.sh"\n\n' + 'npm run lint:check\n\n' + @@ -532,16 +531,15 @@ describe('makeLintStaged.preCommit', () => { 'printf "\n\n------------------------------------------\n\n"\n' + 'printf "Now push your code! 🚀"\n' + 'printf "\n\n------------------------------------------\n\n"'; - // Act + const script = makeLintStaged.preCommit(options); - // Assert + expect(script).toEqual(expectedScript); }); }); describe('when all checks are disabled', () => { it('should return a valid pre-commit hook script', () => { - // Arrange const options = { eslint: false, jest: false, @@ -550,6 +548,7 @@ describe('makeLintStaged.preCommit', () => { prettier: false, typescript: false, }; + const expectedScript = '#!/usr/bin/env sh\n. "$(dirname -- "$0")/_/husky.sh"' + `\n\n` + @@ -562,10 +561,9 @@ describe('makeLintStaged.preCommit', () => { 'printf "\n\n------------------------------------------\n\n"\n' + 'printf "Now push your code! 🚀"\n' + 'printf "\n\n------------------------------------------\n\n"'; - // Act + const script = makeLintStaged.preCommit(options); - // Assert expect(script).toEqual(expectedScript); }); }); From f2d68e349950421bdd5016016c666df1a8d43d51 Mon Sep 17 00:00:00 2001 From: Dom Geargeoura Date: Sat, 7 Oct 2023 22:48:14 +0100 Subject: [PATCH 085/105] lint staged config change --- .github/workflows/pr-checks.yaml | 17 +++++++++ src/Configurator.ts | 61 +++++------------------------- src/helpers/makeLintStaged.test.ts | 12 +++--- src/helpers/makeLintStaged.ts | 2 +- src/templates/.prettierrc.json | 8 ++-- 5 files changed, 38 insertions(+), 62 deletions(-) create mode 100644 .github/workflows/pr-checks.yaml diff --git a/.github/workflows/pr-checks.yaml b/.github/workflows/pr-checks.yaml new file mode 100644 index 0000000..1c7f672 --- /dev/null +++ b/.github/workflows/pr-checks.yaml @@ -0,0 +1,17 @@ +name: PR Checks + +on: + pull_request: + branches: [ main ] + +jobs: + build: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - name: Install dependencies + run: npm install + - name: Lint + run: npm run lint:check + - name: Test + run: npm test --ci diff --git a/src/Configurator.ts b/src/Configurator.ts index aab1979..98749a1 100644 --- a/src/Configurator.ts +++ b/src/Configurator.ts @@ -221,7 +221,13 @@ class Configurator { ...(cypress ? ['cypress'] : []), ...(eslint && typescript ? ['@typescript-eslint/eslint-plugin'] : []), ...(lintStaged ? ['lint-staged'] : []), - ...(prettier ? ['prettier', 'eslint-config-prettier'] : []), + ...(prettier + ? [ + 'prettier', + 'eslint-config-prettier', + '@trivago/prettier-plugin-sort-imports', + ] + : []), ...(storybook ? [ '@storybook/addon-essentials', @@ -289,8 +295,6 @@ class Configurator { public installConfigureGitHusky = async () => { const $execa = $({ cwd: this.cwd }); - const pm = this.packageManager.getKind(); - const { eslint, jest, lintStaged, prettier, typescript } = this.options; this.spinner.start('Configuring Git and Husky'); @@ -320,54 +324,7 @@ class Configurator { throw new Error(`${error}`); }); - let huskyPreCommit = - `#!/usr/bin/env sh` + `\n` + `. "$(dirname -- "$0")/_/husky.sh"`; - - if (lintStaged) { - huskyPreCommit += - `\n\n` + - `${pm} run lint-staged ` + - `||` + - `{` + - `printf "\n\n------------------------------------------\n\n"\n` + - `printf "🚫 YOU HAVE ERRORS!"` + - `printf "\n\n------------------------------------------\n\n'";` + - `exit 1;` + - `}` + - `\n\n` + - `printf"\n\n"` + - `# Following is for observability` + - `printf "\n\n"` + - `\n\n` + - `printf "TODOs / FIXMEs - consider reviewing these"` + - `printf "\n------------------------------------------\n\n"` + - `\n` + - `npx leasot 'src/**/*.[jt]s?(x)' --exit-nicely` + - `printf "\n\n------------------------------------------\n\n"` + - `printf '%b ' "${String.raw`\033`}[1m"Now push your code!"${String.raw`\033`}[0m 🚀"` + - `printf "\n\n------------------------------------------\n\n"` + - ``; - } else { - if (prettier) { - huskyPreCommit += - `\n\n` + `${pm} run format:check` + `\n\n` + `${pm} run format:write`; - } - - if (eslint) { - huskyPreCommit += - `\n\n` + `${pm} run lint:check` + `\n\n` + `${pm} run lint:fix`; - } - - if (jest) { - huskyPreCommit += `\n\n` + `${pm} run test --passWithNoTests`; - } - - if (typescript) { - huskyPreCommit += `\n\n` + `${pm} run build --no-emit`; - } - // TODO: leaslot hard coded. Consider making this configurable - huskyPreCommit += `npx leasot 'src/**/*.[jt]s?(x)' --exit-nicely`; - } + const huskyPreCommit = makeLintStaged.preCommit(this.options); await fs.promises .writeFile( @@ -431,7 +388,7 @@ class Configurator { if (lintStaged) { await this.packageManager.addToPackage( 'lint-staged', - makeLintStaged.config(this.options) + makeLintStaged.linstagedrc(this.options) ); } }; diff --git a/src/helpers/makeLintStaged.test.ts b/src/helpers/makeLintStaged.test.ts index 558573e..06b3d78 100644 --- a/src/helpers/makeLintStaged.test.ts +++ b/src/helpers/makeLintStaged.test.ts @@ -1,7 +1,7 @@ import { PackageManagerKindEnum } from '../PackageManager.js'; import makeLintStaged from './makeLintStaged.js'; -describe('makeLintStaged.config', () => { +describe('makeLintStaged.linstagedrc', () => { describe('When eslint, jest, prettier and typescript options are true', () => { it('should return a valid lint-staged configuration object', () => { const expectedConfig = { @@ -27,7 +27,7 @@ describe('makeLintStaged.config', () => { '**/*.{css}': ['prettier --check .', 'prettier --write .'], }; - const config = makeLintStaged.config({ + const config = makeLintStaged.linstagedrc({ eslint: true, jest: true, prettier: true, @@ -55,7 +55,7 @@ describe('makeLintStaged.config', () => { '**/*.{css}': ['prettier --check .', 'prettier --write .'], }; - const config = makeLintStaged.config({ + const config = makeLintStaged.linstagedrc({ eslint: true, jest: true, prettier: true, @@ -88,7 +88,7 @@ describe('makeLintStaged.config', () => { '**/*.{css}': ['prettier --check .', 'prettier --write .'], }; - const config = makeLintStaged.config({ + const config = makeLintStaged.linstagedrc({ eslint: true, jest: false, prettier: true, @@ -110,7 +110,7 @@ describe('makeLintStaged.config', () => { ], }; - const config = makeLintStaged.config({ + const config = makeLintStaged.linstagedrc({ eslint: true, jest: true, prettier: false, @@ -148,7 +148,7 @@ describe('makeLintStaged.config', () => { '**/*.{css}': ['prettier --check .', 'prettier --write .'], }; - const config = makeLintStaged.config(options); + const config = makeLintStaged.linstagedrc(options); expect(config).toEqual(expectedConfig); }); diff --git a/src/helpers/makeLintStaged.ts b/src/helpers/makeLintStaged.ts index 1039782..788b4eb 100644 --- a/src/helpers/makeLintStaged.ts +++ b/src/helpers/makeLintStaged.ts @@ -107,6 +107,6 @@ function makeLintStagedPreCommit({ } export default { - config: makeLintStagedConfig, + linstagedrc: makeLintStagedConfig, preCommit: makeLintStagedPreCommit, }; diff --git a/src/templates/.prettierrc.json b/src/templates/.prettierrc.json index 043b0cd..4d7f520 100644 --- a/src/templates/.prettierrc.json +++ b/src/templates/.prettierrc.json @@ -1,7 +1,9 @@ { - "semi": false, + "plugins": ["@trivago/prettier-plugin-sort-imports"], + "importOrderSeparation": true, + "importOrder": ["^[./]"], "trailingComma": "es5", - "singleQuote": true, "tabWidth": 2, - "useTabs": false + "semi": true, + "singleQuote": true } From 0c20d4e783a99c02edc874c4e35b9388fa0f6549 Mon Sep 17 00:00:00 2001 From: Dom Geargeoura Date: Sat, 7 Oct 2023 22:51:25 +0100 Subject: [PATCH 086/105] lint staged test description change --- src/helpers/makeLintStaged.test.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/helpers/makeLintStaged.test.ts b/src/helpers/makeLintStaged.test.ts index 06b3d78..4f25591 100644 --- a/src/helpers/makeLintStaged.test.ts +++ b/src/helpers/makeLintStaged.test.ts @@ -38,7 +38,7 @@ describe('makeLintStaged.linstagedrc', () => { }); }); - describe('When typescript is false and all other options are false', () => { + describe('When typescript is false and all other options are true', () => { it('should return a valid lint-staged configuration object without typescript', () => { const expectedConfig = { '**/*.js?(x)': [ @@ -65,7 +65,7 @@ describe('makeLintStaged.linstagedrc', () => { expect(config).toEqual(expectedConfig); }); }); - describe('When jest is false and all other options are false', () => { + describe('When jest is false and all other options are true', () => { it('should return a valid lint-staged configuration object without jest', () => { const expectedConfig = { '**/*.js?(x)': [ @@ -98,7 +98,7 @@ describe('makeLintStaged.linstagedrc', () => { expect(config).toEqual(expectedConfig); }); }); - describe('When prettier is false and all other options are false', () => { + describe('When prettier is false and all other options are true', () => { it('should return a valid lint-staged configuration object without Prettier', () => { const expectedConfig = { '**/*.js?(x)': ['eslint .', 'eslint --fix .', 'jest --ci'], @@ -121,7 +121,7 @@ describe('makeLintStaged.linstagedrc', () => { }); }); - describe('When eslint is false and all other options are false', () => { + describe('When eslint is false and all other options are true', () => { it('should return a valid lint-staged configuration object without ESLint', () => { const options = { eslint: false, From 4b0e17aa2bff7b738bf0cc2f8c9f3f9c5feaeb17 Mon Sep 17 00:00:00 2001 From: Dom Geargeoura Date: Sat, 7 Oct 2023 22:56:01 +0100 Subject: [PATCH 087/105] husky prepare --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 072a9bb..b1a7bdc 100644 --- a/package.json +++ b/package.json @@ -22,7 +22,7 @@ "postinstall": "husky install", "postpack": "pinst --enable", "prepack": "pinst --disable", - "prepare": "husky install", + "prepare": "node -e \"try { require('husky').install() } catch (e) {if (e.code !== 'MODULE_NOT_FOUND') throw e}\"", "start:build": "node ./dist/bundle.js", "start:standalone": "node ./.next/standalone/server.js", "storybook": "storybook dev -p 6006", From 67021b408930a350a9a09763fc0663d0e0fb43d9 Mon Sep 17 00:00:00 2001 From: Dom Geargeoura Date: Sat, 7 Oct 2023 23:01:23 +0100 Subject: [PATCH 088/105] pr-checks.yml change --- .github/workflows/pr-checks.yaml | 2 ++ package.json | 3 +-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/.github/workflows/pr-checks.yaml b/.github/workflows/pr-checks.yaml index 1c7f672..8199e98 100644 --- a/.github/workflows/pr-checks.yaml +++ b/.github/workflows/pr-checks.yaml @@ -11,6 +11,8 @@ jobs: - uses: actions/checkout@v3 - name: Install dependencies run: npm install + - name: run npm in ci + run: npm ci --ignore-scripts - name: Lint run: npm run lint:check - name: Test diff --git a/package.json b/package.json index b1a7bdc..052014a 100644 --- a/package.json +++ b/package.json @@ -19,10 +19,9 @@ "format:write": "prettier --write .", "lint:check": "eslint .", "lint:fix": "eslint --fix .", - "postinstall": "husky install", "postpack": "pinst --enable", "prepack": "pinst --disable", - "prepare": "node -e \"try { require('husky').install() } catch (e) {if (e.code !== 'MODULE_NOT_FOUND') throw e}\"", + "prepare": "husky install", "start:build": "node ./dist/bundle.js", "start:standalone": "node ./.next/standalone/server.js", "storybook": "storybook dev -p 6006", From 5f15abdf10b14ed211abc479c7381e40a76fbe7f Mon Sep 17 00:00:00 2001 From: Dom Geargeoura Date: Sat, 7 Oct 2023 23:02:55 +0100 Subject: [PATCH 089/105] pr-checks.yml change --- .github/workflows/pr-checks.yaml | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/.github/workflows/pr-checks.yaml b/.github/workflows/pr-checks.yaml index 8199e98..11644df 100644 --- a/.github/workflows/pr-checks.yaml +++ b/.github/workflows/pr-checks.yaml @@ -10,9 +10,7 @@ jobs: steps: - uses: actions/checkout@v3 - name: Install dependencies - run: npm install - - name: run npm in ci - run: npm ci --ignore-scripts + run: npm ci --ignore-scripts && npm install - name: Lint run: npm run lint:check - name: Test From 45e0ae635a935d958477251348c6b12bf2f28cda Mon Sep 17 00:00:00 2001 From: Dom Geargeoura Date: Sat, 7 Oct 2023 23:04:30 +0100 Subject: [PATCH 090/105] pr-checks.yml change --- .github/workflows/pr-checks.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/pr-checks.yaml b/.github/workflows/pr-checks.yaml index 11644df..dcb7b48 100644 --- a/.github/workflows/pr-checks.yaml +++ b/.github/workflows/pr-checks.yaml @@ -10,7 +10,7 @@ jobs: steps: - uses: actions/checkout@v3 - name: Install dependencies - run: npm ci --ignore-scripts && npm install + run: npm pkg delete scripts.prepare && npm install - name: Lint run: npm run lint:check - name: Test From 2984fd2a8e31f83944f9c0c27f1c47ff67ea181c Mon Sep 17 00:00:00 2001 From: Dom Geargeoura Date: Sat, 7 Oct 2023 23:06:26 +0100 Subject: [PATCH 091/105] pr-checks.yml change --- .github/workflows/pr-checks.yaml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/pr-checks.yaml b/.github/workflows/pr-checks.yaml index dcb7b48..31ad356 100644 --- a/.github/workflows/pr-checks.yaml +++ b/.github/workflows/pr-checks.yaml @@ -15,3 +15,5 @@ jobs: run: npm run lint:check - name: Test run: npm test --ci + - name: Typescript + run: npm run build From e99a1f9aab1979158f03be2217e4687a719790bd Mon Sep 17 00:00:00 2001 From: Dom Geargeoura Date: Sat, 7 Oct 2023 23:08:55 +0100 Subject: [PATCH 092/105] pr-checks.yml change --- .github/workflows/pr-checks.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/pr-checks.yaml b/.github/workflows/pr-checks.yaml index 31ad356..1ab1d7b 100644 --- a/.github/workflows/pr-checks.yaml +++ b/.github/workflows/pr-checks.yaml @@ -1,5 +1,5 @@ name: PR Checks - +run-name: PR Checks on: pull_request: branches: [ main ] From fa8a0cbc1f218544e6ce44d29fb82a99881af6c3 Mon Sep 17 00:00:00 2001 From: Dom Geargeoura Date: Sat, 7 Oct 2023 23:09:55 +0100 Subject: [PATCH 093/105] pr-checks.yml change --- .github/workflows/pr-checks.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/pr-checks.yaml b/.github/workflows/pr-checks.yaml index 1ab1d7b..2ed6440 100644 --- a/.github/workflows/pr-checks.yaml +++ b/.github/workflows/pr-checks.yaml @@ -1,11 +1,11 @@ name: PR Checks -run-name: PR Checks + on: pull_request: branches: [ main ] jobs: - build: + pr_checks: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 From ded99d13298e33d42a136c8a96cc105e84540801 Mon Sep 17 00:00:00 2001 From: Dom Geargeoura Date: Sat, 7 Oct 2023 23:12:35 +0100 Subject: [PATCH 094/105] pr-checks.yml change --- .github/workflows/pr-checks.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/pr-checks.yaml b/.github/workflows/pr-checks.yaml index 2ed6440..e684f3c 100644 --- a/.github/workflows/pr-checks.yaml +++ b/.github/workflows/pr-checks.yaml @@ -16,4 +16,4 @@ jobs: - name: Test run: npm test --ci - name: Typescript - run: npm run build + run: npm run build --noEmit From 91399cd79ad1f75d8459f489c7f20f15928836c8 Mon Sep 17 00:00:00 2001 From: Dom Geargeoura Date: Sun, 8 Oct 2023 20:02:45 +0100 Subject: [PATCH 095/105] tweaks --- src/Configurator.ts | 2 ++ src/index.ts | 4 ++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/Configurator.ts b/src/Configurator.ts index 98749a1..f7f3ab0 100644 --- a/src/Configurator.ts +++ b/src/Configurator.ts @@ -144,6 +144,8 @@ class Configurator { return this.options; }; + public getConfig = () => this.config; + public getNextConfig = () => { const exists = (fileName: string) => fs.existsSync(path.join(this.cwd, fileName)) || false; diff --git a/src/index.ts b/src/index.ts index 006a290..6382daa 100644 --- a/src/index.ts +++ b/src/index.ts @@ -87,12 +87,12 @@ program const opts = await prompts(filteredConfigurationPrompts); - const hasOptions = + const hasConfigurationOptions = Object.values(opts).includes(true) || opts.optionalDependencies.length > 0 || opts.dotEnvFiles.length > 0; - if (!hasOptions) { + if (!hasConfigurationOptions) { // nothing to configure! goodbye(); return console.log( From 4bc4fb60dedc9f653b8d49a67e02353dbb74b4d9 Mon Sep 17 00:00:00 2001 From: Dom Geargeoura Date: Sun, 8 Oct 2023 22:50:34 +0100 Subject: [PATCH 096/105] remove babelrc --- .babelrc | 3 --- 1 file changed, 3 deletions(-) delete mode 100644 .babelrc diff --git a/ .babelrc b/ .babelrc deleted file mode 100644 index f57bd9a..0000000 --- a/ .babelrc +++ /dev/null @@ -1,3 +0,0 @@ -{ - "presets": ["@babel/preset-typescript"] -} \ No newline at end of file From 730b29f649fc3632be102be86d45cba5d7f0e50d Mon Sep 17 00:00:00 2001 From: Dom Geargeoura Date: Mon, 9 Oct 2023 09:20:21 +0100 Subject: [PATCH 097/105] esm modules now working nicely w jest --- .lintstagedrc.js | 2 +- jest.config.js | 20 - jest.config.ts | 24 + package-lock.json | 1653 ++------------------------------------ package.json | 7 +- src/Configurator.test.ts | 134 +++ src/Configurator.ts | 36 +- tsconfig.json | 27 +- 8 files changed, 252 insertions(+), 1651 deletions(-) delete mode 100644 jest.config.js create mode 100644 jest.config.ts create mode 100644 src/Configurator.test.ts diff --git a/.lintstagedrc.js b/.lintstagedrc.js index 261eaa4..b117cc2 100644 --- a/.lintstagedrc.js +++ b/.lintstagedrc.js @@ -4,7 +4,7 @@ export default { `prettier --write ${filenames.join(' ')}`, `eslint ${filenames.join(' ')}`, `eslint --fix ${filenames.join(' ')}`, - `jest --passWithNoTests --findRelatedTests ${filenames.join(' ')}`, + `npm run test --passWithNoTests --findRelatedTests ${filenames.join(' ')}`, `tsc --noEmit`, ], diff --git a/jest.config.js b/jest.config.js deleted file mode 100644 index 39a8dbc..0000000 --- a/jest.config.js +++ /dev/null @@ -1,20 +0,0 @@ -/** @type {import('ts-jest').JestConfigWithTsJest} */ - -export default { - extensionsToTreatAsEsm: ['.ts'], - preset: 'ts-jest', - collectCoverageFrom: ['src/**/*.{ts,js}'], - modulePaths: ['/src/'], - moduleNameMapper: { - '(.+)\\.js': '$1', - }, - modulePathIgnorePatterns: [ - '/dist/', - '/coverage/', - '/.husky/', - ], - transform: { - '^.+\\.(ts|tsx)?$': 'ts-jest', - '^.+\\.(js|jsx)$': 'babel-jest', - }, -}; diff --git a/jest.config.ts b/jest.config.ts new file mode 100644 index 0000000..eb12d8e --- /dev/null +++ b/jest.config.ts @@ -0,0 +1,24 @@ +import type { JestConfigWithTsJest } from 'ts-jest'; + +const jestConfig: JestConfigWithTsJest = { + extensionsToTreatAsEsm: ['.ts'], + modulePaths: ['/src/'], + moduleNameMapper: { + '^(\\.{1,2}/.*)\\.(js|ts)$': '$1', + }, + modulePathIgnorePatterns: [ + '/dist/', + '/tmp/', + '/husky/', + ], + transform: { + '^.+\\.(js|ts|tsx)?$': [ + 'ts-jest', + { + useESM: true, + }, + ], + }, +}; + +export default jestConfig; diff --git a/package-lock.json b/package-lock.json index 7edd6dd..5aa79b5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -7,7 +7,6 @@ "": { "name": "nextra", "version": "1.0.0", - "hasInstallScript": true, "license": "ISC", "dependencies": { "commander": "^11.0.0", @@ -18,7 +17,6 @@ "prompts": "^2.4.2" }, "devDependencies": { - "@babel/preset-env": "^7.22.20", "@rollup/plugin-commonjs": "^25.0.5", "@rollup/plugin-json": "^6.0.1", "@rollup/plugin-node-resolve": "^15.2.2", @@ -35,7 +33,6 @@ "esbuild": "^0.19.3", "eslint": "^8.48.0", "eslint-config-prettier": "^9.0.0", - "eslint-define-config": "^1.23.0", "husky": "^8.0.0", "jest": "^29.7.0", "jest-esm-transformer": "^1.0.0", @@ -291,58 +288,6 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/helper-annotate-as-pure": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz", - "integrity": "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-annotate-as-pure/node_modules/@babel/types": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.0.tgz", - "integrity": "sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==", - "dev": true, - "dependencies": { - "@babel/helper-string-parser": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.20", - "to-fast-properties": "^2.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.15.tgz", - "integrity": "sha512-QkBXwGgaoC2GtGZRoma6kv7Szfv06khvhFav67ZExau2RaXzy8MpHSMO2PNoP2XtmQphJQRHFfg77Bq731Yizw==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.15" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-builder-binary-assignment-operator-visitor/node_modules/@babel/types": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.0.tgz", - "integrity": "sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==", - "dev": true, - "dependencies": { - "@babel/helper-string-parser": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.20", - "to-fast-properties": "^2.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/helper-compilation-targets": { "version": "7.22.15", "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.15.tgz", @@ -383,80 +328,6 @@ "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", "dev": true }, - "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.15.tgz", - "integrity": "sha512-jKkwA59IXcvSaiK2UN45kKwSC9o+KuoXsBDvHvU/7BecYIp8GQ2UwrVvFgJASUT+hBnwJx6MhvMCuMzwZZ7jlg==", - "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", - "@babel/helper-member-expression-to-functions": "^7.22.15", - "@babel/helper-optimise-call-expression": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.9", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-create-class-features-plugin/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/helper-create-regexp-features-plugin": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.15.tgz", - "integrity": "sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w==", - "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "regexpu-core": "^5.3.1", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-create-regexp-features-plugin/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/helper-define-polyfill-provider": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.2.tgz", - "integrity": "sha512-k0qnnOqHn5dK9pZpfD5XXZ9SojAITdCKRn2Lp6rnDGzIbaP0rHyMPk/4wsSxVBVz4RfN0q6VpXWP2pDGIoQ7hw==", - "dev": true, - "dependencies": { - "@babel/helper-compilation-targets": "^7.22.6", - "@babel/helper-plugin-utils": "^7.22.5", - "debug": "^4.1.1", - "lodash.debounce": "^4.0.8", - "resolve": "^1.14.2" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, "node_modules/@babel/helper-environment-visitor": { "version": "7.22.20", "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", @@ -519,32 +390,6 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.23.0.tgz", - "integrity": "sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA==", - "dev": true, - "dependencies": { - "@babel/types": "^7.23.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-member-expression-to-functions/node_modules/@babel/types": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.0.tgz", - "integrity": "sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==", - "dev": true, - "dependencies": { - "@babel/helper-string-parser": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.20", - "to-fast-properties": "^2.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/helper-module-imports": { "version": "7.22.15", "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz", @@ -590,32 +435,6 @@ "@babel/core": "^7.0.0" } }, - "node_modules/@babel/helper-optimise-call-expression": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz", - "integrity": "sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-optimise-call-expression/node_modules/@babel/types": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.0.tgz", - "integrity": "sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==", - "dev": true, - "dependencies": { - "@babel/helper-string-parser": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.20", - "to-fast-properties": "^2.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/helper-plugin-utils": { "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", @@ -625,40 +444,6 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/helper-remap-async-to-generator": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.20.tgz", - "integrity": "sha512-pBGyV4uBqOns+0UvhsTO8qgl8hO89PmiDYv+/COyp1aeMcmfrfruz+/nCMFiYyFF/Knn0yfrC85ZzNFjembFTw==", - "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-wrap-function": "^7.22.20" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-replace-supers": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.22.20.tgz", - "integrity": "sha512-qsW0In3dbwQUbK8kejJ4R7IHVGwHJlV6lpG6UA7a9hSa2YEiAib+N1T2kr6PEeUT+Fl7najmSOS6SmAwCHK6Tw==", - "dev": true, - "dependencies": { - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-member-expression-to-functions": "^7.22.15", - "@babel/helper-optimise-call-expression": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, "node_modules/@babel/helper-simple-access": { "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", @@ -685,32 +470,6 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz", - "integrity": "sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-skip-transparent-expression-wrappers/node_modules/@babel/types": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.0.tgz", - "integrity": "sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==", - "dev": true, - "dependencies": { - "@babel/helper-string-parser": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.20", - "to-fast-properties": "^2.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/helper-split-export-declaration": { "version": "7.22.6", "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", @@ -764,34 +523,6 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/helper-wrap-function": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.22.20.tgz", - "integrity": "sha512-pms/UwkOpnQe/PDAEdV/d7dVCoBbB+R4FvYoHGZz+4VPcg7RtYy2KP7S2lbuWM6FCSgob5wshfGESbC/hzNXZw==", - "dev": true, - "dependencies": { - "@babel/helper-function-name": "^7.22.5", - "@babel/template": "^7.22.15", - "@babel/types": "^7.22.19" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-wrap-function/node_modules/@babel/types": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.0.tgz", - "integrity": "sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==", - "dev": true, - "dependencies": { - "@babel/helper-string-parser": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.20", - "to-fast-properties": "^2.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/helpers": { "version": "7.23.1", "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.23.1.tgz", @@ -972,50 +703,6 @@ "node": ">=6.0.0" } }, - "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.22.15.tgz", - "integrity": "sha512-FB9iYlz7rURmRJyXRKEnalYPPdn87H5no108cyuQQyMwlpJ2SJtpIUBI27kdTin956pz+LPypkPVPUTlxOmrsg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.22.15.tgz", - "integrity": "sha512-Hyph9LseGvAeeXzikV88bczhsrLrIZqDPxO+sSmAunMPaGrBGhfMWzCPYTtiW9t+HzSE2wtV8e5cc5P6r1xMDQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", - "@babel/plugin-transform-optional-chaining": "^7.22.15" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.13.0" - } - }, - "node_modules/@babel/plugin-proposal-private-property-in-object": { - "version": "7.21.0-placeholder-for-preset-env.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", - "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", - "dev": true, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, "node_modules/@babel/plugin-syntax-async-generators": { "version": "7.8.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", @@ -1045,919 +732,44 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-class-static-block": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", - "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-dynamic-import": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", - "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-export-namespace-from": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", - "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.3" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-import-assertions": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.22.5.tgz", - "integrity": "sha512-rdV97N7KqsRzeNGoWUOK6yUsWarLjE5Su/Snk9IYPU9CwkWHs4t+rTGOvffTR8XGkJMTAdLfO0xVnXm8wugIJg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-import-attributes": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.22.5.tgz", - "integrity": "sha512-KwvoWDeNKPETmozyFE0P2rOLqh39EoQHNjqizrI5B8Vt0ZNS7M56s7dAiAqbYfiAYOuIzIh96z3iR2ktgu3tEg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-import-meta": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", - "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-json-strings": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", - "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.22.5.tgz", - "integrity": "sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-logical-assignment-operators": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", - "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", - "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-numeric-separator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", - "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", - "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", - "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-optional-chaining": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", - "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-private-property-in-object": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", - "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-top-level-await": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", - "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.22.5.tgz", - "integrity": "sha512-1mS2o03i7t1c6VzH6fdQ3OA8tcEIxwG18zIPRp+UY1Ihv6W+XZzBCVxExF9upussPXJ0xE9XRHwMoNs1ep/nRQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-unicode-sets-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", - "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", - "dev": true, - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-transform-arrow-functions": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.22.5.tgz", - "integrity": "sha512-26lTNXoVRdAnsaDXPpvCNUq+OVWEVC6bx7Vvz9rC53F2bagUWW4u4ii2+h8Fejfh7RYqPxn+libeFBBck9muEw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-async-generator-functions": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.22.15.tgz", - "integrity": "sha512-jBm1Es25Y+tVoTi5rfd5t1KLmL8ogLKpXszboWOTTtGFGz2RKnQe2yn7HbZ+kb/B8N0FVSGQo874NSlOU1T4+w==", - "dev": true, - "dependencies": { - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-remap-async-to-generator": "^7.22.9", - "@babel/plugin-syntax-async-generators": "^7.8.4" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-async-to-generator": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.22.5.tgz", - "integrity": "sha512-b1A8D8ZzE/VhNDoV1MSJTnpKkCG5bJo+19R4o4oy03zM7ws8yEMK755j61Dc3EyvdysbqH5BOOTquJ7ZX9C6vQ==", - "dev": true, - "dependencies": { - "@babel/helper-module-imports": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-remap-async-to-generator": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-block-scoped-functions": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.22.5.tgz", - "integrity": "sha512-tdXZ2UdknEKQWKJP1KMNmuF5Lx3MymtMN/pvA+p/VEkhK8jVcQ1fzSy8KM9qRYhAf2/lV33hoMPKI/xaI9sADA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.23.0.tgz", - "integrity": "sha512-cOsrbmIOXmf+5YbL99/S49Y3j46k/T16b9ml8bm9lP6N9US5iQ2yBK7gpui1pg0V/WMcXdkfKbTb7HXq9u+v4g==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-class-properties": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.22.5.tgz", - "integrity": "sha512-nDkQ0NfkOhPTq8YCLiWNxp1+f9fCobEjCb0n8WdbNUBc4IB5V7P1QnX9IjpSoquKrXF5SKojHleVNs2vGeHCHQ==", - "dev": true, - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-class-static-block": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.22.11.tgz", - "integrity": "sha512-GMM8gGmqI7guS/llMFk1bJDkKfn3v3C4KHK9Yg1ey5qcHcOlKb0QvcMrgzvxo+T03/4szNh5lghY+fEC98Kq9g==", - "dev": true, - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.22.11", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-class-static-block": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.12.0" - } - }, - "node_modules/@babel/plugin-transform-classes": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.22.15.tgz", - "integrity": "sha512-VbbC3PGjBdE0wAWDdHM9G8Gm977pnYI0XpqMd6LrKISj8/DJXEsWqgRuTYaNE9Bv0JGhTZUzHDlMk18IpOuoqw==", - "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-compilation-targets": "^7.22.15", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", - "@babel/helper-optimise-call-expression": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.9", - "@babel/helper-split-export-declaration": "^7.22.6", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-classes/node_modules/globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/plugin-transform-computed-properties": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.22.5.tgz", - "integrity": "sha512-4GHWBgRf0krxPX+AaPtgBAlTgTeZmqDynokHOX7aqqAB4tHs3U2Y02zH6ETFdLZGcg9UQSD1WCmkVrE9ErHeOg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/template": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.23.0.tgz", - "integrity": "sha512-vaMdgNXFkYrB+8lbgniSYWHsgqK5gjaMNcc84bMIOMRLH0L9AqYq3hwMdvnyqj1OPqea8UtjPEuS/DCenah1wg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-dotall-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.22.5.tgz", - "integrity": "sha512-5/Yk9QxCQCl+sOIB1WelKnVRxTJDSAIxtJLL2/pqL14ZVlbH0fUQUZa/T5/UnQtBNgghR7mfB8ERBKyKPCi7Vw==", - "dev": true, - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-duplicate-keys": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.22.5.tgz", - "integrity": "sha512-dEnYD+9BBgld5VBXHnF/DbYGp3fqGMsyxKbtD1mDyIA7AkTSpKXFhCVuj/oQVOoALfBs77DudA0BE4d5mcpmqw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-dynamic-import": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.22.11.tgz", - "integrity": "sha512-g/21plo58sfteWjaO0ZNVb+uEOkJNjAaHhbejrnBmu011l/eNDScmkbjCC3l4FKb10ViaGU4aOkFznSu2zRHgA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-dynamic-import": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-exponentiation-operator": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.22.5.tgz", - "integrity": "sha512-vIpJFNM/FjZ4rh1myqIya9jXwrwwgFRHPjT3DkUA9ZLHuzox8jiXkOLvwm1H+PQIP3CqfC++WPKeuDi0Sjdj1g==", - "dev": true, - "dependencies": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-export-namespace-from": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.22.11.tgz", - "integrity": "sha512-xa7aad7q7OiT8oNZ1mU7NrISjlSkVdMbNxn9IuLZyL9AJEhs1Apba3I+u5riX1dIkdptP5EKDG5XDPByWxtehw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-for-of": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.22.15.tgz", - "integrity": "sha512-me6VGeHsx30+xh9fbDLLPi0J1HzmeIIyenoOQHuw2D4m2SAU3NrspX5XxJLBpqn5yrLzrlw2Iy3RA//Bx27iOA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-function-name": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.22.5.tgz", - "integrity": "sha512-UIzQNMS0p0HHiQm3oelztj+ECwFnj+ZRV4KnguvlsD2of1whUeM6o7wGNj6oLwcDoAXQ8gEqfgC24D+VdIcevg==", - "dev": true, - "dependencies": { - "@babel/helper-compilation-targets": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-json-strings": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.22.11.tgz", - "integrity": "sha512-CxT5tCqpA9/jXFlme9xIBCc5RPtdDq3JpkkhgHQqtDdiTnTI0jtZ0QzXhr5DILeYifDPp2wvY2ad+7+hLMW5Pw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-json-strings": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-literals": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.22.5.tgz", - "integrity": "sha512-fTLj4D79M+mepcw3dgFBTIDYpbcB9Sm0bpm4ppXPaO+U+PKFFyV9MGRvS0gvGw62sd10kT5lRMKXAADb9pWy8g==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-logical-assignment-operators": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.22.11.tgz", - "integrity": "sha512-qQwRTP4+6xFCDV5k7gZBF3C31K34ut0tbEcTKxlX/0KXxm9GLcO14p570aWxFvVzx6QAfPgq7gaeIHXJC8LswQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-member-expression-literals": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.22.5.tgz", - "integrity": "sha512-RZEdkNtzzYCFl9SE9ATaUMTj2hqMb4StarOJLrZRbqqU4HSBE7UlBw9WBWQiDzrJZJdUWiMTVDI6Gv/8DPvfew==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-amd": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.23.0.tgz", - "integrity": "sha512-xWT5gefv2HGSm4QHtgc1sYPbseOyf+FFDo2JbpE25GWl5BqTGO9IMwTYJRoIdjsF85GE+VegHxSCUt5EvoYTAw==", - "dev": true, - "dependencies": { - "@babel/helper-module-transforms": "^7.23.0", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.23.0.tgz", - "integrity": "sha512-32Xzss14/UVc7k9g775yMIvkVK8xwKE0DPdP5JTapr3+Z9w4tzeOuLNY6BXDQR6BdnzIlXnCGAzsk/ICHBLVWQ==", - "dev": true, - "dependencies": { - "@babel/helper-module-transforms": "^7.23.0", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-simple-access": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-systemjs": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.23.0.tgz", - "integrity": "sha512-qBej6ctXZD2f+DhlOC9yO47yEYgUh5CZNz/aBoH4j/3NOlRfJXJbY7xDQCqQVf9KbrqGzIWER1f23doHGrIHFg==", - "dev": true, - "dependencies": { - "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-module-transforms": "^7.23.0", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.20" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-umd": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.22.5.tgz", - "integrity": "sha512-+S6kzefN/E1vkSsKx8kmQuqeQsvCKCd1fraCM7zXm4SFoggI099Tr4G8U81+5gtMdUeMQ4ipdQffbKLX0/7dBQ==", - "dev": true, - "dependencies": { - "@babel/helper-module-transforms": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.5.tgz", - "integrity": "sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==", - "dev": true, - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-transform-new-target": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.22.5.tgz", - "integrity": "sha512-AsF7K0Fx/cNKVyk3a+DW0JLo+Ua598/NxMRvxDnkpCIGFh43+h/v2xyhRUYf6oD8gE4QtL83C7zZVghMjHd+iw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.22.11.tgz", - "integrity": "sha512-YZWOw4HxXrotb5xsjMJUDlLgcDXSfO9eCmdl1bgW4+/lAGdkjaEvOnQ4p5WKKdUgSzO39dgPl0pTnfxm0OAXcg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-numeric-separator": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.22.11.tgz", - "integrity": "sha512-3dzU4QGPsILdJbASKhF/V2TVP+gJya1PsueQCxIPCEcerqF21oEcrob4mzjsp2Py/1nLfF5m+xYNMDpmA8vffg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-numeric-separator": "^7.10.4" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-object-rest-spread": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.22.15.tgz", - "integrity": "sha512-fEB+I1+gAmfAyxZcX1+ZUwLeAuuf8VIg67CTznZE0MqVFumWkh8xWtn58I4dxdVf080wn7gzWoF8vndOViJe9Q==", - "dev": true, - "dependencies": { - "@babel/compat-data": "^7.22.9", - "@babel/helper-compilation-targets": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.22.15" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-object-super": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.22.5.tgz", - "integrity": "sha512-klXqyaT9trSjIUrcsYIfETAzmOEZL3cBYqOYLJxBHfMFFggmXOv+NYSX/Jbs9mzMVESw/WycLFPRx8ba/b2Ipw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-optional-catch-binding": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.22.11.tgz", - "integrity": "sha512-rli0WxesXUeCJnMYhzAglEjLWVDF6ahb45HuprcmQuLidBJFWjNnOzssk2kuc6e33FlLaiZhG/kUIzUMWdBKaQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-optional-chaining": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.23.0.tgz", - "integrity": "sha512-sBBGXbLJjxTzLBF5rFWaikMnOGOk/BmK6vVByIdEggZ7Vn6CvWXZyRkkLFK6WE0IF8jSliyOkUN6SScFgzCM0g==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", - "@babel/plugin-syntax-optional-chaining": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-parameters": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.22.15.tgz", - "integrity": "sha512-hjk7qKIqhyzhhUvRT683TYQOFa/4cQKwQy7ALvTpODswN40MljzNDa0YldevS6tGbxwaEKVn502JmY0dP7qEtQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-private-methods": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.22.5.tgz", - "integrity": "sha512-PPjh4gyrQnGe97JTalgRGMuU4icsZFnWkzicB/fUtzlKUqvsWBKEpPPfr5a2JiyirZkHxnAqkQMO5Z5B2kK3fA==", - "dev": true, - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-private-property-in-object": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.22.11.tgz", - "integrity": "sha512-sSCbqZDBKHetvjSwpyWzhuHkmW5RummxJBVbYLkGkaiTOWGxml7SXt0iWa03bzxFIx7wOj3g/ILRd0RcJKBeSQ==", - "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-create-class-features-plugin": "^7.22.11", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-property-literals": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.22.5.tgz", - "integrity": "sha512-TiOArgddK3mK/x1Qwf5hay2pxI6wCZnvQqrFSqbtg1GLl2JcNMitVH/YnqjP+M31pLUeTfzY1HAXFDnUBV30rQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-regenerator": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.22.10.tgz", - "integrity": "sha512-F28b1mDt8KcT5bUyJc/U9nwzw6cV+UmTeRlXYIl2TNqMMJif0Jeey9/RQ3C4NOd2zp0/TRsDns9ttj2L523rsw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "regenerator-transform": "^0.15.2" - }, - "engines": { - "node": ">=6.9.0" + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-reserved-words": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.22.5.tgz", - "integrity": "sha512-DTtGKFRQUDm8svigJzZHzb/2xatPc6TzNvAIJ5GqOKDsGFYgAskjRulbR/vGsPKq3OPqtexnz327qYpP57RFyA==", + "node_modules/@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" + "@babel/helper-plugin-utils": "^7.10.4" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-shorthand-properties": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.22.5.tgz", - "integrity": "sha512-vM4fq9IXHscXVKzDv5itkO1X52SmdFBFcMIBZ2FRn2nqVYqw6dBexUgMvAjHW+KXpPPViD/Yo3GrDEBaRC0QYA==", + "node_modules/@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" + "@babel/helper-plugin-utils": "^7.8.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-spread": { + "node_modules/@babel/plugin-syntax-jsx": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.22.5.tgz", - "integrity": "sha512-5ZzDQIGyvN4w8+dMmpohL6MBo+l2G7tfC/O2Dg7/hjpgeWvUx8FzfeOKxGog9IimPa4YekaQ9PlDqTLOljkcxg==", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.22.5.tgz", + "integrity": "sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1966,200 +778,100 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-sticky-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.22.5.tgz", - "integrity": "sha512-zf7LuNpHG0iEeiyCNwX4j3gDg1jgt1k3ZdXBKbZSoA3BbGQGvMiSvfbZRR3Dr3aeJe3ooWFZxOOG3IRStYp2Bw==", + "node_modules/@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" + "@babel/helper-plugin-utils": "^7.10.4" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-template-literals": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.22.5.tgz", - "integrity": "sha512-5ciOehRNf+EyUeewo8NkbQiUs4d6ZxiHo6BcBcnFlgiJfu16q0bQUw9Jvo0b0gBKFG1SMhDSjeKXSYuJLeFSMA==", + "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" + "@babel/helper-plugin-utils": "^7.8.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-typeof-symbol": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.22.5.tgz", - "integrity": "sha512-bYkI5lMzL4kPii4HHEEChkD0rkc+nvnlR6+o/qdqR6zrm0Sv/nodmyLhlq2DO0YKLUNd2VePmPRjJXSBh9OIdA==", + "node_modules/@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" + "@babel/helper-plugin-utils": "^7.10.4" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-unicode-escapes": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.22.10.tgz", - "integrity": "sha512-lRfaRKGZCBqDlRU3UIFovdp9c9mEvlylmpod0/OatICsSfuQ9YFthRo1tpTkGsklEefZdqlEFdY4A2dwTb6ohg==", + "node_modules/@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" + "@babel/helper-plugin-utils": "^7.8.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-unicode-property-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.22.5.tgz", - "integrity": "sha512-HCCIb+CbJIAE6sXn5CjFQXMwkCClcOfPCzTlilJ8cUatfzwHlWQkbtV0zD338u9dZskwvuOYTuuaMaA8J5EI5A==", + "node_modules/@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", "dev": true, "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" + "@babel/helper-plugin-utils": "^7.8.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-unicode-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.22.5.tgz", - "integrity": "sha512-028laaOKptN5vHJf9/Arr/HiJekMd41hOEZYvNsrsXqJ7YPYuX2bQxh31fkZzGmq3YqHRJzYFFAVYvKfMPKqyg==", + "node_modules/@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", "dev": true, "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" + "@babel/helper-plugin-utils": "^7.8.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-unicode-sets-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.22.5.tgz", - "integrity": "sha512-lhMfi4FC15j13eKrh3DnYHjpGj6UKQHtNKTbtc1igvAhRy4+kLhV07OpLcsN0VgDEw/MjAvJO4BdMJsHwMhzCg==", + "node_modules/@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", "dev": true, "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.14.5" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { - "@babel/core": "^7.0.0" + "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/preset-env": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.22.20.tgz", - "integrity": "sha512-11MY04gGC4kSzlPHRfvVkNAZhUxOvm7DCJ37hPDnUENwe06npjIRAfInEMTGSb4LZK5ZgDFkv5hw0lGebHeTyg==", + "node_modules/@babel/plugin-syntax-typescript": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.22.5.tgz", + "integrity": "sha512-1mS2o03i7t1c6VzH6fdQ3OA8tcEIxwG18zIPRp+UY1Ihv6W+XZzBCVxExF9upussPXJ0xE9XRHwMoNs1ep/nRQ==", "dev": true, "dependencies": { - "@babel/compat-data": "^7.22.20", - "@babel/helper-compilation-targets": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-validator-option": "^7.22.15", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.22.15", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.22.15", - "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-class-properties": "^7.12.13", - "@babel/plugin-syntax-class-static-block": "^7.14.5", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3", - "@babel/plugin-syntax-import-assertions": "^7.22.5", - "@babel/plugin-syntax-import-attributes": "^7.22.5", - "@babel/plugin-syntax-import-meta": "^7.10.4", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5", - "@babel/plugin-syntax-top-level-await": "^7.14.5", - "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", - "@babel/plugin-transform-arrow-functions": "^7.22.5", - "@babel/plugin-transform-async-generator-functions": "^7.22.15", - "@babel/plugin-transform-async-to-generator": "^7.22.5", - "@babel/plugin-transform-block-scoped-functions": "^7.22.5", - "@babel/plugin-transform-block-scoping": "^7.22.15", - "@babel/plugin-transform-class-properties": "^7.22.5", - "@babel/plugin-transform-class-static-block": "^7.22.11", - "@babel/plugin-transform-classes": "^7.22.15", - "@babel/plugin-transform-computed-properties": "^7.22.5", - "@babel/plugin-transform-destructuring": "^7.22.15", - "@babel/plugin-transform-dotall-regex": "^7.22.5", - "@babel/plugin-transform-duplicate-keys": "^7.22.5", - "@babel/plugin-transform-dynamic-import": "^7.22.11", - "@babel/plugin-transform-exponentiation-operator": "^7.22.5", - "@babel/plugin-transform-export-namespace-from": "^7.22.11", - "@babel/plugin-transform-for-of": "^7.22.15", - "@babel/plugin-transform-function-name": "^7.22.5", - "@babel/plugin-transform-json-strings": "^7.22.11", - "@babel/plugin-transform-literals": "^7.22.5", - "@babel/plugin-transform-logical-assignment-operators": "^7.22.11", - "@babel/plugin-transform-member-expression-literals": "^7.22.5", - "@babel/plugin-transform-modules-amd": "^7.22.5", - "@babel/plugin-transform-modules-commonjs": "^7.22.15", - "@babel/plugin-transform-modules-systemjs": "^7.22.11", - "@babel/plugin-transform-modules-umd": "^7.22.5", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.22.5", - "@babel/plugin-transform-new-target": "^7.22.5", - "@babel/plugin-transform-nullish-coalescing-operator": "^7.22.11", - "@babel/plugin-transform-numeric-separator": "^7.22.11", - "@babel/plugin-transform-object-rest-spread": "^7.22.15", - "@babel/plugin-transform-object-super": "^7.22.5", - "@babel/plugin-transform-optional-catch-binding": "^7.22.11", - "@babel/plugin-transform-optional-chaining": "^7.22.15", - "@babel/plugin-transform-parameters": "^7.22.15", - "@babel/plugin-transform-private-methods": "^7.22.5", - "@babel/plugin-transform-private-property-in-object": "^7.22.11", - "@babel/plugin-transform-property-literals": "^7.22.5", - "@babel/plugin-transform-regenerator": "^7.22.10", - "@babel/plugin-transform-reserved-words": "^7.22.5", - "@babel/plugin-transform-shorthand-properties": "^7.22.5", - "@babel/plugin-transform-spread": "^7.22.5", - "@babel/plugin-transform-sticky-regex": "^7.22.5", - "@babel/plugin-transform-template-literals": "^7.22.5", - "@babel/plugin-transform-typeof-symbol": "^7.22.5", - "@babel/plugin-transform-unicode-escapes": "^7.22.10", - "@babel/plugin-transform-unicode-property-regex": "^7.22.5", - "@babel/plugin-transform-unicode-regex": "^7.22.5", - "@babel/plugin-transform-unicode-sets-regex": "^7.22.5", - "@babel/preset-modules": "0.1.6-no-external-plugins", - "@babel/types": "^7.22.19", - "babel-plugin-polyfill-corejs2": "^0.4.5", - "babel-plugin-polyfill-corejs3": "^0.8.3", - "babel-plugin-polyfill-regenerator": "^0.5.2", - "core-js-compat": "^3.31.0", - "semver": "^6.3.1" + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -2168,59 +880,21 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/preset-env/node_modules/@babel/types": { + "node_modules/@babel/plugin-transform-modules-commonjs": { "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.0.tgz", - "integrity": "sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.23.0.tgz", + "integrity": "sha512-32Xzss14/UVc7k9g775yMIvkVK8xwKE0DPdP5JTapr3+Z9w4tzeOuLNY6BXDQR6BdnzIlXnCGAzsk/ICHBLVWQ==", "dev": true, "dependencies": { - "@babel/helper-string-parser": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.20", - "to-fast-properties": "^2.0.0" + "@babel/helper-module-transforms": "^7.23.0", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-simple-access": "^7.22.5" }, "engines": { "node": ">=6.9.0" - } - }, - "node_modules/@babel/preset-env/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/preset-modules": { - "version": "0.1.6-no-external-plugins", - "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz", - "integrity": "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/types": "^7.4.4", - "esutils": "^2.0.2" }, "peerDependencies": { - "@babel/core": "^7.0.0-0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/@babel/regjsgen": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz", - "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==", - "dev": true - }, - "node_modules/@babel/runtime": { - "version": "7.23.1", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.1.tgz", - "integrity": "sha512-hC2v6p8ZSI/W0HUzh3V8C5g+NwSKzKPtJwSpTjwl0o297GP9+ZLQSkdvHz46CM3LqyoXxq+5G9komY+eSqSO0g==", - "dev": true, - "dependencies": { - "regenerator-runtime": "^0.14.0" - }, - "engines": { - "node": ">=6.9.0" + "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/template": { @@ -4159,54 +2833,6 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/babel-plugin-polyfill-corejs2": { - "version": "0.4.5", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.5.tgz", - "integrity": "sha512-19hwUH5FKl49JEsvyTcoHakh6BE0wgXLLptIyKZ3PijHc/Ci521wygORCUCCred+E/twuqRyAkE02BAWPmsHOg==", - "dev": true, - "dependencies": { - "@babel/compat-data": "^7.22.6", - "@babel/helper-define-polyfill-provider": "^0.4.2", - "semver": "^6.3.1" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/babel-plugin-polyfill-corejs2/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.8.4", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.4.tgz", - "integrity": "sha512-9l//BZZsPR+5XjyJMPtZSK4jv0BsTO1zDac2GC6ygx9WLGlcsnRd1Co0B2zT5fF5Ic6BZy+9m3HNZ3QcOeDKfg==", - "dev": true, - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.4.2", - "core-js-compat": "^3.32.2" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/babel-plugin-polyfill-regenerator": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.2.tgz", - "integrity": "sha512-tAlOptU0Xj34V1Y2PNTL4Y0FOJMDB6bZmoW39FeCQIhigGLkqu3Fj6uiXpxIf6Ij274ENdYx64y6Au+ZKlb1IA==", - "dev": true, - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.4.2" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, "node_modules/babel-preset-current-node-syntax": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", @@ -4698,19 +3324,6 @@ "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", "dev": true }, - "node_modules/core-js-compat": { - "version": "3.33.0", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.33.0.tgz", - "integrity": "sha512-0w4LcLXsVEuNkIqwjjf9rjCoPhK8uqA4tMRh4Ge26vfLtUutshn+aRJU21I9LCJlh2QQHfisNToLjw1XEJLTWw==", - "dev": true, - "dependencies": { - "browserslist": "^4.22.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, "node_modules/create-jest": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/create-jest/-/create-jest-29.7.0.tgz", @@ -5021,27 +3634,6 @@ "eslint": ">=7.0.0" } }, - "node_modules/eslint-define-config": { - "version": "1.23.0", - "resolved": "https://registry.npmjs.org/eslint-define-config/-/eslint-define-config-1.23.0.tgz", - "integrity": "sha512-4mMyu0JuBkQHsCtR+42irIQdFLmLIW+pMAVcyOV/gZRL4O1R8iuH0eMG3oL3Cbi1eo9fDAfT5CIHVHgdyxcf6w==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/Shinigami92" - }, - { - "type": "paypal", - "url": "https://www.paypal.com/donate/?hosted_button_id=L7GY729FBKTZY" - } - ], - "engines": { - "node": "^16.13.0 || >=18.0.0", - "npm": ">=7.0.0", - "pnpm": ">= 8.6.0" - } - }, "node_modules/eslint-scope": { "version": "7.2.2", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", @@ -6964,12 +5556,6 @@ "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", "dev": true }, - "node_modules/lodash.debounce": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", - "dev": true - }, "node_modules/lodash.memoize": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", @@ -7684,77 +6270,6 @@ "node": ">= 6" } }, - "node_modules/regenerate": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", - "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", - "dev": true - }, - "node_modules/regenerate-unicode-properties": { - "version": "10.1.1", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.1.tgz", - "integrity": "sha512-X007RyZLsCJVVrjgEFVpLUTZwyOZk3oiL75ZcuYjlIWd6rNJtOjkBwQc5AsRrpbKVkxN6sklw/k/9m2jJYOf8Q==", - "dev": true, - "dependencies": { - "regenerate": "^1.4.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/regenerator-runtime": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz", - "integrity": "sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==", - "dev": true - }, - "node_modules/regenerator-transform": { - "version": "0.15.2", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.2.tgz", - "integrity": "sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==", - "dev": true, - "dependencies": { - "@babel/runtime": "^7.8.4" - } - }, - "node_modules/regexpu-core": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz", - "integrity": "sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==", - "dev": true, - "dependencies": { - "@babel/regjsgen": "^0.8.0", - "regenerate": "^1.4.2", - "regenerate-unicode-properties": "^10.1.0", - "regjsparser": "^0.9.1", - "unicode-match-property-ecmascript": "^2.0.0", - "unicode-match-property-value-ecmascript": "^2.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/regjsparser": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", - "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", - "dev": true, - "dependencies": { - "jsesc": "~0.5.0" - }, - "bin": { - "regjsparser": "bin/parser" - } - }, - "node_modules/regjsparser/node_modules/jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", - "dev": true, - "bin": { - "jsesc": "bin/jsesc" - } - }, "node_modules/require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", @@ -8583,46 +7098,6 @@ "node": ">=14.17" } }, - "node_modules/unicode-canonical-property-names-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", - "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-match-property-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", - "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", - "dev": true, - "dependencies": { - "unicode-canonical-property-names-ecmascript": "^2.0.0", - "unicode-property-aliases-ecmascript": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-match-property-value-ecmascript": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz", - "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-property-aliases-ecmascript": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", - "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", - "dev": true, - "engines": { - "node": ">=4" - } - }, "node_modules/universalify": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", diff --git a/package.json b/package.json index 052014a..e8cd4fd 100644 --- a/package.json +++ b/package.json @@ -25,14 +25,14 @@ "start:build": "node ./dist/bundle.js", "start:standalone": "node ./.next/standalone/server.js", "storybook": "storybook dev -p 6006", - "test": "jest", - "test:watch": "jest --watch" + "test": "node --experimental-vm-modules --no-warnings node_modules/.bin/jest", + "test:watch": "node --experimental-vm-modules --no-warnings node_modules/.bin/jest --watch", + "test:coverage": "node --experimental-vm-modules --no-warnings node_modules/.bin/jest --coverage" }, "keywords": [], "author": "", "license": "ISC", "devDependencies": { - "@babel/preset-env": "^7.22.20", "@rollup/plugin-commonjs": "^25.0.5", "@rollup/plugin-json": "^6.0.1", "@rollup/plugin-node-resolve": "^15.2.2", @@ -49,7 +49,6 @@ "esbuild": "^0.19.3", "eslint": "^8.48.0", "eslint-config-prettier": "^9.0.0", - "eslint-define-config": "^1.23.0", "husky": "^8.0.0", "jest": "^29.7.0", "jest-esm-transformer": "^1.0.0", diff --git a/src/Configurator.test.ts b/src/Configurator.test.ts new file mode 100644 index 0000000..c4c1846 --- /dev/null +++ b/src/Configurator.test.ts @@ -0,0 +1,134 @@ +import Configurator from './Configurator.js'; +import { PackageManagerKindEnum } from './PackageManager.js'; + +describe('Configurator', () => { + it('should prepare the configuration with all options', async () => { + const configurator = new Configurator({ + projectDirectoryPath: './', + packageManagerChoice: PackageManagerKindEnum.NPM, + }); + + configurator.setOptions({ + cypress: true, + docker: true, + eslint: true, + husky: true, + jest: true, + lintStaged: true, + imageOptimisation: true, + optionalDependencies: [ + { module: 'dependency1', saveDev: true }, + { module: 'dependency2', saveDev: false }, + ], + prettier: true, + reactTestingLibrary: true, + storybook: true, + typescript: true, + }); + + await configurator.prepare(); + + const config = configurator.getConfig(); + + expect(config.configTemplateFiles).toEqual([ + 'next.config.js', + 'docker-compose.yml', + 'Dockerfile', + 'Makefile', + '.prettierrc.json', + '.prettierignore', + 'jest.config.js', + 'jest.setup.js', + ]); + + expect(config.configTemplateDirectories).toEqual(['cypress', '.storybook']); + + expect(config.packageScripts).toEqual({ + 'build:standalone': 'BUILD_STANDALONE=true next build', + 'start:standalone': 'node ./.next/standalone/server.js', + 'build-start': 'next build && next start', + 'build-start:standalone': + 'npm run build:standalone && npm run start:standalone', + 'format:check': 'prettier --check .', + 'format:write': 'prettier --write .', + test: 'jest', + 'test:watch': 'jest --watch', + 'test:coverage': 'jest --coverage', + 'test:ci': 'jest --ci --coverage', + e2e: 'cypress run', + storybook: 'storybook dev -p 6006', + 'build-storybook': 'storybook build', + }); + + expect(config.packageDependencies).toEqual(['sharp', 'dependency2']); + + expect(config.packageDevDependencies).toEqual([ + 'cypress', + '@typescript-eslint/eslint-plugin', + 'lint-staged', + 'prettier', + 'eslint-config-prettier', + '@trivago/prettier-plugin-sort-imports', + '@storybook/addon-essentials', + '@storybook/addon-interactions', + '@storybook/addon-links', + '@storybook/addon-onboarding', + '@storybook/blocks', + '@storybook/nextjs', + '@storybook/react', + '@storybook/testing-library', + 'eslint-plugin-storybook', + 'storybook', + 'jest', + 'jest-environment-jsdom', + '@types/jest', + 'ts-jest', + '@testing-library/jest-dom', + '@testing-library/user-event', + '@testing-library/react', + 'eslint-plugin-testing-library', + 'dependency1', + ]); + + expect(config.markdown).toEqual([ + 'next.md', + 'cypress.md', + 'docker.md', + 'prettier.md', + 'storybook.md', + 'jest.md', + 'reactTestingLibrary.md', + 'lint-staged.md', + 'git.md', + 'husky.md', + 'selected-dependencies.md', + ]); + }); + + it('should prepare the configuration with no options', async () => { + const configurator = new Configurator({ + projectDirectoryPath: './', + packageManagerChoice: PackageManagerKindEnum.NPM, + }); + + const config = await configurator.prepare(); + + expect(config.configTemplateFiles).toEqual(['next.config.js']); + + expect(config.configTemplateDirectories).toEqual([]); + + expect(config.packageScripts).toEqual({ + 'build:standalone': 'BUILD_STANDALONE=true next build', + 'start:standalone': 'node ./.next/standalone/server.js', + 'build-start': 'next build && next start', + 'build-start:standalone': + 'npm run build:standalone && npm run start:standalone', + }); + + expect(config.packageDependencies).toEqual([]); + + expect(config.packageDevDependencies).toEqual([]); + + expect(config.markdown).toEqual(['next.md']); + }); +}); diff --git a/src/Configurator.ts b/src/Configurator.ts index f7f3ab0..d5aceb1 100644 --- a/src/Configurator.ts +++ b/src/Configurator.ts @@ -101,18 +101,23 @@ class Configurator { ) ); - await this.prepare() + this.prepare() .then(() => this.installDependencies()) .then(() => this.buildConfigs()) .then(() => this.configurePackageFile()) .then(() => this.generateReadme()) - .then(() => this.cleanUp()); - - console.log( - `\n` + - green('Success! ') + - `The following configurations were made: ` - ); + .then(() => this.cleanUp()) + .then(() => + console.log( + `\n` + + green('Success! ') + + `The following configurations were made: ` + ) + ) + .catch((error) => { + oops(); + throw new Error(`${error}`); + }); }; public setOptions = (answers: prompts.Answers) => { @@ -275,7 +280,7 @@ class Configurator { ); } - const markdownFiles = [ + this.config.markdown = [ 'next.md', ...(cypress ? ['cypress.md'] : []), ...(docker ? ['docker.md'] : []), @@ -288,10 +293,6 @@ class Configurator { ...(lintStaged ? ['selected-dependencies.md'] : []), ]; - const markdowns = await this.readFromFiles(markdownFiles); - - this.config.markdown = markdowns; - return this.config; }; @@ -521,9 +522,12 @@ class Configurator { public generateReadme = async () => { this.spinner.start('Generating Readme'); - const markdown = this.config.markdown.join('\n\n'); - await fs.promises - .writeFile(path.join(this.cwd, 'README.md'), markdown) + + await this.readFromFiles(this.config.markdown) + .then((markdownStrArr) => markdownStrArr.join('\n\n')) + .then((markdown) => + fs.promises.writeFile(path.join(this.cwd, 'README.md'), markdown) + ) .then(() => this.spinner.succeed()) .catch((error) => { this.spinner.fail(); diff --git a/tsconfig.json b/tsconfig.json index e53aa1a..d5f1f86 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,29 +1,14 @@ { "compilerOptions": { - "esModuleInterop": true, + "target": "ESNext", "module": "NodeNext", "moduleResolution": "NodeNext", "outDir": "dist", - "rootDir": "src", - "sourceMap": true, + "esModuleInterop": true, "strict": true, - "target": "ESNext", - "declaration": true + "skipLibCheck": true }, - "include": ["src/**/*.ts"], - "exclude": [ - "node_modules", - "dist", - "tmp", - "src/templates", - "src/**/*.test.*" - ], - "ts-node": { - "esm": true, - "compilerOptions": { - "allowImportingTsExtensions": true, - "esModuleInterop": true, - "module": "NodeNext" - } - } + "exclude": ["node_modules", "./*.ts", "__test__", "dis/", "tmp/", "src/templates"] } + + \ No newline at end of file From f34c380ac7476702f4451ee596fa71d3ebe59b6c Mon Sep 17 00:00:00 2001 From: Dom Geargeoura Date: Mon, 9 Oct 2023 09:25:57 +0100 Subject: [PATCH 098/105] esm modules now working nicely w jest --- .lintstagedrc.js | 4 +++- package.json | 4 ++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/.lintstagedrc.js b/.lintstagedrc.js index b117cc2..9882e32 100644 --- a/.lintstagedrc.js +++ b/.lintstagedrc.js @@ -4,7 +4,9 @@ export default { `prettier --write ${filenames.join(' ')}`, `eslint ${filenames.join(' ')}`, `eslint --fix ${filenames.join(' ')}`, - `npm run test --passWithNoTests --findRelatedTests ${filenames.join(' ')}`, + `node --experimental-vm-modules --no-warnings node_modules/.bin/jest --passWithNoTests --findRelatedTests ${filenames.join( + ' ' + )}`, `tsc --noEmit`, ], diff --git a/package.json b/package.json index e8cd4fd..59c250e 100644 --- a/package.json +++ b/package.json @@ -26,8 +26,8 @@ "start:standalone": "node ./.next/standalone/server.js", "storybook": "storybook dev -p 6006", "test": "node --experimental-vm-modules --no-warnings node_modules/.bin/jest", - "test:watch": "node --experimental-vm-modules --no-warnings node_modules/.bin/jest --watch", - "test:coverage": "node --experimental-vm-modules --no-warnings node_modules/.bin/jest --coverage" + "test:watch": "npm run test --watch", + "test:coverage": "npm run test --coverage" }, "keywords": [], "author": "", From 5b8fdd7db1b7f7bfcfe23764aa4fc2f4cfbd921b Mon Sep 17 00:00:00 2001 From: Dom Geargeoura Date: Mon, 9 Oct 2023 09:29:19 +0100 Subject: [PATCH 099/105] workflow edit added pformat check --- .github/workflows/pr-checks.yaml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/pr-checks.yaml b/.github/workflows/pr-checks.yaml index e684f3c..59ad0a5 100644 --- a/.github/workflows/pr-checks.yaml +++ b/.github/workflows/pr-checks.yaml @@ -13,6 +13,8 @@ jobs: run: npm pkg delete scripts.prepare && npm install - name: Lint run: npm run lint:check + - name: Format + run: npm run format:check - name: Test run: npm test --ci - name: Typescript From b1fe5864cceceef98a057f53c9defd8249a6432d Mon Sep 17 00:00:00 2001 From: Dom Geargeoura Date: Mon, 9 Oct 2023 09:31:53 +0100 Subject: [PATCH 100/105] format some code and prettier ignore update --- .prettierignore | 4 +++- tsconfig.json | 11 ++++++++--- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/.prettierignore b/.prettierignore index 1c2f433..998b979 100644 --- a/.prettierignore +++ b/.prettierignore @@ -1 +1,3 @@ -tmp \ No newline at end of file +tmp +.github +src/templates \ No newline at end of file diff --git a/tsconfig.json b/tsconfig.json index d5f1f86..ecf129e 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -8,7 +8,12 @@ "strict": true, "skipLibCheck": true }, - "exclude": ["node_modules", "./*.ts", "__test__", "dis/", "tmp/", "src/templates"] + "exclude": [ + "node_modules", + "./*.ts", + "__test__", + "dis/", + "tmp/", + "src/templates" + ] } - - \ No newline at end of file From e9587b6df32f949fb057c95875d525a006e0d0df Mon Sep 17 00:00:00 2001 From: Dom Geargeoura Date: Mon, 9 Oct 2023 09:34:01 +0100 Subject: [PATCH 101/105] jest config regex --- jest.config.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/jest.config.ts b/jest.config.ts index eb12d8e..2bba7b2 100644 --- a/jest.config.ts +++ b/jest.config.ts @@ -4,7 +4,7 @@ const jestConfig: JestConfigWithTsJest = { extensionsToTreatAsEsm: ['.ts'], modulePaths: ['/src/'], moduleNameMapper: { - '^(\\.{1,2}/.*)\\.(js|ts)$': '$1', + '^(\\.{1,2}/.*)\\.(js|jsx|ts|tsx)$': '$1', }, modulePathIgnorePatterns: [ '/dist/', @@ -12,7 +12,7 @@ const jestConfig: JestConfigWithTsJest = { '/husky/', ], transform: { - '^.+\\.(js|ts|tsx)?$': [ + '^.+\\.(js|jsx|ts|tsx)?$': [ 'ts-jest', { useESM: true, From f1bbe32062861e623d309f354bf8ba2952588cc2 Mon Sep 17 00:00:00 2001 From: Dom Geargeoura Date: Mon, 9 Oct 2023 10:11:35 +0100 Subject: [PATCH 102/105] deps markdown table code added --- src/Configurator.test.ts | 2 +- src/Configurator.ts | 39 +++++++++++++++++++++++++-------------- 2 files changed, 26 insertions(+), 15 deletions(-) diff --git a/src/Configurator.test.ts b/src/Configurator.test.ts index c4c1846..986d97a 100644 --- a/src/Configurator.test.ts +++ b/src/Configurator.test.ts @@ -129,6 +129,6 @@ describe('Configurator', () => { expect(config.packageDevDependencies).toEqual([]); - expect(config.markdown).toEqual(['next.md']); + expect(config.markdown).toEqual(['next.md', 'selected-dependencies.md']); }); }); diff --git a/src/Configurator.ts b/src/Configurator.ts index d5aceb1..5192a65 100644 --- a/src/Configurator.ts +++ b/src/Configurator.ts @@ -1,5 +1,6 @@ import { $ } from 'execa'; import fs from 'fs'; +import { markdownTable } from 'markdown-table'; import ora from 'ora'; import path from 'path'; import picocolors from 'picocolors'; @@ -135,7 +136,6 @@ class Configurator { stdio: 'inherit', })`npx create-next-app@latest ${this.cwd} --use-${pm}` .catch((error) => { - oops(); throw new Error(`\n${error}`); }) .finally( @@ -290,7 +290,7 @@ class Configurator { ...(reactTestingLibrary ? ['reactTestingLibrary.md'] : []), ...(lintStaged ? ['lint-staged.md'] : []), ...(husky ? ['git.md', 'husky.md'] : []), - ...(lintStaged ? ['selected-dependencies.md'] : []), + ...(optionalDependencies ? ['selected-dependencies.md'] : []), ]; return this.config; @@ -302,7 +302,6 @@ class Configurator { this.spinner.start('Configuring Git and Husky'); await $execa`git init`.catch((error) => { - oops(); this.spinner.fail(); throw new Error(`${error}`); }); @@ -322,7 +321,6 @@ class Configurator { // } await $execa`npx husky-init && npm install`.catch((error) => { - oops(); this.spinner.fail(); throw new Error(`${error}`); }); @@ -336,7 +334,6 @@ class Configurator { 'utf8' ) .catch((error) => { - oops(); this.spinner.fail(); throw new Error(`${error}`); }); @@ -443,7 +440,6 @@ class Configurator { JSON.stringify(eslintrc) ) .catch((error) => { - oops(); throw new Error(`${error}`); }); }; @@ -466,7 +462,6 @@ class Configurator { if (configs.length >= 1) { await Promise.all(configs).catch((error) => { - oops(); this.spinner.fail(); throw new Error(`${error}`); }); @@ -478,7 +473,6 @@ class Configurator { (file: string) => $`touch ${path.join(this.cwd, file)}` ); await Promise.all(copyEnvFiles).catch((error) => { - oops(); this.spinner.fail(); throw new Error(`${error}`); }); @@ -497,7 +491,7 @@ class Configurator { cwd: this.cwd, })`${this.packageManager.getKind()} run format:write`.catch((error) => { this.spinner.fail(); - oops(); + console.log(`${error}`); }); } @@ -514,24 +508,42 @@ class Configurator { fs.readFileSync(filePath, 'utf8') ); - return await Promise.all(readFiles).catch((error) => { - oops(); + const markdownArr = await Promise.all(readFiles).catch((error) => { throw new Error(`${error}`); }); + + return markdownArr; }; + private makeDependenciesMarkdownTable() { + const tableHeader = ['Package name', 'Package description', 'Type']; + const tableData = this.options.optionalDependencies.map( + ({ module, github, description, saveDev }) => [ + `[${module}](${github})`, + description, + saveDev ? '`devDependency`' : '`dependency`', + ] + ); + + return markdownTable([tableHeader, ...tableData]); + } + public generateReadme = async () => { this.spinner.start('Generating Readme'); await this.readFromFiles(this.config.markdown) - .then((markdownStrArr) => markdownStrArr.join('\n\n')) + .then((markdownStrArr) => { + if (this.options.optionalDependencies.length > 0) { + this.config.markdown.push(this.makeDependenciesMarkdownTable()); + } + return markdownStrArr.join('\n\n'); + }) .then((markdown) => fs.promises.writeFile(path.join(this.cwd, 'README.md'), markdown) ) .then(() => this.spinner.succeed()) .catch((error) => { this.spinner.fail(); - oops(); throw new Error(`${error}`); }); }; @@ -550,7 +562,6 @@ class Configurator { ); return await Promise.all(copyFiles).catch((error) => { - oops(); throw new Error(`${error}`); }); } From 85a649e6582017f6d19ca645d7701ea804e2df26 Mon Sep 17 00:00:00 2001 From: Dom Geargeoura Date: Mon, 9 Oct 2023 10:12:33 +0100 Subject: [PATCH 103/105] deps markdown table code added --- src/Configurator.test.ts | 2 +- src/Configurator.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Configurator.test.ts b/src/Configurator.test.ts index 986d97a..c4c1846 100644 --- a/src/Configurator.test.ts +++ b/src/Configurator.test.ts @@ -129,6 +129,6 @@ describe('Configurator', () => { expect(config.packageDevDependencies).toEqual([]); - expect(config.markdown).toEqual(['next.md', 'selected-dependencies.md']); + expect(config.markdown).toEqual(['next.md']); }); }); diff --git a/src/Configurator.ts b/src/Configurator.ts index 5192a65..484cd2e 100644 --- a/src/Configurator.ts +++ b/src/Configurator.ts @@ -290,7 +290,7 @@ class Configurator { ...(reactTestingLibrary ? ['reactTestingLibrary.md'] : []), ...(lintStaged ? ['lint-staged.md'] : []), ...(husky ? ['git.md', 'husky.md'] : []), - ...(optionalDependencies ? ['selected-dependencies.md'] : []), + ...(optionalDependencies.length > 0 ? ['selected-dependencies.md'] : []), ]; return this.config; From b24c67401a2c425bc2b66b0a443d5c638ddf527c Mon Sep 17 00:00:00 2001 From: Dom Geargeoura Date: Mon, 9 Oct 2023 10:14:51 +0100 Subject: [PATCH 104/105] jest config tweak --- jest.config.ts | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/jest.config.ts b/jest.config.ts index 2bba7b2..79b3fbc 100644 --- a/jest.config.ts +++ b/jest.config.ts @@ -6,11 +6,7 @@ const jestConfig: JestConfigWithTsJest = { moduleNameMapper: { '^(\\.{1,2}/.*)\\.(js|jsx|ts|tsx)$': '$1', }, - modulePathIgnorePatterns: [ - '/dist/', - '/tmp/', - '/husky/', - ], + modulePathIgnorePatterns: ['/dist/', '/tmp/'], transform: { '^.+\\.(js|jsx|ts|tsx)?$': [ 'ts-jest', From c6cd48b021d7de319aab754a8298c44baa54acda Mon Sep 17 00:00:00 2001 From: Dom Geargeoura Date: Mon, 9 Oct 2023 10:18:14 +0100 Subject: [PATCH 105/105] new line at eof where applicable --- .husky/pre-commit | 2 +- .nvmrc | 2 +- .prettierignore | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.husky/pre-commit b/.husky/pre-commit index f242df2..69a750b 100755 --- a/.husky/pre-commit +++ b/.husky/pre-commit @@ -25,4 +25,4 @@ npx leasot 'src/**/*.[jt]s?(x)' --exit-nicely printf "\n\n------------------------------------------\n\n" printf '%b ' "\033[1m"Now push your code!"\033[0m 🚀" -printf "\n\n------------------------------------------\n\n" \ No newline at end of file +printf "\n\n------------------------------------------\n\n" diff --git a/.nvmrc b/.nvmrc index 006a817..b0ea73c 100644 --- a/.nvmrc +++ b/.nvmrc @@ -1 +1 @@ -v20.x \ No newline at end of file +v20.x diff --git a/.prettierignore b/.prettierignore index 998b979..4ac21f5 100644 --- a/.prettierignore +++ b/.prettierignore @@ -1,3 +1,3 @@ tmp .github -src/templates \ No newline at end of file +src/templates