From 489c3631f21a5819fb3fe1d3956d6a494ac21079 Mon Sep 17 00:00:00 2001 From: Marvin <272077995@qq.com> Date: Tue, 22 Nov 2022 15:45:53 +0000 Subject: [PATCH 1/3] feat(@angular-devkit/schematics-cli): auto detect package manager --- .../schematics_cli/bin/schematics.ts | 41 +++++++++++++++++++ 1 file changed, 41 insertions(+) diff --git a/packages/angular_devkit/schematics_cli/bin/schematics.ts b/packages/angular_devkit/schematics_cli/bin/schematics.ts index af29ca118811..6715e802a106 100644 --- a/packages/angular_devkit/schematics_cli/bin/schematics.ts +++ b/packages/angular_devkit/schematics_cli/bin/schematics.ts @@ -16,6 +16,8 @@ import { NodeWorkflow } from '@angular-devkit/schematics/tools'; import * as ansiColors from 'ansi-colors'; import * as inquirer from 'inquirer'; import yargsParser, { camelCase, decamelize } from 'yargs-parser'; +import {existsSync} from 'fs' +import * as path from 'path'; /** * Parse the name of schematic passed in argument, and return a {collection, schematic} named @@ -108,6 +110,44 @@ function _createPromptProvider(): schema.PromptProvider { }; } +function findUp(names: string | string[], from: string) { + if (!Array.isArray(names)) { + names = [names]; + } + const root = path.parse(from).root; + + let currentDir = from; + while (currentDir && currentDir !== root) { + for (const name of names) { + const p = path.join(currentDir, name); + if (existsSync(p)) { + return p; + } + } + + currentDir = path.dirname(currentDir); + } + + return null; +} + +/** + * return package manager' name by lock file + */ + function getPackageManagerName() { + // order by check priority + const LOCKS: Record = { + 'package-lock.json': 'npm', + 'yarn.lock': 'yarn', + 'pnpm-lock.yaml': 'pnpm', + } + const lockPath = findUp(Object.keys(LOCKS), process.cwd()) + if (lockPath) { + return LOCKS[path.basename(lockPath)] + } + return 'npm' +} + // eslint-disable-next-line max-lines-per-function export async function main({ args, @@ -155,6 +195,7 @@ export async function main({ dryRun, resolvePaths: [process.cwd(), __dirname], schemaValidation: true, + packageManager: getPackageManagerName() }); /** If the user wants to list schematics, we simply show all the schematic names. */ From 701959e61b4bd4183f6986a6c9f466dae09b9176 Mon Sep 17 00:00:00 2001 From: Marvin <272077995@qq.com> Date: Tue, 22 Nov 2022 16:48:32 +0000 Subject: [PATCH 2/3] refactor(@angular-devkit/schematics-cli): code formatting --- .../schematics_cli/bin/schematics.ts | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/packages/angular_devkit/schematics_cli/bin/schematics.ts b/packages/angular_devkit/schematics_cli/bin/schematics.ts index 6715e802a106..1ce462dbb751 100644 --- a/packages/angular_devkit/schematics_cli/bin/schematics.ts +++ b/packages/angular_devkit/schematics_cli/bin/schematics.ts @@ -16,7 +16,7 @@ import { NodeWorkflow } from '@angular-devkit/schematics/tools'; import * as ansiColors from 'ansi-colors'; import * as inquirer from 'inquirer'; import yargsParser, { camelCase, decamelize } from 'yargs-parser'; -import {existsSync} from 'fs' +import { existsSync } from 'fs'; import * as path from 'path'; /** @@ -134,18 +134,18 @@ function findUp(names: string | string[], from: string) { /** * return package manager' name by lock file */ - function getPackageManagerName() { +function getPackageManagerName() { // order by check priority const LOCKS: Record = { 'package-lock.json': 'npm', 'yarn.lock': 'yarn', 'pnpm-lock.yaml': 'pnpm', - } - const lockPath = findUp(Object.keys(LOCKS), process.cwd()) + }; + const lockPath = findUp(Object.keys(LOCKS), process.cwd()); if (lockPath) { - return LOCKS[path.basename(lockPath)] + return LOCKS[path.basename(lockPath)]; } - return 'npm' + return 'npm'; } // eslint-disable-next-line max-lines-per-function @@ -195,7 +195,7 @@ export async function main({ dryRun, resolvePaths: [process.cwd(), __dirname], schemaValidation: true, - packageManager: getPackageManagerName() + packageManager: getPackageManagerName(), }); /** If the user wants to list schematics, we simply show all the schematic names. */ From 681b2e226e8b86888f997e5499d8849a0abd3521 Mon Sep 17 00:00:00 2001 From: Marvin <272077995@qq.com> Date: Tue, 22 Nov 2022 17:04:09 +0000 Subject: [PATCH 3/3] refactor(@angular-devkit/schematics-cli): linting --- packages/angular_devkit/schematics_cli/bin/schematics.ts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/packages/angular_devkit/schematics_cli/bin/schematics.ts b/packages/angular_devkit/schematics_cli/bin/schematics.ts index 1ce462dbb751..ea5a03ed6ba0 100644 --- a/packages/angular_devkit/schematics_cli/bin/schematics.ts +++ b/packages/angular_devkit/schematics_cli/bin/schematics.ts @@ -14,10 +14,10 @@ import { ProcessOutput, createConsoleLogger } from '@angular-devkit/core/node'; import { UnsuccessfulWorkflowExecution } from '@angular-devkit/schematics'; import { NodeWorkflow } from '@angular-devkit/schematics/tools'; import * as ansiColors from 'ansi-colors'; -import * as inquirer from 'inquirer'; -import yargsParser, { camelCase, decamelize } from 'yargs-parser'; import { existsSync } from 'fs'; +import * as inquirer from 'inquirer'; import * as path from 'path'; +import yargsParser, { camelCase, decamelize } from 'yargs-parser'; /** * Parse the name of schematic passed in argument, and return a {collection, schematic} named @@ -145,6 +145,7 @@ function getPackageManagerName() { if (lockPath) { return LOCKS[path.basename(lockPath)]; } + return 'npm'; }