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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (447) hide show
  1. package/LICENSE +373 -0
  2. package/README.md +469 -2
  3. package/dist/bsdd/cache.d.ts +37 -0
  4. package/dist/bsdd/cache.d.ts.map +1 -0
  5. package/dist/bsdd/cache.js +116 -0
  6. package/dist/bsdd/cache.js.map +1 -0
  7. package/dist/bsdd/contract.d.ts +31 -0
  8. package/dist/bsdd/contract.d.ts.map +1 -0
  9. package/dist/bsdd/contract.js +185 -0
  10. package/dist/bsdd/contract.js.map +1 -0
  11. package/dist/bsdd/dictionary.d.ts +42 -0
  12. package/dist/bsdd/dictionary.d.ts.map +1 -0
  13. package/dist/bsdd/dictionary.js +115 -0
  14. package/dist/bsdd/dictionary.js.map +1 -0
  15. package/dist/bsdd/generator.d.ts +82 -0
  16. package/dist/bsdd/generator.d.ts.map +1 -0
  17. package/dist/bsdd/generator.js +155 -0
  18. package/dist/bsdd/generator.js.map +1 -0
  19. package/dist/bsdd/http-source.d.ts +15 -0
  20. package/dist/bsdd/http-source.d.ts.map +1 -0
  21. package/dist/bsdd/http-source.js +196 -0
  22. package/dist/bsdd/http-source.js.map +1 -0
  23. package/dist/bsdd/idb-store.d.ts +16 -0
  24. package/dist/bsdd/idb-store.d.ts.map +1 -0
  25. package/dist/bsdd/idb-store.js +58 -0
  26. package/dist/bsdd/idb-store.js.map +1 -0
  27. package/dist/bsdd/insert.d.ts +55 -0
  28. package/dist/bsdd/insert.d.ts.map +1 -0
  29. package/dist/bsdd/insert.js +105 -0
  30. package/dist/bsdd/insert.js.map +1 -0
  31. package/dist/bsdd/mapping.d.ts +62 -0
  32. package/dist/bsdd/mapping.d.ts.map +1 -0
  33. package/dist/bsdd/mapping.js +163 -0
  34. package/dist/bsdd/mapping.js.map +1 -0
  35. package/dist/bsdd/picker.d.ts +91 -0
  36. package/dist/bsdd/picker.d.ts.map +1 -0
  37. package/dist/bsdd/picker.js +151 -0
  38. package/dist/bsdd/picker.js.map +1 -0
  39. package/dist/bsdd/types.d.ts +162 -0
  40. package/dist/bsdd/types.d.ts.map +1 -0
  41. package/dist/bsdd/types.js +26 -0
  42. package/dist/bsdd/types.js.map +1 -0
  43. package/dist/bsdd/uri-health.d.ts +65 -0
  44. package/dist/bsdd/uri-health.d.ts.map +1 -0
  45. package/dist/bsdd/uri-health.js +110 -0
  46. package/dist/bsdd/uri-health.js.map +1 -0
  47. package/dist/canonical-json.d.ts +7 -0
  48. package/dist/canonical-json.d.ts.map +1 -0
  49. package/dist/canonical-json.js +20 -0
  50. package/dist/canonical-json.js.map +1 -0
  51. package/dist/comments/view.d.ts +37 -0
  52. package/dist/comments/view.d.ts.map +1 -0
  53. package/dist/comments/view.js +61 -0
  54. package/dist/comments/view.js.map +1 -0
  55. package/dist/compound/expand.d.ts +5 -0
  56. package/dist/compound/expand.d.ts.map +1 -0
  57. package/dist/compound/expand.js +135 -0
  58. package/dist/compound/expand.js.map +1 -0
  59. package/dist/compound/from-bsdd.d.ts +9 -0
  60. package/dist/compound/from-bsdd.d.ts.map +1 -0
  61. package/dist/compound/from-bsdd.js +166 -0
  62. package/dist/compound/from-bsdd.js.map +1 -0
  63. package/dist/diff/align.d.ts +42 -0
  64. package/dist/diff/align.d.ts.map +1 -0
  65. package/dist/diff/align.js +78 -0
  66. package/dist/diff/align.js.map +1 -0
  67. package/dist/diff/changelog-text.d.ts +39 -0
  68. package/dist/diff/changelog-text.d.ts.map +1 -0
  69. package/dist/diff/changelog-text.js +120 -0
  70. package/dist/diff/changelog-text.js.map +1 -0
  71. package/dist/diff/changelog.d.ts +28 -0
  72. package/dist/diff/changelog.d.ts.map +1 -0
  73. package/dist/diff/changelog.js +173 -0
  74. package/dist/diff/changelog.js.map +1 -0
  75. package/dist/diff/compare.d.ts +25 -0
  76. package/dist/diff/compare.d.ts.map +1 -0
  77. package/dist/diff/compare.js +150 -0
  78. package/dist/diff/compare.js.map +1 -0
  79. package/dist/diff/diff.d.ts +13 -0
  80. package/dist/diff/diff.d.ts.map +1 -0
  81. package/dist/diff/diff.js +140 -0
  82. package/dist/diff/diff.js.map +1 -0
  83. package/dist/diff/index.d.ts +5 -0
  84. package/dist/diff/index.d.ts.map +1 -0
  85. package/dist/diff/index.js +7 -0
  86. package/dist/diff/index.js.map +1 -0
  87. package/dist/diff/patch.d.ts +10 -0
  88. package/dist/diff/patch.d.ts.map +1 -0
  89. package/dist/diff/patch.js +177 -0
  90. package/dist/diff/patch.js.map +1 -0
  91. package/dist/diff/types.d.ts +201 -0
  92. package/dist/diff/types.d.ts.map +1 -0
  93. package/dist/diff/types.js +5 -0
  94. package/dist/diff/types.js.map +1 -0
  95. package/dist/document/fields.d.ts +33 -0
  96. package/dist/document/fields.d.ts.map +1 -0
  97. package/dist/document/fields.js +117 -0
  98. package/dist/document/fields.js.map +1 -0
  99. package/dist/document/from-ids.d.ts +32 -0
  100. package/dist/document/from-ids.d.ts.map +1 -0
  101. package/dist/document/from-ids.js +47 -0
  102. package/dist/document/from-ids.js.map +1 -0
  103. package/dist/document/node-index.d.ts +32 -0
  104. package/dist/document/node-index.d.ts.map +1 -0
  105. package/dist/document/node-index.js +127 -0
  106. package/dist/document/node-index.js.map +1 -0
  107. package/dist/document/types.d.ts +170 -0
  108. package/dist/document/types.d.ts.map +1 -0
  109. package/dist/document/types.js +19 -0
  110. package/dist/document/types.js.map +1 -0
  111. package/dist/gate/bsdd.d.ts +12 -0
  112. package/dist/gate/bsdd.d.ts.map +1 -0
  113. package/dist/gate/bsdd.js +17 -0
  114. package/dist/gate/bsdd.js.map +1 -0
  115. package/dist/gate/check.d.ts +6 -0
  116. package/dist/gate/check.d.ts.map +1 -0
  117. package/dist/gate/check.js +125 -0
  118. package/dist/gate/check.js.map +1 -0
  119. package/dist/gate/context.d.ts +51 -0
  120. package/dist/gate/context.d.ts.map +1 -0
  121. package/dist/gate/context.js +74 -0
  122. package/dist/gate/context.js.map +1 -0
  123. package/dist/gate/grounding-pset.d.ts +5 -0
  124. package/dist/gate/grounding-pset.d.ts.map +1 -0
  125. package/dist/gate/grounding-pset.js +179 -0
  126. package/dist/gate/grounding-pset.js.map +1 -0
  127. package/dist/gate/grounding.d.ts +48 -0
  128. package/dist/gate/grounding.d.ts.map +1 -0
  129. package/dist/gate/grounding.js +146 -0
  130. package/dist/gate/grounding.js.map +1 -0
  131. package/dist/gate/rank.d.ts +28 -0
  132. package/dist/gate/rank.d.ts.map +1 -0
  133. package/dist/gate/rank.js +68 -0
  134. package/dist/gate/rank.js.map +1 -0
  135. package/dist/gate/structural.d.ts +43 -0
  136. package/dist/gate/structural.d.ts.map +1 -0
  137. package/dist/gate/structural.js +175 -0
  138. package/dist/gate/structural.js.map +1 -0
  139. package/dist/gate/types.d.ts +45 -0
  140. package/dist/gate/types.d.ts.map +1 -0
  141. package/dist/gate/types.js +5 -0
  142. package/dist/gate/types.js.map +1 -0
  143. package/dist/gate/values.d.ts +19 -0
  144. package/dist/gate/values.d.ts.map +1 -0
  145. package/dist/gate/values.js +124 -0
  146. package/dist/gate/values.js.map +1 -0
  147. package/dist/headless/apply-gated.d.ts +32 -0
  148. package/dist/headless/apply-gated.d.ts.map +1 -0
  149. package/dist/headless/apply-gated.js +26 -0
  150. package/dist/headless/apply-gated.js.map +1 -0
  151. package/dist/headless/diff.d.ts +41 -0
  152. package/dist/headless/diff.d.ts.map +1 -0
  153. package/dist/headless/diff.js +116 -0
  154. package/dist/headless/diff.js.map +1 -0
  155. package/dist/headless/node-path.d.ts +10 -0
  156. package/dist/headless/node-path.d.ts.map +1 -0
  157. package/dist/headless/node-path.js +24 -0
  158. package/dist/headless/node-path.js.map +1 -0
  159. package/dist/headless/read.d.ts +26 -0
  160. package/dist/headless/read.d.ts.map +1 -0
  161. package/dist/headless/read.js +78 -0
  162. package/dist/headless/read.js.map +1 -0
  163. package/dist/headless/schema-lookup.d.ts +52 -0
  164. package/dist/headless/schema-lookup.d.ts.map +1 -0
  165. package/dist/headless/schema-lookup.js +77 -0
  166. package/dist/headless/schema-lookup.js.map +1 -0
  167. package/dist/headless/write.d.ts +46 -0
  168. package/dist/headless/write.d.ts.map +1 -0
  169. package/dist/headless/write.js +103 -0
  170. package/dist/headless/write.js.map +1 -0
  171. package/dist/history/history.d.ts +90 -0
  172. package/dist/history/history.d.ts.map +1 -0
  173. package/dist/history/history.js +86 -0
  174. package/dist/history/history.js.map +1 -0
  175. package/dist/history/persistence.d.ts +33 -0
  176. package/dist/history/persistence.d.ts.map +1 -0
  177. package/dist/history/persistence.js +71 -0
  178. package/dist/history/persistence.js.map +1 -0
  179. package/dist/index.d.ts +55 -0
  180. package/dist/index.d.ts.map +1 -0
  181. package/dist/index.js +75 -0
  182. package/dist/index.js.map +1 -0
  183. package/dist/lint/context.d.ts +15 -0
  184. package/dist/lint/context.d.ts.map +1 -0
  185. package/dist/lint/context.js +24 -0
  186. package/dist/lint/context.js.map +1 -0
  187. package/dist/lint/docs.d.ts +18 -0
  188. package/dist/lint/docs.d.ts.map +1 -0
  189. package/dist/lint/docs.js +117 -0
  190. package/dist/lint/docs.js.map +1 -0
  191. package/dist/lint/engine.d.ts +21 -0
  192. package/dist/lint/engine.d.ts.map +1 -0
  193. package/dist/lint/engine.js +123 -0
  194. package/dist/lint/engine.js.map +1 -0
  195. package/dist/lint/fix.d.ts +27 -0
  196. package/dist/lint/fix.d.ts.map +1 -0
  197. package/dist/lint/fix.js +22 -0
  198. package/dist/lint/fix.js.map +1 -0
  199. package/dist/lint/precision.d.ts +51 -0
  200. package/dist/lint/precision.d.ts.map +1 -0
  201. package/dist/lint/precision.js +64 -0
  202. package/dist/lint/precision.js.map +1 -0
  203. package/dist/lint/rules/bsdd.d.ts +5 -0
  204. package/dist/lint/rules/bsdd.d.ts.map +1 -0
  205. package/dist/lint/rules/bsdd.js +123 -0
  206. package/dist/lint/rules/bsdd.js.map +1 -0
  207. package/dist/lint/rules/card.d.ts +10 -0
  208. package/dist/lint/rules/card.d.ts.map +1 -0
  209. package/dist/lint/rules/card.js +140 -0
  210. package/dist/lint/rules/card.js.map +1 -0
  211. package/dist/lint/rules/doc-ver-part.d.ts +7 -0
  212. package/dist/lint/rules/doc-ver-part.d.ts.map +1 -0
  213. package/dist/lint/rules/doc-ver-part.js +155 -0
  214. package/dist/lint/rules/doc-ver-part.js.map +1 -0
  215. package/dist/lint/rules/entity.d.ts +12 -0
  216. package/dist/lint/rules/entity.d.ts.map +1 -0
  217. package/dist/lint/rules/entity.js +215 -0
  218. package/dist/lint/rules/entity.js.map +1 -0
  219. package/dist/lint/rules/index.d.ts +4 -0
  220. package/dist/lint/rules/index.d.ts.map +1 -0
  221. package/dist/lint/rules/index.js +63 -0
  222. package/dist/lint/rules/index.js.map +1 -0
  223. package/dist/lint/rules/pdt-att.d.ts +7 -0
  224. package/dist/lint/rules/pdt-att.d.ts.map +1 -0
  225. package/dist/lint/rules/pdt-att.js +209 -0
  226. package/dist/lint/rules/pdt-att.js.map +1 -0
  227. package/dist/lint/rules/pset.d.ts +12 -0
  228. package/dist/lint/rules/pset.d.ts.map +1 -0
  229. package/dist/lint/rules/pset.js +263 -0
  230. package/dist/lint/rules/pset.js.map +1 -0
  231. package/dist/lint/rules/regex.d.ts +6 -0
  232. package/dist/lint/rules/regex.d.ts.map +1 -0
  233. package/dist/lint/rules/regex.js +184 -0
  234. package/dist/lint/rules/regex.js.map +1 -0
  235. package/dist/lint/rules/spec-doc.d.ts +5 -0
  236. package/dist/lint/rules/spec-doc.d.ts.map +1 -0
  237. package/dist/lint/rules/spec-doc.js +132 -0
  238. package/dist/lint/rules/spec-doc.js.map +1 -0
  239. package/dist/lint/rules/spec.d.ts +24 -0
  240. package/dist/lint/rules/spec.d.ts.map +1 -0
  241. package/dist/lint/rules/spec.js +162 -0
  242. package/dist/lint/rules/spec.js.map +1 -0
  243. package/dist/lint/rules/units.d.ts +4 -0
  244. package/dist/lint/rules/units.d.ts.map +1 -0
  245. package/dist/lint/rules/units.js +101 -0
  246. package/dist/lint/rules/units.js.map +1 -0
  247. package/dist/lint/rules/util.d.ts +37 -0
  248. package/dist/lint/rules/util.d.ts.map +1 -0
  249. package/dist/lint/rules/util.js +117 -0
  250. package/dist/lint/rules/util.js.map +1 -0
  251. package/dist/lint/rules/value-sites.d.ts +28 -0
  252. package/dist/lint/rules/value-sites.d.ts.map +1 -0
  253. package/dist/lint/rules/value-sites.js +81 -0
  254. package/dist/lint/rules/value-sites.js.map +1 -0
  255. package/dist/lint/rules/values.d.ts +22 -0
  256. package/dist/lint/rules/values.d.ts.map +1 -0
  257. package/dist/lint/rules/values.js +237 -0
  258. package/dist/lint/rules/values.js.map +1 -0
  259. package/dist/lint/rules/xsd-regex.d.ts +34 -0
  260. package/dist/lint/rules/xsd-regex.d.ts.map +1 -0
  261. package/dist/lint/rules/xsd-regex.js +149 -0
  262. package/dist/lint/rules/xsd-regex.js.map +1 -0
  263. package/dist/lint/solver/sample.d.ts +3 -0
  264. package/dist/lint/solver/sample.d.ts.map +1 -0
  265. package/dist/lint/solver/sample.js +134 -0
  266. package/dist/lint/solver/sample.js.map +1 -0
  267. package/dist/lint/solver/solver.d.ts +39 -0
  268. package/dist/lint/solver/solver.d.ts.map +1 -0
  269. package/dist/lint/solver/solver.js +126 -0
  270. package/dist/lint/solver/solver.js.map +1 -0
  271. package/dist/lint/suppress.d.ts +12 -0
  272. package/dist/lint/suppress.d.ts.map +1 -0
  273. package/dist/lint/suppress.js +56 -0
  274. package/dist/lint/suppress.js.map +1 -0
  275. package/dist/lint/types.d.ts +162 -0
  276. package/dist/lint/types.d.ts.map +1 -0
  277. package/dist/lint/types.js +5 -0
  278. package/dist/lint/types.js.map +1 -0
  279. package/dist/lint/walk.d.ts +20 -0
  280. package/dist/lint/walk.d.ts.map +1 -0
  281. package/dist/lint/walk.js +47 -0
  282. package/dist/lint/walk.js.map +1 -0
  283. package/dist/match/cascade.d.ts +53 -0
  284. package/dist/match/cascade.d.ts.map +1 -0
  285. package/dist/match/cascade.js +135 -0
  286. package/dist/match/cascade.js.map +1 -0
  287. package/dist/match/reidentify.d.ts +46 -0
  288. package/dist/match/reidentify.d.ts.map +1 -0
  289. package/dist/match/reidentify.js +67 -0
  290. package/dist/match/reidentify.js.map +1 -0
  291. package/dist/merge/comments.d.ts +13 -0
  292. package/dist/merge/comments.d.ts.map +1 -0
  293. package/dist/merge/comments.js +61 -0
  294. package/dist/merge/comments.js.map +1 -0
  295. package/dist/merge/index.d.ts +4 -0
  296. package/dist/merge/index.d.ts.map +1 -0
  297. package/dist/merge/index.js +6 -0
  298. package/dist/merge/index.js.map +1 -0
  299. package/dist/merge/keys.d.ts +22 -0
  300. package/dist/merge/keys.d.ts.map +1 -0
  301. package/dist/merge/keys.js +54 -0
  302. package/dist/merge/keys.js.map +1 -0
  303. package/dist/merge/merge.d.ts +8 -0
  304. package/dist/merge/merge.d.ts.map +1 -0
  305. package/dist/merge/merge.js +206 -0
  306. package/dist/merge/merge.js.map +1 -0
  307. package/dist/merge/order.d.ts +11 -0
  308. package/dist/merge/order.d.ts.map +1 -0
  309. package/dist/merge/order.js +117 -0
  310. package/dist/merge/order.js.map +1 -0
  311. package/dist/merge/sidecar.d.ts +12 -0
  312. package/dist/merge/sidecar.d.ts.map +1 -0
  313. package/dist/merge/sidecar.js +64 -0
  314. package/dist/merge/sidecar.js.map +1 -0
  315. package/dist/merge/types.d.ts +50 -0
  316. package/dist/merge/types.d.ts.map +1 -0
  317. package/dist/merge/types.js +5 -0
  318. package/dist/merge/types.js.map +1 -0
  319. package/dist/merge/view.d.ts +28 -0
  320. package/dist/merge/view.d.ts.map +1 -0
  321. package/dist/merge/view.js +35 -0
  322. package/dist/merge/view.js.map +1 -0
  323. package/dist/ops/draft.d.ts +33 -0
  324. package/dist/ops/draft.d.ts.map +1 -0
  325. package/dist/ops/draft.js +253 -0
  326. package/dist/ops/draft.js.map +1 -0
  327. package/dist/ops/json-schema-lite.d.ts +41 -0
  328. package/dist/ops/json-schema-lite.d.ts.map +1 -0
  329. package/dist/ops/json-schema-lite.js +119 -0
  330. package/dist/ops/json-schema-lite.js.map +1 -0
  331. package/dist/ops/schema-values.d.ts +5 -0
  332. package/dist/ops/schema-values.d.ts.map +1 -0
  333. package/dist/ops/schema-values.js +233 -0
  334. package/dist/ops/schema-values.js.map +1 -0
  335. package/dist/ops/schema.d.ts +27 -0
  336. package/dist/ops/schema.d.ts.map +1 -0
  337. package/dist/ops/schema.js +258 -0
  338. package/dist/ops/schema.js.map +1 -0
  339. package/dist/ops/sidecar-ops.d.ts +85 -0
  340. package/dist/ops/sidecar-ops.d.ts.map +1 -0
  341. package/dist/ops/sidecar-ops.js +5 -0
  342. package/dist/ops/sidecar-ops.js.map +1 -0
  343. package/dist/ops/types.d.ts +400 -0
  344. package/dist/ops/types.d.ts.map +1 -0
  345. package/dist/ops/types.js +5 -0
  346. package/dist/ops/types.js.map +1 -0
  347. package/dist/ops/units.d.ts +4 -0
  348. package/dist/ops/units.d.ts.map +1 -0
  349. package/dist/ops/units.js +75 -0
  350. package/dist/ops/units.js.map +1 -0
  351. package/dist/reducer/apply.d.ts +33 -0
  352. package/dist/reducer/apply.d.ts.map +1 -0
  353. package/dist/reducer/apply.js +123 -0
  354. package/dist/reducer/apply.js.map +1 -0
  355. package/dist/reducer/comment-ops.d.ts +18 -0
  356. package/dist/reducer/comment-ops.d.ts.map +1 -0
  357. package/dist/reducer/comment-ops.js +104 -0
  358. package/dist/reducer/comment-ops.js.map +1 -0
  359. package/dist/reducer/edit.d.ts +38 -0
  360. package/dist/reducer/edit.d.ts.map +1 -0
  361. package/dist/reducer/edit.js +126 -0
  362. package/dist/reducer/edit.js.map +1 -0
  363. package/dist/reducer/facet-ops.d.ts +20 -0
  364. package/dist/reducer/facet-ops.d.ts.map +1 -0
  365. package/dist/reducer/facet-ops.js +184 -0
  366. package/dist/reducer/facet-ops.js.map +1 -0
  367. package/dist/reducer/meta-ops.d.ts +20 -0
  368. package/dist/reducer/meta-ops.d.ts.map +1 -0
  369. package/dist/reducer/meta-ops.js +52 -0
  370. package/dist/reducer/meta-ops.js.map +1 -0
  371. package/dist/reducer/spec-ops.d.ts +29 -0
  372. package/dist/reducer/spec-ops.d.ts.map +1 -0
  373. package/dist/reducer/spec-ops.js +181 -0
  374. package/dist/reducer/spec-ops.js.map +1 -0
  375. package/dist/reducer/test-ops.d.ts +15 -0
  376. package/dist/reducer/test-ops.d.ts.map +1 -0
  377. package/dist/reducer/test-ops.js +90 -0
  378. package/dist/reducer/test-ops.js.map +1 -0
  379. package/dist/reducer/value-ops.d.ts +26 -0
  380. package/dist/reducer/value-ops.d.ts.map +1 -0
  381. package/dist/reducer/value-ops.js +173 -0
  382. package/dist/reducer/value-ops.js.map +1 -0
  383. package/dist/render/describe.d.ts +20 -0
  384. package/dist/render/describe.d.ts.map +1 -0
  385. package/dist/render/describe.js +47 -0
  386. package/dist/render/describe.js.map +1 -0
  387. package/dist/revision/index.d.ts +4 -0
  388. package/dist/revision/index.d.ts.map +1 -0
  389. package/dist/revision/index.js +7 -0
  390. package/dist/revision/index.js.map +1 -0
  391. package/dist/revision/revision.d.ts +79 -0
  392. package/dist/revision/revision.d.ts.map +1 -0
  393. package/dist/revision/revision.js +120 -0
  394. package/dist/revision/revision.js.map +1 -0
  395. package/dist/revision/sha256.d.ts +3 -0
  396. package/dist/revision/sha256.d.ts.map +1 -0
  397. package/dist/revision/sha256.js +69 -0
  398. package/dist/revision/sha256.js.map +1 -0
  399. package/dist/revision/verify.d.ts +21 -0
  400. package/dist/revision/verify.d.ts.map +1 -0
  401. package/dist/revision/verify.js +51 -0
  402. package/dist/revision/verify.js.map +1 -0
  403. package/dist/revision/view.d.ts +36 -0
  404. package/dist/revision/view.d.ts.map +1 -0
  405. package/dist/revision/view.js +32 -0
  406. package/dist/revision/view.js.map +1 -0
  407. package/dist/sidecar/idsz.d.ts +14 -0
  408. package/dist/sidecar/idsz.d.ts.map +1 -0
  409. package/dist/sidecar/idsz.js +58 -0
  410. package/dist/sidecar/idsz.js.map +1 -0
  411. package/dist/sidecar/sidecar-schema.d.ts +4 -0
  412. package/dist/sidecar/sidecar-schema.d.ts.map +1 -0
  413. package/dist/sidecar/sidecar-schema.js +69 -0
  414. package/dist/sidecar/sidecar-schema.js.map +1 -0
  415. package/dist/sidecar/sidecar.d.ts +102 -0
  416. package/dist/sidecar/sidecar.d.ts.map +1 -0
  417. package/dist/sidecar/sidecar.js +160 -0
  418. package/dist/sidecar/sidecar.js.map +1 -0
  419. package/dist/testing/index.d.ts +6 -0
  420. package/dist/testing/index.d.ts.map +1 -0
  421. package/dist/testing/index.js +8 -0
  422. package/dist/testing/index.js.map +1 -0
  423. package/dist/testing/junit.d.ts +10 -0
  424. package/dist/testing/junit.d.ts.map +1 -0
  425. package/dist/testing/junit.js +51 -0
  426. package/dist/testing/junit.js.map +1 -0
  427. package/dist/testing/outcome.d.ts +10 -0
  428. package/dist/testing/outcome.d.ts.map +1 -0
  429. package/dist/testing/outcome.js +22 -0
  430. package/dist/testing/outcome.js.map +1 -0
  431. package/dist/testing/runner.d.ts +72 -0
  432. package/dist/testing/runner.d.ts.map +1 -0
  433. package/dist/testing/runner.js +60 -0
  434. package/dist/testing/runner.js.map +1 -0
  435. package/dist/testing/types.d.ts +60 -0
  436. package/dist/testing/types.d.ts.map +1 -0
  437. package/dist/testing/types.js +5 -0
  438. package/dist/testing/types.js.map +1 -0
  439. package/dist/testing/view.d.ts +31 -0
  440. package/dist/testing/view.d.ts.map +1 -0
  441. package/dist/testing/view.js +30 -0
  442. package/dist/testing/view.js.map +1 -0
  443. package/dist/uuid.d.ts +39 -0
  444. package/dist/uuid.d.ts.map +1 -0
  445. package/dist/uuid.js +84 -0
  446. package/dist/uuid.js.map +1 -0
  447. package/package.json +56 -3
