@ifc-lite/parser 6.4.0 → 6.5.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.
@@ -4,23 +4,27 @@
4
4
  /**
5
5
  * Schedule (4D) extractor — walks IfcTask, IfcTaskTime, IfcRelSequence,
6
6
  * IfcRelAssignsToProcess, IfcRelAssignsToControl, IfcRelNests, IfcWorkSchedule,
7
- * IfcWorkPlan, IfcLagTime entities in a parsed IfcDataStore and assembles a
8
- * normalized ScheduleExtraction that the viewer can drive a Gantt/4D
9
- * animation from.
7
+ * IfcWorkPlan, IfcWorkCalendar, IfcLagTime entities in a parsed IfcDataStore
8
+ * and assembles a normalized ScheduleExtraction that the viewer can drive a
9
+ * Gantt/4D animation from.
10
10
  *
11
11
  * Handles IFC4 / IFC4X3. IFC2X3 has a different IfcTask layout (no TaskTime
12
- * attribute, ScheduleStart/ScheduleFinish/TaskOwner instead) and is supported
13
- * with best-effort degradation.
12
+ * attribute, ScheduleStart/ScheduleFinish/TaskOwner instead) and a different,
13
+ * older IfcWorkCalendar layout; both are out of scope and best-effort
14
+ * degrade (task metadata without dates; calendars simply aren't extracted).
14
15
  *
15
16
  * STEP attribute-index layouts, the record types themselves, and the small
16
- * pure/single-entity helpers (`asString` et al., `extractTaskTime`,
17
- * `extractLagTimeSeconds`) live in `schedule-types.ts` — this file owns only
18
- * the cross-entity orchestration (the multi-pass walk below that wires those
19
- * records together via their IFC relationships).
17
+ * pure/single-entity helpers live in `schedule-types.ts` (tasks/schedules)
18
+ * and `schedule-calendar-types.ts` (calendars) — this file owns only the
19
+ * cross-entity orchestration (the multi-pass walk below that wires those
20
+ * records together via their IFC relationships); the calendar-assignment
21
+ * half of that walk is in `schedule-control-extractor.ts`, split out
22
+ * purely to keep this file under the ~400-line module-size guideline.
20
23
  */
21
24
  import { EntityExtractor } from './entity-extractor.js';
22
25
  import { parseIso8601Duration } from './iso8601-duration.js';
23
- import { TASK_ATTR, TASK_ATTR_2X3, REL_SEQUENCE_ATTR, REL_ASSIGNS_TO_PROCESS_ATTR, REL_ASSIGNS_TO_CONTROL_ATTR, REL_NESTS_ATTR, WORK_SCHEDULE_ATTR, WORK_PLAN_ATTR, asString, asNumber, asBoolean, asEnum, asRef, asRefList, sequenceTypeFromString, extractTaskTime, extractLagTimeSeconds, } from './schedule-types.js';
26
+ import { TASK_ATTR, TASK_ATTR_2X3, REL_SEQUENCE_ATTR, REL_ASSIGNS_TO_PROCESS_ATTR, REL_ASSIGNS_TO_CONTROL_ATTR, REL_NESTS_ATTR, asString, asNumber, asBoolean, asEnum, asRef, asRefList, sequenceTypeFromString, extractTaskTime, extractLagTimeSeconds, } from './schedule-types.js';
27
+ import { extractWorkScheduleInfo, extractWorkCalendars, tryAssignCalendar, } from './schedule-control-extractor.js';
24
28
  // Re-exported for backward compatibility — this is where consumers
25
29
  // (including this package's own public surface, see index.ts) have always
26
30
  // imported it from. The implementation itself now lives in
@@ -37,7 +41,7 @@ export { parseIso8601Duration };
37
41
  */
