@primmel/primmel 1.3.2 → 1.4.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.
Files changed (423) hide show
  1. package/dist/index.d.ts +40 -4
  2. package/dist/index.d.ts.map +1 -1
  3. package/dist/index.js +112 -1
  4. package/dist/index.js.map +1 -1
  5. package/dist/src/check-allowlist.d.ts +56 -0
  6. package/dist/src/check-allowlist.d.ts.map +1 -0
  7. package/dist/src/check-allowlist.js +307 -0
  8. package/dist/src/check-allowlist.js.map +1 -0
  9. package/dist/src/check-rules.d.ts +17 -0
  10. package/dist/src/check-rules.d.ts.map +1 -0
  11. package/dist/src/check-rules.js +351 -0
  12. package/dist/src/check-rules.js.map +1 -0
  13. package/dist/src/check.d.ts +115 -0
  14. package/dist/src/check.d.ts.map +1 -0
  15. package/dist/src/check.js +4164 -0
  16. package/dist/src/check.js.map +1 -0
  17. package/dist/src/export/rdf-competency-questions.d.ts +11 -0
  18. package/dist/src/export/rdf-competency-questions.d.ts.map +1 -0
  19. package/dist/src/export/rdf-competency-questions.js +99 -0
  20. package/dist/src/export/rdf-competency-questions.js.map +1 -0
  21. package/dist/src/export/rdf-shapes.d.ts +3 -0
  22. package/dist/src/export/rdf-shapes.d.ts.map +1 -0
  23. package/dist/src/export/rdf-shapes.js +225 -0
  24. package/dist/src/export/rdf-shapes.js.map +1 -0
  25. package/dist/src/export/rdf-vocabulary.d.ts +125 -0
  26. package/dist/src/export/rdf-vocabulary.d.ts.map +1 -0
  27. package/dist/src/export/rdf-vocabulary.js +230 -0
  28. package/dist/src/export/rdf-vocabulary.js.map +1 -0
  29. package/dist/src/export/rdf.d.ts +92 -0
  30. package/dist/src/export/rdf.d.ts.map +1 -0
  31. package/dist/src/export/rdf.js +707 -0
  32. package/dist/src/export/rdf.js.map +1 -0
  33. package/dist/src/export/reqif.d.ts +81 -0
  34. package/dist/src/export/reqif.d.ts.map +1 -0
  35. package/dist/src/export/reqif.js +703 -0
  36. package/dist/src/export/reqif.js.map +1 -0
  37. package/dist/src/instance-resolution.d.ts +68 -0
  38. package/dist/src/instance-resolution.d.ts.map +1 -0
  39. package/dist/src/instance-resolution.js +239 -0
  40. package/dist/src/instance-resolution.js.map +1 -0
  41. package/dist/src/mapping-coverage.d.ts +220 -0
  42. package/dist/src/mapping-coverage.d.ts.map +1 -0
  43. package/dist/src/mapping-coverage.js +528 -0
  44. package/dist/src/mapping-coverage.js.map +1 -0
  45. package/dist/src/model-diff.d.ts +198 -0
  46. package/dist/src/model-diff.d.ts.map +1 -0
  47. package/dist/src/model-diff.js +914 -0
  48. package/dist/src/model-diff.js.map +1 -0
  49. package/dist/src/operational-state.d.ts +112 -0
  50. package/dist/src/operational-state.d.ts.map +1 -0
  51. package/dist/src/operational-state.js +162 -0
  52. package/dist/src/operational-state.js.map +1 -0
  53. package/dist/src/package-diff.d.ts +36 -0
  54. package/dist/src/package-diff.d.ts.map +1 -0
  55. package/dist/src/package-diff.js +104 -0
  56. package/dist/src/package-diff.js.map +1 -0
  57. package/dist/src/ser-des/config/acceptance.d.ts +10 -0
  58. package/dist/src/ser-des/config/acceptance.d.ts.map +1 -0
  59. package/dist/src/ser-des/config/acceptance.js +163 -0
  60. package/dist/src/ser-des/config/acceptance.js.map +1 -0
  61. package/dist/src/ser-des/config/activityArchetype.d.ts +5 -0
  62. package/dist/src/ser-des/config/activityArchetype.d.ts.map +1 -0
  63. package/dist/src/ser-des/config/activityArchetype.js +78 -0
  64. package/dist/src/ser-des/config/activityArchetype.js.map +1 -0
  65. package/dist/src/ser-des/config/artifact.d.ts +16 -0
  66. package/dist/src/ser-des/config/artifact.d.ts.map +1 -0
  67. package/dist/src/ser-des/config/artifact.js +392 -0
  68. package/dist/src/ser-des/config/artifact.js.map +1 -0
  69. package/dist/src/ser-des/config/calculation.d.ts.map +1 -1
  70. package/dist/src/ser-des/config/calculation.js +214 -12
  71. package/dist/src/ser-des/config/calculation.js.map +1 -1
  72. package/dist/src/ser-des/config/comment.d.ts +34 -0
  73. package/dist/src/ser-des/config/comment.d.ts.map +1 -0
  74. package/dist/src/ser-des/config/comment.js +121 -0
  75. package/dist/src/ser-des/config/comment.js.map +1 -0
  76. package/dist/src/ser-des/config/competenceKind.d.ts +8 -0
  77. package/dist/src/ser-des/config/competenceKind.d.ts.map +1 -0
  78. package/dist/src/ser-des/config/competenceKind.js +266 -0
  79. package/dist/src/ser-des/config/competenceKind.js.map +1 -0
  80. package/dist/src/ser-des/config/composition.d.ts +6 -0
  81. package/dist/src/ser-des/config/composition.d.ts.map +1 -0
  82. package/dist/src/ser-des/config/composition.js +165 -0
  83. package/dist/src/ser-des/config/composition.js.map +1 -0
  84. package/dist/src/ser-des/config/conformanceClass.d.ts +9 -0
  85. package/dist/src/ser-des/config/conformanceClass.d.ts.map +1 -0
  86. package/dist/src/ser-des/config/conformanceClass.js +128 -0
  87. package/dist/src/ser-des/config/conformanceClass.js.map +1 -0
  88. package/dist/src/ser-des/config/conformanceTest.d.ts +6 -0
  89. package/dist/src/ser-des/config/conformanceTest.d.ts.map +1 -0
  90. package/dist/src/ser-des/config/conformanceTest.js +929 -0
  91. package/dist/src/ser-des/config/conformanceTest.js.map +1 -0
  92. package/dist/src/ser-des/config/constraint.d.ts +5 -0
  93. package/dist/src/ser-des/config/constraint.d.ts.map +1 -0
  94. package/dist/src/ser-des/config/constraint.js +108 -0
  95. package/dist/src/ser-des/config/constraint.js.map +1 -0
  96. package/dist/src/ser-des/config/data.d.ts.map +1 -1
  97. package/dist/src/ser-des/config/data.js +105 -12
  98. package/dist/src/ser-des/config/data.js.map +1 -1
  99. package/dist/src/ser-des/config/design.d.ts +9 -0
  100. package/dist/src/ser-des/config/design.d.ts.map +1 -0
  101. package/dist/src/ser-des/config/design.js +847 -0
  102. package/dist/src/ser-des/config/design.js.map +1 -0
  103. package/dist/src/ser-des/config/discrepancyRecord.d.ts +5 -0
  104. package/dist/src/ser-des/config/discrepancyRecord.d.ts.map +1 -0
  105. package/dist/src/ser-des/config/discrepancyRecord.js +109 -0
  106. package/dist/src/ser-des/config/discrepancyRecord.js.map +1 -0
  107. package/dist/src/ser-des/config/dual.d.ts +9 -0
  108. package/dist/src/ser-des/config/dual.d.ts.map +1 -0
  109. package/dist/src/ser-des/config/dual.js +84 -0
  110. package/dist/src/ser-des/config/dual.js.map +1 -0
  111. package/dist/src/ser-des/config/field-parser.d.ts +92 -7
  112. package/dist/src/ser-des/config/field-parser.d.ts.map +1 -1
  113. package/dist/src/ser-des/config/field-parser.js +832 -29
  114. package/dist/src/ser-des/config/field-parser.js.map +1 -1
  115. package/dist/src/ser-des/config/form.d.ts.map +1 -1
  116. package/dist/src/ser-des/config/form.js +355 -134
  117. package/dist/src/ser-des/config/form.js.map +1 -1
  118. package/dist/src/ser-des/config/formulasUsed.d.ts +9 -0
  119. package/dist/src/ser-des/config/formulasUsed.d.ts.map +1 -0
  120. package/dist/src/ser-des/config/formulasUsed.js +126 -0
  121. package/dist/src/ser-des/config/formulasUsed.js.map +1 -0
  122. package/dist/src/ser-des/config/index.d.ts.map +1 -1
  123. package/dist/src/ser-des/config/index.js +180 -1
  124. package/dist/src/ser-des/config/index.js.map +1 -1
  125. package/dist/src/ser-des/config/instance.d.ts +22 -0
  126. package/dist/src/ser-des/config/instance.d.ts.map +1 -0
  127. package/dist/src/ser-des/config/instance.js +266 -0
  128. package/dist/src/ser-des/config/instance.js.map +1 -0
  129. package/dist/src/ser-des/config/invariant.d.ts +9 -0
  130. package/dist/src/ser-des/config/invariant.d.ts.map +1 -0
  131. package/dist/src/ser-des/config/invariant.js +143 -0
  132. package/dist/src/ser-des/config/invariant.js.map +1 -0
  133. package/dist/src/ser-des/config/mapProfile.d.ts.map +1 -1
  134. package/dist/src/ser-des/config/mapProfile.js +199 -14
  135. package/dist/src/ser-des/config/mapProfile.js.map +1 -1
  136. package/dist/src/ser-des/config/metadata.js +6 -6
  137. package/dist/src/ser-des/config/metadata.js.map +1 -1
  138. package/dist/src/ser-des/config/monitor.d.ts +9 -0
  139. package/dist/src/ser-des/config/monitor.d.ts.map +1 -0
  140. package/dist/src/ser-des/config/monitor.js +322 -0
  141. package/dist/src/ser-des/config/monitor.js.map +1 -0
  142. package/dist/src/ser-des/config/note.d.ts.map +1 -1
  143. package/dist/src/ser-des/config/note.js +16 -1
  144. package/dist/src/ser-des/config/note.js.map +1 -1
  145. package/dist/src/ser-des/config/packageManifest.d.ts +5 -0
  146. package/dist/src/ser-des/config/packageManifest.d.ts.map +1 -0
  147. package/dist/src/ser-des/config/packageManifest.js +349 -0
  148. package/dist/src/ser-des/config/packageManifest.js.map +1 -0
  149. package/dist/src/ser-des/config/passport.d.ts +9 -0
  150. package/dist/src/ser-des/config/passport.d.ts.map +1 -0
  151. package/dist/src/ser-des/config/passport.js +191 -0
  152. package/dist/src/ser-des/config/passport.js.map +1 -0
  153. package/dist/src/ser-des/config/process.d.ts +5 -3
  154. package/dist/src/ser-des/config/process.d.ts.map +1 -1
  155. package/dist/src/ser-des/config/process.js +915 -8
  156. package/dist/src/ser-des/config/process.js.map +1 -1
  157. package/dist/src/ser-des/config/quantity.d.ts +21 -0
  158. package/dist/src/ser-des/config/quantity.d.ts.map +1 -0
  159. package/dist/src/ser-des/config/quantity.js +114 -0
  160. package/dist/src/ser-des/config/quantity.js.map +1 -0
  161. package/dist/src/ser-des/config/quantityRegister.d.ts +9 -0
  162. package/dist/src/ser-des/config/quantityRegister.d.ts.map +1 -0
  163. package/dist/src/ser-des/config/quantityRegister.js +202 -0
  164. package/dist/src/ser-des/config/quantityRegister.js.map +1 -0
  165. package/dist/src/ser-des/config/reference.d.ts.map +1 -1
  166. package/dist/src/ser-des/config/reference.js +6 -0
  167. package/dist/src/ser-des/config/reference.js.map +1 -1
  168. package/dist/src/ser-des/config/referenceMaterial.d.ts +5 -0
  169. package/dist/src/ser-des/config/referenceMaterial.d.ts.map +1 -0
  170. package/dist/src/ser-des/config/referenceMaterial.js +296 -0
  171. package/dist/src/ser-des/config/referenceMaterial.js.map +1 -0
  172. package/dist/src/ser-des/config/requirement.d.ts +16 -0
  173. package/dist/src/ser-des/config/requirement.d.ts.map +1 -0
  174. package/dist/src/ser-des/config/requirement.js +579 -0
  175. package/dist/src/ser-des/config/requirement.js.map +1 -0
  176. package/dist/src/ser-des/config/role.d.ts.map +1 -1
  177. package/dist/src/ser-des/config/role.js +12 -0
  178. package/dist/src/ser-des/config/role.js.map +1 -1
  179. package/dist/src/ser-des/config/series.d.ts +9 -0
  180. package/dist/src/ser-des/config/series.d.ts.map +1 -0
  181. package/dist/src/ser-des/config/series.js +121 -0
  182. package/dist/src/ser-des/config/series.js.map +1 -0
  183. package/dist/src/ser-des/config/sourceDiscrepancy.d.ts +11 -0
  184. package/dist/src/ser-des/config/sourceDiscrepancy.d.ts.map +1 -0
  185. package/dist/src/ser-des/config/sourceDiscrepancy.js +83 -0
  186. package/dist/src/ser-des/config/sourceDiscrepancy.js.map +1 -0
  187. package/dist/src/ser-des/config/stateMachine.d.ts.map +1 -1
  188. package/dist/src/ser-des/config/stateMachine.js +189 -38
  189. package/dist/src/ser-des/config/stateMachine.js.map +1 -1
  190. package/dist/src/ser-des/config/subform.d.ts.map +1 -1
  191. package/dist/src/ser-des/config/subform.js +25 -33
  192. package/dist/src/ser-des/config/subform.js.map +1 -1
  193. package/dist/src/ser-des/config/subject.d.ts +58 -0
  194. package/dist/src/ser-des/config/subject.d.ts.map +1 -0
  195. package/dist/src/ser-des/config/subject.js +2093 -0
  196. package/dist/src/ser-des/config/subject.js.map +1 -0
  197. package/dist/src/ser-des/config/symbol.d.ts.map +1 -1
  198. package/dist/src/ser-des/config/symbol.js +130 -6
  199. package/dist/src/ser-des/config/symbol.js.map +1 -1
  200. package/dist/src/ser-des/config/table.d.ts.map +1 -1
  201. package/dist/src/ser-des/config/table.js +373 -7
  202. package/dist/src/ser-des/config/table.js.map +1 -1
  203. package/dist/src/ser-des/config/term.d.ts.map +1 -1
  204. package/dist/src/ser-des/config/term.js +107 -0
  205. package/dist/src/ser-des/config/term.js.map +1 -1
  206. package/dist/src/ser-des/config/testPointSet.d.ts +5 -0
  207. package/dist/src/ser-des/config/testPointSet.d.ts.map +1 -0
  208. package/dist/src/ser-des/config/testPointSet.js +199 -0
  209. package/dist/src/ser-des/config/testPointSet.js.map +1 -0
  210. package/dist/src/ser-des/config/testSequence.d.ts +9 -0
  211. package/dist/src/ser-des/config/testSequence.d.ts.map +1 -0
  212. package/dist/src/ser-des/config/testSequence.js +206 -0
  213. package/dist/src/ser-des/config/testSequence.js.map +1 -0
  214. package/dist/src/ser-des/config/text.d.ts +5 -0
  215. package/dist/src/ser-des/config/text.d.ts.map +1 -0
  216. package/dist/src/ser-des/config/text.js +106 -0
  217. package/dist/src/ser-des/config/text.js.map +1 -0
  218. package/dist/src/ser-des/config/twin.d.ts +31 -0
  219. package/dist/src/ser-des/config/twin.d.ts.map +1 -0
  220. package/dist/src/ser-des/config/twin.js +362 -0
  221. package/dist/src/ser-des/config/twin.js.map +1 -0
  222. package/dist/src/ser-des/config/verdict.d.ts +5 -0
  223. package/dist/src/ser-des/config/verdict.d.ts.map +1 -0
  224. package/dist/src/ser-des/config/verdict.js +159 -0
  225. package/dist/src/ser-des/config/verdict.js.map +1 -0
  226. package/dist/src/ser-des/config/viewProfile.d.ts.map +1 -1
  227. package/dist/src/ser-des/config/viewProfile.js +7 -0
  228. package/dist/src/ser-des/config/viewProfile.js.map +1 -1
  229. package/dist/src/ser-des/includes.d.ts.map +1 -1
  230. package/dist/src/ser-des/includes.js +5 -2
  231. package/dist/src/ser-des/includes.js.map +1 -1
  232. package/dist/src/ser-des/index.d.ts +12 -0
  233. package/dist/src/ser-des/index.d.ts.map +1 -1
  234. package/dist/src/ser-des/index.js +42 -0
  235. package/dist/src/ser-des/index.js.map +1 -1
  236. package/dist/src/ser-des/package.d.ts +53 -0
  237. package/dist/src/ser-des/package.d.ts.map +1 -0
  238. package/dist/src/ser-des/package.js +404 -0
  239. package/dist/src/ser-des/package.js.map +1 -0
  240. package/dist/src/ser-des/parse-block.d.ts.map +1 -1
  241. package/dist/src/ser-des/parse-block.js +7 -1
  242. package/dist/src/ser-des/parse-block.js.map +1 -1
  243. package/dist/src/ser-des/parse.d.ts.map +1 -1
  244. package/dist/src/ser-des/parse.js +45 -0
  245. package/dist/src/ser-des/parse.js.map +1 -1
  246. package/dist/src/ser-des/prm.d.ts +53 -0
  247. package/dist/src/ser-des/prm.d.ts.map +1 -0
  248. package/dist/src/ser-des/prm.js +257 -0
  249. package/dist/src/ser-des/prm.js.map +1 -0
  250. package/dist/src/ser-des/resolve.d.ts.map +1 -1
  251. package/dist/src/ser-des/resolve.js +1 -0
  252. package/dist/src/ser-des/resolve.js.map +1 -1
  253. package/dist/src/ser-des/tokenize.d.ts +11 -0
  254. package/dist/src/ser-des/tokenize.d.ts.map +1 -1
  255. package/dist/src/ser-des/tokenize.js +28 -1
  256. package/dist/src/ser-des/tokenize.js.map +1 -1
  257. package/dist/src/ser-des/types.d.ts +56 -1
  258. package/dist/src/ser-des/types.d.ts.map +1 -1
  259. package/dist/src/spelling.d.ts +35 -0
  260. package/dist/src/spelling.d.ts.map +1 -0
  261. package/dist/src/spelling.js +140 -0
  262. package/dist/src/spelling.js.map +1 -0
  263. package/dist/src/text-coverage.d.ts +164 -0
  264. package/dist/src/text-coverage.d.ts.map +1 -0
  265. package/dist/src/text-coverage.js +679 -0
  266. package/dist/src/text-coverage.js.map +1 -0
  267. package/dist/src/time.d.ts +55 -0
  268. package/dist/src/time.d.ts.map +1 -0
  269. package/dist/src/time.js +223 -0
  270. package/dist/src/time.js.map +1 -0
  271. package/dist/src/type-expr.d.ts +31 -0
  272. package/dist/src/type-expr.d.ts.map +1 -0
  273. package/dist/src/type-expr.js +110 -0
  274. package/dist/src/type-expr.js.map +1 -0
  275. package/dist/src/types/Acceptance.d.ts +31 -0
  276. package/dist/src/types/Acceptance.d.ts.map +1 -0
  277. package/dist/src/types/Acceptance.js +12 -0
  278. package/dist/src/types/Acceptance.js.map +1 -0
  279. package/dist/src/types/ActivityArchetype.d.ts +14 -0
  280. package/dist/src/types/ActivityArchetype.d.ts.map +1 -0
  281. package/dist/src/types/ActivityArchetype.js +17 -0
  282. package/dist/src/types/ActivityArchetype.js.map +1 -0
  283. package/dist/src/types/Artifact.d.ts +117 -0
  284. package/dist/src/types/Artifact.d.ts.map +1 -0
  285. package/dist/src/types/Artifact.js +35 -0
  286. package/dist/src/types/Artifact.js.map +1 -0
  287. package/dist/src/types/Calculation.d.ts +49 -0
  288. package/dist/src/types/Calculation.d.ts.map +1 -1
  289. package/dist/src/types/Comment.d.ts +23 -0
  290. package/dist/src/types/Comment.d.ts.map +1 -0
  291. package/dist/src/types/Comment.js +3 -0
  292. package/dist/src/types/Comment.js.map +1 -0
  293. package/dist/src/types/CompetenceKind.d.ts +70 -0
  294. package/dist/src/types/CompetenceKind.d.ts.map +1 -0
  295. package/dist/src/types/CompetenceKind.js +3 -0
  296. package/dist/src/types/CompetenceKind.js.map +1 -0
  297. package/dist/src/types/Composition.d.ts +80 -0
  298. package/dist/src/types/Composition.d.ts.map +1 -0
  299. package/dist/src/types/Composition.js +44 -0
  300. package/dist/src/types/Composition.js.map +1 -0
  301. package/dist/src/types/ConformanceClass.d.ts +22 -0
  302. package/dist/src/types/ConformanceClass.d.ts.map +1 -0
  303. package/dist/src/types/ConformanceClass.js +7 -0
  304. package/dist/src/types/ConformanceClass.js.map +1 -0
  305. package/dist/src/types/ConformanceTest.d.ts +206 -0
  306. package/dist/src/types/ConformanceTest.d.ts.map +1 -0
  307. package/dist/src/types/ConformanceTest.js +3 -0
  308. package/dist/src/types/ConformanceTest.js.map +1 -0
  309. package/dist/src/types/Constraint.d.ts +34 -0
  310. package/dist/src/types/Constraint.d.ts.map +1 -0
  311. package/dist/src/types/Constraint.js +3 -0
  312. package/dist/src/types/Constraint.js.map +1 -0
  313. package/dist/src/types/Design.d.ts +147 -0
  314. package/dist/src/types/Design.d.ts.map +1 -0
  315. package/dist/src/types/Design.js +10 -0
  316. package/dist/src/types/Design.js.map +1 -0
  317. package/dist/src/types/DiscrepancyRecord.d.ts +42 -0
  318. package/dist/src/types/DiscrepancyRecord.d.ts.map +1 -0
  319. package/dist/src/types/DiscrepancyRecord.js +3 -0
  320. package/dist/src/types/DiscrepancyRecord.js.map +1 -0
  321. package/dist/src/types/Form.d.ts +127 -1
  322. package/dist/src/types/Form.d.ts.map +1 -1
  323. package/dist/src/types/FormulasUsed.d.ts +95 -0
  324. package/dist/src/types/FormulasUsed.d.ts.map +1 -0
  325. package/dist/src/types/FormulasUsed.js +64 -0
  326. package/dist/src/types/FormulasUsed.js.map +1 -0
  327. package/dist/src/types/Instance.d.ts +105 -0
  328. package/dist/src/types/Instance.d.ts.map +1 -0
  329. package/dist/src/types/Instance.js +40 -0
  330. package/dist/src/types/Instance.js.map +1 -0
  331. package/dist/src/types/Invariant.d.ts +82 -0
  332. package/dist/src/types/Invariant.d.ts.map +1 -0
  333. package/dist/src/types/Invariant.js +50 -0
  334. package/dist/src/types/Invariant.js.map +1 -0
  335. package/dist/src/types/MapProfile.d.ts +36 -1
  336. package/dist/src/types/MapProfile.d.ts.map +1 -1
  337. package/dist/src/types/Monitor.d.ts +144 -0
  338. package/dist/src/types/Monitor.d.ts.map +1 -0
  339. package/dist/src/types/Monitor.js +74 -0
  340. package/dist/src/types/Monitor.js.map +1 -0
  341. package/dist/src/types/Note.d.ts +4 -1
  342. package/dist/src/types/Note.d.ts.map +1 -1
  343. package/dist/src/types/Package.d.ts +161 -0
  344. package/dist/src/types/Package.d.ts.map +1 -0
  345. package/dist/src/types/Package.js +3 -0
  346. package/dist/src/types/Package.js.map +1 -0
  347. package/dist/src/types/Passport.d.ts +125 -0
  348. package/dist/src/types/Passport.d.ts.map +1 -0
  349. package/dist/src/types/Passport.js +84 -0
  350. package/dist/src/types/Passport.js.map +1 -0
  351. package/dist/src/types/Quantity.d.ts +99 -0
  352. package/dist/src/types/Quantity.d.ts.map +1 -0
  353. package/dist/src/types/Quantity.js +24 -0
  354. package/dist/src/types/Quantity.js.map +1 -0
  355. package/dist/src/types/Reference.d.ts +2 -0
  356. package/dist/src/types/Reference.d.ts.map +1 -1
  357. package/dist/src/types/ReferenceMaterial.d.ts +53 -0
  358. package/dist/src/types/ReferenceMaterial.d.ts.map +1 -0
  359. package/dist/src/types/ReferenceMaterial.js +14 -0
  360. package/dist/src/types/ReferenceMaterial.js.map +1 -0
  361. package/dist/src/types/Requirement.d.ts +111 -0
  362. package/dist/src/types/Requirement.d.ts.map +1 -0
  363. package/dist/src/types/Requirement.js +10 -0
  364. package/dist/src/types/Requirement.js.map +1 -0
  365. package/dist/src/types/Role.d.ts +4 -0
  366. package/dist/src/types/Role.d.ts.map +1 -1
  367. package/dist/src/types/Series.d.ts +31 -0
  368. package/dist/src/types/Series.d.ts.map +1 -0
  369. package/dist/src/types/Series.js +14 -0
  370. package/dist/src/types/Series.js.map +1 -0
  371. package/dist/src/types/SourceDiscrepancy.d.ts +21 -0
  372. package/dist/src/types/SourceDiscrepancy.d.ts.map +1 -0
  373. package/dist/src/types/SourceDiscrepancy.js +13 -0
  374. package/dist/src/types/SourceDiscrepancy.js.map +1 -0
  375. package/dist/src/types/Standard.d.ts +68 -0
  376. package/dist/src/types/Standard.d.ts.map +1 -1
  377. package/dist/src/types/StateMachine.d.ts +43 -0
  378. package/dist/src/types/StateMachine.d.ts.map +1 -1
  379. package/dist/src/types/StateMachine.js +7 -0
  380. package/dist/src/types/StateMachine.js.map +1 -1
  381. package/dist/src/types/Subject.d.ts +432 -0
  382. package/dist/src/types/Subject.d.ts.map +1 -0
  383. package/dist/src/types/Subject.js +13 -0
  384. package/dist/src/types/Subject.js.map +1 -0
  385. package/dist/src/types/Symbol.d.ts +31 -1
  386. package/dist/src/types/Symbol.d.ts.map +1 -1
  387. package/dist/src/types/Table.d.ts +43 -0
  388. package/dist/src/types/Table.d.ts.map +1 -1
  389. package/dist/src/types/Term.d.ts +29 -0
  390. package/dist/src/types/Term.d.ts.map +1 -1
  391. package/dist/src/types/TestPointSet.d.ts +33 -0
  392. package/dist/src/types/TestPointSet.d.ts.map +1 -0
  393. package/dist/src/types/TestPointSet.js +11 -0
  394. package/dist/src/types/TestPointSet.js.map +1 -0
  395. package/dist/src/types/TestSequence.d.ts +105 -0
  396. package/dist/src/types/TestSequence.d.ts.map +1 -0
  397. package/dist/src/types/TestSequence.js +65 -0
  398. package/dist/src/types/TestSequence.js.map +1 -0
  399. package/dist/src/types/Text.d.ts +21 -0
  400. package/dist/src/types/Text.d.ts.map +1 -0
  401. package/dist/src/types/Text.js +38 -0
  402. package/dist/src/types/Text.js.map +1 -0
  403. package/dist/src/types/Time.d.ts +43 -0
  404. package/dist/src/types/Time.d.ts.map +1 -0
  405. package/dist/src/types/Time.js +14 -0
  406. package/dist/src/types/Time.js.map +1 -0
  407. package/dist/src/types/Twin.d.ts +155 -0
  408. package/dist/src/types/Twin.d.ts.map +1 -0
  409. package/dist/src/types/Twin.js +102 -0
  410. package/dist/src/types/Twin.js.map +1 -0
  411. package/dist/src/types/Verdict.d.ts +40 -0
  412. package/dist/src/types/Verdict.d.ts.map +1 -0
  413. package/dist/src/types/Verdict.js +14 -0
  414. package/dist/src/types/Verdict.js.map +1 -0
  415. package/dist/src/types/ViewProfile.d.ts +6 -0
  416. package/dist/src/types/ViewProfile.d.ts.map +1 -1
  417. package/dist/src/types/data.d.ts +27 -0
  418. package/dist/src/types/data.d.ts.map +1 -1
  419. package/dist/src/types/process.d.ts +231 -0
  420. package/dist/src/types/process.d.ts.map +1 -1
  421. package/dist-browser/index.mjs +6695 -662
  422. package/dist-cli/primmel.mjs +21453 -0
  423. package/package.json +61 -5
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  // ─────────────────────────────────────────────────────────────────────
3
- // Shared FormField parser.
3
+ // Shared FormField parser + dumper.
4
4
  //
