diff --git a/packages/create-nx-plugin/bin/create-nx-plugin.ts b/packages/create-nx-plugin/bin/create-nx-plugin.ts index db683778d6..6296ee4f2c 100644 --- a/packages/create-nx-plugin/bin/create-nx-plugin.ts +++ b/packages/create-nx-plugin/bin/create-nx-plugin.ts @@ -1,7 +1,10 @@ #!/usr/bin/env node // we can't import from '@nrwl/workspace' because it will require typescript -import { getPackageManagerCommand } from '@nrwl/tao/src/shared/package-manager'; +import { + getPackageManagerCommand, + PackageManager, +} from '@nrwl/tao/src/shared/package-manager'; import { output } from '@nrwl/workspace/src/utilities/output'; import { execSync } from 'child_process'; import { readFileSync, removeSync, writeFileSync } from 'fs-extra'; @@ -52,7 +55,7 @@ function createSandbox(packageManager: string) { function createWorkspace( tmpDir: string, - packageManager: string, + packageManager: PackageManager, parsedArgs: any, name: string ) { @@ -197,7 +200,7 @@ if (parsedArgs.help) { process.exit(0); } -const packageManager = parsedArgs.packageManager || 'npm'; +const packageManager: PackageManager = parsedArgs.packageManager || 'npm'; determineWorkspaceName(parsedArgs).then((workspaceName) => { return determinePluginName(parsedArgs).then((pluginName) => { const tmpDir = createSandbox(packageManager); diff --git a/packages/create-nx-workspace/bin/create-nx-workspace.ts b/packages/create-nx-workspace/bin/create-nx-workspace.ts index 1938039293..2ab4f0a1e6 100644 --- a/packages/create-nx-workspace/bin/create-nx-workspace.ts +++ b/packages/create-nx-workspace/bin/create-nx-workspace.ts @@ -13,6 +13,7 @@ import * as ora from 'ora'; import { getPackageManagerCommand, getPackageManagerVersion, + PackageManager, } from './package-manager'; export enum Preset { @@ -120,7 +121,7 @@ if (parsedArgs.help) { } (async function main() { - const packageManager = parsedArgs.packageManager || 'npm'; + const packageManager: PackageManager = parsedArgs.packageManager || 'npm'; const { name, cli, @@ -500,7 +501,7 @@ function createSandbox(packageManager: string) { async function createApp( tmpDir: string, name: string, - packageManager: string, + packageManager: PackageManager, parsedArgs: any ) { const { _, cli, ...restArgs } = parsedArgs; diff --git a/packages/create-nx-workspace/bin/package-manager.ts b/packages/create-nx-workspace/bin/package-manager.ts index c39c525982..fd51f52d99 100644 --- a/packages/create-nx-workspace/bin/package-manager.ts +++ b/packages/create-nx-workspace/bin/package-manager.ts @@ -7,7 +7,9 @@ import { join } from 'path'; * we duplicate the helper functions from @nrwl/workspace in this file. */ -export function detectPackageManager(dir = '') { +export type PackageManager = 'yarn' | 'pnpm' | 'npm'; + +export function detectPackageManager(dir: string = ''): PackageManager { return existsSync(join(dir, 'yarn.lock')) ? 'yarn' : existsSync(join(dir, 'pnpm-lock.yaml')) @@ -28,7 +30,7 @@ export function detectPackageManager(dir = '') { * */ export function getPackageManagerCommand( - packageManager = detectPackageManager() + packageManager: PackageManager = detectPackageManager() ): { install: string; add: string; @@ -75,7 +77,7 @@ export function getPackageManagerCommand( } export function getPackageManagerVersion( - packageManager: 'npm' | 'yarn' | 'pnpm' + packageManager: PackageManager ): string { return execSync(`${packageManager} --version`).toString('utf-8').trim(); } diff --git a/packages/devkit/index.ts b/packages/devkit/index.ts index 803a761d7a..87bb665e35 100644 --- a/packages/devkit/index.ts +++ b/packages/devkit/index.ts @@ -18,7 +18,10 @@ export { NxAffectedConfig, } from '@nrwl/tao/src/shared/nx'; export { logger } from '@nrwl/tao/src/shared/logger'; -export { getPackageManagerCommand } from '@nrwl/tao/src/shared/package-manager'; +export { + getPackageManagerCommand, + PackageManager, +} from '@nrwl/tao/src/shared/package-manager'; export { runExecutor, Target } from '@nrwl/tao/src/commands/run'; export { formatFiles } from './src/generators/format-files'; diff --git a/packages/devkit/src/tasks/install-packages-task.ts b/packages/devkit/src/tasks/install-packages-task.ts index f779b07b0a..000e85c5c1 100644 --- a/packages/devkit/src/tasks/install-packages-task.ts +++ b/packages/devkit/src/tasks/install-packages-task.ts @@ -4,6 +4,7 @@ import { join } from 'path'; import { detectPackageManager, getPackageManagerCommand, + PackageManager, } from '@nrwl/tao/src/shared/package-manager'; import { joinPathFragments } from '../utils/path'; @@ -21,7 +22,7 @@ export function installPackagesTask( host: Tree, alwaysRun: boolean = false, cwd: string = '', - packageManager?: string + packageManager?: PackageManager ) { const packageJsonValue = host .read(joinPathFragments(cwd, 'package.json')) diff --git a/packages/tao/src/commands/migrate.ts b/packages/tao/src/commands/migrate.ts index 9ea00deccb..1cd0c39927 100644 --- a/packages/tao/src/commands/migrate.ts +++ b/packages/tao/src/commands/migrate.ts @@ -11,6 +11,7 @@ import { convertToCamelCase, handleErrors } from '../shared/params'; import { detectPackageManager, getPackageManagerCommand, + PackageManager, } from '../shared/package-manager'; import { FsTree } from '../shared/tree'; import { flushChanges } from './generate'; @@ -421,7 +422,7 @@ function versions(root: string, from: { [p: string]: string }) { } // testing-fetch-start -function createFetcher(packageManager: string) { +function createFetcher(packageManager: PackageManager) { const cache = {}; return async function f( packageName: string, diff --git a/packages/tao/src/shared/package-manager.ts b/packages/tao/src/shared/package-manager.ts index 08924a6f80..4cb4e9aec3 100644 --- a/packages/tao/src/shared/package-manager.ts +++ b/packages/tao/src/shared/package-manager.ts @@ -2,7 +2,9 @@ import { execSync } from 'child_process'; import { existsSync } from 'fs'; import { join } from 'path'; -export function detectPackageManager(dir = '') { +export type PackageManager = 'yarn' | 'pnpm' | 'npm'; + +export function detectPackageManager(dir: string = ''): PackageManager { return existsSync(join(dir, 'yarn.lock')) ? 'yarn' : existsSync(join(dir, 'pnpm-lock.yaml')) @@ -23,7 +25,7 @@ export function detectPackageManager(dir = '') { * */ export function getPackageManagerCommand( - packageManager = detectPackageManager() + packageManager: PackageManager = detectPackageManager() ): { install: string; add: string; @@ -70,7 +72,7 @@ export function getPackageManagerCommand( } export function getPackageManagerVersion( - packageManager: 'npm' | 'yarn' | 'pnpm' + packageManager: PackageManager ): string { return execSync(`${packageManager} --version`).toString('utf-8').trim(); } diff --git a/packages/tao/src/shared/workspace.ts b/packages/tao/src/shared/workspace.ts index abe303f632..b6bf4adf0b 100644 --- a/packages/tao/src/shared/workspace.ts +++ b/packages/tao/src/shared/workspace.ts @@ -2,6 +2,7 @@ import * as fs from 'fs'; import * as path from 'path'; import * as stripJsonComments from 'strip-json-comments'; import { NxJsonConfiguration, NxJsonProjectConfiguration } from './nx'; +import { PackageManager } from './package-manager'; export interface Workspace extends WorkspaceJsonConfiguration, @@ -51,7 +52,7 @@ export interface WorkspaceJsonConfiguration { * Default generator collection. It is used when no collection is provided. */ cli?: { - packageManager?: 'npm' | 'yarn' | 'pnpm'; + packageManager?: PackageManager; defaultCollection?: string; }; } diff --git a/packages/workspace/src/generators/new/new.spec.ts b/packages/workspace/src/generators/new/new.spec.ts index cef97f8173..0662622f67 100644 --- a/packages/workspace/src/generators/new/new.spec.ts +++ b/packages/workspace/src/generators/new/new.spec.ts @@ -1,5 +1,5 @@ import { createTree } from '@nrwl/devkit/testing'; -import { readJson, Tree, writeJson } from '@nrwl/devkit'; +import { readJson, Tree, writeJson, PackageManager } from '@nrwl/devkit'; import { newGenerator, Preset, Schema } from './new'; import { Linter } from '../../utils/lint'; @@ -64,7 +64,7 @@ describe('new', () => { describe('--packageManager', () => { describe.each([['npm'], ['yarn'], ['pnpm']])( '%s', - (packageManager: 'npm' | 'yarn' | 'pnpm') => { + (packageManager: PackageManager) => { it('should set the packageManager in workspace.json', async () => { await newGenerator(tree, { ...defaultOptions, diff --git a/packages/workspace/src/generators/new/new.ts b/packages/workspace/src/generators/new/new.ts index e36b4ae816..2d909226b1 100644 --- a/packages/workspace/src/generators/new/new.ts +++ b/packages/workspace/src/generators/new/new.ts @@ -9,6 +9,7 @@ import { names, getPackageManagerCommand, WorkspaceJsonConfiguration, + PackageManager, } from '@nrwl/devkit'; import { join } from 'path'; @@ -46,7 +47,7 @@ export interface Schema { commit?: { name: string; email: string; message?: string }; defaultBase: string; linter: 'tslint' | 'eslint'; - packageManager?: 'npm' | 'yarn' | 'pnpm'; + packageManager?: PackageManager; } function generatePreset(host: Tree, opts: Schema) {