@codenotch/codenotch.cli 1.0.36 → 1.0.37
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/README.md +2 -2
- package/dist/commands/generate/app.d.ts +2 -0
- package/dist/commands/generate/app.js +45 -0
- package/dist/commands/generate/app.js.map +1 -0
- package/dist/commands/generate/appmanifest.d.ts +2 -0
- package/dist/commands/generate/appmanifest.js +34 -0
- package/dist/commands/generate/appmanifest.js.map +1 -0
- package/dist/commands/generate/dbcontext.d.ts +2 -0
- package/dist/commands/generate/dbcontext.js +32 -0
- package/dist/commands/generate/dbcontext.js.map +1 -0
- package/dist/commands/generate/i18n.d.ts +2 -0
- package/dist/commands/generate/i18n.js +29 -0
- package/dist/commands/generate/i18n.js.map +1 -0
- package/dist/commands/generate/index.d.ts +0 -1
- package/dist/commands/generate/index.js +14 -33
- package/dist/commands/generate/index.js.map +1 -1
- package/dist/commands/generate/manifest.d.ts +2 -0
- package/dist/commands/generate/manifest.js +29 -0
- package/dist/commands/generate/manifest.js.map +1 -0
- package/dist/commands/generate/openapi.d.ts +2 -0
- package/dist/commands/generate/openapi.js +32 -0
- package/dist/commands/generate/openapi.js.map +1 -0
- package/dist/commands/generate/pkg.d.ts +2 -0
- package/dist/commands/generate/pkg.js +34 -0
- package/dist/commands/generate/pkg.js.map +1 -0
- package/dist/commands/generate/shared.d.ts +17 -0
- package/dist/commands/generate/shared.js +70 -0
- package/dist/commands/generate/shared.js.map +1 -0
- package/dist/commands/project/new.js +108 -96
- package/dist/commands/project/new.js.map +1 -1
- package/dist/commands/react/build.js +11 -5
- package/dist/commands/react/build.js.map +1 -1
- package/dist/commands/react/clean.d.ts +2 -0
- package/dist/commands/react/clean.js +46 -0
- package/dist/commands/react/clean.js.map +1 -0
- package/dist/commands/react/dev.d.ts +2 -0
- package/dist/commands/react/dev.js +27 -0
- package/dist/commands/react/dev.js.map +1 -0
- package/dist/commands/react/index.js +5 -1
- package/dist/commands/react/index.js.map +1 -1
- package/dist/commands/react/serve.js +33 -4
- package/dist/commands/react/serve.js.map +1 -1
- package/dist/commands/react/shared.d.ts +21 -0
- package/dist/commands/react/shared.js +80 -0
- package/dist/commands/react/shared.js.map +1 -0
- package/dist/commands/validation/ValidationUtils.d.ts +1 -1
- package/dist/commands/validation/ValidationUtils.js +3 -0
- package/dist/commands/validation/ValidationUtils.js.map +1 -1
- package/dist/commands/validation/files/I18nValidator.d.ts +29 -0
- package/dist/commands/validation/files/I18nValidator.js +198 -0
- package/dist/commands/validation/files/I18nValidator.js.map +1 -0
- package/dist/commands/validation/files/ProjectManifestValidator.d.ts +5 -0
- package/dist/commands/validation/files/ProjectManifestValidator.js +31 -0
- package/dist/commands/validation/files/ProjectManifestValidator.js.map +1 -0
- package/dist/commands/validation/files/ScriptValidator.js +1 -1
- package/dist/commands/validation/files/ScriptValidator.js.map +1 -1
- package/dist/commands/validation/validate.js +11 -6
- package/dist/commands/validation/validate.js.map +1 -1
- package/dist/utils/BuildUtils.d.ts +61 -7
- package/dist/utils/BuildUtils.js +289 -222
- package/dist/utils/BuildUtils.js.map +1 -1
- package/dist/utils/ConsoleUtils.d.ts +8 -0
- package/dist/utils/ConsoleUtils.js +25 -0
- package/dist/utils/ConsoleUtils.js.map +1 -1
- package/dist/utils/DbSchemaUtils.d.ts +49 -0
- package/dist/utils/DbSchemaUtils.js +246 -0
- package/dist/utils/DbSchemaUtils.js.map +1 -0
- package/dist/utils/FileUtils.d.ts +104 -15
- package/dist/utils/FileUtils.js +285 -100
- package/dist/utils/FileUtils.js.map +1 -1
- package/dist/utils/I18nTsUtils.d.ts +66 -0
- package/dist/utils/I18nTsUtils.js +221 -0
- package/dist/utils/I18nTsUtils.js.map +1 -0
- package/dist/utils/OpenApiUtils.d.ts +81 -0
- package/dist/utils/OpenApiUtils.js +123 -0
- package/dist/utils/OpenApiUtils.js.map +1 -0
- package/dist/utils/ProjectCompilationUtils.d.ts +0 -1
- package/dist/utils/ProjectCompilationUtils.js +4 -52
- package/dist/utils/ProjectCompilationUtils.js.map +1 -1
- package/dist/utils/ProjectGeneratorUtils.d.ts +35 -0
- package/dist/utils/ProjectGeneratorUtils.js +119 -0
- package/dist/utils/ProjectGeneratorUtils.js.map +1 -0
- package/dist/utils/ProjectTemplates.d.ts +102 -0
- package/dist/utils/ProjectTemplates.js +284 -0
- package/dist/utils/ProjectTemplates.js.map +1 -0
- package/dist/utils/ProjectUtils.d.ts +216 -3
- package/dist/utils/ProjectUtils.js +387 -22
- package/dist/utils/ProjectUtils.js.map +1 -1
- package/dist/utils/RuntimeUtils.js +14 -8
- package/dist/utils/RuntimeUtils.js.map +1 -1
- package/dist/utils/ScriptDeclarationUtils.d.ts +169 -0
- package/dist/utils/ScriptDeclarationUtils.js +398 -0
- package/dist/utils/ScriptDeclarationUtils.js.map +1 -0
- package/dist/utils/ServeUtils.js +10 -5
- package/dist/utils/ServeUtils.js.map +1 -1
- package/dist/utils/ShellUtils.d.ts +6 -0
- package/dist/utils/ShellUtils.js +13 -0
- package/dist/utils/ShellUtils.js.map +1 -1
- package/dist/utils/TemplateUtils.d.ts +62 -0
- package/dist/utils/TemplateUtils.js +218 -0
- package/dist/utils/TemplateUtils.js.map +1 -0
- package/dist/utils/TypeSchemaUtils.d.ts +42 -0
- package/dist/utils/TypeSchemaUtils.js +171 -0
- package/dist/utils/TypeSchemaUtils.js.map +1 -0
- package/package.json +3 -2
|
@@ -0,0 +1,398 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const typescript_1 = __importDefault(require("typescript"));
|
|
7
|
+
const TypeSchemaUtils_1 = __importDefault(require("./TypeSchemaUtils"));
|
|
8
|
+
/**
|
|
9
|
+
* Reads Codenotch declarations (processes, tables, documents...) out of a script.
|
|
10
|
+
*
|
|
11
|
+
* The script is parsed with the TypeScript compiler and never executed, so discovering a
|
|
12
|
+
* declaration cannot run any project code. Only what is written literally is reported: an id
|
|
13
|
+
* built at runtime is flagged rather than guessed.
|
|
14
|
+
*
|
|
15
|
+
* Parsing is tolerant: a file that does not compile is read on a best effort basis rather than
|
|
16
|
+
* throwing, so an unfinished declaration is still reported. Reporting the syntax errors themselves
|
|
17
|
+
* is the job of the validators, not of this discovery.
|
|
18
|
+
*/
|
|
19
|
+
class ScriptDeclarationUtils {
|
|
20
|
+
/**
|
|
21
|
+
* Finds every call to one of `factoryNames`, imported from `moduleName`, in a script.
|
|
22
|
+
*
|
|
23
|
+
* Named imports, aliases (`import { process as proc }`) and namespace imports
|
|
24
|
+
* (`import * as cn` then `cn.process(...)`) are all recognized, and a factory that is not
|
|
25
|
+
* imported from that module is never reported, so a local function of the same name is ignored.
|
|
26
|
+
*
|
|
27
|
+
* @param filePath path of the script, only used to pick the syntax (tsx, jsx, ts, js)
|
|
28
|
+
* @param content source of the script
|
|
29
|
+
* @param moduleName module the factories must come from, e.g. '@codenotch/process'
|
|
30
|
+
* @param factoryNames declaring factories to look for, e.g. ['process']
|
|
31
|
+
*/
|
|
32
|
+
static findDeclarationCalls(filePath, content, moduleName, factoryNames) {
|
|
33
|
+
return this.analyzeScript(filePath, content, moduleName, factoryNames).declarations;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Same as {@link ScriptDeclarationUtils.findDeclarationCalls}, and also reports the type aliases
|
|
37
|
+
* built with one of `typeHelperNames`, such as `export type IUser = InferEntity<typeof User>`.
|
|
38
|
+
*/
|
|
39
|
+
static analyzeScript(filePath, content, moduleName, factoryNames, typeHelperNames = []) {
|
|
40
|
+
const sourceFile = typescript_1.default.createSourceFile(filePath, content, typescript_1.default.ScriptTarget.Latest, true, this.getScriptKind(filePath));
|
|
41
|
+
// Every name imported from the module: local name -> name inside the module
|
|
42
|
+
const imported = new Map();
|
|
43
|
+
// Names bound by 'import * as x', used as 'x.process(...)'
|
|
44
|
+
const namespaces = new Set();
|
|
45
|
+
this.collectImports(sourceFile, moduleName, imported, namespaces);
|
|
46
|
+
if (imported.size === 0 && namespaces.size === 0) {
|
|
47
|
+
return { declarations: [], typeAliases: [] };
|
|
48
|
+
}
|
|
49
|
+
const declarations = [];
|
|
50
|
+
const visit = (node) => {
|
|
51
|
+
if (typescript_1.default.isCallExpression(node)) {
|
|
52
|
+
const callee = this.resolveCallee(node.expression, imported, namespaces);
|
|
53
|
+
if (callee !== undefined && factoryNames.includes(callee)) {
|
|
54
|
+
declarations.push(this.readDeclarationCall(node, callee, sourceFile, imported, namespaces));
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
typescript_1.default.forEachChild(node, visit);
|
|
58
|
+
};
|
|
59
|
+
visit(sourceFile);
|
|
60
|
+
return {
|
|
61
|
+
declarations,
|
|
62
|
+
typeAliases: typeHelperNames.length === 0 ? [] : this.findTypeAliases(sourceFile, typeHelperNames, imported, namespaces)
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Reads the `export type IUser = InferEntity<typeof User>` aliases of a script
|
|
67
|
+
*/
|
|
68
|
+
static findTypeAliases(sourceFile, typeHelperNames, imported, namespaces) {
|
|
69
|
+
const results = [];
|
|
70
|
+
for (const statement of sourceFile.statements) {
|
|
71
|
+
if (!typescript_1.default.isTypeAliasDeclaration(statement) || !typescript_1.default.isTypeReferenceNode(statement.type)) {
|
|
72
|
+
continue;
|
|
73
|
+
}
|
|
74
|
+
const helper = this.resolveTypeName(statement.type.typeName, imported, namespaces);
|
|
75
|
+
if (helper === undefined || !typeHelperNames.includes(helper)) {
|
|
76
|
+
continue;
|
|
77
|
+
}
|
|
78
|
+
// The 'typeof User' of InferEntity<typeof User>
|
|
79
|
+
const argument = statement.type.typeArguments?.[0];
|
|
80
|
+
const targetName = argument !== undefined && typescript_1.default.isTypeQueryNode(argument) && typescript_1.default.isIdentifier(argument.exprName)
|
|
81
|
+
? argument.exprName.text
|
|
82
|
+
: undefined;
|
|
83
|
+
results.push({
|
|
84
|
+
name: statement.name.text,
|
|
85
|
+
isExported: (statement.modifiers ?? []).some(modifier => modifier.kind === typescript_1.default.SyntaxKind.ExportKeyword),
|
|
86
|
+
helper,
|
|
87
|
+
targetName
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
return results;
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Name of a type in terms of the module it comes from, or undefined when it is unrelated to it
|
|
94
|
+
*/
|
|
95
|
+
static resolveTypeName(typeName, imported, namespaces) {
|
|
96
|
+
if (typescript_1.default.isIdentifier(typeName)) {
|
|
97
|
+
return imported.get(typeName.text);
|
|
98
|
+
}
|
|
99
|
+
// orm.InferEntity<...>, through 'import * as orm'
|
|
100
|
+
if (typescript_1.default.isIdentifier(typeName.left) && namespaces.has(typeName.left.text)) {
|
|
101
|
+
return typeName.right.text;
|
|
102
|
+
}
|
|
103
|
+
return undefined;
|
|
104
|
+
}
|
|
105
|
+
static getScriptKind(filePath) {
|
|
106
|
+
const lowerCased = filePath.toLowerCase();
|
|
107
|
+
if (lowerCased.endsWith('.tsx')) {
|
|
108
|
+
return typescript_1.default.ScriptKind.TSX;
|
|
109
|
+
}
|
|
110
|
+
if (lowerCased.endsWith('.jsx')) {
|
|
111
|
+
return typescript_1.default.ScriptKind.JSX;
|
|
112
|
+
}
|
|
113
|
+
if (lowerCased.endsWith('.js') || lowerCased.endsWith('.mjs') || lowerCased.endsWith('.cjs')) {
|
|
114
|
+
return typescript_1.default.ScriptKind.JS;
|
|
115
|
+
}
|
|
116
|
+
return typescript_1.default.ScriptKind.TS;
|
|
117
|
+
}
|
|
118
|
+
static collectImports(sourceFile, moduleName, imported, namespaces) {
|
|
119
|
+
for (const statement of sourceFile.statements) {
|
|
120
|
+
if (!typescript_1.default.isImportDeclaration(statement) || !typescript_1.default.isStringLiteral(statement.moduleSpecifier)) {
|
|
121
|
+
continue;
|
|
122
|
+
}
|
|
123
|
+
if (statement.moduleSpecifier.text !== moduleName || statement.importClause === undefined) {
|
|
124
|
+
continue;
|
|
125
|
+
}
|
|
126
|
+
const bindings = statement.importClause.namedBindings;
|
|
127
|
+
if (bindings !== undefined && typescript_1.default.isNamespaceImport(bindings)) {
|
|
128
|
+
namespaces.add(bindings.name.text);
|
|
129
|
+
}
|
|
130
|
+
else if (bindings !== undefined && typescript_1.default.isNamedImports(bindings)) {
|
|
131
|
+
for (const element of bindings.elements) {
|
|
132
|
+
// 'process as proc' gives propertyName 'process' and name 'proc'
|
|
133
|
+
imported.set(element.name.text, (element.propertyName ?? element.name).text);
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Name of a called expression in terms of the module it comes from: 'process', 'api.post', ...
|
|
140
|
+
* Returns undefined when the expression has nothing to do with the module.
|
|
141
|
+
*/
|
|
142
|
+
static resolveCallee(expression, imported, namespaces) {
|
|
143
|
+
// process({ ... })
|
|
144
|
+
if (typescript_1.default.isIdentifier(expression)) {
|
|
145
|
+
return imported.get(expression.text);
|
|
146
|
+
}
|
|
147
|
+
if (typescript_1.default.isPropertyAccessExpression(expression) && typescript_1.default.isIdentifier(expression.expression)) {
|
|
148
|
+
// cn.process({ ... }), through 'import * as cn'
|
|
149
|
+
if (namespaces.has(expression.expression.text)) {
|
|
150
|
+
return expression.name.text;
|
|
151
|
+
}
|
|
152
|
+
// api.post('/books'), where 'api' is imported from the module
|
|
153
|
+
const root = imported.get(expression.expression.text);
|
|
154
|
+
if (root !== undefined) {
|
|
155
|
+
return `${root}.${expression.name.text}`;
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
return undefined;
|
|
159
|
+
}
|
|
160
|
+
static readDeclarationCall(call, factory, sourceFile, imported, namespaces) {
|
|
161
|
+
const properties = {};
|
|
162
|
+
const calls = {};
|
|
163
|
+
const functions = {};
|
|
164
|
+
const argument = call.arguments[0];
|
|
165
|
+
let hasIdProperty = false;
|
|
166
|
+
if (argument !== undefined && typescript_1.default.isObjectLiteralExpression(argument)) {
|
|
167
|
+
const literal = this.readLiteralValue(argument);
|
|
168
|
+
if (literal !== undefined && typeof literal.literal === 'object' && literal.literal !== null && !Array.isArray(literal.literal)) {
|
|
169
|
+
Object.assign(properties, literal.literal);
|
|
170
|
+
}
|
|
171
|
+
this.collectCalls(argument, '', imported, namespaces, calls);
|
|
172
|
+
this.collectFunctions(argument, functions);
|
|
173
|
+
hasIdProperty = argument.properties.some(property => property.name !== undefined && this.getPropertyName(property.name) === 'id');
|
|
174
|
+
}
|
|
175
|
+
const id = typeof properties['id'] === 'string' ? properties['id'] : undefined;
|
|
176
|
+
const { variableName, isExported } = this.getAssignedVariable(call);
|
|
177
|
+
return {
|
|
178
|
+
factory,
|
|
179
|
+
id,
|
|
180
|
+
// An id that is present but absent from the literal properties was computed
|
|
181
|
+
isIdStatic: id !== undefined || !hasIdProperty,
|
|
182
|
+
variableName,
|
|
183
|
+
isExported,
|
|
184
|
+
line: sourceFile.getLineAndCharacterOfPosition(call.getStart(sourceFile)).line + 1,
|
|
185
|
+
properties,
|
|
186
|
+
calls,
|
|
187
|
+
functions
|
|
188
|
+
};
|
|
189
|
+
}
|
|
190
|
+
/**
|
|
191
|
+
* Records the signature of every property holding a function, whether written as an arrow
|
|
192
|
+
* function, a function expression or a method: `run: async (ctx, input) => ...` and
|
|
193
|
+
* `async run(ctx, input) { ... }` are read the same way.
|
|
194
|
+
*/
|
|
195
|
+
static collectFunctions(objectLiteral, results) {
|
|
196
|
+
for (const property of objectLiteral.properties) {
|
|
197
|
+
let name;
|
|
198
|
+
let fn;
|
|
199
|
+
if (typescript_1.default.isPropertyAssignment(property) && (typescript_1.default.isArrowFunction(property.initializer) || typescript_1.default.isFunctionExpression(property.initializer))) {
|
|
200
|
+
name = this.getPropertyName(property.name);
|
|
201
|
+
fn = property.initializer;
|
|
202
|
+
}
|
|
203
|
+
else if (typescript_1.default.isMethodDeclaration(property)) {
|
|
204
|
+
name = this.getPropertyName(property.name);
|
|
205
|
+
fn = property;
|
|
206
|
+
}
|
|
207
|
+
if (name === undefined || fn === undefined) {
|
|
208
|
+
continue;
|
|
209
|
+
}
|
|
210
|
+
results[name] = {
|
|
211
|
+
parameters: fn.parameters.map(parameter => ({
|
|
212
|
+
name: typescript_1.default.isIdentifier(parameter.name) ? parameter.name.text : parameter.name.getText(),
|
|
213
|
+
schema: parameter.type === undefined ? undefined : TypeSchemaUtils_1.default.fromTypeNode(parameter.type),
|
|
214
|
+
typeText: parameter.type?.getText(),
|
|
215
|
+
isOptional: parameter.questionToken !== undefined || parameter.initializer !== undefined
|
|
216
|
+
})),
|
|
217
|
+
returnSchema: fn.type === undefined ? undefined : TypeSchemaUtils_1.default.fromTypeNode(fn.type),
|
|
218
|
+
returnTypeText: fn.type?.getText(),
|
|
219
|
+
isAsync: (typescript_1.default.canHaveModifiers(fn) ? typescript_1.default.getModifiers(fn) ?? [] : []).some(modifier => modifier.kind === typescript_1.default.SyntaxKind.AsyncKeyword)
|
|
220
|
+
};
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
/**
|
|
224
|
+
* Walks an object literal and records every property whose value is a call, keyed by its path,
|
|
225
|
+
* so that the columns of `properties: { id: p.integer() }` are reachable as 'properties.id'.
|
|
226
|
+
*/
|
|
227
|
+
static collectCalls(objectLiteral, prefix, imported, namespaces, results) {
|
|
228
|
+
for (const property of objectLiteral.properties) {
|
|
229
|
+
// Shorthand ({ id }), spreads ({ ...base }) and methods hold no readable value
|
|
230
|
+
if (!typescript_1.default.isPropertyAssignment(property)) {
|
|
231
|
+
continue;
|
|
232
|
+
}
|
|
233
|
+
const name = this.getPropertyName(property.name);
|
|
234
|
+
if (name === undefined) {
|
|
235
|
+
continue;
|
|
236
|
+
}
|
|
237
|
+
const path = prefix === '' ? name : `${prefix}.${name}`;
|
|
238
|
+
const value = property.initializer;
|
|
239
|
+
if (typescript_1.default.isCallExpression(value)) {
|
|
240
|
+
results[path] = this.readCallChain(value, imported, namespaces);
|
|
241
|
+
}
|
|
242
|
+
else if (typescript_1.default.isObjectLiteralExpression(value)) {
|
|
243
|
+
this.collectCalls(value, path, imported, namespaces, results);
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
/**
|
|
248
|
+
* Reads a call or a chain of calls: `p.text().default('')` gives the root 'p' and the
|
|
249
|
+
* steps 'text' then 'default'.
|
|
250
|
+
*/
|
|
251
|
+
static readCallChain(call, imported, namespaces) {
|
|
252
|
+
const steps = [];
|
|
253
|
+
let current = call;
|
|
254
|
+
let root = '';
|
|
255
|
+
// Walk the chain from its end back to its root, hence the unshift
|
|
256
|
+
while (true) {
|
|
257
|
+
if (typescript_1.default.isCallExpression(current)) {
|
|
258
|
+
const args = this.readArguments(current);
|
|
259
|
+
if (typescript_1.default.isPropertyAccessExpression(current.expression)) {
|
|
260
|
+
steps.unshift({ name: current.expression.name.text, ...args });
|
|
261
|
+
current = current.expression.expression;
|
|
262
|
+
continue;
|
|
263
|
+
}
|
|
264
|
+
if (typescript_1.default.isIdentifier(current.expression)) {
|
|
265
|
+
// The root itself is called, as in timer('0 8 * * *')
|
|
266
|
+
root = this.resolveRoot(current.expression, imported, namespaces);
|
|
267
|
+
steps.unshift({ name: root, ...args });
|
|
268
|
+
break;
|
|
269
|
+
}
|
|
270
|
+
root = current.expression.getText();
|
|
271
|
+
break;
|
|
272
|
+
}
|
|
273
|
+
if (typescript_1.default.isIdentifier(current)) {
|
|
274
|
+
root = this.resolveRoot(current, imported, namespaces);
|
|
275
|
+
break;
|
|
276
|
+
}
|
|
277
|
+
root = current.getText();
|
|
278
|
+
break;
|
|
279
|
+
}
|
|
280
|
+
const names = steps.map(step => step.name);
|
|
281
|
+
const callee = root === '' || names[0] === root
|
|
282
|
+
// A namespace is the module itself, and a root that is called is already the first step
|
|
283
|
+
? names.join('.')
|
|
284
|
+
: [root, ...names].join('.');
|
|
285
|
+
const last = steps[steps.length - 1];
|
|
286
|
+
return {
|
|
287
|
+
root,
|
|
288
|
+
steps,
|
|
289
|
+
callee,
|
|
290
|
+
arguments: last?.arguments ?? [],
|
|
291
|
+
hasComputedArguments: steps.some(step => step.hasComputedArguments)
|
|
292
|
+
};
|
|
293
|
+
}
|
|
294
|
+
/**
|
|
295
|
+
* Name a chain starts from, under its module name. Empty for a namespace import, which
|
|
296
|
+
* designates the module itself rather than a value: 'cn.timer(...)' is just 'timer'.
|
|
297
|
+
*/
|
|
298
|
+
static resolveRoot(identifier, imported, namespaces) {
|
|
299
|
+
if (namespaces.has(identifier.text)) {
|
|
300
|
+
return '';
|
|
301
|
+
}
|
|
302
|
+
return imported.get(identifier.text) ?? identifier.text;
|
|
303
|
+
}
|
|
304
|
+
static readArguments(call) {
|
|
305
|
+
const args = [];
|
|
306
|
+
let hasComputedArguments = false;
|
|
307
|
+
for (const argument of call.arguments) {
|
|
308
|
+
const value = this.readLiteralValue(argument);
|
|
309
|
+
if (value === undefined) {
|
|
310
|
+
hasComputedArguments = true;
|
|
311
|
+
continue;
|
|
312
|
+
}
|
|
313
|
+
args.push(value.literal);
|
|
314
|
+
}
|
|
315
|
+
return { arguments: args, hasComputedArguments };
|
|
316
|
+
}
|
|
317
|
+
/**
|
|
318
|
+
* Value of an expression when it is written literally, undefined when it is only known at runtime.
|
|
319
|
+
* Wrapped in an object so that a literal 'null' is not confused with 'not a literal'.
|
|
320
|
+
*/
|
|
321
|
+
static readLiteralValue(node) {
|
|
322
|
+
if (typescript_1.default.isStringLiteral(node) || typescript_1.default.isNoSubstitutionTemplateLiteral(node)) {
|
|
323
|
+
return { literal: node.text };
|
|
324
|
+
}
|
|
325
|
+
if (typescript_1.default.isNumericLiteral(node)) {
|
|
326
|
+
return { literal: Number(node.text) };
|
|
327
|
+
}
|
|
328
|
+
if (node.kind === typescript_1.default.SyntaxKind.TrueKeyword) {
|
|
329
|
+
return { literal: true };
|
|
330
|
+
}
|
|
331
|
+
if (node.kind === typescript_1.default.SyntaxKind.FalseKeyword) {
|
|
332
|
+
return { literal: false };
|
|
333
|
+
}
|
|
334
|
+
if (node.kind === typescript_1.default.SyntaxKind.NullKeyword) {
|
|
335
|
+
return { literal: null };
|
|
336
|
+
}
|
|
337
|
+
// -1 and friends
|
|
338
|
+
if (typescript_1.default.isPrefixUnaryExpression(node) && node.operator === typescript_1.default.SyntaxKind.MinusToken && typescript_1.default.isNumericLiteral(node.operand)) {
|
|
339
|
+
return { literal: -Number(node.operand.text) };
|
|
340
|
+
}
|
|
341
|
+
// 'x satisfies T' and 'x as T' do not change the value
|
|
342
|
+
if (typescript_1.default.isAsExpression(node) || typescript_1.default.isSatisfiesExpression(node) || typescript_1.default.isParenthesizedExpression(node)) {
|
|
343
|
+
return this.readLiteralValue(node.expression);
|
|
344
|
+
}
|
|
345
|
+
if (typescript_1.default.isArrayLiteralExpression(node)) {
|
|
346
|
+
const items = [];
|
|
347
|
+
for (const element of node.elements) {
|
|
348
|
+
const value = this.readLiteralValue(element);
|
|
349
|
+
if (value === undefined) {
|
|
350
|
+
// A single computed item makes the whole array unknown
|
|
351
|
+
return undefined;
|
|
352
|
+
}
|
|
353
|
+
items.push(value.literal);
|
|
354
|
+
}
|
|
355
|
+
return { literal: items };
|
|
356
|
+
}
|
|
357
|
+
if (typescript_1.default.isObjectLiteralExpression(node)) {
|
|
358
|
+
const record = {};
|
|
359
|
+
for (const property of node.properties) {
|
|
360
|
+
if (!typescript_1.default.isPropertyAssignment(property)) {
|
|
361
|
+
continue;
|
|
362
|
+
}
|
|
363
|
+
const name = this.getPropertyName(property.name);
|
|
364
|
+
const value = name === undefined ? undefined : this.readLiteralValue(property.initializer);
|
|
365
|
+
if (name !== undefined && value !== undefined) {
|
|
366
|
+
record[name] = value.literal;
|
|
367
|
+
}
|
|
368
|
+
// A computed member is left out, the rest of the object stays usable
|
|
369
|
+
}
|
|
370
|
+
return { literal: record };
|
|
371
|
+
}
|
|
372
|
+
return undefined;
|
|
373
|
+
}
|
|
374
|
+
static getPropertyName(name) {
|
|
375
|
+
if (typescript_1.default.isIdentifier(name) || typescript_1.default.isStringLiteral(name) || typescript_1.default.isNumericLiteral(name)) {
|
|
376
|
+
return name.text;
|
|
377
|
+
}
|
|
378
|
+
return undefined;
|
|
379
|
+
}
|
|
380
|
+
/**
|
|
381
|
+
* Variable the call is assigned to, e.g. 'createBook' in `export const createBook = process({...})`
|
|
382
|
+
*/
|
|
383
|
+
static getAssignedVariable(call) {
|
|
384
|
+
const declaration = call.parent;
|
|
385
|
+
if (declaration === undefined || !typescript_1.default.isVariableDeclaration(declaration) || declaration.initializer !== call) {
|
|
386
|
+
return { isExported: false };
|
|
387
|
+
}
|
|
388
|
+
const variableName = typescript_1.default.isIdentifier(declaration.name) ? declaration.name.text : undefined;
|
|
389
|
+
// VariableDeclaration -> VariableDeclarationList -> VariableStatement, which carries the 'export'
|
|
390
|
+
const statement = declaration.parent?.parent;
|
|
391
|
+
const isExported = statement !== undefined
|
|
392
|
+
&& typescript_1.default.isVariableStatement(statement)
|
|
393
|
+
&& (statement.modifiers ?? []).some(modifier => modifier.kind === typescript_1.default.SyntaxKind.ExportKeyword);
|
|
394
|
+
return { variableName, isExported };
|
|
395
|
+
}
|
|
396
|
+
}
|
|
397
|
+
exports.default = ScriptDeclarationUtils;
|
|
398
|
+
//# sourceMappingURL=ScriptDeclarationUtils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ScriptDeclarationUtils.js","sourceRoot":"","sources":["../../src/utils/ScriptDeclarationUtils.ts"],"names":[],"mappings":"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"}
|
package/dist/utils/ServeUtils.js
CHANGED
|
@@ -43,8 +43,8 @@ const ConsoleUtils_1 = __importDefault(require("./ConsoleUtils"));
|
|
|
43
43
|
class ServeUtils {
|
|
44
44
|
static async serveApp(directory, options) {
|
|
45
45
|
const port = options.port || 5000;
|
|
46
|
-
|
|
47
|
-
const targetDir = (0, path_1.resolve)(
|
|
46
|
+
// resolve() already turns a relative path into an absolute one, based on the current directory
|
|
47
|
+
const targetDir = (0, path_1.resolve)(directory ?? '.');
|
|
48
48
|
const indexPath = (0, path_1.resolve)(targetDir, options.index || 'index.html');
|
|
49
49
|
if (!(0, fs_1.existsSync)(targetDir)) {
|
|
50
50
|
console.log(chalk_1.default.red(`Error: Target directory not found (${targetDir})`));
|
|
@@ -68,9 +68,14 @@ class ServeUtils {
|
|
|
68
68
|
if ((0, fs_1.existsSync)(envPath)) {
|
|
69
69
|
let envContent = (0, fs_1.readFileSync)(envPath, 'utf8');
|
|
70
70
|
envContent.split('\n').forEach(line => {
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
71
|
+
// Split on the first '=' only: json manifests and tokens hold '=' in their value
|
|
72
|
+
const separator = line.indexOf('=');
|
|
73
|
+
if (separator > 0) {
|
|
74
|
+
const key = line.substring(0, separator).trim();
|
|
75
|
+
const value = line.substring(separator + 1).trim();
|
|
76
|
+
if (key !== '' && value !== '') {
|
|
77
|
+
envVariables.push({ name: key, value: value });
|
|
78
|
+
}
|
|
74
79
|
}
|
|
75
80
|
});
|
|
76
81
|
console.log(chalk_1.default.green(`Loaded environment variables from "${envPath}":`));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ServeUtils.js","sourceRoot":"","sources":["../../src/utils/ServeUtils.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,kDAA0B;AAC1B,2BAA8C;AAC9C,+
|
|
1
|
+
{"version":3,"file":"ServeUtils.js","sourceRoot":"","sources":["../../src/utils/ServeUtils.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,9 @@
|
|
|
1
1
|
export default abstract class ShellUtils {
|
|
2
|
+
/**
|
|
3
|
+
* Runs a command with its output streamed to the terminal as it comes, unlike {@link ShellUtils.exec}
|
|
4
|
+
* which buffers it until the end. Meant for long commands such as 'npm install', where silence
|
|
5
|
+
* reads as a hang. Resolves with the exit code, and never rejects: a failure is a non zero code.
|
|
6
|
+
*/
|
|
7
|
+
static run(location: string, command: string): Promise<number>;
|
|
2
8
|
static exec(location: string, command: string, info?: string, silent?: boolean): Promise<void>;
|
|
3
9
|
}
|
package/dist/utils/ShellUtils.js
CHANGED
|
@@ -2,6 +2,19 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
const child_process_1 = require("child_process");
|
|
4
4
|
class ShellUtils {
|
|
5
|
+
/**
|
|
6
|
+
* Runs a command with its output streamed to the terminal as it comes, unlike {@link ShellUtils.exec}
|
|
7
|
+
* which buffers it until the end. Meant for long commands such as 'npm install', where silence
|
|
8
|
+
* reads as a hang. Resolves with the exit code, and never rejects: a failure is a non zero code.
|
|
9
|
+
*/
|
|
10
|
+
static run(location, command) {
|
|
11
|
+
return new Promise(resolve => {
|
|
12
|
+
// A shell is needed for 'npm', which is 'npm.cmd' on windows
|
|
13
|
+
const child = (0, child_process_1.spawn)(command, { cwd: location, shell: true, stdio: 'inherit' });
|
|
14
|
+
child.on('error', () => resolve(1));
|
|
15
|
+
child.on('close', code => resolve(code ?? 1));
|
|
16
|
+
});
|
|
17
|
+
}
|
|
5
18
|
static async exec(location, command, info, silent = false) {
|
|
6
19
|
if (info)
|
|
7
20
|
console.log(info + "...");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ShellUtils.js","sourceRoot":"","sources":["../../src/utils/ShellUtils.ts"],"names":[],"mappings":";;AAAA,
|
|
1
|
+
{"version":3,"file":"ShellUtils.js","sourceRoot":"","sources":["../../src/utils/ShellUtils.ts"],"names":[],"mappings":";;AAAA,iDAA4C;AAE5C,MAA8B,UAAU;IAEpC;;;;OAIG;IACI,MAAM,CAAC,GAAG,CAAC,QAAgB,EAAE,OAAe;QAC/C,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE;YACzB,6DAA6D;YAC7D,MAAM,KAAK,GAAG,IAAA,qBAAK,EAAC,OAAO,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;YAC/E,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;YACpC,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC;QAClD,CAAC,CAAC,CAAC;IACP,CAAC;IAEM,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,QAAgB,EAAE,OAAe,EAAE,IAAa,EAAE,SAAkB,KAAK;QAE9F,IAAG,IAAI;YACH,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,KAAK,CAAC,CAAC;QAC9B,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAClC,IAAA,oBAAI,EAAC,OAAO,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,EAAE,CAAC,KAAU,EAAE,MAAW,EAAE,MAAW,EAAE,EAAE;gBACtE,IAAI,KAAK,EAAE,CAAC;oBACR,IAAI,CAAC,MAAM,EAAE,CAAC;wBACV,OAAO,CAAC,KAAK,CAAC,eAAe,IAAI,KAAK,KAAK,EAAE,CAAC,CAAC;oBACnD,CAAC;oBACD,MAAM,CAAC,KAAK,CAAC,CAAC;gBAClB,CAAC;qBAAM,CAAC;oBACJ,IAAI,CAAC,MAAM,EAAE,CAAC;wBACV,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;wBACpB,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;oBAC1B,CAAC;oBACD,OAAO,CAAC,IAAI,CAAC,CAAC;gBAClB,CAAC;YACL,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;IACP,CAAC;CACJ;AArCD,6BAqCC"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { IAppManifest } from '@codenotch/codenotch.core';
|
|
2
|
+
/**
|
|
3
|
+
* An app name is used both as the file name and as the React component name, it must be a valid identifier
|
|
4
|
+
*/
|
|
5
|
+
export declare const APP_NAME_PATTERN: RegExp;
|
|
6
|
+
/**
|
|
7
|
+
* Single source of truth for the content of the files generated by the CLI.
|
|
8
|
+
*
|
|
9
|
+
* Both 'cn project new' (which scaffolds a whole project) and 'cn generate ...'
|
|
10
|
+
* (which generates one file at a time) build their files from here, so a template
|
|
11
|
+
* only has to be updated once.
|
|
12
|
+
*/
|
|
13
|
+
export default abstract class TemplateUtils {
|
|
14
|
+
static isValidAppName(appName: string): boolean;
|
|
15
|
+
/**
|
|
16
|
+
* Empty React app, e.g. 'apps/index.tsx'
|
|
17
|
+
*/
|
|
18
|
+
static createAppTsx(appName: string): string;
|
|
19
|
+
/**
|
|
20
|
+
* Manifest of an app, e.g. 'apps/index.manifest.json'
|
|
21
|
+
*/
|
|
22
|
+
static createAppManifest(appName: string): IAppManifest;
|
|
23
|
+
/**
|
|
24
|
+
* package.json of a Codenotch project
|
|
25
|
+
* @param name npm package name, usually the service name of the project
|
|
26
|
+
* @param extra dependencies a template adds on top of the base ones
|
|
27
|
+
* @param withReact false for a project without any app, which needs no React at all
|
|
28
|
+
*/
|
|
29
|
+
static createPackageJson(name: string, extra?: {
|
|
30
|
+
dependencies?: Record<string, string>;
|
|
31
|
+
devDependencies?: Record<string, string>;
|
|
32
|
+
}, withReact?: boolean): {
|
|
33
|
+
name: string;
|
|
34
|
+
version: string;
|
|
35
|
+
description: string;
|
|
36
|
+
main: string;
|
|
37
|
+
scripts: {};
|
|
38
|
+
keywords: never[];
|
|
39
|
+
author: string;
|
|
40
|
+
license: string;
|
|
41
|
+
dependencies: {
|
|
42
|
+
react?: string | undefined;
|
|
43
|
+
'react-dom'?: string | undefined;
|
|
44
|
+
'@codenotch/codenotch.react'?: string | undefined;
|
|
45
|
+
};
|
|
46
|
+
devDependencies: {
|
|
47
|
+
typescript: string;
|
|
48
|
+
'@types/react'?: string | undefined;
|
|
49
|
+
'@types/react-dom'?: string | undefined;
|
|
50
|
+
'@vitejs/plugin-react'?: string | undefined;
|
|
51
|
+
};
|
|
52
|
+
};
|
|
53
|
+
/**
|
|
54
|
+
* Folders of a new project, relative to its root
|
|
55
|
+
*/
|
|
56
|
+
static readonly PROJECT_FOLDERS: string[];
|
|
57
|
+
static createGitignore(): string;
|
|
58
|
+
/**
|
|
59
|
+
* readme.md of a new project: what the generated files are and how to work with them
|
|
60
|
+
*/
|
|
61
|
+
static createReadmeMd(projectName: string, serviceName: string): string;
|
|
62
|
+
}
|