@ifc-lite/ids-authoring 0.0.0-stage → 0.2.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 (447) hide show
  1. package/LICENSE +373 -0
  2. package/README.md +469 -2
  3. package/dist/bsdd/cache.d.ts +37 -0
  4. package/dist/bsdd/cache.d.ts.map +1 -0
  5. package/dist/bsdd/cache.js +116 -0
  6. package/dist/bsdd/cache.js.map +1 -0
  7. package/dist/bsdd/contract.d.ts +31 -0
  8. package/dist/bsdd/contract.d.ts.map +1 -0
  9. package/dist/bsdd/contract.js +185 -0
  10. package/dist/bsdd/contract.js.map +1 -0
  11. package/dist/bsdd/dictionary.d.ts +42 -0
  12. package/dist/bsdd/dictionary.d.ts.map +1 -0
  13. package/dist/bsdd/dictionary.js +115 -0
  14. package/dist/bsdd/dictionary.js.map +1 -0
  15. package/dist/bsdd/generator.d.ts +82 -0
  16. package/dist/bsdd/generator.d.ts.map +1 -0
  17. package/dist/bsdd/generator.js +155 -0
  18. package/dist/bsdd/generator.js.map +1 -0
  19. package/dist/bsdd/http-source.d.ts +15 -0
  20. package/dist/bsdd/http-source.d.ts.map +1 -0
  21. package/dist/bsdd/http-source.js +196 -0
  22. package/dist/bsdd/http-source.js.map +1 -0
  23. package/dist/bsdd/idb-store.d.ts +16 -0
  24. package/dist/bsdd/idb-store.d.ts.map +1 -0
  25. package/dist/bsdd/idb-store.js +58 -0
  26. package/dist/bsdd/idb-store.js.map +1 -0
  27. package/dist/bsdd/insert.d.ts +55 -0
  28. package/dist/bsdd/insert.d.ts.map +1 -0
  29. package/dist/bsdd/insert.js +105 -0
  30. package/dist/bsdd/insert.js.map +1 -0
  31. package/dist/bsdd/mapping.d.ts +62 -0
  32. package/dist/bsdd/mapping.d.ts.map +1 -0
  33. package/dist/bsdd/mapping.js +163 -0
  34. package/dist/bsdd/mapping.js.map +1 -0
  35. package/dist/bsdd/picker.d.ts +91 -0
  36. package/dist/bsdd/picker.d.ts.map +1 -0
  37. package/dist/bsdd/picker.js +151 -0
  38. package/dist/bsdd/picker.js.map +1 -0
  39. package/dist/bsdd/types.d.ts +162 -0
  40. package/dist/bsdd/types.d.ts.map +1 -0
  41. package/dist/bsdd/types.js +26 -0
  42. package/dist/bsdd/types.js.map +1 -0
  43. package/dist/bsdd/uri-health.d.ts +65 -0
  44. package/dist/bsdd/uri-health.d.ts.map +1 -0
  45. package/dist/bsdd/uri-health.js +110 -0
  46. package/dist/bsdd/uri-health.js.map +1 -0
  47. package/dist/canonical-json.d.ts +7 -0
  48. package/dist/canonical-json.d.ts.map +1 -0
  49. package/dist/canonical-json.js +20 -0
  50. package/dist/canonical-json.js.map +1 -0
  51. package/dist/comments/view.d.ts +37 -0
  52. package/dist/comments/view.d.ts.map +1 -0
  53. package/dist/comments/view.js +61 -0
  54. package/dist/comments/view.js.map +1 -0
  55. package/dist/compound/expand.d.ts +5 -0
  56. package/dist/compound/expand.d.ts.map +1 -0
  57. package/dist/compound/expand.js +135 -0
  58. package/dist/compound/expand.js.map +1 -0
  59. package/dist/compound/from-bsdd.d.ts +9 -0
  60. package/dist/compound/from-bsdd.d.ts.map +1 -0
  61. package/dist/compound/from-bsdd.js +166 -0
  62. package/dist/compound/from-bsdd.js.map +1 -0
  63. package/dist/diff/align.d.ts +42 -0
  64. package/dist/diff/align.d.ts.map +1 -0
  65. package/dist/diff/align.js +78 -0
  66. package/dist/diff/align.js.map +1 -0
  67. package/dist/diff/changelog-text.d.ts +39 -0
  68. package/dist/diff/changelog-text.d.ts.map +1 -0
  69. package/dist/diff/changelog-text.js +120 -0
  70. package/dist/diff/changelog-text.js.map +1 -0
  71. package/dist/diff/changelog.d.ts +28 -0
  72. package/dist/diff/changelog.d.ts.map +1 -0
  73. package/dist/diff/changelog.js +173 -0
  74. package/dist/diff/changelog.js.map +1 -0
  75. package/dist/diff/compare.d.ts +25 -0
  76. package/dist/diff/compare.d.ts.map +1 -0
  77. package/dist/diff/compare.js +150 -0
  78. package/dist/diff/compare.js.map +1 -0
  79. package/dist/diff/diff.d.ts +13 -0
  80. package/dist/diff/diff.d.ts.map +1 -0
  81. package/dist/diff/diff.js +140 -0
  82. package/dist/diff/diff.js.map +1 -0
  83. package/dist/diff/index.d.ts +5 -0
  84. package/dist/diff/index.d.ts.map +1 -0
  85. package/dist/diff/index.js +7 -0
  86. package/dist/diff/index.js.map +1 -0
  87. package/dist/diff/patch.d.ts +10 -0
  88. package/dist/diff/patch.d.ts.map +1 -0
  89. package/dist/diff/patch.js +177 -0
  90. package/dist/diff/patch.js.map +1 -0
  91. package/dist/diff/types.d.ts +201 -0
  92. package/dist/diff/types.d.ts.map +1 -0
  93. package/dist/diff/types.js +5 -0
  94. package/dist/diff/types.js.map +1 -0
  95. package/dist/document/fields.d.ts +33 -0
  96. package/dist/document/fields.d.ts.map +1 -0
  97. package/dist/document/fields.js +117 -0
  98. package/dist/document/fields.js.map +1 -0
  99. package/dist/document/from-ids.d.ts +32 -0
  100. package/dist/document/from-ids.d.ts.map +1 -0
  101. package/dist/document/from-ids.js +47 -0
  102. package/dist/document/from-ids.js.map +1 -0
  103. package/dist/document/node-index.d.ts +32 -0
  104. package/dist/document/node-index.d.ts.map +1 -0
  105. package/dist/document/node-index.js +127 -0
  106. package/dist/document/node-index.js.map +1 -0
  107. package/dist/document/types.d.ts +170 -0
  108. package/dist/document/types.d.ts.map +1 -0
  109. package/dist/document/types.js +19 -0
  110. package/dist/document/types.js.map +1 -0
  111. package/dist/gate/bsdd.d.ts +12 -0
  112. package/dist/gate/bsdd.d.ts.map +1 -0
  113. package/dist/gate/bsdd.js +17 -0
  114. package/dist/gate/bsdd.js.map +1 -0
  115. package/dist/gate/check.d.ts +6 -0
  116. package/dist/gate/check.d.ts.map +1 -0
  117. package/dist/gate/check.js +125 -0
  118. package/dist/gate/check.js.map +1 -0
  119. package/dist/gate/context.d.ts +51 -0
  120. package/dist/gate/context.d.ts.map +1 -0
  121. package/dist/gate/context.js +74 -0
  122. package/dist/gate/context.js.map +1 -0
  123. package/dist/gate/grounding-pset.d.ts +5 -0
  124. package/dist/gate/grounding-pset.d.ts.map +1 -0
  125. package/dist/gate/grounding-pset.js +179 -0
  126. package/dist/gate/grounding-pset.js.map +1 -0
  127. package/dist/gate/grounding.d.ts +48 -0
  128. package/dist/gate/grounding.d.ts.map +1 -0
  129. package/dist/gate/grounding.js +146 -0
  130. package/dist/gate/grounding.js.map +1 -0
  131. package/dist/gate/rank.d.ts +28 -0
  132. package/dist/gate/rank.d.ts.map +1 -0
  133. package/dist/gate/rank.js +68 -0
  134. package/dist/gate/rank.js.map +1 -0
  135. package/dist/gate/structural.d.ts +43 -0
  136. package/dist/gate/structural.d.ts.map +1 -0
  137. package/dist/gate/structural.js +175 -0
  138. package/dist/gate/structural.js.map +1 -0
  139. package/dist/gate/types.d.ts +45 -0
  140. package/dist/gate/types.d.ts.map +1 -0
  141. package/dist/gate/types.js +5 -0
  142. package/dist/gate/types.js.map +1 -0
  143. package/dist/gate/values.d.ts +19 -0
  144. package/dist/gate/values.d.ts.map +1 -0
  145. package/dist/gate/values.js +124 -0
  146. package/dist/gate/values.js.map +1 -0
  147. package/dist/headless/apply-gated.d.ts +32 -0
  148. package/dist/headless/apply-gated.d.ts.map +1 -0
  149. package/dist/headless/apply-gated.js +26 -0
  150. package/dist/headless/apply-gated.js.map +1 -0
  151. package/dist/headless/diff.d.ts +41 -0
  152. package/dist/headless/diff.d.ts.map +1 -0
  153. package/dist/headless/diff.js +116 -0
  154. package/dist/headless/diff.js.map +1 -0
  155. package/dist/headless/node-path.d.ts +10 -0
  156. package/dist/headless/node-path.d.ts.map +1 -0
  157. package/dist/headless/node-path.js +24 -0
  158. package/dist/headless/node-path.js.map +1 -0
  159. package/dist/headless/read.d.ts +26 -0
  160. package/dist/headless/read.d.ts.map +1 -0
  161. package/dist/headless/read.js +78 -0
  162. package/dist/headless/read.js.map +1 -0
  163. package/dist/headless/schema-lookup.d.ts +52 -0
  164. package/dist/headless/schema-lookup.d.ts.map +1 -0
  165. package/dist/headless/schema-lookup.js +77 -0
  166. package/dist/headless/schema-lookup.js.map +1 -0
  167. package/dist/headless/write.d.ts +46 -0
  168. package/dist/headless/write.d.ts.map +1 -0
  169. package/dist/headless/write.js +103 -0
  170. package/dist/headless/write.js.map +1 -0
  171. package/dist/history/history.d.ts +90 -0
  172. package/dist/history/history.d.ts.map +1 -0
  173. package/dist/history/history.js +86 -0
  174. package/dist/history/history.js.map +1 -0
  175. package/dist/history/persistence.d.ts +33 -0
  176. package/dist/history/persistence.d.ts.map +1 -0
  177. package/dist/history/persistence.js +71 -0
  178. package/dist/history/persistence.js.map +1 -0
  179. package/dist/index.d.ts +55 -0
  180. package/dist/index.d.ts.map +1 -0
  181. package/dist/index.js +75 -0
  182. package/dist/index.js.map +1 -0
  183. package/dist/lint/context.d.ts +15 -0
  184. package/dist/lint/context.d.ts.map +1 -0
  185. package/dist/lint/context.js +24 -0
  186. package/dist/lint/context.js.map +1 -0
  187. package/dist/lint/docs.d.ts +18 -0
  188. package/dist/lint/docs.d.ts.map +1 -0
  189. package/dist/lint/docs.js +117 -0
  190. package/dist/lint/docs.js.map +1 -0
  191. package/dist/lint/engine.d.ts +21 -0
  192. package/dist/lint/engine.d.ts.map +1 -0
  193. package/dist/lint/engine.js +123 -0
  194. package/dist/lint/engine.js.map +1 -0
  195. package/dist/lint/fix.d.ts +27 -0
  196. package/dist/lint/fix.d.ts.map +1 -0
  197. package/dist/lint/fix.js +22 -0
  198. package/dist/lint/fix.js.map +1 -0
  199. package/dist/lint/precision.d.ts +51 -0
  200. package/dist/lint/precision.d.ts.map +1 -0
  201. package/dist/lint/precision.js +64 -0
  202. package/dist/lint/precision.js.map +1 -0
  203. package/dist/lint/rules/bsdd.d.ts +5 -0
  204. package/dist/lint/rules/bsdd.d.ts.map +1 -0
  205. package/dist/lint/rules/bsdd.js +123 -0
  206. package/dist/lint/rules/bsdd.js.map +1 -0
  207. package/dist/lint/rules/card.d.ts +10 -0
  208. package/dist/lint/rules/card.d.ts.map +1 -0
  209. package/dist/lint/rules/card.js +140 -0
  210. package/dist/lint/rules/card.js.map +1 -0
  211. package/dist/lint/rules/doc-ver-part.d.ts +7 -0
  212. package/dist/lint/rules/doc-ver-part.d.ts.map +1 -0
  213. package/dist/lint/rules/doc-ver-part.js +155 -0
  214. package/dist/lint/rules/doc-ver-part.js.map +1 -0
  215. package/dist/lint/rules/entity.d.ts +12 -0
  216. package/dist/lint/rules/entity.d.ts.map +1 -0
  217. package/dist/lint/rules/entity.js +215 -0
  218. package/dist/lint/rules/entity.js.map +1 -0
  219. package/dist/lint/rules/index.d.ts +4 -0
  220. package/dist/lint/rules/index.d.ts.map +1 -0
  221. package/dist/lint/rules/index.js +63 -0
  222. package/dist/lint/rules/index.js.map +1 -0
  223. package/dist/lint/rules/pdt-att.d.ts +7 -0
  224. package/dist/lint/rules/pdt-att.d.ts.map +1 -0
  225. package/dist/lint/rules/pdt-att.js +209 -0
  226. package/dist/lint/rules/pdt-att.js.map +1 -0
  227. package/dist/lint/rules/pset.d.ts +12 -0
  228. package/dist/lint/rules/pset.d.ts.map +1 -0
  229. package/dist/lint/rules/pset.js +263 -0
  230. package/dist/lint/rules/pset.js.map +1 -0
  231. package/dist/lint/rules/regex.d.ts +6 -0
  232. package/dist/lint/rules/regex.d.ts.map +1 -0
  233. package/dist/lint/rules/regex.js +184 -0
  234. package/dist/lint/rules/regex.js.map +1 -0
  235. package/dist/lint/rules/spec-doc.d.ts +5 -0
  236. package/dist/lint/rules/spec-doc.d.ts.map +1 -0
  237. package/dist/lint/rules/spec-doc.js +132 -0
  238. package/dist/lint/rules/spec-doc.js.map +1 -0
  239. package/dist/lint/rules/spec.d.ts +24 -0
  240. package/dist/lint/rules/spec.d.ts.map +1 -0
  241. package/dist/lint/rules/spec.js +162 -0
  242. package/dist/lint/rules/spec.js.map +1 -0
  243. package/dist/lint/rules/units.d.ts +4 -0
  244. package/dist/lint/rules/units.d.ts.map +1 -0
  245. package/dist/lint/rules/units.js +101 -0
  246. package/dist/lint/rules/units.js.map +1 -0
  247. package/dist/lint/rules/util.d.ts +37 -0
  248. package/dist/lint/rules/util.d.ts.map +1 -0
  249. package/dist/lint/rules/util.js +117 -0
  250. package/dist/lint/rules/util.js.map +1 -0
  251. package/dist/lint/rules/value-sites.d.ts +28 -0
  252. package/dist/lint/rules/value-sites.d.ts.map +1 -0
  253. package/dist/lint/rules/value-sites.js +81 -0
  254. package/dist/lint/rules/value-sites.js.map +1 -0
  255. package/dist/lint/rules/values.d.ts +22 -0
  256. package/dist/lint/rules/values.d.ts.map +1 -0
  257. package/dist/lint/rules/values.js +237 -0
  258. package/dist/lint/rules/values.js.map +1 -0
  259. package/dist/lint/rules/xsd-regex.d.ts +34 -0
  260. package/dist/lint/rules/xsd-regex.d.ts.map +1 -0
  261. package/dist/lint/rules/xsd-regex.js +149 -0
  262. package/dist/lint/rules/xsd-regex.js.map +1 -0
  263. package/dist/lint/solver/sample.d.ts +3 -0
  264. package/dist/lint/solver/sample.d.ts.map +1 -0
  265. package/dist/lint/solver/sample.js +134 -0
  266. package/dist/lint/solver/sample.js.map +1 -0
  267. package/dist/lint/solver/solver.d.ts +39 -0
  268. package/dist/lint/solver/solver.d.ts.map +1 -0
  269. package/dist/lint/solver/solver.js +126 -0
  270. package/dist/lint/solver/solver.js.map +1 -0
  271. package/dist/lint/suppress.d.ts +12 -0
  272. package/dist/lint/suppress.d.ts.map +1 -0
  273. package/dist/lint/suppress.js +56 -0
  274. package/dist/lint/suppress.js.map +1 -0
  275. package/dist/lint/types.d.ts +162 -0
  276. package/dist/lint/types.d.ts.map +1 -0
  277. package/dist/lint/types.js +5 -0
  278. package/dist/lint/types.js.map +1 -0
  279. package/dist/lint/walk.d.ts +20 -0
  280. package/dist/lint/walk.d.ts.map +1 -0
  281. package/dist/lint/walk.js +47 -0
  282. package/dist/lint/walk.js.map +1 -0
  283. package/dist/match/cascade.d.ts +53 -0
  284. package/dist/match/cascade.d.ts.map +1 -0
  285. package/dist/match/cascade.js +135 -0
  286. package/dist/match/cascade.js.map +1 -0
  287. package/dist/match/reidentify.d.ts +46 -0
  288. package/dist/match/reidentify.d.ts.map +1 -0
  289. package/dist/match/reidentify.js +67 -0
  290. package/dist/match/reidentify.js.map +1 -0
  291. package/dist/merge/comments.d.ts +13 -0
  292. package/dist/merge/comments.d.ts.map +1 -0
  293. package/dist/merge/comments.js +61 -0
  294. package/dist/merge/comments.js.map +1 -0
  295. package/dist/merge/index.d.ts +4 -0
  296. package/dist/merge/index.d.ts.map +1 -0
  297. package/dist/merge/index.js +6 -0
  298. package/dist/merge/index.js.map +1 -0
  299. package/dist/merge/keys.d.ts +22 -0
  300. package/dist/merge/keys.d.ts.map +1 -0
  301. package/dist/merge/keys.js +54 -0
  302. package/dist/merge/keys.js.map +1 -0
  303. package/dist/merge/merge.d.ts +8 -0
  304. package/dist/merge/merge.d.ts.map +1 -0
  305. package/dist/merge/merge.js +206 -0
  306. package/dist/merge/merge.js.map +1 -0
  307. package/dist/merge/order.d.ts +11 -0
  308. package/dist/merge/order.d.ts.map +1 -0
  309. package/dist/merge/order.js +117 -0
  310. package/dist/merge/order.js.map +1 -0
  311. package/dist/merge/sidecar.d.ts +12 -0
  312. package/dist/merge/sidecar.d.ts.map +1 -0
  313. package/dist/merge/sidecar.js +64 -0
  314. package/dist/merge/sidecar.js.map +1 -0
  315. package/dist/merge/types.d.ts +50 -0
  316. package/dist/merge/types.d.ts.map +1 -0
  317. package/dist/merge/types.js +5 -0
  318. package/dist/merge/types.js.map +1 -0
  319. package/dist/merge/view.d.ts +28 -0
  320. package/dist/merge/view.d.ts.map +1 -0
  321. package/dist/merge/view.js +35 -0
  322. package/dist/merge/view.js.map +1 -0
  323. package/dist/ops/draft.d.ts +33 -0
  324. package/dist/ops/draft.d.ts.map +1 -0
  325. package/dist/ops/draft.js +253 -0
  326. package/dist/ops/draft.js.map +1 -0
  327. package/dist/ops/json-schema-lite.d.ts +41 -0
  328. package/dist/ops/json-schema-lite.d.ts.map +1 -0
  329. package/dist/ops/json-schema-lite.js +119 -0
  330. package/dist/ops/json-schema-lite.js.map +1 -0
  331. package/dist/ops/schema-values.d.ts +5 -0
  332. package/dist/ops/schema-values.d.ts.map +1 -0
  333. package/dist/ops/schema-values.js +233 -0
  334. package/dist/ops/schema-values.js.map +1 -0
  335. package/dist/ops/schema.d.ts +27 -0
  336. package/dist/ops/schema.d.ts.map +1 -0
  337. package/dist/ops/schema.js +258 -0
  338. package/dist/ops/schema.js.map +1 -0
  339. package/dist/ops/sidecar-ops.d.ts +85 -0
  340. package/dist/ops/sidecar-ops.d.ts.map +1 -0
  341. package/dist/ops/sidecar-ops.js +5 -0
  342. package/dist/ops/sidecar-ops.js.map +1 -0
  343. package/dist/ops/types.d.ts +400 -0
  344. package/dist/ops/types.d.ts.map +1 -0
  345. package/dist/ops/types.js +5 -0
  346. package/dist/ops/types.js.map +1 -0
  347. package/dist/ops/units.d.ts +4 -0
  348. package/dist/ops/units.d.ts.map +1 -0
  349. package/dist/ops/units.js +75 -0
  350. package/dist/ops/units.js.map +1 -0
  351. package/dist/reducer/apply.d.ts +33 -0
  352. package/dist/reducer/apply.d.ts.map +1 -0
  353. package/dist/reducer/apply.js +123 -0
  354. package/dist/reducer/apply.js.map +1 -0
  355. package/dist/reducer/comment-ops.d.ts +18 -0
  356. package/dist/reducer/comment-ops.d.ts.map +1 -0
  357. package/dist/reducer/comment-ops.js +104 -0
  358. package/dist/reducer/comment-ops.js.map +1 -0
  359. package/dist/reducer/edit.d.ts +38 -0
  360. package/dist/reducer/edit.d.ts.map +1 -0
  361. package/dist/reducer/edit.js +126 -0
  362. package/dist/reducer/edit.js.map +1 -0
  363. package/dist/reducer/facet-ops.d.ts +20 -0
  364. package/dist/reducer/facet-ops.d.ts.map +1 -0
  365. package/dist/reducer/facet-ops.js +184 -0
  366. package/dist/reducer/facet-ops.js.map +1 -0
  367. package/dist/reducer/meta-ops.d.ts +20 -0
  368. package/dist/reducer/meta-ops.d.ts.map +1 -0
  369. package/dist/reducer/meta-ops.js +52 -0
  370. package/dist/reducer/meta-ops.js.map +1 -0
  371. package/dist/reducer/spec-ops.d.ts +29 -0
  372. package/dist/reducer/spec-ops.d.ts.map +1 -0
  373. package/dist/reducer/spec-ops.js +181 -0
  374. package/dist/reducer/spec-ops.js.map +1 -0
  375. package/dist/reducer/test-ops.d.ts +15 -0
  376. package/dist/reducer/test-ops.d.ts.map +1 -0
  377. package/dist/reducer/test-ops.js +90 -0
  378. package/dist/reducer/test-ops.js.map +1 -0
  379. package/dist/reducer/value-ops.d.ts +26 -0
  380. package/dist/reducer/value-ops.d.ts.map +1 -0
  381. package/dist/reducer/value-ops.js +173 -0
  382. package/dist/reducer/value-ops.js.map +1 -0
  383. package/dist/render/describe.d.ts +20 -0
  384. package/dist/render/describe.d.ts.map +1 -0
  385. package/dist/render/describe.js +47 -0
  386. package/dist/render/describe.js.map +1 -0
  387. package/dist/revision/index.d.ts +4 -0
  388. package/dist/revision/index.d.ts.map +1 -0
  389. package/dist/revision/index.js +7 -0
  390. package/dist/revision/index.js.map +1 -0
  391. package/dist/revision/revision.d.ts +79 -0
  392. package/dist/revision/revision.d.ts.map +1 -0
  393. package/dist/revision/revision.js +120 -0
  394. package/dist/revision/revision.js.map +1 -0
  395. package/dist/revision/sha256.d.ts +3 -0
  396. package/dist/revision/sha256.d.ts.map +1 -0
  397. package/dist/revision/sha256.js +69 -0
  398. package/dist/revision/sha256.js.map +1 -0
  399. package/dist/revision/verify.d.ts +21 -0
  400. package/dist/revision/verify.d.ts.map +1 -0
  401. package/dist/revision/verify.js +51 -0
  402. package/dist/revision/verify.js.map +1 -0
  403. package/dist/revision/view.d.ts +36 -0
  404. package/dist/revision/view.d.ts.map +1 -0
  405. package/dist/revision/view.js +32 -0
  406. package/dist/revision/view.js.map +1 -0
  407. package/dist/sidecar/idsz.d.ts +14 -0
  408. package/dist/sidecar/idsz.d.ts.map +1 -0
  409. package/dist/sidecar/idsz.js +58 -0
  410. package/dist/sidecar/idsz.js.map +1 -0
  411. package/dist/sidecar/sidecar-schema.d.ts +4 -0
  412. package/dist/sidecar/sidecar-schema.d.ts.map +1 -0
  413. package/dist/sidecar/sidecar-schema.js +69 -0
  414. package/dist/sidecar/sidecar-schema.js.map +1 -0
  415. package/dist/sidecar/sidecar.d.ts +102 -0
  416. package/dist/sidecar/sidecar.d.ts.map +1 -0
  417. package/dist/sidecar/sidecar.js +160 -0
  418. package/dist/sidecar/sidecar.js.map +1 -0
  419. package/dist/testing/index.d.ts +6 -0
  420. package/dist/testing/index.d.ts.map +1 -0
  421. package/dist/testing/index.js +8 -0
  422. package/dist/testing/index.js.map +1 -0
  423. package/dist/testing/junit.d.ts +10 -0
  424. package/dist/testing/junit.d.ts.map +1 -0
  425. package/dist/testing/junit.js +51 -0
  426. package/dist/testing/junit.js.map +1 -0
  427. package/dist/testing/outcome.d.ts +10 -0
  428. package/dist/testing/outcome.d.ts.map +1 -0
  429. package/dist/testing/outcome.js +22 -0
  430. package/dist/testing/outcome.js.map +1 -0
  431. package/dist/testing/runner.d.ts +72 -0
  432. package/dist/testing/runner.d.ts.map +1 -0
  433. package/dist/testing/runner.js +60 -0
  434. package/dist/testing/runner.js.map +1 -0
  435. package/dist/testing/types.d.ts +60 -0
  436. package/dist/testing/types.d.ts.map +1 -0
  437. package/dist/testing/types.js +5 -0
  438. package/dist/testing/types.js.map +1 -0
  439. package/dist/testing/view.d.ts +31 -0
  440. package/dist/testing/view.d.ts.map +1 -0
  441. package/dist/testing/view.js +30 -0
  442. package/dist/testing/view.js.map +1 -0
  443. package/dist/uuid.d.ts +39 -0
  444. package/dist/uuid.d.ts.map +1 -0
  445. package/dist/uuid.js +84 -0
  446. package/dist/uuid.js.map +1 -0
  447. package/package.json +56 -3
