@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,10 @@
1
+ /** Cardinality rules IDSL-CARD-001 … 004. */
2
+ import type { IDSSpecification } from '@ifc-lite/ids';
3
+ import type { SpecRule } from '../types.js';
4
+ export declare function isProhibitedSpec(spec: IDSSpecification): boolean;
5
+ export declare function isRequiredSpec(spec: IDSSpecification): boolean;
6
+ export declare const CARD_001: SpecRule;
7
+ export declare const CARD_002: SpecRule;
8
+ export declare const CARD_003: SpecRule;
9
+ export declare const CARD_004: SpecRule;
10
+ //# sourceMappingURL=card.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"card.d.ts","sourceRoot":"","sources":["../../../src/lint/rules/card.ts"],"names":[],"mappings":"AAIA,6CAA6C;AAE7C,OAAO,KAAK,EAAY,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAGhE,OAAO,KAAK,EAAW,QAAQ,EAAE,MAAM,aAAa,CAAC;AAIrD,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAEhE;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAE9D;AAkBD,eAAO,MAAM,QAAQ,EAAE,QAuBtB,CAAC;AAiBF,eAAO,MAAM,QAAQ,EAAE,QAqBtB,CAAC;AAEF,eAAO,MAAM,QAAQ,EAAE,QAiBtB,CAAC;AAgBF,eAAO,MAAM,QAAQ,EAAE,QAkBtB,CAAC"}
@@ -0,0 +1,140 @@
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 { quickFix } from '../fix.js';
5
+ import { where } from '../walk.js';
6
+ import { gated } from './util.js';
7
+ export function isProhibitedSpec(spec) {
8
+ return spec.maxOccurs === 0;
9
+ }
10
+ export function isRequiredSpec(spec) {
11
+ return (spec.minOccurs ?? 0) >= 1 && spec.maxOccurs !== 0;
12
+ }
13
+ /** The value-like fields of a facet that a prohibited requirement would qualify. */
14
+ function qualifiers(facet) {
15
+ switch (facet.type) {
16
+ case 'property':
17
+ return [...(facet.value ? ['property.value'] : []), ...(facet.dataType ? ['property.dataType'] : [])];
18
+ case 'attribute':
19
+ return facet.value ? ['attribute.value'] : [];
20
+ case 'classification':
21
+ return facet.value ? ['classification.value'] : [];
22
+ case 'material':
23
+ return facet.value ? ['material.value'] : [];
24
+ default:
25
+ return [];
26
+ }
27
+ }
28
+ export const CARD_001 = {
29
+ code: 'IDSL-CARD-001',
30
+ area: 'CARD',
31
+ scope: 'spec',
32
+ kind: 'static',
33
+ defaultSeverity: 'warning',
34
+ title: 'Prohibited requirement with a value or data type',
35
+ rationale: 'A prohibited facet with a value can be read two ways: "must not have this property at all" or "must not have it with this value". Tools disagree (IDS issues #206 and #420), so the same file passes in one checker and fails in another. Without a value the meaning is unambiguous.',
36
+ fix: 'Drop the value and data type, so the requirement reads "must not have it at all". The other reading cannot be expressed unambiguously in IDS 1.0.',
37
+ references: ['https://github.com/buildingSMART/IDS/issues/206', 'https://github.com/buildingSMART/IDS/issues/420'],
38
+ example: '<property cardinality="prohibited">…<value><simpleValue>EI30</simpleValue></value></property>',
39
+ check(spec, { ctx, doc }) {
40
+ const out = [];
41
+ for (const r of spec.requirements) {
42
+ if (r.requirement?.optionality !== 'prohibited')
43
+ continue;
44
+ const fields = qualifiers(r.facet);
45
+ if (!fields.length)
46
+ continue;
47
+ const fix = quickFix('Prohibit it entirely (drop the value)', this.code, r.facetId, 'drop', fields.map((field) => ({ kind: 'facet.setField', payload: { facetId: r.facetId, field, value: null } })));
48
+ out.push({ nodeId: r.facetId, message: `${where(r)} is prohibited with a ${fields.map((f) => f.slice(f.indexOf('.') + 1)).join(' and ')}: "must not have it" or "must not have this value"?`, fixes: gated(doc, ctx, [fix]) });
49
+ }
50
+ return out;
51
+ },
52
+ };
53
+ /** An optional requirement checks something only through a value, dataType or system. */
54
+ function checksNothingWhenOptional(facet) {
55
+ switch (facet.type) {
56
+ case 'property':
57
+ return !facet.value && !facet.dataType;
58
+ case 'attribute':
59
+ case 'material':
60
+ return !facet.value;
61
+ case 'classification':
62
+ return !facet.value && !facet.system;
63
+ default:
64
+ return false;
65
+ }
66
+ }
67
+ export const CARD_002 = {
68
+ code: 'IDSL-CARD-002',
69
+ area: 'CARD',
70
+ scope: 'spec',
71
+ kind: 'static',
72
+ defaultSeverity: 'info',
73
+ title: 'Optional requirement that checks nothing',
74
+ rationale: 'An optional requirement means "if present, it must comply". Without a value (or data type, or classification system) there is nothing to comply with, so it can never fail.',
75
+ fix: 'Make it required, or remove it.',
76
+ example: '<property cardinality="optional"><propertySet>…</propertySet><baseName>…</baseName></property>',
77
+ check(spec, { ctx, doc }) {
78
+ const out = [];
79
+ for (const r of spec.requirements) {
80
+ if (r.requirement?.optionality !== 'optional' || !checksNothingWhenOptional(r.facet))
81
+ continue;
82
+ const required = quickFix('Make it required', this.code, r.facetId, 'required', [{ kind: 'requirement.setOptionality', payload: { facetId: r.facetId, optionality: 'required' } }]);
83
+ const remove = quickFix('Remove it', this.code, r.facetId, 'remove', [{ kind: 'facet.remove', payload: { facetId: r.facetId } }]);
84
+ out.push({ nodeId: r.facetId, message: `${where(r)} is optional and has no value, so it can never fail`, fixes: gated(doc, ctx, [required, remove]) });
85
+ }
86
+ return out;
87
+ },
88
+ };
89
+ export const CARD_003 = {
90
+ code: 'IDSL-CARD-003',
91
+ area: 'CARD',
92
+ scope: 'spec',
93
+ kind: 'static',
94
+ defaultSeverity: 'warning',
95
+ title: 'Prohibited specification with requirements',
96
+ rationale: 'A prohibited specification (maxOccurs 0) says "no element may match the applicability". Its requirements are never evaluated, so they suggest a check that does not happen. buildingSMART marks this combination as invalid (corpus case ids/invalid-prohibited_specifications_invalid_if_requirements_are_specified).',
97
+ fix: 'Remove the requirements, or make the specification required.',
98
+ example: '<specification …><applicability minOccurs="0" maxOccurs="0">…</applicability><requirements>…</requirements></specification>',
99
+ check(spec, { ctx, doc }) {
100
+ if (!isProhibitedSpec(spec.spec) || !spec.requirements.length)
101
+ return [];
102
+ const remove = quickFix('Remove the requirements', this.code, spec.specId, 'remove', spec.requirements.map((r) => ({ kind: 'facet.remove', payload: { facetId: r.facetId } })));
103
+ const required = quickFix('Make the specification required', this.code, spec.specId, 'required', [{ kind: 'spec.setCardinality', payload: { specId: spec.specId, cardinality: 'required' } }]);
104
+ return [{ nodeId: spec.specId, message: `the specification is prohibited, so its ${spec.requirements.length} requirement(s) are never checked`, fixes: gated(doc, ctx, [remove, required]) }];
105
+ },
106
+ };
107
+ function hasValueSelection(facet) {
108
+ switch (facet.type) {
109
+ case 'property':
110
+ case 'attribute':
111
+ case 'classification':
112
+ case 'material':
113
+ return !!facet.value;
114
+ case 'partOf':
115
+ return true;
116
+ default:
117
+ return false;
118
+ }
119
+ }
120
+ export const CARD_004 = {
121
+ code: 'IDSL-CARD-004',
122
+ area: 'CARD',
123
+ scope: 'spec',
124
+ kind: 'static',
125
+ defaultSeverity: 'info',
126
+ title: 'Required specification with a narrow applicability',
127
+ rationale: 'A required specification fails any model with no applicable element. When the applicability is narrowed by a value (a property or attribute value, a classification, a material, a containment), a model that legitimately has no such element fails the whole specification. Optional is usually what is meant.',
128
+ fix: 'Make the specification optional.',
129
+ example: '<applicability minOccurs="1">…<property>…<value><simpleValue>EI60</simpleValue></value></property></applicability>',
130
+ check(spec, { ctx, doc }) {
131
+ if (!isRequiredSpec(spec.spec))
132
+ return [];
133
+ const narrow = spec.applicability.find((f) => hasValueSelection(f.facet));
134
+ if (!narrow)
135
+ return [];
136
+ const fix = quickFix('Make it optional', this.code, spec.specId, 'optional', [{ kind: 'spec.setCardinality', payload: { specId: spec.specId, cardinality: 'optional' } }]);
137
+ return [{ nodeId: spec.specId, message: `required specification narrowed by ${where(narrow)} (${narrow.facet.type}); models without such elements fail it`, fixes: gated(doc, ctx, [fix]) }];
138
+ },
139
+ };
140
+ //# sourceMappingURL=card.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"card.js","sourceRoot":"","sources":["../../../src/lint/rules/card.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import type { DocumentRule, SpecRule } from '../types.js';
2
+ /** An unambiguous date in another notation, as xs:date. */
3
+ export declare function toXsDate(raw: string): string | undefined;
4
+ export declare const DOC_001: DocumentRule;
5
+ export declare const VER_001: SpecRule;
6
+ export declare const PART_001: SpecRule;
7
+ //# sourceMappingURL=doc-ver-part.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doc-ver-part.d.ts","sourceRoot":"","sources":["../../../src/lint/rules/doc-ver-part.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,YAAY,EAAW,QAAQ,EAAY,MAAM,aAAa,CAAC;AAQ7E,2DAA2D;AAC3D,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAUxD;AAED,eAAO,MAAM,OAAO,EAAE,YAyBrB,CAAC;AA0BF,eAAO,MAAM,OAAO,EAAE,QA6BrB,CAAC;AAeF,eAAO,MAAM,QAAQ,EAAE,QA4BtB,CAAC"}
@@ -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 { IFC2X3_MAPPED_ALIASES } from '@ifc-lite/ids';
5
+ import { inheritanceChain } from '../../gate/context.js';
6
+ import { isReservedPsetName } from '../../gate/grounding-pset.js';
7
+ import { quickFix } from '../fix.js';
8
+ import { allFacets, at, where } from '../walk.js';
9
+ import { applicabilityEntityNames, entityNameSites, gated, isSubtypeOf, literals, single, tables } from './util.js';
10
+ // IDS 1.0 XSD: author is `[^@]+@[^\.]+\..+`, date is xs:date.
11
+ const AUTHOR = /^[^@]+@[^.]+\..+$/;
12
+ const XS_DATE = /^-?\d{4,}-(0[1-9]|1[0-2])-(0[1-9]|[12]\d|3[01])(Z|[+-]\d{2}:\d{2})?$/;
13
+ /** An unambiguous date in another notation, as xs:date. */
14
+ export function toXsDate(raw) {
15
+ const v = raw.trim();
16
+ const pad = (n) => n.padStart(2, '0');
17
+ let m = /^(\d{4})[/.](\d{1,2})[/.](\d{1,2})$/.exec(v);
18
+ if (m)
19
+ return `${m[1]}-${pad(m[2])}-${pad(m[3])}`;
20
+ m = /^(\d{1,2})\.(\d{1,2})\.(\d{4})$/.exec(v); // day.month.year (European dotted form)
21
+ if (m)
22
+ return `${m[3]}-${pad(m[2])}-${pad(m[1])}`;
23
+ m = /^(\d{4}-\d{2}-\d{2})T[\d:.]+(Z|[+-]\d{2}:\d{2})?$/.exec(v);
24
+ if (m)
25
+ return m[1];
26
+ return undefined;
27
+ }
28
+ export const DOC_001 = {
29
+ code: 'IDSL-DOC-001',
30
+ area: 'DOC',
31
+ scope: 'document',
32
+ kind: 'static',
33
+ defaultSeverity: 'error',
34
+ title: 'Author is not an e-mail address, or date is not xs:date',
35
+ rationale: 'The IDS 1.0 schema requires info/author to be an e-mail address and info/date to be an xs:date (YYYY-MM-DD). Schema-validating tools reject the file otherwise.',
36
+ fix: 'Rewrite an unambiguous date as YYYY-MM-DD; remove an author that is not an e-mail address.',
37
+ example: '<info><author>Jane Doe</author><date>08.10.2026</date></info>',
38
+ check(_specs, { ctx, doc }) {
39
+ const info = doc.ids.info;
40
+ const out = [];
41
+ const node = doc.nodes.document;
42
+ if (info.author !== undefined && !AUTHOR.test(info.author)) {
43
+ const fix = quickFix('Remove the author', this.code, node, 'author', [{ kind: 'doc.setInfo', payload: { field: 'author', value: null } }]);
44
+ out.push({ nodeId: node, message: `author "${info.author}" is not an e-mail address`, fixes: gated(doc, ctx, [fix]) });
45
+ }
46
+ if (info.date !== undefined && !XS_DATE.test(info.date)) {
47
+ const fixed = toXsDate(info.date);
48
+ const fix = fixed ? quickFix(`Use ${fixed}`, this.code, node, 'date', [{ kind: 'doc.setInfo', payload: { field: 'date', value: fixed } }]) : undefined;
49
+ out.push({ nodeId: node, message: `date "${info.date}" is not an xs:date (YYYY-MM-DD)`, fixes: gated(doc, ctx, [fix]) });
50
+ }
51
+ return out;
52
+ },
53
+ };
54
+ /** Literal names used by a spec, with a resolver per version. */
55
+ function namesIn(spec) {
56
+ const out = [];
57
+ for (const site of entityNameSites(spec)) {
58
+ for (const name of literals(site.constraint)) {
59
+ out.push({ label: name, ...at(site.view, site.field), resolves: (t, v) => t.entities.has(name.toUpperCase()) || (v === 'IFC2X3' && IFC2X3_MAPPED_ALIASES.has(name.toUpperCase())) });
60
+ }
61
+ }
62
+ for (const view of allFacets(spec)) {
63
+ const f = view.facet;
64
+ if (f.type === 'attribute') {
65
+ for (const name of literals(f.name))
66
+ out.push({ label: name, ...at(view, 'attribute.name'), resolves: (t) => t.attributeNames.has(name) || [...t.attributeNames].some((a) => a.toLowerCase() === name.toLowerCase()) });
67
+ }
68
+ if (f.type === 'property') {
69
+ const pset = single(f.propertySet);
70
+ if (!pset || !isReservedPsetName(pset))
71
+ continue;
72
+ out.push({ label: pset, ...at(view, 'property.propertySet'), resolves: (t) => t.psets.has(pset) || (pset.startsWith('Qto_') && !t.hasQuantitySets) });
73
+ const name = single(f.baseName);
74
+ if (name)
75
+ out.push({ label: `${pset}.${name}`, ...at(view, 'property.baseName'), resolves: (t) => !t.psets.has(pset) || !!t.psets.get(pset)?.properties.some((p) => p.name === name) });
76
+ }
77
+ }
78
+ return out;
79
+ }
80
+ export const VER_001 = {
81
+ code: 'IDSL-VER-001',
82
+ area: 'VER',
83
+ scope: 'spec',
84
+ kind: 'static',
85
+ defaultSeverity: 'warning',
86
+ title: 'Name valid in only some IFC versions of the specification',
87
+ rationale: 'A specification that lists several IFC versions must use names (entities, attributes, standard sets and properties) that exist in each of them. A name missing from one version makes the specification fail or select nothing on models of that version. IFC4 class names that the IFC2X3 occurrence/type mapping table resolves (IfcAirTerminal, …) are accepted for IFC2X3.',
88
+ fix: 'Restrict the specification to the versions in which every name exists.',
89
+ example: '<specification ifcVersion="IFC2X3 IFC4"> … <entity><name><simpleValue>IFCBUILDINGSYSTEM</simpleValue></name></entity>',
90
+ check(spec, { ctx, doc }) {
91
+ if (spec.versions.length < 2)
92
+ return [];
93
+ const out = [];
94
+ const good = new Set(spec.versions);
95
+ for (const n of namesIn(spec)) {
96
+ const missing = spec.versions.filter((v) => !n.resolves(tables(ctx, v), v));
97
+ if (!missing.length || missing.length === spec.versions.length)
98
+ continue; // in none: the audit's problem, not a version split
99
+ for (const v of missing)
100
+ good.delete(v);
101
+ out.push({ nodeId: n.nodeId, ...(n.field ? { field: n.field } : {}), message: `${n.label} does not exist in ${missing.join(', ')}` });
102
+ }
103
+ if (out.length && good.size) {
104
+ const keep = spec.versions.filter((v) => good.has(v));
105
+ const fix = quickFix(`Restrict to ${keep.join(', ')}`, this.code, spec.specId, keep.join(' '), [{ kind: 'spec.setIfcVersions', payload: { specId: spec.specId, versions: keep } }]);
106
+ const fixes = gated(doc, ctx, [fix]);
107
+ for (const f of out)
108
+ f.fixes = fixes;
109
+ }
110
+ return out;
111
+ },
112
+ };
113
+ const SPATIAL = 'IfcSpatialStructureElement';
114
+ function allAre(spec, ctx, ancestor, exclude) {
115
+ const names = applicabilityEntityNames(spec);
116
+ return (names.length > 0 &&
117
+ spec.versions.every((v) => {
118
+ const t = tables(ctx, v);
119
+ return names.every((n) => inheritanceChain(t, n).length > 0 && isSubtypeOf(t, n, ancestor) && !(exclude && isSubtypeOf(t, n, exclude)));
120
+ }));
121
+ }
122
+ export const PART_001 = {
123
+ code: 'IDSL-PART-001',
124
+ area: 'PART',
125
+ scope: 'spec',
126
+ kind: 'static',
127
+ defaultSeverity: 'info',
128
+ title: 'Unlikely partOf relation for these entities',
129
+ rationale: 'The relation is allowed by the schema but unusual for these entities. Building elements are placed in a storey or space by spatial containment (IfcRelContainedInSpatialStructure), not aggregation; spatial elements (sites, buildings, storeys) are decomposed by aggregation (IfcRelAggregates), not containment. The audit already rejects combinations the schema forbids.',
130
+ fix: 'Use the usual relation.',
131
+ example: '<entity>IFCWALL</entity> + <partOf relation="IFCRELAGGREGATES"><entity>IFCBUILDINGSTOREY</entity></partOf>',
132
+ check(spec, { ctx, doc }) {
133
+ const out = [];
134
+ for (const view of allFacets(spec)) {
135
+ const f = view.facet;
136
+ if (f.type !== 'partOf' || !f.entity)
137
+ continue;
138
+ const whole = single(f.entity.name);
139
+ if (!whole)
140
+ continue;
141
+ const wholeSpatial = spec.versions.every((v) => isSubtypeOf(tables(ctx, v), whole, SPATIAL));
142
+ let suggestion;
143
+ if ((f.relation === 'IfcRelAggregates' || f.relation === 'IfcRelNests') && wholeSpatial && allAre(spec, ctx, 'IfcElement'))
144
+ suggestion = 'IfcRelContainedInSpatialStructure';
145
+ if (f.relation === 'IfcRelContainedInSpatialStructure' && allAre(spec, ctx, SPATIAL))
146
+ suggestion = 'IfcRelAggregates';
147
+ if (!suggestion)
148
+ continue;
149
+ const body = { kind: 'facet.setRelation', payload: { facetId: view.facetId, relation: suggestion } };
150
+ out.push({ nodeId: view.facetId, message: `${where(view)}: ${f.relation} is unusual here; ${suggestion} is the usual relation`, fixes: gated(doc, ctx, [quickFix(`Use ${suggestion}`, this.code, view.facetId, suggestion, [body])]) });
151
+ }
152
+ return out;
153
+ },
154
+ };
155
+ //# sourceMappingURL=doc-ver-part.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doc-ver-part.js","sourceRoot":"","sources":["../../../src/lint/rules/doc-ver-part.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /** Entity rules IDSL-ENT-001 … 005. */
2
+ import type { FacetFieldName } from '../../document/fields.js';
3
+ import type { Uuid } from '../../uuid.js';
4
+ import { type OpBody } from '../fix.js';
5
+ import type { SpecRule } from '../types.js';
6
+ export declare function setValues(facetId: Uuid, field: FacetFieldName, values: readonly string[]): OpBody;
7
+ export declare const ENT_001: SpecRule;
8
+ export declare const ENT_002: SpecRule;
9
+ export declare const ENT_003: SpecRule;
10
+ export declare const ENT_004: SpecRule;
11
+ export declare const ENT_005: SpecRule;
12
+ //# sourceMappingURL=entity.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"entity.d.ts","sourceRoot":"","sources":["../../../src/lint/rules/entity.ts"],"names":[],"mappings":"AAIA,uCAAuC;AAEvC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAE/D,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAY,KAAK,MAAM,EAAE,MAAM,WAAW,CAAC;AAClD,OAAO,KAAK,EAAW,QAAQ,EAAE,MAAM,aAAa,CAAC;AAcrD,wBAAgB,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,cAAc,EAAE,MAAM,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,CAGjG;AAKD,eAAO,MAAM,OAAO,EAAE,QA0CrB,CAAC;AAKF,eAAO,MAAM,OAAO,EAAE,QAqCrB,CAAC;AAEF,eAAO,MAAM,OAAO,EAAE,QAoCrB,CAAC;AAIF,eAAO,MAAM,OAAO,EAAE,QAiCrB,CAAC;AAkBF,eAAO,MAAM,OAAO,EAAE,QAwBrB,CAAC"}
@@ -0,0 +1,215 @@
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 { quickFix } from '../fix.js';
5
+ import { at } from '../walk.js';
6
+ import { canonicalEntity, concreteDescendants, entityNameSites, gated, isSubtypeOf, listSome, literals, replaceLiteral, tables, } from './util.js';
7
+ export function setValues(facetId, field, values) {
8
+ const value = values.length === 1 ? { kind: 'equals', value: values[0] } : { kind: 'oneOf', values: [...values] };
9
+ return { kind: 'value.set', payload: { facetId, field, value } };
10
+ }
11
+ /** Above this many subtypes the expansion is not offered as a fix. */
12
+ const MAX_EXPANSION = 120;
13
+ export const ENT_001 = {
14
+ code: 'IDSL-ENT-001',
15
+ area: 'ENT',
16
+ scope: 'spec',
17
+ kind: 'static',
18
+ defaultSeverity: 'error',
19
+ title: 'Abstract entity in an entity facet',
20
+ rationale: 'IDS 1.0 entity facets match the exact class, never its subtypes. An abstract class such as IfcBuildingElement is never instantiated, so a facet naming it matches no element at all: an applicability selects nothing and a requirement always fails.',
21
+ fix: 'Replace the abstract class by an enumeration of its concrete subtypes (those concrete in every IFC version of the specification).',
22
+ assumptions: [
23
+ {
24
+ id: 'A-03',
25
+ verified: 'buildingSMART corpus case entity/invalid-subclasses_are_not_considered_as_matching (IFCWALL does not match an IFCWALLSTANDARDCASE instance) and the exact-match entity checker in @ifc-lite/ids (checkEntityFacet), which cites the IDS user manual: "There is no automatic inheritance in IDS entity facet interpretation".',
26
+ },
27
+ ],
28
+ references: ['https://github.com/buildingSMART/IDS/blob/development/Documentation/UserManual/entity-facet.md'],
29
+ example: '<entity><name><simpleValue>IFCBUILDINGELEMENT</simpleValue></name></entity>',
30
+ check(spec, { ctx, doc }) {
31
+ const out = [];
32
+ for (const site of entityNameSites(spec)) {
33
+ for (const name of literals(site.constraint)) {
34
+ const abstractIn = spec.versions.filter((v) => tables(ctx, v).entities.get(name.toUpperCase())?.abstract);
35
+ if (!abstractIn.length)
36
+ continue;
37
+ const subtypes = concreteDescendants(ctx, spec.versions, name);
38
+ const canonical = canonicalEntity(ctx, spec.versions, name) ?? name;
39
+ const fix = subtypes.length && subtypes.length <= MAX_EXPANSION
40
+ ? quickFix(`Expand to ${subtypes.length} concrete subtypes`, this.code, site.view.facetId, `${site.field}|${name}`, [
41
+ setValues(site.view.facetId, site.field, replaceLiteral(site.constraint, name, subtypes)),
42
+ ])
43
+ : undefined;
44
+ out.push({
45
+ ...at(site.view, site.field),
46
+ message: `${canonical} is abstract (${abstractIn.join(', ')}) and matches no element; IDS does not match subtypes${subtypes.length ? ` such as ${listSome(subtypes, 3)}` : ''}`,
47
+ fixes: gated(doc, ctx, [fix]),
48
+ });
49
+ }
50
+ }
51
+ return out;
52
+ },
53
+ };
54
+ /** Removed in IFC4X3 with a direct replacement: the parent class. */
55
+ const REPLACED_SUFFIX = /(StandardCase|ElementedCase)$/;
56
+ export const ENT_002 = {
57
+ code: 'IDSL-ENT-002',
58
+ area: 'ENT',
59
+ scope: 'spec',
60
+ kind: 'static',
61
+ defaultSeverity: 'info',
62
+ title: 'Entity removed in IFC4X3',
63
+ rationale: 'The entity exists in the IFC versions this specification targets but was removed in IFC4X3 (for example IfcWallElementedCase or IfcBeamStandardCase, whose instances are plain IfcWall / IfcBeam in IFC4X3). Requirements written against it will not carry over when the specification is retargeted.',
64
+ fix: 'Also match the IFC4X3 replacement (the parent class), keeping the original name so older models still match.',
65
+ example: '<specification ifcVersion="IFC4"> … <entity><name><simpleValue>IFCBEAMSTANDARDCASE</simpleValue></name></entity>',
66
+ check(spec, { ctx, doc }) {
67
+ if (spec.versions.some((v) => v.startsWith('IFC4X3')))
68
+ return [];
69
+ const ifc4x3 = tables(ctx, 'IFC4X3');
70
+ const out = [];
71
+ for (const site of entityNameSites(spec)) {
72
+ for (const name of literals(site.constraint)) {
73
+ const canonical = canonicalEntity(ctx, spec.versions, name);
74
+ if (!canonical || ifc4x3.entities.has(name.toUpperCase()))
75
+ continue;
76
+ const info = tables(ctx, spec.versions[0]).entities.get(name.toUpperCase());
77
+ const parent = REPLACED_SUFFIX.test(canonical) && info?.parent && ifc4x3.entities.has(info.parent.toUpperCase()) ? info.parent : undefined;
78
+ const fix = parent
79
+ ? quickFix(`Also match ${parent}`, this.code, site.view.facetId, `${site.field}|${name}`, [
80
+ setValues(site.view.facetId, site.field, replaceLiteral(site.constraint, name, [name, parent])),
81
+ ])
82
+ : undefined;
83
+ const already = parent && literals(site.constraint).some((v) => v.toUpperCase() === parent.toUpperCase());
84
+ if (already)
85
+ continue;
86
+ out.push({
87
+ ...at(site.view, site.field),
88
+ message: `${canonical} does not exist in IFC4X3${parent ? `; IFC4X3 models use ${parent}` : ''}`,
89
+ fixes: gated(doc, ctx, [fix]),
90
+ });
91
+ }
92
+ }
93
+ return out;
94
+ },
95
+ };
96
+ export const ENT_003 = {
97
+ code: 'IDSL-ENT-003',
98
+ area: 'ENT',
99
+ scope: 'spec',
100
+ kind: 'static',
101
+ defaultSeverity: 'info',
102
+ // Owner decision (#7144): fires on every IfcWall/IfcSlab in an IFC4 spec.
103
+ optIn: true,
104
+ title: 'Entity has subtypes the author may also mean',
105
+ rationale: 'An applicability entity matches only that exact class. Concrete subtypes (IfcWallStandardCase and IfcWallElementedCase for IfcWall in IFC4, IfcSlabStandardCase for IfcSlab, …) are not selected unless listed. This is often intended, but frequently it is not.',
106
+ fix: 'Add the concrete subtypes to the entity enumeration.',
107
+ example: '<applicability><entity><name><simpleValue>IFCWALL</simpleValue></name></entity></applicability> (IFC4)',
108
+ check(spec, { ctx, doc }) {
109
+ const out = [];
110
+ for (const view of spec.applicability) {
111
+ if (view.facet.type !== 'entity')
112
+ continue;
113
+ const listed = literals(view.facet.name);
114
+ const listedUpper = new Set(listed.map((n) => n.toUpperCase()));
115
+ for (const name of listed) {
116
+ if (spec.versions.some((v) => tables(ctx, v).entities.get(name.toUpperCase())?.abstract !== false))
117
+ continue;
118
+ const missing = concreteDescendants(ctx, spec.versions, name).filter((s) => !listedUpper.has(s.toUpperCase()));
119
+ if (!missing.length)
120
+ continue;
121
+ const canonical = canonicalEntity(ctx, spec.versions, name) ?? name;
122
+ const fix = quickFix(`Add ${listSome(missing, 3)}`, this.code, view.facetId, name, [
123
+ setValues(view.facetId, 'entity.name', replaceLiteral(view.facet.name, name, [name, ...missing])),
124
+ ]);
125
+ out.push({
126
+ ...at(view, 'entity.name'),
127
+ message: `${canonical} does not select its subtypes ${listSome(missing)}`,
128
+ fixes: gated(doc, ctx, [fix]),
129
+ });
130
+ }
131
+ }
132
+ return out;
133
+ },
134
+ };
135
+ const NOT_FOR_TYPES = new Set(['IfcRelContainedInSpatialStructure', 'IfcRelVoidsElement', 'IfcRelFillsElement']);
136
+ export const ENT_004 = {
137
+ code: 'IDSL-ENT-004',
138
+ area: 'ENT',
139
+ scope: 'spec',
140
+ kind: 'static',
141
+ defaultSeverity: 'warning',
142
+ title: 'Type entity where an occurrence is meant',
143
+ rationale: 'The applicability selects a type object (an IfcTypeObject subtype such as IfcDoorType) but the specification also uses a spatial containment, voiding or filling relation. Type objects are never contained in a storey, voided or filled; only occurrences are. Note that occurrences inherit the properties of their type, so checking the occurrence also covers type-level properties.',
144
+ fix: 'Switch the applicability to the occurrence class.',
145
+ example: '<entity><name><simpleValue>IFCDOORTYPE</simpleValue></name></entity> + <partOf relation="IFCRELCONTAINEDINSPATIALSTRUCTURE">',
146
+ check(spec, { ctx, doc }) {
147
+ const relation = [...spec.applicability, ...spec.requirements].find((f) => f.facet.type === 'partOf' && NOT_FOR_TYPES.has(f.facet.relation));
148
+ if (!relation || relation.facet.type !== 'partOf')
149
+ return [];
150
+ const out = [];
151
+ for (const view of spec.applicability) {
152
+ if (view.facet.type !== 'entity')
153
+ continue;
154
+ for (const name of literals(view.facet.name)) {
155
+ if (!spec.versions.every((v) => isSubtypeOf(tables(ctx, v), name, 'IfcTypeObject')))
156
+ continue;
157
+ const occurrence = occurrenceOf(spec.versions.map((v) => tables(ctx, v)), name);
158
+ const canonical = canonicalEntity(ctx, spec.versions, name) ?? name;
159
+ const fix = occurrence
160
+ ? quickFix(`Use ${occurrence}`, this.code, view.facetId, name, [setValues(view.facetId, 'entity.name', replaceLiteral(view.facet.name, name, [occurrence]))])
161
+ : undefined;
162
+ out.push({
163
+ ...at(view, 'entity.name'),
164
+ message: `${canonical} is a type object and cannot take part in ${relation.facet.relation}${occurrence ? `; did you mean ${occurrence}?` : ''}`,
165
+ fixes: gated(doc, ctx, [fix]),
166
+ });
167
+ }
168
+ }
169
+ return out;
170
+ },
171
+ };
172
+ /** The occurrence class whose companion type is `typeName`, in every version. */
173
+ function occurrenceOf(all, typeName) {
174
+ const upper = typeName.toUpperCase();
175
+ let found;
176
+ for (const t of all) {
177
+ let hit;
178
+ for (const e of t.entities.values()) {
179
+ if (e.typeEntity?.toUpperCase() === upper)
180
+ hit = e.name;
181
+ }
182
+ if (!hit && upper.endsWith('TYPE') && t.entities.has(upper.slice(0, -4)))
183
+ hit = t.entities.get(upper.slice(0, -4))?.name;
184
+ if (!hit || (found && found !== hit))
185
+ return undefined;
186
+ found = hit;
187
+ }
188
+ return found;
189
+ }
190
+ export const ENT_005 = {
191
+ code: 'IDSL-ENT-005',
192
+ area: 'ENT',
193
+ scope: 'spec',
194
+ kind: 'static',
195
+ defaultSeverity: 'warning',
196
+ title: 'Entity name not in upper case',
197
+ rationale: 'IDS 1.0 writes entity names in upper case (IFCWALL). Some checkers compare names case-insensitively and others reject mixed case (the buildingSMART corpus case entity/invalid-entities_must_be_specified_as_uppercase_strings), so a mixed-case name behaves differently across tools.',
198
+ fix: 'Rewrite the name in upper case.',
199
+ example: '<entity><name><simpleValue>IfcWall</simpleValue></name></entity>',
200
+ check(spec, { ctx, doc }) {
201
+ const out = [];
202
+ for (const site of entityNameSites(spec)) {
203
+ const values = literals(site.constraint);
204
+ const lower = values.filter((v) => v !== v.toUpperCase());
205
+ if (!lower.length)
206
+ continue;
207
+ const fix = quickFix('Use upper case', this.code, site.view.facetId, site.field, [
208
+ setValues(site.view.facetId, site.field, values.map((v) => v.toUpperCase())),
209
+ ]);
210
+ out.push({ ...at(site.view, site.field), message: `entity name ${lower.map((v) => `"${v}"`).join(', ')} is not upper case`, fixes: gated(doc, ctx, [fix]) });
211
+ }
212
+ return out;
213
+ },
214
+ };
215
+ //# sourceMappingURL=entity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"entity.js","sourceRoot":"","sources":["../../../src/lint/rules/entity.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ /** The static lint catalogue, in documentation order. */
2
+ import type { LintRule } from '../types.js';
3
+ export declare const LINT_RULES: readonly LintRule[];
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lint/rules/index.ts"],"names":[],"mappings":"AAIA,yDAAyD;AAEzD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAa5C,eAAO,MAAM,UAAU,EAAE,SAAS,QAAQ,EA+CzC,CAAC"}