@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,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
+ import { uuidv7 } from '../uuid.js';
5
+ import { presentFields } from './fields.js';
6
+ import { emptyMeta, STUDIO_SCHEMA_VERSION, } from './types.js';
7
+ /** Fresh node ids for one facet: the facet itself and each present field. */
8
+ export function mintFacetNodes(facet, newId, facetId = newId()) {
9
+ const constraints = {};
10
+ for (const field of presentFields(facet))
11
+ constraints[field] = newId();
12
+ return { id: facetId, constraints };
13
+ }
14
+ /** Fresh node ids for one specification, plus the spec with its ids stamped. */
15
+ export function mintSpecNodes(spec, newId, specId = newId()) {
16
+ const applicability = spec.applicability.facets.map((f) => mintFacetNodes(f, newId));
17
+ const requirementNodes = spec.requirements.map((r) => mintFacetNodes(r.facet, newId));
18
+ return {
19
+ spec: {
20
+ ...spec,
21
+ id: specId,
22
+ requirements: spec.requirements.map((r, i) => ({ ...r, id: requirementNodes[i].id })),
23
+ },
24
+ nodes: { id: specId, applicability, requirements: requirementNodes },
25
+ };
26
+ }
27
+ /**
28
+ * Wrap `ids` in a Studio document. The input is not mutated; specification
29
+ * and requirement `id`s in the result are replaced by their node UUIDs.
30
+ */
31
+ export function fromIdsDocument(ids, options = {}) {
32
+ const newId = options.newId ?? (() => uuidv7());
33
+ const docId = options.docId ?? newId();
34
+ const minted = ids.specifications.map((s) => mintSpecNodes(s, newId));
35
+ return {
36
+ docId,
37
+ schemaVersion: STUDIO_SCHEMA_VERSION,
38
+ ids: { ...ids, info: { ...ids.info }, specifications: minted.map((m) => m.spec) },
39
+ nodes: { document: newId(), specs: minted.map((m) => m.nodes) },
40
+ meta: options.meta ?? emptyMeta(),
41
+ };
42
+ }
43
+ /** An empty Studio document (no specifications). */
44
+ export function createStudioDocument(options = {}) {
45
+ return fromIdsDocument({ info: { title: options.title ?? '' }, specifications: [] }, options);
46
+ }
47
+ //# sourceMappingURL=from-ids.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"from-ids.js","sourceRoot":"","sources":["../../src/document/from-ids.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAS/D,OAAO,EAAE,MAAM,EAAa,MAAM,YAAY,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAuB,MAAM,aAAa,CAAC;AACjE,OAAO,EACL,SAAS,EACT,qBAAqB,GAKtB,MAAM,YAAY,CAAC;AAUpB,6EAA6E;AAC7E,MAAM,UAAU,cAAc,CAAC,KAAe,EAAE,KAAiB,EAAE,UAAgB,KAAK,EAAE;IACxF,MAAM,WAAW,GAA0C,EAAE,CAAC;IAC9D,KAAK,MAAM,KAAK,IAAI,aAAa,CAAC,KAAK,CAAC;QAAE,WAAW,CAAC,KAAK,CAAC,GAAG,KAAK,EAAE,CAAC;IACvE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC;AACtC,CAAC;AAED,gFAAgF;AAChF,MAAM,UAAU,aAAa,CAC3B,IAAsB,EACtB,KAAiB,EACjB,SAAe,KAAK,EAAE;IAEtB,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,cAAc,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;IACrF,MAAM,gBAAgB,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,cAAc,CAAC,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;IACtF,OAAO;QACL,IAAI,EAAE;YACJ,GAAG,IAAI;YACP,EAAE,EAAE,MAAM;YACV,YAAY,EAAE,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,gBAAgB,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;SACtF;QACD,KAAK,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,aAAa,EAAE,YAAY,EAAE,gBAAgB,EAAE;KACrE,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,eAAe,CAAC,GAAgB,EAAE,UAA0B,EAAE;IAC5E,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,CAAC,GAAG,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC;IAChD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,KAAK,EAAE,CAAC;IACvC,MAAM,MAAM,GAAG,GAAG,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,aAAa,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;IACtE,OAAO;QACL,KAAK;QACL,aAAa,EAAE,qBAAqB;QACpC,GAAG,EAAE,EAAE,GAAG,GAAG,EAAE,IAAI,EAAE,EAAE,GAAG,GAAG,CAAC,IAAI,EAAE,EAAE,cAAc,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE;QACjF,KAAK,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE;QAC/D,IAAI,EAAE,OAAO,CAAC,IAAI,IAAI,SAAS,EAAE;KAClC,CAAC;AACJ,CAAC;AAED,oDAAoD;AACpD,MAAM,UAAU,oBAAoB,CAAC,UAA+C,EAAE;IACpF,OAAO,eAAe,CAAC,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC;AAChG,CAAC"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * `Uuid → NodeLocation` lookups over a `NodeIndex`, plus the invariant
3
+ * check behind "every node in `doc.ids` has exactly one Uuid" (§2 inv. 3).
4
+ *
5
+ * The lookup map is derived lazily and cached per `NodeIndex` object. The
6
+ * reducer never mutates a `NodeIndex` (structural sharing), so the cache
7
+ * can never go stale.
8
+ */
9
+ import type { IDSFacet } from '@ifc-lite/ids';
10
+ import type { Uuid } from '../uuid.js';
11
+ import type { FacetNodes, NodeLocation, Section, StudioDocument } from './types.js';
12
+ /** Where node `id` currently lives, or `undefined` for an unknown id. */
13
+ export declare function locateNode(doc: StudioDocument, id: Uuid): NodeLocation | undefined;
14
+ /** Every node id of the document, in document order. */
15
+ export declare function allNodeIds(doc: StudioDocument): Uuid[];
16
+ export interface FacetLocation {
17
+ specIndex: number;
18
+ specId: Uuid;
19
+ section: Section;
20
+ facetIndex: number;
21
+ }
22
+ export declare function locateFacet(doc: StudioDocument, facetId: Uuid): FacetLocation | undefined;
23
+ export declare function locateSpec(doc: StudioDocument, specId: Uuid): number | undefined;
24
+ /** The IDS facet a `FacetLocation` points at. */
25
+ export declare function facetAt(doc: StudioDocument, loc: FacetLocation): IDSFacet;
26
+ export declare function facetNodesAt(doc: StudioDocument, loc: FacetLocation): FacetNodes;
27
+ /**
28
+ * Check that `nodes` mirrors `ids` exactly and that every id is unique.
29
+ * Returns human-readable problems; an empty list means the invariants hold.
30
+ */
31
+ export declare function verifyNodeIndex(doc: StudioDocument): string[];
32
+ //# sourceMappingURL=node-index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"node-index.d.ts","sourceRoot":"","sources":["../../src/document/node-index.ts"],"names":[],"mappings":"AAIA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAEvC,OAAO,KAAK,EAAE,UAAU,EAAa,YAAY,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AA4C/F,yEAAyE;AACzE,wBAAgB,UAAU,CAAC,GAAG,EAAE,cAAc,EAAE,EAAE,EAAE,IAAI,GAAG,YAAY,GAAG,SAAS,CAElF;AAED,wDAAwD;AACxD,wBAAgB,UAAU,CAAC,GAAG,EAAE,cAAc,GAAG,IAAI,EAAE,CAEtD;AAED,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,IAAI,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,WAAW,CAAC,GAAG,EAAE,cAAc,EAAE,OAAO,EAAE,IAAI,GAAG,aAAa,GAAG,SAAS,CAIzF;AAED,wBAAgB,UAAU,CAAC,GAAG,EAAE,cAAc,EAAE,MAAM,EAAE,IAAI,GAAG,MAAM,GAAG,SAAS,CAGhF;AAED,iDAAiD;AACjD,wBAAgB,OAAO,CAAC,GAAG,EAAE,cAAc,EAAE,GAAG,EAAE,aAAa,GAAG,QAAQ,CAKzE;AAED,wBAAgB,YAAY,CAAC,GAAG,EAAE,cAAc,EAAE,GAAG,EAAE,aAAa,GAAG,UAAU,CAGhF;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,cAAc,GAAG,MAAM,EAAE,CA4C7D"}
@@ -0,0 +1,127 @@
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 { presentFields } from './fields.js';
5
+ const LOOKUP_CACHE = new WeakMap();
6
+ function buildLookup(nodes) {
7
+ const map = new Map();
8
+ map.set(nodes.document, { kind: 'document' });
9
+ nodes.specs.forEach((spec, specIndex) => {
10
+ map.set(spec.id, { kind: 'spec', specIndex, specId: spec.id });
11
+ const sections = [
12
+ ['applicability', spec.applicability],
13
+ ['requirements', spec.requirements],
14
+ ];
15
+ for (const [section, facets] of sections) {
16
+ facets.forEach((facet, facetIndex) => {
17
+ const kind = section === 'applicability' ? 'applicabilityFacet' : 'requirement';
18
+ map.set(facet.id, { kind, specIndex, specId: spec.id, section, facetIndex });
19
+ for (const [field, cid] of Object.entries(facet.constraints)) {
20
+ if (!cid)
21
+ continue;
22
+ map.set(cid, {
23
+ kind: 'constraint',
24
+ specIndex,
25
+ specId: spec.id,
26
+ section,
27
+ facetIndex,
28
+ facetId: facet.id,
29
+ field: field,
30
+ });
31
+ }
32
+ });
33
+ }
34
+ });
35
+ return map;
36
+ }
37
+ function lookup(nodes) {
38
+ let map = LOOKUP_CACHE.get(nodes);
39
+ if (!map) {
40
+ map = buildLookup(nodes);
41
+ LOOKUP_CACHE.set(nodes, map);
42
+ }
43
+ return map;
44
+ }
45
+ /** Where node `id` currently lives, or `undefined` for an unknown id. */
46
+ export function locateNode(doc, id) {
47
+ return lookup(doc.nodes).get(id);
48
+ }
49
+ /** Every node id of the document, in document order. */
50
+ export function allNodeIds(doc) {
51
+ return [...lookup(doc.nodes).keys()];
52
+ }
53
+ export function locateFacet(doc, facetId) {
54
+ const loc = locateNode(doc, facetId);
55
+ if (!loc || (loc.kind !== 'applicabilityFacet' && loc.kind !== 'requirement'))
56
+ return undefined;
57
+ return { specIndex: loc.specIndex, specId: loc.specId, section: loc.section, facetIndex: loc.facetIndex };
58
+ }
59
+ export function locateSpec(doc, specId) {
60
+ const loc = locateNode(doc, specId);
61
+ return loc?.kind === 'spec' ? loc.specIndex : undefined;
62
+ }
63
+ /** The IDS facet a `FacetLocation` points at. */
64
+ export function facetAt(doc, loc) {
65
+ const spec = doc.ids.specifications[loc.specIndex];
66
+ return loc.section === 'applicability'
67
+ ? spec.applicability.facets[loc.facetIndex]
68
+ : spec.requirements[loc.facetIndex].facet;
69
+ }
70
+ export function facetNodesAt(doc, loc) {
71
+ const spec = doc.nodes.specs[loc.specIndex];
72
+ return loc.section === 'applicability' ? spec.applicability[loc.facetIndex] : spec.requirements[loc.facetIndex];
73
+ }
74
+ /**
75
+ * Check that `nodes` mirrors `ids` exactly and that every id is unique.
76
+ * Returns human-readable problems; an empty list means the invariants hold.
77
+ */
78
+ export function verifyNodeIndex(doc) {
79
+ const problems = [];
80
+ const seen = new Set();
81
+ const claim = (id, what) => {
82
+ if (seen.has(id))
83
+ problems.push(`duplicate node id ${id} (${what})`);
84
+ seen.add(id);
85
+ };
86
+ claim(doc.nodes.document, 'document');
87
+ const specs = doc.ids.specifications;
88
+ if (specs.length !== doc.nodes.specs.length) {
89
+ problems.push(`spec count ${specs.length} != node count ${doc.nodes.specs.length}`);
90
+ return problems;
91
+ }
92
+ specs.forEach((spec, i) => {
93
+ const sn = doc.nodes.specs[i];
94
+ claim(sn.id, `spec ${i}`);
95
+ if (spec.id !== sn.id)
96
+ problems.push(`spec ${i}: ids.id ${spec.id} != node ${sn.id}`);
97
+ const check = (facets, nodes, label) => {
98
+ if (facets.length !== nodes.length) {
99
+ problems.push(`spec ${i} ${label}: ${facets.length} facets != ${nodes.length} nodes`);
100
+ return;
101
+ }
102
+ facets.forEach((facet, j) => {
103
+ const fn = nodes[j];
104
+ claim(fn.id, `spec ${i} ${label} ${j}`);
105
+ const present = presentFields(facet);
106
+ const indexed = Object.keys(fn.constraints).filter((k) => fn.constraints[k]);
107
+ if (present.length !== indexed.length || present.some((f) => !fn.constraints[f])) {
108
+ problems.push(`spec ${i} ${label} ${j}: constraint ids [${indexed}] != fields [${present}]`);
109
+ }
110
+ for (const f of present) {
111
+ const cid = fn.constraints[f];
112
+ if (cid)
113
+ claim(cid, `spec ${i} ${label} ${j} ${f}`);
114
+ }
115
+ });
116
+ };
117
+ check(spec.applicability.facets, sn.applicability, 'applicability');
118
+ check(spec.requirements.map((r) => r.facet), sn.requirements, 'requirements');
119
+ spec.requirements.forEach((req, j) => {
120
+ const fn = sn.requirements[j];
121
+ if (fn && req.id !== fn.id)
122
+ problems.push(`spec ${i} requirement ${j}: ids.id ${req.id} != node ${fn.id}`);
123
+ });
124
+ });
125
+ return problems;
126
+ }
127
+ //# sourceMappingURL=node-index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"node-index.js","sourceRoot":"","sources":["../../src/document/node-index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,170 @@
1
+ /**
2
+ * The Studio document model (02-document-model-and-ops.md §2, ADR-001).
3
+ *
4
+ * `ids` is pure IDS content — the same `IDSDocument` the parser, validator,
5
+ * audit and writer share. Everything Studio-specific lives beside it:
6
+ *
7
+ * - `nodes` gives every node a stable UUID. It MIRRORS the shape of `ids`
8
+ * (one `SpecNodes` per specification, one `FacetNodes` per applicability
9
+ * facet and per requirement, one constraint id per present field) rather
10
+ * than holding positional paths, so a reorder moves the ids along with the
11
+ * content and no path ever goes stale. `locateNode` derives the
12
+ * `Uuid → NodePath` direction on demand.
13
+ * - `meta` is the sidecar (`studio.json`).
14
+ *
15
+ * Specification and requirement `id` fields inside `ids` carry the same
16
+ * UUIDs as their nodes, so validator results (which echo those ids) map
17
+ * straight back to Studio nodes.
18
+ */
19
+ import type { IDSDocument } from '@ifc-lite/ids';
20
+ import type { Uuid } from '../uuid.js';
21
+ import type { TestSuite } from '../testing/types.js';
22
+ import type { FacetFieldName } from './fields.js';
23
+ /** Version of the sidecar / document format. */
24
+ export declare const STUDIO_SCHEMA_VERSION = 1;
25
+ export interface StudioDocument {
26
+ /** Stable across revisions. */
27
+ readonly docId: Uuid;
28
+ readonly schemaVersion: typeof STUDIO_SCHEMA_VERSION;
29
+ /** Canonical IDS content; no Studio-only fields. */
30
+ readonly ids: IDSDocument;
31
+ readonly nodes: NodeIndex;
32
+ readonly meta: StudioMeta;
33
+ }
34
+ export interface NodeIndex {
35
+ /** The node id of the document (`info`) itself. */
36
+ readonly document: Uuid;
37
+ /** Parallel to `ids.specifications`. */
38
+ readonly specs: readonly SpecNodes[];
39
+ }
40
+ export interface SpecNodes {
41
+ readonly id: Uuid;
42
+ /** Parallel to `spec.applicability.facets`. */
43
+ readonly applicability: readonly FacetNodes[];
44
+ /** Parallel to `spec.requirements`. */
45
+ readonly requirements: readonly FacetNodes[];
46
+ }
47
+ export interface FacetNodes {
48
+ readonly id: Uuid;
49
+ /** One id per constraint field present on the facet. */
50
+ readonly constraints: Readonly<Partial<Record<FacetFieldName, Uuid>>>;
51
+ }
52
+ export type NodeKind = 'document' | 'spec' | 'applicabilityFacet' | 'requirement' | 'constraint';
53
+ export type Section = 'applicability' | 'requirements';
54
+ /** Where a node lives right now. Indices are positions in `ids`. */
55
+ export type NodeLocation = {
56
+ kind: 'document';
57
+ } | {
58
+ kind: 'spec';
59
+ specIndex: number;
60
+ specId: Uuid;
61
+ } | {
62
+ kind: 'applicabilityFacet' | 'requirement';
63
+ specIndex: number;
64
+ specId: Uuid;
65
+ section: Section;
66
+ facetIndex: number;
67
+ } | {
68
+ kind: 'constraint';
69
+ specIndex: number;
70
+ specId: Uuid;
71
+ section: Section;
72
+ facetIndex: number;
73
+ facetId: Uuid;
74
+ field: FacetFieldName;
75
+ };
76
+ export type Provenance = {
77
+ by: 'user';
78
+ userId?: string;
79
+ at: string;
80
+ opId: Uuid;
81
+ } | {
82
+ by: 'ai';
83
+ runId: Uuid;
84
+ model: string;
85
+ at: string;
86
+ opId: Uuid;
87
+ } | {
88
+ by: 'import';
89
+ format: 'ids' | 'xlsx' | 'csv' | 'yaml' | 'bsdd' | 'template' | 'infer';
90
+ ref?: string;
91
+ at: string;
92
+ opId: Uuid;
93
+ };
94
+ export interface SourceSpan {
95
+ docRef: string;
96
+ kind: 'pdf' | 'docx' | 'xlsx' | 'text';
97
+ page?: number;
98
+ para?: number;
99
+ sheet?: string;
100
+ cell?: string;
101
+ quote: string;
102
+ }
103
+ export interface CommentThread {
104
+ id: Uuid;
105
+ resolved: boolean;
106
+ comments: {
107
+ author: string;
108
+ at: string;
109
+ text: string;
110
+ }[];
111
+ }
112
+ export interface Suppression {
113
+ rule: string;
114
+ reason: string;
115
+ by?: string;
116
+ at: string;
117
+ }
118
+ /** A custom (non-standard) property set the author declared on purpose. */
119
+ export interface CustomPsetDecl {
120
+ name: string;
121
+ /** When present, `baseName` literals must be one of these. */
122
+ properties?: {
123
+ name: string;
124
+ dataType?: string;
125
+ }[];
126
+ }
127
+ /**
128
+ * A user-defined predefined type the author declared on purpose. In IDS a
129
+ * predefinedType outside the entity's enumeration matches the element's
130
+ * ObjectType / ElementType when PredefinedType is USERDEFINED; the gate only
131
+ * accepts such a value when it is declared, so an invented enum member
132
+ * cannot pass as "user-defined" by accident.
133
+ */
134
+ export interface UserDefinedTypeDecl {
135
+ /** Entity name as written (compared case-insensitively). */
136
+ entity: string;
137
+ /** The user-defined value (compared case-insensitively). */
138
+ value: string;
139
+ }
140
+ export interface RevisionInfo {
141
+ parentHash?: string;
142
+ label?: string;
143
+ signOffs?: {
144
+ by: string;
145
+ at: string;
146
+ role?: string;
147
+ }[];
148
+ }
149
+ /**
150
+ * Studio-only metadata, persisted as the `studio.json` sidecar. Collections
151
+ * owned by later pitches (mappings, unresolved requirements) are kept as
152
+ * opaque JSON until their owners define them.
153
+ */
154
+ export interface StudioMeta {
155
+ provenance: Record<Uuid, Provenance[]>;
156
+ sources: Record<Uuid, SourceSpan[]>;
157
+ comments: Record<Uuid, CommentThread[]>;
158
+ suppressions: Record<Uuid, Suppression[]>;
159
+ /** IDS test suites per specification id (`meta.test.*` ops). */
160
+ tests: Record<Uuid, TestSuite>;
161
+ mappings: unknown[];
162
+ revision: RevisionInfo;
163
+ unresolved: unknown[];
164
+ custom: {
165
+ psets: CustomPsetDecl[];
166
+ userDefinedTypes: UserDefinedTypeDecl[];
167
+ };
168
+ }
169
+ export declare function emptyMeta(): StudioMeta;
170
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/document/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
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
+ /** Version of the sidecar / document format. */
5
+ export const STUDIO_SCHEMA_VERSION = 1;
6
+ export function emptyMeta() {
7
+ return {
8
+ provenance: {},
9
+ sources: {},
10
+ comments: {},
11
+ suppressions: {},
12
+ tests: {},
13
+ mappings: [],
14
+ revision: {},
15
+ unresolved: [],
16
+ custom: { psets: [], userDefinedTypes: [] },
17
+ };
18
+ }
19
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/document/types.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AA0B/D,gDAAgD;AAChD,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,CAAC;AA6IvC,MAAM,UAAU,SAAS;IACvB,OAAO;QACL,UAAU,EAAE,EAAE;QACd,OAAO,EAAE,EAAE;QACX,QAAQ,EAAE,EAAE;QACZ,YAAY,EAAE,EAAE;QAChB,KAAK,EAAE,EAAE;QACT,QAAQ,EAAE,EAAE;QACZ,QAAQ,EAAE,EAAE;QACZ,UAAU,EAAE,EAAE;QACd,MAAM,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,gBAAgB,EAAE,EAAE,EAAE;KAC5C,CAAC;AACJ,CAAC"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * GATE-BSDD-001 (§5): a facet `@uri` that the bSDD index knows to be
3
+ * unresolvable is refused; a deprecated (inactive) one is a non-blocking
4
+ * warning. Unchecked URIs (offline, not yet checked) pass: the gate is
5
+ * synchronous and never calls bSDD, and lint IDSL-BSDD-001 reports them
6
+ * once URI health has run.
7
+ */
8
+ import type { IDSFacet } from '@ifc-lite/ids';
9
+ import type { GateContext } from './context.js';
10
+ import type { GateIssue } from './types.js';
11
+ export declare function checkBsddUri(facet: IDSFacet, ctx: GateContext): Pick<GateIssue, 'code' | 'message' | 'candidates' | 'value' | 'severity'>[];
12
+ //# sourceMappingURL=bsdd.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bsdd.d.ts","sourceRoot":"","sources":["../../src/gate/bsdd.ts"],"names":[],"mappings":"AAIA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,KAAK,EAAiB,SAAS,EAAE,MAAM,YAAY,CAAC;AAE3D,wBAAgB,YAAY,CAAC,KAAK,EAAE,QAAQ,EAAE,GAAG,EAAE,WAAW,GAAG,IAAI,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,GAAG,YAAY,GAAG,OAAO,GAAG,UAAU,CAAC,EAAE,CAU3I"}
@@ -0,0 +1,17 @@
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 function checkBsddUri(facet, ctx) {
5
+ const uri = 'uri' in facet ? facet.uri : undefined;
6
+ const record = uri ? ctx.bsdd?.get(uri) : undefined;
7
+ if (!uri || !record)
8
+ return [];
9
+ const candidates = (record.replacedBy ?? []).map((value) => ({ value, score: 1, reason: 'replacement published by bSDD' }));
10
+ if (record.state === 'notFound')
11
+ return [{ code: 'GATE-BSDD-001', message: `bSDD does not know ${uri}`, candidates, value: uri }];
12
+ if (record.state === 'inactive') {
13
+ return [{ code: 'GATE-BSDD-001', message: `${uri} is inactive (deprecated) in bSDD`, candidates, value: uri, severity: 'warning' }];
14
+ }
15
+ return [];
16
+ }
17
+ //# sourceMappingURL=bsdd.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bsdd.js","sourceRoot":"","sources":["../../src/gate/bsdd.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAc/D,MAAM,UAAU,YAAY,CAAC,KAAe,EAAE,GAAgB;IAC5D,MAAM,GAAG,GAAG,KAAK,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC;IACnD,MAAM,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACpD,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM;QAAE,OAAO,EAAE,CAAC;IAC/B,MAAM,UAAU,GAAoB,CAAC,MAAM,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,+BAA+B,EAAE,CAAC,CAAC,CAAC;IAC7I,IAAI,MAAM,CAAC,KAAK,KAAK,UAAU;QAAE,OAAO,CAAC,EAAE,IAAI,EAAE,eAAe,EAAE,OAAO,EAAE,sBAAsB,GAAG,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;IAClI,IAAI,MAAM,CAAC,KAAK,KAAK,UAAU,EAAE,CAAC;QAChC,OAAO,CAAC,EAAE,IAAI,EAAE,eAAe,EAAE,OAAO,EAAE,GAAG,GAAG,mCAAmC,EAAE,UAAU,EAAE,KAAK,EAAE,GAAG,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC,CAAC;IACtI,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC"}
@@ -0,0 +1,6 @@
1
+ import type { StudioDocument } from '../document/types.js';
2
+ import type { GateContext } from './context.js';
3
+ import type { GateResult } from './types.js';
4
+ /** Check a batch of untrusted ops against `doc`. Never throws on bad input. */
5
+ export declare function checkOps(ops: readonly unknown[], doc: StudioDocument, ctx: GateContext): GateResult;
6
+ //# sourceMappingURL=check.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"check.d.ts","sourceRoot":"","sources":["../../src/gate/check.ts"],"names":[],"mappings":"AAyBA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAQ3D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAIhD,OAAO,KAAK,EAAuB,UAAU,EAAE,MAAM,YAAY,CAAC;AAuElE,+EAA+E;AAC/E,wBAAgB,QAAQ,CAAC,GAAG,EAAE,SAAS,OAAO,EAAE,EAAE,GAAG,EAAE,cAAc,EAAE,GAAG,EAAE,WAAW,GAAG,UAAU,CAkCnG"}
@@ -0,0 +1,125 @@
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 { getField } from '../document/fields.js';
5
+ import { locateFacet } from '../document/node-index.js';
6
+ import { expandCompound } from '../compound/expand.js';
7
+ import { DraftError } from '../ops/draft.js';
8
+ import { validateOp } from '../ops/schema.js';
9
+ import { applyPrimitive } from '../reducer/apply.js';
10
+ import { itemAt, OpApplyError } from '../reducer/edit.js';
11
+ import { groundEntityFields, specVersions } from './grounding.js';
12
+ import { groundPropertyFields } from './grounding-pset.js';
13
+ import { checkFacetStructure, checkOpPayload, checkSuppressionOp, groundingTargets, structureTargets } from './structural.js';
14
+ import { checkConstraint } from './values.js';
15
+ import { checkBsddUri } from './bsdd.js';
16
+ function push(c, issue) {
17
+ c.issues.push({ ok: false, opIndex: c.opIndex, ...(c.opId ? { opId: c.opId } : {}), candidates: [], ...issue });
18
+ }
19
+ function refusal(err) {
20
+ if (err instanceof OpApplyError)
21
+ return { code: err.code, message: err.message };
22
+ if (err instanceof DraftError)
23
+ return { code: err.code, message: err.message };
24
+ return undefined;
25
+ }
26
+ /** Well-formedness, structure and grounding of the facets an applied op touched. */
27
+ function checkAfter(c, op, before, after, ctx) {
28
+ for (const facetId of structureTargets(op)) {
29
+ const loc = locateFacet(after, facetId);
30
+ if (!loc)
31
+ continue;
32
+ const item = itemAt(after, loc);
33
+ for (const p of checkFacetStructure(item.facet, item.requirement))
34
+ push(c, { code: p.code, message: p.message, path: c.base + p.at, facetId });
35
+ for (const p of checkBsddUri(item.facet, ctx))
36
+ push(c, { ...p, path: c.base + '.payload', facetId });
37
+ }
38
+ const specOfBefore = (id) => locateFacet(before, id)?.specId;
39
+ for (const target of groundingTargets(op, after, specOfBefore)) {
40
+ const loc = locateFacet(after, target.facetId);
41
+ if (!loc)
42
+ continue;
43
+ const spec = after.ids.specifications[loc.specIndex];
44
+ const facet = itemAt(after, loc).facet;
45
+ for (const field of new Set(target.fields)) {
46
+ const constraint = getField(facet, field);
47
+ if (!constraint)
48
+ continue;
49
+ const path = c.base + target.at(field);
50
+ for (const p of checkConstraint(constraint))
51
+ push(c, { code: p.code, message: `${field}: ${p.message}`, path, facetId: target.facetId, field });
52
+ const scope = { ctx, spec, versions: specVersions(spec), facet, field, customPsets: after.meta.custom.psets, userDefinedTypes: after.meta.custom.userDefinedTypes };
53
+ for (const g of [...groundEntityFields(scope), ...groundPropertyFields(scope)]) {
54
+ push(c, { ...g, path, facetId: target.facetId, field });
55
+ }
56
+ }
57
+ }
58
+ }
59
+ function checkPrimitive(c, op, doc, ctx) {
60
+ const before = c.issues.length;
61
+ for (const p of [...checkOpPayload(op), ...checkSuppressionOp(op, doc)])
62
+ push(c, { code: p.code, message: p.message, path: c.base + p.at });
63
+ if (c.issues.length > before)
64
+ return undefined;
65
+ let next;
66
+ try {
67
+ next = applyPrimitive(doc, op).doc;
68
+ }
69
+ catch (err) {
70
+ const r = refusal(err);
71
+ if (!r)
72
+ throw err;
73
+ push(c, { code: r.code, message: r.message, path: c.base });
74
+ return undefined;
75
+ }
76
+ checkAfter(c, op, doc, next, ctx);
77
+ // A warning (e.g. a deprecated bSDD URI) does not stop the batch.
78
+ return c.issues.slice(before).some((i) => i.severity !== 'warning') ? undefined : next;
79
+ }
80
+ function isCompound(op) {
81
+ return op.kind.startsWith('bulk.');
82
+ }
83
+ /** Check a batch of untrusted ops against `doc`. Never throws on bad input. */
84
+ export function checkOps(ops, doc, ctx) {
85
+ const issues = [];
86
+ let current = doc;
87
+ ops.forEach((raw, opIndex) => {
88
+ const c = { issues, opIndex, base: `ops[${opIndex}]` };
89
+ const valid = validateOp(raw);
90
+ if (!valid.ok) {
91
+ for (const e of valid.errors)
92
+ push(c, { code: 'GATE-OP-001', message: e.message, path: c.base + e.path.slice(1) });
93
+ return;
94
+ }
95
+ const op = valid.op;
96
+ c.opId = op.opId;
97
+ let primitives;
98
+ if (isCompound(op)) {
99
+ try {
100
+ primitives = expandCompound(current, op);
101
+ }
102
+ catch (err) {
103
+ const r = refusal(err);
104
+ if (!r)
105
+ throw err;
106
+ push(c, { code: r.code, message: r.message, path: c.base });
107
+ return;
108
+ }
109
+ }
110
+ else {
111
+ primitives = [op];
112
+ }
113
+ let working = current;
114
+ primitives.forEach((p, j) => {
115
+ if (!working)
116
+ return;
117
+ const sub = { ...c, base: primitives.length > 1 || p !== op ? `${c.base}.expanded[${j}]` : c.base };
118
+ working = checkPrimitive(sub, p, working, ctx);
119
+ });
120
+ if (working)
121
+ current = working;
122
+ });
123
+ return { ok: issues.every((i) => i.severity === 'warning'), issues };
124
+ }
125
+ //# sourceMappingURL=check.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"check.js","sourceRoot":"","sources":["../../src/gate/check.ts"],"names":[],"mappings":"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"}