@primmel/primmel 1.3.2 → 1.4.1

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 +844 -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 +356 -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 +132 -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 +6699 -661
  422. package/dist-cli/primmel.mjs +21462 -0
  423. package/package.json +61 -5
@@ -0,0 +1,703 @@
1
+ "use strict";
2
+ // ─────────────────────────────────────────────────────────────────────
3
+ // ReqIF export (TODO.roadmap/27 — interop projections, surface 1).
4
+ //
5
+ // A Primmel package → ReqIF XML for RM-tool ecosystems, following the
6
+ // DIN DKE SPEC 99200 profile (ReqIF interpretation for public standards,
7
+ // Release 1.3) where compatible: one document spec-object for the
8
+ // package, heading spec-objects for the requirement classes (nested per
9
+ // their /req/... id paths), provision spec-objects for the requirements
10
+ // and the conformance tests, and a single SPEC-RELATION-TYPE
11
+ // "cross-reference" (the only relation type the profile defines) for the
12
+ // projected cross-references. ReqIF version: 1.0.1, the 20110401
13
+ // namespace the profile's examples use.
14
+ //
15
+ // ONE-WAY PROJECTION, NEVER THE KERNEL'S TRUTH. The package stays the
16
+ // single source of truth; re-imports are new-model suggestions, never
17
+ // merges (documented, not built). The same doctrine is stated in the
18
+ // exported document's header note (the XML comment after the prolog):
19
+ //
20
+ // SURVIVES — provisions (requirements, classes as headings, tests),
21
+ // the class/requirement hierarchy, modality (shall → requirement,
22
+ // should → recommendation, may → permission), clause provenance
23
+ // (doc + clause), and cross-references (dependencies, conformance-
24
+ // test targets, bindings that name an exported spec-object);
25
+ // guidance and the verification method survive as inert text.
26
+ // LOST — machine-checkable bindings (binds_to subject paths), OCL
27
+ // limit expressions, acceptance criteria, quantities with units,
28
+ // typed parameters, applicability filters, processes, forms,
29
+ // workflows — ABSENT from the export, by design.
30
+ //
31
+ // Deviations from the profile (all stated in the header note):
32
+ // - primmel.* extension attributes (primmel.guidance,
33
+ // primmel.verification-method) and the primmel.object-kind enum
34
+ // (requirement | conformance-test) — the profile has no test object
35
+ // kind, and tests are what `targets` cross-references hang on;
36
+ // - a synthetic "Conformance tests" heading grouping the tests;
37
+ // - the modality enum carries only the values this export mints
38
+ // (requirement, recommendation, permission, undefined) — the
39
+ // profile's wider value set (capability, constraint, …) has no
40
+ // Primmel counterpart;
41
+ // - string datatypes for joined clause citations are widened to
42
+ // 1024 chars (the profile's 64 fits single citations only);
43
+ // - spec-relations carry the projection kind in LONG-NAME
44
+ // (depends-on | verifies | binds) since the profile's single
45
+ // cross-reference type cannot distinguish them;
46
+ // - requirements outside any class sit as top-level siblings of the
47
+ // document node (the profile nests every provision under a heading
48
+ // — XSD-legal either way);
49
+ // - leaf SPEC-HIERARCHY nodes emit an explicit empty <CHILDREN/>
50
+ // (the profile omits the element — XSD-optional either way).
51
+ // ─────────────────────────────────────────────────────────────────────
52
+ Object.defineProperty(exports, "__esModule", { value: true });
53
+ exports.REQIF_MODALITY_BY_OBLIGATION = exports.REQIF_VERSION = exports.REQIF_NAMESPACE = void 0;
54
+ exports.reqifModality = reqifModality;
55
+ exports.requirementClassOf = requirementClassOf;
56
+ exports.xmlCommentSafe = xmlCommentSafe;
57
+ exports.exportStandardReqif = exportStandardReqif;
58
+ exports.exportPackageReqif = exportPackageReqif;
59
+ const package_1 = require("../ser-des/package");
60
+ /** The ReqIF namespace (1.0.1) the DIN DKE SPEC 99200 examples target. */
61
+ exports.REQIF_NAMESPACE = 'http://www.omg.org/spec/ReqIF/20110401/reqif.xsd';
62
+ /** The REQ-IF-VERSION header value for that namespace. */
63
+ exports.REQIF_VERSION = '1.0';
64
+ /**
65
+ * The modality mapping (exact): shall → requirement, should →
66
+ * recommendation, may → permission. The empty obligation is the Primmel
67
+ * default (shall). Anything else maps to the profile's `undefined`
68
+ * value — visible in the RM tool, never silently promoted.
69
+ */
70
+ exports.REQIF_MODALITY_BY_OBLIGATION = {
71
+ shall: 'requirement',
72
+ should: 'recommendation',
73
+ may: 'permission',
74
+ };
75
+ /** Maps a Primmel obligation facet to the ReqIF modality enum value. */
76
+ function reqifModality(obligation) {
77
+ if (!obligation) {
78
+ return 'requirement'; // shall is the Primmel default
79
+ }
80
+ return exports.REQIF_MODALITY_BY_OBLIGATION[obligation] ?? 'undefined';
81
+ }
82
+ // ─────────────────────────────────────────────────────────────────────
83
+ // Fixed identifiers (datatypes, spec-types, attribute definitions).
84
+ // LONG-NAMEs of profile-compatible attributes match the profile
85
+ // verbatim; primmel.* names mark the extensions.
86
+ // ─────────────────────────────────────────────────────────────────────
87
+ const DT_STRING_16384 = 'primmel-dds-string-16384';
88
+ const DT_STRING_1024 = 'primmel-dds-string-1024';
89
+ const DT_STRING_64 = 'primmel-dds-string-64';
90
+ const DT_XHTML = 'primmel-ddx-xhtml';
91
+ const DT_MODALITY = 'primmel-dde-modality';
92
+ const DT_NORMATIVITY = 'primmel-dde-normativity';
93
+ const DT_OBJECT_KIND = 'primmel-dde-object-kind';
94
+ const EV_MODALITY = (v) => `primmel-ev-modality-${v}`;
95
+ const EV_NORMATIVITY = (v) => `primmel-ev-normativity-${v}`;
96
+ const EV_OBJECT_KIND = (v) => `primmel-ev-object-kind-${v}`;
97
+ const SOT_DOCUMENT = 'primmel-sot-document';
98
+ const SOT_HEADING = 'primmel-sot-heading';
99
+ const SOT_PROVISION = 'primmel-sot-provision';
100
+ const SRT_CROSS_REFERENCE = 'primmel-srt-cross-reference';
101
+ const ST_SPECIFICATION = 'primmel-st-specification-standard';
102
+ /** Attribute-definition refs, per owning spec-object type. */
103
+ const AD = {
104
+ document: {
105
+ text: 'primmel-adx-document-reqif.text',
106
+ docIdentifier: 'primmel-ads-document-bib.di.document-identifier',
107
+ unique: 'primmel-ads-document-ids.unique',
108
+ },
109
+ heading: {
110
+ chapterName: 'primmel-adx-heading-reqif.chaptername',
111
+ unique: 'primmel-ads-heading-ids.unique',
112
+ },
113
+ provision: {
114
+ text: 'primmel-adx-provision-reqif.text',
115
+ modality: 'primmel-ade-provision-obj.modality',
116
+ normativity: 'primmel-ade-provision-obj.normativity',
117
+ objectKind: 'primmel-ade-provision-primmel.object-kind',
118
+ clauseNumber: 'primmel-ads-provision-obj.clause-number',
119
+ docIdentifier: 'primmel-ads-provision-bib.di.document-identifier',
120
+ unique: 'primmel-ads-provision-ids.unique',
121
+ guidance: 'primmel-ads-provision-primmel.guidance',
122
+ verificationMethod: 'primmel-ads-provision-primmel.verification-method',
123
+ },
124
+ };
125
+ /** Escapes the five predefined XML entities (text and attribute safe). */
126
+ function escapeXml(s) {
127
+ return s
128
+ .replace(/&/g, '&amp;')
129
+ .replace(/</g, '&lt;')
130
+ .replace(/>/g, '&gt;')
131
+ .replace(/"/g, '&quot;')
132
+ .replace(/'/g, '&apos;');
133
+ }
134
+ /**
135
+ * Slugs a Primmel id into an XML-attribute-safe identifier fragment:
136
+ * `/req/metrological/mpe` → `req-metrological-mpe`.
137
+ */
138
+ function slug(id) {
139
+ const s = id
140
+ .replace(/^\/+/, '')
141
+ .replace(/[^A-Za-z0-9_-]+/g, '-')
142
+ .replace(/-+/g, '-')
143
+ .replace(/-$/, '');
144
+ return s === '' ? 'x' : s;
145
+ }
146
+ /** The class a requirement belongs to: the longest class id that is a
147
+ * path-prefix of the requirement id (`/req/a/b` holds `/req/a/b/c`).
148
+ * Null = the requirement sits at the document's top level. */
149
+ function requirementClassOf(requirementId, classIds) {
150
+ let best = null;
151
+ for (const c of classIds) {
152
+ if (requirementId.startsWith(c + '/')) {
153
+ if (best === null || c.length > best.length) {
154
+ best = c;
155
+ }
156
+ }
157
+ }
158
+ return best;
159
+ }
160
+ // ─────────────────────────────────────────────────────────────────────
161
+ // Projection: Standard → the intermediate model.
162
+ // ─────────────────────────────────────────────────────────────────────
163
+ /** Joins citation facets (clause, doc) into one "; "-separated value,
164
+ * deduped in first-citation order — repeated source blocks citing the
165
+ * same clause fragment collapse to one mention. */
166
+ function joinCitation(values) {
167
+ const seen = new Set();
168
+ const out = [];
169
+ for (const v of values) {
170
+ if (v && !seen.has(v)) {
171
+ seen.add(v);
172
+ out.push(v);
173
+ }
174
+ }
175
+ return out.join('; ');
176
+ }
177
+ /** All { doc, clause } fragments a requirement cites (sourceRefs first,
178
+ * falling back to the back-compat single `source`). */
179
+ function requirementSourceRefs(r) {
180
+ const refs = r.sourceRefs ?? (r.source ? [r.source] : []);
181
+ return refs.map(s => ({ doc: s.doc, clause: s.clause }));
182
+ }
183
+ function requirementSpecObject(r, identifier) {
184
+ const values = [
185
+ { kind: 'xhtml', ref: AD.provision.text, text: r.statement },
186
+ {
187
+ kind: 'enum',
188
+ ref: AD.provision.modality,
189
+ values: [EV_MODALITY(reqifModality(r.obligation))],
190
+ },
191
+ {
192
+ kind: 'enum',
193
+ ref: AD.provision.normativity,
194
+ values: [EV_NORMATIVITY('normative')],
195
+ },
196
+ {
197
+ kind: 'enum',
198
+ ref: AD.provision.objectKind,
199
+ values: [EV_OBJECT_KIND('requirement')],
200
+ },
201
+ ];
202
+ const refs = requirementSourceRefs(r);
203
+ const clause = joinCitation(refs.map(s => s.clause));
204
+ if (clause) {
205
+ values.push({
206
+ kind: 'string',
207
+ ref: AD.provision.clauseNumber,
208
+ value: clause,
209
+ });
210
+ }
211
+ const doc = joinCitation(refs.map(s => s.doc));
212
+ if (doc) {
213
+ values.push({
214
+ kind: 'string',
215
+ ref: AD.provision.docIdentifier,
216
+ value: doc,
217
+ });
218
+ }
219
+ values.push({ kind: 'string', ref: AD.provision.unique, value: r.id });
220
+ if (r.guidance) {
221
+ values.push({
222
+ kind: 'string',
223
+ ref: AD.provision.guidance,
224
+ value: r.guidance,
225
+ });
226
+ }
227
+ if (r.verificationMethod) {
228
+ values.push({
229
+ kind: 'string',
230
+ ref: AD.provision.verificationMethod,
231
+ value: r.verificationMethod,
232
+ });
233
+ }
234
+ return {
235
+ identifier,
236
+ longName: r.name || r.id,
237
+ typeRef: SOT_PROVISION,
238
+ values,
239
+ };
240
+ }
241
+ function testSpecObject(t, identifier) {
242
+ return {
243
+ identifier,
244
+ longName: t.name || t.id,
245
+ typeRef: SOT_PROVISION,
246
+ values: [
247
+ {
248
+ kind: 'xhtml',
249
+ ref: AD.provision.text,
250
+ text: t.purpose || t.method || '',
251
+ },
252
+ {
253
+ kind: 'enum',
254
+ ref: AD.provision.modality,
255
+ values: [EV_MODALITY('undefined')],
256
+ },
257
+ {
258
+ kind: 'enum',
259
+ ref: AD.provision.normativity,
260
+ values: [EV_NORMATIVITY('normative')],
261
+ },
262
+ {
263
+ kind: 'enum',
264
+ ref: AD.provision.objectKind,
265
+ values: [EV_OBJECT_KIND('conformance-test')],
266
+ },
267
+ { kind: 'string', ref: AD.provision.unique, value: t.id },
268
+ ],
269
+ };
270
+ }
271
+ function headingSpecObject(rc, identifier) {
272
+ const title = rc.title || rc.name || rc.id;
273
+ return {
274
+ identifier,
275
+ longName: title,
276
+ typeRef: SOT_HEADING,
277
+ values: [
278
+ { kind: 'xhtml', ref: AD.heading.chapterName, text: title },
279
+ { kind: 'string', ref: AD.heading.unique, value: rc.id },
280
+ ],
281
+ };
282
+ }
283
+ // ─────────────────────────────────────────────────────────────────────
284
+ // Rendering.
285
+ // ─────────────────────────────────────────────────────────────────────
286
+ function renderAttrValue(v, ind) {
287
+ if (v.kind === 'xhtml') {
288
+ return (`${ind}<ATTRIBUTE-VALUE-XHTML>\n` +
289
+ `${ind}\t<THE-VALUE><xhtml:div><xhtml:p>${escapeXml(v.text)}</xhtml:p></xhtml:div></THE-VALUE>\n` +
290
+ `${ind}\t<DEFINITION><ATTRIBUTE-DEFINITION-XHTML-REF>${v.ref}</ATTRIBUTE-DEFINITION-XHTML-REF></DEFINITION>\n` +
291
+ `${ind}</ATTRIBUTE-VALUE-XHTML>`);
292
+ }
293
+ if (v.kind === 'string') {
294
+ return (`${ind}<ATTRIBUTE-VALUE-STRING THE-VALUE="${escapeXml(v.value)}">\n` +
295
+ `${ind}\t<DEFINITION><ATTRIBUTE-DEFINITION-STRING-REF>${v.ref}</ATTRIBUTE-DEFINITION-STRING-REF></DEFINITION>\n` +
296
+ `${ind}</ATTRIBUTE-VALUE-STRING>`);
297
+ }
298
+ return (`${ind}<ATTRIBUTE-VALUE-ENUMERATION>\n` +
299
+ `${ind}\t<VALUES>${v.values.map(e => `<ENUM-VALUE-REF>${e}</ENUM-VALUE-REF>`).join('')}</VALUES>\n` +
300
+ `${ind}\t<DEFINITION><ATTRIBUTE-DEFINITION-ENUMERATION-REF>${v.ref}</ATTRIBUTE-DEFINITION-ENUMERATION-REF></DEFINITION>\n` +
301
+ `${ind}</ATTRIBUTE-VALUE-ENUMERATION>`);
302
+ }
303
+ function renderSpecObject(o, now) {
304
+ return (`\t\t\t\t<SPEC-OBJECT IDENTIFIER="${o.identifier}" LAST-CHANGE="${now}" LONG-NAME="${escapeXml(o.longName)}">\n` +
305
+ `\t\t\t\t\t<VALUES>\n` +
306
+ o.values.map(v => renderAttrValue(v, '\t\t\t\t\t\t')).join('\n') +
307
+ `\n\t\t\t\t\t</VALUES>\n` +
308
+ `\t\t\t\t\t<TYPE><SPEC-OBJECT-TYPE-REF>${o.typeRef}</SPEC-OBJECT-TYPE-REF></TYPE>\n` +
309
+ `\t\t\t\t</SPEC-OBJECT>`);
310
+ }
311
+ function renderRelation(r, now) {
312
+ return (`\t\t\t\t<SPEC-RELATION IDENTIFIER="${r.identifier}" LAST-CHANGE="${now}" LONG-NAME="${r.kind}">\n` +
313
+ `\t\t\t\t\t<TARGET><SPEC-OBJECT-REF>${r.target}</SPEC-OBJECT-REF></TARGET>\n` +
314
+ `\t\t\t\t\t<SOURCE><SPEC-OBJECT-REF>${r.source}</SPEC-OBJECT-REF></SOURCE>\n` +
315
+ `\t\t\t\t\t<TYPE><SPEC-RELATION-TYPE-REF>${SRT_CROSS_REFERENCE}</SPEC-RELATION-TYPE-REF></TYPE>\n` +
316
+ `\t\t\t\t</SPEC-RELATION>`);
317
+ }
318
+ function renderHierarchy(node, identifier, now, ind) {
319
+ const children = node.children.length === 0
320
+ ? `${ind}\t<CHILDREN/>\n`
321
+ : `${ind}\t<CHILDREN>\n` +
322
+ node.children
323
+ .map((c, i) => renderHierarchy(c, `${identifier}-${i + 1}`, now, ind + '\t\t'))
324
+ .join('\n') +
325
+ `\n${ind}\t</CHILDREN>\n`;
326
+ return (`${ind}<SPEC-HIERARCHY IDENTIFIER="${identifier}" LAST-CHANGE="${now}">\n` +
327
+ `${ind}\t<OBJECT><SPEC-OBJECT-REF>${node.objectIdentifier}</SPEC-OBJECT-REF></OBJECT>\n` +
328
+ children +
329
+ `${ind}</SPEC-HIERARCHY>`);
330
+ }
331
+ // ─────────────────────────────────────────────────────────────────────
332
+ // The header note — the one-way / survive-vs-lost doctrine, shipped IN
333
+ // the exported document as its leading XML comment.
334
+ // ─────────────────────────────────────────────────────────────────────
335
+ /**
336
+ * Sanitizes a value interpolated into the header note's XML comment:
337
+ * XML comments may not contain `--` (a package titled `R 99 -- the
338
+ * dashy package` would otherwise export malformed XML). `--` runs
339
+ * become an em dash — the punctuation the run stands for in prose.
340
+ */
341
+ function xmlCommentSafe(s) {
342
+ return s.replace(/--+/g, '—');
343
+ }
344
+ function headerNote(packageId, packageTitle, stats) {
345
+ // XML comments may not contain "--"; keep to single hyphens in the
346
+ // static text and run interpolated values through xmlCommentSafe.
347
+ const n = (count, singular, plural) => `${count} ${count === 1 ? singular : plural}`;
348
+ return `<!--
349
+ ReqIF export of the Primmel package "${xmlCommentSafe(packageId)}" (${xmlCommentSafe(packageTitle)}).
350
+ Generated by \`primmel export reqif\` (primmel-ts, TODO.roadmap/27).
351
+
352
+ ONE-WAY PROJECTION. The Primmel package remains the single source of
353
+ truth; this document is a lossy projection for RM-tool ecosystems.
354
+ Re-imports are new-model suggestions, NEVER merges.
355
+
356
+ Profile: DIN DKE SPEC 99200 (ReqIF interpretation for public
357
+ standards, Release 1.3), ReqIF ${exports.REQIF_VERSION} (20110401 namespace),
358
+ followed where compatible.
359
+
360
+ SURVIVES the projection:
361
+ - provisions: one spec-object per requirement, per requirement
362
+ class (heading), and per conformance test; the package itself as
363
+ the document spec-object
364
+ - hierarchy: classes nest per their /req/... id paths, requirements
365
+ sit under their class, tests under a synthetic heading
366
+ - modality: shall -> requirement, should -> recommendation,
367
+ may -> permission (obj.modality)
368
+ - clause provenance: obj.clause-number + bib.di.document-identifier
369
+ - cross-references (spec-relations of type cross-reference, kind in
370
+ LONG-NAME): depends-on (requirement and class dependencies),
371
+ verifies (conformance-test targets), binds (bindings that name an
372
+ exported spec-object)
373
+ - guidance and verification method as inert text attributes
374
+ (primmel.guidance, primmel.verification-method)
375
+
376
+ LOST in the projection (absent from this document, by design):
377
+ - machine-checkable bindings (binds_to subject paths)
378
+ - OCL limit expressions and acceptance criteria
379
+ - quantities with units, typed parameters, applicability filters
380
+ - processes, forms, workflows, state machines, tables, formulas
381
+
382
+ Deviations from the profile: the primmel.* extension attributes and
383
+ the primmel.object-kind enum (requirement | conformance-test); the
384
+ synthetic "Conformance tests" heading; the modality enum carries only
385
+ the values this export mints; joined clause citations use a widened
386
+ (1024) string datatype; requirements outside any class sit top-level
387
+ (the profile nests every provision under a heading); leaf
388
+ SPEC-HIERARCHY nodes carry an explicit empty CHILDREN element (the
389
+ profile omits it).
390
+
391
+ Contents: ${n(stats.documents, 'document', 'documents')}, ${n(stats.requirementClasses, 'requirement class', 'requirement classes')}, ${n(stats.requirements, 'requirement', 'requirements')}, ${n(stats.conformanceTests, 'conformance test', 'conformance tests')}, ${n(stats.specRelations, 'spec-relation', 'spec-relations')}, ${n(stats.droppedReferences.length, 'dropped reference', 'dropped references')}${stats.unknownObligations > 0 ? `, ${n(stats.unknownObligations, 'unknown obligation (modality undefined)', 'unknown obligations (modality undefined)')}` : ''}.
392
+ -->`;
393
+ }
394
+ // ─────────────────────────────────────────────────────────────────────
395
+ // The export itself.
396
+ // ─────────────────────────────────────────────────────────────────────
397
+ /** Projects a loaded Standard into a ReqIF document. */
398
+ function exportStandardReqif(standard, options = {}) {
399
+ const now = options.now ?? new Date().toISOString();
400
+ const manifest = standard.packageManifest ?? null;
401
+ const packageId = manifest?.id ?? 'unknown-package';
402
+ const packageTitle = manifest?.title || manifest?.id || 'Primmel package';
403
+ const classes = standard.requirementClasses ?? [];
404
+ const requirements = standard.requirements ?? [];
405
+ const tests = standard.conformanceTests ?? [];
406
+ // ── spec-objects + the exported-id map ──
407
+ const objects = [];
408
+ const identifierById = new Map();
409
+ const usedIdentifiers = new Set();
410
+ const claimIdentifier = (id) => {
411
+ let candidate = `primmel-so-${slug(id)}`;
412
+ for (let n = 2; usedIdentifiers.has(candidate); n++) {
413
+ candidate = `primmel-so-${slug(id)}-${n}`;
414
+ }
415
+ usedIdentifiers.add(candidate);
416
+ return candidate;
417
+ };
418
+ const docIdentifier = `primmel-doc-${slug(packageId)}`;
419
+ usedIdentifiers.add(docIdentifier);
420
+ identifierById.set(packageId, docIdentifier);
421
+ const docObject = {
422
+ identifier: docIdentifier,
423
+ longName: packageTitle,
424
+ typeRef: SOT_DOCUMENT,
425
+ values: [
426
+ {
427
+ kind: 'xhtml',
428
+ ref: AD.document.text,
429
+ text: manifest?.description ?? '',
430
+ },
431
+ ...(manifest?.baseUrn
432
+ ? [
433
+ {
434
+ kind: 'string',
435
+ ref: AD.document.docIdentifier,
436
+ value: manifest.baseUrn,
437
+ },
438
+ ]
439
+ : []),
440
+ { kind: 'string', ref: AD.document.unique, value: packageId },
441
+ ],
442
+ };
443
+ objects.push(docObject);
444
+ for (const rc of classes) {
445
+ const identifier = claimIdentifier(rc.id);
446
+ identifierById.set(rc.id, identifier);
447
+ objects.push(headingSpecObject(rc, identifier));
448
+ }
449
+ let unknownObligations = 0;
450
+ for (const r of requirements) {
451
+ const identifier = claimIdentifier(r.id);
452
+ identifierById.set(r.id, identifier);
453
+ objects.push(requirementSpecObject(r, identifier));
454
+ if (r.obligation && !(r.obligation in exports.REQIF_MODALITY_BY_OBLIGATION)) {
455
+ // Exports with modality `undefined` (reqifModality) — counted so
456
+ // the typo is visible in stats, never silently promoted.
457
+ unknownObligations++;
458
+ }
459
+ }
460
+ for (const t of tests) {
461
+ const identifier = claimIdentifier(t.id);
462
+ identifierById.set(t.id, identifier);
463
+ objects.push(testSpecObject(t, identifier));
464
+ }
465
+ const TESTS_HEADING_ID = 'primmel-hdr-conformance-tests';
466
+ if (tests.length > 0) {
467
+ usedIdentifiers.add(TESTS_HEADING_ID);
468
+ objects.push({
469
+ identifier: TESTS_HEADING_ID,
470
+ longName: 'Conformance tests',
471
+ typeRef: SOT_HEADING,
472
+ values: [
473
+ {
474
+ kind: 'xhtml',
475
+ ref: AD.heading.chapterName,
476
+ text: 'Conformance tests',
477
+ },
478
+ {
479
+ kind: 'string',
480
+ ref: AD.heading.unique,
481
+ value: 'primmel:conformance-tests',
482
+ },
483
+ ],
484
+ });
485
+ }
486
+ // ── spec-relations (deduped; dangling refs dropped, recorded) ──
487
+ const relations = [];
488
+ const droppedReferences = [];
489
+ const seenRelation = new Set();
490
+ const addRelation = (owner, ref, kind) => {
491
+ const source = identifierById.get(owner);
492
+ const target = identifierById.get(ref);
493
+ if (source === undefined || target === undefined) {
494
+ droppedReferences.push(`${owner} -> ${ref} (${kind})`);
495
+ return;
496
+ }
497
+ const key = `${source}|${target}|${kind}`;
498
+ if (seenRelation.has(key)) {
499
+ return;
500
+ }
501
+ seenRelation.add(key);
502
+ relations.push({
503
+ identifier: `primmel-sr-${relations.length + 1}`,
504
+ kind,
505
+ source,
506
+ target,
507
+ });
508
+ };
509
+ for (const rc of classes) {
510
+ for (const dep of rc.dependencies ?? []) {
511
+ addRelation(rc.id, dep, 'depends-on');
512
+ }
513
+ }
514
+ for (const r of requirements) {
515
+ for (const dep of r.dependencies ?? []) {
516
+ addRelation(r.id, dep, 'depends-on');
517
+ }
518
+ // Bindings: binds_to paths and limit uses that name an exported
519
+ // spec-object become binds relations. Unexported refs in the
520
+ // `/`-addressed id space (meant to name a model element, e.g. an
521
+ // upstream /req/... id) are recorded as dropped; subject-chain
522
+ // paths (sample.x, formula:…, table:…) stay silent — they are LOST
523
+ // (the machine-checkable binding does not survive), not dropped.
524
+ const bindings = [...(r.bindsTo ?? []), ...(r.limit?.uses ?? [])];
525
+ for (const b of bindings) {
526
+ if (identifierById.has(b) || b.startsWith('/')) {
527
+ addRelation(r.id, b, 'binds');
528
+ }
529
+ }
530
+ }
531
+ for (const t of tests) {
532
+ for (const target of t.targets ?? []) {
533
+ addRelation(t.id, target, 'verifies');
534
+ }
535
+ }
536
+ // ── the hierarchy ──
537
+ const classIds = classes.map(c => c.id);
538
+ const nodeByClassId = new Map();
539
+ for (const rc of classes) {
540
+ nodeByClassId.set(rc.id, {
541
+ objectIdentifier: identifierById.get(rc.id),
542
+ children: [],
543
+ });
544
+ }
545
+ // Class nesting: a class's parent is the longest OTHER class id that
546
+ // path-prefixes it (R 60's classes are flat — all top level).
547
+ const topLevel = [
548
+ { objectIdentifier: docIdentifier, children: [] },
549
+ ];
550
+ for (const rc of classes) {
551
+ const parent = requirementClassOf(rc.id, classIds.filter(c => c !== rc.id));
552
+ const node = nodeByClassId.get(rc.id);
553
+ if (parent !== null) {
554
+ nodeByClassId.get(parent).children.push(node);
555
+ }
556
+ else {
557
+ topLevel.push(node);
558
+ }
559
+ }
560
+ for (const r of requirements) {
561
+ const owner = requirementClassOf(r.id, classIds);
562
+ const node = {
563
+ objectIdentifier: identifierById.get(r.id),
564
+ children: [],
565
+ };
566
+ if (owner !== null) {
567
+ nodeByClassId.get(owner).children.push(node);
568
+ }
569
+ else {
570
+ topLevel.push(node);
571
+ }
572
+ }
573
+ if (tests.length > 0) {
574
+ topLevel.push({
575
+ objectIdentifier: TESTS_HEADING_ID,
576
+ children: tests.map(t => ({
577
+ objectIdentifier: identifierById.get(t.id),
578
+ children: [],
579
+ })),
580
+ });
581
+ }
582
+ const stats = {
583
+ documents: 1,
584
+ requirementClasses: classes.length,
585
+ requirements: requirements.length,
586
+ conformanceTests: tests.length,
587
+ specRelations: relations.length,
588
+ droppedReferences,
589
+ unknownObligations,
590
+ };
591
+ // ── render ──
592
+ const enumValues = (dt, name, values, ev) => `\t\t\t\t<DATATYPE-DEFINITION-ENUMERATION IDENTIFIER="${dt}" LAST-CHANGE="${now}" LONG-NAME="${name}">\n` +
593
+ `\t\t\t\t\t<SPECIFIED-VALUES>\n` +
594
+ values
595
+ // PROPERTIES/EMBEDDED-VALUE is a required child of ENUM-VALUE in
596
+ // the ReqIF XSD (KEY = the 1-based position, per the profile's
597
+ // examples; OTHER-CONTENT left empty).
598
+ .map((v, i) => `\t\t\t\t\t\t<ENUM-VALUE IDENTIFIER="${ev(v)}" LAST-CHANGE="${now}" LONG-NAME="${v}">\n` +
599
+ `\t\t\t\t\t\t\t<PROPERTIES><EMBEDDED-VALUE KEY="${i + 1}" OTHER-CONTENT=""/></PROPERTIES>\n` +
600
+ `\t\t\t\t\t\t</ENUM-VALUE>`)
601
+ .join('\n') +
602
+ `\n\t\t\t\t\t</SPECIFIED-VALUES>\n` +
603
+ `\t\t\t\t</DATATYPE-DEFINITION-ENUMERATION>`;
604
+ const stringAttr = (id, name, dt) => `\t\t\t\t\t\t<ATTRIBUTE-DEFINITION-STRING IDENTIFIER="${id}" LAST-CHANGE="${now}" LONG-NAME="${name}" IS-EDITABLE="true">\n` +
605
+ `\t\t\t\t\t\t\t<TYPE><DATATYPE-DEFINITION-STRING-REF>${dt}</DATATYPE-DEFINITION-STRING-REF></TYPE>\n` +
606
+ `\t\t\t\t\t\t</ATTRIBUTE-DEFINITION-STRING>`;
607
+ const xhtmlAttr = (id, name) => `\t\t\t\t\t\t<ATTRIBUTE-DEFINITION-XHTML IDENTIFIER="${id}" LAST-CHANGE="${now}" LONG-NAME="${name}" IS-EDITABLE="true">\n` +
608
+ `\t\t\t\t\t\t\t<TYPE><DATATYPE-DEFINITION-XHTML-REF>${DT_XHTML}</DATATYPE-DEFINITION-XHTML-REF></TYPE>\n` +
609
+ `\t\t\t\t\t\t</ATTRIBUTE-DEFINITION-XHTML>`;
610
+ const enumAttr = (id, name, dt) => `\t\t\t\t\t\t<ATTRIBUTE-DEFINITION-ENUMERATION IDENTIFIER="${id}" LAST-CHANGE="${now}" LONG-NAME="${name}" IS-EDITABLE="true" MULTI-VALUED="false">\n` +
611
+ `\t\t\t\t\t\t\t<TYPE><DATATYPE-DEFINITION-ENUMERATION-REF>${dt}</DATATYPE-DEFINITION-ENUMERATION-REF></TYPE>\n` +
612
+ `\t\t\t\t\t\t</ATTRIBUTE-DEFINITION-ENUMERATION>`;
613
+ const specObjectType = (id, name, desc, attrs) => `\t\t\t\t<SPEC-OBJECT-TYPE IDENTIFIER="${id}" LAST-CHANGE="${now}" LONG-NAME="${name}" DESC="${desc}">\n` +
614
+ `\t\t\t\t\t<SPEC-ATTRIBUTES>\n` +
615
+ attrs.join('\n') +
616
+ `\n\t\t\t\t\t</SPEC-ATTRIBUTES>\n` +
617
+ `\t\t\t\t</SPEC-OBJECT-TYPE>`;
618
+ const specificationId = `primmel-spec-${slug(packageId)}`;
619
+ const xml = `<?xml version="1.0" encoding="UTF-8"?>\n` +
620
+ headerNote(packageId, packageTitle, stats) +
621
+ `\n<REQ-IF xmlns="${exports.REQIF_NAMESPACE}" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="${exports.REQIF_NAMESPACE} ${exports.REQIF_NAMESPACE}">\n` +
622
+ `\t<THE-HEADER>\n` +
623
+ `\t\t<REQ-IF-HEADER IDENTIFIER="primmel-reqif-${slug(packageId)}">\n` +
624
+ `\t\t\t<CREATION-TIME>${now}</CREATION-TIME>\n` +
625
+ `\t\t\t<REQ-IF-TOOL-ID>primmel export reqif</REQ-IF-TOOL-ID>\n` +
626
+ `\t\t\t<REQ-IF-VERSION>${exports.REQIF_VERSION}</REQ-IF-VERSION>\n` +
627
+ `\t\t\t<SOURCE-TOOL-ID>primmel-ts</SOURCE-TOOL-ID>\n` +
628
+ `\t\t\t<TITLE>${escapeXml(packageTitle)}</TITLE>\n` +
629
+ `\t\t</REQ-IF-HEADER>\n` +
630
+ `\t</THE-HEADER>\n` +
631
+ `\t<CORE-CONTENT>\n` +
632
+ `\t\t<REQ-IF-CONTENT>\n` +
633
+ `\t\t\t<DATATYPES>\n` +
634
+ `\t\t\t\t<DATATYPE-DEFINITION-STRING IDENTIFIER="${DT_STRING_16384}" LAST-CHANGE="${now}" LONG-NAME="string-16384" MAX-LENGTH="16384"/>\n` +
635
+ `\t\t\t\t<DATATYPE-DEFINITION-STRING IDENTIFIER="${DT_STRING_1024}" LAST-CHANGE="${now}" LONG-NAME="string-1024" MAX-LENGTH="1024"/>\n` +
636
+ `\t\t\t\t<DATATYPE-DEFINITION-STRING IDENTIFIER="${DT_STRING_64}" LAST-CHANGE="${now}" LONG-NAME="string-64" MAX-LENGTH="64"/>\n` +
637
+ `\t\t\t\t<DATATYPE-DEFINITION-XHTML IDENTIFIER="${DT_XHTML}" LAST-CHANGE="${now}" LONG-NAME="xhtml"/>\n` +
638
+ enumValues(DT_MODALITY, 'modality', ['requirement', 'recommendation', 'permission', 'undefined'], EV_MODALITY) +
639
+ `\n` +
640
+ enumValues(DT_NORMATIVITY, 'normativity', ['normative', 'informative'], EV_NORMATIVITY) +
641
+ `\n` +
642
+ enumValues(DT_OBJECT_KIND, 'primmel.object-kind', ['requirement', 'conformance-test'], EV_OBJECT_KIND) +
643
+ `\n\t\t\t</DATATYPES>\n` +
644
+ `\t\t\t<SPEC-TYPES>\n` +
645
+ specObjectType(SOT_DOCUMENT, 'document', 'Documents', [
646
+ xhtmlAttr(AD.document.text, 'ReqIF.Text'),
647
+ stringAttr(AD.document.docIdentifier, 'bib.di.document-identifier', DT_STRING_1024),
648
+ stringAttr(AD.document.unique, 'ids.unique', DT_STRING_1024),
649
+ ]) +
650
+ `\n` +
651
+ specObjectType(SOT_HEADING, 'heading', 'Clause and Section Headers', [
652
+ xhtmlAttr(AD.heading.chapterName, 'ReqIF.ChapterName'),
653
+ stringAttr(AD.heading.unique, 'ids.unique', DT_STRING_1024),
654
+ ]) +
655
+ `\n` +
656
+ specObjectType(SOT_PROVISION, 'provision', 'Governing and assertional provisions', [
657
+ xhtmlAttr(AD.provision.text, 'ReqIF.Text'),
658
+ enumAttr(AD.provision.modality, 'obj.modality', DT_MODALITY),
659
+ enumAttr(AD.provision.normativity, 'obj.normativity', DT_NORMATIVITY),
660
+ enumAttr(AD.provision.objectKind, 'primmel.object-kind', DT_OBJECT_KIND),
661
+ stringAttr(AD.provision.clauseNumber, 'obj.clause-number', DT_STRING_1024),
662
+ stringAttr(AD.provision.docIdentifier, 'bib.di.document-identifier', DT_STRING_1024),
663
+ stringAttr(AD.provision.unique, 'ids.unique', DT_STRING_1024),
664
+ stringAttr(AD.provision.guidance, 'primmel.guidance', DT_STRING_16384),
665
+ stringAttr(AD.provision.verificationMethod, 'primmel.verification-method', DT_STRING_64),
666
+ ]) +
667
+ `\n` +
668
+ `\t\t\t\t<SPEC-RELATION-TYPE IDENTIFIER="${SRT_CROSS_REFERENCE}" LAST-CHANGE="${now}" LONG-NAME="cross-reference" DESC="Internal document reference"/>\n` +
669
+ `\t\t\t\t<SPECIFICATION-TYPE IDENTIFIER="${ST_SPECIFICATION}" LAST-CHANGE="${now}" LONG-NAME="specification-standard" DESC="Standards Document">\n` +
670
+ `\t\t\t\t\t<SPEC-ATTRIBUTES/>\n` +
671
+ `\t\t\t\t</SPECIFICATION-TYPE>\n` +
672
+ `\t\t\t</SPEC-TYPES>\n` +
673
+ `\t\t\t<SPEC-OBJECTS>\n` +
674
+ objects.map(o => renderSpecObject(o, now)).join('\n') +
675
+ `\n\t\t\t</SPEC-OBJECTS>\n` +
676
+ `\t\t\t<SPEC-RELATIONS>\n` +
677
+ relations.map(r => renderRelation(r, now)).join('\n') +
678
+ `\n\t\t\t</SPEC-RELATIONS>\n` +
679
+ `\t\t\t<SPECIFICATIONS>\n` +
680
+ `\t\t\t\t<SPECIFICATION IDENTIFIER="${specificationId}" LAST-CHANGE="${now}" LONG-NAME="${escapeXml(packageTitle)}">\n` +
681
+ `\t\t\t\t\t<TYPE><SPECIFICATION-TYPE-REF>${ST_SPECIFICATION}</SPECIFICATION-TYPE-REF></TYPE>\n` +
682
+ `\t\t\t\t\t<CHILDREN>\n` +
683
+ topLevel
684
+ .map((n, i) => renderHierarchy(n, `primmel-sh-${i + 1}`, now, '\t\t\t\t\t\t'))
685
+ .join('\n') +
686
+ `\n\t\t\t\t\t</CHILDREN>\n` +
687
+ `\t\t\t\t</SPECIFICATION>\n` +
688
+ `\t\t\t</SPECIFICATIONS>\n` +
689
+ `\t\t</REQ-IF-CONTENT>\n` +
690
+ `\t</CORE-CONTENT>\n` +
691
+ `</REQ-IF>\n`;
692
+ return { xml, stats };
693
+ }
694
+ /**
695
+ * Loads the package at `dir` (single directory — the CLI's `check`
696
+ * default; `uses` composition needs a locator and stays a punt) and
697
+ * projects it into a ReqIF document.
698
+ */
699
+ function exportPackageReqif(dir, options = {}) {
700
+ const { standard } = (0, package_1.loadPackageWithIssues)(dir);
701
+ return exportStandardReqif(standard, options);
702
+ }
703
+ //# sourceMappingURL=reqif.js.map