@ifc-lite/sdk 9.4.0 → 9.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (164) hide show
  1. package/README.md +57 -16
  2. package/dist/cost-reference-scan.d.ts.map +1 -1
  3. package/dist/cost-reference-scan.js +10 -9
  4. package/dist/cost-reference-scan.js.map +1 -1
  5. package/dist/headless/align-backend.d.ts +5 -0
  6. package/dist/headless/align-backend.d.ts.map +1 -0
  7. package/dist/headless/align-backend.js +15 -0
  8. package/dist/headless/align-backend.js.map +1 -0
  9. package/dist/headless/authored-attribute-value.d.ts +3 -0
  10. package/dist/headless/authored-attribute-value.d.ts.map +1 -0
  11. package/dist/headless/authored-attribute-value.js +34 -0
  12. package/dist/headless/authored-attribute-value.js.map +1 -0
  13. package/dist/headless/backend-query-relationships.d.ts +5 -0
  14. package/dist/headless/backend-query-relationships.d.ts.map +1 -0
  15. package/dist/headless/backend-query-relationships.js +55 -0
  16. package/dist/headless/backend-query-relationships.js.map +1 -0
  17. package/dist/headless/backend-query.d.ts +20 -0
  18. package/dist/headless/backend-query.d.ts.map +1 -0
  19. package/dist/headless/backend-query.js +359 -0
  20. package/dist/headless/backend-query.js.map +1 -0
  21. package/dist/headless/backend.d.ts +80 -0
  22. package/dist/headless/backend.d.ts.map +1 -0
  23. package/dist/headless/backend.js +317 -0
  24. package/dist/headless/backend.js.map +1 -0
  25. package/dist/headless/capabilities.d.ts +22 -0
  26. package/dist/headless/capabilities.d.ts.map +1 -0
  27. package/dist/headless/capabilities.js +52 -0
  28. package/dist/headless/capabilities.js.map +1 -0
  29. package/dist/headless/effective-entity-membership.d.ts +8 -0
  30. package/dist/headless/effective-entity-membership.d.ts.map +1 -0
  31. package/dist/headless/effective-entity-membership.js +23 -0
  32. package/dist/headless/effective-entity-membership.js.map +1 -0
  33. package/dist/headless/headless-backend-cost-store.d.ts +14 -0
  34. package/dist/headless/headless-backend-cost-store.d.ts.map +1 -0
  35. package/dist/headless/headless-backend-cost-store.js +18 -0
  36. package/dist/headless/headless-backend-cost-store.js.map +1 -0
  37. package/dist/headless/headless-backend-modelling.d.ts +50 -0
  38. package/dist/headless/headless-backend-modelling.d.ts.map +1 -0
  39. package/dist/headless/headless-backend-modelling.js +128 -0
  40. package/dist/headless/headless-backend-modelling.js.map +1 -0
  41. package/dist/headless/headless-backend-room.d.ts +9 -0
  42. package/dist/headless/headless-backend-room.d.ts.map +1 -0
  43. package/dist/headless/headless-backend-room.js +22 -0
  44. package/dist/headless/headless-backend-room.js.map +1 -0
  45. package/dist/headless/headless-backend-store-stubs.d.ts +13 -0
  46. package/dist/headless/headless-backend-store-stubs.d.ts.map +1 -0
  47. package/dist/headless/headless-backend-store-stubs.js +9 -0
  48. package/dist/headless/headless-backend-store-stubs.js.map +1 -0
  49. package/dist/headless/headless-backend-store.d.ts +8 -0
  50. package/dist/headless/headless-backend-store.d.ts.map +1 -0
  51. package/dist/headless/headless-backend-store.js +42 -0
  52. package/dist/headless/headless-backend-store.js.map +1 -0
  53. package/dist/headless/headless-backend-structural-store.d.ts +21 -0
  54. package/dist/headless/headless-backend-structural-store.d.ts.map +1 -0
  55. package/dist/headless/headless-backend-structural-store.js +18 -0
  56. package/dist/headless/headless-backend-structural-store.js.map +1 -0
  57. package/dist/headless/headless-backend-structural.d.ts +4 -0
  58. package/dist/headless/headless-backend-structural.d.ts.map +1 -0
  59. package/dist/headless/headless-backend-structural.js +24 -0
  60. package/dist/headless/headless-backend-structural.js.map +1 -0
  61. package/dist/headless/mutation-base.d.ts +5 -0
  62. package/dist/headless/mutation-base.d.ts.map +1 -0
  63. package/dist/headless/mutation-base.js +31 -0
  64. package/dist/headless/mutation-base.js.map +1 -0
  65. package/dist/headless/options.d.ts +11 -0
  66. package/dist/headless/options.d.ts.map +1 -0
  67. package/dist/headless/options.js +13 -0
  68. package/dist/headless/options.js.map +1 -0
  69. package/dist/headless/overlay.d.ts +170 -0
  70. package/dist/headless/overlay.d.ts.map +1 -0
  71. package/dist/headless/overlay.js +285 -0
  72. package/dist/headless/overlay.js.map +1 -0
  73. package/dist/headless/schema-tables.d.ts +42 -0
  74. package/dist/headless/schema-tables.d.ts.map +1 -0
  75. package/dist/headless/schema-tables.js +77 -0
  76. package/dist/headless/schema-tables.js.map +1 -0
  77. package/dist/headless/session.d.ts +23 -0
  78. package/dist/headless/session.d.ts.map +1 -0
  79. package/dist/headless/session.js +125 -0
  80. package/dist/headless/session.js.map +1 -0
  81. package/dist/headless.d.ts +13 -0
  82. package/dist/headless.d.ts.map +1 -0
  83. package/dist/headless.js +13 -0
  84. package/dist/headless.js.map +1 -0
  85. package/dist/index.d.ts +2 -1
  86. package/dist/index.d.ts.map +1 -1
  87. package/dist/namespaces/bcf-viewpoint.d.ts +19 -0
  88. package/dist/namespaces/bcf-viewpoint.d.ts.map +1 -1
  89. package/dist/namespaces/bcf-viewpoint.js.map +1 -1
  90. package/dist/namespaces/bcf.d.ts.map +1 -1
  91. package/dist/namespaces/bcf.js +17 -0
  92. package/dist/namespaces/bcf.js.map +1 -1
  93. package/dist/namespaces/viewer.d.ts +20 -1
  94. package/dist/namespaces/viewer.d.ts.map +1 -1
  95. package/dist/namespaces/viewer.js +40 -0
  96. package/dist/namespaces/viewer.js.map +1 -1
  97. package/dist/review/capture-budget.d.ts.map +1 -1
  98. package/dist/review/capture-budget.js +9 -0
  99. package/dist/review/capture-budget.js.map +1 -1
  100. package/dist/review/capture-ownership.d.ts +12 -0
  101. package/dist/review/capture-ownership.d.ts.map +1 -0
  102. package/dist/review/capture-ownership.js +8 -0
  103. package/dist/review/capture-ownership.js.map +1 -0
  104. package/dist/review/capture-types.d.ts +14 -0
  105. package/dist/review/capture-types.d.ts.map +1 -1
  106. package/dist/review/cards.js +1 -1
  107. package/dist/review/cards.js.map +1 -1
  108. package/dist/review/identity.d.ts +1 -1
  109. package/dist/review/identity.d.ts.map +1 -1
  110. package/dist/review/identity.js +7 -2
  111. package/dist/review/identity.js.map +1 -1
  112. package/dist/review/native-captures.d.ts +4 -0
  113. package/dist/review/native-captures.d.ts.map +1 -1
  114. package/dist/review/native-captures.js +9 -6
  115. package/dist/review/native-captures.js.map +1 -1
  116. package/dist/review/native-identity-table.d.ts +8 -0
  117. package/dist/review/native-identity-table.d.ts.map +1 -0
  118. package/dist/review/native-identity-table.js +29 -0
  119. package/dist/review/native-identity-table.js.map +1 -0
  120. package/dist/review/portable-bindings.d.ts +7 -0
  121. package/dist/review/portable-bindings.d.ts.map +1 -0
  122. package/dist/review/portable-bindings.js +88 -0
  123. package/dist/review/portable-bindings.js.map +1 -0
  124. package/dist/review/portable-native-owners.d.ts +23 -0
  125. package/dist/review/portable-native-owners.d.ts.map +1 -0
  126. package/dist/review/portable-native-owners.js +127 -0
  127. package/dist/review/portable-native-owners.js.map +1 -0
  128. package/dist/review/portable-projection.d.ts +11 -0
  129. package/dist/review/portable-projection.d.ts.map +1 -0
  130. package/dist/review/portable-projection.js +104 -0
  131. package/dist/review/portable-projection.js.map +1 -0
  132. package/dist/review/portable-report-metadata.d.ts +1 -0
  133. package/dist/review/portable-report-metadata.d.ts.map +1 -1
  134. package/dist/review/portable-report-metadata.js +5 -2
  135. package/dist/review/portable-report-metadata.js.map +1 -1
  136. package/dist/review/portable-snapshot.d.ts +89 -0
  137. package/dist/review/portable-snapshot.d.ts.map +1 -0
  138. package/dist/review/portable-snapshot.js +164 -0
  139. package/dist/review/portable-snapshot.js.map +1 -0
  140. package/dist/review/portable-source-contract.d.ts +3 -0
  141. package/dist/review/portable-source-contract.d.ts.map +1 -0
  142. package/dist/review/portable-source-contract.js +8 -0
  143. package/dist/review/portable-source-contract.js.map +1 -0
  144. package/dist/review/portable-validation-evidence.d.ts +2 -1
  145. package/dist/review/portable-validation-evidence.d.ts.map +1 -1
  146. package/dist/review/portable-validation-evidence.js +3 -1
  147. package/dist/review/portable-validation-evidence.js.map +1 -1
  148. package/dist/review/saved-validation.d.ts +2 -0
  149. package/dist/review/saved-validation.d.ts.map +1 -1
  150. package/dist/review/saved-validation.js +1 -1
  151. package/dist/review/saved-validation.js.map +1 -1
  152. package/dist/review/types.d.ts +2 -0
  153. package/dist/review/types.d.ts.map +1 -1
  154. package/dist/review.d.ts +2 -0
  155. package/dist/review.d.ts.map +1 -1
  156. package/dist/review.js +2 -0
  157. package/dist/review.js.map +1 -1
  158. package/dist/section-plane.d.ts +12 -0
  159. package/dist/section-plane.d.ts.map +1 -0
  160. package/dist/section-plane.js +5 -0
  161. package/dist/section-plane.js.map +1 -0
  162. package/dist/types.d.ts +6 -6
  163. package/dist/types.d.ts.map +1 -1
  164. package/package.json +19 -14
