@lenne.tech/cli 0.0.106 → 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 +28 -21
- 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 -108
- package/build/commands/server/object.js +51 -95
- 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 +19 -19
- package/build/extensions/server.js +241 -37
- 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 +18 -18
|
@@ -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,136 +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', '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
|
-
message: `Enter property type (e.g. MyClass)`,
|
|
87
|
-
})).input;
|
|
88
|
-
schema = type;
|
|
89
|
-
schemaSet = true;
|
|
90
|
-
}
|
|
91
|
-
let reference;
|
|
92
|
-
let enumRef;
|
|
93
|
-
if (type === 'ObjectId') {
|
|
94
|
-
reference = (yield ask({
|
|
95
|
-
type: 'input',
|
|
96
|
-
name: 'input',
|
|
97
|
-
initial: pascalCase(name),
|
|
98
|
-
message: `Enter reference for ObjectId`,
|
|
99
|
-
})).input;
|
|
100
|
-
if (reference) {
|
|
101
|
-
refsSet = true;
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
else if (type === 'enum') {
|
|
105
|
-
enumRef = (yield ask({
|
|
106
|
-
type: 'input',
|
|
107
|
-
name: 'input',
|
|
108
|
-
initial: pascalCase(name) + 'Enum',
|
|
109
|
-
message: `Enter enum type`,
|
|
110
|
-
})).input;
|
|
111
|
-
if (enumRef) {
|
|
112
|
-
refsSet = true;
|
|
113
|
-
}
|
|
114
|
-
}
|
|
115
|
-
const arrayEnding = type.endsWith('[]');
|
|
116
|
-
type = type.replace('[]', '');
|
|
117
|
-
const isArray = arrayEnding || (yield confirm(`Array?`));
|
|
118
|
-
const nullable = yield confirm(`Nullable?`, true);
|
|
119
|
-
props[name] = { name, nullable, isArray, type, reference, enumRef, schema };
|
|
120
|
-
}
|
|
61
|
+
const { props, refsSet, schemaSet } = yield server.addProperties({ objectsToAdd, referencesToAdd });
|
|
121
62
|
const generateSpinner = spin('Generate files');
|
|
122
63
|
const inputTemplate = server.propsForInput(props, { modelName: name, nullable: true });
|
|
123
|
-
const createTemplate = server.propsForInput(props, { modelName: name, nullable: false
|
|
64
|
+
const createTemplate = server.propsForInput(props, { create: true, modelName: name, nullable: false });
|
|
124
65
|
const modelTemplate = server.propsForModel(props, { modelName: name });
|
|
125
66
|
// nest-server-module/inputs/xxx.input.ts
|
|
126
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`),
|
|
127
70
|
template: 'nest-server-module/inputs/template.input.ts.ejs',
|
|
128
|
-
target: (0, path_1.join)(moduleDir, 'inputs', nameKebab + '.input.ts'),
|
|
129
|
-
props: { nameCamel, nameKebab, namePascal, props: inputTemplate.props, imports: inputTemplate.imports },
|
|
130
71
|
});
|
|
131
72
|
// nest-server-module/inputs/xxx-create.input.ts
|
|
132
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`),
|
|
133
76
|
template: 'nest-server-module/inputs/template-create.input.ts.ejs',
|
|
134
|
-
target: (0, path_1.join)(moduleDir, 'inputs', nameKebab + '-create.input.ts'),
|
|
135
|
-
props: { nameCamel, nameKebab, namePascal, props: createTemplate.props, imports: createTemplate.imports },
|
|
136
77
|
});
|
|
137
78
|
// nest-server-module/output/find-and-count-xxxs-result.output.ts
|
|
138
79
|
yield template.generate({
|
|
139
|
-
template: 'nest-server-module/outputs/template-fac-result.output.ts.ejs',
|
|
140
|
-
target: (0, path_1.join)(moduleDir, 'outputs', 'find-and-count-' + nameKebab + 's-result.output.ts'),
|
|
141
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',
|
|
142
83
|
});
|
|
143
84
|
// nest-server-module/xxx.model.ts
|
|
144
85
|
yield template.generate({
|
|
145
|
-
template: 'nest-server-module/template.model.ts.ejs',
|
|
146
|
-
target: (0, path_1.join)(moduleDir, nameKebab + '.model.ts'),
|
|
147
86
|
props: {
|
|
87
|
+
imports: modelTemplate.imports,
|
|
88
|
+
mappings: modelTemplate.mappings,
|
|
148
89
|
nameCamel,
|
|
149
90
|
nameKebab,
|
|
150
91
|
namePascal,
|
|
151
92
|
props: modelTemplate.props,
|
|
152
|
-
imports: modelTemplate.imports,
|
|
153
|
-
mappings: modelTemplate.mappings,
|
|
154
93
|
},
|
|
94
|
+
target: (0, path_1.join)(directory, `${nameKebab}.model.ts`),
|
|
95
|
+
template: 'nest-server-module/template.model.ts.ejs',
|
|
155
96
|
});
|
|
156
97
|
// nest-server-module/xxx.module.ts
|
|
157
98
|
yield template.generate({
|
|
158
|
-
template: 'nest-server-module/template.module.ts.ejs',
|
|
159
|
-
target: (0, path_1.join)(moduleDir, nameKebab + '.module.ts'),
|
|
160
99
|
props: { nameCamel, nameKebab, namePascal },
|
|
100
|
+
target: (0, path_1.join)(directory, `${nameKebab}.module.ts`),
|
|
101
|
+
template: 'nest-server-module/template.module.ts.ejs',
|
|
161
102
|
});
|
|
162
103
|
// nest-server-module/xxx.resolver.ts
|
|
163
104
|
yield template.generate({
|
|
164
|
-
template: 'nest-server-module/template.resolver.ts.ejs',
|
|
165
|
-
target: (0, path_1.join)(moduleDir, nameKebab + '.resolver.ts'),
|
|
166
105
|
props: { nameCamel, nameKebab, namePascal },
|
|
106
|
+
target: (0, path_1.join)(directory, `${nameKebab}.resolver.ts`),
|
|
107
|
+
template: 'nest-server-module/template.resolver.ts.ejs',
|
|
167
108
|
});
|
|
168
109
|
// nest-server-module/xxx.service.ts
|
|
169
110
|
yield template.generate({
|
|
170
|
-
template: 'nest-server-module/template.service.ts.ejs',
|
|
171
|
-
target: (0, path_1.join)(moduleDir, nameKebab + '.service.ts'),
|
|
172
111
|
props: { nameCamel, nameKebab, namePascal },
|
|
112
|
+
target: (0, path_1.join)(directory, `${nameKebab}.service.ts`),
|
|
113
|
+
template: 'nest-server-module/template.service.ts.ejs',
|
|
173
114
|
});
|
|
174
115
|
generateSpinner.succeed('Files generated');
|
|
175
116
|
const serverModule = (0, path_1.join)(path, 'src', 'server', 'server.module.ts');
|
|
@@ -177,42 +118,57 @@ const NewCommand = {
|
|
|
177
118
|
const includeSpinner = spin('Include module into server');
|
|
178
119
|
// Import module
|
|
179
120
|
yield patching.patch(serverModule, {
|
|
180
|
-
insert: `import { ${namePascal}Module } from './modules/${nameKebab}/${nameKebab}.module';\n`,
|
|
181
121
|
before: 'import',
|
|
122
|
+
insert: `import { ${namePascal}Module } from './modules/${nameKebab}/${nameKebab}.module';\n`,
|
|
182
123
|
});
|
|
183
124
|
// Add Module
|
|
184
125
|
yield patching.patch(serverModule, {
|
|
185
|
-
insert: ` ${namePascal}Module,\n `,
|
|
186
126
|
after: new RegExp('imports:[^\\]]*', 'm'),
|
|
127
|
+
insert: ` ${namePascal}Module,\n `,
|
|
187
128
|
});
|
|
188
129
|
// Add comma if necessary
|
|
189
130
|
yield patching.patch(serverModule, {
|
|
190
131
|
insert: '$1,$2',
|
|
191
|
-
replace: new RegExp(
|
|
132
|
+
replace: new RegExp(`([^,\\s])(\\s*${namePascal}Module,\\s*\\])`),
|
|
192
133
|
});
|
|
193
134
|
includeSpinner.succeed('Module included');
|
|
194
135
|
}
|
|
195
136
|
else {
|
|
196
|
-
info(
|
|
137
|
+
info('Don\'t forget to include the module into your main module.');
|
|
197
138
|
}
|
|
198
139
|
// Linting
|
|
199
140
|
// if (await confirm('Run lint?', false)) {
|
|
200
141
|
// await system.run('npm run lint');
|
|
201
142
|
// }
|
|
202
143
|
// We're done, so show what to do next
|
|
203
|
-
info(
|
|
144
|
+
info('');
|
|
204
145
|
success(`Generated ${namePascal}Module in ${helper.msToMinutesAndSeconds(timer())}m.`);
|
|
205
|
-
info(
|
|
206
|
-
//
|
|
207
|
-
if (
|
|
208
|
-
|
|
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 });
|
|
209
152
|
}
|
|
210
|
-
|
|
211
|
-
|
|
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
|
+
}
|
|
212
168
|
}
|
|
213
169
|
// For tests
|
|
214
170
|
return `new module ${name}`;
|
|
215
171
|
}),
|
|
216
172
|
};
|
|
217
173
|
exports.default = NewCommand;
|
|
218
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
174
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbW1hbmRzL3NlcnZlci9tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBQSwrQkFBNEI7QUFJNUIscUNBQWlDO0FBRWpDOztHQUVHO0FBQ0gsTUFBTSxVQUFVLEdBQTJCO0lBQ3pDLEtBQUssRUFBRSxDQUFDLEdBQUcsQ0FBQztJQUNaLFdBQVcsRUFBRSw2QkFBNkI7SUFDMUMsTUFBTSxFQUFFLEtBQUs7SUFDYixJQUFJLEVBQUUsUUFBUTtJQUNkLEdBQUcsRUFBRSxDQUNILE9BQStCLEVBQy9CLE9BS0MsRUFDRCxFQUFFO1FBRUYsV0FBVztRQUNYLE1BQU0sRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLGtCQUFrQixFQUFFLGVBQWUsRUFBRSxtQkFDdEUsV0FBVyxFQUFFLEVBQUUsRUFDZixZQUFZLEVBQUUsRUFBRSxFQUNoQixrQkFBa0IsRUFBRSxLQUFLLEVBQ3pCLGVBQWUsRUFBRSxFQUFFLElBQ2hCLE9BQU8sQ0FDWCxDQUFDO1FBRUYsNkJBQTZCO1FBQzdCLE1BQU0sRUFDSixVQUFVLEVBQ1YsTUFBTSxFQUNOLFVBQVUsRUFDVixRQUFRLEVBQ1IsS0FBSyxFQUFFLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxFQUM5QyxNQUFNLEVBQ04sT0FBTyxFQUFFLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsRUFDN0MsTUFBTSxFQUNOLFFBQVEsR0FDVCxHQUFHLE9BQU8sQ0FBQztRQUVaLGNBQWM7UUFDZCxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsVUFBVSxFQUFFLENBQUM7UUFFbEMsT0FBTztRQUNQLElBQUksV0FBVyxFQUFFLENBQUM7WUFDaEIsSUFBSSxDQUFDLG9DQUFvQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO1FBQzFELENBQUM7YUFBTSxDQUFDO1lB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
|
|
@@ -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,112 +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', '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
|
-
message: `Enter property type (e.g. MyClass)`,
|
|
87
|
-
})).input;
|
|
88
|
-
schema = type;
|
|
89
|
-
schemaSet = true;
|
|
90
|
-
}
|
|
91
|
-
let reference;
|
|
92
|
-
let enumRef;
|
|
93
|
-
if (type === 'ObjectId') {
|
|
94
|
-
reference = (yield ask({
|
|
95
|
-
type: 'input',
|
|
96
|
-
name: 'input',
|
|
97
|
-
initial: pascalCase(name),
|
|
98
|
-
message: `Enter reference for ObjectId`,
|
|
99
|
-
})).input;
|
|
100
|
-
if (reference) {
|
|
101
|
-
refsSet = true;
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
else if (type === 'enum') {
|
|
105
|
-
enumRef = (yield ask({
|
|
106
|
-
type: 'input',
|
|
107
|
-
name: 'input',
|
|
108
|
-
initial: pascalCase(name) + 'Enum',
|
|
109
|
-
message: `Enter enum type`,
|
|
110
|
-
})).input;
|
|
111
|
-
if (enumRef) {
|
|
112
|
-
refsSet = true;
|
|
113
|
-
}
|
|
114
|
-
}
|
|
115
|
-
const arrayEnding = type.endsWith('[]');
|
|
116
|
-
type = type.replace('[]', '');
|
|
117
|
-
const isArray = arrayEnding || (yield confirm(`Array?`));
|
|
118
|
-
const nullable = yield confirm(`Nullable?`, true);
|
|
119
|
-
props[name] = { name, nullable, isArray, type, reference, enumRef, schema };
|
|
120
|
-
}
|
|
62
|
+
const { props, refsSet, schemaSet } = yield server.addProperties({ objectsToAdd, referencesToAdd });
|
|
121
63
|
const generateSpinner = spin('Generate files');
|
|
122
64
|
const inputTemplate = server.propsForInput(props, { modelName: name, nullable: true });
|
|
123
|
-
const createTemplate = server.propsForInput(props, { modelName: name, nullable: false
|
|
65
|
+
const createTemplate = server.propsForInput(props, { create: true, modelName: name, nullable: false });
|
|
124
66
|
const objectTemplate = server.propsForModel(props, { modelName: name });
|
|
125
67
|
// nest-server-module/inputs/xxx.input.ts
|
|
126
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`),
|
|
127
71
|
template: 'nest-server-object/template.input.ts.ejs',
|
|
128
|
-
target: (0, path_1.join)(objectDir, nameKebab + '.input.ts'),
|
|
129
|
-
props: { nameCamel, nameKebab, namePascal, props: inputTemplate.props, imports: inputTemplate.imports },
|
|
130
72
|
});
|
|
131
73
|
// nest-server-object/inputs/xxx-create.input.ts
|
|
132
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`),
|
|
133
77
|
template: 'nest-server-object/template-create.input.ts.ejs',
|
|
134
|
-
target: (0, path_1.join)(objectDir, nameKebab + '-create.input.ts'),
|
|
135
|
-
props: { nameCamel, nameKebab, namePascal, props: createTemplate.props, imports: createTemplate.imports },
|
|
136
78
|
});
|
|
137
79
|
// nest-server-module/xxx.model.ts
|
|
138
80
|
yield template.generate({
|
|
139
|
-
template: 'nest-server-object/template.object.ts.ejs',
|
|
140
|
-
target: (0, path_1.join)(objectDir, nameKebab + '.object.ts'),
|
|
141
81
|
props: {
|
|
82
|
+
imports: objectTemplate.imports,
|
|
83
|
+
mappings: objectTemplate.mappings,
|
|
142
84
|
nameCamel,
|
|
143
85
|
nameKebab,
|
|
144
86
|
namePascal,
|
|
145
87
|
props: objectTemplate.props,
|
|
146
|
-
imports: objectTemplate.imports,
|
|
147
|
-
mappings: objectTemplate.mappings,
|
|
148
88
|
},
|
|
89
|
+
target: (0, path_1.join)(directory, `${nameKebab}.object.ts`),
|
|
90
|
+
template: 'nest-server-object/template.object.ts.ejs',
|
|
149
91
|
});
|
|
150
92
|
generateSpinner.succeed('Files generated');
|
|
151
93
|
// Linting
|
|
@@ -153,19 +95,33 @@ const NewCommand = {
|
|
|
153
95
|
// await system.run('npm run lint');
|
|
154
96
|
// }
|
|
155
97
|
// We're done, so show what to do next
|
|
156
|
-
info(
|
|
98
|
+
info('');
|
|
157
99
|
success(`Generated ${namePascal}Object in ${helper.msToMinutesAndSeconds(timer())}m.`);
|
|
158
|
-
info(
|
|
159
|
-
//
|
|
160
|
-
if (
|
|
161
|
-
|
|
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 });
|
|
162
112
|
}
|
|
163
|
-
|
|
164
|
-
|
|
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
|
+
}
|
|
165
121
|
}
|
|
166
122
|
// For tests
|
|
167
123
|
return `new object ${name}`;
|
|
168
124
|
}),
|
|
169
125
|
};
|
|
170
126
|
exports.default = NewCommand;
|
|
171
|
-
//# 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
|