@lenne.tech/cli 0.0.80 → 0.0.84

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -18,8 +18,9 @@ const NewCommand = {
18
18
  description: 'Creates a new angular (fullstack) workspace',
19
19
  hidden: false,
20
20
  run: (toolbox) => __awaiter(void 0, void 0, void 0, function* () {
21
+ var _a, _b, _c;
21
22
  // Retrieve the tools we need
22
- const { filesystem, git, helper, parameters, print: { error, info, spin, success }, prompt: { confirm }, strings: { kebabCase }, system, } = toolbox;
23
+ const { filesystem, git, helper, parameters, patching, print: { error, info, spin, success }, prompt: { confirm }, strings: { kebabCase }, system, tools, } = toolbox;
23
24
  // Start timer
24
25
  const timer = system.startTimer();
25
26
  // Info
@@ -44,28 +45,20 @@ const NewCommand = {
44
45
  error(`There's already a folder named "${projectDir}" here.`);
45
46
  return undefined;
46
47
  }
47
- // Set preset
48
- // See https://github.com/nrwl/nx/blob/4bcd25ec01d793ca59e0ebaf1578bae275b6821d/packages/create-nx-workspace/bin/create-nx-workspace.ts#L32
49
- const preset = parameters.second === 'true' || (!parameters.second && (yield confirm(`Add API (Nest server)?`)))
50
- ? 'angular-nest'
51
- : 'angular';
52
- let addToGit = false;
53
- let gitLink;
54
- if (parameters.third !== 'false') {
55
- addToGit = parameters.third === 'true' || (yield confirm(`Add workspace to a new git repository?`));
56
- // Check if git init is active
57
- if (addToGit) {
58
- // Get name of the app
59
- gitLink = yield helper.getInput(null, {
60
- name: 'git repository link',
61
- showError: true,
62
- });
63
- if (!gitLink) {
64
- addToGit = false;
65
- }
66
- }
67
- }
68
- const workspaceSpinner = spin(`Create ${preset} workspace ${projectDir} with ${name} app`);
48
+ // Localize
49
+ const localize = ((_a = parameters.second) === null || _a === void 0 ? void 0 : _a.toLowerCase().includes('localize')) ||
50
+ (!parameters.second && (yield confirm(`Init localize for Angular?`, true)));
51
+ // Angular Universal
52
+ const angularUniversal = ((_b = parameters.second) === null || _b === void 0 ? void 0 : _b.toLowerCase().includes('universal')) ||
53
+ (!parameters.second && (yield confirm(`Add Angular Universal (SSR)?`, true)));
54
+ // Nest-Server
55
+ const nestServer = ((_c = parameters.second) === null || _c === void 0 ? void 0 : _c.toLowerCase().includes('nest')) ||
56
+ (!parameters.second && (yield confirm(`Add API (Nest-Server)?`, true)));
57
+ const gitLink = (yield helper.getInput(null, {
58
+ name: 'link to an empty repository (e.g. git@gitlab.lenne.tech:group/project.git or leave empty for no linking)',
59
+ showError: false,
60
+ })).trim();
61
+ const workspaceSpinner = spin(`Create workspace ${projectDir} with ${name} app`);
69
62
  // Clone monorepo
70
63
  yield system.run(`git clone https://github.com/lenneTech/lt-monorepo.git ${projectDir}`);
71
64
  // Check for directory
@@ -73,36 +66,154 @@ const NewCommand = {
73
66
  error(`The directory "${projectDir}" could not be created.`);
74
67
  return undefined;
75
68
  }
76
- workspaceSpinner.succeed(`Create ${preset} workspace ${projectDir} for ${name} created`);
77
- // Include example app
78
- const ngBaseSpinner = spin('Integrate example for Angular');
79
69
  // Remove git folder after clone
80
70
  yield system.run(`cd ${projectDir} && rm -rf .git`);
71
+ // Set project name
72
+ yield filesystem.write(`${projectDir}/lt.json`, JSON.stringify({ name }));
73
+ yield patching.update(`${projectDir}/package.json`, (data) => {
74
+ data.name = kebabCase(name);
75
+ data.version = '0.0.0';
76
+ return data;
77
+ });
78
+ // Install packages
79
+ yield system.run(`cd ${projectDir} && npm i`);
81
80
  // Check if git init is active
82
- if (addToGit) {
83
- yield system.run(`cd ${projectDir} && git init --initial-branch=main`);
81
+ yield system.run(`cd ${projectDir} && git init --initial-branch=main`);
82
+ if (gitLink) {
84
83
  yield system.run(`cd ${projectDir} && git remote add origin ${gitLink}`);
85
84
  yield system.run(`cd ${projectDir} && git add .`);
86
85
  yield system.run(`cd ${projectDir} && git commit -m "Initial commit"`);
87
86
  yield system.run(`cd ${projectDir} && git push -u origin main`);
88
87
  }
89
- // Clone ng-base-starter
90
- yield system.run(`cd ${projectDir}/projects && git clone https://github.com/lenneTech/ng-base-starter.git app`);
88
+ workspaceSpinner.succeed(`Create workspace ${projectDir} for ${name} created`);
89
+ // Include example app
90
+ const ngBaseSpinner = spin('Integrate example for Angular');
91
91
  // Remove gitkeep file
92
92
  yield system.run(`cd ${projectDir}/projects && rm .gitkeep`);
93
- // Remove git folder after clone
94
- yield system.run(`cd ${projectDir}/projects/app && rm -rf .git`);
95
- // Integrate files
93
+ // Clone ng-base-starter
94
+ yield system.run(`cd ${projectDir}/projects && git clone https://github.com/lenneTech/ng-base-starter.git app`);
95
+ // Main version of angular
96
+ let angularVersion = '';
96
97
  if (filesystem.isDirectory(`./${projectDir}/projects/app`)) {
98
+ // Get main verion of angular
99
+ yield patching.update(`${projectDir}/projects/app/package.json`, (data) => {
100
+ const version = parseInt(data.dependencies['@angular/core'].split('.')[0]);
101
+ if (version && version > 0) {
102
+ angularVersion = '@' + version;
103
+ }
104
+ return data;
105
+ });
106
+ // Remove git folder after clone
107
+ yield system.run(`cd ${projectDir}/projects/app && rm -rf .git`);
108
+ // Remove husky from app project
109
+ yield system.run(`rm -rf ${projectDir}/projects/app/.husky`);
110
+ yield patching.update(`${projectDir}/projects/app/package.json`, (data) => {
111
+ delete data.scripts.prepare;
112
+ delete data.devDependencies.husky;
113
+ return data;
114
+ });
115
+ if (localize) {
116
+ yield system.run(`cd ${projectDir}/projects/app && ng add @angular/localize --skip-confirmation`);
117
+ }
118
+ // Commit changes
119
+ yield system.run(`cd ${projectDir} && git add . && git commit -am "feat: Angular example integrated"`);
97
120
  // Check if git init is active
98
- if (addToGit) {
99
- // Commit changes
100
- yield system.run(`cd ${projectDir} && git add . && git commit -am "feat: Angular example integrated" && git push`);
121
+ if (gitLink) {
122
+ `cd ${projectDir} && git push`;
101
123
  }
102
124
  // Angular example integration done
103
125
  ngBaseSpinner.succeed('Example for Angular integrated');
126
+ if (angularUniversal) {
127
+ // Include example app
128
+ const ngUniversalSpinner = spin('Integrate example for Angular');
129
+ yield system.run(`cd ${projectDir}/projects/app && ng add @nguniversal/express-engine${angularVersion} --skip-confirmation`);
130
+ yield system.run(`cd ${projectDir}/projects/app && npm i localstorage-polyfill`);
131
+ yield system.run(`cd ${projectDir}/projects/app && npm i compression`);
132
+ yield system.run(`cd ${projectDir}/projects/app && npm i --save-dev @types/compression`);
133
+ // Add scripts and clean up dependencies
134
+ yield patching.update(`${projectDir}/projects/app/package.json`, (data) => {
135
+ // Add / extend scripts
136
+ data.scripts.build = 'ng build --configuration production && ng run app:server';
137
+ data.scripts['build:test'] = 'ng build --configuration test && ng run app:server';
138
+ // Clean up
139
+ const dependencies = ['dependencies', 'devDependencies'];
140
+ for (const deps of dependencies) {
141
+ for (const dep of Object.keys(data[deps])) {
142
+ data[deps][dep] = data[deps][dep].replace('^', '');
143
+ }
144
+ }
145
+ return data;
146
+ });
147
+ // Set allowSyntheticDefaultImports
148
+ tools.stripAndSaveJsonFile(`${projectDir}/projects/app/tsconfig.json`);
149
+ yield patching.update(`${projectDir}/projects/app/tsconfig.json`, (data) => {
150
+ data.compilerOptions.allowSyntheticDefaultImports = true;
151
+ return data;
152
+ });
153
+ // Pimp server.ts
154
+ let localizeString = '';
155
+ if (localize) {
156
+ localizeString = `\nimport '@angular/localize/init';`;
157
+ }
158
+ const windowAndCo = `
159
+ // ----------------------------------------------
160
+ // window for image lazy loading
161
+ // ----------------------------------------------
162
+ /* eslint-disable */${localizeString}
163
+ import 'reflect-metadata';
164
+ import 'localstorage-polyfill';
165
+ import compression from 'compression';
166
+ import domino from 'domino';
167
+ import { readFileSync } from 'fs';
168
+ const template = readFileSync(join(process.cwd(), 'dist/app/browser/index.html')).toString();
169
+ const win: any = domino.createWindow(template);
170
+ // @ts-ignore
171
+ global['window'] = win;
172
+ global['Node'] = win.Node;
173
+ global['navigator'] = win.navigator;
174
+ global['Event'] = win.Event;
175
+ global['KeyboardEvent'] = win.Event;
176
+ global['MouseEvent'] = win.Event;
177
+ global['Event']['prototype'] = win.Event.prototype;
178
+ global['document'] = win.document;
179
+ global['localStorage'] = localStorage;
180
+ global['WebSocket'] = require('ws');
181
+ /* eslint-enable */
182
+ `;
183
+ yield patching.update(`${projectDir}/projects/app/server.ts`, (str) => {
184
+ const lines = str.split('\n');
185
+ const rest = str.split('\n');
186
+ let back = '';
187
+ for (let i = 0; i < lines.length; i++) {
188
+ // Stop if the line is not empty and does not start with an import
189
+ if (!!lines[i].trim() && !lines[i].trim().startsWith('import')) {
190
+ break;
191
+ }
192
+ back += lines[i] + '\n';
193
+ rest.shift();
194
+ }
195
+ back += windowAndCo + rest.join('\n');
196
+ return back;
197
+ });
198
+ yield patching.replace(`${projectDir}/projects/app/server.ts`, 'const server = express();', `const server = express();\n server.use(compression());`);
199
+ // Commit changes
200
+ yield system.run(`cd ${projectDir} && git add . && git commit -am "feat: Angular Universal integrated"`);
201
+ // Check if git init is active
202
+ if (gitLink) {
203
+ `cd ${projectDir} && git push`;
204
+ }
205
+ // Angular universal integration done
206
+ ngUniversalSpinner.succeed('Angular Universal integrated');
207
+ }
208
+ else {
209
+ yield patching.update(`${projectDir}/projects/app/package.json`, (data) => {
210
+ data.scripts.build = 'ng build --configuration production';
211
+ data.scripts['build:test'] = 'ng build --configuration test';
212
+ return data;
213
+ });
214
+ }
104
215
  // Include files from https://github.com/lenneTech/nest-server-starter
105
- if (preset === 'angular-nest') {
216
+ if (nestServer) {
106
217
  // Init
107
218
  const serverSpinner = spin(`Integrate Nest Server Starter`);
108
219
  // Clone api
@@ -111,16 +222,24 @@ const NewCommand = {
111
222
  if (filesystem.isDirectory(`./${projectDir}/projects/api`)) {
112
223
  // Remove git folder from clone
113
224
  yield system.run(`cd ${projectDir}/projects/api && rm -rf .git`);
225
+ // Remove husky from api project
226
+ yield system.run(`rm -rf ${projectDir}/projects/api/.husky`);
227
+ yield patching.update(`${projectDir}/projects/api/package.json`, (data) => {
228
+ delete data.scripts.prepare;
229
+ delete data.devDependencies.husky;
230
+ return data;
231
+ });
114
232
  // Prepare meta.json in api
115
233
  filesystem.write(`./${projectDir}/projects/api/src/meta.json`, {
116
234
  name: `${name}-api-server`,
117
235
  description: `API for ${name} app`,
118
236
  version: '0.0.0',
119
237
  });
238
+ // Commit changes
239
+ yield system.run(`cd ${projectDir} && git add . && git commit -am "feat: Nest Server Starter integrated"`);
120
240
  // Check if git init is active
121
- if (addToGit) {
122
- // Commit changes
123
- yield system.run(`cd ${projectDir} && git add . && git commit -am "feat: Nest Server Starter integrated" && git push`);
241
+ if (gitLink) {
242
+ `cd ${projectDir} && git push`;
124
243
  }
125
244
  // Done
126
245
  serverSpinner.succeed('Nest Server Starter integrated');
@@ -131,11 +250,17 @@ const NewCommand = {
131
250
  }
132
251
  // Install all packages
133
252
  const installSpinner = spin('Install all packages');
134
- yield system.run(`cd ${projectDir} && npm i && npm run init`);
135
- installSpinner.succeed('Successfull installed all packages');
253
+ yield system.run(`cd ${projectDir} && npm run init`);
254
+ // Commit changes
255
+ yield system.run(`cd ${projectDir} && git add . && git commit -am "feat: Initialization of workspace done"`);
256
+ // Check if git init is active
257
+ if (gitLink) {
258
+ `cd ${projectDir} && git push`;
259
+ }
260
+ installSpinner.succeed('Successfully installed all packages');
136
261
  // We're done, so show what to do next
137
262
  info(``);
138
- success(`Generated ${preset} workspace ${projectDir} with ${name} app in ${helper.msToMinutesAndSeconds(timer())}m.`);
263
+ success(`Generated workspace ${projectDir} with ${name} app in ${helper.msToMinutesAndSeconds(timer())}m.`);
139
264
  info(``);
140
265
  info(`Next:`);
141
266
  info(` Run ${name}`);
@@ -151,4 +276,4 @@ const NewCommand = {
151
276
  }),
152
277
  };
153
278
  exports.default = NewCommand;
154
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbW1hbmRzL2FuZ3VsYXIvY3JlYXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBR0E7O0dBRUc7QUFDSCxNQUFNLFVBQVUsR0FBbUI7SUFDakMsSUFBSSxFQUFFLFFBQVE7SUFDZCxLQUFLLEVBQUUsQ0FBQyxHQUFHLENBQUM7SUFDWixXQUFXLEVBQUUsNkNBQTZDO0lBQzFELE1BQU0sRUFBRSxLQUFLO0lBQ2IsR0FBRyxFQUFFLENBQU8sT0FBK0IsRUFBRSxFQUFFO1FBQzdDLDZCQUE2QjtRQUM3QixNQUFNLEVBQ0osVUFBVSxFQUNWLEdBQUcsRUFDSCxNQUFNLEVBQ04sVUFBVSxFQUNWLEtBQUssRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxFQUNyQyxNQUFNLEVBQUUsRUFBRSxPQUFPLEVBQUUsRUFDbkIsT0FBTyxFQUFFLEVBQUUsU0FBUyxFQUFFLEVBQ3RCLE1BQU0sR0FDUCxHQUFHLE9BQU8sQ0FBQztRQUVaLGNBQWM7UUFDZCxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsVUFBVSxFQUFFLENBQUM7UUFFbEMsT0FBTztRQUNQLElBQUksQ0FBQyw0Q0FBNEMsQ0FBQyxDQUFDO1FBRW5ELFlBQVk7UUFDWixJQUFJLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxFQUFFO1lBQy9CLE9BQU87U0FDUjtRQUVELDRCQUE0QjtRQUM1QixNQUFNLElBQUksR0FBRyxNQUFNLE1BQU0sQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRTtZQUNuRCxJQUFJLEVBQUUsZ0JBQWdCO1lBQ3RCLFNBQVMsRUFBRSxJQUFJO1NBQ2hCLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxJQUFJLEVBQUU7WUFDVCxPQUFPO1NBQ1I7UUFFRCx3QkFBd0I7UUFDeEIsTUFBTSxVQUFV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
279
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbW1hbmRzL2FuZ3VsYXIvY3JlYXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBR0E7O0dBRUc7QUFDSCxNQUFNLFVBQVUsR0FBbUI7SUFDakMsSUFBSSxFQUFFLFFBQVE7SUFDZCxLQUFLLEVBQUUsQ0FBQyxHQUFHLENBQUM7SUFDWixXQUFXLEVBQUUsNkNBQTZDO0lBQzFELE1BQU0sRUFBRSxLQUFLO0lBQ2IsR0FBRyxFQUFFLENBQU8sT0FBK0IsRUFBRSxFQUFFOztRQUM3Qyw2QkFBNkI7UUFDN0IsTUFBTSxFQUNKLFVBQVUsRUFDVixHQUFHLEVBQ0gsTUFBTSxFQUNOLFVBQVUsRUFDVixRQUFRLEVBQ1IsS0FBSyxFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLEVBQ3JDLE1BQU0sRUFBRSxFQUFFLE9BQU8sRUFBRSxFQUNuQixPQUFPLEVBQUUsRUFBRSxTQUFTLEVBQUUsRUFDdEIsTUFBTSxFQUNOLEtBQUssR0FDTixHQUFHLE9BQU8sQ0FBQztRQUVaLGNBQWM7UUFDZCxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsVUFBVSxFQUFFLENBQUM7UUFFbEMsT0FBTztRQUNQLElBQUksQ0FBQyw0Q0FBNEMsQ0FBQyxDQUFDO1FBRW5ELFlBQVk7UUFDWixJQUFJLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxFQUFFO1lBQy9CLE9BQU87U0FDUjtRQUVELDRCQUE0QjtRQUM1QixNQUFNLElBQUksR0FBRyxNQUFNLE1BQU0sQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRTtZQUNuRCxJQUFJLEVBQUUsZ0JBQWdCO1lBQ3RCLFNBQVMsRUFBRSxJQUFJO1NBQ2hCLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxJQUFJLEVBQUU7WUFDVCxPQUFPO1NBQ1I7UUFFRCx3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
@@ -20,27 +20,63 @@ const NewCommand = {
20
20
  hidden: false,
21
21
  run: (toolbox) => __awaiter(void 0, void 0, void 0, function* () {
22
22
  // Retrieve the tools we need
23
- const { filesystem, helper, parameters, print: { info, spin, success }, strings: { kebabCase, pascalCase, camelCase }, prompt: { confirm }, system, template, } = toolbox;
23
+ const { filesystem, helper, parameters, patching, print: { info, spin, success }, strings: { kebabCase, pascalCase, camelCase }, prompt: { confirm }, system, template, } = toolbox;
24
24
  // Start timer
25
25
  const timer = system.startTimer();
26
26
  // Info
27
27
  info('Create a new deployment');
28
+ // Get default project name
29
+ let projectName = '';
30
+ const config = yield filesystem.exists('lt.json');
31
+ if (config) {
32
+ yield patching.update(`lt.json`, (data) => {
33
+ projectName = data.name;
34
+ return data;
35
+ });
36
+ }
37
+ if (!projectName) {
38
+ yield patching.update(`package.json`, (data) => {
39
+ projectName = pascalCase(data.name);
40
+ return data;
41
+ });
42
+ }
28
43
  // Get name
29
44
  const name = yield helper.getInput(parameters.first, {
30
- name: 'project name',
45
+ initial: projectName,
46
+ name: 'project name (e.g. ' + (projectName ? projectName : 'My new project') + ')',
31
47
  });
32
48
  if (!name) {
33
49
  return;
34
50
  }
35
- // Get url
36
- const url = yield helper.getInput(parameters.second, {
37
- name: 'url for deployment',
51
+ // Get domain
52
+ const domain = yield helper.getInput(parameters.second, {
53
+ initial: kebabCase(name) + '.lenne.tech',
54
+ name: 'main domain of the project (e.g. ' + kebabCase(name) + '.lenne.tech)',
38
55
  });
39
56
  if (!name) {
40
57
  return;
41
58
  }
42
59
  const gitHub = yield confirm(`Add GitHub pipeline?`);
43
60
  const gitLab = yield confirm(`Add GitLab pipeline?`);
61
+ // GitLab test runner
62
+ let testRunner;
63
+ let prodRunner;
64
+ if (gitLab) {
65
+ testRunner = yield helper.getInput('', {
66
+ initial: 'docker-swarm',
67
+ name: 'runner for test (tag in .gitlab-ci.yml, e.g. docker-swarm)',
68
+ });
69
+ if (!testRunner) {
70
+ return;
71
+ }
72
+ prodRunner = yield helper.getInput('', {
73
+ initial: 'docker-landing',
74
+ name: 'runner for production (tag in .gitlab-ci.yml, e.g. docker-landing)',
75
+ });
76
+ if (!prodRunner) {
77
+ return;
78
+ }
79
+ }
44
80
  // Set up initial props (to pass into templates)
45
81
  const nameCamel = camelCase(name);
46
82
  const nameKebab = kebabCase(name);
@@ -87,26 +123,72 @@ const NewCommand = {
87
123
  yield template.generate({
88
124
  template: 'deployment/.github/workflows/pre-release.yml.ejs',
89
125
  target: (0, path_1.join)(cwd, '.github', 'workflows', 'pre-release.yml'),
90
- props: { nameCamel, nameKebab, namePascal, url },
126
+ props: { nameCamel, nameKebab, namePascal, url: domain },
91
127
  });
92
128
  yield template.generate({
93
129
  template: 'deployment/.github/workflows/release.yml.ejs',
94
130
  target: (0, path_1.join)(cwd, '.github', 'workflows', 'release.yml'),
95
- props: { nameCamel, nameKebab, namePascal, url },
131
+ props: { nameCamel, nameKebab, namePascal, url: domain },
96
132
  });
97
133
  }
98
134
  if (gitLab) {
99
135
  yield template.generate({
100
136
  template: 'deployment/.gitlab-ci.yml.ejs',
101
137
  target: (0, path_1.join)(cwd, '.gitlab-ci.yml'),
102
- props: { nameCamel, nameKebab, namePascal, url },
138
+ props: { nameCamel, nameKebab, namePascal, url: domain, testRunner, prodRunner },
103
139
  });
104
140
  }
105
141
  generateSpinner.succeed('Files generated');
142
+ const environmentsSpinner = spin('Update app environment files');
143
+ const prodEnv = yield filesystem.exists('projects/app/src/environments/environment.prod.ts');
144
+ if (prodEnv) {
145
+ yield patching.patch('projects/app/src/environments/environment.prod.ts', {
146
+ replace: new RegExp('http://127.0.0.1:3000', 'g'),
147
+ insert: 'https://api.' + domain,
148
+ });
149
+ yield patching.patch('projects/app/src/environments/environment.prod.ts', {
150
+ replace: new RegExp('ws://127.0.0.1:3000', 'g'),
151
+ insert: 'wss://api.' + domain,
152
+ });
153
+ yield patching.patch('projects/app/src/environments/environment.prod.ts', {
154
+ replace: new RegExp('http://127.0.0.1:4200', 'g'),
155
+ insert: 'https://' + domain,
156
+ });
157
+ }
158
+ else {
159
+ info('Missing projects/app/src/environments/environment.prod.ts');
160
+ }
161
+ const testEnv = yield filesystem.exists('projects/app/src/environments/environment.test.ts');
162
+ if (testEnv) {
163
+ yield patching.patch('projects/app/src/environments/environment.test.ts', {
164
+ replace: new RegExp('http://127.0.0.1:3000', 'g'),
165
+ insert: 'https://api.test.' + domain,
166
+ });
167
+ yield patching.patch('projects/app/src/environments/environment.test.ts', {
168
+ replace: new RegExp('ws://127.0.0.1:3000', 'g'),
169
+ insert: 'wss://api.test.' + domain,
170
+ });
171
+ yield patching.patch('projects/app/src/environments/environment.test.ts', {
172
+ replace: new RegExp('http://127.0.0.1:4200', 'g'),
173
+ insert: 'https://test.' + domain,
174
+ });
175
+ }
176
+ else {
177
+ info('Missing projects/app/src/environments/environment.test.ts');
178
+ }
179
+ environmentsSpinner.succeed('App environment files updated');
106
180
  // We're done, so show what to do next
107
181
  info(``);
108
182
  success(`Generated deployment for ${namePascal} in ${helper.msToMinutesAndSeconds(timer())}m.`);
109
183
  info(``);
184
+ // Hint for CI/CD
185
+ const subDomains = ['www', 'api', 'test', 'www.test', 'api.test'];
186
+ let urlStr = '\n- ' + domain;
187
+ for (const sub of subDomains) {
188
+ urlStr += '\n- ' + sub + '.' + domain;
189
+ }
190
+ success(`HINT: please initialize following Domains before running the CI/CD pipeline:${urlStr}`);
191
+ info(``);
110
192
  if (!toolbox.parameters.options.fromGluegunMenu) {
111
193
  process.exit();
112
194
  }
@@ -115,4 +197,4 @@ const NewCommand = {
115
197
  }),
116
198
  };
117
199
  exports.default = NewCommand;
118
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbW1hbmRzL2RlcGxveW1lbnQvY3JlYXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQ0EsK0JBQTRCO0FBRzVCOztHQUVHO0FBQ0gsTUFBTSxVQUFVLEdBQW1CO0lBQ2pDLElBQUksRUFBRSxRQUFRO0lBQ2QsS0FBSyxFQUFFLENBQUMsSUFBSSxDQUFDO0lBQ2IsV0FBVyxFQUFFLDhDQUE4QztJQUMzRCxNQUFNLEVBQUUsS0FBSztJQUNiLEdBQUcsRUFBRSxDQUFPLE9BQStCLEVBQUUsRUFBRTtRQUM3Qyw2QkFBNkI7UUFDN0IsTUFBTSxFQUNKLFVBQVUsRUFDVixNQUFNLEVBQ04sVUFBVSxFQUNWLEtBQUssRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLEVBQzlCLE9BQU8sRUFBRSxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLEVBQzdDLE1BQU0sRUFBRSxFQUFFLE9BQU8sRUFBRSxFQUNuQixNQUFNLEVBQ04sUUFBUSxHQUNULEdBQUcsT0FBTyxDQUFDO1FBRVosY0FBYztRQUNkLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUVsQyxPQUFPO1FBQ1AsSUFBSSxDQUFDLHlCQUF5QixDQUFDLENBQUM7UUFFaEMsV0FBVztRQUNYLE1BQU0sSUFBSSxHQUFHLE1BQU0sTUFBTSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFO1lBQ25ELElBQUksRUFBRSxjQUFjO1NBQ3JCLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxJQUFJLEVBQUU7WUFDVCxPQUFPO1NBQ1I7UUFFRCxVQUFVO1FBQ1YsTUFBTSxHQUFHLEdBQUcsTUFBTSxNQUFNLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUU7WUFDbkQsSUFBSSxFQUFFLG9CQUFvQjtTQUMzQixDQUFD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
200
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbW1hbmRzL2RlcGxveW1lbnQvY3JlYXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQ0EsK0JBQTRCO0FBRzVCOztHQUVHO0FBQ0gsTUFBTSxVQUFVLEdBQW1CO0lBQ2pDLElBQUksRUFBRSxRQUFRO0lBQ2QsS0FBSyxFQUFFLENBQUMsSUFBSSxDQUFDO0lBQ2IsV0FBVyxFQUFFLDhDQUE4QztJQUMzRCxNQUFNLEVBQUUsS0FBSztJQUNiLEdBQUcsRUFBRSxDQUFPLE9BQStCLEVBQUUsRUFBRTtRQUM3Qyw2QkFBNkI7UUFDN0IsTUFBTSxFQUNKLFVBQVUsRUFDVixNQUFNLEVBQ04sVUFBVSxFQUNWLFFBQVEsRUFDUixLQUFLLEVBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxFQUM5QixPQUFPLEVBQUUsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxFQUM3QyxNQUFNLEVBQUUsRUFBRSxPQUFPLEVBQUUsRUFDbkIsTUFBTSxFQUNOLFFBQVEsR0FDVCxHQUFHLE9BQU8sQ0FBQztRQUVaLGNBQWM7UUFDZCxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsVUFBVSxFQUFFLENBQUM7UUFFbEMsT0FBTztRQUNQLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO1FBRWhDLDJCQUEyQjtRQUMzQixJQUFJLFdBQVcsR0FBRyxFQUFFLENBQUM7UUFDckIsTUFBTSxNQUFNLEdBQUcsTUFBTSxVQUFVLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ2xELElBQUksTUFBTSxFQUFFO1lBQ1YsTUFBTSxRQUFRLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRSxDQUFDLElBQXlCLEVBQUUsRUFBRTtnQkFDN0QsV0FBVyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7Z0JBQ3hCLE9BQU8sSUFBSSxDQUFDO1lBQ2Qs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
@@ -20,7 +20,7 @@ const NewCommand = {
20
20
  hidden: false,
21
21
  run: (toolbox) => __awaiter(void 0, void 0, void 0, function* () {
22
22
  // Retrieve the tools we need
23
- const { filesystem, helper, parameters, patching, print: { error, info, spin, success }, strings: { kebabCase, pascalCase, camelCase }, system, template, } = toolbox;
23
+ const { filesystem, helper, parameters, patching, print: { error, info, spin, success }, prompt: { ask, confirm }, server, strings: { kebabCase, pascalCase, camelCase }, system, template, } = toolbox;
24
24
  // Start timer
25
25
  const timer = system.startTimer();
26
26
  // Info
@@ -50,18 +50,69 @@ const NewCommand = {
50
50
  error(`Module directory "${moduleDir}" already exists.`);
51
51
  return undefined;
52
52
  }
53
+ // Set props
54
+ const props = {};
55
+ const setProps = true;
56
+ let refsSet = false;
57
+ while (setProps) {
58
+ const name = (yield ask({
59
+ type: 'input',
60
+ name: 'input',
61
+ message: `Enter property name (e.g. myProperty) to create new property or leave empty (ENTER)`,
62
+ })).input;
63
+ if (!name.trim()) {
64
+ break;
65
+ }
66
+ let type = (yield ask([
67
+ {
68
+ type: 'select',
69
+ name: 'input',
70
+ message: 'Choose property type',
71
+ choices: ['boolean', 'string', 'number', 'ObjectId / Reference', 'Date', 'Use own'],
72
+ },
73
+ ])).input;
74
+ if (type === 'ObjectId / Reference') {
75
+ type = 'ObjectId';
76
+ }
77
+ if (type === 'Use own')
78
+ type = (yield ask({
79
+ type: 'input',
80
+ name: 'input',
81
+ message: `Enter property type (e.g. MyClass or MyClass[])`,
82
+ })).input;
83
+ let reference;
84
+ if (type === 'ObjectId') {
85
+ reference = (yield ask({
86
+ type: 'input',
87
+ name: 'input',
88
+ initial: pascalCase(name),
89
+ message: `Enter reference for ObjectId`,
90
+ })).input;
91
+ if (reference) {
92
+ refsSet = true;
93
+ }
94
+ }
95
+ const arrayEnding = type.endsWith('[]');
96
+ type = type.replace('[]', '');
97
+ const isArray = arrayEnding || (yield confirm(`Array?`));
98
+ const nullable = yield confirm(`Nullable?`, true);
99
+ props[name] = { name, nullable, isArray, type, reference };
100
+ }
53
101
  const generateSpinner = spin('Generate files');
102
+ const inputTemplate = server.propsForInput(props, { modelName: name, nullable: true });
103
+ const createTemplate = server.propsForInput(props, { modelName: name, nullable: false });
104
+ const modelTemplate = server.propsForModel(props, { modelName: name });
54
105
  // nest-server-module/inputs/xxx.input.ts
55
106
  yield template.generate({
56
107
  template: 'nest-server-module/inputs/template.input.ts.ejs',
57
108
  target: (0, path_1.join)(moduleDir, 'inputs', nameKebab + '.input.ts'),
58
- props: { nameCamel, nameKebab, namePascal },
109
+ props: { nameCamel, nameKebab, namePascal, props: inputTemplate.props, imports: inputTemplate.imports },
59
110
  });
60
111
  // nest-server-module/inputs/xxx-create.input.ts
61
112
  yield template.generate({
62
113
  template: 'nest-server-module/inputs/template-create.input.ts.ejs',
63
114
  target: (0, path_1.join)(moduleDir, 'inputs', nameKebab + '-create.input.ts'),
64
- props: { nameCamel, nameKebab, namePascal },
115
+ props: { nameCamel, nameKebab, namePascal, props: createTemplate.props, imports: createTemplate.imports },
65
116
  });
66
117
  // nest-server-module/output/find-and-count-xxxs-result.output.ts
67
118
  yield template.generate({
@@ -73,7 +124,14 @@ const NewCommand = {
73
124
  yield template.generate({
74
125
  template: 'nest-server-module/template.model.ts.ejs',
75
126
  target: (0, path_1.join)(moduleDir, nameKebab + '.model.ts'),
76
- props: { nameCamel, nameKebab, namePascal },
127
+ props: {
128
+ nameCamel,
129
+ nameKebab,
130
+ namePascal,
131
+ props: modelTemplate.props,
132
+ imports: modelTemplate.imports,
133
+ mappings: modelTemplate.mappings,
134
+ },
77
135
  });
78
136
  // nest-server-module/xxx.module.ts
79
137
  yield template.generate({
@@ -128,6 +186,10 @@ const NewCommand = {
128
186
  info(``);
129
187
  success(`Generated ${namePascal}Module in ${helper.msToMinutesAndSeconds(timer())}m.`);
130
188
  info(``);
189
+ // We're done, so show what to do next
190
+ if (refsSet) {
191
+ success(`HINT: References have been added, so it is necessary to add the corresponding imports!`);
192
+ }
131
193
  if (!toolbox.parameters.options.fromGluegunMenu) {
132
194
  process.exit();
133
195
  }
@@ -136,4 +198,4 @@ const NewCommand = {
136
198
  }),
137
199
  };
138
200
  exports.default = NewCommand;
139
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbW1hbmRzL3NlcnZlci9tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFDQSwrQkFBNEI7QUFHNUI7O0dBRUc7QUFDSCxNQUFNLFVBQVUsR0FBbUI7SUFDakMsSUFBSSxFQUFFLFFBQVE7SUFDZCxLQUFLLEVBQUUsQ0FBQyxHQUFHLENBQUM7SUFDWixXQUFXLEVBQUUsNkJBQTZCO0lBQzFDLE1BQU0sRUFBRSxLQUFLO0lBQ2IsR0FBRyxFQUFFLENBQU8sT0FBK0IsRUFBRSxFQUFFO1FBQzdDLDZCQUE2QjtRQUM3QixNQUFNLEVBQ0osVUFBVSxFQUNWLE1BQU0sRUFDTixVQUFVLEVBQ1YsUUFBUSxFQUNSLEtBQUssRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxFQUNyQyxPQUFPLEVBQUUsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxFQUM3QyxNQUFNLEVBQ04sUUFBUSxHQUNULEdBQUcsT0FBTyxDQUFDO1FBRVosY0FBYztRQUNkLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUVsQyxPQUFPO1FBQ1AsSUFBSSxDQUFDLDRCQUE0QixDQUFDLENBQUM7UUFFbkMsV0FBVztRQUNYLE1BQU0sSUFBSSxHQUFHLE1BQU0sTUFBTSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFO1lBQ25ELElBQUksRUFBRSxhQUFhO1NBQ3BCLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxJQUFJLEVBQUU7WUFDVCxPQUFPO1NBQ1I7UUFFRCxnREFBZ0Q7UUFDaEQsTUFBTSxTQUFTLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2xDLE1BQU0sU0FBUyxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNsQyxNQUFNLFVBQVUsR0FB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
201
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbW1hbmRzL3NlcnZlci9tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFDQSwrQkFBNEI7QUFJNUI7O0dBRUc7QUFDSCxNQUFNLFVBQVUsR0FBbUI7SUFDakMsSUFBSSxFQUFFLFFBQVE7SUFDZCxLQUFLLEVBQUUsQ0FBQyxHQUFHLENBQUM7SUFDWixXQUFXLEVBQUUsNkJBQTZCO0lBQzFDLE1BQU0sRUFBRSxLQUFLO0lBQ2IsR0FBRyxFQUFFLENBQU8sT0FBK0IsRUFBRSxFQUFFO1FBQzdDLDZCQUE2QjtRQUM3QixNQUFNLEVBQ0osVUFBVSxFQUNWLE1BQU0sRUFDTixVQUFVLEVBQ1YsUUFBUSxFQUNSLEtBQUssRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxFQUNyQyxNQUFNLEVBQUUsRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLEVBQ3hCLE1BQU0sRUFDTixPQUFPLEVBQUUsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxFQUM3QyxNQUFNLEVBQ04sUUFBUSxHQUNULEdBQUcsT0FBTyxDQUFDO1FBRVosY0FBYztRQUNkLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUVsQyxPQUFPO1FBQ1AsSUFBSSxDQUFDLDRCQUE0QixDQUFDLENBQUM7UUFFbkMsV0FBVztRQUNYLE1BQU0sSUFBSSxHQUFHLE1BQU0sTUFBTSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFO1lBQ25ELElBQUksRUFBRSxhQUFhO1NBQ3BCLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxJQUFJLEVBQUU7WUFDVCxPQUFPO1NBQ1I7UUFFRCxnREFBZ0Q7UUFDaEQsTUFBTSxTQUFTLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2xDLE1BQU0sU0FB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