@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.
Files changed (105) hide show
  1. package/README.md +2 -2
  2. package/dist/commands/generate/app.d.ts +2 -0
  3. package/dist/commands/generate/app.js +45 -0
  4. package/dist/commands/generate/app.js.map +1 -0
  5. package/dist/commands/generate/appmanifest.d.ts +2 -0
  6. package/dist/commands/generate/appmanifest.js +34 -0
  7. package/dist/commands/generate/appmanifest.js.map +1 -0
  8. package/dist/commands/generate/dbcontext.d.ts +2 -0
  9. package/dist/commands/generate/dbcontext.js +32 -0
  10. package/dist/commands/generate/dbcontext.js.map +1 -0
  11. package/dist/commands/generate/i18n.d.ts +2 -0
  12. package/dist/commands/generate/i18n.js +29 -0
  13. package/dist/commands/generate/i18n.js.map +1 -0
  14. package/dist/commands/generate/index.d.ts +0 -1
  15. package/dist/commands/generate/index.js +14 -33
  16. package/dist/commands/generate/index.js.map +1 -1
  17. package/dist/commands/generate/manifest.d.ts +2 -0
  18. package/dist/commands/generate/manifest.js +29 -0
  19. package/dist/commands/generate/manifest.js.map +1 -0
  20. package/dist/commands/generate/openapi.d.ts +2 -0
  21. package/dist/commands/generate/openapi.js +32 -0
  22. package/dist/commands/generate/openapi.js.map +1 -0
  23. package/dist/commands/generate/pkg.d.ts +2 -0
  24. package/dist/commands/generate/pkg.js +34 -0
  25. package/dist/commands/generate/pkg.js.map +1 -0
  26. package/dist/commands/generate/shared.d.ts +17 -0
  27. package/dist/commands/generate/shared.js +70 -0
  28. package/dist/commands/generate/shared.js.map +1 -0
  29. package/dist/commands/project/new.js +108 -96
  30. package/dist/commands/project/new.js.map +1 -1
  31. package/dist/commands/react/build.js +11 -5
  32. package/dist/commands/react/build.js.map +1 -1
  33. package/dist/commands/react/clean.d.ts +2 -0
  34. package/dist/commands/react/clean.js +46 -0
  35. package/dist/commands/react/clean.js.map +1 -0
  36. package/dist/commands/react/dev.d.ts +2 -0
  37. package/dist/commands/react/dev.js +27 -0
  38. package/dist/commands/react/dev.js.map +1 -0
  39. package/dist/commands/react/index.js +5 -1
  40. package/dist/commands/react/index.js.map +1 -1
  41. package/dist/commands/react/serve.js +33 -4
  42. package/dist/commands/react/serve.js.map +1 -1
  43. package/dist/commands/react/shared.d.ts +21 -0
  44. package/dist/commands/react/shared.js +80 -0
  45. package/dist/commands/react/shared.js.map +1 -0
  46. package/dist/commands/validation/ValidationUtils.d.ts +1 -1
  47. package/dist/commands/validation/ValidationUtils.js +3 -0
  48. package/dist/commands/validation/ValidationUtils.js.map +1 -1
  49. package/dist/commands/validation/files/I18nValidator.d.ts +29 -0
  50. package/dist/commands/validation/files/I18nValidator.js +198 -0
  51. package/dist/commands/validation/files/I18nValidator.js.map +1 -0
  52. package/dist/commands/validation/files/ProjectManifestValidator.d.ts +5 -0
  53. package/dist/commands/validation/files/ProjectManifestValidator.js +31 -0
  54. package/dist/commands/validation/files/ProjectManifestValidator.js.map +1 -0
  55. package/dist/commands/validation/files/ScriptValidator.js +1 -1
  56. package/dist/commands/validation/files/ScriptValidator.js.map +1 -1
  57. package/dist/commands/validation/validate.js +11 -6
  58. package/dist/commands/validation/validate.js.map +1 -1
  59. package/dist/utils/BuildUtils.d.ts +61 -7
  60. package/dist/utils/BuildUtils.js +289 -222
  61. package/dist/utils/BuildUtils.js.map +1 -1
  62. package/dist/utils/ConsoleUtils.d.ts +8 -0
  63. package/dist/utils/ConsoleUtils.js +25 -0
  64. package/dist/utils/ConsoleUtils.js.map +1 -1
  65. package/dist/utils/DbSchemaUtils.d.ts +49 -0
  66. package/dist/utils/DbSchemaUtils.js +246 -0
  67. package/dist/utils/DbSchemaUtils.js.map +1 -0
  68. package/dist/utils/FileUtils.d.ts +104 -15
  69. package/dist/utils/FileUtils.js +285 -100
  70. package/dist/utils/FileUtils.js.map +1 -1
  71. package/dist/utils/I18nTsUtils.d.ts +66 -0
  72. package/dist/utils/I18nTsUtils.js +221 -0
  73. package/dist/utils/I18nTsUtils.js.map +1 -0
  74. package/dist/utils/OpenApiUtils.d.ts +81 -0
  75. package/dist/utils/OpenApiUtils.js +123 -0
  76. package/dist/utils/OpenApiUtils.js.map +1 -0
  77. package/dist/utils/ProjectCompilationUtils.d.ts +0 -1
  78. package/dist/utils/ProjectCompilationUtils.js +4 -52
  79. package/dist/utils/ProjectCompilationUtils.js.map +1 -1
  80. package/dist/utils/ProjectGeneratorUtils.d.ts +35 -0
  81. package/dist/utils/ProjectGeneratorUtils.js +119 -0
  82. package/dist/utils/ProjectGeneratorUtils.js.map +1 -0
  83. package/dist/utils/ProjectTemplates.d.ts +102 -0
  84. package/dist/utils/ProjectTemplates.js +284 -0
  85. package/dist/utils/ProjectTemplates.js.map +1 -0
  86. package/dist/utils/ProjectUtils.d.ts +216 -3
  87. package/dist/utils/ProjectUtils.js +387 -22
  88. package/dist/utils/ProjectUtils.js.map +1 -1
  89. package/dist/utils/RuntimeUtils.js +14 -8
  90. package/dist/utils/RuntimeUtils.js.map +1 -1
  91. package/dist/utils/ScriptDeclarationUtils.d.ts +169 -0
  92. package/dist/utils/ScriptDeclarationUtils.js +398 -0
  93. package/dist/utils/ScriptDeclarationUtils.js.map +1 -0
  94. package/dist/utils/ServeUtils.js +10 -5
  95. package/dist/utils/ServeUtils.js.map +1 -1
  96. package/dist/utils/ShellUtils.d.ts +6 -0
  97. package/dist/utils/ShellUtils.js +13 -0
  98. package/dist/utils/ShellUtils.js.map +1 -1
  99. package/dist/utils/TemplateUtils.d.ts +62 -0
  100. package/dist/utils/TemplateUtils.js +218 -0
  101. package/dist/utils/TemplateUtils.js.map +1 -0
  102. package/dist/utils/TypeSchemaUtils.d.ts +42 -0
  103. package/dist/utils/TypeSchemaUtils.js +171 -0
  104. package/dist/utils/TypeSchemaUtils.js.map +1 -0
  105. 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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"}
@@ -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
- const isAbsolutePath = directory && (directory.startsWith('/') || directory.match(/^[a-zA-Z]:\\/));
47
- const targetDir = (0, path_1.resolve)(isAbsolutePath ? directory : (0, path_1.join)(process.cwd(), directory));
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
- let [key, value] = line.split('=');
72
- if (key && value) {
73
- envVariables.push({ name: key.trim(), value: value.trim() });
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":"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"}
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
  }
@@ -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,iDAAqC;AAErC,MAA8B,UAAU;IAC7B,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;AAtBD,6BAsBC"}
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
+ }