package/README.md CHANGED
@@ -11,24 +11,28 @@ npm install @ifc-lite/sdk
11
11
  ## Usage
12
12
 
13
13
  ```ts
14
- import { createBimContext } from '@ifc-lite/sdk';
15
-
16
- // Embedded mode: a backend drives a loaded model. `BimBackend` is a
17
- // 16-namespace interface, so use a ready-made one rather than writing it --
18
- // `HeadlessLikeBackend` from @ifc-lite/mcp is the exported headless backend.
19
- import { HeadlessLikeBackend } from '@ifc-lite/mcp';
20
- const bim = createBimContext({ backend: new HeadlessLikeBackend(store, 'model.ifc', 'model-1') });
21
-
22
- // Connected mode (cross-tab)
23
- import { BroadcastTransport } from '@ifc-lite/sdk';
24
- const transport = new BroadcastTransport('ifc-lite');
25
- const remote = createBimContext({ transport });
26
-
27
- // Use the API
28
- const walls = bim.query().byType('IfcWall').toArray();
29
- bim.viewer.colorize(walls.map(w => w.ref), '#ff0000');
14
+ import { openModel } from '@ifc-lite/sdk/headless';
15
+
16
+ const model = await openModel(await fetch('model.ifc').then(r => r.arrayBuffer()));
17
+ try {
18
+ if (model.report.completeness !== 'complete') throw new Error('Incomplete or unknown record coverage');
19
+ const walls = model.bim.query().byType('IfcWall').toArray();
20
+ console.log(walls.length);
21
+ console.log(model.capability('store.addDoor'));
22
+ } finally {
23
+ model.close();
24
+ }
30
25
  ```
