From 9fad9cb81e41f5cb9cf8cccf3ee1f279987d6478 Mon Sep 17 00:00:00 2001 From: Anthony Shew Date: Fri, 13 Dec 2024 08:23:59 -0700 Subject: [PATCH] ci(examples): test every package manager in Support Policy on `basic` (#9593) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ### Description Recently, I updated external dependencies for the `basic` example and tested it with pnpm. Everything looked good - but our CI _only_ tests `basic` for pnpm. I hadn't realized that I broke one of the other package managers. Instead of relying on making sure that we hand-test every package manager, let's test each one in CI. This PR also removes a few of the examples from the test suite since we are not maintaining them. Because they are community maintained, we won't rely on them for our CI. ### Testing Instructions CI 🙏 --------- Co-authored-by: Chris Olszewski --- .../turbo-types/scripts/generate-schema.ts | 3 +- packages/turbo-workspaces/src/cli.ts | 5 + packages/turbo-workspaces/src/convert.ts | 45 ++--- packages/turbo-workspaces/src/types.ts | 1 + pnpm-lock.yaml | 170 +----------------- turborepo-tests/README.md | 4 - .../package.json | 4 +- .../turbo.json | 0 .../package.json | 2 +- .../turbo.json | 0 .../package.json | 4 +- .../turbo.json | 0 .../example-with-berry/package.json | 10 -- .../example-with-changesets/package.json | 10 -- turborepo-tests/example-with-npm/turbo.json | 8 - .../package.json | 10 -- .../example-with-react-native-web/turbo.json | 8 - .../example-with-rollup/package.json | 10 -- .../example-with-rollup/turbo.json | 8 - .../example-with-svelte/package.json | 2 +- .../example-with-vite/package.json | 10 -- turborepo-tests/example-with-vite/turbo.json | 8 - turborepo-tests/example-with-yarn/turbo.json | 8 - turborepo-tests/helpers/package.json | 8 +- turborepo-tests/helpers/setup_example_test.sh | 40 +++-- turborepo-tests/helpers/turbo.json | 5 +- 26 files changed, 80 insertions(+), 303 deletions(-) rename turborepo-tests/{example-with-npm => example-basic-npm}/package.json (72%) rename turborepo-tests/{example-basic => example-basic-npm}/turbo.json (100%) rename turborepo-tests/{example-basic => example-basic-pnpm}/package.json (81%) rename turborepo-tests/{example-with-berry => example-basic-pnpm}/turbo.json (100%) rename turborepo-tests/{example-with-yarn => example-basic-yarn}/package.json (71%) rename turborepo-tests/{example-with-changesets => example-basic-yarn}/turbo.json (100%) delete mode 100644 turborepo-tests/example-with-berry/package.json delete mode 100644 turborepo-tests/example-with-changesets/package.json delete mode 100644 turborepo-tests/example-with-npm/turbo.json delete mode 100644 turborepo-tests/example-with-react-native-web/package.json delete mode 100644 turborepo-tests/example-with-react-native-web/turbo.json delete mode 100644 turborepo-tests/example-with-rollup/package.json delete mode 100644 turborepo-tests/example-with-rollup/turbo.json delete mode 100644 turborepo-tests/example-with-vite/package.json delete mode 100644 turborepo-tests/example-with-vite/turbo.json delete mode 100644 turborepo-tests/example-with-yarn/turbo.json diff --git a/packages/turbo-types/scripts/generate-schema.ts b/packages/turbo-types/scripts/generate-schema.ts index 4d679ec5b43d3..4553ee16f0965 100755 --- a/packages/turbo-types/scripts/generate-schema.ts +++ b/packages/turbo-types/scripts/generate-schema.ts @@ -2,9 +2,10 @@ import { writeFileSync } from "node:fs"; import { join } from "node:path"; +import { fileURLToPath } from "node:url"; import { createGenerator } from "ts-json-schema-generator"; -const __dirname = new URL(".", import.meta.url).pathname; +const __dirname = fileURLToPath(new URL(".", import.meta.url)); const packageRoot = join(__dirname, "..", "src"); /** diff --git a/packages/turbo-workspaces/src/cli.ts b/packages/turbo-workspaces/src/cli.ts index 8ff87fd35d446..964fc9637f9fe 100644 --- a/packages/turbo-workspaces/src/cli.ts +++ b/packages/turbo-workspaces/src/cli.ts @@ -25,6 +25,11 @@ workspacesCli "Do not run a package manager install after conversion", false ) + .option( + "--ignore-unchanged-package-manager", + "Prevent script failure if the package manager is unchanged", + false + ) .option("--dry", "Dry run (no changes are made to files)", false) .option( "--force", diff --git a/packages/turbo-workspaces/src/convert.ts b/packages/turbo-workspaces/src/convert.ts index 6f7f55418a3d0..6e43cb48d99e6 100644 --- a/packages/turbo-workspaces/src/convert.ts +++ b/packages/turbo-workspaces/src/convert.ts @@ -36,35 +36,38 @@ export async function convertProject({ `Converting project from ${project.packageManager} to ${convertTo.name}.` ); - if (project.packageManager === convertTo.name) { - throw new ConvertError("You are already using this package manager", { - type: "package_manager-already_in_use", - }); - } + if (!options?.ignoreUnchangedPackageManager) { + if (project.packageManager === convertTo.name) { + throw new ConvertError("You are already using this package manager", { + type: "package_manager-already_in_use", + }); + } - if (!convertTo.version) { - throw new ConvertError( - `${convertTo.name} is not installed, or could not be located`, - { - type: "package_manager-could_not_be_found", - } - ); + if (!convertTo.version) { + throw new ConvertError( + `${convertTo.name} is not installed, or could not be located`, + { + type: "package_manager-could_not_be_found", + } + ); + } } // this cast is safe since we've just verified that the version exists above const to = convertTo as AvailablePackageManagerDetails; // remove old workspace data - await MANAGERS[project.packageManager].remove({ - project, - to, - logger, - options, - }); + if (!options?.ignoreUnchangedPackageManager) { + await MANAGERS[project.packageManager].remove({ + project, + to, + logger, + options, + }); + } // create new workspace data await MANAGERS[to.name].create({ project, to, logger, options }); - logger.mainStep("Installing dependencies"); if (!options?.skipInstall) { await MANAGERS[to.name].convertLock({ project, to, logger, options }); @@ -74,5 +77,7 @@ export async function convertProject({ } logger.mainStep(`Cleaning up ${project.packageManager} workspaces`); - await MANAGERS[project.packageManager].clean({ project, logger }); + if (project.packageManager !== convertTo.name) { + await MANAGERS[project.packageManager].clean({ project, logger }); + } } diff --git a/packages/turbo-workspaces/src/types.ts b/packages/turbo-workspaces/src/types.ts index 2659c4fb5b1c3..1a65a9f3b26d6 100644 --- a/packages/turbo-workspaces/src/types.ts +++ b/packages/turbo-workspaces/src/types.ts @@ -92,6 +92,7 @@ export interface Options { dry?: boolean; skipInstall?: boolean; interactive?: boolean; + ignoreUnchangedPackageManager?: boolean; } export interface PackageManagerInstallDetails { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 734d562fdc2db..e055d196f0b41 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -873,7 +873,7 @@ importers: specifier: 5.5.4 version: 5.5.4 - turborepo-tests/example-basic: + turborepo-tests/example-basic-npm: dependencies: turborepo-examples: specifier: workspace:* @@ -882,34 +882,7 @@ importers: specifier: workspace:* version: link:../helpers - turborepo-tests/example-design-system: - dependencies: - turborepo-examples: - specifier: workspace:* - version: link:../../examples - turborepo-tests-helpers: - specifier: workspace:* - version: link:../helpers - - turborepo-tests/example-kitchen-sink: - dependencies: - turborepo-examples: - specifier: workspace:* - version: link:../../examples - turborepo-tests-helpers: - specifier: workspace:* - version: link:../helpers - - turborepo-tests/example-non-monorepo: - dependencies: - turborepo-examples: - specifier: workspace:* - version: link:../../examples - turborepo-tests-helpers: - specifier: workspace:* - version: link:../helpers - - turborepo-tests/example-with-berry: + turborepo-tests/example-basic-pnpm: dependencies: turborepo-examples: specifier: workspace:* @@ -918,7 +891,7 @@ importers: specifier: workspace:* version: link:../helpers - turborepo-tests/example-with-changesets: + turborepo-tests/example-basic-yarn: dependencies: turborepo-examples: specifier: workspace:* @@ -927,7 +900,7 @@ importers: specifier: workspace:* version: link:../helpers - turborepo-tests/example-with-npm: + turborepo-tests/example-design-system: dependencies: turborepo-examples: specifier: workspace:* @@ -936,7 +909,7 @@ importers: specifier: workspace:* version: link:../helpers - turborepo-tests/example-with-react-native-web: + turborepo-tests/example-kitchen-sink: dependencies: turborepo-examples: specifier: workspace:* @@ -945,7 +918,7 @@ importers: specifier: workspace:* version: link:../helpers - turborepo-tests/example-with-rollup: + turborepo-tests/example-non-monorepo: dependencies: turborepo-examples: specifier: workspace:* @@ -972,25 +945,11 @@ importers: specifier: workspace:* version: link:../helpers - turborepo-tests/example-with-vite: + turborepo-tests/helpers: dependencies: - turborepo-examples: - specifier: workspace:* - version: link:../../examples - turborepo-tests-helpers: - specifier: workspace:* - version: link:../helpers - - turborepo-tests/example-with-yarn: - dependencies: - turborepo-examples: - specifier: workspace:* - version: link:../../examples - turborepo-tests-helpers: + '@turbo/workspaces': specifier: workspace:* - version: link:../helpers - - turborepo-tests/helpers: {} + version: link:../../packages/turbo-workspaces turborepo-tests/integration: dependencies: @@ -1374,7 +1333,6 @@ packages: /@babel/parser@7.23.6: resolution: {integrity: sha512-Z2uID7YJ7oNvAI20O9X0bblw7Qqs8Q2hFy0R9tAfnfLkp5MW0UH9eUvnDSnFwKZ0AvgS1ucqR4KzvVHgnke1VQ==} engines: {node: '>=6.0.0'} - hasBin: true dependencies: '@babel/types': 7.23.6 dev: true @@ -1382,7 +1340,6 @@ packages: /@babel/parser@7.25.6: resolution: {integrity: sha512-trGdfBdbD0l1ZPmcJ83eNxB9rbEax4ALFTF7fN386TMYbeCQbyme5cOEXQhbGXKebwGaB/J52w1mrklMcbgy6Q==} engines: {node: '>=6.0.0'} - hasBin: true dependencies: '@babel/types': 7.25.6 dev: true @@ -2117,7 +2074,6 @@ packages: /@fastify/busboy@2.1.0: resolution: {integrity: sha512-+KpH+QxZU7O4675t3mnkQKcZZg56u+K/Ct2K+N2AZYNVK8kyeo/bI18tI8aPm3tvNNRyTWfj6s5tnGNlcbQRsA==} engines: {node: '>=14'} - requiresBuild: true dev: false /@humanwhocodes/config-array@0.11.10: @@ -2672,7 +2628,6 @@ packages: /@napi-rs/cli@2.16.3: resolution: {integrity: sha512-3mLNPlbbOhpbIUKicLrJtIearlHXUuXL3UeueYyRRplpVMNkdn8xCyzY6PcYZi3JXR8bmCOiWgkVmLnrSL7DKw==} engines: {node: '>= 10'} - hasBin: true dev: true /@nicolo-ribaudo/eslint-scope-5-internals@5.1.1-v1: @@ -2838,7 +2793,6 @@ packages: /@taplo/cli@0.5.2: resolution: {integrity: sha512-6Sg10lt0fV9aHHWPycz4gzIsUodZihu68zAFZGWq0UDq+Gif2KMrAvNwjMbe+ZUKbnTJjvqJZcPvE4+UEyanAQ==} - hasBin: true dev: true /@tsconfig/node10@1.0.9: @@ -2919,7 +2873,6 @@ packages: /@types/estree@1.0.5: resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} - requiresBuild: true dev: false /@types/fined@1.1.3: @@ -3379,7 +3332,6 @@ packages: /@vercel/ncc@0.36.0: resolution: {integrity: sha512-/ZTUJ/ZkRt694k7KJNimgmHjtQcRuVwsST2Z6XfYveQIuBbHR+EqkTc1jfgPkQmMyk/vtpxo3nVxe8CNuau86A==} - hasBin: true dev: true /@vercel/style-guide@5.1.0(eslint@8.55.0)(prettier@2.8.7)(typescript@5.5.4): @@ -3443,7 +3395,6 @@ packages: /acorn@8.10.0: resolution: {integrity: sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==} engines: {node: '>=0.4.0'} - hasBin: true /agent-base@7.1.0: resolution: {integrity: sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==} @@ -3531,7 +3482,6 @@ packages: /aria-query@5.3.0: resolution: {integrity: sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==} - requiresBuild: true dependencies: dequal: 2.0.3 dev: true @@ -3705,7 +3655,6 @@ packages: /atob@2.1.2: resolution: {integrity: sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==} engines: {node: '>= 4.5.0'} - hasBin: true dev: false /available-typed-arrays@1.0.5: @@ -3915,7 +3864,6 @@ packages: /browserslist@4.22.2: resolution: {integrity: sha512-0UgcrvQmBDvZHFGdYUehrCNIazki7/lUP3kkoi/r3YB2amZbFM9J43ZRkJTXBUZK4gmx56+Sqk9+Vs9mwZx9+A==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} - hasBin: true dependencies: caniuse-lite: 1.0.30001583 electron-to-chromium: 1.4.626 @@ -3926,7 +3874,6 @@ packages: /browserslist@4.23.3: resolution: {integrity: sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} - hasBin: true dependencies: caniuse-lite: 1.0.30001660 electron-to-chromium: 1.5.24 @@ -4282,7 +4229,6 @@ packages: /clone@1.0.4: resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==} engines: {node: '>=0.8'} - requiresBuild: true /co@4.6.0: resolution: {integrity: sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==} @@ -4438,7 +4384,6 @@ packages: /create-jest@29.7.0(@types/node@18.17.4)(ts-node@10.9.2): resolution: {integrity: sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - hasBin: true dependencies: '@jest/types': 29.6.3 chalk: 4.1.2 @@ -4457,7 +4402,6 @@ packages: /create-jest@29.7.0(@types/node@20.5.7): resolution: {integrity: sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - hasBin: true dependencies: '@jest/types': 29.6.3 chalk: 4.1.2 @@ -4479,14 +4423,12 @@ packages: /cross-env@7.0.3: resolution: {integrity: sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==} engines: {node: '>=10.14', npm: '>=6', yarn: '>=1'} - hasBin: true dependencies: cross-spawn: 7.0.3 dev: true /cross-spawn-async@2.2.5: resolution: {integrity: sha512-snteb3aVrxYYOX9e8BabYFK9WhCDhTlw1YQktfTthBogxri4/2r9U2nQc0ffY73ZAxezDc+U8gvHAeU1wy1ubQ==} - deprecated: cross-spawn no longer requires a build toolchain, use it instead dependencies: lru-cache: 4.1.5 which: 1.3.1 @@ -4535,7 +4477,6 @@ packages: /d3-dsv@3.0.1: resolution: {integrity: sha512-UG6OvdI5afDIFP9w4G0mNq50dSOsXHJaRE8arAS5o9ApWnIElp8GZw1Dun8vP8OyHOZ/QJUKUJwxiiCCnUwm+Q==} engines: {node: '>=12'} - hasBin: true dependencies: commander: 7.2.0 iconv-lite: 0.6.3 @@ -4559,7 +4500,6 @@ packages: /d3-geo-projection@4.0.0: resolution: {integrity: sha512-p0bK60CEzph1iqmnxut7d/1kyTmm3UWtPlwdkM31AU+LW+BXazd5zJdoCn7VFxNCHXRngPHRnsNn5uGjLRGndg==} engines: {node: '>=12'} - hasBin: true dependencies: commander: 7.2.0 d3-array: 3.2.4 @@ -4733,7 +4673,6 @@ packages: /defaults@1.0.4: resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==} - requiresBuild: true dependencies: clone: 1.0.4 @@ -4893,7 +4832,6 @@ packages: /direction@2.0.1: resolution: {integrity: sha512-9S6m9Sukh1cZNknO1CWAr2QAWsbKLafQiyM5gZ7VgXHeuaoUwffKN4q6NC4A/Mf9iiPlOXQEKW/Mv/mh9/3YFA==} - hasBin: true dev: false /dirs-next@0.0.1-canary.1: @@ -4938,7 +4876,6 @@ packages: /ejs@3.1.10: resolution: {integrity: sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==} engines: {node: '>=0.10.0'} - hasBin: true dependencies: jake: 10.9.2 dev: true @@ -5457,7 +5394,6 @@ packages: /esbuild@0.14.49: resolution: {integrity: sha512-/TlVHhOaq7Yz8N1OJrjqM3Auzo5wjvHFLk+T8pIue+fhnhIMpfAzsG6PLVMbFveVxqD2WOp3QHei+52IMUNmCw==} engines: {node: '>=12'} - hasBin: true requiresBuild: true optionalDependencies: esbuild-android-64: 0.14.49 @@ -5485,7 +5421,6 @@ packages: /esbuild@0.15.6: resolution: {integrity: sha512-sgLOv3l4xklvXzzczhRwKRotyrfyZ2i1fCS6PTOLPd9wevDPArGU8HFtHrHCOcsMwTjLjzGm15gvC8uxVzQf+w==} engines: {node: '>=12'} - hasBin: true requiresBuild: true optionalDependencies: '@esbuild/linux-loong64': 0.15.6 @@ -5513,7 +5448,6 @@ packages: /esbuild@0.17.18: resolution: {integrity: sha512-z1lix43jBs6UKjcZVKOw2xx69ffE2aG0PygLL5qJ9OS/gy0Ewd1gW/PUQIOIQGXBHWNywSc0floSKoMFF8aK2w==} engines: {node: '>=12'} - hasBin: true requiresBuild: true optionalDependencies: '@esbuild/android-arm': 0.17.18 @@ -5543,7 +5477,6 @@ packages: /esbuild@0.23.1: resolution: {integrity: sha512-VVNz/9Sa0bs5SELtn3f7qhJCDPCF5oMEl5cO9/SSinpE9hbPVvxbd572HH5AKiP7WD8INO53GgfDDhRjkylHEg==} engines: {node: '>=18'} - hasBin: true requiresBuild: true optionalDependencies: '@esbuild/aix-ppc64': 0.23.1 @@ -5598,7 +5531,6 @@ packages: /escodegen@1.14.3: resolution: {integrity: sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==} engines: {node: '>=4.0'} - hasBin: true dependencies: esprima: 4.0.1 estraverse: 4.3.0 @@ -5610,7 +5542,6 @@ packages: /eslint-config-prettier@9.0.0(eslint@8.55.0): resolution: {integrity: sha512-IcJsTkJae2S35pRsRAwoCE+925rJJStOdkKnLVgtE+tEpqU0EVVM7OqrwxqgptKdX29NUwC82I5pXsGFIgSevw==} - hasBin: true peerDependencies: eslint: '>=7.0.0' dependencies: @@ -5899,7 +5830,6 @@ packages: /eslint@8.47.0: resolution: {integrity: sha512-spUQWrdPt+pRVP1TTJLmfRNJJHHZryFmptzcafwSvHsceV81djHOdnEeDmkdotZyLNjDhrOasNK8nikkoG1O8Q==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - hasBin: true dependencies: '@eslint-community/eslint-utils': 4.4.0(eslint@8.47.0) '@eslint-community/regexpp': 4.6.2 @@ -5945,7 +5875,6 @@ packages: /eslint@8.55.0: resolution: {integrity: sha512-iyUUAM0PCKj5QpwGfmCAG9XXbZCWsqP/eWAWrG/W0umvjuLRBECwSFdt+rCntju0xEH7teIABPwXpahftIaTdA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - hasBin: true dependencies: '@eslint-community/eslint-utils': 4.4.0(eslint@8.55.0) '@eslint-community/regexpp': 4.10.0 @@ -6000,7 +5929,6 @@ packages: /esprima@4.0.1: resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} engines: {node: '>=4'} - hasBin: true /esquery@1.5.0: resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==} @@ -6526,7 +6454,6 @@ packages: /glob@10.4.5: resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} - hasBin: true dependencies: foreground-child: 3.3.0 jackspeak: 3.4.3 @@ -6668,7 +6595,6 @@ packages: /graceful-fs@4.2.11: resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} - requiresBuild: true /gradient-string@2.0.1: resolution: {integrity: sha512-+xDOYR2fMa4QHGysTgyQsl8g16mcAKqvvsKI014qYP2XVf1SWUPlD8KhdBJPUM8AVwDUB+ls0NFkqRzAB5URkA==} @@ -6693,7 +6619,6 @@ packages: /handlebars@4.7.7: resolution: {integrity: sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==} engines: {node: '>=0.4.7'} - hasBin: true dependencies: minimist: 1.2.8 neo-async: 2.6.2 @@ -6967,7 +6892,6 @@ packages: /husky@8.0.3: resolution: {integrity: sha512-+dQSyqPh4x1hlO1swXBiNb2HzTDN1I2IGLQx1GrBuiqFJfoMrnZWwVmatvSiO+Iz8fBUnf+lekwNo4c2LlXItg==} engines: {node: '>=14'} - hasBin: true dev: true /iconv-lite@0.4.24: @@ -7009,7 +6933,6 @@ packages: /import-local@3.1.0: resolution: {integrity: sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==} engines: {node: '>=8'} - hasBin: true dependencies: pkg-dir: 4.2.0 resolve-cwd: 3.0.0 @@ -7136,7 +7059,6 @@ packages: /is-accessor-descriptor@0.1.6: resolution: {integrity: sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==} engines: {node: '>=0.10.0'} - deprecated: Please upgrade to v0.1.7 dependencies: kind-of: 3.2.2 dev: false @@ -7144,7 +7066,6 @@ packages: /is-accessor-descriptor@1.0.0: resolution: {integrity: sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==} engines: {node: '>=0.10.0'} - deprecated: Please upgrade to v1.0.1 dependencies: kind-of: 6.0.3 dev: false @@ -7228,7 +7149,6 @@ packages: /is-data-descriptor@0.1.4: resolution: {integrity: sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==} engines: {node: '>=0.10.0'} - deprecated: Please upgrade to v0.1.5 dependencies: kind-of: 3.2.2 dev: false @@ -7236,7 +7156,6 @@ packages: /is-data-descriptor@1.0.0: resolution: {integrity: sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==} engines: {node: '>=0.10.0'} - deprecated: Please upgrade to v1.0.1 dependencies: kind-of: 6.0.3 dev: false @@ -7269,13 +7188,11 @@ packages: /is-docker@2.2.1: resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} engines: {node: '>=8'} - hasBin: true dev: true /is-docker@3.0.0: resolution: {integrity: sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - hasBin: true dev: true /is-extendable@0.1.1: @@ -7339,7 +7256,6 @@ packages: /is-inside-container@1.0.0: resolution: {integrity: sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==} engines: {node: '>=14.16'} - hasBin: true dependencies: is-docker: 3.0.0 dev: true @@ -7630,7 +7546,6 @@ packages: /jake@10.9.2: resolution: {integrity: sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA==} engines: {node: '>=10'} - hasBin: true dependencies: async: 3.2.6 chalk: 4.1.2 @@ -7679,7 +7594,6 @@ packages: /jest-cli@29.7.0(@types/node@18.17.4): resolution: {integrity: sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - hasBin: true peerDependencies: node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 peerDependenciesMeta: @@ -7707,7 +7621,6 @@ packages: /jest-cli@29.7.0(@types/node@18.17.4)(ts-node@10.9.2): resolution: {integrity: sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - hasBin: true peerDependencies: node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 peerDependenciesMeta: @@ -7735,7 +7648,6 @@ packages: /jest-cli@29.7.0(@types/node@20.5.7): resolution: {integrity: sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - hasBin: true peerDependencies: node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 peerDependenciesMeta: @@ -8168,7 +8080,6 @@ packages: /jest@29.7.0(@types/node@18.17.4): resolution: {integrity: sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - hasBin: true peerDependencies: node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 peerDependenciesMeta: @@ -8189,7 +8100,6 @@ packages: /jest@29.7.0(@types/node@18.17.4)(ts-node@10.9.2): resolution: {integrity: sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - hasBin: true peerDependencies: node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 peerDependenciesMeta: @@ -8210,7 +8120,6 @@ packages: /jest@29.7.0(@types/node@20.5.7): resolution: {integrity: sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - hasBin: true peerDependencies: node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 peerDependenciesMeta: @@ -8243,32 +8152,27 @@ packages: /js-yaml@3.14.1: resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} - hasBin: true dependencies: argparse: 1.0.10 esprima: 4.0.1 /js-yaml@4.1.0: resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} - hasBin: true dependencies: argparse: 2.0.1 /jsesc@0.5.0: resolution: {integrity: sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==} - hasBin: true dev: true /jsesc@2.5.2: resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} engines: {node: '>=4'} - hasBin: true dev: true /jsesc@3.0.2: resolution: {integrity: sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==} engines: {node: '>=6'} - hasBin: true dev: true /json-buffer@3.0.1: @@ -8290,7 +8194,6 @@ packages: /json5@1.0.2: resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} - hasBin: true dependencies: minimist: 1.2.8 dev: true @@ -8298,7 +8201,6 @@ packages: /json5@2.2.3: resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} engines: {node: '>=6'} - hasBin: true /jsonc-parser@3.2.0: resolution: {integrity: sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==} @@ -8413,7 +8315,6 @@ packages: /lint-staged@13.1.0: resolution: {integrity: sha512-pn/sR8IrcF/T0vpWLilih8jmVouMlxqXxKuAojmbiGX5n/gDnz+abdPptlj0vYnbfE0SQNl3CY/HwtM0+yfOVQ==} engines: {node: ^14.13.1 || >=16.0.0} - hasBin: true dependencies: cli-truncate: 3.1.0 colorette: 2.0.19 @@ -8519,7 +8420,6 @@ packages: /loose-envify@1.4.0: resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} - hasBin: true dependencies: js-tokens: 4.0.0 dev: true @@ -8938,7 +8838,6 @@ packages: /minipass@3.3.6: resolution: {integrity: sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==} engines: {node: '>=8'} - requiresBuild: true dependencies: yallist: 4.0.0 dev: true @@ -8973,7 +8872,6 @@ packages: /mkdirp@0.5.6: resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} - hasBin: true dependencies: minimist: 1.2.8 dev: false @@ -8981,7 +8879,6 @@ packages: /mkdirp@1.0.4: resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==} engines: {node: '>=10'} - hasBin: true dev: true /ms@2.0.0: @@ -9041,7 +8938,6 @@ packages: /ndjson@2.0.0: resolution: {integrity: sha512-nGl7LRGrzugTtaFcJMhLbpzJM6XdivmbkdlaGcrk/LXg2KL/YBC6z1g70xh0/al+oFuVFP8N8kiWRucmeEH/qQ==} engines: {node: '>=10'} - hasBin: true dependencies: json-stringify-safe: 5.0.1 minimist: 1.2.8 @@ -9621,7 +9517,6 @@ packages: /pidtree@0.6.0: resolution: {integrity: sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==} engines: {node: '>=0.10'} - hasBin: true dev: true /pirates@4.0.5: @@ -9639,7 +9534,6 @@ packages: /plop@3.1.1: resolution: {integrity: sha512-NuctKmuNUACXBQn25bBr5oj/75nHxdKGwjA/+b7cVoj1sp+gTVqcc8eAr4QcNJgMPsZWRJBN2kMkgmsqbqV9gg==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - hasBin: true dependencies: '@types/liftoff': 4.0.0 chalk: 5.3.0 @@ -9703,13 +9597,11 @@ packages: /prettier@2.8.7: resolution: {integrity: sha512-yPngTo3aXUUmyuTjeTUT75txrf+aMh9FiD7q9ZE/i6r0bPb22g4FsE6Y338PQX1bmfy08i9QQCB7/rcUAVntfw==} engines: {node: '>=10.13.0'} - hasBin: true dev: true /prettier@3.3.3: resolution: {integrity: sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==} engines: {node: '>=14'} - hasBin: true dev: true /pretty-format@29.7.0: @@ -9799,7 +9691,6 @@ packages: /rc@1.2.8: resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==} - hasBin: true dependencies: deep-extend: 0.6.0 ini: 1.3.8 @@ -9916,7 +9807,6 @@ packages: /regexp-tree@0.1.27: resolution: {integrity: sha512-iETxpjK6YoRWJG5o6hXLwvjYAoW+FEZn9os0PD/b6AP6xQwsa/Y7lCVgIixBbUPMfhu+i2LtdeAqVTgGlQarfA==} - hasBin: true dev: true /regexp.prototype.flags@1.4.3: @@ -9953,7 +9843,6 @@ packages: /regjsparser@0.10.0: resolution: {integrity: sha512-qx+xQGZVsy55CH0a1hiVwHmqjLryfh7wQyF5HO07XJ9f7dQMY/gPQHhlyDkIzJKC+x2fUCpCcUODUUUFrm7SHA==} - hasBin: true dependencies: jsesc: 0.5.0 dev: true @@ -10043,7 +9932,6 @@ packages: /resolve-url@0.2.1: resolution: {integrity: sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg==} - deprecated: https://github.com/lydell/resolve-url#deprecated dev: false /resolve.exports@2.0.2: @@ -10060,7 +9948,6 @@ packages: /resolve@1.22.1: resolution: {integrity: sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==} - hasBin: true dependencies: is-core-module: 2.11.0 path-parse: 1.0.7 @@ -10069,7 +9956,6 @@ packages: /resolve@1.22.4: resolution: {integrity: sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg==} - hasBin: true dependencies: is-core-module: 2.13.0 path-parse: 1.0.7 @@ -10078,7 +9964,6 @@ packages: /resolve@1.22.8: resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} - hasBin: true dependencies: is-core-module: 2.13.0 path-parse: 1.0.7 @@ -10086,7 +9971,6 @@ packages: /resolve@2.0.0-next.4: resolution: {integrity: sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==} - hasBin: true dependencies: is-core-module: 2.13.0 path-parse: 1.0.7 @@ -10132,7 +10016,6 @@ packages: /rimraf@3.0.2: resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} - hasBin: true dependencies: glob: 7.2.3 @@ -10143,7 +10026,6 @@ packages: /rollup@2.78.0: resolution: {integrity: sha512-4+YfbQC9QEVvKTanHhIAFVUFSRsezvQF8vFOJwtGfb9Bb+r014S+qryr9PSmw8x6sMnPkmFBGAvIFVQxvJxjtg==} engines: {node: '>=10.0.0'} - hasBin: true optionalDependencies: fsevents: 2.3.3 dev: true @@ -10151,7 +10033,6 @@ packages: /rollup@3.21.5: resolution: {integrity: sha512-a4NTKS4u9PusbUJcfF4IMxuqjFzjm6ifj76P54a7cKnvVzJaG12BLVR+hgU2YDGHzyMMQNxLAZWuALsn8q2oQg==} engines: {node: '>=14.18.0', npm: '>=8.0.0'} - hasBin: true optionalDependencies: fsevents: 2.3.3 dev: true @@ -10236,25 +10117,21 @@ packages: /semver@5.7.1: resolution: {integrity: sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==} - hasBin: true dev: true /semver@6.3.1: resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} - hasBin: true dev: true /semver@7.5.0: resolution: {integrity: sha512-+XC0AD/R7Q2mPSRuy2Id0+CGTZ98+8f+KvwirxOKIEyid+XSx6HbC63p+O4IndTHuX5Z+JxQ0TghCkO5Cg/2HA==} engines: {node: '>=10'} - hasBin: true dependencies: lru-cache: 6.0.0 /semver@7.5.4: resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==} engines: {node: '>=10'} - hasBin: true dependencies: lru-cache: 6.0.0 dev: false @@ -10262,12 +10139,10 @@ packages: /semver@7.6.2: resolution: {integrity: sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==} engines: {node: '>=10'} - hasBin: true /semver@7.6.3: resolution: {integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==} engines: {node: '>=10'} - hasBin: true dev: true /sentence-case@2.1.1: @@ -10338,7 +10213,6 @@ packages: /shelljs@0.8.5: resolution: {integrity: sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==} engines: {node: '>=4'} - hasBin: true dependencies: glob: 7.2.3 interpret: 1.4.0 @@ -10481,7 +10355,6 @@ packages: /sort-package-json@2.5.1: resolution: {integrity: sha512-vx/KoZxm8YNMUqdlw7SGTfqR5pqZ/sUfgOuRtDILiOy/3AvzhAibyUe2cY3OpLs3oRSow9up4yLVtQaM24rbDQ==} - hasBin: true dependencies: detect-indent: 7.0.1 detect-newline: 4.0.0 @@ -10494,7 +10367,6 @@ packages: /source-map-resolve@0.5.3: resolution: {integrity: sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==} - deprecated: See https://github.com/lydell/source-map-resolve#deprecated dependencies: atob: 2.1.2 decode-uri-component: 0.2.2 @@ -10512,7 +10384,6 @@ packages: /source-map-url@0.4.1: resolution: {integrity: sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==} - deprecated: See https://github.com/lydell/source-map-url#deprecated dev: false /source-map@0.5.7: @@ -10734,7 +10605,6 @@ packages: /sucrase@3.24.0: resolution: {integrity: sha512-SevqflhW356TKEyWjFHg2e5f3eH+5rzmsMJxrVMDvZIEHh/goYrpzDGA6APEj4ME9MdGm8oNgIzi1eF3c3dDQA==} engines: {node: '>=8'} - hasBin: true dependencies: commander: 4.1.1 glob: 7.1.6 @@ -10915,7 +10785,6 @@ packages: /topojson-client@3.1.0: resolution: {integrity: sha512-605uxS6bcYxGXw9qi62XyrV6Q3xwbndjachmNxu8HWTtVPxZfEJN9fd/SZS1Q54Sn2y0TMyMxFj/cJINqGHrKw==} - hasBin: true dependencies: commander: 2.20.3 dev: false @@ -10932,7 +10801,6 @@ packages: /tree-kill@1.2.2: resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} - hasBin: true dev: true /trim-lines@3.0.1: @@ -10959,7 +10827,6 @@ packages: /ts-jest@29.2.5(@babel/core@7.25.2)(esbuild@0.14.49)(jest@29.7.0)(typescript@5.5.4): resolution: {integrity: sha512-KD8zB2aAZrcKIdGk4OwpJggeLcH1FgrICqDSROWqlnJXGCXK4Mn6FcdK2B6670Xr73lHMG1kHw8R87A0ecZ+vA==} engines: {node: ^14.15.0 || ^16.10.0 || ^18.0.0 || >=20.0.0} - hasBin: true peerDependencies: '@babel/core': '>=7.0.0-beta.0 <8' '@jest/transform': ^29.0.0 @@ -10998,7 +10865,6 @@ packages: /ts-jest@29.2.5(@babel/core@7.25.2)(esbuild@0.15.6)(jest@29.7.0)(typescript@5.5.4): resolution: {integrity: sha512-KD8zB2aAZrcKIdGk4OwpJggeLcH1FgrICqDSROWqlnJXGCXK4Mn6FcdK2B6670Xr73lHMG1kHw8R87A0ecZ+vA==} engines: {node: ^14.15.0 || ^16.10.0 || ^18.0.0 || >=20.0.0} - hasBin: true peerDependencies: '@babel/core': '>=7.0.0-beta.0 <8' '@jest/transform': ^29.0.0 @@ -11037,7 +10903,6 @@ packages: /ts-jest@29.2.5(@babel/core@7.25.2)(esbuild@0.17.18)(jest@29.7.0)(typescript@5.5.4): resolution: {integrity: sha512-KD8zB2aAZrcKIdGk4OwpJggeLcH1FgrICqDSROWqlnJXGCXK4Mn6FcdK2B6670Xr73lHMG1kHw8R87A0ecZ+vA==} engines: {node: ^14.15.0 || ^16.10.0 || ^18.0.0 || >=20.0.0} - hasBin: true peerDependencies: '@babel/core': '>=7.0.0-beta.0 <8' '@jest/transform': ^29.0.0 @@ -11076,7 +10941,6 @@ packages: /ts-json-schema-generator@2.3.0: resolution: {integrity: sha512-t4lBQAwZc0sOJq9LJt3NgbznIcslVnm0JeEMFq8qIRklpMRY8jlYD0YmnRWbqBKANxkby91P1XanSSlSOFpUmg==} engines: {node: '>=18.0.0'} - hasBin: true dependencies: '@types/json-schema': 7.0.15 commander: 12.1.0 @@ -11090,7 +10954,6 @@ packages: /ts-node@10.9.2(@types/node@18.17.4)(typescript@5.5.4): resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==} - hasBin: true peerDependencies: '@swc/core': '>=1.2.50' '@swc/wasm': '>=1.2.50' @@ -11132,14 +10995,12 @@ packages: /tslib@2.6.1: resolution: {integrity: sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==} - requiresBuild: true /tslib@2.6.3: resolution: {integrity: sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==} /tsup@5.12.9(typescript@5.5.4): resolution: {integrity: sha512-dUpuouWZYe40lLufo64qEhDpIDsWhRbr2expv5dHEMjwqeKJS2aXA/FPqs1dxO4T6mBojo7rvo3jP9NNzaKyDg==} - hasBin: true peerDependencies: '@swc/core': ^1 postcss: ^8.4.12 @@ -11175,7 +11036,6 @@ packages: /tsup@6.7.0(ts-node@10.9.2)(typescript@5.5.4): resolution: {integrity: sha512-L3o8hGkaHnu5TdJns+mCqFsDBo83bJ44rlK7e6VdanIvpea4ArPcU3swWGsLVbXak1PqQx/V+SSmFPujBK+zEQ==} engines: {node: '>=14.18'} - hasBin: true peerDependencies: '@swc/core': ^1 postcss: ^8.4.12 @@ -11221,7 +11081,6 @@ packages: /tsx@4.19.1: resolution: {integrity: sha512-0flMz1lh74BR4wOvBjuh9olbnwqCPc35OOlfyzHba0Dc+QNUeWX/Gq2YTbnwcWPO3BMd8fkzRVrHcsR+a7z7rA==} engines: {node: '>=18.0.0'} - hasBin: true dependencies: esbuild: 0.23.1 get-tsconfig: 4.7.6 @@ -11284,7 +11143,6 @@ packages: /turbo@2.3.3: resolution: {integrity: sha512-DUHWQAcC8BTiUZDRzAYGvpSpGLiaOQPfYXlCieQbwUvmml/LRGIe3raKdrOPOoiX0DYlzxs2nH6BoWJoZrj8hA==} - hasBin: true optionalDependencies: turbo-darwin-64: 2.3.3 turbo-darwin-arm64: 2.3.3 @@ -11371,12 +11229,10 @@ packages: /typescript@5.5.4: resolution: {integrity: sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==} engines: {node: '>=14.17'} - hasBin: true /uglify-js@3.17.4: resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==} engines: {node: '>=0.8.0'} - hasBin: true requiresBuild: true optional: true @@ -11490,7 +11346,6 @@ packages: /update-browserslist-db@1.0.13(browserslist@4.22.2): resolution: {integrity: sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==} - hasBin: true peerDependencies: browserslist: '>= 4.21.0' dependencies: @@ -11501,7 +11356,6 @@ packages: /update-browserslist-db@1.1.0(browserslist@4.23.3): resolution: {integrity: sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==} - hasBin: true peerDependencies: browserslist: '>= 4.21.0' dependencies: @@ -11546,7 +11400,6 @@ packages: /urix@0.1.0: resolution: {integrity: sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg==} - deprecated: Please see https://github.com/lydell/urix#deprecated dev: false /use@3.1.1: @@ -11559,7 +11412,6 @@ packages: /uuid@8.3.2: resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} - hasBin: true dev: false /v8-compile-cache-lib@3.0.1: @@ -11941,8 +11793,6 @@ packages: /vm2@3.9.19: resolution: {integrity: sha512-J637XF0DHDMV57R6JyVsTak7nIL8gy5KH4r1HiwWLf/4GBbb5MKL5y7LpmF4A8E2nR6XmzpmMFQ7V7ppPTmUQg==} engines: {node: '>=6.0'} - deprecated: The library contains critical security issues and should not be used for production! The maintenance of the project has been discontinued. Consider migrating your code to isolated-vm. - hasBin: true dependencies: acorn: 8.10.0 acorn-walk: 8.2.0 @@ -12061,14 +11911,12 @@ packages: /which@1.3.1: resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==} - hasBin: true dependencies: isexe: 2.0.0 /which@2.0.2: resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} engines: {node: '>= 8'} - hasBin: true dependencies: isexe: 2.0.0 diff --git a/turborepo-tests/README.md b/turborepo-tests/README.md index 3160f8b49660d..891fdb8210232 100644 --- a/turborepo-tests/README.md +++ b/turborepo-tests/README.md @@ -27,7 +27,3 @@ To create a test for a new example: 3. Run `pnpm install` for the repository so the new package is added to the workspace. 4. Edit the `test` script to path to the directory you are interested in and use the package manager for that example. 5. Run `turbo test --filter="@turborepo-examples-tests/*"` in your terminal to make sure all is well! - -### Limitations - -We currently do not test the examples that use Docker. We may choose to do this in the future. diff --git a/turborepo-tests/example-with-npm/package.json b/turborepo-tests/example-basic-npm/package.json similarity index 72% rename from turborepo-tests/example-with-npm/package.json rename to turborepo-tests/example-basic-npm/package.json index 36f5237959317..4b1a0832dcf6b 100644 --- a/turborepo-tests/example-with-npm/package.json +++ b/turborepo-tests/example-basic-npm/package.json @@ -1,7 +1,7 @@ { - "name": "@turborepo-examples-tests/with-npm", + "name": "@turborepo-examples-tests/basic-npm", "scripts": { - "test": "bash ./node_modules/turborepo-tests-helpers/setup_example_test.sh with-npm npm" + "test": "bash ./node_modules/turborepo-tests-helpers/setup_example_test.sh basic npm" }, "dependencies": { "turborepo-tests-helpers": "workspace:*", diff --git a/turborepo-tests/example-basic/turbo.json b/turborepo-tests/example-basic-npm/turbo.json similarity index 100% rename from turborepo-tests/example-basic/turbo.json rename to turborepo-tests/example-basic-npm/turbo.json diff --git a/turborepo-tests/example-basic/package.json b/turborepo-tests/example-basic-pnpm/package.json similarity index 81% rename from turborepo-tests/example-basic/package.json rename to turborepo-tests/example-basic-pnpm/package.json index 8bf25bec75025..2a98e0af816ce 100644 --- a/turborepo-tests/example-basic/package.json +++ b/turborepo-tests/example-basic-pnpm/package.json @@ -1,5 +1,5 @@ { - "name": "@turborepo-examples-tests/basic", + "name": "@turborepo-examples-tests/basic-pnpm", "scripts": { "test": "bash ./node_modules/turborepo-tests-helpers/setup_example_test.sh basic pnpm" }, diff --git a/turborepo-tests/example-with-berry/turbo.json b/turborepo-tests/example-basic-pnpm/turbo.json similarity index 100% rename from turborepo-tests/example-with-berry/turbo.json rename to turborepo-tests/example-basic-pnpm/turbo.json diff --git a/turborepo-tests/example-with-yarn/package.json b/turborepo-tests/example-basic-yarn/package.json similarity index 71% rename from turborepo-tests/example-with-yarn/package.json rename to turborepo-tests/example-basic-yarn/package.json index be671cba0c7e9..09375d5351b7e 100644 --- a/turborepo-tests/example-with-yarn/package.json +++ b/turborepo-tests/example-basic-yarn/package.json @@ -1,7 +1,7 @@ { - "name": "@turborepo-examples-tests/with-yarn", + "name": "@turborepo-examples-tests/basic-yarn", "scripts": { - "test": "bash ./node_modules/turborepo-tests-helpers/setup_example_test.sh with-yarn yarn" + "test": "bash ./node_modules/turborepo-tests-helpers/setup_example_test.sh basic yarn" }, "dependencies": { "turborepo-tests-helpers": "workspace:*", diff --git a/turborepo-tests/example-with-changesets/turbo.json b/turborepo-tests/example-basic-yarn/turbo.json similarity index 100% rename from turborepo-tests/example-with-changesets/turbo.json rename to turborepo-tests/example-basic-yarn/turbo.json diff --git a/turborepo-tests/example-with-berry/package.json b/turborepo-tests/example-with-berry/package.json deleted file mode 100644 index e2ec59eeffbc7..0000000000000 --- a/turborepo-tests/example-with-berry/package.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "name": "@turborepo-examples-tests/with-berry", - "scripts": { - "test": "bash ./node_modules/turborepo-tests-helpers/setup_example_test.sh with-berry yarn" - }, - "dependencies": { - "turborepo-tests-helpers": "workspace:*", - "turborepo-examples": "workspace:*" - } -} diff --git a/turborepo-tests/example-with-changesets/package.json b/turborepo-tests/example-with-changesets/package.json deleted file mode 100644 index 1c2f63ec4931e..0000000000000 --- a/turborepo-tests/example-with-changesets/package.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "name": "@turborepo-examples-tests/with-changesets", - "scripts": { - "test": "bash ./node_modules/turborepo-tests-helpers/setup_example_test.sh with-changesets pnpm" - }, - "dependencies": { - "turborepo-tests-helpers": "workspace:*", - "turborepo-examples": "workspace:*" - } -} diff --git a/turborepo-tests/example-with-npm/turbo.json b/turborepo-tests/example-with-npm/turbo.json deleted file mode 100644 index f6527d7b7dfca..0000000000000 --- a/turborepo-tests/example-with-npm/turbo.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "extends": ["//"], - "tasks": { - "test": { - "outputs": [] - } - } -} diff --git a/turborepo-tests/example-with-react-native-web/package.json b/turborepo-tests/example-with-react-native-web/package.json deleted file mode 100644 index fb46143e5814d..0000000000000 --- a/turborepo-tests/example-with-react-native-web/package.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "name": "@turborepo-examples-tests/with-react-native-web", - "scripts": { - "test": "bash ./node_modules/turborepo-tests-helpers/setup_example_test.sh with-react-native-web yarn" - }, - "dependencies": { - "turborepo-tests-helpers": "workspace:*", - "turborepo-examples": "workspace:*" - } -} diff --git a/turborepo-tests/example-with-react-native-web/turbo.json b/turborepo-tests/example-with-react-native-web/turbo.json deleted file mode 100644 index f6527d7b7dfca..0000000000000 --- a/turborepo-tests/example-with-react-native-web/turbo.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "extends": ["//"], - "tasks": { - "test": { - "outputs": [] - } - } -} diff --git a/turborepo-tests/example-with-rollup/package.json b/turborepo-tests/example-with-rollup/package.json deleted file mode 100644 index b1f6ab366526c..0000000000000 --- a/turborepo-tests/example-with-rollup/package.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "name": "@turborepo-examples-tests/with-rollup", - "scripts": { - "test": "bash ./node_modules/turborepo-tests-helpers/setup_example_test.sh with-rollup pnpm" - }, - "dependencies": { - "turborepo-tests-helpers": "workspace:*", - "turborepo-examples": "workspace:*" - } -} diff --git a/turborepo-tests/example-with-rollup/turbo.json b/turborepo-tests/example-with-rollup/turbo.json deleted file mode 100644 index f6527d7b7dfca..0000000000000 --- a/turborepo-tests/example-with-rollup/turbo.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "extends": ["//"], - "tasks": { - "test": { - "outputs": [] - } - } -} diff --git a/turborepo-tests/example-with-svelte/package.json b/turborepo-tests/example-with-svelte/package.json index dab71eaa6fe1a..b3219c9f96dad 100644 --- a/turborepo-tests/example-with-svelte/package.json +++ b/turborepo-tests/example-with-svelte/package.json @@ -1,7 +1,7 @@ { "name": "@turborepo-examples-tests/with-svelte", "scripts": { - "test": "bash ./node_modules/turborepo-tests-helpers/setup_example_test.sh with-svelte pnpm" + "test": "bash ./node_modules/turborepo-tests-helpers/setup_example_test.sh with-svelte npm" }, "dependencies": { "turborepo-tests-helpers": "workspace:*", diff --git a/turborepo-tests/example-with-vite/package.json b/turborepo-tests/example-with-vite/package.json deleted file mode 100644 index bc22f2cda27bf..0000000000000 --- a/turborepo-tests/example-with-vite/package.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "name": "@turborepo-examples-tests/with-vite", - "scripts": { - "test": "bash ./node_modules/turborepo-tests-helpers/setup_example_test.sh with-vite pnpm" - }, - "dependencies": { - "turborepo-tests-helpers": "workspace:*", - "turborepo-examples": "workspace:*" - } -} diff --git a/turborepo-tests/example-with-vite/turbo.json b/turborepo-tests/example-with-vite/turbo.json deleted file mode 100644 index f6527d7b7dfca..0000000000000 --- a/turborepo-tests/example-with-vite/turbo.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "extends": ["//"], - "tasks": { - "test": { - "outputs": [] - } - } -} diff --git a/turborepo-tests/example-with-yarn/turbo.json b/turborepo-tests/example-with-yarn/turbo.json deleted file mode 100644 index f6527d7b7dfca..0000000000000 --- a/turborepo-tests/example-with-yarn/turbo.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "extends": ["//"], - "tasks": { - "test": { - "outputs": [] - } - } -} diff --git a/turborepo-tests/helpers/package.json b/turborepo-tests/helpers/package.json index a9925e7ad2b26..8d36bd73f3501 100644 --- a/turborepo-tests/helpers/package.json +++ b/turborepo-tests/helpers/package.json @@ -1,3 +1,9 @@ { - "name": "turborepo-tests-helpers" + "name": "turborepo-tests-helpers", + "scripts": { + "test": "" + }, + "dependencies": { + "@turbo/workspaces": "workspace:*" + } } diff --git a/turborepo-tests/helpers/setup_example_test.sh b/turborepo-tests/helpers/setup_example_test.sh index 9ce2a31930165..fd8104b53852e 100644 --- a/turborepo-tests/helpers/setup_example_test.sh +++ b/turborepo-tests/helpers/setup_example_test.sh @@ -19,13 +19,15 @@ if [ -z "$package_manager" ]; then exit 1 fi +echo "node --version: $(node --version)" + # Use the right command for each package manager if [ "$package_manager" == "npm" ]; then - package_manager_command="npm install" + package_manager_command="node ../../../packages/turbo-workspaces/dist/cli.js convert . npm --ignore-unchanged-package-manager && npm install" elif [ "$package_manager" == "pnpm" ]; then - package_manager_command="pnpm install" + package_manager_command="node ../../../packages/turbo-workspaces/dist/cli.js convert . pnpm --ignore-unchanged-package-manager && pnpm install" elif [ "$package_manager" == "yarn" ]; then - package_manager_command="yarn" + package_manager_command="node ../../../packages/turbo-workspaces/dist/cli.js convert . yarn --ignore-unchanged-package-manager && yarn" fi # All examples implement these two tasks @@ -37,27 +39,27 @@ mkdir -p ../../examples-tests-tmp cd ../../examples-tests-tmp # Start up a fresh directory for the test -rm -rf "$example_path" || true +rm -rf "$example_path-$package_manager" || true rsync -avq \ ---exclude='node_modules' \ ---exclude="dist" \ ---exclude=".turbo" \ ---exclude=".expo" \ ---exclude=".cache" \ ---exclude=".next" \ -"../examples/$example_path" "." + --exclude='node_modules' \ + --exclude="dist" \ + --exclude=".turbo" \ + --exclude=".expo" \ + --exclude=".cache" \ + --exclude=".next" \ + "../examples/$example_path" "$example_path-$package_manager" -cd "$example_path" -"../../turborepo-tests/helpers/setup_git.sh" . +cd "$example_path-$package_manager/$example_path" +"../../../turborepo-tests/helpers/setup_git.sh" . # Make /tmp dir for writing dump logs mkdir -p ./tmp -echo "/tmp/" >> ".gitignore" +echo "/tmp/" >>".gitignore" + +$package_manager_command # Simulating the user's first run and dumping logs to a file -$package_manager --version >./tmp/package_manager_version.txt -$package_manager_command >./tmp/install.txt 2>&1 -$turbo_command >./tmp/run-1.txt +$turbo_command >>./tmp/run-1.txt 2>&1 # We don't want to hit cache on first run because we're acting like a user. # A user would never hit cache on first run. Why should we? @@ -69,8 +71,8 @@ if grep -q ">>> FULL TURBO" ./tmp/run-1.txt; then exit 1 fi -# Simulating the user's second run -$turbo_command >./tmp/run-2.txt +# Simulating the user's second run and dumping logs to a file +$turbo_command >>./tmp/run-2.txt 2>&1 # Make sure the user hits FULL TURBO on the second go if ! grep -q ">>> FULL TURBO" ./tmp/run-2.txt; then diff --git a/turborepo-tests/helpers/turbo.json b/turborepo-tests/helpers/turbo.json index 8d0c92396cf83..ffadf844931f1 100644 --- a/turborepo-tests/helpers/turbo.json +++ b/turborepo-tests/helpers/turbo.json @@ -3,6 +3,9 @@ "tasks": { // This needs to exist because upstream packages depend on it and // it's not defined at the root level. - "topo": {} + "topo": {}, + "test": { + "dependsOn": ["^build"] + } } }