@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,21 @@
1
+ /**
2
+ * Tamper evidence for a revision log: every hash is recomputed and every
3
+ * link checked. Problems are data (`code`, `revId`, `message`), so a UI can
4
+ * mark the affected revisions and a CLI can fail.
5
+ */
6
+ import type { Uuid } from '../uuid.js';
7
+ import { type RevisionLog } from './revision.js';
8
+ export type RevisionProblemCode = 'REV-FORMAT-001' | 'REV-DOC-001' | 'REV-DUP-001' | 'REV-HASH-001' | 'REV-CONTENT-001' | 'REV-CHAIN-001' | 'REV-RELEASED-001' | 'SIGN-REV-001' | 'SIGN-HASH-001' | 'SIGN-CHAIN-001';
9
+ export interface RevisionProblem {
10
+ code: RevisionProblemCode;
11
+ message: string;
12
+ revId?: Uuid;
13
+ /** Index of the sign-off, for SIGN-* problems. */
14
+ signOff?: number;
15
+ }
16
+ export interface RevisionVerification {
17
+ ok: boolean;
18
+ problems: RevisionProblem[];
19
+ }
20
+ export declare function verifyRevisionLog(log: RevisionLog): RevisionVerification;
21
+ //# sourceMappingURL=verify.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"verify.d.ts","sourceRoot":"","sources":["../../src/revision/verify.ts"],"names":[],"mappings":"AAIA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAA+D,KAAK,WAAW,EAAE,MAAM,eAAe,CAAC;AAE9G,MAAM,MAAM,mBAAmB,GAC3B,gBAAgB,GAChB,aAAa,GACb,aAAa,GACb,cAAc,GACd,iBAAiB,GACjB,eAAe,GACf,kBAAkB,GAClB,cAAc,GACd,eAAe,GACf,gBAAgB,CAAC;AAErB,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,mBAAmB,CAAC;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,IAAI,CAAC;IACb,kDAAkD;IAClD,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,oBAAoB;IACnC,EAAE,EAAE,OAAO,CAAC;IACZ,QAAQ,EAAE,eAAe,EAAE,CAAC;CAC7B;AAED,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,WAAW,GAAG,oBAAoB,CAoCxE"}
@@ -0,0 +1,51 @@
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 { contentHash, REVISION_LOG_FORMAT, revisionHash, signOffHash } from './revision.js';
5
+ export function verifyRevisionLog(log) {
6
+ const problems = [];
7
+ if (log.format !== REVISION_LOG_FORMAT)
8
+ problems.push({ code: 'REV-FORMAT-001', message: 'not an IDS Studio revision log' });
9
+ const byId = new Map();
10
+ for (const r of log.revisions) {
11
+ if (byId.has(r.revId))
12
+ problems.push({ code: 'REV-DUP-001', revId: r.revId, message: 'revision id appears twice' });
13
+ byId.set(r.revId, r);
14
+ }
15
+ log.revisions.forEach((r, i) => {
16
+ const at = { revId: r.revId };
17
+ if (r.docId !== log.docId || r.snapshot.docId !== log.docId)
18
+ problems.push({ ...at, code: 'REV-DOC-001', message: 'revision belongs to another document' });
19
+ if (revisionHash(r) !== r.hash)
20
+ problems.push({ ...at, code: 'REV-HASH-001', message: 'revision record does not match its hash' });
21
+ if (contentHash(r.snapshot) !== r.contentHash)
22
+ problems.push({ ...at, code: 'REV-CONTENT-001', message: 'revision content does not match its content hash' });
23
+ if (r.parentRevId === undefined) {
24
+ if (i > 0 || r.parentHash !== undefined)
25
+ problems.push({ ...at, code: 'REV-CHAIN-001', message: 'only the first revision may have no parent' });
26
+ return;
27
+ }
28
+ const parent = byId.get(r.parentRevId);
29
+ const parentIndex = log.revisions.findIndex((x) => x.revId === r.parentRevId);
30
+ if (!parent || parentIndex >= i || parent.hash !== r.parentHash) {
31
+ problems.push({ ...at, code: 'REV-CHAIN-001', message: 'parent revision is missing, later, or does not match the recorded parent hash' });
32
+ return;
33
+ }
34
+ if (parent.label === 'released' && parent.contentHash !== r.contentHash && r.label !== 'draft') {
35
+ problems.push({ ...at, code: 'REV-RELEASED-001', message: 'a released revision was edited without starting a new draft' });
36
+ }
37
+ });
38
+ log.signOffs.forEach((s, i) => {
39
+ const at = { revId: s.revId, signOff: i };
40
+ const revision = byId.get(s.revId);
41
+ if (!revision || revision.hash !== s.revisionHash)
42
+ problems.push({ ...at, code: 'SIGN-REV-001', message: 'signed revision is missing or changed since it was signed' });
43
+ if (signOffHash(s) !== s.hash)
44
+ problems.push({ ...at, code: 'SIGN-HASH-001', message: 'sign-off record does not match its hash' });
45
+ const prev = i > 0 ? log.signOffs[i - 1].hash : '';
46
+ if (s.prevHash !== prev)
47
+ problems.push({ ...at, code: 'SIGN-CHAIN-001', message: 'sign-off chain is broken (a sign-off was removed, inserted or reordered)' });
48
+ });
49
+ return { ok: problems.length === 0, problems };
50
+ }
51
+ //# sourceMappingURL=verify.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"verify.js","sourceRoot":"","sources":["../../src/revision/verify.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ /**
2
+ * Framework-free view model of a revision log: a timeline with labels,
3
+ * sign-offs, what changed against the parent (plain language) and
4
+ * whether the entry passed verification.
5
+ */
6
+ import type { SupportedLocale } from '@ifc-lite/ids';
7
+ import type { Uuid } from '../uuid.js';
8
+ import { type RevisionLabel, type RevisionLog } from './revision.js';
9
+ import { type RevisionProblem } from './verify.js';
10
+ export interface TimelineEntry {
11
+ revId: Uuid;
12
+ label: RevisionLabel;
13
+ author: string;
14
+ at: string;
15
+ message?: string;
16
+ /** Short hash for display. */
17
+ shortHash: string;
18
+ isHead: boolean;
19
+ readOnly: boolean;
20
+ signOffs: {
21
+ by: string;
22
+ role?: string;
23
+ at: string;
24
+ statement: string;
25
+ }[];
26
+ /** Changes against the parent revision, as sentences. */
27
+ changes: string[];
28
+ problems: RevisionProblem[];
29
+ }
30
+ export interface RevisionTimeline {
31
+ entries: TimelineEntry[];
32
+ /** The whole log verified. */
33
+ verified: boolean;
34
+ }
35
+ export declare function revisionTimeline(log: RevisionLog, locale?: SupportedLocale): RevisionTimeline;
36
+ //# sourceMappingURL=view.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"view.d.ts","sourceRoot":"","sources":["../../src/revision/view.ts"],"names":[],"mappings":"AAIA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAGrD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAgB,KAAK,aAAa,EAAE,KAAK,WAAW,EAAE,MAAM,eAAe,CAAC;AACnF,OAAO,EAAqB,KAAK,eAAe,EAAE,MAAM,aAAa,CAAC;AAEtE,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,IAAI,CAAC;IACZ,KAAK,EAAE,aAAa,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,8BAA8B;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IACzE,yDAAyD;IACzD,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,QAAQ,EAAE,eAAe,EAAE,CAAC;CAC7B;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,aAAa,EAAE,CAAC;IACzB,8BAA8B;IAC9B,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,WAAW,EAAE,MAAM,GAAE,eAAsB,GAAG,gBAAgB,CAuBnG"}
@@ -0,0 +1,32 @@
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 { changelog } from '../diff/changelog.js';
5
+ import { diffDocuments } from '../diff/diff.js';
6
+ import { findRevision } from './revision.js';
7
+ import { verifyRevisionLog } from './verify.js';
8
+ export function revisionTimeline(log, locale = 'en') {
9
+ const { ok, problems } = verifyRevisionLog(log);
10
+ const head = log.revisions[log.revisions.length - 1]?.revId;
11
+ const entries = log.revisions.map((r) => {
12
+ const parent = r.parentRevId ? findRevision(log, r.parentRevId) : undefined;
13
+ const changes = parent ? changelog(diffDocuments(parent.snapshot, r.snapshot), { locale }).map((l) => l.text) : [];
14
+ return {
15
+ revId: r.revId,
16
+ label: r.label,
17
+ author: r.author,
18
+ at: r.at,
19
+ ...(r.message !== undefined ? { message: r.message } : {}),
20
+ shortHash: r.hash.slice(0, 12),
21
+ isHead: r.revId === head,
22
+ readOnly: r.label === 'released',
23
+ signOffs: log.signOffs
24
+ .filter((s) => s.revId === r.revId)
25
+ .map((s) => ({ by: s.by, at: s.at, statement: s.statement, ...(s.role !== undefined ? { role: s.role } : {}) })),
26
+ changes,
27
+ problems: problems.filter((p) => p.revId === r.revId),
28
+ };
29
+ });
30
+ return { entries: entries.reverse(), verified: ok };
31
+ }
32
+ //# sourceMappingURL=view.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"view.js","sourceRoot":"","sources":["../../src/revision/view.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAS/D,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhD,OAAO,EAAE,YAAY,EAAwC,MAAM,eAAe,CAAC;AACnF,OAAO,EAAE,iBAAiB,EAAwB,MAAM,aAAa,CAAC;AAwBtE,MAAM,UAAU,gBAAgB,CAAC,GAAgB,EAAE,SAA0B,IAAI;IAC/E,MAAM,EAAE,EAAE,EAAE,QAAQ,EAAE,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC;IAChD,MAAM,IAAI,GAAG,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC;IAC5D,MAAM,OAAO,GAAG,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAiB,EAAE;QACrD,MAAM,MAAM,GAAG,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,YAAY,CAAC,GAAG,EAAE,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAC5E,MAAM,OAAO,GAAG,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,aAAa,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACnH,OAAO;YACL,KAAK,EAAE,CAAC,CAAC,KAAK;YACd,KAAK,EAAE,CAAC,CAAC,KAAK;YACd,MAAM,EAAE,CAAC,CAAC,MAAM;YAChB,EAAE,EAAE,CAAC,CAAC,EAAE;YACR,GAAG,CAAC,CAAC,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC1D,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;YAC9B,MAAM,EAAE,CAAC,CAAC,KAAK,KAAK,IAAI;YACxB,QAAQ,EAAE,CAAC,CAAC,KAAK,KAAK,UAAU;YAChC,QAAQ,EAAE,GAAG,CAAC,QAAQ;iBACnB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,KAAK,CAAC;iBAClC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;YAClH,OAAO;YACP,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,KAAK,CAAC;SACtD,CAAC;IACJ,CAAC,CAAC,CAAC;IACH,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC;AACtD,CAAC"}
@@ -0,0 +1,14 @@
1
+ import { type StudioSidecar } from './sidecar.js';
2
+ export declare const IDSZ_XML = "ids.xml";
3
+ export declare const IDSZ_APPENDIX = "appendix.pdf";
4
+ export interface IdszContent {
5
+ xml: string;
6
+ sidecar?: StudioSidecar;
7
+ /** File name → bytes. Names must not contain path separators. */
8
+ fixtures?: Record<string, Uint8Array>;
9
+ appendix?: Uint8Array;
10
+ }
11
+ export declare function writeIdsz(content: IdszContent): Uint8Array;
12
+ /** Read a bundle. Unknown entries are ignored; a missing `ids.xml` throws. */
13
+ export declare function readIdsz(bytes: Uint8Array): IdszContent;
14
+ //# sourceMappingURL=idsz.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"idsz.d.ts","sourceRoot":"","sources":["../../src/sidecar/idsz.ts"],"names":[],"mappings":"AAkBA,OAAO,EAAoD,KAAK,aAAa,EAAE,MAAM,cAAc,CAAC;AAEpG,eAAO,MAAM,QAAQ,YAAY,CAAC;AAClC,eAAO,MAAM,aAAa,iBAAiB,CAAC;AAG5C,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,CAAC,EAAE,aAAa,CAAC;IACxB,iEAAiE;IACjE,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IACtC,QAAQ,CAAC,EAAE,UAAU,CAAC;CACvB;AAID,wBAAgB,SAAS,CAAC,OAAO,EAAE,WAAW,GAAG,UAAU,CAW1D;AAED,8EAA8E;AAC9E,wBAAgB,QAAQ,CAAC,KAAK,EAAE,UAAU,GAAG,WAAW,CAgBvD"}
@@ -0,0 +1,58 @@
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
+ * `.idsz` bundle: a plain zip anyone can inspect (01-overview.md §7).
6
+ *
7
+ * ids.xml the IDS, byte-for-byte as given
8
+ * studio.json the sidecar (optional)
9
+ * fixtures/<name> test models (optional)
10
+ * appendix.pdf readable appendix (optional, produced elsewhere)
11
+ *
12
+ * The XML is stored verbatim, so a bundle with and without sidecar carries
13
+ * byte-identical XML. Entries use a fixed timestamp, so writing the same
14
+ * content twice yields the same bytes.
15
+ */
16
+ import { strFromU8, strToU8, unzipSync, zipSync } from 'fflate';
17
+ import { parseSidecar, serializeSidecar, SIDECAR_FILENAME } from './sidecar.js';
18
+ export const IDSZ_XML = 'ids.xml';
19
+ export const IDSZ_APPENDIX = 'appendix.pdf';
20
+ const FIXTURE_DIR = 'fixtures/';
21
+ const FIXED_MTIME = new Date(Date.UTC(1980, 0, 1, 0, 0, 0));
22
+ export function writeIdsz(content) {
23
+ const files = { [IDSZ_XML]: [strToU8(content.xml), { mtime: FIXED_MTIME }] };
24
+ if (content.sidecar)
25
+ files[SIDECAR_FILENAME] = [strToU8(serializeSidecar(content.sidecar)), { mtime: FIXED_MTIME }];
26
+ for (const [name, bytes] of Object.entries(content.fixtures ?? {})) {
27
+ if (!name || name.includes('/') || name.includes('\\') || name === '.' || name === '..') {
28
+ throw new Error(`invalid fixture name "${name}"`);
29
+ }
30
+ files[`${FIXTURE_DIR}${name}`] = [bytes, { mtime: FIXED_MTIME }];
31
+ }
32
+ if (content.appendix)
33
+ files[IDSZ_APPENDIX] = [content.appendix, { mtime: FIXED_MTIME }];
34
+ return zipSync(files, { level: 6 });
35
+ }
36
+ /** Read a bundle. Unknown entries are ignored; a missing `ids.xml` throws. */
37
+ export function readIdsz(bytes) {
38
+ const entries = unzipSync(bytes);
39
+ const xml = entries[IDSZ_XML];
40
+ if (!xml)
41
+ throw new Error(`not an .idsz bundle: ${IDSZ_XML} is missing`);
42
+ const out = { xml: strFromU8(xml) };
43
+ const sidecar = entries[SIDECAR_FILENAME];
44
+ if (sidecar)
45
+ out.sidecar = parseSidecar(strFromU8(sidecar));
46
+ const fixtures = {};
47
+ for (const [path, data] of Object.entries(entries)) {
48
+ if (path.startsWith(FIXTURE_DIR) && path.length > FIXTURE_DIR.length && !path.endsWith('/')) {
49
+ fixtures[path.slice(FIXTURE_DIR.length)] = data;
50
+ }
51
+ }
52
+ if (Object.keys(fixtures).length)
53
+ out.fixtures = fixtures;
54
+ if (entries[IDSZ_APPENDIX])
55
+ out.appendix = entries[IDSZ_APPENDIX];
56
+ return out;
57
+ }
58
+ //# sourceMappingURL=idsz.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"idsz.js","sourceRoot":"","sources":["../../src/sidecar/idsz.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { type SchemaError } from '../ops/json-schema-lite.js';
2
+ /** The op validator's node/UUID definitions also govern imported sidecars (#7168, IDS-025). */
3
+ export declare function validateSidecarShape(value: unknown): SchemaError[];
4
+ //# sourceMappingURL=sidecar-schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sidecar-schema.d.ts","sourceRoot":"","sources":["../../src/sidecar/sidecar-schema.ts"],"names":[],"mappings":"AAIA,OAAO,EAAiC,KAAK,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAoE7F,+FAA+F;AAC/F,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,OAAO,GAAG,WAAW,EAAE,CAElE"}
@@ -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
+ import { validateJson } from '../ops/json-schema-lite.js';
5
+ import { VALUE_DEFS } from '../ops/schema-values.js';
6
+ const str = { type: 'string' };
7
+ const uuid = { $ref: '#/$defs/Uuid' };
8
+ const arr = (items) => ({ type: 'array', items });
9
+ const record = (values) => ({ type: 'object', additionalProperties: values });
10
+ // Preserve extension fields while validating every field consumed by this core.
11
+ const object = (properties, required = []) => ({
12
+ type: 'object', properties, required,
13
+ });
14
+ const provenance = { oneOf: [
15
+ object({ by: { const: 'user' }, userId: str, at: str, opId: uuid }, ['by', 'at', 'opId']),
16
+ object({ by: { const: 'ai' }, runId: uuid, model: str, at: str, opId: uuid }, ['by', 'runId', 'model', 'at', 'opId']),
17
+ object({
18
+ by: { const: 'import' },
19
+ format: { enum: ['ids', 'xlsx', 'csv', 'yaml', 'bsdd', 'template', 'infer'] },
20
+ ref: str, at: str, opId: uuid,
21
+ }, ['by', 'format', 'at', 'opId']),
22
+ ] };
23
+ const source = object({
24
+ docRef: str, kind: { enum: ['pdf', 'docx', 'xlsx', 'text'] },
25
+ page: { type: 'number' }, para: { type: 'number' }, sheet: str, cell: str, quote: str,
26
+ }, ['docRef', 'kind', 'quote']);
27
+ const comment = object({ author: str, at: str, text: str }, ['author', 'at', 'text']);
28
+ const thread = object({ id: uuid, resolved: { type: 'boolean' }, comments: arr(comment) }, ['id', 'resolved', 'comments']);
29
+ const suppression = object({ rule: str, reason: str, by: str, at: str }, ['rule', 'reason', 'at']);
30
+ const meta = object({
31
+ provenance: record(arr(provenance)), sources: record(arr(source)), comments: record(arr(thread)),
32
+ suppressions: record(arr(suppression)),
33
+ // Later pitches own these payloads; only their collection shape belongs here.
34
+ tests: record({}), mappings: arr({}), unresolved: arr({}),
35
+ revision: object({
36
+ parentHash: str, label: str,
37
+ signOffs: arr(object({ by: str, at: str, role: str }, ['by', 'at'])),
38
+ }),
39
+ custom: object({
40
+ psets: arr({ $ref: '#/$defs/CustomPsetDecl' }),
41
+ userDefinedTypes: arr(object({ entity: str, value: str }, ['entity', 'value'])),
42
+ }, ['psets', 'userDefinedTypes']),
43
+ }, ['provenance', 'sources', 'comments', 'suppressions', 'tests', 'mappings', 'revision', 'unresolved', 'custom']);
44
+ // Optional content snapshot (versioned on its own). Version 1 is checked as
45
+ // far as snapshot re-identification reads it (`attachSidecar` also verifies
46
+ // it against the node index); a later version is kept opaque and ignored on
47
+ // attachment, so a newer writer does not make the sidecar unreadable.
48
+ const snapshotSpec = object({
49
+ applicability: object({ facets: arr({ type: 'object' }) }, ['facets']),
50
+ requirements: arr({ type: 'object' }),
51
+ }, ['applicability', 'requirements']);
52
+ const snapshot = { anyOf: [
53
+ object({
54
+ version: { const: 1 },
55
+ ids: object({ info: { type: 'object' }, specifications: arr(snapshotSpec) }, ['info', 'specifications']),
56
+ }, ['version', 'ids']),
57
+ object({ version: { type: 'integer', minimum: 2 } }, ['version']),
58
+ ] };
59
+ const sidecar = object({
60
+ docId: uuid, idsFingerprint: str,
61
+ nodes: object({ document: uuid, specs: arr({ $ref: '#/$defs/SpecNodes' }) }, ['document', 'specs']),
62
+ meta,
63
+ snapshot,
64
+ }, ['docId', 'idsFingerprint', 'nodes', 'meta']);
65
+ /** The op validator's node/UUID definitions also govern imported sidecars (#7168, IDS-025). */
66
+ export function validateSidecarShape(value) {
67
+ return validateJson(value, sidecar, VALUE_DEFS);
68
+ }
69
+ //# sourceMappingURL=sidecar-schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sidecar-schema.js","sourceRoot":"","sources":["../../src/sidecar/sidecar-schema.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,102 @@
1
+ /**
2
+ * The `studio.json` sidecar (ADR-001): everything Studio-specific about an
3
+ * IDS document — node ids and `StudioMeta` — persisted NEXT TO the IDS XML,
4
+ * never inside it, so the XML stays standard.
5
+ *
6
+ * The node index is positional (it mirrors the document shape), so the
7
+ * sidecar records a fingerprint of the IDS content it was written for.
8
+ * `attachSidecar` stamps the ids back only when the XML still has that
9
+ * fingerprint; when the XML was edited elsewhere it re-identifies nodes
10
+ * against the previous document (`reidentify`), so comments and
11
+ * provenance survive.
12
+ */
13
+ import { type IDSDocument } from '@ifc-lite/ids';
14
+ import { STUDIO_SCHEMA_VERSION, type NodeIndex, type StudioDocument, type StudioMeta } from '../document/types.js';
15
+ import { type ReidentifyReport } from '../match/reidentify.js';
16
+ import { type Uuid } from '../uuid.js';
17
+ export declare const SIDECAR_FORMAT = "ifc-lite.ids-studio.sidecar";
18
+ export declare const SIDECAR_FILENAME = "studio.json";
19
+ /**
20
+ * Version of the optional content snapshot. It is versioned on its own so
21
+ * the snapshot can evolve without bumping the sidecar `schemaVersion`:
22
+ * sidecars without a snapshot (written before it existed) still load, and
23
+ * a snapshot with a version this reader does not know is ignored.
24
+ */
25
+ export declare const SIDECAR_SNAPSHOT_VERSION = 1;
26
+ /**
27
+ * The IDS content the node index was written for, so a standalone `.idsz`
28
+ * edited elsewhere can be re-identified without the previous document.
29
+ * `ids` carries the Studio node UUIDs as specification / requirement ids.
30
+ */
31
+ export interface SidecarSnapshot {
32
+ /** {@link SIDECAR_SNAPSHOT_VERSION} when written by this core; later versions are read but ignored. */
33
+ version: number;
34
+ ids: IDSDocument;
35
+ }
36
+ export interface StudioSidecar {
37
+ format: typeof SIDECAR_FORMAT;
38
+ schemaVersion: typeof STUDIO_SCHEMA_VERSION;
39
+ docId: Uuid;
40
+ /** Fingerprint of the IDS content the node index was written for. */
41
+ idsFingerprint: string;
42
+ nodes: NodeIndex;
43
+ meta: StudioMeta;
44
+ /** Optional content snapshot (additive; absent in older sidecars). */
45
+ snapshot?: SidecarSnapshot;
46
+ }
47
+ export interface CreateSidecarOptions {
48
+ /**
49
+ * Embed a content snapshot so the bundle can be re-identified on its own
50
+ * after an external edit. Default `true`; pass `false` for a smaller
51
+ * sidecar when the previous document is always available elsewhere.
52
+ */
53
+ snapshot?: boolean;
54
+ }
55
+ /**
56
+ * Fingerprint of IDS content, independent of node ids (specification and
57
+ * requirement `id`s are positional after a parse and UUIDs inside Studio).
58
+ */
59
+ export declare function fingerprintIds(ids: IDSDocument): string;
60
+ /**
61
+ * Build the sidecar for `doc`. Pass the XML that will travel with it when
62
+ * there is one: the fingerprint is then taken from what a reader will
63
+ * parse, which is what `attachSidecar` compares against.
64
+ */
65
+ export declare function createSidecar(doc: StudioDocument, xml?: string, options?: CreateSidecarOptions): StudioSidecar;
66
+ /** Stable, human-diffable JSON (2-space indent, trailing newline). */
67
+ export declare function serializeSidecar(sidecar: StudioSidecar): string;
68
+ /** Parse and validate `studio.json`. Throws on a foreign or newer format. */
69
+ export declare function parseSidecar(json: string): StudioSidecar;
70
+ export type AttachResult = {
71
+ doc: StudioDocument;
72
+ binding: 'exact';
73
+ } | {
74
+ doc: StudioDocument;
75
+ binding: 'reidentified';
76
+ report: ReidentifyReport;
77
+ /** What the nodes were matched against: `options.previous` or the sidecar's snapshot. */
78
+ basis: 'previous' | 'snapshot';
79
+ } | {
80
+ doc: StudioDocument;
81
+ binding: 'fresh';
82
+ };
83
+ export interface AttachOptions {
84
+ newId?: () => Uuid;
85
+ /**
86
+ * The document as it was when the sidecar was written (e.g. from the
87
+ * local library). When the XML changed elsewhere, its nodes are
88
+ * re-identified against this instead of getting fresh ids.
89
+ */
90
+ previous?: StudioDocument;
91
+ }
92
+ /**
93
+ * Rebuild a Studio document from parsed IDS content and its sidecar. When
94
+ * the content still has the sidecar's fingerprint the node ids are reused
95
+ * exactly. Otherwise nodes are re-identified (identifier → name +
96
+ * signature → similarity) against the `previous` document or, without it,
97
+ * against the sidecar's content snapshot; when neither is usable the
98
+ * document gets fresh ids. `docId` and `meta` are kept either way and
99
+ * `binding` tells the caller which path was taken.
100
+ */
101
+ export declare function attachSidecar(ids: IDSDocument, sidecar: StudioSidecar, options?: AttachOptions): AttachResult;
102
+ //# sourceMappingURL=sidecar.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sidecar.d.ts","sourceRoot":"","sources":["../../src/sidecar/sidecar.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAY,KAAK,WAAW,EAAE,MAAM,eAAe,CAAC;AAG3D,OAAO,EAAE,qBAAqB,EAAE,KAAK,SAAS,EAAE,KAAK,cAAc,EAAE,KAAK,UAAU,EAAE,MAAM,sBAAsB,CAAC;AACnH,OAAO,EAAc,KAAK,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAE3E,OAAO,EAAmB,KAAK,IAAI,EAAE,MAAM,YAAY,CAAC;AAGxD,eAAO,MAAM,cAAc,gCAAgC,CAAC;AAC5D,eAAO,MAAM,gBAAgB,gBAAgB,CAAC;AAC9C;;;;;GAKG;AACH,eAAO,MAAM,wBAAwB,IAAI,CAAC;AAE1C;;;;GAIG;AACH,MAAM,WAAW,eAAe;IAC9B,uGAAuG;IACvG,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,WAAW,CAAC;CAClB;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,OAAO,cAAc,CAAC;IAC9B,aAAa,EAAE,OAAO,qBAAqB,CAAC;IAC5C,KAAK,EAAE,IAAI,CAAC;IACZ,qEAAqE;IACrE,cAAc,EAAE,MAAM,CAAC;IACvB,KAAK,EAAE,SAAS,CAAC;IACjB,IAAI,EAAE,UAAU,CAAC;IACjB,sEAAsE;IACtE,QAAQ,CAAC,EAAE,eAAe,CAAC;CAC5B;AAED,MAAM,WAAW,oBAAoB;IACnC;;;;OAIG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,WAAW,GAAG,MAAM,CAUvD;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,cAAc,EAAE,GAAG,CAAC,EAAE,MAAM,EAAE,OAAO,GAAE,oBAAyB,GAAG,aAAa,CAmBlH;AAED,sEAAsE;AACtE,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,aAAa,GAAG,MAAM,CAE/D;AAMD,6EAA6E;AAC7E,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,CAWxD;AAkCD,MAAM,MAAM,YAAY,GACpB;IAAE,GAAG,EAAE,cAAc,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,GACzC;IACE,GAAG,EAAE,cAAc,CAAC;IACpB,OAAO,EAAE,cAAc,CAAC;IACxB,MAAM,EAAE,gBAAgB,CAAC;IACzB,yFAAyF;IACzF,KAAK,EAAE,UAAU,GAAG,UAAU,CAAC;CAChC,GACD;IAAE,GAAG,EAAE,cAAc,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,CAAC;AAE9C,MAAM,WAAW,aAAa;IAC5B,KAAK,CAAC,EAAE,MAAM,IAAI,CAAC;IACnB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,cAAc,CAAC;CAC3B;AAED;;;;;;;;GAQG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,WAAW,EAAE,OAAO,EAAE,aAAa,EAAE,OAAO,GAAE,aAAkB,GAAG,YAAY,CAqBjH"}
@@ -0,0 +1,160 @@
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
+ * The `studio.json` sidecar (ADR-001): everything Studio-specific about an
6
+ * IDS document — node ids and `StudioMeta` — persisted NEXT TO the IDS XML,
7
+ * never inside it, so the XML stays standard.
8
+ *
9
+ * The node index is positional (it mirrors the document shape), so the
10
+ * sidecar records a fingerprint of the IDS content it was written for.
11
+ * `attachSidecar` stamps the ids back only when the XML still has that
12
+ * fingerprint; when the XML was edited elsewhere it re-identifies nodes
13
+ * against the previous document (`reidentify`), so comments and
14
+ * provenance survive.
15
+ */
16
+ import { parseIDS } from '@ifc-lite/ids';
17
+ import { fromIdsDocument } from '../document/from-ids.js';
18
+ import { verifyNodeIndex } from '../document/node-index.js';
19
+ import { STUDIO_SCHEMA_VERSION } from '../document/types.js';
20
+ import { reidentify } from '../match/reidentify.js';
21
+ import { canonicalJson } from '../canonical-json.js';
22
+ import { fnv1a64, uuidv7 } from '../uuid.js';
23
+ import { validateSidecarShape } from './sidecar-schema.js';
24
+ export const SIDECAR_FORMAT = 'ifc-lite.ids-studio.sidecar';
25
+ export const SIDECAR_FILENAME = 'studio.json';
26
+ /**
27
+ * Version of the optional content snapshot. It is versioned on its own so
28
+ * the snapshot can evolve without bumping the sidecar `schemaVersion`:
29
+ * sidecars without a snapshot (written before it existed) still load, and
30
+ * a snapshot with a version this reader does not know is ignored.
31
+ */
32
+ export const SIDECAR_SNAPSHOT_VERSION = 1;
33
+ /**
34
+ * Fingerprint of IDS content, independent of node ids (specification and
35
+ * requirement `id`s are positional after a parse and UUIDs inside Studio).
36
+ */
37
+ export function fingerprintIds(ids) {
38
+ const stripped = {
39
+ ...ids,
40
+ specifications: ids.specifications.map((s) => ({
41
+ ...s,
42
+ id: undefined,
43
+ requirements: s.requirements.map((r) => ({ ...r, id: undefined })),
44
+ })),
45
+ };
46
+ return fnv1a64(canonicalJson(stripped)).toString(16).padStart(16, '0');
47
+ }
48
+ /**
49
+ * Build the sidecar for `doc`. Pass the XML that will travel with it when
50
+ * there is one: the fingerprint is then taken from what a reader will
51
+ * parse, which is what `attachSidecar` compares against.
52
+ */
53
+ export function createSidecar(doc, xml, options = {}) {
54
+ let content = doc.ids;
55
+ if (xml !== undefined) {
56
+ content = parseIDS(xml);
57
+ const shape = (d) => d.specifications.map((s) => `${s.applicability.facets.length}/${s.requirements.length}`).join(',');
58
+ if (shape(content) !== shape(doc.ids)) {
59
+ throw new Error('the XML does not have the shape of the document; write it from this document');
60
+ }
61
+ }
62
+ const sidecar = {
63
+ format: SIDECAR_FORMAT,
64
+ schemaVersion: STUDIO_SCHEMA_VERSION,
65
+ docId: doc.docId,
66
+ idsFingerprint: fingerprintIds(content),
67
+ nodes: doc.nodes,
68
+ meta: doc.meta,
69
+ };
70
+ if (options.snapshot !== false)
71
+ sidecar.snapshot = { version: SIDECAR_SNAPSHOT_VERSION, ids: doc.ids };
72
+ return sidecar;
73
+ }
74
+ /** Stable, human-diffable JSON (2-space indent, trailing newline). */
75
+ export function serializeSidecar(sidecar) {
76
+ return `${JSON.stringify(sidecar, null, 2)}\n`;
77
+ }
78
+ function isRecord(v) {
79
+ return typeof v === 'object' && v !== null && !Array.isArray(v);
80
+ }
81
+ /** Parse and validate `studio.json`. Throws on a foreign or newer format. */
82
+ export function parseSidecar(json) {
83
+ const value = JSON.parse(json);
84
+ if (!isRecord(value) || value.format !== SIDECAR_FORMAT)
85
+ throw new Error('not an IDS Studio sidecar');
86
+ if (value.schemaVersion !== STUDIO_SCHEMA_VERSION) {
87
+ throw new Error(`unsupported sidecar schemaVersion ${String(value.schemaVersion)}`);
88
+ }
89
+ const errors = validateSidecarShape(value);
90
+ if (errors.length) {
91
+ throw new Error(`IDS Studio sidecar is incomplete or invalid: ${errors[0].path} ${errors[0].message}`);
92
+ }
93
+ return value;
94
+ }
95
+ /** Stamp node ids onto parsed content positionally; undefined if the shape differs. */
96
+ function stamp(ids, sidecar) {
97
+ const nodes = sidecar.nodes;
98
+ if (nodes.specs.length !== ids.specifications.length)
99
+ return undefined;
100
+ const doc = {
101
+ docId: sidecar.docId,
102
+ schemaVersion: STUDIO_SCHEMA_VERSION,
103
+ ids: {
104
+ ...ids,
105
+ specifications: ids.specifications.map((s, i) => ({
106
+ ...s,
107
+ id: nodes.specs[i].id,
108
+ requirements: s.requirements.map((r, j) => ({ ...r, id: nodes.specs[i].requirements[j]?.id ?? r.id })),
109
+ })),
110
+ },
111
+ nodes,
112
+ meta: sidecar.meta,
113
+ };
114
+ return verifyNodeIndex(doc).length === 0 ? doc : undefined;
115
+ }
116
+ /**
117
+ * The document as it was when the sidecar was written, rebuilt from its
118
+ * snapshot; undefined when there is no snapshot, its version is unknown, or
119
+ * it does not fit the node index.
120
+ */
121
+ function snapshotDocument(sidecar) {
122
+ const snapshot = sidecar.snapshot;
123
+ if (!snapshot || snapshot.version !== SIDECAR_SNAPSHOT_VERSION)
124
+ return undefined;
125
+ return stamp(snapshot.ids, sidecar);
126
+ }
127
+ /**
128
+ * Rebuild a Studio document from parsed IDS content and its sidecar. When
129
+ * the content still has the sidecar's fingerprint the node ids are reused
130
+ * exactly. Otherwise nodes are re-identified (identifier → name +
131
+ * signature → similarity) against the `previous` document or, without it,
132
+ * against the sidecar's content snapshot; when neither is usable the
133
+ * document gets fresh ids. `docId` and `meta` are kept either way and
134
+ * `binding` tells the caller which path was taken.
135
+ */
136
+ export function attachSidecar(ids, sidecar, options = {}) {
137
+ const newId = options.newId ?? (() => uuidv7());
138
+ if (fingerprintIds(ids) === sidecar.idsFingerprint) {
139
+ const doc = stamp(ids, sidecar);
140
+ if (doc)
141
+ return { doc, binding: 'exact' };
142
+ }
143
+ if (options.previous) {
144
+ const base = { ...options.previous, docId: sidecar.docId, meta: sidecar.meta };
145
+ const { doc, report } = reidentify(base, ids, { newId });
146
+ return { doc, binding: 'reidentified', report, basis: 'previous' };
147
+ }
148
+ const fromSnapshot = snapshotDocument(sidecar);
149
+ if (fromSnapshot) {
150
+ try {
151
+ const { doc, report } = reidentify(fromSnapshot, ids, { newId });
152
+ return { doc, binding: 'reidentified', report, basis: 'snapshot' };
153
+ }
154
+ catch {
155
+ // A snapshot that passed the shape check but not the matcher falls back to fresh ids.
156
+ }
157
+ }
158
+ return { doc: fromIdsDocument(ids, { docId: sidecar.docId, meta: sidecar.meta, newId }), binding: 'fresh' };
159
+ }
160
+ //# sourceMappingURL=sidecar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sidecar.js","sourceRoot":"","sources":["../../src/sidecar/sidecar.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ export type { FixtureRecipe, TestCase, TestExpectation, TestFixture, TestSuite } from './types.js';
2
+ export { expectationMismatch, runTestSuites, selectCases, type CaseEvaluator, type CaseResult, type CaseVerdict, type EvaluateResult, type RunOptions, type SpecOutcome, type TestRunReport, } from './runner.js';
3
+ export { outcomeFromSpecResult } from './outcome.js';
4
+ export { junitXml } from './junit.js';
5
+ export { testSuitesView, type TestCaseRow, type TestSuiteRow, type TestSuitesView } from './view.js';
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/testing/index.ts"],"names":[],"mappings":"AAIA,YAAY,EAAE,aAAa,EAAE,QAAQ,EAAE,eAAe,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACnG,OAAO,EACL,mBAAmB,EACnB,aAAa,EACb,WAAW,EACX,KAAK,aAAa,EAClB,KAAK,UAAU,EACf,KAAK,WAAW,EAChB,KAAK,cAAc,EACnB,KAAK,UAAU,EACf,KAAK,WAAW,EAChB,KAAK,aAAa,GACnB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AACrD,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,cAAc,EAAE,KAAK,WAAW,EAAE,KAAK,YAAY,EAAE,KAAK,cAAc,EAAE,MAAM,WAAW,CAAC"}