@primmel/primmel 1.4.1 → 1.5.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/ser-des/config/conformanceTest.d.ts.map +1 -1
- package/dist/src/ser-des/config/conformanceTest.js +19 -0
- package/dist/src/ser-des/config/conformanceTest.js.map +1 -1
- package/dist/src/ser-des/config/field-parser.d.ts.map +1 -1
- package/dist/src/ser-des/config/field-parser.js +19 -0
- package/dist/src/ser-des/config/field-parser.js.map +1 -1
- package/dist/src/ser-des/config/form.d.ts.map +1 -1
- package/dist/src/ser-des/config/form.js +22 -0
- package/dist/src/ser-des/config/form.js.map +1 -1
- package/dist/src/ser-des/config/index.d.ts.map +1 -1
- package/dist/src/ser-des/config/index.js +9 -0
- package/dist/src/ser-des/config/index.js.map +1 -1
- package/dist/src/ser-des/config/packageManifest.d.ts.map +1 -1
- package/dist/src/ser-des/config/packageManifest.js +22 -0
- package/dist/src/ser-des/config/packageManifest.js.map +1 -1
- package/dist/src/ser-des/config/predicate.d.ts +5 -0
- package/dist/src/ser-des/config/predicate.d.ts.map +1 -0
- package/dist/src/ser-des/config/predicate.js +111 -0
- package/dist/src/ser-des/config/predicate.js.map +1 -0
- package/dist/src/ser-des/config/ref.d.ts +15 -0
- package/dist/src/ser-des/config/ref.d.ts.map +1 -0
- package/dist/src/ser-des/config/ref.js +50 -0
- package/dist/src/ser-des/config/ref.js.map +1 -0
- package/dist/src/ser-des/config/requirement.d.ts.map +1 -1
- package/dist/src/ser-des/config/requirement.js +19 -0
- package/dist/src/ser-des/config/requirement.js.map +1 -1
- package/dist/src/ser-des/parse.d.ts.map +1 -1
- package/dist/src/ser-des/parse.js +1 -0
- package/dist/src/ser-des/parse.js.map +1 -1
- package/dist/src/ser-des/types.d.ts +2 -0
- package/dist/src/ser-des/types.d.ts.map +1 -1
- package/dist/src/types/ConformanceTest.d.ts +3 -0
- package/dist/src/types/ConformanceTest.d.ts.map +1 -1
- package/dist/src/types/Form.d.ts +6 -0
- package/dist/src/types/Form.d.ts.map +1 -1
- package/dist/src/types/Package.d.ts +4 -0
- package/dist/src/types/Package.d.ts.map +1 -1
- package/dist/src/types/Ref.d.ts +11 -0
- package/dist/src/types/Ref.d.ts.map +1 -0
- package/dist/src/types/Ref.js +3 -0
- package/dist/src/types/Ref.js.map +1 -0
- package/dist/src/types/RefPredicate.d.ts +22 -0
- package/dist/src/types/RefPredicate.d.ts.map +1 -0
- package/dist/src/types/RefPredicate.js +3 -0
- package/dist/src/types/RefPredicate.js.map +1 -0
- package/dist/src/types/Requirement.d.ts +3 -0
- package/dist/src/types/Requirement.d.ts.map +1 -1
- package/dist/src/types/Standard.d.ts +3 -0
- package/dist/src/types/Standard.d.ts.map +1 -1
- package/dist-browser/index.mjs +1159 -1082
- package/dist-cli/primmel.mjs +153 -0
- package/package.json +1 -1
package/dist-cli/primmel.mjs
CHANGED
|
@@ -222,6 +222,7 @@ function parse(mmelString, parsers, options = {}) {
|
|
|
222
222
|
referenceMaterials: {},
|
|
223
223
|
testPointSets: {},
|
|
224
224
|
competenceKinds: {},
|
|
225
|
+
predicates: {},
|
|
225
226
|
constraints: {},
|
|
226
227
|
discrepancyRecords: {},
|
|
227
228
|
stateMachines: {},
|
|
@@ -1167,6 +1168,21 @@ function dumpSeriesDecl(decl) {
|
|
|
1167
1168
|
return out;
|
|
1168
1169
|
}
|
|
1169
1170
|
|
|
1171
|
+
// src/ser-des/config/ref.ts
|
|
1172
|
+
function parseRef(t, i, stripWrapping2, unwrapBlock2) {
|
|
1173
|
+
const predicate = stripWrapping2(t[i++] ?? "");
|
|
1174
|
+
const target = stripWrapping2(t[i++] ?? "");
|
|
1175
|
+
const ref = { predicate, target };
|
|
1176
|
+
if (i < t.length && t[i].startsWith("{")) {
|
|
1177
|
+
const block = unwrapBlock2(t[i++]);
|
|
1178
|
+
const m = /note\s+"([^"]*)"/.exec(block) ?? /note\s+(\S+)/.exec(block);
|
|
1179
|
+
if (m) {
|
|
1180
|
+
ref.note = m[1];
|
|
1181
|
+
}
|
|
1182
|
+
}
|
|
1183
|
+
return { ref, next: i };
|
|
1184
|
+
}
|
|
1185
|
+
|
|
1170
1186
|
// src/ser-des/config/sourceDiscrepancy.ts
|
|
1171
1187
|
var VALID_RESOLUTIONS = ["follows_clause_x", "annotated_only"];
|
|
1172
1188
|
function parseSourceDiscrepancy(block) {
|
|
@@ -1347,6 +1363,7 @@ function parseFormField(name, block, type) {
|
|
|
1347
1363
|
pattern: "",
|
|
1348
1364
|
required: false,
|
|
1349
1365
|
requiredWhen: "",
|
|
1366
|
+
refs: [],
|
|
1350
1367
|
measurementMethod: "",
|
|
1351
1368
|
calculationId: null,
|
|
1352
1369
|
calculationBindings: [],
|
|
@@ -1480,6 +1497,10 @@ function parseFormField(name, block, type) {
|
|
|
1480
1497
|
field.referenceIds = tokenizePackage(t[i++]).map(stripWrapping);
|
|
1481
1498
|
} else if (cmd === "references") {
|
|
1482
1499
|
field.fieldReferences = parseRoleReferences(unwrapBlock(t[i++]));
|
|
1500
|
+
} else if (cmd === "ref") {
|
|
1501
|
+
const r = parseRef(t, i, stripWrapping, unwrapBlock);
|
|
1502
|
+
field.refs.push(r.ref);
|
|
1503
|
+
i = r.next;
|
|
1483
1504
|
} else if (cmd === "specification_reference") {
|
|
1484
1505
|
field.specificationReference = stripWrapping(t[i++]);
|
|
1485
1506
|
} else if (cmd === "applicability") {
|
|
@@ -1814,6 +1835,13 @@ function dumpFormField(field, indent) {
|
|
|
1814
1835
|
"references { " + dumpRoleReferences(field.fieldReferences) + " }"
|
|
1815
1836
|
);
|
|
1816
1837
|
}
|
|
1838
|
+
if (field.refs && field.refs.length > 0) {
|
|
1839
|
+
for (const r of field.refs) {
|
|
1840
|
+
inner.push(
|
|
1841
|
+
"ref " + r.predicate + ' "' + escapeString(r.target) + '"' + (r.note ? ' { note "' + escapeString(r.note) + '" }' : "")
|
|
1842
|
+
);
|
|
1843
|
+
}
|
|
1844
|
+
}
|
|
1817
1845
|
if (field.specificationReference) {
|
|
1818
1846
|
inner.push(
|
|
1819
1847
|
'specification_reference "' + escapeString(field.specificationReference) + '"'
|
|
@@ -4104,6 +4132,10 @@ var parseForm = function(id, data) {
|
|
|
4104
4132
|
result.reportRows = rr;
|
|
4105
4133
|
} else if (command === "references") {
|
|
4106
4134
|
result.formReferences = parseRoleReferences(unwrapBlock(t[i++]));
|
|
4135
|
+
} else if (command === "ref") {
|
|
4136
|
+
const r = parseRef(t, i, stripWrapping, unwrapBlock);
|
|
4137
|
+
result.refs = [...result.refs ?? [], r.ref];
|
|
4138
|
+
i = r.next;
|
|
4107
4139
|
} else if (command === "calculation_context") {
|
|
4108
4140
|
result.calculationContext = parseCalculationContext(
|
|
4109
4141
|
unwrapBlock(t[i++])
|
|
@@ -4347,6 +4379,7 @@ function makeSubformRefField(subformId, block) {
|
|
|
4347
4379
|
defaultValue: "",
|
|
4348
4380
|
hasDefault: false,
|
|
4349
4381
|
referenceIds: [],
|
|
4382
|
+
refs: [],
|
|
4350
4383
|
fieldReferences: [],
|
|
4351
4384
|
specificationReference: "",
|
|
4352
4385
|
applicability: [],
|
|
@@ -4387,6 +4420,11 @@ var dumpForm = function(f) {
|
|
|
4387
4420
|
if (f.formReferences.length > 0) {
|
|
4388
4421
|
out += " references { " + dumpRoleReferences(f.formReferences) + " }\n";
|
|
4389
4422
|
}
|
|
4423
|
+
if (f.refs && f.refs.length > 0) {
|
|
4424
|
+
for (const r of f.refs) {
|
|
4425
|
+
out += " ref " + r.predicate + ' "' + escapeString(r.target) + '"' + (r.note ? ' { note "' + escapeString(r.note) + '" }' : "") + "\n";
|
|
4426
|
+
}
|
|
4427
|
+
}
|
|
4390
4428
|
if (f.calculationContext) {
|
|
4391
4429
|
const cc = f.calculationContext;
|
|
4392
4430
|
let line = " calculation_context { ";
|
|
@@ -6850,6 +6888,11 @@ var parseConformanceTest = function(id, data) {
|
|
|
6850
6888
|
}
|
|
6851
6889
|
} else if (keyword === "targets") {
|
|
6852
6890
|
result.targets = tokenizePackage(value());
|
|
6891
|
+
} else if (keyword === "ref") {
|
|
6892
|
+
const block = value();
|
|
6893
|
+
const rt = tokenizePackage(block);
|
|
6894
|
+
const rr = parseRef(rt, 0, stripWrapping, unwrapBlock);
|
|
6895
|
+
(result.refs ??= []).push(rr.ref);
|
|
6853
6896
|
} else if (keyword === "binds_to") {
|
|
6854
6897
|
result.bindsTo = tokenizePackage(value());
|
|
6855
6898
|
} else if (keyword === "applicability") {
|
|
@@ -6976,6 +7019,9 @@ var dumpConformanceTest = function(ct) {
|
|
|
6976
7019
|
} else if (ct.reference) {
|
|
6977
7020
|
out += " reference " + ct.reference + "\n";
|
|
6978
7021
|
}
|
|
7022
|
+
for (const r of ct.refs ?? []) {
|
|
7023
|
+
out += " ref " + r.predicate + ' "' + escapeString(r.target) + '"' + (r.note ? ' { note "' + escapeString(r.note) + '" }' : "") + "\n";
|
|
7024
|
+
}
|
|
6979
7025
|
if (ct.targets.length > 0) {
|
|
6980
7026
|
out += " targets {\n";
|
|
6981
7027
|
for (const t of ct.targets) {
|
|
@@ -7687,6 +7733,94 @@ var dumpReferenceMaterial = function(m) {
|
|
|
7687
7733
|
return out;
|
|
7688
7734
|
};
|
|
7689
7735
|
|
|
7736
|
+
// src/ser-des/config/predicate.ts
|
|
7737
|
+
var parsePredicate = function(id, data) {
|
|
7738
|
+
const result = {
|
|
7739
|
+
id,
|
|
7740
|
+
kind: "",
|
|
7741
|
+
description: "",
|
|
7742
|
+
subjectKinds: [],
|
|
7743
|
+
targetKinds: [],
|
|
7744
|
+
resolution: "",
|
|
7745
|
+
inverse: "",
|
|
7746
|
+
transitive: false,
|
|
7747
|
+
symmetric: false
|
|
7748
|
+
};
|
|
7749
|
+
const t = tokenizePackage(data);
|
|
7750
|
+
let i = 0;
|
|
7751
|
+
while (i < t.length) {
|
|
7752
|
+
const keyword = t[i++];
|
|
7753
|
+
if (i >= t.length) {
|
|
7754
|
+
throw new Error(
|
|
7755
|
+
`Parsing error: predicate. ID ${id}: Expecting value for ${keyword}`
|
|
7756
|
+
);
|
|
7757
|
+
}
|
|
7758
|
+
if (keyword === "kind") {
|
|
7759
|
+
const v = stripWrapping(t[i++]);
|
|
7760
|
+
if (v !== "citation" && v !== "semantic") {
|
|
7761
|
+
throw new Error(
|
|
7762
|
+
`Parsing error: predicate. ID ${id}: kind must be citation|semantic (got '${v}')`
|
|
7763
|
+
);
|
|
7764
|
+
}
|
|
7765
|
+
result.kind = v;
|
|
7766
|
+
} else if (keyword === "description" || keyword === "definition") {
|
|
7767
|
+
result.description = stripWrapping(t[i++]);
|
|
7768
|
+
} else if (keyword === "subject_kinds") {
|
|
7769
|
+
result.subjectKinds = tokenizePackage(unwrapBlock(t[i++])).map(
|
|
7770
|
+
stripWrapping
|
|
7771
|
+
);
|
|
7772
|
+
} else if (keyword === "target_kinds") {
|
|
7773
|
+
result.targetKinds = tokenizePackage(unwrapBlock(t[i++])).map(
|
|
7774
|
+
stripWrapping
|
|
7775
|
+
);
|
|
7776
|
+
} else if (keyword === "resolution") {
|
|
7777
|
+
result.resolution = stripWrapping(t[i++]);
|
|
7778
|
+
} else if (keyword === "inverse") {
|
|
7779
|
+
result.inverse = stripWrapping(t[i++]);
|
|
7780
|
+
} else if (keyword === "transitive") {
|
|
7781
|
+
result.transitive = stripWrapping(t[i++]) === "true";
|
|
7782
|
+
} else if (keyword === "symmetric") {
|
|
7783
|
+
result.symmetric = stripWrapping(t[i++]) === "true";
|
|
7784
|
+
} else {
|
|
7785
|
+
i++;
|
|
7786
|
+
}
|
|
7787
|
+
}
|
|
7788
|
+
return (ctx) => {
|
|
7789
|
+
ctx.predicates ??= {};
|
|
7790
|
+
ctx.predicates[id] = result;
|
|
7791
|
+
return ctx;
|
|
7792
|
+
};
|
|
7793
|
+
};
|
|
7794
|
+
var dumpPredicate = function(p) {
|
|
7795
|
+
let out = "predicate " + p.id + " {\n";
|
|
7796
|
+
if (p.kind) {
|
|
7797
|
+
out += " kind " + p.kind + "\n";
|
|
7798
|
+
}
|
|
7799
|
+
if (p.description) {
|
|
7800
|
+
out += ' description "' + escapeString(p.description) + '"\n';
|
|
7801
|
+
}
|
|
7802
|
+
if (p.subjectKinds.length > 0) {
|
|
7803
|
+
out += " subject_kinds { " + p.subjectKinds.join(" ") + " }\n";
|
|
7804
|
+
}
|
|
7805
|
+
if (p.targetKinds.length > 0) {
|
|
7806
|
+
out += " target_kinds { " + p.targetKinds.join(" ") + " }\n";
|
|
7807
|
+
}
|
|
7808
|
+
if (p.resolution) {
|
|
7809
|
+
out += " resolution " + p.resolution + "\n";
|
|
7810
|
+
}
|
|
7811
|
+
if (p.inverse) {
|
|
7812
|
+
out += " inverse " + p.inverse + "\n";
|
|
7813
|
+
}
|
|
7814
|
+
if (p.transitive) {
|
|
7815
|
+
out += " transitive true\n";
|
|
7816
|
+
}
|
|
7817
|
+
if (p.symmetric) {
|
|
7818
|
+
out += " symmetric true\n";
|
|
7819
|
+
}
|
|
7820
|
+
out += "}\n";
|
|
7821
|
+
return out;
|
|
7822
|
+
};
|
|
7823
|
+
|
|
7690
7824
|
// src/ser-des/config/constraint.ts
|
|
7691
7825
|
function readValue2(raw) {
|
|
7692
7826
|
if (raw.length >= 2 && raw.charAt(0) === '"' && raw.charAt(raw.length - 1) === '"') {
|
|
@@ -8253,6 +8387,10 @@ var parseRequirement = function(id, data) {
|
|
|
8253
8387
|
result.source = src;
|
|
8254
8388
|
}
|
|
8255
8389
|
(result.sourceRefs ??= []).push(src);
|
|
8390
|
+
} else if (cmd === "ref") {
|
|
8391
|
+
const r = parseRef(t, i, stripWrapping, unwrapBlock);
|
|
8392
|
+
(result.refs ??= []).push(r.ref);
|
|
8393
|
+
i = r.next;
|
|
8256
8394
|
} else {
|
|
8257
8395
|
unwrapBlock(t[i++]);
|
|
8258
8396
|
}
|
|
@@ -8394,6 +8532,9 @@ var dumpRequirement = function(r) {
|
|
|
8394
8532
|
for (const src of r.sourceRefs ?? (r.source && (r.source.doc || r.source.clause) ? [r.source] : [])) {
|
|
8395
8533
|
out += ' source { doc "' + escapeString(src.doc) + '" clause "' + escapeString(src.clause) + '"' + (src.fragment ? ' fragment "' + escapeString(src.fragment) + '"' : "") + " }\n";
|
|
8396
8534
|
}
|
|
8535
|
+
for (const ref of r.refs ?? []) {
|
|
8536
|
+
out += " ref " + ref.predicate + ' "' + escapeString(ref.target) + '"' + (ref.note ? ' { note "' + escapeString(ref.note) + '" }' : "") + "\n";
|
|
8537
|
+
}
|
|
8397
8538
|
out += "}\n";
|
|
8398
8539
|
return out;
|
|
8399
8540
|
};
|
|
@@ -8571,6 +8712,10 @@ var parsePackage = function(data) {
|
|
|
8571
8712
|
manifest.product = stripWrapping(t[i++]);
|
|
8572
8713
|
} else if (cmd === "maps_to" || cmd === "mapsTo") {
|
|
8573
8714
|
manifest.mapsTo = readList(t[i++]);
|
|
8715
|
+
} else if (cmd === "ref") {
|
|
8716
|
+
const r = parseRef(t, i, stripWrapping, unwrapBlock);
|
|
8717
|
+
(manifest.refs ??= []).push(r.ref);
|
|
8718
|
+
i = r.next;
|
|
8574
8719
|
} else if (cmd === "scheme_type" || cmd === "schemeType") {
|
|
8575
8720
|
manifest.schemeType = stripWrapping(t[i++]);
|
|
8576
8721
|
} else if (cmd === "provides") {
|
|
@@ -12438,6 +12583,14 @@ var CONSTRUCTS = [
|
|
|
12438
12583
|
parse: parseCompetenceKind,
|
|
12439
12584
|
dump: dumpCompetenceKind
|
|
12440
12585
|
}),
|
|
12586
|
+
// The relation registry (docs/primmel/18): declared ref predicates.
|
|
12587
|
+
defineConstruct({
|
|
12588
|
+
keyword: "predicate",
|
|
12589
|
+
field: "predicates",
|
|
12590
|
+
takesID: true,
|
|
12591
|
+
parse: parsePredicate,
|
|
12592
|
+
dump: dumpPredicate
|
|
12593
|
+
}),
|
|
12441
12594
|
// Primmel v3 domain constraints (TODO.roadmap/51 — BUG.R60-SSOT gap 7)
|
|
12442
12595
|
defineConstruct({
|
|
12443
12596
|
keyword: "constraint",
|
package/package.json
CHANGED