@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,31 @@
1
+ /**
2
+ * Readers from the raw bSDD API v1 JSON (the public "Dictionaries" API
3
+ * contracts: DictionaryContractV1, ClassContractV1, ClassPropertyContractV1,
4
+ * ClassSearchResponseContractV1, PropertyContract) into the normalised
5
+ * shapes of `./types.ts`. Input is untrusted: every field is checked, an
6
+ * unexpected shape degrades to "absent", never to a throw or a cast.
7
+ */
8
+ import type { BsddAllowedValue, BsddClass, BsddClassProperty, BsddClassSummary, BsddDictionary, BsddSearchPage, BsddStatus } from './types.js';
9
+ export type Json = Record<string, unknown>;
10
+ export declare function isRecord(value: unknown): value is Json;
11
+ export declare function str(o: Json, key: string): string | undefined;
12
+ export declare function readStatus(raw: unknown): BsddStatus;
13
+ export declare function readDictionary(o: Json): BsddDictionary | undefined;
14
+ export declare function readDictionaries(o: unknown): BsddDictionary[];
15
+ export declare function readAllowedValues(o: Json): BsddAllowedValue[] | undefined;
16
+ export declare function readClassProperty(o: Json): BsddClassProperty | undefined;
17
+ /** The dictionary URI of a bSDD class/property URI (`…/uri/<org>/<dict>/<version>`). */
18
+ export declare function dictionaryUriOf(uri: string): string | undefined;
19
+ export declare function readClass(o: unknown): BsddClass | undefined;
20
+ export declare function readClassSummary(o: Json, dictionary?: {
21
+ uri: string;
22
+ name?: string;
23
+ }): BsddClassSummary | undefined;
24
+ /** One page of `Dictionary/v1/Classes`: its rows and the server's total. */
25
+ export declare function readDictionaryClasses(o: unknown): {
26
+ classes: BsddClassSummary[];
27
+ total: number;
28
+ name?: string;
29
+ };
30
+ export declare function readSearchPage(o: unknown, offset: number): BsddSearchPage;
31
+ //# sourceMappingURL=contract.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contract.d.ts","sourceRoot":"","sources":["../../src/bsdd/contract.ts"],"names":[],"mappings":"AAIA;;;;;;GAMG;AAEH,OAAO,KAAK,EACV,gBAAgB,EAChB,SAAS,EACT,iBAAiB,EAEjB,gBAAgB,EAChB,cAAc,EACd,cAAc,EACd,UAAU,EACX,MAAM,YAAY,CAAC;AAEpB,MAAM,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAE3C,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,IAAI,CAEtD;AAED,wBAAgB,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAG5D;AA+BD,wBAAgB,UAAU,CAAC,GAAG,EAAE,OAAO,GAAG,UAAU,CAInD;AAED,wBAAgB,cAAc,CAAC,CAAC,EAAE,IAAI,GAAG,cAAc,GAAG,SAAS,CAmBlE;AAED,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,OAAO,GAAG,cAAc,EAAE,CAK7D;AAQD,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,IAAI,GAAG,gBAAgB,EAAE,GAAG,SAAS,CAKzE;AAED,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,IAAI,GAAG,iBAAiB,GAAG,SAAS,CAwBxE;AAQD,wFAAwF;AACxF,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAG/D;AAED,wBAAgB,SAAS,CAAC,CAAC,EAAE,OAAO,GAAG,SAAS,GAAG,SAAS,CAwB3D;AAED,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,IAAI,EAAE,UAAU,CAAC,EAAE;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,gBAAgB,GAAG,SAAS,CAgBnH;AAED,4EAA4E;AAC5E,wBAAgB,qBAAqB,CAAC,CAAC,EAAE,OAAO,GAAG;IAAE,OAAO,EAAE,gBAAgB,EAAE,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,CAO/G;AAED,wBAAgB,cAAc,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,GAAG,cAAc,CAMzE"}
@@ -0,0 +1,185 @@
1
+ /* This Source Code Form is subject to the terms of the Mozilla Public
2
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
3
+ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */
4
+ export function isRecord(value) {
5
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
6
+ }
7
+ export function str(o, key) {
8
+ const v = o[key];
9
+ return typeof v === 'string' && v.trim() !== '' ? v : undefined;
10
+ }
11
+ function num(o, key) {
12
+ const v = o[key];
13
+ if (typeof v === 'number' && Number.isFinite(v))
14
+ return v;
15
+ if (typeof v === 'string' && v.trim() !== '' && Number.isFinite(Number(v)))
16
+ return Number(v);
17
+ return undefined;
18
+ }
19
+ function bool(o, key) {
20
+ const v = o[key];
21
+ return typeof v === 'boolean' ? v : undefined;
22
+ }
23
+ function records(o, key) {
24
+ const v = o[key];
25
+ return Array.isArray(v) ? v.filter(isRecord) : [];
26
+ }
27
+ function strings(o, key) {
28
+ const v = o[key];
29
+ return Array.isArray(v) ? v.filter((x) => typeof x === 'string' && x.trim() !== '') : [];
30
+ }
31
+ /** Copy of `o` without the keys whose value is undefined. */
32
+ function compact(o) {
33
+ const out = { ...o };
34
+ for (const k of Object.keys(out))
35
+ if (out[k] === undefined)
36
+ delete out[k];
37
+ return out;
38
+ }
39
+ export function readStatus(raw) {
40
+ if (typeof raw !== 'string')
41
+ return 'unknown';
42
+ const s = raw.trim().toLowerCase();
43
+ return s === 'active' || s === 'preview' || s === 'inactive' ? s : 'unknown';
44
+ }
45
+ export function readDictionary(o) {
46
+ const uri = str(o, 'uri');
47
+ const name = str(o, 'name');
48
+ if (!uri || !name)
49
+ return undefined;
50
+ return compact({
51
+ uri,
52
+ name,
53
+ version: str(o, 'version') ?? '',
54
+ code: str(o, 'code'),
55
+ organizationCode: str(o, 'organizationCodeOwner'),
56
+ organizationName: str(o, 'organizationNameOwner'),
57
+ languageCode: str(o, 'defaultLanguageCode'),
58
+ status: readStatus(o.status),
59
+ license: str(o, 'license'),
60
+ licenseUrl: str(o, 'licenseUrl'),
61
+ isLatestVersion: bool(o, 'isLatestVersion'),
62
+ isVerified: bool(o, 'isVerified'),
63
+ releaseDate: str(o, 'releaseDate'),
64
+ });
65
+ }
66
+ export function readDictionaries(o) {
67
+ if (!isRecord(o))
68
+ return [];
69
+ return records(o, 'dictionaries')
70
+ .map(readDictionary)
71
+ .filter((d) => !!d);
72
+ }
73
+ function readAllowedValue(o) {
74
+ const code = str(o, 'code') ?? str(o, 'value');
75
+ if (!code)
76
+ return undefined;
77
+ return compact({ code, value: str(o, 'value') ?? code, uri: str(o, 'uri'), description: str(o, 'description') });
78
+ }
79
+ export function readAllowedValues(o) {
80
+ const list = records(o, 'allowedValues')
81
+ .map(readAllowedValue)
82
+ .filter((v) => !!v);
83
+ return list.length ? list : undefined;
84
+ }
85
+ export function readClassProperty(o) {
86
+ const code = str(o, 'propertyCode') ?? str(o, 'code') ?? str(o, 'name');
87
+ if (!code)
88
+ return undefined;
89
+ const units = strings(o, 'units');
90
+ return compact({
91
+ code,
92
+ name: str(o, 'name') ?? code,
93
+ uri: str(o, 'propertyUri') ?? str(o, 'uri'),
94
+ propertySet: str(o, 'propertySet'),
95
+ dataType: str(o, 'dataType'),
96
+ propertyValueKind: str(o, 'propertyValueKind'),
97
+ dimension: str(o, 'dimension'),
98
+ physicalQuantity: str(o, 'physicalQuantity'),
99
+ units: units.length ? units : undefined,
100
+ allowedValues: readAllowedValues(o),
101
+ minInclusive: num(o, 'minInclusive'),
102
+ maxInclusive: num(o, 'maxInclusive'),
103
+ minExclusive: num(o, 'minExclusive'),
104
+ maxExclusive: num(o, 'maxExclusive'),
105
+ pattern: str(o, 'pattern'),
106
+ isRequired: bool(o, 'isRequired'),
107
+ description: str(o, 'definition') ?? str(o, 'description'),
108
+ status: o.propertyStatus === undefined ? undefined : readStatus(o.propertyStatus),
109
+ });
110
+ }
111
+ function readRef(o) {
112
+ if (!isRecord(o))
113
+ return undefined;
114
+ const uri = str(o, 'uri');
115
+ return uri ? compact({ uri, code: str(o, 'code'), name: str(o, 'name') }) : undefined;
116
+ }
117
+ /** The dictionary URI of a bSDD class/property URI (`…/uri/<org>/<dict>/<version>`). */
118
+ export function dictionaryUriOf(uri) {
119
+ const m = /^(https?:\/\/[^/]+\/uri\/[^/]+\/[^/]+\/[^/]+)\/(class|prop)\//i.exec(uri);
120
+ return m?.[1];
121
+ }
122
+ export function readClass(o) {
123
+ if (!isRecord(o))
124
+ return undefined;
125
+ const uri = str(o, 'uri');
126
+ const code = str(o, 'code') ?? str(o, 'name');
127
+ if (!uri || !code)
128
+ return undefined;
129
+ return compact({
130
+ uri,
131
+ code,
132
+ name: str(o, 'name') ?? code,
133
+ definition: str(o, 'definition') ?? str(o, 'description'),
134
+ status: readStatus(o.status),
135
+ classType: str(o, 'classType'),
136
+ dictionaryUri: str(o, 'dictionaryUri') ?? dictionaryUriOf(uri) ?? '',
137
+ relatedIfcEntityNames: strings(o, 'relatedIfcEntityNames'),
138
+ parentClass: readRef(o.parentClassReference),
139
+ childClasses: records(o, 'childClassReferences')
140
+ .map(readRef)
141
+ .filter((r) => !!r),
142
+ properties: records(o, 'classProperties')
143
+ .map(readClassProperty)
144
+ .filter((p) => !!p),
145
+ replacingObjectCodes: strings(o, 'replacingObjectCodes'),
146
+ synonyms: strings(o, 'synonyms'),
147
+ });
148
+ }
149
+ export function readClassSummary(o, dictionary) {
150
+ const uri = str(o, 'uri');
151
+ const code = str(o, 'code') ?? str(o, 'name');
152
+ if (!uri || !code)
153
+ return undefined;
154
+ return compact({
155
+ uri,
156
+ code,
157
+ name: str(o, 'name') ?? code,
158
+ definition: str(o, 'definition'),
159
+ dictionaryUri: str(o, 'dictionaryUri') ?? dictionary?.uri ?? dictionaryUriOf(uri) ?? '',
160
+ dictionaryName: str(o, 'dictionaryName') ?? dictionary?.name,
161
+ relatedIfcEntityNames: strings(o, 'relatedIfcEntityNames'),
162
+ parentClassCode: str(o, 'parentClassCode'),
163
+ classType: str(o, 'classType'),
164
+ status: o.status === undefined ? undefined : readStatus(o.status),
165
+ });
166
+ }
167
+ /** One page of `Dictionary/v1/Classes`: its rows and the server's total. */
168
+ export function readDictionaryClasses(o) {
169
+ if (!isRecord(o))
170
+ return { classes: [], total: 0 };
171
+ const dict = { uri: str(o, 'uri') ?? '', name: str(o, 'name') };
172
+ const classes = records(o, 'classes')
173
+ .map((c) => readClassSummary(c, dict))
174
+ .filter((c) => !!c);
175
+ return compact({ classes, total: num(o, 'classesTotalCount') ?? classes.length, name: dict.name });
176
+ }
177
+ export function readSearchPage(o, offset) {
178
+ if (!isRecord(o))
179
+ return { classes: [], total: 0, offset };
180
+ const classes = records(o, 'classes')
181
+ .map((c) => readClassSummary(c))
182
+ .filter((c) => !!c);
183
+ return { classes, total: num(o, 'totalCount') ?? classes.length, offset };
184
+ }
185
+ //# sourceMappingURL=contract.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contract.js","sourceRoot":"","sources":["../../src/bsdd/contract.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,42 @@
1
+ /**
2
+ * A bSDD dictionary as a class tree, and the class hierarchy resolved for
3
+ * property inheritance (05-bsdd.md §2.3, IDS-072). Parent links come from
4
+ * the server, so every walk here is iterative with a visited set and a
5
+ * work budget: a cyclic or absurdly deep hierarchy ends, it does not hang.
6
+ */
7
+ import type { BsddClass, BsddClassProperty, BsddClassSummary, BsddSource } from './types.js';
8
+ export interface BsddClassTreeNode {
9
+ uri: string;
10
+ code: string;
11
+ name: string;
12
+ depth: number;
13
+ children: BsddClassTreeNode[];
14
+ }
15
+ /**
16
+ * The parent/child tree of a dictionary's flat class list. A class whose
17
+ * parent is missing (or that sits on a parent cycle) becomes a root.
18
+ */
19
+ export declare function buildClassTree(rows: readonly BsddClassSummary[]): BsddClassTreeNode[];
20
+ /** Default bound on classes fetched for one generator run. */
21
+ export declare const MAX_CLASSES = 2000;
22
+ /**
23
+ * Fetch the selected classes and every ancestor (for inherited
24
+ * properties). Classes bSDD does not know are reported, not thrown.
25
+ */
26
+ export declare function loadClassesWithAncestors(source: BsddSource, uris: readonly string[], options?: {
27
+ maxClasses?: number;
28
+ languageCode?: string;
29
+ }): Promise<{
30
+ classes: Map<string, BsddClass>;
31
+ missing: string[];
32
+ truncated: boolean;
33
+ }>;
34
+ /** The class's ancestors, nearest first (cycle-safe). */
35
+ export declare function ancestors(cls: BsddClass, classes: ReadonlyMap<string, BsddClass>): BsddClass[];
36
+ /**
37
+ * Own plus inherited properties. A property the class redefines (same set
38
+ * and code) overrides the ancestor's definition; inherited properties come
39
+ * first, in root-to-leaf order, so a family of classes lists them alike.
40
+ */
41
+ export declare function effectiveProperties(cls: BsddClass, classes: ReadonlyMap<string, BsddClass>): BsddClassProperty[];
42
+ //# sourceMappingURL=dictionary.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dictionary.d.ts","sourceRoot":"","sources":["../../src/bsdd/dictionary.ts"],"names":[],"mappings":"AAIA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE7F,MAAM,WAAW,iBAAiB;IAChC,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,iBAAiB,EAAE,CAAC;CAC/B;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,SAAS,gBAAgB,EAAE,GAAG,iBAAiB,EAAE,CA6BrF;AAcD,8DAA8D;AAC9D,eAAO,MAAM,WAAW,OAAO,CAAC;AAEhC;;;GAGG;AACH,wBAAsB,wBAAwB,CAC5C,MAAM,EAAE,UAAU,EAClB,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,OAAO,GAAE;IAAE,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,CAAA;CAAO,GAC3D,OAAO,CAAC;IAAE,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAC;IAAC,SAAS,EAAE,OAAO,CAAA;CAAE,CAAC,CA0BrF;AAED,yDAAyD;AACzD,wBAAgB,SAAS,CAAC,GAAG,EAAE,SAAS,EAAE,OAAO,EAAE,WAAW,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,SAAS,EAAE,CAU9F;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,SAAS,EAAE,OAAO,EAAE,WAAW,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,iBAAiB,EAAE,CAQhH"}
@@ -0,0 +1,115 @@
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 parent/child tree of a dictionary's flat class list. A class whose
6
+ * parent is missing (or that sits on a parent cycle) becomes a root.
7
+ */
8
+ export function buildClassTree(rows) {
9
+ const byCode = new Map();
10
+ for (const r of rows)
11
+ if (!byCode.has(r.code))
12
+ byCode.set(r.code, r);
13
+ const childrenOf = new Map();
14
+ const roots = [];
15
+ for (const r of byCode.values()) {
16
+ const parent = r.parentClassCode;
17
+ if (parent && parent !== r.code && byCode.has(parent) && !onCycle(r.code, byCode)) {
18
+ const list = childrenOf.get(parent) ?? [];
19
+ list.push(r);
20
+ childrenOf.set(parent, list);
21
+ }
22
+ else {
23
+ roots.push(r);
24
+ }
25
+ }
26
+ const out = [];
27
+ const stack = roots.map((row) => ({ row, depth: 0, into: out }));
28
+ stack.reverse();
29
+ const placed = new Set();
30
+ while (stack.length) {
31
+ const { row, depth, into } = stack.pop();
32
+ if (placed.has(row.code))
33
+ continue;
34
+ placed.add(row.code);
35
+ const node = { uri: row.uri, code: row.code, name: row.name, depth, children: [] };
36
+ into.push(node);
37
+ const kids = childrenOf.get(row.code) ?? [];
38
+ for (let i = kids.length - 1; i >= 0; i--)
39
+ stack.push({ row: kids[i], depth: depth + 1, into: node.children });
40
+ }
41
+ return out;
42
+ }
43
+ /** Whether following parent codes from `code` comes back to it. */
44
+ function onCycle(code, byCode) {
45
+ const seen = new Set([code]);
46
+ let cursor = byCode.get(code)?.parentClassCode;
47
+ while (cursor && byCode.has(cursor)) {
48
+ if (seen.has(cursor))
49
+ return cursor === code;
50
+ seen.add(cursor);
51
+ cursor = byCode.get(cursor)?.parentClassCode;
52
+ }
53
+ return false;
54
+ }
55
+ /** Default bound on classes fetched for one generator run. */
56
+ export const MAX_CLASSES = 2000;
57
+ /**
58
+ * Fetch the selected classes and every ancestor (for inherited
59
+ * properties). Classes bSDD does not know are reported, not thrown.
60
+ */
61
+ export async function loadClassesWithAncestors(source, uris, options = {}) {
62
+ const max = options.maxClasses ?? MAX_CLASSES;
63
+ const classes = new Map();
64
+ const missing = [];
65
+ const queue = [...new Set(uris)];
66
+ const queued = new Set(queue);
67
+ let truncated = false;
68
+ while (queue.length) {
69
+ if (classes.size + missing.length >= max) {
70
+ truncated = true;
71
+ break;
72
+ }
73
+ const uri = queue.shift();
74
+ const cls = await source.getClass(uri, options.languageCode ? { languageCode: options.languageCode } : {});
75
+ if (!cls) {
76
+ missing.push(uri);
77
+ continue;
78
+ }
79
+ classes.set(uri, cls);
80
+ const parent = cls.parentClass?.uri;
81
+ if (parent && !queued.has(parent)) {
82
+ queued.add(parent);
83
+ queue.push(parent);
84
+ }
85
+ }
86
+ return { classes, missing, truncated };
87
+ }
88
+ /** The class's ancestors, nearest first (cycle-safe). */
89
+ export function ancestors(cls, classes) {
90
+ const out = [];
91
+ const seen = new Set([cls.uri]);
92
+ let cursor = cls.parentClass ? classes.get(cls.parentClass.uri) : undefined;
93
+ while (cursor && !seen.has(cursor.uri)) {
94
+ out.push(cursor);
95
+ seen.add(cursor.uri);
96
+ cursor = cursor.parentClass ? classes.get(cursor.parentClass.uri) : undefined;
97
+ }
98
+ return out;
99
+ }
100
+ /**
101
+ * Own plus inherited properties. A property the class redefines (same set
102
+ * and code) overrides the ancestor's definition; inherited properties come
103
+ * first, in root-to-leaf order, so a family of classes lists them alike.
104
+ */
105
+ export function effectiveProperties(cls, classes) {
106
+ const chain = [...ancestors(cls, classes)].reverse();
107
+ chain.push(cls);
108
+ const byKey = new Map();
109
+ for (const c of chain) {
110
+ for (const p of c.properties)
111
+ byKey.set(`${p.propertySet ?? ''}\u0000${p.code}`, p);
112
+ }
113
+ return [...byKey.values()];
114
+ }
115
+ //# sourceMappingURL=dictionary.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dictionary.js","sourceRoot":"","sources":["../../src/bsdd/dictionary.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAmB/D;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,IAAiC;IAC9D,MAAM,MAAM,GAAG,IAAI,GAAG,EAA4B,CAAC;IACnD,KAAK,MAAM,CAAC,IAAI,IAAI;QAAE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;YAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IACrE,MAAM,UAAU,GAAG,IAAI,GAAG,EAA8B,CAAC;IACzD,MAAM,KAAK,GAAuB,EAAE,CAAC;IACrC,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC;QAChC,MAAM,MAAM,GAAG,CAAC,CAAC,eAAe,CAAC;QACjC,IAAI,MAAM,IAAI,MAAM,KAAK,CAAC,CAAC,IAAI,IAAI,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,CAAC;YAClF,MAAM,IAAI,GAAG,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;YAC1C,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACb,UAAU,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QAC/B,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAChB,CAAC;IACH,CAAC;IACD,MAAM,GAAG,GAAwB,EAAE,CAAC;IACpC,MAAM,KAAK,GAA0E,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;IACxI,KAAK,CAAC,OAAO,EAAE,CAAC;IAChB,MAAM,MAAM,GAAG,IAAI,GAAG,EAAU,CAAC;IACjC,OAAO,KAAK,CAAC,MAAM,EAAE,CAAC;QACpB,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,KAAK,CAAC,GAAG,EAA4B,CAAC;QACnE,IAAI,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC;YAAE,SAAS;QACnC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACrB,MAAM,IAAI,GAAsB,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC;QACtG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAChB,MAAM,IAAI,GAAG,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;QAC5C,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE;YAAE,KAAK,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,GAAG,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;IACjH,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,mEAAmE;AACnE,SAAS,OAAO,CAAC,IAAY,EAAE,MAA6C;IAC1E,MAAM,IAAI,GAAG,IAAI,GAAG,CAAS,CAAC,IAAI,CAAC,CAAC,CAAC;IACrC,IAAI,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,eAAe,CAAC;IAC/C,OAAO,MAAM,IAAI,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;QACpC,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC;YAAE,OAAO,MAAM,KAAK,IAAI,CAAC;QAC7C,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACjB,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,eAAe,CAAC;IAC/C,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,8DAA8D;AAC9D,MAAM,CAAC,MAAM,WAAW,GAAG,IAAI,CAAC;AAEhC;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAC5C,MAAkB,EAClB,IAAuB,EACvB,UAA0D,EAAE;IAE5D,MAAM,GAAG,GAAG,OAAO,CAAC,UAAU,IAAI,WAAW,CAAC;IAC9C,MAAM,OAAO,GAAG,IAAI,GAAG,EAAqB,CAAC;IAC7C,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,MAAM,KAAK,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;IACjC,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC;IAC9B,IAAI,SAAS,GAAG,KAAK,CAAC;IACtB,OAAO,KAAK,CAAC,MAAM,EAAE,CAAC;QACpB,IAAI,OAAO,CAAC,IAAI,GAAG,OAAO,CAAC,MAAM,IAAI,GAAG,EAAE,CAAC;YACzC,SAAS,GAAG,IAAI,CAAC;YACjB,MAAM;QACR,CAAC;QACD,MAAM,GAAG,GAAG,KAAK,CAAC,KAAK,EAAY,CAAC;QACpC,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAC3G,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAClB,SAAS;QACX,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QACtB,MAAM,MAAM,GAAG,GAAG,CAAC,WAAW,EAAE,GAAG,CAAC;QACpC,IAAI,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;YAClC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YACnB,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACrB,CAAC;IACH,CAAC;IACD,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC;AACzC,CAAC;AAED,yDAAyD;AACzD,MAAM,UAAU,SAAS,CAAC,GAAc,EAAE,OAAuC;IAC/E,MAAM,GAAG,GAAgB,EAAE,CAAC;IAC5B,MAAM,IAAI,GAAG,IAAI,GAAG,CAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;IACxC,IAAI,MAAM,GAAG,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAC5E,OAAO,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;QACvC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACjB,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACrB,MAAM,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAChF,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,mBAAmB,CAAC,GAAc,EAAE,OAAuC;IACzF,MAAM,KAAK,GAAG,CAAC,GAAG,SAAS,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;IACrD,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAChB,MAAM,KAAK,GAAG,IAAI,GAAG,EAA6B,CAAC;IACnD,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACtB,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,UAAU;YAAE,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,WAAW,IAAI,EAAE,SAAS,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC;IACtF,CAAC;IACD,OAAO,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;AAC7B,CAAC"}
@@ -0,0 +1,82 @@
1
+ /**
2
+ * Dictionary → IDS (05-bsdd.md §2.3, IDS-072). Selected classes of one
3
+ * dictionary become specifications: one per class, or one per related IFC
4
+ * entity with a classification enumeration. Properties come from the class
5
+ * and, optionally, its ancestors in the bSDD hierarchy; scope is the
6
+ * required properties only or all of them.
7
+ *
8
+ * `planDictionaryIds` is pure and returns `bulk.fromBsddClass` ops; the host
9
+ * previews them (`previewDictionaryIds`: gate, counts, lint summary on a
10
+ * dry run) and commits them as ONE history transaction, so one undo
11
+ * removes the whole import.
12
+ */
13
+ import type { IFCVersion } from '@ifc-lite/ids';
14
+ import type { Section, StudioDocument } from '../document/types.js';
15
+ import type { GateContext } from '../gate/context.js';
16
+ import type { GateResult } from '../gate/types.js';
17
+ import type { LintContext, LintSeverity } from '../lint/types.js';
18
+ import type { BulkFromBsddClassOp, SpecCardinality } from '../ops/types.js';
19
+ import { type Uuid } from '../uuid.js';
20
+ import type { BsddClass, BsddDictionary } from './types.js';
21
+ export interface DictionaryIdsOptions {
22
+ ifcVersions: IFCVersion[];
23
+ /** `perClass`: one spec per class. `perEntity`: one spec per related IFC entity, classes as an enumeration. */
24
+ grouping?: 'perClass' | 'perEntity';
25
+ /** Include properties inherited from parent classes. Default true. */
26
+ inheritProperties?: boolean;
27
+ /** `required`: only properties bSDD marks required. Default `all`. */
28
+ propertyScope?: 'required' | 'all';
29
+ /**
30
+ * Cardinality of each generated specification. Default `optional`: the
31
+ * requirements apply to the classified elements a model has, without
32
+ * demanding that every class occurs (lint IDSL-CARD-004 flags the latter).
33
+ */
34
+ cardinality?: SpecCardinality;
35
+ /** Where the classification facet goes. Default `applicability`. */
36
+ classificationSection?: Section;
37
+ /** Property set for properties without one; without it they are skipped (and noted). */
38
+ fallbackPropertySet?: string;
39
+ /** Generate classes bSDD marks inactive too. Default false (they are skipped, and noted). */
40
+ includeInactive?: boolean;
41
+ }
42
+ export interface PlannedSpec {
43
+ specId: Uuid;
44
+ name: string;
45
+ classCodes: string[];
46
+ entities: string[];
47
+ properties: string[];
48
+ }
49
+ export interface DictionaryIdsPlan {
50
+ ops: BulkFromBsddClassOp[];
51
+ specs: PlannedSpec[];
52
+ /** What was left out and why. */
53
+ notes: string[];
54
+ }
55
+ export interface DictionaryIdsInput {
56
+ dictionary: BsddDictionary;
57
+ /** Classes by URI: the selection and (for inheritance) their ancestors. */
58
+ classes: ReadonlyMap<string, BsddClass>;
59
+ /** URIs of the classes to generate, in the order wanted. */
60
+ selected: readonly string[];
61
+ options: DictionaryIdsOptions;
62
+ /** Schema tables: split `IfcWallSOLIDWALL`-style names, drop entities unknown in the versions, keep standard data types. */
63
+ gate?: GateContext;
64
+ newId?: () => Uuid;
65
+ }
66
+ /** Plan the specifications for a dictionary selection. Pure. */
67
+ export declare function planDictionaryIds(input: DictionaryIdsInput): DictionaryIdsPlan;
68
+ export interface DictionaryIdsPreview {
69
+ specCount: number;
70
+ applicabilityFacets: number;
71
+ requirements: number;
72
+ gate: GateResult;
73
+ /** Lint findings of the document after the import, by severity and by code. */
74
+ lint: Record<LintSeverity, number> & {
75
+ byCode: Record<string, number>;
76
+ };
77
+ /** The document the plan produces (when the gate accepts it). */
78
+ result?: StudioDocument;
79
+ }
80
+ /** Dry-run the plan on `doc`: gate it, apply it to a copy, lint the result. */
81
+ export declare function previewDictionaryIds(doc: StudioDocument, plan: DictionaryIdsPlan, lint: LintContext): DictionaryIdsPreview;
82
+ //# sourceMappingURL=generator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generator.d.ts","sourceRoot":"","sources":["../../src/bsdd/generator.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,KAAK,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACpE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEtD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAEnD,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAClE,OAAO,KAAK,EAAqB,mBAAmB,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAE/F,OAAO,EAAU,KAAK,IAAI,EAAE,MAAM,YAAY,CAAC;AAI/C,OAAO,KAAK,EAAE,SAAS,EAAqB,cAAc,EAAE,MAAM,YAAY,CAAC;AAE/E,MAAM,WAAW,oBAAoB;IACnC,WAAW,EAAE,UAAU,EAAE,CAAC;IAC1B,+GAA+G;IAC/G,QAAQ,CAAC,EAAE,UAAU,GAAG,WAAW,CAAC;IACpC,sEAAsE;IACtE,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,sEAAsE;IACtE,aAAa,CAAC,EAAE,UAAU,GAAG,KAAK,CAAC;IACnC;;;;OAIG;IACH,WAAW,CAAC,EAAE,eAAe,CAAC;IAC9B,oEAAoE;IACpE,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,wFAAwF;IACxF,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,6FAA6F;IAC7F,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,IAAI,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,UAAU,EAAE,MAAM,EAAE,CAAC;CACtB;AAED,MAAM,WAAW,iBAAiB;IAChC,GAAG,EAAE,mBAAmB,EAAE,CAAC;IAC3B,KAAK,EAAE,WAAW,EAAE,CAAC;IACrB,iCAAiC;IACjC,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,MAAM,WAAW,kBAAkB;IACjC,UAAU,EAAE,cAAc,CAAC;IAC3B,2EAA2E;IAC3E,OAAO,EAAE,WAAW,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IACxC,4DAA4D;IAC5D,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;IAC5B,OAAO,EAAE,oBAAoB,CAAC;IAC9B,4HAA4H;IAC5H,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,IAAI,CAAC;CACpB;AAUD,gEAAgE;AAChE,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,kBAAkB,GAAG,iBAAiB,CAyE9E;AAiCD,MAAM,WAAW,oBAAoB;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,UAAU,CAAC;IACjB,+EAA+E;IAC/E,IAAI,EAAE,MAAM,CAAC,YAAY,EAAE,MAAM,CAAC,GAAG;QAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;KAAE,CAAC;IACxE,iEAAiE;IACjE,MAAM,CAAC,EAAE,cAAc,CAAC;CACzB;AAED,+EAA+E;AAC/E,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,cAAc,EAAE,IAAI,EAAE,iBAAiB,EAAE,IAAI,EAAE,WAAW,GAAG,oBAAoB,CAqB1H"}
@@ -0,0 +1,155 @@
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 { createLinter } from '../lint/engine.js';
6
+ import { apply } from '../reducer/apply.js';
7
+ import { uuidv7 } from '../uuid.js';
8
+ import { effectiveProperties } from './dictionary.js';
9
+ import { snapshotBsddClass } from './insert.js';
10
+ import { BsddMappingError, mapBsddProperty } from './mapping.js';
11
+ function entityKnown(gate, versions, name) {
12
+ return !gate || versions.every((v) => gate.tables[v].entities.has(name.toUpperCase()));
13
+ }
14
+ function scoped(props, scope) {
15
+ return scope === 'required' ? props.filter((p) => p.isRequired === true) : [...props];
16
+ }
17
+ /** Plan the specifications for a dictionary selection. Pure. */
18
+ export function planDictionaryIds(input) {
19
+ const { dictionary, classes, options, gate } = input;
20
+ const versions = options.ifcVersions;
21
+ const newId = input.newId ?? uuidv7;
22
+ const notes = [];
23
+ const snapshots = [];
24
+ for (const uri of new Set(input.selected)) {
25
+ const cls = classes.get(uri);
26
+ if (!cls) {
27
+ notes.push(`${uri}: not loaded; skipped`);
28
+ continue;
29
+ }
30
+ if (cls.dictionaryUri && cls.dictionaryUri !== dictionary.uri) {
31
+ notes.push(`${cls.code}: belongs to another dictionary; skipped`);
32
+ continue;
33
+ }
34
+ if (cls.status === 'inactive' && !options.includeInactive) {
35
+ notes.push(`${cls.code}: inactive in bSDD; skipped`);
36
+ continue;
37
+ }
38
+ const all = options.inheritProperties === false ? cls.properties : effectiveProperties(cls, classes);
39
+ const snap = snapshotBsddClass(cls, { dictionaryName: dictionary.name, gate, versions, properties: scoped(all, options.propertyScope ?? 'all') });
40
+ snap.properties = (snap.properties ?? []).filter((p) => {
41
+ try {
42
+ mapBsddProperty(p, options.fallbackPropertySet ? { fallbackPropertySet: options.fallbackPropertySet } : {});
43
+ return true;
44
+ }
45
+ catch (err) {
46
+ if (!(err instanceof BsddMappingError))
47
+ throw err;
48
+ notes.push(`${cls.code}.${p.code}: ${err.message}; skipped`);
49
+ return false;
50
+ }
51
+ });
52
+ const known = (snap.relatedIfcEntities ?? []).filter((r) => entityKnown(gate, versions, r.entity));
53
+ for (const r of snap.relatedIfcEntities ?? []) {
54
+ if (!known.includes(r))
55
+ notes.push(`${cls.code}: related entity ${r.entity} does not exist in ${versions.join(', ')}; left out`);
56
+ }
57
+ snapshots.push({ ...snap, relatedIfcEntities: known });
58
+ }
59
+ const groups = options.grouping === 'perEntity' ? groupByEntity(snapshots, notes) : snapshots.map((s) => ({ key: s.code, classes: [s], entity: undefined }));
60
+ const plan = { ops: [], specs: [], notes };
61
+ for (const g of groups) {
62
+ const specId = newId();
63
+ const first = g.classes[0];
64
+ const name = g.entity ? `${g.entity} (${dictionary.name})` : `${first.name} (${first.code})`;
65
+ const propCodes = commonProperties(g.classes, notes);
66
+ const entities = g.entity ? [g.entity] : [...new Set((first.relatedIfcEntities ?? []).map((r) => r.entity))];
67
+ const op = {
68
+ kind: 'bulk.fromBsddClass',
69
+ opId: newId(),
70
+ payload: {
71
+ classes: g.classes.map((c) => ({ ...c, properties: (c.properties ?? []).filter((p) => propCodes.includes(p.code)) })),
72
+ target: {
73
+ newSpec: {
74
+ specId,
75
+ name,
76
+ ifcVersions: versions,
77
+ cardinality: options.cardinality ?? 'optional',
78
+ ...(g.classes.length === 1 ? { identifier: first.code } : {}),
79
+ ...(g.classes.length === 1 && classes.get(first.uri)?.definition ? { description: classes.get(first.uri)?.definition } : {}),
80
+ },
81
+ },
82
+ classification: { section: options.classificationSection ?? 'applicability' },
83
+ },
84
+ };
85
+ if (entities.length)
86
+ op.payload.entity = { section: 'applicability', entities };
87
+ else
88
+ notes.push(`${g.classes.map((c) => c.code).join(', ')}: no known related IFC entity; the specification applies by classification only`);
89
+ if (propCodes.length) {
90
+ op.payload.properties = { select: propCodes, ...(options.fallbackPropertySet ? { fallbackPropertySet: options.fallbackPropertySet } : {}) };
91
+ }
92
+ plan.ops.push(op);
93
+ plan.specs.push({ specId, name, classCodes: g.classes.map((c) => c.code), entities, properties: propCodes });
94
+ }
95
+ return plan;
96
+ }
97
+ /** One group per related entity (a class's first related entity decides). */
98
+ function groupByEntity(snapshots, notes) {
99
+ const groups = new Map();
100
+ for (const s of snapshots) {
101
+ const entity = s.relatedIfcEntities?.[0]?.entity;
102
+ if (!entity) {
103
+ notes.push(`${s.code}: no known related IFC entity; generated as its own specification`);
104
+ groups.set(`class:${s.code}`, { key: s.code, classes: [s] });
105
+ continue;
106
+ }
107
+ if ((s.relatedIfcEntities ?? []).some((r) => r.entity !== entity))
108
+ notes.push(`${s.code}: grouped under ${entity}, its first related entity`);
109
+ const g = groups.get(entity) ?? { key: entity, classes: [], entity };
110
+ g.classes.push({ ...s, relatedIfcEntities: [{ entity }] });
111
+ groups.set(entity, g);
112
+ }
113
+ return [...groups.values()];
114
+ }
115
+ /** Property codes defined (with the same set) on every class of a group. */
116
+ function commonProperties(classes, notes) {
117
+ const [first, ...rest] = classes;
118
+ const out = [];
119
+ for (const p of first.properties ?? []) {
120
+ if (out.includes(p.code))
121
+ continue;
122
+ const everywhere = rest.every((c) => c.properties?.some((q) => q.code === p.code && q.propertySet === p.propertySet));
123
+ if (everywhere)
124
+ out.push(p.code);
125
+ else
126
+ notes.push(`${p.code}: not defined on every class of ${classes.map((c) => c.code).join(', ')}; left out of the shared specification`);
127
+ }
128
+ return out;
129
+ }
130
+ /** Dry-run the plan on `doc`: gate it, apply it to a copy, lint the result. */
131
+ export function previewDictionaryIds(doc, plan, lint) {
132
+ const gate = checkOps(plan.ops, doc, lint.gate);
133
+ const byCode = {};
134
+ const counts = { error: 0, warning: 0, info: 0, byCode };
135
+ if (!gate.ok)
136
+ return { specCount: plan.specs.length, applicabilityFacets: 0, requirements: 0, gate, lint: counts };
137
+ const result = apply(doc, plan.ops).doc;
138
+ const created = new Set(plan.specs.map((s) => s.specId));
139
+ const specs = result.ids.specifications.filter((s) => created.has(s.id));
140
+ for (const d of createLinter(lint).lint(result).diagnostics) {
141
+ if (d.specId && !created.has(d.specId))
142
+ continue;
143
+ counts[d.severity]++;
144
+ counts.byCode[d.code] = (counts.byCode[d.code] ?? 0) + 1;
145
+ }
146
+ return {
147
+ specCount: specs.length,
148
+ applicabilityFacets: specs.reduce((n, s) => n + s.applicability.facets.length, 0),
149
+ requirements: specs.reduce((n, s) => n + s.requirements.length, 0),
150
+ gate,
151
+ lint: counts,
152
+ result,
153
+ };
154
+ }
155
+ //# sourceMappingURL=generator.js.map