38
42
  export function extractScheduleOnDemand(store) {
39
43
  if (!store.source?.length) {
40
- return { workSchedules: [], tasks: [], sequences: [], hasSchedule: false };
44
+ return { workSchedules: [], tasks: [], sequences: [], workCalendars: [], hasSchedule: false };
41
45
  }
42
46
  const byType = store.entityIndex.byType;
43
47
  const taskIds = byType.get('IFCTASK') ?? [];
@@ -47,13 +51,18 @@ export function extractScheduleOnDemand(store) {
47
51
  const relAssignsProcessIds = byType.get('IFCRELASSIGNSTOPROCESS') ?? [];
48
52
  const relAssignsControlIds = byType.get('IFCRELASSIGNSTOCONTROL') ?? [];
49
53
  const relNestsIds = byType.get('IFCRELNESTS') ?? [];
54
+ const workCalendarIds = byType.get('IFCWORKCALENDAR') ?? [];
55
+ // A calendar-only file (no tasks/schedules/sequences yet) still counts as
56
+ // real 4D data worth surfacing, so it flips `hasAny`/`hasSchedule` exactly
57
+ // like the other schedule entity types.
50
58
  const hasAny = taskIds.length +
51
59
  workScheduleIds.length +
52
60
  workPlanIds.length +
53
- relSeqIds.length >
61
+ relSeqIds.length +
62
+ workCalendarIds.length >
54
63
  0;
55
64
  if (!hasAny) {
56
- return { workSchedules: [], tasks: [], sequences: [], hasSchedule: false };
65
+ return { workSchedules: [], tasks: [], sequences: [], workCalendars: [], hasSchedule: false };
57
66
  }
58
67
  const extractor = new EntityExtractor(store.source);
59
68
  const schemaIs2x3 = store.schemaVersion === 'IFC2X3';
@@ -181,53 +190,21 @@ export function extractScheduleOnDemand(store) {
181
190
  globalIdByExpressId.set(productId, gid);
182
191
  }
183
192
  }
184
- // Pass 4: extract work schedules / work plans.
193
+ // Pass 4: extract work schedules / work plans. The per-entity decode
194
+ // lives in `schedule-control-extractor.ts` alongside the calendar one.
185
195
  const workSchedules = [];
186
196
  const scheduleByExpressId = new Map();
187
- const extractSchedule = (expressId, kind) => {
188
- const ref = store.entityIndex.byId.get(expressId);
189
- if (!ref)
190
- return null;
191
- const entity = extractor.extractEntity(ref);
192
- if (!entity)
193
- return null;
194
- const a = entity.attributes || [];
195
- const layout = kind === 'WorkPlan' ? WORK_PLAN_ATTR : WORK_SCHEDULE_ATTR;
196
- const globalId = asString(a[layout.GlobalId]) ?? '';
197
- const info = {
198
- expressId,
199
- kind,
200
- globalId,
201
- name: asString(a[layout.Name]) ?? kind,
202
- description: asString(a[layout.Description]),
203
- identification: asString(a[layout.Identification]),
204
- creationDate: asString(a[layout.CreationDate]),
205
- purpose: asString(a[layout.Purpose]),
206
- duration: asString(a[layout.Duration]),
207
- startTime: asString(a[layout.StartTime]),
208
- finishTime: asString(a[layout.FinishTime]),
209
- predefinedType: asEnum(a[layout.PredefinedType]),
210
- taskGlobalIds: [],
211
- childScheduleGlobalIds: [],
212
- };
213
- if (globalId)
214
- globalIdByExpressId.set(expressId, globalId);
215
- return info;
216
- };
217
- for (const id of workScheduleIds) {
218
- const info = extractSchedule(id, 'WorkSchedule');
219
- if (info) {
220
- workSchedules.push(info);
221
- scheduleByExpressId.set(id, info);
222
- }
223
- }
224
- for (const id of workPlanIds) {
225
- const info = extractSchedule(id, 'WorkPlan');
226
- if (info) {
197
+ const collectSchedules = (ids, kind) => {
198
+ for (const id of ids) {
199
+ const info = extractWorkScheduleInfo(extractor, store, id, kind, globalIdByExpressId);
200
+ if (!info)
201
+ continue;
227
202
  workSchedules.push(info);
228
203
  scheduleByExpressId.set(id, info);
229
204
  }
230
- }
205
+ };
206
+ collectSchedules(workScheduleIds, 'WorkSchedule');
207
+ collectSchedules(workPlanIds, 'WorkPlan');
231
208
  // Pass 4b: walk IfcRelNests again — IfcWorkPlan nesting IfcWorkSchedule.
232
209
  // Real-world files use IfcRelNests for this grouping (confirmed against the
233
210
  // buildingSMART IFC4 spec's own reference example), distinct from Pass 2's
@@ -270,17 +247,26 @@ export function extractScheduleOnDemand(store) {
270
247
  }
271
248
  }
272
249
  }
