@codenotch/codenotch.cli 1.0.33 → 1.0.35

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 (99) hide show
  1. package/dist/commands/index.js +2 -0
  2. package/dist/commands/index.js.map +1 -1
  3. package/dist/commands/project/new.js +227 -1
  4. package/dist/commands/project/new.js.map +1 -1
  5. package/dist/commands/validation/ValidationUtils.d.ts +28 -0
  6. package/dist/commands/validation/ValidationUtils.js +182 -0
  7. package/dist/commands/validation/ValidationUtils.js.map +1 -0
  8. package/dist/commands/validation/files/AppManifestValidator.d.ts +6 -0
  9. package/dist/commands/validation/files/AppManifestValidator.js +93 -0
  10. package/dist/commands/validation/files/AppManifestValidator.js.map +1 -0
  11. package/dist/commands/validation/files/BpmnValidator.d.ts +5 -0
  12. package/dist/commands/validation/files/BpmnValidator.js +32 -0
  13. package/dist/commands/validation/files/BpmnValidator.js.map +1 -0
  14. package/dist/commands/validation/files/DbSchemaValidator.d.ts +5 -0
  15. package/dist/commands/validation/files/DbSchemaValidator.js +16 -0
  16. package/dist/commands/validation/files/DbSchemaValidator.js.map +1 -0
  17. package/dist/commands/validation/files/DocumentValidator.d.ts +5 -0
  18. package/dist/commands/validation/files/DocumentValidator.js +12 -0
  19. package/dist/commands/validation/files/DocumentValidator.js.map +1 -0
  20. package/dist/commands/validation/files/I18nValidator.d.ts +5 -0
  21. package/dist/commands/validation/files/I18nValidator.js +13 -0
  22. package/dist/commands/validation/files/I18nValidator.js.map +1 -0
  23. package/dist/commands/validation/files/JsonValidator.d.ts +5 -0
  24. package/dist/commands/validation/files/JsonValidator.js +13 -0
  25. package/dist/commands/validation/files/JsonValidator.js.map +1 -0
  26. package/dist/commands/validation/files/ManifestCacheValidator.d.ts +5 -0
  27. package/dist/commands/validation/files/ManifestCacheValidator.js +121 -0
  28. package/dist/commands/validation/files/ManifestCacheValidator.js.map +1 -0
  29. package/dist/commands/validation/files/ManifestValidator.d.ts +5 -0
  30. package/dist/commands/validation/files/ManifestValidator.js +14 -0
  31. package/dist/commands/validation/files/ManifestValidator.js.map +1 -0
  32. package/dist/commands/validation/files/ScriptValidator.d.ts +12 -0
  33. package/dist/commands/validation/files/ScriptValidator.js +128 -0
  34. package/dist/commands/validation/files/ScriptValidator.js.map +1 -0
  35. package/dist/commands/validation/files/TableValidator.d.ts +5 -0
  36. package/dist/commands/validation/files/TableValidator.js +19 -0
  37. package/dist/commands/validation/files/TableValidator.js.map +1 -0
  38. package/dist/commands/validation/validate.d.ts +2 -0
  39. package/dist/commands/validation/validate.js +245 -0
  40. package/dist/commands/validation/validate.js.map +1 -0
  41. package/dist/utils/BuildUtils.d.ts +23 -4
  42. package/dist/utils/BuildUtils.js +46 -16
  43. package/dist/utils/BuildUtils.js.map +1 -1
  44. package/dist/utils/FileUtils.d.ts +13 -0
  45. package/dist/utils/FileUtils.js +30 -0
  46. package/dist/utils/FileUtils.js.map +1 -1
  47. package/dist/utils/I18nUtils.js +0 -2
  48. package/dist/utils/I18nUtils.js.map +1 -1
  49. package/package.json +14 -6
  50. package/.github/copilot-instructions.md +0 -3
  51. package/bin/cli.js +0 -3
  52. package/docs/ARCHITECTURE.md +0 -179
  53. package/docs/TODO.md +0 -18
  54. package/src/bin/cli.ts +0 -4
  55. package/src/commands/index.ts +0 -13
  56. package/src/commands/project/compile.ts +0 -20
  57. package/src/commands/project/deploy.ts +0 -11
  58. package/src/commands/project/index.ts +0 -28
  59. package/src/commands/project/inspect.ts +0 -12
  60. package/src/commands/project/new.ts +0 -11
  61. package/src/commands/project/open.ts +0 -21
  62. package/src/commands/project/package.ts +0 -20
  63. package/src/commands/project/refresh.ts +0 -13
  64. package/src/commands/project/remove.ts +0 -12
  65. package/src/commands/project/shared.ts +0 -9
  66. package/src/commands/project/start.ts +0 -24
  67. package/src/commands/project/test.ts +0 -15
  68. package/src/commands/react/build.ts +0 -12
  69. package/src/commands/react/index.ts +0 -12
  70. package/src/commands/react/serve.ts +0 -13
  71. package/src/commands/runtime/clear.ts +0 -11
  72. package/src/commands/runtime/index.ts +0 -24
  73. package/src/commands/runtime/info.ts +0 -47
  74. package/src/commands/runtime/latest.ts +0 -18
  75. package/src/commands/runtime/portal.ts +0 -20
  76. package/src/commands/runtime/start.ts +0 -16
  77. package/src/commands/runtime/stop.ts +0 -13
  78. package/src/commands/runtime/update.ts +0 -12
  79. package/src/commands/system/index.ts +0 -9
  80. package/src/commands/system/info.ts +0 -23
  81. package/src/commands/system/read.ts +0 -25
  82. package/src/index.ts +0 -22
  83. package/src/models/Codenotch.ts +0 -361
  84. package/src/models/DbModels.ts +0 -428
  85. package/src/models/OpenApiModels.ts +0 -145
  86. package/src/utils/BuildUtils.ts +0 -739
  87. package/src/utils/ConsoleUtils.ts +0 -22
  88. package/src/utils/FileUtils.ts +0 -266
  89. package/src/utils/GitHubAuthUtils.ts +0 -83
  90. package/src/utils/I18nUtils.ts +0 -58
  91. package/src/utils/OpenAPIUtils.ts +0 -285
  92. package/src/utils/OsUtils.ts +0 -32
  93. package/src/utils/ProjectCompilationUtils.ts +0 -1002
  94. package/src/utils/ProjectUtils.ts +0 -151
  95. package/src/utils/RuntimeUtils.ts +0 -743
  96. package/src/utils/ServeUtils.ts +0 -175
  97. package/src/utils/ShellUtils.ts +0 -26
  98. package/src/utils/StringUtils.ts +0 -80
  99. package/tsconfig.json +0 -35
