@ifc-lite/data 3.5.1 → 4.0.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.
- package/dist/color.d.ts +17 -0
- package/dist/color.d.ts.map +1 -0
- package/dist/color.js +24 -0
- package/dist/color.js.map +1 -0
- package/dist/decomposition.d.ts +32 -0
- package/dist/decomposition.d.ts.map +1 -0
- package/dist/decomposition.js +57 -0
- package/dist/decomposition.js.map +1 -0
- package/dist/group-property-sets.d.ts +15 -0
- package/dist/group-property-sets.d.ts.map +1 -0
- package/dist/group-property-sets.js +33 -0
- package/dist/group-property-sets.js.map +1 -0
- package/dist/group-quantity-sets.d.ts +17 -0
- package/dist/group-quantity-sets.d.ts.map +1 -0
- package/dist/group-quantity-sets.js +37 -0
- package/dist/group-quantity-sets.js.map +1 -0
- package/dist/ifc-schema/descendants.d.ts +20 -0
- package/dist/ifc-schema/descendants.d.ts.map +1 -0
- package/dist/ifc-schema/descendants.js +279 -0
- package/dist/ifc-schema/descendants.js.map +1 -0
- package/dist/ifc-schema/entity-aliases.d.ts +61 -0
- package/dist/ifc-schema/entity-aliases.d.ts.map +1 -0
- package/dist/ifc-schema/entity-aliases.js +71 -0
- package/dist/ifc-schema/entity-aliases.js.map +1 -0
- package/dist/ifc-schema/index.d.ts +1 -0
- package/dist/ifc-schema/index.d.ts.map +1 -1
- package/dist/ifc-schema/index.js +4 -1
- package/dist/ifc-schema/index.js.map +1 -1
- package/dist/index.d.ts +9 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -1
- package/dist/index.js.map +1 -1
- package/dist/property-table.d.ts.map +1 -1
- package/dist/property-table.js +2 -16
- package/dist/property-table.js.map +1 -1
- package/dist/quantity-table.d.ts +5 -0
- package/dist/quantity-table.d.ts.map +1 -1
- package/dist/quantity-table.js +8 -18
- package/dist/quantity-table.js.map +1 -1
- package/dist/relationship-graph-helpers.d.ts +68 -0
- package/dist/relationship-graph-helpers.d.ts.map +1 -0
- package/dist/relationship-graph-helpers.js +100 -0
- package/dist/relationship-graph-helpers.js.map +1 -0
- package/dist/relationship-graph.d.ts +59 -8
- package/dist/relationship-graph.d.ts.map +1 -1
- package/dist/relationship-graph.js +99 -26
- package/dist/relationship-graph.js.map +1 -1
- package/dist/step-serializers.d.ts +20 -0
- package/dist/step-serializers.d.ts.map +1 -1
- package/dist/step-serializers.js +4 -4
- package/dist/step-serializers.js.map +1 -1
- package/package.json +3 -3
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"relationship-graph-helpers.d.ts","sourceRoot":"","sources":["../src/relationship-graph-helpers.ts"],"names":[],"mappings":"AAIA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AACvE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAEnD;;;;;;;;GAQG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,cAAc,EAAE,MAAM,KAAK,OAAO,GAAG,OAAO,CAGhG;AAED,sEAAsE;AACtE,MAAM,WAAW,yBAAyB;IACxC,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,gBAAgB,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;CACxB;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,iBAAiB,GAAG,yBAAyB,EAAE,CAa9F;AAED,mFAAmF;AACnF,MAAM,WAAW,eAAe;IAC9B,iBAAiB,EAAE,WAAW,CAAC;IAC/B,oBAAoB,EAAE,WAAW,CAAC;IAClC,cAAc,EAAE,WAAW,CAAC;CAC7B;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,CAAC,GAAG,eAAe,GAAG,SAAS,CAkBjH;AAED,qFAAqF;AACrF,wBAAgB,eAAe,CAAC,GAAG,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAWxE"}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
2
|
+
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
3
|
+
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
|
|
4
|
+
/**
|
|
5
|
+
* True if the connection `edge` represents still exists once some
|
|
6
|
+
* `IfcRel*` instances may have been deleted. A deduped edge remembers every
|
|
7
|
+
* `IfcRel*` that named the same (source, target, type) triple — the edge
|
|
8
|
+
* survives a delete as long as any one of `relationshipId` or
|
|
9
|
+
* `shadowedRelationshipIds` is still live. Shared by the CLI and MCP
|
|
10
|
+
* backends so their delete-then-query logic can't drift out of sync with
|
|
11
|
+
* each other or with the graph's own dedupe (#3782 review).
|
|
12
|
+
*/
|
|
13
|
+
export function edgeSurvives(edge, isDeleted) {
|
|
14
|
+
if (!isDeleted(edge.relationshipId))
|
|
15
|
+
return true;
|
|
16
|
+
return edge.shadowedRelationshipIds?.some((id) => !isDeleted(id)) ?? false;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Flatten one CSR half (`RelationshipEdges`) to row-based form — one row
|
|
20
|
+
* per `IfcRel*` STEP record that named this (source, target, type) triple,
|
|
21
|
+
* not one row per deduped edge. Two `IfcRel*` instances can legally name
|
|
22
|
+
* the same triple (#3760); `RelationshipGraphBuilder.addEdge` collapses
|
|
23
|
+
* that to one edge and keeps the extra ids in `shadowedRelationshipIds`
|
|
24
|
+
* rather than dropping them, so an exporter that walked the raw
|
|
25
|
+
* `edgeRelIds` column alone (Parquet's `Relationships.parquet`, the DuckDB
|
|
26
|
+
* `relationships` table) would silently drop that STEP record from its
|
|
27
|
+
* output (#3782 review). Both use this shared helper instead of
|
|
28
|
+
* hand-rolling the CSR walk so they cannot drift out of sync on it again.
|
|
29
|
+
*
|
|
30
|
+
* Walks `edges.offsets` to find source ids, so it needs a real CSR half —
|
|
31
|
+
* an accessor that only implements `getEdges`/`getTargets`/`hasAnyEdges`
|
|
32
|
+
* over a facade with empty `offsets`/`counts` (e.g. the server-loaded-model
|
|
33
|
+
* path's hand-rolled `RelationshipEdges`) yields nothing here, regardless
|
|
34
|
+
* of what `getEdges` itself would answer.
|
|
35
|
+
*/
|
|
36
|
+
export function flattenRelationshipEdges(edges) {
|
|
37
|
+
const out = [];
|
|
38
|
+
for (const sourceId of edges.offsets.keys()) {
|
|
39
|
+
for (const edge of edges.getEdges(sourceId)) {
|
|
40
|
+
out.push({ sourceId, targetId: edge.target, type: edge.type, relationshipId: edge.relationshipId });
|
|
41
|
+
if (edge.shadowedRelationshipIds) {
|
|
42
|
+
for (const id of edge.shadowedRelationshipIds) {
|
|
43
|
+
out.push({ sourceId, targetId: edge.target, type: edge.type, relationshipId: id });
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
return out;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Pack `(edgePosition, extraIds)` pairs collected during a CSR scatter into
|
|
52
|
+
* the three sparse typed-array columns `RelationshipEdges` stores them as.
|
|
53
|
+
* `buildCSR`'s only caller in-package; not re-exported from the package
|
|
54
|
+
* index (see `binarySearchU32`, which the `@ifc-lite/cache` reader does
|
|
55
|
+
* share). `pairs` need not be pre-sorted by position. An entry with an
|
|
56
|
+
* empty `ids` array is dropped rather than packed as an empty group — it
|
|
57
|
+
* would violate `Edge.shadowedRelationshipIds`'s "present implies
|
|
58
|
+
* non-empty" invariant (#3782 review). Returns `undefined` when nothing is
|
|
59
|
+
* left to pack, so a caller can omit the columns entirely rather than
|
|
60
|
+
* write out empty arrays — they're optional on `RelationshipEdges`.
|
|
61
|
+
*/
|
|
62
|
+
export function buildShadowedColumns(pairs) {
|
|
63
|
+
const nonEmpty = pairs.filter(([, ids]) => ids.length > 0);
|
|
64
|
+
if (nonEmpty.length === 0)
|
|
65
|
+
return undefined;
|
|
66
|
+
const sorted = nonEmpty.sort((a, b) => a[0] - b[0]);
|
|
67
|
+
const shadowedEdgeIndex = new Uint32Array(sorted.length);
|
|
68
|
+
const shadowedGroupOffsets = new Uint32Array(sorted.length + 1);
|
|
69
|
+
let totalIds = 0;
|
|
70
|
+
for (const [, ids] of sorted)
|
|
71
|
+
totalIds += ids.length;
|
|
72
|
+
const shadowedRelIds = new Uint32Array(totalIds);
|
|
73
|
+
let cursor = 0;
|
|
74
|
+
for (let g = 0; g < sorted.length; g++) {
|
|
75
|
+
const [pos, ids] = sorted[g];
|
|
76
|
+
shadowedEdgeIndex[g] = pos;
|
|
77
|
+
shadowedGroupOffsets[g] = cursor;
|
|
78
|
+
for (const id of ids)
|
|
79
|
+
shadowedRelIds[cursor++] = id;
|
|
80
|
+
}
|
|
81
|
+
shadowedGroupOffsets[sorted.length] = cursor;
|
|
82
|
+
return { shadowedEdgeIndex, shadowedGroupOffsets, shadowedRelIds };
|
|
83
|
+
}
|
|
84
|
+
/** Binary search for `target` in an ascending-sorted `Uint32Array`; -1 if absent. */
|
|
85
|
+
export function binarySearchU32(arr, target) {
|
|
86
|
+
let lo = 0;
|
|
87
|
+
let hi = arr.length - 1;
|
|
88
|
+
while (lo <= hi) {
|
|
89
|
+
const mid = (lo + hi) >>> 1;
|
|
90
|
+
const v = arr[mid];
|
|
91
|
+
if (v === target)
|
|
92
|
+
return mid;
|
|
93
|
+
if (v < target)
|
|
94
|
+
lo = mid + 1;
|
|
95
|
+
else
|
|
96
|
+
hi = mid - 1;
|
|
97
|
+
}
|
|
98
|
+
return -1;
|
|
99
|
+
}
|
|
100
|
+
//# sourceMappingURL=relationship-graph-helpers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"relationship-graph-helpers.js","sourceRoot":"","sources":["../src/relationship-graph-helpers.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,6 +7,17 @@ export interface Edge {
|
|
|
7
7
|
target: number;
|
|
8
8
|
type: RelationshipType;
|
|
9
9
|
relationshipId: number;
|
|
10
|
+
/**
|
|
11
|
+
* Express ids of other `IfcRel*` instances that named the same
|
|
12
|
+
* (source, target, type) triple and were collapsed into this edge by the
|
|
13
|
+
* dedupe in `RelationshipGraphBuilder.addEdge` (#3760). A consumer that
|
|
14
|
+
* needs to know whether the *connection* still exists after a delete —
|
|
15
|
+
* not just whether `relationshipId` was deleted — must check these too:
|
|
16
|
+
* use `edgeSurvives` (`relationship-graph-helpers.js`) rather than
|
|
17
|
+
* testing `relationshipId` alone. Invariant: present implies non-empty —
|
|
18
|
+
* `undefined` means "nothing collapsed into this edge", never `[]`.
|
|
19
|
+
*/
|
|
20
|
+
shadowedRelationshipIds?: number[];
|
|
10
21
|
}
|
|
11
22
|
export interface RelationshipEdges {
|
|
12
23
|
offsets: Map<number, number>;
|
|
@@ -14,6 +25,19 @@ export interface RelationshipEdges {
|
|
|
14
25
|
edgeTargets: Uint32Array;
|
|
15
26
|
edgeTypes: Uint16Array;
|
|
16
27
|
edgeRelIds: Uint32Array;
|
|
28
|
+
/**
|
|
29
|
+
* Sparse "shadowed" ids collapsed by the (source, target, type) dedupe
|
|
30
|
+
* (#3760/#3782): three small, Transferable typed arrays rather than one
|
|
31
|
+
* `(number[] | undefined)[]` slot per edge — the dense shape
|
|
32
|
+
* structured-clones (not transfers) across the worker boundary, measured
|
|
33
|
+
* +1.2s/+190MB on a 12M-edge model for a field that's empty almost
|
|
34
|
+
* everywhere. `shadowedEdgeIndex[g]` (ascending) names the edge whose ids
|
|
35
|
+
* live at `shadowedRelIds[shadowedGroupOffsets[g]..shadowedGroupOffsets[g+1])`.
|
|
36
|
+
* Absent together when nothing was collapsed — read via `?.`.
|
|
37
|
+
*/
|
|
38
|
+
shadowedEdgeIndex?: Uint32Array;
|
|
39
|
+
shadowedGroupOffsets?: Uint32Array;
|
|
40
|
+
shadowedRelIds?: Uint32Array;
|
|
17
41
|
getEdges(entityId: number, type?: RelationshipType): Edge[];
|
|
18
42
|
getTargets(entityId: number, type?: RelationshipType): number[];
|
|
19
43
|
hasAnyEdges(entityId: number): boolean;
|
|
@@ -29,18 +53,39 @@ export interface RelationshipInfo {
|
|
|
29
53
|
relationshipId: number;
|
|
30
54
|
type: RelationshipType;
|
|
31
55
|
typeName: string;
|
|
56
|
+
/** See `Edge.shadowedRelationshipIds`. */
|
|
57
|
+
shadowedRelationshipIds?: number[];
|
|
32
58
|
}
|
|
33
|
-
/**
|
|
34
|
-
* Structure-of-Arrays relationship graph builder.
|
|
35
|
-
* Uses parallel number arrays instead of object arrays to avoid millions of
|
|
36
|
-
* small object allocations. Build phase uses counting sort (O(n)) instead
|
|
37
|
-
* of comparison sort (O(n log n)) for massive speedup on large files.
|
|
38
|
-
*/
|
|
39
59
|
export declare class RelationshipGraphBuilder {
|
|
40
60
|
private _sources;
|
|
41
61
|
private _targets;
|
|
42
62
|
private _types;
|
|
43
63
|
private _relIds;
|
|
64
|
+
/**
|
|
65
|
+
* Extra `IfcRel*` ids collapsed into an already-recorded edge, keyed by
|
|
66
|
+
* that edge's index in `_sources`/`_targets`/`_types`/`_relIds`. Sparse —
|
|
67
|
+
* only entities with an actual duplicate get an entry — rather than a
|
|
68
|
+
* slot per edge, so a builder that never sees a duplicate pays nothing
|
|
69
|
+
* for this beyond one empty `Map`.
|
|
70
|
+
*/
|
|
71
|
+
private _shadowedRelIds;
|
|
72
|
+
/**
|
|
73
|
+
* Edges already recorded, keyed by source, then by `target * TYPE_SPAN + type`,
|
|
74
|
+
* mapping to the edge's index in `_sources`/`_targets`/`_types`/`_relIds`.
|
|
75
|
+
* Nothing in EXPRESS forbids two `IfcRel*` instances from naming the same
|
|
76
|
+
* (relating, related) pair, so a schema-legal file can hand us the same edge
|
|
77
|
+
* twice; every consumer that walks the raw edge list would then count the
|
|
78
|
+
* target twice (#3760).
|
|
79
|
+
*/
|
|
80
|
+
private _seen;
|
|
81
|
+
/**
|
|
82
|
+
* Adds one edge, folding a repeat of a `(source, target, type)` triple
|
|
83
|
+
* already present into the surviving edge instead of dropping it outright.
|
|
84
|
+
* The first instance's express id becomes `relationshipId`; later repeats
|
|
85
|
+
* are kept in `_shadowedRelIds` so deleting one of several `IfcRel*`
|
|
86
|
+
* instances that named the same pair doesn't make the connection
|
|
87
|
+
* disappear while a sibling instance still exists (#3782 review).
|
|
88
|
+
*/
|
|
44
89
|
addEdge(source: number, target: number, type: RelationshipType, relId: number): void;
|
|
45
90
|
build(): RelationshipGraph;
|
|
46
91
|
}
|
|
@@ -55,6 +100,10 @@ export interface RelationshipEdgesColumns {
|
|
|
55
100
|
edgeTargets: Uint32Array;
|
|
56
101
|
edgeTypes: Uint16Array;
|
|
57
102
|
edgeRelIds: Uint32Array;
|
|
103
|
+
/** See `RelationshipEdges.shadowedEdgeIndex` et al. */
|
|
104
|
+
shadowedEdgeIndex?: Uint32Array;
|
|
105
|
+
shadowedGroupOffsets?: Uint32Array;
|
|
106
|
+
shadowedRelIds?: Uint32Array;
|
|
58
107
|
}
|
|
59
108
|
/**
|
|
60
109
|
* Plain-data representation of a complete bidirectional `RelationshipGraph`.
|
|
@@ -71,9 +120,11 @@ export interface RelationshipGraphColumns {
|
|
|
71
120
|
*
|
|
72
121
|
* Exported because the graph can be reconstructed from raw edge arrays
|
|
73
122
|
* (e.g. when merging or rebuilding a graph) without going through the
|
|
74
|
-
* `RelationshipGraphBuilder` mutation API.
|
|
123
|
+
* `RelationshipGraphBuilder` mutation API. `shadowedRelIds` maps a
|
|
124
|
+
* pre-scatter edge index (in `keys`/`values`/`types`/`relIds`) to the extra
|
|
125
|
+
* `IfcRel*` ids collapsed into it; pass an empty `Map` when none.
|
|
75
126
|
*/
|
|
76
|
-
export declare function buildCSR(n: number, keys: number[] | Uint32Array, values: number[] | Uint32Array, types: number[] | Uint16Array, relIds: number[] | Uint32Array): RelationshipEdges;
|
|
127
|
+
export declare function buildCSR(n: number, keys: number[] | Uint32Array, values: number[] | Uint32Array, types: number[] | Uint16Array, relIds: number[] | Uint32Array, shadowedRelIds: Map<number, number[]>): RelationshipEdges;
|
|
77
128
|
/**
|
|
78
129
|
* Rebuild the closure-bearing `RelationshipEdges` view (one direction of
|
|
79
130
|
* the graph) from raw CSR columns. Used by both the in-process builder and
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"relationship-graph.d.ts","sourceRoot":"","sources":["../src/relationship-graph.ts"],"names":[],"mappings":"AAIA;;;GAGG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"relationship-graph.d.ts","sourceRoot":"","sources":["../src/relationship-graph.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,18 +6,64 @@
|
|
|
6
6
|
* Enables fast traversal in both directions
|
|
7
7
|
*/
|
|
8
8
|
import { RelationshipType } from './types.js';
|
|
9
|
+
import { binarySearchU32, buildShadowedColumns } from './relationship-graph-helpers.js';
|
|
9
10
|
/**
|
|
10
11
|
* Structure-of-Arrays relationship graph builder.
|
|
11
12
|
* Uses parallel number arrays instead of object arrays to avoid millions of
|
|
12
13
|
* small object allocations. Build phase uses counting sort (O(n)) instead
|
|
13
14
|
* of comparison sort (O(n log n)) for massive speedup on large files.
|
|
14
15
|
*/
|
|
16
|
+
/** Multiplier that keeps `type` in its own digit range of the dedupe key. */
|
|
17
|
+
const TYPE_SPAN = 1 << 16;
|
|
15
18
|
export class RelationshipGraphBuilder {
|
|
16
19
|
_sources = [];
|
|
17
20
|
_targets = [];
|
|
18
21
|
_types = [];
|
|
19
22
|
_relIds = [];
|
|
23
|
+
/**
|
|
24
|
+
* Extra `IfcRel*` ids collapsed into an already-recorded edge, keyed by
|
|
25
|
+
* that edge's index in `_sources`/`_targets`/`_types`/`_relIds`. Sparse —
|
|
26
|
+
* only entities with an actual duplicate get an entry — rather than a
|
|
27
|
+
* slot per edge, so a builder that never sees a duplicate pays nothing
|
|
28
|
+
* for this beyond one empty `Map`.
|
|
29
|
+
*/
|
|
30
|
+
_shadowedRelIds = new Map();
|
|
31
|
+
/**
|
|
32
|
+
* Edges already recorded, keyed by source, then by `target * TYPE_SPAN + type`,
|
|
33
|
+
* mapping to the edge's index in `_sources`/`_targets`/`_types`/`_relIds`.
|
|
34
|
+
* Nothing in EXPRESS forbids two `IfcRel*` instances from naming the same
|
|
35
|
+
* (relating, related) pair, so a schema-legal file can hand us the same edge
|
|
36
|
+
* twice; every consumer that walks the raw edge list would then count the
|
|
37
|
+
* target twice (#3760).
|
|
38
|
+
*/
|
|
39
|
+
_seen = new Map();
|
|
40
|
+
/**
|
|
41
|
+
* Adds one edge, folding a repeat of a `(source, target, type)` triple
|
|
42
|
+
* already present into the surviving edge instead of dropping it outright.
|
|
43
|
+
* The first instance's express id becomes `relationshipId`; later repeats
|
|
44
|
+
* are kept in `_shadowedRelIds` so deleting one of several `IfcRel*`
|
|
45
|
+
* instances that named the same pair doesn't make the connection
|
|
46
|
+
* disappear while a sibling instance still exists (#3782 review).
|
|
47
|
+
*/
|
|
20
48
|
addEdge(source, target, type, relId) {
|
|
49
|
+
let seenForSource = this._seen.get(source);
|
|
50
|
+
if (seenForSource === undefined) {
|
|
51
|
+
seenForSource = new Map();
|
|
52
|
+
this._seen.set(source, seenForSource);
|
|
53
|
+
}
|
|
54
|
+
// Express ids are u32, so this stays well inside Number.MAX_SAFE_INTEGER.
|
|
55
|
+
const key = target * TYPE_SPAN + type;
|
|
56
|
+
const existingIndex = seenForSource.get(key);
|
|
57
|
+
if (existingIndex !== undefined) {
|
|
58
|
+
let shadowed = this._shadowedRelIds.get(existingIndex);
|
|
59
|
+
if (shadowed === undefined) {
|
|
60
|
+
shadowed = [];
|
|
61
|
+
this._shadowedRelIds.set(existingIndex, shadowed);
|
|
62
|
+
}
|
|
63
|
+
shadowed.push(relId);
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
66
|
+
seenForSource.set(key, this._sources.length);
|
|
21
67
|
this._sources.push(source);
|
|
22
68
|
this._targets.push(target);
|
|
23
69
|
this._types.push(type);
|
|
@@ -25,8 +71,8 @@ export class RelationshipGraphBuilder {
|
|
|
25
71
|
}
|
|
26
72
|
build() {
|
|
27
73
|
const n = this._sources.length;
|
|
28
|
-
const forward = buildCSR(n, this._sources, this._targets, this._types, this._relIds);
|
|
29
|
-
const inverse = buildCSR(n, this._targets, this._sources, this._types, this._relIds);
|
|
74
|
+
const forward = buildCSR(n, this._sources, this._targets, this._types, this._relIds, this._shadowedRelIds);
|
|
75
|
+
const inverse = buildCSR(n, this._targets, this._sources, this._types, this._relIds, this._shadowedRelIds);
|
|
30
76
|
return relationshipGraphFromEdges(forward, inverse);
|
|
31
77
|
}
|
|
32
78
|
}
|
|
@@ -36,9 +82,11 @@ export class RelationshipGraphBuilder {
|
|
|
36
82
|
*
|
|
37
83
|
* Exported because the graph can be reconstructed from raw edge arrays
|
|
38
84
|
* (e.g. when merging or rebuilding a graph) without going through the
|
|
39
|
-
* `RelationshipGraphBuilder` mutation API.
|
|
85
|
+
* `RelationshipGraphBuilder` mutation API. `shadowedRelIds` maps a
|
|
86
|
+
* pre-scatter edge index (in `keys`/`values`/`types`/`relIds`) to the extra
|
|
87
|
+
* `IfcRel*` ids collapsed into it; pass an empty `Map` when none.
|
|
40
88
|
*/
|
|
41
|
-
export function buildCSR(n, keys, values, types, relIds) {
|
|
89
|
+
export function buildCSR(n, keys, values, types, relIds, shadowedRelIds) {
|
|
42
90
|
if (n === 0)
|
|
43
91
|
return emptyRelationshipEdges();
|
|
44
92
|
// Step 1: count per key
|
|
@@ -64,15 +112,26 @@ export function buildCSR(n, keys, values, types, relIds) {
|
|
|
64
112
|
const writePos = new Map();
|
|
65
113
|
for (const [k, o] of offsets)
|
|
66
114
|
writePos.set(k, o);
|
|
115
|
+
// Collected in scatter (final-position) order below, then sorted — cheap
|
|
116
|
+
// since this list is expected to stay tiny (rare duplicates) regardless
|
|
117
|
+
// of how large `n` gets.
|
|
118
|
+
const shadowedPairs = [];
|
|
67
119
|
for (let i = 0; i < n; i++) {
|
|
68
120
|
const k = keys[i];
|
|
69
121
|
const pos = writePos.get(k);
|
|
70
122
|
edgeTargets[pos] = values[i];
|
|
71
123
|
edgeTypes[pos] = types[i];
|
|
72
124
|
edgeRelIds[pos] = relIds[i];
|
|
125
|
+
const shadow = shadowedRelIds.get(i);
|
|
126
|
+
if (shadow !== undefined)
|
|
127
|
+
shadowedPairs.push([pos, shadow]);
|
|
73
128
|
writePos.set(k, pos + 1);
|
|
74
129
|
}
|
|
75
|
-
|
|
130
|
+
const columns = { offsets, counts, edgeTargets, edgeTypes, edgeRelIds };
|
|
131
|
+
const shadowed = buildShadowedColumns(shadowedPairs);
|
|
132
|
+
if (shadowed)
|
|
133
|
+
Object.assign(columns, shadowed);
|
|
134
|
+
return relationshipEdgesFromColumns(columns);
|
|
76
135
|
}
|
|
77
136
|
function emptyRelationshipEdges() {
|
|
78
137
|
return relationshipEdgesFromColumns({
|
|
@@ -89,7 +148,7 @@ function emptyRelationshipEdges() {
|
|
|
89
148
|
* the parser-worker transport layer.
|
|
90
149
|
*/
|
|
91
150
|
export function relationshipEdgesFromColumns(columns) {
|
|
92
|
-
const { offsets, counts, edgeTargets, edgeTypes, edgeRelIds } = columns;
|
|
151
|
+
const { offsets, counts, edgeTargets, edgeTypes, edgeRelIds, shadowedEdgeIndex, shadowedGroupOffsets, shadowedRelIds } = columns;
|
|
93
152
|
const edges = {
|
|
94
153
|
offsets,
|
|
95
154
|
counts,
|
|
@@ -104,7 +163,15 @@ export function relationshipEdgesFromColumns(columns) {
|
|
|
104
163
|
const out = [];
|
|
105
164
|
for (let i = o; i < o + c; i++) {
|
|
106
165
|
if (type === undefined || edgeTypes[i] === type) {
|
|
107
|
-
|
|
166
|
+
const edge = { target: edgeTargets[i], type: edgeTypes[i], relationshipId: edgeRelIds[i] };
|
|
167
|
+
if (shadowedEdgeIndex !== undefined && shadowedGroupOffsets !== undefined && shadowedRelIds !== undefined) {
|
|
168
|
+
const g = binarySearchU32(shadowedEdgeIndex, i);
|
|
169
|
+
if (g !== -1) {
|
|
170
|
+
// A fresh array, not a view into the shared buffer.
|
|
171
|
+
edge.shadowedRelationshipIds = Array.from(shadowedRelIds.subarray(shadowedGroupOffsets[g], shadowedGroupOffsets[g + 1]));
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
out.push(edge);
|
|
108
175
|
}
|
|
109
176
|
}
|
|
110
177
|
return out;
|
|
@@ -116,6 +183,8 @@ export function relationshipEdgesFromColumns(columns) {
|
|
|
116
183
|
return offsets.has(entityId);
|
|
117
184
|
},
|
|
118
185
|
};
|
|
186
|
+
if (shadowedEdgeIndex !== undefined)
|
|
187
|
+
Object.assign(edges, { shadowedEdgeIndex, shadowedGroupOffsets, shadowedRelIds });
|
|
119
188
|
return edges;
|
|
120
189
|
}
|
|
121
190
|
/**
|
|
@@ -140,11 +209,12 @@ export function relationshipGraphFromEdges(forward, inverse) {
|
|
|
140
209
|
getRelationshipsBetween: (sourceId, targetId) => {
|
|
141
210
|
return forward.getEdges(sourceId)
|
|
142
211
|
.filter((edge) => edge.target === targetId)
|
|
143
|
-
.map((edge) =>
|
|
144
|
-
relationshipId: edge.relationshipId,
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
212
|
+
.map((edge) => {
|
|
213
|
+
const info = { relationshipId: edge.relationshipId, type: edge.type, typeName: RelationshipTypeToString(edge.type) };
|
|
214
|
+
if (edge.shadowedRelationshipIds !== undefined)
|
|
215
|
+
info.shadowedRelationshipIds = edge.shadowedRelationshipIds;
|
|
216
|
+
return info;
|
|
217
|
+
});
|
|
148
218
|
},
|
|
149
219
|
};
|
|
150
220
|
}
|
|
@@ -161,21 +231,24 @@ export function relationshipGraphFromColumns(columns) {
|
|
|
161
231
|
* detach from the source when used in a `postMessage` transfer list.
|
|
162
232
|
*/
|
|
163
233
|
export function relationshipGraphToColumns(graph) {
|
|
234
|
+
const toColumns = (edges) => {
|
|
235
|
+
const columns = {
|
|
236
|
+
offsets: edges.offsets,
|
|
237
|
+
counts: edges.counts,
|
|
238
|
+
edgeTargets: edges.edgeTargets,
|
|
239
|
+
edgeTypes: edges.edgeTypes,
|
|
240
|
+
edgeRelIds: edges.edgeRelIds,
|
|
241
|
+
};
|
|
242
|
+
if (edges.shadowedEdgeIndex !== undefined) {
|
|
243
|
+
columns.shadowedEdgeIndex = edges.shadowedEdgeIndex;
|
|
244
|
+
columns.shadowedGroupOffsets = edges.shadowedGroupOffsets;
|
|
245
|
+
columns.shadowedRelIds = edges.shadowedRelIds;
|
|
246
|
+
}
|
|
247
|
+
return columns;
|
|
248
|
+
};
|
|
164
249
|
return {
|
|
165
|
-
forward:
|
|
166
|
-
|
|
167
|
-
counts: graph.forward.counts,
|
|
168
|
-
edgeTargets: graph.forward.edgeTargets,
|
|
169
|
-
edgeTypes: graph.forward.edgeTypes,
|
|
170
|
-
edgeRelIds: graph.forward.edgeRelIds,
|
|
171
|
-
},
|
|
172
|
-
inverse: {
|
|
173
|
-
offsets: graph.inverse.offsets,
|
|
174
|
-
counts: graph.inverse.counts,
|
|
175
|
-
edgeTargets: graph.inverse.edgeTargets,
|
|
176
|
-
edgeTypes: graph.inverse.edgeTypes,
|
|
177
|
-
edgeRelIds: graph.inverse.edgeRelIds,
|
|
178
|
-
},
|
|
250
|
+
forward: toColumns(graph.forward),
|
|
251
|
+
inverse: toColumns(graph.inverse),
|
|
179
252
|
};
|
|
180
253
|
}
|
|
181
254
|
function RelationshipTypeToString(type) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"relationship-graph.js","sourceRoot":"","sources":["../src/relationship-graph.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAE/D;;;GAGG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"relationship-graph.js","sourceRoot":"","sources":["../src/relationship-graph.ts"],"names":[],"mappings":"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"}
|
|
@@ -72,6 +72,26 @@ export declare function formatStepReal(value: number): string;
|
|
|
72
72
|
* Serialize a single value to STEP format
|
|
73
73
|
*/
|
|
74
74
|
export declare function serializeValue(value: StepValue): string;
|
|
75
|
+
/**
|
|
76
|
+
* Escape a string for STEP format.
|
|
77
|
+
*
|
|
78
|
+
* Backslash and single-quote are doubled per ISO-10303-21. Control characters
|
|
79
|
+
* (CR/LF and other C0 codes plus DEL) become ONE space EACH, not one per run,
|
|
80
|
+
* so a value cannot inject a line break and split one record across two.
|
|
81
|
+
* Collapsing a run (`/[...]+/`, which this did until #3284) loses length that
|
|
82
|
+
* `ifc_lite_export::step_text::escape` preserves, so the two halves wrote the
|
|
83
|
+
* same value differently. ISO 10303-21 6.3.3.4 mandates neither; per-character
|
|
84
|
+
* is the more faithful, and the parity claim below must be true of one.
|
|
85
|
+
*
|
|
86
|
+
* ISO 10303-21 6.3.3.4 restricts a literal's plain-text bytes to the "basic
|
|
87
|
+
* graphic" range 32-126; anything else is a control directive (`\X\HH`,
|
|
88
|
+
* `\X2\HHHH\X0\`, `\X4\HHHHHHHH\X0\`), never a raw byte, and buildingSMART
|
|
89
|
+
* says the same for IFC2X3/IFC4/IFC4X3. A reader decoding as ISO-8859-1 (what
|
|
90
|
+
* the base standard and most consumers assume) turns raw UTF-8 into mojibake or
|
|
91
|
+
* a broken parse: IfcOpenShell#699/#1016, files rejected by Solibri. The one TS
|
|
92
|
+
* implementation (#3300); export re-exports it, a vector test pins Rust parity.
|
|
93
|
+
*/
|
|
94
|
+
export declare function escapeStepString(str: string): string;
|
|
75
95
|
/**
|
|
76
96
|
* Serialize an entity to a STEP line, resolving its attribute order from the
|
|
77
97
|
* supplied schema registry.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"step-serializers.d.ts","sourceRoot":"","sources":["../src/step-serializers.ts"],"names":[],"mappings":"AAkBA;;GAEG;AACH,MAAM,MAAM,SAAS,GACjB,MAAM,GACN,MAAM,GACN,OAAO,GACP,IAAI,GACJ,SAAS,GACT,SAAS,EAAE,GACX,SAAS,GACT,SAAS,CAAC;AAEd;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,GAAG,EAAE,MAAM,CAAC;CACb;AAED;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,wBAAwB;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,oBAAoB;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,uBAAuB;IACvB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED;;;;GAIG;AACH,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,aAAa,CAAC,EAAE,aAAa,CAAC;YAAE,IAAI,EAAE,MAAM,CAAA;SAAE,CAAC,CAAA;KAAE,GAAG,SAAS,CAAC,CAAC;CAC3F;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,SAAS,CAE9D;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,SAAS,CAE9D;AAED;;GAEG;AACH,wBAAgB,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,SAAS,CAEzC;AAED;;GAEG;AACH,wBAAgB,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,CAEhD;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAUpD;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,SAAS,GAAG,MAAM,CAiDvD;
|
|
1
|
+
{"version":3,"file":"step-serializers.d.ts","sourceRoot":"","sources":["../src/step-serializers.ts"],"names":[],"mappings":"AAkBA;;GAEG;AACH,MAAM,MAAM,SAAS,GACjB,MAAM,GACN,MAAM,GACN,OAAO,GACP,IAAI,GACJ,SAAS,GACT,SAAS,EAAE,GACX,SAAS,GACT,SAAS,CAAC;AAEd;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,GAAG,EAAE,MAAM,CAAC;CACb;AAED;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,wBAAwB;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,oBAAoB;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,uBAAuB;IACvB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED;;;;GAIG;AACH,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,aAAa,CAAC,EAAE,aAAa,CAAC;YAAE,IAAI,EAAE,MAAM,CAAA;SAAE,CAAC,CAAA;KAAE,GAAG,SAAS,CAAC,CAAC;CAC3F;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,SAAS,CAE9D;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,SAAS,CAE9D;AAED;;GAEG;AACH,wBAAgB,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,SAAS,CAEzC;AAED;;GAEG;AACH,wBAAgB,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,CAEhD;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAUpD;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,SAAS,GAAG,MAAM,CAiDvD;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAqBpD;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,kBAAkB,EAAE,MAAM,EAAE,UAAU,GAAG,MAAM,CAc/F;AAED;;;;;;;;GAQG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE;IACtC,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAChC,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAC3B,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IACjC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB,GAAG,MAAM,CAwBT;AAED;;;GAGG;AACH,wBAAgB,4BAA4B,CAC1C,QAAQ,EAAE,kBAAkB,EAC5B,QAAQ,EAAE,UAAU,EAAE,EACtB,OAAO,EAAE,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC,CAAC,CAAC,GAC5C,MAAM,CAaR;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,CAoDrD"}
|
package/dist/step-serializers.js
CHANGED
|
@@ -124,10 +124,10 @@ export function serializeValue(value) {
|
|
|
124
124
|
* `\X2\HHHH\X0\`, `\X4\HHHHHHHH\X0\`), never a raw byte, and buildingSMART
|
|
125
125
|
* says the same for IFC2X3/IFC4/IFC4X3. A reader decoding as ISO-8859-1 (what
|
|
126
126
|
* the base standard and most consumers assume) turns raw UTF-8 into mojibake or
|
|
127
|
-
* a broken parse: IfcOpenShell#699/#1016, files rejected by Solibri.
|
|
128
|
-
*
|
|
127
|
+
* a broken parse: IfcOpenShell#699/#1016, files rejected by Solibri. The one TS
|
|
128
|
+
* implementation (#3300); export re-exports it, a vector test pins Rust parity.
|
|
129
129
|
*/
|
|
130
|
-
function escapeStepString(str) {
|
|
130
|
+
export function escapeStepString(str) {
|
|
131
131
|
const escaped = str
|
|
132
132
|
.replace(/\\/g, '\\\\') // Backslash
|
|
133
133
|
.replace(/'/g, "''") // Single quote
|
|
@@ -180,7 +180,7 @@ export function toStepLineWithRegistry(registry, entity) {
|
|
|
180
180
|
export function generateHeader(options) {
|
|
181
181
|
const toList = (v, fallback) => v === undefined ? fallback : Array.isArray(v) ? v : [v];
|
|
182
182
|
const quoteList = (items) => '(' + items.map(s => "'" + escapeStepString(s) + "'").join(',') + ')';
|
|
183
|
-
const now = options.timeStamp ?? new Date().toISOString().replace(
|
|
183
|
+
const now = options.timeStamp ?? new Date().toISOString().replace(/\.\d{3}Z$/, ''); // ISO 8601 time_stamp: keep '-'/':', drop only ms+'Z'
|
|
184
184
|
const description = toList(options.description, ['ViewDefinition [CoordinationView]']);
|
|
185
185
|
const implementationLevel = options.implementationLevel || '2;1';
|
|
186
186
|
const authors = toList(options.author, ['']);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"step-serializers.js","sourceRoot":"","sources":["../src/step-serializers.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"step-serializers.js","sourceRoot":"","sources":["../src/step-serializers.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ifc-lite/data",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "4.0.0",
|
|
4
4
|
"description": "Columnar data structures for IFC-Lite",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -13,10 +13,10 @@
|
|
|
13
13
|
}
|
|
14
14
|
},
|
|
15
15
|
"dependencies": {
|
|
16
|
-
"@ifc-lite/encoding": "^2.
|
|
16
|
+
"@ifc-lite/encoding": "^2.2.0"
|
|
17
17
|
},
|
|
18
18
|
"devDependencies": {
|
|
19
|
-
"@types/node": "^26.
|
|
19
|
+
"@types/node": "^26.4.0",
|
|
20
20
|
"proj4": "^2.21.0",
|
|
21
21
|
"typescript": "^6.0.3",
|
|
22
22
|
"vitest": "^4.1.11"
|