@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,101 @@
|
|
|
1
|
+
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
2
|
+
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
3
|
+
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
|
|
4
|
+
import { quickFix } from '../fix.js';
|
|
5
|
+
import { at } from '../walk.js';
|
|
6
|
+
import { gated, single } from './util.js';
|
|
7
|
+
import { FLOAT_XSD, mapLiterals, siteLiterals, valueSites } from './value-sites.js';
|
|
8
|
+
import { rawSet } from './values.js';
|
|
9
|
+
const NUMBER = /^[+-]?(\d+(\.\d*)?|\.\d+)([eE][+-]?\d+)?$/;
|
|
10
|
+
export const VAL_008 = {
|
|
11
|
+
code: 'IDSL-VAL-008',
|
|
12
|
+
area: 'VAL',
|
|
13
|
+
scope: 'spec',
|
|
14
|
+
kind: 'static',
|
|
15
|
+
defaultSeverity: 'info',
|
|
16
|
+
title: 'Exact match on a real number',
|
|
17
|
+
rationale: 'The value is an exact real number on a floating-point data type. IDS 1.0 compares reals with a small relative tolerance (1e-6, see the buildingSMART tolerance test cases), which absorbs rounding but not unit conversion or modelling tolerance: 2.4 does not match 2.4004. A range states the tolerance explicitly. Tolerance handling is under discussion for IDS 1.1 (IDS issue #418).',
|
|
18
|
+
references: ['https://github.com/buildingSMART/IDS/issues/418'],
|
|
19
|
+
example: '<property dataType="IFCLENGTHMEASURE">…<value><simpleValue>2.4</simpleValue></value></property>',
|
|
20
|
+
check(spec, { ctx }) {
|
|
21
|
+
const out = [];
|
|
22
|
+
for (const site of valueSites(ctx, spec)) {
|
|
23
|
+
if (site.field !== 'property.value' || !site.xsd.some((x) => FLOAT_XSD.has(x)))
|
|
24
|
+
continue;
|
|
25
|
+
const nums = siteLiterals(site.constraint).filter((v) => NUMBER.test(v.trim()));
|
|
26
|
+
if (!nums.length || site.constraint.type === 'bounds')
|
|
27
|
+
continue;
|
|
28
|
+
out.push({ ...at(site.view, site.field), message: `exact match on the real ${nums.join(', ')} (${site.dataType}); consider a range` });
|
|
29
|
+
}
|
|
30
|
+
return out;
|
|
31
|
+
},
|
|
32
|
+
};
|
|
33
|
+
const LENGTH = { kind: 'length', threshold: 1000, factor: 1e3, unit: 'mm' };
|
|
34
|
+
const SHORT_LENGTH = { ...LENGTH, threshold: 100 };
|
|
35
|
+
const AREA = { kind: 'area', threshold: 1e6, factor: 1e6, unit: 'mm²' };
|
|
36
|
+
const VOLUME = { kind: 'volume', threshold: 1e9, factor: 1e9, unit: 'mm³' };
|
|
37
|
+
const DIMENSION_NAME = /(Height|Width|Depth|Thickness|Diameter|Radius)$/;
|
|
38
|
+
function quantityOf(dataType, baseName) {
|
|
39
|
+
switch (dataType) {
|
|
40
|
+
case 'IFCLENGTHMEASURE':
|
|
41
|
+
case 'IFCPOSITIVELENGTHMEASURE':
|
|
42
|
+
case 'IFCNONNEGATIVELENGTHMEASURE':
|
|
43
|
+
return baseName && DIMENSION_NAME.test(baseName) ? SHORT_LENGTH : LENGTH;
|
|
44
|
+
case 'IFCAREAMEASURE':
|
|
45
|
+
return AREA;
|
|
46
|
+
case 'IFCVOLUMEMEASURE':
|
|
47
|
+
return VOLUME;
|
|
48
|
+
default:
|
|
49
|
+
return undefined;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
const BOUND_KEYS = ['minInclusive', 'maxInclusive', 'minExclusive', 'maxExclusive'];
|
|
53
|
+
function magnitudes(c) {
|
|
54
|
+
if (c.type === 'bounds')
|
|
55
|
+
return BOUND_KEYS.map((k) => c[k]).filter((x) => x !== undefined);
|
|
56
|
+
return siteLiterals(c).filter((v) => NUMBER.test(v.trim())).map(Number);
|
|
57
|
+
}
|
|
58
|
+
function scaled(n, factor) {
|
|
59
|
+
return Number((n / factor).toPrecision(12));
|
|
60
|
+
}
|
|
61
|
+
function convert(c, factor) {
|
|
62
|
+
if (c.type !== 'bounds')
|
|
63
|
+
return mapLiterals(c, (v) => (NUMBER.test(v.trim()) ? String(scaled(Number(v), factor)) : v));
|
|
64
|
+
const next = { ...c };
|
|
65
|
+
for (const k of BOUND_KEYS)
|
|
66
|
+
if (c[k] !== undefined)
|
|
67
|
+
next[k] = scaled(c[k], factor);
|
|
68
|
+
return next;
|
|
69
|
+
}
|
|
70
|
+
export const UNIT_001 = {
|
|
71
|
+
code: 'IDSL-UNIT-001',
|
|
72
|
+
area: 'UNIT',
|
|
73
|
+
scope: 'spec',
|
|
74
|
+
kind: 'static',
|
|
75
|
+
defaultSeverity: 'warning',
|
|
76
|
+
title: 'Magnitude suggests a non-SI unit',
|
|
77
|
+
rationale: 'IDS values are in SI units: metres, square metres, cubic metres. A door height of 2400 or a wall thickness of 240 is almost certainly in millimetres and will never match a model, which stores 2.4 and 0.24 in IDS terms. Thresholds: lengths from 1000 (from 100 for Height, Width, Depth, Thickness, Diameter, Radius), areas from 1e6, volumes from 1e9.',
|
|
78
|
+
fix: 'Convert the value from millimetres to SI.',
|
|
79
|
+
example: '<property dataType="IFCLENGTHMEASURE">…<baseName><simpleValue>Height</simpleValue></baseName><value><simpleValue>2400</simpleValue></value></property>',
|
|
80
|
+
check(spec, { ctx, doc }) {
|
|
81
|
+
const out = [];
|
|
82
|
+
for (const site of valueSites(ctx, spec)) {
|
|
83
|
+
if (site.field !== 'property.value' || site.view.facet.type !== 'property')
|
|
84
|
+
continue;
|
|
85
|
+
const q = quantityOf(site.dataType, single(site.view.facet.baseName));
|
|
86
|
+
if (!q)
|
|
87
|
+
continue;
|
|
88
|
+
const big = magnitudes(site.constraint).filter((n) => Math.abs(n) >= q.threshold);
|
|
89
|
+
if (!big.length)
|
|
90
|
+
continue;
|
|
91
|
+
const fix = quickFix(`Convert from ${q.unit}`, this.code, site.view.facetId, q.unit, [rawSet(site.view.facetId, site.field, convert(site.constraint, q.factor))]);
|
|
92
|
+
out.push({
|
|
93
|
+
...at(site.view, site.field),
|
|
94
|
+
message: `${big.join(', ')} as a ${q.kind} in SI units is implausible; probably ${q.unit} (= ${big.map((n) => scaled(n, q.factor)).join(', ')})`,
|
|
95
|
+
fixes: gated(doc, ctx, [fix]),
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
return out;
|
|
99
|
+
},
|
|
100
|
+
};
|
|
101
|
+
//# sourceMappingURL=units.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"units.js","sourceRoot":"","sources":["../../../src/lint/rules/units.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/** Shared helpers for catalogue rules: schema lookups and gated fixes. */
|
|
2
|
+
import type { IfcEntityInfo } from '@ifc-lite/data';
|
|
3
|
+
import type { IDSConstraint, IDSEntityFacet, IFCVersion } from '@ifc-lite/ids';
|
|
4
|
+
import type { StudioDocument } from '../../document/types.js';
|
|
5
|
+
import { type VersionTables } from '../../gate/context.js';
|
|
6
|
+
import type { FacetView, LintContext, QuickFix, SpecView } from '../types.js';
|
|
7
|
+
export { literals, single } from '../../gate/grounding.js';
|
|
8
|
+
export declare function tables(ctx: LintContext, version: IFCVersion): VersionTables;
|
|
9
|
+
/** Keep only fixes that pass the grounding gate on `doc`. */
|
|
10
|
+
export declare function gated(doc: StudioDocument, ctx: LintContext, fixes: readonly (QuickFix | undefined)[]): QuickFix[] | undefined;
|
|
11
|
+
/** Every descendant of `name` (not itself), breadth first. Iterative: no recursion over table data. */
|
|
12
|
+
export declare function descendants(t: VersionTables, name: string): IfcEntityInfo[];
|
|
13
|
+
export declare function isSubtypeOf(t: VersionTables, name: string, ancestor: string): boolean;
|
|
14
|
+
/**
|
|
15
|
+
* Concrete descendants of `name` that exist and are concrete in EVERY
|
|
16
|
+
* version, as PascalCase names in the order of the first version.
|
|
17
|
+
*/
|
|
18
|
+
export declare function concreteDescendants(ctx: LintContext, versions: readonly IFCVersion[], name: string): string[];
|
|
19
|
+
/** Canonical PascalCase name of an entity literal, from the first version that knows it. */
|
|
20
|
+
export declare function canonicalEntity(ctx: LintContext, versions: readonly IFCVersion[], name: string): string | undefined;
|
|
21
|
+
/** Literal entity names (upper case) of the spec's applicability entity facets. */
|
|
22
|
+
export declare function applicabilityEntityNames(spec: SpecView): string[];
|
|
23
|
+
/** The single applicability entity facet, when there is exactly one. */
|
|
24
|
+
export declare function soleEntityFacet(spec: SpecView): IDSEntityFacet | undefined;
|
|
25
|
+
/** Facets carrying an entity name: entity facets and partOf related entities. */
|
|
26
|
+
export declare function entityNameSites(spec: SpecView): {
|
|
27
|
+
view: FacetView;
|
|
28
|
+
field: 'entity.name' | 'partOf.entity.name';
|
|
29
|
+
constraint: IDSConstraint;
|
|
30
|
+
pdt?: IDSConstraint;
|
|
31
|
+
}[];
|
|
32
|
+
/** Replace `value` by `replacement` (in place) in the literal list of `c`. */
|
|
33
|
+
export declare function replaceLiteral(c: IDSConstraint, value: string, replacement: readonly string[]): string[];
|
|
34
|
+
export declare function plural(n: number, word: string): string;
|
|
35
|
+
/** Up to `n` items, then "…and k more". */
|
|
36
|
+
export declare function listSome(items: readonly string[], n?: number): string;
|
|
37
|
+
//# sourceMappingURL=util.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../../../src/lint/rules/util.ts"],"names":[],"mappings":"AAIA,0EAA0E;AAE1E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC/E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAE9D,OAAO,EAAoB,KAAK,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAE7E,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAE9E,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAC;AAE3D,wBAAgB,MAAM,CAAC,GAAG,EAAE,WAAW,EAAE,OAAO,EAAE,UAAU,GAAG,aAAa,CAE3E;AAED,6DAA6D;AAC7D,wBAAgB,KAAK,CAAC,GAAG,EAAE,cAAc,EAAE,GAAG,EAAE,WAAW,EAAE,KAAK,EAAE,SAAS,CAAC,QAAQ,GAAG,SAAS,CAAC,EAAE,GAAG,QAAQ,EAAE,GAAG,SAAS,CAG7H;AAoBD,uGAAuG;AACvG,wBAAgB,WAAW,CAAC,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,GAAG,aAAa,EAAE,CAgB3E;AAED,wBAAgB,WAAW,CAAC,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAGrF;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,WAAW,EAAE,QAAQ,EAAE,SAAS,UAAU,EAAE,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAO7G;AAED,4FAA4F;AAC5F,wBAAgB,eAAe,CAAC,GAAG,EAAE,WAAW,EAAE,QAAQ,EAAE,SAAS,UAAU,EAAE,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAMnH;AAED,mFAAmF;AACnF,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,QAAQ,GAAG,MAAM,EAAE,CAEjE;AAED,wEAAwE;AACxE,wBAAgB,eAAe,CAAC,IAAI,EAAE,QAAQ,GAAG,cAAc,GAAG,SAAS,CAI1E;AAED,iFAAiF;AACjF,wBAAgB,eAAe,CAAC,IAAI,EAAE,QAAQ,GAAG;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,KAAK,EAAE,aAAa,GAAG,oBAAoB,CAAC;IAAC,UAAU,EAAE,aAAa,CAAC;IAAC,GAAG,CAAC,EAAE,aAAa,CAAA;CAAE,EAAE,CAQlK;AAED,8EAA8E;AAC9E,wBAAgB,cAAc,CAAC,CAAC,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,EAAE,CAMxG;AAED,wBAAgB,MAAM,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAEtD;AAED,2CAA2C;AAC3C,wBAAgB,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,EAAE,CAAC,SAAI,GAAG,MAAM,CAEhE"}
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
2
|
+
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
3
|
+
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
|
|
4
|
+
import { checkOps } from '../../gate/check.js';
|
|
5
|
+
import { inheritanceChain } from '../../gate/context.js';
|
|
6
|
+
import { literals } from '../../gate/grounding.js';
|
|
7
|
+
export { literals, single } from '../../gate/grounding.js';
|
|
8
|
+
export function tables(ctx, version) {
|
|
9
|
+
return ctx.gate.tables[version];
|
|
10
|
+
}
|
|
11
|
+
/** Keep only fixes that pass the grounding gate on `doc`. */
|
|
12
|
+
export function gated(doc, ctx, fixes) {
|
|
13
|
+
const ok = fixes.filter((f) => !!f && f.ops.length > 0 && checkOps(f.ops, doc, ctx.gate).ok);
|
|
14
|
+
return ok.length ? ok : undefined;
|
|
15
|
+
}
|
|
16
|
+
const CHILDREN = new WeakMap();
|
|
17
|
+
function childrenIndex(t) {
|
|
18
|
+
let map = CHILDREN.get(t);
|
|
19
|
+
if (!map) {
|
|
20
|
+
map = new Map();
|
|
21
|
+
for (const e of t.entities.values()) {
|
|
22
|
+
if (!e.parent)
|
|
23
|
+
continue;
|
|
24
|
+
const key = e.parent.toUpperCase();
|
|
25
|
+
const list = map.get(key) ?? [];
|
|
26
|
+
list.push(e);
|
|
27
|
+
map.set(key, list);
|
|
28
|
+
}
|
|
29
|
+
CHILDREN.set(t, map);
|
|
30
|
+
}
|
|
31
|
+
return map;
|
|
32
|
+
}
|
|
33
|
+
/** Every descendant of `name` (not itself), breadth first. Iterative: no recursion over table data. */
|
|
34
|
+
export function descendants(t, name) {
|
|
35
|
+
const index = childrenIndex(t);
|
|
36
|
+
const out = [];
|
|
37
|
+
const seen = new Set([name.toUpperCase()]);
|
|
38
|
+
const queue = [name.toUpperCase()];
|
|
39
|
+
while (queue.length) {
|
|
40
|
+
const next = queue.shift();
|
|
41
|
+
for (const child of index.get(next) ?? []) {
|
|
42
|
+
const key = child.name.toUpperCase();
|
|
43
|
+
if (seen.has(key))
|
|
44
|
+
continue;
|
|
45
|
+
seen.add(key);
|
|
46
|
+
out.push(child);
|
|
47
|
+
queue.push(key);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
return out;
|
|
51
|
+
}
|
|
52
|
+
export function isSubtypeOf(t, name, ancestor) {
|
|
53
|
+
const target = ancestor.toUpperCase();
|
|
54
|
+
return inheritanceChain(t, name).some((e) => e.name.toUpperCase() === target);
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Concrete descendants of `name` that exist and are concrete in EVERY
|
|
58
|
+
* version, as PascalCase names in the order of the first version.
|
|
59
|
+
*/
|
|
60
|
+
export function concreteDescendants(ctx, versions, name) {
|
|
61
|
+
if (!versions.length)
|
|
62
|
+
return [];
|
|
63
|
+
const [first, ...rest] = versions;
|
|
64
|
+
return descendants(tables(ctx, first), name)
|
|
65
|
+
.filter((e) => !e.abstract)
|
|
66
|
+
.filter((e) => rest.every((v) => tables(ctx, v).entities.get(e.name.toUpperCase())?.abstract === false))
|
|
67
|
+
.map((e) => e.name);
|
|
68
|
+
}
|
|
69
|
+
/** Canonical PascalCase name of an entity literal, from the first version that knows it. */
|
|
70
|
+
export function canonicalEntity(ctx, versions, name) {
|
|
71
|
+
for (const v of versions) {
|
|
72
|
+
const e = tables(ctx, v).entities.get(name.toUpperCase());
|
|
73
|
+
if (e)
|
|
74
|
+
return e.name;
|
|
75
|
+
}
|
|
76
|
+
return undefined;
|
|
77
|
+
}
|
|
78
|
+
/** Literal entity names (upper case) of the spec's applicability entity facets. */
|
|
79
|
+
export function applicabilityEntityNames(spec) {
|
|
80
|
+
return spec.applicability.flatMap((f) => (f.facet.type === 'entity' ? literals(f.facet.name).map((n) => n.toUpperCase()) : []));
|
|
81
|
+
}
|
|
82
|
+
/** The single applicability entity facet, when there is exactly one. */
|
|
83
|
+
export function soleEntityFacet(spec) {
|
|
84
|
+
const facets = spec.applicability.filter((f) => f.facet.type === 'entity');
|
|
85
|
+
const only = facets.length === 1 ? facets[0].facet : undefined;
|
|
86
|
+
return only?.type === 'entity' ? only : undefined;
|
|
87
|
+
}
|
|
88
|
+
/** Facets carrying an entity name: entity facets and partOf related entities. */
|
|
89
|
+
export function entityNameSites(spec) {
|
|
90
|
+
const out = [];
|
|
91
|
+
for (const view of [...spec.applicability, ...spec.requirements]) {
|
|
92
|
+
const f = view.facet;
|
|
93
|
+
if (f.type === 'entity')
|
|
94
|
+
out.push({ view, field: 'entity.name', constraint: f.name, pdt: f.predefinedType });
|
|
95
|
+
if (f.type === 'partOf' && f.entity)
|
|
96
|
+
out.push({ view, field: 'partOf.entity.name', constraint: f.entity.name, pdt: f.entity.predefinedType });
|
|
97
|
+
}
|
|
98
|
+
return out;
|
|
99
|
+
}
|
|
100
|
+
/** Replace `value` by `replacement` (in place) in the literal list of `c`. */
|
|
101
|
+
export function replaceLiteral(c, value, replacement) {
|
|
102
|
+
const out = [];
|
|
103
|
+
for (const v of literals(c)) {
|
|
104
|
+
for (const r of v === value ? replacement : [v])
|
|
105
|
+
if (!out.some((o) => o.toUpperCase() === r.toUpperCase()))
|
|
106
|
+
out.push(r);
|
|
107
|
+
}
|
|
108
|
+
return out;
|
|
109
|
+
}
|
|
110
|
+
export function plural(n, word) {
|
|
111
|
+
return `${n} ${word}${n === 1 ? '' : 's'}`;
|
|
112
|
+
}
|
|
113
|
+
/** Up to `n` items, then "…and k more". */
|
|
114
|
+
export function listSome(items, n = 5) {
|
|
115
|
+
return items.length <= n ? items.join(', ') : `${items.slice(0, n).join(', ')} and ${items.length - n} more`;
|
|
116
|
+
}
|
|
117
|
+
//# sourceMappingURL=util.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"util.js","sourceRoot":"","sources":["../../../src/lint/rules/util.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Value sites: the constraint fields that hold VALUES (not names), with
|
|
3
|
+
* the data type they are compared under where it is known.
|
|
4
|
+
*/
|
|
5
|
+
import type { IDSConstraint } from '@ifc-lite/ids';
|
|
6
|
+
import type { FacetFieldName } from '../../document/fields.js';
|
|
7
|
+
import type { FacetView, LintContext, SpecView } from '../types.js';
|
|
8
|
+
export interface ValueSite {
|
|
9
|
+
view: FacetView;
|
|
10
|
+
field: FacetFieldName;
|
|
11
|
+
constraint: IDSConstraint;
|
|
12
|
+
/** Upper-case IFC data type (explicit, else from the standard property). */
|
|
13
|
+
dataType?: string;
|
|
14
|
+
/** XSD backing type of the data type, or the XSD types an attribute slot accepts. */
|
|
15
|
+
xsd: readonly string[];
|
|
16
|
+
/** Whether `dataType` was written on the facet. */
|
|
17
|
+
explicit: boolean;
|
|
18
|
+
}
|
|
19
|
+
export declare function valueSites(ctx: LintContext, spec: SpecView): ValueSite[];
|
|
20
|
+
export declare const NUMERIC_XSD: Set<string>;
|
|
21
|
+
export declare const FLOAT_XSD: Set<string>;
|
|
22
|
+
/** The XSD base a constraint declares, if any. */
|
|
23
|
+
export declare function baseOf(c: IDSConstraint): string | undefined;
|
|
24
|
+
/** Literal values of a site (simpleValue, or each enumeration value). */
|
|
25
|
+
export declare function siteLiterals(c: IDSConstraint): string[];
|
|
26
|
+
/** A copy of `c` with its literals mapped (simpleValue / enumeration only). */
|
|
27
|
+
export declare function mapLiterals(c: IDSConstraint, fn: (v: string) => string): IDSConstraint;
|
|
28
|
+
//# sourceMappingURL=value-sites.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"value-sites.d.ts","sourceRoot":"","sources":["../../../src/lint/rules/value-sites.ts"],"names":[],"mappings":"AAIA;;;GAGG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAoB,MAAM,eAAe,CAAC;AACrE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAG/D,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAIpE,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,SAAS,CAAC;IAChB,KAAK,EAAE,cAAc,CAAC;IACtB,UAAU,EAAE,aAAa,CAAC;IAC1B,4EAA4E;IAC5E,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,qFAAqF;IACrF,GAAG,EAAE,SAAS,MAAM,EAAE,CAAC;IACvB,mDAAmD;IACnD,QAAQ,EAAE,OAAO,CAAC;CACnB;AA+BD,wBAAgB,UAAU,CAAC,GAAG,EAAE,WAAW,EAAE,IAAI,EAAE,QAAQ,GAAG,SAAS,EAAE,CAmBxE;AAED,eAAO,MAAM,WAAW,aAAiE,CAAC;AAC1F,eAAO,MAAM,SAAS,aAAmD,CAAC;AAE1E,kDAAkD;AAClD,wBAAgB,MAAM,CAAC,CAAC,EAAE,aAAa,GAAG,MAAM,GAAG,SAAS,CAE3D;AAED,yEAAyE;AACzE,wBAAgB,YAAY,CAAC,CAAC,EAAE,aAAa,GAAG,MAAM,EAAE,CAIvD;AAED,+EAA+E;AAC/E,wBAAgB,WAAW,CAAC,CAAC,EAAE,aAAa,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,GAAG,aAAa,CAItF"}
|
|
@@ -0,0 +1,81 @@
|
|
|
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 { inheritanceChain } from '../../gate/context.js';
|
|
6
|
+
import { expectedDataType } from './pset.js';
|
|
7
|
+
import { applicabilityEntityNames, single, tables } from './util.js';
|
|
8
|
+
const VALUE_FIELDS = ['property.value', 'attribute.value', 'classification.value', 'classification.system', 'material.value'];
|
|
9
|
+
function propertyType(ctx, spec, facet) {
|
|
10
|
+
const explicit = single(facet.dataType)?.toUpperCase();
|
|
11
|
+
if (explicit)
|
|
12
|
+
return { dataType: explicit, explicit: true };
|
|
13
|
+
const psetName = single(facet.propertySet);
|
|
14
|
+
const name = single(facet.baseName);
|
|
15
|
+
if (!psetName || !name)
|
|
16
|
+
return { explicit: false };
|
|
17
|
+
const types = new Set(spec.versions.map((v) => expectedDataType(tables(ctx, v).psets.get(psetName)?.properties.find((p) => p.name === name))?.toUpperCase()));
|
|
18
|
+
const [only] = types;
|
|
19
|
+
return { dataType: types.size === 1 ? only : undefined, explicit: false };
|
|
20
|
+
}
|
|
21
|
+
function attributeXsd(ctx, spec, name) {
|
|
22
|
+
const entities = applicabilityEntityNames(spec);
|
|
23
|
+
if (!name || entities.length !== 1)
|
|
24
|
+
return [];
|
|
25
|
+
const sets = spec.versions.map((v) => {
|
|
26
|
+
const meta = ctx.attributes[v].get(name.toLowerCase());
|
|
27
|
+
if (!meta)
|
|
28
|
+
return [];
|
|
29
|
+
const chain = inheritanceChain(tables(ctx, v), entities[0]).map((e) => e.name.toUpperCase());
|
|
30
|
+
const key = chain.find((e) => meta.xsdTypesByEntity[e]);
|
|
31
|
+
return key ? [...meta.xsdTypesByEntity[key]] : [];
|
|
32
|
+
});
|
|
33
|
+
const [first, ...rest] = sets;
|
|
34
|
+
return first && rest.every((s) => s.join() === first.join()) ? first : [];
|
|
35
|
+
}
|
|
36
|
+
export function valueSites(ctx, spec) {
|
|
37
|
+
const out = [];
|
|
38
|
+
for (const view of [...spec.applicability, ...spec.requirements]) {
|
|
39
|
+
for (const field of VALUE_FIELDS) {
|
|
40
|
+
const constraint = getField(view.facet, field);
|
|
41
|
+
if (!constraint)
|
|
42
|
+
continue;
|
|
43
|
+
const f = view.facet;
|
|
44
|
+
if (f.type === 'property') {
|
|
45
|
+
const { dataType, explicit } = propertyType(ctx, spec, f);
|
|
46
|
+
const backing = dataType ? tables(ctx, spec.versions[0]).dataTypes.get(dataType)?.backingType : undefined;
|
|
47
|
+
out.push({ view, field, constraint, dataType, explicit, xsd: backing ? [backing] : [] });
|
|
48
|
+
}
|
|
49
|
+
else if (f.type === 'attribute') {
|
|
50
|
+
out.push({ view, field, constraint, explicit: false, xsd: attributeXsd(ctx, spec, single(f.name)) });
|
|
51
|
+
}
|
|
52
|
+
else {
|
|
53
|
+
out.push({ view, field, constraint, explicit: false, xsd: [] });
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
return out;
|
|
58
|
+
}
|
|
59
|
+
export const NUMERIC_XSD = new Set(['xs:double', 'xs:integer', 'xs:decimal', 'xs:float']);
|
|
60
|
+
export const FLOAT_XSD = new Set(['xs:double', 'xs:decimal', 'xs:float']);
|
|
61
|
+
/** The XSD base a constraint declares, if any. */
|
|
62
|
+
export function baseOf(c) {
|
|
63
|
+
return c.type === 'simpleValue' ? undefined : c.base;
|
|
64
|
+
}
|
|
65
|
+
/** Literal values of a site (simpleValue, or each enumeration value). */
|
|
66
|
+
export function siteLiterals(c) {
|
|
67
|
+
if (c.type === 'simpleValue')
|
|
68
|
+
return [c.value];
|
|
69
|
+
if (c.type === 'enumeration')
|
|
70
|
+
return [...c.values];
|
|
71
|
+
return [];
|
|
72
|
+
}
|
|
73
|
+
/** A copy of `c` with its literals mapped (simpleValue / enumeration only). */
|
|
74
|
+
export function mapLiterals(c, fn) {
|
|
75
|
+
if (c.type === 'simpleValue')
|
|
76
|
+
return { ...c, value: fn(c.value) };
|
|
77
|
+
if (c.type === 'enumeration')
|
|
78
|
+
return { ...c, values: c.values.map(fn) };
|
|
79
|
+
return c;
|
|
80
|
+
}
|
|
81
|
+
//# sourceMappingURL=value-sites.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"value-sites.js","sourceRoot":"","sources":["../../../src/lint/rules/value-sites.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/** Value rules IDSL-VAL-001 … 006. */
|
|
2
|
+
import type { IDSConstraint } from '@ifc-lite/ids';
|
|
3
|
+
import type { FacetFieldName } from '../../document/fields.js';
|
|
4
|
+
import type { Uuid } from '../../uuid.js';
|
|
5
|
+
import { type OpBody } from '../fix.js';
|
|
6
|
+
import type { SpecRule } from '../types.js';
|
|
7
|
+
export declare function rawSet(facetId: Uuid, field: FacetFieldName, constraint: IDSConstraint): OpBody;
|
|
8
|
+
export declare const VAL_001: SpecRule;
|
|
9
|
+
export declare const VAL_002: SpecRule;
|
|
10
|
+
/** The items of a value that looks like a list, or undefined. */
|
|
11
|
+
export declare function listItems(value: string): string[] | undefined;
|
|
12
|
+
export declare const VAL_003: SpecRule;
|
|
13
|
+
export interface Comparison {
|
|
14
|
+
op: '>' | '>=' | '<' | '<=';
|
|
15
|
+
value: number;
|
|
16
|
+
unit?: string;
|
|
17
|
+
}
|
|
18
|
+
export declare function parseComparison(value: string): Comparison | undefined;
|
|
19
|
+
export declare const VAL_004: SpecRule;
|
|
20
|
+
export declare const VAL_005: SpecRule;
|
|
21
|
+
export declare const VAL_006: SpecRule;
|
|
22
|
+
//# sourceMappingURL=values.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"values.d.ts","sourceRoot":"","sources":["../../../src/lint/rules/values.ts"],"names":[],"mappings":"AAIA,sCAAsC;AAEtC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAG/D,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAY,KAAK,MAAM,EAAE,MAAM,WAAW,CAAC;AAClD,OAAO,KAAK,EAAW,QAAQ,EAAE,MAAM,aAAa,CAAC;AAKrD,wBAAgB,MAAM,CAAC,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,cAAc,EAAE,UAAU,EAAE,aAAa,GAAG,MAAM,CAE9F;AAED,eAAO,MAAM,OAAO,EAAE,QAoCrB,CAAC;AAcF,eAAO,MAAM,OAAO,EAAE,QAuBrB,CAAC;AAKF,iEAAiE;AACjE,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,CAS7D;AAED,eAAO,MAAM,OAAO,EAAE,QAwBrB,CAAC;AAIF,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,IAAI,CAAC;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS,CAKrE;AAED,eAAO,MAAM,OAAO,EAAE,QA2BrB,CAAC;AAOF,eAAO,MAAM,OAAO,EAAE,QA+BrB,CAAC;AAQF,eAAO,MAAM,OAAO,EAAE,QA0BrB,CAAC"}
|