@lenne.tech/cli 0.0.80 → 0.0.82
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/build/commands/server/module.js +67 -5
- package/build/extensions/server.js +234 -0
- package/build/interfaces/ServerProps.interface.js +3 -0
- package/build/templates/nest-server-module/inputs/template-create.input.ts.ejs +5 -8
- package/build/templates/nest-server-module/inputs/template.input.ts.ejs +3 -9
- package/build/templates/nest-server-module/template.model.ts.ejs +4 -21
- package/build/templates/nest-server-module/template.resolver.ts.ejs +2 -1
- package/package.json +5 -5
|
@@ -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: {
|
|
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,
|
|
201
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbW1hbmRzL3NlcnZlci9tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFDQSwrQkFBNEI7QUFJNUI7O0dBRUc7QUFDSCxNQUFNLFVBQVUsR0FBbUI7SUFDakMsSUFBSSxFQUFFLFFBQVE7SUFDZCxLQUFLLEVBQUUsQ0FBQyxHQUFHLENBQUM7SUFDWixXQUFXLEVBQUUsNkJBQTZCO0lBQzFDLE1BQU0sRUFBRSxLQUFLO0lBQ2IsR0FBRyxFQUFFLENBQU8sT0FBK0IsRUFBRSxFQUFFO1FBQzdDLDZCQUE2QjtRQUM3QixNQUFNLEVBQ0osVUFBVSxFQUNWLE1BQU0sRUFDTixVQUFVLEVBQ1YsUUFBUSxFQUNSLEtBQUssRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxFQUNyQyxNQUFNLEVBQUUsRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLEVBQ3hCLE1BQU0sRUFDTixPQUFPLEVBQUUsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxFQUM3QyxNQUFNLEVBQ04sUUFBUSxHQUNULEdBQUcsT0FBTyxDQUFDO1FBRVosY0FBYztRQUNkLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUVsQyxPQUFPO1FBQ1AsSUFBSSxDQUFDLDRCQUE0QixDQUFDLENBQUM7UUFFbkMsV0FBVztRQUNYLE1BQU0sSUFBSSxHQUFHLE1BQU0sTUFBTSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFO1lBQ25ELElBQUksRUFBRSxhQUFhO1NBQ3BCLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxJQUFJLEVBQUU7WUFDVCxPQUFPO1NBQ1I7UUFFRCxnREFBZ0Q7UUFDaEQsTUFBTSxTQUFTLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2xDLE1BQU0sU0FB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
|
|
@@ -0,0 +1,234 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Server = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Server helper functions
|
|
6
|
+
*/
|
|
7
|
+
class Server {
|
|
8
|
+
/**
|
|
9
|
+
* Constructor for integration of toolbox
|
|
10
|
+
*/
|
|
11
|
+
constructor(toolbox) {
|
|
12
|
+
this.toolbox = toolbox;
|
|
13
|
+
// Specific imports for default modells
|
|
14
|
+
this.imports = {
|
|
15
|
+
CoreFileInfo: "import { CoreFileInfo } from '@lenne.tech/nest-server';",
|
|
16
|
+
GraphQLUpload: "import * as GraphQLUpload from 'graphql-upload/GraphQLUpload.js';",
|
|
17
|
+
FileUpload: "import type { FileUpload } from 'graphql-upload/processRequest.js';",
|
|
18
|
+
};
|
|
19
|
+
// Specific types for properties in input fields
|
|
20
|
+
this.inputFieldTypes = {
|
|
21
|
+
File: 'GraphQLUpload',
|
|
22
|
+
FileInfo: 'GraphQLUpload',
|
|
23
|
+
Id: 'String',
|
|
24
|
+
ID: 'String',
|
|
25
|
+
ObjectId: 'String',
|
|
26
|
+
Upload: 'GraphQLUpload',
|
|
27
|
+
};
|
|
28
|
+
// Specific types for properties in input classes
|
|
29
|
+
this.inputClassTypes = {
|
|
30
|
+
File: 'FileUpload',
|
|
31
|
+
FileInfo: 'FileUpload',
|
|
32
|
+
Id: 'string',
|
|
33
|
+
ID: 'string',
|
|
34
|
+
ObjectId: 'string',
|
|
35
|
+
Upload: 'FileUpload',
|
|
36
|
+
};
|
|
37
|
+
// Specific types for properties in model fields
|
|
38
|
+
this.modelFieldTypes = {
|
|
39
|
+
File: 'CoreFileInfo',
|
|
40
|
+
FileInfo: 'CoreFileInfo',
|
|
41
|
+
ID: 'String',
|
|
42
|
+
Id: 'String',
|
|
43
|
+
ObjectId: 'String',
|
|
44
|
+
Upload: 'CoreFileInfo',
|
|
45
|
+
};
|
|
46
|
+
// Specific types for properties in model class
|
|
47
|
+
this.modelClassTypes = {
|
|
48
|
+
File: 'CoreFileInfo',
|
|
49
|
+
FileInfo: 'CoreFileInfo',
|
|
50
|
+
ID: 'string',
|
|
51
|
+
Id: 'string',
|
|
52
|
+
ObjectId: 'string',
|
|
53
|
+
Upload: 'CoreFileInfo',
|
|
54
|
+
};
|
|
55
|
+
// Standard types: primitives and default JavaScript classes
|
|
56
|
+
this.standardTypes = ['boolean', 'string', 'number', 'Date'];
|
|
57
|
+
this.camelCase = toolbox.strings.camelCase;
|
|
58
|
+
this.kebabCase = toolbox.strings.kebabCase;
|
|
59
|
+
this.pascalCase = toolbox.strings.pascalCase;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Create template string for properties in model
|
|
63
|
+
*/
|
|
64
|
+
propsForModel(props, options) {
|
|
65
|
+
var _a;
|
|
66
|
+
// Preparations
|
|
67
|
+
const config = Object.assign({ useDefault: true }, options);
|
|
68
|
+
const { modelName, useDefault } = config;
|
|
69
|
+
let result = '';
|
|
70
|
+
// Check parameters
|
|
71
|
+
if (!props || !(typeof props !== 'object') || !Object.keys(props).length) {
|
|
72
|
+
if (!useDefault) {
|
|
73
|
+
return { props: '', imports: '', mappings: 'this;' };
|
|
74
|
+
}
|
|
75
|
+
// Use default
|
|
76
|
+
if (!Object.keys(props).length && useDefault) {
|
|
77
|
+
return {
|
|
78
|
+
props: `
|
|
79
|
+
/**
|
|
80
|
+
* Description of properties
|
|
81
|
+
*/
|
|
82
|
+
@Restricted(RoleEnum.ADMIN, RoleEnum.S_CREATOR)
|
|
83
|
+
@Field(() => [String], { description: 'Properties of ${this.pascalCase(modelName)}', nullable: 'items'})
|
|
84
|
+
@Prop([String])
|
|
85
|
+
properties: string[] = undefined;
|
|
86
|
+
|
|
87
|
+
/**
|
|
88
|
+
* User how has tested the ${this.pascalCase(modelName)}
|
|
89
|
+
*/
|
|
90
|
+
@Field(() => User, {
|
|
91
|
+
description: 'User who has tested the ${this.pascalCase(modelName)}',
|
|
92
|
+
nullable: true,
|
|
93
|
+
})
|
|
94
|
+
@Prop({ type: Schema.Types.ObjectId, ref: 'User' })
|
|
95
|
+
testedBy: User = undefined;
|
|
96
|
+
`,
|
|
97
|
+
imports: '',
|
|
98
|
+
mappings: 'mapClasses(input, {user: User}, this);',
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
// Process configuration
|
|
103
|
+
const imports = {};
|
|
104
|
+
const mappings = {};
|
|
105
|
+
for (const [name, item] of Object.entries(props)) {
|
|
106
|
+
const propName = this.camelCase(name);
|
|
107
|
+
const reference = ((_a = item.reference) === null || _a === void 0 ? void 0 : _a.trim()) ? this.pascalCase(item.reference.trim()) : '';
|
|
108
|
+
const modelFieldType = this.modelFieldTypes[this.pascalCase(item.type)] || this.pascalCase(item.type);
|
|
109
|
+
const isArray = item.isArray;
|
|
110
|
+
const modelClassType = this.modelClassTypes[this.pascalCase(item.type)] ||
|
|
111
|
+
(this.standardTypes.includes(item.type) ? item.type : this.pascalCase(item.type));
|
|
112
|
+
const type = this.standardTypes.includes(item.type) ? item.type : this.pascalCase(item.type);
|
|
113
|
+
if (!this.standardTypes.includes(type) && type !== 'ObjectId') {
|
|
114
|
+
mappings[propName] = type;
|
|
115
|
+
}
|
|
116
|
+
if (reference) {
|
|
117
|
+
mappings[propName] = reference;
|
|
118
|
+
}
|
|
119
|
+
if (this.imports[modelClassType]) {
|
|
120
|
+
imports[modelClassType] = this.imports[modelClassType];
|
|
121
|
+
}
|
|
122
|
+
result += `
|
|
123
|
+
/**
|
|
124
|
+
* ${propName + (modelName ? ' of ' + this.pascalCase(modelName) : '')}
|
|
125
|
+
*/
|
|
126
|
+
@Restricted(RoleEnum.S_EVERYONE)
|
|
127
|
+
@Field(() => ${(isArray ? '[' : '') + (reference ? reference : modelFieldType) + (isArray ? ']' : '')}, {
|
|
128
|
+
description: '${propName + (modelName ? ' of ' + this.pascalCase(modelName) : '')}',
|
|
129
|
+
nullable: ${item.nullable},
|
|
130
|
+
})
|
|
131
|
+
@Prop(${reference
|
|
132
|
+
? (isArray ? '[' : '') + `{ type: Schema.Types.ObjectId, ref: '${reference}' }` + (isArray ? ']' : '')
|
|
133
|
+
: ''})
|
|
134
|
+
${propName}: ${modelClassType + (isArray ? '[]' : '') + (reference ? ' | ' + reference + (isArray ? '[]' : '') : '')} = undefined;
|
|
135
|
+
`;
|
|
136
|
+
}
|
|
137
|
+
// Process imports
|
|
138
|
+
let importsResult = '';
|
|
139
|
+
for (const value of Object.values(imports)) {
|
|
140
|
+
importsResult += `\n${value}`;
|
|
141
|
+
}
|
|
142
|
+
// Process mappings
|
|
143
|
+
const mappingsResult = [];
|
|
144
|
+
for (const [key, value] of Object.entries(mappings)) {
|
|
145
|
+
mappingsResult.push(`${key}: ${value}`);
|
|
146
|
+
}
|
|
147
|
+
// Return template data
|
|
148
|
+
return {
|
|
149
|
+
props: result,
|
|
150
|
+
imports: importsResult,
|
|
151
|
+
mappings: mappingsResult.length ? `mapClasses(input, {${mappingsResult.join(', ')}}, this);` : 'this;',
|
|
152
|
+
};
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* Create template string for properties in input
|
|
156
|
+
*/
|
|
157
|
+
propsForInput(props, options) {
|
|
158
|
+
// Preparations
|
|
159
|
+
const config = Object.assign({ useDefault: true }, options);
|
|
160
|
+
const { modelName, nullable, useDefault } = config;
|
|
161
|
+
let result = '';
|
|
162
|
+
// Check parameters
|
|
163
|
+
if (!props || !(typeof props !== 'object') || !Object.keys(props).length) {
|
|
164
|
+
if (!useDefault) {
|
|
165
|
+
return { props: '', imports: '' };
|
|
166
|
+
}
|
|
167
|
+
// Use default
|
|
168
|
+
if (!Object.keys(props).length && useDefault) {
|
|
169
|
+
return {
|
|
170
|
+
props: `
|
|
171
|
+
/**
|
|
172
|
+
* Description of properties
|
|
173
|
+
*/
|
|
174
|
+
@Restricted(RoleEnum.ADMIN, RoleEnum.S_CREATOR)
|
|
175
|
+
@Field(() => [String], { description: 'Properties of ${this.pascalCase(modelName)}', nullable: ${config.nullable ? config.nullable : `'items'`}})
|
|
176
|
+
properties: string[] = undefined;
|
|
177
|
+
|
|
178
|
+
/**
|
|
179
|
+
* User how has tested the ${this.pascalCase(modelName)}
|
|
180
|
+
*/
|
|
181
|
+
@Field(() => User, {
|
|
182
|
+
description: 'User who has tested the ${this.pascalCase(modelName)}',
|
|
183
|
+
nullable: ${config.nullable},
|
|
184
|
+
})
|
|
185
|
+
testedBy: User = undefined;
|
|
186
|
+
`,
|
|
187
|
+
imports: '',
|
|
188
|
+
};
|
|
189
|
+
}
|
|
190
|
+
// Process configuration
|
|
191
|
+
const imports = {};
|
|
192
|
+
for (const [name, item] of Object.entries(props)) {
|
|
193
|
+
const inputFieldType = this.inputFieldTypes[this.pascalCase(item.type)] || this.pascalCase(item.type);
|
|
194
|
+
const inputClassType = this.inputClassTypes[this.pascalCase(item.type)] ||
|
|
195
|
+
(this.standardTypes.includes(item.type) ? item.type : this.pascalCase(item.type));
|
|
196
|
+
if (this.imports[inputFieldType]) {
|
|
197
|
+
imports[inputFieldType] = this.imports[inputFieldType];
|
|
198
|
+
}
|
|
199
|
+
if (this.imports[inputClassType]) {
|
|
200
|
+
imports[inputClassType] = this.imports[inputClassType];
|
|
201
|
+
}
|
|
202
|
+
result += `
|
|
203
|
+
/**
|
|
204
|
+
* ${this.pascalCase(name) + (modelName ? ' of ' + this.pascalCase(modelName) : '')}
|
|
205
|
+
*/
|
|
206
|
+
@Restricted(RoleEnum.S_EVERYONE)
|
|
207
|
+
@Field(() => ${(item.isArray ? '[' : '') + inputFieldType + (item.isArray ? ']' : '')}, {
|
|
208
|
+
description: '${this.pascalCase(name) + (modelName ? ' of ' + this.pascalCase(modelName) : '')}',
|
|
209
|
+
nullable: ${nullable || item.nullable},
|
|
210
|
+
})${nullable || item.nullable ? '\n @IsOptional()' : ''}
|
|
211
|
+
${this.camelCase(name)}: ${inputClassType + (item.isArray ? '[]' : '')} = undefined;
|
|
212
|
+
`;
|
|
213
|
+
}
|
|
214
|
+
// Process imports
|
|
215
|
+
let importsResult = '';
|
|
216
|
+
for (const value of Object.values(imports)) {
|
|
217
|
+
importsResult += `\n${value}`;
|
|
218
|
+
}
|
|
219
|
+
// Return template data
|
|
220
|
+
return {
|
|
221
|
+
props: result,
|
|
222
|
+
imports: importsResult,
|
|
223
|
+
};
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
exports.Server = Server;
|
|
228
|
+
/**
|
|
229
|
+
* Extend toolbox
|
|
230
|
+
*/
|
|
231
|
+
exports.default = (toolbox) => {
|
|
232
|
+
toolbox.server = new Server(toolbox);
|
|
233
|
+
};
|
|
234
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2V4dGVuc2lvbnMvc2VydmVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUdBOztHQUVHO0FBQ0gsTUFBYSxNQUFNO0lBd0RqQjs7T0FFRztJQUNILFlBQXNCLE9BQStCO1FBQS9CLFlBQU8sR0FBUCxPQUFPLENBQXdCO1FBckRyRCx1Q0FBdUM7UUFDdkMsWUFBTyxHQUEyQjtZQUNoQyxZQUFZLEVBQUUseURBQXlEO1lBQ3ZFLGFBQWEsRUFBRSxtRUFBbUU7WUFDbEYsVUFBVSxFQUFFLHFFQUFxRTtTQUNsRixDQUFDO1FBRUYsZ0RBQWdEO1FBQ2hELG9CQUFlLEdBQTJCO1lBQ3hDLElBQUksRUFBRSxlQUFlO1lBQ3JCLFFBQVEsRUFBRSxlQUFlO1lBQ3pCLEVBQUUsRUFBRSxRQUFRO1lBQ1osRUFBRSxFQUFFLFFBQVE7WUFDWixRQUFRLEVBQUUsUUFBUTtZQUNsQixNQUFNLEVBQUUsZUFBZTtTQUN4QixDQUFDO1FBRUYsaURBQWlEO1FBQ2pELG9CQUFlLEdBQTJCO1lBQ3hDLElBQUksRUFBRSxZQUFZO1lBQ2xCLFFBQVEsRUFBRSxZQUFZO1lBQ3RCLEVBQUUsRUFBRSxRQUFRO1lBQ1osRUFBRSxFQUFFLFFBQVE7WUFDWixRQUFRLEVBQUUsUUFBUTtZQUNsQixNQUFNLEVBQUUsWUFBWTtTQUNyQixDQUFDO1FBRUYsZ0RBQWdEO1FBQ2hELG9CQUFlLEdBQTJCO1lBQ3hDLElBQUksRUFBRSxjQUFjO1lBQ3BCLFFBQVEsRUFBRSxjQUFjO1lBQ3hCLEVBQUUsRUFBRSxRQUFRO1lBQ1osRUFBRSxFQUFFLFFBQVE7WUFDWixRQUFRLEVBQUUsUUFBUTtZQUNsQixNQUFNLEVBQUUsY0FBYztTQUN2QixDQUFDO1FBRUYsK0NBQStDO1FBQy9DLG9CQUFlLEdBQTJCO1lBQ3hDLElBQUksRUFBRSxjQUFjO1lBQ3BCLFFBQVEsRUFBRSxjQUFjO1lBQ3hCLEVBQUUsRUFBRSxRQUFR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
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2VydmVyUHJvcHMuaW50ZXJmYWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2ludGVyZmFjZXMvU2VydmVyUHJvcHMuaW50ZXJmYWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIifQ==
|
|
@@ -1,21 +1,18 @@
|
|
|
1
|
+
import { Restricted, RoleEnum } from '@lenne.tech/nest-server';
|
|
1
2
|
import { Field, InputType } from '@nestjs/graphql';
|
|
2
3
|
import { IsOptional } from 'class-validator';
|
|
3
|
-
import { <%= props.namePascal %>Input } from './<%= props.nameKebab %>.input'
|
|
4
|
+
import { <%= props.namePascal %>Input } from './<%= props.nameKebab %>.input';<%- props.imports %>
|
|
5
|
+
|
|
4
6
|
|
|
5
7
|
/**
|
|
6
8
|
* <%= props.namePascal %> create input
|
|
7
9
|
*/
|
|
10
|
+
@Restricted(RoleEnum.ADMIN)
|
|
8
11
|
@InputType({ description: 'Input data to create a new <%= props.namePascal %>' })
|
|
9
12
|
export class <%= props.namePascal %>CreateInput extends <%= props.namePascal %>Input {
|
|
10
13
|
|
|
11
14
|
// ===================================================================================================================
|
|
12
15
|
// Properties
|
|
13
16
|
// ===================================================================================================================
|
|
14
|
-
|
|
15
|
-
/**
|
|
16
|
-
* Description of the properties
|
|
17
|
-
*/
|
|
18
|
-
@Field(() => [String], { description: 'Description of the properties', nullable: true })
|
|
19
|
-
@IsOptional()
|
|
20
|
-
properties?: string[];
|
|
17
|
+
<%- props.props %>
|
|
21
18
|
}
|
|
@@ -1,22 +1,16 @@
|
|
|
1
1
|
import { Restricted, RoleEnum } from '@lenne.tech/nest-server';
|
|
2
2
|
import { Field, InputType } from '@nestjs/graphql';
|
|
3
|
-
import { IsOptional } from 'class-validator'
|
|
3
|
+
import { IsOptional } from 'class-validator';<%- props.imports %>
|
|
4
4
|
|
|
5
5
|
/**
|
|
6
6
|
* <%= props.namePascal %> input
|
|
7
7
|
*/
|
|
8
|
+
@Restricted(RoleEnum.ADMIN)
|
|
8
9
|
@InputType({ description: 'Input data to update an existing <%= props.namePascal %>' })
|
|
9
10
|
export class <%= props.namePascal %>Input {
|
|
10
11
|
|
|
11
12
|
// ===================================================================================================================
|
|
12
13
|
// Properties
|
|
13
14
|
// ===================================================================================================================
|
|
14
|
-
|
|
15
|
-
/**
|
|
16
|
-
* Description of the properties
|
|
17
|
-
*/
|
|
18
|
-
@Restricted(RoleEnum.ADMIN, RoleEnum.S_CREATOR)
|
|
19
|
-
@Field(() => [String], { description: 'Description of the properties', nullable: true })
|
|
20
|
-
@IsOptional()
|
|
21
|
-
properties?: string[];
|
|
15
|
+
<%- props.props %>
|
|
22
16
|
}
|
|
@@ -3,13 +3,13 @@ import { Field, ObjectType } from '@nestjs/graphql';
|
|
|
3
3
|
import { Prop, Schema as MongooseSchema, SchemaFactory } from '@nestjs/mongoose';
|
|
4
4
|
import { Document, Schema } from 'mongoose';
|
|
5
5
|
import { PersistenceModel } from '../../common/models/persistence.model';
|
|
6
|
-
import { User } from '../user/user.model';
|
|
7
6
|
|
|
8
7
|
export type <%= props.namePascal %>Document = <%= props.namePascal %> & Document;
|
|
9
8
|
|
|
10
9
|
/**
|
|
11
10
|
* <%= props.namePascal %> model
|
|
12
11
|
*/
|
|
12
|
+
@Restricted(RoleEnum.ADMIN)
|
|
13
13
|
@ObjectType({ description: '<%= props.namePascal %>' })
|
|
14
14
|
@MongooseSchema({ timestamps: true })
|
|
15
15
|
export class <%= props.namePascal %> extends PersistenceModel {
|
|
@@ -17,24 +17,7 @@ export class <%= props.namePascal %> extends PersistenceModel {
|
|
|
17
17
|
// ===================================================================================================================
|
|
18
18
|
// Properties
|
|
19
19
|
// ===================================================================================================================
|
|
20
|
-
|
|
21
|
-
/**
|
|
22
|
-
* Description of properties
|
|
23
|
-
*/
|
|
24
|
-
@Restricted(RoleEnum.ADMIN, RoleEnum.S_CREATOR)
|
|
25
|
-
@Field(() => [String], { description: 'Properties of <%= props.namePascal %>', nullable: 'items'})
|
|
26
|
-
@Prop([String])
|
|
27
|
-
properties: string[] = undefined;
|
|
28
|
-
|
|
29
|
-
/**
|
|
30
|
-
* User how has tested the <%= props.namePascal %>
|
|
31
|
-
*/
|
|
32
|
-
@Field(() => User, {
|
|
33
|
-
description: 'User who has tested the <%= props.namePascal %>',
|
|
34
|
-
nullable: true,
|
|
35
|
-
})
|
|
36
|
-
@Prop({ type: Schema.Types.ObjectId, ref: 'User' })
|
|
37
|
-
testedBy: User = undefined;
|
|
20
|
+
<%- props.props %>
|
|
38
21
|
|
|
39
22
|
// ===================================================================================================================
|
|
40
23
|
// Methods
|
|
@@ -45,7 +28,7 @@ export class <%= props.namePascal %> extends PersistenceModel {
|
|
|
45
28
|
*/
|
|
46
29
|
init() {
|
|
47
30
|
super.init();
|
|
48
|
-
this.
|
|
31
|
+
// this.xxx = [];
|
|
49
32
|
return this;
|
|
50
33
|
}
|
|
51
34
|
|
|
@@ -56,7 +39,7 @@ export class <%= props.namePascal %> extends PersistenceModel {
|
|
|
56
39
|
*/
|
|
57
40
|
map(input) {
|
|
58
41
|
super.map(input);
|
|
59
|
-
return
|
|
42
|
+
return <%- props.mappings %>
|
|
60
43
|
}
|
|
61
44
|
}
|
|
62
45
|
|
|
@@ -13,6 +13,7 @@ import { <%= props.namePascal %>Service } from './<%= props.nameKebab %>.service
|
|
|
13
13
|
/**
|
|
14
14
|
* Resolver to process with <%= props.namePascal %> data
|
|
15
15
|
*/
|
|
16
|
+
@Roles(RoleEnum.ADMIN)
|
|
16
17
|
@Resolver(() => <%= props.namePascal %>)
|
|
17
18
|
export class <%= props.namePascal %>Resolver {
|
|
18
19
|
|
|
@@ -35,7 +36,7 @@ export class <%= props.namePascal %>Resolver {
|
|
|
35
36
|
@Query(() => FindAndCount<%= props.namePascal %>sResult, { description: 'Find <%= props.namePascal %>s (via filter)' })
|
|
36
37
|
async findAndCount<%= props.namePascal %>s(@Info() info: GraphQLResolveInfo, @Args() args?: FilterArgs) {
|
|
37
38
|
return await this.<%= props.nameCamel %>Service.findAndCount(args, {
|
|
38
|
-
fieldSelection: { info, select: 'findAndCount<%= props.namePascal %>s' },
|
|
39
|
+
fieldSelection: { info, select: 'findAndCount<%= props.namePascal %>s.items' },
|
|
39
40
|
inputType: FilterArgs,
|
|
40
41
|
});
|
|
41
42
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lenne.tech/cli",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.82",
|
|
4
4
|
"description": "lenne.Tech CLI: lt",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"lenne.Tech",
|
|
@@ -61,13 +61,13 @@
|
|
|
61
61
|
"@lenne.tech/npm-package-helper": "0.0.12",
|
|
62
62
|
"@types/jest": "29.2.2",
|
|
63
63
|
"@types/node": "18.11.9",
|
|
64
|
-
"@typescript-eslint/eslint-plugin": "5.42.
|
|
65
|
-
"@typescript-eslint/parser": "5.42.
|
|
64
|
+
"@typescript-eslint/eslint-plugin": "5.42.1",
|
|
65
|
+
"@typescript-eslint/parser": "5.42.1",
|
|
66
66
|
"cpy-cli": "4.2.0",
|
|
67
67
|
"eslint": "8.27.0",
|
|
68
68
|
"eslint-config-prettier": "8.5.0",
|
|
69
|
-
"husky": "8.0.
|
|
70
|
-
"jest": "29.
|
|
69
|
+
"husky": "8.0.2",
|
|
70
|
+
"jest": "29.3.1",
|
|
71
71
|
"path-exists-cli": "2.0.0",
|
|
72
72
|
"prettier": "2.7.1",
|
|
73
73
|
"pretty-quick": "3.1.3",
|