5
5
  // Both form.ts (for `form` construct) and subform.ts (for `subform`
6
6
  // construct) need to parse the same `field <name> { ... }` block shape.
@@ -9,25 +9,241 @@
9
9
  //
10
10
  // Extracted here so both can import without circular-dependency issues
11
11
  // (this file imports only from tokenize + types, never from form/subform).
12
+ //
13
+ // The module has since become the shared home for the small field-level
14
+ // helpers every construct ser-des needs — dumpBareSafe, stripColon,
15
+ // readBalanced, and the verbatim-identical subBlockTokens /
16
+ // readEntryTokens / readSource copies the passport/invariant/monitor/
17
+ // formulasUsed and source-carrying constructs each carried (the E11
18
+ // review minor).
19
+ //
20
+ // v2 parser repair (W1a):
21
+ // - Scalar values use stripWrapping (unwrapBlock mangles bare tokens:
22
+ // `true` → `ru`, `computed` → `ompute`, `42` → ``).
23
+ // - Typed field heads (`field x : number { … }`) are parsed, not lost.
24
+ // - calculation_bindings / evaluation / items / nested fields /
25
+ // min_items / max_items are POPULATED (previously parsed-then-skipped).
26
+ // - Nested `subform_ref` inside a field block is captured.
27
+ // - dumpFormField emits the full field fidelity (lossless round-trip).
12
28
  // ─────────────────────────────────────────────────────────────────────
