@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,237 @@
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 { getField } from '../../document/fields.js';
5
+ import { rankCandidates } from '../../gate/rank.js';
6
+ import { quickFix } from '../fix.js';
7
+ import { allFacets, at } from '../walk.js';
8
+ import { gated, single, tables } from './util.js';
9
+ import { baseOf, FLOAT_XSD, mapLiterals, NUMERIC_XSD, siteLiterals, valueSites } from './value-sites.js';
10
+ export function rawSet(facetId, field, constraint) {
11
+ return { kind: 'value.set', payload: { facetId, field, value: { kind: 'raw', constraint } } };
12
+ }
13
+ export const VAL_001 = {
14
+ code: 'IDSL-VAL-001',
15
+ area: 'VAL',
16
+ scope: 'spec',
17
+ kind: 'static',
18
+ defaultSeverity: 'error',
19
+ title: 'Value not in the standard enumeration',
20
+ rationale: "The standard property is an enumerated property and the required value is not one of its enumeration values. Enumeration values are compared case-sensitively, so conforming models can never carry it.",
21
+ fix: 'Use the enumeration value with the same spelling in another case, or the closest one.',
22
+ example: '<propertySet><simpleValue>Pset_DoorCommon</simpleValue></propertySet><baseName><simpleValue>Status</simpleValue></baseName><value><simpleValue>New</simpleValue></value>',
23
+ check(spec, { ctx, doc }) {
24
+ const out = [];
25
+ for (const site of valueSites(ctx, spec)) {
26
+ const f = site.view.facet;
27
+ if (f.type !== 'property' || site.field !== 'property.value')
28
+ continue;
29
+ const psetName = single(f.propertySet);
30
+ const name = single(f.baseName);
31
+ if (!psetName || !name)
32
+ continue;
33
+ const values = siteLiterals(site.constraint);
34
+ for (const v of spec.versions) {
35
+ const prop = tables(ctx, v).psets.get(psetName)?.properties.find((p) => p.name === name);
36
+ const allowed = prop?.kind === 'enumeration' ? prop.enumeration ?? [] : [];
37
+ const bad = allowed.length ? values.filter((x) => !allowed.includes(x)) : [];
38
+ if (!bad.length)
39
+ continue;
40
+ const fixes = bad.flatMap((x) => {
41
+ const folded = allowed.find((a) => a.toLowerCase() === x.trim().toLowerCase());
42
+ const picks = folded ? [folded] : rankCandidates(x, allowed, { minScore: 0.4, limit: 2 }).map((c) => c.value);
43
+ return picks.map((p) => quickFix(`Use ${p}`, this.code, site.view.facetId, `${x}|${p}`, [rawSet(site.view.facetId, site.field, mapLiterals(site.constraint, (y) => (y === x ? p : y)))]));
44
+ });
45
+ out.push({ ...at(site.view, site.field), message: `${bad.map((x) => `"${x}"`).join(', ')} is not a value of ${psetName}.${name} (${v})`, fixes: gated(doc, ctx, fixes) });
46
+ break;
47
+ }
48
+ }
49
+ return out;
50
+ },
51
+ };
52
+ /** The XSD base an IDS checker infers for a restriction (mirrors the audit). */
53
+ function inferredBase(c) {
54
+ if (c.type === 'simpleValue')
55
+ return undefined;
56
+ if (c.base)
57
+ return c.base;
58
+ if (c.type !== 'bounds')
59
+ return 'xs:string';
60
+ return c.length !== undefined || c.minLength !== undefined || c.maxLength !== undefined ? 'xs:string' : 'xs:double';
61
+ }
62
+ function compatible(inferred, backing) {
63
+ return inferred === backing || (FLOAT_XSD.has(inferred) && FLOAT_XSD.has(backing));
64
+ }
65
+ export const VAL_002 = {
66
+ code: 'IDSL-VAL-002',
67
+ area: 'VAL',
68
+ scope: 'spec',
69
+ kind: 'static',
70
+ defaultSeverity: 'warning',
71
+ title: 'Restriction base incompatible with the data type',
72
+ rationale: "The restriction's base type (declared, or inferred: xs:string for patterns and enumerations, xs:double for numeric bounds) does not match the XSD type behind the property's dataType, for example numeric bounds on an IFCLABEL or a pattern on an IFCBOOLEAN. Values are cast to the data type before comparison, so the restriction cannot behave as written. The audit reports the same mismatch (E_RESTRICTION_BASE_MISMATCH).",
73
+ fix: "Declare the data type's base on the restriction (offered only when every literal is valid under it).",
74
+ example: '<property dataType="IFCLABEL">…<value><xs:restriction base="xs:double"><xs:minInclusive value="1"/></xs:restriction></value></property>',
75
+ check(spec, { ctx, doc }) {
76
+ const out = [];
77
+ for (const site of valueSites(ctx, spec)) {
78
+ if (site.field !== 'property.value' || !site.explicit || site.xsd.length !== 1)
79
+ continue;
80
+ const inferred = inferredBase(site.constraint);
81
+ const [backing] = site.xsd;
82
+ if (!inferred || compatible(inferred, backing) || site.constraint.type === 'simpleValue')
83
+ continue;
84
+ const fix = quickFix(`Use base ${backing}`, this.code, site.view.facetId, backing, [rawSet(site.view.facetId, site.field, { ...site.constraint, base: backing })]);
85
+ out.push({ ...at(site.view, site.field), message: `restriction base ${inferred} does not fit ${site.dataType} (${backing})`, fixes: gated(doc, ctx, [fix]) });
86
+ }
87
+ return out;
88
+ },
89
+ };
90
+ const LIST_SEPARATOR = /\s*[,;|]\s*/;
91
+ const CODE_PAIR = /^[A-Za-z]+\d+(\s*\/\s*[A-Za-z]+\d+)+$/;
92
+ /** The items of a value that looks like a list, or undefined. */
93
+ export function listItems(value) {
94
+ const raw = value.trim();
95
+ const bracketed = /^\[.*\]$/.test(raw) || /^\(.*\)$/.test(raw);
96
+ const body = bracketed ? raw.slice(1, -1) : raw;
97
+ if (CODE_PAIR.test(body))
98
+ return body.split('/').map((s) => s.trim());
99
+ const items = body.split(LIST_SEPARATOR);
100
+ if (items.length < 2 || items.some((i) => i === '' || !/[A-Za-z]/.test(i) || /\s/.test(i)))
101
+ return undefined;
102
+ const codeLike = items.every((i) => /\d/.test(i));
103
+ return bracketed || codeLike || items.length >= 3 ? items : undefined;
104
+ }
105
+ export const VAL_003 = {
106
+ code: 'IDSL-VAL-003',
107
+ area: 'VAL',
108
+ scope: 'spec',
109
+ kind: 'static',
110
+ defaultSeverity: 'warning',
111
+ title: 'Simple value that looks like a list',
112
+ rationale: 'A simple value is compared as one exact string. "EI60, EI90", "[EI60, EI90]" or "EI60/EI90" therefore only matches elements carrying that whole text, never EI60 or EI90 alone. Alternatives are written as an enumeration.',
113
+ fix: 'Convert to an enumeration of the items.',
114
+ example: '<value><simpleValue>EI60, EI90</simpleValue></value>',
115
+ check(spec, { ctx, doc }) {
116
+ const out = [];
117
+ for (const site of valueSites(ctx, spec)) {
118
+ if (site.constraint.type !== 'simpleValue' || site.xsd.some((x) => NUMERIC_XSD.has(x)))
119
+ continue;
120
+ const items = listItems(site.constraint.value);
121
+ if (!items)
122
+ continue;
123
+ const fix = quickFix('Convert to an enumeration', this.code, site.view.facetId, site.field, [
124
+ rawSet(site.view.facetId, site.field, { type: 'enumeration', values: items, base: 'xs:string' }),
125
+ ]);
126
+ out.push({ ...at(site.view, site.field), message: `"${site.constraint.value}" looks like a list of ${items.length} values but is matched as one string`, fixes: gated(doc, ctx, [fix]) });
127
+ }
128
+ return out;
129
+ },
130
+ };
131
+ const COMPARISON = /^\s*(>=|<=|=>|=<|≥|≤|>|<)\s*([+-]?\d+(?:[.,]\d+)?)\s*([A-Za-z²³]*)\s*$/;
132
+ export function parseComparison(value) {
133
+ const m = COMPARISON.exec(value);
134
+ if (!m)
135
+ return undefined;
136
+ const op = { '>=': '>=', '=>': '>=', '≥': '>=', '<=': '<=', '=<': '<=', '≤': '<=', '>': '>', '<': '<' }[m[1]];
137
+ return { op, value: Number(m[2].replace(',', '.')), ...(m[3] ? { unit: m[3] } : {}) };
138
+ }
139
+ export const VAL_004 = {
140
+ code: 'IDSL-VAL-004',
141
+ area: 'VAL',
142
+ scope: 'spec',
143
+ kind: 'static',
144
+ defaultSeverity: 'warning',
145
+ title: 'Simple value that looks like a comparison',
146
+ rationale: 'A simple value such as ">25" or "≥ 0.9" is compared as literal text, so it only matches an element whose value is that text. Numeric limits are written as bounds (minInclusive, maxExclusive, …).',
147
+ fix: 'Convert to bounds (with the unit converted to SI when one is given).',
148
+ example: '<value><simpleValue>&gt;= 30</simpleValue></value>',
149
+ check(spec, { ctx, doc }) {
150
+ const out = [];
151
+ for (const site of valueSites(ctx, spec)) {
152
+ if (site.constraint.type !== 'simpleValue')
153
+ continue;
154
+ const cmp = parseComparison(site.constraint.value);
155
+ if (!cmp)
156
+ continue;
157
+ const lower = cmp.op.startsWith('>');
158
+ const range = {
159
+ kind: 'range',
160
+ ...(lower ? { min: cmp.value, minInclusive: cmp.op === '>=' } : { max: cmp.value, maxInclusive: cmp.op === '<=' }),
161
+ ...(cmp.unit ? { unit: cmp.unit } : {}),
162
+ };
163
+ const fix = quickFix('Convert to bounds', this.code, site.view.facetId, site.field, [{ kind: 'value.set', payload: { facetId: site.view.facetId, field: site.field, value: range } }]);
164
+ out.push({ ...at(site.view, site.field), message: `"${site.constraint.value}" is matched as text, not as a numeric comparison`, fixes: gated(doc, ctx, [fix]) });
165
+ }
166
+ return out;
167
+ },
168
+ };
169
+ const BOOLEAN_FORMS = {
170
+ true: 'true', yes: 'true', y: 'true', ja: 'true', j: 'true', wahr: 'true', oui: 'true', vrai: 'true', si: 'true',
171
+ false: 'false', no: 'false', n: 'false', nein: 'false', falsch: 'false', non: 'false', faux: 'false',
172
+ };
173
+ export const VAL_005 = {
174
+ code: 'IDSL-VAL-005',
175
+ area: 'VAL',
176
+ scope: 'spec',
177
+ kind: 'static',
178
+ defaultSeverity: 'warning',
179
+ title: 'Boolean literal in a form IDS does not accept',
180
+ rationale: 'IDS compares boolean values in their XSD lexical form, lower-case "true" and "false". "TRUE", "True", "yes" or "ja" never match (buildingSMART corpus: attribute/ and property/invalid-booleans_must_be_specified_as_lowercase_strings).',
181
+ fix: 'Normalise to "true" / "false".',
182
+ assumptions: [
183
+ {
184
+ id: 'A-04',
185
+ verified: 'buildingSMART corpus: pass-booleans_must_be_specified_as_lowercase_strings (attribute 3_3, property 2_3) accept "false"; fail-…_1_3 shows "true" is a comparable literal; invalid-…_2_3 / _3_3 mark "FALSE" as not conforming. The numeric forms 1/0 are not covered by the corpus and are not flagged.',
186
+ },
187
+ ],
188
+ example: '<property dataType="IFCBOOLEAN">…<value><simpleValue>TRUE</simpleValue></value></property>',
189
+ check(spec, { ctx, doc }) {
190
+ const out = [];
191
+ for (const site of valueSites(ctx, spec)) {
192
+ const isBoolean = (site.xsd.length === 1 && site.xsd[0] === 'xs:boolean') || baseOf(site.constraint) === 'xs:boolean';
193
+ if (!isBoolean)
194
+ continue;
195
+ const bad = siteLiterals(site.constraint).filter((v) => v !== 'true' && v !== 'false' && BOOLEAN_FORMS[v.trim().toLowerCase()]);
196
+ if (!bad.length)
197
+ continue;
198
+ const fixed = mapLiterals(site.constraint, (v) => (bad.includes(v) ? BOOLEAN_FORMS[v.trim().toLowerCase()] : v));
199
+ const fix = quickFix('Normalise to true / false', this.code, site.view.facetId, site.field, [rawSet(site.view.facetId, site.field, fixed)]);
200
+ out.push({ ...at(site.view, site.field), message: `${bad.map((v) => `"${v}"`).join(', ')} is not a boolean literal IDS accepts (use "true" or "false")`, fixes: gated(doc, ctx, [fix]) });
201
+ }
202
+ return out;
203
+ },
204
+ };
205
+ const ODD_SPACE = /[  -​   ]/;
206
+ function cleanLiteral(v) {
207
+ return v.replace(/[​]/g, '').replace(/[  -    ]/g, ' ').trim();
208
+ }
209
+ export const VAL_006 = {
210
+ code: 'IDSL-VAL-006',
211
+ area: 'VAL',
212
+ scope: 'spec',
213
+ kind: 'static',
214
+ defaultSeverity: 'info',
215
+ title: 'Leading or trailing whitespace, or invisible characters',
216
+ rationale: 'String comparison in IDS is exact. A value with a leading or trailing space, a non-breaking space or a zero-width character (typical of copy-paste from documents and spreadsheets) does not match the visually identical value in a model.',
217
+ fix: 'Trim the value and replace invisible characters.',
218
+ example: '<simpleValue>EI60 </simpleValue>',
219
+ check(spec, { ctx, doc }) {
220
+ const out = [];
221
+ for (const view of allFacets(spec)) {
222
+ for (const field of ['entity.name', 'entity.predefinedType', 'attribute.name', 'attribute.value', 'property.propertySet', 'property.baseName', 'property.value', 'classification.system', 'classification.value', 'material.value', 'partOf.entity.name', 'partOf.entity.predefinedType']) {
223
+ const c = getField(view.facet, field);
224
+ if (!c)
225
+ continue;
226
+ const bad = siteLiterals(c).filter((v) => v !== v.trim() || ODD_SPACE.test(v));
227
+ if (!bad.length)
228
+ continue;
229
+ const fixed = mapLiterals(c, cleanLiteral);
230
+ const fix = siteLiterals(fixed).some((v) => v === '') ? undefined : quickFix('Trim', this.code, view.facetId, field, [rawSet(view.facetId, field, fixed)]);
231
+ out.push({ ...at(view, field), message: `${bad.map((v) => JSON.stringify(v)).join(', ')} has surrounding whitespace or invisible characters`, fixes: gated(doc, ctx, [fix]) });
232
+ }
233
+ }
234
+ return out;
235
+ },
236
+ };
237
+ //# sourceMappingURL=values.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"values.js","sourceRoot":"","sources":["../../../src/lint/rules/values.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ /**
2
+ * A small XSD-regex tokenizer and plain-language explainer.
3
+ *
4
+ * XSD patterns (XML Schema Part 2, Appendix F) differ from the regex
5
+ * dialects authors know: every pattern is implicitly anchored, `^` and `$`
6
+ * are ordinary characters, there are no lookarounds, backreferences, lazy
7
+ * quantifiers or `(?…)` groups, and `\d`, `\w` are Unicode classes. The
8
+ * tokenizer is linear and never compiles the pattern, so it is safe on any
9
+ * input; matching itself goes through `@ifc-lite/ids`' translator and the
10
+ * ReDoS guard.
11
+ */
12
+ export type XsdTokenKind = 'char' | 'escape' | 'classEscape' | 'property' | 'invalidEscape' | 'class' | 'any' | 'open' | 'openSpecial' | 'close' | 'alt' | 'quantifier' | 'lazy' | 'caret' | 'dollar';
13
+ export interface XsdToken {
14
+ kind: XsdTokenKind;
15
+ text: string;
16
+ /** Offset in the pattern. */
17
+ start: number;
18
+ }
19
+ export declare function tokenizeXsdPattern(p: string): XsdToken[];
20
+ export interface PatternExplanation {
21
+ /** The whole value must match: XSD patterns are implicitly anchored. */
22
+ anchored: true;
23
+ parts: {
24
+ text: string;
25
+ meaning: string;
26
+ }[];
27
+ /** Constructs that are not XSD regex. */
28
+ unsupported: string[];
29
+ }
30
+ /** Explain an XSD pattern token by token, in plain language. */
31
+ export declare function explainXsdPattern(pattern: string): PatternExplanation;
32
+ /** The literal string a pattern stands for, when it has no metacharacters. */
33
+ export declare function literalOf(pattern: string): string | undefined;
34
+ //# sourceMappingURL=xsd-regex.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"xsd-regex.d.ts","sourceRoot":"","sources":["../../../src/lint/rules/xsd-regex.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;GAUG;AAEH,MAAM,MAAM,YAAY,GACpB,MAAM,GACN,QAAQ,GACR,aAAa,GACb,UAAU,GACV,eAAe,GACf,OAAO,GACP,KAAK,GACL,MAAM,GACN,aAAa,GACb,OAAO,GACP,KAAK,GACL,YAAY,GACZ,MAAM,GACN,OAAO,GACP,QAAQ,CAAC;AAEb,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,YAAY,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,6BAA6B;IAC7B,KAAK,EAAE,MAAM,CAAC;CACf;AAqCD,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,MAAM,GAAG,QAAQ,EAAE,CA6BxD;AAkDD,MAAM,WAAW,kBAAkB;IACjC,wEAAwE;IACxE,QAAQ,EAAE,IAAI,CAAC;IACf,KAAK,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC3C,yCAAyC;IACzC,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB;AAED,gEAAgE;AAChE,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,kBAAkB,CAOrE;AAED,8EAA8E;AAC9E,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAQ7D"}
@@ -0,0 +1,149 @@
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
+ const SINGLE_ESCAPES = new Set(['n', 'r', 't', '\\', '|', '.', '-', '^', '?', '*', '+', '{', '}', '(', ')', '[', ']']);
5
+ const CLASS_ESCAPES = new Set(['d', 'D', 's', 'S', 'w', 'W', 'i', 'I', 'c', 'C']);
6
+ function escapeAt(p, i) {
7
+ const c = p[i + 1];
8
+ if (c === undefined)
9
+ return { kind: 'invalidEscape', text: '\\' };
10
+ if ((c === 'p' || c === 'P') && p[i + 2] === '{') {
11
+ const end = p.indexOf('}', i + 3);
12
+ if (end > 0)
13
+ return { kind: 'property', text: p.slice(i, end + 1) };
14
+ }
15
+ if (SINGLE_ESCAPES.has(c))
16
+ return { kind: 'escape', text: `\\${c}` };
17
+ if (CLASS_ESCAPES.has(c))
18
+ return { kind: 'classEscape', text: `\\${c}` };
19
+ return { kind: 'invalidEscape', text: `\\${c}` };
20
+ }
21
+ /** End offset (exclusive) of the character class starting at `i` (`[`). */
22
+ function classEnd(p, i) {
23
+ let depth = 0;
24
+ for (let j = i; j < p.length; j++) {
25
+ const c = p[j];
26
+ if (c === '\\') {
27
+ j++;
28
+ continue;
29
+ }
30
+ if (c === '[')
31
+ depth++;
32
+ else if (c === ']') {
33
+ depth--;
34
+ if (depth === 0)
35
+ return j + 1;
36
+ }
37
+ }
38
+ return p.length;
39
+ }
40
+ const QUANT = /^(\*|\+|\?|\{\d+(,\d*)?\})/;
41
+ export function tokenizeXsdPattern(p) {
42
+ const out = [];
43
+ let i = 0;
44
+ while (i < p.length) {
45
+ const c = p[i];
46
+ let tok;
47
+ if (c === '\\')
48
+ tok = escapeAt(p, i);
49
+ else if (c === '[')
50
+ tok = { kind: 'class', text: p.slice(i, classEnd(p, i)) };
51
+ else if (c === '(' && p[i + 1] === '?')
52
+ tok = { kind: 'openSpecial', text: p.slice(i, i + (p[i + 2] === '<' && (p[i + 3] === '=' || p[i + 3] === '!') ? 4 : 3)) };
53
+ else if (c === '(')
54
+ tok = { kind: 'open', text: '(' };
55
+ else if (c === ')')
56
+ tok = { kind: 'close', text: ')' };
57
+ else if (c === '|')
58
+ tok = { kind: 'alt', text: '|' };
59
+ else if (c === '.')
60
+ tok = { kind: 'any', text: '.' };
61
+ else if (c === '^')
62
+ tok = { kind: 'caret', text: '^' };
63
+ else if (c === '$')
64
+ tok = { kind: 'dollar', text: '$' };
65
+ else {
66
+ const q = QUANT.exec(p.slice(i));
67
+ if (q) {
68
+ const prev = out[out.length - 1];
69
+ const lazy = prev?.kind === 'quantifier';
70
+ tok = { kind: lazy && (q[0] === '?' || q[0] === '+') ? 'lazy' : 'quantifier', text: q[0] };
71
+ }
72
+ else {
73
+ tok = { kind: 'char', text: c };
74
+ }
75
+ }
76
+ out.push({ ...tok, start: i });
77
+ i += tok.text.length;
78
+ }
79
+ return out;
80
+ }
81
+ const CLASS_MEANING = {
82
+ '\\d': 'any Unicode decimal digit (not only 0-9)',
83
+ '\\D': 'any character that is not a digit',
84
+ '\\s': 'a space, tab, carriage return or line feed',
85
+ '\\S': 'any character that is not whitespace',
86
+ '\\w': 'any letter or digit in any script (no underscore, unlike most regex dialects)',
87
+ '\\W': 'any character that is not a letter or digit',
88
+ '\\i': 'a character that may start an XML name (letter, _ or :)',
89
+ '\\I': 'a character that may not start an XML name',
90
+ '\\c': 'a character allowed in an XML name',
91
+ '\\C': 'a character not allowed in an XML name',
92
+ };
93
+ function explainToken(t) {
94
+ switch (t.kind) {
95
+ case 'char':
96
+ return `the character "${t.text}"`;
97
+ case 'escape':
98
+ return t.text === '\\n' ? 'a line feed' : t.text === '\\r' ? 'a carriage return' : t.text === '\\t' ? 'a tab' : `the character "${t.text.slice(1)}"`;
99
+ case 'classEscape':
100
+ return CLASS_MEANING[t.text] ?? t.text;
101
+ case 'property':
102
+ return `a character in the Unicode category or block ${t.text.slice(3, -1)}${t.text[1] === 'P' ? ' (negated)' : ''}`;
103
+ case 'invalidEscape':
104
+ return `${t.text} is not an XSD escape (not supported)`;
105
+ case 'class':
106
+ return t.text.startsWith('[^') ? `any one character except those in ${t.text}` : `any one character in ${t.text}`;
107
+ case 'any':
108
+ return 'any single character except a line break';
109
+ case 'open':
110
+ return 'start of a group';
111
+ case 'openSpecial':
112
+ return `${t.text} (lookaround, non-capturing or named group) is not supported in XSD`;
113
+ case 'close':
114
+ return 'end of the group';
115
+ case 'alt':
116
+ return 'or';
117
+ case 'quantifier':
118
+ return t.text === '*' ? 'repeated zero or more times' : t.text === '+' ? 'repeated one or more times' : t.text === '?' ? 'optional' : `repeated ${t.text.slice(1, -1).replace(',', ' to ').replace(/ to $/, ' or more')} times`;
119
+ case 'lazy':
120
+ return `${t.text} after a quantifier (lazy / possessive) is not supported in XSD`;
121
+ case 'caret':
122
+ return 'the literal character "^" (XSD patterns are always anchored; ^ is not an anchor)';
123
+ case 'dollar':
124
+ return 'the literal character "$" (XSD patterns are always anchored; $ is not an anchor)';
125
+ }
126
+ }
127
+ /** Explain an XSD pattern token by token, in plain language. */
128
+ export function explainXsdPattern(pattern) {
129
+ const tokens = tokenizeXsdPattern(pattern);
130
+ return {
131
+ anchored: true,
132
+ parts: tokens.map((t) => ({ text: t.text, meaning: explainToken(t) })),
133
+ unsupported: tokens.filter((t) => t.kind === 'invalidEscape' || t.kind === 'openSpecial' || t.kind === 'lazy').map((t) => t.text),
134
+ };
135
+ }
136
+ /** The literal string a pattern stands for, when it has no metacharacters. */
137
+ export function literalOf(pattern) {
138
+ let out = '';
139
+ for (const t of tokenizeXsdPattern(pattern)) {
140
+ if (t.kind === 'char')
141
+ out += t.text;
142
+ else if (t.kind === 'escape' && !['\\n', '\\r', '\\t'].includes(t.text))
143
+ out += t.text.slice(1);
144
+ else
145
+ return undefined;
146
+ }
147
+ return out;
148
+ }
149
+ //# sourceMappingURL=xsd-regex.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"xsd-regex.js","sourceRoot":"","sources":["../../../src/lint/rules/xsd-regex.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ /** Up to 32 candidate members of `pattern` (not all are guaranteed members). */
2
+ export declare function samplePattern(pattern: string): string[];
3
+ //# sourceMappingURL=sample.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sample.d.ts","sourceRoot":"","sources":["../../../src/lint/solver/sample.ts"],"names":[],"mappings":"AA8HA,gFAAgF;AAChF,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAGvD"}
@@ -0,0 +1,134 @@
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
+ * Sample strings from an XSD pattern.
6
+ *
7
+ * Used only to PROVE that two constraints overlap (a sample that matches
8
+ * both is a witness). A sample that is not a real member of its own
9
+ * pattern is discarded by the caller, so an imprecise generator can only
10
+ * lose witnesses, never invent one. Output is capped, and group nesting is
11
+ * bounded by `MAX_DEPTH`.
12
+ */
13
+ import { tokenizeXsdPattern } from '../rules/xsd-regex.js';
14
+ const MAX_SAMPLES = 32;
15
+ const MAX_DEPTH = 16;
16
+ const CLASS_SAMPLES = {
17
+ '\\d': ['0', '7'],
18
+ '\\D': ['a', '-'],
19
+ '\\s': [' '],
20
+ '\\S': ['a', '0'],
21
+ '\\w': ['a', 'Z', '5'],
22
+ '\\W': ['-', ' '],
23
+ '\\i': ['a', '_'],
24
+ '\\I': ['0', '-'],
25
+ '\\c': ['a', '0'],
26
+ '\\C': [' ', '/'],
27
+ };
28
+ const PROBE_CHARS = ['a', 'A', 'z', '0', '5', '9', '_', '-', ' ', '.', '/'];
29
+ /** Candidate characters for a bracket expression (verified later by the caller). */
30
+ function classSamples(text) {
31
+ const body = text.slice(1, -1);
32
+ if (body.startsWith('^'))
33
+ return PROBE_CHARS;
34
+ const out = [];
35
+ for (let i = 0; i < body.length && out.length < 4; i++) {
36
+ const c = body[i];
37
+ if (c === '\\') {
38
+ const esc = `\\${body[i + 1] ?? ''}`;
39
+ out.push(...(CLASS_SAMPLES[esc] ?? [body[i + 1] ?? '']).slice(0, 1));
40
+ i++;
41
+ }
42
+ else if (c !== '-' && c !== '[') {
43
+ out.push(c);
44
+ }
45
+ }
46
+ return out.length ? out : PROBE_CHARS;
47
+ }
48
+ function cross(a, b) {
49
+ const out = [];
50
+ for (const x of a)
51
+ for (const y of b)
52
+ if (out.length < MAX_SAMPLES)
53
+ out.push(x + y);
54
+ return out;
55
+ }
56
+ function repeat(atom, q) {
57
+ let counts;
58
+ if (q === '*')
59
+ counts = [0, 1, 2];
60
+ else if (q === '+')
61
+ counts = [1, 2];
62
+ else if (q === '?')
63
+ counts = [0, 1];
64
+ else {
65
+ const [lo, hi] = q.slice(1, -1).split(',');
66
+ const n = Number(lo);
67
+ counts = hi === undefined ? [n] : hi === '' ? [n, n + 1] : [n, Math.min(Number(hi), n + 1)];
68
+ }
69
+ const out = [];
70
+ for (const n of counts) {
71
+ let acc = [''];
72
+ for (let i = 0; i < n && i < 8; i++)
73
+ acc = cross(acc, atom.slice(0, 3));
74
+ out.push(...acc);
75
+ }
76
+ return out.slice(0, MAX_SAMPLES);
77
+ }
78
+ function parseAlternation(c, depth) {
79
+ const out = [];
80
+ out.push(...parseSequence(c, depth));
81
+ while (c.tokens[c.i]?.kind === 'alt') {
82
+ c.i++;
83
+ out.push(...parseSequence(c, depth));
84
+ }
85
+ return out.slice(0, MAX_SAMPLES);
86
+ }
87
+ function parseSequence(c, depth) {
88
+ let acc = [''];
89
+ while (c.i < c.tokens.length) {
90
+ const t = c.tokens[c.i];
91
+ if (t.kind === 'alt' || t.kind === 'close')
92
+ break;
93
+ c.i++;
94
+ let atom;
95
+ if (t.kind === 'open' || t.kind === 'openSpecial') {
96
+ atom = depth >= MAX_DEPTH ? [] : parseAlternation(c, depth + 1);
97
+ if (c.tokens[c.i]?.kind === 'close')
98
+ c.i++;
99
+ }
100
+ else if (t.kind === 'char' || t.kind === 'caret' || t.kind === 'dollar') {
101
+ atom = [t.text];
102
+ }
103
+ else if (t.kind === 'escape') {
104
+ atom = [t.text === '\\n' ? '\n' : t.text === '\\r' ? '\r' : t.text === '\\t' ? '\t' : t.text.slice(1)];
105
+ }
106
+ else if (t.kind === 'classEscape') {
107
+ atom = CLASS_SAMPLES[t.text] ?? ['a'];
108
+ }
109
+ else if (t.kind === 'class') {
110
+ atom = classSamples(t.text);
111
+ }
112
+ else if (t.kind === 'any') {
113
+ atom = ['a', '0'];
114
+ }
115
+ else {
116
+ atom = PROBE_CHARS.slice(0, 3);
117
+ }
118
+ const q = c.tokens[c.i];
119
+ if (q?.kind === 'quantifier') {
120
+ c.i++;
121
+ if (c.tokens[c.i]?.kind === 'lazy')
122
+ c.i++;
123
+ atom = repeat(atom, q.text);
124
+ }
125
+ acc = cross(acc, atom);
126
+ }
127
+ return acc;
128
+ }
129
+ /** Up to 32 candidate members of `pattern` (not all are guaranteed members). */
130
+ export function samplePattern(pattern) {
131
+ const cursor = { tokens: tokenizeXsdPattern(pattern), i: 0 };
132
+ return [...new Set(parseAlternation(cursor, 0))];
133
+ }
134
+ //# sourceMappingURL=sample.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sample.js","sourceRoot":"","sources":["../../../src/lint/solver/sample.ts"],"names":[],"mappings":"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"}