@lenne.tech/cli 0.0.79 → 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/deployment/create.js +118 -0
- package/build/commands/deployment/deployment.js +25 -0
- 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/deployment/.github/workflows/pre-release.yml.ejs +41 -0
- package/build/templates/deployment/.github/workflows/release.yml.ejs +41 -0
- package/build/templates/deployment/.gitlab-ci.yml.ejs +187 -0
- package/build/templates/deployment/Dockerfile.app.ejs +13 -0
- package/build/templates/deployment/Dockerfile.ejs +18 -0
- package/build/templates/deployment/docker-compose.develop.yml.ejs +99 -0
- package/build/templates/deployment/docker-compose.prod.yml.ejs +92 -0
- package/build/templates/deployment/docker-compose.test.yml.ejs +98 -0
- package/build/templates/deployment/scripts/build-push.sh.ejs +20 -0
- package/build/templates/deployment/scripts/deploy.sh.ejs +7 -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
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
const path_1 = require("path");
|
|
13
|
+
/**
|
|
14
|
+
* Create a new server module
|
|
15
|
+
*/
|
|
16
|
+
const NewCommand = {
|
|
17
|
+
name: 'create',
|
|
18
|
+
alias: ['dc'],
|
|
19
|
+
description: 'Creates a new deployment for mono repository',
|
|
20
|
+
hidden: false,
|
|
21
|
+
run: (toolbox) => __awaiter(void 0, void 0, void 0, function* () {
|
|
22
|
+
// Retrieve the tools we need
|
|
23
|
+
const { filesystem, helper, parameters, print: { info, spin, success }, strings: { kebabCase, pascalCase, camelCase }, prompt: { confirm }, system, template, } = toolbox;
|
|
24
|
+
// Start timer
|
|
25
|
+
const timer = system.startTimer();
|
|
26
|
+
// Info
|
|
27
|
+
info('Create a new deployment');
|
|
28
|
+
// Get name
|
|
29
|
+
const name = yield helper.getInput(parameters.first, {
|
|
30
|
+
name: 'project name',
|
|
31
|
+
});
|
|
32
|
+
if (!name) {
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
// Get url
|
|
36
|
+
const url = yield helper.getInput(parameters.second, {
|
|
37
|
+
name: 'url for deployment',
|
|
38
|
+
});
|
|
39
|
+
if (!name) {
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
const gitHub = yield confirm(`Add GitHub pipeline?`);
|
|
43
|
+
const gitLab = yield confirm(`Add GitLab pipeline?`);
|
|
44
|
+
// Set up initial props (to pass into templates)
|
|
45
|
+
const nameCamel = camelCase(name);
|
|
46
|
+
const nameKebab = kebabCase(name);
|
|
47
|
+
const namePascal = pascalCase(name);
|
|
48
|
+
// Check if directory
|
|
49
|
+
const cwd = filesystem.cwd();
|
|
50
|
+
const generateSpinner = spin('Generate files');
|
|
51
|
+
yield template.generate({
|
|
52
|
+
template: 'deployment/scripts/build-push.sh.ejs',
|
|
53
|
+
target: (0, path_1.join)(cwd, 'scripts', 'build-push.sh'),
|
|
54
|
+
props: { nameCamel, nameKebab, namePascal },
|
|
55
|
+
});
|
|
56
|
+
yield template.generate({
|
|
57
|
+
template: 'deployment/scripts/deploy.sh.ejs',
|
|
58
|
+
target: (0, path_1.join)(cwd, 'scripts', 'deploy.sh'),
|
|
59
|
+
props: { nameCamel, nameKebab, namePascal },
|
|
60
|
+
});
|
|
61
|
+
yield template.generate({
|
|
62
|
+
template: 'deployment/Dockerfile.ejs',
|
|
63
|
+
target: (0, path_1.join)(cwd, 'Dockerfile'),
|
|
64
|
+
props: { nameCamel, nameKebab, namePascal },
|
|
65
|
+
});
|
|
66
|
+
yield template.generate({
|
|
67
|
+
template: 'deployment/Dockerfile.app.ejs',
|
|
68
|
+
target: (0, path_1.join)(cwd, 'Dockerfile.app'),
|
|
69
|
+
props: { nameCamel, nameKebab, namePascal },
|
|
70
|
+
});
|
|
71
|
+
yield template.generate({
|
|
72
|
+
template: 'deployment/docker-compose.develop.yml.ejs',
|
|
73
|
+
target: (0, path_1.join)(cwd, 'docker-compose.develop.yml'),
|
|
74
|
+
props: { nameCamel, nameKebab, namePascal },
|
|
75
|
+
});
|
|
76
|
+
yield template.generate({
|
|
77
|
+
template: 'deployment/docker-compose.test.yml.ejs',
|
|
78
|
+
target: (0, path_1.join)(cwd, 'docker-compose.test.yml'),
|
|
79
|
+
props: { nameCamel, nameKebab, namePascal },
|
|
80
|
+
});
|
|
81
|
+
yield template.generate({
|
|
82
|
+
template: 'deployment/docker-compose.prod.yml.ejs',
|
|
83
|
+
target: (0, path_1.join)(cwd, 'docker-compose.prod.yml'),
|
|
84
|
+
props: { nameCamel, nameKebab, namePascal },
|
|
85
|
+
});
|
|
86
|
+
if (gitHub) {
|
|
87
|
+
yield template.generate({
|
|
88
|
+
template: 'deployment/.github/workflows/pre-release.yml.ejs',
|
|
89
|
+
target: (0, path_1.join)(cwd, '.github', 'workflows', 'pre-release.yml'),
|
|
90
|
+
props: { nameCamel, nameKebab, namePascal, url },
|
|
91
|
+
});
|
|
92
|
+
yield template.generate({
|
|
93
|
+
template: 'deployment/.github/workflows/release.yml.ejs',
|
|
94
|
+
target: (0, path_1.join)(cwd, '.github', 'workflows', 'release.yml'),
|
|
95
|
+
props: { nameCamel, nameKebab, namePascal, url },
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
if (gitLab) {
|
|
99
|
+
yield template.generate({
|
|
100
|
+
template: 'deployment/.gitlab-ci.yml.ejs',
|
|
101
|
+
target: (0, path_1.join)(cwd, '.gitlab-ci.yml'),
|
|
102
|
+
props: { nameCamel, nameKebab, namePascal, url },
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
generateSpinner.succeed('Files generated');
|
|
106
|
+
// We're done, so show what to do next
|
|
107
|
+
info(``);
|
|
108
|
+
success(`Generated deployment for ${namePascal} in ${helper.msToMinutesAndSeconds(timer())}m.`);
|
|
109
|
+
info(``);
|
|
110
|
+
if (!toolbox.parameters.options.fromGluegunMenu) {
|
|
111
|
+
process.exit();
|
|
112
|
+
}
|
|
113
|
+
// For tests
|
|
114
|
+
return `new deployment ${name}`;
|
|
115
|
+
}),
|
|
116
|
+
};
|
|
117
|
+
exports.default = NewCommand;
|
|
118
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbW1hbmRzL2RlcGxveW1lbnQvY3JlYXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQ0EsK0JBQTRCO0FBRzVCOztHQUVHO0FBQ0gsTUFBTSxVQUFVLEdBQW1CO0lBQ2pDLElBQUksRUFBRSxRQUFRO0lBQ2QsS0FBSyxFQUFFLENBQUMsSUFBSSxDQUFDO0lBQ2IsV0FBVyxFQUFFLDhDQUE4QztJQUMzRCxNQUFNLEVBQUUsS0FBSztJQUNiLEdBQUcsRUFBRSxDQUFPLE9BQStCLEVBQUUsRUFBRTtRQUM3Qyw2QkFBNkI7UUFDN0IsTUFBTSxFQUNKLFVBQVUsRUFDVixNQUFNLEVBQ04sVUFBVSxFQUNWLEtBQUssRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLEVBQzlCLE9BQU8sRUFBRSxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLEVBQzdDLE1BQU0sRUFBRSxFQUFFLE9BQU8sRUFBRSxFQUNuQixNQUFNLEVBQ04sUUFBUSxHQUNULEdBQUcsT0FBTyxDQUFDO1FBRVosY0FBYztRQUNkLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUVsQyxPQUFPO1FBQ1AsSUFBSSxDQUFDLHlCQUF5QixDQUFDLENBQUM7UUFFaEMsV0FBVztRQUNYLE1BQU0sSUFBSSxHQUFHLE1BQU0sTUFBTSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFO1lBQ25ELElBQUksRUFBRSxjQUFjO1NBQ3JCLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxJQUFJLEVBQUU7WUFDVCxPQUFPO1NBQ1I7UUFFRCxVQUFVO1FBQ1YsTUFBTSxHQUFHLEdBQUcsTUFBTSxNQUFNLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUU7WUFDbkQsSUFBSSxFQUFFLG9CQUFvQjtTQUMzQixDQUFD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
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
/**
|
|
13
|
+
* Deployment commands
|
|
14
|
+
*/
|
|
15
|
+
module.exports = {
|
|
16
|
+
name: 'deployment',
|
|
17
|
+
alias: ['d'],
|
|
18
|
+
description: 'Server commands',
|
|
19
|
+
hidden: true,
|
|
20
|
+
run: (toolbox) => __awaiter(void 0, void 0, void 0, function* () {
|
|
21
|
+
yield toolbox.helper.showMenu('deployment');
|
|
22
|
+
return 'deployment';
|
|
23
|
+
}),
|
|
24
|
+
};
|
|
25
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVwbG95bWVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21tYW5kcy9kZXBsb3ltZW50L2RlcGxveW1lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFFQTs7R0FFRztBQUNILE1BQU0sQ0FBQyxPQUFPLEdBQUc7SUFDZixJQUFJLEVBQUUsWUFBWTtJQUNsQixLQUFLLEVBQUUsQ0FBQyxHQUFHLENBQUM7SUFDWixXQUFXLEVBQUUsaUJBQWlCO0lBQzlCLE1BQU0sRUFBRSxJQUFJO0lBQ1osR0FBRyxFQUFFLENBQU8sT0FBK0IsRUFBRSxFQUFFO1FBQzdDLE1BQU0sT0FBTyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDNUMsT0FBTyxZQUFZLENBQUM7SUFDdEIsQ0FBQyxDQUFBO0NBQ0YsQ0FBQyJ9
|
|
@@ -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==
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
name: Deploy
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
release:
|
|
5
|
+
types:
|
|
6
|
+
- prereleased
|
|
7
|
+
|
|
8
|
+
env:
|
|
9
|
+
SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }}
|
|
10
|
+
|
|
11
|
+
jobs:
|
|
12
|
+
deploy:
|
|
13
|
+
runs-on: [self-hosted, docker-live]
|
|
14
|
+
env:
|
|
15
|
+
STACK_NAME: <%= props.nameCamel %>
|
|
16
|
+
APP_URL: test.<%= props.url %>
|
|
17
|
+
CI_REGISTRY_IMAGE: localhost:5000/<%= props.nameCamel %>
|
|
18
|
+
FILE_NAME: docker-compose.test.yml
|
|
19
|
+
steps:
|
|
20
|
+
- uses: actions/checkout@v1
|
|
21
|
+
- name: Use Node.js 18
|
|
22
|
+
uses: actions/setup-node@v1
|
|
23
|
+
with:
|
|
24
|
+
node-version: 18
|
|
25
|
+
- name: Install
|
|
26
|
+
run: npm run init
|
|
27
|
+
- name: Build app
|
|
28
|
+
run: npm run build:test
|
|
29
|
+
- name: Build docker
|
|
30
|
+
run: STACK_NAME=${{env.STACK_NAME}} APP_URL=${{env.APP_URL}} IMAGE_TAG=test CI_REGISTRY_IMAGE=${{env.CI_REGISTRY_IMAGE}} sh build-push.sh
|
|
31
|
+
- name: Deploy
|
|
32
|
+
run: FILE_NAME=${{env.FILE_NAME}} STACK_NAME=${{env.STACK_NAME}} APP_URL=${{env.APP_URL}} IMAGE_TAG=test CI_REGISTRY_IMAGE=${{env.CI_REGISTRY_IMAGE}} sh deploy.sh
|
|
33
|
+
- name: Deploy notification
|
|
34
|
+
if: always()
|
|
35
|
+
uses: adamkdean/simple-slack-notify@master
|
|
36
|
+
with:
|
|
37
|
+
channel: "#deployments"
|
|
38
|
+
status: ${{ job.status }}
|
|
39
|
+
success_text: "Version (#${{ github.event.release.tag_name }}) von <%= props.nameCamel %> wurde erfolgreich auf *Test* deployed."
|
|
40
|
+
failure_text: "Testversion (#${{ github.event.release.tag_name }}) von <%= props.nameCamel %> ist fehlgeschlagen."
|
|
41
|
+
cancelled_text: "Testversion (#${{ github.event.release.tag_name }}) von <%= props.nameCamel %> wurde abgebrochen."
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
name: Deploy
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
release:
|
|
5
|
+
types:
|
|
6
|
+
- released
|
|
7
|
+
|
|
8
|
+
env:
|
|
9
|
+
SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }}
|
|
10
|
+
|
|
11
|
+
jobs:
|
|
12
|
+
deploy:
|
|
13
|
+
runs-on: [self-hosted, docker-live-swaktiv]
|
|
14
|
+
env:
|
|
15
|
+
STACK_NAME: <%= props.nameCamel %>
|
|
16
|
+
APP_URL: <%= props.url %>
|
|
17
|
+
CI_REGISTRY_IMAGE: localhost:5000/<%= props.nameCamel %>
|
|
18
|
+
FILE_NAME: docker-compose.prod.yml
|
|
19
|
+
steps:
|
|
20
|
+
- uses: actions/checkout@v1
|
|
21
|
+
- name: Use Node.js 18
|
|
22
|
+
uses: actions/setup-node@v1
|
|
23
|
+
with:
|
|
24
|
+
node-version: 18
|
|
25
|
+
- name: Install
|
|
26
|
+
run: npm run init
|
|
27
|
+
- name: Build app
|
|
28
|
+
run: npm run build
|
|
29
|
+
- name: Build docker
|
|
30
|
+
run: STACK_NAME=${{env.STACK_NAME}} APP_URL=${{env.APP_URL}} IMAGE_TAG=latest CI_REGISTRY_IMAGE=${{env.CI_REGISTRY_IMAGE}} sh build-push.sh
|
|
31
|
+
- name: Deploy
|
|
32
|
+
run: FILE_NAME=${{env.FILE_NAME}} STACK_NAME=${{env.STACK_NAME}} APP_URL=${{env.APP_URL}} IMAGE_TAG=latest CI_REGISTRY_IMAGE=${{env.CI_REGISTRY_IMAGE}} sh deploy.sh
|
|
33
|
+
- name: Deploy notification
|
|
34
|
+
if: always()
|
|
35
|
+
uses: adamkdean/simple-slack-notify@master
|
|
36
|
+
with:
|
|
37
|
+
channel: "#deployments"
|
|
38
|
+
status: ${{ job.status }}
|
|
39
|
+
success_text: "Version (#${{ github.event.release.tag_name }}) von <%= props.nameCamel %> wurde erfolgreich auf *Live* deployed."
|
|
40
|
+
failure_text: "Release (#${{ github.event.release.tag_name }}) von <%= props.nameCamel %> ist fehlgeschlagen."
|
|
41
|
+
cancelled_text: "Release (#${{ github.event.release.tag_name }}) von <%= props.nameCamel %> wurde abgebrochen."
|