UNPKG

5.23 kBJavaScriptView Raw
1"use strict";
2Object.defineProperty(exports, "__esModule", { value: true });
3exports.generatePreset = exports.addPresetDependencies = void 0;
4const devkit_1 = require("@nrwl/devkit");
5const presets_1 = require("../utils/presets");
6const versions_1 = require("../../utils/versions");
7const get_npm_package_version_1 = require("../utils/get-npm-package-version");
8const path_1 = require("path");
9const yargsParser = require("yargs-parser");
10const child_process_1 = require("child_process");
11function addPresetDependencies(host, options) {
12 if (options.preset === presets_1.Preset.Apps ||
13 options.preset === presets_1.Preset.Core ||
14 options.preset === presets_1.Preset.Empty ||
15 options.preset === presets_1.Preset.NPM) {
16 return;
17 }
18 const { dependencies, dev } = getPresetDependencies(options.preset, options.presetVersion);
19 return (0, devkit_1.addDependenciesToPackageJson)(host, dependencies, dev, (0, path_1.join)(options.directory, 'package.json'));
20}
21exports.addPresetDependencies = addPresetDependencies;
22function generatePreset(host, opts) {
23 const parsedArgs = yargsParser(process.argv, {
24 boolean: ['interactive'],
25 });
26 const spawnOptions = {
27 stdio: [process.stdin, process.stdout, process.stderr],
28 shell: true,
29 cwd: (0, path_1.join)(host.root, opts.directory),
30 };
31 const pmc = (0, devkit_1.getPackageManagerCommand)();
32 const executable = `${pmc.exec} nx`;
33 const args = getPresetArgs(opts);
34 return new Promise((resolve, reject) => {
35 (0, child_process_1.spawn)(executable, args, spawnOptions).on('close', (code) => {
36 if (code === 0) {
37 resolve();
38 }
39 else {
40 const message = 'Workspace creation failed, see above.';
41 reject(new Error(message));
42 }
43 });
44 });
45 function getPresetArgs(options) {
46 if (Object.values(presets_1.Preset).some((val) => val === options.preset)) {
47 // supported presets
48 return getDefaultArgs(options);
49 }
50 return getThirdPartyPresetArgs();
51 }
52 function getDefaultArgs(opts) {
53 return [
54 `g`,
55 `@nrwl/workspace:preset`,
56 `--name=${opts.appName}`,
57 opts.style ? `--style=${opts.style}` : null,
58 opts.linter ? `--linter=${opts.linter}` : null,
59 opts.npmScope ? `--npmScope=${opts.npmScope}` : `--npmScope=${opts.name}`,
60 opts.preset ? `--preset=${opts.preset}` : null,
61 opts.packageManager ? `--packageManager=${opts.packageManager}` : null,
62 parsedArgs.interactive ? '--interactive=true' : '--interactive=false',
63 ].filter((e) => !!e);
64 }
65 function getThirdPartyPresetArgs() {
66 const thirdPartyPkgArgs = Object.entries(opts).reduce((acc, [key, value]) => {
67 if (value === true) {
68 acc.push(`--${key}`);
69 }
70 else if (value === false) {
71 acc.push(`--no-${key}`);
72 // nxWorkspaceRoot breaks CLI if incorrectly set, so need to exclude it.
73 // TODO(jack): Should read in the preset schema and only pass the options specified.
74 }
75 else if (key !== 'nxWorkspaceRoot') {
76 // string, number (don't handle arrays or nested objects)
77 acc.push(`--${key}=${value}`);
78 }
79 return acc;
80 }, []);
81 return [`g`, `${opts.preset}:preset`, ...thirdPartyPkgArgs];
82 }
83}
84exports.generatePreset = generatePreset;
85function getPresetDependencies(preset, version) {
86 switch (preset) {
87 case presets_1.Preset.TS:
88 return { dependencies: {}, dev: { '@nrwl/js': versions_1.nxVersion } };
89 case presets_1.Preset.Angular:
90 return { dependencies: { '@nrwl/angular': versions_1.nxVersion }, dev: {} };
91 case presets_1.Preset.Express:
92 return { dependencies: {}, dev: { '@nrwl/express': versions_1.nxVersion } };
93 case presets_1.Preset.Nest:
94 return { dependencies: {}, dev: { '@nrwl/nest': versions_1.nxVersion } };
95 case presets_1.Preset.NextJs:
96 return { dependencies: { '@nrwl/next': versions_1.nxVersion }, dev: {} };
97 case presets_1.Preset.React:
98 return { dependencies: {}, dev: { '@nrwl/react': versions_1.nxVersion } };
99 case presets_1.Preset.ReactExperimental:
100 return { dependencies: {}, dev: { '@nrwl/react': versions_1.nxVersion } };
101 case presets_1.Preset.ReactNative:
102 return { dependencies: {}, dev: { '@nrwl/react-native': versions_1.nxVersion } };
103 case presets_1.Preset.Expo:
104 return { dependencies: {}, dev: { '@nrwl/expo': versions_1.nxVersion } };
105 case presets_1.Preset.WebComponents:
106 return { dependencies: {}, dev: { '@nrwl/web': versions_1.nxVersion } };
107 default: {
108 return {
109 dev: {},
110 dependencies: { [preset]: version !== null && version !== void 0 ? version : (0, get_npm_package_version_1.getNpmPackageVersion)(preset) },
111 };
112 }
113 }
114}
115//# sourceMappingURL=generate-preset.js.map
\No newline at end of file