@ifc-lite/data 1.15.1 → 1.17.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 (74) hide show
  1. package/README.md +58 -28
  2. package/dist/entity-table.d.ts +53 -0
  3. package/dist/entity-table.d.ts.map +1 -1
  4. package/dist/entity-table.js +147 -93
  5. package/dist/entity-table.js.map +1 -1
  6. package/dist/ifc-schema/generated/attributes.d.ts +10 -0
  7. package/dist/ifc-schema/generated/attributes.d.ts.map +1 -0
  8. package/dist/ifc-schema/generated/attributes.js +2775 -0
  9. package/dist/ifc-schema/generated/attributes.js.map +1 -0
  10. package/dist/ifc-schema/generated/data-types.d.ts +8 -0
  11. package/dist/ifc-schema/generated/data-types.d.ts.map +1 -0
  12. package/dist/ifc-schema/generated/data-types.js +396 -0
  13. package/dist/ifc-schema/generated/data-types.js.map +1 -0
  14. package/dist/ifc-schema/generated/entities-ifc2x3.d.ts +8 -0
  15. package/dist/ifc-schema/generated/entities-ifc2x3.d.ts.map +1 -0
  16. package/dist/ifc-schema/generated/entities-ifc2x3.js +777 -0
  17. package/dist/ifc-schema/generated/entities-ifc2x3.js.map +1 -0
  18. package/dist/ifc-schema/generated/entities-ifc4.d.ts +8 -0
  19. package/dist/ifc-schema/generated/entities-ifc4.d.ts.map +1 -0
  20. package/dist/ifc-schema/generated/entities-ifc4.js +938 -0
  21. package/dist/ifc-schema/generated/entities-ifc4.js.map +1 -0
  22. package/dist/ifc-schema/generated/entities-ifc4x3.d.ts +8 -0
  23. package/dist/ifc-schema/generated/entities-ifc4x3.d.ts.map +1 -0
  24. package/dist/ifc-schema/generated/entities-ifc4x3.js +1014 -0
  25. package/dist/ifc-schema/generated/entities-ifc4x3.js.map +1 -0
  26. package/dist/ifc-schema/generated/partof-relations.d.ts +10 -0
  27. package/dist/ifc-schema/generated/partof-relations.d.ts.map +1 -0
  28. package/dist/ifc-schema/generated/partof-relations.js +28 -0
  29. package/dist/ifc-schema/generated/partof-relations.js.map +1 -0
  30. package/dist/ifc-schema/generated/psets-ifc2x3.d.ts +8 -0
  31. package/dist/ifc-schema/generated/psets-ifc2x3.d.ts.map +1 -0
  32. package/dist/ifc-schema/generated/psets-ifc2x3.js +3416 -0
  33. package/dist/ifc-schema/generated/psets-ifc2x3.js.map +1 -0
  34. package/dist/ifc-schema/generated/psets-ifc4.d.ts +8 -0
  35. package/dist/ifc-schema/generated/psets-ifc4.d.ts.map +1 -0
  36. package/dist/ifc-schema/generated/psets-ifc4.js +4510 -0
  37. package/dist/ifc-schema/generated/psets-ifc4.js.map +1 -0
  38. package/dist/ifc-schema/generated/psets-ifc4x3.d.ts +8 -0
  39. package/dist/ifc-schema/generated/psets-ifc4x3.d.ts.map +1 -0
  40. package/dist/ifc-schema/generated/psets-ifc4x3.js +8554 -0
  41. package/dist/ifc-schema/generated/psets-ifc4x3.js.map +1 -0
  42. package/dist/ifc-schema/index.d.ts +61 -0
  43. package/dist/ifc-schema/index.d.ts.map +1 -0
  44. package/dist/ifc-schema/index.js +212 -0
  45. package/dist/ifc-schema/index.js.map +1 -0
  46. package/dist/ifc-schema/types.d.ts +108 -0
  47. package/dist/ifc-schema/types.d.ts.map +1 -0
  48. package/dist/ifc-schema/types.js +5 -0
  49. package/dist/ifc-schema/types.js.map +1 -0
  50. package/dist/index.d.ts +11 -8
  51. package/dist/index.d.ts.map +1 -1
  52. package/dist/index.js +11 -4
  53. package/dist/index.js.map +1 -1
  54. package/dist/property-table.d.ts +22 -0
  55. package/dist/property-table.d.ts.map +1 -1
  56. package/dist/property-table.js +89 -62
  57. package/dist/property-table.js.map +1 -1
  58. package/dist/quantity-table.d.ts +18 -0
  59. package/dist/quantity-table.d.ts.map +1 -1
  60. package/dist/quantity-table.js +80 -66
  61. package/dist/quantity-table.js.map +1 -1
  62. package/dist/relationship-graph.d.ts +53 -6
  63. package/dist/relationship-graph.d.ts.map +1 -1
  64. package/dist/relationship-graph.js +149 -113
  65. package/dist/relationship-graph.js.map +1 -1
  66. package/dist/string-table.d.ts +8 -0
  67. package/dist/string-table.d.ts.map +1 -1
  68. package/dist/string-table.js +20 -0
  69. package/dist/string-table.js.map +1 -1
  70. package/dist/utf8-decode.d.ts +24 -0
  71. package/dist/utf8-decode.d.ts.map +1 -0
  72. package/dist/utf8-decode.js +103 -0
  73. package/dist/utf8-decode.js.map +1 -0
  74. package/package.json +3 -2
