@primmel/primmel 1.17.1 → 1.17.2

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":"evaluationProfile.d.ts","sourceRoot":"","sources":["../../../../src/ser-des/config/evaluationProfile.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAQ/C,OAAO,iBAAiB,MAAM,+BAA+B,CAAC;AAE9D,eAAO,MAAM,sBAAsB,EAAE,MA8BpC,CAAC;AAEF,eAAO,MAAM,qBAAqB,EAAE,MAAM,CAAC,iBAAiB,CAgB3D,CAAC"}
1
+ {"version":3,"file":"evaluationProfile.d.ts","sourceRoot":"","sources":["../../../../src/ser-des/config/evaluationProfile.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAQ/C,OAAO,iBAAiB,MAAM,+BAA+B,CAAC;AAE9D,eAAO,MAAM,sBAAsB,EAAE,MAoCpC,CAAC;AAEF,eAAO,MAAM,qBAAqB,EAAE,MAAM,CAAC,iBAAiB,CAsB3D,CAAC"}
@@ -16,11 +16,17 @@ const parseEvaluationProfile = (id, data) => {
16
16
  const profile = { id, dimensions: {}, description: '' };
17
17
  (0, parse_block_1.forEachEntry)(data, (keyword, value) => {
18
18
  if (keyword === 'dimensions') {
19
- // The open dimension-keyed map: alternating key/value tokens.
19
+ // The open dimension-keyed map: alternating key/value tokens. A
20
+ // set-cardinality dimension presets to a value LIST — the value
21
+ // arrives as one balanced `{ … }` token (the tokenizer's block
22
+ // rule); a scalar stays a single token.
20
23
  const t = (0, tokenize_1.default)((0, tokenize_1.unwrapBlock)(value()));
21
24
  for (let i = 0; i + 1 < t.length; i += 2) {
22
25
  const k = (0, tokenize_1.stripWrapping)((0, field_parser_1.stripColon)(t[i]));
23
- const v = (0, tokenize_1.stripWrapping)(t[i + 1]);
26
+ const raw = t[i + 1];
27
+ const v = raw.startsWith('{')
28
+ ? (0, tokenize_1.default)((0, tokenize_1.unwrapBlock)(raw)).map(tok => (0, tokenize_1.stripWrapping)(tok))
29
+ : (0, tokenize_1.stripWrapping)(raw);
24
30
  if (k) {
25
31
  profile.dimensions[k] = v;
26
32
  }
@@ -47,7 +53,13 @@ const dumpEvaluationProfile = function (p) {
47
53
  out +=
48
54
  ' dimensions { ' +
49
55
  keys
50
- .map(k => (0, field_parser_1.dumpBareSafe)(k) + ' ' + (0, field_parser_1.dumpBareSafe)(p.dimensions[k]))
56
+ .map(k => {
57
+ const v = p.dimensions[k];
58
+ // Set-cardinality presets dump as a value list (`{ co no }`).
59
+ return Array.isArray(v)
60
+ ? (0, field_parser_1.dumpBareSafe)(k) + ' { ' + v.map(field_parser_1.dumpBareSafe).join(' ') + ' }'
61
+ : (0, field_parser_1.dumpBareSafe)(k) + ' ' + (0, field_parser_1.dumpBareSafe)(v);
62
+ })
51
63
  .join(' ') +
52
64
  ' }\n';
53
65
  }
@@ -1 +1 @@
1
- {"version":3,"file":"evaluationProfile.js","sourceRoot":"","sources":["../../../../src/ser-des/config/evaluationProfile.ts"],"names":[],"mappings":";AAAA,wEAAwE;AACxE,qEAAqE;AACrE,6DAA6D;AAC7D,iEAAiE;AACjE,qEAAqE;AACrE,kEAAkE;AAClE,SAAS;AACT,wEAAwE;;;AAGxE,0CAIqB;AACrB,gDAA8C;AAC9C,iDAA0D;AAGnD,MAAM,sBAAsB,GAAW,CAAC,EAAU,EAAE,IAAY,EAAE,EAAE;IACzE,MAAM,OAAO,GAAsB,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC;IAE3E,IAAA,0BAAY,EACV,IAAI,EACJ,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE;QACjB,IAAI,OAAO,KAAK,YAAY,EAAE,CAAC;YAC7B,8DAA8D;YAC9D,MAAM,CAAC,GAAG,IAAA,kBAAQ,EAAC,IAAA,sBAAW,EAAC,KAAK,EAAE,CAAC,CAAC,CAAC;YACzC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;gBACzC,MAAM,CAAC,GAAG,IAAA,wBAAa,EAAC,IAAA,yBAAU,EAAC,CAAC,CAAC,CAAC,CAAE,CAAC,CAAC,CAAC;gBAC3C,MAAM,CAAC,GAAG,IAAA,wBAAa,EAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAE,CAAC,CAAC;gBACnC,IAAI,CAAC,EAAE,CAAC;oBACN,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;gBAC5B,CAAC;YACH,CAAC;QACH,CAAC;aAAM,IAAI,OAAO,KAAK,aAAa,EAAE,CAAC;YACrC,OAAO,CAAC,WAAW,GAAG,IAAA,wBAAa,EAAC,KAAK,EAAE,CAAC,CAAC;QAC/C,CAAC;aAAM,CAAC;YACN,OAAO,KAAK,CAAC;QACf,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC,EACD,EAAE,SAAS,EAAE,oBAAoB,EAAE,EAAE,EAAE,CACxC,CAAC;IAEF,OAAO,GAAG,CAAC,EAAE;QACX,GAAG,CAAC,kBAAkB,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC;QACrC,OAAO,GAAG,CAAC;IACb,CAAC,CAAC;AACJ,CAAC,CAAC;AA9BW,QAAA,sBAAsB,0BA8BjC;AAEK,MAAM,qBAAqB,GAA8B,UAAU,CAAC;IACzE,IAAI,GAAG,GAAW,qBAAqB,GAAG,IAAA,2BAAY,EAAC,CAAC,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC;IACtE,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;IACvC,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACpB,GAAG;YACD,iBAAiB;gBACjB,IAAI;qBACD,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAA,2BAAY,EAAC,CAAC,CAAC,GAAG,GAAG,GAAG,IAAA,2BAAY,EAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAE,CAAC,CAAC;qBAChE,IAAI,CAAC,GAAG,CAAC;gBACZ,MAAM,CAAC;IACX,CAAC;IACD,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;QAClB,GAAG,IAAI,iBAAiB,GAAG,IAAA,uBAAY,EAAC,CAAC,CAAC,WAAW,CAAC,GAAG,KAAK,CAAC;IACjE,CAAC;IACD,GAAG,IAAI,KAAK,CAAC;IACb,OAAO,GAAG,CAAC;AACb,CAAC,CAAC;AAhBW,QAAA,qBAAqB,yBAgBhC"}
1
+ {"version":3,"file":"evaluationProfile.js","sourceRoot":"","sources":["../../../../src/ser-des/config/evaluationProfile.ts"],"names":[],"mappings":"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"}
@@ -1,9 +1,11 @@
1
1
  export default interface EvaluationProfile {
2
2
  /** Kebab-case profile id (class-a-digital-nh). */
3
3
  id: string;
4
- /** The dimension-value preset: dimension id → value id, in declared
5
- * order (the byte contract keys dimension ids before description). */
6
- dimensions: Record<string, string>;
4
+ /** The dimension-value preset: dimension id → value id, or value-id
5
+ * list for a set-cardinality dimension (r144's measurand_components),
6
+ * in declared order (the byte contract keys dimension ids before
7
+ * description). */
8
+ dimensions: Record<string, string | string[]>;
7
9
  /** What the profile selects. */
8
10
  description: string;
9
11
  }
@@ -1 +1 @@
1
- {"version":3,"file":"EvaluationProfile.d.ts","sourceRoot":"","sources":["../../../src/types/EvaluationProfile.ts"],"names":[],"mappings":"AAuBA,MAAM,CAAC,OAAO,WAAW,iBAAiB;IACxC,kDAAkD;IAClD,EAAE,EAAE,MAAM,CAAC;IACX;2EACuE;IACvE,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACnC,gCAAgC;IAChC,WAAW,EAAE,MAAM,CAAC;CACrB"}
1
+ {"version":3,"file":"EvaluationProfile.d.ts","sourceRoot":"","sources":["../../../src/types/EvaluationProfile.ts"],"names":[],"mappings":"AAiCA,MAAM,CAAC,OAAO,WAAW,iBAAiB;IACxC,kDAAkD;IAClD,EAAE,EAAE,MAAM,CAAC;IACX;;;wBAGoB;IACpB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC,CAAC;IAC9C,gCAAgC;IAChC,WAAW,EAAE,MAAM,CAAC;CACrB"}
@@ -10,16 +10,26 @@
10
10
  // description "Class A digital, no humidity test"
11
11
  // }
12
12
  //
13
+ // A SET-cardinality dimension presets to a value LIST (r144's
14
+ // measurand_components — the extractive-co-nox preset selects several
15
+ // channels at once):
16
+ //
17
+ // evaluation_profile extractive-co-nox-ndir-cld {
18
+ // dimensions { measurand_components { co no } measuring_principle combined }
19
+ // description "Extractive CEMS: NDIR for CO + chemiluminescence for NOx"
20
+ // }
21
+ //
13
22
  // The dimensions map keys on DIMENSION ids (profiles select over
14
23
  // dimensions) — NOT the evaluation-dimension FIELD names (r60: profile
15
24
  // key humidity_class vs field name humidity_symbol); the two namespaces
16
- // never mix. Optional per package: r91/r144 declare none, and no
25
+ // never mix. Optional per package: r91 declares none, and no
17
26
  // empty-register requirement exists.
18
27
  //
19
28
  // C135 evaluation-profile-coherence: every dimensions key resolves to a
20
- // declared classification dimension and every value to one of that
21
- // dimension's declared values (per-register gated; an OPEN dimension
22
- // accepts any value) — the smart R4/R8 applicability mirror.
29
+ // declared classification dimension and every value (each list entry)
30
+ // to one of that dimension's declared values (per-register gated; an
31
+ // OPEN dimension accepts any value) — the smart R4/R8 applicability
32
+ // mirror.
23
33
  // ─────────────────────────────────────────────────────────────────────
24
34
  Object.defineProperty(exports, "__esModule", { value: true });
25
35
  //# sourceMappingURL=EvaluationProfile.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"EvaluationProfile.js","sourceRoot":"","sources":["../../../src/types/EvaluationProfile.ts"],"names":[],"mappings":";AAAA,wEAAwE;AACxE,6DAA6D;AAC7D,wEAAwE;AACxE,gEAAgE;AAChE,4DAA4D;AAC5D,EAAE;AACF,4CAA4C;AAC5C,2EAA2E;AAC3E,sDAAsD;AACtD,MAAM;AACN,EAAE;AACF,iEAAiE;AACjE,uEAAuE;AACvE,wEAAwE;AACxE,iEAAiE;AACjE,qCAAqC;AACrC,EAAE;AACF,wEAAwE;AACxE,mEAAmE;AACnE,qEAAqE;AACrE,6DAA6D;AAC7D,wEAAwE"}
1
+ {"version":3,"file":"EvaluationProfile.js","sourceRoot":"","sources":["../../../src/types/EvaluationProfile.ts"],"names":[],"mappings":";AAAA,wEAAwE;AACxE,6DAA6D;AAC7D,wEAAwE;AACxE,gEAAgE;AAChE,4DAA4D;AAC5D,EAAE;AACF,4CAA4C;AAC5C,2EAA2E;AAC3E,sDAAsD;AACtD,MAAM;AACN,EAAE;AACF,8DAA8D;AAC9D,sEAAsE;AACtE,qBAAqB;AACrB,EAAE;AACF,oDAAoD;AACpD,iFAAiF;AACjF,6EAA6E;AAC7E,MAAM;AACN,EAAE;AACF,iEAAiE;AACjE,uEAAuE;AACvE,wEAAwE;AACxE,6DAA6D;AAC7D,qCAAqC;AACrC,EAAE;AACF,wEAAwE;AACxE,sEAAsE;AACtE,qEAAqE;AACrE,oEAAoE;AACpE,UAAU;AACV,wEAAwE"}
@@ -7687,8 +7687,8 @@ var ss = {
7687
7687
  if (e === "dimensions") {
7688
7688
  let e = n(i(t()));
7689
7689
  for (let t = 0; t + 1 < e.length; t += 2) {
7690
- let n = a(P(e[t])), i = a(e[t + 1]);
7691
- n && (r.dimensions[n] = i);
7690
+ let o = a(P(e[t])), s = e[t + 1], c = s.startsWith("{") ? n(i(s)).map((e) => a(e)) : a(s);
7691
+ o && (r.dimensions[o] = c);
7692
7692
  }
7693
7693
  } else if (e === "description") r.description = a(t());
7694
7694
  else return !1;
@@ -7699,7 +7699,10 @@ var ss = {
7699
7699
  }), (t) => (t.evaluationProfiles[e] = r, t);
7700
7700
  }, Ds = function(e) {
7701
7701
  let t = "evaluation_profile " + N(e.id) + " {\n", n = Object.keys(e.dimensions);
7702
- return n.length > 0 && (t += " dimensions { " + n.map((t) => N(t) + " " + N(e.dimensions[t])).join(" ") + " }\n"), e.description && (t += " description \"" + s(e.description) + "\"\n"), t += "}\n", t;
7702
+ return n.length > 0 && (t += " dimensions { " + n.map((t) => {
7703
+ let n = e.dimensions[t];
7704
+ return Array.isArray(n) ? N(t) + " { " + n.map(N).join(" ") + " }" : N(t) + " " + N(n);
7705
+ }).join(" ") + " }\n"), e.description && (t += " description \"" + s(e.description) + "\"\n"), t += "}\n", t;
7703
7706
  }, Os = ["mandatory", "optional"];
7704
7707
  function ks(e) {
7705
7708
  return n(a(e)).map(P).map(a).filter((e) => e.length > 0);
@@ -14759,7 +14759,8 @@ var parseEvaluationProfile = (id, data) => {
14759
14759
  const t = tokenize(unwrapBlock(value()));
14760
14760
  for (let i = 0; i + 1 < t.length; i += 2) {
14761
14761
  const k = stripWrapping(stripColon(t[i]));
14762
- const v = stripWrapping(t[i + 1]);
14762
+ const raw = t[i + 1];
14763
+ const v = raw.startsWith("{") ? tokenize(unwrapBlock(raw)).map((tok) => stripWrapping(tok)) : stripWrapping(raw);
14763
14764
  if (k) {
14764
14765
  profile.dimensions[k] = v;
14765
14766
  }
@@ -14782,7 +14783,10 @@ var dumpEvaluationProfile = function(p) {
14782
14783
  let out = "evaluation_profile " + dumpBareSafe(p.id) + " {\n";
14783
14784
  const keys = Object.keys(p.dimensions);
14784
14785
  if (keys.length > 0) {
14785
- out += " dimensions { " + keys.map((k) => dumpBareSafe(k) + " " + dumpBareSafe(p.dimensions[k])).join(" ") + " }\n";
14786
+ out += " dimensions { " + keys.map((k) => {
14787
+ const v = p.dimensions[k];
14788
+ return Array.isArray(v) ? dumpBareSafe(k) + " { " + v.map(dumpBareSafe).join(" ") + " }" : dumpBareSafe(k) + " " + dumpBareSafe(v);
14789
+ }).join(" ") + " }\n";
14786
14790
  }
14787
14791
  if (p.description) {
14788
14792
  out += ' description "' + escapeString(p.description) + '"\n';
@@ -27478,11 +27482,13 @@ function checkPackage(dir, options = {}) {
27478
27482
  continue;
27479
27483
  }
27480
27484
  const values = dimIds.get(dim);
27481
- if (values && values.size > 0 && !values.has(value)) {
27482
- err(
27483
- "C135",
27484
- `${where}: dimensions entry "${dim}" names value "${value}", which the dimension does not declare (evaluation-profile-coherence)`
27485
- );
27485
+ for (const v of Array.isArray(value) ? value : [value]) {
27486
+ if (values && values.size > 0 && !values.has(v)) {
27487
+ err(
27488
+ "C135",
27489
+ `${where}: dimensions entry "${dim}" names value "${v}", which the dimension does not declare (evaluation-profile-coherence)`
27490
+ );
27491
+ }
27486
27492
  }
27487
27493
  }
27488
27494
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@primmel/primmel",
3
- "version": "1.17.1",
3
+ "version": "1.17.2",
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",