@@ -0,0 +1,26 @@
1
+ /** Reducers for field/value ops and `meta.custom.*`. Each returns its exact inverse. */
2
+ import type { IDSConstraint } from '@ifc-lite/ids';
3
+ import { type FacetFieldName } from '../document/fields.js';
4
+ import type { StudioDocument } from '../document/types.js';
5
+ import type { MetaDeclarePsetOp, MetaDeclareUserDefinedTypeOp, MetaRemovePsetOp, MetaRemoveUserDefinedTypeOp, ValueAddEnumOp, ValueInput, ValueRemoveEnumOp } from '../ops/types.js';
6
+ import { type Uuid } from '../uuid.js';
7
+ import { type StepResult } from './spec-ops.js';
8
+ /**
9
+ * Set (or remove, with `undefined`) one constraint field. The inverse
10
+ * restores every field whose constraint or id changed — removing
11
+ * `partOf.entity.name` also drops `partOf.entity.predefinedType`, and both
12
+ * come back on undo, with their original ids.
13
+ */
14
+ export declare function applyConstraint(doc: StudioDocument, forward: {
15
+ opId: Uuid;
16
+ }, facetId: Uuid, field: FacetFieldName, value: IDSConstraint | undefined, constraintId: Uuid | undefined): StepResult;
17
+ export declare function applySetField(doc: StudioDocument, forward: {
18
+ opId: Uuid;
19
+ }, facetId: Uuid, field: FacetFieldName, value: ValueInput | null, constraintId: Uuid | undefined): StepResult;
20
+ export declare function applyAddEnumValue(doc: StudioDocument, op: ValueAddEnumOp): StepResult;
21
+ export declare function applyRemoveEnumValue(doc: StudioDocument, op: ValueRemoveEnumOp): StepResult;
22
+ export declare function applyDeclarePset(doc: StudioDocument, op: MetaDeclarePsetOp): StepResult;
23
+ export declare function applyRemovePset(doc: StudioDocument, op: MetaRemovePsetOp): StepResult;
24
+ export declare function applyDeclareUserDefinedType(doc: StudioDocument, op: MetaDeclareUserDefinedTypeOp): StepResult;
25
+ export declare function applyRemoveUserDefinedType(doc: StudioDocument, op: MetaRemoveUserDefinedTypeOp): StepResult;
26
+ //# sourceMappingURL=value-ops.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"value-ops.d.ts","sourceRoot":"","sources":["../../src/reducer/value-ops.ts"],"names":[],"mappings":"AAIA,wFAAwF;AAExF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EAAoD,KAAK,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAE9G,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAE3D,OAAO,KAAK,EAEV,iBAAiB,EACjB,4BAA4B,EAC5B,gBAAgB,EAChB,2BAA2B,EAG3B,cAAc,EACd,UAAU,EACV,iBAAiB,EAClB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAY,KAAK,IAAI,EAAE,MAAM,YAAY,CAAC;AAEjD,OAAO,EAAO,KAAK,UAAU,EAAE,MAAM,eAAe,CAAC;AAErD;;;;;GAKG;AACH,wBAAgB,eAAe,CAC7B,GAAG,EAAE,cAAc,EACnB,OAAO,EAAE;IAAE,IAAI,EAAE,IAAI,CAAA;CAAE,EACvB,OAAO,EAAE,IAAI,EACb,KAAK,EAAE,cAAc,EACrB,KAAK,EAAE,aAAa,GAAG,SAAS,EAChC,YAAY,EAAE,IAAI,GAAG,SAAS,GAC7B,UAAU,CA8CZ;AAED,wBAAgB,aAAa,CAC3B,GAAG,EAAE,cAAc,EACnB,OAAO,EAAE;IAAE,IAAI,EAAE,IAAI,CAAA;CAAE,EACvB,OAAO,EAAE,IAAI,EACb,KAAK,EAAE,cAAc,EACrB,KAAK,EAAE,UAAU,GAAG,IAAI,EACxB,YAAY,EAAE,IAAI,GAAG,SAAS,GAC7B,UAAU,CAGZ;AAMD,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,cAAc,EAAE,EAAE,EAAE,cAAc,GAAG,UAAU,CAerF;AAED,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,cAAc,EAAE,EAAE,EAAE,iBAAiB,GAAG,UAAU,CAa3F;AAED,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,cAAc,EAAE,EAAE,EAAE,iBAAiB,GAAG,UAAU,CAsBvF;AAED,wBAAgB,eAAe,CAAC,GAAG,EAAE,cAAc,EAAE,EAAE,EAAE,gBAAgB,GAAG,UAAU,CASrF;AAMD,wBAAgB,2BAA2B,CAAC,GAAG,EAAE,cAAc,EAAE,EAAE,EAAE,4BAA4B,GAAG,UAAU,CAe7G;AAED,wBAAgB,0BAA0B,CAAC,GAAG,EAAE,cAAc,EAAE,EAAE,EAAE,2BAA2B,GAAG,UAAU,CAW3G"}
@@ -0,0 +1,173 @@
1
+ /* This Source Code Form is subject to the terms of the Mozilla Public
2
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
3
+ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */
4
+ import { FACET_FIELDS, fieldBelongsTo, getField, setField } from '../document/fields.js';
5
+ import { locateNode } from '../document/node-index.js';
6
+ import { normaliseValue } from '../ops/draft.js';
7
+ import { deriveId } from '../uuid.js';
8
+ import { insertAt, itemAt, OpApplyError, removeAt, replaceAt, replaceItem, requireFacet } from './edit.js';
9
+ import { inv } from './spec-ops.js';
10
+ /**
11
+ * Set (or remove, with `undefined`) one constraint field. The inverse
12
+ * restores every field whose constraint or id changed — removing
13
+ * `partOf.entity.name` also drops `partOf.entity.predefinedType`, and both
14
+ * come back on undo, with their original ids.
15
+ */
16
+ export function applyConstraint(doc, forward, facetId, field, value, constraintId) {
17
+ const loc = requireFacet(doc, facetId);
18
+ const item = itemAt(doc, loc);
19
+ if (!fieldBelongsTo(item.facet, field)) {
20
+ throw new OpApplyError('GATE-STR-002', `field ${field} does not belong to a ${item.facet.type} facet`);
21
+ }
22
+ let facet;
23
+ try {
24
+ facet = setField(item.facet, field, value);
25
+ }
26
+ catch (err) {
27
+ throw new OpApplyError('GATE-STR-002', err instanceof Error ? err.message : String(err));
28
+ }
29
+ const constraints = {};
30
+ for (const f of FACET_FIELDS[facet.type]) {
31
+ if (getField(facet, f) === undefined)
32
+ continue;
33
+ const previous = item.nodes.constraints[f];
34
+ if (previous)
35
+ constraints[f] = previous;
36
+ else {
37
+ const id = (f === field ? constraintId : undefined) ?? deriveId(forward.opId, f);
38
+ if (locateNode(doc, id))
39
+ throw new OpApplyError('GATE-STR-001', `node id ${id} already exists`);
40
+ constraints[f] = id;
41
+ }
42
+ }
43
+ const inverse = [];
44
+ const touched = [loc.specId, facetId];
45
+ for (const f of FACET_FIELDS[item.facet.type]) {
46
+ const before = getField(item.facet, f);
47
+ const after = getField(facet, f);
48
+ if (before === after && item.nodes.constraints[f] === constraints[f])
49
+ continue;
50
+ const oldId = item.nodes.constraints[f];
51
+ inverse.push(inv(forward, inverse.length, 'facet.setField', {
52
+ facetId,
53
+ field: f,
54
+ value: before ? { kind: 'raw', constraint: before } : null,
55
+ ...(oldId ? { constraintId: oldId } : {}),
56
+ }));
57
+ const id = constraints[f] ?? oldId;
58
+ if (id)
59
+ touched.push(id);
60
+ }
61
+ return {
62
+ doc: replaceItem(doc, loc, { ...item, facet, nodes: { id: facetId, constraints } }),
63
+ inverse,
64
+ touched,
65
+ };
66
+ }
67
+ export function applySetField(doc, forward, facetId, field, value, constraintId) {
68
+ const constraint = value === null ? undefined : normaliseValue(value, field);
69
+ return applyConstraint(doc, forward, facetId, field, constraint, constraintId);
70
+ }
71
+ function scalarString(v) {
72
+ return String(v);
73
+ }
74
+ export function applyAddEnumValue(doc, op) {
75
+ const { facetId, field, value, constraintId } = op.payload;
76
+ const loc = requireFacet(doc, facetId);
77
+ const current = getField(itemAt(doc, loc).facet, field);
78
+ const v = scalarString(value);
79
+ let next;
80
+ if (!current)
81
+ next = { type: 'simpleValue', value: v };
82
+ else if (current.type === 'simpleValue') {
83
+ next = current.value === v ? current : { type: 'enumeration', values: [current.value, v] };
84
+ }
85
+ else if (current.type === 'enumeration') {
86
+ next = current.values.includes(v) ? current : { ...current, values: [...current.values, v] };
87
+ }
88
+ else {
89
+ throw new OpApplyError('GATE-VAL-008', `cannot add an enumeration value to a ${current.type} constraint`);
90
+ }
91
+ return applyConstraint(doc, op, facetId, field, next, constraintId);
92
+ }
93
+ export function applyRemoveEnumValue(doc, op) {
94
+ const { facetId, field, value } = op.payload;
95
+ const loc = requireFacet(doc, facetId);
96
+ const current = getField(itemAt(doc, loc).facet, field);
97
+ const v = scalarString(value);
98
+ if (!current || current.type !== 'enumeration' || !current.values.includes(v)) {
99
+ throw new OpApplyError('GATE-VAL-008', `${field} has no enumeration value "${v}"`);
100
+ }
101
+ if (current.values.length === 1) {
102
+ throw new OpApplyError('GATE-VAL-008', `cannot remove the last enumeration value of ${field}`);
103
+ }
104
+ const next = { ...current, values: current.values.filter((x) => x !== v) };
105
+ return applyConstraint(doc, op, facetId, field, next, undefined);
106
+ }
107
+ export function applyDeclarePset(doc, op) {
108
+ const { decl, index } = op.payload;
109
+ const psets = doc.meta.custom.psets;
110
+ const existing = psets.findIndex((p) => p.name === decl.name);
111
+ let next;
112
+ let inverse;
113
+ if (existing >= 0) {
114
+ next = replaceAt(psets, existing, decl);
115
+ inverse = inv(op, 0, 'meta.custom.declarePset', { decl: psets[existing] });
116
+ }
117
+ else {
118
+ const at = index ?? psets.length;
119
+ if (!Number.isInteger(at) || at < 0 || at > psets.length) {
120
+ throw new OpApplyError('GATE-STR-006', `pset index ${at} is out of range 0..${psets.length}`);
121
+ }
122
+ next = insertAt(psets, at, decl);
123
+ inverse = inv(op, 0, 'meta.custom.removePset', { name: decl.name });
124
+ }
125
+ return {
126
+ doc: { ...doc, meta: { ...doc.meta, custom: { ...doc.meta.custom, psets: next } } },
127
+ inverse: [inverse],
128
+ touched: [doc.nodes.document],
129
+ };
130
+ }
131
+ export function applyRemovePset(doc, op) {
132
+ const psets = doc.meta.custom.psets;
133
+ const index = psets.findIndex((p) => p.name === op.payload.name);
134
+ if (index < 0)
135
+ throw new OpApplyError('GATE-CUST-004', `no custom property set "${op.payload.name}" is declared`);
136
+ return {
137
+ doc: { ...doc, meta: { ...doc.meta, custom: { ...doc.meta.custom, psets: removeAt(psets, index) } } },
138
+ inverse: [inv(op, 0, 'meta.custom.declarePset', { decl: psets[index], index })],
139
+ touched: [doc.nodes.document],
140
+ };
141
+ }
142
+ function sameType(a, b) {
143
+ return a.entity.toUpperCase() === b.entity.toUpperCase() && a.value.toUpperCase() === b.value.toUpperCase();
144
+ }
145
+ export function applyDeclareUserDefinedType(doc, op) {
146
+ const { entity, value, index } = op.payload;
147
+ const list = doc.meta.custom.userDefinedTypes;
148
+ if (list.some((d) => sameType(d, { entity, value }))) {
149
+ throw new OpApplyError('GATE-CUST-004', `user-defined type ${entity}.${value} is already declared`);
150
+ }
151
+ const at = index ?? list.length;
152
+ if (!Number.isInteger(at) || at < 0 || at > list.length) {
153
+ throw new OpApplyError('GATE-STR-006', `index ${at} is out of range 0..${list.length}`);
154
+ }
155
+ return {
156
+ doc: { ...doc, meta: { ...doc.meta, custom: { ...doc.meta.custom, userDefinedTypes: insertAt(list, at, { entity, value }) } } },
157
+ inverse: [inv(op, 0, 'meta.custom.removeUserDefinedType', { entity, value })],
158
+ touched: [doc.nodes.document],
159
+ };
160
+ }
161
+ export function applyRemoveUserDefinedType(doc, op) {
162
+ const list = doc.meta.custom.userDefinedTypes;
163
+ const index = list.findIndex((d) => sameType(d, op.payload));
164
+ if (index < 0) {
165
+ throw new OpApplyError('GATE-CUST-004', `user-defined type ${op.payload.entity}.${op.payload.value} is not declared`);
166
+ }
167
+ return {
168
+ doc: { ...doc, meta: { ...doc.meta, custom: { ...doc.meta.custom, userDefinedTypes: removeAt(list, index) } } },
169
+ inverse: [inv(op, 0, 'meta.custom.declareUserDefinedType', { ...list[index], index })],
170
+ touched: [doc.nodes.document],
171
+ };
172
+ }
173
+ //# sourceMappingURL=value-ops.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"value-ops.js","sourceRoot":"","sources":["../../src/reducer/value-ops.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Plain-language rendering of a facet in its section and optionality, for
3
+ * Studio cards, diffs and agent summaries ("Doors must have FireRating in
4
+ * Pset_DoorCommon").
5
+ *
6
+ * A thin adapter over `@ifc-lite/ids`' translation service, which owns
7
+ * the locale catalogues and the constraint wording, so Studio and the
8
+ * validation report never describe the same facet differently. A
9
+ * dedicated per facet × section × cardinality renderer (with `it`) is
10
+ * being added to `@ifc-lite/ids` in parallel; when it lands this function
11
+ * delegates to it and keeps its signature.
12
+ */
13
+ import { type IDSFacet, type RequirementOptionality, type SupportedLocale } from '@ifc-lite/ids';
14
+ import type { Section } from '../document/types.js';
15
+ /**
16
+ * Describe `facet` as it reads in `section`. `optionality` applies to
17
+ * requirements only (applicability facets select, they do not require).
18
+ */
19
+ export declare function describeFacet(facet: IDSFacet, section: Section, optionality?: RequirementOptionality, locale?: SupportedLocale): string;
20
+ //# sourceMappingURL=describe.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"describe.d.ts","sourceRoot":"","sources":["../../src/render/describe.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;GAWG;AAEH,OAAO,EAA4B,KAAK,QAAQ,EAAE,KAAK,sBAAsB,EAAE,KAAK,eAAe,EAA2B,MAAM,eAAe,CAAC;AACpJ,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAapD;;;GAGG;AACH,wBAAgB,aAAa,CAC3B,KAAK,EAAE,QAAQ,EACf,OAAO,EAAE,OAAO,EAChB,WAAW,GAAE,sBAAmC,EAChD,MAAM,GAAE,eAAsB,GAC7B,MAAM,CAaR"}
@@ -0,0 +1,47 @@
1
+ /* This Source Code Form is subject to the terms of the Mozilla Public
2
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
3
+ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */
4
+ /**
5
+ * Plain-language rendering of a facet in its section and optionality, for
6
+ * Studio cards, diffs and agent summaries ("Doors must have FireRating in
7
+ * Pset_DoorCommon").
8
+ *
9
+ * A thin adapter over `@ifc-lite/ids`' translation service, which owns
10
+ * the locale catalogues and the constraint wording, so Studio and the
11
+ * validation report never describe the same facet differently. A
12
+ * dedicated per facet × section × cardinality renderer (with `it`) is
13
+ * being added to `@ifc-lite/ids` in parallel; when it lands this function
14
+ * delegates to it and keeps its signature.
15
+ */
16
+ import { createTranslationService } from '@ifc-lite/ids';
17
+ const SERVICES = new Map();
18
+ function service(locale) {
19
+ let s = SERVICES.get(locale);
20
+ if (!s) {
21
+ s = createTranslationService(locale);
22
+ SERVICES.set(locale, s);
23
+ }
24
+ return s;
25
+ }
26
+ /**
27
+ * Describe `facet` as it reads in `section`. `optionality` applies to
28
+ * requirements only (applicability facets select, they do not require).
29
+ */
30
+ export function describeFacet(facet, section, optionality = 'required', locale = 'en') {
31
+ const s = service(locale);
32
+ if (section === 'applicability')
33
+ return s.describeFacet(facet, 'applicability');
34
+ const required = s.describeRequirement({ id: '', facet, optionality: 'required' });
35
+ if (optionality === 'required')
36
+ return required;
37
+ const text = s.describeRequirement({ id: '', facet, optionality });
38
+ if (text !== required)
39
+ return text;
40
+ // The service only rewrites sentences that start with "Must …"; for the
41
+ // others, state the optionality explicitly instead of returning a
42
+ // sentence that reads as required. Prohibited facets are phrased as the
43
+ // condition that must not hold.
44
+ const label = s.getOptionalityText(optionality);
45
+ return optionality === 'prohibited' ? `${label}: ${s.describeFacet(facet, 'applicability')}` : `${label}: ${required}`;
46
+ }
47
+ //# sourceMappingURL=describe.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"describe.js","sourceRoot":"","sources":["../../src/render/describe.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAE/D;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,wBAAwB,EAA6F,MAAM,eAAe,CAAC;AAGpJ,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAuC,CAAC;AAEhE,SAAS,OAAO,CAAC,MAAuB;IACtC,IAAI,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAC7B,IAAI,CAAC,CAAC,EAAE,CAAC;QACP,CAAC,GAAG,wBAAwB,CAAC,MAAM,CAAC,CAAC;QACrC,QAAQ,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IAC1B,CAAC;IACD,OAAO,CAAC,CAAC;AACX,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,aAAa,CAC3B,KAAe,EACf,OAAgB,EAChB,cAAsC,UAAU,EAChD,SAA0B,IAAI;IAE9B,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAC1B,IAAI,OAAO,KAAK,eAAe;QAAE,OAAO,CAAC,CAAC,aAAa,CAAC,KAAK,EAAE,eAAe,CAAC,CAAC;IAChF,MAAM,QAAQ,GAAG,CAAC,CAAC,mBAAmB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,CAAC,CAAC;IACnF,IAAI,WAAW,KAAK,UAAU;QAAE,OAAO,QAAQ,CAAC;IAChD,MAAM,IAAI,GAAG,CAAC,CAAC,mBAAmB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,CAAC;IACnE,IAAI,IAAI,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IACnC,wEAAwE;IACxE,kEAAkE;IAClE,wEAAwE;IACxE,gCAAgC;IAChC,MAAM,KAAK,GAAG,CAAC,CAAC,kBAAkB,CAAC,WAAW,CAAC,CAAC;IAChD,OAAO,WAAW,KAAK,YAAY,CAAC,CAAC,CAAC,GAAG,KAAK,KAAK,CAAC,CAAC,aAAa,CAAC,KAAK,EAAE,eAAe,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,KAAK,QAAQ,EAAE,CAAC;AACzH,CAAC"}
@@ -0,0 +1,4 @@
1
+ export { REVISION_LOG_FORMAT, RevisionError, checkoutRevision, commitRevision, contentHash, createRevisionLog, findRevision, headRevision, isReleasedContent, signOff, type CommitRevisionInfo, type Revision, type RevisionLabel, type RevisionLog, type SignOff, type SignOffInfo, } from './revision.js';
2
+ export { verifyRevisionLog, type RevisionProblem, type RevisionProblemCode, type RevisionVerification } from './verify.js';
3
+ export { revisionTimeline, type RevisionTimeline, type TimelineEntry } from './view.js';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/revision/index.ts"],"names":[],"mappings":"AAIA,OAAO,EACL,mBAAmB,EACnB,aAAa,EACb,gBAAgB,EAChB,cAAc,EACd,WAAW,EACX,iBAAiB,EACjB,YAAY,EACZ,YAAY,EACZ,iBAAiB,EACjB,OAAO,EACP,KAAK,kBAAkB,EACvB,KAAK,QAAQ,EACb,KAAK,aAAa,EAClB,KAAK,WAAW,EAChB,KAAK,OAAO,EACZ,KAAK,WAAW,GACjB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,iBAAiB,EAAE,KAAK,eAAe,EAAE,KAAK,mBAAmB,EAAE,KAAK,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAC3H,OAAO,EAAE,gBAAgB,EAAE,KAAK,gBAAgB,EAAE,KAAK,aAAa,EAAE,MAAM,WAAW,CAAC"}
@@ -0,0 +1,7 @@
1
+ /* This Source Code Form is subject to the terms of the Mozilla Public
2
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
3
+ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */
4
+ export { REVISION_LOG_FORMAT, RevisionError, checkoutRevision, commitRevision, contentHash, createRevisionLog, findRevision, headRevision, isReleasedContent, signOff, } from './revision.js';
5
+ export { verifyRevisionLog } from './verify.js';
6
+ export { revisionTimeline } from './view.js';
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/revision/index.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAE/D,OAAO,EACL,mBAAmB,EACnB,aAAa,EACb,gBAAgB,EAChB,cAAc,EACd,WAAW,EACX,iBAAiB,EACjB,YAAY,EACZ,YAAY,EACZ,iBAAiB,EACjB,OAAO,GAOR,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,iBAAiB,EAA6E,MAAM,aAAa,CAAC;AAC3H,OAAO,EAAE,gBAAgB,EAA6C,MAAM,WAAW,CAAC"}
@@ -0,0 +1,79 @@
1
+ import type { StudioDocument } from '../document/types.js';
2
+ import { type Uuid } from '../uuid.js';
3
+ export declare const REVISION_LOG_FORMAT = "ifc-lite.ids-studio.revisions";
4
+ export type RevisionLabel = 'draft' | 'review' | 'released';
5
+ export interface Revision {
6
+ revId: Uuid;
7
+ parentRevId?: Uuid;
8
+ docId: Uuid;
9
+ label: RevisionLabel;
10
+ author: string;
11
+ /** ISO timestamp. */
12
+ at: string;
13
+ message?: string;
14
+ contentHash: string;
15
+ /** `hash` of the parent revision. */
16
+ parentHash?: string;
17
+ hash: string;
18
+ /** The document as committed (restore with `checkoutRevision`). */
19
+ snapshot: StudioDocument;
20
+ }
21
+ export interface SignOff {
22
+ revId: Uuid;
23
+ by: string;
24
+ role?: string;
25
+ at: string;
26
+ statement: string;
27
+ /** Hash of the signed revision at signing time. */
28
+ revisionHash: string;
29
+ /** Hash of the previous sign-off in the log (empty for the first). */
30
+ prevHash: string;
31
+ hash: string;
32
+ }
33
+ export interface RevisionLog {
34
+ format: typeof REVISION_LOG_FORMAT;
35
+ docId: Uuid;
36
+ revisions: Revision[];
37
+ signOffs: SignOff[];
38
+ }
39
+ export declare class RevisionError extends Error {
40
+ readonly code: 'REV-RELEASED-001' | 'REV-DOC-001' | 'REV-UNKNOWN-001' | 'SIGN-LABEL-001';
41
+ constructor(code: 'REV-RELEASED-001' | 'REV-DOC-001' | 'REV-UNKNOWN-001' | 'SIGN-LABEL-001', message: string);
42
+ }
43
+ /** Hash of the normative content of `doc` (node ids and annotations excluded). */
44
+ export declare function contentHash(doc: StudioDocument): string;
45
+ export declare function revisionHash(r: Omit<Revision, 'hash' | 'snapshot'>): string;
46
+ export declare function signOffHash(s: Omit<SignOff, 'hash'>): string;
47
+ export declare function createRevisionLog(docId: Uuid): RevisionLog;
48
+ export declare function headRevision(log: RevisionLog): Revision | undefined;
49
+ export declare function findRevision(log: RevisionLog, revId: Uuid): Revision | undefined;
50
+ export interface CommitRevisionInfo {
51
+ author: string;
52
+ at?: string;
53
+ message?: string;
54
+ label?: RevisionLabel;
55
+ /** Defaults to the head revision. */
56
+ parentRevId?: Uuid;
57
+ revId?: Uuid;
58
+ }
59
+ /** Record `doc` as a new revision. Returns the new log (the input is not changed). */
60
+ export declare function commitRevision(log: RevisionLog, doc: StudioDocument, info: CommitRevisionInfo): {
61
+ log: RevisionLog;
62
+ revision: Revision;
63
+ };
64
+ export interface SignOffInfo {
65
+ by: string;
66
+ role?: string;
67
+ at?: string;
68
+ statement: string;
69
+ }
70
+ /** Attest a revision in review or released. */
71
+ export declare function signOff(log: RevisionLog, revId: Uuid, info: SignOffInfo): {
72
+ log: RevisionLog;
73
+ signOff: SignOff;
74
+ };
75
+ /** The committed document of a revision (to view it, or to branch a draft from it). */
76
+ export declare function checkoutRevision(log: RevisionLog, revId: Uuid): StudioDocument;
77
+ /** True when `doc` may not be edited in place: its content is a released revision's. */
78
+ export declare function isReleasedContent(log: RevisionLog, doc: StudioDocument): boolean;
79
+ //# sourceMappingURL=revision.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"revision.d.ts","sourceRoot":"","sources":["../../src/revision/revision.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,120 @@
1
+ /* This Source Code Form is subject to the terms of the Mozilla Public
2
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
3
+ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */
4
+ /**
5
+ * Revisions, sign-off and the hash chain (07-interop-versioning-collab.md
6
+ * §2, FR-G06).
7
+ *
8
+ * - A revision is an immutable snapshot `{ revId, parentRevId, label,
9
+ * author, at, message, contentHash, parentHash, hash }`. `contentHash`
10
+ * covers the normative content (IDS content without node ids, custom
11
+ * declarations, test suites); `hash` covers the record and its parent's
12
+ * hash, so the revisions form a hash chain.
13
+ * - A sign-off `{ revId, by, role, at, statement }` is chained too: its
14
+ * hash covers the signed revision's hash and the previous sign-off's
15
+ * hash. It is an attestation, not a qualified electronic signature.
16
+ * - A released revision is read-only: a later revision with different
17
+ * content on top of it must be a draft (edits branch to a new draft).
18
+ *
19
+ * The log is plain JSON; `verifyRevisionLog` recomputes every hash, so
20
+ * any edit of a stored revision or sign-off is evident.
21
+ */
22
+ import { canonicalJson } from '../canonical-json.js';
23
+ import { uuidv7 } from '../uuid.js';
24
+ import { sha256Hex } from './sha256.js';
25
+ export const REVISION_LOG_FORMAT = 'ifc-lite.ids-studio.revisions';
26
+ export class RevisionError extends Error {
27
+ code;
28
+ constructor(code, message) {
29
+ super(message);
30
+ this.code = code;
31
+ this.name = 'RevisionError';
32
+ }
33
+ }
34
+ /** Hash of the normative content of `doc` (node ids and annotations excluded). */
35
+ export function contentHash(doc) {
36
+ const ids = {
37
+ ...doc.ids,
38
+ specifications: doc.ids.specifications.map((s) => ({
39
+ ...s,
40
+ id: undefined,
41
+ requirements: s.requirements.map((r) => ({ ...r, id: undefined })),
42
+ })),
43
+ };
44
+ return sha256Hex(canonicalJson({ ids, custom: doc.meta.custom, tests: doc.meta.tests }));
45
+ }
46
+ export function revisionHash(r) {
47
+ const { revId, parentRevId, docId, label, author, at, message, contentHash: content, parentHash } = r;
48
+ return sha256Hex(canonicalJson({ revId, parentRevId, docId, label, author, at, message, contentHash: content, parentHash }));
49
+ }
50
+ export function signOffHash(s) {
51
+ const { revId, by, role, at, statement, revisionHash: rev, prevHash } = s;
52
+ return sha256Hex(canonicalJson({ revId, by, role, at, statement, revisionHash: rev, prevHash }));
53
+ }
54
+ export function createRevisionLog(docId) {
55
+ return { format: REVISION_LOG_FORMAT, docId, revisions: [], signOffs: [] };
56
+ }
57
+ export function headRevision(log) {
58
+ return log.revisions[log.revisions.length - 1];
59
+ }
60
+ export function findRevision(log, revId) {
61
+ return log.revisions.find((r) => r.revId === revId);
62
+ }
63
+ /** Record `doc` as a new revision. Returns the new log (the input is not changed). */
64
+ export function commitRevision(log, doc, info) {
65
+ if (doc.docId !== log.docId)
66
+ throw new RevisionError('REV-DOC-001', `document ${doc.docId} does not belong to this log (${log.docId})`);
67
+ const parent = info.parentRevId !== undefined ? findRevision(log, info.parentRevId) : headRevision(log);
68
+ if (info.parentRevId !== undefined && !parent)
69
+ throw new RevisionError('REV-UNKNOWN-001', `unknown parent revision ${info.parentRevId}`);
70
+ const label = info.label ?? 'draft';
71
+ const content = contentHash(doc);
72
+ if (parent?.label === 'released' && parent.contentHash !== content && label !== 'draft') {
73
+ throw new RevisionError('REV-RELEASED-001', 'a released revision is read-only: edits on top of it start a new draft');
74
+ }
75
+ const record = {
76
+ revId: info.revId ?? uuidv7(),
77
+ docId: log.docId,
78
+ label,
79
+ author: info.author,
80
+ at: info.at ?? new Date().toISOString(),
81
+ contentHash: content,
82
+ ...(parent ? { parentRevId: parent.revId, parentHash: parent.hash } : {}),
83
+ ...(info.message !== undefined ? { message: info.message } : {}),
84
+ };
85
+ const revision = { ...record, hash: revisionHash(record), snapshot: doc };
86
+ return { log: { ...log, revisions: [...log.revisions, revision] }, revision };
87
+ }
88
+ /** Attest a revision in review or released. */
89
+ export function signOff(log, revId, info) {
90
+ const revision = findRevision(log, revId);
91
+ if (!revision)
92
+ throw new RevisionError('REV-UNKNOWN-001', `unknown revision ${revId}`);
93
+ if (revision.label === 'draft')
94
+ throw new RevisionError('SIGN-LABEL-001', 'only a revision in review or released can be signed off');
95
+ const prev = log.signOffs[log.signOffs.length - 1];
96
+ const record = {
97
+ revId,
98
+ by: info.by,
99
+ at: info.at ?? new Date().toISOString(),
100
+ statement: info.statement,
101
+ revisionHash: revision.hash,
102
+ prevHash: prev?.hash ?? '',
103
+ ...(info.role !== undefined ? { role: info.role } : {}),
104
+ };
105
+ const entry = { ...record, hash: signOffHash(record) };
106
+ return { log: { ...log, signOffs: [...log.signOffs, entry] }, signOff: entry };
107
+ }
108
+ /** The committed document of a revision (to view it, or to branch a draft from it). */
109
+ export function checkoutRevision(log, revId) {
110
+ const revision = findRevision(log, revId);
111
+ if (!revision)
112
+ throw new RevisionError('REV-UNKNOWN-001', `unknown revision ${revId}`);
113
+ return revision.snapshot;
114
+ }
115
+ /** True when `doc` may not be edited in place: its content is a released revision's. */
116
+ export function isReleasedContent(log, doc) {
117
+ const content = contentHash(doc);
118
+ return log.revisions.some((r) => r.label === 'released' && r.contentHash === content);
119
+ }
120
+ //# sourceMappingURL=revision.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"revision.js","sourceRoot":"","sources":["../../src/revision/revision.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ /** Lower-case hex SHA-256 of the UTF-8 encoding of `text`. */
2
+ export declare function sha256Hex(text: string): string;
3
+ //# sourceMappingURL=sha256.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sha256.d.ts","sourceRoot":"","sources":["../../src/revision/sha256.ts"],"names":[],"mappings":"AAuBA,8DAA8D;AAC9D,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CA8C9C"}
@@ -0,0 +1,69 @@
1
+ /* This Source Code Form is subject to the terms of the Mozilla Public
2
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
3
+ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */
4
+ /**
5
+ * SHA-256 (FIPS 180-4) over the UTF-8 bytes of a string, synchronous and
6
+ * dependency-free, so revision hashes can be computed and verified in the
7
+ * reducer's pure world (no `await crypto.subtle`). Tested against
8
+ * `node:crypto`.
9
+ */
10
+ const K = new Uint32Array([
11
+ 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5, 0xd807aa98, 0x12835b01,
12
+ 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174, 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc,
13
+ 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da, 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147,
14
+ 0x06ca6351, 0x14292967, 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,
15
+ 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070, 0x19a4c116, 0x1e376c08,
16
+ 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3, 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,
17
+ 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2,
18
+ ]);
19
+ const rotr = (x, n) => (x >>> n) | (x << (32 - n));
20
+ /** Lower-case hex SHA-256 of the UTF-8 encoding of `text`. */
21
+ export function sha256Hex(text) {
22
+ const bytes = new TextEncoder().encode(text);
23
+ const bitLength = bytes.length * 8;
24
+ const padded = new Uint8Array(((bytes.length + 9 + 63) >> 6) << 6);
25
+ padded.set(bytes);
26
+ padded[bytes.length] = 0x80;
27
+ const view = new DataView(padded.buffer);
28
+ // Length in bits, big-endian 64-bit (high word for inputs ≥ 512 MiB).
29
+ view.setUint32(padded.length - 8, Math.floor(bitLength / 0x100000000));
30
+ view.setUint32(padded.length - 4, bitLength >>> 0);
31
+ const h = new Uint32Array([0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19]);
32
+ const w = new Uint32Array(64);
33
+ for (let off = 0; off < padded.length; off += 64) {
34
+ for (let i = 0; i < 16; i++)
35
+ w[i] = view.getUint32(off + i * 4);
36
+ for (let i = 16; i < 64; i++) {
37
+ const s0 = rotr(w[i - 15], 7) ^ rotr(w[i - 15], 18) ^ (w[i - 15] >>> 3);
38
+ const s1 = rotr(w[i - 2], 17) ^ rotr(w[i - 2], 19) ^ (w[i - 2] >>> 10);
39
+ w[i] = (w[i - 16] + s0 + w[i - 7] + s1) >>> 0;
40
+ }
41
+ let [a, b, c, d, e, f, g, hh] = h;
42
+ for (let i = 0; i < 64; i++) {
43
+ const s1 = rotr(e, 6) ^ rotr(e, 11) ^ rotr(e, 25);
44
+ const ch = (e & f) ^ (~e & g);
45
+ const t1 = (hh + s1 + ch + K[i] + w[i]) >>> 0;
46
+ const s0 = rotr(a, 2) ^ rotr(a, 13) ^ rotr(a, 22);
47
+ const maj = (a & b) ^ (a & c) ^ (b & c);
48
+ const t2 = (s0 + maj) >>> 0;
49
+ hh = g;
50
+ g = f;
51
+ f = e;
52
+ e = (d + t1) >>> 0;
53
+ d = c;
54
+ c = b;
55
+ b = a;
56
+ a = (t1 + t2) >>> 0;
57
+ }
58
+ h[0] = (h[0] + a) >>> 0;
59
+ h[1] = (h[1] + b) >>> 0;
60
+ h[2] = (h[2] + c) >>> 0;
61
+ h[3] = (h[3] + d) >>> 0;
62
+ h[4] = (h[4] + e) >>> 0;
63
+ h[5] = (h[5] + f) >>> 0;
64
+ h[6] = (h[6] + g) >>> 0;
65
+ h[7] = (h[7] + hh) >>> 0;
66
+ }
67
+ return Array.from(h, (x) => x.toString(16).padStart(8, '0')).join('');
68
+ }
69
+ //# sourceMappingURL=sha256.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sha256.js","sourceRoot":"","sources":["../../src/revision/sha256.ts"],"names":[],"mappings":"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"}