@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,68 @@
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
+ /** Optimal-string-alignment distance (Damerau-Levenshtein with adjacent transpositions). */
5
+ export function osaDistance(a, b) {
6
+ if (a === b)
7
+ return 0;
8
+ if (!a.length)
9
+ return b.length;
10
+ if (!b.length)
11
+ return a.length;
12
+ let prev2 = [];
13
+ let prev = Array.from({ length: b.length + 1 }, (_, j) => j);
14
+ for (let i = 1; i <= a.length; i++) {
15
+ const cur = [i];
16
+ for (let j = 1; j <= b.length; j++) {
17
+ const cost = a[i - 1] === b[j - 1] ? 0 : 1;
18
+ let d = Math.min(prev[j] + 1, cur[j - 1] + 1, prev[j - 1] + cost);
19
+ if (i > 1 && j > 1 && a[i - 1] === b[j - 2] && a[i - 2] === b[j - 1])
20
+ d = Math.min(d, prev2[j - 2] + 1);
21
+ cur.push(d);
22
+ }
23
+ prev2 = prev;
24
+ prev = cur;
25
+ }
26
+ return prev[b.length];
27
+ }
28
+ export function tokens(s) {
29
+ const parts = s
30
+ .replace(/([a-z0-9])([A-Z])/g, '$1 $2')
31
+ .replace(/([A-Z]+)([A-Z][a-z])/g, '$1 $2')
32
+ .split(/[^A-Za-z0-9]+/)
33
+ .map((t) => t.toLowerCase())
34
+ .filter(Boolean);
35
+ return new Set(parts);
36
+ }
37
+ function jaccard(a, b) {
38
+ if (!a.size && !b.size)
39
+ return 1;
40
+ let inter = 0;
41
+ for (const t of a)
42
+ if (b.has(t))
43
+ inter++;
44
+ return inter / (a.size + b.size - inter);
45
+ }
46
+ export function similarity(query, candidate) {
47
+ const q = query.toLowerCase();
48
+ const c = candidate.toLowerCase();
49
+ const maxLen = Math.max(q.length, c.length) || 1;
50
+ const edit = 1 - osaDistance(q, c) / maxLen;
51
+ return 0.6 * edit + 0.4 * jaccard(tokens(query), tokens(candidate));
52
+ }
53
+ /** The best-matching `pool` entries for `query`, best first. */
54
+ export function rankCandidates(query, pool, options = {}) {
55
+ const { limit = 5, minScore = 0.3, boost } = options;
56
+ const scored = [];
57
+ for (const value of pool) {
58
+ const base = similarity(query, value);
59
+ if (base < minScore)
60
+ continue;
61
+ const extra = boost?.(value);
62
+ const score = Math.min(1, base + (extra?.boost ?? 0));
63
+ scored.push(extra?.reason ? { value, score, reason: extra.reason } : { value, score });
64
+ }
65
+ scored.sort((a, b) => b.score - a.score || a.value.localeCompare(b.value));
66
+ return scored.slice(0, limit).map((c) => ({ ...c, score: Math.round(c.score * 1000) / 1000 }));
67
+ }
68
+ //# sourceMappingURL=rank.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rank.js","sourceRoot":"","sources":["../../src/gate/rank.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,43 @@
1
+ /**
2
+ * Structural rules (GATE-STR-00x) and op-level value rules that the
3
+ * reducer itself does not enforce, plus the map from an applied op to the
4
+ * facet fields whose grounding it may have changed.
5
+ */
6
+ import type { IDSFacet, IDSRequirement } from '@ifc-lite/ids';
7
+ import { type FacetFieldName } from '../document/fields.js';
8
+ import type { StudioDocument } from '../document/types.js';
9
+ import type { PrimitiveOp } from '../ops/types.js';
10
+ import type { Uuid } from '../uuid.js';
11
+ import type { GateCode } from './types.js';
12
+ export interface StructuralProblem {
13
+ code: GateCode;
14
+ message: string;
15
+ /** Path below `ops[i]`, e.g. `.payload.value`. */
16
+ at: string;
17
+ }
18
+ /**
19
+ * What a `meta.suppressions` entry can name: a lint rule code
20
+ * (`IDSL-SPEC-008`), an area wildcard (`IDSL-SPEC-*`) or every rule
21
+ * (`IDSL-*`), matching `suppressionMatches` in the linter.
22
+ */
23
+ export declare const SUPPRESSION_RULE: RegExp;
24
+ /**
25
+ * `meta.suppress` checks that need the document. They live in the gate, not
26
+ * the reducer, so undo can restore any suppression exactly as it was.
27
+ */
28
+ export declare function checkSuppressionOp(op: PrimitiveOp, doc: StudioDocument): StructuralProblem[];
29
+ /** Checks on the op payload itself, before it is applied. */
30
+ export declare function checkOpPayload(op: PrimitiveOp): StructuralProblem[];
31
+ /** Facet-level structural rules on the facet as it is AFTER the op. */
32
+ export declare function checkFacetStructure(facet: IDSFacet, requirement: IDSRequirement | undefined): StructuralProblem[];
33
+ /** Which facet fields an applied op may have changed the grounding of. */
34
+ export interface GroundingTarget {
35
+ facetId: Uuid;
36
+ fields: FacetFieldName[];
37
+ /** Path below `ops[i]` to point issues at. */
38
+ at: (field: FacetFieldName) => string;
39
+ }
40
+ export declare function groundingTargets(op: PrimitiveOp, after: StudioDocument, beforeSpecOf: (facetId: Uuid) => Uuid | undefined): GroundingTarget[];
41
+ /** Facets whose structure (not grounding) an op may have changed. */
42
+ export declare function structureTargets(op: PrimitiveOp): Uuid[];
43
+ //# sourceMappingURL=structural.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"structural.d.ts","sourceRoot":"","sources":["../../src/gate/structural.ts"],"names":[],"mappings":"AAIA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC9D,OAAO,EAAiB,KAAK,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAE3E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAEvC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAE3C,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,QAAQ,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,kDAAkD;IAClD,EAAE,EAAE,MAAM,CAAC;CACZ;AAYD;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,QAAsC,CAAC;AAEpE;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,WAAW,EAAE,GAAG,EAAE,cAAc,GAAG,iBAAiB,EAAE,CAgB5F;AAED,6DAA6D;AAC7D,wBAAgB,cAAc,CAAC,EAAE,EAAE,WAAW,GAAG,iBAAiB,EAAE,CA+BnE;AAKD,uEAAuE;AACvE,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,cAAc,GAAG,SAAS,GAAG,iBAAiB,EAAE,CAmBjH;AAED,0EAA0E;AAC1E,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,IAAI,CAAC;IACd,MAAM,EAAE,cAAc,EAAE,CAAC;IACzB,8CAA8C;IAC9C,EAAE,EAAE,CAAC,KAAK,EAAE,cAAc,KAAK,MAAM,CAAC;CACvC;AAyBD,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,CAAC,OAAO,EAAE,IAAI,KAAK,IAAI,GAAG,SAAS,GAAG,eAAe,EAAE,CA6B7I;AAED,qEAAqE;AACrE,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,WAAW,GAAG,IAAI,EAAE,CAgBxD"}
@@ -0,0 +1,175 @@
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 '../document/fields.js';
5
+ import { facetAt, locateFacet, locateNode, locateSpec } from '../document/node-index.js';
6
+ import { isReservedPsetName } from './grounding-pset.js';
7
+ // IDS 1.0 XSD: author is `[^@]+@[^\.]+\..+`, date is xs:date.
8
+ const AUTHOR = /^[^@]+@[^.]+\..+$/;
9
+ const XS_DATE = /^-?\d{4,}-(0[1-9]|1[0-2])-(0[1-9]|[12]\d|3[01])(Z|[+-]\d{2}:\d{2})?$/;
10
+ function versionsProblem(versions) {
11
+ return new Set(versions).size === versions.length
12
+ ? []
13
+ : [{ code: 'GATE-STR-007', message: 'ifcVersions lists a version twice', at: '.payload' }];
14
+ }
15
+ /**
16
+ * What a `meta.suppressions` entry can name: a lint rule code
17
+ * (`IDSL-SPEC-008`), an area wildcard (`IDSL-SPEC-*`) or every rule
18
+ * (`IDSL-*`), matching `suppressionMatches` in the linter.
19
+ */
20
+ export const SUPPRESSION_RULE = /^IDSL-(?:\*|[A-Z]+-(?:\d{3}|\*))$/;
21
+ /**
22
+ * `meta.suppress` checks that need the document. They live in the gate, not
23
+ * the reducer, so undo can restore any suppression exactly as it was.
24
+ */
25
+ export function checkSuppressionOp(op, doc) {
26
+ if (op.kind !== 'meta.suppress')
27
+ return [];
28
+ const { nodeId, suppression } = op.payload;
29
+ const out = [];
30
+ if (!locateNode(doc, nodeId))
31
+ out.push({ code: 'GATE-STR-001', message: `unknown node ${nodeId}`, at: '.payload.nodeId' });
32
+ if (!SUPPRESSION_RULE.test(suppression.rule)) {
33
+ out.push({
34
+ code: 'GATE-SUP-001',
35
+ message: `"${suppression.rule}" is not a lint rule code; use IDSL-<AREA>-<nnn>, IDSL-<AREA>-* or IDSL-*`,
36
+ at: '.payload.suppression.rule',
37
+ });
38
+ }
39
+ if (suppression.reason.trim() === '') {
40
+ out.push({ code: 'GATE-SUP-002', message: `a suppression of ${suppression.rule} needs a reason`, at: '.payload.suppression.reason' });
41
+ }
42
+ return out;
43
+ }
44
+ /** Checks on the op payload itself, before it is applied. */
45
+ export function checkOpPayload(op) {
46
+ switch (op.kind) {
47
+ case 'doc.setInfo': {
48
+ const { field, value } = op.payload;
49
+ if (value === null)
50
+ return [];
51
+ if (field === 'title' && value.trim() === '')
52
+ return [{ code: 'GATE-STR-007', message: 'title cannot be empty', at: '.payload.value' }];
53
+ if (field === 'author' && !AUTHOR.test(value))
54
+ return [{ code: 'GATE-VAL-007', message: `author "${value}" is not an e-mail address`, at: '.payload.value' }];
55
+ if (field === 'date' && !XS_DATE.test(value))
56
+ return [{ code: 'GATE-VAL-007', message: `date "${value}" is not an xs:date (YYYY-MM-DD)`, at: '.payload.value' }];
57
+ return [];
58
+ }
59
+ case 'spec.add':
60
+ return [
61
+ ...(op.payload.name.trim() === '' ? [{ code: 'GATE-STR-007', message: 'specification name cannot be empty', at: '.payload.name' }] : []),
62
+ ...versionsProblem(op.payload.ifcVersions),
63
+ ];
64
+ case 'spec.set':
65
+ return op.payload.field === 'name' && (op.payload.value ?? '').trim() === ''
66
+ ? [{ code: 'GATE-STR-007', message: 'specification name cannot be empty', at: '.payload.value' }]
67
+ : [];
68
+ case 'spec.setIfcVersions':
69
+ return versionsProblem(op.payload.versions);
70
+ case 'spec.patch':
71
+ if (op.payload.set.ifcVersions?.length === 0)
72
+ return [{ code: 'GATE-STR-007', message: 'ifcVersions cannot be empty', at: '.payload.set.ifcVersions' }];
73
+ return op.payload.set.ifcVersions ? versionsProblem(op.payload.set.ifcVersions) : [];
74
+ case 'meta.custom.declarePset':
75
+ return isReservedPsetName(op.payload.decl.name)
76
+ ? [{ code: 'GATE-CUST-002', message: `custom property sets cannot use a reserved prefix (${op.payload.decl.name}); use a project prefix such as "Project_"`, at: '.payload.decl.name' }]
77
+ : [];
78
+ default:
79
+ return [];
80
+ }
81
+ }
82
+ // An absolute URI without whitespace (xs:anyURI as IDS tools use it: a scheme, then the rest).
83
+ const ABSOLUTE_URI = /^[A-Za-z][A-Za-z0-9+.-]*:\S+$/;
84
+ /** Facet-level structural rules on the facet as it is AFTER the op. */
85
+ export function checkFacetStructure(facet, requirement) {
86
+ const out = [];
87
+ if (facet.type === 'partOf' && !facet.entity) {
88
+ out.push({ code: 'GATE-STR-004', message: 'a partOf facet needs its related entity (IDS 1.0)', at: '.payload' });
89
+ }
90
+ if (facet.type === 'property' && facet.dataType && facet.dataType.type !== 'simpleValue') {
91
+ out.push({ code: 'GATE-STR-005', message: 'a property dataType must be a single value', at: '.payload' });
92
+ }
93
+ if (facet.type === 'entity' && requirement && requirement.optionality !== 'required') {
94
+ out.push({ code: 'GATE-STR-008', message: 'an entity requirement has no cardinality in IDS 1.0; it can only be required', at: '.payload' });
95
+ }
96
+ const uri = 'uri' in facet ? facet.uri : undefined;
97
+ if (uri !== undefined && !requirement) {
98
+ out.push({ code: 'GATE-STR-009', message: 'IDS 1.0 allows a uri only on requirement facets, not in the applicability', at: '.payload' });
99
+ }
100
+ if (uri !== undefined && !ABSOLUTE_URI.test(uri)) {
101
+ out.push({ code: 'GATE-VAL-009', message: `uri "${uri}" is not an absolute URI`, at: '.payload' });
102
+ }
103
+ return out;
104
+ }
105
+ const DEPENDENTS = {
106
+ 'entity.name': ['entity.predefinedType'],
107
+ 'partOf.entity.name': ['partOf.entity.predefinedType'],
108
+ 'property.propertySet': ['property.baseName', 'property.dataType', 'property.value'],
109
+ 'property.baseName': ['property.dataType', 'property.value'],
110
+ };
111
+ function draftPath(field) {
112
+ return `.payload.facet.${field.slice(field.indexOf('.') + 1)}`;
113
+ }
114
+ function allFacetsOf(doc, specId) {
115
+ const i = locateSpec(doc, specId);
116
+ if (i === undefined)
117
+ return [];
118
+ const spec = doc.ids.specifications[i];
119
+ const nodes = doc.nodes.specs[i];
120
+ const facets = [
121
+ ...spec.applicability.facets.map((f, j) => [nodes.applicability[j].id, f]),
122
+ ...spec.requirements.map((r) => [r.id, r.facet]),
123
+ ];
124
+ return facets.map(([facetId, facet]) => ({ facetId, fields: presentFields(facet), at: () => '' }));
125
+ }
126
+ export function groundingTargets(op, after, beforeSpecOf) {
127
+ switch (op.kind) {
128
+ case 'facet.add':
129
+ case 'facet.replace': {
130
+ const loc = locateFacet(after, op.payload.facetId);
131
+ return loc ? [{ facetId: op.payload.facetId, fields: presentFields(facetAt(after, loc)), at: draftPath }] : [];
132
+ }
133
+ case 'facet.restore':
134
+ return [{ facetId: op.payload.nodes.id, fields: presentFields(op.payload.facet), at: () => '.payload.facet' }];
135
+ case 'facet.move': {
136
+ const loc = locateFacet(after, op.payload.facetId);
137
+ if (!loc || beforeSpecOf(op.payload.facetId) === loc.specId)
138
+ return [];
139
+ return [{ facetId: op.payload.facetId, fields: presentFields(facetAt(after, loc)), at: () => '' }];
140
+ }
141
+ case 'facet.setField':
142
+ case 'value.set':
143
+ case 'value.addEnumValue':
144
+ case 'value.removeEnumValue': {
145
+ const { facetId, field } = op.payload;
146
+ return [{ facetId, fields: [field, ...(DEPENDENTS[field] ?? [])], at: (f) => (f === field ? '.payload.value' : '') }];
147
+ }
148
+ case 'spec.setIfcVersions':
149
+ case 'spec.restore':
150
+ return allFacetsOf(after, op.kind === 'spec.restore' ? op.payload.spec.id : op.payload.specId);
151
+ case 'spec.patch':
152
+ return op.payload.set.ifcVersions ? allFacetsOf(after, op.payload.specId) : [];
153
+ default:
154
+ return [];
155
+ }
156
+ }
157
+ /** Facets whose structure (not grounding) an op may have changed. */
158
+ export function structureTargets(op) {
159
+ switch (op.kind) {
160
+ case 'facet.add':
161
+ case 'facet.replace':
162
+ case 'facet.move':
163
+ case 'facet.setField':
164
+ case 'value.set':
165
+ case 'facet.patch':
166
+ case 'facet.setUri':
167
+ case 'requirement.setOptionality':
168
+ return [op.payload.facetId];
169
+ case 'facet.restore':
170
+ return [op.payload.nodes.id];
171
+ default:
172
+ return [];
173
+ }
174
+ }
175
+ //# sourceMappingURL=structural.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"structural.js","sourceRoot":"","sources":["../../src/gate/structural.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,45 @@
1
+ /**
2
+ * Grounding gate result shapes (§5, ADR-003). Gate output is DATA: it is
3
+ * returned verbatim to an agent and rendered by the UI, never thrown.
4
+ */
5
+ import type { IFCVersion } from '@ifc-lite/ids';
6
+ import type { FacetFieldName } from '../document/fields.js';
7
+ import type { Uuid } from '../uuid.js';
8
+ export type GateCode = 'GATE-OP-001' | 'GATE-OP-002' | 'GATE-ENT-001' | 'GATE-PDT-001' | 'GATE-ATT-001' | 'GATE-PSET-001' | 'GATE-PROP-001' | 'GATE-ENUM-001' | 'GATE-DT-001' | 'GATE-CUST-001' | 'GATE-CUST-002' | 'GATE-CUST-003' | 'GATE-CUST-004' | 'GATE-SUP-001' | 'GATE-SUP-002' | 'GATE-SUP-003' | 'GATE-STR-001' | 'GATE-STR-002' | 'GATE-STR-003' | 'GATE-STR-004' | 'GATE-STR-005' | 'GATE-STR-006' | 'GATE-STR-007' | 'GATE-STR-008' | 'GATE-STR-009' | 'GATE-VAL-001' | 'GATE-VAL-002' | 'GATE-VAL-003' | 'GATE-VAL-004' | 'GATE-VAL-005' | 'GATE-VAL-006' | 'GATE-VAL-007' | 'GATE-VAL-008' | 'GATE-VAL-009' | 'GATE-BSDD-001';
9
+ /** A ranked "did you mean" suggestion. */
10
+ export interface GateCandidate {
11
+ value: string;
12
+ /** 0..1, higher is better. */
13
+ score: number;
14
+ /** Why it is suggested, e.g. "applicable to IfcWall" or "in Pset_DoorCommon". */
15
+ reason?: string;
16
+ }
17
+ export interface GateIssue {
18
+ ok: false;
19
+ code: GateCode;
20
+ /** Where in the submitted batch: `ops[2].payload.facet.baseName`. */
21
+ path: string;
22
+ message: string;
23
+ candidates: GateCandidate[];
24
+ /** Index of the offending op in the submitted batch. */
25
+ opIndex: number;
26
+ opId?: Uuid;
27
+ /** The facet and field the issue is about, when there is one. */
28
+ facetId?: Uuid;
29
+ field?: FacetFieldName;
30
+ /** The offending literal, when there is one. */
31
+ value?: string;
32
+ /** IFC versions of the spec in which the literal does not resolve. */
33
+ versions?: IFCVersion[];
34
+ /**
35
+ * `warning`: reported but not blocking (e.g. a deprecated bSDD URI).
36
+ * Absent: the issue blocks the batch.
37
+ */
38
+ severity?: 'warning';
39
+ }
40
+ export interface GateResult {
41
+ /** True when no blocking issue was found and the batch may be applied (warnings may remain). */
42
+ ok: boolean;
43
+ issues: GateIssue[];
44
+ }
45
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/gate/types.ts"],"names":[],"mappings":"AAIA;;;GAGG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAEvC,MAAM,MAAM,QAAQ,GAEhB,aAAa,GACb,aAAa,GAEb,cAAc,GACd,cAAc,GACd,cAAc,GACd,eAAe,GACf,eAAe,GACf,eAAe,GACf,aAAa,GAEb,eAAe,GACf,eAAe,GACf,eAAe,GACf,eAAe,GAEf,cAAc,GACd,cAAc,GACd,cAAc,GAEd,cAAc,GACd,cAAc,GACd,cAAc,GACd,cAAc,GACd,cAAc,GACd,cAAc,GACd,cAAc,GACd,cAAc,GACd,cAAc,GAEd,cAAc,GACd,cAAc,GACd,cAAc,GACd,cAAc,GACd,cAAc,GACd,cAAc,GACd,cAAc,GACd,cAAc,GACd,cAAc,GAEd,eAAe,CAAC;AAEpB,0CAA0C;AAC1C,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,8BAA8B;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,iFAAiF;IACjF,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,KAAK,CAAC;IACV,IAAI,EAAE,QAAQ,CAAC;IACf,qEAAqE;IACrE,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,aAAa,EAAE,CAAC;IAC5B,wDAAwD;IACxD,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,IAAI,CAAC;IACZ,iEAAiE;IACjE,OAAO,CAAC,EAAE,IAAI,CAAC;IACf,KAAK,CAAC,EAAE,cAAc,CAAC;IACvB,gDAAgD;IAChD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,sEAAsE;IACtE,QAAQ,CAAC,EAAE,UAAU,EAAE,CAAC;IACxB;;;OAGG;IACH,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAED,MAAM,WAAW,UAAU;IACzB,gGAAgG;IAChG,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,EAAE,SAAS,EAAE,CAAC;CACrB"}
@@ -0,0 +1,5 @@
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 {};
5
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/gate/types.ts"],"names":[],"mappings":"AAAA;;+DAE+D"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Value well-formedness (GATE-VAL-00x). Runs on the normalised
3
+ * `IDSConstraint`, so drafts and raw constraints get the same checks, and
4
+ * recurses into the conjunctive `and` siblings (which the IDS audit does
5
+ * not lint).
6
+ *
7
+ * Patterns go through the same XSD → JS translator and ReDoS guard the
8
+ * validator uses, so a pattern the gate accepts is one the checker can run.
9
+ */
10
+ import type { IDSConstraint } from '@ifc-lite/ids';
11
+ import type { GateCode } from './types.js';
12
+ export interface ValueProblem {
13
+ code: GateCode;
14
+ message: string;
15
+ }
16
+ export declare function checkPattern(pattern: string): ValueProblem[];
17
+ /** Every well-formedness problem of `c` (including its `and` siblings). */
18
+ export declare function checkConstraint(c: IDSConstraint, base?: string): ValueProblem[];
19
+ //# sourceMappingURL=values.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"values.d.ts","sourceRoot":"","sources":["../../src/gate/values.ts"],"names":[],"mappings":"AAIA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAuB,aAAa,EAAE,MAAM,eAAe,CAAC;AAGxE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAE3C,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,QAAQ,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;CACjB;AAsBD,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,YAAY,EAAE,CAe5D;AAmDD,2EAA2E;AAC3E,wBAAgB,eAAe,CAAC,CAAC,EAAE,aAAa,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,YAAY,EAAE,CAkB/E"}
@@ -0,0 +1,124 @@
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 { translateXsdRegex } from '@ifc-lite/ids';
5
+ import { assertGuardedRegexPattern, UnsafeRegexPatternError } from '@ifc-lite/regex-guard';
6
+ const NUMERIC_BASES = new Set(['xs:double', 'xs:decimal', 'xs:float', 'xs:integer']);
7
+ const XSD_DECIMAL = /^[+-]?(\d+(\.\d*)?|\.\d+)$/;
8
+ const XSD_DOUBLE = /^([+-]?(\d+(\.\d*)?|\.\d+)([eE][+-]?\d+)?|[+-]?INF|NaN)$/;
9
+ const XSD_INTEGER = /^[+-]?\d+$/;
10
+ function numericLiteralOk(base, value) {
11
+ const v = value.trim();
12
+ if (base === 'xs:integer')
13
+ return XSD_INTEGER.test(v);
14
+ if (base === 'xs:decimal')
15
+ return XSD_DECIMAL.test(v);
16
+ return XSD_DOUBLE.test(v);
17
+ }
18
+ /** Lexical check of one literal against a restriction base. */
19
+ function literalOk(base, value) {
20
+ if (!base)
21
+ return true;
22
+ if (NUMERIC_BASES.has(base))
23
+ return numericLiteralOk(base, value);
24
+ if (base === 'xs:boolean')
25
+ return ['true', 'false', '1', '0'].includes(value.trim());
26
+ return true;
27
+ }
28
+ export function checkPattern(pattern) {
29
+ if (pattern === '')
30
+ return [{ code: 'GATE-VAL-003', message: 'pattern is empty' }];
31
+ try {
32
+ assertGuardedRegexPattern(pattern);
33
+ }
34
+ catch (err) {
35
+ const reason = err instanceof UnsafeRegexPatternError ? err.reason : String(err);
36
+ return [{ code: 'GATE-VAL-004', message: `pattern "${pattern}" is rejected by the ReDoS guard: ${reason}` }];
37
+ }
38
+ const translated = translateXsdRegex(pattern);
39
+ try {
40
+ new RegExp(`^(?:${translated.pattern})$`, 'u');
41
+ }
42
+ catch (err) {
43
+ return [{ code: 'GATE-VAL-003', message: `pattern "${pattern}" does not compile: ${err instanceof Error ? err.message : String(err)}` }];
44
+ }
45
+ return [];
46
+ }
47
+ function lower(b) {
48
+ if (b.minExclusive !== undefined)
49
+ return { v: b.minExclusive, exclusive: true };
50
+ if (b.minInclusive !== undefined)
51
+ return { v: b.minInclusive, exclusive: false };
52
+ return undefined;
53
+ }
54
+ function upper(b) {
55
+ if (b.maxExclusive !== undefined)
56
+ return { v: b.maxExclusive, exclusive: true };
57
+ if (b.maxInclusive !== undefined)
58
+ return { v: b.maxInclusive, exclusive: false };
59
+ return undefined;
60
+ }
61
+ function checkBounds(b) {
62
+ const out = [];
63
+ const keys = ['minInclusive', 'maxInclusive', 'minExclusive', 'maxExclusive', 'length', 'minLength', 'maxLength', 'totalDigits', 'fractionDigits'];
64
+ for (const k of keys) {
65
+ const v = b[k];
66
+ if (v !== undefined && !Number.isFinite(v))
67
+ out.push({ code: 'GATE-VAL-001', message: `${k} must be a finite number` });
68
+ }
69
+ if (b.minInclusive !== undefined && b.minExclusive !== undefined) {
70
+ out.push({ code: 'GATE-VAL-002', message: 'minInclusive and minExclusive cannot both be set' });
71
+ }
72
+ if (b.maxInclusive !== undefined && b.maxExclusive !== undefined) {
73
+ out.push({ code: 'GATE-VAL-002', message: 'maxInclusive and maxExclusive cannot both be set' });
74
+ }
75
+ const lo = lower(b);
76
+ const hi = upper(b);
77
+ if (lo && hi && (lo.v > hi.v || (lo.v === hi.v && (lo.exclusive || hi.exclusive)))) {
78
+ out.push({ code: 'GATE-VAL-002', message: `lower bound ${lo.v} is not below upper bound ${hi.v}; no value can match` });
79
+ }
80
+ for (const k of ['length', 'minLength', 'maxLength', 'fractionDigits']) {
81
+ const v = b[k];
82
+ if (v !== undefined && (!Number.isInteger(v) || v < 0))
83
+ out.push({ code: 'GATE-VAL-005', message: `${k} must be a non-negative integer` });
84
+ }
85
+ if (b.totalDigits !== undefined && (!Number.isInteger(b.totalDigits) || b.totalDigits < 1)) {
86
+ out.push({ code: 'GATE-VAL-005', message: 'totalDigits must be a positive integer' });
87
+ }
88
+ if (b.minLength !== undefined && b.maxLength !== undefined && b.minLength > b.maxLength) {
89
+ out.push({ code: 'GATE-VAL-005', message: `minLength ${b.minLength} exceeds maxLength ${b.maxLength}` });
90
+ }
91
+ if (b.totalDigits !== undefined && b.fractionDigits !== undefined && b.fractionDigits > b.totalDigits) {
92
+ out.push({ code: 'GATE-VAL-005', message: `fractionDigits ${b.fractionDigits} exceeds totalDigits ${b.totalDigits}` });
93
+ }
94
+ if (b.unparseableFacets?.length) {
95
+ out.push({ code: 'GATE-VAL-006', message: `unparseable facets: ${b.unparseableFacets.map((f) => `${f.facet}="${f.rawValue}"`).join(', ')}` });
96
+ }
97
+ return out;
98
+ }
99
+ /** Every well-formedness problem of `c` (including its `and` siblings). */
100
+ export function checkConstraint(c, base) {
101
+ switch (c.type) {
102
+ case 'simpleValue':
103
+ return [];
104
+ case 'pattern':
105
+ return [...checkPattern(c.pattern), ...siblings(c.and, c.base ?? base)];
106
+ case 'enumeration': {
107
+ const out = [];
108
+ if (c.values.length === 0)
109
+ out.push({ code: 'GATE-VAL-001', message: 'enumeration has no values' });
110
+ const b = c.base ?? base;
111
+ for (const v of c.values) {
112
+ if (!literalOk(b, v))
113
+ out.push({ code: 'GATE-VAL-006', message: `"${v}" is not a valid ${b} literal` });
114
+ }
115
+ return [...out, ...siblings(c.and, b)];
116
+ }
117
+ case 'bounds':
118
+ return [...checkBounds(c), ...siblings(c.and, c.base ?? base)];
119
+ }
120
+ }
121
+ function siblings(and, base) {
122
+ return (and ?? []).flatMap((s) => checkConstraint(s, base));
123
+ }
124
+ //# sourceMappingURL=values.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"values.js","sourceRoot":"","sources":["../../src/gate/values.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * The one entry point through which a headless caller (an MCP client, an
3
+ * SDK script, a Flow node) changes an IDS document: untrusted ops are
4
+ * validated against the op JSON Schema (`validateOp`) and checked by the
5
+ * grounding gate (`checkOps`) as a batch; only a batch that passes is
6
+ * applied. A refused batch returns the gate's issues as data, each with
7
+ * its path, message and ranked candidates, so the caller can correct the
8
+ * names and retry. ADR-002/003: nothing else writes a document.
9
+ */
10
+ import type { StudioDocument } from '../document/types.js';
11
+ import type { GateContext } from '../gate/context.js';
12
+ import type { GateIssue } from '../gate/types.js';
13
+ import type { PrimitiveOp } from '../ops/types.js';
14
+ import type { Uuid } from '../uuid.js';
15
+ export type GatedApplyResult = {
16
+ ok: true;
17
+ doc: StudioDocument;
18
+ /** The primitive ops applied (compound ops expanded). */
19
+ applied: PrimitiveOp[];
20
+ /** Ops that undo the batch, in order. */
21
+ inverses: PrimitiveOp[];
22
+ /** Node ids created, changed, moved or removed. */
23
+ touched: Uuid[];
24
+ } | {
25
+ ok: false;
26
+ /** The input document, unchanged. */
27
+ doc: StudioDocument;
28
+ issues: GateIssue[];
29
+ };
30
+ /** Validate, gate and apply `ops` (untrusted) to `doc`. Never applies part of a batch. */
31
+ export declare function applyOpsGated(doc: StudioDocument, ops: unknown, ctx: GateContext): GatedApplyResult;
32
+ //# sourceMappingURL=apply-gated.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"apply-gated.d.ts","sourceRoot":"","sources":["../../src/headless/apply-gated.ts"],"names":[],"mappings":"AAIA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAE3D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAElD,OAAO,KAAK,EAAE,WAAW,EAAY,MAAM,iBAAiB,CAAC;AAE7D,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAEvC,MAAM,MAAM,gBAAgB,GACxB;IACE,EAAE,EAAE,IAAI,CAAC;IACT,GAAG,EAAE,cAAc,CAAC;IACpB,yDAAyD;IACzD,OAAO,EAAE,WAAW,EAAE,CAAC;IACvB,yCAAyC;IACzC,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,mDAAmD;IACnD,OAAO,EAAE,IAAI,EAAE,CAAC;CACjB,GACD;IACE,EAAE,EAAE,KAAK,CAAC;IACV,qCAAqC;IACrC,GAAG,EAAE,cAAc,CAAC;IACpB,MAAM,EAAE,SAAS,EAAE,CAAC;CACrB,CAAC;AAEN,0FAA0F;AAC1F,wBAAgB,aAAa,CAAC,GAAG,EAAE,cAAc,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,WAAW,GAAG,gBAAgB,CAenG"}
@@ -0,0 +1,26 @@
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 { checkOps } from '../gate/check.js';
5
+ import { validateOp } from '../ops/schema.js';
6
+ import { apply } from '../reducer/apply.js';
7
+ /** Validate, gate and apply `ops` (untrusted) to `doc`. Never applies part of a batch. */
8
+ export function applyOpsGated(doc, ops, ctx) {
9
+ if (!Array.isArray(ops)) {
10
+ const issue = { ok: false, code: 'GATE-OP-001', path: 'ops', message: 'ops must be an array of operations', candidates: [], opIndex: -1 };
11
+ return { ok: false, doc, issues: [issue] };
12
+ }
13
+ const gate = checkOps(ops, doc, ctx);
14
+ if (!gate.ok)
15
+ return { ok: false, doc, issues: gate.issues };
16
+ // The gate validated every op; re-validating here yields the typed value.
17
+ const typed = ops.map((raw) => {
18
+ const v = validateOp(raw);
19
+ if (!v.ok)
20
+ throw new Error('an op that passed the gate failed validation');
21
+ return v.op;
22
+ });
23
+ const result = apply(doc, typed);
24
+ return { ok: true, doc: result.doc, applied: result.expanded, inverses: result.inverses, touched: [...result.touched] };
25
+ }
26
+ //# sourceMappingURL=apply-gated.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"apply-gated.js","sourceRoot":"","sources":["../../src/headless/apply-gated.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAa/D,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAG5C,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C,OAAO,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAqB5C,0FAA0F;AAC1F,MAAM,UAAU,aAAa,CAAC,GAAmB,EAAE,GAAY,EAAE,GAAgB;IAC/E,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QACxB,MAAM,KAAK,GAAc,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,oCAAoC,EAAE,UAAU,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC;QACrJ,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC;IAC7C,CAAC;IACD,MAAM,IAAI,GAAG,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;IACrC,IAAI,CAAC,IAAI,CAAC,EAAE;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC;IAC7D,0EAA0E;IAC1E,MAAM,KAAK,GAAe,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;QACxC,MAAM,CAAC,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC;QAC1B,IAAI,CAAC,CAAC,CAAC,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;QAC3E,OAAO,CAAC,CAAC,EAAE,CAAC;IACd,CAAC,CAAC,CAAC;IACH,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IACjC,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,OAAO,EAAE,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;AAC1H,CAAC"}