273
- // Pass 5: IfcRelAssignsToControl — map schedules to tasks, and (a second,
250
+ // Pass 4c: extract IfcWorkCalendar entities. Collection + the
251
+ // calendar-assignment branch of Pass 5 live in
252
+ // `schedule-control-extractor.ts` — split out purely for module size.
253
+ const { workCalendars, calendarByExpressId } = extractWorkCalendars(extractor, store, schemaIs2x3 ? [] : workCalendarIds);
254
+ // Pass 5: IfcRelAssignsToControl — map schedules to tasks, (a second,
274
255
  // distinct grouping path from Pass 4b's IfcRelNests) IfcWorkPlan grouping
275
- // IfcWorkSchedule. The SDK's scripting bridge
276
- // (`assignSchedulesToWorkPlan` in packages/create/src/ifc-creator.ts)
277
- // emits exactly this relation — RelatingControl the plan, RelatedObjects
278
- // the schedules — not IfcRelNests, so a plan grouped through that bridge
279
- // must resolve here too or the SDK-authored grouping never reads back.
256
+ // IfcWorkSchedule, and (via `tryAssignCalendar`) calendar assignment to
257
+ // tasks/schedules. The SDK's scripting bridge (`assignSchedulesToWorkPlan`
258
+ // in packages/create/src/ifc-creator.ts) emits exactly this relation —
259
+ // RelatingControl the plan, RelatedObjects the schedules — not
260
+ // IfcRelNests, so a plan grouped through that bridge must resolve here
261
+ // too or the SDK-authored grouping never reads back.
280
262
  // If a source file expresses the same WorkPlan->WorkSchedule pair through
281
263
  // *both* relations, Pass 4b (IfcRelNests) runs first and wins:
282
264
  // `parentPlanGlobalId` is set-once (guarded below and in Pass 4b), and
283
265
  // `childScheduleGlobalIds` is deduped so the pair is not double-counted.
