@ackee/create-node-app 1.0.1 → 2.0.0
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/AUTHORS +2 -1
- package/README.md +26 -18
- package/docs/development.md +42 -0
- package/lib/Bootstrap.js +106 -65
- package/lib/Bootstrap.js.map +1 -1
- package/lib/Builder.js +111 -0
- package/lib/Builder.js.map +1 -0
- package/lib/Files.js +21 -0
- package/lib/Files.js.map +1 -0
- package/lib/Logger.js +26 -8
- package/lib/Logger.js.map +1 -1
- package/lib/Mergers/ConfigMerger.js +22 -0
- package/lib/Mergers/ConfigMerger.js.map +1 -0
- package/lib/Mergers/ContainerMerger.js +172 -0
- package/lib/Mergers/ContainerMerger.js.map +1 -0
- package/lib/Mergers/EnvJsoncMerger.js +20 -0
- package/lib/Mergers/EnvJsoncMerger.js.map +1 -0
- package/lib/Mergers/Merger.js +36 -0
- package/lib/Mergers/Merger.js.map +1 -0
- package/lib/Mergers/PackageJsonMerger.js +36 -0
- package/lib/Mergers/PackageJsonMerger.js.map +1 -0
- package/lib/Npm.js +40 -12
- package/lib/Npm.js.map +1 -1
- package/lib/PackageJson.js +4 -4
- package/lib/PackageJson.js.map +1 -1
- package/lib/StarterLoader.js +86 -0
- package/lib/StarterLoader.js.map +1 -0
- package/package.json +8 -5
- package/src/Bootstrap.ts +123 -82
- package/src/Builder.ts +172 -0
- package/src/Files.ts +22 -0
- package/src/Logger.ts +26 -7
- package/src/Mergers/ConfigMerger.ts +28 -0
- package/src/Mergers/ContainerMerger.ts +241 -0
- package/src/Mergers/EnvJsoncMerger.ts +24 -0
- package/src/Mergers/Merger.ts +51 -0
- package/src/Mergers/PackageJsonMerger.ts +45 -0
- package/src/Npm.ts +60 -15
- package/src/PackageJson.ts +6 -4
- package/src/Starter.ts +2 -2
- package/src/StarterLoader.ts +148 -0
- package/starter/{cloudrun → _base}/.env.jsonc +1 -5
- package/starter/{cloudrun → _base}/.eslintrc.cjs +3 -2
- package/starter/_base/README.md +53 -0
- package/starter/_base/package.json +45 -0
- package/starter/{cloudrun → _base}/src/adapters/pino.logger.ts +1 -1
- package/starter/_base/src/config.ts +16 -0
- package/starter/{cloudrun-graphql → _base}/src/container.ts +3 -1
- package/starter/_base/src/index.ts +14 -0
- package/starter/{cloudrun → _base}/src/view/cli/README.md +2 -6
- package/starter/api/graphql/.env.jsonc +8 -0
- package/starter/{cloudrun-graphql → api/graphql}/.eslintrc.cjs +4 -5
- package/starter/api/graphql/node-app.jsonc +6 -0
- package/starter/api/graphql/package.json +36 -0
- package/starter/{cloudrun-graphql → api/graphql}/src/config.ts +0 -4
- package/starter/api/graphql/src/index.ts +11 -0
- package/starter/{cloudrun-graphql → api/graphql}/src/test/helloWorld.test.ts +14 -3
- package/starter/api/graphql/src/view/graphql/context-factory.ts +13 -0
- package/starter/{cloudrun-graphql → api/graphql}/src/view/server.ts +16 -6
- package/starter/api/rest/.env.jsonc +6 -0
- package/starter/api/rest/.eslintrc.cjs +8 -0
- package/starter/api/rest/node-app.jsonc +6 -0
- package/starter/api/rest/package.json +25 -0
- package/starter/{cloudrun → api/rest}/src/config.ts +0 -5
- package/starter/api/rest/src/container.ts +13 -0
- package/starter/{cloudrun → api/rest}/src/index.ts +4 -4
- package/starter/{cloudrun → api/rest}/src/test/health-check.test.ts +3 -5
- package/starter/{cloudrun → api/rest}/src/test/util/openapi-test.util.ts +3 -3
- package/starter/{cloudrun → api/rest}/src/view/rest/middleware/error-handler.ts +1 -1
- package/starter/{cloudrun → api/rest}/src/view/rest/routes.ts +1 -1
- package/starter/{cloudrun → api/rest}/src/view/rest/util/openapi.util.ts +19 -19
- package/starter/{cloudrun → api/rest}/src/view/server.ts +6 -4
- package/starter/infra/postgresql-knex/.env.jsonc +5 -0
- package/starter/{shared → infra/postgresql-knex}/docker-compose/docker-compose.yml +1 -1
- package/starter/infra/postgresql-knex/knexfile.ts +16 -0
- package/starter/infra/postgresql-knex/node-app.jsonc +6 -0
- package/starter/infra/postgresql-knex/package.json +13 -0
- package/starter/infra/postgresql-knex/src/adapters/knex.database.test.ts +21 -0
- package/starter/infra/postgresql-knex/src/adapters/knex.database.ts +14 -0
- package/starter/infra/postgresql-knex/src/adapters/repositories/migration.repository.ts +24 -0
- package/starter/infra/postgresql-knex/src/config.ts +14 -0
- package/starter/infra/postgresql-knex/src/container.ts +23 -0
- package/starter/infra/postgresql-knex/src/db/migration.template.ts +4 -0
- package/starter/infra/postgresql-knex/src/db/migrations/.gitkeep +0 -0
- package/starter/infra/postgresql-knex/src/db/seed.template.ts +3 -0
- package/starter/infra/postgresql-knex/src/db/seeds/.gitkeep +0 -0
- package/starter/infra/postgresql-knex/src/domain/ports/database.d.ts +4 -0
- package/starter/infra/postgresql-knex/src/domain/ports/repositories/migration.repository.d.ts +9 -0
- package/starter/infra/postgresql-knex/src/test/setup.ts +16 -0
- package/starter/{shared → pipeline/cloudrun-gitlab}/.gitlab-ci.yml +15 -6
- package/starter/pipeline/cloudrun-gitlab/node-app.jsonc +6 -0
- package/tsconfig.tsbuildinfo +1 -1
- package/lib/Toolbelt.js +0 -102
- package/lib/Toolbelt.js.map +0 -1
- package/lib/cloudrun/CloudRunStarter.js +0 -127
- package/lib/cloudrun/CloudRunStarter.js.map +0 -1
- package/lib/cloudrun-graphql/GraphQLStarter.js +0 -118
- package/lib/cloudrun-graphql/GraphQLStarter.js.map +0 -1
- package/src/Toolbelt.ts +0 -132
- package/src/cloudrun/CloudRunStarter.ts +0 -182
- package/src/cloudrun-graphql/GraphQLStarter.ts +0 -182
- package/starter/cloudrun/README.md +0 -69
- package/starter/cloudrun/src/container.ts +0 -18
- package/starter/cloudrun/src/context.ts +0 -39
- package/starter/cloudrun/src/domain/errors/codes.ts +0 -9
- package/starter/cloudrun/src/domain/errors/errors.ts +0 -25
- package/starter/cloudrun/src/domain/ports/logger.d.ts +0 -21
- package/starter/cloudrun-graphql/.env.jsonc +0 -12
- package/starter/cloudrun-graphql/README.md +0 -53
- package/starter/cloudrun-graphql/src/adapters/pino.logger.ts +0 -44
- package/starter/cloudrun-graphql/src/index.ts +0 -11
- package/starter/shared/.gitignore_ +0 -5
- package/starter/shared/ci-branch-config/common.env +0 -7
- package/starter/shared/ci-branch-config/development.env +0 -7
- package/starter/shared/ci-branch-config/master.env +0 -7
- package/starter/shared/ci-branch-config/stage.env +0 -7
- package/starter/shared/docker-compose/docker-compose.override.yml +0 -5
- package/starter/shared/jest.config.js +0 -12
- /package/starter/{shared → _base}/.dockerignore +0 -0
- /package/starter/{cloudrun → _base}/.eslint.tsconfig.json +0 -0
- /package/starter/{shared → _base}/.mocha-junit-config.json +0 -0
- /package/starter/{shared → _base}/.mocharc.json +0 -0
- /package/starter/{shared → _base}/.nvmrc +0 -0
- /package/starter/{shared → _base}/Dockerfile +0 -0
- /package/starter/{shared → _base}/prettier.config.cjs +0 -0
- /package/starter/{cloudrun-graphql → _base}/src/context.ts +0 -0
- /package/starter/{cloudrun-graphql → _base}/src/domain/errors/codes.ts +0 -0
- /package/starter/{cloudrun-graphql → _base}/src/domain/errors/errors.ts +0 -0
- /package/starter/{cloudrun-graphql → _base}/src/domain/ports/logger.d.ts +0 -0
- /package/starter/{shared → _base}/src/test/setup.ts +0 -0
- /package/starter/{cloudrun → _base}/src/view/cli/cli.ts +0 -0
- /package/starter/{shared → _base}/tsconfig.json +0 -0
- /package/starter/{cloudrun-graphql → api/graphql}/.eslint.tsconfig.json +0 -0
- /package/starter/{cloudrun-graphql → api/graphql}/codegen.yml +0 -0
- /package/starter/{cloudrun-graphql → api/graphql}/src/view/controller.ts +0 -0
- /package/starter/{cloudrun-graphql → api/graphql}/src/view/graphql/resolvers/greeting.resolver.ts +0 -0
- /package/starter/{cloudrun-graphql → api/graphql}/src/view/graphql/resolvers.ts +0 -0
- /package/starter/{cloudrun-graphql → api/graphql}/src/view/graphql/schema/schema.graphql +0 -0
- /package/starter/{cloudrun-graphql → api/graphql}/src/view/graphql/schema.ts +0 -0
- /package/starter/{cloudrun → api/rest}/src/domain/health-check.service.ts +0 -0
- /package/starter/{cloudrun → api/rest}/src/view/cli/openapi/generate.ts +0 -0
- /package/starter/{cloudrun/src/view/rest/controller → api/rest/src/view/rest/controllers}/health-check.controller.ts +0 -0
- /package/starter/{cloudrun → api/rest}/src/view/rest/middleware/context-middleware.ts +0 -0
- /package/starter/{cloudrun → api/rest}/src/view/rest/middleware/request-logger.ts +0 -0
- /package/starter/{cloudrun → api/rest}/src/view/rest/request.d.ts +0 -0
- /package/starter/{cloudrun → api/rest}/src/view/rest/spec/openapi.yml +0 -0
- /package/starter/{shared → infra/postgresql-knex}/docker-compose/docker-compose-entrypoint.sh +0 -0
- /package/starter/{shared → infra/postgresql-knex}/docker-compose/docker-compose.ci.yml +0 -0
- /package/starter/{shared → infra/postgresql-knex}/docker-compose/docker-compose.local.yml +0 -0
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
import { Merger } from './Merger.js';
|
|
2
|
+
import * as ts from 'typescript';
|
|
3
|
+
import { Files } from '../Files.js';
|
|
4
|
+
export class ContainerMerger extends Merger {
|
|
5
|
+
async merge(originDir) {
|
|
6
|
+
const content = await this.getWhichExistsOrNull(originDir);
|
|
7
|
+
if (content) {
|
|
8
|
+
return content;
|
|
9
|
+
}
|
|
10
|
+
const { originPath, destPath } = this.getPaths(originDir);
|
|
11
|
+
const [originContainer, destContainer] = await Promise.all([
|
|
12
|
+
Files.readUtf8File(originPath),
|
|
13
|
+
Files.readUtf8File(destPath),
|
|
14
|
+
]);
|
|
15
|
+
const originAst = this.parseFile(originContainer);
|
|
16
|
+
const destAst = this.parseFile(destContainer);
|
|
17
|
+
const mergedImports = this.mergeImports(originAst, destAst);
|
|
18
|
+
const mergedInterface = this.mergeInterface(originAst, destAst);
|
|
19
|
+
const mergedFunction = this.mergeFunction(originAst, destAst);
|
|
20
|
+
return `${mergedImports}\n\n${mergedInterface}\n\nexport type ContainerFactory = () => Promise<Container>\n\n${mergedFunction}\n`;
|
|
21
|
+
}
|
|
22
|
+
parseFile(content) {
|
|
23
|
+
return ts.createSourceFile('temp.ts', content, ts.ScriptTarget.Latest, true);
|
|
24
|
+
}
|
|
25
|
+
mergeImports(originAst, destAst) {
|
|
26
|
+
const imports = [];
|
|
27
|
+
const addImports = (node) => {
|
|
28
|
+
if (!ts.isImportDeclaration(node)) {
|
|
29
|
+
node.forEachChild(addImports);
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
const importText = node.getText();
|
|
33
|
+
if (!imports.includes(importText)) {
|
|
34
|
+
imports.push(importText);
|
|
35
|
+
}
|
|
36
|
+
node.forEachChild(addImports);
|
|
37
|
+
};
|
|
38
|
+
addImports(originAst);
|
|
39
|
+
addImports(destAst);
|
|
40
|
+
return imports.join('\n');
|
|
41
|
+
}
|
|
42
|
+
mergeInterface(originAst, destAst) {
|
|
43
|
+
const properties = [];
|
|
44
|
+
const extractProperties = (node) => {
|
|
45
|
+
if (!ts.isInterfaceDeclaration(node) || node.name.text !== 'Container') {
|
|
46
|
+
node.forEachChild(extractProperties);
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
node.members.forEach(member => {
|
|
50
|
+
if (!ts.isPropertySignature(member)) {
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
const propText = member.getText().trim();
|
|
54
|
+
if (!properties.includes(propText)) {
|
|
55
|
+
properties.push(propText);
|
|
56
|
+
}
|
|
57
|
+
});
|
|
58
|
+
node.forEachChild(extractProperties);
|
|
59
|
+
};
|
|
60
|
+
extractProperties(originAst);
|
|
61
|
+
extractProperties(destAst);
|
|
62
|
+
return `export interface Container {\n ${properties.join('\n ')}\n}`;
|
|
63
|
+
}
|
|
64
|
+
mergeFunction(originAst, destAst) {
|
|
65
|
+
const originFunctionBody = this.extractFunctionBody(originAst);
|
|
66
|
+
const destFunctionBody = this.extractFunctionBody(destAst);
|
|
67
|
+
const allFunctionContent = [
|
|
68
|
+
...originFunctionBody.content,
|
|
69
|
+
...destFunctionBody.content,
|
|
70
|
+
];
|
|
71
|
+
const mergedReturnProps = this.mergeReturnProperties(originFunctionBody.returnProps, destFunctionBody.returnProps);
|
|
72
|
+
let body = '';
|
|
73
|
+
if (allFunctionContent.length > 0) {
|
|
74
|
+
body += allFunctionContent.join('\n') + '\n\n';
|
|
75
|
+
}
|
|
76
|
+
body += ` return {\n ${mergedReturnProps.join(',\n ')}\n }`;
|
|
77
|
+
return `export const createContainer = async (): Promise<Container> => {\n${body}\n}`;
|
|
78
|
+
}
|
|
79
|
+
mergeReturnProperties(originProps, destProps) {
|
|
80
|
+
const mergedProps = new Map();
|
|
81
|
+
originProps.forEach(prop => {
|
|
82
|
+
const propName = this.getPropertyName(prop);
|
|
83
|
+
if (propName) {
|
|
84
|
+
mergedProps.set(propName, prop);
|
|
85
|
+
}
|
|
86
|
+
});
|
|
87
|
+
destProps.forEach(prop => {
|
|
88
|
+
const propName = this.getPropertyName(prop);
|
|
89
|
+
if (propName) {
|
|
90
|
+
mergedProps.set(propName, prop);
|
|
91
|
+
}
|
|
92
|
+
});
|
|
93
|
+
return Array.from(mergedProps.values()).map(prop => {
|
|
94
|
+
const propText = prop.getText();
|
|
95
|
+
if (ts.isPropertyAssignment(prop) &&
|
|
96
|
+
ts.isObjectLiteralExpression(prop.initializer)) {
|
|
97
|
+
return this.formatNestedObject(propText);
|
|
98
|
+
}
|
|
99
|
+
return propText;
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
getPropertyName(prop) {
|
|
103
|
+
if (ts.isPropertyAssignment(prop)) {
|
|
104
|
+
if (ts.isIdentifier(prop.name) || ts.isStringLiteral(prop.name)) {
|
|
105
|
+
return prop.name.text;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
else if (ts.isShorthandPropertyAssignment(prop)) {
|
|
109
|
+
return prop.name.text;
|
|
110
|
+
}
|
|
111
|
+
return null;
|
|
112
|
+
}
|
|
113
|
+
formatNestedObject(propText) {
|
|
114
|
+
const lines = propText.split('\n');
|
|
115
|
+
return lines
|
|
116
|
+
.map((line, index) => {
|
|
117
|
+
if (index === 0) {
|
|
118
|
+
return line;
|
|
119
|
+
}
|
|
120
|
+
return ' ' + line;
|
|
121
|
+
})
|
|
122
|
+
.join('\n');
|
|
123
|
+
}
|
|
124
|
+
extractFunctionBody(ast) {
|
|
125
|
+
const content = [];
|
|
126
|
+
const returnProps = [];
|
|
127
|
+
const visit = (node) => {
|
|
128
|
+
if (!this.isCreateContainer(node)) {
|
|
129
|
+
ts.forEachChild(node, visit);
|
|
130
|
+
return;
|
|
131
|
+
}
|
|
132
|
+
if (!node.initializer || !ts.isArrowFunction(node.initializer)) {
|
|
133
|
+
ts.forEachChild(node, visit);
|
|
134
|
+
return;
|
|
135
|
+
}
|
|
136
|
+
const body = node.initializer.body;
|
|
137
|
+
if (!ts.isBlock(body)) {
|
|
138
|
+
ts.forEachChild(node, visit);
|
|
139
|
+
return;
|
|
140
|
+
}
|
|
141
|
+
body.statements.forEach(statement => {
|
|
142
|
+
if (this.isContentStatement(statement)) {
|
|
143
|
+
content.push(statement.getText().trim());
|
|
144
|
+
}
|
|
145
|
+
else if (this.isReturnWithObject(statement)) {
|
|
146
|
+
// Extract the actual property nodes, not just their names
|
|
147
|
+
statement.expression.properties.forEach(prop => {
|
|
148
|
+
returnProps.push(prop);
|
|
149
|
+
});
|
|
150
|
+
}
|
|
151
|
+
});
|
|
152
|
+
ts.forEachChild(node, visit);
|
|
153
|
+
};
|
|
154
|
+
visit(ast);
|
|
155
|
+
return { content, returnProps };
|
|
156
|
+
}
|
|
157
|
+
isCreateContainer(node) {
|
|
158
|
+
return (ts.isVariableDeclaration(node) &&
|
|
159
|
+
node.name.getText() === 'createContainer');
|
|
160
|
+
}
|
|
161
|
+
isContentStatement(statement) {
|
|
162
|
+
return (ts.isVariableStatement(statement) ||
|
|
163
|
+
(ts.isExpressionStatement(statement) &&
|
|
164
|
+
ts.isCallExpression(statement.expression)));
|
|
165
|
+
}
|
|
166
|
+
isReturnWithObject(statement) {
|
|
167
|
+
return (ts.isReturnStatement(statement) &&
|
|
168
|
+
!!statement.expression &&
|
|
169
|
+
ts.isObjectLiteralExpression(statement.expression));
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
//# sourceMappingURL=ContainerMerger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ContainerMerger.js","sourceRoot":"","sources":["../../src/Mergers/ContainerMerger.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { Merger } from './Merger.js';
|
|
2
|
+
import { Files } from '../Files.js';
|
|
3
|
+
export class EnvJsoncMerger extends Merger {
|
|
4
|
+
async merge(originDir) {
|
|
5
|
+
const content = await this.getWhichExistsOrNull(originDir);
|
|
6
|
+
if (content) {
|
|
7
|
+
return content;
|
|
8
|
+
}
|
|
9
|
+
const { originPath, destPath } = this.getPaths(originDir);
|
|
10
|
+
const [destEnvConfig, originEnvConfig] = await Promise.all([
|
|
11
|
+
Files.readUtf8File(destPath),
|
|
12
|
+
Files.readUtf8File(originPath),
|
|
13
|
+
]);
|
|
14
|
+
const originWithoutOpenBracket = originEnvConfig.replace('{\n', '');
|
|
15
|
+
return destEnvConfig
|
|
16
|
+
.replace(',\n}\n', '\n}\n')
|
|
17
|
+
.replace('\n}\n', `,\n${originWithoutOpenBracket}`);
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=EnvJsoncMerger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EnvJsoncMerger.js","sourceRoot":"","sources":["../../src/Mergers/EnvJsoncMerger.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACpC,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AAEnC,MAAM,OAAO,cAAe,SAAQ,MAAM;IACxC,KAAK,CAAC,KAAK,CAAC,SAAiB;QAC3B,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,oBAAoB,CAAC,SAAS,CAAC,CAAA;QAC1D,IAAI,OAAO,EAAE,CAAC;YACZ,OAAO,OAAO,CAAA;QAChB,CAAC;QAED,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAA;QAEzD,MAAM,CAAC,aAAa,EAAE,eAAe,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;YACzD,KAAK,CAAC,YAAY,CAAC,QAAQ,CAAC;YAC5B,KAAK,CAAC,YAAY,CAAC,UAAU,CAAC;SAC/B,CAAC,CAAA;QAEF,MAAM,wBAAwB,GAAG,eAAe,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAA;QAEnE,OAAO,aAAa;aACjB,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC;aAC1B,OAAO,CAAC,OAAO,EAAE,MAAM,wBAAwB,EAAE,CAAC,CAAA;IACvD,CAAC;CACF"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import path from 'path';
|
|
2
|
+
import { Files } from '../Files.js';
|
|
3
|
+
export class Merger {
|
|
4
|
+
constructor(destDir, pathToFile) {
|
|
5
|
+
this.destDir = destDir;
|
|
6
|
+
this.pathToFile = pathToFile;
|
|
7
|
+
this.destPath = path.join(this.destDir, this.pathToFile);
|
|
8
|
+
}
|
|
9
|
+
getDestPath() {
|
|
10
|
+
return this.destPath;
|
|
11
|
+
}
|
|
12
|
+
getPaths(originDir) {
|
|
13
|
+
return {
|
|
14
|
+
originPath: path.join(originDir, this.pathToFile),
|
|
15
|
+
destPath: this.getDestPath(),
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
async getWhichExistsOrNull(originDir) {
|
|
19
|
+
const { originPath, destPath } = this.getPaths(originDir);
|
|
20
|
+
const [originExists, destExists] = await Promise.all([
|
|
21
|
+
Files.exists(originPath),
|
|
22
|
+
Files.exists(destPath),
|
|
23
|
+
]);
|
|
24
|
+
if (!originExists && destExists) {
|
|
25
|
+
return Files.readUtf8File(destPath);
|
|
26
|
+
}
|
|
27
|
+
if (!destExists && originExists) {
|
|
28
|
+
return Files.readUtf8File(originPath);
|
|
29
|
+
}
|
|
30
|
+
if (!originExists && !destExists) {
|
|
31
|
+
throw new Error(`No file found to merge: ${this.pathToFile}`);
|
|
32
|
+
}
|
|
33
|
+
return null;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=Merger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Merger.js","sourceRoot":"","sources":["../../src/Mergers/Merger.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAA;AACvB,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AAEnC,MAAM,OAAgB,MAAM;IAK1B,YACqB,OAAe,EACf,UAAkB;QADlB,YAAO,GAAP,OAAO,CAAQ;QACf,eAAU,GAAV,UAAU,CAAQ;QAErC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,CAAA;IAC1D,CAAC;IAEM,WAAW;QAChB,OAAO,IAAI,CAAC,QAAQ,CAAA;IACtB,CAAC;IAES,QAAQ,CAAC,SAAiB;QAClC,OAAO;YACL,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,UAAU,CAAC;YACjD,QAAQ,EAAE,IAAI,CAAC,WAAW,EAAE;SAC7B,CAAA;IACH,CAAC;IAES,KAAK,CAAC,oBAAoB,CAClC,SAAiB;QAEjB,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAA;QAEzD,MAAM,CAAC,YAAY,EAAE,UAAU,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;YACnD,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC;YACxB,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC;SACvB,CAAC,CAAA;QAEF,IAAI,CAAC,YAAY,IAAI,UAAU,EAAE,CAAC;YAChC,OAAO,KAAK,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAA;QACrC,CAAC;QAED,IAAI,CAAC,UAAU,IAAI,YAAY,EAAE,CAAC;YAChC,OAAO,KAAK,CAAC,YAAY,CAAC,UAAU,CAAC,CAAA;QACvC,CAAC;QAED,IAAI,CAAC,YAAY,IAAI,CAAC,UAAU,EAAE,CAAC;YACjC,MAAM,IAAI,KAAK,CAAC,2BAA2B,IAAI,CAAC,UAAU,EAAE,CAAC,CAAA;QAC/D,CAAC;QAED,OAAO,IAAI,CAAA;IACb,CAAC;CACF"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { Merger } from './Merger.js';
|
|
2
|
+
import { Files } from '../Files.js';
|
|
3
|
+
export class PackageJsonMerger extends Merger {
|
|
4
|
+
constructor(projectName, destDir, pathToFile) {
|
|
5
|
+
super(destDir, pathToFile);
|
|
6
|
+
this.projectName = projectName;
|
|
7
|
+
}
|
|
8
|
+
async merge(originDir) {
|
|
9
|
+
const content = await this.getWhichExistsOrNull(originDir);
|
|
10
|
+
if (content) {
|
|
11
|
+
return content;
|
|
12
|
+
}
|
|
13
|
+
const { originPath, destPath } = this.getPaths(originDir);
|
|
14
|
+
const [destPckgJson, starterPckgJson] = await Promise.all([
|
|
15
|
+
Files.readUtf8File(destPath),
|
|
16
|
+
Files.readUtf8File(originPath),
|
|
17
|
+
]);
|
|
18
|
+
const destPckgJsonObj = JSON.parse(destPckgJson);
|
|
19
|
+
const starterPckgJsonObj = JSON.parse(starterPckgJson);
|
|
20
|
+
destPckgJsonObj.name = this.projectName;
|
|
21
|
+
destPckgJsonObj.scripts = {
|
|
22
|
+
...destPckgJsonObj.scripts,
|
|
23
|
+
...starterPckgJsonObj.scripts,
|
|
24
|
+
};
|
|
25
|
+
destPckgJsonObj.dependencies = {
|
|
26
|
+
...destPckgJsonObj.dependencies,
|
|
27
|
+
...starterPckgJsonObj.dependencies,
|
|
28
|
+
};
|
|
29
|
+
destPckgJsonObj.devDependencies = {
|
|
30
|
+
...destPckgJsonObj.devDependencies,
|
|
31
|
+
...starterPckgJsonObj.devDependencies,
|
|
32
|
+
};
|
|
33
|
+
return JSON.stringify(destPckgJsonObj, null, 2);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=PackageJsonMerger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PackageJsonMerger.js","sourceRoot":"","sources":["../../src/Mergers/PackageJsonMerger.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACpC,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AAEnC,MAAM,OAAO,iBAAkB,SAAQ,MAAM;IAC3C,YACmB,WAAmB,EACpC,OAAe,EACf,UAAkB;QAElB,KAAK,CAAC,OAAO,EAAE,UAAU,CAAC,CAAA;QAJT,gBAAW,GAAX,WAAW,CAAQ;IAKtC,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,SAAiB;QAC3B,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,oBAAoB,CAAC,SAAS,CAAC,CAAA;QAC1D,IAAI,OAAO,EAAE,CAAC;YACZ,OAAO,OAAO,CAAA;QAChB,CAAC;QAED,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAA;QAEzD,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;YACxD,KAAK,CAAC,YAAY,CAAC,QAAQ,CAAC;YAC5B,KAAK,CAAC,YAAY,CAAC,UAAU,CAAC;SAC/B,CAAC,CAAA;QAEF,MAAM,eAAe,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAA;QAChD,MAAM,kBAAkB,GAAG,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,CAAA;QAEtD,eAAe,CAAC,IAAI,GAAG,IAAI,CAAC,WAAW,CAAA;QACvC,eAAe,CAAC,OAAO,GAAG;YACxB,GAAG,eAAe,CAAC,OAAO;YAC1B,GAAG,kBAAkB,CAAC,OAAO;SAC9B,CAAA;QACD,eAAe,CAAC,YAAY,GAAG;YAC7B,GAAG,eAAe,CAAC,YAAY;YAC/B,GAAG,kBAAkB,CAAC,YAAY;SACnC,CAAA;QACD,eAAe,CAAC,eAAe,GAAG;YAChC,GAAG,eAAe,CAAC,eAAe;YAClC,GAAG,kBAAkB,CAAC,eAAe;SACtC,CAAA;QAED,OAAO,IAAI,CAAC,SAAS,CAAC,eAAe,EAAE,IAAI,EAAE,CAAC,CAAC,CAAA;IACjD,CAAC;CACF"}
|
package/lib/Npm.js
CHANGED
|
@@ -1,33 +1,61 @@
|
|
|
1
1
|
import * as childProcess from 'child_process';
|
|
2
|
-
import {
|
|
2
|
+
import { Logger } from './Logger.js';
|
|
3
|
+
export class NpmError extends Error {
|
|
4
|
+
constructor(message, code) {
|
|
5
|
+
super(message);
|
|
6
|
+
this.code = code;
|
|
7
|
+
this.name = 'NpmError';
|
|
8
|
+
}
|
|
9
|
+
}
|
|
3
10
|
export class Npm {
|
|
4
11
|
constructor(settings) {
|
|
12
|
+
this.logger = settings?.logger ?? new Logger();
|
|
5
13
|
this.dir = settings?.dir;
|
|
6
14
|
}
|
|
15
|
+
spawn(cmd, args, options = {}) {
|
|
16
|
+
return new Promise((resolve, reject) => {
|
|
17
|
+
const cp = childProcess.spawn(cmd, args, options);
|
|
18
|
+
const error = [];
|
|
19
|
+
const stdout = [];
|
|
20
|
+
cp.stdout?.on('data', data => {
|
|
21
|
+
stdout.push(data.toString());
|
|
22
|
+
});
|
|
23
|
+
cp.on('error', e => {
|
|
24
|
+
error.push(e.toString());
|
|
25
|
+
});
|
|
26
|
+
cp.on('close', code => {
|
|
27
|
+
if (error.length || (code !== null && code > 0)) {
|
|
28
|
+
reject(new NpmError(error.length ? error.join('') : stdout.join(''), code ?? null));
|
|
29
|
+
}
|
|
30
|
+
else {
|
|
31
|
+
resolve(undefined);
|
|
32
|
+
}
|
|
33
|
+
});
|
|
34
|
+
});
|
|
35
|
+
}
|
|
7
36
|
run(args) {
|
|
8
|
-
logger.
|
|
9
|
-
const
|
|
10
|
-
?
|
|
37
|
+
this.logger.debug(`> npm ${args.join(' ')}`);
|
|
38
|
+
const options = this.dir
|
|
39
|
+
? {
|
|
11
40
|
cwd: this.dir,
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
}
|
|
41
|
+
stdio: this.logger.enableDebug ? 'inherit' : 'pipe',
|
|
42
|
+
}
|
|
43
|
+
: { stdio: this.logger.enableDebug ? 'inherit' : 'pipe' };
|
|
44
|
+
return this.spawn('npm', args, options);
|
|
17
45
|
}
|
|
18
46
|
init() {
|
|
19
|
-
this.run(['init', '--yes']);
|
|
47
|
+
return this.run(['init', '--yes']);
|
|
20
48
|
}
|
|
21
49
|
i(module) {
|
|
22
50
|
if (!module) {
|
|
23
51
|
return this.run(['i']);
|
|
24
52
|
}
|
|
25
53
|
const args = ['i', module];
|
|
26
|
-
this.run(args);
|
|
54
|
+
return this.run(args);
|
|
27
55
|
}
|
|
28
56
|
iDev(module) {
|
|
29
57
|
const args = ['i', '-D', module];
|
|
30
|
-
this.run(args);
|
|
58
|
+
return this.run(args);
|
|
31
59
|
}
|
|
32
60
|
}
|
|
33
61
|
//# sourceMappingURL=Npm.js.map
|
package/lib/Npm.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Npm.js","sourceRoot":"","sources":["../src/Npm.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,YAAY,MAAM,eAAe,CAAA;AAC7C,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAGpC,MAAM,OAAO,GAAG;
|
|
1
|
+
{"version":3,"file":"Npm.js","sourceRoot":"","sources":["../src/Npm.ts"],"names":[],"mappings":"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"}
|
package/lib/PackageJson.js
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
import * as path from 'path';
|
|
2
2
|
import * as fs from 'fs';
|
|
3
3
|
import * as lodash from 'lodash-es';
|
|
4
|
-
import { logger } from './Logger.js';
|
|
5
4
|
export class PackageJson {
|
|
6
|
-
constructor(npm) {
|
|
5
|
+
constructor(npm, logger) {
|
|
7
6
|
let packagejsonPath = './package.json';
|
|
8
7
|
if (npm.dir) {
|
|
9
8
|
packagejsonPath = path.normalize(`${npm.dir}/${packagejsonPath}`);
|
|
10
9
|
}
|
|
11
10
|
this.path = packagejsonPath;
|
|
12
11
|
this.npm = npm;
|
|
12
|
+
this.logger = logger;
|
|
13
13
|
}
|
|
14
14
|
setType(type) {
|
|
15
15
|
this.mergeWith({
|
|
@@ -20,7 +20,7 @@ export class PackageJson {
|
|
|
20
20
|
return JSON.parse(fs.readFileSync(this.path, 'utf-8'));
|
|
21
21
|
}
|
|
22
22
|
runScript(name) {
|
|
23
|
-
this.npm.run(['run', name]);
|
|
23
|
+
return this.npm.run(['run', name]);
|
|
24
24
|
}
|
|
25
25
|
addNpmScript(name, command) {
|
|
26
26
|
this.mergeWith({
|
|
@@ -32,7 +32,7 @@ export class PackageJson {
|
|
|
32
32
|
// Updated package json using merge with given object
|
|
33
33
|
mergeWith(partialWith) {
|
|
34
34
|
const json = lodash.merge(this.toJSON(), partialWith);
|
|
35
|
-
logger.
|
|
35
|
+
this.logger.debug(`> package.json updated ${JSON.stringify(partialWith)}`);
|
|
36
36
|
fs.writeFileSync(path.join(this.path), JSON.stringify(json, null, 2), 'utf-8');
|
|
37
37
|
}
|
|
38
38
|
}
|
package/lib/PackageJson.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PackageJson.js","sourceRoot":"","sources":["../src/PackageJson.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,MAAM,CAAA;AAC5B,OAAO,KAAK,EAAE,MAAM,IAAI,CAAA;AACxB,OAAO,KAAK,MAAM,MAAM,WAAW,CAAA;
|
|
1
|
+
{"version":3,"file":"PackageJson.js","sourceRoot":"","sources":["../src/PackageJson.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,MAAM,CAAA;AAC5B,OAAO,KAAK,EAAE,MAAM,IAAI,CAAA;AACxB,OAAO,KAAK,MAAM,MAAM,WAAW,CAAA;AAKnC,MAAM,OAAO,WAAW;IAItB,YAAY,GAAQ,EAAE,MAAc;QAClC,IAAI,eAAe,GAAG,gBAAwB,CAAA;QAC9C,IAAI,GAAG,CAAC,GAAG,EAAE,CAAC;YACZ,eAAe,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,GAAG,CAAC,GAAG,IAAI,eAAe,EAAE,CAAS,CAAA;QAC3E,CAAC;QACD,IAAI,CAAC,IAAI,GAAG,eAAe,CAAA;QAC3B,IAAI,CAAC,GAAG,GAAG,GAAG,CAAA;QACd,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;IACtB,CAAC;IACM,OAAO,CAAC,IAA2B;QACxC,IAAI,CAAC,SAAS,CAAC;YACb,IAAI;SACL,CAAC,CAAA;IACJ,CAAC;IACM,MAAM;QACX,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAA;IACxD,CAAC;IACM,SAAS,CAAC,IAAY;QAC3B,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAA;IACpC,CAAC;IACM,YAAY,CAAC,IAAY,EAAE,OAAe;QAC/C,IAAI,CAAC,SAAS,CAAC;YACb,OAAO,EAAE;gBACP,CAAC,IAAI,CAAC,EAAE,OAAO;aAChB;SACF,CAAC,CAAA;IACJ,CAAC;IACD,qDAAqD;IAC9C,SAAS,CAAC,WAAgB;QAC/B,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,WAAW,CAAC,CAAA;QACrD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,0BAA0B,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,EAAE,CAAC,CAAA;QAC1E,EAAE,CAAC,aAAa,CACd,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EACpB,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAC7B,OAAO,CACR,CAAA;IACH,CAAC;CACF"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import glob from 'fast-glob';
|
|
2
|
+
import fs from 'node:fs';
|
|
3
|
+
import path from 'node:path';
|
|
4
|
+
import { Files } from './Files.js';
|
|
5
|
+
export class StarterLoader {
|
|
6
|
+
constructor() {
|
|
7
|
+
this.starters = new Map();
|
|
8
|
+
this.modules = [];
|
|
9
|
+
const configFiles = glob.sync(`${StarterLoader.starterPath}/**/node-app.jsonc`);
|
|
10
|
+
for (const configFile of configFiles) {
|
|
11
|
+
const config = StarterLoader.validateConfig(configFile, JSON.parse(fs.readFileSync(configFile, 'utf8')));
|
|
12
|
+
const original = this.starters.get(config.id);
|
|
13
|
+
if (original) {
|
|
14
|
+
throw new Error(`Duplicate starter: ${config.name}\n` +
|
|
15
|
+
`> Starter 1: ${original.path}\n` +
|
|
16
|
+
`> Starter 2: ${path.dirname(configFile)}`);
|
|
17
|
+
}
|
|
18
|
+
this.starters.set(config.id, {
|
|
19
|
+
name: config.name,
|
|
20
|
+
config,
|
|
21
|
+
path: path.dirname(configFile),
|
|
22
|
+
configPath: configFile,
|
|
23
|
+
});
|
|
24
|
+
const module = this.modules.find(module => module.name === config.module);
|
|
25
|
+
if (module) {
|
|
26
|
+
module.starters.push(config.id);
|
|
27
|
+
continue;
|
|
28
|
+
}
|
|
29
|
+
this.modules.push({
|
|
30
|
+
name: config.module,
|
|
31
|
+
starters: [config.id],
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
this.modules.sort((a, b) => a.name.localeCompare(b.name));
|
|
35
|
+
}
|
|
36
|
+
getOptions() {
|
|
37
|
+
return this.modules;
|
|
38
|
+
}
|
|
39
|
+
getStarter(id) {
|
|
40
|
+
const starter = this.starters.get(id);
|
|
41
|
+
if (!starter) {
|
|
42
|
+
throw new Error(`Starter ${id} not found`);
|
|
43
|
+
}
|
|
44
|
+
return starter;
|
|
45
|
+
}
|
|
46
|
+
static validateConfig(configPath, config) {
|
|
47
|
+
if (!config.module) {
|
|
48
|
+
throw new Error(`Invalid config at ${configPath}: module key is required`);
|
|
49
|
+
}
|
|
50
|
+
if (!config.name) {
|
|
51
|
+
throw new Error(`Invalid config at ${configPath}: name key is required`);
|
|
52
|
+
}
|
|
53
|
+
if (!config.id) {
|
|
54
|
+
throw new Error(`Invalid config at ${configPath}: id key is required`);
|
|
55
|
+
}
|
|
56
|
+
if (!StarterLoader.isValidOptionalStringArray(config.prebuild)) {
|
|
57
|
+
throw new Error(`Invalid config at ${configPath}: "prebuild" must be array of npm script names or empty`);
|
|
58
|
+
}
|
|
59
|
+
if (!StarterLoader.isValidOptionalStringArray(config.replace)) {
|
|
60
|
+
throw new Error(`Invalid config at ${configPath}: "replace" must be array of files where strings should be replaced`);
|
|
61
|
+
}
|
|
62
|
+
if (config.replace) {
|
|
63
|
+
const configDir = path.dirname(configPath);
|
|
64
|
+
const invalidReplace = config.replace.find((replace) => {
|
|
65
|
+
const replacePath = path.join(configDir, replace);
|
|
66
|
+
return (!fs.existsSync(replacePath) ||
|
|
67
|
+
!Files.isInSameTree(configDir, path.join(configDir, replacePath)));
|
|
68
|
+
});
|
|
69
|
+
if (invalidReplace) {
|
|
70
|
+
throw new Error(`Invalid config at ${configPath}: "replace" must be array of files in the project directory, got: ${invalidReplace}`);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
const invalidKeys = Object.keys(config).filter(key => !['module', 'name', 'prebuild', 'replace', 'id'].includes(key));
|
|
74
|
+
if (invalidKeys.length > 0) {
|
|
75
|
+
throw new Error(`Invalid config at ${configPath}: Unknown key(s): ${invalidKeys.join(', ')}`);
|
|
76
|
+
}
|
|
77
|
+
return config;
|
|
78
|
+
}
|
|
79
|
+
static isValidOptionalStringArray(array) {
|
|
80
|
+
return (!array ||
|
|
81
|
+
(Array.isArray(array) &&
|
|
82
|
+
array.every((item) => typeof item === 'string')));
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
StarterLoader.starterPath = path.normalize(path.join(import.meta.dirname, '..', 'starter'));
|
|
86
|
+
//# sourceMappingURL=StarterLoader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StarterLoader.js","sourceRoot":"","sources":["../src/StarterLoader.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ackee/create-node-app",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "2.0.0",
|
|
4
4
|
"description": "",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"type": "module",
|
|
7
7
|
"scripts": {
|
|
8
8
|
"build": "tsc",
|
|
9
|
-
"prettier:check": "prettier --ignore-path .gitignore --check '**/*.{ts,js,json,md}'",
|
|
10
|
-
"prettier:fix": "npm run prettier:check -- --write '**/*.{ts,js,json,md}'",
|
|
9
|
+
"prettier:check": "prettier --ignore-path .gitignore --check '**/*.{ts,js,json,jsonc,md}'",
|
|
10
|
+
"prettier:fix": "npm run prettier:check -- --write '**/*.{ts,js,json,jsonc,md}'",
|
|
11
11
|
"lint:check": "eslint --ignore-path .gitignore 'src/**/*.ts' -f codeframe",
|
|
12
12
|
"lint:fix": "npm run lint:check -- --fix"
|
|
13
13
|
},
|
|
@@ -27,14 +27,17 @@
|
|
|
27
27
|
},
|
|
28
28
|
"homepage": "https://github.com/AckeeCZ/create-node-app#readme",
|
|
29
29
|
"devDependencies": {
|
|
30
|
-
"@ackee/styleguide-backend-config": "^1.0.
|
|
30
|
+
"@ackee/styleguide-backend-config": "^1.0.1",
|
|
31
31
|
"@types/lodash-es": "^4.17.12",
|
|
32
32
|
"@types/node": "^20.19.0",
|
|
33
33
|
"@types/yargs": "^17.0.33",
|
|
34
|
-
"prettier": "^
|
|
34
|
+
"prettier": "^3.0.0",
|
|
35
35
|
"typescript": "^5.4.5"
|
|
36
36
|
},
|
|
37
37
|
"dependencies": {
|
|
38
|
+
"fast-glob": "^3.3.3",
|
|
39
|
+
"inquirer": "^12.9.0",
|
|
40
|
+
"ora": "^8.2.0",
|
|
38
41
|
"source-map-support": "^0.5.21",
|
|
39
42
|
"yargs": "^18.0.0",
|
|
40
43
|
"lodash-es": "^4.17.21"
|