@lenne.tech/cli 0.0.107 → 0.0.108
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.
- package/bin/lt +5 -5
- package/build/cli.js +3 -2
- package/build/commands/angular/angular.js +2 -2
- package/build/commands/angular/create.js +20 -20
- package/build/commands/cli/cli.js +3 -3
- package/build/commands/cli/create.js +10 -10
- package/build/commands/cli/rename.js +3 -3
- package/build/commands/components/add.js +41 -41
- package/build/commands/components/components.js +2 -2
- package/build/commands/deployment/create.js +41 -41
- package/build/commands/deployment/deployment.js +2 -2
- package/build/commands/docs/docs.js +3 -3
- package/build/commands/docs/open.js +9 -9
- package/build/commands/fullstack/fullstack.js +2 -2
- package/build/commands/fullstack/init.js +17 -15
- package/build/commands/git/clean.js +6 -6
- package/build/commands/git/clear.js +4 -4
- package/build/commands/git/create.js +7 -7
- package/build/commands/git/force-pull.js +4 -4
- package/build/commands/git/get.js +10 -10
- package/build/commands/git/git.js +3 -3
- package/build/commands/git/rebase.js +2 -2
- package/build/commands/git/rename.js +5 -5
- package/build/commands/git/reset.js +12 -16
- package/build/commands/git/squash.js +9 -9
- package/build/commands/git/undo.js +3 -3
- package/build/commands/git/update.js +4 -4
- package/build/commands/lt.js +4 -4
- package/build/commands/npm/npm.js +3 -3
- package/build/commands/npm/reinit.js +7 -7
- package/build/commands/npm/update.js +6 -6
- package/build/commands/server/add-property.js +131 -0
- package/build/commands/server/create-secret.js +3 -3
- package/build/commands/server/create.js +15 -20
- package/build/commands/server/module.js +64 -109
- package/build/commands/server/object.js +51 -96
- package/build/commands/server/server.js +3 -3
- package/build/commands/server/test.js +9 -9
- package/build/commands/starter/chrome-extension.js +11 -11
- package/build/commands/starter/starter.js +3 -3
- package/build/commands/tools/crypt.js +4 -4
- package/build/commands/tools/jwt-read.js +6 -6
- package/build/commands/tools/regex.js +3 -3
- package/build/commands/tools/sha256.js +4 -4
- package/build/commands/tools/tools.js +3 -3
- package/build/commands/typescript/create.js +14 -14
- package/build/commands/typescript/playground.js +9 -9
- package/build/commands/typescript/typescript.js +3 -3
- package/build/commands/update.js +4 -4
- package/build/extensions/git.js +11 -11
- package/build/extensions/server.js +239 -35
- package/build/extensions/tools.js +6 -6
- package/build/extensions/typescript.js +10 -10
- package/build/interfaces/extended-gluegun-command.js +3 -0
- package/package.json +2 -1
|
@@ -10,23 +10,31 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
10
10
|
};
|
|
11
11
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
12
|
const path_1 = require("path");
|
|
13
|
+
const object_1 = require("./object");
|
|
13
14
|
/**
|
|
14
15
|
* Create a new server module
|
|
15
16
|
*/
|
|
16
17
|
const NewCommand = {
|
|
17
|
-
name: 'module',
|
|
18
18
|
alias: ['m'],
|
|
19
19
|
description: 'Creates a new server module',
|
|
20
20
|
hidden: false,
|
|
21
|
-
|
|
21
|
+
name: 'module',
|
|
22
|
+
run: (toolbox, options) => __awaiter(void 0, void 0, void 0, function* () {
|
|
23
|
+
// Options:
|
|
24
|
+
const { currentItem, objectsToAdd, preventExitProcess, referencesToAdd } = Object.assign({ currentItem: '', objectsToAdd: [], preventExitProcess: false, referencesToAdd: [] }, options);
|
|
22
25
|
// Retrieve the tools we need
|
|
23
|
-
const { filesystem, helper, parameters, patching, print: { error, info, spin, success },
|
|
26
|
+
const { filesystem, helper, parameters, patching, print: { divider, error, info, spin, success }, server, strings: { camelCase, kebabCase, pascalCase }, system, template, } = toolbox;
|
|
24
27
|
// Start timer
|
|
25
28
|
const timer = system.startTimer();
|
|
26
29
|
// Info
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
+
if (currentItem) {
|
|
31
|
+
info(`Creating a new server module for ${currentItem}`);
|
|
32
|
+
}
|
|
33
|
+
else {
|
|
34
|
+
info('Create a new server module');
|
|
35
|
+
}
|
|
36
|
+
const name = yield helper.getInput(currentItem || parameters.first, {
|
|
37
|
+
initial: currentItem || '',
|
|
30
38
|
name: 'module name',
|
|
31
39
|
});
|
|
32
40
|
if (!name) {
|
|
@@ -40,137 +48,69 @@ const NewCommand = {
|
|
|
40
48
|
const cwd = filesystem.cwd();
|
|
41
49
|
const path = cwd.substr(0, cwd.lastIndexOf('src'));
|
|
42
50
|
if (!filesystem.exists((0, path_1.join)(path, 'src'))) {
|
|
43
|
-
info(
|
|
51
|
+
info('');
|
|
44
52
|
error(`No src directory in "${path}".`);
|
|
45
53
|
return undefined;
|
|
46
54
|
}
|
|
47
|
-
const
|
|
48
|
-
if (filesystem.exists(
|
|
49
|
-
info(
|
|
50
|
-
error(`Module directory "${
|
|
55
|
+
const directory = (0, path_1.join)(path, 'src', 'server', 'modules', nameKebab);
|
|
56
|
+
if (filesystem.exists(directory)) {
|
|
57
|
+
info('');
|
|
58
|
+
error(`Module directory "${directory}" already exists.`);
|
|
51
59
|
return undefined;
|
|
52
60
|
}
|
|
53
|
-
|
|
54
|
-
const props = {};
|
|
55
|
-
const setProps = true;
|
|
56
|
-
let refsSet = false;
|
|
57
|
-
let schemaSet = false;
|
|
58
|
-
while (setProps) {
|
|
59
|
-
const name = (yield ask({
|
|
60
|
-
type: 'input',
|
|
61
|
-
name: 'input',
|
|
62
|
-
message: `Enter property name (e.g. myProperty) to create new property or leave empty (ENTER)`,
|
|
63
|
-
})).input;
|
|
64
|
-
if (!name.trim()) {
|
|
65
|
-
break;
|
|
66
|
-
}
|
|
67
|
-
let type = (yield ask([
|
|
68
|
-
{
|
|
69
|
-
type: 'select',
|
|
70
|
-
name: 'input',
|
|
71
|
-
message: 'Choose property type',
|
|
72
|
-
choices: ['boolean', 'string', 'number', 'ObjectId / Reference', 'Date', 'enum', 'Subobject', 'Use own', 'JSON / any'],
|
|
73
|
-
},
|
|
74
|
-
])).input;
|
|
75
|
-
if (type === 'ObjectId / Reference') {
|
|
76
|
-
type = 'ObjectId';
|
|
77
|
-
}
|
|
78
|
-
else if (type === 'JSON / any') {
|
|
79
|
-
type = 'JSON';
|
|
80
|
-
}
|
|
81
|
-
let schema;
|
|
82
|
-
if (type === 'Subobject') {
|
|
83
|
-
type = (yield ask({
|
|
84
|
-
type: 'input',
|
|
85
|
-
name: 'input',
|
|
86
|
-
initial: pascalCase(name),
|
|
87
|
-
message: `Enter property type (e.g. MyClass)`,
|
|
88
|
-
})).input;
|
|
89
|
-
schema = type;
|
|
90
|
-
schemaSet = true;
|
|
91
|
-
}
|
|
92
|
-
let reference;
|
|
93
|
-
let enumRef;
|
|
94
|
-
if (type === 'ObjectId') {
|
|
95
|
-
reference = (yield ask({
|
|
96
|
-
type: 'input',
|
|
97
|
-
name: 'input',
|
|
98
|
-
initial: pascalCase(name),
|
|
99
|
-
message: `Enter reference for ObjectId`,
|
|
100
|
-
})).input;
|
|
101
|
-
if (reference) {
|
|
102
|
-
refsSet = true;
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
else if (type === 'enum') {
|
|
106
|
-
enumRef = (yield ask({
|
|
107
|
-
type: 'input',
|
|
108
|
-
name: 'input',
|
|
109
|
-
initial: pascalCase(name) + 'Enum',
|
|
110
|
-
message: `Enter enum type`,
|
|
111
|
-
})).input;
|
|
112
|
-
if (enumRef) {
|
|
113
|
-
refsSet = true;
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
const arrayEnding = type.endsWith('[]');
|
|
117
|
-
type = type.replace('[]', '');
|
|
118
|
-
const isArray = arrayEnding || (yield confirm(`Array?`));
|
|
119
|
-
const nullable = yield confirm(`Nullable?`, true);
|
|
120
|
-
props[name] = { name, nullable, isArray, type, reference, enumRef, schema };
|
|
121
|
-
}
|
|
61
|
+
const { props, refsSet, schemaSet } = yield server.addProperties({ objectsToAdd, referencesToAdd });
|
|
122
62
|
const generateSpinner = spin('Generate files');
|
|
123
63
|
const inputTemplate = server.propsForInput(props, { modelName: name, nullable: true });
|
|
124
|
-
const createTemplate = server.propsForInput(props, { modelName: name, nullable: false
|
|
64
|
+
const createTemplate = server.propsForInput(props, { create: true, modelName: name, nullable: false });
|
|
125
65
|
const modelTemplate = server.propsForModel(props, { modelName: name });
|
|
126
66
|
// nest-server-module/inputs/xxx.input.ts
|
|
127
67
|
yield template.generate({
|
|
68
|
+
props: { imports: inputTemplate.imports, nameCamel, nameKebab, namePascal, props: inputTemplate.props },
|
|
69
|
+
target: (0, path_1.join)(directory, 'inputs', `${nameKebab}.input.ts`),
|
|
128
70
|
template: 'nest-server-module/inputs/template.input.ts.ejs',
|
|
129
|
-
target: (0, path_1.join)(moduleDir, 'inputs', nameKebab + '.input.ts'),
|
|
130
|
-
props: { nameCamel, nameKebab, namePascal, props: inputTemplate.props, imports: inputTemplate.imports },
|
|
131
71
|
});
|
|
132
72
|
// nest-server-module/inputs/xxx-create.input.ts
|
|
133
73
|
yield template.generate({
|
|
74
|
+
props: { imports: createTemplate.imports, nameCamel, nameKebab, namePascal, props: createTemplate.props },
|
|
75
|
+
target: (0, path_1.join)(directory, 'inputs', `${nameKebab}-create.input.ts`),
|
|
134
76
|
template: 'nest-server-module/inputs/template-create.input.ts.ejs',
|
|
135
|
-
target: (0, path_1.join)(moduleDir, 'inputs', nameKebab + '-create.input.ts'),
|
|
136
|
-
props: { nameCamel, nameKebab, namePascal, props: createTemplate.props, imports: createTemplate.imports },
|
|
137
77
|
});
|
|
138
78
|
// nest-server-module/output/find-and-count-xxxs-result.output.ts
|
|
139
79
|
yield template.generate({
|
|
140
|
-
template: 'nest-server-module/outputs/template-fac-result.output.ts.ejs',
|
|
141
|
-
target: (0, path_1.join)(moduleDir, 'outputs', 'find-and-count-' + nameKebab + 's-result.output.ts'),
|
|
142
80
|
props: { nameCamel, nameKebab, namePascal },
|
|
81
|
+
target: (0, path_1.join)(directory, 'outputs', `find-and-count-${nameKebab}s-result.output.ts`),
|
|
82
|
+
template: 'nest-server-module/outputs/template-fac-result.output.ts.ejs',
|
|
143
83
|
});
|
|
144
84
|
// nest-server-module/xxx.model.ts
|
|
145
85
|
yield template.generate({
|
|
146
|
-
template: 'nest-server-module/template.model.ts.ejs',
|
|
147
|
-
target: (0, path_1.join)(moduleDir, nameKebab + '.model.ts'),
|
|
148
86
|
props: {
|
|
87
|
+
imports: modelTemplate.imports,
|
|
88
|
+
mappings: modelTemplate.mappings,
|
|
149
89
|
nameCamel,
|
|
150
90
|
nameKebab,
|
|
151
91
|
namePascal,
|
|
152
92
|
props: modelTemplate.props,
|
|
153
|
-
imports: modelTemplate.imports,
|
|
154
|
-
mappings: modelTemplate.mappings,
|
|
155
93
|
},
|
|
94
|
+
target: (0, path_1.join)(directory, `${nameKebab}.model.ts`),
|
|
95
|
+
template: 'nest-server-module/template.model.ts.ejs',
|
|
156
96
|
});
|
|
157
97
|
// nest-server-module/xxx.module.ts
|
|
158
98
|
yield template.generate({
|
|
159
|
-
template: 'nest-server-module/template.module.ts.ejs',
|
|
160
|
-
target: (0, path_1.join)(moduleDir, nameKebab + '.module.ts'),
|
|
161
99
|
props: { nameCamel, nameKebab, namePascal },
|
|
100
|
+
target: (0, path_1.join)(directory, `${nameKebab}.module.ts`),
|
|
101
|
+
template: 'nest-server-module/template.module.ts.ejs',
|
|
162
102
|
});
|
|
163
103
|
// nest-server-module/xxx.resolver.ts
|
|
164
104
|
yield template.generate({
|
|
165
|
-
template: 'nest-server-module/template.resolver.ts.ejs',
|
|
166
|
-
target: (0, path_1.join)(moduleDir, nameKebab + '.resolver.ts'),
|
|
167
105
|
props: { nameCamel, nameKebab, namePascal },
|
|
106
|
+
target: (0, path_1.join)(directory, `${nameKebab}.resolver.ts`),
|
|
107
|
+
template: 'nest-server-module/template.resolver.ts.ejs',
|
|
168
108
|
});
|
|
169
109
|
// nest-server-module/xxx.service.ts
|
|
170
110
|
yield template.generate({
|
|
171
|
-
template: 'nest-server-module/template.service.ts.ejs',
|
|
172
|
-
target: (0, path_1.join)(moduleDir, nameKebab + '.service.ts'),
|
|
173
111
|
props: { nameCamel, nameKebab, namePascal },
|
|
112
|
+
target: (0, path_1.join)(directory, `${nameKebab}.service.ts`),
|
|
113
|
+
template: 'nest-server-module/template.service.ts.ejs',
|
|
174
114
|
});
|
|
175
115
|
generateSpinner.succeed('Files generated');
|
|
176
116
|
const serverModule = (0, path_1.join)(path, 'src', 'server', 'server.module.ts');
|
|
@@ -178,42 +118,57 @@ const NewCommand = {
|
|
|
178
118
|
const includeSpinner = spin('Include module into server');
|
|
179
119
|
// Import module
|
|
180
120
|
yield patching.patch(serverModule, {
|
|
181
|
-
insert: `import { ${namePascal}Module } from './modules/${nameKebab}/${nameKebab}.module';\n`,
|
|
182
121
|
before: 'import',
|
|
122
|
+
insert: `import { ${namePascal}Module } from './modules/${nameKebab}/${nameKebab}.module';\n`,
|
|
183
123
|
});
|
|
184
124
|
// Add Module
|
|
185
125
|
yield patching.patch(serverModule, {
|
|
186
|
-
insert: ` ${namePascal}Module,\n `,
|
|
187
126
|
after: new RegExp('imports:[^\\]]*', 'm'),
|
|
127
|
+
insert: ` ${namePascal}Module,\n `,
|
|
188
128
|
});
|
|
189
129
|
// Add comma if necessary
|
|
190
130
|
yield patching.patch(serverModule, {
|
|
191
131
|
insert: '$1,$2',
|
|
192
|
-
replace: new RegExp(
|
|
132
|
+
replace: new RegExp(`([^,\\s])(\\s*${namePascal}Module,\\s*\\])`),
|
|
193
133
|
});
|
|
194
134
|
includeSpinner.succeed('Module included');
|
|
195
135
|
}
|
|
196
136
|
else {
|
|
197
|
-
info(
|
|
137
|
+
info('Don\'t forget to include the module into your main module.');
|
|
198
138
|
}
|
|
199
139
|
// Linting
|
|
200
140
|
// if (await confirm('Run lint?', false)) {
|
|
201
141
|
// await system.run('npm run lint');
|
|
202
142
|
// }
|
|
203
143
|
// We're done, so show what to do next
|
|
204
|
-
info(
|
|
144
|
+
info('');
|
|
205
145
|
success(`Generated ${namePascal}Module in ${helper.msToMinutesAndSeconds(timer())}m.`);
|
|
206
|
-
info(
|
|
207
|
-
//
|
|
208
|
-
if (
|
|
209
|
-
|
|
146
|
+
info('');
|
|
147
|
+
// Add additional references
|
|
148
|
+
if (referencesToAdd.length > 0) {
|
|
149
|
+
divider();
|
|
150
|
+
const nextRef = referencesToAdd.shift().reference;
|
|
151
|
+
yield NewCommand.run(toolbox, { currentItem: nextRef, objectsToAdd, preventExitProcess: true, referencesToAdd });
|
|
210
152
|
}
|
|
211
|
-
|
|
212
|
-
|
|
153
|
+
// Add additional objects
|
|
154
|
+
if (objectsToAdd.length > 0) {
|
|
155
|
+
divider();
|
|
156
|
+
const nextObj = objectsToAdd.shift().object;
|
|
157
|
+
yield object_1.default.run(toolbox, { currentItem: nextObj, objectsToAdd, preventExitProcess: true, referencesToAdd });
|
|
158
|
+
}
|
|
159
|
+
divider();
|
|
160
|
+
// We're done, so show what to do next
|
|
161
|
+
if (!preventExitProcess) {
|
|
162
|
+
if (refsSet || schemaSet) {
|
|
163
|
+
success('HINT: References / Schemata have been added, so it is necessary to add the corresponding imports!');
|
|
164
|
+
}
|
|
165
|
+
if (!toolbox.parameters.options.fromGluegunMenu) {
|
|
166
|
+
process.exit();
|
|
167
|
+
}
|
|
213
168
|
}
|
|
214
169
|
// For tests
|
|
215
170
|
return `new module ${name}`;
|
|
216
171
|
}),
|
|
217
172
|
};
|
|
218
173
|
exports.default = NewCommand;
|
|
219
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
174
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbW1hbmRzL3NlcnZlci9tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBQSwrQkFBNEI7QUFJNUIscUNBQWlDO0FBRWpDOztHQUVHO0FBQ0gsTUFBTSxVQUFVLEdBQTJCO0lBQ3pDLEtBQUssRUFBRSxDQUFDLEdBQUcsQ0FBQztJQUNaLFdBQVcsRUFBRSw2QkFBNkI7SUFDMUMsTUFBTSxFQUFFLEtBQUs7SUFDYixJQUFJLEVBQUUsUUFBUTtJQUNkLEdBQUcsRUFBRSxDQUNILE9BQStCLEVBQy9CLE9BS0MsRUFDRCxFQUFFO1FBRUYsV0FBVztRQUNYLE1BQU0sRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLGtCQUFrQixFQUFFLGVBQWUsRUFBRSxtQkFDdEUsV0FBVyxFQUFFLEVBQUUsRUFDZixZQUFZLEVBQUUsRUFBRSxFQUNoQixrQkFBa0IsRUFBRSxLQUFLLEVBQ3pCLGVBQWUsRUFBRSxFQUFFLElBQ2hCLE9BQU8sQ0FDWCxDQUFDO1FBRUYsNkJBQTZCO1FBQzdCLE1BQU0sRUFDSixVQUFVLEVBQ1YsTUFBTSxFQUNOLFVBQVUsRUFDVixRQUFRLEVBQ1IsS0FBSyxFQUFFLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxFQUM5QyxNQUFNLEVBQ04sT0FBTyxFQUFFLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsRUFDN0MsTUFBTSxFQUNOLFFBQVEsR0FDVCxHQUFHLE9BQU8sQ0FBQztRQUVaLGNBQWM7UUFDZCxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsVUFBVSxFQUFFLENBQUM7UUFFbEMsT0FBTztRQUNQLElBQUksV0FBVyxFQUFFLENBQUM7WUFDaEIsSUFBSSxDQUFDLG9DQUFvQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO1FBQzFELENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxDQUFDLDRCQUE0QixDQUFDLENBQUM7UUFDckMsQ0FBQztRQUVELE1BQU0sSUFBSSxHQUFHLE1BQU0sTUFBTSxDQUFDLFFBQVEsQ0FBQyxXQUFXLElBQUksVUFBVSxDQUFDLEtBQUssRUFBRTtZQUNsRSxPQUFPLEVBQUUsV0FBVyxJQUFJLEVBQUU7WUFDMUIsSUFBSSxFQUFFLGFBQWE7U0FDcEIsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ1YsT0FBTztRQUNULENBQUM7UUFFRCxnREFBZ0Q7UUFDaEQsTUFBTSxTQUFTLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2xDLE1BQU0sU0FBUyxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNsQyxNQUFNLFVBQVUsR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFcEMscUJBQXFCO1FBQ3JCLE1BQU0sR0FBRyxHQUFHLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUM3QixNQUFNLElBQUksR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDbkQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsSUFBQSxXQUFJLEVBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUMxQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDVCxLQUFLLENBQUMsd0JBQXdCLElBQUksSUFBSSxDQUFDLENBQUM7WUFDeEMsT0FBTyxTQUFTLENBQUM7UUFDbkIsQ0FBQztRQUNELE1BQU0sU0FBUyxHQUFHLElBQUEsV0FBSSxFQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxTQUFTLENBQUMsQ0FBQztRQUNwRSxJQUFJLFVBQVUsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztZQUNqQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDVCxLQUFLLENBQUMscUJBQXFCLFNBQVMsbUJBQW1CLENBQUMsQ0FBQztZQUN6RCxPQUFPLFNBQVMsQ0FBQztRQUNuQixDQUFDO1FBRUQsTUFBTSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLEdBQUcsTUFBTSxNQUFNLENBQUMsYUFBYSxDQUFDLEVBQUUsWUFBWSxFQUFFLGVBQWUsRUFBRSxDQUFDLENBQUM7UUFFcEcsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDL0MsTUFBTSxhQUFhLEdBQUcsTUFBTSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ3ZGLE1BQU0sY0FBYyxHQUFHLE1BQU0sQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBQ3ZHLE1BQU0sYUFBYSxHQUFHLE1BQU0sQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7UUFFdkUseUNBQXlDO1FBQ3pDLE1BQU0sUUFBUSxDQUFDLFFBQVEsQ0FBQztZQUN0QixLQUFLLEVBQUUsRUFBRSxPQUFPLEVBQUUsYUFBYSxDQUFDLE9BQU8sRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsYUFBYSxDQUFDLEtBQUssRUFBRTtZQUN2RyxNQUFNLEVBQUUsSUFBQSxXQUFJLEVBQUMsU0FBUyxFQUFFLFFBQVEsRUFBRSxHQUFHLFNBQVMsV0FBVyxDQUFDO1lBQzFELFFBQVEsRUFBRSxpREFBaUQ7U0FDNUQsQ0FBQyxDQUFDO1FBRUgsZ0RBQWdEO1FBQ2hELE1BQU0sUUFBUSxDQUFDLFFBQVEsQ0FBQztZQUN0QixLQUFLLEVBQUUsRUFBRSxPQUFPLEVBQUUsY0FBYyxDQUFDLE9BQU8sRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsY0FBYyxDQUFDLEtBQUssRUFBRTtZQUN6RyxNQUFNLEVBQUUsSUFBQSxXQUFJLEVBQUMsU0FBUyxFQUFFLFFBQVEsRUFBRSxHQUFHLFNBQVMsa0JBQWtCLENBQUM7WUFDakUsUUFBUSxFQUFFLHdEQUF3RDtTQUNuRSxDQUFDLENBQUM7UUFFSCxpRUFBaUU7UUFDakUsTUFBTSxRQUFRLENBQUMsUUFBUSxDQUFDO1lBQ3RCLEtBQUssRUFBRSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFO1lBQzNDLE1BQU0sRUFBRSxJQUFBLFdBQUksRUFBQyxTQUFTLEVBQUUsU0FBUyxFQUFFLGtCQUFrQixTQUFTLG9CQUFvQixDQUFDO1lBQ25GLFFBQVEsRUFBRSw4REFBOEQ7U0FDekUsQ0FBQyxDQUFDO1FBRUgsa0NBQWtDO1FBQ2xDLE1BQU0sUUFBUSxDQUFDLFFBQVEsQ0FBQztZQUN0QixLQUFLLEVBQUU7Z0JBQ0wsT0FBTyxFQUFFLGFBQWEsQ0FBQyxPQUFPO2dCQUM5QixRQUFRLEVBQUUsYUFBYSxDQUFDLFFBQVE7Z0JBQ2hDLFNBQVM7Z0JBQ1QsU0FBUztnQkFDVCxVQUFVO2dCQUNWLEtBQUssRUFBRSxhQUFhLENBQUMsS0FBSzthQUMzQjtZQUNELE1BQU0sRUFBRSxJQUFBLFdBQUksRUFBQyxTQUFTLEVBQUUsR0FBRyxTQUFTLFdBQVcsQ0FBQztZQUNoRCxRQUFRLEVBQUUsMENBQTBDO1NBQ3JELENBQUMsQ0FBQztRQUVILG1DQUFtQztRQUNuQyxNQUFNLFFBQVEsQ0FBQyxRQUFRLENBQUM7WUFDdEIsS0FBSyxFQUFFLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUU7WUFDM0MsTUFBTSxFQUFFLElBQUEsV0FBSSxFQUFDLFNBQVMsRUFBRSxHQUFHLFNBQVMsWUFBWSxDQUFDO1lBQ2pELFFBQVEsRUFBRSwyQ0FBMkM7U0FDdEQsQ0FBQyxDQUFDO1FBRUgscUNBQXFDO1FBQ3JDLE1BQU0sUUFBUSxDQUFDLFFBQVEsQ0FBQztZQUN0QixLQUFLLEVBQUUsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRTtZQUMzQyxNQUFNLEVBQUUsSUFBQSxXQUFJLEVBQUMsU0FBUyxFQUFFLEdBQUcsU0FBUyxjQUFjLENBQUM7WUFDbkQsUUFBUSxFQUFFLDZDQUE2QztTQUN4RCxDQUFDLENBQUM7UUFFSCxvQ0FBb0M7UUFDcEMsTUFBTSxRQUFRLENBQUMsUUFBUSxDQUFDO1lBQ3RCLEtBQUssRUFBRSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFO1lBQzNDLE1BQU0sRUFBRSxJQUFBLFdBQUksRUFBQyxTQUFTLEVBQUUsR0FBRyxTQUFTLGFBQWEsQ0FBQztZQUNsRCxRQUFRLEVBQUUsNENBQTRDO1NBQ3ZELENBQUMsQ0FBQztRQUVILGVBQWUsQ0FBQyxPQUFPLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUUzQyxNQUFNLFlBQVksR0FBRyxJQUFBLFdBQUksRUFBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO1FBQ3JFLElBQUksVUFBVSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDO1lBQ3BDLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDO1lBRTFELGdCQUFnQjtZQUNoQixNQUFNLFFBQVEsQ0FBQyxLQUFLLENBQUMsWUFBWSxFQUFFO2dCQUNqQyxNQUFNLEVBQUUsUUFBUTtnQkFDaEIsTUFBTSxFQUFFLFlBQVksVUFBVSw0QkFBNEIsU0FBUyxJQUFJLFNBQVMsYUFBYTthQUM5RixDQUFDLENBQUM7WUFFSCxhQUFhO1lBQ2IsTUFBTSxRQUFRLENBQUMsS0FBSyxDQUFDLFlBQVksRUFBRTtnQkFDakMsS0FBSyxFQUFFLElBQUksTUFBTSxDQUFDLGlCQUFpQixFQUFFLEdBQUcsQ0FBQztnQkFDekMsTUFBTSxFQUFFLEtBQUssVUFBVSxhQUFhO2FBQ3JDLENBQUMsQ0FBQztZQUVILHlCQUF5QjtZQUN6QixNQUFNLFFBQVEsQ0FBQyxLQUFLLENBQUMsWUFBWSxFQUFFO2dCQUNqQyxNQUFNLEVBQUUsT0FBTztnQkFDZixPQUFPLEVBQUUsSUFBSSxNQUFNLENBQUMsaUJBQWlCLFVBQVUsaUJBQWlCLENBQUM7YUFDbEUsQ0FBQyxDQUFDO1lBRUgsY0FBYyxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQzVDLENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxDQUFDLDREQUE0RCxDQUFDLENBQUM7UUFDckUsQ0FBQztRQUVELFVBQVU7UUFDViwyQ0FBMkM7UUFDM0Msc0NBQXNDO1FBQ3RDLElBQUk7UUFFSixzQ0FBc0M7UUFDdEMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ1QsT0FBTyxDQUFDLGFBQWEsVUFBVSxhQUFhLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN2RixJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7UUFFVCw0QkFBNEI7UUFDNUIsSUFBSSxlQUFlLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQy9CLE9BQU8sRUFBRSxDQUFDO1lBQ1YsTUFBTSxPQUFPLEdBQUcsZUFBZSxDQUFDLEtBQUssRUFBRSxDQUFDLFNBQVMsQ0FBQztZQUNsRCxNQUFNLFVBQVUsQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLEVBQUUsV0FBVyxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsa0JBQWtCLEVBQUUsSUFBSSxFQUFFLGVBQWUsRUFBRSxDQUFDLENBQUM7UUFDbkgsQ0FBQztRQUVELHlCQUF5QjtRQUN6QixJQUFJLFlBQVksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDNUIsT0FBTyxFQUFFLENBQUM7WUFDVixNQUFNLE9BQU8sR0FBRyxZQUFZLENBQUMsS0FBSyxFQUFFLENBQUMsTUFBTSxDQUFDO1lBQzVDLE1BQU0sZ0JBQVMsQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLEVBQUUsV0FBVyxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsa0JBQWtCLEVBQUUsSUFBSSxFQUFFLGVBQWUsRUFBRSxDQUFDLENBQUM7UUFDbEgsQ0FBQztRQUVELE9BQU8sRUFBRSxDQUFDO1FBRVYsc0NBQXNDO1FBQ3RDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1lBQ3hCLElBQUksT0FBTyxJQUFJLFNBQVMsRUFBRSxDQUFDO2dCQUN6QixPQUFPLENBQUMsbUdBQW1HLENBQUMsQ0FBQztZQUMvRyxDQUFDO1lBRUQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLGVBQWUsRUFBRSxDQUFDO2dCQUNoRCxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDakIsQ0FBQztRQUNILENBQUM7UUFFRCxZQUFZO1FBQ1osT0FBTyxjQUFjLElBQUksRUFBRSxDQUFDO0lBQzlCLENBQUMsQ0FBQTtDQUNGLENBQUM7QUFFRixrQkFBZSxVQUFVLENBQUMifQ==
|
|
@@ -10,23 +10,32 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
10
10
|
};
|
|
11
11
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
12
|
const path_1 = require("path");
|
|
13
|
+
const module_1 = require("./module");
|
|
13
14
|
/**
|
|
14
15
|
* Create a new server module
|
|
15
16
|
*/
|
|
16
17
|
const NewCommand = {
|
|
17
|
-
name: 'object',
|
|
18
18
|
alias: ['o'],
|
|
19
19
|
description: 'Creates a new server object (with inputs)',
|
|
20
20
|
hidden: false,
|
|
21
|
-
|
|
21
|
+
name: 'object',
|
|
22
|
+
run: (toolbox, options) => __awaiter(void 0, void 0, void 0, function* () {
|
|
23
|
+
// Options:
|
|
24
|
+
const { currentItem, objectsToAdd, preventExitProcess, referencesToAdd } = Object.assign({ currentItem: '', objectsToAdd: [], preventExitProcess: false, referencesToAdd: [] }, options);
|
|
22
25
|
// Retrieve the tools we need
|
|
23
|
-
const { filesystem, helper, parameters, print: { error, info, spin, success },
|
|
26
|
+
const { filesystem, helper, parameters, print: { divider, error, info, spin, success }, server, strings: { camelCase, kebabCase, pascalCase }, system, template, } = toolbox;
|
|
24
27
|
// Start timer
|
|
25
28
|
const timer = system.startTimer();
|
|
26
29
|
// Info
|
|
27
|
-
|
|
30
|
+
if (currentItem) {
|
|
31
|
+
info(`Create a new server object (with inputs) for ${currentItem}`);
|
|
32
|
+
}
|
|
33
|
+
else {
|
|
34
|
+
info('Create a new server object (with inputs)');
|
|
35
|
+
}
|
|
28
36
|
// Get name
|
|
29
|
-
const name = yield helper.getInput(parameters.first, {
|
|
37
|
+
const name = yield helper.getInput(currentItem || parameters.first, {
|
|
38
|
+
initial: currentItem || '',
|
|
30
39
|
name: 'object name',
|
|
31
40
|
});
|
|
32
41
|
if (!name) {
|
|
@@ -40,113 +49,45 @@ const NewCommand = {
|
|
|
40
49
|
const cwd = filesystem.cwd();
|
|
41
50
|
const path = cwd.substr(0, cwd.lastIndexOf('src'));
|
|
42
51
|
if (!filesystem.exists((0, path_1.join)(path, 'src'))) {
|
|
43
|
-
info(
|
|
52
|
+
info('');
|
|
44
53
|
error(`No src directory in "${path}".`);
|
|
45
54
|
return undefined;
|
|
46
55
|
}
|
|
47
|
-
const
|
|
48
|
-
if (filesystem.exists(
|
|
49
|
-
info(
|
|
50
|
-
error(`Module directory "${
|
|
56
|
+
const directory = (0, path_1.join)(path, 'src', 'server', 'common', 'objects', nameKebab);
|
|
57
|
+
if (filesystem.exists(directory)) {
|
|
58
|
+
info('');
|
|
59
|
+
error(`Module directory "${directory}" already exists.`);
|
|
51
60
|
return undefined;
|
|
52
61
|
}
|
|
53
|
-
|
|
54
|
-
const props = {};
|
|
55
|
-
const setProps = true;
|
|
56
|
-
let refsSet = false;
|
|
57
|
-
let schemaSet = false;
|
|
58
|
-
while (setProps) {
|
|
59
|
-
const name = (yield ask({
|
|
60
|
-
type: 'input',
|
|
61
|
-
name: 'input',
|
|
62
|
-
message: `Enter property name (e.g. myProperty) to create new property or leave empty (ENTER)`,
|
|
63
|
-
})).input;
|
|
64
|
-
if (!name.trim()) {
|
|
65
|
-
break;
|
|
66
|
-
}
|
|
67
|
-
let type = (yield ask([
|
|
68
|
-
{
|
|
69
|
-
type: 'select',
|
|
70
|
-
name: 'input',
|
|
71
|
-
message: 'Choose property type',
|
|
72
|
-
choices: ['boolean', 'string', 'number', 'ObjectId / Reference', 'Date', 'enum', 'Subobject', 'Use own', 'JSON / any'],
|
|
73
|
-
},
|
|
74
|
-
])).input;
|
|
75
|
-
if (type === 'ObjectId / Reference') {
|
|
76
|
-
type = 'ObjectId';
|
|
77
|
-
}
|
|
78
|
-
else if (type === 'JSON / any') {
|
|
79
|
-
type = 'JSON';
|
|
80
|
-
}
|
|
81
|
-
let schema;
|
|
82
|
-
if (type === 'Subobject') {
|
|
83
|
-
type = (yield ask({
|
|
84
|
-
type: 'input',
|
|
85
|
-
name: 'input',
|
|
86
|
-
initial: pascalCase(name),
|
|
87
|
-
message: `Enter property type (e.g. MyClass)`,
|
|
88
|
-
})).input;
|
|
89
|
-
schema = type;
|
|
90
|
-
schemaSet = true;
|
|
91
|
-
}
|
|
92
|
-
let reference;
|
|
93
|
-
let enumRef;
|
|
94
|
-
if (type === 'ObjectId') {
|
|
95
|
-
reference = (yield ask({
|
|
96
|
-
type: 'input',
|
|
97
|
-
name: 'input',
|
|
98
|
-
initial: pascalCase(name),
|
|
99
|
-
message: `Enter reference for ObjectId`,
|
|
100
|
-
})).input;
|
|
101
|
-
if (reference) {
|
|
102
|
-
refsSet = true;
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
else if (type === 'enum') {
|
|
106
|
-
enumRef = (yield ask({
|
|
107
|
-
type: 'input',
|
|
108
|
-
name: 'input',
|
|
109
|
-
initial: pascalCase(name) + 'Enum',
|
|
110
|
-
message: `Enter enum type`,
|
|
111
|
-
})).input;
|
|
112
|
-
if (enumRef) {
|
|
113
|
-
refsSet = true;
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
const arrayEnding = type.endsWith('[]');
|
|
117
|
-
type = type.replace('[]', '');
|
|
118
|
-
const isArray = arrayEnding || (yield confirm(`Array?`));
|
|
119
|
-
const nullable = yield confirm(`Nullable?`, true);
|
|
120
|
-
props[name] = { name, nullable, isArray, type, reference, enumRef, schema };
|
|
121
|
-
}
|
|
62
|
+
const { props, refsSet, schemaSet } = yield server.addProperties({ objectsToAdd, referencesToAdd });
|
|
122
63
|
const generateSpinner = spin('Generate files');
|
|
123
64
|
const inputTemplate = server.propsForInput(props, { modelName: name, nullable: true });
|
|
124
|
-
const createTemplate = server.propsForInput(props, { modelName: name, nullable: false
|
|
65
|
+
const createTemplate = server.propsForInput(props, { create: true, modelName: name, nullable: false });
|
|
125
66
|
const objectTemplate = server.propsForModel(props, { modelName: name });
|
|
126
67
|
// nest-server-module/inputs/xxx.input.ts
|
|
127
68
|
yield template.generate({
|
|
69
|
+
props: { imports: inputTemplate.imports, nameCamel, nameKebab, namePascal, props: inputTemplate.props },
|
|
70
|
+
target: (0, path_1.join)(directory, `${nameKebab}.input.ts`),
|
|
128
71
|
template: 'nest-server-object/template.input.ts.ejs',
|
|
129
|
-
target: (0, path_1.join)(objectDir, nameKebab + '.input.ts'),
|
|
130
|
-
props: { nameCamel, nameKebab, namePascal, props: inputTemplate.props, imports: inputTemplate.imports },
|
|
131
72
|
});
|
|
132
73
|
// nest-server-object/inputs/xxx-create.input.ts
|
|
133
74
|
yield template.generate({
|
|
75
|
+
props: { imports: createTemplate.imports, nameCamel, nameKebab, namePascal, props: createTemplate.props },
|
|
76
|
+
target: (0, path_1.join)(directory, `${nameKebab}-create.input.ts`),
|
|
134
77
|
template: 'nest-server-object/template-create.input.ts.ejs',
|
|
135
|
-
target: (0, path_1.join)(objectDir, nameKebab + '-create.input.ts'),
|
|
136
|
-
props: { nameCamel, nameKebab, namePascal, props: createTemplate.props, imports: createTemplate.imports },
|
|
137
78
|
});
|
|
138
79
|
// nest-server-module/xxx.model.ts
|
|
139
80
|
yield template.generate({
|
|
140
|
-
template: 'nest-server-object/template.object.ts.ejs',
|
|
141
|
-
target: (0, path_1.join)(objectDir, nameKebab + '.object.ts'),
|
|
142
81
|
props: {
|
|
82
|
+
imports: objectTemplate.imports,
|
|
83
|
+
mappings: objectTemplate.mappings,
|
|
143
84
|
nameCamel,
|
|
144
85
|
nameKebab,
|
|
145
86
|
namePascal,
|
|
146
87
|
props: objectTemplate.props,
|
|
147
|
-
imports: objectTemplate.imports,
|
|
148
|
-
mappings: objectTemplate.mappings,
|
|
149
88
|
},
|
|
89
|
+
target: (0, path_1.join)(directory, `${nameKebab}.object.ts`),
|
|
90
|
+
template: 'nest-server-object/template.object.ts.ejs',
|
|
150
91
|
});
|
|
151
92
|
generateSpinner.succeed('Files generated');
|
|
152
93
|
// Linting
|
|
@@ -154,19 +95,33 @@ const NewCommand = {
|
|
|
154
95
|
// await system.run('npm run lint');
|
|
155
96
|
// }
|
|
156
97
|
// We're done, so show what to do next
|
|
157
|
-
info(
|
|
98
|
+
info('');
|
|
158
99
|
success(`Generated ${namePascal}Object in ${helper.msToMinutesAndSeconds(timer())}m.`);
|
|
159
|
-
info(
|
|
160
|
-
//
|
|
161
|
-
if (
|
|
162
|
-
|
|
100
|
+
info('');
|
|
101
|
+
// Add additional objects
|
|
102
|
+
if (objectsToAdd.length > 0) {
|
|
103
|
+
divider();
|
|
104
|
+
const nextObj = objectsToAdd.shift().object;
|
|
105
|
+
yield NewCommand.run(toolbox, { currentItem: nextObj, objectsToAdd, preventExitProcess: true, referencesToAdd });
|
|
106
|
+
}
|
|
107
|
+
// Add additional references
|
|
108
|
+
if (referencesToAdd.length > 0) {
|
|
109
|
+
divider();
|
|
110
|
+
const nextRef = referencesToAdd.shift().reference;
|
|
111
|
+
yield module_1.default.run(toolbox, { currentItem: nextRef, objectsToAdd, preventExitProcess: true, referencesToAdd });
|
|
163
112
|
}
|
|
164
|
-
|
|
165
|
-
|
|
113
|
+
// We're done, so show what to do next
|
|
114
|
+
if (!preventExitProcess) {
|
|
115
|
+
if (refsSet || schemaSet) {
|
|
116
|
+
success('HINT: References / Schemata have been added, so it is necessary to add the corresponding imports!');
|
|
117
|
+
}
|
|
118
|
+
if (!toolbox.parameters.options.fromGluegunMenu) {
|
|
119
|
+
process.exit();
|
|
120
|
+
}
|
|
166
121
|
}
|
|
167
122
|
// For tests
|
|
168
123
|
return `new object ${name}`;
|
|
169
124
|
}),
|
|
170
125
|
};
|
|
171
126
|
exports.default = NewCommand;
|
|
172
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
127
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2JqZWN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbW1hbmRzL3NlcnZlci9vYmplY3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBQSwrQkFBNEI7QUFJNUIscUNBQWlDO0FBRWpDOztHQUVHO0FBQ0gsTUFBTSxVQUFVLEdBQTJCO0lBQ3pDLEtBQUssRUFBRSxDQUFDLEdBQUcsQ0FBQztJQUNaLFdBQVcsRUFBRSwyQ0FBMkM7SUFDeEQsTUFBTSxFQUFFLEtBQUs7SUFDYixJQUFJLEVBQUUsUUFBUTtJQUNkLEdBQUcsRUFBRSxDQUNILE9BQStCLEVBQy9CLE9BS0MsRUFDRCxFQUFFO1FBRUYsV0FBVztRQUNYLE1BQU0sRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLGtCQUFrQixFQUFFLGVBQWUsRUFBRSxtQkFDdEUsV0FBVyxFQUFFLEVBQUUsRUFDZixZQUFZLEVBQUUsRUFBRSxFQUNoQixrQkFBa0IsRUFBRSxLQUFLLEVBQ3pCLGVBQWUsRUFBRSxFQUFFLElBQ2hCLE9BQU8sQ0FDWCxDQUFDO1FBRUYsNkJBQTZCO1FBQzdCLE1BQU0sRUFDSixVQUFVLEVBQ1YsTUFBTSxFQUNOLFVBQVUsRUFDVixLQUFLLEVBQUUsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLEVBQzlDLE1BQU0sRUFDTixPQUFPLEVBQUUsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxFQUM3QyxNQUFNLEVBQ04sUUFBUSxHQUNULEdBQUcsT0FBTyxDQUFDO1FBRVosY0FBYztRQUNkLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUVsQyxPQUFPO1FBQ1AsSUFBSSxXQUFXLEVBQUUsQ0FBQztZQUNoQixJQUFJLENBQUMsZ0RBQWdELFdBQVcsRUFBRSxDQUFDLENBQUM7UUFDdEUsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENB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
|
|
@@ -13,13 +13,13 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
13
13
|
* Server commands
|
|
14
14
|
*/
|
|
15
15
|
module.exports = {
|
|
16
|
-
name: 'server',
|
|
17
16
|
alias: ['s'],
|
|
18
17
|
description: 'Server commands',
|
|
19
18
|
hidden: true,
|
|
19
|
+
name: 'server',
|
|
20
20
|
run: (toolbox) => __awaiter(void 0, void 0, void 0, function* () {
|
|
21
21
|
yield toolbox.helper.showMenu('server');
|
|
22
22
|
return 'server';
|
|
23
|
-
})
|
|
23
|
+
}),
|
|
24
24
|
};
|
|
25
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
25
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbW1hbmRzL3NlcnZlci9zZXJ2ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFFQTs7R0FFRztBQUNILE1BQU0sQ0FBQyxPQUFPLEdBQUc7SUFDZixLQUFLLEVBQUUsQ0FBQyxHQUFHLENBQUM7SUFDWixXQUFXLEVBQUUsaUJBQWlCO0lBQzlCLE1BQU0sRUFBRSxJQUFJO0lBQ1osSUFBSSxFQUFFLFFBQVE7SUFDZCxHQUFHLEVBQUUsQ0FBTyxPQUErQixFQUFFLEVBQUU7UUFDN0MsTUFBTSxPQUFPLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN4QyxPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDLENBQUE7Q0FDRixDQUFDIn0=
|
|
@@ -14,10 +14,10 @@ const path_1 = require("path");
|
|
|
14
14
|
* Create a new server
|
|
15
15
|
*/
|
|
16
16
|
const NewCommand = {
|
|
17
|
-
name: 'test',
|
|
18
17
|
alias: ['t'],
|
|
19
18
|
description: 'Creates a new test file',
|
|
20
19
|
hidden: false,
|
|
20
|
+
name: 'test',
|
|
21
21
|
run: (toolbox) => __awaiter(void 0, void 0, void 0, function* () {
|
|
22
22
|
// Retrieve the tools we need
|
|
23
23
|
const { filesystem, helper, parameters, print: { error, info, spin, success }, strings: { camelCase, kebabCase, pascalCase }, system, template, } = toolbox;
|
|
@@ -40,30 +40,30 @@ const NewCommand = {
|
|
|
40
40
|
const cwd = filesystem.cwd();
|
|
41
41
|
const path = cwd.substr(0, cwd.lastIndexOf('src'));
|
|
42
42
|
if (!filesystem.exists((0, path_1.join)(path, 'tests'))) {
|
|
43
|
-
info(
|
|
43
|
+
info('');
|
|
44
44
|
error(`No tests directory in "${path}".`);
|
|
45
45
|
return undefined;
|
|
46
46
|
}
|
|
47
47
|
const testsDir = (0, path_1.join)(path, 'tests');
|
|
48
|
-
const filePath = (0, path_1.join)(testsDir, nameKebab
|
|
48
|
+
const filePath = (0, path_1.join)(testsDir, `${nameKebab}.e2e-spec.ts`);
|
|
49
49
|
// Check if file already exists
|
|
50
50
|
if (filesystem.exists(filePath)) {
|
|
51
|
-
info(
|
|
51
|
+
info('');
|
|
52
52
|
error(`There's already a file named "${filePath}"`);
|
|
53
53
|
return undefined;
|
|
54
54
|
}
|
|
55
55
|
const generateSpinner = spin('Generate test file');
|
|
56
56
|
// nest-server-tests/tests.e2e-spec.ts.ejs
|
|
57
57
|
yield template.generate({
|
|
58
|
-
template: 'nest-server-tests/tests.e2e-spec.ts.ejs',
|
|
59
|
-
target: filePath,
|
|
60
58
|
props: { nameCamel, nameKebab, namePascal },
|
|
59
|
+
target: filePath,
|
|
60
|
+
template: 'nest-server-tests/tests.e2e-spec.ts.ejs',
|
|
61
61
|
});
|
|
62
62
|
generateSpinner.succeed('Generate test file');
|
|
63
63
|
// We're done, so show what to do next
|
|
64
|
-
info(
|
|
64
|
+
info('');
|
|
65
65
|
success(`Generated ${namePascal} test file in ${helper.msToMinutesAndSeconds(timer())}m.`);
|
|
66
|
-
info(
|
|
66
|
+
info('');
|
|
67
67
|
if (!toolbox.parameters.options.fromGluegunMenu) {
|
|
68
68
|
process.exit();
|
|
69
69
|
}
|
|
@@ -72,4 +72,4 @@ const NewCommand = {
|
|
|
72
72
|
}),
|
|
73
73
|
};
|
|
74
74
|
exports.default = NewCommand;
|
|
75
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
75
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21tYW5kcy9zZXJ2ZXIvdGVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUNBLCtCQUE0QjtBQUk1Qjs7R0FFRztBQUNILE1BQU0sVUFBVSxHQUFtQjtJQUNqQyxLQUFLLEVBQUUsQ0FBQyxHQUFHLENBQUM7SUFDWixXQUFXLEVBQUUseUJBQXlCO0lBQ3RDLE1BQU0sRUFBRSxLQUFLO0lBQ2IsSUFBSSxFQUFFLE1BQU07SUFDWixHQUFHLEVBQUUsQ0FBTyxPQUErQixFQUFFLEVBQUU7UUFDN0MsNkJBQTZCO1FBQzdCLE1BQU0sRUFDSixVQUFVLEVBQ1YsTUFBTSxFQUNOLFVBQVUsRUFDVixLQUFLLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsRUFDckMsT0FBTyxFQUFFLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsRUFDN0MsTUFBTSxFQUNOLFFBQVEsR0FDVCxHQUFHLE9BQU8sQ0FBQztRQUVaLGNBQWM7UUFDZCxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsVUFBVSxFQUFFLENBQUM7UUFFbEMsT0FBTztRQUNQLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO1FBRS9CLFdBQVc7UUFDWCxNQUFNLElBQUksR0FBRyxNQUFNLE1BQU0sQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRTtZQUNuRCxJQUFJLEVBQUUsV0FBVztTQUNsQixDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDVixPQUFPO1FBQ1QsQ0FBQztRQUVELGdEQUFnRDtRQUNoRCxNQUFNLFNBQVMsR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbEMsTUFBTSxTQUFTLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2xDLE1BQU0sVUFBVSxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUVwQyxxQkFBcUI7UUFDckIsTUFBTSxHQUFHLEdBQUcsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQzdCLE1BQU0sSUFBSSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUNuRCxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxJQUFBLFdBQUksRUFBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQzVDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNULEtBQUssQ0FBQywwQkFBMEIsSUFBSSxJQUFJLENBQUMsQ0FBQztZQUMxQyxPQUFPLFNBQVMsQ0FBQztRQUNuQixDQUFDO1FBQ0QsTUFBTSxRQUFRLEdBQUcsSUFBQSxXQUFJLEVBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ3JDLE1BQU0sUUFBUSxHQUFHLElBQUEsV0FBSSxFQUFDLFFBQVEsRUFBRSxHQUFHLFNBQVMsY0FBYyxDQUFDLENBQUM7UUFFNUQsK0JBQStCO1FBQy9CLElBQUksVUFBVSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO1lBQ2hDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNULEtBQUssQ0FBQyxpQ0FBaUMsUUFBUSxHQUFHLENBQUMsQ0FBQztZQUNwRCxPQUFPLFNBQVMsQ0FBQztRQUNuQixDQUFDO1FBRUQsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUM7UUFFbkQsMENBQTBDO1FBQzFDLE1BQU0sUUFBUSxDQUFDLFFBQVEsQ0FBQztZQUN0QixLQUFLLEVBQUUsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRTtZQUMzQyxNQUFNLEVBQUUsUUFBUTtZQUNoQixRQUFRLEVBQUUseUNBQXlDO1NBQ3BELENBQUMsQ0FBQztRQUVILGVBQWUsQ0FBQyxPQUFPLENBQUMsb0JBQW9CLENBQUMsQ0FBQztRQUU5QyxzQ0FBc0M7UUFDdEMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ1QsT0FBTyxDQUFDLGFBQWEsVUFBVSxpQkFBaUIsTUFBTSxDQUFDLHFCQUFxQixDQUFDLEtBQUssRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzNGLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUVULElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUNoRCxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDakIsQ0FBQztRQUVELFlBQVk7UUFDWixPQUFPLFlBQVksSUFBSSxFQUFFLENBQUM7SUFDNUIsQ0FBQyxDQUFBO0NBQ0YsQ0FBQztBQUVGLGtCQUFlLFVBQVUsQ0FBQyJ9
|