import * as path from 'path'; import { execSync } from 'child_process'; import { output } from './output'; import * as flatten from 'flat'; /* * Because we don't want to depend on @nrwl/workspace (to speed up the workspace creation) * we duplicate the helper functions from @nrwl/workspace in this file. */ export function showNxWarning(workspaceName: string) { try { const pathToRunNxCommand = path.resolve(process.cwd(), workspaceName); execSync('nx --version', { cwd: pathToRunNxCommand, stdio: ['ignore', 'ignore', 'ignore'], }); } catch (e) { // no nx found output.addVerticalSeparator(); output.note({ title: `Nx CLI is not installed globally.`, bodyLines: [ `This means that you might have to use "yarn nx" or "npm nx" to execute commands in the workspace.`, `Run "yarn global add nx" or "npm install -g nx" to be able to execute command directly.`, ], }); } } export function unparse(options: Object): string[] { const unparsed = []; for (const key of Object.keys(options)) { const value = options[key]; unparseOption(key, value, unparsed); } return unparsed; } function unparseOption(key: string, value: any, unparsed: string[]) { if (value === true) { unparsed.push(`--${key}`); } else if (value === false) { unparsed.push(`--no-${key}`); } else if (Array.isArray(value)) { value.forEach((item) => unparseOption(key, item, unparsed)); } else if (Object.prototype.toString.call(value) === '[object Object]') { const flattened = flatten(value, { safe: true }); for (const flattenedKey in flattened) { unparseOption( `${key}.${flattenedKey}`, flattened[flattenedKey], unparsed ); } } else if (typeof value === 'string' && value.includes(' ')) { unparsed.push(`--${key}="${value}"`); } else if (value != null) { unparsed.push(`--${key}=${value}`); } }