266
+ // `tryAssignCalendar` only ever touches `calendarGlobalIds`, so a task
267
+ // carrying both a controlling schedule and a calendar (via two separate
268
+ // relation instances) gets both fields populated without either clobbering
269
+ // the other.
284
270
  for (const relId of relAssignsControlIds) {
285
271
  const ref = store.entityIndex.byId.get(relId);
286
272
  if (!ref)
@@ -293,6 +279,9 @@ export function extractScheduleOnDemand(store) {
293
279
  const objects = asRefList(a[REL_ASSIGNS_TO_CONTROL_ATTR.RelatedObjects]);
294
280
  if (controlId === undefined)
295
281
  continue;
282
+ if (tryAssignCalendar(controlId, objects, calendarByExpressId, taskByExpressId, scheduleByExpressId)) {
283
+ continue;
284
+ }
296
285
  const schedule = scheduleByExpressId.get(controlId);
297
286
  if (!schedule)
298
287
  continue;
@@ -361,6 +350,7 @@ export function extractScheduleOnDemand(store) {
361
350
  workSchedules,
362
351
  tasks: Array.from(taskByExpressId.values()),
363
352
  sequences,
353
+ workCalendars,
364
354
  hasSchedule: true,
365
355
  };
366
356
  }
@@ -1 +1 @@
1
- {"version":3,"file":"schedule-extractor.js","sourceRoot":"","sources":["../src/schedule-extractor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"schedule-extractor.js","sourceRoot":"","sources":["../src/schedule-extractor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,50 @@
1
+ /**
2
+ * STEP-line builders for the calendar half of `schedule-serializer.ts` —
3
+ * IfcWorkCalendar and the IfcWorkTime / IfcRecurrencePattern / IfcTimePeriod
4
+ * entities its WorkingTimes/ExceptionTimes lists reference. Sibling of
5
+ * `schedule-serializer-builders.ts` (tasks/schedules), split the same way
6
+ * the read side splits `schedule-calendar-types.ts` from
7
+ * `schedule-types.ts`: one concern per file, and both stay under the
8
+ * ~400-line module-size guideline.
9
+ *
10
+ * IfcWorkCalendar does NOT share `buildWorkControl`'s line shape despite
11
+ * both extending IfcControl — IfcWorkSchedule/IfcWorkPlan go through
12
+ * IfcWorkControl (CreationDate..FinishTime), IfcWorkCalendar does not, so
13
+ * everything from attribute index 6 on differs and a shared builder would
14
+ * be a branch on entity type wrapping two disjoint tails.
15
+ */
16
+ import type { WorkCalendarInfo, WorkTimeInfo } from './schedule-calendar-types.js';
17
+ /** An IfcWorkTime line plus the ids of the nested entities emitted for it. */
18
+ export interface BuiltWorkTime {
19
+ lines: string[];
20
+ /** Express id of the emitted IFCWORKTIME. */
21
+ workTimeId: number;
22
+ /** First free express id after everything this call emitted. */
23
+ nextId: number;
24
+ /** How many IFCRECURRENCEPATTERN entities were emitted (0 or 1). */
25
+ recurrencePatterns: number;
26
+ /** How many IFCTIMEPERIOD entities were emitted. */
27
+ timePeriods: number;
28
+ }
29
+ /**
30
+ * Emit one IfcWorkTime, preceded by its IfcRecurrencePattern (and that
31
+ * pattern's IfcTimePeriod entities) when the record carries one. A
32
+ * WorkTimeInfo with no `recurrencePattern` emits `$` for that attribute and
33
+ * no extra entities.
34
+ */
35
+ export declare function buildWorkTime(startId: number, wt: WorkTimeInfo): BuiltWorkTime;
36
+ export interface BuiltWorkCalendar {
37
+ lines: string[];
38
+ calendarId: number;
39
+ nextId: number;
40
+ workTimes: number;
41
+ recurrencePatterns: number;
42
+ timePeriods: number;
43
+ }
44
+ /**
45
+ * Emit an IfcWorkCalendar and every IfcWorkTime (plus nested
46
+ * IfcRecurrencePattern / IfcTimePeriod) in its WorkingTimes and
47
+ * ExceptionTimes lists.
48
+ */
49
+ export declare function buildWorkCalendar(startId: number, cal: WorkCalendarInfo, owner: string): BuiltWorkCalendar;
50
+ //# sourceMappingURL=schedule-serializer-calendar-builders.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schedule-serializer-calendar-builders.d.ts","sourceRoot":"","sources":["../src/schedule-serializer-calendar-builders.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,YAAY,EAAyB,MAAM,8BAA8B,CAAC;AAG1G,8EAA8E;AAC9E,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,6CAA6C;IAC7C,UAAU,EAAE,MAAM,CAAC;IACnB,gEAAgE;IAChE,MAAM,EAAE,MAAM,CAAC;IACf,oEAAoE;IACpE,kBAAkB,EAAE,MAAM,CAAC;IAC3B,oDAAoD;IACpD,WAAW,EAAE,MAAM,CAAC;CACrB;AAoDD;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,YAAY,GAAG,aAAa,CA2B9E;AAED,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,MAAM,EACf,GAAG,EAAE,gBAAgB,EACrB,KAAK,EAAE,MAAM,GACZ,iBAAiB,CA0CnB"}
@@ -0,0 +1,126 @@
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 { escStr, optStr, optEnum, ensureGlobalId, refList } from './schedule-serializer-builders.js';
5
+ function buildTimePeriod(id, start, end) {
6
+ // IFC4: StartTime, EndTime (both IfcTime).
7
+ return `#${id}=IFCTIMEPERIOD('${escStr(start)}','${escStr(end)}');`;
8
+ }
9
+ /** Integer list attribute (`DayComponent` et al.) — `$` when empty, matching `refList`'s convention for an absent optional aggregate. */
10
+ function intList(values) {
11
+ return values.length === 0 ? '$' : `(${values.map(v => Math.trunc(v)).join(',')})`;
12
+ }
13
+ function optInt(v) {
14
+ return v === undefined || !Number.isFinite(v) ? '$' : String(Math.trunc(v));
15
+ }
16
+ /**
17
+ * Emit an IfcRecurrencePattern and any IfcTimePeriod entities it references.
18
+ * The nested entities are emitted first only for human readability — STEP
19
+ * itself allows forward `#N` references, and the rest of this serializer
20
+ * already relies on that ordering convention (`buildTaskTime` is emitted
21
+ * before its owning task for the same reason).
22
+ */
23
+ function buildRecurrencePattern(startId, pattern) {
24
+ let nextId = startId;
25
+ const lines = [];
26
+ const timePeriodIds = [];
27
+ for (const tp of pattern.timePeriods) {
28
+ const id = nextId++;
29
+ lines.push(buildTimePeriod(id, tp.start, tp.end));
30
+ timePeriodIds.push(id);
31
+ }
32
+ const patternId = nextId++;
33
+ // IFC4: RecurrenceType, DayComponent, WeekdayComponent, MonthComponent,
34
+ // Position, Interval, Occurrences, TimePeriods
35
+ lines.push([
36
+ `#${patternId}=IFCRECURRENCEPATTERN(`,
37
+ `${optEnum(pattern.recurrenceType)},`,
38
+ `${intList(pattern.dayComponent)},`,
39
+ `${intList(pattern.weekdayComponent)},`,
40
+ `${intList(pattern.monthComponent)},`,
41
+ `${optInt(pattern.position)},`,
42
+ `${optInt(pattern.interval)},`,
43
+ `${optInt(pattern.occurrences)},`,
44
+ `${refList(timePeriodIds)});`,
45
+ ].join(''));
46
+ return { lines, patternId, nextId, timePeriods: timePeriodIds.length };
47
+ }
48
+ /**
49
+ * Emit one IfcWorkTime, preceded by its IfcRecurrencePattern (and that
50
+ * pattern's IfcTimePeriod entities) when the record carries one. A
51
+ * WorkTimeInfo with no `recurrencePattern` emits `$` for that attribute and
52
+ * no extra entities.
53
+ */
54
+ export function buildWorkTime(startId, wt) {
55
+ let nextId = startId;
56
+ const lines = [];
57
+ let recurrenceRef = '$';
58
+ let recurrencePatterns = 0;
59
+ let timePeriods = 0;
60
+ if (wt.recurrencePattern) {
61
+ const built = buildRecurrencePattern(nextId, wt.recurrencePattern);
62
+ lines.push(...built.lines);
63
+ nextId = built.nextId;
64
+ recurrenceRef = `#${built.patternId}`;
65
+ recurrencePatterns = 1;
66
+ timePeriods = built.timePeriods;
67
+ }
68
+ const workTimeId = nextId++;
69
+ // IFC4 IfcWorkTime (IfcSchedulingTime: Name, DataOrigin,
70
+ // UserDefinedDataOrigin) + RecurrencePattern, Start, Finish.
71
+ lines.push([
72
+ `#${workTimeId}=IFCWORKTIME(`,
73
+ `${optStr(wt.name)},`,
74
+ `${optEnum(wt.dataOrigin)},`,
75
+ `${optStr(wt.userDefinedDataOrigin)},`,
76
+ `${recurrenceRef},`,
77
+ `${optStr(wt.start)},`,
78
+ `${optStr(wt.finish)});`,
79
+ ].join(''));
80
+ return { lines, workTimeId, nextId, recurrencePatterns, timePeriods };
81
+ }
82
+ /**
83
+ * Emit an IfcWorkCalendar and every IfcWorkTime (plus nested
84
+ * IfcRecurrencePattern / IfcTimePeriod) in its WorkingTimes and
85
+ * ExceptionTimes lists.
86
+ */
87
+ export function buildWorkCalendar(startId, cal, owner) {
88
+ let nextId = startId;
89
+ const lines = [];
90
+ let workTimes = 0;
91
+ let recurrencePatterns = 0;
92
+ let timePeriods = 0;
93
+ const emitTimes = (times) => {
94
+ const ids = [];
95
+ for (const wt of times) {
96
+ const built = buildWorkTime(nextId, wt);
97
+ lines.push(...built.lines);
98
+ nextId = built.nextId;
99
+ ids.push(built.workTimeId);
100
+ workTimes += 1;
101
+ recurrencePatterns += built.recurrencePatterns;
102
+ timePeriods += built.timePeriods;
103
+ }
104
+ return ids;
105
+ };
106
+ const workingIds = emitTimes(cal.workingTimes);
107
+ const exceptionIds = emitTimes(cal.exceptionTimes);
108
+ const calendarId = nextId++;
109
+ const globalId = ensureGlobalId(cal.globalId, `calendar|${cal.name}`);
110
+ // IFC4: GlobalId, OwnerHistory, Name, Description, ObjectType,
111
+ // Identification, WorkingTimes, ExceptionTimes, PredefinedType
112
+ lines.push([
113
+ `#${calendarId}=IFCWORKCALENDAR(`,
114
+ `'${globalId}',`,
115
+ `${owner},`,
116
+ `${optStr(cal.name)},`,
117
+ `${optStr(cal.description)},`,
118
+ `${optStr(cal.objectType)},`,
119
+ `${optStr(cal.identification)},`,
120
+ `${refList(workingIds)},`,
121
+ `${refList(exceptionIds)},`,
122
+ `${optEnum(cal.predefinedType)});`,
123
+ ].join(''));
124
+ return { lines, calendarId, nextId, workTimes, recurrencePatterns, timePeriods };
125
+ }
126
+ //# sourceMappingURL=schedule-serializer-calendar-builders.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schedule-serializer-calendar-builders.js","sourceRoot":"","sources":["../src/schedule-serializer-calendar-builders.ts"],"names":[],"mappings":"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"}
@@ -12,8 +12,10 @@
12
12
  * • a reference to the supplied `ownerHistoryId` for IfcRoot ownership
13
13
  * (pass `undefined` to emit `$`),
14
14
  * • IFC4-correct attribute counts and ordering — IfcWorkSchedule,
15
- * IfcTask + IfcTaskTime, IfcRelSequence + IfcLagTime, and the
16
- * IfcRelAssignsToControl / IfcRelAssignsToProcess / IfcRelNests edges.
15
+ * IfcTask + IfcTaskTime, IfcWorkCalendar + IfcWorkTime +
16
+ * IfcRecurrencePattern + IfcTimePeriod, IfcRelSequence + IfcLagTime,
17
+ * and the IfcRelAssignsToControl / IfcRelAssignsToProcess /
18
+ * IfcRelNests edges.
17
19
  *
18
20
  * The function is pure — it doesn't mutate the input and never touches the
19
21
  * STEP source buffer. Re-running it with the same inputs produces the same
@@ -22,7 +24,9 @@
22
24
  *
23
25
  * The low-level STEP string encoding and the per-entity line builders
24
26
  * (`buildWorkControl`, `buildTaskTime`, `buildTask`, …) live in
25
- * `schedule-serializer-builders.ts` — this file owns only the orchestration:
27
+ * `schedule-serializer-builders.ts`, with the calendar-side builders
28
+ * (`buildWorkCalendar`, `buildWorkTime`) in
29
+ * `schedule-serializer-calendar-builders.ts` — this file owns only the orchestration:
26
30
  * which entities and relationships to emit, in what order, and how their
27
31
  * express IDs cross-reference each other.
28
32
  */
@@ -57,6 +61,20 @@ export interface SerializeScheduleResult {
57
61
  assignsToControl: number;
58
62
  assignsToProcess: number;
59
63
  relNests: number;
64
+ /** IfcWorkCalendar entities emitted. */
65
+ workCalendars: number;
66
+ /** IfcWorkTime entities emitted across every calendar's working + exception lists. */
67
+ workTimes: number;
68
+ /** IfcRecurrencePattern entities emitted (one per IfcWorkTime that carried a pattern). */
69
+ recurrencePatterns: number;
70
+ /** IfcTimePeriod entities emitted from those patterns' TimePeriods lists. */
71
+ timePeriods: number;
72
+ /**
73
+ * IfcRelAssignsToControl edges whose RelatingControl is a calendar.
74
+ * Counted separately from `assignsToControl` (schedule -> tasks) so a
75
+ * caller can tell the two relationship kinds apart in a preview.
76
+ */
77
+ calendarAssignments: number;
60
78
  };
61
79
  }
62
80
  export declare function serializeScheduleToStep(data: ScheduleExtraction, options: SerializeScheduleOptions): SerializeScheduleResult;
@@ -1 +1 @@
1
- {"version":3,"file":"schedule-serializer.d.ts","sourceRoot":"","sources":["../src/schedule-serializer.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,OAAO,KAAK,EAAE,kBAAkB,EAAwB,MAAM,yBAAyB,CAAC;AAiBxF,MAAM,WAAW,wBAAwB;IACvC,0DAA0D;IAC1D,MAAM,EAAE,MAAM,CAAC;IACf;;;OAGG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB;;;;OAIG;IACH,uBAAuB,CAAC,EAAE,CAAC,eAAe,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,CAAC;CAC3E;AAED,MAAM,WAAW,uBAAuB;IACtC,oDAAoD;IACpD,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,sDAAsD;IACtD,MAAM,EAAE,MAAM,CAAC;IACf,+CAA+C;IAC/C,KAAK,EAAE;QACL,aAAa,EAAE,MAAM,CAAC;QACtB,KAAK,EAAE,MAAM,CAAC;QACd,SAAS,EAAE,MAAM,CAAC;QAClB,SAAS,EAAE,MAAM,CAAC;QAClB,QAAQ,EAAE,MAAM,CAAC;QACjB,gBAAgB,EAAE,MAAM,CAAC;QACzB,gBAAgB,EAAE,MAAM,CAAC;QACzB,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC;CACH;AAMD,wBAAgB,uBAAuB,CACrC,IAAI,EAAE,kBAAkB,EACxB,OAAO,EAAE,wBAAwB,GAChC,uBAAuB,CA0JzB"}
1
+ {"version":3,"file":"schedule-serializer.d.ts","sourceRoot":"","sources":["../src/schedule-serializer.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAEH,OAAO,KAAK,EAAE,kBAAkB,EAAwB,MAAM,yBAAyB,CAAC;AAkBxF,MAAM,WAAW,wBAAwB;IACvC,0DAA0D;IAC1D,MAAM,EAAE,MAAM,CAAC;IACf;;;OAGG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB;;;;OAIG;IACH,uBAAuB,CAAC,EAAE,CAAC,eAAe,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,CAAC;CAC3E;AAED,MAAM,WAAW,uBAAuB;IACtC,oDAAoD;IACpD,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,sDAAsD;IACtD,MAAM,EAAE,MAAM,CAAC;IACf,+CAA+C;IAC/C,KAAK,EAAE;QACL,aAAa,EAAE,MAAM,CAAC;QACtB,KAAK,EAAE,MAAM,CAAC;QACd,SAAS,EAAE,MAAM,CAAC;QAClB,SAAS,EAAE,MAAM,CAAC;QAClB,QAAQ,EAAE,MAAM,CAAC;QACjB,gBAAgB,EAAE,MAAM,CAAC;QACzB,gBAAgB,EAAE,MAAM,CAAC;QACzB,QAAQ,EAAE,MAAM,CAAC;QACjB,wCAAwC;QACxC,aAAa,EAAE,MAAM,CAAC;QACtB,sFAAsF;QACtF,SAAS,EAAE,MAAM,CAAC;QAClB,0FAA0F;QAC1F,kBAAkB,EAAE,MAAM,CAAC;QAC3B,6EAA6E;QAC7E,WAAW,EAAE,MAAM,CAAC;QACpB;;;;WAIG;QACH,mBAAmB,EAAE,MAAM,CAAC;KAC7B,CAAC;CACH;AAMD,wBAAgB,uBAAuB,CACrC,IAAI,EAAE,kBAAkB,EACxB,OAAO,EAAE,wBAAwB,GAChC,uBAAuB,CA+MzB"}
@@ -4,6 +4,7 @@
4
4
  import { secondsToIso8601Duration } from './iso8601-duration.js';
5
5
  import { deterministicGlobalId } from './deterministic-global-id.js';
6
6
  import { escStr, optStr, optEnum, ownerRef, refList, ensureGlobalId, buildWorkControl, taskHasTimeData, buildTaskTime, buildTask, resolveProductIds, } from './schedule-serializer-builders.js';
7
+ import { buildWorkCalendar } from './schedule-serializer-calendar-builders.js';
7
8
  // ─────────────────────────────────────────────────────────────────────────
8
9
  // Public — serializeScheduleToStep
9
10
  // ─────────────────────────────────────────────────────────────────────────
@@ -20,11 +21,18 @@ export function serializeScheduleToStep(data, options) {
20
21
  assignsToControl: 0,
21
22
  assignsToProcess: 0,
22
23
  relNests: 0,
24
+ workCalendars: 0,
25
+ workTimes: 0,
26
+ recurrencePatterns: 0,
27
+ timePeriods: 0,
28
+ calendarAssignments: 0,
23
29
  };
24
30
  /** ScheduleTaskInfo.globalId → fresh express ID we just allocated. */
25
31
  const taskExpressIdByGlobalId = new Map();
26
32
  /** WorkScheduleInfo.globalId → fresh express ID we just allocated. */
27
33
  const scheduleExpressIdByGlobalId = new Map();
34
+ /** WorkCalendarInfo.globalId → fresh express ID we just allocated. */
35
+ const calendarExpressIdByGlobalId = new Map();
28
36
  // ── 1. Work schedules / work plans ────────────────────────────────
29
37
  for (const ws of data.workSchedules) {
30
38
  const id = nextId++;
@@ -32,6 +40,21 @@ export function serializeScheduleToStep(data, options) {
32
40
  lines.push(buildWorkControl(id, ws, owner));
33
41
  stats.workSchedules += 1;
34
42
  }
43
+ // ── 1b. Work calendars (+ their IfcWorkTime / IfcRecurrencePattern /
44
+ // IfcTimePeriod entities) ────────────────────────────────────
45
+ // Emitted before the tasks that reference them only for readability; the
46
+ // IfcRelAssignsToControl edges in section 3b below are what actually bind
47
+ // them, and STEP permits forward references either way.
48
+ for (const cal of data.workCalendars ?? []) {
49
+ const built = buildWorkCalendar(nextId, cal, owner);
50
+ lines.push(...built.lines);
51
+ nextId = built.nextId;
52
+ calendarExpressIdByGlobalId.set(cal.globalId, built.calendarId);
53
+ stats.workCalendars += 1;
54
+ stats.workTimes += built.workTimes;
55
+ stats.recurrencePatterns += built.recurrencePatterns;
56
+ stats.timePeriods += built.timePeriods;
57
+ }
35
58
  // ── 2. Task times + tasks ─────────────────────────────────────────
36
59
  for (const task of data.tasks) {
37
60
  let taskTimeId;
@@ -63,6 +86,39 @@ export function serializeScheduleToStep(data, options) {
63
86
  lines.push(`#${relId}=IFCRELASSIGNSTOCONTROL('${relGid}',${owner},$,$,${refList(taskIds)},$,#${controlId});`);
64
87
  stats.assignsToControl += 1;
65
88
  }
89
+ // ── 3b. Calendar → tasks / schedules (IfcRelAssignsToControl) ─────
90
+ // Mirrors section 3 above — same relation, RelatingControl an
91
+ // IfcWorkCalendar instead of an IfcWorkSchedule. One relation per
92
+ // calendar, its RelatedObjects the union of every task and schedule that
93
+ // named this calendar, which is what the extractor reads back: a task
94
+ // assigned to both a schedule and a calendar sees two separate relation
95
+ // instances and populates both fields.
96
+ for (const cal of data.workCalendars ?? []) {
97
+ const controlId = calendarExpressIdByGlobalId.get(cal.globalId);
98
+ if (controlId === undefined)
99
+ continue;
100
+ const relatedIds = [];
101
+ for (const task of data.tasks) {
102
+ if (!task.calendarGlobalIds?.includes(cal.globalId))
103
+ continue;
104
+ const tid = taskExpressIdByGlobalId.get(task.globalId);
105
+ if (tid !== undefined)
106
+ relatedIds.push(tid);
107
+ }
108
+ for (const ws of data.workSchedules) {
109
+ if (!ws.calendarGlobalIds?.includes(cal.globalId))
110
+ continue;
111
+ const sid = scheduleExpressIdByGlobalId.get(ws.globalId);
112
+ if (sid !== undefined)
113
+ relatedIds.push(sid);
114
+ }
115
+ if (relatedIds.length === 0)
116
+ continue;
117
+ const relId = nextId++;
118
+ const relGid = deterministicGlobalId(`rel-calendar|${cal.globalId}`);
119
+ lines.push(`#${relId}=IFCRELASSIGNSTOCONTROL('${relGid}',${owner},$,$,${refList(relatedIds)},$,#${controlId});`);
120
+ stats.calendarAssignments += 1;
121
+ }
66
122
  // ── 4. Task hierarchy (IfcRelNests) ──────────────────────────────
67
123
  for (const parent of data.tasks) {
68
124
  if (parent.childGlobalIds.length === 0)
@@ -1 +1 @@
1
- {"version":3,"file":"schedule-serializer.js","sourceRoot":"","sources":["../src/schedule-serializer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"schedule-serializer.js","sourceRoot":"","sources":["../src/schedule-serializer.ts"],"names":[],"mappings":"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"}