@ifc-lite/parser 2.1.9 → 2.3.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.
@@ -0,0 +1,309 @@
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 { deterministicGlobalId } from './deterministic-global-id.js';
5
+ // ─────────────────────────────────────────────────────────────────────────
6
+ // STEP encoding helpers (kept local — same convention as @ifc-lite/create)
7
+ // ─────────────────────────────────────────────────────────────────────────
8
+ function escStr(s) {
9
+ return s.replace(/\\/g, '\\\\').replace(/'/g, "''");
10
+ }
11
+ function optStr(v) {
12
+ return v === undefined || v === null || v === '' ? '$' : `'${escStr(v)}'`;
13
+ }
14
+ function optEnum(v) {
15
+ return v === undefined || v === null || v === '' ? '$' : `.${v}.`;
16
+ }
17
+ function optBool(v) {
18
+ return v === undefined || v === null ? '$' : v ? '.T.' : '.F.';
19
+ }
20
+ function optReal(v) {
21
+ if (v === undefined || v === null || !Number.isFinite(v))
22
+ return '$';
23
+ // Integer-format avoids "1.0" → "1." re-import differences across viewers.
24
+ return Number.isInteger(v) ? `${v}.` : String(v);
25
+ }
26
+ function ownerRef(ownerHistoryId) {
27
+ return ownerHistoryId !== undefined ? `#${ownerHistoryId}` : '$';
28
+ }
29
+ /**
30
+ * Format seconds as an ISO 8601 duration string suitable for IfcDuration.
31
+ * Prefers the coarsest integer unit that divides cleanly to avoid noisy
32
+ * "PT432000S" style output for round values like "P5D".
33
+ */
34
+ function secondsToIso8601Duration(seconds) {
35
+ if (!Number.isFinite(seconds) || seconds <= 0)
36
+ return 'PT0S';
37
+ if (seconds % 86_400 === 0)
38
+ return `P${seconds / 86_400}D`;
39
+ if (seconds % 3_600 === 0)
40
+ return `PT${seconds / 3_600}H`;
41
+ if (seconds % 60 === 0)
42
+ return `PT${seconds / 60}M`;
43
+ return `PT${Math.round(seconds)}S`;
44
+ }
45
+ function refList(ids) {
46
+ return ids.length === 0 ? '$' : `(${ids.map(id => `#${id}`).join(',')})`;
47
+ }
48
+ function ensureGlobalId(existing, seed) {
49
+ // Round-tripping should preserve whatever GlobalId the upstream extraction
50
+ // saw, even when it isn't exactly 22 chars (some authoring tools emit
51
+ // shorter ids). Only invent a deterministic value when the input is empty.
52
+ if (existing && existing.length > 0)
53
+ return existing;
54
+ return deterministicGlobalId(seed);
55
+ }
56
+ // ─────────────────────────────────────────────────────────────────────────
57
+ // Public — serializeScheduleToStep
58
+ // ─────────────────────────────────────────────────────────────────────────
59
+ export function serializeScheduleToStep(data, options) {
60
+ let nextId = options.nextId;
61
+ const lines = [];
62
+ const owner = ownerRef(options.ownerHistoryId);
63
+ const stats = {
64
+ workSchedules: 0,
65
+ tasks: 0,
66
+ taskTimes: 0,
67
+ sequences: 0,
68
+ lagTimes: 0,
69
+ assignsToControl: 0,
70
+ assignsToProcess: 0,
71
+ relNests: 0,
72
+ };
73
+ /** ScheduleTaskInfo.globalId → fresh express ID we just allocated. */
74
+ const taskExpressIdByGlobalId = new Map();
75
+ /** WorkScheduleInfo.globalId → fresh express ID we just allocated. */
76
+ const scheduleExpressIdByGlobalId = new Map();
77
+ // ── 1. Work schedules / work plans ────────────────────────────────
78
+ for (const ws of data.workSchedules) {
79
+ const id = nextId++;
80
+ scheduleExpressIdByGlobalId.set(ws.globalId, id);
81
+ lines.push(buildWorkControl(id, ws, owner));
82
+ stats.workSchedules += 1;
83
+ }
84
+ // ── 2. Task times + tasks ─────────────────────────────────────────
85
+ for (const task of data.tasks) {
86
+ let taskTimeId;
87
+ if (taskHasTimeData(task)) {
88
+ taskTimeId = nextId++;
89
+ lines.push(buildTaskTime(taskTimeId, task));
90
+ stats.taskTimes += 1;
91
+ }
92
+ const id = nextId++;
93
+ taskExpressIdByGlobalId.set(task.globalId, id);
94
+ lines.push(buildTask(id, task, owner, taskTimeId));
95
+ stats.tasks += 1;
96
+ }
97
+ // ── 3. Schedule → tasks (IfcRelAssignsToControl) ──────────────────
98
+ for (const ws of data.workSchedules) {
99
+ const controlId = scheduleExpressIdByGlobalId.get(ws.globalId);
100
+ if (controlId === undefined)
101
+ continue;
102
+ const taskIds = [];
103
+ for (const taskGid of ws.taskGlobalIds) {
104
+ const tid = taskExpressIdByGlobalId.get(taskGid);
105
+ if (tid !== undefined)
106
+ taskIds.push(tid);
107
+ }
108
+ if (taskIds.length === 0)
109
+ continue;
110
+ const relId = nextId++;
111
+ const relGid = deterministicGlobalId(`rel-control|${ws.globalId}`);
112
+ lines.push(`#${relId}=IFCRELASSIGNSTOCONTROL('${relGid}',${owner},$,$,${refList(taskIds)},$,#${controlId});`);
113
+ stats.assignsToControl += 1;
114
+ }
115
+ // ── 4. Task hierarchy (IfcRelNests) ──────────────────────────────
116
+ for (const parent of data.tasks) {
117
+ if (parent.childGlobalIds.length === 0)
118
+ continue;
119
+ const parentId = taskExpressIdByGlobalId.get(parent.globalId);
120
+ if (parentId === undefined)
121
+ continue;
122
+ const childIds = [];
123
+ for (const childGid of parent.childGlobalIds) {
124
+ const cid = taskExpressIdByGlobalId.get(childGid);
125
+ if (cid !== undefined)
126
+ childIds.push(cid);
127
+ }
128
+ if (childIds.length === 0)
129
+ continue;
130
+ const relId = nextId++;
131
+ const relGid = deterministicGlobalId(`rel-nests|${parent.globalId}`);
132
+ lines.push(`#${relId}=IFCRELNESTS('${relGid}',${owner},$,$,#${parentId},${refList(childIds)});`);
133
+ stats.relNests += 1;
134
+ }
135
+ // ── 5. Products → tasks (IfcRelAssignsToProcess) ─────────────────
136
+ for (const task of data.tasks) {
137
+ if (task.productExpressIds.length === 0 && task.productGlobalIds.length === 0)
138
+ continue;
139
+ const taskId = taskExpressIdByGlobalId.get(task.globalId);
140
+ if (taskId === undefined)
141
+ continue;
142
+ const productIds = resolveProductIds(task, options.resolveProductExpressId);
143
+ if (productIds.length === 0)
144
+ continue;
145
+ const relId = nextId++;
146
+ const relGid = deterministicGlobalId(`rel-process|${task.globalId}`);
147
+ lines.push(`#${relId}=IFCRELASSIGNSTOPROCESS('${relGid}',${owner},$,$,${refList(productIds)},$,#${taskId},$);`);
148
+ stats.assignsToProcess += 1;
149
+ }
150
+ // ── 6. Sequences (IfcLagTime + IfcRelSequence) ───────────────────
151
+ for (const seq of data.sequences) {
152
+ const relatingId = taskExpressIdByGlobalId.get(seq.relatingTaskGlobalId);
153
+ const relatedId = taskExpressIdByGlobalId.get(seq.relatedTaskGlobalId);
154
+ if (relatingId === undefined || relatedId === undefined)
155
+ continue;
156
+ // Preserve lag on export even when the upstream extractor only knew the
157
+ // numeric seconds value (e.g. IFC2X3 round-trips where the original
158
+ // IfcDuration string got dropped). We reconstruct an ISO 8601 duration so
159
+ // the emitted IfcLagTime stays schema-valid.
160
+ const lagDuration = seq.timeLagDuration
161
+ ?? (seq.timeLagSeconds !== undefined && seq.timeLagSeconds !== 0
162
+ ? secondsToIso8601Duration(seq.timeLagSeconds)
163
+ : undefined);
164
+ let lagRef = '$';
165
+ if (lagDuration) {
166
+ const lagId = nextId++;
167
+ lines.push(`#${lagId}=IFCLAGTIME($,$,$,IFCDURATION('${escStr(lagDuration)}'),.WORKTIME.);`);
168
+ lagRef = `#${lagId}`;
169
+ stats.lagTimes += 1;
170
+ }
171
+ const relId = nextId++;
172
+ const seqGid = ensureGlobalId(seq.globalId, `rel-seq|${seq.relatingTaskGlobalId}|${seq.relatedTaskGlobalId}`);
173
+ const seqType = optEnum(seq.sequenceType ?? 'FINISH_START');
174
+ const userDef = optStr(seq.userDefinedSequenceType);
175
+ lines.push(`#${relId}=IFCRELSEQUENCE('${seqGid}',${owner},$,$,#${relatingId},#${relatedId},${lagRef},${seqType},${userDef});`);
176
+ stats.sequences += 1;
177
+ }
178
+ return { lines, nextId, stats };
179
+ }
180
+ // ─────────────────────────────────────────────────────────────────────────
181
+ // Internal builders
182
+ // ─────────────────────────────────────────────────────────────────────────
183
+ function buildWorkControl(id, ws, owner) {
184
+ const entity = ws.kind === 'WorkPlan' ? 'IFCWORKPLAN' : 'IFCWORKSCHEDULE';
185
+ const globalId = ensureGlobalId(ws.globalId, `ws|${ws.kind}|${ws.name}`);
186
+ // Deterministic fallback ordering — don't touch `Date.now()` here, it would
187
+ // give identical inputs different STEP output and break diff-based export
188
+ // round-trips. Anchor on whatever the upstream extractor already picked,
189
+ // then on the schedule's own start/finish time.
190
+ const creationDate = ws.creationDate ?? ws.startTime ?? ws.finishTime ?? '1970-01-01T00:00:00';
191
+ // `StartTime` is REQUIRED on IfcWorkControl in IFC4 (ENTITY IfcWorkControl
192
+ // ... StartTime : IfcDateTime) — emitting `$` would fail schema
193
+ // validation on strict viewers. Fall back through the same deterministic
194
+ // chain as `creationDate`. `FinishTime` IS optional, but writing a real
195
+ // value is still friendlier than `$` when the schedule's own `startTime`
196
+ // is the only datum we have.
197
+ const startTime = ws.startTime ?? ws.finishTime ?? creationDate;
198
+ const finishTime = ws.finishTime ?? startTime;
199
+ // IFC4: GlobalId, OwnerHistory, Name, Description, ObjectType,
200
+ // Identification, CreationDate, Creators, Purpose,
201
+ // Duration, TotalFloat, StartTime, FinishTime, PredefinedType
202
+ return [
203
+ `#${id}=${entity}(`,
204
+ `'${globalId}',`,
205
+ `${owner},`,
206
+ `'${escStr(ws.name)}',`,
207
+ `${optStr(ws.description)},`,
208
+ `$,`,
209
+ `${optStr(ws.identification)},`,
210
+ `'${escStr(creationDate)}',`,
211
+ `$,`,
212
+ `${optStr(ws.purpose)},`,
213
+ `${optStr(ws.duration)},`,
214
+ `$,`,
215
+ `'${escStr(startTime)}',`,
216
+ `'${escStr(finishTime)}',`,
217
+ `${optEnum(ws.predefinedType)});`,
218
+ ].join('');
219
+ }
220
+ function taskHasTimeData(task) {
221
+ const t = task.taskTime;
222
+ if (!t)
223
+ return false;
224
+ return Boolean(t.scheduleStart || t.scheduleFinish || t.scheduleDuration
225
+ || t.actualStart || t.actualFinish || t.actualDuration
226
+ || t.earlyStart || t.earlyFinish || t.lateStart || t.lateFinish
227
+ || t.freeFloat || t.totalFloat || t.remainingTime || t.statusTime
228
+ || t.durationType || t.isCritical !== undefined || t.completion !== undefined);
229
+ }
230
+ function buildTaskTime(id, task) {
231
+ const t = task.taskTime;
232
+ // IFC4: Name, DataOrigin, UDDataOrigin, DurationType,
233
+ // ScheduleDuration, ScheduleStart, ScheduleFinish,
234
+ // Early/Late Start/Finish, FreeFloat, TotalFloat, IsCritical,
235
+ // StatusTime, ActualDuration, ActualStart, ActualFinish,
236
+ // RemainingTime, Completion
237
+ return [
238
+ `#${id}=IFCTASKTIME(`,
239
+ `$,$,$,`,
240
+ `${optEnum(t.durationType)},`,
241
+ `${optStr(t.scheduleDuration)},`,
242
+ `${optStr(t.scheduleStart)},`,
243
+ `${optStr(t.scheduleFinish)},`,
244
+ `${optStr(t.earlyStart)},`,
245
+ `${optStr(t.earlyFinish)},`,
246
+ `${optStr(t.lateStart)},`,
247
+ `${optStr(t.lateFinish)},`,
248
+ `${optStr(t.freeFloat)},`,
249
+ `${optStr(t.totalFloat)},`,
250
+ `${optBool(t.isCritical)},`,
251
+ `${optStr(t.statusTime)},`,
252
+ `${optStr(t.actualDuration)},`,
253
+ `${optStr(t.actualStart)},`,
254
+ `${optStr(t.actualFinish)},`,
255
+ `${optStr(t.remainingTime)},`,
256
+ `${optReal(t.completion)});`,
257
+ ].join('');
258
+ }
259
+ function buildTask(id, task, owner, taskTimeId) {
260
+ const globalId = ensureGlobalId(task.globalId, `task|${task.name}`);
261
+ const taskTimeRef = taskTimeId !== undefined ? `#${taskTimeId}` : '$';
262
+ // IFC4: GlobalId, OwnerHistory, Name, Description, ObjectType,
263
+ // Identification, LongDescription, Status, WorkMethod, IsMilestone,
264
+ // Priority, TaskTime, PredefinedType
265
+ return [
266
+ `#${id}=IFCTASK(`,
267
+ `'${globalId}',`,
268
+ `${owner},`,
269
+ `'${escStr(task.name)}',`,
270
+ `${optStr(task.description)},`,
271
+ `${optStr(task.objectType)},`,
272
+ `${optStr(task.identification)},`,
273
+ `${optStr(task.longDescription)},`,
274
+ `${optStr(task.status)},`,
275
+ `${optStr(task.workMethod)},`,
276
+ `${task.isMilestone ? '.T.' : '.F.'},`,
277
+ `${task.priority !== undefined ? Math.trunc(task.priority) : '$'},`,
278
+ `${taskTimeRef},`,
279
+ `${optEnum(task.predefinedType)});`,
280
+ ].join('');
281
+ }
282
+ function resolveProductIds(task, resolver) {
283
+ // Prefer expressIds when they're present and non-zero (the in-memory schedule
284
+ // path). When only globalIds are known (e.g. round-tripping through the SDK
285
+ // boundary), use the caller-supplied resolver to look them up against the
286
+ // current model — falls back to expressIds whenever the resolver returns
287
+ // undefined.
288
+ //
289
+ // Walk the union of both arrays so global-id-only entries (common for
290
+ // generated schedules where expressId was never filled in) still hit the
291
+ // resolver instead of being silently dropped.
292
+ const out = [];
293
+ const count = Math.max(task.productExpressIds.length, task.productGlobalIds.length);
294
+ for (let i = 0; i < count; i++) {
295
+ const expressId = task.productExpressIds[i];
296
+ const globalId = task.productGlobalIds[i];
297
+ if (resolver && globalId) {
298
+ const resolved = resolver(globalId);
299
+ if (resolved !== undefined && resolved > 0) {
300
+ out.push(resolved);
301
+ continue;
302
+ }
303
+ }
304
+ if (expressId !== undefined && expressId > 0)
305
+ out.push(expressId);
306
+ }
307
+ return out;
308
+ }
309
+ //# sourceMappingURL=schedule-serializer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schedule-serializer.js","sourceRoot":"","sources":["../src/schedule-serializer.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,24 +1,24 @@
1
1
  {
2
2
  "name": "@ifc-lite/parser",
3
- "version": "2.1.9",
3
+ "version": "2.3.0",
4
4
  "description": "IFC/STEP parser for IFC-Lite",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
7
7
  "types": "./dist/index.d.ts",
8
8
  "exports": {
9
9
  ".": {
10
- "import": "./dist/index.js",
11
- "types": "./dist/index.d.ts"
10
+ "types": "./dist/index.d.ts",
11
+ "import": "./dist/index.js"
12
12
  },
13
13
  "./browser": {
14
- "import": "./dist/browser.js",
15
- "types": "./dist/browser.d.ts"
14
+ "types": "./dist/browser.d.ts",
15
+ "import": "./dist/browser.js"
16
16
  }
17
17
  },
18
18
  "dependencies": {
19
- "@ifc-lite/data": "^1.15.2",
20
19
  "@ifc-lite/encoding": "^1.14.6",
21
- "@ifc-lite/ifcx": "^2.0.2"
20
+ "@ifc-lite/data": "^1.15.2",
21
+ "@ifc-lite/ifcx": "^2.1.0"
22
22
  },
23
23
  "devDependencies": {
24
24
  "typescript": "^5.3.0",