31
26
 
27
+ `openModel` accepts STEP/IFCZIP bytes, including an exact Node Buffer view, and creates no renderer or geometry runtime. It returns `bim`, the parsed `store`, the structured scan `report`, `capability(operation)`, and an idempotent `close()`. Supply `modelId`, `modelName`, or the parser progress/diagnostic options as needed. File and network I/O remain with your application.
28
+
29
+ Capability results describe implemented/configured backend operations; input validation and runtime preparation can still fail. Unavailable calls in a model session throw `UnsupportedOperationError` (`code: 'UNSUPPORTED_OPERATION'`, `operation`, `reason`). Retained backend query builders and mutation namespaces refuse calls after close with `HeadlessSessionClosedError` (`code: 'SESSION_CLOSED'`). After close, capability checks report unsupported with a closed-session reason. The returned source store and pure SDK helpers are not revoked by closing the backend session.
30
+
31
+ Advanced hosts can construct `HeadlessBackend` from this subpath over an existing store, or provide `HeadlessBackendOptions` geometry preparation for Room/Align. MCP retains its existing `HeadlessLikeBackend` constructor and supplies its native preparation through the shared SDK backend. Existing legacy host no-op behavior is preserved; the new model session explicitly refuses unavailable operations.
32
+
33
+ For embedded or remote contexts, continue using `createBimContext({ backend })` or `createBimContext({ transport })` and the existing transport exports. See the [SDK guide](https://ifclite.dev/docs/guide/scripting-sdk/).
34
+
35
+
32
36
  ## Namespaces
33
37
 
34
38
  - `bim.query()` - fluent entity queries by type, property, quantity
@@ -79,6 +83,12 @@ two-argument call remains source-only and skips deleted source records.
79
83
 
80
84
  Also exported: `BimHost` (viewer side), `RemoteBackend`, `MessagePortTransport`, and the full `IfcCreator` API re-exported from `@ifc-lite/create`.
81
85
 
86
+ ## Shared headless host reads
87
+
88
+ Host adapters can import `createQueryAdapter` and `overlayFromView` from `@ifc-lite/sdk/headless`. Supply the parsed store, model ID and getters for the current overlay and mutation view; reads then include pending edits, creations, deletions and relationship changes. CLI and MCP consume this shared implementation. This low-level adapter performs no file I/O and does not initialize geometry.
89
+
90
+ Raw hosts can compose `HeadlessBackend` with explicit model-ID aliases for compatibility. `openModel` sessions use one model ID. `createQueryAdapter` accepts optional pagination-error and type-property normalization policies so host adapters share the live-read implementation while retaining their existing scalar/error contracts.
91
+
82
92
  ## Native Review facts
83
93
 
84
94
  The pure `@ifc-lite/sdk/review` subpath shares the viewer's native validation
@@ -131,3 +141,34 @@ actual edit and placement evidence. A payload join key or model name is not a
131
141
  durable model identity. Parsing a manual report retains historical answers;
132
142
  it does not run a checklist or resolve a finding. These codecs do not persist
133
143
  reports, change model state, or certify that an imported report was executed.
144
+
145
+
146
+ Native host adapters supply `createNativeReviewIdentityTable(store)` alongside
147
+ actual source/owner/revision capabilities. The table preserves every columnar
148
+ EXPRESS/GlobalId row and its owning StringTable, including duplicates; callers
149
+ revalidate physical references and apply bounded enumeration. It never creates
150
+ an editor or reparses a source entity. `readPortableReview` reads supplied saved
151
+ wire formats as imported historical evidence, independently of captured native
152
+ execution; full-source matching does not promote execution or coverage claims.
153
+
154
+ `readPortableReview(captures, liveModels, request, allowed)` projects supplied
155
+ `savedAnalysisRuns` and `savedValidationReports` through the same codecs and
156
+ normalizers. `records` preserves bounded original native counts, definitions,
157
+ coverage, placement/frame and provenance; `bindings` reports source/element
158
+ identity separately. Bound imported cards use the verified full source hash plus
159
+ IFC GlobalId, so renaming or reordering models does not change their identity and
160
+ the same GlobalId in different source files remains distinct. This binding does
161
+ not attest saved placement, a new native execution, freshness or a human decision.
162
+ Legacy name-based card keys remain for callers without verified source identity.
163
+
164
+ Supplied analysis libraries advertise only the record kinds they contain. An
165
+ explicit empty saved-validation-report collection declares available empty
166
+ validation history; an empty mixed analysis library declares neither validation
167
+ nor clash history. `bounds.knownFindings` counts only supplied historical rows,
168
+ not unprovided source kinds or independently evaluated native coverage. Source
169
+ states distinguish unavailable evidence from an available empty collection.
170
+
171
+ Portable `bounds` describe the supplied finding inventory, while cards and totals describe only the visible rows. A zero row limit retains the original records and reports hidden findings. Saved omissions, source gaps, truncated clash/IDS evaluation, or missing failed detail keep complete inventory and omission counts unknown and `presentationComplete` false; imported evidence never establishes complete native coverage.
172
+ Non-IDS saved report kinds retain their original records but expose `unsupported-kind` binding and no projected findings; a matching model source alone does not certify manual element identity or evaluation.
173
+
174
+ Hosts constructing their own `MutablePropertyView` can call `configureSourceMutationView(store, view)` from `@ifc-lite/sdk/headless` to configure source-backed property and quantity extraction. It includes a type definition's own `HasPropertySets`, including IFC2X3 style classes, and preserves occurrence extraction for other entities. Call it before edits so exports retain untouched siblings. `HeadlessBackend` configures this automatically. Stores without source bytes retain their existing view configuration.
@@ -1 +1 @@
1
- {"version":3,"file":"cost-reference-scan.d.ts","sourceRoot":"","sources":["../src/cost-reference-scan.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC/D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAyCrD;;;;;;GAMG;AACH,wBAAgB,iCAAiC,CAC/C,KAAK,EAAE,YAAY,EACnB,IAAI,EAAE,mBAAmB,EACzB,SAAS,EAAE,WAAW,CAAC,MAAM,CAAC,GAC7B,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CA8BlC;AAED,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,YAAY,EACnB,IAAI,EAAE,mBAAmB,EACzB,SAAS,EAAE,WAAW,CAAC,MAAM,CAAC,GAC7B,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAKvB"}
1
+ {"version":3,"file":"cost-reference-scan.d.ts","sourceRoot":"","sources":["../src/cost-reference-scan.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC/D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAyCrD;;;;;;GAMG;AACH,wBAAgB,iCAAiC,CAC/C,KAAK,EAAE,YAAY,EACnB,IAAI,EAAE,mBAAmB,EACzB,SAAS,EAAE,WAAW,CAAC,MAAM,CAAC,GAC7B,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CA8BlC;AAED,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,YAAY,EACnB,IAAI,EAAE,mBAAmB,EACzB,SAAS,EAAE,WAAW,CAAC,MAAM,CAAC,GAC7B,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAKvB"}
@@ -2,10 +2,10 @@
2
2
  * License, v. 2.0. If a copy of the MPL was not distributed with this
3
3
  * file, You can obtain one at https://mozilla.org/MPL/2.0/. */
4
4
  /** Full-model incoming-reference guard for destructive cost authoring. */
5
+ import { stepStringLiteralEnd } from '@ifc-lite/encoding';
5
6
  import { effectiveCreatedRecord, effectiveSourceRecord } from '@ifc-lite/export';
6
7
  function referencedTargetCounts(text, targetIds) {
7
8
  const found = new Map();
8
- let inString = false;
9
9
  let inComment = false;
10
10
  for (let i = 0; i < text.length; i++) {
11
11
  if (inComment) {
@@ -15,21 +15,22 @@ function referencedTargetCounts(text, targetIds) {
15
15
  }
16
16
  continue;
17
17
  }
18
- if (!inString && text[i] === '/' && text[i + 1] === '*') {
18
+ if (text[i] === '/' && text[i + 1] === '*') {
19
19
  inComment = true;
20
20
  i++;
21
21
  continue;
22
22
  }
23
23
  if (text[i] === "'") {
24
- if (inString && text[i + 1] === "'") {
25
- i++;
26
- }
27
- else {
28
- inString = !inString;
29
- }
24
+ // The shared literal-end rule: `''` and a PAGE directive's apostrophe
25
+ // operand (`'Para \S\' 5'`) stay inside the string (#7589). A string
26
+ // that never closes swallows the rest, as before.
27
+ const end = stepStringLiteralEnd(text, i);
28
+ if (end < 0)
29
+ break;
30
+ i = end - 1;
30
31
  continue;
31
32
  }
32
- if (inString || text[i] !== '#')
33
+ if (text[i] !== '#')
33
34
  continue;
34
35
  let value = 0;
35
36
  let cursor = i + 1;
@@ -1 +1 @@
1
- {"version":3,"file":"cost-reference-scan.js","sourceRoot":"","sources":["../src/cost-reference-scan.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cost-reference-scan.js","sourceRoot":"","sources":["../src/cost-reference-scan.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import { type ModellingStoreModelResolver, type AlignGeometryProvider } from '../index.js';
2
+ export declare function createHeadlessAlignBackend(resolve: ModellingStoreModelResolver, provide: AlignGeometryProvider): {
3
+ alignElements(modelId: string, reference: number, targets: readonly number[], mode: import("@ifc-lite/create").AlignMode): Promise<import("../types.js").EntityRef[]>;
4
+ };
5
+ //# sourceMappingURL=align-backend.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"align-backend.d.ts","sourceRoot":"","sources":["../../src/headless/align-backend.ts"],"names":[],"mappings":"AAIA,OAAO,EAA6B,KAAK,2BAA2B,EAAE,KAAK,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAGtH,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,2BAA2B,EAAE,OAAO,EAAE,qBAAqB;;EAQ9G"}
@@ -0,0 +1,15 @@
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 { createAlignCommandBackend } from '../index.js';
5
+ import { recordCompoundMutation, StoreEditor } from '@ifc-lite/mutations';
6
+ export function createHeadlessAlignBackend(resolve, provide) {
7
+ return createAlignCommandBackend(resolve, provide, {
8
+ historyHead: modelId => resolve(modelId).mutationView.getMutations().map(m => m.id).join('|'),
9
+ record: (modelId, write) => {
10
+ const model = resolve(modelId);
11
+ return recordCompoundMutation(model.mutationView, mutationView => write({ ...model, mutationView, editor: new StoreEditor(model.store, mutationView) }));
12
+ },
13
+ });
14
+ }
15
+ //# sourceMappingURL=align-backend.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"align-backend.js","sourceRoot":"","sources":["../../src/headless/align-backend.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAE/D,OAAO,EAAE,yBAAyB,EAAgE,MAAM,aAAa,CAAC;AACtH,OAAO,EAAE,sBAAsB,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAE1E,MAAM,UAAU,0BAA0B,CAAC,OAAoC,EAAE,OAA8B;IAC7G,OAAO,yBAAyB,CAAC,OAAO,EAAE,OAAO,EAAE;QACjD,WAAW,EAAE,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,YAAY,CAAC,YAAY,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;QAC7F,MAAM,EAAE,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE;YACzB,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;YAC/B,OAAO,sBAAsB,CAAC,KAAK,CAAC,YAAY,EAAE,YAAY,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,GAAG,KAAK,EAAE,YAAY,EAAE,MAAM,EAAE,IAAI,WAAW,CAAC,KAAK,CAAC,KAAK,EAAE,YAAY,CAAC,EAAE,CAAC,CAAC,CAAC;QAC3J,CAAC;KACF,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,3 @@
1
+ /** Coerce one authored STEP attribute to the scalar shape used by queries. */
2
+ export declare function authoredValue(value: unknown): string | number | boolean | undefined;
3
+ //# sourceMappingURL=authored-attribute-value.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"authored-attribute-value.d.ts","sourceRoot":"","sources":["../../src/headless/authored-attribute-value.ts"],"names":[],"mappings":"AAIA,8EAA8E;AAC9E,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,CAmBnF"}
@@ -0,0 +1,34 @@
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
+ /** Coerce one authored STEP attribute to the scalar shape used by queries. */
5
+ export function authoredValue(value) {
6
+ if (typeof value === 'number' || typeof value === 'boolean')
7
+ return value;
8
+ if (value && typeof value === 'object' && !Array.isArray(value)) {
9
+ const wrapper = value;
10
+ if (typeof wrapper.real === 'number')
11
+ return wrapper.real;
12
+ if (wrapper.typed?.value !== undefined)
13
+ return wrapper.typed.value;
14
+ return undefined;
15
+ }
16
+ if (typeof value !== 'string')
17
+ return undefined;
18
+ const trimmed = value.trim();
19
+ if (trimmed === '' || trimmed === '$' || trimmed === '*' || trimmed === '.U.' || trimmed === '.X.')
20
+ return undefined;
21
+ if (trimmed === '.T.')
22
+ return true;
23
+ if (trimmed === '.F.')
24
+ return false;
25
+ if (trimmed.startsWith('#'))
26
+ return trimmed;
27
+ if (trimmed.length >= 2 && trimmed.startsWith("'") && trimmed.endsWith("'")) {
28
+ return trimmed.slice(1, -1).replace(/''/g, "'");
29
+ }
30
+ if (trimmed.length >= 2 && trimmed.startsWith('.') && trimmed.endsWith('.'))
31
+ return trimmed.slice(1, -1);
32
+ return trimmed;
33
+ }
34
+ //# sourceMappingURL=authored-attribute-value.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"authored-attribute-value.js","sourceRoot":"","sources":["../../src/headless/authored-attribute-value.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAE/D,8EAA8E;AAC9E,MAAM,UAAU,aAAa,CAAC,KAAc;IAC1C,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC;IAC1E,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QAChE,MAAM,OAAO,GAAG,KAAyE,CAAC;QAC1F,IAAI,OAAO,OAAO,CAAC,IAAI,KAAK,QAAQ;YAAE,OAAO,OAAO,CAAC,IAAI,CAAC;QAC1D,IAAI,OAAO,CAAC,KAAK,EAAE,KAAK,KAAK,SAAS;YAAE,OAAO,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC;QACnE,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,SAAS,CAAC;IAChD,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAC7B,IAAI,OAAO,KAAK,EAAE,IAAI,OAAO,KAAK,GAAG,IAAI,OAAO,KAAK,GAAG,IAAI,OAAO,KAAK,KAAK,IAAI,OAAO,KAAK,KAAK;QAAE,OAAO,SAAS,CAAC;IACrH,IAAI,OAAO,KAAK,KAAK;QAAE,OAAO,IAAI,CAAC;IACnC,IAAI,OAAO,KAAK,KAAK;QAAE,OAAO,KAAK,CAAC;IACpC,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,OAAO,OAAO,CAAC;IAC5C,IAAI,OAAO,CAAC,MAAM,IAAI,CAAC,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QAC5E,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAClD,CAAC;IACD,IAAI,OAAO,CAAC,MAAM,IAAI,CAAC,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC;QAAE,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACzG,OAAO,OAAO,CAAC;AACjB,CAAC"}
@@ -0,0 +1,5 @@
1
+ import type { EntityData, EntityRef, EntityRelationshipsData } from '../index.js';
2
+ import type { PendingOverlay } from './overlay.js';
3
+ /** Apply queued relationship creates/deletes and endpoint metadata edits. */
4
+ export declare function foldRelationshipRows(result: EntityRelationshipsData, pending: PendingOverlay, ref: EntityRef, entityData: (ref: EntityRef) => EntityData | null): EntityRelationshipsData;
5
+ //# sourceMappingURL=backend-query-relationships.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"backend-query-relationships.d.ts","sourceRoot":"","sources":["../../src/headless/backend-query-relationships.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAC;AAClF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAEnD,6EAA6E;AAC7E,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,uBAAuB,EAC/B,OAAO,EAAE,cAAc,EACvB,GAAG,EAAE,SAAS,EACd,UAAU,EAAE,CAAC,GAAG,EAAE,SAAS,KAAK,UAAU,GAAG,IAAI,GAChD,uBAAuB,CA4CzB"}
@@ -0,0 +1,55 @@
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
+ /** Apply queued relationship creates/deletes and endpoint metadata edits. */
5
+ export function foldRelationshipRows(result, pending, ref, entityData) {
6
+ if (pending.deleted.has(ref.expressId)) {
7
+ return { voids: [], fills: [], groups: [], connections: [], relations: [] };
8
+ }
9
+ const seen = new Set();
10
+ const relations = (result.relations ?? []).flatMap((edge) => {
11
+ if (pending.deleted.has(edge.relationshipId) || pending.supersededRelationshipIds.has(edge.relationshipId)
12
+ || pending.deleted.has(edge.entity.id))
13
+ return [];
14
+ const target = entityData({ modelId: ref.modelId, expressId: edge.entity.id });
15
+ if (!target)
16
+ return [];
17
+ const key = `${edge.direction}:${edge.relationshipId}:${edge.entity.id}`;
18
+ if (seen.has(key))
19
+ return [];
20
+ seen.add(key);
21
+ // Parsed rows carry the exact subtype (IfcDoorStandardCase); only a queued retype replaces it.
22
+ const type = pending.effectiveType(edge.entity.id) ?? edge.entity.type;
23
+ return [{ ...edge, entity: { id: edge.entity.id, name: target.name || undefined, type } }];
24
+ });
25
+ for (const edge of pending.relationshipEdges(ref.expressId)) {
26
+ const key = `${edge.direction}:${edge.relationshipId}:${edge.targetId}`;
27
+ if (seen.has(key))
28
+ continue;
29
+ const target = entityData({ modelId: ref.modelId, expressId: edge.targetId });
30
+ if (!target)
31
+ continue;
32
+ seen.add(key);
33
+ relations.push({
34
+ relationshipId: edge.relationshipId,
35
+ relationshipType: edge.relationshipType,
36
+ direction: edge.direction,
37
+ entity: { id: edge.targetId, name: target.name || undefined, type: target.type },
38
+ });
39
+ }
40
+ const entities = (types, directions) => relations
41
+ .filter(edge => types.includes(edge.relationshipType.toUpperCase()) && directions.includes(edge.direction))
42
+ .map(edge => edge.entity);
43
+ return {
44
+ voids: entities(['IFCRELVOIDSELEMENT'], ['forward'])
45
+ .filter((entity, index, all) => all.findIndex(other => other.id === entity.id) === index),
46
+ fills: entities(['IFCRELFILLSELEMENT'], ['inverse'])
47
+ .filter((entity, index, all) => all.findIndex(other => other.id === entity.id) === index),
48
+ groups: entities(['IFCRELASSIGNSTOGROUP', 'IFCRELASSIGNSTOGROUPBYFACTOR'], ['inverse'])
49
+ .filter((entity, index, all) => all.findIndex(other => other.id === entity.id) === index),
50
+ connections: entities(['IFCRELCONNECTSPATHELEMENTS'], ['forward', 'inverse'])
51
+ .filter((entity, index, all) => entity.id !== ref.expressId && all.findIndex(other => other.id === entity.id) === index),
52
+ relations,
53
+ };
54
+ }
55
+ //# sourceMappingURL=backend-query-relationships.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"backend-query-relationships.js","sourceRoot":"","sources":["../../src/headless/backend-query-relationships.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ /** Shared headless reads fold live edits once for SDK, CLI and MCP hosts. */
2
+ import type { QueryBackendMethods } from '../index.js';
3
+ import type { IfcDataStore } from '@ifc-lite/parser';
4
+ import { expandTypes, isQueryableObjectType } from '@ifc-lite/parser';
5
+ import { type MutablePropertyView } from '@ifc-lite/mutations';
6
+ import type { PendingOverlay } from './overlay.js';
7
+ export { expandTypes };
8
+ /** Shared predicate for unfiltered headless object queries. */
9
+ export declare const isProductType: typeof isQueryableObjectType;
10
+ /**
11
+ * Build the query adapter over a store, folding whatever `overlay()` returns at
12
+ * call time. `overlay` is a getter, not a value: the backend creates its
13
+ * `MutablePropertyView` lazily on the first mutation, so a session that is only
14
+ * ever read gets `null` on every call and keeps the original store-only path.
15
+ */
16
+ export declare function createQueryAdapter(store: IfcDataStore, modelId: string, overlay: () => PendingOverlay | null, mutationView: () => MutablePropertyView | null, options?: {
17
+ paginationError?: new (message: string) => Error;
18
+ normalizeTypePropertyValue?: (value: unknown) => string | number | boolean | null;
19
+ }): QueryBackendMethods;
20
+ //# sourceMappingURL=backend-query.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"backend-query.d.ts","sourceRoot":"","sources":["../../src/headless/backend-query.ts"],"names":[],"mappings":"AAIA,6EAA6E;AAE7E,OAAO,KAAK,EAWV,mBAAmB,EAEpB,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAOL,WAAW,EAGX,qBAAqB,EACtB,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EAA6B,KAAK,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAE1F,OAAO,KAAK,EAAiB,cAAc,EAAE,MAAM,cAAc,CAAC;AAMlE,OAAO,EAAE,WAAW,EAAE,CAAC;AAEvB,+DAA+D;AAC/D,eAAO,MAAM,aAAa,8BAAwB,CAAC;AAenD;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,YAAY,EACnB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,cAAc,GAAG,IAAI,EACpC,YAAY,EAAE,MAAM,mBAAmB,GAAG,IAAI,EAC9C,OAAO,GAAE;IACP,eAAe,CAAC,EAAE,KAAK,OAAO,EAAE,MAAM,KAAK,KAAK,CAAC;IACjD,0BAA0B,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,CAAC;CAC9E,GACL,mBAAmB,CA8SrB"}