@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.
- package/LICENSE +373 -0
- package/README.md +469 -2
- package/dist/bsdd/cache.d.ts +37 -0
- package/dist/bsdd/cache.d.ts.map +1 -0
- package/dist/bsdd/cache.js +116 -0
- package/dist/bsdd/cache.js.map +1 -0
- package/dist/bsdd/contract.d.ts +31 -0
- package/dist/bsdd/contract.d.ts.map +1 -0
- package/dist/bsdd/contract.js +185 -0
- package/dist/bsdd/contract.js.map +1 -0
- package/dist/bsdd/dictionary.d.ts +42 -0
- package/dist/bsdd/dictionary.d.ts.map +1 -0
- package/dist/bsdd/dictionary.js +115 -0
- package/dist/bsdd/dictionary.js.map +1 -0
- package/dist/bsdd/generator.d.ts +82 -0
- package/dist/bsdd/generator.d.ts.map +1 -0
- package/dist/bsdd/generator.js +155 -0
- package/dist/bsdd/generator.js.map +1 -0
- package/dist/bsdd/http-source.d.ts +15 -0
- package/dist/bsdd/http-source.d.ts.map +1 -0
- package/dist/bsdd/http-source.js +196 -0
- package/dist/bsdd/http-source.js.map +1 -0
- package/dist/bsdd/idb-store.d.ts +16 -0
- package/dist/bsdd/idb-store.d.ts.map +1 -0
- package/dist/bsdd/idb-store.js +58 -0
- package/dist/bsdd/idb-store.js.map +1 -0
- package/dist/bsdd/insert.d.ts +55 -0
- package/dist/bsdd/insert.d.ts.map +1 -0
- package/dist/bsdd/insert.js +105 -0
- package/dist/bsdd/insert.js.map +1 -0
- package/dist/bsdd/mapping.d.ts +62 -0
- package/dist/bsdd/mapping.d.ts.map +1 -0
- package/dist/bsdd/mapping.js +163 -0
- package/dist/bsdd/mapping.js.map +1 -0
- package/dist/bsdd/picker.d.ts +91 -0
- package/dist/bsdd/picker.d.ts.map +1 -0
- package/dist/bsdd/picker.js +151 -0
- package/dist/bsdd/picker.js.map +1 -0
- package/dist/bsdd/types.d.ts +162 -0
- package/dist/bsdd/types.d.ts.map +1 -0
- package/dist/bsdd/types.js +26 -0
- package/dist/bsdd/types.js.map +1 -0
- package/dist/bsdd/uri-health.d.ts +65 -0
- package/dist/bsdd/uri-health.d.ts.map +1 -0
- package/dist/bsdd/uri-health.js +110 -0
- package/dist/bsdd/uri-health.js.map +1 -0
- package/dist/canonical-json.d.ts +7 -0
- package/dist/canonical-json.d.ts.map +1 -0
- package/dist/canonical-json.js +20 -0
- package/dist/canonical-json.js.map +1 -0
- package/dist/comments/view.d.ts +37 -0
- package/dist/comments/view.d.ts.map +1 -0
- package/dist/comments/view.js +61 -0
- package/dist/comments/view.js.map +1 -0
- package/dist/compound/expand.d.ts +5 -0
- package/dist/compound/expand.d.ts.map +1 -0
- package/dist/compound/expand.js +135 -0
- package/dist/compound/expand.js.map +1 -0
- package/dist/compound/from-bsdd.d.ts +9 -0
- package/dist/compound/from-bsdd.d.ts.map +1 -0
- package/dist/compound/from-bsdd.js +166 -0
- package/dist/compound/from-bsdd.js.map +1 -0
- package/dist/diff/align.d.ts +42 -0
- package/dist/diff/align.d.ts.map +1 -0
- package/dist/diff/align.js +78 -0
- package/dist/diff/align.js.map +1 -0
- package/dist/diff/changelog-text.d.ts +39 -0
- package/dist/diff/changelog-text.d.ts.map +1 -0
- package/dist/diff/changelog-text.js +120 -0
- package/dist/diff/changelog-text.js.map +1 -0
- package/dist/diff/changelog.d.ts +28 -0
- package/dist/diff/changelog.d.ts.map +1 -0
- package/dist/diff/changelog.js +173 -0
- package/dist/diff/changelog.js.map +1 -0
- package/dist/diff/compare.d.ts +25 -0
- package/dist/diff/compare.d.ts.map +1 -0
- package/dist/diff/compare.js +150 -0
- package/dist/diff/compare.js.map +1 -0
- package/dist/diff/diff.d.ts +13 -0
- package/dist/diff/diff.d.ts.map +1 -0
- package/dist/diff/diff.js +140 -0
- package/dist/diff/diff.js.map +1 -0
- package/dist/diff/index.d.ts +5 -0
- package/dist/diff/index.d.ts.map +1 -0
- package/dist/diff/index.js +7 -0
- package/dist/diff/index.js.map +1 -0
- package/dist/diff/patch.d.ts +10 -0
- package/dist/diff/patch.d.ts.map +1 -0
- package/dist/diff/patch.js +177 -0
- package/dist/diff/patch.js.map +1 -0
- package/dist/diff/types.d.ts +201 -0
- package/dist/diff/types.d.ts.map +1 -0
- package/dist/diff/types.js +5 -0
- package/dist/diff/types.js.map +1 -0
- package/dist/document/fields.d.ts +33 -0
- package/dist/document/fields.d.ts.map +1 -0
- package/dist/document/fields.js +117 -0
- package/dist/document/fields.js.map +1 -0
- package/dist/document/from-ids.d.ts +32 -0
- package/dist/document/from-ids.d.ts.map +1 -0
- package/dist/document/from-ids.js +47 -0
- package/dist/document/from-ids.js.map +1 -0
- package/dist/document/node-index.d.ts +32 -0
- package/dist/document/node-index.d.ts.map +1 -0
- package/dist/document/node-index.js +127 -0
- package/dist/document/node-index.js.map +1 -0
- package/dist/document/types.d.ts +170 -0
- package/dist/document/types.d.ts.map +1 -0
- package/dist/document/types.js +19 -0
- package/dist/document/types.js.map +1 -0
- package/dist/gate/bsdd.d.ts +12 -0
- package/dist/gate/bsdd.d.ts.map +1 -0
- package/dist/gate/bsdd.js +17 -0
- package/dist/gate/bsdd.js.map +1 -0
- package/dist/gate/check.d.ts +6 -0
- package/dist/gate/check.d.ts.map +1 -0
- package/dist/gate/check.js +125 -0
- package/dist/gate/check.js.map +1 -0
- package/dist/gate/context.d.ts +51 -0
- package/dist/gate/context.d.ts.map +1 -0
- package/dist/gate/context.js +74 -0
- package/dist/gate/context.js.map +1 -0
- package/dist/gate/grounding-pset.d.ts +5 -0
- package/dist/gate/grounding-pset.d.ts.map +1 -0
- package/dist/gate/grounding-pset.js +179 -0
- package/dist/gate/grounding-pset.js.map +1 -0
- package/dist/gate/grounding.d.ts +48 -0
- package/dist/gate/grounding.d.ts.map +1 -0
- package/dist/gate/grounding.js +146 -0
- package/dist/gate/grounding.js.map +1 -0
- package/dist/gate/rank.d.ts +28 -0
- package/dist/gate/rank.d.ts.map +1 -0
- package/dist/gate/rank.js +68 -0
- package/dist/gate/rank.js.map +1 -0
- package/dist/gate/structural.d.ts +43 -0
- package/dist/gate/structural.d.ts.map +1 -0
- package/dist/gate/structural.js +175 -0
- package/dist/gate/structural.js.map +1 -0
- package/dist/gate/types.d.ts +45 -0
- package/dist/gate/types.d.ts.map +1 -0
- package/dist/gate/types.js +5 -0
- package/dist/gate/types.js.map +1 -0
- package/dist/gate/values.d.ts +19 -0
- package/dist/gate/values.d.ts.map +1 -0
- package/dist/gate/values.js +124 -0
- package/dist/gate/values.js.map +1 -0
- package/dist/headless/apply-gated.d.ts +32 -0
- package/dist/headless/apply-gated.d.ts.map +1 -0
- package/dist/headless/apply-gated.js +26 -0
- package/dist/headless/apply-gated.js.map +1 -0
- package/dist/headless/diff.d.ts +41 -0
- package/dist/headless/diff.d.ts.map +1 -0
- package/dist/headless/diff.js +116 -0
- package/dist/headless/diff.js.map +1 -0
- package/dist/headless/node-path.d.ts +10 -0
- package/dist/headless/node-path.d.ts.map +1 -0
- package/dist/headless/node-path.js +24 -0
- package/dist/headless/node-path.js.map +1 -0
- package/dist/headless/read.d.ts +26 -0
- package/dist/headless/read.d.ts.map +1 -0
- package/dist/headless/read.js +78 -0
- package/dist/headless/read.js.map +1 -0
- package/dist/headless/schema-lookup.d.ts +52 -0
- package/dist/headless/schema-lookup.d.ts.map +1 -0
- package/dist/headless/schema-lookup.js +77 -0
- package/dist/headless/schema-lookup.js.map +1 -0
- package/dist/headless/write.d.ts +46 -0
- package/dist/headless/write.d.ts.map +1 -0
- package/dist/headless/write.js +103 -0
- package/dist/headless/write.js.map +1 -0
- package/dist/history/history.d.ts +90 -0
- package/dist/history/history.d.ts.map +1 -0
- package/dist/history/history.js +86 -0
- package/dist/history/history.js.map +1 -0
- package/dist/history/persistence.d.ts +33 -0
- package/dist/history/persistence.d.ts.map +1 -0
- package/dist/history/persistence.js +71 -0
- package/dist/history/persistence.js.map +1 -0
- package/dist/index.d.ts +55 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +75 -0
- package/dist/index.js.map +1 -0
- package/dist/lint/context.d.ts +15 -0
- package/dist/lint/context.d.ts.map +1 -0
- package/dist/lint/context.js +24 -0
- package/dist/lint/context.js.map +1 -0
- package/dist/lint/docs.d.ts +18 -0
- package/dist/lint/docs.d.ts.map +1 -0
- package/dist/lint/docs.js +117 -0
- package/dist/lint/docs.js.map +1 -0
- package/dist/lint/engine.d.ts +21 -0
- package/dist/lint/engine.d.ts.map +1 -0
- package/dist/lint/engine.js +123 -0
- package/dist/lint/engine.js.map +1 -0
- package/dist/lint/fix.d.ts +27 -0
- package/dist/lint/fix.d.ts.map +1 -0
- package/dist/lint/fix.js +22 -0
- package/dist/lint/fix.js.map +1 -0
- package/dist/lint/precision.d.ts +51 -0
- package/dist/lint/precision.d.ts.map +1 -0
- package/dist/lint/precision.js +64 -0
- package/dist/lint/precision.js.map +1 -0
- package/dist/lint/rules/bsdd.d.ts +5 -0
- package/dist/lint/rules/bsdd.d.ts.map +1 -0
- package/dist/lint/rules/bsdd.js +123 -0
- package/dist/lint/rules/bsdd.js.map +1 -0
- package/dist/lint/rules/card.d.ts +10 -0
- package/dist/lint/rules/card.d.ts.map +1 -0
- package/dist/lint/rules/card.js +140 -0
- package/dist/lint/rules/card.js.map +1 -0
- package/dist/lint/rules/doc-ver-part.d.ts +7 -0
- package/dist/lint/rules/doc-ver-part.d.ts.map +1 -0
- package/dist/lint/rules/doc-ver-part.js +155 -0
- package/dist/lint/rules/doc-ver-part.js.map +1 -0
- package/dist/lint/rules/entity.d.ts +12 -0
- package/dist/lint/rules/entity.d.ts.map +1 -0
- package/dist/lint/rules/entity.js +215 -0
- package/dist/lint/rules/entity.js.map +1 -0
- package/dist/lint/rules/index.d.ts +4 -0
- package/dist/lint/rules/index.d.ts.map +1 -0
- package/dist/lint/rules/index.js +63 -0
- package/dist/lint/rules/index.js.map +1 -0
- package/dist/lint/rules/pdt-att.d.ts +7 -0
- package/dist/lint/rules/pdt-att.d.ts.map +1 -0
- package/dist/lint/rules/pdt-att.js +209 -0
- package/dist/lint/rules/pdt-att.js.map +1 -0
- package/dist/lint/rules/pset.d.ts +12 -0
- package/dist/lint/rules/pset.d.ts.map +1 -0
- package/dist/lint/rules/pset.js +263 -0
- package/dist/lint/rules/pset.js.map +1 -0
- package/dist/lint/rules/regex.d.ts +6 -0
- package/dist/lint/rules/regex.d.ts.map +1 -0
- package/dist/lint/rules/regex.js +184 -0
- package/dist/lint/rules/regex.js.map +1 -0
- package/dist/lint/rules/spec-doc.d.ts +5 -0
- package/dist/lint/rules/spec-doc.d.ts.map +1 -0
- package/dist/lint/rules/spec-doc.js +132 -0
- package/dist/lint/rules/spec-doc.js.map +1 -0
- package/dist/lint/rules/spec.d.ts +24 -0
- package/dist/lint/rules/spec.d.ts.map +1 -0
- package/dist/lint/rules/spec.js +162 -0
- package/dist/lint/rules/spec.js.map +1 -0
- package/dist/lint/rules/units.d.ts +4 -0
- package/dist/lint/rules/units.d.ts.map +1 -0
- package/dist/lint/rules/units.js +101 -0
- package/dist/lint/rules/units.js.map +1 -0
- package/dist/lint/rules/util.d.ts +37 -0
- package/dist/lint/rules/util.d.ts.map +1 -0
- package/dist/lint/rules/util.js +117 -0
- package/dist/lint/rules/util.js.map +1 -0
- package/dist/lint/rules/value-sites.d.ts +28 -0
- package/dist/lint/rules/value-sites.d.ts.map +1 -0
- package/dist/lint/rules/value-sites.js +81 -0
- package/dist/lint/rules/value-sites.js.map +1 -0
- package/dist/lint/rules/values.d.ts +22 -0
- package/dist/lint/rules/values.d.ts.map +1 -0
- package/dist/lint/rules/values.js +237 -0
- package/dist/lint/rules/values.js.map +1 -0
- package/dist/lint/rules/xsd-regex.d.ts +34 -0
- package/dist/lint/rules/xsd-regex.d.ts.map +1 -0
- package/dist/lint/rules/xsd-regex.js +149 -0
- package/dist/lint/rules/xsd-regex.js.map +1 -0
- package/dist/lint/solver/sample.d.ts +3 -0
- package/dist/lint/solver/sample.d.ts.map +1 -0
- package/dist/lint/solver/sample.js +134 -0
- package/dist/lint/solver/sample.js.map +1 -0
- package/dist/lint/solver/solver.d.ts +39 -0
- package/dist/lint/solver/solver.d.ts.map +1 -0
- package/dist/lint/solver/solver.js +126 -0
- package/dist/lint/solver/solver.js.map +1 -0
- package/dist/lint/suppress.d.ts +12 -0
- package/dist/lint/suppress.d.ts.map +1 -0
- package/dist/lint/suppress.js +56 -0
- package/dist/lint/suppress.js.map +1 -0
- package/dist/lint/types.d.ts +162 -0
- package/dist/lint/types.d.ts.map +1 -0
- package/dist/lint/types.js +5 -0
- package/dist/lint/types.js.map +1 -0
- package/dist/lint/walk.d.ts +20 -0
- package/dist/lint/walk.d.ts.map +1 -0
- package/dist/lint/walk.js +47 -0
- package/dist/lint/walk.js.map +1 -0
- package/dist/match/cascade.d.ts +53 -0
- package/dist/match/cascade.d.ts.map +1 -0
- package/dist/match/cascade.js +135 -0
- package/dist/match/cascade.js.map +1 -0
- package/dist/match/reidentify.d.ts +46 -0
- package/dist/match/reidentify.d.ts.map +1 -0
- package/dist/match/reidentify.js +67 -0
- package/dist/match/reidentify.js.map +1 -0
- package/dist/merge/comments.d.ts +13 -0
- package/dist/merge/comments.d.ts.map +1 -0
- package/dist/merge/comments.js +61 -0
- package/dist/merge/comments.js.map +1 -0
- package/dist/merge/index.d.ts +4 -0
- package/dist/merge/index.d.ts.map +1 -0
- package/dist/merge/index.js +6 -0
- package/dist/merge/index.js.map +1 -0
- package/dist/merge/keys.d.ts +22 -0
- package/dist/merge/keys.d.ts.map +1 -0
- package/dist/merge/keys.js +54 -0
- package/dist/merge/keys.js.map +1 -0
- package/dist/merge/merge.d.ts +8 -0
- package/dist/merge/merge.d.ts.map +1 -0
- package/dist/merge/merge.js +206 -0
- package/dist/merge/merge.js.map +1 -0
- package/dist/merge/order.d.ts +11 -0
- package/dist/merge/order.d.ts.map +1 -0
- package/dist/merge/order.js +117 -0
- package/dist/merge/order.js.map +1 -0
- package/dist/merge/sidecar.d.ts +12 -0
- package/dist/merge/sidecar.d.ts.map +1 -0
- package/dist/merge/sidecar.js +64 -0
- package/dist/merge/sidecar.js.map +1 -0
- package/dist/merge/types.d.ts +50 -0
- package/dist/merge/types.d.ts.map +1 -0
- package/dist/merge/types.js +5 -0
- package/dist/merge/types.js.map +1 -0
- package/dist/merge/view.d.ts +28 -0
- package/dist/merge/view.d.ts.map +1 -0
- package/dist/merge/view.js +35 -0
- package/dist/merge/view.js.map +1 -0
- package/dist/ops/draft.d.ts +33 -0
- package/dist/ops/draft.d.ts.map +1 -0
- package/dist/ops/draft.js +253 -0
- package/dist/ops/draft.js.map +1 -0
- package/dist/ops/json-schema-lite.d.ts +41 -0
- package/dist/ops/json-schema-lite.d.ts.map +1 -0
- package/dist/ops/json-schema-lite.js +119 -0
- package/dist/ops/json-schema-lite.js.map +1 -0
- package/dist/ops/schema-values.d.ts +5 -0
- package/dist/ops/schema-values.d.ts.map +1 -0
- package/dist/ops/schema-values.js +233 -0
- package/dist/ops/schema-values.js.map +1 -0
- package/dist/ops/schema.d.ts +27 -0
- package/dist/ops/schema.d.ts.map +1 -0
- package/dist/ops/schema.js +258 -0
- package/dist/ops/schema.js.map +1 -0
- package/dist/ops/sidecar-ops.d.ts +85 -0
- package/dist/ops/sidecar-ops.d.ts.map +1 -0
- package/dist/ops/sidecar-ops.js +5 -0
- package/dist/ops/sidecar-ops.js.map +1 -0
- package/dist/ops/types.d.ts +400 -0
- package/dist/ops/types.d.ts.map +1 -0
- package/dist/ops/types.js +5 -0
- package/dist/ops/types.js.map +1 -0
- package/dist/ops/units.d.ts +4 -0
- package/dist/ops/units.d.ts.map +1 -0
- package/dist/ops/units.js +75 -0
- package/dist/ops/units.js.map +1 -0
- package/dist/reducer/apply.d.ts +33 -0
- package/dist/reducer/apply.d.ts.map +1 -0
- package/dist/reducer/apply.js +123 -0
- package/dist/reducer/apply.js.map +1 -0
- package/dist/reducer/comment-ops.d.ts +18 -0
- package/dist/reducer/comment-ops.d.ts.map +1 -0
- package/dist/reducer/comment-ops.js +104 -0
- package/dist/reducer/comment-ops.js.map +1 -0
- package/dist/reducer/edit.d.ts +38 -0
- package/dist/reducer/edit.d.ts.map +1 -0
- package/dist/reducer/edit.js +126 -0
- package/dist/reducer/edit.js.map +1 -0
- package/dist/reducer/facet-ops.d.ts +20 -0
- package/dist/reducer/facet-ops.d.ts.map +1 -0
- package/dist/reducer/facet-ops.js +184 -0
- package/dist/reducer/facet-ops.js.map +1 -0
- package/dist/reducer/meta-ops.d.ts +20 -0
- package/dist/reducer/meta-ops.d.ts.map +1 -0
- package/dist/reducer/meta-ops.js +52 -0
- package/dist/reducer/meta-ops.js.map +1 -0
- package/dist/reducer/spec-ops.d.ts +29 -0
- package/dist/reducer/spec-ops.d.ts.map +1 -0
- package/dist/reducer/spec-ops.js +181 -0
- package/dist/reducer/spec-ops.js.map +1 -0
- package/dist/reducer/test-ops.d.ts +15 -0
- package/dist/reducer/test-ops.d.ts.map +1 -0
- package/dist/reducer/test-ops.js +90 -0
- package/dist/reducer/test-ops.js.map +1 -0
- package/dist/reducer/value-ops.d.ts +26 -0
- package/dist/reducer/value-ops.d.ts.map +1 -0
- package/dist/reducer/value-ops.js +173 -0
- package/dist/reducer/value-ops.js.map +1 -0
- package/dist/render/describe.d.ts +20 -0
- package/dist/render/describe.d.ts.map +1 -0
- package/dist/render/describe.js +47 -0
- package/dist/render/describe.js.map +1 -0
- package/dist/revision/index.d.ts +4 -0
- package/dist/revision/index.d.ts.map +1 -0
- package/dist/revision/index.js +7 -0
- package/dist/revision/index.js.map +1 -0
- package/dist/revision/revision.d.ts +79 -0
- package/dist/revision/revision.d.ts.map +1 -0
- package/dist/revision/revision.js +120 -0
- package/dist/revision/revision.js.map +1 -0
- package/dist/revision/sha256.d.ts +3 -0
- package/dist/revision/sha256.d.ts.map +1 -0
- package/dist/revision/sha256.js +69 -0
- package/dist/revision/sha256.js.map +1 -0
- package/dist/revision/verify.d.ts +21 -0
- package/dist/revision/verify.d.ts.map +1 -0
- package/dist/revision/verify.js +51 -0
- package/dist/revision/verify.js.map +1 -0
- package/dist/revision/view.d.ts +36 -0
- package/dist/revision/view.d.ts.map +1 -0
- package/dist/revision/view.js +32 -0
- package/dist/revision/view.js.map +1 -0
- package/dist/sidecar/idsz.d.ts +14 -0
- package/dist/sidecar/idsz.d.ts.map +1 -0
- package/dist/sidecar/idsz.js +58 -0
- package/dist/sidecar/idsz.js.map +1 -0
- package/dist/sidecar/sidecar-schema.d.ts +4 -0
- package/dist/sidecar/sidecar-schema.d.ts.map +1 -0
- package/dist/sidecar/sidecar-schema.js +69 -0
- package/dist/sidecar/sidecar-schema.js.map +1 -0
- package/dist/sidecar/sidecar.d.ts +102 -0
- package/dist/sidecar/sidecar.d.ts.map +1 -0
- package/dist/sidecar/sidecar.js +160 -0
- package/dist/sidecar/sidecar.js.map +1 -0
- package/dist/testing/index.d.ts +6 -0
- package/dist/testing/index.d.ts.map +1 -0
- package/dist/testing/index.js +8 -0
- package/dist/testing/index.js.map +1 -0
- package/dist/testing/junit.d.ts +10 -0
- package/dist/testing/junit.d.ts.map +1 -0
- package/dist/testing/junit.js +51 -0
- package/dist/testing/junit.js.map +1 -0
- package/dist/testing/outcome.d.ts +10 -0
- package/dist/testing/outcome.d.ts.map +1 -0
- package/dist/testing/outcome.js +22 -0
- package/dist/testing/outcome.js.map +1 -0
- package/dist/testing/runner.d.ts +72 -0
- package/dist/testing/runner.d.ts.map +1 -0
- package/dist/testing/runner.js +60 -0
- package/dist/testing/runner.js.map +1 -0
- package/dist/testing/types.d.ts +60 -0
- package/dist/testing/types.d.ts.map +1 -0
- package/dist/testing/types.js +5 -0
- package/dist/testing/types.js.map +1 -0
- package/dist/testing/view.d.ts +31 -0
- package/dist/testing/view.d.ts.map +1 -0
- package/dist/testing/view.js +30 -0
- package/dist/testing/view.js.map +1 -0
- package/dist/uuid.d.ts +39 -0
- package/dist/uuid.d.ts.map +1 -0
- package/dist/uuid.js +84 -0
- package/dist/uuid.js.map +1 -0
- 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>>= 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 @@
|
|
|
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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"}
|