@@ -0,0 +1,5 @@
1
+ import { ICompilationMessage } from '@codenotch/codenotch.core';
2
+ import { ValidationContext } from '../ValidationUtils';
3
+ export default abstract class DbSchemaValidator {
4
+ static validate(context: ValidationContext): Promise<ICompilationMessage[]>;
5
+ }
@@ -0,0 +1,16 @@
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 codenotch_core_1 = require("@codenotch/codenotch.core");
7
+ const ValidationUtils_1 = __importDefault(require("../ValidationUtils"));
8
+ class DbSchemaValidator {
9
+ static async validate(context) {
10
+ const tables = (await ValidationUtils_1.default.loadProjectTables(context)).map(c => c.model);
11
+ const compiler = new codenotch_core_1.DbSchemaCompiler();
12
+ return await compiler.validate(context.content, { tables: tables });
13
+ }
14
+ }
15
+ exports.default = DbSchemaValidator;
16
+ //# sourceMappingURL=DbSchemaValidator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DbSchemaValidator.js","sourceRoot":"","sources":["../../../../src/commands/validation/files/DbSchemaValidator.ts"],"names":[],"mappings":";;;;;AAAA,8DAAkF;AAClF,yEAAwE;AAExE,MAA8B,iBAAiB;IAE3C,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,OAA0B;QAC5C,MAAM,MAAM,GAAG,CAAC,MAAM,yBAAe,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QACpF,MAAM,QAAQ,GAAG,IAAI,iCAAgB,EAAE,CAAC;QACxC,OAAO,MAAM,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IACxE,CAAC;CACJ;AAPD,oCAOC"}
@@ -0,0 +1,5 @@
1
+ import { ICompilationMessage } from '@codenotch/codenotch.core';
2
+ import { ValidationContext } from '../ValidationUtils';
3
+ export default abstract class DocumentValidator {
4
+ static validate(context: ValidationContext): Promise<ICompilationMessage[]>;
5
+ }
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const codenotch_core_1 = require("@codenotch/codenotch.core");
4
+ class DocumentValidator {
5
+ static async validate(context) {
6
+ const compiler = new codenotch_core_1.DocumentCompiler();
7
+ const obj = compiler.deserialize(context.content);
8
+ return await compiler.validate(obj);
9
+ }
10
+ }
11
+ exports.default = DocumentValidator;
12
+ //# sourceMappingURL=DocumentValidator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DocumentValidator.js","sourceRoot":"","sources":["../../../../src/commands/validation/files/DocumentValidator.ts"],"names":[],"mappings":";;AAAA,8DAAkF;AAGlF,MAA8B,iBAAiB;IAE3C,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,OAA0B;QAC5C,MAAM,QAAQ,GAAG,IAAI,iCAAgB,EAAE,CAAC;QACxC,MAAM,GAAG,GAAG,QAAQ,CAAC,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAClD,OAAO,MAAM,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;IACxC,CAAC;CACJ;AAPD,oCAOC"}
@@ -0,0 +1,5 @@
1
+ import { ICompilationMessage } from '@codenotch/codenotch.core';
2
+ import { ValidationContext } from '../ValidationUtils';
3
+ export default abstract class I18nValidator {
4
+ static validate(context: ValidationContext): Promise<ICompilationMessage[]>;
5
+ }
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const codenotch_core_1 = require("@codenotch/codenotch.core");
4
+ class I18nValidator {
5
+ static async validate(context) {
6
+ const compiler = new codenotch_core_1.I18nCompiler();
7
+ return await compiler.validate(context.content, {
8
+ expectedLanguages: context.fullManifest?.languages ?? []
9
+ });
10
+ }
11
+ }
12
+ exports.default = I18nValidator;
13
+ //# sourceMappingURL=I18nValidator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"I18nValidator.js","sourceRoot":"","sources":["../../../../src/commands/validation/files/I18nValidator.ts"],"names":[],"mappings":";;AAAA,8DAA8E;AAG9E,MAA8B,aAAa;IAEvC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,OAA0B;QAC5C,MAAM,QAAQ,GAAG,IAAI,6BAAY,EAAE,CAAC;QACpC,OAAO,MAAM,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,EAAE;YAC5C,iBAAiB,EAAE,OAAO,CAAC,YAAY,EAAE,SAAS,IAAI,EAAE;SAC3D,CAAC,CAAC;IACP,CAAC;CACJ;AARD,gCAQC"}
@@ -0,0 +1,5 @@
1
+ import { ICompilationMessage } from '@codenotch/codenotch.core';
2
+ import { ValidationContext } from '../ValidationUtils';
3
+ export default abstract class JsonValidator {
4
+ static validate(context: ValidationContext): Promise<ICompilationMessage[]>;
5
+ }
@@ -0,0 +1,13 @@
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 ValidationUtils_1 = __importDefault(require("../ValidationUtils"));
7
+ class JsonValidator {
8
+ static async validate(context) {
9
+ return ValidationUtils_1.default.validateJsonSyntax(context.content, context.filePath);
10
+ }
11
+ }
12
+ exports.default = JsonValidator;
13
+ //# sourceMappingURL=JsonValidator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"JsonValidator.js","sourceRoot":"","sources":["../../../../src/commands/validation/files/JsonValidator.ts"],"names":[],"mappings":";;;;;AACA,yEAAwE;AAExE,MAA8B,aAAa;IAEvC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,OAA0B;QAC5C,OAAO,yBAAe,CAAC,kBAAkB,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;IACjF,CAAC;CACJ;AALD,gCAKC"}
@@ -0,0 +1,5 @@
1
+ import { ICompilationMessage } from '@codenotch/codenotch.core';
2
+ import { ValidationContext } from '../ValidationUtils';
3
+ export default abstract class ManifestCacheValidator {
4
+ static validate(context: ValidationContext): Promise<ICompilationMessage[]>;
5
+ }
@@ -0,0 +1,121 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ const path_1 = __importStar(require("path"));
40
+ const fs_1 = require("fs");
41
+ const ValidationUtils_1 = __importDefault(require("../ValidationUtils"));
42
+ class ManifestCacheValidator {
43
+ static async validate(context) {
44
+ const messages = ValidationUtils_1.default.validateJsonSyntax(context.content, context.filePath);
45
+ const { manifestCache, projectPath } = context;
46
+ if (manifestCache === undefined || projectPath === undefined) {
47
+ // normally impossible (unreadable cache or file outside its project),
48
+ // the syntax messages and the command's earlier warnings already explain it
49
+ return messages;
50
+ }
51
+ const checkFilesExist = (entries, kind, getTarget) => {
52
+ for (const entry of entries ?? []) {
53
+ if ((0, fs_1.existsSync)((0, path_1.join)(projectPath, entry.file)) === false) {
54
+ messages.push({
55
+ severity: 'error',
56
+ message: `The ${kind} file '${entry.file}' referenced by 'manifest.cache.json' does not exist.`,
57
+ target: getTarget(entry)
58
+ });
59
+ }
60
+ }
61
+ };
62
+ checkFilesExist(manifestCache.tableDataSources, 'table', e => e.name);
63
+ checkFilesExist(manifestCache.documentDataSources, 'document', e => e.name);
64
+ checkFilesExist(manifestCache.processes, 'process', e => e.processName);
65
+ checkFilesExist(manifestCache.reactApplications, 'react application', e => e.applicationName);
66
+ // APIs reference a process by name (api.bpmn = processName), not a file
67
+ for (const api of manifestCache.apis ?? []) {
68
+ const process = (manifestCache.processes ?? []).find(p => p.processName === api.bpmn);
69
+ if (process === undefined) {
70
+ messages.push({
71
+ severity: 'error',
72
+ message: `The API '${api.method} ${api.path}' references the process '${api.bpmn}' which is not declared in 'manifest.cache.json'.`,
73
+ target: api.path
74
+ });
75
+ }
76
+ else if ((process.startEvents ?? []).some(s => s.nodeId === api.startNode) === false) {
77
+ messages.push({
78
+ severity: 'error',
79
+ message: `The API '${api.method} ${api.path}' references the start event '${api.startNode}' which does not exist in process '${api.bpmn}'.`,
80
+ target: api.path
81
+ });
82
+ }
83
+ }
84
+ // The reverse check: files on disk the cache does not reference means the cache is out of date
85
+ const referenced = new Set();
86
+ const collectReferences = (entries) => {
87
+ for (const entry of entries ?? []) {
88
+ referenced.add(entry.file.replaceAll('\\', '/').toLowerCase());
89
+ }
90
+ };
91
+ collectReferences(manifestCache.processes);
92
+ collectReferences(manifestCache.tableDataSources);
93
+ collectReferences(manifestCache.documentDataSources);
94
+ collectReferences(manifestCache.reactApplications);
95
+ for (const file of ValidationUtils_1.default.listFilesRecursive(projectPath)) {
96
+ const ext = path_1.default.extname(file).toLowerCase();
97
+ let kind = ext === '.bpmn' ? 'process' :
98
+ ext === '.table' ? 'table' :
99
+ ext === '.jschema' ? 'document' :
100
+ undefined;
101
+ // A .tsx is a react application only when it has its own app manifest next to it
102
+ if (ext === '.tsx' && (0, fs_1.existsSync)(file.replace(/\.tsx$/i, '.manifest.json'))) {
103
+ kind = 'react application';
104
+ }
105
+ if (kind === undefined) {
106
+ continue;
107
+ }
108
+ const relative = path_1.default.relative(projectPath, file).replaceAll('\\', '/');
109
+ if (referenced.has(relative.toLowerCase()) === false) {
110
+ messages.push({
111
+ severity: 'warning',
112
+ message: `The ${kind} file '${relative}' is not referenced by 'manifest.cache.json'. The cache may be out of date, run 'cn project compile' to regenerate it.`,
113
+ target: relative
114
+ });
115
+ }
116
+ }
117
+ return messages;
118
+ }
119
+ }
120
+ exports.default = ManifestCacheValidator;
121
+ //# sourceMappingURL=ManifestCacheValidator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ManifestCacheValidator.js","sourceRoot":"","sources":["../../../../src/commands/validation/files/ManifestCacheValidator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import { ICompilationMessage } from '@codenotch/codenotch.core';
2
+ import { ValidationContext } from '../ValidationUtils';
3
+ export default abstract class ManifestValidator {
4
+ static validate(context: ValidationContext): Promise<ICompilationMessage[]>;
5
+ }
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const codenotch_core_1 = require("@codenotch/codenotch.core");
4
+ class ManifestValidator {
5
+ static async validate(context) {
6
+ const compiler = new codenotch_core_1.ProjectManifestCompiler();
7
+ const obj = compiler.deserialize(context.content);
8
+ return await compiler.validate(obj, {
9
+ fullManifest: context.fullManifest
10
+ });
11
+ }
12
+ }
13
+ exports.default = ManifestValidator;
14
+ //# sourceMappingURL=ManifestValidator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ManifestValidator.js","sourceRoot":"","sources":["../../../../src/commands/validation/files/ManifestValidator.ts"],"names":[],"mappings":";;AAAA,8DAAyF;AAGzF,MAA8B,iBAAiB;IAE3C,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,OAA0B;QAC5C,MAAM,QAAQ,GAAG,IAAI,wCAAuB,EAAE,CAAC;QAC/C,MAAM,GAAG,GAAG,QAAQ,CAAC,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAClD,OAAO,MAAM,QAAQ,CAAC,QAAQ,CAAC,GAAG,EAAE;YAChC,YAAY,EAAE,OAAO,CAAC,YAAY;SACrC,CAAC,CAAC;IACP,CAAC;CACJ;AATD,oCASC"}
@@ -0,0 +1,12 @@
1
+ import { ICompilationMessage, ScriptCompiler, ScriptFile } from '@codenotch/codenotch.core';
2
+ import { ValidationContext } from '../ValidationUtils';
3
+ export default abstract class ScriptValidator {
4
+ static validate(context: ValidationContext): Promise<ICompilationMessage[]>;
5
+ /** Validates several scripts with a single TypeScript program, much faster than one program per file. */
6
+ static validateMany(filePaths: string[]): Promise<ICompilationMessage[]>;
7
+ }
8
+ export declare class CliScriptCompiler implements ScriptCompiler {
9
+ validate(files: ScriptFile[]): Promise<ICompilationMessage[]>;
10
+ serialize(files: ScriptFile[]): void;
11
+ deserialize(scripts: string): void;
12
+ }
@@ -0,0 +1,128 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.CliScriptCompiler = void 0;
40
+ const path_1 = __importStar(require("path"));
41
+ const fs_1 = require("fs");
42
+ const typescript_1 = __importDefault(require("typescript"));
43
+ const BuildUtils_1 = __importDefault(require("../../../utils/BuildUtils"));
44
+ const FileUtils_1 = __importDefault(require("../../../utils/FileUtils"));
45
+ const ValidationUtils_1 = __importDefault(require("../ValidationUtils"));
46
+ class ScriptValidator {
47
+ static async validate(context) {
48
+ const compiler = new CliScriptCompiler();
49
+ return await compiler.validate([{
50
+ content: context.content,
51
+ path: context.filePath
52
+ }]);
53
+ }
54
+ /** Validates several scripts with a single TypeScript program, much faster than one program per file. */
55
+ static async validateMany(filePaths) {
56
+ if (filePaths.length === 0) {
57
+ return [];
58
+ }
59
+ const files = [];
60
+ for (const filePath of filePaths) {
61
+ files.push({ path: filePath, content: await FileUtils_1.default.readFileAsync(filePath) });
62
+ }
63
+ const compiler = new CliScriptCompiler();
64
+ return await compiler.validate(files);
65
+ }
66
+ }
67
+ exports.default = ScriptValidator;
68
+ class CliScriptCompiler {
69
+ async validate(files) {
70
+ const messages = [];
71
+ const requestedFiles = files.map(f => (0, path_1.resolve)(f.path));
72
+ const rootFiles = [...requestedFiles];
73
+ const searchDir = path_1.default.dirname(requestedFiles[0]);
74
+ // Locate the node project root to warn when dependencies are not installed,
75
+ // otherwise every import would surface as a TS2307 without explanation.
76
+ const pkgPath = typescript_1.default.findConfigFile(searchDir, typescript_1.default.sys.fileExists, 'package.json');
77
+ if (pkgPath && (0, fs_1.existsSync)((0, path_1.join)(path_1.default.dirname(pkgPath), 'node_modules')) === false) {
78
+ messages.push({
79
+ severity: 'warning',
80
+ message: `No 'node_modules' found in '${path_1.default.dirname(pkgPath)}', imported modules will not resolve. Run 'npm install' first for a complete validation.`
81
+ });
82
+ }
83
+ // Use the project tsconfig.json when there is one, else the same defaults as the build
84
+ const configPath = typescript_1.default.findConfigFile(searchDir, typescript_1.default.sys.fileExists, 'tsconfig.json');
85
+ let options;
86
+ let configDiagnostics = [];
87
+ if (configPath) {
88
+ const raw = typescript_1.default.readConfigFile(configPath, typescript_1.default.sys.readFile);
89
+ const parsed = typescript_1.default.parseJsonConfigFileContent(raw.config ?? {}, typescript_1.default.sys, path_1.default.dirname(configPath));
90
+ options = parsed.options;
91
+ configDiagnostics = [...(raw.error ? [raw.error] : []), ...parsed.errors];
92
+ // Ambient declarations included by the tsconfig must be part of the program
93
+ rootFiles.push(...parsed.fileNames.filter(f => f.endsWith('.d.ts')).map(f => (0, path_1.resolve)(f)));
94
+ }
95
+ else {
96
+ const basePath = pkgPath ? path_1.default.dirname(pkgPath) : searchDir;
97
+ options = typescript_1.default.convertCompilerOptionsFromJson(BuildUtils_1.default.defaultCompilerOptions(), basePath).options;
98
+ }
99
+ options.noEmit = true;
100
+ // Codenotch auto-generated ambient typings (i18n.d.ts, process.d.ts)
101
+ const workspacePath = BuildUtils_1.default.findWorkspaceFromFile(requestedFiles[0]);
102
+ if (workspacePath) {
103
+ const typingsDir = (0, path_1.join)(workspacePath, 'typings');
104
+ if ((0, fs_1.existsSync)(typingsDir)) {
105
+ rootFiles.push(...(0, fs_1.readdirSync)(typingsDir).filter(f => f.endsWith('.d.ts')).map(f => (0, path_1.join)(typingsDir, f)));
106
+ }
107
+ }
108
+ const program = typescript_1.default.createProgram([...new Set(rootFiles)], options);
109
+ const diagnostics = [...configDiagnostics, ...typescript_1.default.getPreEmitDiagnostics(program)];
110
+ const isRequestedFile = (fileName) => requestedFiles.some(f => f.toLowerCase() === (0, path_1.resolve)(fileName).toLowerCase());
111
+ for (const diagnostic of diagnostics) {
112
+ // Keep global/options diagnostics, drop those of imported files
113
+ if (diagnostic.file && isRequestedFile(diagnostic.file.fileName) === false) {
114
+ continue;
115
+ }
116
+ messages.push(ValidationUtils_1.default.tsDiagnosticToMessage(diagnostic));
117
+ }
118
+ return messages;
119
+ }
120
+ serialize(files) {
121
+ throw new Error('No serialization possible with script files.');
122
+ }
123
+ deserialize(scripts) {
124
+ throw new Error('No deserialization possible with script files.');
125
+ }
126
+ }
127
+ exports.CliScriptCompiler = CliScriptCompiler;
128
+ //# sourceMappingURL=ScriptValidator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ScriptValidator.js","sourceRoot":"","sources":["../../../../src/commands/validation/files/ScriptValidator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import { ICompilationMessage } from '@codenotch/codenotch.core';
2
+ import { ValidationContext } from '../ValidationUtils';
3
+ export default abstract class TableValidator {
4
+ static validate(context: ValidationContext): Promise<ICompilationMessage[]>;
5
+ }
@@ -0,0 +1,19 @@
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 codenotch_core_1 = require("@codenotch/codenotch.core");
7
+ const ValidationUtils_1 = __importDefault(require("../ValidationUtils"));
8
+ class TableValidator {
9
+ static async validate(context) {
10
+ const tables = (await ValidationUtils_1.default.loadProjectTables(context)).map(c => c.model);
11
+ const compiler = new codenotch_core_1.TableCompiler();
12
+ const obj = compiler.deserialize(context.content);
13
+ return await compiler.validate(obj, (tableName) => {
14
+ return tables.find(c => c.Name === tableName);
15
+ });
16
+ }
17
+ }
18
+ exports.default = TableValidator;
19
+ //# sourceMappingURL=TableValidator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TableValidator.js","sourceRoot":"","sources":["../../../../src/commands/validation/files/TableValidator.ts"],"names":[],"mappings":";;;;;AAAA,8DAA+E;AAC/E,yEAAwE;AAExE,MAA8B,cAAc;IAExC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,OAA0B;QAC5C,MAAM,MAAM,GAAG,CAAC,MAAM,yBAAe,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QACpF,MAAM,QAAQ,GAAG,IAAI,8BAAa,EAAE,CAAC;QACrC,MAAM,GAAG,GAAG,QAAQ,CAAC,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAClD,OAAO,MAAM,QAAQ,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,SAAS,EAAE,EAAE;YAC9C,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC;QAClD,CAAC,CAAC,CAAC;IACP,CAAC;CACJ;AAVD,iCAUC"}
@@ -0,0 +1,2 @@
1
+ import { Command } from 'commander';
2
+ export declare function registerValidate(program: Command): void;