1 | "use strict";
|
2 | Object.defineProperty(exports, "__esModule", { value: true });
|
3 | exports.generateWorkspaceFiles = exports.DEFAULT_NRWL_PRETTIER_CONFIG = void 0;
|
4 | const tslib_1 = require("tslib");
|
5 | const devkit_1 = require("@nrwl/devkit");
|
6 | const versions_1 = require("../../utils/versions");
|
7 | const fs_1 = require("fs");
|
8 | const path_1 = require("path");
|
9 | const presets_1 = require("../utils/presets");
|
10 | const default_base_1 = require("../../utilities/default-base");
|
11 | exports.DEFAULT_NRWL_PRETTIER_CONFIG = {
|
12 | singleQuote: true,
|
13 | };
|
14 | function 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 | }
|
40 | exports.generateWorkspaceFiles = generateWorkspaceFiles;
|
41 | function 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 | }
|
45 | function 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 | }
|
58 | function 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 |
|
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 | }
|
72 | function 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 | }
|
108 | function 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 |
|
118 | angularCliVersion: versions_1.angularCliVersion }, options), { nxVersion: versions_1.nxVersion, packageManager: options.packageManager }));
|
119 | }
|
120 | function createPrettierrc(host, options) {
|
121 | (0, devkit_1.writeJson)(host, (0, path_1.join)(options.directory, '.prettierrc'), exports.DEFAULT_NRWL_PRETTIER_CONFIG);
|
122 | }
|
123 |
|
124 | function createNpmrc(host, options) {
|
125 | host.write((0, path_1.join)(options.directory, '.npmrc'), 'strict-peer-dependencies=false\nauto-install-peers=true\n');
|
126 | }
|
127 |
|
128 | function createYarnrcYml(host, options) {
|
129 | host.write((0, path_1.join)(options.directory, '.yarnrc.yml'), 'nodeLinker: node-modules\n');
|
130 | }
|
131 | function 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 | }
|
154 | function 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 | }
|
164 | function normalizeOptions(options) {
|
165 | let defaultBase = options.defaultBase || (0, default_base_1.deduceDefaultBase)();
|
166 | return Object.assign(Object.assign({ npmScope: options.name }, options), { defaultBase });
|
167 | }
|
168 | function 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 |
|
\ | No newline at end of file |