@@ -0,0 +1,39 @@
1
+ /**
2
+ * Constraint intersection solver (03-diagnostics-audit-lint.md §3, SPEC-001
3
+ * / SPEC-002 / SPEC-003).
4
+ *
5
+ * Answers are three-valued. `'yes'` and `'no'` are only returned when they
6
+ * are certain:
7
+ *
8
+ * - finite sets (simpleValue, enumeration) are decided exactly by membership,
9
+ * using the validator's own `matchConstraint` (so `and` siblings, numeric
10
+ * casting and pattern translation agree with what a check would do);
11
+ * - numeric intervals are decided exactly;
12
+ * - patterns can only be proven to OVERLAP, by a sampled witness that the
13
+ * validator accepts under both constraints. Disjointness or containment of
14
+ * two patterns is never claimed (`'unknown'`).
15
+ */
16
+ import { type IDSConstraint } from '@ifc-lite/ids';
17
+ export type Tri = 'yes' | 'no' | 'unknown';
18
+ export interface SolveOptions {
19
+ /** Entity names compare case-insensitively; values do not. */
20
+ caseInsensitive?: boolean;
21
+ }
22
+ /** Does `v` satisfy `c`, as a string or (when numeric) as a number? */
23
+ export declare function member(c: IDSConstraint, v: string, opts?: SolveOptions): boolean;
24
+ /** The finite value set of a constraint, or undefined when it is not finite. */
25
+ export declare function finiteValues(c: IDSConstraint, opts?: SolveOptions): string[] | undefined;
26
+ interface Interval {
27
+ lo: number;
28
+ loEx: boolean;
29
+ hi: number;
30
+ hiEx: boolean;
31
+ }
32
+ /** The numeric interval of a pure bounds constraint. */
33
+ export declare function interval(c: IDSConstraint): Interval | undefined;
34
+ /** Is there a value satisfying both `a` and `b`? */
35
+ export declare function overlaps(a: IDSConstraint, b: IDSConstraint, opts?: SolveOptions): Tri;
36
+ /** Does every value satisfying `a` also satisfy `b`? */
37
+ export declare function implies(a: IDSConstraint, b: IDSConstraint, opts?: SolveOptions): Tri;
38
+ export {};
39
+ //# sourceMappingURL=solver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"solver.d.ts","sourceRoot":"","sources":["../../../src/lint/solver/solver.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAA6C,KAAK,aAAa,EAAE,MAAM,eAAe,CAAC;AAG9F,MAAM,MAAM,GAAG,GAAG,KAAK,GAAG,IAAI,GAAG,SAAS,CAAC;AAE3C,MAAM,WAAW,YAAY;IAC3B,8DAA8D;IAC9D,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAID,uEAAuE;AACvE,wBAAgB,MAAM,CAAC,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,GAAE,YAAiB,GAAG,OAAO,CAIpF;AAED,gFAAgF;AAChF,wBAAgB,YAAY,CAAC,CAAC,EAAE,aAAa,EAAE,IAAI,GAAE,YAAiB,GAAG,MAAM,EAAE,GAAG,SAAS,CAM5F;AAED,UAAU,QAAQ;IAChB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,OAAO,CAAC;IACd,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,OAAO,CAAC;CACf;AAID,wDAAwD;AACxD,wBAAgB,QAAQ,CAAC,CAAC,EAAE,aAAa,GAAG,QAAQ,GAAG,SAAS,CAY/D;AAyCD,oDAAoD;AACpD,wBAAgB,QAAQ,CAAC,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE,aAAa,EAAE,IAAI,GAAE,YAAiB,GAAG,GAAG,CAUzF;AAED,wDAAwD;AACxD,wBAAgB,OAAO,CAAC,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE,aAAa,EAAE,IAAI,GAAE,YAAiB,GAAG,GAAG,CASxF"}
@@ -0,0 +1,126 @@
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
+ * Constraint intersection solver (03-diagnostics-audit-lint.md §3, SPEC-001
6
+ * / SPEC-002 / SPEC-003).
7
+ *
8
+ * Answers are three-valued. `'yes'` and `'no'` are only returned when they
9
+ * are certain:
10
+ *
11
+ * - finite sets (simpleValue, enumeration) are decided exactly by membership,
12
+ * using the validator's own `matchConstraint` (so `and` siblings, numeric
13
+ * casting and pattern translation agree with what a check would do);
14
+ * - numeric intervals are decided exactly;
15
+ * - patterns can only be proven to OVERLAP, by a sampled witness that the
16
+ * validator accepts under both constraints. Disjointness or containment of
17
+ * two patterns is never claimed (`'unknown'`).
18
+ */
19
+ import { matchConstraint } from '@ifc-lite/ids';
20
+ import { samplePattern } from './sample.js';
21
+ const NUMBER = /^[+-]?(\d+(\.\d*)?|\.\d+)([eE][+-]?\d+)?$/;
22
+ /** Does `v` satisfy `c`, as a string or (when numeric) as a number? */
23
+ export function member(c, v, opts = {}) {
24
+ const o = { caseInsensitive: opts.caseInsensitive ?? false };
25
+ if (matchConstraint(c, v, o))
26
+ return true;
27
+ return NUMBER.test(v.trim()) && matchConstraint(c, Number(v), o);
28
+ }
29
+ /** The finite value set of a constraint, or undefined when it is not finite. */
30
+ export function finiteValues(c, opts = {}) {
31
+ let values;
32
+ if (c.type === 'simpleValue')
33
+ values = [c.value];
34
+ else if (c.type === 'enumeration')
35
+ values = c.values;
36
+ else if (c.type === 'bounds' && point(c) !== undefined)
37
+ values = [String(point(c))];
38
+ return values?.filter((v) => member(c, v, opts));
39
+ }
40
+ const LENGTH_OR_DIGITS = ['length', 'minLength', 'maxLength', 'totalDigits', 'fractionDigits'];
41
+ /** The numeric interval of a pure bounds constraint. */
42
+ export function interval(c) {
43
+ if (c.type !== 'bounds' || c.and?.length || c.unparseableFacets?.length)
44
+ return undefined;
45
+ if (LENGTH_OR_DIGITS.some((k) => c[k] !== undefined))
46
+ return undefined;
47
+ const lo = c.minInclusive ?? c.minExclusive;
48
+ const hi = c.maxInclusive ?? c.maxExclusive;
49
+ if (lo === undefined && hi === undefined)
50
+ return undefined;
51
+ return {
52
+ lo: lo ?? -Infinity,
53
+ loEx: c.minInclusive === undefined && c.minExclusive !== undefined,
54
+ hi: hi ?? Infinity,
55
+ hiEx: c.maxInclusive === undefined && c.maxExclusive !== undefined,
56
+ };
57
+ }
58
+ function point(c) {
59
+ const i = interval(c);
60
+ return i && i.lo === i.hi && !i.loEx && !i.hiEx ? i.lo : undefined;
61
+ }
62
+ function intervalsOverlap(a, b) {
63
+ const lo = Math.max(a.lo, b.lo);
64
+ const hi = Math.min(a.hi, b.hi);
65
+ if (lo < hi)
66
+ return true;
67
+ if (lo > hi)
68
+ return false;
69
+ const loEx = (a.lo === lo && a.loEx) || (b.lo === lo && b.loEx);
70
+ const hiEx = (a.hi === hi && a.hiEx) || (b.hi === hi && b.hiEx);
71
+ return !loEx && !hiEx;
72
+ }
73
+ function intervalWithin(a, b) {
74
+ const loOk = a.lo > b.lo || (a.lo === b.lo && (!b.loEx || a.loEx));
75
+ const hiOk = a.hi < b.hi || (a.hi === b.hi && (!b.hiEx || a.hiEx));
76
+ return loOk && hiOk;
77
+ }
78
+ function patternsOf(c) {
79
+ const own = c.type === 'pattern' ? [c.pattern] : [];
80
+ const siblings = c.type === 'simpleValue' ? [] : (c.and ?? []).flatMap((s) => (s.type === 'pattern' ? [s.pattern] : []));
81
+ return [...own, ...siblings];
82
+ }
83
+ /** A sampled value that satisfies both constraints, if one is found. */
84
+ function witness(a, b, opts) {
85
+ for (const p of [...patternsOf(a), ...patternsOf(b)]) {
86
+ for (const s of samplePattern(p))
87
+ if (member(a, s, opts) && member(b, s, opts))
88
+ return s;
89
+ }
90
+ return undefined;
91
+ }
92
+ function sameConstraint(a, b) {
93
+ return JSON.stringify(a) === JSON.stringify(b);
94
+ }
95
+ /** Is there a value satisfying both `a` and `b`? */
96
+ export function overlaps(a, b, opts = {}) {
97
+ if (sameConstraint(a, b))
98
+ return finiteValues(a, opts)?.length === 0 ? 'no' : 'yes';
99
+ const fa = finiteValues(a, opts);
100
+ if (fa)
101
+ return fa.some((v) => member(b, v, opts)) ? 'yes' : 'no';
102
+ const fb = finiteValues(b, opts);
103
+ if (fb)
104
+ return fb.some((v) => member(a, v, opts)) ? 'yes' : 'no';
105
+ const ia = interval(a);
106
+ const ib = interval(b);
107
+ if (ia && ib)
108
+ return intervalsOverlap(ia, ib) ? 'yes' : 'no';
109
+ return witness(a, b, opts) !== undefined ? 'yes' : 'unknown';
110
+ }
111
+ /** Does every value satisfying `a` also satisfy `b`? */
112
+ export function implies(a, b, opts = {}) {
113
+ if (sameConstraint(a, b))
114
+ return 'yes';
115
+ const fa = finiteValues(a, opts);
116
+ if (fa)
117
+ return fa.every((v) => member(b, v, opts)) ? 'yes' : 'no';
118
+ const ia = interval(a);
119
+ const ib = interval(b);
120
+ if (ia && ib)
121
+ return intervalWithin(ia, ib) ? 'yes' : 'no';
122
+ if (ia && finiteValues(b, opts))
123
+ return 'no'; // a non-degenerate interval is infinite
124
+ return 'unknown';
125
+ }
126
+ //# sourceMappingURL=solver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"solver.js","sourceRoot":"","sources":["../../../src/lint/solver/solver.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import type { StudioDocument, Suppression } from '../document/types.js';
2
+ import type { Uuid } from '../uuid.js';
3
+ import type { Diagnostic, SuppressedDiagnostic } from './types.js';
4
+ /** The node and its ancestors, most specific first. */
5
+ export declare function ancestry(doc: StudioDocument, nodeId: Uuid): Uuid[];
6
+ export declare function suppressionMatches(s: Suppression, code: string): boolean;
7
+ /** Split diagnostics into active and suppressed ones. */
8
+ export declare function applySuppressions(doc: StudioDocument, diagnostics: readonly Diagnostic[]): {
9
+ active: Diagnostic[];
10
+ suppressed: SuppressedDiagnostic[];
11
+ };
12
+ //# sourceMappingURL=suppress.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"suppress.d.ts","sourceRoot":"","sources":["../../src/lint/suppress.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACxE,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,KAAK,EAAE,UAAU,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAEnE,uDAAuD;AACvD,wBAAgB,QAAQ,CAAC,GAAG,EAAE,cAAc,EAAE,MAAM,EAAE,IAAI,GAAG,IAAI,EAAE,CAOlE;AAED,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAIxE;AAED,yDAAyD;AACzD,wBAAgB,iBAAiB,CAC/B,GAAG,EAAE,cAAc,EACnB,WAAW,EAAE,SAAS,UAAU,EAAE,GACjC;IAAE,MAAM,EAAE,UAAU,EAAE,CAAC;IAAC,UAAU,EAAE,oBAAoB,EAAE,CAAA;CAAE,CAkB9D"}
@@ -0,0 +1,56 @@
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
+ * Suppressions (`StudioMeta.suppressions`, keyed by node id).
6
+ *
7
+ * A suppression attached to a node silences a rule on that node and on
8
+ * every node below it (constraint → facet → specification → document).
9
+ * `rule` is a full code (`IDSL-SPEC-008`) or an area wildcard
10
+ * (`IDSL-SPEC-*`). A suppression must carry a non-empty `reason`; one
11
+ * without a reason is ignored, so the finding stays visible.
12
+ */
13
+ import { locateNode } from '../document/node-index.js';
14
+ /** The node and its ancestors, most specific first. */
15
+ export function ancestry(doc, nodeId) {
16
+ const loc = locateNode(doc, nodeId);
17
+ const chain = [nodeId];
18
+ if (loc && loc.kind === 'constraint')
19
+ chain.push(loc.facetId, loc.specId);
20
+ else if (loc && (loc.kind === 'applicabilityFacet' || loc.kind === 'requirement'))
21
+ chain.push(loc.specId);
22
+ if (nodeId !== doc.nodes.document)
23
+ chain.push(doc.nodes.document);
24
+ return chain;
25
+ }
26
+ export function suppressionMatches(s, code) {
27
+ if (s.reason.trim() === '')
28
+ return false;
29
+ if (s.rule === code)
30
+ return true;
31
+ return s.rule.endsWith('*') && code.startsWith(s.rule.slice(0, -1));
32
+ }
33
+ /** Split diagnostics into active and suppressed ones. */
34
+ export function applySuppressions(doc, diagnostics) {
35
+ const all = doc.meta.suppressions;
36
+ const active = [];
37
+ const suppressed = [];
38
+ if (Object.keys(all).length === 0)
39
+ return { active: [...diagnostics], suppressed };
40
+ for (const d of diagnostics) {
41
+ let hit;
42
+ for (const nodeId of ancestry(doc, d.nodeId)) {
43
+ const s = (all[nodeId] ?? []).find((x) => suppressionMatches(x, d.code));
44
+ if (s) {
45
+ hit = { diagnostic: d, suppressedAt: nodeId, suppression: s };
46
+ break;
47
+ }
48
+ }
49
+ if (hit)
50
+ suppressed.push(hit);
51
+ else
52
+ active.push(d);
53
+ }
54
+ return { active, suppressed };
55
+ }
56
+ //# sourceMappingURL=suppress.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"suppress.js","sourceRoot":"","sources":["../../src/lint/suppress.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAE/D;;;;;;;;GAQG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAKvD,uDAAuD;AACvD,MAAM,UAAU,QAAQ,CAAC,GAAmB,EAAE,MAAY;IACxD,MAAM,GAAG,GAAG,UAAU,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IACpC,MAAM,KAAK,GAAG,CAAC,MAAM,CAAC,CAAC;IACvB,IAAI,GAAG,IAAI,GAAG,CAAC,IAAI,KAAK,YAAY;QAAE,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;SACrE,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,KAAK,oBAAoB,IAAI,GAAG,CAAC,IAAI,KAAK,aAAa,CAAC;QAAE,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAC1G,IAAI,MAAM,KAAK,GAAG,CAAC,KAAK,CAAC,QAAQ;QAAE,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAClE,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,CAAc,EAAE,IAAY;IAC7D,IAAI,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE;QAAE,OAAO,KAAK,CAAC;IACzC,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IACjC,OAAO,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AACtE,CAAC;AAED,yDAAyD;AACzD,MAAM,UAAU,iBAAiB,CAC/B,GAAmB,EACnB,WAAkC;IAElC,MAAM,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC;IAClC,MAAM,MAAM,GAAiB,EAAE,CAAC;IAChC,MAAM,UAAU,GAA2B,EAAE,CAAC;IAC9C,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,MAAM,EAAE,CAAC,GAAG,WAAW,CAAC,EAAE,UAAU,EAAE,CAAC;IACnF,KAAK,MAAM,CAAC,IAAI,WAAW,EAAE,CAAC;QAC5B,IAAI,GAAqC,CAAC;QAC1C,KAAK,MAAM,MAAM,IAAI,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC;YAC7C,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,kBAAkB,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;YACzE,IAAI,CAAC,EAAE,CAAC;gBACN,GAAG,GAAG,EAAE,UAAU,EAAE,CAAC,EAAE,YAAY,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,EAAE,CAAC;gBAC9D,MAAM;YACR,CAAC;QACH,CAAC;QACD,IAAI,GAAG;YAAE,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;;YACzB,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACtB,CAAC;IACD,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC;AAChC,CAAC"}
@@ -0,0 +1,162 @@
1
+ /**
2
+ * Lint shapes (03-diagnostics-audit-lint.md §1, §4).
3
+ *
4
+ * Lint answers "does this IDS mean what the author intends?", where the
5
+ * audit answers "is this a valid IDS 1.0 file?". Every surface (UI, agent,
6
+ * CLI, MCP) consumes the same `Diagnostic[]`.
7
+ *
8
+ * A quick fix is DATA: a labelled batch of Studio ops. Nothing in lint
9
+ * mutates a document; a host checks the batch with `checkOps` (the
10
+ * grounding gate) and commits it like any other edit. Fixes are never
11
+ * applied automatically.
12
+ */
13
+ import type { IfcAttributeInfo, IfcSchemaVersion } from '@ifc-lite/data';
14
+ import type { IDSFacet, IDSRequirement, IDSSpecification, IFCVersion } from '@ifc-lite/ids';
15
+ import type { FacetFieldName } from '../document/fields.js';
16
+ import type { Section, SpecNodes, StudioDocument, Suppression } from '../document/types.js';
17
+ import type { BsddUriIndex } from '../bsdd/uri-health.js';
18
+ import type { GateContext } from '../gate/context.js';
19
+ import type { StudioOp } from '../ops/types.js';
20
+ import type { Uuid } from '../uuid.js';
21
+ export type LintSeverity = 'error' | 'warning' | 'info';
22
+ /** Rule areas of the catalogue (`IDSL-<AREA>-<nnn>`). */
23
+ export type LintArea = 'ENT' | 'PDT' | 'ATT' | 'PSET' | 'PROP' | 'VAL' | 'UNIT' | 'REGEX' | 'CARD' | 'SPEC' | 'DOC' | 'VER' | 'PART' | 'BSDD';
24
+ export interface QuickFix {
25
+ /** Short imperative label, e.g. `Remove the anchors`. */
26
+ label: string;
27
+ /** The op batch. Run it through `checkOps` before committing it. */
28
+ ops: StudioOp[];
29
+ }
30
+ export interface Diagnostic {
31
+ /** Stable rule code, e.g. `IDSL-REGEX-001`. */
32
+ code: string;
33
+ severity: LintSeverity;
34
+ /**
35
+ * The most specific node the finding is about: a constraint node when
36
+ * `field` is set, else a requirement / applicability facet, a
37
+ * specification or the document node.
38
+ */
39
+ nodeId: Uuid;
40
+ /** The specification the node belongs to (absent for document findings). */
41
+ specId?: Uuid;
42
+ field?: FacetFieldName;
43
+ message: string;
44
+ /** Long-form explanation (the rule's rationale). */
45
+ why?: string;
46
+ fixes?: QuickFix[];
47
+ /** Per-rule documentation page. */
48
+ docsUrl: string;
49
+ }
50
+ /** A diagnostic silenced by a `Suppression` in `meta.suppressions`. */
51
+ export interface SuppressedDiagnostic {
52
+ diagnostic: Diagnostic;
53
+ /** Node the suppression is attached to (the node itself or an ancestor). */
54
+ suppressedAt: Uuid;
55
+ suppression: Suppression;
56
+ }
57
+ /** One facet of a specification, with its node ids. */
58
+ export interface FacetView {
59
+ facet: IDSFacet;
60
+ facetId: Uuid;
61
+ section: Section;
62
+ /** Position within its section. */
63
+ index: number;
64
+ /** Present for requirements. */
65
+ requirement?: IDSRequirement;
66
+ constraintIds: Readonly<Partial<Record<FacetFieldName, Uuid>>>;
67
+ }
68
+ /** A specification as rules see it. */
69
+ export interface SpecView {
70
+ spec: IDSSpecification;
71
+ nodes: SpecNodes;
72
+ specId: Uuid;
73
+ index: number;
74
+ /** Distinct IFC versions of the spec. */
75
+ versions: IFCVersion[];
76
+ applicability: FacetView[];
77
+ requirements: FacetView[];
78
+ }
79
+ /** What a finding carries before the engine stamps code, severity and docs. */
80
+ export interface Finding {
81
+ nodeId: Uuid;
82
+ /**
83
+ * Demote this finding below the rule's default severity (e.g. a construct
84
+ * the reference tools accept in practice). Ignored when the caller
85
+ * overrides the rule's severity.
86
+ */
87
+ severity?: LintSeverity;
88
+ field?: FacetFieldName;
89
+ message: string;
90
+ fixes?: QuickFix[];
91
+ }
92
+ export interface LintContext {
93
+ /** Schema tables (shared with the grounding gate). */
94
+ readonly gate: GateContext;
95
+ /** Attribute metadata per IFC version, keyed by lower-case attribute name. */
96
+ readonly attributes: Readonly<Record<IfcSchemaVersion, ReadonlyMap<string, IfcAttributeInfo>>>;
97
+ /** Checked bSDD URIs (IDSL-BSDD-*). Without it the bSDD rules find nothing. */
98
+ readonly bsdd?: BsddUriIndex;
99
+ }
100
+ export interface RuleInput {
101
+ ctx: LintContext;
102
+ doc: StudioDocument;
103
+ }
104
+ export interface LintRuleMeta {
105
+ code: string;
106
+ area: LintArea;
107
+ defaultSeverity: LintSeverity;
108
+ /** `static` rules need no model; `model` rules are run by the model loop (P-05). */
109
+ kind: 'static' | 'model';
110
+ /**
111
+ * Off by default (noisy on real documents). The rule runs only when the
112
+ * linter config enables it: `LintOptions.rules` names it, or
113
+ * `LintOptions.severity` gives it a severity other than `'off'`.
114
+ */
115
+ optIn?: boolean;
116
+ /** One-line title for tables and the docs index. */
117
+ title: string;
118
+ /** Long-form rationale, shown as `Diagnostic.why` and on the docs page. */
119
+ rationale: string;
120
+ /** What the quick fix does, when the rule offers one. */
121
+ fix?: string;
122
+ /** RAID assumptions the rule depends on, with how they were verified. */
123
+ assumptions?: {
124
+ id: string;
125
+ verified: string;
126
+ }[];
127
+ /** Upstream references (IDS issues, documentation). */
128
+ references?: string[];
129
+ /** A minimal triggering example (IDS XML fragment) for the docs. */
130
+ example?: string;
131
+ }
132
+ /** Re-run when the specification (or the document's custom declarations) changes. */
133
+ export interface SpecRule extends LintRuleMeta {
134
+ scope: 'spec';
135
+ check(spec: SpecView, input: RuleInput): Finding[];
136
+ }
137
+ /** Re-run on every lint pass; sees all specifications at once. */
138
+ export interface DocumentRule extends LintRuleMeta {
139
+ scope: 'document';
140
+ check(specs: readonly SpecView[], input: RuleInput): Finding[];
141
+ }
142
+ export type LintRule = SpecRule | DocumentRule;
143
+ export interface LintOptions {
144
+ /**
145
+ * Restrict to these rule codes (default: every registered rule that is
146
+ * not opt-in). Naming an opt-in rule here enables it.
147
+ */
148
+ rules?: readonly string[];
149
+ /** Per-code severity override; `'off'` disables the rule, any other value enables an opt-in rule. */
150
+ severity?: Readonly<Record<string, LintSeverity | 'off'>>;
151
+ }
152
+ export interface LintResult {
153
+ diagnostics: Diagnostic[];
154
+ suppressed: SuppressedDiagnostic[];
155
+ stats: {
156
+ /** Specifications whose spec-scoped rules ran in this pass. */
157
+ specsLinted: number;
158
+ /** Specifications whose cached findings were reused. */
159
+ specsReused: number;
160
+ };
161
+ }
162
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/lint/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ /* This Source Code Form is subject to the terms of the Mozilla Public
2
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
3
+ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */
4
+ export {};
5
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/lint/types.ts"],"names":[],"mappings":"AAAA;;+DAE+D"}
@@ -0,0 +1,20 @@
1
+ /** Read-only views of a Studio document for lint rules. */
2
+ import type { IDSSpecification } from '@ifc-lite/ids';
3
+ import type { FacetFieldName } from '../document/fields.js';
4
+ import type { SpecNodes, StudioDocument } from '../document/types.js';
5
+ import type { Uuid } from '../uuid.js';
6
+ import type { FacetView, SpecView } from './types.js';
7
+ export declare function specView(spec: IDSSpecification, nodes: SpecNodes, index: number): SpecView;
8
+ export declare function specViews(doc: StudioDocument): SpecView[];
9
+ /** Every facet of a spec, applicability first. */
10
+ export declare function allFacets(spec: SpecView): FacetView[];
11
+ /** The node a field-level finding should point at (constraint node, else the facet). */
12
+ export declare function fieldNode(view: FacetView, field: FacetFieldName): Uuid;
13
+ /** Field-level finding location. */
14
+ export declare function at(view: FacetView, field: FacetFieldName): {
15
+ nodeId: Uuid;
16
+ field: FacetFieldName;
17
+ };
18
+ /** Human label for a facet's position, e.g. `requirement 2`. */
19
+ export declare function where(view: FacetView): string;
20
+ //# sourceMappingURL=walk.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"walk.d.ts","sourceRoot":"","sources":["../../src/lint/walk.ts"],"names":[],"mappings":"AAIA,2DAA2D;AAE3D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,KAAK,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtE,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEtD,wBAAgB,QAAQ,CAAC,IAAI,EAAE,gBAAgB,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,GAAG,QAAQ,CAuB1F;AAED,wBAAgB,SAAS,CAAC,GAAG,EAAE,cAAc,GAAG,QAAQ,EAAE,CAEzD;AAED,kDAAkD;AAClD,wBAAgB,SAAS,CAAC,IAAI,EAAE,QAAQ,GAAG,SAAS,EAAE,CAErD;AAED,wFAAwF;AACxF,wBAAgB,SAAS,CAAC,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,cAAc,GAAG,IAAI,CAEtE;AAED,oCAAoC;AACpC,wBAAgB,EAAE,CAAC,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,cAAc,GAAG;IAAE,MAAM,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,cAAc,CAAA;CAAE,CAElG;AAED,gEAAgE;AAChE,wBAAgB,KAAK,CAAC,IAAI,EAAE,SAAS,GAAG,MAAM,CAE7C"}
@@ -0,0 +1,47 @@
1
+ /* This Source Code Form is subject to the terms of the Mozilla Public
2
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
3
+ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */
4
+ export function specView(spec, nodes, index) {
5
+ return {
6
+ spec,
7
+ nodes,
8
+ specId: nodes.id,
9
+ index,
10
+ versions: [...new Set(spec.ifcVersions)],
11
+ applicability: spec.applicability.facets.map((facet, i) => ({
12
+ facet,
13
+ facetId: nodes.applicability[i].id,
14
+ section: 'applicability',
15
+ index: i,
16
+ constraintIds: nodes.applicability[i].constraints,
17
+ })),
18
+ requirements: spec.requirements.map((requirement, i) => ({
19
+ facet: requirement.facet,
20
+ facetId: nodes.requirements[i].id,
21
+ section: 'requirements',
22
+ index: i,
23
+ requirement,
24
+ constraintIds: nodes.requirements[i].constraints,
25
+ })),
26
+ };
27
+ }
28
+ export function specViews(doc) {
29
+ return doc.ids.specifications.map((spec, i) => specView(spec, doc.nodes.specs[i], i));
30
+ }
31
+ /** Every facet of a spec, applicability first. */
32
+ export function allFacets(spec) {
33
+ return [...spec.applicability, ...spec.requirements];
34
+ }
35
+ /** The node a field-level finding should point at (constraint node, else the facet). */
36
+ export function fieldNode(view, field) {
37
+ return view.constraintIds[field] ?? view.facetId;
38
+ }
39
+ /** Field-level finding location. */
40
+ export function at(view, field) {
41
+ return { nodeId: fieldNode(view, field), field };
42
+ }
43
+ /** Human label for a facet's position, e.g. `requirement 2`. */
44
+ export function where(view) {
45
+ return view.section === 'applicability' ? `applicability facet ${view.index + 1}` : `requirement ${view.index + 1}`;
46
+ }
47
+ //# sourceMappingURL=walk.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"walk.js","sourceRoot":"","sources":["../../src/lint/walk.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAU/D,MAAM,UAAU,QAAQ,CAAC,IAAsB,EAAE,KAAgB,EAAE,KAAa;IAC9E,OAAO;QACL,IAAI;QACJ,KAAK;QACL,MAAM,EAAE,KAAK,CAAC,EAAE;QAChB,KAAK;QACL,QAAQ,EAAE,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACxC,aAAa,EAAE,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;YAC1D,KAAK;YACL,OAAO,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,EAAE;YAClC,OAAO,EAAE,eAAe;YACxB,KAAK,EAAE,CAAC;YACR,aAAa,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,WAAW;SAClD,CAAC,CAAC;QACH,YAAY,EAAE,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;YACvD,KAAK,EAAE,WAAW,CAAC,KAAK;YACxB,OAAO,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,EAAE;YACjC,OAAO,EAAE,cAAc;YACvB,KAAK,EAAE,CAAC;YACR,WAAW;YACX,aAAa,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,WAAW;SACjD,CAAC,CAAC;KACJ,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,GAAmB;IAC3C,OAAO,GAAG,CAAC,GAAG,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AACxF,CAAC;AAED,kDAAkD;AAClD,MAAM,UAAU,SAAS,CAAC,IAAc;IACtC,OAAO,CAAC,GAAG,IAAI,CAAC,aAAa,EAAE,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC;AACvD,CAAC;AAED,wFAAwF;AACxF,MAAM,UAAU,SAAS,CAAC,IAAe,EAAE,KAAqB;IAC9D,OAAO,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC;AACnD,CAAC;AAED,oCAAoC;AACpC,MAAM,UAAU,EAAE,CAAC,IAAe,EAAE,KAAqB;IACvD,OAAO,EAAE,MAAM,EAAE,SAAS,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,KAAK,EAAE,CAAC;AACnD,CAAC;AAED,gEAAgE;AAChE,MAAM,UAAU,KAAK,CAAC,IAAe;IACnC,OAAO,IAAI,CAAC,OAAO,KAAK,eAAe,CAAC,CAAC,CAAC,uBAAuB,IAAI,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,eAAe,IAAI,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC;AACtH,CAAC"}
@@ -0,0 +1,53 @@
1
+ /**
2
+ * The node matcher shared by re-identification and the semantic diff
3
+ * (02-document-model-and-ops.md §2 and §6: "shared with diff").
4
+ *
5
+ * Within one Studio lineage (two revisions of one document) nodes match by
6
+ * node id only. Otherwise specifications match by, in order: the same
7
+ * non-empty `identifier`;
8
+ * the same name and applicability signature; then the best similarity over
9
+ * name tokens and facet signatures above a threshold. Facets match within a
10
+ * section by: identical content; the same
11
+ * type and key (pset + property, entity name, …); then key similarity.
12
+ * Every step is one-to-one and greedy by score.
13
+ */
14
+ import type { IDSFacet, IDSSpecification } from '@ifc-lite/ids';
15
+ export type MatchStep = 'nodeId' | 'identifier' | 'signature' | 'similarity';
16
+ export type FacetMatchStep = 'nodeId' | 'exact' | 'key' | 'similar';
17
+ /** Default minimum similarity for the last cascade step (0..1). */
18
+ export declare const DEFAULT_MATCH_THRESHOLD = 0.55;
19
+ /** What a facet is "about": stable across value edits. */
20
+ export declare function facetKey(f: IDSFacet): string;
21
+ /** Canonical JSON-like rendering: sorted keys, `undefined` dropped. */
22
+ export declare function canonical(value: unknown): string;
23
+ /** Result of a cascade: next index → matched previous index and the step that matched it. */
24
+ export interface Pairing<S extends string> {
25
+ pairs: Map<number, {
26
+ prev: number;
27
+ by: S;
28
+ }>;
29
+ usedPrev: Set<number>;
30
+ }
31
+ /**
32
+ * Greedy one-to-one matching over the cascade. `steps` are tried in order;
33
+ * each returns a score (> 0 means a candidate pair) for unmatched pairs.
34
+ * `seed` pre-assigns pairs (e.g. matched by node id elsewhere).
35
+ */
36
+ export declare function cascade<A, B, S extends string>(prev: readonly A[], next: readonly B[], steps: [S, (a: A, b: B) => number][], seed?: Pairing<S>): Pairing<S>;
37
+ export interface MatchOptions {
38
+ /** Minimum similarity for the last cascade step (0..1). */
39
+ threshold?: number;
40
+ /** Match identical `id`s first (both sides share one Studio lineage). */
41
+ byNodeId?: boolean;
42
+ }
43
+ /** Pair specifications of `next` with those of `prev`. */
44
+ export declare function matchSpecs(prev: readonly IDSSpecification[], next: readonly IDSSpecification[], options?: MatchOptions): Pairing<MatchStep>;
45
+ /**
46
+ * Pair facets of one section. `seed` carries pairs already decided
47
+ * elsewhere (by node id); the cascade only fills in the rest.
48
+ */
49
+ export declare function matchFacetList(prev: readonly IDSFacet[], next: readonly IDSFacet[], options?: {
50
+ threshold?: number;
51
+ seed?: Pairing<FacetMatchStep>;
52
+ }): Pairing<FacetMatchStep>;
53
+ //# sourceMappingURL=cascade.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cascade.d.ts","sourceRoot":"","sources":["../../src/match/cascade.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAiB,QAAQ,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAG/E,MAAM,MAAM,SAAS,GAAG,QAAQ,GAAG,YAAY,GAAG,WAAW,GAAG,YAAY,CAAC;AAC7E,MAAM,MAAM,cAAc,GAAG,QAAQ,GAAG,OAAO,GAAG,KAAK,GAAG,SAAS,CAAC;AAEpE,mEAAmE;AACnE,eAAO,MAAM,uBAAuB,OAAO,CAAC;AAgB5C,0DAA0D;AAC1D,wBAAgB,QAAQ,CAAC,CAAC,EAAE,QAAQ,GAAG,MAAM,CAe5C;AAED,uEAAuE;AACvE,wBAAgB,SAAS,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAUhD;AAoBD,6FAA6F;AAC7F,MAAM,WAAW,OAAO,CAAC,CAAC,SAAS,MAAM;IACvC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,CAAC,CAAA;KAAE,CAAC,CAAC;IAC5C,QAAQ,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;CACvB;AAED;;;;GAIG;AACH,wBAAgB,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,MAAM,EAC5C,IAAI,EAAE,SAAS,CAAC,EAAE,EAClB,IAAI,EAAE,SAAS,CAAC,EAAE,EAClB,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,MAAM,CAAC,EAAE,EACpC,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,GAChB,OAAO,CAAC,CAAC,CAAC,CAsBZ;AAED,MAAM,WAAW,YAAY;IAC3B,2DAA2D;IAC3D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,yEAAyE;IACzE,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,0DAA0D;AAC1D,wBAAgB,UAAU,CACxB,IAAI,EAAE,SAAS,gBAAgB,EAAE,EACjC,IAAI,EAAE,SAAS,gBAAgB,EAAE,EACjC,OAAO,GAAE,YAAiB,GACzB,OAAO,CAAC,SAAS,CAAC,CAcpB;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAC5B,IAAI,EAAE,SAAS,QAAQ,EAAE,EACzB,IAAI,EAAE,SAAS,QAAQ,EAAE,EACzB,OAAO,GAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,CAAA;CAAO,GACnE,OAAO,CAAC,cAAc,CAAC,CAgBzB"}