diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 2ae69f3..2159412 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -11,11 +11,24 @@ jobs: run: working-directory: ./cli steps: - - uses: actions/checkout@v2 - - uses: actions/setup-node@v1 + - uses: actions/checkout@v3 + with: + fetch-depth: 2 + + - uses: actions/setup-node@v3 with: node-version: 16 registry-url: https://registry.npmjs.org/ + + - uses: pnpm/action-setup@v2.2.2 + name: Install pnpm + id: pnpm-install + with: + version: 7 + run_install: true + + - run: pnpm build + - run: npm publish --access public env: NODE_AUTH_TOKEN: ${{secrets.NPM_TOKEN}} diff --git a/.gitignore b/.gitignore index e09509d..94f24dd 100644 --- a/.gitignore +++ b/.gitignore @@ -2,4 +2,6 @@ node_modules/ .pnpm-debug.log test/ -docs/ \ No newline at end of file +docs/ + +index.js diff --git a/cli/CHANGELOG.md b/cli/CHANGELOG.md new file mode 100644 index 0000000..1e1d2eb --- /dev/null +++ b/cli/CHANGELOG.md @@ -0,0 +1,60 @@ +# CoSpace + +## 0.5.0 + +- Converted to TypeScript +- `override` command will not delete manual user defined overrides + +## 0.4.5 + +### Fix + +- Create `pnpm.overrides` if it doesn't exist; happens if user deletes it from their CoSpace or if they didn't use the template + +## 0.4.4 + +### Fix + +- Remove pnpm options from template that were never applied + +## 0.4.3 + +### Enhancement + +- `override` command now provides a diff of `pnpm.overrides` + +## 0.4.2 + +- miscellaneous updates + +## 0.4.1 + +- Change dep on lage from `latest` to `^1.5.1`; reacting to change made in [microsoft/lage@a83120f](https://github.com/microsoft/lage/commit/a83120f54edad9526205765c7006d240772ef798) + +## 0.4.0 + +### Breaking Change + +- Change package name from `create-cospace` to `cospace` + +## 0.3.0 + +### Enhancement + +- Added `purge` command to delete all `node_modules` in the `cospace` + +## 0.2.1 + +### Fix + +- Pass dir arg to `init` command + +## 0.2.0 + +### Enhancement + +- Add `override` command to automatically update the `pnpm.overrides` section of the CoSpace's package.json, to ignore semver and always use the local package version, `"workspace:*"`, from the workspace. + +## 0.1.0 + +- Initial release diff --git a/cli/index.js b/cli/index.ts similarity index 57% rename from cli/index.js rename to cli/index.ts index 832f958..f401d1c 100644 --- a/cli/index.js +++ b/cli/index.ts @@ -1,16 +1,30 @@ #!/usr/bin/env node -import { fileURLToPath } from "url"; -import path from "path"; +import { execSync } from "node:child_process"; +import path from "node:path"; +import { fileURLToPath } from "node:url"; import fs from "fs-extra"; import meow from "meow"; -import { execSync } from "child_process"; -const Commands = { - INIT: "init", - OVERRIDE: "override", - PURGE: "purge", -}; +// since __filename and __dirname are undefined for esm, define ourselves +const __filename = fileURLToPath(import.meta.url); +const __dirname = path.dirname(__filename); + +const PACKAGE_JSON = "package.json"; +const WORKSPACE_VERSION = "workspace:*"; + +interface PnpmPackageInfo { + name: string; + version: string; + private: boolean; + path: string; +} + +const enum Commands { + INIT = "init", + OVERRIDE = "override", + PURGE = "purge", +} const help = ` Usage: @@ -27,14 +41,16 @@ const help = ` Flags: --help, -h Show this help message --version, -v Show the version of this script + + --includePrivate Add private packages to CoSpace's pnpm overrides `; const checkPnpmInstalled = () => { try { execSync("pnpm -v", { stdio: "ignore" }); - } catch (e) { + } catch { console.error( - "Please install pnpm using 'npm install -g pnpm' before using this script" + "Please install pnpm before using CoSpace, see https://pnpm.io/installation" ); process.exit(1); } @@ -53,16 +69,13 @@ const init = async (cospaceDir = ".") => { } } - console.log(`\nCreating cospace in ${cospaceDir}...`); - - const __filename = fileURLToPath(import.meta.url); - const __dirname = path.dirname(__filename); + console.log(`\nCreating CoSpace in ${cospaceDir}...`); await fs.copy(path.join(__dirname, "./template"), cospaceDir); - process.chdir(cospaceDir); + await fs.mkdir("repos"); try { execSync("pnpm i"); - } catch (e) { + } catch { console.error("Failed to install, please run install prior to CoSpace use"); } @@ -71,41 +84,52 @@ const init = async (cospaceDir = ".") => { ); }; -const overridePnpm = async () => { - const pkgJsonPath = "package.json"; - - const overrides = JSON.parse( +const getWorkspacePkgs = (): PnpmPackageInfo[] => { + return JSON.parse( execSync("pnpm ls -r --depth -1 --json", { encoding: "utf8", }) - ) + ); +}; + +const overridePnpm = async (includePrivate: boolean) => { + const pkgJsonData = await fs.readJSON(PACKAGE_JSON); + if (!pkgJsonData.pnpm) { + pkgJsonData.pnpm = {}; + } + const currentOverrides = pkgJsonData?.pnpm?.overrides ?? {}; + + const cospaceOverrides = getWorkspacePkgs() .map((pkg) => { - if (!pkg.private) return pkg.name; + return !pkg.private || (includePrivate && pkg.private) ? pkg.name : ""; }) .filter((name) => name) .sort() - .reduce((overrides, name) => { - overrides[name] = "workspace:*"; + .reduce((overrides: { [pkgName: string]: string }, name: string) => { + overrides[name] = WORKSPACE_VERSION; return overrides; }, {}); - const pkgJsonData = await fs.readJSON(pkgJsonPath); - const prev = Object.keys(pkgJsonData?.pnpm?.overrides ?? {}); - const next = Object.keys(overrides); + const userOverrides = Object.fromEntries( + Object.entries(currentOverrides).filter(([_pkgName, version]) => { + return version !== WORKSPACE_VERSION; + }) + ); - if (!pkgJsonData.pnpm) { - pkgJsonData.pnpm = {}; - } + const overrides = { ...cospaceOverrides, ...userOverrides }; pkgJsonData.pnpm.overrides = overrides; - await fs.writeJSON(pkgJsonPath, pkgJsonData, { spaces: 2 }); + await fs.writeJSON(PACKAGE_JSON, pkgJsonData, { spaces: 2 }); console.log( "Your CoSpace's workspace links have been overriden. Run `pnpm install`, `pnpm build` and you're good to go!" ); - const removed = prev.filter((name) => !next.includes(name)); - const added = next.filter((name) => !prev.includes(name)); + const cur = Object.keys(currentOverrides); + const next = Object.keys(overrides); + + const removed = cur.filter((name) => !next.includes(name)); + const added = next.filter((name) => !cur.includes(name)); if (removed.length) { console.log( @@ -124,15 +148,9 @@ const overridePnpm = async () => { }; const purge = async () => { - const paths = JSON.parse( - execSync("pnpm ls -r --depth -1 --json", { - encoding: "utf8", - }) - ).map((pkg) => pkg.path); - await Promise.all( - paths.map((p) => { - const nodeModulesPath = path.join(p, "node_modules"); + getWorkspacePkgs().map((pkg) => { + const nodeModulesPath = path.join(pkg.path, "node_modules"); console.log(`Purging ${nodeModulesPath}`); return fs.remove(nodeModulesPath); }) @@ -144,9 +162,11 @@ const purge = async () => { const run = async () => { const { input, flags, showHelp, showVersion } = meow(help, { importMeta: import.meta, + allowUnknownFlags: false, flags: { help: { type: "boolean", default: false, alias: "h" }, version: { type: "boolean", default: false, alias: "v" }, + includePrivate: { type: "boolean", default: false }, }, }); @@ -155,16 +175,18 @@ const run = async () => { checkPnpmInstalled(); - switch (input[0]) { + const [command, ...args] = input; + + switch (command) { case Commands.INIT: - return await init(input[1]); + return await init(args[0]); case Commands.OVERRIDE: - return await overridePnpm(); + return await overridePnpm(flags.includePrivate); case Commands.PURGE: return await purge(); default: console.error( - `Unrecognized command, "${input[0]}", please try again with --help for more info.` + `Unrecognized command, "${command}", please try again with --help for more info.` ); } }; diff --git a/cli/package.json b/cli/package.json index 15164ea..901488e 100644 --- a/cli/package.json +++ b/cli/package.json @@ -1,6 +1,6 @@ { "name": "cospace", - "version": "0.4.5", + "version": "0.5.0", "description": "Setup a `CoSpace` to link multiple (mono)repos together!", "author": "https://github.com/aruniverse", "homepage": "https://aruniverse.github.io/cospace/", @@ -13,6 +13,10 @@ "bin": { "cospace": "index.js" }, + "scripts": { + "build": "tsc", + "clean": "rimraf index.js" + }, "files": [ "index.js", "template" @@ -30,5 +34,11 @@ "dependencies": { "fs-extra": "^10.0.0", "meow": "^10.0.0" + }, + "devDependencies": { + "@types/fs-extra": "9.0.13", + "@types/node": "^16.0.0", + "rimraf": "^3.0.2", + "typescript": "^4.8.2" } } diff --git a/cli/template/lage.config.js b/cli/template/lage.config.js index 2fa92e2..6bdf273 100644 --- a/cli/template/lage.config.js +++ b/cli/template/lage.config.js @@ -1,8 +1,12 @@ +/** @type {import("lage").ConfigOptions } */ module.exports = { pipeline: { build: ["^build"], test: ["build"], lint: [], - clean: [], + clean: { + cache: false, + }, }, + cache: true, }; diff --git a/cli/template/repos/.empty b/cli/template/repos/.empty deleted file mode 100644 index e69de29..0000000 diff --git a/cli/tsconfig.json b/cli/tsconfig.json new file mode 100644 index 0000000..568d91e --- /dev/null +++ b/cli/tsconfig.json @@ -0,0 +1,104 @@ +{ + "$schema": "https://json.schemastore.org/tsconfig", + "compilerOptions": { + /* Visit https://aka.ms/tsconfig to read more about this file */ + + /* Projects */ + // "incremental": true, /* Save .tsbuildinfo files to allow for incremental compilation of projects. */ + // "composite": true, /* Enable constraints that allow a TypeScript project to be used with project references. */ + // "tsBuildInfoFile": "./.tsbuildinfo", /* Specify the path to .tsbuildinfo incremental compilation file. */ + // "disableSourceOfProjectReferenceRedirect": true, /* Disable preferring source files instead of declaration files when referencing composite projects. */ + // "disableSolutionSearching": true, /* Opt a project out of multi-project reference checking when editing. */ + // "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */ + + /* Language and Environment */ + "target": "ES2020" /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */, + // "lib": [], /* Specify a set of bundled library declaration files that describe the target runtime environment. */ + // "jsx": "preserve", /* Specify what JSX code is generated. */ + // "experimentalDecorators": true, /* Enable experimental support for TC39 stage 2 draft decorators. */ + // "emitDecoratorMetadata": true, /* Emit design-type metadata for decorated declarations in source files. */ + // "jsxFactory": "", /* Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h'. */ + // "jsxFragmentFactory": "", /* Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'. */ + // "jsxImportSource": "", /* Specify module specifier used to import the JSX factory functions when using 'jsx: react-jsx*'. */ + // "reactNamespace": "", /* Specify the object invoked for 'createElement'. This only applies when targeting 'react' JSX emit. */ + // "noLib": true, /* Disable including any library files, including the default lib.d.ts. */ + // "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */ + // "moduleDetection": "auto", /* Control what method is used to detect module-format JS files. */ + + /* Modules */ + "module": "ES2020" /* Specify what module code is generated. */, + // "rootDir": "./", /* Specify the root folder within your source files. */ + "moduleResolution": "node" /* Specify how TypeScript looks up a file from a given module specifier. */, + // "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */ + // "paths": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */ + // "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */ + // "typeRoots": [], /* Specify multiple folders that act like './node_modules/@types'. */ + // "types": [], /* Specify type package names to be included without being referenced in a source file. */ + // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ + // "moduleSuffixes": [], /* List of file name suffixes to search when resolving a module. */ + // "resolveJsonModule": true, /* Enable importing .json files. */ + // "noResolve": true, /* Disallow 'import's, 'require's or ''s from expanding the number of files TypeScript should add to a project. */ + + /* JavaScript Support */ + // "allowJs": true, /* Allow JavaScript files to be a part of your program. Use the 'checkJS' option to get errors from these files. */ + // "checkJs": true, /* Enable error reporting in type-checked JavaScript files. */ + // "maxNodeModuleJsDepth": 1, /* Specify the maximum folder depth used for checking JavaScript files from 'node_modules'. Only applicable with 'allowJs'. */ + + /* Emit */ + // "declaration": true, /* Generate .d.ts files from TypeScript and JavaScript files in your project. */ + // "declarationMap": true, /* Create sourcemaps for d.ts files. */ + // "emitDeclarationOnly": true, /* Only output d.ts files and not JavaScript files. */ + // "sourceMap": true, /* Create source map files for emitted JavaScript files. */ + // "outFile": "./", /* Specify a file that bundles all outputs into one JavaScript file. If 'declaration' is true, also designates a file that bundles all .d.ts output. */ + // "outDir": "lib" /* Specify an output folder for all emitted files. */, + "removeComments": true /* Disable emitting comments. */, + // "noEmit": true, /* Disable emitting files from a compilation. */ + // "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */ + "importsNotUsedAsValues": "remove" /* Specify emit/checking behavior for imports that are only used for types. */, + // "downlevelIteration": true, /* Emit more compliant, but verbose and less performant JavaScript for iteration. */ + // "sourceRoot": "", /* Specify the root path for debuggers to find the reference source code. */ + // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ + // "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */ + // "inlineSources": true, /* Include source code in the sourcemaps inside the emitted JavaScript. */ + // "emitBOM": true, /* Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files. */ + // "newLine": "crlf", /* Set the newline character for emitting files. */ + // "stripInternal": true, /* Disable emitting declarations that have '@internal' in their JSDoc comments. */ + // "noEmitHelpers": true, /* Disable generating custom helper functions like '__extends' in compiled output. */ + // "noEmitOnError": true, /* Disable emitting files if any type checking errors are reported. */ + // "preserveConstEnums": true, /* Disable erasing 'const enum' declarations in generated code. */ + // "declarationDir": "./", /* Specify the output directory for generated declaration files. */ + // "preserveValueImports": true, /* Preserve unused imported values in the JavaScript output that would otherwise be removed. */ + + /* Interop Constraints */ + // "isolatedModules": true, /* Ensure that each file can be safely transpiled without relying on other imports. */ + // "allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */ + "esModuleInterop": true /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */, + // "preserveSymlinks": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */ + "forceConsistentCasingInFileNames": true /* Ensure that casing is correct in imports. */, + + /* Type Checking */ + "strict": true /* Enable all strict type-checking options. */, + "noImplicitAny": true /* Enable error reporting for expressions and declarations with an implied 'any' type. */, + // "strictNullChecks": true, /* When type checking, take into account 'null' and 'undefined'. */ + // "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */ + // "strictBindCallApply": true, /* Check that the arguments for 'bind', 'call', and 'apply' methods match the original function. */ + // "strictPropertyInitialization": true, /* Check for class properties that are declared but not set in the constructor. */ + // "noImplicitThis": true, /* Enable error reporting when 'this' is given the type 'any'. */ + // "useUnknownInCatchVariables": true, /* Default catch clause variables as 'unknown' instead of 'any'. */ + // "alwaysStrict": true, /* Ensure 'use strict' is always emitted. */ + "noUnusedLocals": true /* Enable error reporting when local variables aren't read. */, + "noUnusedParameters": true /* Raise an error when a function parameter isn't read. */, + // "exactOptionalPropertyTypes": true, /* Interpret optional property types as written, rather than adding 'undefined'. */ + "noImplicitReturns": true /* Enable error reporting for codepaths that do not explicitly return in a function. */, + "noFallthroughCasesInSwitch": true /* Enable error reporting for fallthrough cases in switch statements. */, + "noUncheckedIndexedAccess": true /* Add 'undefined' to a type when accessed using an index. */, + // "noImplicitOverride": true, /* Ensure overriding members in derived classes are marked with an override modifier. */ + "noPropertyAccessFromIndexSignature": true /* Enforces using indexed accessors for keys declared using an indexed type. */, + // "allowUnusedLabels": true, /* Disable error reporting for unused labels. */ + // "allowUnreachableCode": true, /* Disable error reporting for unreachable code. */ + + /* Completeness */ + "skipDefaultLibCheck": true /* Skip type checking .d.ts files that are included with TypeScript. */, + "skipLibCheck": true /* Skip type checking all .d.ts files. */ + } +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 9006391..a664b8e 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -13,11 +13,20 @@ importers: cli: specifiers: + '@types/fs-extra': 9.0.13 + '@types/node': ^16.0.0 fs-extra: ^10.0.0 meow: ^10.0.0 + rimraf: ^3.0.2 + typescript: ^4.8.2 dependencies: fs-extra: 10.0.1 meow: 10.1.2 + devDependencies: + '@types/fs-extra': 9.0.13 + '@types/node': 16.11.56 + rimraf: 3.0.2 + typescript: 4.8.2 packages: @@ -42,10 +51,20 @@ packages: js-tokens: 4.0.0 dev: false + /@types/fs-extra/9.0.13: + resolution: {integrity: sha512-nEnwB++1u5lVDM2UI4c1+5R+FYaKfaAzS4OococimjVm3nQw3TuzH5UNsocrcTBbhnerblyHj4A49qXbIiZdpA==} + dependencies: + '@types/node': 16.11.56 + dev: true + /@types/minimist/1.2.2: resolution: {integrity: sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==} dev: false + /@types/node/16.11.56: + resolution: {integrity: sha512-aFcUkv7EddxxOa/9f74DINReQ/celqH8DiB3fRYgVDM2Xm5QJL8sl80QKuAnGvwAsMn+H3IFA6WCrQh1CY7m1A==} + dev: true + /@types/normalize-package-data/2.4.1: resolution: {integrity: sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==} dev: false @@ -62,6 +81,17 @@ packages: engines: {node: '>=0.10.0'} dev: false + /balanced-match/1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + dev: true + + /brace-expansion/1.1.11: + resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + dependencies: + balanced-match: 1.0.2 + concat-map: 0.0.1 + dev: true + /camelcase-keys/7.0.2: resolution: {integrity: sha512-Rjs1H+A9R+Ig+4E/9oyB66UC5Mj9Xq3N//vcLf2WzgdTi/3gUu3Z9KoqmlrEG4VuuLK8wJHofxzdQXz/knhiYg==} engines: {node: '>=12'} @@ -96,6 +126,10 @@ packages: resolution: {integrity: sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=} dev: false + /concat-map/0.0.1: + resolution: {integrity: sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=} + dev: true + /decamelize-keys/1.1.0: resolution: {integrity: sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk=} engines: {node: '>=0.10.0'} @@ -142,10 +176,25 @@ packages: universalify: 2.0.0 dev: false + /fs.realpath/1.0.0: + resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + dev: true + /function-bind/1.1.1: resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} dev: false + /glob/7.2.3: + resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.1.2 + once: 1.4.0 + path-is-absolute: 1.0.1 + dev: true + /graceful-fs/4.2.9: resolution: {integrity: sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==} dev: false @@ -179,6 +228,17 @@ packages: engines: {node: '>=12'} dev: false + /inflight/1.0.6: + resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + dependencies: + once: 1.4.0 + wrappy: 1.0.2 + dev: true + + /inherits/2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + dev: true + /is-arrayish/0.2.1: resolution: {integrity: sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=} dev: false @@ -266,6 +326,12 @@ packages: engines: {node: '>=4'} dev: false + /minimatch/3.1.2: + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + dependencies: + brace-expansion: 1.1.11 + dev: true + /minimist-options/4.1.0: resolution: {integrity: sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==} engines: {node: '>= 6'} @@ -285,6 +351,12 @@ packages: validate-npm-package-license: 3.0.4 dev: false + /once/1.4.0: + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + dependencies: + wrappy: 1.0.2 + dev: true + /p-limit/3.1.0: resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} engines: {node: '>=10'} @@ -314,6 +386,11 @@ packages: engines: {node: '>=8'} dev: false + /path-is-absolute/1.0.1: + resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} + engines: {node: '>=0.10.0'} + dev: true + /quick-lru/5.1.1: resolution: {integrity: sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==} engines: {node: '>=10'} @@ -346,6 +423,13 @@ packages: strip-indent: 4.0.0 dev: false + /rimraf/3.0.2: + resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} + hasBin: true + dependencies: + glob: 7.2.3 + dev: true + /semver/7.3.5: resolution: {integrity: sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==} engines: {node: '>=10'} @@ -400,6 +484,12 @@ packages: engines: {node: '>=10'} dev: false + /typescript/4.8.2: + resolution: {integrity: sha512-C0I1UsrrDHo2fYI5oaCGbSejwX4ch+9Y5jTQELvovfmFkK3HHSZJB8MSJcWLmCUBzQBchCrZ9rMRV6GuNrvGtw==} + engines: {node: '>=4.2.0'} + hasBin: true + dev: true + /universalify/2.0.0: resolution: {integrity: sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==} engines: {node: '>= 10.0.0'} @@ -412,6 +502,10 @@ packages: spdx-expression-parse: 3.0.1 dev: false + /wrappy/1.0.2: + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + dev: true + /yallist/4.0.0: resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} dev: false