UNPKG

7.86 kBJavaScriptView Raw
1"use strict";
2Object.defineProperty(exports, "__esModule", { value: true });
3exports.generateWorkspaceFiles = exports.DEFAULT_NRWL_PRETTIER_CONFIG = void 0;
4const tslib_1 = require("tslib");
5const devkit_1 = require("@nrwl/devkit");
6const versions_1 = require("../../utils/versions");
7const fs_1 = require("fs");
8const path_1 = require("path");
9const presets_1 = require("../utils/presets");
10const default_base_1 = require("../../utilities/default-base");
11exports.DEFAULT_NRWL_PRETTIER_CONFIG = {
12 singleQuote: true,
13};
14function generateWorkspaceFiles(host, options) {
15 return tslib_1.__awaiter(this, void 0, void 0, function* () {
16 if (!options.name) {
17 throw new Error(`Invalid options, "name" is required.`);
18 }
19 options = normalizeOptions(options);
20 createFiles(host, options);
21 createNxJson(host, options);
22 createPrettierrc(host, options);
23 if (options.preset === presets_1.Preset.Angular) {
24 decorateAngularClI(host, options);
25 }
26 const [packageMajor] = (0, devkit_1.getPackageManagerVersion)(options.packageManager).split('.');
27 if (options.packageManager === 'pnpm' && +packageMajor >= 7) {
28 createNpmrc(host, options);
29 }
30 else if (options.packageManager === 'yarn' && +packageMajor >= 2) {
31 createYarnrcYml(host, options);
32 }
33 setPresetProperty(host, options);
34 addNpmScripts(host, options);
35 createAppsAndLibsFolders(host, options);
36 setUpWorkspacesInPackageJson(host, options);
37 yield (0, devkit_1.formatFiles)(host);
38 });
39}
40exports.generateWorkspaceFiles = generateWorkspaceFiles;
41function decorateAngularClI(host, options) {
42 const decorateCli = (0, fs_1.readFileSync)((0, path_1.join)(__dirname, '..', 'utils', 'decorate-angular-cli.js__tmpl__')).toString();
43 host.write((0, path_1.join)(options.directory, 'decorate-angular-cli.js'), decorateCli);
44}
45function setPresetProperty(tree, options) {
46 (0, devkit_1.updateJson)(tree, (0, path_1.join)(options.directory, 'nx.json'), (json) => {
47 if (options.preset === presets_1.Preset.Core || options.preset === presets_1.Preset.NPM) {
48 addPropertyWithStableKeys(json, 'extends', 'nx/presets/npm.json');
49 delete json.implicitDependencies;
50 delete json.targetDefaults;
51 delete json.targetDependencies;
52 delete json.workspaceLayout;
53 delete json.npmScope;
54 }
55 return json;
56 });
57}
58function createAppsAndLibsFolders(host, options) {
59 if (options.preset === presets_1.Preset.Core ||
60 options.preset === presets_1.Preset.TS ||
61 options.preset === presets_1.Preset.NPM) {
62 host.write((0, path_1.join)(options.directory, 'packages/.gitkeep'), '');
63 }
64 else if (options.preset === presets_1.Preset.ReactExperimental) {
65 // don't generate any folders
66 }
67 else {
68 host.write((0, path_1.join)(options.directory, 'apps/.gitkeep'), '');
69 host.write((0, path_1.join)(options.directory, 'libs/.gitkeep'), '');
70 }
71}
72function createNxJson(host, { directory, npmScope, packageManager, defaultBase, preset }) {
73 const nxJson = {
74 $schema: './node_modules/nx/schemas/nx-schema.json',
75 npmScope: npmScope,
76 affected: {
77 defaultBase,
78 },
79 tasksRunnerOptions: {
80 default: {
81 runner: 'nx/tasks-runners/default',
82 options: {
83 cacheableOperations: ['build', 'lint', 'test', 'e2e'],
84 },
85 },
86 },
87 };
88 nxJson.targetDefaults = {
89 build: {
90 dependsOn: ['^build'],
91 },
92 };
93 if (defaultBase === 'main') {
94 delete nxJson.affected;
95 }
96 if (preset !== presets_1.Preset.Core &&
97 preset !== presets_1.Preset.NPM &&
98 preset !== presets_1.Preset.Empty) {
99 nxJson.namedInputs = {
100 default: ['{projectRoot}/**/*', 'sharedGlobals'],
101 production: ['default'],
102 sharedGlobals: [],
103 };
104 nxJson.targetDefaults.build.inputs = ['production', '^production'];
105 }
106 (0, devkit_1.writeJson)(host, (0, path_1.join)(directory, 'nx.json'), nxJson);
107}
108function createFiles(host, options) {
109 const formattedNames = (0, devkit_1.names)(options.name);
110 const filesDirName = options.preset === presets_1.Preset.ReactExperimental
111 ? './files-root-app'
112 : options.preset === presets_1.Preset.NPM || options.preset === presets_1.Preset.Core
113 ? './files-package-based-repo'
114 : './files-integrated-repo';
115 (0, devkit_1.generateFiles)(host, (0, path_1.join)(__dirname, filesDirName), options.directory, Object.assign(Object.assign({ formattedNames, dot: '.', tmpl: '', workspaceFile: options.preset === presets_1.Preset.Angular ? 'angular' : 'workspace', cliCommand: options.preset === presets_1.Preset.Angular ? 'ng' : 'nx', nxCli: false, typescriptVersion: versions_1.typescriptVersion,
116 prettierVersion: versions_1.prettierVersion,
117 // angular cli is used only when workspace schematics is added to angular cli
118 angularCliVersion: versions_1.angularCliVersion }, options), { nxVersion: versions_1.nxVersion, packageManager: options.packageManager }));
119}
120function createPrettierrc(host, options) {
121 (0, devkit_1.writeJson)(host, (0, path_1.join)(options.directory, '.prettierrc'), exports.DEFAULT_NRWL_PRETTIER_CONFIG);
122}
123// ensure that pnpm install add all the missing peer deps
124function createNpmrc(host, options) {
125 host.write((0, path_1.join)(options.directory, '.npmrc'), 'strict-peer-dependencies=false\nauto-install-peers=true\n');
126}
127// ensure that yarn (berry) install uses classic node linker
128function createYarnrcYml(host, options) {
129 host.write((0, path_1.join)(options.directory, '.yarnrc.yml'), 'nodeLinker: node-modules\n');
130}
131function addNpmScripts(host, options) {
132 if (options.preset === presets_1.Preset.Angular) {
133 (0, devkit_1.updateJson)(host, (0, path_1.join)(options.directory, 'package.json'), (json) => {
134 Object.assign(json.scripts, {
135 ng: 'nx',
136 postinstall: 'node ./decorate-angular-cli.js',
137 });
138 return json;
139 });
140 }
141 if (options.preset !== presets_1.Preset.TS &&
142 options.preset !== presets_1.Preset.Core &&
143 options.preset !== presets_1.Preset.NPM) {
144 (0, devkit_1.updateJson)(host, (0, path_1.join)(options.directory, 'package.json'), (json) => {
145 Object.assign(json.scripts, {
146 start: 'nx serve',
147 build: 'nx build',
148 test: 'nx test',
149 });
150 return json;
151 });
152 }
153}
154function addPropertyWithStableKeys(obj, key, value) {
155 const copy = Object.assign({}, obj);
156 Object.keys(obj).forEach((k) => {
157 delete obj[k];
158 });
159 obj[key] = value;
160 Object.keys(copy).forEach((k) => {
161 obj[k] = copy[k];
162 });
163}
164function normalizeOptions(options) {
165 let defaultBase = options.defaultBase || (0, default_base_1.deduceDefaultBase)();
166 return Object.assign(Object.assign({ npmScope: options.name }, options), { defaultBase });
167}
168function setUpWorkspacesInPackageJson(tree, options) {
169 if (options.preset === presets_1.Preset.NPM || options.preset === presets_1.Preset.Core) {
170 if (options.packageManager === 'pnpm') {
171 tree.write((0, path_1.join)(options.directory, 'pnpm-workspace.yaml'), `packages:
172 - 'packages/*'
173`);
174 }
175 else {
176 (0, devkit_1.updateJson)(tree, (0, path_1.join)(options.directory, 'package.json'), (json) => {
177 json.workspaces = ['packages/*'];
178 return json;
179 });
180 }
181 }
182}
183//# sourceMappingURL=generate-workspace-files.js.map
\No newline at end of file