package/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # @ifc-lite/data
2
2
 
3
- Columnar data structures for IFClite. Provides TypedArray-based storage for IFC entities, properties, quantities, and relationships.
3
+ Columnar data structures for IFClite. TypedArray-backed storage for entities, properties, quantities, and relationships — the layout that lets `@ifc-lite/parser` hold a 200 MB IFC file in ~30 MB of RAM and lets `@ifc-lite/query` filter it in milliseconds.
4
4
 
5
5
  ## Installation
6
6
 
@@ -8,52 +8,82 @@ Columnar data structures for IFClite. Provides TypedArray-based storage for IFC
8
8
  npm install @ifc-lite/data
9
9
  ```
10
10
 
11
- ## Quick Start
11
+ ## When to use this directly
12
+
13
+ Most users get these structures for free as the output of `@ifc-lite/parser`'s `parseColumnar()`. Use this package directly when you're:
14
+
15
+ - Building a custom data source (e.g. server-side parquet → IFClite tables)
16
+ - Writing a tool that consumes the columnar format outside the parser pipeline
17
+ - Looking up EPSG codes (the geo-reference index is shipped here)
18
+
19
+ ## Build an entity table
12
20
 
13
21
  ```typescript
14
- import { StringTableBuilder, EntityTableBuilder, RelationshipGraphBuilder } from '@ifc-lite/data';
15
- import type { EntityTable, RelationshipGraph } from '@ifc-lite/data';
22
+ import { EntityTableBuilder, StringTableBuilder } from '@ifc-lite/data';
16
23
 
17
- // String interning for efficient storage
18
24
  const strings = new StringTableBuilder();
19
- const id = strings.intern('IFCWALL');
25
+ const entities = new EntityTableBuilder();
26
+
27
+ const wallTypeId = strings.intern('IFCWALL');
28
+ const wallNameId = strings.intern('Wall A');
29
+ const wallGuidId = strings.intern('1abc2def3...');
30
+
31
+ entities.add({
32
+ expressId: 42,
33
+ typeNameId: wallTypeId,
34
+ nameId: wallNameId,
35
+ globalIdId: wallGuidId,
36
+ // ... other columns
37
+ });
38
+
39
+ const table = entities.build();
40
+ const stringTable = strings.build();
41
+
42
+ console.log(table.count); // 1
43
+ console.log(stringTable.get(table.name[0])); // 'Wall A'
44
+ console.log(table.getTypeName(42)); // 'IFCWALL'
45
+ ```
20
46
 
21
- // Columnar entity storage (builder pattern)
22
- const entityBuilder = new EntityTableBuilder();
23
- // ... add entities ...
24
- const entities: EntityTable = entityBuilder.build();
47
+ ## Relationship graph
25
48
 
26
- // Relationship graph (builder pattern)
27
- const graphBuilder = new RelationshipGraphBuilder();
28
- // ... add relationships ...
29
- const graph: RelationshipGraph = graphBuilder.build();
30
- ```
49
+ Edges are stored CSR-style (compressed sparse row) — fast to traverse, compact in memory.
50
+
51
+ ```typescript
52
+ import { RelationshipGraphBuilder, RelationshipType } from '@ifc-lite/data';
53
+
54
+ const builder = new RelationshipGraphBuilder();
55
+
56
+ // Storey 100 contains walls 42, 43, 44
57
+ builder.addEdge(100, 42, RelationshipType.CONTAINS);
58
+ builder.addEdge(100, 43, RelationshipType.CONTAINS);
59
+ builder.addEdge(100, 44, RelationshipType.CONTAINS);
31
60
 
32
- ## Features
61
+ const graph = builder.build();
33
62
 
34
- - Columnar (TypedArray) storage for entities, properties, and quantities
35
- - String table with interning for memory efficiency
36
- - Relationship graph with typed edges
37
- - IFC type enum for fast type comparisons
38
- - Spatial hierarchy representation
39
- - Local EPSG CRS index with exact-code lookup and text search
63
+ const contained = graph.outgoing(100, RelationshipType.CONTAINS);
64
+ console.log([...contained]); // [42, 43, 44]
65
+ ```
66
+
67
+ ## EPSG lookup
40
68
 
