From 8375d858cb4f8469bad7b0c6acde4fb85d196006 Mon Sep 17 00:00:00 2001 From: js Date: Wed, 8 Mar 2023 16:07:18 +0000 Subject: [PATCH 1/3] fix: use find-up to find correct package manager in mono repo --- packages/schema/package.json | 1 + packages/schema/src/utils/pkg-utils.ts | 22 ++++++++++---- pnpm-lock.yaml | 41 ++++++++++++++++++++++++++ 3 files changed, 58 insertions(+), 6 deletions(-) diff --git a/packages/schema/package.json b/packages/schema/package.json index e0053b6c4..f0bf61a4a 100644 --- a/packages/schema/package.json +++ b/packages/schema/package.json @@ -90,6 +90,7 @@ "colors": "1.4.0", "commander": "^8.3.0", "cuid": "^2.1.8", + "find-up": "^6.3.0", "langium": "1.0.1", "mixpanel": "^0.17.0", "node-machine-id": "^1.1.12", diff --git a/packages/schema/src/utils/pkg-utils.ts b/packages/schema/src/utils/pkg-utils.ts index dedef31d7..641b3e0cd 100644 --- a/packages/schema/src/utils/pkg-utils.ts +++ b/packages/schema/src/utils/pkg-utils.ts @@ -1,17 +1,27 @@ -import fs from 'fs'; import path from 'path'; import { execSync } from './exec-utils'; +import findUp from 'find-up'; export type PackageManagers = 'npm' | 'yarn' | 'pnpm'; function getPackageManager(projectPath = '.'): PackageManagers { - if (fs.existsSync(path.join(projectPath, 'yarn.lock'))) { - return 'yarn'; - } else if (fs.existsSync(path.join(projectPath, 'pnpm-lock.yaml'))) { - return 'pnpm'; - } else { + const lockFile = findUp.findUpSync(['yarn.lock', 'pnpm-lock.yaml', 'package-lock.json'], { + cwd: projectPath, + }); + + if (!lockFile) { + // default use npm return 'npm'; } + + switch (path.basename(lockFile)) { + case 'yarn.lock': + return 'yarn'; + case 'pnpm-lock.yaml': + return 'pnpm'; + default: + return 'npm'; + } } export function installPackage( diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index dc51f8f7a..b9c19466f 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -195,6 +195,7 @@ importers: esbuild: ^0.15.12 eslint: ^8.27.0 eslint-plugin-jest: ^27.1.7 + find-up: ^6.3.0 jest: ^29.2.1 langium: 1.0.1 langium-cli: ^1.0.0 @@ -234,6 +235,7 @@ importers: colors: 1.4.0 commander: 8.3.0 cuid: 2.1.8 + find-up: 6.3.0 langium: 1.0.1 mixpanel: 0.17.0 node-machine-id: 1.1.12 @@ -4828,6 +4830,14 @@ packages: locate-path: 6.0.0 path-exists: 4.0.0 + /find-up/6.3.0: + resolution: {integrity: sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dependencies: + locate-path: 7.2.0 + path-exists: 5.0.0 + dev: false + /find-yarn-workspace-root2/1.2.16: resolution: {integrity: sha512-hr6hb1w8ePMpPVUK39S4RlwJzi+xPLuVuG8XlwXU3KD5Yn3qgBWVfy3AzNlDhWvE1EORCE65/Qm26rFQt3VLVA==} dependencies: @@ -7179,6 +7189,13 @@ packages: dependencies: p-locate: 5.0.0 + /locate-path/7.2.0: + resolution: {integrity: sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dependencies: + p-locate: 6.0.0 + dev: false + /lodash.camelcase/4.3.0: resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==} dev: true @@ -7658,6 +7675,13 @@ packages: dependencies: yocto-queue: 0.1.0 + /p-limit/4.0.0: + resolution: {integrity: sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dependencies: + yocto-queue: 1.0.0 + dev: false + /p-locate/4.1.0: resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} engines: {node: '>=8'} @@ -7670,6 +7694,13 @@ packages: dependencies: p-limit: 3.1.0 + /p-locate/6.0.0: + resolution: {integrity: sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dependencies: + p-limit: 4.0.0 + dev: false + /p-map/2.1.0: resolution: {integrity: sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==} engines: {node: '>=6'} @@ -7757,6 +7788,11 @@ packages: resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} engines: {node: '>=8'} + /path-exists/5.0.0: + resolution: {integrity: sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dev: false + /path-is-absolute/1.0.1: resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} engines: {node: '>=0.10.0'} @@ -9517,6 +9553,11 @@ packages: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} + /yocto-queue/1.0.0: + resolution: {integrity: sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==} + engines: {node: '>=12.20'} + dev: false + /zip-stream/4.1.0: resolution: {integrity: sha512-zshzwQW7gG7hjpBlgeQP9RuyPGNxvJdzR8SUM3QhxCnLjWN2E7j3dOvpeDcQoETfHx0urRS7EtmVToql7YpU4A==} engines: {node: '>= 10'} From 60f9137fe05589b49e65b9bc7aefeaf566e7b67e Mon Sep 17 00:00:00 2001 From: js Date: Wed, 8 Mar 2023 16:34:48 +0000 Subject: [PATCH 2/3] fix test error --- packages/schema/src/utils/pkg-utils.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/schema/src/utils/pkg-utils.ts b/packages/schema/src/utils/pkg-utils.ts index 641b3e0cd..defd469da 100644 --- a/packages/schema/src/utils/pkg-utils.ts +++ b/packages/schema/src/utils/pkg-utils.ts @@ -1,11 +1,11 @@ import path from 'path'; import { execSync } from './exec-utils'; -import findUp from 'find-up'; +import { findUpSync } from 'find-up'; export type PackageManagers = 'npm' | 'yarn' | 'pnpm'; function getPackageManager(projectPath = '.'): PackageManagers { - const lockFile = findUp.findUpSync(['yarn.lock', 'pnpm-lock.yaml', 'package-lock.json'], { + const lockFile = findUpSync(['yarn.lock', 'pnpm-lock.yaml', 'package-lock.json'], { cwd: projectPath, }); From f9f4b34b5b0360edf95901db7c383f0d27be1a2b Mon Sep 17 00:00:00 2001 From: js Date: Wed, 8 Mar 2023 17:51:14 +0000 Subject: [PATCH 3/3] Remove dependency of find-up --- packages/schema/package.json | 1 - packages/schema/src/utils/pkg-utils.ts | 20 +++++++++---- pnpm-lock.yaml | 41 -------------------------- 3 files changed, 15 insertions(+), 47 deletions(-) diff --git a/packages/schema/package.json b/packages/schema/package.json index f0bf61a4a..e0053b6c4 100644 --- a/packages/schema/package.json +++ b/packages/schema/package.json @@ -90,7 +90,6 @@ "colors": "1.4.0", "commander": "^8.3.0", "cuid": "^2.1.8", - "find-up": "^6.3.0", "langium": "1.0.1", "mixpanel": "^0.17.0", "node-machine-id": "^1.1.12", diff --git a/packages/schema/src/utils/pkg-utils.ts b/packages/schema/src/utils/pkg-utils.ts index defd469da..84b8d4553 100644 --- a/packages/schema/src/utils/pkg-utils.ts +++ b/packages/schema/src/utils/pkg-utils.ts @@ -1,13 +1,24 @@ +import fs from 'fs'; import path from 'path'; import { execSync } from './exec-utils'; -import { findUpSync } from 'find-up'; export type PackageManagers = 'npm' | 'yarn' | 'pnpm'; +function findUp(names: string[], cwd: string): string | undefined { + let dir = cwd; + // eslint-disable-next-line no-constant-condition + while (true) { + const target = names.find((name) => fs.existsSync(path.join(dir, name))); + if (target) return target; + + const up = path.resolve(dir, '..'); + if (up === dir) return undefined; // it'll fail anyway + dir = up; + } +} + function getPackageManager(projectPath = '.'): PackageManagers { - const lockFile = findUpSync(['yarn.lock', 'pnpm-lock.yaml', 'package-lock.json'], { - cwd: projectPath, - }); + const lockFile = findUp(['yarn.lock', 'pnpm-lock.yaml', 'package-lock.json'], projectPath); if (!lockFile) { // default use npm @@ -23,7 +34,6 @@ function getPackageManager(projectPath = '.'): PackageManagers { return 'npm'; } } - export function installPackage( pkg: string, dev: boolean, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b9c19466f..dc51f8f7a 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -195,7 +195,6 @@ importers: esbuild: ^0.15.12 eslint: ^8.27.0 eslint-plugin-jest: ^27.1.7 - find-up: ^6.3.0 jest: ^29.2.1 langium: 1.0.1 langium-cli: ^1.0.0 @@ -235,7 +234,6 @@ importers: colors: 1.4.0 commander: 8.3.0 cuid: 2.1.8 - find-up: 6.3.0 langium: 1.0.1 mixpanel: 0.17.0 node-machine-id: 1.1.12 @@ -4830,14 +4828,6 @@ packages: locate-path: 6.0.0 path-exists: 4.0.0 - /find-up/6.3.0: - resolution: {integrity: sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - dependencies: - locate-path: 7.2.0 - path-exists: 5.0.0 - dev: false - /find-yarn-workspace-root2/1.2.16: resolution: {integrity: sha512-hr6hb1w8ePMpPVUK39S4RlwJzi+xPLuVuG8XlwXU3KD5Yn3qgBWVfy3AzNlDhWvE1EORCE65/Qm26rFQt3VLVA==} dependencies: @@ -7189,13 +7179,6 @@ packages: dependencies: p-locate: 5.0.0 - /locate-path/7.2.0: - resolution: {integrity: sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - dependencies: - p-locate: 6.0.0 - dev: false - /lodash.camelcase/4.3.0: resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==} dev: true @@ -7675,13 +7658,6 @@ packages: dependencies: yocto-queue: 0.1.0 - /p-limit/4.0.0: - resolution: {integrity: sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - dependencies: - yocto-queue: 1.0.0 - dev: false - /p-locate/4.1.0: resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} engines: {node: '>=8'} @@ -7694,13 +7670,6 @@ packages: dependencies: p-limit: 3.1.0 - /p-locate/6.0.0: - resolution: {integrity: sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - dependencies: - p-limit: 4.0.0 - dev: false - /p-map/2.1.0: resolution: {integrity: sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==} engines: {node: '>=6'} @@ -7788,11 +7757,6 @@ packages: resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} engines: {node: '>=8'} - /path-exists/5.0.0: - resolution: {integrity: sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - dev: false - /path-is-absolute/1.0.1: resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} engines: {node: '>=0.10.0'} @@ -9553,11 +9517,6 @@ packages: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} - /yocto-queue/1.0.0: - resolution: {integrity: sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==} - engines: {node: '>=12.20'} - dev: false - /zip-stream/4.1.0: resolution: {integrity: sha512-zshzwQW7gG7hjpBlgeQP9RuyPGNxvJdzR8SUM3QhxCnLjWN2E7j3dOvpeDcQoETfHx0urRS7EtmVToql7YpU4A==} engines: {node: '>= 10'}