@ifc-lite/collab 0.5.0 → 0.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.
- package/dist/branch/branch.d.ts.map +1 -1
- package/dist/branch/branch.js +16 -7
- package/dist/branch/branch.js.map +1 -1
- package/dist/doc/entity.d.ts +12 -6
- package/dist/doc/entity.d.ts.map +1 -1
- package/dist/doc/entity.js +23 -2
- package/dist/doc/entity.js.map +1 -1
- package/dist/doc/geometry.d.ts +33 -0
- package/dist/doc/geometry.d.ts.map +1 -1
- package/dist/doc/geometry.js +53 -0
- package/dist/doc/geometry.js.map +1 -1
- package/dist/geometry/gc.d.ts +15 -1
- package/dist/geometry/gc.d.ts.map +1 -1
- package/dist/geometry/gc.js +15 -5
- package/dist/geometry/gc.js.map +1 -1
- package/dist/snapshot/from-ifcx.d.ts +35 -0
- package/dist/snapshot/from-ifcx.d.ts.map +1 -1
- package/dist/snapshot/from-ifcx.js +243 -62
- package/dist/snapshot/from-ifcx.js.map +1 -1
- package/dist/snapshot/from-step.d.ts.map +1 -1
- package/dist/snapshot/from-step.js +7 -2
- package/dist/snapshot/from-step.js.map +1 -1
- package/dist/snapshot/index.d.ts +1 -1
- package/dist/snapshot/index.d.ts.map +1 -1
- package/dist/snapshot/index.js +1 -1
- package/dist/snapshot/index.js.map +1 -1
- package/dist/snapshot/structured-attrs.d.ts +18 -0
- package/dist/snapshot/structured-attrs.d.ts.map +1 -1
- package/dist/snapshot/structured-attrs.js +49 -0
- package/dist/snapshot/structured-attrs.js.map +1 -1
- package/dist/snapshot/to-ifcx.d.ts.map +1 -1
- package/dist/snapshot/to-ifcx.js +14 -1
- package/dist/snapshot/to-ifcx.js.map +1 -1
- package/package.json +4 -4
|
@@ -1,9 +1,10 @@
|
|
|
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 {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
4
|
+
import { IFCLITE_ATTR } from '@ifc-lite/ifcx';
|
|
5
|
+
import { createEntity, deleteAttribute, deleteEntity, getEntity, hasEntity, removeChild, removeInherit, setAttribute, setChild, setGeometryRef, setInherit, setPropertyValue, setQuantityValue, } from '../doc/entity.js';
|
|
6
|
+
import { createGeometry, upsertGeometry } from '../doc/geometry.js';
|
|
7
|
+
import { ENTITY_KEY, SEED_ORIGIN, assertSchemaInvariants, metaMap, } from '../doc/schema.js';
|
|
7
8
|
import { inflateStructuredAttributes } from './structured-attrs.js';
|
|
8
9
|
/** Decode whatever the caller hands us into a parsed IfcxFile. */
|
|
9
10
|
export function parseIfcxInput(input) {
|
|
@@ -45,71 +46,251 @@ export function seedFromIfcx(doc, input, opts = {}) {
|
|
|
45
46
|
if (file.schemas)
|
|
46
47
|
meta.set('schemas', file.schemas);
|
|
47
48
|
for (const node of file.data ?? []) {
|
|
48
|
-
const
|
|
49
|
-
if (!
|
|
49
|
+
const decoded = decodeNode(node, false);
|
|
50
|
+
if (!decoded)
|
|
51
|
+
continue;
|
|
52
|
+
restoreGeometryCarriers(doc, decoded, createGeometry);
|
|
53
|
+
createNodeEntity(doc, decoded);
|
|
54
|
+
}
|
|
55
|
+
}, opts.origin ?? SEED_ORIGIN);
|
|
56
|
+
return file;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* `stripTombstone` splits the two readers apart. The overlay applier
|
|
60
|
+
* acts on `ifclite::deleted` and must not leave the marker behind as an
|
|
61
|
+
* ordinary attribute (the same reason `bakeLayers` strips it from
|
|
62
|
+
* survivors). `seedFromIfcx` has never interpreted it and must keep
|
|
63
|
+
* storing it verbatim: it seeds live session docs in `apps/viewer` and
|
|
64
|
+
* `snapshot/worker.ts`, and quietly dropping an attribute there would be
|
|
65
|
+
* a behaviour change on a far more common path than this fix touches.
|
|
66
|
+
*/
|
|
67
|
+
function decodeNode(node, stripTombstone) {
|
|
68
|
+
const rawNode = node;
|
|
69
|
+
const path = rawNode.path;
|
|
70
|
+
if (!path)
|
|
71
|
+
return undefined;
|
|
72
|
+
// Null attribute values are removal opinions (minimal layers); with
|
|
73
|
+
// nothing beneath them to remove, they mean "absent" — never store
|
|
74
|
+
// them as values.
|
|
75
|
+
const rawAttributes = {};
|
|
76
|
+
const removedAttributes = [];
|
|
77
|
+
let tombstone;
|
|
78
|
+
for (const [key, value] of Object.entries(rawNode.attributes ?? {})) {
|
|
79
|
+
if (key === IFCLITE_ATTR.DELETED) {
|
|
80
|
+
if (typeof value === 'boolean')
|
|
81
|
+
tombstone = value;
|
|
82
|
+
if (stripTombstone)
|
|
83
|
+
continue;
|
|
84
|
+
}
|
|
85
|
+
if (value === null)
|
|
86
|
+
removedAttributes.push(key);
|
|
87
|
+
else
|
|
88
|
+
rawAttributes[key] = value;
|
|
89
|
+
}
|
|
90
|
+
// Re-inflate structured branches the snapshot writer folded into
|
|
91
|
+
// namespaced attributes (#1031); the shape-gated remainder stays
|
|
92
|
+
// in the flat attributes branch.
|
|
93
|
+
const inflated = inflateStructuredAttributes(rawAttributes);
|
|
94
|
+
const children = {};
|
|
95
|
+
const removedChildren = [];
|
|
96
|
+
for (const [role, target] of Object.entries(rawNode.children ?? {})) {
|
|
97
|
+
if (typeof target === 'string')
|
|
98
|
+
children[role] = target;
|
|
99
|
+
else if (target === null)
|
|
100
|
+
removedChildren.push(role);
|
|
101
|
+
}
|
|
102
|
+
const inherits = {};
|
|
103
|
+
const removedInherits = [];
|
|
104
|
+
for (const [role, target] of Object.entries(rawNode.inherits ?? {})) {
|
|
105
|
+
if (typeof target === 'string')
|
|
106
|
+
inherits[role] = target;
|
|
107
|
+
else if (target === null)
|
|
108
|
+
removedInherits.push(role);
|
|
109
|
+
}
|
|
110
|
+
return {
|
|
111
|
+
path,
|
|
112
|
+
ifcClass: readIfcClass(rawNode.attributes),
|
|
113
|
+
inflated,
|
|
114
|
+
children,
|
|
115
|
+
inherits,
|
|
116
|
+
tombstone,
|
|
117
|
+
removedAttributes,
|
|
118
|
+
removedChildren,
|
|
119
|
+
removedInherits,
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* A carrier with the embedded geometry record recreates the geometry map
|
|
124
|
+
* entry, so the restored ref is never dangling. Bare-id carriers keep
|
|
125
|
+
* pointing at out-of-band hydrated geometry.
|
|
126
|
+
*/
|
|
127
|
+
function restoreGeometryCarriers(doc, decoded, write) {
|
|
128
|
+
for (const carrier of decoded.inflated.geometryCarriers) {
|
|
129
|
+
if (typeof carrier.type !== 'string' || typeof carrier.source !== 'string')
|
|
130
|
+
continue;
|
|
131
|
+
write(doc, carrier.geomId, {
|
|
132
|
+
type: carrier.type,
|
|
133
|
+
source: carrier.source,
|
|
134
|
+
blobHash: carrier.blobHash,
|
|
135
|
+
params: carrier.params,
|
|
136
|
+
bbox: carrier.bbox,
|
|
137
|
+
});
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
function createNodeEntity(doc, decoded) {
|
|
141
|
+
const { ifcClass, inflated } = decoded;
|
|
142
|
+
createEntity(doc, decoded.path, {
|
|
143
|
+
ifcClass,
|
|
144
|
+
attributes: inflated.attributes,
|
|
145
|
+
children: decoded.children,
|
|
146
|
+
inherits: decoded.inherits,
|
|
147
|
+
psets: inflated.psets,
|
|
148
|
+
quantities: inflated.quantities,
|
|
149
|
+
classifications: inflated.classifications,
|
|
150
|
+
materials: inflated.materials,
|
|
151
|
+
geometryRef: inflated.geometryRefRecord,
|
|
152
|
+
// Provenance comes from the node's own `ifclite::meta` carrier and
|
|
153
|
+
// from nowhere else (#3092). The file header describes the FILE, and a
|
|
154
|
+
// snapshot of a collab doc puts the snapshotter's own name and write
|
|
155
|
+
// clock there; copying that onto every node fabricated a `createdBy`/
|
|
156
|
+
// `createdAt` indistinguishable from real attribution. Absent reads as
|
|
157
|
+
// "unknown"; invented gets trusted.
|
|
158
|
+
stampCreatedAt: false,
|
|
159
|
+
meta: {
|
|
160
|
+
ifcClass,
|
|
161
|
+
schemaVersion: 'ifc5',
|
|
162
|
+
...inflated.meta,
|
|
163
|
+
},
|
|
164
|
+
});
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* Apply an IFCX file to `doc` as a *layer of opinions* rather than as a
|
|
168
|
+
* seed.
|
|
169
|
+
*
|
|
170
|
+
* `seedFromIfcx` routes every node through `createEntity`, which is a
|
|
171
|
+
* deliberate no-op on a path the doc already has — right for seeding a
|
|
172
|
+
* doc from a snapshot, wrong for merging a layer whose whole purpose is
|
|
173
|
+
* to modify entities that already exist. This applier creates missing
|
|
174
|
+
* entities exactly as the seeder does, and for entities that are already
|
|
175
|
+
* present it writes the node's opinions on top: values overwrite, and
|
|
176
|
+
* anything the node says nothing about is left alone.
|
|
177
|
+
*
|
|
178
|
+
* `null` removes a FLAT attribute, child or inherit ONLY: a nulled
|
|
179
|
+
* pset/quantity property survives, silently. Measured, and pinned with the
|
|
180
|
+
* reason, in `test/apply-ifcx-overlay.test.ts`.
|
|
181
|
+
*
|
|
182
|
+
* Deliberately NOT part of `seedFromIfcx`'s option surface: the seeder's
|
|
183
|
+
* additive-and-idempotent contract is what `apps/viewer` and
|
|
184
|
+
* `snapshot/worker.ts` rely on when seeding a live session doc, and this
|
|
185
|
+
* function is a different operation, not a mode of that one.
|
|
186
|
+
*
|
|
187
|
+
* Deletion opinions are honoured where the layer states them: an
|
|
188
|
+
* `ifclite::deleted: true` node removes the entity, matching what
|
|
189
|
+
* composition, `bakeLayers` and the MCP layer store already do. Note the
|
|
190
|
+
* limit of the *representation* though, not of this code: a full IFCX
|
|
191
|
+
* snapshot emits only what an entity has, so a key or entity deleted in
|
|
192
|
+
* the source doc is simply absent rather than nulled or tombstoned, and
|
|
193
|
+
* an overlay cannot tell that apart from "no opinion". Deletions
|
|
194
|
+
* therefore propagate only from layers that state them explicitly.
|
|
195
|
+
*/
|
|
196
|
+
export function applyIfcxOverlay(doc, input, opts = {}) {
|
|
197
|
+
const file = parseIfcxInput(input);
|
|
198
|
+
assertSchemaInvariants(doc);
|
|
199
|
+
doc.transact(() => {
|
|
200
|
+
const meta = metaMap(doc);
|
|
201
|
+
if (file.header)
|
|
202
|
+
meta.set('header', file.header);
|
|
203
|
+
if (file.imports)
|
|
204
|
+
meta.set('imports', file.imports);
|
|
205
|
+
if (file.schemas)
|
|
206
|
+
meta.set('schemas', file.schemas);
|
|
207
|
+
// Composition resolves `ifclite::deleted` after every node in the
|
|
208
|
+
// layer has been applied — the strongest (last) opinion wins — so a
|
|
209
|
+
// base → delete → resurrect sequence within one file must seed the
|
|
210
|
+
// entity's state first and only then act on the final verdict.
|
|
211
|
+
const tombstoned = new Map();
|
|
212
|
+
for (const node of file.data ?? []) {
|
|
213
|
+
const decoded = decodeNode(node, true);
|
|
214
|
+
if (!decoded)
|
|
215
|
+
continue;
|
|
216
|
+
const opinion = decoded.tombstone;
|
|
217
|
+
if (opinion !== undefined)
|
|
218
|
+
tombstoned.set(decoded.path, opinion);
|
|
219
|
+
restoreGeometryCarriers(doc, decoded, upsertGeometry);
|
|
220
|
+
if (!hasEntity(doc, decoded.path)) {
|
|
221
|
+
createNodeEntity(doc, decoded);
|
|
50
222
|
continue;
|
|
51
|
-
// Null attribute values are removal opinions (minimal layers); with
|
|
52
|
-
// nothing beneath them to remove, they mean "absent" — never store
|
|
53
|
-
// them as values.
|
|
54
|
-
const rawAttributes = {};
|
|
55
|
-
for (const [key, value] of Object.entries(node.attributes ?? {})) {
|
|
56
|
-
if (value !== null)
|
|
57
|
-
rawAttributes[key] = value;
|
|
58
|
-
}
|
|
59
|
-
// Re-inflate structured branches the snapshot writer folded into
|
|
60
|
-
// namespaced attributes (#1031); the shape-gated remainder stays
|
|
61
|
-
// in the flat attributes branch.
|
|
62
|
-
const inflated = inflateStructuredAttributes(rawAttributes);
|
|
63
|
-
const children = {};
|
|
64
|
-
if (node.children) {
|
|
65
|
-
for (const [role, target] of Object.entries(node.children)) {
|
|
66
|
-
if (typeof target === 'string')
|
|
67
|
-
children[role] = target;
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
const inherits = {};
|
|
71
|
-
if (node.inherits) {
|
|
72
|
-
for (const [role, target] of Object.entries(node.inherits)) {
|
|
73
|
-
if (typeof target === 'string')
|
|
74
|
-
inherits[role] = target;
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
const ifcClass = readIfcClass(node.attributes);
|
|
78
|
-
// A carrier with the embedded geometry record recreates the
|
|
79
|
-
// geometry map entry, so the restored ref is never dangling.
|
|
80
|
-
// Bare-id carriers keep pointing at out-of-band hydrated geometry.
|
|
81
|
-
for (const carrier of inflated.geometryCarriers) {
|
|
82
|
-
if (typeof carrier.type !== 'string' || typeof carrier.source !== 'string')
|
|
83
|
-
continue;
|
|
84
|
-
createGeometry(doc, carrier.geomId, {
|
|
85
|
-
type: carrier.type,
|
|
86
|
-
source: carrier.source,
|
|
87
|
-
blobHash: carrier.blobHash,
|
|
88
|
-
params: carrier.params,
|
|
89
|
-
bbox: carrier.bbox,
|
|
90
|
-
});
|
|
91
223
|
}
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
psets: inflated.psets,
|
|
98
|
-
quantities: inflated.quantities,
|
|
99
|
-
classifications: inflated.classifications,
|
|
100
|
-
materials: inflated.materials,
|
|
101
|
-
geometryRef: inflated.geometryRefRecord,
|
|
102
|
-
meta: {
|
|
103
|
-
ifcClass,
|
|
104
|
-
schemaVersion: 'ifc5',
|
|
105
|
-
createdAt: file.header?.timestamp ?? new Date().toISOString(),
|
|
106
|
-
createdBy: file.header?.author,
|
|
107
|
-
},
|
|
108
|
-
});
|
|
224
|
+
overlayEntity(doc, decoded);
|
|
225
|
+
}
|
|
226
|
+
for (const [path, deleted] of tombstoned) {
|
|
227
|
+
if (deleted)
|
|
228
|
+
deleteEntity(doc, path);
|
|
109
229
|
}
|
|
110
230
|
}, opts.origin ?? SEED_ORIGIN);
|
|
111
231
|
return file;
|
|
112
232
|
}
|
|
233
|
+
function overlayEntity(doc, decoded) {
|
|
234
|
+
const { path, inflated } = decoded;
|
|
235
|
+
for (const [key, value] of Object.entries(inflated.attributes)) {
|
|
236
|
+
setAttribute(doc, path, key, value);
|
|
237
|
+
}
|
|
238
|
+
for (const key of decoded.removedAttributes)
|
|
239
|
+
deleteAttribute(doc, path, key);
|
|
240
|
+
for (const [role, target] of Object.entries(decoded.children)) {
|
|
241
|
+
setChild(doc, path, role, target);
|
|
242
|
+
}
|
|
243
|
+
for (const role of decoded.removedChildren)
|
|
244
|
+
removeChild(doc, path, role);
|
|
245
|
+
for (const [role, target] of Object.entries(decoded.inherits)) {
|
|
246
|
+
setInherit(doc, path, role, target);
|
|
247
|
+
}
|
|
248
|
+
for (const role of decoded.removedInherits)
|
|
249
|
+
removeInherit(doc, path, role);
|
|
250
|
+
for (const [psetName, props] of Object.entries(inflated.psets)) {
|
|
251
|
+
for (const [propName, value] of Object.entries(props)) {
|
|
252
|
+
setPropertyValue(doc, path, psetName, propName, value);
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
for (const [qsetName, qtys] of Object.entries(inflated.quantities)) {
|
|
256
|
+
for (const [qtyName, value] of Object.entries(qtys)) {
|
|
257
|
+
setQuantityValue(doc, path, qsetName, qtyName, value);
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
// Lists are single-valued opinions: a node that carries one replaces
|
|
261
|
+
// the doc's list wholesale, a node that carries none says nothing and
|
|
262
|
+
// must leave the doc's list untouched.
|
|
263
|
+
if (inflated.classifications.length > 0) {
|
|
264
|
+
setClassifications(doc, path, inflated.classifications);
|
|
265
|
+
}
|
|
266
|
+
if (inflated.materials.length > 0) {
|
|
267
|
+
setMaterials(doc, path, inflated.materials);
|
|
268
|
+
}
|
|
269
|
+
if (inflated.geometryRefRecord && inflated.geometryRefRecord.geomIds.length > 0) {
|
|
270
|
+
setGeometryRef(doc, path, inflated.geometryRefRecord);
|
|
271
|
+
}
|
|
272
|
+
// `meta.ifcClass` mirrors the class attribute; keep the two in step.
|
|
273
|
+
if (decoded.ifcClass) {
|
|
274
|
+
const entityMeta = getEntity(doc, path)?.get(ENTITY_KEY.META);
|
|
275
|
+
entityMeta?.set('ifcClass', decoded.ifcClass);
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
function setClassifications(doc, path, refs) {
|
|
279
|
+
const arr = getEntity(doc, path)?.get(ENTITY_KEY.CLASSIFICATIONS);
|
|
280
|
+
if (!arr)
|
|
281
|
+
return;
|
|
282
|
+
if (arr.length > 0)
|
|
283
|
+
arr.delete(0, arr.length);
|
|
284
|
+
arr.push([...refs]);
|
|
285
|
+
}
|
|
286
|
+
function setMaterials(doc, path, assignments) {
|
|
287
|
+
const arr = getEntity(doc, path)?.get(ENTITY_KEY.MATERIALS);
|
|
288
|
+
if (!arr)
|
|
289
|
+
return;
|
|
290
|
+
if (arr.length > 0)
|
|
291
|
+
arr.delete(0, arr.length);
|
|
292
|
+
arr.push([...assignments]);
|
|
293
|
+
}
|
|
113
294
|
/** Read the IfcClass code out of the well-known `bsi::ifc::class` attribute. */
|
|
114
295
|
function readIfcClass(attributes) {
|
|
115
296
|
if (!attributes)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"from-ifcx.js","sourceRoot":"","sources":["../../src/snapshot/from-ifcx.ts"],"names":[],"mappings":"AAAA;;+DAE+D;
|
|
1
|
+
{"version":3,"file":"from-ifcx.js","sourceRoot":"","sources":["../../src/snapshot/from-ifcx.ts"],"names":[],"mappings":"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"}
|
|
@@ -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;AAEtD,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;;;;OAIG;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;CACvD;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;CACxE;AAED,MAAM,WAAW,kBAAkB;IACjC,qDAAqD;IACrD,MAAM,EAAE,MAAM,CAAC;IACf,mDAAmD;IACnD,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,oFAAoF;AACpF,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,
|
|
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;AAEtD,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;;;;OAIG;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;CACvD;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;CACxE;AAED,MAAM,WAAW,kBAAkB;IACjC,qDAAqD;IACrD,MAAM,EAAE,MAAM,CAAC;IACf,mDAAmD;IACnD,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,oFAAoF;AACpF,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,CAgDpB"}
|
|
@@ -48,11 +48,16 @@ export function seedFromStep(doc, source, opts = {}) {
|
|
|
48
48
|
attributes: ent.attributes ?? {},
|
|
49
49
|
children: ent.children,
|
|
50
50
|
schemaVersion,
|
|
51
|
+
// Same rule as `from-ifcx.ts`: the STEP header names whoever
|
|
52
|
+
// wrote the file, not whoever authored each entity, and its
|
|
53
|
+
// timestamp is the file's, not the entity's. Stamping either
|
|
54
|
+
// onto every node manufactures per-entity provenance that reads
|
|
55
|
+
// as genuine. The header itself stays available under
|
|
56
|
+
// `meta.stepHeader`.
|
|
57
|
+
stampCreatedAt: false,
|
|
51
58
|
meta: {
|
|
52
59
|
ifcClass: ent.ifcClass,
|
|
53
60
|
schemaVersion,
|
|
54
|
-
createdAt: source.header?.timestamp ?? new Date().toISOString(),
|
|
55
|
-
createdBy: source.header?.author,
|
|
56
61
|
},
|
|
57
62
|
});
|
|
58
63
|
if (ent.psets) {
|
|
@@ -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;AAClE,OAAO,EAAE,WAAW,EAAE,sBAAsB,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAMhF;;;;GAIG;AACH,SAAS,oBAAoB,CAAC,MAA0B;IACtD,QAAQ,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC;QACrC,KAAK,QAAQ;YACX,OAAO,QAAQ,CAAC;QAClB,KAAK,MAAM;YACT,OAAO,MAAM,CAAC;QAChB;YACE,OAAO,MAAM,CAAC;IAClB,CAAC;AACH,CAAC;AAqDD,oFAAoF;AACpF,MAAM,UAAU,UAAU,CAAC,IAAY;IACrC,OAAO,IAAI,IAAI,EAAE,CAAC;AACpB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,YAAY,CAC1B,GAAU,EACV,MAAsB,EACtB,OAA4B,EAAE;IAE9B,sBAAsB,CAAC,GAAG,CAAC,CAAC;IAC5B,MAAM,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,IAAI,oBAAoB,CAAC;IACvE,MAAM,aAAa,GAAG,gBAAgB,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAE9D,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,IAAI,OAAO,GAAG,CAAC,CAAC;IAEhB,GAAG,CAAC,QAAQ,CAAC,GAAG,EAAE;QAChB,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;QAC1B,IAAI,MAAM,CAAC,MAAM;YAAE,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;QAEzD,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;YAClC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;gBACd,OAAO,EAAE,CAAC;gBACV,SAAS;YACX,CAAC;YACD,MAAM,IAAI,GAAG,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAClC,YAAY,CAAC,GAAG,EAAE,IAAI,EAAE;gBACtB,QAAQ,EAAE,GAAG,CAAC,QAAQ;gBACtB,UAAU,EAAE,GAAG,CAAC,UAAU,IAAI,EAAE;gBAChC,QAAQ,EAAE,GAAG,CAAC,QAAQ;gBACtB,aAAa;gBACb,
|
|
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;AAClE,OAAO,EAAE,WAAW,EAAE,sBAAsB,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAMhF;;;;GAIG;AACH,SAAS,oBAAoB,CAAC,MAA0B;IACtD,QAAQ,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC;QACrC,KAAK,QAAQ;YACX,OAAO,QAAQ,CAAC;QAClB,KAAK,MAAM;YACT,OAAO,MAAM,CAAC;QAChB;YACE,OAAO,MAAM,CAAC;IAClB,CAAC;AACH,CAAC;AAqDD,oFAAoF;AACpF,MAAM,UAAU,UAAU,CAAC,IAAY;IACrC,OAAO,IAAI,IAAI,EAAE,CAAC;AACpB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,YAAY,CAC1B,GAAU,EACV,MAAsB,EACtB,OAA4B,EAAE;IAE9B,sBAAsB,CAAC,GAAG,CAAC,CAAC;IAC5B,MAAM,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,IAAI,oBAAoB,CAAC;IACvE,MAAM,aAAa,GAAG,gBAAgB,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAE9D,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,IAAI,OAAO,GAAG,CAAC,CAAC;IAEhB,GAAG,CAAC,QAAQ,CAAC,GAAG,EAAE;QAChB,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;QAC1B,IAAI,MAAM,CAAC,MAAM;YAAE,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;QAEzD,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;YAClC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;gBACd,OAAO,EAAE,CAAC;gBACV,SAAS;YACX,CAAC;YACD,MAAM,IAAI,GAAG,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAClC,YAAY,CAAC,GAAG,EAAE,IAAI,EAAE;gBACtB,QAAQ,EAAE,GAAG,CAAC,QAAQ;gBACtB,UAAU,EAAE,GAAG,CAAC,UAAU,IAAI,EAAE;gBAChC,QAAQ,EAAE,GAAG,CAAC,QAAQ;gBACtB,aAAa;gBACb,6DAA6D;gBAC7D,4DAA4D;gBAC5D,6DAA6D;gBAC7D,gEAAgE;gBAChE,sDAAsD;gBACtD,qBAAqB;gBACrB,cAAc,EAAE,KAAK;gBACrB,IAAI,EAAE;oBACJ,QAAQ,EAAE,GAAG,CAAC,QAAQ;oBACtB,aAAa;iBACd;aACF,CAAC,CAAC;YAEH,IAAI,GAAG,CAAC,KAAK,EAAE,CAAC;gBACd,KAAK,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;oBAC1D,KAAK,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;wBACtD,gBAAgB,CAAC,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;oBACzD,CAAC;gBACH,CAAC;YACH,CAAC;YACD,MAAM,EAAE,CAAC;QACX,CAAC;IACH,CAAC,EAAE,IAAI,CAAC,MAAM,IAAI,WAAW,CAAC,CAAC;IAE/B,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;AAC7B,CAAC"}
|
package/dist/snapshot/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { seedFromIfcx, parseIfcxInput, type SeedOptions, type IfcxInput, } from './from-ifcx.js';
|
|
1
|
+
export { seedFromIfcx, applyIfcxOverlay, parseIfcxInput, type SeedOptions, type OverlayOptions, type IfcxInput, } from './from-ifcx.js';
|
|
2
2
|
export { seedFromStep, guidToPath, type StepSeedEntity, type StepSeedSource, type SeedFromStepOptions, type SeedFromStepResult, type CollabSchemaVersion, } from './from-step.js';
|
|
3
3
|
export { snapshotToIfcx, serializeIfcx, type SnapshotOptions } from './to-ifcx.js';
|
|
4
4
|
export { captureBaseline, extractUserLayer, filterUpdateByClient, } from './layers.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/snapshot/index.ts"],"names":[],"mappings":"AAIA,OAAO,EACL,YAAY,EACZ,cAAc,EACd,KAAK,WAAW,EAChB,KAAK,SAAS,GACf,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,YAAY,EACZ,UAAU,EACV,KAAK,cAAc,EACnB,KAAK,cAAc,EACnB,KAAK,mBAAmB,EACxB,KAAK,kBAAkB,EACvB,KAAK,mBAAmB,GACzB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,KAAK,eAAe,EAAE,MAAM,cAAc,CAAC;AACnF,OAAO,EACL,eAAe,EACf,gBAAgB,EAChB,oBAAoB,GACrB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,mBAAmB,EACnB,KAAK,0BAA0B,GAChC,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,YAAY,EACZ,KAAK,mBAAmB,EACxB,KAAK,cAAc,GACpB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,eAAe,EACf,sBAAsB,EACtB,yBAAyB,EACzB,2BAA2B,EAC3B,qBAAqB,EACrB,oBAAoB,EACpB,KAAK,sBAAsB,EAC3B,KAAK,kBAAkB,EACvB,KAAK,kBAAkB,EACvB,KAAK,cAAc,GACpB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,iBAAiB,EACjB,KAAK,aAAa,EAClB,KAAK,cAAc,EACnB,KAAK,eAAe,GACrB,MAAM,aAAa,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/snapshot/index.ts"],"names":[],"mappings":"AAIA,OAAO,EACL,YAAY,EACZ,gBAAgB,EAChB,cAAc,EACd,KAAK,WAAW,EAChB,KAAK,cAAc,EACnB,KAAK,SAAS,GACf,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,YAAY,EACZ,UAAU,EACV,KAAK,cAAc,EACnB,KAAK,cAAc,EACnB,KAAK,mBAAmB,EACxB,KAAK,kBAAkB,EACvB,KAAK,mBAAmB,GACzB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,KAAK,eAAe,EAAE,MAAM,cAAc,CAAC;AACnF,OAAO,EACL,eAAe,EACf,gBAAgB,EAChB,oBAAoB,GACrB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,mBAAmB,EACnB,KAAK,0BAA0B,GAChC,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,YAAY,EACZ,KAAK,mBAAmB,EACxB,KAAK,cAAc,GACpB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,eAAe,EACf,sBAAsB,EACtB,yBAAyB,EACzB,2BAA2B,EAC3B,qBAAqB,EACrB,oBAAoB,EACpB,KAAK,sBAAsB,EAC3B,KAAK,kBAAkB,EACvB,KAAK,kBAAkB,EACvB,KAAK,cAAc,GACpB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,iBAAiB,EACjB,KAAK,aAAa,EAClB,KAAK,cAAc,EACnB,KAAK,eAAe,GACrB,MAAM,aAAa,CAAC"}
|
package/dist/snapshot/index.js
CHANGED
|
@@ -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
|
-
export { seedFromIfcx, parseIfcxInput, } from './from-ifcx.js';
|
|
4
|
+
export { seedFromIfcx, applyIfcxOverlay, parseIfcxInput, } from './from-ifcx.js';
|
|
5
5
|
export { seedFromStep, guidToPath, } from './from-step.js';
|
|
6
6
|
export { snapshotToIfcx, serializeIfcx } from './to-ifcx.js';
|
|
7
7
|
export { captureBaseline, extractUserLayer, filterUpdateByClient, } from './layers.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/snapshot/index.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAE/D,OAAO,EACL,YAAY,EACZ,cAAc,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/snapshot/index.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAE/D,OAAO,EACL,YAAY,EACZ,gBAAgB,EAChB,cAAc,GAIf,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,YAAY,EACZ,UAAU,GAMX,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,cAAc,EAAE,aAAa,EAAwB,MAAM,cAAc,CAAC;AACnF,OAAO,EACL,eAAe,EACf,gBAAgB,EAChB,oBAAoB,GACrB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,mBAAmB,GAEpB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,YAAY,GAGb,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,eAAe,EACf,sBAAsB,EACtB,yBAAyB,EACzB,2BAA2B,EAC3B,qBAAqB,EACrB,oBAAoB,GAKrB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,iBAAiB,GAIlB,MAAM,aAAa,CAAC"}
|
|
@@ -44,6 +44,16 @@ export { V5A_ATTR_PREFIX };
|
|
|
44
44
|
* disambiguates pset inflation from "leave it as a flat attribute".
|
|
45
45
|
*/
|
|
46
46
|
export declare function isPropertyValueShaped(value: unknown): value is PropertyValue;
|
|
47
|
+
/**
|
|
48
|
+
* Provenance fields that ride on the wire under `IFCLITE_ATTR.META`.
|
|
49
|
+
*
|
|
50
|
+
* An allowlist, not `meta` wholesale: `ifcClass` already has a wire home
|
|
51
|
+
* (`bsi::ifc::class`) and `schemaVersion` is re-derived by the reader, so
|
|
52
|
+
* carrying them here would give two writers for one fact. Every key
|
|
53
|
+
* listed is fixed when the entity is created — see the `META` doc
|
|
54
|
+
* comment in `@ifc-lite/ifcx` for why that matters.
|
|
55
|
+
*/
|
|
56
|
+
export declare const PROVENANCE_META_KEYS: readonly ["createdBy", "createdAt", "lastEditedBy", "lastEditedAt", "previousPath"];
|
|
47
57
|
/** The structured branches `entityToJSON` exposes alongside attributes. */
|
|
48
58
|
export interface StructuredBranchesJSON {
|
|
49
59
|
psets: Record<string, Record<string, PropertyValue>>;
|
|
@@ -84,8 +94,16 @@ export declare function structuredAttributeKey(setName: string, name: string): s
|
|
|
84
94
|
*/
|
|
85
95
|
export declare function flattenStructuredBranches(json: {
|
|
86
96
|
attributes: Record<string, unknown>;
|
|
97
|
+
/**
|
|
98
|
+
* Per-entity provenance. Optional so a caller assembling only the
|
|
99
|
+
* structured branches (tests, partial views) need not synthesize an
|
|
100
|
+
* empty record; `entityToJSON` always supplies it.
|
|
101
|
+
*/
|
|
102
|
+
meta?: Record<string, unknown>;
|
|
87
103
|
} & StructuredBranchesJSON, options?: FlattenOptions): Record<string, unknown>;
|
|
88
104
|
export interface InflatedAttributes extends StructuredBranchesJSON {
|
|
105
|
+
/** Shape-gated provenance read off `IFCLITE_ATTR.META` (strings only). */
|
|
106
|
+
meta: Record<string, string>;
|
|
89
107
|
/** Whatever didn't inflate — stays in the flat attributes branch. */
|
|
90
108
|
attributes: Record<string, unknown>;
|
|
91
109
|
geometryRefRecord?: GeometryRefRecord;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"structured-attrs.d.ts","sourceRoot":"","sources":["../../src/snapshot/structured-attrs.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AAEH,OAAO,EAAgB,eAAe,EAAqC,MAAM,gBAAgB,CAAC;AAClG,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC;AACzB,OAAO,EAGL,KAAK,iBAAiB,EACtB,KAAK,iBAAiB,EACtB,KAAK,kBAAkB,EACvB,KAAK,aAAa,EACnB,MAAM,kBAAkB,CAAC;AAI1B,OAAO,EAAE,eAAe,EAAE,CAAC;AAa3B;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,aAAa,CAE5E;AAaD,2EAA2E;AAC3E,MAAM,WAAW,sBAAsB;IACrC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC,CAAC;IACrD,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACnD,eAAe,EAAE,iBAAiB,EAAE,CAAC;IACrC,SAAS,EAAE,kBAAkB,EAAE,CAAC;IAChC,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB;AAED;;;;;;GAMG;AACH,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,MAAM,WAAW,cAAc;IAC7B;;;;OAIG;IACH,iBAAiB,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC,kBAAkB,EAAE,QAAQ,CAAC,GAAG,SAAS,CAAC;CACxF;AAED,sDAAsD;AACtD,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAE5E;AAED;;;;GAIG;AACH,wBAAgB,yBAAyB,CACvC,IAAI,EAAE;
|
|
1
|
+
{"version":3,"file":"structured-attrs.d.ts","sourceRoot":"","sources":["../../src/snapshot/structured-attrs.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AAEH,OAAO,EAAgB,eAAe,EAAqC,MAAM,gBAAgB,CAAC;AAClG,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC;AACzB,OAAO,EAGL,KAAK,iBAAiB,EACtB,KAAK,iBAAiB,EACtB,KAAK,kBAAkB,EACvB,KAAK,aAAa,EACnB,MAAM,kBAAkB,CAAC;AAI1B,OAAO,EAAE,eAAe,EAAE,CAAC;AAa3B;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,aAAa,CAE5E;AAaD;;;;;;;;GAQG;AACH,eAAO,MAAM,oBAAoB,qFAMvB,CAAC;AAEX,2EAA2E;AAC3E,MAAM,WAAW,sBAAsB;IACrC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC,CAAC;IACrD,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACnD,eAAe,EAAE,iBAAiB,EAAE,CAAC;IACrC,SAAS,EAAE,kBAAkB,EAAE,CAAC;IAChC,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB;AAED;;;;;;GAMG;AACH,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,MAAM,WAAW,cAAc;IAC7B;;;;OAIG;IACH,iBAAiB,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC,kBAAkB,EAAE,QAAQ,CAAC,GAAG,SAAS,CAAC;CACxF;AAED,sDAAsD;AACtD,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAE5E;AAED;;;;GAIG;AACH,wBAAgB,yBAAyB,CACvC,IAAI,EAAE;IACJ,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACpC;;;;OAIG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAChC,GAAG,sBAAsB,EAC1B,OAAO,GAAE,cAAmB,GAC3B,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CA4CzB;AAED,MAAM,WAAW,kBAAmB,SAAQ,sBAAsB;IAChE,0EAA0E;IAC1E,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,qEAAqE;IACrE,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACpC,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;IACtC,mFAAmF;IACnF,gBAAgB,EAAE,kBAAkB,EAAE,CAAC;CACxC;AAED;;;;;GAKG;AACH,wBAAgB,2BAA2B,CACzC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAClC,kBAAkB,CAuHpB;AAOD;;;GAGG;AACH,wBAAgB,oBAAoB,CAClC,GAAG,EAAE,CAAC,CAAC,GAAG,GACT,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC,kBAAkB,EAAE,QAAQ,CAAC,GAAG,SAAS,CAqBpE"}
|
|
@@ -71,6 +71,22 @@ function isMaterialAssignmentShaped(value) {
|
|
|
71
71
|
return false;
|
|
72
72
|
return typeof value.materialId === 'string';
|
|
73
73
|
}
|
|
74
|
+
/**
|
|
75
|
+
* Provenance fields that ride on the wire under `IFCLITE_ATTR.META`.
|
|
76
|
+
*
|
|
77
|
+
* An allowlist, not `meta` wholesale: `ifcClass` already has a wire home
|
|
78
|
+
* (`bsi::ifc::class`) and `schemaVersion` is re-derived by the reader, so
|
|
79
|
+
* carrying them here would give two writers for one fact. Every key
|
|
80
|
+
* listed is fixed when the entity is created — see the `META` doc
|
|
81
|
+
* comment in `@ifc-lite/ifcx` for why that matters.
|
|
82
|
+
*/
|
|
83
|
+
export const PROVENANCE_META_KEYS = [
|
|
84
|
+
'createdBy',
|
|
85
|
+
'createdAt',
|
|
86
|
+
'lastEditedBy',
|
|
87
|
+
'lastEditedAt',
|
|
88
|
+
'previousPath',
|
|
89
|
+
];
|
|
74
90
|
/** Attribute key for one pset property / quantity. */
|
|
75
91
|
export function structuredAttributeKey(setName, name) {
|
|
76
92
|
return `${V5A_ATTR_PREFIX}${setName}::${name}`;
|
|
@@ -108,6 +124,19 @@ export function flattenStructuredBranches(json, options = {}) {
|
|
|
108
124
|
});
|
|
109
125
|
out[IFCLITE_ATTR.GEOMETRY_REF] = entries.length === 1 ? entries[0] : entries;
|
|
110
126
|
}
|
|
127
|
+
// Provenance last, and only when there is some: an entity that knows
|
|
128
|
+
// nothing about its own origin emits exactly the bytes it did before
|
|
129
|
+
// this carrier existed, rather than an empty object that every
|
|
130
|
+
// consumer would have to learn to ignore.
|
|
131
|
+
const provenance = {};
|
|
132
|
+
for (const key of PROVENANCE_META_KEYS) {
|
|
133
|
+
const value = json.meta?.[key];
|
|
134
|
+
if (value !== undefined)
|
|
135
|
+
provenance[key] = value;
|
|
136
|
+
}
|
|
137
|
+
if (Object.keys(provenance).length > 0) {
|
|
138
|
+
out[IFCLITE_ATTR.META] = provenance;
|
|
139
|
+
}
|
|
111
140
|
return out;
|
|
112
141
|
}
|
|
113
142
|
/**
|
|
@@ -124,7 +153,26 @@ export function inflateStructuredAttributes(attributes) {
|
|
|
124
153
|
let materials = [];
|
|
125
154
|
let geometryRefs = [];
|
|
126
155
|
const geometryCarriers = [];
|
|
156
|
+
const meta = {};
|
|
127
157
|
for (const [key, value] of Object.entries(attributes)) {
|
|
158
|
+
if (key === IFCLITE_ATTR.META) {
|
|
159
|
+
// Shape-gated like every other carrier: a foreign value under this
|
|
160
|
+
// key stays a flat attribute rather than being read as provenance.
|
|
161
|
+
if (value !== null && typeof value === 'object' && !Array.isArray(value)) {
|
|
162
|
+
for (const provKey of PROVENANCE_META_KEYS) {
|
|
163
|
+
const provValue = value[provKey];
|
|
164
|
+
// Strings only. Every provenance field is a string, and a
|
|
165
|
+
// foreign wire is not a reason to widen what lands in the doc
|
|
166
|
+
// — `privacy.ts` writes `null` to mean "redacted", which is
|
|
167
|
+
// the same statement as "absent" once it reaches a reader.
|
|
168
|
+
if (typeof provValue === 'string')
|
|
169
|
+
meta[provKey] = provValue;
|
|
170
|
+
}
|
|
171
|
+
continue;
|
|
172
|
+
}
|
|
173
|
+
flat[key] = value;
|
|
174
|
+
continue;
|
|
175
|
+
}
|
|
128
176
|
if (key === IFCLITE_ATTR.CLASSIFICATIONS) {
|
|
129
177
|
// `[].every(...)` is vacuously true, so an empty array must be
|
|
130
178
|
// excluded explicitly — otherwise it inflates into an empty
|
|
@@ -213,6 +261,7 @@ export function inflateStructuredAttributes(attributes) {
|
|
|
213
261
|
geometryRefs,
|
|
214
262
|
geometryRefRecord: geometryRefs.length > 0 ? { geomIds: geometryRefs } : undefined,
|
|
215
263
|
geometryCarriers,
|
|
264
|
+
meta,
|
|
216
265
|
};
|
|
217
266
|
}
|
|
218
267
|
function isGeometryRefCarrierShaped(value) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"structured-attrs.js","sourceRoot":"","sources":["../../src/snapshot/structured-attrs.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAE/D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AAEH,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,oBAAoB,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAClG,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC;AACzB,OAAO,EACL,YAAY,EACZ,WAAW,GAKZ,MAAM,kBAAkB,CAAC;AAE1B,wEAAwE;AACxE,mEAAmE;AACnE,OAAO,EAAE,eAAe,EAAE,CAAC;AAE3B;;;;;GAKG;AACH,MAAM,WAAW,GAAG,QAAQ,CAAC;AAE7B,+EAA+E;AAC/E,MAAM,UAAU,GAAG,OAAO,CAAC;AAE3B;;;;;;GAMG;AACH,MAAM,UAAU,qBAAqB,CAAC,KAAc;IAClD,OAAO,oBAAoB,CAAC,KAAK,CAAC,CAAC;AACrC,CAAC;AAED,SAAS,yBAAyB,CAAC,KAAc;IAC/C,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACtF,MAAM,MAAM,GAAG,KAAgC,CAAC;IAChD,OAAO,OAAO,MAAM,CAAC,MAAM,KAAK,QAAQ,IAAI,OAAO,MAAM,CAAC,IAAI,KAAK,QAAQ,CAAC;AAC9E,CAAC;AAED,SAAS,0BAA0B,CAAC,KAAc;IAChD,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACtF,OAAO,OAAQ,KAAiC,CAAC,UAAU,KAAK,QAAQ,CAAC;AAC3E,CAAC;
|
|
1
|
+
{"version":3,"file":"structured-attrs.js","sourceRoot":"","sources":["../../src/snapshot/structured-attrs.ts"],"names":[],"mappings":"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"}
|
|
@@ -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,EAAoC,MAAM,gBAAgB,CAAC;AACjF,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC;AAMzB,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;CACxB;AAED,wBAAgB,cAAc,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,OAAO,GAAE,eAAoB,GAAG,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,EAAoC,MAAM,gBAAgB,CAAC;AACjF,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC;AAMzB,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;CACxB;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
|
@@ -38,7 +38,20 @@ export function snapshotToIfcx(doc, options = {}) {
|
|
|
38
38
|
for (const k of inheritsKeys)
|
|
39
39
|
node.inherits[k] = json.inherits[k];
|
|
40
40
|
}
|
|
41
|
-
|
|
41
|
+
// `seedFromIfcx` treats a literal `null` attribute value as an IFCX
|
|
42
|
+
// removal opinion and never stores it (see from-ifcx.ts) — so a
|
|
43
|
+
// doc attribute holding `null` (e.g. a root attribute the user
|
|
44
|
+
// cleared, mirrored via mutation-bridge.ts's `toScalar`) must not
|
|
45
|
+
// be emitted as-is: the very next seed would silently drop it,
|
|
46
|
+
// disagreeing with what this writer just produced. Match the
|
|
47
|
+
// reader's contract on the way out instead of losing the key on
|
|
48
|
+
// the next round-trip.
|
|
49
|
+
const flattened = flattenStructuredBranches(json, { geometryRecordFor });
|
|
50
|
+
const attributes = {};
|
|
51
|
+
for (const [key, value] of Object.entries(flattened)) {
|
|
52
|
+
if (value !== null)
|
|
53
|
+
attributes[key] = value;
|
|
54
|
+
}
|
|
42
55
|
if (Object.keys(attributes).length > 0) {
|
|
43
56
|
node.attributes = attributes;
|
|
44
57
|
}
|