@codenotch/codenotch.cli 1.0.33 → 1.0.34
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/dist/commands/index.js +2 -0
- package/dist/commands/index.js.map +1 -1
- package/dist/commands/validation/ValidationUtils.d.ts +28 -0
- package/dist/commands/validation/ValidationUtils.js +182 -0
- package/dist/commands/validation/ValidationUtils.js.map +1 -0
- package/dist/commands/validation/files/AppManifestValidator.d.ts +6 -0
- package/dist/commands/validation/files/AppManifestValidator.js +93 -0
- package/dist/commands/validation/files/AppManifestValidator.js.map +1 -0
- package/dist/commands/validation/files/BpmnValidator.d.ts +5 -0
- package/dist/commands/validation/files/BpmnValidator.js +32 -0
- package/dist/commands/validation/files/BpmnValidator.js.map +1 -0
- package/dist/commands/validation/files/DbSchemaValidator.d.ts +5 -0
- package/dist/commands/validation/files/DbSchemaValidator.js +16 -0
- package/dist/commands/validation/files/DbSchemaValidator.js.map +1 -0
- package/dist/commands/validation/files/DocumentValidator.d.ts +5 -0
- package/dist/commands/validation/files/DocumentValidator.js +12 -0
- package/dist/commands/validation/files/DocumentValidator.js.map +1 -0
- package/dist/commands/validation/files/I18nValidator.d.ts +5 -0
- package/dist/commands/validation/files/I18nValidator.js +13 -0
- package/dist/commands/validation/files/I18nValidator.js.map +1 -0
- package/dist/commands/validation/files/JsonValidator.d.ts +5 -0
- package/dist/commands/validation/files/JsonValidator.js +13 -0
- package/dist/commands/validation/files/JsonValidator.js.map +1 -0
- package/dist/commands/validation/files/ManifestCacheValidator.d.ts +5 -0
- package/dist/commands/validation/files/ManifestCacheValidator.js +121 -0
- package/dist/commands/validation/files/ManifestCacheValidator.js.map +1 -0
- package/dist/commands/validation/files/ManifestValidator.d.ts +5 -0
- package/dist/commands/validation/files/ManifestValidator.js +14 -0
- package/dist/commands/validation/files/ManifestValidator.js.map +1 -0
- package/dist/commands/validation/files/ScriptValidator.d.ts +12 -0
- package/dist/commands/validation/files/ScriptValidator.js +128 -0
- package/dist/commands/validation/files/ScriptValidator.js.map +1 -0
- package/dist/commands/validation/files/TableValidator.d.ts +5 -0
- package/dist/commands/validation/files/TableValidator.js +19 -0
- package/dist/commands/validation/files/TableValidator.js.map +1 -0
- package/dist/commands/validation/validate.d.ts +2 -0
- package/dist/commands/validation/validate.js +245 -0
- package/dist/commands/validation/validate.js.map +1 -0
- package/dist/utils/BuildUtils.d.ts +22 -4
- package/dist/utils/BuildUtils.js +45 -16
- package/dist/utils/BuildUtils.js.map +1 -1
- package/dist/utils/FileUtils.d.ts +13 -0
- package/dist/utils/FileUtils.js +30 -0
- package/dist/utils/FileUtils.js.map +1 -1
- package/dist/utils/I18nUtils.js +0 -2
- package/dist/utils/I18nUtils.js.map +1 -1
- package/package.json +14 -6
- package/.github/copilot-instructions.md +0 -3
- package/bin/cli.js +0 -3
- package/docs/ARCHITECTURE.md +0 -179
- package/docs/TODO.md +0 -18
- package/src/bin/cli.ts +0 -4
- package/src/commands/index.ts +0 -13
- package/src/commands/project/compile.ts +0 -20
- package/src/commands/project/deploy.ts +0 -11
- package/src/commands/project/index.ts +0 -28
- package/src/commands/project/inspect.ts +0 -12
- package/src/commands/project/new.ts +0 -11
- package/src/commands/project/open.ts +0 -21
- package/src/commands/project/package.ts +0 -20
- package/src/commands/project/refresh.ts +0 -13
- package/src/commands/project/remove.ts +0 -12
- package/src/commands/project/shared.ts +0 -9
- package/src/commands/project/start.ts +0 -24
- package/src/commands/project/test.ts +0 -15
- package/src/commands/react/build.ts +0 -12
- package/src/commands/react/index.ts +0 -12
- package/src/commands/react/serve.ts +0 -13
- package/src/commands/runtime/clear.ts +0 -11
- package/src/commands/runtime/index.ts +0 -24
- package/src/commands/runtime/info.ts +0 -47
- package/src/commands/runtime/latest.ts +0 -18
- package/src/commands/runtime/portal.ts +0 -20
- package/src/commands/runtime/start.ts +0 -16
- package/src/commands/runtime/stop.ts +0 -13
- package/src/commands/runtime/update.ts +0 -12
- package/src/commands/system/index.ts +0 -9
- package/src/commands/system/info.ts +0 -23
- package/src/commands/system/read.ts +0 -25
- package/src/index.ts +0 -22
- package/src/models/Codenotch.ts +0 -361
- package/src/models/DbModels.ts +0 -428
- package/src/models/OpenApiModels.ts +0 -145
- package/src/utils/BuildUtils.ts +0 -739
- package/src/utils/ConsoleUtils.ts +0 -22
- package/src/utils/FileUtils.ts +0 -266
- package/src/utils/GitHubAuthUtils.ts +0 -83
- package/src/utils/I18nUtils.ts +0 -58
- package/src/utils/OpenAPIUtils.ts +0 -285
- package/src/utils/OsUtils.ts +0 -32
- package/src/utils/ProjectCompilationUtils.ts +0 -1002
- package/src/utils/ProjectUtils.ts +0 -151
- package/src/utils/RuntimeUtils.ts +0 -743
- package/src/utils/ServeUtils.ts +0 -175
- package/src/utils/ShellUtils.ts +0 -26
- package/src/utils/StringUtils.ts +0 -80
- package/tsconfig.json +0 -35
package/dist/commands/index.js
CHANGED
|
@@ -5,11 +5,13 @@ const system_1 = require("./system");
|
|
|
5
5
|
const react_1 = require("./react");
|
|
6
6
|
const runtime_1 = require("./runtime");
|
|
7
7
|
const project_1 = require("./project");
|
|
8
|
+
const validate_1 = require("./validation/validate");
|
|
8
9
|
// Registration order defines the order in `--help`
|
|
9
10
|
function registerAllCommands(program) {
|
|
10
11
|
(0, system_1.registerSystemCommands)(program);
|
|
11
12
|
(0, react_1.registerReactCommands)(program);
|
|
12
13
|
(0, runtime_1.registerRuntimeCommands)(program);
|
|
13
14
|
(0, project_1.registerProjectCommands)(program);
|
|
15
|
+
(0, validate_1.registerValidate)(program);
|
|
14
16
|
}
|
|
15
17
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/commands/index.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/commands/index.ts"],"names":[],"mappings":";;AAQA,kDAMC;AAbD,qCAAkD;AAClD,mCAAgD;AAChD,uCAAoD;AACpD,uCAAoD;AACpD,oDAAyD;AAEzD,mDAAmD;AACnD,SAAgB,mBAAmB,CAAC,OAAgB;IAChD,IAAA,+BAAsB,EAAC,OAAO,CAAC,CAAC;IAChC,IAAA,6BAAqB,EAAC,OAAO,CAAC,CAAC;IAC/B,IAAA,iCAAuB,EAAC,OAAO,CAAC,CAAC;IACjC,IAAA,iCAAuB,EAAC,OAAO,CAAC,CAAC;IACjC,IAAA,2BAAgB,EAAC,OAAO,CAAC,CAAC;AAC9B,CAAC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import ts from 'typescript';
|
|
2
|
+
import { AbstractRecordContainer, ICompilationMessage, ProjectManifest, TableDefinition } from '@codenotch/codenotch.core';
|
|
3
|
+
import { IWorkspaceCache } from '../../models/Codenotch';
|
|
4
|
+
export type KnownFiles = 'bpmn' | 'manifest' | 'table' | 'document' | 'dbschema' | 'i18n' | 'script' | 'json' | 'manifest-cache' | 'app-manifest';
|
|
5
|
+
/** Everything a file validator may need: the file itself and the surrounding Codenotch project when one was found. */
|
|
6
|
+
export interface ValidationContext {
|
|
7
|
+
filePath: string;
|
|
8
|
+
content: string;
|
|
9
|
+
projectPath?: string;
|
|
10
|
+
fullManifest?: ProjectManifest;
|
|
11
|
+
manifestCache?: IWorkspaceCache;
|
|
12
|
+
}
|
|
13
|
+
export default abstract class ValidationUtils {
|
|
14
|
+
static determineFileType(filePath: string): KnownFiles | undefined;
|
|
15
|
+
static formatCompilationMessage(msg: ICompilationMessage): string;
|
|
16
|
+
static tsDiagnosticToMessage(diagnostic: ts.Diagnostic): ICompilationMessage;
|
|
17
|
+
static validateJsonSyntax(content: string, filePath: string): ICompilationMessage[];
|
|
18
|
+
/** Lists all files under a folder, skipping dot-folders and generated/vendored directories. */
|
|
19
|
+
static listFilesRecursive(folderPath: string): string[];
|
|
20
|
+
static loadProjectTables(context: ValidationContext): Promise<{
|
|
21
|
+
service: string;
|
|
22
|
+
model: TableDefinition;
|
|
23
|
+
}[]>;
|
|
24
|
+
static loadProjectDocuments(context: ValidationContext): Promise<{
|
|
25
|
+
service: string;
|
|
26
|
+
model: AbstractRecordContainer;
|
|
27
|
+
}[]>;
|
|
28
|
+
}
|
|
@@ -0,0 +1,182 @@
|
|
|
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 path_1 = __importDefault(require("path"));
|
|
7
|
+
const fs_1 = require("fs");
|
|
8
|
+
const typescript_1 = __importDefault(require("typescript"));
|
|
9
|
+
const FileUtils_1 = __importDefault(require("../../utils/FileUtils"));
|
|
10
|
+
const codenotch_core_1 = require("@codenotch/codenotch.core");
|
|
11
|
+
class ValidationUtils {
|
|
12
|
+
static determineFileType(filePath) {
|
|
13
|
+
const name = FileUtils_1.default.getNameFromPath(filePath);
|
|
14
|
+
const ext = FileUtils_1.default.getExtensionFromPath(filePath).toLowerCase();
|
|
15
|
+
if (ext === 'bpmn') {
|
|
16
|
+
return 'bpmn';
|
|
17
|
+
}
|
|
18
|
+
else if (ext === 'jschema') {
|
|
19
|
+
return 'document';
|
|
20
|
+
}
|
|
21
|
+
else if (ext === 'table') {
|
|
22
|
+
return 'table';
|
|
23
|
+
}
|
|
24
|
+
else if (ext === 'csv' && name.endsWith('.i18n.csv')) {
|
|
25
|
+
return 'i18n';
|
|
26
|
+
}
|
|
27
|
+
else if (name === 'db-schema.xml') {
|
|
28
|
+
return 'dbschema';
|
|
29
|
+
}
|
|
30
|
+
else if (name === 'manifest.json') {
|
|
31
|
+
return 'manifest';
|
|
32
|
+
}
|
|
33
|
+
else if (name === 'manifest.cache.json') {
|
|
34
|
+
return 'manifest-cache';
|
|
35
|
+
}
|
|
36
|
+
else if (name.endsWith('.manifest.json')) {
|
|
37
|
+
return 'app-manifest';
|
|
38
|
+
}
|
|
39
|
+
else if (['ts', 'tsx', 'js', 'jsx', 'cjs', 'mjs', 'cts', 'mts'].includes(ext)) {
|
|
40
|
+
return 'script';
|
|
41
|
+
}
|
|
42
|
+
else if (ext === 'json') {
|
|
43
|
+
return 'json';
|
|
44
|
+
}
|
|
45
|
+
return undefined;
|
|
46
|
+
}
|
|
47
|
+
static formatCompilationMessage(msg) {
|
|
48
|
+
let result = '';
|
|
49
|
+
if (msg.filePath) {
|
|
50
|
+
result += msg.filePath;
|
|
51
|
+
}
|
|
52
|
+
if (msg.line !== undefined) {
|
|
53
|
+
result += `(${msg.line}${msg.column !== undefined ? `,${msg.column}` : ''})`;
|
|
54
|
+
}
|
|
55
|
+
if (result !== '') {
|
|
56
|
+
result += ': ';
|
|
57
|
+
}
|
|
58
|
+
result += msg.severity;
|
|
59
|
+
if (msg.code) {
|
|
60
|
+
result += ` ${msg.code}`;
|
|
61
|
+
}
|
|
62
|
+
result += `: ${msg.message}`;
|
|
63
|
+
if (msg.target) {
|
|
64
|
+
result += ` (at '${msg.target}')`;
|
|
65
|
+
}
|
|
66
|
+
return result.trim();
|
|
67
|
+
}
|
|
68
|
+
static tsDiagnosticToMessage(diagnostic) {
|
|
69
|
+
const message = {
|
|
70
|
+
severity: diagnostic.category === typescript_1.default.DiagnosticCategory.Error ? 'error'
|
|
71
|
+
: diagnostic.category === typescript_1.default.DiagnosticCategory.Warning ? 'warning'
|
|
72
|
+
: 'info',
|
|
73
|
+
message: typescript_1.default.flattenDiagnosticMessageText(diagnostic.messageText, '\n'),
|
|
74
|
+
code: `TS${diagnostic.code}`
|
|
75
|
+
};
|
|
76
|
+
if (diagnostic.file && diagnostic.start !== undefined) {
|
|
77
|
+
const pos = diagnostic.file.getLineAndCharacterOfPosition(diagnostic.start);
|
|
78
|
+
message.filePath = diagnostic.file.fileName;
|
|
79
|
+
message.line = pos.line + 1;
|
|
80
|
+
message.column = pos.character + 1;
|
|
81
|
+
}
|
|
82
|
+
return message;
|
|
83
|
+
}
|
|
84
|
+
static validateJsonSyntax(content, filePath) {
|
|
85
|
+
const messages = [];
|
|
86
|
+
// The TypeScript JSON parser reports every error with a precise position
|
|
87
|
+
const sourceFile = typescript_1.default.parseJsonText(FileUtils_1.default.getNameFromPath(filePath), content);
|
|
88
|
+
const parseDiagnostics = sourceFile.parseDiagnostics ?? []; // internal but stable API
|
|
89
|
+
for (const diagnostic of parseDiagnostics) {
|
|
90
|
+
const message = this.tsDiagnosticToMessage(diagnostic);
|
|
91
|
+
message.filePath = filePath;
|
|
92
|
+
messages.push(message);
|
|
93
|
+
}
|
|
94
|
+
// JSON.parse rejects what the TypeScript parser tolerates (comments, trailing commas...)
|
|
95
|
+
// A leading UTF-8 BOM is legitimate though, strip it before parsing.
|
|
96
|
+
if (messages.length === 0) {
|
|
97
|
+
try {
|
|
98
|
+
JSON.parse(content.charCodeAt(0) === 0xFEFF ? content.slice(1) : content);
|
|
99
|
+
}
|
|
100
|
+
catch (e) {
|
|
101
|
+
const message = {
|
|
102
|
+
severity: 'error',
|
|
103
|
+
message: e instanceof Error ? e.message : String(e),
|
|
104
|
+
code: 'json/invalid',
|
|
105
|
+
filePath: filePath
|
|
106
|
+
};
|
|
107
|
+
const position = /at position (\d+)(?: \(line (\d+) column (\d+)\))?/.exec(message.message);
|
|
108
|
+
if (position && position[2] !== undefined) {
|
|
109
|
+
message.line = Number(position[2]);
|
|
110
|
+
message.column = Number(position[3]);
|
|
111
|
+
}
|
|
112
|
+
else if (position) {
|
|
113
|
+
const before = content.slice(0, Number(position[1]));
|
|
114
|
+
message.line = before.split('\n').length;
|
|
115
|
+
message.column = Number(position[1]) - before.lastIndexOf('\n');
|
|
116
|
+
}
|
|
117
|
+
messages.push(message);
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
return messages;
|
|
121
|
+
}
|
|
122
|
+
/** Lists all files under a folder, skipping dot-folders and generated/vendored directories. */
|
|
123
|
+
static listFilesRecursive(folderPath) {
|
|
124
|
+
const ignoredFolders = ['node_modules', 'dist', 'build', 'typings'];
|
|
125
|
+
const files = [];
|
|
126
|
+
const visit = (dir) => {
|
|
127
|
+
for (const entry of (0, fs_1.readdirSync)(dir, { withFileTypes: true })) {
|
|
128
|
+
if (entry.isDirectory()) {
|
|
129
|
+
if (entry.name.startsWith('.') || ignoredFolders.includes(entry.name.toLowerCase())) {
|
|
130
|
+
continue;
|
|
131
|
+
}
|
|
132
|
+
visit(path_1.default.join(dir, entry.name));
|
|
133
|
+
}
|
|
134
|
+
else if (entry.isFile()) {
|
|
135
|
+
files.push(path_1.default.join(dir, entry.name));
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
};
|
|
139
|
+
visit(folderPath);
|
|
140
|
+
return files;
|
|
141
|
+
}
|
|
142
|
+
static async loadProjectTables(context) {
|
|
143
|
+
const { fullManifest, projectPath } = context;
|
|
144
|
+
if (fullManifest === undefined || projectPath === undefined) {
|
|
145
|
+
return [];
|
|
146
|
+
}
|
|
147
|
+
const tables = [];
|
|
148
|
+
for (const manifestTable of fullManifest.tableDataSources) {
|
|
149
|
+
try {
|
|
150
|
+
const tablePath = path_1.default.join(projectPath, manifestTable.file);
|
|
151
|
+
const tableJson = await FileUtils_1.default.readFileAsync(tablePath);
|
|
152
|
+
const table = (new codenotch_core_1.TableCompiler()).deserialize(tableJson);
|
|
153
|
+
tables.push({ service: fullManifest.serviceName, model: table });
|
|
154
|
+
}
|
|
155
|
+
catch {
|
|
156
|
+
// Fail silently
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
return tables;
|
|
160
|
+
}
|
|
161
|
+
static async loadProjectDocuments(context) {
|
|
162
|
+
const { fullManifest, projectPath } = context;
|
|
163
|
+
if (fullManifest === undefined || projectPath === undefined) {
|
|
164
|
+
return [];
|
|
165
|
+
}
|
|
166
|
+
const documents = [];
|
|
167
|
+
for (const manifestDoc of fullManifest.documentDataSources) {
|
|
168
|
+
try {
|
|
169
|
+
const docPath = path_1.default.join(projectPath, manifestDoc.file);
|
|
170
|
+
const docJson = await FileUtils_1.default.readFileAsync(docPath);
|
|
171
|
+
const doc = (new codenotch_core_1.DocumentCompiler()).deserialize(docJson);
|
|
172
|
+
documents.push({ service: fullManifest.serviceName, model: doc });
|
|
173
|
+
}
|
|
174
|
+
catch {
|
|
175
|
+
// Fail silently
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
return documents;
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
exports.default = ValidationUtils;
|
|
182
|
+
//# sourceMappingURL=ValidationUtils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ValidationUtils.js","sourceRoot":"","sources":["../../../src/commands/validation/ValidationUtils.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { ICompilationMessage } from '@codenotch/codenotch.core';
|
|
2
|
+
import { ValidationContext } from '../ValidationUtils';
|
|
3
|
+
/** Validates a react application manifest ('<App>.manifest.json', not the project 'manifest.json'). */
|
|
4
|
+
export default abstract class AppManifestValidator {
|
|
5
|
+
static validate(context: ValidationContext): Promise<ICompilationMessage[]>;
|
|
6
|
+
}
|
|
@@ -0,0 +1,93 @@
|
|
|
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
|
+
const APP_SCOPES = ['Public', 'Internal', 'External'];
|
|
43
|
+
/** Validates a react application manifest ('<App>.manifest.json', not the project 'manifest.json'). */
|
|
44
|
+
class AppManifestValidator {
|
|
45
|
+
static async validate(context) {
|
|
46
|
+
const messages = ValidationUtils_1.default.validateJsonSyntax(context.content, context.filePath);
|
|
47
|
+
if (messages.some(m => m.severity === 'error')) {
|
|
48
|
+
return messages;
|
|
49
|
+
}
|
|
50
|
+
const manifest = JSON.parse(context.content);
|
|
51
|
+
// The application file must live next to its manifest (App.manifest.json -> App.tsx)
|
|
52
|
+
const folder = path_1.default.dirname(context.filePath);
|
|
53
|
+
const baseName = path_1.default.basename(context.filePath).replace(/\.manifest\.json$/i, '');
|
|
54
|
+
const appFile = ['.tsx', '.jsx', '.auml'].map(ext => (0, path_1.join)(folder, baseName + ext)).find(f => (0, fs_1.existsSync)(f));
|
|
55
|
+
if (appFile === undefined) {
|
|
56
|
+
messages.push({
|
|
57
|
+
severity: 'error',
|
|
58
|
+
message: `No application file ('${baseName}.tsx') found next to this app manifest.`,
|
|
59
|
+
target: baseName
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
if (`${manifest.auml?.name ?? ''}`.trim() === '') {
|
|
63
|
+
messages.push({
|
|
64
|
+
severity: 'error',
|
|
65
|
+
message: `The app manifest must define 'auml.name', it is used as the application name by the build.`,
|
|
66
|
+
target: 'auml.name'
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
if (manifest.auml?.scope !== undefined && APP_SCOPES.includes(manifest.auml.scope) === false) {
|
|
70
|
+
messages.push({
|
|
71
|
+
severity: 'error',
|
|
72
|
+
message: `Invalid scope '${manifest.auml.scope}', expected one of: ${APP_SCOPES.join(', ')}.`,
|
|
73
|
+
target: 'auml.scope'
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
// Roles must be declared in the project manifest
|
|
77
|
+
if (context.fullManifest) {
|
|
78
|
+
const knownRoles = (context.fullManifest.roles ?? []).map(r => r.name);
|
|
79
|
+
for (const role of manifest.auml?.roles ?? []) {
|
|
80
|
+
if (knownRoles.includes(role) === false) {
|
|
81
|
+
messages.push({
|
|
82
|
+
severity: 'error',
|
|
83
|
+
message: `The role '${role}' is not declared in the project 'manifest.json' (known roles: ${knownRoles.length > 0 ? knownRoles.join(', ') : 'none'}).`,
|
|
84
|
+
target: 'auml.roles'
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
return messages;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
exports.default = AppManifestValidator;
|
|
93
|
+
//# sourceMappingURL=AppManifestValidator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AppManifestValidator.js","sourceRoot":"","sources":["../../../../src/commands/validation/files/AppManifestValidator.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,6CAAkC;AAClC,2BAAgC;AAGhC,yEAAwE;AAExE,MAAM,UAAU,GAAG,CAAC,QAAQ,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;AAEtD,uGAAuG;AACvG,MAA8B,oBAAoB;IAE9C,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,OAA0B;QAC5C,MAAM,QAAQ,GAAG,yBAAe,CAAC,kBAAkB,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;QACvF,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,OAAO,CAAC,EAAE,CAAC;YAC7C,OAAO,QAAQ,CAAC;QACpB,CAAC;QAED,MAAM,QAAQ,GAAwB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAElE,qFAAqF;QACrF,MAAM,MAAM,GAAG,cAAI,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAC9C,MAAM,QAAQ,GAAG,cAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,oBAAoB,EAAE,EAAE,CAAC,CAAC;QACnF,MAAM,OAAO,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,IAAA,WAAI,EAAC,MAAM,EAAE,QAAQ,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,IAAA,eAAU,EAAC,CAAC,CAAC,CAAC,CAAC;QAC5G,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;YACxB,QAAQ,CAAC,IAAI,CAAC;gBACV,QAAQ,EAAE,OAAO;gBACjB,OAAO,EAAE,yBAAyB,QAAQ,yCAAyC;gBACnF,MAAM,EAAE,QAAQ;aACnB,CAAC,CAAC;QACP,CAAC;QAED,IAAI,GAAG,QAAQ,CAAC,IAAI,EAAE,IAAI,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;YAC/C,QAAQ,CAAC,IAAI,CAAC;gBACV,QAAQ,EAAE,OAAO;gBACjB,OAAO,EAAE,4FAA4F;gBACrG,MAAM,EAAE,WAAW;aACtB,CAAC,CAAC;QACP,CAAC;QAED,IAAI,QAAQ,CAAC,IAAI,EAAE,KAAK,KAAK,SAAS,IAAI,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,KAAK,EAAE,CAAC;YAC3F,QAAQ,CAAC,IAAI,CAAC;gBACV,QAAQ,EAAE,OAAO;gBACjB,OAAO,EAAE,kBAAkB,QAAQ,CAAC,IAAI,CAAC,KAAK,uBAAuB,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG;gBAC7F,MAAM,EAAE,YAAY;aACvB,CAAC,CAAC;QACP,CAAC;QAED,iDAAiD;QACjD,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;YACvB,MAAM,UAAU,GAAG,CAAC,OAAO,CAAC,YAAY,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YACvE,KAAK,MAAM,IAAI,IAAI,QAAQ,CAAC,IAAI,EAAE,KAAK,IAAI,EAAE,EAAE,CAAC;gBAC5C,IAAI,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,KAAK,EAAE,CAAC;oBACtC,QAAQ,CAAC,IAAI,CAAC;wBACV,QAAQ,EAAE,OAAO;wBACjB,OAAO,EAAE,aAAa,IAAI,kEAAkE,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,IAAI;wBACtJ,MAAM,EAAE,YAAY;qBACvB,CAAC,CAAC;gBACP,CAAC;YACL,CAAC;QACL,CAAC;QAED,OAAO,QAAQ,CAAC;IACpB,CAAC;CACJ;AAtDD,uCAsDC"}
|
|
@@ -0,0 +1,32 @@
|
|
|
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_workflow_1 = require("@codenotch/codenotch.core.workflow");
|
|
7
|
+
const TaskUtils_1 = __importDefault(require("@codenotch/codenotch.core.workflow/dist/utils/TaskUtils"));
|
|
8
|
+
const ValidationUtils_1 = __importDefault(require("../ValidationUtils"));
|
|
9
|
+
class BpmnValidator {
|
|
10
|
+
static async validate(context) {
|
|
11
|
+
const { fullManifest, projectPath } = context;
|
|
12
|
+
let provider;
|
|
13
|
+
if (fullManifest && projectPath) {
|
|
14
|
+
const tables = await ValidationUtils_1.default.loadProjectTables(context);
|
|
15
|
+
const documents = await ValidationUtils_1.default.loadProjectDocuments(context);
|
|
16
|
+
provider = new codenotch_core_workflow_1.StaticWorkflowDataProvider([fullManifest], fullManifest.serviceName, tables, documents, []);
|
|
17
|
+
}
|
|
18
|
+
else {
|
|
19
|
+
provider = new codenotch_core_workflow_1.StaticWorkflowDataProvider([], '');
|
|
20
|
+
}
|
|
21
|
+
// to avoid console warning
|
|
22
|
+
TaskUtils_1.default.getUserConfig = () => undefined;
|
|
23
|
+
const compiler = new codenotch_core_workflow_1.WorkflowBpmnCompiler({
|
|
24
|
+
currentProjectName: fullManifest ? fullManifest.projectName : '',
|
|
25
|
+
provider: provider,
|
|
26
|
+
projectManifests: fullManifest ? [fullManifest] : []
|
|
27
|
+
});
|
|
28
|
+
return await compiler.validate(context.content);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
exports.default = BpmnValidator;
|
|
32
|
+
//# sourceMappingURL=BpmnValidator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BpmnValidator.js","sourceRoot":"","sources":["../../../../src/commands/validation/files/BpmnValidator.ts"],"names":[],"mappings":";;;;;AACA,gFAAsG;AACtG,wGAAgF;AAChF,yEAAwE;AAExE,MAA8B,aAAa;IAEvC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,OAA0B;QAC5C,MAAM,EAAE,YAAY,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC;QAE9C,IAAI,QAAoC,CAAC;QACzC,IAAI,YAAY,IAAI,WAAW,EAAE,CAAC;YAC9B,MAAM,MAAM,GAAG,MAAM,yBAAe,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;YAChE,MAAM,SAAS,GAAG,MAAM,yBAAe,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC;YACtE,QAAQ,GAAG,IAAI,oDAA0B,CAAC,CAAC,YAAY,CAAC,EAAE,YAAY,CAAC,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,CAAC,CAAC;QAC/G,CAAC;aACI,CAAC;YACF,QAAQ,GAAG,IAAI,oDAA0B,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;QACtD,CAAC;QAED,2BAA2B;QAC3B,mBAAS,CAAC,aAAa,GAAG,GAAG,EAAE,CAAC,SAAS,CAAC;QAE1C,MAAM,QAAQ,GAAG,IAAI,8CAAoB,CAAC;YACtC,kBAAkB,EAAE,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE;YAChE,QAAQ,EAAE,QAAQ;YAClB,gBAAgB,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,EAAE;SACvD,CAAC,CAAC;QAEH,OAAO,MAAM,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IACpD,CAAC;CACJ;AA1BD,gCA0BC"}
|
|
@@ -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,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,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,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,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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"}
|