13
29
  Object.defineProperty(exports, "__esModule", { value: true });
30
+ exports.readValueToken = readValueToken;
31
+ exports.parseValueEntries = parseValueEntries;
32
+ exports.dumpBareSafe = dumpBareSafe;
33
+ exports.stripColon = stripColon;
34
+ exports.readBalanced = readBalanced;
35
+ exports.subBlockTokens = subBlockTokens;
36
+ exports.readEntryTokens = readEntryTokens;
37
+ exports.readSource = readSource;
38
+ exports.readFieldHead = readFieldHead;
14
39
  exports.parseFormField = parseFormField;
40
+ exports.parseApplicability = parseApplicability;
41
+ exports.parseSubformRef = parseSubformRef;
42
+ exports.dumpFormField = dumpFormField;
43
+ exports.dumpApplicabilityEntries = dumpApplicabilityEntries;
44
+ exports.parseRoleReferences = parseRoleReferences;
45
+ exports.dumpRoleReferences = dumpRoleReferences;
15
46
  const tokenize_1 = require("../tokenize");
47
+ const tokenize_2 = require("../tokenize");
48
+ const series_1 = require("./series");
49
+ const sourceDiscrepancy_1 = require("./sourceDiscrepancy");
50
+ /**
51
+ * Read a value token, accumulating inline `ocl{…}` expressions that the
52
+ * whitespace tokenizer splits (braces are only block delimiters at token
53
+ * start, so `ocl{(a - b) / c}` arrives as several tokens).
54
+ */
55
+ function readValueToken(t, i) {
56
+ const tok = t[i] ?? '';
57
+ if (!tok.startsWith('ocl{')) {
58
+ return { text: tok, next: i + 1 };
59
+ }
60
+ const delta = (s) => (s.match(/\{/g) || []).length - (s.match(/\}/g) || []).length;
61
+ let text = tok;
62
+ let depth = delta(tok);
63
+ let j = i + 1;
64
+ while (depth > 0 && j < t.length) {
65
+ const nt = t[j++];
66
+ depth += delta(nt);
67
+ text += ' ' + nt;
68
+ }
69
+ return { text, next: j };
70
+ }
71
+ /**
72
+ * Parse a values / enum_values block: bare entries, optionally with a
73
+ * display-label block — `{ kg { label "Kg" } g }` or `[A, B]`.
74
+ */
75
+ function parseValueEntries(raw) {
76
+ const inner = raw
77
+ .trim()
78
+ .replace(/^[[{]/, '')
79
+ .replace(/[\]}]$/, '');
80
+ const t = (0, tokenize_2.tokenizePackage)(inner);
81
+ const out = [];
82
+ let i = 0;
83
+ while (i < t.length) {
84
+ const entry = (0, tokenize_2.stripWrapping)(t[i++].replace(/,$/, ''));
85
+ if (!entry) {
86
+ continue;
87
+ }
88
+ if (i < t.length && t[i].startsWith('{')) {
89
+ const lb = (0, tokenize_2.tokenizePackage)((0, tokenize_2.unwrapBlock)(t[i++]));
90
+ let label = '';
91
+ for (let k = 0; k + 1 < lb.length; k += 2) {
92
+ if (lb[k] === 'label') {
93
+ label = (0, tokenize_2.stripWrapping)(lb[k + 1]);
94
+ }
95
+ }
96
+ out.push({ value: entry, label });
97
+ }
98
+ else {
99
+ out.push(entry);
100
+ }
101
+ }
102
+ return out;
103
+ }
104
+ /** Dump one values / enum_values entry (label block when present). */
105
+ function dumpValueEntry(e) {
106
+ if (typeof e === 'string') {
107
+ return e;
108
+ }
109
+ return e.value + ' { label "' + (0, tokenize_2.escapeString)(e.label) + '" }';
110
+ }
111
+ /**
112
+ * Emit a bare value safely: quote it when it contains spaces/braces/quotes
113
+ * OR ends in a colon OR STARTS with a comment opener (`#` or `//`).
114
+ * A bare trailing-colon token re-parses as a KEY head (`note : ref:` reads
115
+ * back as two entries — see isKeyHead in the instance ser-des), so any
116
+ * value ending in `:` must be quoted on dump. The tokenizer only treats
117
+ * `#`/`//` as a comment BETWEEN tokens — a mid-token `#` or `//` is
118
+ * literal (`StdS#Process5` round-trips bare; the v2 map_profile form
119
+ * depends on it) — but a LEADING `#` or `//` starts a to-end-of-line
120
+ * comment on re-parse (tokenize.ts's two comment openers) and the value
121
+ * vanishes, so a value starting with either must never dump bare (the
122
+ * E10 vocabulary-value exposure; the `//` half is TODO.v2/13 item 1).
123
+ */
124
+ function dumpBareSafe(v) {
125
+ return /[\s{}"]/.test(v) ||
126
+ v.endsWith(':') ||
127
+ v.startsWith('#') ||
128
+ v.startsWith('//')
129
+ ? '"' + (0, tokenize_2.escapeString)(v) + '"'
130
+ : v;
131
+ }
132
+ /** Strip one trailing colon: `status:` → `status` (tokenizer keeps colons attached). */
133
+ function stripColon(x) {
134
+ return x.endsWith(':') ? x.slice(0, -1) : x;
135
+ }
136
+ /**
137
+ * Read a balanced `[...]` or `{...}` value that may span whitespace.
138
+ * The tokenizer is brace-aware only for `{...}`; `[A, C]` lists split
139
+ * across tokens. `t[i]` is the token to start from; returns the joined
140
+ * text and the next unconsumed index.
141
+ */
142
+ function readBalanced(t, i) {
143
+ const first = t[i] ?? '';
144
+ if (!first.startsWith('[')) {
145
+ return { text: first, next: i + 1 };
146
+ }
147
+ let text = first;
148
+ let j = i + 1;
149
+ while (!text.includes(']') && j < t.length) {
150
+ text += ' ' + t[j++];
151
+ }
152
+ return { text, next: j };
153
+ }
154
+ /** Strip the sketch's optional `;` separators from a sub-block stream. */
155
+ function subBlockTokens(block) {
156
+ return (0, tokenize_2.tokenizePackage)(block)
157
+ .map(s => s.replace(/^;+|;+$/g, ''))
158
+ .filter(s => s.length > 0);
159
+ }
160
+ /** Read a content-entry token stream: `{ a b }` block, or a single bare
161
+ * entry. Commas are optional noise (the §15.8 sketch spelling). */
162
+ function readEntryTokens(value) {
163
+ if (value.startsWith('{')) {
164
+ return subBlockTokens((0, tokenize_2.unwrapBlock)(value))
165
+ .flatMap(s => s.split(','))
166
+ .map(s => (0, tokenize_2.stripWrapping)(s.trim()))
167
+ .filter(s => s.length > 0);
168
+ }
169
+ const single = (0, tokenize_2.stripWrapping)(value);
170
+ return single === '' ? [] : [single];
171
+ }
172
+ /** Read one `source { doc "…" clause "…" [fragment "…"] }` block — the
173
+ * requirement/test_point_set provenance idiom. Unknown keys are skipped
174
+ * (forward compatibility); last wins on a repeated key. */
175
+ function readSource(block) {
176
+ const src = { doc: '', clause: '' };
177
+ const t = (0, tokenize_1.default)(block);
178
+ let i = 0;
179
+ while (i < t.length) {
180
+ const cmd = t[i++];
181
+ if (i >= t.length) {
182
+ break;
183
+ }
184
+ if (cmd === 'doc') {
185
+ src.doc = (0, tokenize_2.stripWrapping)(t[i++]);
186
+ }
187
+ else if (cmd === 'clause') {
188
+ src.clause = (0, tokenize_2.stripWrapping)(t[i++]);
189
+ }
190
+ else if (cmd === 'fragment') {
191
+ src.fragment = (0, tokenize_2.stripWrapping)(t[i++]);
192
+ }
193
+ else {
194
+ (0, tokenize_2.unwrapBlock)(t[i++]);
195
+ }
196
+ }
197
+ return src;
198
+ }
199
+ /**
200
+ * Read a field head: `name [: type] { ...block... }`.
201
+ * `t[i]` must be the token AFTER the `field` keyword. Returns null when
202
+ * the shape is not a field head (caller may treat it as something else,
203
+ * e.g. a bare `subform_ref`).
204
+ */
205
+ function readFieldHead(t, i) {
206
+ const name = t[i++];
207
+ if (name === undefined) {
208
+ return null;
209
+ }
210
+ let type = '';
211
+ if (t[i] === ':') {
212
+ i++;
213
+ type = t[i++] ?? '';
214
+ // Optional cardinality after the type, e.g. `: string [0..*]`
215
+ if (t[i] && t[i].startsWith('[') && t[i].endsWith(']')) {
216
+ i++;
217
+ }
218
+ }
219
+ const blockToken = t[i++];
220
+ if (blockToken === undefined || !blockToken.startsWith('{')) {
221
+ return null;
222
+ }
223
+ return { name, type, block: (0, tokenize_2.unwrapBlock)(blockToken), next: i };
224
+ }
16
225
  /**
17
- * Parse a `field <name> { ... }` block into a FormField.
226
+ * Parse a `field <name> [: <type>] { ... }` block into a FormField.
18
227
  *
19
- * Caller passes the field name (the token consumed before the brace)
20
- * and the raw block content (inside the braces). Returns a fully
21
- * populated FormField with all known sub-keywords processed and
22
- * unknown ones skipped (forward-compatible).
228
+ * Caller passes the field name (the token consumed before the brace),
229
+ * the raw block content (inside the braces), and optionally the declared
230
+ * type from the field head. Returns a fully populated FormField with all
231
+ * known sub-keywords processed and unknown ones skipped (forward-compatible).
23
232
  */
24
- function parseFormField(name, block) {
233
+ function parseFormField(name, block, type) {
25
234
  const field = {
26
235
  name,
27
- type: 'string',
236
+ type: type || 'string',
237
+ typeDeclared: !!type,
28
238
  label: '',
29
239
  definition: '',
30
240
  unit: '',
241
+ symbol: '',
242
+ verdict: '',
243
+ targets: [],
244
+ dimension: '',
245
+ enumRef: '',
246
+ pattern: '',
31
247
  required: false,
32
248
  measurementMethod: '',
33
249
  calculationId: null,
@@ -35,9 +251,16 @@ function parseFormField(name, block) {
35
251
  derivation: '',
36
252
  evaluation: null,
37
253
  values: [],
254
+ trueLabel: '',
255
+ falseLabel: '',
256
+ enumValues: [],
38
257
  defaultValue: '',
39
258
  hasDefault: false,
40
259
  referenceIds: [],
260
+ fieldReferences: [],
261
+ specificationReference: '',
262
+ applicability: [],
263
+ sourceDiscrepancy: null,
41
264
  fields: [],
42
265
  itemsType: '',
43
266
  subformRef: null,
@@ -45,7 +268,9 @@ function parseFormField(name, block) {
45
268
  if (!block || !block.trim()) {
46
269
  return field;
47
270
  }
48
- const t = (0, tokenize_1.tokenizePackage)(block);
271
+ // `block` is already-unwrapped CONTENT — use plain tokenize. (tokenizePackage
272
+ // would unwrap AGAIN and eat real characters: `d_max}` → `d_ma`.)
273
+ const t = (0, tokenize_1.default)(block);
49
274
  let i = 0;
50
275
  while (i < t.length) {
51
276
  const cmd = t[i++];
@@ -53,56 +278,634 @@ function parseFormField(name, block) {
53
278
  break;
54
279
  }
55
280
  if (cmd === 'label') {
56
- field.label = (0, tokenize_1.unwrapBlock)(t[i++]);
281
+ field.label = (0, tokenize_2.stripWrapping)(t[i++]);
57
282
  }
58
283
  else if (cmd === 'definition') {
59
- field.definition = (0, tokenize_1.unwrapBlock)(t[i++]);
284
+ field.definition = (0, tokenize_2.stripWrapping)(t[i++]);
285
+ }
286
+ else if (cmd === 'description') {
287
+ field.description = (0, tokenize_2.stripWrapping)(t[i++]);
288
+ }
289
+ else if (cmd === 'type') {
290
+ // Type may also be declared inside the block.
291
+ field.type = (0, tokenize_2.stripWrapping)(t[i++]);
292
+ field.typeDeclared = true;
60
293
  }
61
294
  else if (cmd === 'unit') {
62
- field.unit = (0, tokenize_1.unwrapBlock)(t[i++]);
295
+ field.unit = (0, tokenize_2.stripWrapping)(t[i++]);
296
+ }
297
+ else if (cmd === 'symbol') {
298
+ field.symbol = (0, tokenize_2.stripWrapping)(t[i++]);
299
+ }
300
+ else if (cmd === 'verdict') {
301
+ field.verdict = (0, tokenize_2.stripWrapping)(t[i++]);
302
+ }
303
+ else if (cmd === 'targets') {
304
+ field.targets = (0, tokenize_2.tokenizePackage)(t[i++]).map(tokenize_2.stripWrapping);
305
+ }
306
+ else if (cmd === 'dimension') {
307
+ field.dimension = (0, tokenize_2.stripWrapping)(t[i++]);
308
+ }
309
+ else if (cmd === 'enum') {
310
+ field.enumRef = (0, tokenize_2.stripWrapping)(t[i++]);
311
+ }
312
+ else if (cmd === 'pattern') {
313
+ field.pattern = (0, tokenize_2.stripWrapping)(t[i++]);
314
+ }
315
+ else if (cmd === 'scope') {
316
+ field.scope = (0, tokenize_2.stripWrapping)(t[i++]);
317
+ }
318
+ else if (cmd === 'examples') {
319
+ field.examples = (0, tokenize_2.stripWrapping)(t[i++]);
320
+ }
321
+ else if (cmd === 'bind') {
322
+ // Binding path into the subject chain (G5):
323
+ // model.parameters.e_max · sample.test_context.d_min · model.classification.accuracy_class
324
+ field.bind = (0, tokenize_2.stripWrapping)(t[i++]);
63
325
  }
64
326
  else if (cmd === 'required') {
65
- field.required = (0, tokenize_1.unwrapBlock)(t[i++]) === 'true';
327
+ field.required = (0, tokenize_2.stripWrapping)(t[i++]) === 'true';
66
328
  }
67
329
  else if (cmd === 'measurement_method') {
68
- field.measurementMethod = (0, tokenize_1.unwrapBlock)(t[i++]);
330
+ field.measurementMethod = (0, tokenize_2.stripWrapping)(t[i++]);
69
331
  }
70
332
  else if (cmd === 'calculation') {
71
- // Bare ID — use stripWrapping to avoid mangling unquoted values.
72
- field.calculationId = (0, tokenize_1.stripWrapping)(t[i++]);
333
+ // Bare ID, quoted string, or inline `ocl{…}` expression (which the
334
+ // whitespace tokenizer SPLITS — accumulate until brace-balanced, or the
335
+ // value truncates at the first space and becomes a dump-time hazard).
336
+ const read = readValueToken(t, i);
337
+ field.calculationId = (0, tokenize_2.stripWrapping)(read.text);
338
+ i = read.next;
73
339
  }
74
340
  else if (cmd === 'calculation_bindings') {
75
- // Skip the binding block (raw preservation not yet implemented).
76
- (0, tokenize_1.unwrapBlock)(t[i++]);
341
+ field.calculationBindings = parseCalculationBindings((0, tokenize_2.unwrapBlock)(t[i++]));
77
342
  }
78
343
  else if (cmd === 'derivation') {
79
- field.derivation = (0, tokenize_1.unwrapBlock)(t[i++]);
344
+ field.derivation = (0, tokenize_2.stripWrapping)(t[i++]);
80
345
  }
81
346
  else if (cmd === 'evaluation') {
82
- // Skip evaluation block.
83
- (0, tokenize_1.unwrapBlock)(t[i++]);
347
+ field.evaluation = parseEvaluation((0, tokenize_2.unwrapBlock)(t[i++]));
84
348
  }
85
349
  else if (cmd === 'values') {
86
- field.values = (0, tokenize_1.tokenizePackage)(t[i++]);
350
+ // values { A B } / values [A, B] — entries may carry a label:
351
+ // values { kg { label "Kg" } g }
352
+ const read = readBalanced(t, i);
353
+ field.values = parseValueEntries(read.text);
354
+ i = read.next;
87
355
  }
88
356
  else if (cmd === 'default') {
89
- field.defaultValue = (0, tokenize_1.unwrapBlock)(t[i++]);
357
+ field.defaultValue = (0, tokenize_2.stripWrapping)(t[i++]);
90
358
  field.hasDefault = true;
91
359
  }
92
- else if (cmd === 'min_items' || cmd === 'max_items') {
93
- (0, tokenize_1.unwrapBlock)(t[i++]);
360
+ else if (cmd === 'true_label') {
361
+ field.trueLabel = (0, tokenize_2.stripWrapping)(t[i++]);
362
+ }
363
+ else if (cmd === 'false_label') {
364
+ field.falseLabel = (0, tokenize_2.stripWrapping)(t[i++]);
365
+ }
366
+ else if (cmd === 'enum_values') {
367
+ field.enumValues = parseValueEntries(t[i++]);
368
+ }
369
+ else if (cmd === 'min_items') {
370
+ const raw = (0, tokenize_2.stripWrapping)(t[i++]);
371
+ const n = parseInt(raw, 10);
372
+ field.minItems = isNaN(n) ? raw : n;
373
+ }
374
+ else if (cmd === 'max_items') {
375
+ const raw = (0, tokenize_2.stripWrapping)(t[i++]);
376
+ const n = parseInt(raw, 10);
377
+ field.maxItems = isNaN(n) ? raw : n;
94
378
  }
95
- else if (cmd === 'items' || cmd === 'fields') {
96
- (0, tokenize_1.unwrapBlock)(t[i++]);
379
+ else if (cmd === 'items') {
380
+ // items { <type> [unit "…"] [fields { … }] } — element type, optional
381
+ // unit, optional nested fields.
382
+ const iblock = (0, tokenize_2.unwrapBlock)(t[i++]);
383
+ const it = (0, tokenize_1.default)(iblock);
384
+ const typeParts = [];
385
+ let k = 0;
386
+ while (k < it.length && it[k] !== 'fields') {
387
+ if (it[k] === 'unit' && k + 1 < it.length) {
388
+ field.itemsUnit = (0, tokenize_2.stripWrapping)(it[k + 1]);
389
+ k += 2;
390
+ }
391
+ else {
392
+ typeParts.push(it[k++]);
393
+ }
394
+ }
395
+ field.itemsType = typeParts.join(' ');
396
+ if (it[k] === 'fields') {
397
+ k++;
398
+ if (k < it.length) {
399
+ field.fields = parseNestedFields((0, tokenize_2.unwrapBlock)(it[k]));
400
+ }
401
+ }
402
+ }
403
+ else if (cmd === 'series') {
404
+ // series { axis <id> { … } … cell { symbol … unit "…" } } — typed
405
+ // series shape for datalist (array) evidence.
406
+ field.series = (0, series_1.parseSeriesDecl)((0, tokenize_2.unwrapBlock)(t[i++]));
407
+ }
408
+ else if (cmd === 'fields') {
409
+ field.fields = parseNestedFields((0, tokenize_2.unwrapBlock)(t[i++]));
410
+ }
411
+ else if (cmd === 'subform_ref') {
412
+ // Nested: field … { subform_ref SubformID { parameters { … } applicability { … } } }
413
+ const subformId = (0, tokenize_2.stripWrapping)(t[i++]);
414
+ const refBlock = i < t.length ? (0, tokenize_2.unwrapBlock)(t[i++]) : '';
415
+ field.subformRef = parseSubformRef(subformId, refBlock);
416
+ if (!field.type || field.type === 'string') {
417
+ field.type = 'array';
418
+ }
97
419
  }
98
420
  else if (cmd === 'reference') {
99
- field.referenceIds = (0, tokenize_1.tokenizePackage)(t[i++]);
421
+ field.referenceIds = (0, tokenize_2.tokenizePackage)(t[i++]).map(tokenize_2.stripWrapping);
422
+ }
423
+ else if (cmd === 'references') {
424
+ field.fieldReferences = parseRoleReferences((0, tokenize_2.unwrapBlock)(t[i++]));
425
+ }
426
+ else if (cmd === 'specification_reference') {
427
+ field.specificationReference = (0, tokenize_2.stripWrapping)(t[i++]);
428
+ }
429
+ else if (cmd === 'applicability') {
430
+ field.applicability = parseApplicability((0, tokenize_2.unwrapBlock)(t[i++]));
431
+ }
432
+ else if (cmd === 'source_discrepancy') {
433
+ field.sourceDiscrepancy = (0, sourceDiscrepancy_1.parseSourceDiscrepancy)((0, tokenize_2.unwrapBlock)(t[i++]));
100
434
  }
101
435
  else {
102
436
  // Forward-compatible: skip unknown keyword value
103
- (0, tokenize_1.unwrapBlock)(t[i++]);
437
+ (0, tokenize_2.unwrapBlock)(t[i++]);
104
438
  }
105
439
  }
106
440
  return field;
107
441
  }
442
+ /** `calculation_bindings { inputName: pathExpr … }` */
443
+ function parseCalculationBindings(block) {
444
+ const out = [];
445
+ const t = (0, tokenize_1.default)(block);
446
+ let i = 0;
447
+ while (i < t.length) {
448
+ const key = stripColon(t[i++]);
449
+ if (i >= t.length) {
450
+ break;
451
+ }
452
+ if (t[i] === ':') {
453
+ i++;
454
+ }
455
+ if (i < t.length) {
456
+ out.push({ inputName: key, pathExpr: (0, tokenize_2.stripWrapping)(t[i++]) });
457
+ }
458
+ }
459
+ return out;
460
+ }
461
+ /** `evaluation { rule "…" verdict <id> op <op> limit "…" condition "…" reference { … } source_discrepancy { … } }` */
462
+ function parseEvaluation(block) {
463
+ const rule = { rule: '', condition: '', referenceId: null };
464
+ const t = (0, tokenize_1.default)(block);
465
+ let i = 0;
466
+ while (i < t.length) {
467
+ const cmd = t[i++];
468
+ if (i >= t.length) {
469
+ break;
470
+ }
471
+ if (cmd === 'rule') {
472
+ rule.rule = (0, tokenize_2.stripWrapping)(t[i++]);
473
+ }
474
+ else if (cmd === 'verdict') {
475
+ rule.verdict = (0, tokenize_2.stripWrapping)(t[i++]);
476
+ }
477
+ else if (cmd === 'op') {
478
+ rule.op = (0, tokenize_2.stripWrapping)(t[i++]);
479
+ }
480
+ else if (cmd === 'limit') {
481
+ rule.limit = (0, tokenize_2.stripWrapping)(t[i++]);
482
+ }
483
+ else if (cmd === 'condition') {
484
+ rule.condition = (0, tokenize_2.stripWrapping)(t[i++]);
485
+ }
486
+ else if (cmd === 'reference') {
487
+ const ids = (0, tokenize_2.tokenizePackage)(t[i++]).map(tokenize_2.stripWrapping);
488
+ rule.referenceId = ids[0] ?? null;
489
+ }
490
+ else if (cmd === 'specification_reference') {
491
+ rule.specificationReference = (0, tokenize_2.stripWrapping)(t[i++]);
492
+ }
493
+ else if (cmd === 'source_discrepancy') {
494
+ rule.sourceDiscrepancy = (0, sourceDiscrepancy_1.parseSourceDiscrepancy)((0, tokenize_2.unwrapBlock)(t[i++]));
495
+ }
496
+ else {
497
+ (0, tokenize_2.unwrapBlock)(t[i++]);
498
+ }
499
+ }
500
+ return rule;
501
+ }
502
+ /** `fields { field a { … } field b : number { … } … }` (recursive) */
503
+ function parseNestedFields(block) {
504
+ const out = [];
505
+ const t = (0, tokenize_1.default)(block);
506
+ let i = 0;
507
+ while (i < t.length) {
508
+ const cmd = t[i++];
509
+ if (cmd !== 'field') {
510
+ if (i < t.length) {
511
+ (0, tokenize_2.unwrapBlock)(t[i - 1]);
512
+ }
513
+ continue;
514
+ }
515
+ const head = readFieldHead(t, i);
516
+ if (!head) {
517
+ break;
518
+ }
519
+ out.push(parseFormField(head.name, head.block, head.type || undefined));
520
+ i = head.next;
521
+ }
522
+ return out;
523
+ }
524
+ /** Parse `applicability { dim: [A, B] dim2: { A: 5, B: 3 } }` entries. */
525
+ function parseApplicability(block) {
526
+ const entries = [];
527
+ const t = (0, tokenize_1.default)(block);
528
+ let i = 0;
529
+ while (i < t.length) {
530
+ const dimension = stripColon(t[i++]);
531
+ if (i >= t.length) {
532
+ break;
533
+ }
534
+ if (t[i] === ':') {
535
+ i++;
536
+ }
537
+ if (i < t.length) {
538
+ const read = readBalanced(t, i);
539
+ i = read.next;
540
+ // text is `[A, B]`, `{ A: 5, B: 5 }`, or a bare value
541
+ const trimmed = read.text.trim();
542
+ let entry;
543
+ if (trimmed.startsWith('[')) {
544
+ const inner = trimmed.slice(1, trimmed.lastIndexOf(']'));
545
+ const values = inner.split(/[,\s]+/).filter(s => s.length > 0);
546
+ entry = { dimension, values, mapping: null, match: null };
547
+ }
548
+ else if (trimmed.startsWith('{')) {
549
+ // Mapping form
550
+ const inner = trimmed.slice(1, -1);
551
+ const mapping = {};
552
+ for (const pair of inner
553
+ .split(/[,\n]+/)
554
+ .map(s => s.trim())
555
+ .filter(s => s)) {
556
+ const m = pair.match(/^(\w+)\s*:\s*(.+)$/);
557
+ if (m) {
558
+ mapping[m[1]] = m[2].trim();
559
+ }
560
+ }
561
+ entry = { dimension, values: [], mapping, match: null };
562
+ }
563
+ else {
564
+ // Single value
565
+ entry = {
566
+ dimension,
567
+ values: [(0, tokenize_2.stripWrapping)(trimmed)],
568
+ mapping: null,
569
+ match: null,
570
+ };
571
+ }
572
+ // Declared-condition match mode (rc.yaml $defs/applicability):
573
+ // `match any|all|exact` follows the values — universal/exact matching
574
+ // for set-cardinality dimensions (default 'any', existential).
575
+ if (!entry.mapping && t[i] === 'match') {
576
+ i++;
577
+ const mode = (0, tokenize_2.stripWrapping)(t[i++] ?? '');
578
+ if (mode !== 'any' && mode !== 'all' && mode !== 'exact') {
579
+ throw new Error(`Parsing error: applicability: Unknown match ${mode} (valid: any, all, exact)`);
580
+ }
581
+ entry.match = mode;
582
+ }
583
+ entries.push(entry);
584
+ }
585
+ }
586
+ return entries;
587
+ }
588
+ /** Parse `SubformID { parameters { … } applicability { … } }` */
589
+ function parseSubformRef(subformId, block) {
590
+ const ref = {
591
+ subformId: (0, tokenize_2.stripWrapping)(subformId),
592
+ parameters: {},
593
+ applicability: [],
594
+ };
595
+ if (block && block.trim()) {
596
+ const t = (0, tokenize_1.default)(block);
597
+ let i = 0;
598
+ while (i < t.length) {
599
+ const cmd = t[i++];
600
+ if (i < t.length) {
601
+ if (cmd === 'parameters') {
602
+ const pblock = (0, tokenize_2.unwrapBlock)(t[i++]);
603
+ const pt = (0, tokenize_1.default)(pblock);
604
+ let j = 0;
605
+ while (j < pt.length) {
606
+ const key = stripColon(pt[j++]);
607
+ if (j < pt.length) {
608
+ if (pt[j] === ':') {
609
+ j++;
610
+ }
611
+ if (j < pt.length) {
612
+ ref.parameters[key] = (0, tokenize_2.stripWrapping)(pt[j++]);
613
+ }
614
+ }
615
+ }
616
+ }
617
+ else if (cmd === 'applicability') {
618
+ ref.applicability = parseApplicability((0, tokenize_2.unwrapBlock)(t[i++]));
619
+ }
620
+ else {
621
+ (0, tokenize_2.unwrapBlock)(t[i++]);
622
+ }
623
+ }
624
+ }
625
+ }
626
+ return ref;
627
+ }
628
+ /** Dump one field with full fidelity (recursive for nested fields). */
629
+ function dumpFormField(field, indent) {
630
+ let out = '';
631
+ // A NAMELESS subform reference (form-level `subform_ref X { ... }`)
632
+ // dumps in its bare form. A named field that composes a subform keeps
633
+ // its other properties — the subform_ref becomes one entry of the
634
+ // field body (converter emits `field x { … subform_ref X { } }`).
635
+ if (field.subformRef && !field.name) {
636
+ const sr = field.subformRef;
637
+ out += indent + 'subform_ref ' + sr.subformId + ' { ';
638
+ const pkeys = Object.keys(sr.parameters);
639
+ if (pkeys.length > 0) {
640
+ out += 'parameters { ';
641
+ for (const k of pkeys) {
642
+ out += k + ': ' + sr.parameters[k] + ' ';
643
+ }
644
+ out += '} ';
645
+ }
646
+ if (sr.applicability.length > 0) {
647
+ out +=
648
+ 'applicability { ' + dumpApplicabilityEntries(sr.applicability) + '} ';
649
+ }
650
+ out += '}\n';
651
+ return out;
652
+ }
653
+ const inner = [];
654
+ if (field.subformRef) {
655
+ const sr = field.subformRef;
656
+ let refLine = 'subform_ref ' + sr.subformId + ' { ';
657
+ const pkeys = Object.keys(sr.parameters);
658
+ if (pkeys.length > 0) {
659
+ refLine += 'parameters { ';
660
+ for (const k of pkeys) {
661
+ refLine += k + ': ' + sr.parameters[k] + ' ';
662
+ }
663
+ refLine += '} ';
664
+ }
665
+ if (sr.applicability.length > 0) {
666
+ refLine +=
667
+ 'applicability { ' + dumpApplicabilityEntries(sr.applicability) + '} ';
668
+ }
669
+ inner.push(refLine + '}');
670
+ }
671
+ if (field.label) {
672
+ inner.push('label "' + (0, tokenize_2.escapeString)(field.label) + '"');
673
+ }
674
+ if (field.definition) {
675
+ inner.push('definition "' + (0, tokenize_2.escapeString)(field.definition) + '"');
676
+ }
677
+ if (field.description) {
678
+ inner.push('description "' + (0, tokenize_2.escapeString)(field.description) + '"');
679
+ }
680
+ if (field.unit) {
681
+ inner.push('unit "' + (0, tokenize_2.escapeString)(field.unit) + '"');
682
+ }
683
+ if (field.symbol) {
684
+ inner.push('symbol ' + field.symbol);
685
+ }
686
+ if (field.verdict) {
687
+ inner.push('verdict ' + field.verdict);
688
+ }
689
+ if (field.dimension) {
690
+ inner.push('dimension ' + field.dimension);
691
+ }
692
+ if (field.enumRef) {
693
+ inner.push('enum ' + field.enumRef);
694
+ }
695
+ if (field.pattern) {
696
+ inner.push('pattern "' + (0, tokenize_2.escapeString)(field.pattern) + '"');
697
+ }
698
+ if (field.scope) {
699
+ inner.push('scope ' + field.scope);
700
+ }
701
+ if (field.examples) {
702
+ inner.push('examples "' + (0, tokenize_2.escapeString)(field.examples) + '"');
703
+ }
704
+ if (field.required) {
705
+ inner.push('required true');
706
+ }
707
+ if (field.measurementMethod) {
708
+ inner.push('measurement_method ' + field.measurementMethod);
709
+ }
710
+ if (field.calculationId) {
711
+ inner.push('calculation ' + dumpBareSafe(field.calculationId));
712
+ }
713
+ if (field.calculationBindings.length > 0) {
714
+ inner.push('calculation_bindings { ' +
715
+ field.calculationBindings
716
+ .map(b => b.inputName + ': ' + b.pathExpr)
717
+ .join(' ') +
718
+ '}');
719
+ }
720
+ if (field.derivation) {
721
+ inner.push('derivation "' + (0, tokenize_2.escapeString)(field.derivation) + '"');
722
+ }
723
+ if (field.evaluation) {
724
+ let ev = 'evaluation { rule "' + (0, tokenize_2.escapeString)(field.evaluation.rule) + '"';
725
+ if (field.evaluation.verdict) {
726
+ ev += ' verdict ' + field.evaluation.verdict;
727
+ }
728
+ if (field.evaluation.op) {
729
+ ev += ' op ' + field.evaluation.op;
730
+ }
731
+ if (field.evaluation.limit) {
732
+ ev += ' limit "' + (0, tokenize_2.escapeString)(field.evaluation.limit) + '"';
733
+ }
734
+ if (field.evaluation.condition) {
735
+ ev += ' condition "' + (0, tokenize_2.escapeString)(field.evaluation.condition) + '"';
736
+ }
737
+ if (field.evaluation.referenceId) {
738
+ ev += ' reference { ' + field.evaluation.referenceId + ' }';
739
+ }
740
+ if (field.evaluation.specificationReference) {
741
+ ev +=
742
+ ' specification_reference "' +
743
+ (0, tokenize_2.escapeString)(field.evaluation.specificationReference) +
744
+ '"';
745
+ }
746
+ if (field.evaluation.sourceDiscrepancy) {
747
+ ev += ' ' + (0, sourceDiscrepancy_1.dumpSourceDiscrepancy)(field.evaluation.sourceDiscrepancy, '');
748
+ }
749
+ inner.push(ev + ' }');
750
+ }
751
+ if (field.values.length > 0) {
752
+ inner.push('values { ' + field.values.map(dumpValueEntry).join(' ') + ' }');
753
+ }
754
+ if (field.hasDefault) {
755
+ // Defaults may be free text ("26 MHz – 3 GHz") or JSON-encoded
756
+ // structures — quote whenever the value isn't a single safe token.
757
+ inner.push('default ' + dumpBareSafe(field.defaultValue));
758
+ }
759
+ if (field.trueLabel) {
760
+ inner.push('true_label "' + (0, tokenize_2.escapeString)(field.trueLabel) + '"');
761
+ }
762
+ if (field.falseLabel) {
763
+ inner.push('false_label "' + (0, tokenize_2.escapeString)(field.falseLabel) + '"');
764
+ }
765
+ if (field.enumValues.length > 0) {
766
+ inner.push('enum_values { ' + field.enumValues.map(dumpValueEntry).join(' ') + ' }');
767
+ }
768
+ if (field.itemsType) {
769
+ let itemsLine = 'items { ' + field.itemsType;
770
+ if (field.itemsUnit) {
771
+ itemsLine += ' unit "' + (0, tokenize_2.escapeString)(field.itemsUnit) + '"';
772
+ }
773
+ inner.push(itemsLine + ' }');
774
+ }
775
+ if (field.minItems !== undefined && field.minItems !== null) {
776
+ inner.push('min_items ' + dumpBareSafe(String(field.minItems)));
777
+ }
778
+ if (field.maxItems !== undefined && field.maxItems !== null) {
779
+ inner.push('max_items ' + dumpBareSafe(String(field.maxItems)));
780
+ }
781
+ if (field.series) {
782
+ inner.push((0, series_1.dumpSeriesDecl)(field.series));
783
+ }
784
+ if (field.applicability.length > 0) {
785
+ inner.push('applicability { ' + dumpApplicabilityEntries(field.applicability) + '}');
786
+ }
787
+ if (field.targets.length > 0) {
788
+ inner.push('targets { ' + field.targets.join(' ') + ' }');
789
+ }
790
+ if (field.fieldReferences.length > 0) {
791
+ inner.push('references { ' + dumpRoleReferences(field.fieldReferences) + ' }');
792
+ }
793
+ if (field.specificationReference) {
794
+ inner.push('specification_reference "' +
795
+ (0, tokenize_2.escapeString)(field.specificationReference) +
796
+ '"');
797
+ }
798
+ if (field.sourceDiscrepancy) {
799
+ inner.push((0, sourceDiscrepancy_1.dumpSourceDiscrepancy)(field.sourceDiscrepancy, ''));
800
+ }
801
+ if (field.fields.length > 0) {
802
+ inner.push('fields {\n' +
803
+ field.fields.map(f => dumpFormField(f, indent + ' ')).join('') +
804
+ indent +
805
+ ' }');
806
+ }
807
+ if (field.referenceIds.length > 0) {
808
+ inner.push('reference { ' + field.referenceIds.join(' ') + ' }');
809
+ }
810
+ const typeSpec = field.type && (field.type !== 'string' || field.typeDeclared)
811
+ ? ' : ' + field.type
812
+ : '';
813
+ if (inner.length === 0) {
814
+ return indent + 'field ' + field.name + typeSpec + ' { }\n';
815
+ }
816
+ if (inner.every(s => !s.includes('\n'))) {
817
+ return (indent +
818
+ 'field ' +
819
+ field.name +
820
+ typeSpec +
821
+ ' { ' +
822
+ inner.join(' ') +
823
+ ' }\n');
824
+ }
825
+ return (indent +
826
+ 'field ' +
827
+ field.name +
828
+ typeSpec +
829
+ ' {\n' +
830
+ inner.map(s => indent + ' ' + s + '\n').join('') +
831
+ indent +
832
+ '}\n');
833
+ }
834
+ /** Dump applicability entries inside an `applicability { … }` block. */
835
+ function dumpApplicabilityEntries(entries) {
836
+ let out = '';
837
+ for (const a of entries) {
838
+ if (a.mapping) {
839
+ out += a.dimension + ': { ';
840
+ // Pairs are comma-separated: the mapping parser splits on [,\n], so
841
+ // space-separated pairs would re-parse as one merged pair.
842
+ const pairs = [];
843
+ for (const [k, v] of Object.entries(a.mapping)) {
844
+ pairs.push(k + ': ' + v);
845
+ }
846
+ out += pairs.join(', ') + ' ';
847
+ out += '} ';
848
+ }
849
+ else {
850
+ out += a.dimension + ': [' + a.values.join(', ') + '] ';
851
+ if (a.match) {
852
+ out += 'match ' + a.match + ' ';
853
+ }
854
+ }
855
+ }
856
+ return out;
857
+ }
858
+ /**
859
+ * Parse role-grouped reference URNs:
860
+ * `references { requirement { "urn:…" "urn:…" } test-procedure { "urn:…" } }`
861
+ * → flattened [{ urn, role }] in document order.
862
+ */
863
+ function parseRoleReferences(block) {
864
+ const out = [];
865
+ const t = (0, tokenize_1.default)(block);
866
+ let i = 0;
867
+ while (i < t.length) {
868
+ const role = stripColon(t[i++]);
869
+ if (!role) {
870
+ break;
871
+ }
872
+ if (i < t.length && t[i] === ':') {
873
+ i++;
874
+ }
875
+ if (i < t.length && t[i].startsWith('{')) {
876
+ const urns = (0, tokenize_1.default)((0, tokenize_2.unwrapBlock)(t[i++]))
877
+ .map(tokenize_2.stripWrapping)
878
+ .filter(s => s.length > 0);
879
+ for (const urn of urns) {
880
+ out.push({ urn, role });
881
+ }
882
+ }
883
+ }
884
+ return out;
885
+ }
886
+ /**
887
+ * Dump flattened role references re-grouped by role (first-seen role
888
+ * order, urn order preserved within a role) — the inner content of a
889
+ * `references { … }` block.
890
+ */
891
+ function dumpRoleReferences(refs) {
892
+ const roles = [];
893
+ const byRole = new Map();
894
+ for (const r of refs) {
895
+ if (!byRole.has(r.role)) {
896
+ byRole.set(r.role, []);
897
+ roles.push(r.role);
898
+ }
899
+ byRole.get(r.role).push(r.urn);
900
+ }
901
+ return roles
902
+ .map(role => role +
903
+ ' { ' +
904
+ byRole
905
+ .get(role)
906
+ .map(u => '"' + (0, tokenize_2.escapeString)(u) + '"')
907
+ .join(' ') +
908
+ ' }')
909
+ .join(' ');
910
+ }
108
911
  //# sourceMappingURL=field-parser.js.map