@ifc-lite/ids-authoring 0.0.0-stage → 0.2.2

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,51 @@
1
+ /**
2
+ * The gate's view of the per-version IFC schema tables in `@ifc-lite/data`.
3
+ *
4
+ * `@ifc-lite/data` exposes async lookups (so a future build can lazy-load
5
+ * the tables); the gate runs on every keystroke and inside agent tool calls,
6
+ * so `createGateContext()` loads the tables once and builds synchronous,
7
+ * case-folded indexes. `checkOps` is then synchronous.
8
+ */
9
+ import { type IfcDataTypeInfo, type IfcEntityInfo, type IfcPropertySetInfo, type IfcSchemaVersion } from '@ifc-lite/data';
10
+ import type { IFCVersion } from '@ifc-lite/ids';
11
+ import type { BsddUriIndex } from '../bsdd/uri-health.js';
12
+ import type { CustomPsetDecl } from '../document/types.js';
13
+ export interface VersionTables {
14
+ readonly version: IfcSchemaVersion;
15
+ /** UPPERCASE name → entity. EXPRESS defined types (IfcLabel, …) are excluded. */
16
+ readonly entities: ReadonlyMap<string, IfcEntityInfo>;
17
+ /** PascalCase entity names, for candidate ranking. */
18
+ readonly entityNames: readonly string[];
19
+ /** Exact name → property set (`Pset_*`, `Qto_*`). */
20
+ readonly psets: ReadonlyMap<string, IfcPropertySetInfo>;
21
+ readonly psetNames: readonly string[];
22
+ /** Property name → names of the standard sets that define it. */
23
+ readonly psetsByProperty: ReadonlyMap<string, readonly string[]>;
24
+ /** UPPERCASE name → IFC data type. */
25
+ readonly dataTypes: ReadonlyMap<string, IfcDataTypeInfo>;
26
+ /** Every attribute name of the version (any entity). */
27
+ readonly attributeNames: ReadonlySet<string>;
28
+ /**
29
+ * Whether the tables enumerate quantity sets. The upstream data only has
30
+ * `Qto_*` rows for IFC4X3; for IFC2X3/IFC4 a `Qto_*` name cannot be
31
+ * verified and is accepted until P-01's IDS-009 schema rows exist (owner
32
+ * decision; see the TODO in `grounding-pset.ts`).
33
+ */
34
+ readonly hasQuantitySets: boolean;
35
+ }
36
+ export interface GateContext {
37
+ readonly tables: Readonly<Record<IfcSchemaVersion, VersionTables>>;
38
+ /** Custom psets declared outside the document (e.g. an organisation library). */
39
+ readonly custom: readonly CustomPsetDecl[];
40
+ /** Checked bSDD URIs (GATE-BSDD-001). Absent or unchecked: URIs are not judged here, lint reports them later. */
41
+ readonly bsdd?: BsddUriIndex;
42
+ }
43
+ /** Load the schema tables (once per process) and build a gate context. */
44
+ export declare function createGateContext(options?: {
45
+ custom?: readonly CustomPsetDecl[];
46
+ bsdd?: BsddUriIndex;
47
+ }): Promise<GateContext>;
48
+ export declare function tablesFor(ctx: GateContext, version: IFCVersion): VersionTables;
49
+ /** The inheritance chain of `name` (itself first), or [] when unknown. */
50
+ export declare function inheritanceChain(tables: VersionTables, name: string): IfcEntityInfo[];
51
+ //# sourceMappingURL=context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/gate/context.ts"],"names":[],"mappings":"AAIA;;;;;;;GAOG;AAEH,OAAO,EAML,KAAK,eAAe,EACpB,KAAK,aAAa,EAClB,KAAK,kBAAkB,EACvB,KAAK,gBAAgB,EACtB,MAAM,gBAAgB,CAAC;AACxB,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAE3D,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,OAAO,EAAE,gBAAgB,CAAC;IACnC,iFAAiF;IACjF,QAAQ,CAAC,QAAQ,EAAE,WAAW,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IACtD,sDAAsD;IACtD,QAAQ,CAAC,WAAW,EAAE,SAAS,MAAM,EAAE,CAAC;IACxC,qDAAqD;IACrD,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;IACxD,QAAQ,CAAC,SAAS,EAAE,SAAS,MAAM,EAAE,CAAC;IACtC,iEAAiE;IACjE,QAAQ,CAAC,eAAe,EAAE,WAAW,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC,CAAC;IACjE,sCAAsC;IACtC,QAAQ,CAAC,SAAS,EAAE,WAAW,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IACzD,wDAAwD;IACxD,QAAQ,CAAC,cAAc,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAC7C;;;;;OAKG;IACH,QAAQ,CAAC,eAAe,EAAE,OAAO,CAAC;CACnC;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,gBAAgB,EAAE,aAAa,CAAC,CAAC,CAAC;IACnE,iFAAiF;IACjF,QAAQ,CAAC,MAAM,EAAE,SAAS,cAAc,EAAE,CAAC;IAC3C,iHAAiH;IACjH,QAAQ,CAAC,IAAI,CAAC,EAAE,YAAY,CAAC;CAC9B;AAkDD,0EAA0E;AAC1E,wBAAsB,iBAAiB,CAAC,OAAO,GAAE;IAAE,MAAM,CAAC,EAAE,SAAS,cAAc,EAAE,CAAC;IAAC,IAAI,CAAC,EAAE,YAAY,CAAA;CAAO,GAAG,OAAO,CAAC,WAAW,CAAC,CAEvI;AAED,wBAAgB,SAAS,CAAC,GAAG,EAAE,WAAW,EAAE,OAAO,EAAE,UAAU,GAAG,aAAa,CAE9E;AAED,0EAA0E;AAC1E,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,GAAG,aAAa,EAAE,CAUrF"}
@@ -0,0 +1,74 @@
1
+ /* This Source Code Form is subject to the terms of the Mozilla Public
2
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
3
+ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */
4
+ /**
5
+ * The gate's view of the per-version IFC schema tables in `@ifc-lite/data`.
6
+ *
7
+ * `@ifc-lite/data` exposes async lookups (so a future build can lazy-load
8
+ * the tables); the gate runs on every keystroke and inside agent tool calls,
9
+ * so `createGateContext()` loads the tables once and builds synchronous,
10
+ * case-folded indexes. `checkOps` is then synchronous.
11
+ */
12
+ import { getAttributes, getDataTypes, getEntities, getPropertySets, IFC_DATA_TYPES, } from '@ifc-lite/data';
13
+ const VERSIONS = ['IFC2X3', 'IFC4', 'IFC4X3', 'IFC4X3_ADD2'];
14
+ const DEFINED_TYPE_NAMES = new Set(IFC_DATA_TYPES.map((t) => t.name.toUpperCase()));
15
+ async function loadVersion(version) {
16
+ const [entityList, psetList, dataTypeList, attributeList] = await Promise.all([
17
+ getEntities(version),
18
+ getPropertySets(version),
19
+ getDataTypes(version),
20
+ getAttributes(version),
21
+ ]);
22
+ const entities = new Map();
23
+ for (const e of entityList) {
24
+ const upper = e.name.toUpperCase();
25
+ if (!DEFINED_TYPE_NAMES.has(upper))
26
+ entities.set(upper, e);
27
+ }
28
+ const psets = new Map();
29
+ const psetsByProperty = new Map();
30
+ for (const p of psetList) {
31
+ psets.set(p.name, p);
32
+ for (const prop of p.properties) {
33
+ const list = psetsByProperty.get(prop.name) ?? [];
34
+ list.push(p.name);
35
+ psetsByProperty.set(prop.name, list);
36
+ }
37
+ }
38
+ return {
39
+ version,
40
+ entities,
41
+ entityNames: [...entities.values()].map((e) => e.name),
42
+ psets,
43
+ psetNames: [...psets.keys()],
44
+ psetsByProperty,
45
+ dataTypes: new Map(dataTypeList.map((t) => [t.name.toUpperCase(), t])),
46
+ attributeNames: new Set(attributeList.map((a) => a.name)),
47
+ hasQuantitySets: psetList.some((p) => p.name.startsWith('Qto_')),
48
+ };
49
+ }
50
+ let shared;
51
+ function loadAll() {
52
+ shared ??= Promise.all(VERSIONS.map(loadVersion)).then((list) => Object.fromEntries(list.map((t) => [t.version, t])));
53
+ return shared;
54
+ }
55
+ /** Load the schema tables (once per process) and build a gate context. */
56
+ export async function createGateContext(options = {}) {
57
+ return { tables: await loadAll(), custom: options.custom ?? [], ...(options.bsdd ? { bsdd: options.bsdd } : {}) };
58
+ }
59
+ export function tablesFor(ctx, version) {
60
+ return ctx.tables[version];
61
+ }
62
+ /** The inheritance chain of `name` (itself first), or [] when unknown. */
63
+ export function inheritanceChain(tables, name) {
64
+ const chain = [];
65
+ const seen = new Set();
66
+ let cursor = tables.entities.get(name.toUpperCase());
67
+ while (cursor && !seen.has(cursor.name)) {
68
+ chain.push(cursor);
69
+ seen.add(cursor.name);
70
+ cursor = cursor.parent ? tables.entities.get(cursor.parent.toUpperCase()) : undefined;
71
+ }
72
+ return chain;
73
+ }
74
+ //# sourceMappingURL=context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/gate/context.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import { type FieldScope, type GroundingProblem } from './grounding.js';
2
+ export declare function isReservedPsetName(name: string): boolean;
3
+ /** Property-facet grounding for one field. */
4
+ export declare function groundPropertyFields(scope: FieldScope): GroundingProblem[];
5
+ //# sourceMappingURL=grounding-pset.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"grounding-pset.d.ts","sourceRoot":"","sources":["../../src/gate/grounding-pset.ts"],"names":[],"mappings":"AAoBA,OAAO,EAAuD,KAAK,UAAU,EAAE,KAAK,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAG7H,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAExD;AA+ID,8CAA8C;AAC9C,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,UAAU,GAAG,gBAAgB,EAAE,CAe1E"}
@@ -0,0 +1,179 @@
1
+ /* This Source Code Form is subject to the terms of the Mozilla Public
2
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
3
+ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */
4
+ /**
5
+ * Property grounding (§5): standard set (GATE-PSET-001), property
6
+ * (GATE-PROP-001), enumeration value (GATE-ENUM-001), dataType
7
+ * (GATE-DT-001) and custom-set declarations (GATE-CUST-00x).
8
+ *
9
+ * A set name with a reserved prefix (`Pset_`, `Qto_`) must be a standard
10
+ * set of every IFC version of the spec. Any other literal set name is a
11
+ * CUSTOM set and must be declared (`meta.custom.declarePset`, or the
12
+ * context's library) so a typo of a standard name cannot slip through as
13
+ * "custom".
14
+ */
15
+ import { RESERVED_PSET_PREFIXES } from '@ifc-lite/data';
16
+ import { inheritanceChain } from './context.js';
17
+ import { applicabilityEntities, literals, perVersion, single } from './grounding.js';
18
+ import { rankCandidates } from './rank.js';
19
+ export function isReservedPsetName(name) {
20
+ return RESERVED_PSET_PREFIXES.some((p) => name.startsWith(p));
21
+ }
22
+ function declaredCustom(scope, name) {
23
+ return scope.customPsets.find((d) => d.name === name) ?? scope.ctx.custom.find((d) => d.name === name);
24
+ }
25
+ /** Boost sets applicable to the applicability entities (or their supertypes). */
26
+ function applicableBoost(t, entities) {
27
+ const ancestors = new Set(entities.flatMap((e) => inheritanceChain(t, e).map((x) => x.name.toUpperCase())));
28
+ return (name) => {
29
+ const pset = t.psets.get(name);
30
+ if (!pset || !ancestors.size)
31
+ return undefined;
32
+ const hit = pset.applicableEntities.find((a) => ancestors.has(a.toUpperCase()));
33
+ return hit ? { boost: 0.25, reason: `applicable to ${entities.join(', ')}` } : undefined;
34
+ };
35
+ }
36
+ function checkPropertySet(scope, facet) {
37
+ const names = literals(facet.propertySet);
38
+ const entities = applicabilityEntities(scope.spec);
39
+ const custom = names.filter((n) => !isReservedPsetName(n) && !declaredCustom(scope, n));
40
+ const out = [];
41
+ if (custom.length) {
42
+ // Version-independent: suggest the closest standard names of the first version.
43
+ const t = scope.ctx.tables[scope.versions[0]];
44
+ for (const n of custom) {
45
+ out.push({
46
+ code: 'GATE-CUST-001',
47
+ message: `"${n}" is not a standard property set and is not declared as custom; declare it with meta.custom.declarePset or use a standard set`,
48
+ value: n,
49
+ candidates: rankCandidates(n, t.psetNames, { boost: applicableBoost(t, entities) }),
50
+ });
51
+ }
52
+ }
53
+ const reserved = names.filter(isReservedPsetName);
54
+ // TODO(IDS-009, P-01): `Qto_*` names for IFC2X3 and IFC4 stay unverified
55
+ // (accepted) until P-01 adds their quantity-set schema rows. This is an
56
+ // owner decision for P-02: no tables here. When the rows land,
57
+ // `hasQuantitySets` becomes true for those versions, this branch starts
58
+ // refusing invented `Qto_` names, and the hallucination set should gain
59
+ // `Qto_` fakes for IFC2X3 and IFC4.
60
+ out.push(...perVersion(scope.versions, scope.ctx, (t) => reserved
61
+ .filter((n) => !t.psets.has(n) && !(n.startsWith('Qto_') && !t.hasQuantitySets))
62
+ .map((n) => ({
63
+ code: 'GATE-PSET-001',
64
+ message: `"${n}" uses a reserved prefix but is not a standard ${n.startsWith('Qto_') ? 'quantity' : 'property'} set`,
65
+ value: n,
66
+ candidates: rankCandidates(n, t.psetNames, { boost: applicableBoost(t, entities) }),
67
+ }))));
68
+ return out;
69
+ }
70
+ function standardProperty(t, facet) {
71
+ const psetName = single(facet.propertySet);
72
+ const pset = psetName ? t.psets.get(psetName) : undefined;
73
+ if (!pset)
74
+ return undefined;
75
+ const name = single(facet.baseName);
76
+ return { pset, name, prop: name ? pset.properties.find((p) => p.name === name) : undefined };
77
+ }
78
+ function checkBaseName(scope, facet) {
79
+ const names = literals(facet.baseName);
80
+ const psetName = single(facet.propertySet);
81
+ if (!names.length || !psetName)
82
+ return [];
83
+ const decl = declaredCustom(scope, psetName);
84
+ if (decl && !isReservedPsetName(psetName)) {
85
+ if (!decl.properties)
86
+ return [];
87
+ const allowed = decl.properties.map((p) => p.name);
88
+ return names
89
+ .filter((n) => !allowed.includes(n))
90
+ .map((n) => ({
91
+ code: 'GATE-CUST-003',
92
+ message: `"${n}" is not declared in custom property set ${psetName}`,
93
+ value: n,
94
+ candidates: rankCandidates(n, allowed, { minScore: 0 }),
95
+ }));
96
+ }
97
+ return perVersion(scope.versions, scope.ctx, (t) => {
98
+ const pset = t.psets.get(psetName);
99
+ if (!pset)
100
+ return []; // reported on propertySet (or an unverifiable Qto_)
101
+ const own = pset.properties.map((p) => p.name);
102
+ return names
103
+ .filter((n) => !own.includes(n))
104
+ .map((n) => {
105
+ const elsewhere = (t.psetsByProperty.get(n) ?? []).slice(0, 3).map((other) => ({ value: `${other}.${n}`, score: 1, reason: `${n} is defined in ${other}` }));
106
+ return {
107
+ code: 'GATE-PROP-001',
108
+ message: `"${n}" is not a property of ${psetName}`,
109
+ value: n,
110
+ candidates: [...rankCandidates(n, own), ...elsewhere],
111
+ };
112
+ });
113
+ });
114
+ }
115
+ function checkDataType(scope, facet) {
116
+ const dt = single(facet.dataType);
117
+ if (!dt)
118
+ return [];
119
+ const upper = dt.toUpperCase();
120
+ return perVersion(scope.versions, scope.ctx, (t) => {
121
+ if (!t.dataTypes.has(upper)) {
122
+ return [{ code: 'GATE-DT-001', message: `"${dt}" is not an IFC data type`, value: dt, candidates: rankCandidates(dt, [...t.dataTypes.keys()]) }];
123
+ }
124
+ const prop = standardProperty(t, facet)?.prop;
125
+ const expected = prop?.dataType ?? (prop?.kind === 'enumeration' ? 'IfcLabel' : undefined);
126
+ if (!prop || !expected || expected.toUpperCase() === upper)
127
+ return [];
128
+ return [
129
+ {
130
+ code: 'GATE-DT-001',
131
+ message: `${single(facet.propertySet)}.${prop.name} is typed ${expected.toUpperCase()} in the standard, not ${upper}`,
132
+ value: dt,
133
+ candidates: [{ value: expected.toUpperCase(), score: 1, reason: 'standard data type' }],
134
+ },
135
+ ];
136
+ });
137
+ }
138
+ function checkEnumValue(scope, facet) {
139
+ const values = literals(facet.value);
140
+ if (!values.length)
141
+ return [];
142
+ return perVersion(scope.versions, scope.ctx, (t) => {
143
+ const prop = standardProperty(t, facet)?.prop;
144
+ const allowed = prop?.kind === 'enumeration' ? prop.enumeration : undefined;
145
+ if (!prop || !allowed?.length)
146
+ return [];
147
+ return values
148
+ .filter((v) => !allowed.includes(v))
149
+ .map((v) => {
150
+ const folded = allowed.find((a) => a.toLowerCase() === v.toLowerCase());
151
+ const ranked = rankCandidates(v, allowed, { minScore: 0 });
152
+ return {
153
+ code: 'GATE-ENUM-001',
154
+ message: `"${v}" is not a value of ${single(facet.propertySet)}.${prop.name}`,
155
+ value: v,
156
+ candidates: folded ? [{ value: folded, score: 1, reason: 'same value, different case' }, ...ranked.filter((c) => c.value !== folded)] : ranked,
157
+ };
158
+ });
159
+ });
160
+ }
161
+ /** Property-facet grounding for one field. */
162
+ export function groundPropertyFields(scope) {
163
+ const f = scope.facet;
164
+ if (f.type !== 'property')
165
+ return [];
166
+ switch (scope.field) {
167
+ case 'property.propertySet':
168
+ return checkPropertySet(scope, f);
169
+ case 'property.baseName':
170
+ return checkBaseName(scope, f);
171
+ case 'property.dataType':
172
+ return checkDataType(scope, f);
173
+ case 'property.value':
174
+ return checkEnumValue(scope, f);
175
+ default:
176
+ return [];
177
+ }
178
+ }
179
+ //# sourceMappingURL=grounding-pset.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"grounding-pset.js","sourceRoot":"","sources":["../../src/gate/grounding-pset.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,48 @@
1
+ /**
2
+ * Grounding of LITERAL names against the per-version schema tables (§5):
3
+ * entity (GATE-ENT-001), predefined type (GATE-PDT-001) and attribute
4
+ * (GATE-ATT-001, including inherited attributes). Property-set grounding is
5
+ * in `./grounding-pset.ts`.
6
+ *
7
+ * Only literals are grounded: a `simpleValue`, or each value of an
8
+ * `enumeration`. Patterns and bounds on names are legal IDS and are left to
9
+ * lint (ADR-003).
10
+ */
11
+ import { type IDSConstraint, type IDSFacet, type IDSSpecification, type IFCVersion } from '@ifc-lite/ids';
12
+ import type { FacetFieldName } from '../document/fields.js';
13
+ import type { CustomPsetDecl, UserDefinedTypeDecl } from '../document/types.js';
14
+ import { type GateContext, type VersionTables } from './context.js';
15
+ import type { GateCandidate, GateCode } from './types.js';
16
+ export interface GroundingProblem {
17
+ code: GateCode;
18
+ message: string;
19
+ candidates: GateCandidate[];
20
+ value?: string;
21
+ versions?: IFCVersion[];
22
+ }
23
+ /** What a field check may look at besides the facet itself. */
24
+ export interface FieldScope {
25
+ ctx: GateContext;
26
+ spec: IDSSpecification;
27
+ versions: IFCVersion[];
28
+ facet: IDSFacet;
29
+ field: FacetFieldName;
30
+ customPsets: readonly CustomPsetDecl[];
31
+ userDefinedTypes: readonly UserDefinedTypeDecl[];
32
+ }
33
+ /** The literal values of a constraint (simpleValue, or each enumeration value). */
34
+ export declare function literals(c: IDSConstraint | undefined): string[];
35
+ /** The single literal of a constraint, if it is a non-empty simpleValue. */
36
+ export declare function single(c: IDSConstraint | undefined): string | undefined;
37
+ /** Distinct, known IFC versions of a spec. */
38
+ export declare function specVersions(spec: IDSSpecification): IFCVersion[];
39
+ /** Literal entity names in the spec's applicability. */
40
+ export declare function applicabilityEntities(spec: IDSSpecification): string[];
41
+ /**
42
+ * Run `probe` per version and merge failures that are identical across
43
+ * versions (same code and value) into one problem listing the versions.
44
+ */
45
+ export declare function perVersion(versions: IFCVersion[], ctx: GateContext, probe: (tables: VersionTables, version: IFCVersion) => GroundingProblem[]): GroundingProblem[];
46
+ /** Entity, predefined-type and attribute grounding for one field. */
47
+ export declare function groundEntityFields(scope: FieldScope): GroundingProblem[];
48
+ //# sourceMappingURL=grounding.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"grounding.d.ts","sourceRoot":"","sources":["../../src/gate/grounding.ts"],"names":[],"mappings":"AAIA;;;;;;;;;GASG;AAEH,OAAO,EAA6B,KAAK,aAAa,EAAE,KAAK,QAAQ,EAAE,KAAK,gBAAgB,EAAE,KAAK,UAAU,EAAE,MAAM,eAAe,CAAC;AACrI,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,KAAK,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAChF,OAAO,EAA+B,KAAK,WAAW,EAAE,KAAK,aAAa,EAAE,MAAM,cAAc,CAAC;AAEjG,OAAO,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAE1D,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,QAAQ,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,aAAa,EAAE,CAAC;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,UAAU,EAAE,CAAC;CACzB;AAED,+DAA+D;AAC/D,MAAM,WAAW,UAAU;IACzB,GAAG,EAAE,WAAW,CAAC;IACjB,IAAI,EAAE,gBAAgB,CAAC;IACvB,QAAQ,EAAE,UAAU,EAAE,CAAC;IACvB,KAAK,EAAE,QAAQ,CAAC;IAChB,KAAK,EAAE,cAAc,CAAC;IACtB,WAAW,EAAE,SAAS,cAAc,EAAE,CAAC;IACvC,gBAAgB,EAAE,SAAS,mBAAmB,EAAE,CAAC;CAClD;AAED,mFAAmF;AACnF,wBAAgB,QAAQ,CAAC,CAAC,EAAE,aAAa,GAAG,SAAS,GAAG,MAAM,EAAE,CAK/D;AAED,4EAA4E;AAC5E,wBAAgB,MAAM,CAAC,CAAC,EAAE,aAAa,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAEvE;AAED,8CAA8C;AAC9C,wBAAgB,YAAY,CAAC,IAAI,EAAE,gBAAgB,GAAG,UAAU,EAAE,CAEjE;AAED,wDAAwD;AACxD,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,gBAAgB,GAAG,MAAM,EAAE,CAEtE;AAED;;;GAGG;AACH,wBAAgB,UAAU,CACxB,QAAQ,EAAE,UAAU,EAAE,EACtB,GAAG,EAAE,WAAW,EAChB,KAAK,EAAE,CAAC,MAAM,EAAE,aAAa,EAAE,OAAO,EAAE,UAAU,KAAK,gBAAgB,EAAE,GACxE,gBAAgB,EAAE,CAWpB;AA+ED,qEAAqE;AACrE,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,UAAU,GAAG,gBAAgB,EAAE,CAgBxE"}
@@ -0,0 +1,146 @@
1
+ /* This Source Code Form is subject to the terms of the Mozilla Public
2
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
3
+ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */
4
+ /**
5
+ * Grounding of LITERAL names against the per-version schema tables (§5):
6
+ * entity (GATE-ENT-001), predefined type (GATE-PDT-001) and attribute
7
+ * (GATE-ATT-001, including inherited attributes). Property-set grounding is
8
+ * in `./grounding-pset.ts`.
9
+ *
10
+ * Only literals are grounded: a `simpleValue`, or each value of an
11
+ * `enumeration`. Patterns and bounds on names are legal IDS and are left to
12
+ * lint (ADR-003).
13
+ */
14
+ import { ifc2x3TypeMappingForAlias } from '@ifc-lite/ids';
15
+ import { inheritanceChain, tablesFor } from './context.js';
16
+ import { rankCandidates } from './rank.js';
17
+ /** The literal values of a constraint (simpleValue, or each enumeration value). */
18
+ export function literals(c) {
19
+ if (!c)
20
+ return [];
21
+ if (c.type === 'simpleValue')
22
+ return c.value === '' ? [] : [c.value];
23
+ if (c.type === 'enumeration')
24
+ return c.values.filter((v) => v !== '');
25
+ return [];
26
+ }
27
+ /** The single literal of a constraint, if it is a non-empty simpleValue. */
28
+ export function single(c) {
29
+ return c?.type === 'simpleValue' && c.value !== '' ? c.value : undefined;
30
+ }
31
+ /** Distinct, known IFC versions of a spec. */
32
+ export function specVersions(spec) {
33
+ return [...new Set(spec.ifcVersions)];
34
+ }
35
+ /** Literal entity names in the spec's applicability. */
36
+ export function applicabilityEntities(spec) {
37
+ return spec.applicability.facets.flatMap((f) => (f.type === 'entity' ? literals(f.name) : []));
38
+ }
39
+ /**
40
+ * Run `probe` per version and merge failures that are identical across
41
+ * versions (same code and value) into one problem listing the versions.
42
+ */
43
+ export function perVersion(versions, ctx, probe) {
44
+ const merged = new Map();
45
+ for (const version of versions) {
46
+ for (const p of probe(tablesFor(ctx, version), version)) {
47
+ const key = `${p.code}|${p.value ?? ''}`;
48
+ const seen = merged.get(key);
49
+ if (seen)
50
+ seen.versions = [...(seen.versions ?? []), version];
51
+ else
52
+ merged.set(key, { ...p, versions: [version] });
53
+ }
54
+ }
55
+ return [...merged.values()].map((p) => ({ ...p, message: `${p.message} (${(p.versions ?? []).join(', ')})` }));
56
+ }
57
+ /**
58
+ * IFC2X3 has no IfcAirTerminal & co.: the IDS occurrence/type mapping table
59
+ * lets a facet name the IFC4 class, matched through its IFC2X3 type object
60
+ * (IfcFlowTerminal + IfcAirTerminalType). Returns that type object's name.
61
+ */
62
+ function ifc2x3MappedType(version, name) {
63
+ return version === 'IFC2X3' ? ifc2x3TypeMappingForAlias(name.toUpperCase())?.typeEntity : undefined;
64
+ }
65
+ function checkEntityName(scope, c) {
66
+ const names = literals(c);
67
+ if (!names.length)
68
+ return [];
69
+ return perVersion(scope.versions, scope.ctx, (t, version) => names
70
+ .filter((n) => !t.entities.has(n.toUpperCase()) && !ifc2x3MappedType(version, n))
71
+ .map((n) => ({
72
+ code: 'GATE-ENT-001',
73
+ message: `"${n}" is not an IFC entity`,
74
+ value: n,
75
+ candidates: rankCandidates(n, t.entityNames),
76
+ })));
77
+ }
78
+ function checkPredefinedType(scope, entity, c) {
79
+ const entityName = single(entity);
80
+ const values = literals(c);
81
+ if (!entityName || !values.length)
82
+ return [];
83
+ return perVersion(scope.versions, scope.ctx, (t, version) => {
84
+ // A mapped IFC2X3 alias takes the predefined types of its type object.
85
+ const info = t.entities.get(ifc2x3MappedType(version, entityName) ?? entityName.toUpperCase());
86
+ // Unknown entity is reported on the name; an entity without a
87
+ // PredefinedType enumeration in the tables cannot be checked.
88
+ if (!info || info.predefinedTypes.length === 0)
89
+ return [];
90
+ const allowed = new Set(info.predefinedTypes.map((p) => p.toUpperCase()));
91
+ const userDefinable = allowed.has('USERDEFINED');
92
+ const declared = (v) => scope.userDefinedTypes.some((d) => (d.entity.toUpperCase() === info.name.toUpperCase() || d.entity.toUpperCase() === entityName.toUpperCase()) &&
93
+ d.value.toUpperCase() === v.toUpperCase());
94
+ return values
95
+ .filter((v) => !allowed.has(v.toUpperCase()) && !(userDefinable && declared(v)))
96
+ .map((v) => ({
97
+ code: 'GATE-PDT-001',
98
+ message: userDefinable
99
+ ? `"${v}" is not a predefined type of ${info.name}; if it is a user-defined type (ObjectType), declare it with meta.custom.declareUserDefinedType`
100
+ : `"${v}" is not a predefined type of ${info.name}`,
101
+ value: v,
102
+ candidates: rankCandidates(v, info.predefinedTypes, { minScore: 0 }),
103
+ }));
104
+ });
105
+ }
106
+ function checkAttributeName(scope, c) {
107
+ const names = literals(c);
108
+ if (!names.length)
109
+ return [];
110
+ const entities = applicabilityEntities(scope.spec);
111
+ return perVersion(scope.versions, scope.ctx, (t) => {
112
+ // Against the applicability entity (inherited attributes included) when
113
+ // it is a single known literal, else against every attribute of the version.
114
+ const chain = entities.length === 1 ? inheritanceChain(t, entities[0]) : [];
115
+ const pool = chain.length ? new Set(chain.flatMap((e) => e.attributes)) : t.attributeNames;
116
+ const folded = new Set([...pool].map((a) => a.toLowerCase()));
117
+ const where = chain.length ? `on ${chain[0].name}` : 'on any IFC entity';
118
+ return names
119
+ .filter((n) => !folded.has(n.toLowerCase()))
120
+ .map((n) => ({
121
+ code: 'GATE-ATT-001',
122
+ message: `attribute "${n}" does not exist ${where}`,
123
+ value: n,
124
+ candidates: rankCandidates(n, pool),
125
+ }));
126
+ });
127
+ }
128
+ /** Entity, predefined-type and attribute grounding for one field. */
129
+ export function groundEntityFields(scope) {
130
+ const f = scope.facet;
131
+ switch (scope.field) {
132
+ case 'entity.name':
133
+ return f.type === 'entity' ? checkEntityName(scope, f.name) : [];
134
+ case 'entity.predefinedType':
135
+ return f.type === 'entity' ? checkPredefinedType(scope, f.name, f.predefinedType) : [];
136
+ case 'partOf.entity.name':
137
+ return f.type === 'partOf' ? checkEntityName(scope, f.entity?.name) : [];
138
+ case 'partOf.entity.predefinedType':
139
+ return f.type === 'partOf' ? checkPredefinedType(scope, f.entity?.name, f.entity?.predefinedType) : [];
140
+ case 'attribute.name':
141
+ return f.type === 'attribute' ? checkAttributeName(scope, f.name) : [];
142
+ default:
143
+ return [];
144
+ }
145
+ }
146
+ //# sourceMappingURL=grounding.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"grounding.js","sourceRoot":"","sources":["../../src/gate/grounding.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * "Did you mean" ranking: Damerau-Levenshtein (optimal string alignment)
3
+ * similarity blended with token overlap, plus an optional caller boost
4
+ * (e.g. property sets applicable to the spec's applicability entities).
5
+ *
6
+ * score = 0.6 · (1 − osa / maxLen) + 0.4 · jaccard(tokens) + boost
7
+ *
8
+ * Comparison is case-insensitive. Tokens split on case changes, digits and
9
+ * separators, so `FireRatng` ↔ `FireRating` and `WallCommon` ↔
10
+ * `Pset_WallCommon` both rank high.
11
+ */
12
+ import type { GateCandidate } from './types.js';
13
+ /** Optimal-string-alignment distance (Damerau-Levenshtein with adjacent transpositions). */
14
+ export declare function osaDistance(a: string, b: string): number;
15
+ export declare function tokens(s: string): Set<string>;
16
+ export declare function similarity(query: string, candidate: string): number;
17
+ export interface RankOptions {
18
+ limit?: number;
19
+ /** Candidates below this blended score (before boost) are dropped. */
20
+ minScore?: number;
21
+ boost?: (candidate: string) => {
22
+ boost: number;
23
+ reason?: string;
24
+ } | undefined;
25
+ }
26
+ /** The best-matching `pool` entries for `query`, best first. */
27
+ export declare function rankCandidates(query: string, pool: Iterable<string>, options?: RankOptions): GateCandidate[];
28
+ //# sourceMappingURL=rank.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rank.d.ts","sourceRoot":"","sources":["../../src/gate/rank.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEhD,4FAA4F;AAC5F,wBAAgB,WAAW,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAkBxD;AAED,wBAAgB,MAAM,CAAC,CAAC,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,CAQ7C;AASD,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAMnE;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,sEAAsE;IACtE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,SAAS,CAAC;CAC/E;AAED,gEAAgE;AAChE,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,GAAE,WAAgB,GAAG,aAAa,EAAE,CAYhH"}