@ifc-lite/collab 0.6.1 → 0.8.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/README.md +1 -1
- package/dist/branch/branch.d.ts +11 -0
- package/dist/branch/branch.d.ts.map +1 -1
- package/dist/branch/branch.js +30 -1
- package/dist/branch/branch.js.map +1 -1
- package/dist/conflicts/detector.d.ts +1 -1
- package/dist/conflicts/detector.d.ts.map +1 -1
- package/dist/conflicts/detector.js +19 -6
- package/dist/conflicts/detector.js.map +1 -1
- package/dist/doc/entity.js +4 -4
- package/dist/doc/entity.js.map +1 -1
- package/dist/doc/model-slot.d.ts +98 -0
- package/dist/doc/model-slot.d.ts.map +1 -0
- package/dist/doc/model-slot.js +124 -0
- package/dist/doc/model-slot.js.map +1 -0
- package/dist/doc/schema.d.ts +10 -0
- package/dist/doc/schema.d.ts.map +1 -1
- package/dist/doc/schema.js +13 -0
- package/dist/doc/schema.js.map +1 -1
- package/dist/geometry/blob-store.d.ts +5 -0
- package/dist/geometry/blob-store.d.ts.map +1 -1
- package/dist/geometry/blob-store.js +18 -0
- package/dist/geometry/blob-store.js.map +1 -1
- package/dist/geometry/gc.d.ts +8 -8
- package/dist/geometry/gc.d.ts.map +1 -1
- package/dist/geometry/gc.js +16 -6
- package/dist/geometry/gc.js.map +1 -1
- package/dist/index.d.ts +3 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -1
- package/dist/index.js.map +1 -1
- package/dist/providers/relay-state.d.ts +29 -0
- package/dist/providers/relay-state.d.ts.map +1 -0
- package/dist/providers/relay-state.js +95 -0
- package/dist/providers/relay-state.js.map +1 -0
- package/dist/snapshot/from-ifcx.d.ts +9 -0
- package/dist/snapshot/from-ifcx.d.ts.map +1 -1
- package/dist/snapshot/from-ifcx.js +5 -8
- package/dist/snapshot/from-ifcx.js.map +1 -1
- package/dist/snapshot/from-step.d.ts +18 -3
- package/dist/snapshot/from-step.d.ts.map +1 -1
- package/dist/snapshot/from-step.js +20 -5
- package/dist/snapshot/from-step.js.map +1 -1
- package/dist/snapshot/slot-ifcx.d.ts +52 -0
- package/dist/snapshot/slot-ifcx.d.ts.map +1 -0
- package/dist/snapshot/slot-ifcx.js +114 -0
- package/dist/snapshot/slot-ifcx.js.map +1 -0
- package/dist/snapshot/structured-attrs.js +6 -6
- package/dist/snapshot/structured-attrs.js.map +1 -1
- package/dist/snapshot/to-ifcx.d.ts +9 -0
- package/dist/snapshot/to-ifcx.d.ts.map +1 -1
- package/dist/snapshot/to-ifcx.js +8 -4
- package/dist/snapshot/to-ifcx.js.map +1 -1
- package/package.json +4 -4
|
@@ -16,6 +16,7 @@
|
|
|
16
16
|
*/
|
|
17
17
|
import type * as Y from 'yjs';
|
|
18
18
|
import type { PropertyValue } from '../doc/schema.js';
|
|
19
|
+
import { type ModelSlotRef } from '../doc/model-slot.js';
|
|
19
20
|
/** Schema versions the CRDT entity meta accepts (see `EntityMeta`). */
|
|
20
21
|
export type CollabSchemaVersion = 'ifc4' | 'ifc4x3' | 'ifc5';
|
|
21
22
|
/** A single STEP entity reduced to what the CRDT needs. */
|
|
@@ -32,12 +33,16 @@ export interface StepSeedEntity {
|
|
|
32
33
|
attributes?: Record<string, unknown>;
|
|
33
34
|
/**
|
|
34
35
|
* Spatial containment + decomposition as IFCX children: a unique key → the
|
|
35
|
-
* child entity's path (
|
|
36
|
-
*
|
|
36
|
+
* child entity's path (`slotPath(slot, guid)`, i.e. `/<guid>` in a
|
|
37
|
+
* single-model room). Lets the recipient rebuild the spatial tree
|
|
38
|
+
* (Project → Site → Building → Storey → elements). The adapter that builds
|
|
39
|
+
* these must use the same slot the seeder is given (#4444).
|
|
37
40
|
*/
|
|
38
41
|
children?: Record<string, string>;
|
|
39
42
|
/** Property sets: psetName → propName → value. */
|
|
40
43
|
psets?: Record<string, Record<string, PropertyValue>>;
|
|
44
|
+
/** Quantity sets: qsetName → quantityName → numeric value. */
|
|
45
|
+
quantities?: Record<string, Record<string, number>>;
|
|
41
46
|
}
|
|
42
47
|
/** Minimal model view the seeder consumes (the viewer adapts its store to this). */
|
|
43
48
|
export interface StepSeedSource {
|
|
@@ -58,6 +63,12 @@ export interface SeedFromStepOptions {
|
|
|
58
63
|
* the entity `schemaVersion`. Defaults to {@link defaultSchemaVersion}.
|
|
59
64
|
*/
|
|
60
65
|
schemaVersionFor?: (schema: string | undefined) => CollabSchemaVersion;
|
|
66
|
+
/**
|
|
67
|
+
* The model slot the entities belong to (#4444). Entity paths become
|
|
68
|
+
* `slotPath(slot, guid)`. Defaults to the implicit legacy slot, i.e. the
|
|
69
|
+
* unqualified `/<guid>` scheme of a single-model room.
|
|
70
|
+
*/
|
|
71
|
+
slot?: ModelSlotRef;
|
|
61
72
|
}
|
|
62
73
|
export interface SeedFromStepResult {
|
|
63
74
|
/** Number of entities seeded (those with a GUID). */
|
|
@@ -65,7 +76,11 @@ export interface SeedFromStepResult {
|
|
|
65
76
|
/** Number of source entities skipped (no GUID). */
|
|
66
77
|
skipped: number;
|
|
67
78
|
}
|
|
68
|
-
/**
|
|
79
|
+
/**
|
|
80
|
+
* Path key for a STEP entity in a single-model (legacy-slot) room. Exported
|
|
81
|
+
* so the viewer's `resolveEntity` matches; slot-qualified rooms use
|
|
82
|
+
* `slotPath(slot, guid)` from `doc/model-slot.ts`.
|
|
83
|
+
*/
|
|
69
84
|
export declare function guidToPath(guid: string): string;
|
|
70
85
|
/**
|
|
71
86
|
* Seed `doc` from a legacy STEP model. Idempotent: re-seeding the same source
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"from-step.d.ts","sourceRoot":"","sources":["../../src/snapshot/from-step.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,KAAK,CAAC,MAAM,KAAK,CAAC;AAG9B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"from-step.d.ts","sourceRoot":"","sources":["../../src/snapshot/from-step.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,KAAK,CAAC,MAAM,KAAK,CAAC;AAG9B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAA6B,KAAK,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEpF,uEAAuE;AACvE,MAAM,MAAM,mBAAmB,GAAG,MAAM,GAAG,QAAQ,GAAG,MAAM,CAAC;AAkB7D,2DAA2D;AAC3D,MAAM,WAAW,cAAc;IAC7B,uEAAuE;IACvE,IAAI,EAAE,MAAM,CAAC;IACb,kDAAkD;IAClD,QAAQ,EAAE,MAAM,CAAC;IACjB;;;;OAIG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACrC;;;;;;OAMG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAClC,kDAAkD;IAClD,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC,CAAC;IACtD,8DAA8D;IAC9D,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;CACrD;AAED,oFAAoF;AACpF,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,QAAQ,CAAC,cAAc,CAAC,CAAC;IACnC,mEAAmE;IACnE,MAAM,CAAC,EAAE;QACP,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,CAAC;CACH;AAED,MAAM,WAAW,mBAAmB;IAClC,yEAAyE;IACzE,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB;;;OAGG;IACH,gBAAgB,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,KAAK,mBAAmB,CAAC;IACvE;;;;OAIG;IACH,IAAI,CAAC,EAAE,YAAY,CAAC;CACrB;AAED,MAAM,WAAW,kBAAkB;IACjC,qDAAqD;IACrD,MAAM,EAAE,MAAM,CAAC;IACf,mDAAmD;IACnD,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE/C;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAC1B,GAAG,EAAE,CAAC,CAAC,GAAG,EACV,MAAM,EAAE,cAAc,EACtB,IAAI,GAAE,mBAAwB,GAC7B,kBAAkB,CA0DpB"}
|
|
@@ -1,8 +1,9 @@
|
|
|
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 { createEntity, setPropertyValue } from '../doc/entity.js';
|
|
4
|
+
import { createEntity, setPropertyValue, setQuantityValue } from '../doc/entity.js';
|
|
5
5
|
import { SEED_ORIGIN, assertSchemaInvariants, metaMap } from '../doc/schema.js';
|
|
6
|
+
import { legacyModelSlot, slotPath } from '../doc/model-slot.js';
|
|
6
7
|
/**
|
|
7
8
|
* Map a raw STEP schema string to the CRDT's supported set. Legacy IFC2X3 and
|
|
8
9
|
* IFC4 both map to `ifc4` (the spec's editing baseline); IFC4X3 → `ifc4x3`;
|
|
@@ -18,9 +19,13 @@ function defaultSchemaVersion(schema) {
|
|
|
18
19
|
return 'ifc4';
|
|
19
20
|
}
|
|
20
21
|
}
|
|
21
|
-
/**
|
|
22
|
+
/**
|
|
23
|
+
* Path key for a STEP entity in a single-model (legacy-slot) room. Exported
|
|
24
|
+
* so the viewer's `resolveEntity` matches; slot-qualified rooms use
|
|
25
|
+
* `slotPath(slot, guid)` from `doc/model-slot.ts`.
|
|
26
|
+
*/
|
|
22
27
|
export function guidToPath(guid) {
|
|
23
|
-
return
|
|
28
|
+
return slotPath(legacyModelSlot(), guid);
|
|
24
29
|
}
|
|
25
30
|
/**
|
|
26
31
|
* Seed `doc` from a legacy STEP model. Idempotent: re-seeding the same source
|
|
@@ -31,18 +36,21 @@ export function seedFromStep(doc, source, opts = {}) {
|
|
|
31
36
|
assertSchemaInvariants(doc);
|
|
32
37
|
const schemaVersionFor = opts.schemaVersionFor ?? defaultSchemaVersion;
|
|
33
38
|
const schemaVersion = schemaVersionFor(source.header?.schema);
|
|
39
|
+
const slot = opts.slot ?? legacyModelSlot();
|
|
34
40
|
let seeded = 0;
|
|
35
41
|
let skipped = 0;
|
|
36
42
|
doc.transact(() => {
|
|
37
43
|
const meta = metaMap(doc);
|
|
38
|
-
|
|
44
|
+
// One file-level header per room: the first seeded model's. A slot-aware
|
|
45
|
+
// room records per-model headers on its slot records instead.
|
|
46
|
+
if (source.header && !meta.has('stepHeader'))
|
|
39
47
|
meta.set('stepHeader', source.header);
|
|
40
48
|
for (const ent of source.entities) {
|
|
41
49
|
if (!ent.guid) {
|
|
42
50
|
skipped++;
|
|
43
51
|
continue;
|
|
44
52
|
}
|
|
45
|
-
const path =
|
|
53
|
+
const path = slotPath(slot, ent.guid);
|
|
46
54
|
createEntity(doc, path, {
|
|
47
55
|
ifcClass: ent.ifcClass,
|
|
48
56
|
attributes: ent.attributes ?? {},
|
|
@@ -67,6 +75,13 @@ export function seedFromStep(doc, source, opts = {}) {
|
|
|
67
75
|
}
|
|
68
76
|
}
|
|
69
77
|
}
|
|
78
|
+
if (ent.quantities) {
|
|
79
|
+
for (const [qsetName, quantities] of Object.entries(ent.quantities)) {
|
|
80
|
+
for (const [quantityName, value] of Object.entries(quantities)) {
|
|
81
|
+
setQuantityValue(doc, path, qsetName, quantityName, value);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
}
|
|
70
85
|
seeded++;
|
|
71
86
|
}
|
|
72
87
|
}, opts.origin ?? SEED_ORIGIN);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"from-step.js","sourceRoot":"","sources":["../../src/snapshot/from-step.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAoB/D,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"from-step.js","sourceRoot":"","sources":["../../src/snapshot/from-step.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* How an IFCX file is re-homed under a model slot (#4444): its nodes and its
|
|
3
|
+
* file-level metadata.
|
|
4
|
+
*
|
|
5
|
+
* Nodes: `qualifyNode` prefixes a node's path and every path-valued
|
|
6
|
+
* `children` / `inherits` reference with the slot (`/<slotId>` + the file's
|
|
7
|
+
* own path), so the file's path scheme survives verbatim underneath it.
|
|
8
|
+
*
|
|
9
|
+
* Metadata: a room used to hold one file, so `seedFromIfcx` stashed its
|
|
10
|
+
* header / imports / schemas under the room-wide `meta.header` /
|
|
11
|
+
* `meta.imports` / `meta.schemas` and the snapshot re-emitted them. With one
|
|
12
|
+
* file per slot that is a race: the second IFC5 model's seed overwrote the
|
|
13
|
+
* first's, and a per-slot snapshot handed slot m0's recipient slot m1's
|
|
14
|
+
* schemas. Each real slot therefore records its file metadata under its own
|
|
15
|
+
* key, `ifcxFile:<slotId>`; the implicit legacy slot (and a slot-less seed)
|
|
16
|
+
* keeps the room-wide keys so rooms shared before slots existed read exactly
|
|
17
|
+
* as they did. A whole-room snapshot of a multi-slot room merges: imports
|
|
18
|
+
* concatenated in slot order, schemas spread in slot order (a later slot's
|
|
19
|
+
* same-named schema wins — two copies of one file carry identical
|
|
20
|
+
* definitions), header from the first slot that recorded one.
|
|
21
|
+
*/
|
|
22
|
+
import type * as Y from 'yjs';
|
|
23
|
+
import type { IfcxFile, IfcxHeader, IfcxNode, ImportNode } from '@ifc-lite/ifcx';
|
|
24
|
+
import { type ModelSlotRef } from '../doc/model-slot.js';
|
|
25
|
+
/**
|
|
26
|
+
* Re-home a node under a slot: its own path plus every path-valued
|
|
27
|
+
* `children` / `inherits` reference (a `null` removal opinion stays `null`).
|
|
28
|
+
*
|
|
29
|
+
* Attribute values are opaque here: the runtime does not know which
|
|
30
|
+
* attributes of a custom schema are path-typed, so an attribute whose VALUE
|
|
31
|
+
* names another node's path is stored verbatim and dangles on a recipient
|
|
32
|
+
* (it points at the unqualified path, which no slot holds). `children` and
|
|
33
|
+
* `inherits` are the only references IFCX composition itself resolves, and
|
|
34
|
+
* the only ones the viewer's ingest follows. Geometry carriers are
|
|
35
|
+
* content-hash keyed and slot-independent.
|
|
36
|
+
*/
|
|
37
|
+
export declare function qualifyNode(slot: ModelSlotRef, node: IfcxNode): IfcxNode;
|
|
38
|
+
/** The file-level fields a snapshot re-emits. */
|
|
39
|
+
export interface IfcxFileMeta {
|
|
40
|
+
header?: IfcxHeader;
|
|
41
|
+
imports?: ImportNode[];
|
|
42
|
+
schemas?: Record<string, unknown>;
|
|
43
|
+
}
|
|
44
|
+
/** Record `file`'s header / imports / schemas for `slot` (room-wide when no real slot). */
|
|
45
|
+
export declare function writeIfcxFileMeta(meta: Y.Map<unknown>, slot: ModelSlotRef | undefined, file: IfcxFile): void;
|
|
46
|
+
/**
|
|
47
|
+
* The file metadata a snapshot of `slot` re-emits; of the whole room when no
|
|
48
|
+
* slot is named. Falls back to the room-wide keys where nothing per-slot was
|
|
49
|
+
* recorded (a legacy room, or a slot seeded from STEP, which has no IFCX file).
|
|
50
|
+
*/
|
|
51
|
+
export declare function readIfcxFileMeta(meta: Y.Map<unknown>, slot: ModelSlotRef | undefined): IfcxFileMeta;
|
|
52
|
+
//# sourceMappingURL=slot-ifcx.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"slot-ifcx.d.ts","sourceRoot":"","sources":["../../src/snapshot/slot-ifcx.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,KAAK,KAAK,CAAC,MAAM,KAAK,CAAC;AAC9B,OAAO,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACjF,OAAO,EAAqB,KAAK,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAE5E;;;;;;;;;;;GAWG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,QAAQ,GAAG,QAAQ,CAiBxE;AAED,iDAAiD;AACjD,MAAM,WAAW,YAAY;IAC3B,MAAM,CAAC,EAAE,UAAU,CAAC;IACpB,OAAO,CAAC,EAAE,UAAU,EAAE,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnC;AAsBD,2FAA2F;AAC3F,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,YAAY,GAAG,SAAS,EAAE,IAAI,EAAE,QAAQ,GAAG,IAAI,CAY5G;AAYD;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,YAAY,GAAG,SAAS,GAAG,YAAY,CAkBnG"}
|
|
@@ -0,0 +1,114 @@
|
|
|
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 { prefixPathForSlot } from '../doc/model-slot.js';
|
|
5
|
+
/**
|
|
6
|
+
* Re-home a node under a slot: its own path plus every path-valued
|
|
7
|
+
* `children` / `inherits` reference (a `null` removal opinion stays `null`).
|
|
8
|
+
*
|
|
9
|
+
* Attribute values are opaque here: the runtime does not know which
|
|
10
|
+
* attributes of a custom schema are path-typed, so an attribute whose VALUE
|
|
11
|
+
* names another node's path is stored verbatim and dangles on a recipient
|
|
12
|
+
* (it points at the unqualified path, which no slot holds). `children` and
|
|
13
|
+
* `inherits` are the only references IFCX composition itself resolves, and
|
|
14
|
+
* the only ones the viewer's ingest follows. Geometry carriers are
|
|
15
|
+
* content-hash keyed and slot-independent.
|
|
16
|
+
*/
|
|
17
|
+
export function qualifyNode(slot, node) {
|
|
18
|
+
const raw = node;
|
|
19
|
+
if (!raw.path)
|
|
20
|
+
return node;
|
|
21
|
+
const qualifyRefs = (refs) => {
|
|
22
|
+
if (!refs)
|
|
23
|
+
return refs;
|
|
24
|
+
const out = {};
|
|
25
|
+
for (const [role, target] of Object.entries(refs)) {
|
|
26
|
+
out[role] = typeof target === 'string' ? prefixPathForSlot(slot, target) : target;
|
|
27
|
+
}
|
|
28
|
+
return out;
|
|
29
|
+
};
|
|
30
|
+
return {
|
|
31
|
+
...node,
|
|
32
|
+
path: prefixPathForSlot(slot, raw.path),
|
|
33
|
+
children: qualifyRefs(raw.children),
|
|
34
|
+
inherits: qualifyRefs(raw.inherits),
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
const SLOT_FILE_META_PREFIX = 'ifcxFile:';
|
|
38
|
+
function slotFileMetaKey(slot) {
|
|
39
|
+
return `${SLOT_FILE_META_PREFIX}${slot.slotId}`;
|
|
40
|
+
}
|
|
41
|
+
function isRealSlot(slot) {
|
|
42
|
+
return slot !== undefined && slot.pathPrefix !== '';
|
|
43
|
+
}
|
|
44
|
+
function readRecord(raw) {
|
|
45
|
+
if (!raw || typeof raw !== 'object')
|
|
46
|
+
return {};
|
|
47
|
+
const r = raw;
|
|
48
|
+
const out = {};
|
|
49
|
+
if (r.header && typeof r.header === 'object')
|
|
50
|
+
out.header = r.header;
|
|
51
|
+
if (Array.isArray(r.imports))
|
|
52
|
+
out.imports = r.imports;
|
|
53
|
+
if (r.schemas && typeof r.schemas === 'object')
|
|
54
|
+
out.schemas = r.schemas;
|
|
55
|
+
return out;
|
|
56
|
+
}
|
|
57
|
+
/** Record `file`'s header / imports / schemas for `slot` (room-wide when no real slot). */
|
|
58
|
+
export function writeIfcxFileMeta(meta, slot, file) {
|
|
59
|
+
if (!isRealSlot(slot)) {
|
|
60
|
+
if (file.header)
|
|
61
|
+
meta.set('header', file.header);
|
|
62
|
+
if (file.imports)
|
|
63
|
+
meta.set('imports', file.imports);
|
|
64
|
+
if (file.schemas)
|
|
65
|
+
meta.set('schemas', file.schemas);
|
|
66
|
+
return;
|
|
67
|
+
}
|
|
68
|
+
const record = {};
|
|
69
|
+
if (file.header)
|
|
70
|
+
record.header = file.header;
|
|
71
|
+
if (file.imports)
|
|
72
|
+
record.imports = file.imports;
|
|
73
|
+
if (file.schemas)
|
|
74
|
+
record.schemas = file.schemas;
|
|
75
|
+
meta.set(slotFileMetaKey(slot), record);
|
|
76
|
+
}
|
|
77
|
+
/** Slot ids that recorded file metadata, in slot order (`m0`, `m1`, …). */
|
|
78
|
+
function recordedSlotIds(meta) {
|
|
79
|
+
const ids = [];
|
|
80
|
+
for (const key of meta.keys()) {
|
|
81
|
+
if (key.startsWith(SLOT_FILE_META_PREFIX))
|
|
82
|
+
ids.push(key.slice(SLOT_FILE_META_PREFIX.length));
|
|
83
|
+
}
|
|
84
|
+
const index = (id) => Number.parseInt(id.slice(1), 10);
|
|
85
|
+
return ids.sort((a, b) => index(a) - index(b) || a.localeCompare(b));
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* The file metadata a snapshot of `slot` re-emits; of the whole room when no
|
|
89
|
+
* slot is named. Falls back to the room-wide keys where nothing per-slot was
|
|
90
|
+
* recorded (a legacy room, or a slot seeded from STEP, which has no IFCX file).
|
|
91
|
+
*/
|
|
92
|
+
export function readIfcxFileMeta(meta, slot) {
|
|
93
|
+
const roomWide = readRecord({
|
|
94
|
+
header: meta.get('header'),
|
|
95
|
+
imports: meta.get('imports'),
|
|
96
|
+
schemas: meta.get('schemas'),
|
|
97
|
+
});
|
|
98
|
+
if (isRealSlot(slot)) {
|
|
99
|
+
const own = readRecord(meta.get(slotFileMetaKey(slot)));
|
|
100
|
+
return { ...roomWide, ...own };
|
|
101
|
+
}
|
|
102
|
+
const merged = { ...roomWide };
|
|
103
|
+
for (const slotId of recordedSlotIds(meta)) {
|
|
104
|
+
const own = readRecord(meta.get(`${SLOT_FILE_META_PREFIX}${slotId}`));
|
|
105
|
+
if (own.header && !merged.header)
|
|
106
|
+
merged.header = own.header;
|
|
107
|
+
if (own.imports)
|
|
108
|
+
merged.imports = [...(merged.imports ?? []), ...own.imports];
|
|
109
|
+
if (own.schemas)
|
|
110
|
+
merged.schemas = { ...merged.schemas, ...own.schemas };
|
|
111
|
+
}
|
|
112
|
+
return merged;
|
|
113
|
+
}
|
|
114
|
+
//# sourceMappingURL=slot-ifcx.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"slot-ifcx.js","sourceRoot":"","sources":["../../src/snapshot/slot-ifcx.ts"],"names":[],"mappings":"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"}
|
|
@@ -146,9 +146,9 @@ export function flattenStructuredBranches(json, options = {}) {
|
|
|
146
146
|
* raw values, foreign data under colliding namespaces).
|
|
147
147
|
*/
|
|
148
148
|
export function inflateStructuredAttributes(attributes) {
|
|
149
|
-
const flat =
|
|
150
|
-
const psets =
|
|
151
|
-
const quantities =
|
|
149
|
+
const flat = Object.create(null);
|
|
150
|
+
const psets = Object.create(null);
|
|
151
|
+
const quantities = Object.create(null);
|
|
152
152
|
let classifications = [];
|
|
153
153
|
let materials = [];
|
|
154
154
|
let geometryRefs = [];
|
|
@@ -236,16 +236,16 @@ export function inflateStructuredAttributes(attributes) {
|
|
|
236
236
|
if (QTO_SET_RE.test(setName)) {
|
|
237
237
|
const candidate = isPropertyValueShaped(value) ? value.value : value;
|
|
238
238
|
if (typeof candidate === 'number' && Number.isFinite(candidate)) {
|
|
239
|
-
(quantities[setName] ??=
|
|
239
|
+
(quantities[setName] ??= Object.create(null))[name] = candidate;
|
|
240
240
|
continue;
|
|
241
241
|
}
|
|
242
242
|
}
|
|
243
243
|
if (isPropertyValueShaped(value)) {
|
|
244
|
-
(psets[setName] ??=
|
|
244
|
+
(psets[setName] ??= Object.create(null))[name] = { ...value };
|
|
245
245
|
continue;
|
|
246
246
|
}
|
|
247
247
|
if (typeof value === 'number' && Number.isFinite(value) && !PSET_SET_RE.test(setName)) {
|
|
248
|
-
(quantities[setName] ??=
|
|
248
|
+
(quantities[setName] ??= Object.create(null))[name] = value;
|
|
249
249
|
continue;
|
|
250
250
|
}
|
|
251
251
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"structured-attrs.js","sourceRoot":"","sources":["../../src/snapshot/structured-attrs.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"structured-attrs.js","sourceRoot":"","sources":["../../src/snapshot/structured-attrs.ts"],"names":[],"mappings":"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"}
|
|
@@ -11,6 +11,7 @@
|
|
|
11
11
|
*/
|
|
12
12
|
import type { IfcxFile } from '@ifc-lite/ifcx';
|
|
13
13
|
import * as Y from 'yjs';
|
|
14
|
+
import { type ModelSlotRef } from '../doc/model-slot.js';
|
|
14
15
|
export interface SnapshotOptions {
|
|
15
16
|
author?: string;
|
|
16
17
|
/** Override timestamp; defaults to Date.now(). */
|
|
@@ -23,6 +24,14 @@ export interface SnapshotOptions {
|
|
|
23
24
|
ifcxVersion?: string;
|
|
24
25
|
/** Stable child-key ordering (defaults to insertion order from the Y.Map). */
|
|
25
26
|
sortChildren?: boolean;
|
|
27
|
+
/**
|
|
28
|
+
* Emit only the entities of one model slot (#4444), paths kept as stored
|
|
29
|
+
* (slot-qualified), with THAT slot's file header / imports / schemas. A
|
|
30
|
+
* recipient reconstructs one viewer model per slot from one snapshot per
|
|
31
|
+
* slot. Omitted: every entity in the room, file metadata merged across
|
|
32
|
+
* slots (see slot-ifcx.ts).
|
|
33
|
+
*/
|
|
34
|
+
slot?: ModelSlotRef;
|
|
26
35
|
}
|
|
27
36
|
export declare function snapshotToIfcx(doc: Y.Doc, options?: SnapshotOptions): IfcxFile;
|
|
28
37
|
/** Serialize an IfcxFile to a string. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"to-ifcx.d.ts","sourceRoot":"","sources":["../../src/snapshot/to-ifcx.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,QAAQ,
|
|
1
|
+
{"version":3,"file":"to-ifcx.d.ts","sourceRoot":"","sources":["../../src/snapshot/to-ifcx.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAwB,MAAM,gBAAgB,CAAC;AACrE,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC;AAIzB,OAAO,EAAc,KAAK,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAIrE,MAAM,WAAW,eAAe;IAC9B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,kDAAkD;IAClD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,wCAAwC;IACxC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,4BAA4B;IAC5B,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,yEAAyE;IACzE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,8EAA8E;IAC9E,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB;;;;;;OAMG;IACH,IAAI,CAAC,EAAE,YAAY,CAAC;CACrB;AAED,wBAAgB,cAAc,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,OAAO,GAAE,eAAoB,GAAG,QAAQ,CA+DlF;AAED,yCAAyC;AACzC,wBAAgB,aAAa,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,UAAO,GAAG,MAAM,CAEnE"}
|
package/dist/snapshot/to-ifcx.js
CHANGED
|
@@ -4,12 +4,14 @@
|
|
|
4
4
|
import { entityToJSON, iterEntities } from '../doc/entity.js';
|
|
5
5
|
import { metaMap } from '../doc/schema.js';
|
|
6
6
|
import { flattenStructuredBranches, geometryRecordLookup } from './structured-attrs.js';
|
|
7
|
+
import { pathInSlot } from '../doc/model-slot.js';
|
|
8
|
+
import { readIfcxFileMeta } from './slot-ifcx.js';
|
|
7
9
|
import { IFCX_VERSION } from '@ifc-lite/ifcx';
|
|
8
10
|
export function snapshotToIfcx(doc, options = {}) {
|
|
9
|
-
const
|
|
10
|
-
const seededHeader =
|
|
11
|
-
const seededImports =
|
|
12
|
-
const seededSchemas =
|
|
11
|
+
const fileMeta = readIfcxFileMeta(metaMap(doc), options.slot);
|
|
12
|
+
const seededHeader = fileMeta.header;
|
|
13
|
+
const seededImports = fileMeta.imports ?? [];
|
|
14
|
+
const seededSchemas = fileMeta.schemas ?? {};
|
|
13
15
|
const header = {
|
|
14
16
|
id: options.id ?? seededHeader?.id ?? 'ifc-lite/collab/snapshot',
|
|
15
17
|
ifcxVersion: options.ifcxVersion ?? seededHeader?.ifcxVersion ?? IFCX_VERSION,
|
|
@@ -20,6 +22,8 @@ export function snapshotToIfcx(doc, options = {}) {
|
|
|
20
22
|
const data = [];
|
|
21
23
|
const geometryRecordFor = geometryRecordLookup(doc);
|
|
22
24
|
for (const [path, entity] of iterEntities(doc)) {
|
|
25
|
+
if (options.slot && !pathInSlot(options.slot, path))
|
|
26
|
+
continue;
|
|
23
27
|
const json = entityToJSON(entity);
|
|
24
28
|
const node = { path };
|
|
25
29
|
const childrenKeys = options.sortChildren
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"to-ifcx.js","sourceRoot":"","sources":["../../src/snapshot/to-ifcx.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAgB/D,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAC9D,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC3C,OAAO,EAAE,yBAAyB,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AACxF,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"to-ifcx.js","sourceRoot":"","sources":["../../src/snapshot/to-ifcx.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ifc-lite/collab",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.8.0",
|
|
4
4
|
"description": "Real-time collaborative BIM via CRDT on IFCX",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -39,9 +39,9 @@
|
|
|
39
39
|
"y-protocols": "^1.0.6",
|
|
40
40
|
"y-websocket": "^3.1.0",
|
|
41
41
|
"yjs": "^13.6.32",
|
|
42
|
-
"@ifc-lite/
|
|
43
|
-
"@ifc-lite/ifcx": "^4.
|
|
44
|
-
"@ifc-lite/
|
|
42
|
+
"@ifc-lite/mutations": "^2.3.0",
|
|
43
|
+
"@ifc-lite/ifcx": "^4.1.1",
|
|
44
|
+
"@ifc-lite/data": "^4.2.1"
|
|
45
45
|
},
|
|
46
46
|
"devDependencies": {
|
|
47
47
|
"typescript": "^6.0.3",
|