diff --git a/.changeset/config.json b/.changeset/config.json index 3b6e670029..f26daf14da 100644 --- a/.changeset/config.json +++ b/.changeset/config.json @@ -5,7 +5,7 @@ "fixed": [], "linked": [], "access": "public", - "baseBranch": "cli", + "baseBranch": "main", "updateInternalDependencies": "patch", "ignore": [] } diff --git a/.changeset/strange-tigers-repair.md b/.changeset/strange-tigers-repair.md new file mode 100644 index 0000000000..6aa7622964 --- /dev/null +++ b/.changeset/strange-tigers-repair.md @@ -0,0 +1,10 @@ +--- +"create-eth": patch +--- + +- Cleanup unused extensions +- Fix listr spamming +- Migrate from husky to lefthook +- Upgrade dependencies +- Templatized foundry deploy script +- Add eip712 curated extension diff --git a/.husky/pre-commit b/.husky/pre-commit deleted file mode 100644 index 07c4b9d516..0000000000 --- a/.husky/pre-commit +++ /dev/null @@ -1 +0,0 @@ -yarn lint-staged --verbose --config ./.lintstagedrc.json diff --git a/.lintstagedrc.json b/.lintstagedrc.json deleted file mode 100644 index b9b3dd6c14..0000000000 --- a/.lintstagedrc.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "*.{js,ts,md}": "eslint --fix" -} diff --git a/contributors/RFC-extensions.md b/contributors/core-extensions.md similarity index 83% rename from contributors/RFC-extensions.md rename to contributors/core-extensions.md index d2dbeb5dd8..8f424cda30 100644 --- a/contributors/RFC-extensions.md +++ b/contributors/core-extensions.md @@ -6,62 +6,6 @@ This change should make it easier to grow the options we provide our users witho This change requires a new file, `src/config.ts`, where a few things about the extensions are defined, e.g. the sequence of questions about extensions. -## Nested extensions - -We can add extensions of extensions, just by adding an `/extensions` folder inside an existing extension. For example, adding [next-auth][1] as an extension for next would look something like the following: - -```text -create-dapp-example/ -├─ src/ -│ ├─ ... -│ -├─ templates/ -│ ├─ base/ -│ ├─ extensions/ -│ │ ├─nextjs -│ │ ├─ ... -│ │ ├─ extensions/ -│ │ │ ├─ next-auth/ -│ │ │ ├─ ... -``` - -## Extending extensions - -> sorry for the confusing naming - -Extensions can also inherit (or extend) another extension. The goal of this feature is that two extensions can share files or nested extensions without duplication. An example of this could be hardhat and foundry, which are two different extensions, but both of them could have a shared UI to debug smart contracts. - -The file structure could be like this: - -```text -create-dapp-example/ -├─ src/ -│ ├─ ... -│ -├─ templates/ -│ ├─ base/ -│ ├─ extensions/ -│ │ ├─ foundry/ -│ │ │ ├─ config.json <- important to declare the `extends` field here -│ │ │ ├─ ... -│ │ ├─ hardhat/ -│ │ │ ├─ config.json <- important to declare the `extends` field here -│ │ │ ├─ ... -│ │ ├─ common/ -│ │ │ ├─ extensions/ -│ │ │ │ ├─ possible-shared-nested-extension/ -│ │ │ │ ├─ ... -│ │ │ ├─ shared-file.md -``` - -For `foundry` and `hardhat` extensions to inherit from `common`, they need to add the `extends` field to the config.json file. - -```json -{ - "extends": "common" -} -``` - # Config files There's one main `src/config.ts` file to configure the questions shown to the user. @@ -86,14 +30,12 @@ Those properties are: - `name`: the string to be used when showing the package name to the user via the cli, as well as for error reporting. -- `extends`: the name of a different extension used as "parent extension". Read more at the [Extending extensions](#extending-extensions) section - Note that all values are optional, as well as the file itself. | ⚠️ TODO list when new properties are added to config.json: | - Update this document | - Update the ExtensionDescriptor type at /src/types.ts -| - Update the src/utils/extensions-tree.ts file so the new field from the config is actually added into the extension descriptor +| - Update the src/utils/extensions-dictionary.ts file so the new field from the config is actually added into the extension descriptor # Template files @@ -270,7 +212,7 @@ The special files and folders are: - [`package.json` file](#merging-packagejson-files) - [`config.json` file](#extensionconfigjson) -- [`extensions/` folder](#nested-extensions) +- `extensions/` folder # Things worth mentioning diff --git a/lefthook.yml b/lefthook.yml new file mode 100644 index 0000000000..dbc47b4a76 --- /dev/null +++ b/lefthook.yml @@ -0,0 +1,5 @@ +pre-commit: + commands: + lint: + glob: "*.{js,ts,md}" + run: yarn eslint --fix {staged_files} diff --git a/package.json b/package.json index a63c4952b6..72fa6c7722 100644 --- a/package.json +++ b/package.json @@ -16,10 +16,7 @@ "lint": "eslint .", "format": "prettier --write .", "test": "echo \"Error: no test specified\" && exit 1", - "changeset:release": "yarn build && changeset publish", - "postinstall": "husky", - "prepack": "pinst --disable", - "postpack": "pinst --enable" + "changeset:release": "yarn build && changeset publish" }, "keywords": [ "cli", @@ -36,15 +33,12 @@ "@eslint/js": "^9.3.0", "@rollup/plugin-typescript": "11.1.0", "@types/inquirer": "9.0.3", - "@types/listr": "0.14.4", "@types/ncp": "2.0.5", "@types/node": "18.16.0", "eslint": "^9.3.0", "eslint-config-prettier": "^9.1.0", "eslint-plugin-prettier": "^5.1.3", - "husky": "^9.0.11", - "lint-staged": "^15.2.4", - "pinst": "^3.0.0", + "lefthook": "^1.6.16", "prettier": "3.2.5", "rollup": "3.21.0", "rollup-plugin-auto-external": "2.0.0", @@ -57,9 +51,8 @@ "arg": "5.0.2", "chalk": "5.2.0", "execa": "7.1.1", - "handlebars": "^4.7.7", "inquirer": "9.2.0", - "listr": "0.14.3", + "listr2": "^8.2.1", "merge-packages": "^0.1.6", "ncp": "2.0.0", "pkg-install": "1.0.0" diff --git a/src/config.ts b/src/config.ts index e5573ce654..08f1526855 100644 --- a/src/config.ts +++ b/src/config.ts @@ -17,6 +17,10 @@ const CURATED_EXTENSIONS: { [key: string]: ExternalExtension } = { repository: "https://github.com/scaffold-eth/create-eth-extensions", branch: "subgraph", }, + "eip-712": { + repository: "https://github.com/scaffold-eth/create-eth-extensions", + branch: "eip-712", + }, }; export { config, CURATED_EXTENSIONS }; diff --git a/src/main.ts b/src/main.ts index a97ea6c4cc..9f3f78f684 100644 --- a/src/main.ts +++ b/src/main.ts @@ -8,7 +8,7 @@ import { import type { Options } from "./types"; import { renderOutroMessage } from "./utils/render-outro-message"; import chalk from "chalk"; -import Listr from "listr"; +import { Listr } from "listr2"; import path from "path"; import { fileURLToPath } from "url"; import { getArgumentFromExternalExtensionOption } from "./utils/external-extensions"; @@ -22,40 +22,45 @@ export async function createProject(options: Options) { const targetDirectory = path.resolve(process.cwd(), options.project); - const tasks = new Listr([ - { - title: `📁 Create project directory ${targetDirectory}`, - task: () => createProjectDirectory(options.project), - }, - { - title: `🚀 Creating a new Scaffold-ETH 2 app in ${chalk.green.bold( - options.project, - )}${options.externalExtension ? ` with the ${chalk.green.bold(getArgumentFromExternalExtensionOption(options.externalExtension))} extension` : ""}`, - task: () => copyTemplateFiles(options, templateDirectory, targetDirectory), - }, - { - title: `📦 Installing dependencies with yarn, this could take a while`, - task: () => installPackages(targetDirectory), - skip: () => { - if (!options.install) { - return "Manually skipped"; - } + const tasks = new Listr( + [ + { + title: `📁 Create project directory ${targetDirectory}`, + task: () => createProjectDirectory(options.project), }, - }, - { - title: "🪄 Formatting files with prettier", - task: () => prettierFormat(targetDirectory), - skip: () => { - if (!options.install) { - return "Skipping because prettier install was skipped"; - } + { + title: `🚀 Creating a new Scaffold-ETH 2 app in ${chalk.green.bold( + options.project, + )}${options.externalExtension ? ` with the ${chalk.green.bold(getArgumentFromExternalExtensionOption(options.externalExtension))} extension` : ""}`, + task: () => copyTemplateFiles(options, templateDirectory, targetDirectory), }, - }, - { - title: `📡 Initializing Git repository ${options.extensions.includes("foundry") ? "and submodules" : ""}`, - task: () => createFirstGitCommit(targetDirectory, options), - }, - ]); + { + title: `📦 Installing dependencies with yarn, this could take a while`, + task: () => installPackages(targetDirectory), + skip: () => { + if (!options.install) { + return "Manually skipped"; + } + return false; + }, + }, + { + title: "🪄 Formatting files with prettier", + task: () => prettierFormat(targetDirectory), + skip: () => { + if (!options.install) { + return "Skipping because prettier install was skipped"; + } + return false; + }, + }, + { + title: `📡 Initializing Git repository ${options.extensions.includes("foundry") ? "and submodules" : ""}`, + task: () => createFirstGitCommit(targetDirectory, options), + }, + ], + { rendererOptions: { collapseSkips: false, suffixSkips: true } }, + ); try { await tasks.run(); diff --git a/src/tasks/copy-template-files.ts b/src/tasks/copy-template-files.ts index e89b44f8ae..1ab981b949 100644 --- a/src/tasks/copy-template-files.ts +++ b/src/tasks/copy-template-files.ts @@ -1,7 +1,7 @@ import { execa } from "execa"; -import { Extension, isDefined, Options, TemplateDescriptor } from "../types"; +import { Options, TemplateDescriptor } from "../types"; import { baseDir } from "../utils/consts"; -import { extensionDict } from "../utils/extensions-tree"; +import { extensionDict } from "../utils/extensions-dictionary"; import { findFilesRecursiveSync } from "../utils/find-files-recursively"; import { mergePackageJson } from "../utils/merge-package-json"; import fs from "fs"; @@ -16,61 +16,40 @@ const EXTERNAL_EXTENSION_TMP_FOLDER = "tmp-external-extension"; const copy = promisify(ncp); let copyOrLink = copy; -const expandExtensions = (options: Options): Extension[] => { - const expandedExtensions = options.extensions - .map(extension => extensionDict[extension]) - .map(extDescriptor => [extDescriptor.extends, extDescriptor.value].filter(isDefined)) - .flat() - // this reduce just removes duplications - .reduce((exts, ext) => (exts.includes(ext) ? exts : [...exts, ext]), [] as Extension[]); - - return expandedExtensions; -}; - const isTemplateRegex = /([^/\\]*?)\.template\./; const isPackageJsonRegex = /package\.json/; const isYarnLockRegex = /yarn\.lock/; -const isNextGeneratedRegex = /packages\/nextjs\/generated/; const isConfigRegex = /([^/\\]*?)\\config\.json/; const isArgsRegex = /([^/\\]*?)\.args\./; const isExtensionFolderRegex = /extensions$/; const isPackagesFolderRegex = /packages$/; +const isDeployedContractsRegex = /packages\/nextjs\/contracts\/deployedContracts\.ts/; -const copyBaseFiles = async ({ dev: isDev }: Options, basePath: string, targetDir: string) => { +const copyBaseFiles = async (basePath: string, targetDir: string, { dev: isDev }: Options) => { await copyOrLink(basePath, targetDir, { clobber: false, filter: fileName => { - // NOTE: filter IN const isTemplate = isTemplateRegex.test(fileName); - const isPackageJson = isPackageJsonRegex.test(fileName); - const isYarnLock = isYarnLockRegex.test(fileName); - const isNextGenerated = isNextGeneratedRegex.test(fileName); - const skipAlways = isTemplate || isPackageJson; - const skipDevOnly = isYarnLock || isNextGenerated; - const shouldSkip = skipAlways || (isDev && skipDevOnly); + const isYarnLock = isYarnLockRegex.test(fileName); + const isDeployedContracts = isDeployedContractsRegex.test(fileName); + const skipDevOnly = isDev && (isYarnLock || isDeployedContracts); - return !shouldSkip; + return !isTemplate && !skipDevOnly; }, }); - const basePackageJsonPaths = findFilesRecursiveSync(basePath, path => isPackageJsonRegex.test(path)); - - basePackageJsonPaths.forEach(packageJsonPath => { - const partialPath = packageJsonPath.split(basePath)[1]; - mergePackageJson(path.join(targetDir, partialPath), path.join(basePath, partialPath), isDev); - }); - if (isDev) { + // we don't want to symlink yarn.lock & deployedContracts.ts file const baseYarnLockPaths = findFilesRecursiveSync(basePath, path => isYarnLockRegex.test(path)); baseYarnLockPaths.forEach(yarnLockPath => { const partialPath = yarnLockPath.split(basePath)[1]; void copy(path.join(basePath, partialPath), path.join(targetDir, partialPath)); }); - const nextGeneratedPaths = findFilesRecursiveSync(basePath, path => isNextGeneratedRegex.test(path)); - nextGeneratedPaths.forEach(nextGeneratedPath => { - const partialPath = nextGeneratedPath.split(basePath)[1]; + const baseDeployedContractsPaths = findFilesRecursiveSync(basePath, path => isDeployedContractsRegex.test(path)); + baseDeployedContractsPaths.forEach(deployedContractsPath => { + const partialPath = deployedContractsPath.split(basePath)[1]; void copy(path.join(basePath, partialPath), path.join(targetDir, partialPath)); }); } @@ -211,13 +190,15 @@ const processTemplatedFiles = async ( ); } - // ToDo. Bug, if arg not present in arg[0], but present in arg[1], it will not be added. + const allKeys = [...new Set(args.flatMap(Object.keys))]; + const freshArgs: { [key: string]: string[] } = Object.fromEntries( - Object.keys(args[0] ?? {}).map(key => [ + allKeys.map(key => [ key, // INFO: key for the freshArgs object [], // INFO: initial value for the freshArgs object ]), ); + const combinedArgs = args.reduce((accumulated, arg) => { Object.entries(arg).map(([key, value]) => { accumulated[key]?.push(value); @@ -225,8 +206,6 @@ const processTemplatedFiles = async ( return accumulated; }, freshArgs); - // TODO test: if first arg file found only uses 1 name, I think the rest are not used? - const output = fileTemplate(combinedArgs); const targetPath = path.join( @@ -290,12 +269,9 @@ export async function copyTemplateFiles(options: Options, templateDir: string, t const tmpDir = path.join(targetDir, EXTERNAL_EXTENSION_TMP_FOLDER); // 1. Copy base template to target directory - await copyBaseFiles(options, basePath, targetDir); - - // 2. Add "parent" extensions (set via config.json#extend field) - options.extensions = expandExtensions(options); + await copyBaseFiles(basePath, targetDir, options); - // 3. Copy extensions folders + // 2. Copy extensions folders await Promise.all( options.extensions.map(async extension => { const extensionPath = extensionDict[extension].path; @@ -303,21 +279,21 @@ export async function copyTemplateFiles(options: Options, templateDir: string, t }), ); - // 4. Set up external extension if needed + // 3. Set up external extension if needed if (options.externalExtension) { await setUpExternalExtensionFiles(options, tmpDir); await copyExtensionsFiles(options, path.join(tmpDir, "extension"), targetDir); } - // 5. Process templated files and generate output + // 4. Process templated files and generate output await processTemplatedFiles(options, basePath, targetDir); - // 6. Delete tmp directory + // 5. Delete tmp directory if (options.externalExtension) { await fs.promises.rm(tmpDir, { recursive: true }); } - // 7. Initialize git repo to avoid husky error + // 6. Initialize git repo to avoid husky error await execa("git", ["init"], { cwd: targetDir }); await execa("git", ["checkout", "-b", "main"], { cwd: targetDir }); } diff --git a/src/types.ts b/src/types.ts index 4b07439e7b..28d46d9078 100644 --- a/src/types.ts +++ b/src/types.ts @@ -60,23 +60,12 @@ export type ExtensionDescriptor = { name: string; value: Extension; path: string; - extensions?: Extension[]; - extends?: Extension; }; -export type ExtensionBranch = ExtensionDescriptor & { - extensions: Extension[]; -}; export type ExtensionDict = { [extension in Extension]: ExtensionDescriptor; }; -export const extensionWithSubextensions = ( - extension: ExtensionDescriptor | undefined, -): extension is ExtensionBranch => { - return Object.prototype.hasOwnProperty.call(extension, "extensions"); -}; - export type TemplateDescriptor = { path: string; fileUrl: string; diff --git a/src/utils/extensions-dictionary.ts b/src/utils/extensions-dictionary.ts new file mode 100644 index 0000000000..b7862e4103 --- /dev/null +++ b/src/utils/extensions-dictionary.ts @@ -0,0 +1,57 @@ +import { fileURLToPath } from "url"; +import path from "path"; +import fs from "fs"; +import { Extension, ExtensionDescriptor, ExtensionDict } from "../types"; + +// global object to store mapping of extension name and its descriptor +export const extensionDict: ExtensionDict = {} as ExtensionDict; + +const currentFileUrl = import.meta.url; + +const templatesDirectory = path.resolve(decodeURI(fileURLToPath(currentFileUrl)), "../../templates"); + +/** + * This function has side effects. It initializes the extensionDict. + */ +const initializeExtensionsDict = (basePath: string) => { + const extensionsPath = path.resolve(basePath, "extensions"); + let extensions: Extension[]; + try { + extensions = fs.readdirSync(extensionsPath) as Extension[]; + } catch (error) { + console.error(`Couldn't read the extensions directory: ${extensionsPath}`); + return; + } + + extensions.forEach(ext => { + const extPath = path.resolve(extensionsPath, ext); + const configPath = path.resolve(extPath, "config.json"); + + let config: Record = {}; + try { + config = JSON.parse(fs.readFileSync(configPath, "utf8")) as Record; + } catch (error) { + if (fs.existsSync(configPath)) { + throw new Error( + `Couldn't parse existing config.json file. +Extension: ${ext}; +Config file path: ${configPath}`, + ); + } + } + const name = config.name ?? ext; + const value = ext; + + const extDescriptor: ExtensionDescriptor = { + name, + value, + path: extPath, + }; + + extensionDict[ext] = extDescriptor; + }); +}; + +// This function call will run only once due to Node.js module caching in first import of file +// it won't run again even if imported in multiple files. +initializeExtensionsDict(templatesDirectory); diff --git a/src/utils/extensions-tree.ts b/src/utils/extensions-tree.ts deleted file mode 100644 index 70f02541d1..0000000000 --- a/src/utils/extensions-tree.ts +++ /dev/null @@ -1,68 +0,0 @@ -import { fileURLToPath } from "url"; -import path from "path"; -import fs from "fs"; -import { Extension, ExtensionDescriptor, ExtensionDict } from "../types"; - -export const extensionDict: ExtensionDict = {} as ExtensionDict; - -const currentFileUrl = import.meta.url; - -const templatesDirectory = path.resolve(decodeURI(fileURLToPath(currentFileUrl)), "../../templates"); - -/** - * This function has side effects. It generates the extensionDict. - * - * @param basePath the path at which to start the traverse - * @returns the extensions found in this path. Useful for the recursion - */ -const traverseExtensions = async (basePath: string): Promise => { - const extensionsPath = path.resolve(basePath, "extensions"); - let extensions: Extension[]; - try { - extensions = fs.readdirSync(extensionsPath) as Extension[]; - } catch (error) { - return []; - } - - await Promise.all( - extensions.map(async ext => { - const extPath = path.resolve(extensionsPath, ext); - const configPath = path.resolve(extPath, "config.json"); - - let config: Record = {}; - try { - config = JSON.parse(fs.readFileSync(configPath, "utf8")) as Record; - } catch (error) { - if (fs.existsSync(configPath)) { - throw new Error( - `Couldn't parse existing config.json file. - Extension: ${ext}; - Config file path: ${configPath}`, - ); - } - } - const name = config.name ?? ext; - const value = ext; - - const subExtensions = await traverseExtensions(extPath); - const hasSubExtensions = subExtensions.length !== 0; - const extDescriptor: ExtensionDescriptor = { - name, - value, - path: extPath, - extensions: subExtensions, - extends: config.extends as Extension | undefined, - }; - if (!hasSubExtensions) { - delete extDescriptor.extensions; - } - extensionDict[ext] = extDescriptor; - - return subExtensions; - }), - ); - - return extensions; -}; - -await traverseExtensions(templatesDirectory); diff --git a/src/utils/prompt-for-missing-options.ts b/src/utils/prompt-for-missing-options.ts index 93d9e9bfa8..51caa95242 100644 --- a/src/utils/prompt-for-missing-options.ts +++ b/src/utils/prompt-for-missing-options.ts @@ -1,15 +1,7 @@ import { config } from "../config"; -import { - Extension, - ExtensionDescriptor, - Options, - RawOptions, - extensionWithSubextensions, - isDefined, - isExtension, -} from "../types"; -import inquirer, { Answers } from "inquirer"; -import { extensionDict } from "./extensions-tree"; +import { Extension, Options, RawOptions, isDefined, isExtension } from "../types"; +import inquirer from "inquirer"; +import { extensionDict } from "./extensions-dictionary"; // default values for unspecified args const defaultOptions: RawOptions = { @@ -38,26 +30,6 @@ export async function promptForMissingOptions(options: RawOptions): Promise value.length > 0, }); - const recurringAddFollowUps = (extensions: ExtensionDescriptor[], relatedQuestion: string) => { - extensions.filter(extensionWithSubextensions).forEach(ext => { - const nestedExtensions = ext.extensions.map(nestedExt => extensionDict[nestedExt]); - questions.push({ - // INFO: assuming nested extensions are all optional. To change this, - // update ExtensionDescriptor adding type, and update code here. - type: "checkbox", - name: `${ext.value}-extensions`, - message: `Select optional extensions for ${ext.name}`, - choices: nestedExtensions, - when: (answers: Answers) => { - const relatedResponse = answers[relatedQuestion]; - const wasMultiselectResponse = Array.isArray(relatedResponse); - return wasMultiselectResponse ? relatedResponse.includes(ext.value) : relatedResponse === ext.value; - }, - }); - recurringAddFollowUps(nestedExtensions, `${ext.value}-extensions`); - }); - }; - config.questions.forEach(question => { if (invalidQuestionNames.includes(question.name)) { throw new Error( @@ -66,6 +38,7 @@ export async function promptForMissingOptions(options: RawOptions): Promise extensionDict[ext]) @@ -79,8 +52,6 @@ export async function promptForMissingOptions(options: RawOptions): Promise { - baseExtensions.forEach(extValue => { - const nestedExtKey = `${extValue}-extensions`; - const nestedExtensions = answers[nestedExtKey]; - if (nestedExtensions) { - mergedOptions.extensions.push(...nestedExtensions); - recurringAddNestedExtensions(nestedExtensions); - } - }); - }; - - recurringAddNestedExtensions(mergedOptions.extensions); - return mergedOptions; } diff --git a/templates/extensions/foundry/README.md.args.mjs b/templates/extensions/foundry/README.md.args.mjs index f48ba43023..750d91ae8e 100644 --- a/templates/extensions/foundry/README.md.args.mjs +++ b/templates/extensions/foundry/README.md.args.mjs @@ -3,4 +3,3 @@ export const networkConfigPath = `\`packages/foundry/foundry.toml\``; export const contractsPath = `\`packages/foundry/contracts\``; export const scriptsPath = `\`packages/foundry/script\``; export const testCommand = `\`yarn foundry:test\``; -export const extraContents = ""; diff --git a/templates/extensions/hardhat/README.md.args.mjs b/templates/extensions/hardhat/README.md.args.mjs index df7cc4bbf8..a390c43e46 100644 --- a/templates/extensions/hardhat/README.md.args.mjs +++ b/templates/extensions/hardhat/README.md.args.mjs @@ -3,4 +3,3 @@ export const networkConfigPath = `\`packages/hardhat/hardhat.config.ts\``; export const contractsPath = `\`packages/hardhat/contracts\``; export const scriptsPath = `\`packages/hardhat/deploy\``; export const testCommand = `\`yarn hardhat:test\``; -export const extraContents = ""; diff --git a/yarn.lock b/yarn.lock index b3f835cebb..b2681772ef 100644 --- a/yarn.lock +++ b/yarn.lock @@ -474,20 +474,6 @@ __metadata: languageName: node linkType: hard -"@samverschueren/stream-to-observable@npm:^0.3.0": - version: 0.3.1 - resolution: "@samverschueren/stream-to-observable@npm:0.3.1" - dependencies: - any-observable: ^0.3.0 - peerDependenciesMeta: - rxjs: - optional: true - zen-observable: - optional: true - checksum: 8ec6d43370f419975295f306699f87989dd64a099a29cf62ddacbbbe32df634f87451504d340e15321e74b0a3ca8a9b447736472f792102e234faa207395e6c9 - languageName: node - linkType: hard - "@tootallnate/once@npm:2": version: 2.0.0 resolution: "@tootallnate/once@npm:2.0.0" @@ -540,16 +526,6 @@ __metadata: languageName: node linkType: hard -"@types/listr@npm:0.14.4": - version: 0.14.4 - resolution: "@types/listr@npm:0.14.4" - dependencies: - "@types/node": "*" - rxjs: ^6.5.1 - checksum: 4adad4be1218aa91554411f725acee5dd4aaeacfaa07041c1ad7f7e9acf7adb59f6a49f2a2694e197c87659411fa2402de2672bd54baed394050a1cca6eed1ff - languageName: node - linkType: hard - "@types/minimatch@npm:*": version: 5.1.2 resolution: "@types/minimatch@npm:5.1.2" @@ -818,13 +794,6 @@ __metadata: languageName: node linkType: hard -"ansi-escapes@npm:^3.0.0": - version: 3.2.0 - resolution: "ansi-escapes@npm:3.2.0" - checksum: 0f94695b677ea742f7f1eed961f7fd8d05670f744c6ad1f8f635362f6681dcfbc1575cb05b43abc7bb6d67e25a75fb8c7ea8f2a57330eb2c76b33f18cb2cef0a - languageName: node - linkType: hard - "ansi-escapes@npm:^6.0.0": version: 6.2.0 resolution: "ansi-escapes@npm:6.2.0" @@ -841,20 +810,6 @@ __metadata: languageName: node linkType: hard -"ansi-regex@npm:^2.0.0": - version: 2.1.1 - resolution: "ansi-regex@npm:2.1.1" - checksum: 190abd03e4ff86794f338a31795d262c1dfe8c91f7e01d04f13f646f1dcb16c5800818f886047876f1272f065570ab86b24b99089f8b68a0e11ff19aed4ca8f1 - languageName: node - linkType: hard - -"ansi-regex@npm:^3.0.0": - version: 3.0.1 - resolution: "ansi-regex@npm:3.0.1" - checksum: 09daf180c5f59af9850c7ac1bd7fda85ba596cc8cbeb210826e90755f06c818af86d9fa1e6e8322fab2c3b9e9b03f56c537b42241139f824dd75066a1e7257cc - languageName: node - linkType: hard - "ansi-regex@npm:^5.0.1": version: 5.0.1 resolution: "ansi-regex@npm:5.0.1" @@ -869,13 +824,6 @@ __metadata: languageName: node linkType: hard -"ansi-styles@npm:^2.2.1": - version: 2.2.1 - resolution: "ansi-styles@npm:2.2.1" - checksum: ebc0e00381f2a29000d1dac8466a640ce11943cef3bda3cd0020dc042e31e1058ab59bf6169cd794a54c3a7338a61ebc404b7c91e004092dd20e028c432c9c2c - languageName: node - linkType: hard - "ansi-styles@npm:^3.2.1": version: 3.2.1 resolution: "ansi-styles@npm:3.2.1" @@ -901,13 +849,6 @@ __metadata: languageName: node linkType: hard -"any-observable@npm:^0.3.0": - version: 0.3.0 - resolution: "any-observable@npm:0.3.0" - checksum: e715563ebb520ef4b2688c69512bc17e73dc8d5fb9fd29f50dea417cd4e5c8d05d27205461fa22bfd07b9a32134fc8fa88059a16adf52bb5968ccbf338ec4c7f - languageName: node - linkType: hard - "aproba@npm:^1.0.3 || ^2.0.0": version: 2.0.0 resolution: "aproba@npm:2.0.0" @@ -1066,15 +1007,6 @@ __metadata: linkType: hard "braces@npm:^3.0.2": - version: 3.0.2 - resolution: "braces@npm:3.0.2" - dependencies: - fill-range: ^7.0.1 - checksum: e2a8e769a863f3d4ee887b5fe21f63193a891c68b612ddb4b68d82d1b5f3ff9073af066c343e9867a393fe4c2555dcb33e89b937195feb9c1613d259edfcd459 - languageName: node - linkType: hard - -"braces@npm:^3.0.3": version: 3.0.3 resolution: "braces@npm:3.0.3" dependencies: @@ -1179,27 +1111,7 @@ __metadata: languageName: node linkType: hard -"chalk@npm:5.3.0": - version: 5.3.0 - resolution: "chalk@npm:5.3.0" - checksum: 623922e077b7d1e9dedaea6f8b9e9352921f8ae3afe739132e0e00c275971bdd331268183b2628cf4ab1727c45ea1f28d7e24ac23ce1db1eb653c414ca8a5a80 - languageName: node - linkType: hard - -"chalk@npm:^1.0.0, chalk@npm:^1.1.3": - version: 1.1.3 - resolution: "chalk@npm:1.1.3" - dependencies: - ansi-styles: ^2.2.1 - escape-string-regexp: ^1.0.2 - has-ansi: ^2.0.0 - strip-ansi: ^3.0.0 - supports-color: ^2.0.0 - checksum: 9d2ea6b98fc2b7878829eec223abcf404622db6c48396a9b9257f6d0ead2acf18231ae368d6a664a83f272b0679158da12e97b5229f794939e555cc574478acd - languageName: node - linkType: hard - -"chalk@npm:^2.1.0, chalk@npm:^2.4.1, chalk@npm:^2.4.2": +"chalk@npm:^2.1.0, chalk@npm:^2.4.2": version: 2.4.2 resolution: "chalk@npm:2.4.2" dependencies: @@ -1248,15 +1160,6 @@ __metadata: languageName: node linkType: hard -"cli-cursor@npm:^2.0.0, cli-cursor@npm:^2.1.0": - version: 2.1.0 - resolution: "cli-cursor@npm:2.1.0" - dependencies: - restore-cursor: ^2.0.0 - checksum: d88e97bfdac01046a3ffe7d49f06757b3126559d7e44aa2122637eb179284dc6cd49fca2fac4f67c19faaf7e6dab716b6fe1dfcd309977407d8c7578ec2d044d - languageName: node - linkType: hard - "cli-cursor@npm:^4.0.0": version: 4.0.0 resolution: "cli-cursor@npm:4.0.0" @@ -1273,16 +1176,6 @@ __metadata: languageName: node linkType: hard -"cli-truncate@npm:^0.2.1": - version: 0.2.1 - resolution: "cli-truncate@npm:0.2.1" - dependencies: - slice-ansi: 0.0.4 - string-width: ^1.0.1 - checksum: c2e4b8d95275d8c772ced60977341e87530b81a1160b0e26a252a6c39b794fdf7a1236bf5bc7150558f759deb960cbabc0f993964327bde80790bcd330b698a0 - languageName: node - linkType: hard - "cli-truncate@npm:^4.0.0": version: 4.0.0 resolution: "cli-truncate@npm:4.0.0" @@ -1329,13 +1222,6 @@ __metadata: languageName: node linkType: hard -"code-point-at@npm:^1.0.0": - version: 1.1.0 - resolution: "code-point-at@npm:1.1.0" - checksum: 17d5666611f9b16d64fdf48176d9b7fb1c7d1c1607a189f7e600040a11a6616982876af148230336adb7d8fe728a559f743a4e29db3747e3b1a32fa7f4529681 - languageName: node - linkType: hard - "color-convert@npm:^1.9.0": version: 1.9.3 resolution: "color-convert@npm:1.9.3" @@ -1384,13 +1270,6 @@ __metadata: languageName: node linkType: hard -"commander@npm:12.1.0": - version: 12.1.0 - resolution: "commander@npm:12.1.0" - checksum: 68e9818b00fc1ed9cdab9eb16905551c2b768a317ae69a5e3c43924c2b20ac9bb65b27e1cab36aeda7b6496376d4da908996ba2c0b5d79463e0fb1e77935d514 - languageName: node - linkType: hard - "commander@npm:^7.2.0": version: 7.2.0 resolution: "commander@npm:7.2.0" @@ -1420,7 +1299,6 @@ __metadata: "@eslint/js": ^9.3.0 "@rollup/plugin-typescript": 11.1.0 "@types/inquirer": 9.0.3 - "@types/listr": 0.14.4 "@types/ncp": 2.0.5 "@types/node": 18.16.0 arg: 5.0.2 @@ -1429,14 +1307,11 @@ __metadata: eslint-config-prettier: ^9.1.0 eslint-plugin-prettier: ^5.1.3 execa: 7.1.1 - handlebars: ^4.7.7 - husky: ^9.0.11 inquirer: 9.2.0 - lint-staged: ^15.2.4 - listr: 0.14.3 + lefthook: ^1.6.16 + listr2: ^8.2.1 merge-packages: ^0.1.6 ncp: 2.0.0 - pinst: ^3.0.0 pkg-install: 1.0.0 prettier: 3.2.5 rollup: 3.21.0 @@ -1517,14 +1392,7 @@ __metadata: languageName: node linkType: hard -"date-fns@npm:^1.27.2": - version: 1.30.1 - resolution: "date-fns@npm:1.30.1" - checksum: 86b1f3269cbb1f3ee5ac9959775ea6600436f4ee2b78430cd427b41a0c9fabf740b1a5d401c085f3003539a6f4755c7c56c19fbd70ce11f6f673f6bc8075b710 - languageName: node - linkType: hard - -"debug@npm:4, debug@npm:4.3.4, debug@npm:^4.1.0, debug@npm:^4.3.1, debug@npm:^4.3.2, debug@npm:^4.3.3, debug@npm:^4.3.4": +"debug@npm:4, debug@npm:^4.1.0, debug@npm:^4.3.1, debug@npm:^4.3.2, debug@npm:^4.3.3, debug@npm:^4.3.4": version: 4.3.4 resolution: "debug@npm:4.3.4" dependencies: @@ -1623,13 +1491,6 @@ __metadata: languageName: node linkType: hard -"elegant-spinner@npm:^1.0.1": - version: 1.0.1 - resolution: "elegant-spinner@npm:1.0.1" - checksum: d6a773d950c5d403b5f0fa402787e37dde99989ab6c943558fe8491cf7cd0df0e2747a9ff4d391d5a5f20a447cc9e9a63bdc956354ba47bea462f1603a5b04fe - languageName: node - linkType: hard - "emoji-regex@npm:^10.3.0": version: 10.3.0 resolution: "emoji-regex@npm:10.3.0" @@ -1787,7 +1648,7 @@ __metadata: languageName: node linkType: hard -"escape-string-regexp@npm:^1.0.2, escape-string-regexp@npm:^1.0.5": +"escape-string-regexp@npm:^1.0.5": version: 1.0.5 resolution: "escape-string-regexp@npm:1.0.5" checksum: 6092fda75c63b110c706b6a9bfde8a612ad595b628f0bd2147eea1d3406723020810e591effc7db1da91d80a71a737a313567c5abb3813e8d9c71f4aa595b410 @@ -1991,23 +1852,6 @@ __metadata: languageName: node linkType: hard -"execa@npm:8.0.1": - version: 8.0.1 - resolution: "execa@npm:8.0.1" - 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 - checksum: cac1bf86589d1d9b73bdc5dda65c52012d1a9619c44c526891956745f7b366ca2603d29fe3f7460bacc2b48c6eab5d6a4f7afe0534b31473d3708d1265545e1f - languageName: node - linkType: hard - "execa@npm:^1.0.0": version: 1.0.0 resolution: "execa@npm:1.0.0" @@ -2104,25 +1948,6 @@ __metadata: languageName: node linkType: hard -"figures@npm:^1.7.0": - version: 1.7.0 - resolution: "figures@npm:1.7.0" - dependencies: - escape-string-regexp: ^1.0.5 - object-assign: ^4.1.0 - checksum: d77206deba991a7977f864b8c8edf9b8b43b441be005482db04b0526e36263adbdb22c1c6d2df15a1ad78d12029bd1aa41ccebcb5d425e1f2cf629c6daaa8e10 - languageName: node - linkType: hard - -"figures@npm:^2.0.0": - version: 2.0.0 - resolution: "figures@npm:2.0.0" - dependencies: - escape-string-regexp: ^1.0.5 - checksum: 081beb16ea57d1716f8447c694f637668322398b57017b20929376aaf5def9823b35245b734cdd87e4832dc96e9c6f46274833cada77bfe15e5f980fea1fd21f - languageName: node - linkType: hard - "figures@npm:^5.0.0": version: 5.0.0 resolution: "figures@npm:5.0.0" @@ -2142,15 +1967,6 @@ __metadata: languageName: node linkType: hard -"fill-range@npm:^7.0.1": - version: 7.0.1 - resolution: "fill-range@npm:7.0.1" - dependencies: - to-regex-range: ^5.0.1 - checksum: cc283f4e65b504259e64fd969bcf4def4eb08d85565e906b7d36516e87819db52029a76b6363d0f02d0d532f0033c9603b9e2d943d56ee3b0d4f7ad3328ff917 - languageName: node - linkType: hard - "fill-range@npm:^7.1.1": version: 7.1.1 resolution: "fill-range@npm:7.1.1" @@ -2369,13 +2185,6 @@ __metadata: languageName: node linkType: hard -"get-stream@npm:^8.0.1": - version: 8.0.1 - resolution: "get-stream@npm:8.0.1" - checksum: 01e3d3cf29e1393f05f44d2f00445c5f9ec3d1c49e8179b31795484b9c117f4c695e5e07b88b50785d5c8248a788c85d9913a79266fc77e3ef11f78f10f1b974 - languageName: node - linkType: hard - "get-symbol-description@npm:^1.0.0": version: 1.0.0 resolution: "get-symbol-description@npm:1.0.0" @@ -2514,24 +2323,6 @@ __metadata: languageName: node linkType: hard -"handlebars@npm:^4.7.7": - version: 4.7.7 - resolution: "handlebars@npm:4.7.7" - dependencies: - minimist: ^1.2.5 - neo-async: ^2.6.0 - source-map: ^0.6.1 - uglify-js: ^3.1.4 - wordwrap: ^1.0.0 - dependenciesMeta: - uglify-js: - optional: true - bin: - handlebars: bin/handlebars - checksum: 1e79a43f5e18d15742977cb987923eab3e2a8f44f2d9d340982bcb69e1735ed049226e534d7c1074eaddaf37e4fb4f471a8adb71cddd5bc8cf3f894241df5cee - languageName: node - linkType: hard - "hard-rejection@npm:^2.1.0": version: 2.1.0 resolution: "hard-rejection@npm:2.1.0" @@ -2539,15 +2330,6 @@ __metadata: languageName: node linkType: hard -"has-ansi@npm:^2.0.0": - version: 2.0.0 - resolution: "has-ansi@npm:2.0.0" - dependencies: - ansi-regex: ^2.0.0 - checksum: 1b51daa0214440db171ff359d0a2d17bc20061164c57e76234f614c91dbd2a79ddd68dfc8ee73629366f7be45a6df5f2ea9de83f52e1ca24433f2cc78c35d8ec - languageName: node - linkType: hard - "has-bigints@npm:^1.0.1, has-bigints@npm:^1.0.2": version: 1.0.2 resolution: "has-bigints@npm:1.0.2" @@ -2666,13 +2448,6 @@ __metadata: languageName: node linkType: hard -"human-signals@npm:^5.0.0": - version: 5.0.0 - resolution: "human-signals@npm:5.0.0" - checksum: 6504560d5ed91444f16bea3bd9dfc66110a339442084e56c3e7fa7bbdf3f406426d6563d662bdce67064b165eac31eeabfc0857ed170aaa612cf14ec9f9a464c - languageName: node - linkType: hard - "humanize-ms@npm:^1.2.1": version: 1.2.1 resolution: "humanize-ms@npm:1.2.1" @@ -2682,15 +2457,6 @@ __metadata: languageName: node linkType: hard -"husky@npm:^9.0.11": - version: 9.0.11 - resolution: "husky@npm:9.0.11" - bin: - husky: bin.mjs - checksum: 1aebc3334dc7ac6288ff5e1fb72cfb447cfa474e72cf7ba692e8c5698c573ab725c28c6a5088c9f8e6aca5f47d40fa7261beffbc07a4d307ca21656dc4571f07 - languageName: node - linkType: hard - "iconv-lite@npm:^0.4.24": version: 0.4.24 resolution: "iconv-lite@npm:0.4.24" @@ -2747,13 +2513,6 @@ __metadata: languageName: node linkType: hard -"indent-string@npm:^3.0.0": - version: 3.2.0 - resolution: "indent-string@npm:3.2.0" - checksum: a0b72603bba6c985d367fda3a25aad16423d2056b22a7e83ee2dd9ce0ce3d03d1e078644b679087aa7edf1cfb457f0d96d9eeadc0b12f38582088cc00e995d2f - languageName: node - linkType: hard - "indent-string@npm:^4.0.0": version: 4.0.0 resolution: "indent-string@npm:4.0.0" @@ -2820,9 +2579,9 @@ __metadata: linkType: hard "ip@npm:^2.0.0": - version: 2.0.0 - resolution: "ip@npm:2.0.0" - checksum: cfcfac6b873b701996d71ec82a7dd27ba92450afdb421e356f44044ed688df04567344c36cbacea7d01b1c39a4c732dc012570ebe9bebfb06f27314bca625349 + version: 2.0.1 + resolution: "ip@npm:2.0.1" + checksum: d765c9fd212b8a99023a4cde6a558a054c298d640fec1020567494d257afd78ca77e37126b1a3ef0e053646ced79a816bf50621d38d5e768cdde0431fa3b0d35 languageName: node linkType: hard @@ -2906,22 +2665,6 @@ __metadata: languageName: node linkType: hard -"is-fullwidth-code-point@npm:^1.0.0": - version: 1.0.0 - resolution: "is-fullwidth-code-point@npm:1.0.0" - dependencies: - number-is-nan: ^1.0.0 - checksum: 4d46a7465a66a8aebcc5340d3b63a56602133874af576a9ca42c6f0f4bd787a743605771c5f246db77da96605fefeffb65fc1dbe862dcc7328f4b4d03edf5a57 - languageName: node - linkType: hard - -"is-fullwidth-code-point@npm:^2.0.0": - version: 2.0.0 - resolution: "is-fullwidth-code-point@npm:2.0.0" - checksum: eef9c6e15f68085fec19ff6a978a6f1b8f48018fd1265035552078ee945573594933b09bbd6f562553e2a241561439f1ef5339276eba68d272001343084cfab8 - languageName: node - linkType: hard - "is-fullwidth-code-point@npm:^3.0.0": version: 3.0.0 resolution: "is-fullwidth-code-point@npm:3.0.0" @@ -2991,15 +2734,6 @@ __metadata: languageName: node linkType: hard -"is-observable@npm:^1.1.0": - version: 1.1.0 - resolution: "is-observable@npm:1.1.0" - dependencies: - symbol-observable: ^1.1.0 - checksum: ab3d7e740915e6b53a81d96ce7d581f4dd26dacceb95278b74e7bf3123221073ea02cde810f864cff94ed5c394f18248deefd6a8f2d40137d868130eb5be6f85 - languageName: node - linkType: hard - "is-path-inside@npm:^3.0.3": version: 3.0.3 resolution: "is-path-inside@npm:3.0.3" @@ -3021,13 +2755,6 @@ __metadata: languageName: node linkType: hard -"is-promise@npm:^2.1.0": - version: 2.2.2 - resolution: "is-promise@npm:2.2.2" - checksum: 18bf7d1c59953e0ad82a1ed963fb3dc0d135c8f299a14f89a17af312fc918373136e56028e8831700e1933519630cc2fd4179a777030330fde20d34e96f40c78 - languageName: node - linkType: hard - "is-regex@npm:^1.1.4": version: 1.1.4 resolution: "is-regex@npm:1.1.4" @@ -3254,88 +2981,115 @@ __metadata: languageName: node linkType: hard -"levn@npm:^0.4.1": - version: 0.4.1 - resolution: "levn@npm:0.4.1" - dependencies: - prelude-ls: ^1.2.1 - type-check: ~0.4.0 - checksum: 12c5021c859bd0f5248561bf139121f0358285ec545ebf48bb3d346820d5c61a4309535c7f387ed7d84361cf821e124ce346c6b7cef8ee09a67c1473b46d0fc4 +"lefthook-darwin-arm64@npm:1.6.16": + version: 1.6.16 + resolution: "lefthook-darwin-arm64@npm:1.6.16" + conditions: os=darwin & cpu=arm64 languageName: node linkType: hard -"lilconfig@npm:3.1.1": - version: 3.1.1 - resolution: "lilconfig@npm:3.1.1" - checksum: dc8a4f4afde3f0fac6bd36163cc4777a577a90759b8ef1d0d766b19ccf121f723aa79924f32af5b954f3965268215e046d0f237c41c76e5ef01d4e6d1208a15e +"lefthook-darwin-x64@npm:1.6.16": + version: 1.6.16 + resolution: "lefthook-darwin-x64@npm:1.6.16" + conditions: os=darwin & cpu=x64 languageName: node linkType: hard -"lines-and-columns@npm:^1.1.6": - version: 1.2.4 - resolution: "lines-and-columns@npm:1.2.4" - checksum: 0c37f9f7fa212b38912b7145e1cd16a5f3cd34d782441c3e6ca653485d326f58b3caccda66efce1c5812bde4961bbde3374fae4b0d11bf1226152337f3894aa5 +"lefthook-freebsd-arm64@npm:1.6.16": + version: 1.6.16 + resolution: "lefthook-freebsd-arm64@npm:1.6.16" + conditions: os=freebsd & cpu=arm64 languageName: node linkType: hard -"lint-staged@npm:^15.2.4": - version: 15.2.4 - resolution: "lint-staged@npm:15.2.4" - dependencies: - chalk: 5.3.0 - commander: 12.1.0 - debug: 4.3.4 - execa: 8.0.1 - lilconfig: 3.1.1 - listr2: 8.2.1 - micromatch: 4.0.6 - pidtree: 0.6.0 - string-argv: 0.3.2 - yaml: 2.4.2 - bin: - lint-staged: bin/lint-staged.js - checksum: 521a5cd3c5e381f74bea87d38c2bb194dd89ebab85470e0c49a79d10333f858bb7141744b9ff9e01ebac2a02b22f39933bcc7739d965e9e8ba50fe900ca4d250 +"lefthook-freebsd-x64@npm:1.6.16": + version: 1.6.16 + resolution: "lefthook-freebsd-x64@npm:1.6.16" + conditions: os=freebsd & cpu=x64 languageName: node linkType: hard -"listr-silent-renderer@npm:^1.1.1": - version: 1.1.1 - resolution: "listr-silent-renderer@npm:1.1.1" - checksum: 81982612e4d207be2e69c4dcf2a6e0aaa6080e41bfe0b73e8d0b040dcdb79874248b1040558793a2f0fcc9c2252ec8af47379650f59bf2a7656c11cd5a48c948 +"lefthook-linux-arm64@npm:1.6.16": + version: 1.6.16 + resolution: "lefthook-linux-arm64@npm:1.6.16" + conditions: os=linux & cpu=arm64 languageName: node linkType: hard -"listr-update-renderer@npm:^0.5.0": - version: 0.5.0 - resolution: "listr-update-renderer@npm:0.5.0" - dependencies: - chalk: ^1.1.3 - cli-truncate: ^0.2.1 - elegant-spinner: ^1.0.1 - figures: ^1.7.0 - indent-string: ^3.0.0 - log-symbols: ^1.0.2 - log-update: ^2.3.0 - strip-ansi: ^3.0.1 - peerDependencies: - listr: ^0.14.2 - checksum: 2dddc763837a9086a684545ee9049fcb102d423b0c840ad929471ab461075ed78d5c79f1e8334cd7a76aa9076e7631c04a38733bb4d88c23ca6082c087335864 +"lefthook-linux-x64@npm:1.6.16": + version: 1.6.16 + resolution: "lefthook-linux-x64@npm:1.6.16" + conditions: os=linux & cpu=x64 languageName: node linkType: hard -"listr-verbose-renderer@npm:^0.5.0": - version: 0.5.0 - resolution: "listr-verbose-renderer@npm:0.5.0" +"lefthook-windows-arm64@npm:1.6.16": + version: 1.6.16 + resolution: "lefthook-windows-arm64@npm:1.6.16" + conditions: os=win32 & cpu=arm64 + languageName: node + linkType: hard + +"lefthook-windows-x64@npm:1.6.16": + version: 1.6.16 + resolution: "lefthook-windows-x64@npm:1.6.16" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + +"lefthook@npm:^1.6.16": + version: 1.6.16 + resolution: "lefthook@npm:1.6.16" dependencies: - chalk: ^2.4.1 - cli-cursor: ^2.1.0 - date-fns: ^1.27.2 - figures: ^2.0.0 - checksum: 3e504be729f9dd15b40db743e403673b76331774411dbc29d6f48136f6ba8bc1dee645a4e621c1cb781e6e69a58b78cb9aa8c153c7ceccfe4e4ea74d563bca3a + lefthook-darwin-arm64: 1.6.16 + lefthook-darwin-x64: 1.6.16 + lefthook-freebsd-arm64: 1.6.16 + lefthook-freebsd-x64: 1.6.16 + lefthook-linux-arm64: 1.6.16 + lefthook-linux-x64: 1.6.16 + lefthook-windows-arm64: 1.6.16 + lefthook-windows-x64: 1.6.16 + dependenciesMeta: + lefthook-darwin-arm64: + optional: true + lefthook-darwin-x64: + optional: true + lefthook-freebsd-arm64: + optional: true + lefthook-freebsd-x64: + optional: true + lefthook-linux-arm64: + optional: true + lefthook-linux-x64: + optional: true + lefthook-windows-arm64: + optional: true + lefthook-windows-x64: + optional: true + bin: + lefthook: bin/index.js + checksum: a35f505750f121650052d2f164879b803f575483ae3b04272917f8be26772ba76190daba54bf0db56083170688ae3116e72b232c568acb24aa77d018a9f19a71 + languageName: node + linkType: hard + +"levn@npm:^0.4.1": + version: 0.4.1 + resolution: "levn@npm:0.4.1" + dependencies: + prelude-ls: ^1.2.1 + type-check: ~0.4.0 + checksum: 12c5021c859bd0f5248561bf139121f0358285ec545ebf48bb3d346820d5c61a4309535c7f387ed7d84361cf821e124ce346c6b7cef8ee09a67c1473b46d0fc4 languageName: node linkType: hard -"listr2@npm:8.2.1": +"lines-and-columns@npm:^1.1.6": + version: 1.2.4 + resolution: "lines-and-columns@npm:1.2.4" + checksum: 0c37f9f7fa212b38912b7145e1cd16a5f3cd34d782441c3e6ca653485d326f58b3caccda66efce1c5812bde4961bbde3374fae4b0d11bf1226152337f3894aa5 + languageName: node + linkType: hard + +"listr2@npm:^8.2.1": version: 8.2.1 resolution: "listr2@npm:8.2.1" dependencies: @@ -3349,23 +3103,6 @@ __metadata: languageName: node linkType: hard -"listr@npm:0.14.3": - version: 0.14.3 - resolution: "listr@npm:0.14.3" - dependencies: - "@samverschueren/stream-to-observable": ^0.3.0 - is-observable: ^1.1.0 - is-promise: ^2.1.0 - is-stream: ^1.1.0 - listr-silent-renderer: ^1.1.1 - listr-update-renderer: ^0.5.0 - listr-verbose-renderer: ^0.5.0 - p-map: ^2.0.0 - rxjs: ^6.3.3 - checksum: 932d69430c2bed2f987c53b2ea2070786187de29bc4a9fa8e93fdfdf2390d7c0ff9415eb1b31136f76b134cbb930fb18af039fc341263a02b107abc6d2c31a00 - languageName: node - linkType: hard - "load-json-file@npm:^4.0.0": version: 4.0.0 resolution: "load-json-file@npm:4.0.0" @@ -3429,15 +3166,6 @@ __metadata: languageName: node linkType: hard -"log-symbols@npm:^1.0.2": - version: 1.0.2 - resolution: "log-symbols@npm:1.0.2" - dependencies: - chalk: ^1.0.0 - checksum: 5214ade9381db5d40528c171fdfd459b75cad7040eb6a347294ae47fa80cfebba4adbc3aa73a1c9da744cbfa240dd93b38f80df8615717affeea6c4bb6b8dfe7 - languageName: node - linkType: hard - "log-symbols@npm:^5.1.0": version: 5.1.0 resolution: "log-symbols@npm:5.1.0" @@ -3448,17 +3176,6 @@ __metadata: languageName: node linkType: hard -"log-update@npm:^2.3.0": - version: 2.3.0 - resolution: "log-update@npm:2.3.0" - dependencies: - ansi-escapes: ^3.0.0 - cli-cursor: ^2.0.0 - wrap-ansi: ^3.0.1 - checksum: 84fd8e93bfc316eb6ca479a37743f2edcb7563fe5b9161205ce2980f0b3c822717b8f8f1871369697fcb0208521d7b8d00750c594edc3f8a8273dd8b48dd14a3 - languageName: node - linkType: hard - "log-update@npm:^6.0.0": version: 6.0.0 resolution: "log-update@npm:6.0.0" @@ -3587,16 +3304,6 @@ __metadata: languageName: node linkType: hard -"micromatch@npm:4.0.6": - version: 4.0.6 - resolution: "micromatch@npm:4.0.6" - dependencies: - braces: ^3.0.3 - picomatch: ^4.0.2 - checksum: cd44a850c638d82232608e2a03677c5828b9faf35bacfd4817ae232208e2a56bac97bceb67da6a5d4d5a603c1cc88f65ecae3af6be11b5a8c10c995515231e78 - languageName: node - linkType: hard - "micromatch@npm:^4.0.2, micromatch@npm:^4.0.4": version: 4.0.5 resolution: "micromatch@npm:4.0.5" @@ -3607,13 +3314,6 @@ __metadata: languageName: node linkType: hard -"mimic-fn@npm:^1.0.0": - version: 1.2.0 - resolution: "mimic-fn@npm:1.2.0" - checksum: 69c08205156a1f4906d9c46f9b4dc08d18a50176352e77fdeb645cedfe9f20c0b19865d465bd2dec27a5c432347f24dc07fc3695e11159d193f892834233e939 - languageName: node - linkType: hard - "mimic-fn@npm:^2.1.0": version: 2.1.0 resolution: "mimic-fn@npm:2.1.0" @@ -3673,13 +3373,6 @@ __metadata: languageName: node linkType: hard -"minimist@npm:^1.2.5": - version: 1.2.8 - resolution: "minimist@npm:1.2.8" - checksum: 75a6d645fb122dad29c06a7597bddea977258957ed88d7a6df59b5cd3fe4a527e253e9bbf2e783e4b73657f9098b96a5fe96ab8a113655d4109108577ecf85b0 - languageName: node - linkType: hard - "minipass-collect@npm:^1.0.2": version: 1.0.2 resolution: "minipass-collect@npm:1.0.2" @@ -3740,10 +3433,10 @@ __metadata: languageName: node linkType: hard -"minipass@npm:^4.0.0": - version: 4.2.8 - resolution: "minipass@npm:4.2.8" - checksum: 7f4914d5295a9a30807cae5227a37a926e6d910c03f315930fde52332cf0575dfbc20295318f91f0baf0e6bb11a6f668e30cde8027dea7a11b9d159867a3c830 +"minipass@npm:^5.0.0": + version: 5.0.0 + resolution: "minipass@npm:5.0.0" + checksum: 425dab288738853fded43da3314a0b5c035844d6f3097a8e3b5b29b328da8f3c1af6fc70618b32c29ff906284cf6406b6841376f21caaadd0793c1d5a6a620ea languageName: node linkType: hard @@ -3817,13 +3510,6 @@ __metadata: languageName: node linkType: hard -"neo-async@npm:^2.6.0": - version: 2.6.2 - resolution: "neo-async@npm:2.6.2" - checksum: deac9f8d00eda7b2e5cd1b2549e26e10a0faa70adaa6fdadca701cc55f49ee9018e427f424bac0c790b7c7e2d3068db97f3093f1093975f2acb8f8818b936ed9 - languageName: node - linkType: hard - "nice-try@npm:^1.0.4": version: 1.0.5 resolution: "nice-try@npm:1.0.5" @@ -3904,20 +3590,6 @@ __metadata: languageName: node linkType: hard -"number-is-nan@npm:^1.0.0": - version: 1.0.1 - resolution: "number-is-nan@npm:1.0.1" - checksum: 13656bc9aa771b96cef209ffca31c31a03b507ca6862ba7c3f638a283560620d723d52e626d57892c7fff475f4c36ac07f0600f14544692ff595abff214b9ffb - languageName: node - linkType: hard - -"object-assign@npm:^4.1.0": - version: 4.1.1 - resolution: "object-assign@npm:4.1.1" - checksum: fcc6e4ea8c7fe48abfbb552578b1c53e0d194086e2e6bbbf59e0a536381a292f39943c6e9628af05b5528aa5e3318bb30d6b2e53cadaf5b8fe9e12c4b69af23f - languageName: node - linkType: hard - "object-inspect@npm:^1.12.3, object-inspect@npm:^1.9.0": version: 1.12.3 resolution: "object-inspect@npm:1.12.3" @@ -3953,15 +3625,6 @@ __metadata: languageName: node linkType: hard -"onetime@npm:^2.0.0": - version: 2.0.1 - resolution: "onetime@npm:2.0.1" - dependencies: - mimic-fn: ^1.0.0 - checksum: bb44015ac7a525d0fb43b029a583d4ad359834632b4424ca209b438aacf6d669dda81b5edfbdb42c22636e607b276ba5589f46694a729e3bc27948ce26f4cc1a - languageName: node - linkType: hard - "onetime@npm:^5.1.0": version: 5.1.2 resolution: "onetime@npm:5.1.2" @@ -4196,22 +3859,6 @@ __metadata: languageName: node linkType: hard -"picomatch@npm:^4.0.2": - version: 4.0.2 - resolution: "picomatch@npm:4.0.2" - checksum: a7a5188c954f82c6585720e9143297ccd0e35ad8072231608086ca950bee672d51b0ef676254af0788205e59bd4e4deb4e7708769226bed725bf13370a7d1464 - languageName: node - linkType: hard - -"pidtree@npm:0.6.0": - version: 0.6.0 - resolution: "pidtree@npm:0.6.0" - bin: - pidtree: bin/pidtree.js - checksum: 8fbc073ede9209dd15e80d616e65eb674986c93be49f42d9ddde8dbbd141bb53d628a7ca4e58ab5c370bb00383f67d75df59a9a226dede8fa801267a7030c27a - languageName: node - linkType: hard - "pify@npm:^3.0.0": version: 3.0.0 resolution: "pify@npm:3.0.0" @@ -4226,15 +3873,6 @@ __metadata: languageName: node linkType: hard -"pinst@npm:^3.0.0": - version: 3.0.0 - resolution: "pinst@npm:3.0.0" - bin: - pinst: bin.js - checksum: 4ae48a6a60f79c37071233af51b4d91bfc85cfa3c12b66ccda60cdb642b4d14a4ab0cb3587afc55b1f6192cea1772a5e4822026a0d0d3528296edef00cc2d61f - languageName: node - linkType: hard - "pkg-dir@npm:^4.2.0": version: 4.2.0 resolution: "pkg-dir@npm:4.2.0" @@ -4502,16 +4140,6 @@ __metadata: languageName: node linkType: hard -"restore-cursor@npm:^2.0.0": - version: 2.0.0 - resolution: "restore-cursor@npm:2.0.0" - dependencies: - onetime: ^2.0.0 - signal-exit: ^3.0.2 - checksum: 482e13d02d834b6e5e3aa90304a8b5e840775d6f06916cc92a50038adf9f098dcc72405b567da8a37e137ae40ad3e31896fa3136ae62f7a426c2fbf53d036536 - languageName: node - linkType: hard - "restore-cursor@npm:^4.0.0": version: 4.0.0 resolution: "restore-cursor@npm:4.0.0" @@ -4537,9 +4165,9 @@ __metadata: linkType: hard "rfdc@npm:^1.3.1": - version: 1.3.1 - resolution: "rfdc@npm:1.3.1" - checksum: d5d1e930aeac7e0e0a485f97db1356e388bdbeff34906d206fe524dd5ada76e95f186944d2e68307183fdc39a54928d4426bbb6734851692cfe9195efba58b79 + version: 1.4.1 + resolution: "rfdc@npm:1.4.1" + checksum: 3b05bd55062c1d78aaabfcea43840cdf7e12099968f368e9a4c3936beb744adb41cbdb315eac6d4d8c6623005d6f87fdf16d8a10e1ff3722e84afea7281c8d13 languageName: node linkType: hard @@ -4598,15 +4226,6 @@ __metadata: languageName: node linkType: hard -"rxjs@npm:^6.3.3, rxjs@npm:^6.5.1": - version: 6.6.7 - resolution: "rxjs@npm:6.6.7" - dependencies: - tslib: ^1.9.0 - checksum: bc334edef1bb8bbf56590b0b25734ba0deaf8825b703256a93714308ea36dff8a11d25533671adf8e104e5e8f256aa6fdfe39b2e248cdbd7a5f90c260acbbd1b - languageName: node - linkType: hard - "rxjs@npm:^7.2.0, rxjs@npm:^7.8.0": version: 7.8.0 resolution: "rxjs@npm:7.8.0" @@ -4661,11 +4280,11 @@ __metadata: linkType: hard "semver@npm:2 || 3 || 4 || 5, semver@npm:^5.5.0": - version: 5.7.1 - resolution: "semver@npm:5.7.1" + version: 5.7.2 + resolution: "semver@npm:5.7.2" bin: - semver: ./bin/semver - checksum: 57fd0acfd0bac382ee87cd52cd0aaa5af086a7dc8d60379dfe65fea491fb2489b6016400813930ecd61fd0952dae75c115287a1b16c234b1550887117744dfaf + semver: bin/semver + checksum: fb4ab5e0dd1c22ce0c937ea390b4a822147a9c53dbd2a9a0132f12fe382902beef4fbf12cf51bb955248d8d15874ce8cd89532569756384f994309825f10b686 languageName: node linkType: hard @@ -4678,18 +4297,7 @@ __metadata: languageName: node linkType: hard -"semver@npm:^7.3.2, semver@npm:^7.3.4, semver@npm:^7.3.5": - version: 7.5.0 - resolution: "semver@npm:7.5.0" - dependencies: - lru-cache: ^6.0.0 - bin: - semver: bin/semver.js - checksum: 2d266937756689a76f124ffb4c1ea3e1bbb2b263219f90ada8a11aebebe1280b13bb76cca2ca96bdee3dbc554cbc0b24752eb895b2a51577aa644427e9229f2b - languageName: node - linkType: hard - -"semver@npm:^7.5.3": +"semver@npm:^7.3.2, semver@npm:^7.3.4, semver@npm:^7.3.5, semver@npm:^7.5.3": version: 7.5.4 resolution: "semver@npm:7.5.4" dependencies: @@ -4766,13 +4374,6 @@ __metadata: languageName: node linkType: hard -"signal-exit@npm:^4.1.0": - version: 4.1.0 - resolution: "signal-exit@npm:4.1.0" - checksum: 64c757b498cb8629ffa5f75485340594d2f8189e9b08700e69199069c8e3070fb3e255f7ab873c05dc0b3cec412aea7402e10a5990cb6a050bd33ba062a6c549 - languageName: node - linkType: hard - "slash@npm:^3.0.0": version: 3.0.0 resolution: "slash@npm:3.0.0" @@ -4780,13 +4381,6 @@ __metadata: languageName: node linkType: hard -"slice-ansi@npm:0.0.4": - version: 0.0.4 - resolution: "slice-ansi@npm:0.0.4" - checksum: 481d969c6aa771b27d7baacd6fe321751a0b9eb410274bda10ca81ea641bbfe747e428025d6d8f15bd635fdcfd57e8b2d54681ee6b0ce0c40f78644b144759e3 - languageName: node - linkType: hard - "slice-ansi@npm:^5.0.0": version: 5.0.0 resolution: "slice-ansi@npm:5.0.0" @@ -4874,13 +4468,6 @@ __metadata: languageName: node linkType: hard -"source-map@npm:^0.6.1": - version: 0.6.1 - resolution: "source-map@npm:0.6.1" - checksum: 59ce8640cf3f3124f64ac289012c2b8bd377c238e316fb323ea22fbfe83da07d81e000071d7242cad7a23cd91c7de98e4df8830ec3f133cb6133a5f6e9f67bc2 - languageName: node - linkType: hard - "spawndamnit@npm:^2.0.0": version: 2.0.0 resolution: "spawndamnit@npm:2.0.0" @@ -4959,24 +4546,6 @@ __metadata: languageName: node linkType: hard -"string-argv@npm:0.3.2": - version: 0.3.2 - resolution: "string-argv@npm:0.3.2" - checksum: 8703ad3f3db0b2641ed2adbb15cf24d3945070d9a751f9e74a924966db9f325ac755169007233e8985a39a6a292f14d4fee20482989b89b96e473c4221508a0f - languageName: node - linkType: hard - -"string-width@npm:^1.0.1": - version: 1.0.2 - resolution: "string-width@npm:1.0.2" - dependencies: - code-point-at: ^1.0.0 - is-fullwidth-code-point: ^1.0.0 - strip-ansi: ^3.0.0 - checksum: 5c79439e95bc3bd7233a332c5f5926ab2ee90b23816ed4faa380ce3b2576d7800b0a5bb15ae88ed28737acc7ea06a518c2eef39142dd727adad0e45c776cd37e - languageName: node - linkType: hard - "string-width@npm:^1.0.2 || 2 || 3 || 4, string-width@npm:^4.1.0, string-width@npm:^4.2.0, string-width@npm:^4.2.3": version: 4.2.3 resolution: "string-width@npm:4.2.3" @@ -4988,16 +4557,6 @@ __metadata: languageName: node linkType: hard -"string-width@npm:^2.1.1": - version: 2.1.1 - resolution: "string-width@npm:2.1.1" - dependencies: - is-fullwidth-code-point: ^2.0.0 - strip-ansi: ^4.0.0 - checksum: d6173abe088c615c8dffaf3861dc5d5906ed3dc2d6fd67ff2bd2e2b5dce7fd683c5240699cf0b1b8aa679a3b3bd6b28b5053c824cb89b813d7f6541d8f89064a - languageName: node - linkType: hard - "string-width@npm:^5.0.1, string-width@npm:^5.1.2": version: 5.1.2 resolution: "string-width@npm:5.1.2" @@ -5062,24 +4621,6 @@ __metadata: languageName: node linkType: hard -"strip-ansi@npm:^3.0.0, strip-ansi@npm:^3.0.1": - version: 3.0.1 - resolution: "strip-ansi@npm:3.0.1" - dependencies: - ansi-regex: ^2.0.0 - checksum: 9b974de611ce5075c70629c00fa98c46144043db92ae17748fb780f706f7a789e9989fd10597b7c2053ae8d1513fd707816a91f1879b2f71e6ac0b6a863db465 - languageName: node - linkType: hard - -"strip-ansi@npm:^4.0.0": - version: 4.0.0 - resolution: "strip-ansi@npm:4.0.0" - dependencies: - ansi-regex: ^3.0.0 - checksum: d9186e6c0cf78f25274f6750ee5e4a5725fb91b70fdd79aa5fe648eab092a0ec5b9621b22d69d4534a56319f75d8944efbd84e3afa8d4ad1b9a9491f12c84eca - languageName: node - linkType: hard - "strip-ansi@npm:^6.0.0, strip-ansi@npm:^6.0.1": version: 6.0.1 resolution: "strip-ansi@npm:6.0.1" @@ -5144,13 +4685,6 @@ __metadata: languageName: node linkType: hard -"supports-color@npm:^2.0.0": - version: 2.0.0 - resolution: "supports-color@npm:2.0.0" - checksum: 602538c5812b9006404370b5a4b885d3e2a1f6567d314f8b4a41974ffe7d08e525bf92ae0f9c7030e3b4c78e4e34ace55d6a67a74f1571bc205959f5972f88f0 - languageName: node - linkType: hard - "supports-color@npm:^5.3.0": version: 5.5.0 resolution: "supports-color@npm:5.5.0" @@ -5176,13 +4710,6 @@ __metadata: languageName: node linkType: hard -"symbol-observable@npm:^1.1.0": - version: 1.2.0 - resolution: "symbol-observable@npm:1.2.0" - checksum: 48ffbc22e3d75f9853b3ff2ae94a44d84f386415110aea5effc24d84c502e03a4a6b7a8f75ebaf7b585780bda34eb5d6da3121f826a6f93398429d30032971b6 - languageName: node - linkType: hard - "synckit@npm:^0.8.6": version: 0.8.8 resolution: "synckit@npm:0.8.8" @@ -5194,16 +4721,16 @@ __metadata: linkType: hard "tar@npm:^6.1.11, tar@npm:^6.1.2": - version: 6.1.13 - resolution: "tar@npm:6.1.13" + version: 6.2.1 + resolution: "tar@npm:6.2.1" dependencies: chownr: ^2.0.0 fs-minipass: ^2.0.0 - minipass: ^4.0.0 + minipass: ^5.0.0 minizlib: ^2.1.1 mkdirp: ^1.0.3 yallist: ^4.0.0 - checksum: 8a278bed123aa9f53549b256a36b719e317c8b96fe86a63406f3c62887f78267cea9b22dc6f7007009738509800d4a4dccc444abd71d762287c90f35b002eb1c + checksum: f1322768c9741a25356c11373bce918483f40fa9a25c69c59410c8a1247632487edef5fe76c5f12ac51a6356d2f1829e96d2bc34098668a2fc34d76050ac2b6c languageName: node linkType: hard @@ -5269,13 +4796,6 @@ __metadata: languageName: node linkType: hard -"tslib@npm:^1.9.0": - version: 1.14.1 - resolution: "tslib@npm:1.14.1" - checksum: dbe628ef87f66691d5d2959b3e41b9ca0045c3ee3c7c7b906cc1e328b39f199bb1ad9e671c39025bd56122ac57dfbf7385a94843b1cc07c60a4db74795829acd - languageName: node - linkType: hard - "tslib@npm:^2.6.2": version: 2.6.2 resolution: "tslib@npm:2.6.2" @@ -5420,15 +4940,6 @@ __metadata: languageName: node linkType: hard -"uglify-js@npm:^3.1.4": - version: 3.17.4 - resolution: "uglify-js@npm:3.17.4" - bin: - uglifyjs: bin/uglifyjs - checksum: 7b3897df38b6fc7d7d9f4dcd658599d81aa2b1fb0d074829dd4e5290f7318dbca1f4af2f45acb833b95b1fe0ed4698662ab61b87e94328eb4c0a0d3435baf924 - languageName: node - linkType: hard - "unbox-primitive@npm:^1.0.2": version: 1.0.2 resolution: "unbox-primitive@npm:1.0.2" @@ -5589,23 +5100,6 @@ __metadata: languageName: node linkType: hard -"wordwrap@npm:^1.0.0": - version: 1.0.0 - resolution: "wordwrap@npm:1.0.0" - checksum: 2a44b2788165d0a3de71fd517d4880a8e20ea3a82c080ce46e294f0b68b69a2e49cff5f99c600e275c698a90d12c5ea32aff06c311f0db2eb3f1201f3e7b2a04 - languageName: node - linkType: hard - -"wrap-ansi@npm:^3.0.1": - version: 3.0.1 - resolution: "wrap-ansi@npm:3.0.1" - dependencies: - string-width: ^2.1.1 - strip-ansi: ^4.0.0 - checksum: 1ceed09986d58cf6e0b88ea29084e70ef3463b3b891a04a8dbf245abb1fb678358986bdc43e12bcc92a696ced17327d079bc796f4d709d15aad7b8c1a7e7c83a - languageName: node - linkType: hard - "wrap-ansi@npm:^6.2.0": version: 6.2.0 resolution: "wrap-ansi@npm:6.2.0" @@ -5685,15 +5179,6 @@ __metadata: languageName: node linkType: hard -"yaml@npm:2.4.2": - version: 2.4.2 - resolution: "yaml@npm:2.4.2" - bin: - yaml: bin.mjs - checksum: 90dda4485de04367251face9abb5c36927c94e44078f4e958e6468a07e74e7e92f89be20fc49860b6268c51ee5a5fc79ef89197d3f874bf24ef8921cc4ba9013 - languageName: node - linkType: hard - "yargs-parser@npm:^18.1.2, yargs-parser@npm:^18.1.3": version: 18.1.3 resolution: "yargs-parser@npm:18.1.3"