@primmel/primmel 1.21.11 → 1.21.12

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.
@@ -1 +1 @@
1
- {"version":3,"file":"provision.d.ts","sourceRoot":"","sources":["../../../../src/ser-des/config/provision.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,SAAS,MAAM,uBAAuB,CAAC;AACnD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAGzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAI5D,eAAO,MAAM,cAAc,EAAE,MAoC5B,CAAC;AAEF,eAAO,MAAM,gBAAgB,EAAE,QAAQ,CAAC,SAAS,EAAE,mBAAmB,CAUnE,CAAC;AAEJ,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,SAAS,CAkB3C,CAAC"}
1
+ {"version":3,"file":"provision.d.ts","sourceRoot":"","sources":["../../../../src/ser-des/config/provision.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,SAAS,MAAM,uBAAuB,CAAC;AACnD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAGzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAI5D,eAAO,MAAM,cAAc,EAAE,MAiF5B,CAAC;AAEF,eAAO,MAAM,gBAAgB,EAAE,QAAQ,CAAC,SAAS,EAAE,mBAAmB,CAUnE,CAAC;AAEJ,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,SAAS,CAsB3C,CAAC"}
@@ -2,7 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.dumpProvision = exports.resolveProvision = exports.parseProvision = void 0;
4
4
  const tokenize_1 = require("../tokenize");
5
- const parse_block_1 = require("../parse-block");
5
+ const tokenize_2 = require("../tokenize");
6
6
  const resolve_1 = require("../resolve");
7
7
  const parseProvision = function (id, data) {
8
8
  const result = {
@@ -15,24 +15,63 @@ const parseProvision = function (id, data) {
15
15
  ref: [],
16
16
  },
17
17
  };
18
- (0, parse_block_1.forEachEntry)(data, (command, value) => {
19
- if (command === 'modality') {
20
- result.modality = value();
18
+ // The provision's own walk — NOT forEachEntry. The free-form
19
+ // key/value pairs are part of the spec, and a free-form value may be
20
+ // MULTI-TOKEN (`subject claims Sample#data`): the pairwise walk
21
+ // cannot express that (the stray tokens abort the parse and poison
22
+ // everything after). An unknown keyword opens a free-form entry whose
23
+ // value is every token up to the next known keyword, joined;
24
+ // single-token values parse byte-identically to the old form.
25
+ const KNOWN = new Set(['modality', 'condition', 'reference']);
26
+ /** Unwrap one string token: quoted → unescape; brace block → strip the
27
+ * braces; bare → as-is. The string-form of parse-block's unwrapped(). */
28
+ const unwrapToken = (x) => {
29
+ if (x.length >= 2 && x.startsWith('"') && x.endsWith('"')) {
30
+ return (0, tokenize_2.unescapeString)(x.slice(1, -1));
21
31
  }
22
- else if (command === 'condition') {
23
- result.condition = (0, parse_block_1.unwrapped)(value);
32
+ if (x.length >= 2 && x.startsWith('{') && x.endsWith('}')) {
33
+ return (0, tokenize_2.unwrapBlock)(x);
24
34
  }
25
- else if (command === 'reference') {
26
- result._relations.ref = (0, tokenize_1.tokenizePackage)(value());
35
+ return x;
36
+ };
37
+ const t = (0, tokenize_1.tokenizePackage)(data);
38
+ let i = 0;
39
+ while (i < t.length) {
40
+ const keyword = t[i++];
41
+ if (keyword === 'modality') {
42
+ if (i >= t.length) {
43
+ throw new Error(`Parsing error: provision. ID ${id}: Expecting value for modality`);
44
+ }
45
+ result.modality = t[i++];
46
+ continue;
47
+ }
48
+ if (keyword === 'condition') {
49
+ if (i >= t.length) {
50
+ throw new Error(`Parsing error: provision. ID ${id}: Expecting value for condition`);
51
+ }
52
+ result.condition = unwrapToken(t[i++]);
53
+ continue;
54
+ }
55
+ if (keyword === 'reference') {
56
+ if (i >= t.length) {
57
+ throw new Error(`Parsing error: provision. ID ${id}: Expecting value for reference`);
58
+ }
59
+ result._relations.ref = (0, tokenize_1.tokenizePackage)(t[i++]);
60
+ continue;
27
61
  }
28
- else {
29
- // Unknown command becomes a subject key → its raw value.
30
- // (Provisions are intentionally extensible: free-form key/value
31
- // pairs are part of the spec.)
32
- result.subject.set(command, value());
62
+ // The free-form subject entry.
63
+ const rest = [];
64
+ while (i < t.length && !KNOWN.has(t[i])) {
65
+ rest.push(t[i++]);
33
66
  }
34
- return true;
35
- }, { construct: 'provision', id });
67
+ if (rest.length === 0) {
68
+ // A trailing bare keyword: a free-form key with an empty value.
69
+ result.subject.set(keyword, '');
70
+ break;
71
+ }
72
+ const value = rest.map(unwrapToken).join(' ');
73
+ result.subject.set(keyword, value);
74
+ }
36
75
  return ctx => {
37
76
  ctx.provisions[id] = result;
38
77
  return ctx;
@@ -53,7 +92,11 @@ exports.resolveProvision = resolveProvision;
53
92
  const dumpProvision = function (pro) {
54
93
  let out = 'provision ' + pro.id + ' {\n';
55
94
  pro.subject.forEach((value, key) => {
56
- out += ' ' + key + ' ' + value + '\n';
95
+ // A multi-word value dumps QUOTED — bare, it would reparse as
96
+ // several free-form entries. Single-token values stay bare
97
+ // (byte-identical to the corpus).
98
+ const v = value.includes(' ') ? `"${(0, tokenize_1.escapeString)(value)}"` : value;
99
+ out += ' ' + key + ' ' + v + '\n';
57
100
  });
58
101
  out += ' condition "' + (0, tokenize_1.escapeString)(pro.condition) + '"\n';
59
102
  if (pro.modality !== '') {
@@ -1 +1 @@
1
- {"version":3,"file":"provision.js","sourceRoot":"","sources":["../../../../src/ser-des/config/provision.ts"],"names":[],"mappings":";;;AAEA,0CAA4D;AAC5D,gDAAyD;AAGzD,wCAAgD;AAEzC,MAAM,cAAc,GAAW,UAAU,EAAE,EAAE,IAAI;IACtD,MAAM,MAAM,GAAwB;QAClC,OAAO,EAAE,IAAI,GAAG,EAAkB;QAClC,EAAE,EAAE,EAAE;QACN,QAAQ,EAAE,EAAE;QACZ,SAAS,EAAE,EAAE;QACb,GAAG,EAAE,EAAE;QACP,UAAU,EAAE;YACV,GAAG,EAAE,EAAE;SACR;KACF,CAAC;IAEF,IAAA,0BAAY,EACV,IAAI,EACJ,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE;QACjB,IAAI,OAAO,KAAK,UAAU,EAAE,CAAC;YAC3B,MAAM,CAAC,QAAQ,GAAG,KAAK,EAAE,CAAC;QAC5B,CAAC;aAAM,IAAI,OAAO,KAAK,WAAW,EAAE,CAAC;YACnC,MAAM,CAAC,SAAS,GAAG,IAAA,uBAAS,EAAC,KAAK,CAAC,CAAC;QACtC,CAAC;aAAM,IAAI,OAAO,KAAK,WAAW,EAAE,CAAC;YACnC,MAAM,CAAC,UAAU,CAAC,GAAG,GAAG,IAAA,0BAAe,EAAC,KAAK,EAAE,CAAC,CAAC;QACnD,CAAC;aAAM,CAAC;YACN,yDAAyD;YACzD,gEAAgE;YAChE,+BAA+B;YAC/B,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;QACvC,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC,EACD,EAAE,SAAS,EAAE,WAAW,EAAE,EAAE,EAAE,CAC/B,CAAC;IAEF,OAAO,GAAG,CAAC,EAAE;QACX,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC;QAC5B,OAAO,GAAG,CAAC;IACb,CAAC,CAAC;AACJ,CAAC,CAAC;AApCW,QAAA,cAAc,kBAoCzB;AAEK,MAAM,gBAAgB,GAC3B,UAAU,GAAG,EAAE,UAAU;IACvB,MAAM,GAAG,GAAgB,EAAE,CAAC;IAC5B,KAAK,MAAM,EAAE,IAAI,UAAU,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC;QAC3C,MAAM,CAAC,GAAG,IAAA,4BAAkB,EAAY,GAAG,EAAE,YAAY,EAAE,EAAE,CAAC,CAAC;QAC/D,IAAI,CAAC,KAAK,SAAS,EAAE,CAAC;YACpB,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACd,CAAC;IACH,CAAC;IACD,OAAO,EAAE,GAAG,UAAU,EAAE,GAAG,EAAE,CAAC;AAChC,CAAC,CAAC;AAVS,QAAA,gBAAgB,oBAUzB;AAEG,MAAM,aAAa,GAAsB,UAAU,GAAG;IAC3D,IAAI,GAAG,GAAW,YAAY,GAAG,GAAG,CAAC,EAAE,GAAG,MAAM,CAAC;IACjD,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,KAAa,EAAE,GAAW,EAAE,EAAE;QACjD,GAAG,IAAI,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,KAAK,GAAG,IAAI,CAAC;IACzC,CAAC,CAAC,CAAC;IACH,GAAG,IAAI,eAAe,GAAG,IAAA,uBAAY,EAAC,GAAG,CAAC,SAAS,CAAC,GAAG,KAAK,CAAC;IAC7D,IAAI,GAAG,CAAC,QAAQ,KAAK,EAAE,EAAE,CAAC;QACxB,GAAG,IAAI,aAAa,GAAG,GAAG,CAAC,QAAQ,GAAG,IAAI,CAAC;IAC7C,CAAC;IACD,IAAI,GAAG,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvB,GAAG,IAAI,iBAAiB,CAAC;QACzB,KAAK,MAAM,CAAC,IAAI,GAAG,CAAC,GAAG,EAAE,CAAC;YACxB,GAAG,IAAI,MAAM,GAAG,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC;QAC9B,CAAC;QACD,GAAG,IAAI,OAAO,CAAC;IACjB,CAAC;IACD,GAAG,IAAI,KAAK,CAAC;IACb,OAAO,GAAG,CAAC;AACb,CAAC,CAAC;AAlBW,QAAA,aAAa,iBAkBxB"}
1
+ {"version":3,"file":"provision.js","sourceRoot":"","sources":["../../../../src/ser-des/config/provision.ts"],"names":[],"mappings":"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"}
@@ -2548,11 +2548,38 @@ var Qt = (e, t) => {
2548
2548
  condition: "",
2549
2549
  ref: [],
2550
2550
  _relations: { ref: [] }
2551
- };
2552
- return y(t, (e, t) => (e === "modality" ? n.modality = t() : e === "condition" ? n.condition = x(t) : e === "reference" ? n._relations.ref = r(t()) : n.subject.set(e, t()), !0), {
2553
- construct: "provision",
2554
- id: e
2555
- }), (t) => (t.provisions[e] = n, t);
2551
+ }, a = /* @__PURE__ */ new Set([
2552
+ "modality",
2553
+ "condition",
2554
+ "reference"
2555
+ ]), s = (e) => e.length >= 2 && e.startsWith("\"") && e.endsWith("\"") ? o(e.slice(1, -1)) : e.length >= 2 && e.startsWith("{") && e.endsWith("}") ? i(e) : e, c = r(t), l = 0;
2556
+ for (; l < c.length;) {
2557
+ let t = c[l++];
2558
+ if (t === "modality") {
2559
+ if (l >= c.length) throw Error(`Parsing error: provision. ID ${e}: Expecting value for modality`);
2560
+ n.modality = c[l++];
2561
+ continue;
2562
+ }
2563
+ if (t === "condition") {
2564
+ if (l >= c.length) throw Error(`Parsing error: provision. ID ${e}: Expecting value for condition`);
2565
+ n.condition = s(c[l++]);
2566
+ continue;
2567
+ }
2568
+ if (t === "reference") {
2569
+ if (l >= c.length) throw Error(`Parsing error: provision. ID ${e}: Expecting value for reference`);
2570
+ n._relations.ref = r(c[l++]);
2571
+ continue;
2572
+ }
2573
+ let i = [];
2574
+ for (; l < c.length && !a.has(c[l]);) i.push(c[l++]);
2575
+ if (i.length === 0) {
2576
+ n.subject.set(t, "");
2577
+ break;
2578
+ }
2579
+ let o = i.map(s).join(" ");
2580
+ n.subject.set(t, o);
2581
+ }
2582
+ return (t) => (t.provisions[e] = n, t);
2556
2583
  }, rn = function(e, t) {
2557
2584
  let n = [];
2558
2585
  for (let r of t._relations.ref) {
@@ -2566,7 +2593,8 @@ var Qt = (e, t) => {
2566
2593
  }, an = function(e) {
2567
2594
  let t = "provision " + e.id + " {\n";
2568
2595
  if (e.subject.forEach((e, n) => {
2569
- t += " " + n + " " + e + "\n";
2596
+ let r = e.includes(" ") ? `"${s(e)}"` : e;
2597
+ t += " " + n + " " + r + "\n";
2570
2598
  }), t += " condition \"" + s(e.condition) + "\"\n", e.modality !== "" && (t += " modality " + e.modality + "\n"), e.ref.length > 0) {
2571
2599
  t += " reference {\n";
2572
2600
  for (let n of e.ref) t += " " + n.id + "\n";
@@ -4720,22 +4720,58 @@ var parseProvision = function(id, data) {
4720
4720
  ref: []
4721
4721
  }
4722
4722
  };
4723
- forEachEntry(
4724
- data,
4725
- (command, value) => {
4726
- if (command === "modality") {
4727
- result.modality = value();
4728
- } else if (command === "condition") {
4729
- result.condition = unwrapped(value);
4730
- } else if (command === "reference") {
4731
- result._relations.ref = tokenizePackage(value());
4732
- } else {
4733
- result.subject.set(command, value());
4723
+ const KNOWN = /* @__PURE__ */ new Set(["modality", "condition", "reference"]);
4724
+ const unwrapToken = (x) => {
4725
+ if (x.length >= 2 && x.startsWith('"') && x.endsWith('"')) {
4726
+ return unescapeString(x.slice(1, -1));
4727
+ }
4728
+ if (x.length >= 2 && x.startsWith("{") && x.endsWith("}")) {
4729
+ return unwrapBlock(x);
4730
+ }
4731
+ return x;
4732
+ };
4733
+ const t = tokenizePackage(data);
4734
+ let i = 0;
4735
+ while (i < t.length) {
4736
+ const keyword = t[i++];
4737
+ if (keyword === "modality") {
4738
+ if (i >= t.length) {
4739
+ throw new Error(
4740
+ `Parsing error: provision. ID ${id}: Expecting value for modality`
4741
+ );
4734
4742
  }
4735
- return true;
4736
- },
4737
- { construct: "provision", id }
4738
- );
4743
+ result.modality = t[i++];
4744
+ continue;
4745
+ }
4746
+ if (keyword === "condition") {
4747
+ if (i >= t.length) {
4748
+ throw new Error(
4749
+ `Parsing error: provision. ID ${id}: Expecting value for condition`
4750
+ );
4751
+ }
4752
+ result.condition = unwrapToken(t[i++]);
4753
+ continue;
4754
+ }
4755
+ if (keyword === "reference") {
4756
+ if (i >= t.length) {
4757
+ throw new Error(
4758
+ `Parsing error: provision. ID ${id}: Expecting value for reference`
4759
+ );
4760
+ }
4761
+ result._relations.ref = tokenizePackage(t[i++]);
4762
+ continue;
4763
+ }
4764
+ const rest = [];
4765
+ while (i < t.length && !KNOWN.has(t[i])) {
4766
+ rest.push(t[i++]);
4767
+ }
4768
+ if (rest.length === 0) {
4769
+ result.subject.set(keyword, "");
4770
+ break;
4771
+ }
4772
+ const value = rest.map(unwrapToken).join(" ");
4773
+ result.subject.set(keyword, value);
4774
+ }
4739
4775
  return (ctx) => {
4740
4776
  ctx.provisions[id] = result;
4741
4777
  return ctx;
@@ -4754,7 +4790,8 @@ var resolveProvision = function(ctx, unresolved) {
4754
4790
  var dumpProvision = function(pro) {
4755
4791
  let out = "provision " + pro.id + " {\n";
4756
4792
  pro.subject.forEach((value, key) => {
4757
- out += " " + key + " " + value + "\n";
4793
+ const v = value.includes(" ") ? `"${escapeString(value)}"` : value;
4794
+ out += " " + key + " " + v + "\n";
4758
4795
  });
4759
4796
  out += ' condition "' + escapeString(pro.condition) + '"\n';
4760
4797
  if (pro.modality !== "") {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@primmel/primmel",
3
- "version": "1.21.11",
3
+ "version": "1.21.12",
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",