@primmel/primmel 1.2.0 → 1.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/src/duplicate-id.d.ts +12 -0
- package/dist/src/duplicate-id.d.ts.map +1 -0
- package/dist/src/duplicate-id.js +38 -0
- package/dist/src/duplicate-id.js.map +1 -0
- package/dist/src/ser-des/config/approval.d.ts.map +1 -1
- package/dist/src/ser-des/config/approval.js +25 -33
- package/dist/src/ser-des/config/approval.js.map +1 -1
- package/dist/src/ser-des/config/calculation.js +11 -11
- package/dist/src/ser-des/config/calculation.js.map +1 -1
- package/dist/src/ser-des/config/data.d.ts.map +1 -1
- package/dist/src/ser-des/config/data.js +63 -118
- package/dist/src/ser-des/config/data.js.map +1 -1
- package/dist/src/ser-des/config/event.js +2 -2
- package/dist/src/ser-des/config/event.js.map +1 -1
- package/dist/src/ser-des/config/field-parser.js +12 -12
- package/dist/src/ser-des/config/field-parser.js.map +1 -1
- package/dist/src/ser-des/config/figure.js +2 -2
- package/dist/src/ser-des/config/figure.js.map +1 -1
- package/dist/src/ser-des/config/flow.d.ts.map +1 -1
- package/dist/src/ser-des/config/flow.js +21 -11
- package/dist/src/ser-des/config/flow.js.map +1 -1
- package/dist/src/ser-des/config/form.js +14 -14
- package/dist/src/ser-des/config/form.js.map +1 -1
- package/dist/src/ser-des/config/gateway.d.ts.map +1 -1
- package/dist/src/ser-des/config/gateway.js +9 -17
- package/dist/src/ser-des/config/gateway.js.map +1 -1
- package/dist/src/ser-des/config/index.d.ts +21 -1
- package/dist/src/ser-des/config/index.d.ts.map +1 -1
- package/dist/src/ser-des/config/index.js +241 -221
- package/dist/src/ser-des/config/index.js.map +1 -1
- package/dist/src/ser-des/config/link.js +2 -2
- package/dist/src/ser-des/config/link.js.map +1 -1
- package/dist/src/ser-des/config/mapProfile.d.ts.map +1 -1
- package/dist/src/ser-des/config/mapProfile.js +20 -29
- package/dist/src/ser-des/config/mapProfile.js.map +1 -1
- package/dist/src/ser-des/config/metadata.js +6 -6
- package/dist/src/ser-des/config/metadata.js.map +1 -1
- package/dist/src/ser-des/config/note.d.ts.map +1 -1
- package/dist/src/ser-des/config/note.js +18 -26
- package/dist/src/ser-des/config/note.js.map +1 -1
- package/dist/src/ser-des/config/process.d.ts.map +1 -1
- package/dist/src/ser-des/config/process.js +40 -41
- package/dist/src/ser-des/config/process.js.map +1 -1
- package/dist/src/ser-des/config/provision.d.ts.map +1 -1
- package/dist/src/ser-des/config/provision.js +18 -26
- package/dist/src/ser-des/config/provision.js.map +1 -1
- package/dist/src/ser-des/config/reference.js +2 -2
- package/dist/src/ser-des/config/reference.js.map +1 -1
- package/dist/src/ser-des/config/role.d.ts.map +1 -1
- package/dist/src/ser-des/config/role.js +7 -13
- package/dist/src/ser-des/config/role.js.map +1 -1
- package/dist/src/ser-des/config/stateMachine.js +12 -12
- package/dist/src/ser-des/config/stateMachine.js.map +1 -1
- package/dist/src/ser-des/config/subform.js +8 -8
- package/dist/src/ser-des/config/subform.js.map +1 -1
- package/dist/src/ser-des/config/symbol.d.ts.map +1 -1
- package/dist/src/ser-des/config/symbol.js +30 -38
- package/dist/src/ser-des/config/symbol.js.map +1 -1
- package/dist/src/ser-des/config/table.js +5 -5
- package/dist/src/ser-des/config/table.js.map +1 -1
- package/dist/src/ser-des/config/term.d.ts.map +1 -1
- package/dist/src/ser-des/config/term.js +22 -36
- package/dist/src/ser-des/config/term.js.map +1 -1
- package/dist/src/ser-des/config/viewProfile.d.ts.map +1 -1
- package/dist/src/ser-des/config/viewProfile.js +15 -23
- package/dist/src/ser-des/config/viewProfile.js.map +1 -1
- package/dist/src/ser-des/includes.d.ts +4 -0
- package/dist/src/ser-des/includes.d.ts.map +1 -1
- package/dist/src/ser-des/includes.js +21 -2
- package/dist/src/ser-des/includes.js.map +1 -1
- package/dist/src/ser-des/parse-block.d.ts +48 -0
- package/dist/src/ser-des/parse-block.d.ts.map +1 -0
- package/dist/src/ser-des/parse-block.js +108 -0
- package/dist/src/ser-des/parse-block.js.map +1 -0
- package/dist/src/ser-des/parse.d.ts +3 -2
- package/dist/src/ser-des/parse.d.ts.map +1 -1
- package/dist/src/ser-des/parse.js +13 -31
- package/dist/src/ser-des/parse.js.map +1 -1
- package/dist/src/ser-des/resolve.d.ts +16 -3
- package/dist/src/ser-des/resolve.d.ts.map +1 -1
- package/dist/src/ser-des/resolve.js +41 -58
- package/dist/src/ser-des/resolve.js.map +1 -1
- package/dist/src/ser-des/tokenize.d.ts +3 -4
- package/dist/src/ser-des/tokenize.d.ts.map +1 -1
- package/dist/src/ser-des/tokenize.js +5 -65
- package/dist/src/ser-des/tokenize.js.map +1 -1
- package/dist/src/ser-des/types.d.ts +2 -2
- package/dist/src/ser-des/types.d.ts.map +1 -1
- package/dist/src/types/Standard.d.ts +2 -2
- package/dist/src/types/Standard.d.ts.map +1 -1
- package/dist/src/types/process.d.ts +1 -0
- package/dist/src/types/process.d.ts.map +1 -1
- package/dist/src/validate.d.ts +14 -5
- package/dist/src/validate.d.ts.map +1 -1
- package/dist/src/validate.js +110 -57
- package/dist/src/validate.js.map +1 -1
- package/package.json +10 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Standard.d.ts","sourceRoot":"","sources":["../../../src/types/Standard.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,QAAQ,MAAM,YAAY,CAAC;AACvC,OAAO,KAAK,WAAW,MAAM,eAAe,CAAC;AAC7C,OAAO,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAClE,OAAO,SAAS,MAAM,UAAU,CAAC;AACjC,OAAO,KAAK,MAAM,MAAM,UAAU,CAAC;AACnC,OAAO,KAAK,IAAI,MAAM,QAAQ,CAAC;AAC/B,OAAO,KAAK,OAAO,MAAM,WAAW,CAAC;AACrC,OAAO,KAAK,IAAI,MAAM,QAAQ,CAAC;AAC/B,OAAO,KAAK,UAAU,MAAM,cAAc,CAAC;AAC3C,OAAO,KAAK,QAAQ,MAAM,YAAY,CAAC;AACvC,OAAO,KAAK,IAAI,MAAM,QAAQ,CAAC;AAC/B,OAAO,KAAK,OAAO,MAAM,WAAW,CAAC;AACrC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AACzC,OAAO,KAAK,SAAS,MAAM,aAAa,CAAC;AACzC,OAAO,KAAK,SAAS,MAAM,aAAa,CAAC;AACzC,OAAO,KAAK,IAAI,MAAM,QAAQ,CAAC;AAC/B,OAAO,KAAK,YAAY,MAAM,gBAAgB,CAAC;AAC/C,OAAO,KAAK,OAAO,MAAM,WAAW,CAAC;AACrC,OAAO,KAAK,MAAM,MAAM,UAAU,CAAC;AACnC,OAAO,KAAK,KAAK,MAAM,SAAS,CAAC;AACjC,OAAO,KAAK,IAAI,MAAM,QAAQ,CAAC;AAC/B,OAAO,KAAK,WAAW,MAAM,eAAe,CAAC;AAE7C,MAAM,CAAC,OAAO,WAAW,QAAQ;IAC/B,IAAI,EAAE,QAAQ,CAAC;IAEf,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,UAAU,EAAE,SAAS,EAAE,CAAC;IACxB,KAAK,EAAE,UAAU,EAAE,CAAC;IACpB,SAAS,EAAE,OAAO,EAAE,CAAC;IACrB,WAAW,EAAE,SAAS,EAAE,CAAC;IACzB,IAAI,EAAE,QAAQ,EAAE,CAAC;IACjB,MAAM,EAAE,SAAS,EAAE,CAAC;IACpB,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,
|
|
1
|
+
{"version":3,"file":"Standard.d.ts","sourceRoot":"","sources":["../../../src/types/Standard.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,QAAQ,MAAM,YAAY,CAAC;AACvC,OAAO,KAAK,WAAW,MAAM,eAAe,CAAC;AAC7C,OAAO,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAClE,OAAO,SAAS,MAAM,UAAU,CAAC;AACjC,OAAO,KAAK,MAAM,MAAM,UAAU,CAAC;AACnC,OAAO,KAAK,IAAI,MAAM,QAAQ,CAAC;AAC/B,OAAO,KAAK,OAAO,MAAM,WAAW,CAAC;AACrC,OAAO,KAAK,IAAI,MAAM,QAAQ,CAAC;AAC/B,OAAO,KAAK,UAAU,MAAM,cAAc,CAAC;AAC3C,OAAO,KAAK,QAAQ,MAAM,YAAY,CAAC;AACvC,OAAO,KAAK,IAAI,MAAM,QAAQ,CAAC;AAC/B,OAAO,KAAK,OAAO,MAAM,WAAW,CAAC;AACrC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AACzC,OAAO,KAAK,SAAS,MAAM,aAAa,CAAC;AACzC,OAAO,KAAK,SAAS,MAAM,aAAa,CAAC;AACzC,OAAO,KAAK,IAAI,MAAM,QAAQ,CAAC;AAC/B,OAAO,KAAK,YAAY,MAAM,gBAAgB,CAAC;AAC/C,OAAO,KAAK,OAAO,MAAM,WAAW,CAAC;AACrC,OAAO,KAAK,MAAM,MAAM,UAAU,CAAC;AACnC,OAAO,KAAK,KAAK,MAAM,SAAS,CAAC;AACjC,OAAO,KAAK,IAAI,MAAM,QAAQ,CAAC;AAC/B,OAAO,KAAK,WAAW,MAAM,eAAe,CAAC;AAE7C,MAAM,CAAC,OAAO,WAAW,QAAQ;IAC/B,IAAI,EAAE,QAAQ,CAAC;IAEf,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,UAAU,EAAE,SAAS,EAAE,CAAC;IACxB,KAAK,EAAE,UAAU,EAAE,CAAC;IACpB,SAAS,EAAE,OAAO,EAAE,CAAC;IACrB,WAAW,EAAE,SAAS,EAAE,CAAC;IACzB,IAAI,EAAE,QAAQ,EAAE,CAAC;IACjB,MAAM,EAAE,SAAS,EAAE,CAAC;IACpB,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,UAAU,EAAE,SAAS,EAAE,CAAC;IACxB,SAAS,EAAE,QAAQ,EAAE,CAAC;IACtB,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,SAAS,EAAE,QAAQ,EAAE,CAAC;IAGtB,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,MAAM,EAAE,KAAK,EAAE,CAAC;IAChB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,WAAW,EAAE,UAAU,EAAE,CAAC;IAC1B,YAAY,EAAE,WAAW,EAAE,CAAC;IAG5B,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,YAAY,EAAE,WAAW,EAAE,CAAC;IAC5B,aAAa,EAAE,YAAY,EAAE,CAAC;IAE9B,IAAI,EAAE,UAAU,GAAG,IAAI,CAAC;CACzB"}
|
|
@@ -13,6 +13,7 @@ export default interface Process {
|
|
|
13
13
|
provision: Provision[];
|
|
14
14
|
page: Subprocess | null;
|
|
15
15
|
measure: string[];
|
|
16
|
+
parent: string;
|
|
16
17
|
}
|
|
17
18
|
export type ResolvableProcess = Resolvable<Process, 'actor' | 'output' | 'input' | 'provision' | 'page'>;
|
|
18
19
|
//# sourceMappingURL=process.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"process.d.ts","sourceRoot":"","sources":["../../../src/types/process.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAClC,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AACpC,OAAO,SAAS,MAAM,aAAa,CAAC;AACpC,OAAO,IAAI,MAAM,QAAQ,CAAC;AAE1B,MAAM,CAAC,OAAO,WAAW,OAAO;
|
|
1
|
+
{"version":3,"file":"process.d.ts","sourceRoot":"","sources":["../../../src/types/process.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAClC,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AACpC,OAAO,SAAS,MAAM,aAAa,CAAC;AACpC,OAAO,IAAI,MAAM,QAAQ,CAAC;AAE1B,MAAM,CAAC,OAAO,WAAW,OAAO;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,IAAI,GAAG,IAAI,CAAC;IACnB,MAAM,EAAE,QAAQ,EAAE,CAAC;IACnB,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,SAAS,EAAE,SAAS,EAAE,CAAC;IACvB,IAAI,EAAE,UAAU,GAAG,IAAI,CAAC;IACxB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,MAAM,iBAAiB,GAAG,UAAU,CACxC,OAAO,EACP,OAAO,GAAG,QAAQ,GAAG,OAAO,GAAG,WAAW,GAAG,MAAM,CACpD,CAAC"}
|
package/dist/src/validate.d.ts
CHANGED
|
@@ -1,10 +1,7 @@
|
|
|
1
1
|
import type Standard from './types/Standard';
|
|
2
|
+
import type { Position } from './ser-des/tokenize';
|
|
3
|
+
export type { Position };
|
|
2
4
|
export type ValidationSeverity = 'error' | 'warning' | 'info';
|
|
3
|
-
export interface Position {
|
|
4
|
-
line: number;
|
|
5
|
-
col: number;
|
|
6
|
-
offset: number;
|
|
7
|
-
}
|
|
8
5
|
export interface ValidationIssue {
|
|
9
6
|
severity: ValidationSeverity;
|
|
10
7
|
code: string;
|
|
@@ -18,8 +15,20 @@ export interface ValidationIssue {
|
|
|
18
15
|
* parsing carry the same shape as post-parse issues.
|
|
19
16
|
*/
|
|
20
17
|
export type ParseIssue = ValidationIssue;
|
|
18
|
+
/**
|
|
19
|
+
* A post-parse validation check. Receives the resolved Standard and
|
|
20
|
+
* returns any issues it finds. Checks are independent — order does not
|
|
21
|
+
* matter, no shared mutable state.
|
|
22
|
+
*/
|
|
23
|
+
export interface Validator {
|
|
24
|
+
/** Stable name for test reporting and filtering. */
|
|
25
|
+
name: string;
|
|
26
|
+
check: (standard: Standard) => ValidationIssue[];
|
|
27
|
+
}
|
|
21
28
|
/**
|
|
22
29
|
* Validate a parsed Standard. Returns issues; empty array means clean.
|
|
30
|
+
* Iterates every registered Validator.
|
|
23
31
|
*/
|
|
24
32
|
export declare function validate(standard: Standard): ValidationIssue[];
|
|
33
|
+
export declare const VALIDATORS: Validator[];
|
|
25
34
|
//# sourceMappingURL=validate.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../src/validate.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../src/validate.ts"],"names":[],"mappings":"AAkBA,OAAO,KAAK,QAAQ,MAAM,kBAAkB,CAAC;AAE7C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAEnD,YAAY,EAAE,QAAQ,EAAE,CAAC;AAEzB,MAAM,MAAM,kBAAkB,GAAG,OAAO,GAAG,SAAS,GAAG,MAAM,CAAC;AAE9D,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,kBAAkB,CAAC;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,QAAQ,CAAC;CACrB;AAED;;;GAGG;AACH,MAAM,MAAM,UAAU,GAAG,eAAe,CAAC;AAEzC;;;;GAIG;AACH,MAAM,WAAW,SAAS;IACxB,oDAAoD;IACpD,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,CAAC,QAAQ,EAAE,QAAQ,KAAK,eAAe,EAAE,CAAC;CAClD;AAED;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,QAAQ,EAAE,QAAQ,GAAG,eAAe,EAAE,CAM9D;AAKD,eAAO,MAAM,UAAU,EAAE,SAAS,EAIjC,CAAC"}
|
package/dist/src/validate.js
CHANGED
|
@@ -11,80 +11,133 @@
|
|
|
11
11
|
// ValidationIssue is the shared shape; `position` is optional because
|
|
12
12
|
// parse-time issues always have it (we know the source location) but
|
|
13
13
|
// post-parse issues may not (resolved objects don't carry positions).
|
|
14
|
+
//
|
|
15
|
+
// Checks are registered in `VALIDATORS`. Adding a new post-parse
|
|
16
|
+
// check is one entry in that array — mirrors the defineConstruct
|
|
17
|
+
// pattern in ser-des/config/index.ts.
|
|
14
18
|
// ─────────────────────────────────────────────────────────────────────
|
|
15
19
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
20
|
+
exports.VALIDATORS = void 0;
|
|
16
21
|
exports.validate = validate;
|
|
17
22
|
/**
|
|
18
23
|
* Validate a parsed Standard. Returns issues; empty array means clean.
|
|
24
|
+
* Iterates every registered Validator.
|
|
19
25
|
*/
|
|
20
26
|
function validate(standard) {
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
standard;
|
|
25
|
-
issues = [];
|
|
26
|
-
constructor(standard) {
|
|
27
|
-
this.standard = standard;
|
|
28
|
-
}
|
|
29
|
-
run() {
|
|
30
|
-
this.checkEmptyIds();
|
|
31
|
-
this.checkFormReferences();
|
|
32
|
-
this.checkStateMachineCascades();
|
|
33
|
-
return this.issues;
|
|
34
|
-
}
|
|
35
|
-
issue(severity, code, construct, message, id) {
|
|
36
|
-
this.issues.push({ severity, code, construct, message, id });
|
|
27
|
+
const issues = [];
|
|
28
|
+
for (const v of exports.VALIDATORS) {
|
|
29
|
+
issues.push(...v.check(standard));
|
|
37
30
|
}
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
31
|
+
return issues;
|
|
32
|
+
}
|
|
33
|
+
// ── Registered validators ────────────────────────────────────────────
|
|
34
|
+
// Add a new post-parse check by appending one entry to this array.
|
|
35
|
+
exports.VALIDATORS = [
|
|
36
|
+
{ name: 'empty-ids', check: checkEmptyIds },
|
|
37
|
+
{ name: 'form-references', check: checkFormReferences },
|
|
38
|
+
{ name: 'state-machine-cascades', check: checkStateMachineCascades },
|
|
39
|
+
];
|
|
40
|
+
// ── Check implementations ────────────────────────────────────────────
|
|
41
|
+
/**
|
|
42
|
+
* Reports empty or whitespace-only IDs on any Standard array whose
|
|
43
|
+
* elements expose `.id`. Iterates generically so adding a construct
|
|
44
|
+
* type does not require editing this check.
|
|
45
|
+
*/
|
|
46
|
+
function checkEmptyIds(standard) {
|
|
47
|
+
const issues = [];
|
|
48
|
+
for (const [field, items] of iterIdArrays(standard)) {
|
|
49
|
+
for (const item of items) {
|
|
51
50
|
if (!item.id || item.id.trim() === '') {
|
|
52
|
-
|
|
51
|
+
issues.push({
|
|
52
|
+
severity: 'error',
|
|
53
|
+
code: 'empty-id',
|
|
54
|
+
construct: field,
|
|
55
|
+
message: `${field} has an empty id — every ${field} must declare a non-empty id`,
|
|
56
|
+
});
|
|
53
57
|
}
|
|
54
58
|
}
|
|
55
59
|
}
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
60
|
+
return issues;
|
|
61
|
+
}
|
|
62
|
+
function checkFormReferences(standard) {
|
|
63
|
+
const issues = [];
|
|
64
|
+
const calcIds = new Set(standard.calculations.map(c => c.id));
|
|
65
|
+
const procIds = new Set(standard.processes.map(p => p.id));
|
|
66
|
+
const subformIds = new Set(standard.subforms.map(s => s.id));
|
|
67
|
+
for (const form of standard.forms) {
|
|
68
|
+
if (form.conformanceProcessId && !procIds.has(form.conformanceProcessId)) {
|
|
69
|
+
issues.push({
|
|
70
|
+
severity: 'error',
|
|
71
|
+
code: 'form-conformance-process-missing',
|
|
72
|
+
construct: 'form',
|
|
73
|
+
message: `Form "${form.id}" references conformance process "${form.conformanceProcessId}" which does not exist`,
|
|
74
|
+
id: form.id,
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
for (const field of iterFields(form)) {
|
|
78
|
+
if (field.calculationId && !calcIds.has(field.calculationId)) {
|
|
79
|
+
issues.push({
|
|
80
|
+
severity: 'error',
|
|
81
|
+
code: 'form-calculation-missing',
|
|
82
|
+
construct: 'form',
|
|
83
|
+
message: `Form "${form.id}" field "${field.name}" references calculation "${field.calculationId}" which does not exist`,
|
|
84
|
+
id: form.id,
|
|
85
|
+
});
|
|
64
86
|
}
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
87
|
+
if (field.subformRef && !subformIds.has(field.subformRef.subformId)) {
|
|
88
|
+
issues.push({
|
|
89
|
+
severity: 'error',
|
|
90
|
+
code: 'form-subform-missing',
|
|
91
|
+
construct: 'form',
|
|
92
|
+
message: `Form "${form.id}" field "${field.name}" references subform "${field.subformRef.subformId}" which does not exist`,
|
|
93
|
+
id: form.id,
|
|
94
|
+
});
|
|
72
95
|
}
|
|
73
96
|
}
|
|
74
97
|
}
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
98
|
+
return issues;
|
|
99
|
+
}
|
|
100
|
+
function checkStateMachineCascades(standard) {
|
|
101
|
+
const issues = [];
|
|
102
|
+
for (const sm of standard.stateMachines) {
|
|
103
|
+
const stateNames = new Set(sm.states.map(s => s.name));
|
|
104
|
+
// `*` is the conventional wildcard for "any state" — always valid.
|
|
105
|
+
stateNames.add('*');
|
|
106
|
+
for (const tr of sm.transitions) {
|
|
107
|
+
if (tr.from && !stateNames.has(tr.from)) {
|
|
108
|
+
issues.push({
|
|
109
|
+
severity: 'warning',
|
|
110
|
+
code: 'state-machine-from-missing',
|
|
111
|
+
construct: 'state_machine',
|
|
112
|
+
message: `State machine "${sm.entityName}" transition from "${tr.from}" is not in declared states`,
|
|
113
|
+
id: sm.entityName,
|
|
114
|
+
});
|
|
87
115
|
}
|
|
116
|
+
if (tr.to && !stateNames.has(tr.to)) {
|
|
117
|
+
issues.push({
|
|
118
|
+
severity: 'warning',
|
|
119
|
+
code: 'state-machine-to-missing',
|
|
120
|
+
construct: 'state_machine',
|
|
121
|
+
message: `State machine "${sm.entityName}" transition to "${tr.to}" is not in declared states`,
|
|
122
|
+
id: sm.entityName,
|
|
123
|
+
});
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
return issues;
|
|
128
|
+
}
|
|
129
|
+
// ── Helpers ──────────────────────────────────────────────────────────
|
|
130
|
+
/**
|
|
131
|
+
* Yield (construct-name, array) pairs for every Standard array whose
|
|
132
|
+
* elements expose an `id`. Used by checkEmptyIds to walk every
|
|
133
|
+
* identifiable construct type without hardcoding the list.
|
|
134
|
+
*/
|
|
135
|
+
function* iterIdArrays(standard) {
|
|
136
|
+
for (const [field, value] of Object.entries(standard)) {
|
|
137
|
+
if (Array.isArray(value) &&
|
|
138
|
+
value.length > 0 &&
|
|
139
|
+
typeof value[0]?.id === 'string') {
|
|
140
|
+
yield [field, value];
|
|
88
141
|
}
|
|
89
142
|
}
|
|
90
143
|
}
|
package/dist/src/validate.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validate.js","sourceRoot":"","sources":["../../src/validate.ts"],"names":[],"mappings":";AAAA,wEAAwE;AACxE,iDAAiD;AACjD,EAAE;AACF,sBAAsB;AACtB,wEAAwE;AACxE,2DAA2D;AAC3D,mEAAmE;AACnE,mEAAmE;AACnE,EAAE;AACF,sEAAsE;AACtE,qEAAqE;AACrE,sEAAsE;AACtE,wEAAwE
|
|
1
|
+
{"version":3,"file":"validate.js","sourceRoot":"","sources":["../../src/validate.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@primmel/primmel",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.3.0",
|
|
4
4
|
"description": "Primmel — parser, types, and serializer for the Primmel modelling language (successor to MMEL)",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -16,8 +16,17 @@
|
|
|
16
16
|
"contributors": [
|
|
17
17
|
"Ribose Inc. <open.source@ribose.com>"
|
|
18
18
|
],
|
|
19
|
+
"exports": {
|
|
20
|
+
".": {
|
|
21
|
+
"browser": "./dist-browser/index.js",
|
|
22
|
+
"import": "./dist/index.js",
|
|
23
|
+
"require": "./dist/index.js",
|
|
24
|
+
"types": "./dist/index.d.ts"
|
|
25
|
+
}
|
|
26
|
+
},
|
|
19
27
|
"scripts": {
|
|
20
28
|
"build": "../../node_modules/.bin/tsc",
|
|
29
|
+
"build:browser": "vite build --config ../../vite.browser.config.ts",
|
|
21
30
|
"prepublishOnly": "yarn build",
|
|
22
31
|
"test": "node --test --import tsx test/*.test.ts"
|
|
23
32
|
},
|