41
- ## EPSG Lookup
69
+ The full EPSG database ships as a pre-built index — geo-referenced models can resolve coordinate systems offline at runtime.
42
70
 
43
71
  ```typescript
44
72
  import { lookupEpsgByCode, searchEpsgIndex } from '@ifc-lite/data';
45
73
 
46
74
  const lv95 = await lookupEpsgByCode(2056);
47
- const search = await searchEpsgIndex('web mercator');
75
+ // { code: 2056, name: 'CH1903+ / LV95', kind: 'projected', ... }
76
+
77
+ const matches = await searchEpsgIndex('web mercator');
78
+ // → top text-search results; ordered by relevance
79
+ console.log(matches.map(m => `${m.code} ${m.name}`));
48
80
  ```
49
81
 
50
- The EPSG search index is generated ahead of time and committed to the repo, so
51
- normal builds stay offline and fast. Refresh it explicitly with
52
- `pnpm generate:epsg-index`.
82
+ The index is generated at build time and committed to the repo, so normal builds stay offline. Refresh it with `pnpm generate:epsg-index`.
53
83
 
54
84
  ## API
55
85
 
56
- See the [API Reference](../../docs/api/typescript.md#ifc-litedata).
86
+ See the [API Reference](https://louistrue.github.io/ifc-lite/api/typescript/#ifc-litedata).
57
87
 
58
88
  ## License
59
89
 
@@ -16,6 +16,13 @@ export interface EntityTable {
16
16
  containedInStorey: Int32Array;
17
17
  definedByType: Int32Array;
18
18
  geometryIndex: Int32Array;
19
+ /**
20
+ * Interned-string indices for raw IFC type names (used by `getTypeName`
21
+ * fallback). Optional because older constructors (server-data hydration,
22
+ * legacy cache reads) didn't track it; absent means the enum-only name
23
+ * is the only display string available.
24
+ */
25
+ rawTypeName?: Uint32Array;
19
26
  typeRanges: Map<IfcTypeEnum, {
20
27
  start: number;
21
28
  end: number;
@@ -27,6 +34,8 @@ export interface EntityTable {
27
34
  getTypeName(expressId: number): string;
28
35
  hasGeometry(expressId: number): boolean;
29
36
  getByType(type: IfcTypeEnum): number[];
37
+ /** Get IfcTypeEnum for an expressId using internal index. Returns IfcTypeEnum.Unknown if not found. */
38
+ getTypeEnum(expressId: number): IfcTypeEnum;
30
39
  /** Get expressId by IFC GlobalId string (22-char GUID). Returns -1 if not found. */
31
40
  getExpressIdByGlobalId(globalId: string): number;
32
41
  /** Get all GlobalId → expressId mappings (for BCF integration) */
@@ -53,4 +62,48 @@ export declare class EntityTableBuilder {
53
62
  add(expressId: number, type: string, globalId: string, name: string, description: string, objectType: string, hasGeometry?: boolean, isType?: boolean): void;
54
63
  build(): EntityTable;
55
64
  }
65
+ /**
66
+ * Plain-data column representation of an `EntityTable`.
67
+ *
68
+ * Holds only typed arrays + a small `typeRanges` map (used for cache
69
+ * serialization). Crucially has no closures, so it can be structured-cloned
70
+ * across worker boundaries with the underlying buffers in the transfer list.
71
+ *
72
+ * `rawTypeName` carries the interned-string index for the raw IFC type so
73
+ * `getTypeName()` can fall back when the type isn't in the generated enum.
74
+ */
75
+ export interface EntityTableColumns {
76
+ count: number;
77
+ expressId: Uint32Array;
78
+ typeEnum: Uint16Array;
79
+ globalId: Uint32Array;
80
+ name: Uint32Array;
81
+ description: Uint32Array;
82
+ objectType: Uint32Array;
83
+ flags: Uint8Array;
84
+ containedInStorey: Int32Array;
85
+ definedByType: Int32Array;
86
+ geometryIndex: Int32Array;
87
+ rawTypeName?: Uint32Array;
88
+ typeRanges?: Map<IfcTypeEnum, {
89
+ start: number;
90
+ end: number;
91
+ }>;
92
+ }
93
+ /**
94
+ * Build a live `EntityTable` (with closures) from raw columnar data and a
95
+ * `StringTable`. Mirrors the closure block previously inlined in
96
+ * `EntityTableBuilder.build()` so worker transports and cache loaders share
97
+ * one source of truth.
98
+ */
99
+ export declare function entityTableFromColumns(columns: EntityTableColumns, strings: StringTable): EntityTable;
100
+ /**
101
+ * Extract the column buffers (no closures) from an `EntityTable`. Used by
102
+ * the parser worker → main transport path and any other consumer that
103
+ * needs to hand the table to a different realm.
104
+ *
105
+ * Returned typed arrays alias the same `ArrayBuffer`s as the source table
106
+ * — when used in a `postMessage` transfer list those buffers detach.
107
+ */
108
+ export declare function entityTableToColumns(table: EntityTable): EntityTableColumns;
56
109
  //# sourceMappingURL=entity-table.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"entity-table.d.ts","sourceRoot":"","sources":["../src/entity-table.ts"],"names":[],"mappings":"AAIA;;;GAGG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,WAAW,EAA2D,MAAM,YAAY,CAAC;AAQlG,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAEvB,SAAS,EAAE,WAAW,CAAC;IACvB,QAAQ,EAAE,WAAW,CAAC;IACtB,QAAQ,EAAE,WAAW,CAAC;IACtB,IAAI,EAAE,WAAW,CAAC;IAClB,WAAW,EAAE,WAAW,CAAC;IACzB,UAAU,EAAE,WAAW,CAAC;IACxB,KAAK,EAAE,UAAU,CAAC;IAElB,iBAAiB,EAAE,UAAU,CAAC;IAC9B,aAAa,EAAE,UAAU,CAAC;IAC1B,aAAa,EAAE,UAAU,CAAC;IAE1B,UAAU,EAAE,GAAG,CAAC,WAAW,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAE7D,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAAC;IACvC,OAAO,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAAC;IACnC,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAAC;IAC1C,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAAC;IACzC,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAAC;IACvC,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC;IACxC,SAAS,CAAC,IAAI,EAAE,WAAW,GAAG,MAAM,EAAE,CAAC;IAEvC,oFAAoF;IACpF,sBAAsB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAAC;IAEjD,kEAAkE;IAClE,cAAc,IAAI,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACvC;AAED,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,KAAK,CAAa;IAC1B,OAAO,CAAC,OAAO,CAAc;IAE7B,SAAS,EAAE,WAAW,CAAC;IACvB,QAAQ,EAAE,WAAW,CAAC;IACtB,QAAQ,EAAE,WAAW,CAAC;IACtB,IAAI,EAAE,WAAW,CAAC;IAClB,WAAW,EAAE,WAAW,CAAC;IACzB,UAAU,EAAE,WAAW,CAAC;IACxB,KAAK,EAAE,UAAU,CAAC;IAClB,iBAAiB,EAAE,UAAU,CAAC;IAC9B,aAAa,EAAE,UAAU,CAAC;IAC1B,aAAa,EAAE,UAAU,CAAC;IAC1B,yEAAyE;IACzE,WAAW,EAAE,WAAW,CAAC;IAEzB,OAAO,CAAC,UAAU,CAAuC;IACzD,OAAO,CAAC,UAAU,CAAuC;gBAE7C,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW;IAgBlD,GAAG,CACD,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,MAAM,EAClB,WAAW,GAAE,OAAe,EAC5B,MAAM,GAAE,OAAe,GACtB,IAAI;IA0BP,KAAK,IAAI,WAAW;CAkHrB"}
1
+ {"version":3,"file":"entity-table.d.ts","sourceRoot":"","sources":["../src/entity-table.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  /* This Source Code Form is subject to the terms of the Mozilla Public
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
- import { EntityFlags, IfcTypeEnumFromString, IfcTypeEnumToString } from './types.js';
4
+ import { IfcTypeEnum, EntityFlags, IfcTypeEnumFromString, IfcTypeEnumToString } from './types.js';
5
5
  import { IFC_ENTITY_NAMES } from './ifc-entity-names.js';
6
6
  /** Convert UPPERCASE IFC type name to PascalCase using the generated schema name map */
7
7
  function normalizeIfcUpperCase(upper) {
@@ -73,101 +73,155 @@ export class EntityTableBuilder {
73
73
  const count = this.typeCounts.get(type);
74
74
  typeRanges.set(type, { start, end: start + count });
75
75
  }
76
- // Build correct per-type index arrays for getByType()
77
- // typeRanges assumes contiguous entities per type, which fails with interleaved IFC files
78
- const typeIndices = new Map();
79
- for (let i = 0; i < this.count; i++) {
80
- const t = trim(this.typeEnum)[i];
81
- let arr = typeIndices.get(t);
82
- if (!arr) {
83
- arr = [];
84
- typeIndices.set(t, arr);
85
- }
86
- arr.push(i);
76
+ return entityTableFromColumns({
77
+ count: this.count,
78
+ expressId: trim(this.expressId),
79
+ typeEnum: trim(this.typeEnum),
80
+ globalId: trim(this.globalId),
81
+ name: trim(this.name),
82
+ description: trim(this.description),
83
+ objectType: trim(this.objectType),
84
+ flags: trim(this.flags),
85
+ containedInStorey: trim(this.containedInStorey),
86
+ definedByType: trim(this.definedByType),
87
+ geometryIndex: trim(this.geometryIndex),
88
+ rawTypeName: trim(this.rawTypeName),
89
+ typeRanges,
90
+ }, this.strings);
91
+ }
92
+ }
93
+ /**
94
+ * Build a live `EntityTable` (with closures) from raw columnar data and a
95
+ * `StringTable`. Mirrors the closure block previously inlined in
96
+ * `EntityTableBuilder.build()` so worker transports and cache loaders share
97
+ * one source of truth.
98
+ */
99
+ export function entityTableFromColumns(columns, strings) {
100
+ const { count, expressId, typeEnum, globalId, name, description, objectType, flags, containedInStorey, definedByType, geometryIndex, } = columns;
101
+ // Zero-fill fallback: callers without a raw-type column (cache reads,
102
+ // server hydration) lose the unknown-type display fallback but the
103
+ // closure still returns a correct value for known enums.
104
+ const rawTypeName = columns.rawTypeName ?? new Uint32Array(count);
105
+ // Per-type index built from the live typeEnum column. Cannot be
106
+ // reconstructed from typeRanges alone because IFC files can interleave
107
+ // entities of different types within one stream.
108
+ const typeIndices = new Map();
109
+ for (let i = 0; i < count; i++) {
110
+ const t = typeEnum[i];
111
+ let arr = typeIndices.get(t);
112
+ if (!arr) {
113
+ arr = [];
114
+ typeIndices.set(t, arr);
87
115
  }
88
- const expressId = trim(this.expressId);
89
- const typeEnum = trim(this.typeEnum);
90
- const globalId = trim(this.globalId);
91
- const name = trim(this.name);
92
- const description = trim(this.description);
93
- const objectType = trim(this.objectType);
94
- const flags = trim(this.flags);
95
- const containedInStorey = trim(this.containedInStorey);
96
- const definedByType = trim(this.definedByType);
97
- const geometryIndex = trim(this.geometryIndex);
98
- const rawTypeName = trim(this.rawTypeName);
99
- // PERF: Build idToIndex map for O(1) lookups instead of O(n) linear search
100
- // This eliminates the linear search in indexOfId() which is called frequently
101
- const idToIndex = new Map();
102
- for (let i = 0; i < this.count; i++) {
103
- idToIndex.set(expressId[i], i);
116
+ arr.push(i);
117
+ }
118
+ const typeRanges = columns.typeRanges ?? new Map();
119
+ if (columns.typeRanges === undefined) {
120
+ // Derive ranges from typeIndices when not supplied. Caller will only
121
+ // hit this branch on transport-rebuild paths; cache loads pass them.
122
+ for (const [type, indices] of typeIndices) {
123
+ typeRanges.set(type, { start: indices[0] ?? 0, end: (indices[indices.length - 1] ?? -1) + 1 });
104
124
  }
105
- const indexOfId = (id) => idToIndex.get(id) ?? -1;
106
- // Build GlobalId stringexpressId map for BCF integration
107
- // This allows O(1) lookup of expressId from IFC GlobalId (22-char string)
108
- const globalIdToExpressId = new Map();
109
- for (let i = 0; i < this.count; i++) {
110
- const gidString = this.strings.get(globalId[i]);
111
- if (gidString) {
112
- globalIdToExpressId.set(gidString, expressId[i]);
113
- }
125
+ }
126
+ // PERF: O(1) expressIdrow index lookup instead of linear scan.
127
+ const idToIndex = new Map();
128
+ for (let i = 0; i < count; i++) {
129
+ idToIndex.set(expressId[i], i);
130
+ }
131
+ const indexOfId = (id) => idToIndex.get(id) ?? -1;
132
+ // GlobalId → expressId for BCF integration. Only populated for entities
133
+ // that actually have a non-empty GlobalId string.
134
+ const globalIdToExpressId = new Map();
135
+ for (let i = 0; i < count; i++) {
136
+ const gidString = strings.get(globalId[i]);
137
+ if (gidString) {
138
+ globalIdToExpressId.set(gidString, expressId[i]);
114
139
  }
115
- return {
116
- count: this.count,
117
- expressId,
118
- typeEnum,
119
- globalId,
120
- name,
121
- description,
122
- objectType,
123
- flags,
124
- containedInStorey,
125
- definedByType,
126
- geometryIndex,
127
- typeRanges,
128
- getGlobalId: (id) => {
129
- const idx = indexOfId(id);
130
- return idx >= 0 ? this.strings.get(globalId[idx]) : '';
131
- },
132
- getName: (id) => {
133
- const idx = indexOfId(id);
134
- return idx >= 0 ? this.strings.get(name[idx]) : '';
135
- },
136
- getDescription: (id) => {
137
- const idx = indexOfId(id);
138
- return idx >= 0 ? this.strings.get(description[idx]) : '';
139
- },
140
- getObjectType: (id) => {
141
- const idx = indexOfId(id);
142
- return idx >= 0 ? this.strings.get(objectType[idx]) : '';
143
- },
144
- getTypeName: (id) => {
145
- const idx = indexOfId(id);
146
- if (idx < 0)
147
- return 'Unknown';
148
- const enumName = IfcTypeEnumToString(typeEnum[idx]);
149
- if (enumName !== 'Unknown')
150
- return enumName;
151
- // Fallback: use the raw type name for types not in the enum
152
- return this.strings.get(rawTypeName[idx]) || 'Unknown';
153
- },
154
- hasGeometry: (id) => {
155
- const idx = indexOfId(id);
156
- return idx >= 0 ? (flags[idx] & EntityFlags.HAS_GEOMETRY) !== 0 : false;
157
- },
158
- getByType: (type) => {
159
- const indices = typeIndices.get(type);
160
- if (!indices)
161
- return [];
162
- const ids = new Array(indices.length);
163
- for (let i = 0; i < indices.length; i++) {
164
- ids[i] = expressId[indices[i]];
165
- }
166
- return ids;
167
- },
168
- getExpressIdByGlobalId: (gid) => globalIdToExpressId.get(gid) ?? -1,
169
- getGlobalIdMap: () => new Map(globalIdToExpressId), // Defensive copy
170
- };
171
140
  }
141
+ return {
142
+ count,
143
+ expressId,
144
+ typeEnum,
145
+ globalId,
146
+ name,
147
+ description,
148
+ objectType,
149
+ flags,
150
+ containedInStorey,
151
+ definedByType,
152
+ geometryIndex,
153
+ rawTypeName,
154
+ typeRanges,
155
+ getGlobalId: (id) => {
156
+ const idx = indexOfId(id);
157
+ return idx >= 0 ? strings.get(globalId[idx]) : '';
158
+ },
159
+ getName: (id) => {
160
+ const idx = indexOfId(id);
161
+ return idx >= 0 ? strings.get(name[idx]) : '';
162
+ },
163
+ getDescription: (id) => {
164
+ const idx = indexOfId(id);
165
+ return idx >= 0 ? strings.get(description[idx]) : '';
166
+ },
167
+ getObjectType: (id) => {
168
+ const idx = indexOfId(id);
169
+ return idx >= 0 ? strings.get(objectType[idx]) : '';
170
+ },
171
+ getTypeName: (id) => {
172
+ const idx = indexOfId(id);
173
+ if (idx < 0)
174
+ return 'Unknown';
175
+ const enumName = IfcTypeEnumToString(typeEnum[idx]);
176
+ if (enumName !== 'Unknown')
177
+ return enumName;
178
+ return strings.get(rawTypeName[idx]) || 'Unknown';
179
+ },
180
+ hasGeometry: (id) => {
181
+ const idx = indexOfId(id);
182
+ return idx >= 0 ? (flags[idx] & EntityFlags.HAS_GEOMETRY) !== 0 : false;
183
+ },
184
+ getByType: (type) => {
185
+ const indices = typeIndices.get(type);
186
+ if (!indices)
187
+ return [];
188
+ const ids = new Array(indices.length);
189
+ for (let i = 0; i < indices.length; i++) {
190
+ ids[i] = expressId[indices[i]];
191
+ }
192
+ return ids;
193
+ },
194
+ getTypeEnum: (id) => {
195
+ const idx = indexOfId(id);
196
+ return idx >= 0 ? typeEnum[idx] : IfcTypeEnum.Unknown;
197
+ },
198
+ getExpressIdByGlobalId: (gid) => globalIdToExpressId.get(gid) ?? -1,
199
+ getGlobalIdMap: () => new Map(globalIdToExpressId),
200
+ };
201
+ }
202
+ /**
203
+ * Extract the column buffers (no closures) from an `EntityTable`. Used by
204
+ * the parser worker → main transport path and any other consumer that
205
+ * needs to hand the table to a different realm.
206
+ *
207
+ * Returned typed arrays alias the same `ArrayBuffer`s as the source table
208
+ * — when used in a `postMessage` transfer list those buffers detach.
209
+ */
210
+ export function entityTableToColumns(table) {
211
+ return {
212
+ count: table.count,
213
+ expressId: table.expressId,
214
+ typeEnum: table.typeEnum,
215
+ globalId: table.globalId,
216
+ name: table.name,
217
+ description: table.description,
218
+ objectType: table.objectType,
219
+ flags: table.flags,
220
+ containedInStorey: table.containedInStorey,
221
+ definedByType: table.definedByType,
222
+ geometryIndex: table.geometryIndex,
223
+ rawTypeName: table.rawTypeName ?? new Uint32Array(table.count),
224
+ typeRanges: table.typeRanges,
225
+ };
172
226
  }
173
227
  //# sourceMappingURL=entity-table.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"entity-table.js","sourceRoot":"","sources":["../src/entity-table.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"entity-table.js","sourceRoot":"","sources":["../src/entity-table.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Auto-generated from `scripts/upstream/SchemaInfo.*.g.cs` (buildingSMART/
3
+ * IDS-Audit-tool, MIT). Do not edit by hand — regenerate via
4
+ * pnpm --filter @ifc-lite/data run generate:ifc-schema
5
+ */
6
+ import type { IfcAttributeInfo } from '../types.js';
7
+ export declare const ATTRIBUTES_IFC2X3: readonly IfcAttributeInfo[];
8
+ export declare const ATTRIBUTES_IFC4: readonly IfcAttributeInfo[];
9
+ export declare const ATTRIBUTES_IFC4X3: readonly IfcAttributeInfo[];
10
+ //# sourceMappingURL=attributes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"attributes.d.ts","sourceRoot":"","sources":["../../../src/ifc-schema/generated/attributes.ts"],"names":[],"mappings":"AAIA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAEpD,eAAO,MAAM,iBAAiB,EAAE,SAAS,gBAAgB,EA27BxD,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,SAAS,gBAAgB,EAw3BtD,CAAC;AAEF,eAAO,MAAM,iBAAiB,EAAE,SAAS,gBAAgB,EA65BxD,CAAC"}