@ifc-lite/ids-authoring 0.0.0-stage → 0.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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,163 @@
|
|
|
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 { isKnownUnit, toSI } from '../ops/units.js';
|
|
5
|
+
/** bSDD data type (lower case) → IFC data type. */
|
|
6
|
+
export const BSDD_DATA_TYPES = {
|
|
7
|
+
boolean: { ifc: 'IFCBOOLEAN', base: 'xs:boolean', measured: false },
|
|
8
|
+
character: { ifc: 'IFCLABEL', base: 'xs:string', measured: false },
|
|
9
|
+
string: { ifc: 'IFCLABEL', base: 'xs:string', measured: false },
|
|
10
|
+
integer: { ifc: 'IFCINTEGER', base: 'xs:integer', measured: false },
|
|
11
|
+
real: { ifc: 'IFCREAL', base: 'xs:double', measured: true },
|
|
12
|
+
time: { ifc: 'IFCDATETIME', base: 'xs:dateTime', measured: false },
|
|
13
|
+
};
|
|
14
|
+
/** SI dimension exponents `L M T I Θ N J` → IFC measure. */
|
|
15
|
+
export const DIMENSION_MEASURES = {
|
|
16
|
+
'1 0 0 0 0 0 0': 'IFCLENGTHMEASURE',
|
|
17
|
+
'2 0 0 0 0 0 0': 'IFCAREAMEASURE',
|
|
18
|
+
'3 0 0 0 0 0 0': 'IFCVOLUMEMEASURE',
|
|
19
|
+
'0 1 0 0 0 0 0': 'IFCMASSMEASURE',
|
|
20
|
+
'0 0 1 0 0 0 0': 'IFCTIMEMEASURE',
|
|
21
|
+
'0 0 0 1 0 0 0': 'IFCELECTRICCURRENTMEASURE',
|
|
22
|
+
'0 0 0 0 1 0 0': 'IFCTHERMODYNAMICTEMPERATUREMEASURE',
|
|
23
|
+
'1 1 -2 0 0 0 0': 'IFCFORCEMEASURE',
|
|
24
|
+
'-1 1 -2 0 0 0 0': 'IFCPRESSUREMEASURE',
|
|
25
|
+
'2 1 -2 0 0 0 0': 'IFCENERGYMEASURE',
|
|
26
|
+
'2 1 -3 0 0 0 0': 'IFCPOWERMEASURE',
|
|
27
|
+
'2 1 -3 -1 0 0 0': 'IFCELECTRICVOLTAGEMEASURE',
|
|
28
|
+
'0 0 -1 0 0 0 0': 'IFCFREQUENCYMEASURE',
|
|
29
|
+
'1 0 -1 0 0 0 0': 'IFCLINEARVELOCITYMEASURE',
|
|
30
|
+
'3 0 -1 0 0 0 0': 'IFCVOLUMETRICFLOWRATEMEASURE',
|
|
31
|
+
'-3 1 0 0 0 0 0': 'IFCMASSDENSITYMEASURE',
|
|
32
|
+
'0 1 -3 0 -1 0 0': 'IFCTHERMALTRANSMITTANCEMEASURE',
|
|
33
|
+
'1 1 -3 0 -1 0 0': 'IFCTHERMALCONDUCTIVITYMEASURE',
|
|
34
|
+
};
|
|
35
|
+
/** Unit symbol (lower case) → IFC measure, for properties published without a dimension. */
|
|
36
|
+
export const UNIT_MEASURES = {
|
|
37
|
+
...Object.fromEntries(['mm', 'cm', 'dm', 'm', 'km', 'in', 'ft'].map((u) => [u, 'IFCLENGTHMEASURE'])),
|
|
38
|
+
...Object.fromEntries(['mm2', 'cm2', 'm2', 'mm²', 'cm²', 'm²', 'ft2', 'ft²'].map((u) => [u, 'IFCAREAMEASURE'])),
|
|
39
|
+
...Object.fromEntries(['mm3', 'cm3', 'm3', 'mm³', 'cm³', 'm³', 'l'].map((u) => [u, 'IFCVOLUMEMEASURE'])),
|
|
40
|
+
...Object.fromEntries(['g', 'kg', 't'].map((u) => [u, 'IFCMASSMEASURE'])),
|
|
41
|
+
...Object.fromEntries(['s', 'min', 'h'].map((u) => [u, 'IFCTIMEMEASURE'])),
|
|
42
|
+
...Object.fromEntries(['k', '°c', 'degc'].map((u) => [u, 'IFCTHERMODYNAMICTEMPERATUREMEASURE'])),
|
|
43
|
+
...Object.fromEntries(['n', 'kn'].map((u) => [u, 'IFCFORCEMEASURE'])),
|
|
44
|
+
...Object.fromEntries(['pa', 'kpa', 'mpa'].map((u) => [u, 'IFCPRESSUREMEASURE'])),
|
|
45
|
+
...Object.fromEntries(['rad', 'deg', '°'].map((u) => [u, 'IFCPLANEANGLEMEASURE'])),
|
|
46
|
+
j: 'IFCENERGYMEASURE',
|
|
47
|
+
w: 'IFCPOWERMEASURE',
|
|
48
|
+
hz: 'IFCFREQUENCYMEASURE',
|
|
49
|
+
'm/s': 'IFCLINEARVELOCITYMEASURE',
|
|
50
|
+
'kg/m3': 'IFCMASSDENSITYMEASURE',
|
|
51
|
+
'kg/m³': 'IFCMASSDENSITYMEASURE',
|
|
52
|
+
...Object.fromEntries(['w/(m2·k)', 'w/(m²·k)', 'w/(m2k)', 'w/m2k'].map((u) => [u, 'IFCTHERMALTRANSMITTANCEMEASURE'])),
|
|
53
|
+
...Object.fromEntries(['w/(m·k)', 'w/(mk)', 'w/mk'].map((u) => [u, 'IFCTHERMALCONDUCTIVITYMEASURE'])),
|
|
54
|
+
};
|
|
55
|
+
/** Units whose values are already SI (no conversion, no note). */
|
|
56
|
+
const SI_UNITS = new Set(['m', 'm2', 'm²', 'm3', 'm³', 'kg', 's', 'k', 'n', 'pa', 'rad', 'j', 'w', 'hz', 'm/s', 'kg/m3', 'kg/m³', 'w/(m2·k)', 'w/(m²·k)', 'w/(m2k)', 'w/m2k', 'w/(m·k)', 'w/(mk)', 'w/mk']);
|
|
57
|
+
/** A property the table cannot place (no property set and no fallback). */
|
|
58
|
+
export class BsddMappingError extends Error {
|
|
59
|
+
property;
|
|
60
|
+
constructor(property, message) {
|
|
61
|
+
super(message);
|
|
62
|
+
this.property = property;
|
|
63
|
+
this.name = 'BsddMappingError';
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
function normDimension(d) {
|
|
67
|
+
if (!d)
|
|
68
|
+
return undefined;
|
|
69
|
+
const parts = d.trim().split(/[\s,]+/).map(Number);
|
|
70
|
+
return parts.length === 7 && parts.every(Number.isFinite) ? parts.join(' ') : undefined;
|
|
71
|
+
}
|
|
72
|
+
/** The IFC data type of a bSDD property, refined by dimension, then unit. */
|
|
73
|
+
export function mapBsddDataType(p) {
|
|
74
|
+
const rule = p.dataType ? BSDD_DATA_TYPES[p.dataType.trim().toLowerCase()] : undefined;
|
|
75
|
+
if (!rule)
|
|
76
|
+
return undefined;
|
|
77
|
+
if (!rule.measured)
|
|
78
|
+
return rule.ifc;
|
|
79
|
+
const byDimension = DIMENSION_MEASURES[normDimension(p.dimension) ?? ''];
|
|
80
|
+
if (byDimension)
|
|
81
|
+
return byDimension;
|
|
82
|
+
const unit = p.units?.[0]?.trim().toLowerCase();
|
|
83
|
+
return (unit && UNIT_MEASURES[unit]) || rule.ifc;
|
|
84
|
+
}
|
|
85
|
+
function rangeDraft(p, base, notes) {
|
|
86
|
+
const min = p.minInclusive ?? p.minExclusive;
|
|
87
|
+
const max = p.maxInclusive ?? p.maxExclusive;
|
|
88
|
+
if (min === undefined && max === undefined)
|
|
89
|
+
return undefined;
|
|
90
|
+
const draft = { kind: 'range', base };
|
|
91
|
+
if (min !== undefined)
|
|
92
|
+
Object.assign(draft, { min, minInclusive: p.minInclusive !== undefined });
|
|
93
|
+
if (max !== undefined)
|
|
94
|
+
Object.assign(draft, { max, maxInclusive: p.maxInclusive !== undefined });
|
|
95
|
+
const unit = p.units?.[0]?.trim();
|
|
96
|
+
if (!unit || SI_UNITS.has(unit.toLowerCase()))
|
|
97
|
+
return draft;
|
|
98
|
+
if (isKnownUnit(unit)) {
|
|
99
|
+
const shown = [min, max].filter((v) => v !== undefined).map((v) => `${v} ${unit} → ${toSI(v, unit)}`);
|
|
100
|
+
notes.push({ code: 'unit-converted', message: `${p.code}: bounds converted to SI (${shown.join(', ')})` });
|
|
101
|
+
return { ...draft, unit };
|
|
102
|
+
}
|
|
103
|
+
notes.push({ code: 'unit-unknown', message: `${p.code}: unit "${unit}" is not known; bounds kept as published, check that they are SI` });
|
|
104
|
+
return draft;
|
|
105
|
+
}
|
|
106
|
+
function valueDraft(p, rule, notes) {
|
|
107
|
+
const kind = p.propertyValueKind?.trim().toLowerCase();
|
|
108
|
+
if (kind && kind !== 'single') {
|
|
109
|
+
notes.push({ code: 'value-not-mapped', message: `${p.code}: a ${p.propertyValueKind} value has no IDS restriction; only presence is required` });
|
|
110
|
+
return undefined;
|
|
111
|
+
}
|
|
112
|
+
const base = rule?.base ?? 'xs:string';
|
|
113
|
+
const hasRange = [p.minInclusive, p.maxInclusive, p.minExclusive, p.maxExclusive].some((v) => v !== undefined);
|
|
114
|
+
if (p.allowedValues?.length && rule?.base !== 'xs:boolean') {
|
|
115
|
+
if (hasRange || p.pattern)
|
|
116
|
+
notes.push({ code: 'values-over-range', message: `${p.code}: allowed values used; the published range/pattern is not added` });
|
|
117
|
+
return { kind: 'oneOf', values: p.allowedValues.map((v) => v.code), base };
|
|
118
|
+
}
|
|
119
|
+
if (hasRange && (base === 'xs:double' || base === 'xs:integer'))
|
|
120
|
+
return rangeDraft(p, base, notes);
|
|
121
|
+
if (p.pattern)
|
|
122
|
+
return { kind: 'pattern', pattern: p.pattern, base: 'xs:string' };
|
|
123
|
+
return undefined;
|
|
124
|
+
}
|
|
125
|
+
/** Map one bSDD property to an IDS property requirement. Throws `BsddMappingError` when it has no property set. */
|
|
126
|
+
export function mapBsddProperty(p, options = {}) {
|
|
127
|
+
const notes = [];
|
|
128
|
+
let pset = p.propertySet;
|
|
129
|
+
if (!pset) {
|
|
130
|
+
if (!options.fallbackPropertySet)
|
|
131
|
+
throw new BsddMappingError(p.code, `bSDD property ${p.code} has no property set; choose one`);
|
|
132
|
+
pset = options.fallbackPropertySet;
|
|
133
|
+
notes.push({ code: 'fallback-property-set', message: `${p.code}: no property set in bSDD; placed in ${pset}` });
|
|
134
|
+
}
|
|
135
|
+
const rule = p.dataType ? BSDD_DATA_TYPES[p.dataType.trim().toLowerCase()] : undefined;
|
|
136
|
+
let dataType = mapBsddDataType(p);
|
|
137
|
+
if (p.standardDataType) {
|
|
138
|
+
dataType = p.standardDataType.toUpperCase();
|
|
139
|
+
notes.push({ code: 'standard-data-type', message: `${p.code}: data type taken from the standard property (${dataType})` });
|
|
140
|
+
}
|
|
141
|
+
else if (p.dataType && !rule) {
|
|
142
|
+
notes.push({ code: 'unknown-data-type', message: `${p.code}: bSDD data type "${p.dataType}" has no IFC mapping; no dataType written` });
|
|
143
|
+
}
|
|
144
|
+
else if (!p.dataType) {
|
|
145
|
+
notes.push({ code: 'no-data-type', message: `${p.code}: bSDD publishes no data type; no dataType written` });
|
|
146
|
+
}
|
|
147
|
+
const facet = { type: 'property', propertySet: { kind: 'equals', value: pset }, baseName: { kind: 'equals', value: p.code } };
|
|
148
|
+
if (dataType)
|
|
149
|
+
facet.dataType = { kind: 'equals', value: dataType };
|
|
150
|
+
const value = valueDraft(p, rule, notes);
|
|
151
|
+
if (value)
|
|
152
|
+
facet.value = value;
|
|
153
|
+
if (p.uri && options.uri !== false)
|
|
154
|
+
facet.uri = p.uri;
|
|
155
|
+
const policy = options.optionality ?? 'fromClass';
|
|
156
|
+
const optionality = policy === 'fromClass' ? (p.isRequired ? 'required' : 'optional') : policy;
|
|
157
|
+
if (optionality === 'optional' && !dataType) {
|
|
158
|
+
// IDS 1.0 (and the buildingSMART audit): an optional property requirement must name its dataType.
|
|
159
|
+
throw new BsddMappingError(p.code, `bSDD property ${p.code}: an optional requirement needs a dataType in IDS 1.0 and none maps; require it or leave it out`);
|
|
160
|
+
}
|
|
161
|
+
return { facet, optionality, propertySet: pset, baseName: p.code, ...(dataType ? { dataType } : {}), notes };
|
|
162
|
+
}
|
|
163
|
+
//# sourceMappingURL=mapping.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mapping.js","sourceRoot":"","sources":["../../src/bsdd/mapping.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The bSDD tab of the entity, classification and property pickers
|
|
3
|
+
* (05-bsdd.md §2.1, IDS-069) as a framework-free view model: filters
|
|
4
|
+
* pre-filled from the specification, a debounced search with stale-result
|
|
5
|
+
* protection, and the result cards. A UI renders `getState()` and calls
|
|
6
|
+
* `setQuery` / `setFilters`; it never talks to bSDD itself.
|
|
7
|
+
*/
|
|
8
|
+
import type { GateContext } from '../gate/context.js';
|
|
9
|
+
import type { StudioDocument } from '../document/types.js';
|
|
10
|
+
import type { Uuid } from '../uuid.js';
|
|
11
|
+
import { type BsddClass, type BsddClassSummary, type BsddDictionary, type BsddSource, type BsddStatus } from './types.js';
|
|
12
|
+
export interface BsddPickerFilters {
|
|
13
|
+
/** Dictionaries to search (empty: all). Defaults come from the document's configured list. */
|
|
14
|
+
dictionaryUris: string[];
|
|
15
|
+
languageCode?: string;
|
|
16
|
+
/** Related IFC entity, PascalCase (`IfcWall`). Pre-filled from the applicability. */
|
|
17
|
+
relatedIfcEntity?: string;
|
|
18
|
+
/** Hide classes bSDD marks inactive. Default true. */
|
|
19
|
+
activeOnly: boolean;
|
|
20
|
+
}
|
|
21
|
+
export interface BsddPropertyPreview {
|
|
22
|
+
code: string;
|
|
23
|
+
name: string;
|
|
24
|
+
propertySet?: string;
|
|
25
|
+
dataType?: string;
|
|
26
|
+
required: boolean;
|
|
27
|
+
}
|
|
28
|
+
export interface BsddClassCard {
|
|
29
|
+
uri: string;
|
|
30
|
+
code: string;
|
|
31
|
+
name: string;
|
|
32
|
+
definition?: string;
|
|
33
|
+
dictionary: {
|
|
34
|
+
uri: string;
|
|
35
|
+
name?: string;
|
|
36
|
+
version?: string;
|
|
37
|
+
};
|
|
38
|
+
relatedIfcEntities: string[];
|
|
39
|
+
status?: BsddStatus;
|
|
40
|
+
/** Known once the class details are loaded. */
|
|
41
|
+
propertyCount?: number;
|
|
42
|
+
properties?: BsddPropertyPreview[];
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Initial filters for a picker opened on `specId`: the related IFC entity
|
|
46
|
+
* is the single literal applicability entity, in EXPRESS PascalCase.
|
|
47
|
+
*/
|
|
48
|
+
export declare function initialPickerFilters(doc: StudioDocument, specId: Uuid | undefined, options?: {
|
|
49
|
+
dictionaryUris?: readonly string[];
|
|
50
|
+
languageCode?: string;
|
|
51
|
+
gate?: GateContext;
|
|
52
|
+
}): BsddPickerFilters;
|
|
53
|
+
export declare function cardFromSummary(s: BsddClassSummary, dictionaries?: ReadonlyMap<string, BsddDictionary>): BsddClassCard;
|
|
54
|
+
export declare function cardFromClass(c: BsddClass, dictionaries?: ReadonlyMap<string, BsddDictionary>, previewLimit?: number): BsddClassCard;
|
|
55
|
+
export type BsddSearchPhase = 'idle' | 'debouncing' | 'loading' | 'ready' | 'error';
|
|
56
|
+
export interface BsddSearchState {
|
|
57
|
+
query: string;
|
|
58
|
+
filters: BsddPickerFilters;
|
|
59
|
+
phase: BsddSearchPhase;
|
|
60
|
+
cards: BsddClassCard[];
|
|
61
|
+
total: number;
|
|
62
|
+
/** True when the last failure was "bSDD unreachable and not cached". */
|
|
63
|
+
offline: boolean;
|
|
64
|
+
error?: string;
|
|
65
|
+
}
|
|
66
|
+
export interface BsddSearchTimers {
|
|
67
|
+
set(fn: () => void, ms: number): unknown;
|
|
68
|
+
clear(handle: unknown): void;
|
|
69
|
+
}
|
|
70
|
+
export interface BsddSearchOptions {
|
|
71
|
+
source: BsddSource;
|
|
72
|
+
filters: BsddPickerFilters;
|
|
73
|
+
dictionaries?: ReadonlyMap<string, BsddDictionary>;
|
|
74
|
+
/** Default 250 ms (05-bsdd.md §4). */
|
|
75
|
+
debounceMs?: number;
|
|
76
|
+
/** Queries shorter than this do not search. Default 2. */
|
|
77
|
+
minChars?: number;
|
|
78
|
+
timers?: BsddSearchTimers;
|
|
79
|
+
onChange?: (state: BsddSearchState) => void;
|
|
80
|
+
}
|
|
81
|
+
export interface BsddSearch {
|
|
82
|
+
getState(): BsddSearchState;
|
|
83
|
+
setQuery(query: string): void;
|
|
84
|
+
setFilters(patch: Partial<BsddPickerFilters>): void;
|
|
85
|
+
/** Run a pending debounced search now; resolves when it has settled. */
|
|
86
|
+
flush(): Promise<void>;
|
|
87
|
+
dispose(): void;
|
|
88
|
+
}
|
|
89
|
+
/** The debounced search behind the bSDD picker tab. */
|
|
90
|
+
export declare function createBsddSearch(options: BsddSearchOptions): BsddSearch;
|
|
91
|
+
//# sourceMappingURL=picker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"picker.d.ts","sourceRoot":"","sources":["../../src/bsdd/picker.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,151 @@
|
|
|
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 { literals } from '../gate/grounding.js';
|
|
5
|
+
import { locateSpec } from '../document/node-index.js';
|
|
6
|
+
import { BsddUnavailableError, } from './types.js';
|
|
7
|
+
/**
|
|
8
|
+
* Initial filters for a picker opened on `specId`: the related IFC entity
|
|
9
|
+
* is the single literal applicability entity, in EXPRESS PascalCase.
|
|
10
|
+
*/
|
|
11
|
+
export function initialPickerFilters(doc, specId, options = {}) {
|
|
12
|
+
const filters = { dictionaryUris: [...(options.dictionaryUris ?? [])], activeOnly: true };
|
|
13
|
+
if (options.languageCode)
|
|
14
|
+
filters.languageCode = options.languageCode;
|
|
15
|
+
const index = specId === undefined ? undefined : locateSpec(doc, specId);
|
|
16
|
+
if (index === undefined)
|
|
17
|
+
return filters;
|
|
18
|
+
const spec = doc.ids.specifications[index];
|
|
19
|
+
const names = spec.applicability.facets.flatMap((f) => (f.type === 'entity' ? literals(f.name) : []));
|
|
20
|
+
if (names.length !== 1)
|
|
21
|
+
return filters;
|
|
22
|
+
const upper = names[0].toUpperCase();
|
|
23
|
+
const pascal = spec.ifcVersions.map((v) => options.gate?.tables[v].entities.get(upper)?.name).find((n) => !!n);
|
|
24
|
+
filters.relatedIfcEntity = pascal ?? names[0];
|
|
25
|
+
return filters;
|
|
26
|
+
}
|
|
27
|
+
function dictionaryInfo(uri, dictionaries, fallbackName) {
|
|
28
|
+
const d = dictionaries?.get(uri);
|
|
29
|
+
const name = d?.name ?? fallbackName;
|
|
30
|
+
return { uri, ...(name ? { name } : {}), ...(d?.version ? { version: d.version } : {}) };
|
|
31
|
+
}
|
|
32
|
+
export function cardFromSummary(s, dictionaries) {
|
|
33
|
+
const card = {
|
|
34
|
+
uri: s.uri,
|
|
35
|
+
code: s.code,
|
|
36
|
+
name: s.name,
|
|
37
|
+
dictionary: dictionaryInfo(s.dictionaryUri, dictionaries, s.dictionaryName),
|
|
38
|
+
relatedIfcEntities: [...s.relatedIfcEntityNames],
|
|
39
|
+
};
|
|
40
|
+
if (s.definition)
|
|
41
|
+
card.definition = s.definition;
|
|
42
|
+
if (s.status)
|
|
43
|
+
card.status = s.status;
|
|
44
|
+
return card;
|
|
45
|
+
}
|
|
46
|
+
export function cardFromClass(c, dictionaries, previewLimit = 8) {
|
|
47
|
+
const card = {
|
|
48
|
+
uri: c.uri,
|
|
49
|
+
code: c.code,
|
|
50
|
+
name: c.name,
|
|
51
|
+
dictionary: dictionaryInfo(c.dictionaryUri, dictionaries),
|
|
52
|
+
relatedIfcEntities: [...c.relatedIfcEntityNames],
|
|
53
|
+
status: c.status,
|
|
54
|
+
propertyCount: c.properties.length,
|
|
55
|
+
properties: c.properties.slice(0, previewLimit).map((p) => ({
|
|
56
|
+
code: p.code,
|
|
57
|
+
name: p.name,
|
|
58
|
+
...(p.propertySet ? { propertySet: p.propertySet } : {}),
|
|
59
|
+
...(p.dataType ? { dataType: p.dataType } : {}),
|
|
60
|
+
required: p.isRequired === true,
|
|
61
|
+
})),
|
|
62
|
+
};
|
|
63
|
+
if (c.definition)
|
|
64
|
+
card.definition = c.definition;
|
|
65
|
+
return card;
|
|
66
|
+
}
|
|
67
|
+
const DEFAULT_TIMERS = {
|
|
68
|
+
set: (fn, ms) => setTimeout(fn, ms),
|
|
69
|
+
clear: (h) => clearTimeout(h),
|
|
70
|
+
};
|
|
71
|
+
/** The debounced search behind the bSDD picker tab. */
|
|
72
|
+
export function createBsddSearch(options) {
|
|
73
|
+
const timers = options.timers ?? DEFAULT_TIMERS;
|
|
74
|
+
const debounceMs = options.debounceMs ?? 250;
|
|
75
|
+
const minChars = options.minChars ?? 2;
|
|
76
|
+
let state = { query: '', filters: options.filters, phase: 'idle', cards: [], total: 0, offline: false };
|
|
77
|
+
let pending;
|
|
78
|
+
let seq = 0;
|
|
79
|
+
let inflight = Promise.resolve();
|
|
80
|
+
let disposed = false;
|
|
81
|
+
const set = (patch) => {
|
|
82
|
+
if (disposed)
|
|
83
|
+
return;
|
|
84
|
+
state = { ...state, ...patch };
|
|
85
|
+
options.onChange?.(state);
|
|
86
|
+
};
|
|
87
|
+
async function run() {
|
|
88
|
+
pending = undefined;
|
|
89
|
+
const mine = ++seq;
|
|
90
|
+
const { query, filters } = state;
|
|
91
|
+
set({ phase: 'loading' });
|
|
92
|
+
try {
|
|
93
|
+
const page = await options.source.searchClasses({
|
|
94
|
+
text: query.trim(),
|
|
95
|
+
...(filters.dictionaryUris.length ? { dictionaryUris: filters.dictionaryUris } : {}),
|
|
96
|
+
...(filters.relatedIfcEntity ? { relatedIfcEntity: filters.relatedIfcEntity } : {}),
|
|
97
|
+
...(filters.languageCode ? { languageCode: filters.languageCode } : {}),
|
|
98
|
+
});
|
|
99
|
+
if (mine !== seq)
|
|
100
|
+
return; // a newer search superseded this one
|
|
101
|
+
const rows = filters.activeOnly ? page.classes.filter((c) => c.status !== 'inactive') : page.classes;
|
|
102
|
+
set({ phase: 'ready', cards: rows.map((c) => cardFromSummary(c, options.dictionaries)), total: page.total, offline: false, error: undefined });
|
|
103
|
+
}
|
|
104
|
+
catch (err) {
|
|
105
|
+
if (mine !== seq)
|
|
106
|
+
return;
|
|
107
|
+
const offline = err instanceof BsddUnavailableError;
|
|
108
|
+
set({ phase: 'error', cards: [], total: 0, offline, error: offline ? 'bSDD is offline and this search is not cached' : String(err instanceof Error ? err.message : err) });
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
function schedule() {
|
|
112
|
+
if (pending !== undefined)
|
|
113
|
+
timers.clear(pending);
|
|
114
|
+
pending = undefined;
|
|
115
|
+
if (state.query.trim().length < minChars) {
|
|
116
|
+
seq++;
|
|
117
|
+
set({ phase: 'idle', cards: [], total: 0, error: undefined });
|
|
118
|
+
return;
|
|
119
|
+
}
|
|
120
|
+
set({ phase: 'debouncing' });
|
|
121
|
+
pending = timers.set(() => {
|
|
122
|
+
inflight = run();
|
|
123
|
+
}, debounceMs);
|
|
124
|
+
}
|
|
125
|
+
return {
|
|
126
|
+
getState: () => state,
|
|
127
|
+
setQuery(query) {
|
|
128
|
+
if (query === state.query)
|
|
129
|
+
return;
|
|
130
|
+
set({ query });
|
|
131
|
+
schedule();
|
|
132
|
+
},
|
|
133
|
+
setFilters(patch) {
|
|
134
|
+
set({ filters: { ...state.filters, ...patch } });
|
|
135
|
+
schedule();
|
|
136
|
+
},
|
|
137
|
+
async flush() {
|
|
138
|
+
if (pending !== undefined) {
|
|
139
|
+
timers.clear(pending);
|
|
140
|
+
inflight = run();
|
|
141
|
+
}
|
|
142
|
+
await inflight;
|
|
143
|
+
},
|
|
144
|
+
dispose() {
|
|
145
|
+
if (pending !== undefined)
|
|
146
|
+
timers.clear(pending);
|
|
147
|
+
disposed = true;
|
|
148
|
+
},
|
|
149
|
+
};
|
|
150
|
+
}
|
|
151
|
+
//# sourceMappingURL=picker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"picker.js","sourceRoot":"","sources":["../../src/bsdd/picker.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The bSDD (buildingSMART Data Dictionary) as IDS authoring sees it
|
|
3
|
+
* (05-bsdd.md). These are normalised shapes: `contract.ts` reads the raw
|
|
4
|
+
* API v1 JSON into them, and everything downstream (pickers, the class →
|
|
5
|
+
* facet insert, the property mapping table, the dictionary generator, URI
|
|
6
|
+
* health) works on these only.
|
|
7
|
+
*
|
|
8
|
+
* `BsddSource` is the port a host implements (or takes from
|
|
9
|
+
* `createHttpBsddSource`, optionally wrapped in `createCachedBsddSource`).
|
|
10
|
+
* Only search terms and URIs ever go to bSDD, never model data.
|
|
11
|
+
*/
|
|
12
|
+
/** Lifecycle status of a bSDD dictionary, class or property. */
|
|
13
|
+
export type BsddStatus = 'active' | 'preview' | 'inactive' | 'unknown';
|
|
14
|
+
export interface BsddDictionary {
|
|
15
|
+
uri: string;
|
|
16
|
+
name: string;
|
|
17
|
+
version: string;
|
|
18
|
+
code?: string;
|
|
19
|
+
organizationCode?: string;
|
|
20
|
+
organizationName?: string;
|
|
21
|
+
languageCode?: string;
|
|
22
|
+
status: BsddStatus;
|
|
23
|
+
/** Licence name as published by the dictionary owner, e.g. `CC BY 4.0`. */
|
|
24
|
+
license?: string;
|
|
25
|
+
licenseUrl?: string;
|
|
26
|
+
isLatestVersion?: boolean;
|
|
27
|
+
isVerified?: boolean;
|
|
28
|
+
releaseDate?: string;
|
|
29
|
+
}
|
|
30
|
+
export interface BsddAllowedValue {
|
|
31
|
+
/** The machine value IDS uses (`code`, falling back to `value`). */
|
|
32
|
+
code: string;
|
|
33
|
+
/** Display label. */
|
|
34
|
+
value: string;
|
|
35
|
+
uri?: string;
|
|
36
|
+
description?: string;
|
|
37
|
+
}
|
|
38
|
+
/** One property of a class (a bSDD "class property"). */
|
|
39
|
+
export interface BsddClassProperty {
|
|
40
|
+
/** Property code: the IDS `baseName` (the EXPRESS name for IFC properties). */
|
|
41
|
+
code: string;
|
|
42
|
+
/** Display name (may contain spaces). */
|
|
43
|
+
name: string;
|
|
44
|
+
/** URI of the property definition (`…/prop/<code>`), when published. */
|
|
45
|
+
uri?: string;
|
|
46
|
+
propertySet?: string;
|
|
47
|
+
/** bSDD data type: Boolean, Character, Integer, Real, String, Time. */
|
|
48
|
+
dataType?: string;
|
|
49
|
+
/** Single, Range, List, Complex or ComplexList. */
|
|
50
|
+
propertyValueKind?: string;
|
|
51
|
+
/** SI dimension exponents `L M T I Θ N J`, e.g. `1 0 0 0 0 0 0` for a length. */
|
|
52
|
+
dimension?: string;
|
|
53
|
+
physicalQuantity?: string;
|
|
54
|
+
units?: string[];
|
|
55
|
+
allowedValues?: BsddAllowedValue[];
|
|
56
|
+
minInclusive?: number;
|
|
57
|
+
maxInclusive?: number;
|
|
58
|
+
minExclusive?: number;
|
|
59
|
+
maxExclusive?: number;
|
|
60
|
+
/** XSD pattern. */
|
|
61
|
+
pattern?: string;
|
|
62
|
+
/** Whether the class requires the property. */
|
|
63
|
+
isRequired?: boolean;
|
|
64
|
+
description?: string;
|
|
65
|
+
status?: BsddStatus;
|
|
66
|
+
}
|
|
67
|
+
export interface BsddClassRef {
|
|
68
|
+
uri: string;
|
|
69
|
+
code?: string;
|
|
70
|
+
name?: string;
|
|
71
|
+
}
|
|
72
|
+
export interface BsddClass {
|
|
73
|
+
uri: string;
|
|
74
|
+
code: string;
|
|
75
|
+
name: string;
|
|
76
|
+
definition?: string;
|
|
77
|
+
status: BsddStatus;
|
|
78
|
+
/** Class, GroupOfProperties, AlternativeUse or Material. */
|
|
79
|
+
classType?: string;
|
|
80
|
+
dictionaryUri: string;
|
|
81
|
+
/** IFC entity names the class relates to, as bSDD publishes them (`IfcWall`, `IfcWallSOLIDWALL`). */
|
|
82
|
+
relatedIfcEntityNames: string[];
|
|
83
|
+
parentClass?: BsddClassRef;
|
|
84
|
+
childClasses: BsddClassRef[];
|
|
85
|
+
properties: BsddClassProperty[];
|
|
86
|
+
/** Codes of classes that replace this one (when deprecated). */
|
|
87
|
+
replacingObjectCodes: string[];
|
|
88
|
+
synonyms: string[];
|
|
89
|
+
}
|
|
90
|
+
/** A search hit or a row of a dictionary's class list. */
|
|
91
|
+
export interface BsddClassSummary {
|
|
92
|
+
uri: string;
|
|
93
|
+
code: string;
|
|
94
|
+
name: string;
|
|
95
|
+
definition?: string;
|
|
96
|
+
dictionaryUri: string;
|
|
97
|
+
dictionaryName?: string;
|
|
98
|
+
relatedIfcEntityNames: string[];
|
|
99
|
+
/** Code of the parent class (dictionary class lists). */
|
|
100
|
+
parentClassCode?: string;
|
|
101
|
+
classType?: string;
|
|
102
|
+
status?: BsddStatus;
|
|
103
|
+
}
|
|
104
|
+
export interface BsddSearchQuery {
|
|
105
|
+
text: string;
|
|
106
|
+
dictionaryUris?: readonly string[];
|
|
107
|
+
relatedIfcEntity?: string;
|
|
108
|
+
languageCode?: string;
|
|
109
|
+
offset?: number;
|
|
110
|
+
limit?: number;
|
|
111
|
+
}
|
|
112
|
+
export interface BsddSearchPage {
|
|
113
|
+
classes: BsddClassSummary[];
|
|
114
|
+
total: number;
|
|
115
|
+
offset: number;
|
|
116
|
+
}
|
|
117
|
+
/** What a bSDD URI resolves to (URI health, BSDD-001…003, GATE-BSDD-001). */
|
|
118
|
+
export interface BsddUriRecord {
|
|
119
|
+
uri: string;
|
|
120
|
+
/** `notFound`: bSDD answered 404. */
|
|
121
|
+
state: 'active' | 'preview' | 'inactive' | 'notFound';
|
|
122
|
+
kind: 'class' | 'property' | 'dictionary' | 'other';
|
|
123
|
+
/** Name of the dictionary the URI belongs to (the classification `system`). */
|
|
124
|
+
dictionaryName?: string;
|
|
125
|
+
/** URIs of the replacements of a deprecated class or property. */
|
|
126
|
+
replacedBy?: string[];
|
|
127
|
+
/** Allowed value codes of a property (BSDD-003). */
|
|
128
|
+
allowedValues?: string[];
|
|
129
|
+
/** Display labels of those values, where they differ from the codes (accepted by BSDD-003 too). */
|
|
130
|
+
allowedLabels?: string[];
|
|
131
|
+
/** Epoch milliseconds of the check. */
|
|
132
|
+
checkedAt: number;
|
|
133
|
+
}
|
|
134
|
+
export interface BsddClassOptions {
|
|
135
|
+
languageCode?: string;
|
|
136
|
+
}
|
|
137
|
+
/** The port to bSDD. Every method resolves `null` / empty for "does not exist" and rejects on transport failure. */
|
|
138
|
+
export interface BsddSource {
|
|
139
|
+
listDictionaries(): Promise<BsddDictionary[]>;
|
|
140
|
+
getDictionary(uri: string): Promise<BsddDictionary | null>;
|
|
141
|
+
/** Every class of a dictionary (flat; `parentClassCode` carries the tree). */
|
|
142
|
+
listClasses(dictionaryUri: string): Promise<BsddClassSummary[]>;
|
|
143
|
+
searchClasses(query: BsddSearchQuery): Promise<BsddSearchPage>;
|
|
144
|
+
getClass(uri: string, options?: BsddClassOptions): Promise<BsddClass | null>;
|
|
145
|
+
/** Resolve any bSDD URI (class, property, dictionary) for URI health. */
|
|
146
|
+
resolveUri(uri: string): Promise<BsddUriRecord>;
|
|
147
|
+
}
|
|
148
|
+
/** Raised by a source when bSDD answered with an HTTP error other than 404. */
|
|
149
|
+
export declare class BsddHttpError extends Error {
|
|
150
|
+
readonly status: number;
|
|
151
|
+
readonly url: string;
|
|
152
|
+
readonly retryAfterSeconds?: number | undefined;
|
|
153
|
+
constructor(status: number, url: string, retryAfterSeconds?: number | undefined);
|
|
154
|
+
}
|
|
155
|
+
/** Raised by a cached source when bSDD cannot be reached and nothing is cached. */
|
|
156
|
+
export declare class BsddUnavailableError extends Error {
|
|
157
|
+
readonly key: string;
|
|
158
|
+
constructor(key: string, options: {
|
|
159
|
+
cause: unknown;
|
|
160
|
+
});
|
|
161
|
+
}
|
|
162
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/bsdd/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
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
|
+
/** Raised by a source when bSDD answered with an HTTP error other than 404. */
|
|
5
|
+
export class BsddHttpError extends Error {
|
|
6
|
+
status;
|
|
7
|
+
url;
|
|
8
|
+
retryAfterSeconds;
|
|
9
|
+
constructor(status, url, retryAfterSeconds) {
|
|
10
|
+
super(`bSDD API ${status} for ${url}`);
|
|
11
|
+
this.status = status;
|
|
12
|
+
this.url = url;
|
|
13
|
+
this.retryAfterSeconds = retryAfterSeconds;
|
|
14
|
+
this.name = 'BsddHttpError';
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
/** Raised by a cached source when bSDD cannot be reached and nothing is cached. */
|
|
18
|
+
export class BsddUnavailableError extends Error {
|
|
19
|
+
key;
|
|
20
|
+
constructor(key, options) {
|
|
21
|
+
super(`bSDD is unreachable and ${key} is not cached`, options);
|
|
22
|
+
this.key = key;
|
|
23
|
+
this.name = 'BsddUnavailableError';
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/bsdd/types.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAkK/D,+EAA+E;AAC/E,MAAM,OAAO,aAAc,SAAQ,KAAK;IAE3B;IACA;IACA;IAHX,YACW,MAAc,EACd,GAAW,EACX,iBAA0B;QAEnC,KAAK,CAAC,YAAY,MAAM,QAAQ,GAAG,EAAE,CAAC,CAAC;QAJ9B,WAAM,GAAN,MAAM,CAAQ;QACd,QAAG,GAAH,GAAG,CAAQ;QACX,sBAAiB,GAAjB,iBAAiB,CAAS;QAGnC,IAAI,CAAC,IAAI,GAAG,eAAe,CAAC;IAC9B,CAAC;CACF;AAED,mFAAmF;AACnF,MAAM,OAAO,oBAAqB,SAAQ,KAAK;IAElC;IADX,YACW,GAAW,EACpB,OAA2B;QAE3B,KAAK,CAAC,2BAA2B,GAAG,gBAAgB,EAAE,OAAO,CAAC,CAAC;QAHtD,QAAG,GAAH,GAAG,CAAQ;QAIpB,IAAI,CAAC,IAAI,GAAG,sBAAsB,CAAC;IACrC,CAAC;CACF"}
|