@nowline/export-msproj 0.0.0-dev.20261017174947.ge897dee → 0.0.0-dev.20261017184716.ge0dbbdf

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.
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAiCA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAQzD,MAAM,WAAW,aAAa;IAC1B,yDAAyD;IACzD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;;;;OAMG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,+DAA+D;IAC/D,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CACvC;AAsDD,wBAAgB,eAAe,CAAC,MAAM,EAAE,YAAY,EAAE,OAAO,GAAE,aAAkB,GAAG,MAAM,CAgGzF"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAoCA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAQzD,MAAM,WAAW,aAAa;IAC1B,yDAAyD;IACzD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;;;;OAMG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,+DAA+D;IAC/D,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CACvC;AAwDD,wBAAgB,eAAe,CAAC,MAAM,EAAE,YAAY,EAAE,OAAO,GAAE,aAAkB,GAAG,MAAM,CAgGzF"}
package/dist/index.js CHANGED
@@ -11,6 +11,9 @@
11
11
  // - Lossy export policy: `--strict` does not escalate.
12
12
  // - Waves (specs/waves.md §10): one wave-end milestone task per wave,
13
13
  // appended after every other task so existing UIDs never renumber.
14
+ // - Lane sequencing: each node links finish-to-start to the node before
15
+ // it in its lane or group, so MS Project's forward pass starts every
16
+ // task on engine C's day (specs/rendering.md § MS Project XML Export).
14
17
  //
15
18
  // Determinism: no `new Date()`. Anchoring date comes from `options.startDate`
16
19
  // or the schedule's start (the roadmap's `start:`, else `inputs.today`);
@@ -119,12 +122,12 @@ function collectTasks(ast, drops, schedule) {
119
122
  isMilestone: false,
120
123
  durationMinutes: 0,
121
124
  predecessors: [],
125
+ chainUids: [],
122
126
  nowlineId: lane.name,
123
127
  ownerRefs: getProps(lane, 'owner'),
124
128
  });
125
- for (const child of lane.content) {
126
- walkSwimlaneChild(child, 2, ctx, drops, tasks, schedule);
127
- }
129
+ // A lane's first node links to nothing: it starts on the project start.
130
+ walkSequence(lane.content, [], 2, ctx, drops, tasks, schedule);
128
131
  // Summary spans all child rows — implicit in MSProject by id ranges,
129
132
  // but we don't bother computing FinishDate / actuals.
130
133
  void summaryUid;
@@ -140,6 +143,7 @@ function collectTasks(ast, drops, schedule) {
140
143
  isMilestone: true,
141
144
  durationMinutes: 0,
142
145
  predecessors: getProps(m, 'after'),
146
+ chainUids: [],
143
147
  nowlineId: m.name,
144
148
  ownerRefs: [],
145
149
  startsAt: getProp(m, 'date'),
@@ -158,6 +162,7 @@ function collectTasks(ast, drops, schedule) {
158
162
  isMilestone: true, // Anchors → milestones in MS Project
159
163
  durationMinutes: 0,
160
164
  predecessors: [],
165
+ chainUids: [],
161
166
  nowlineId: a.name,
162
167
  ownerRefs: [],
163
168
  startsAt: getProp(a, 'date'),
@@ -166,75 +171,101 @@ function collectTasks(ast, drops, schedule) {
166
171
  }
167
172
  return { tasks, parallelEnds: ctx.parallelEnds };
168
173
  }
169
- function walkSwimlaneChild(child, outline, ctx, drops, tasks, schedule) {
174
+ /**
175
+ * Engine C's sequential rule (`walkLane` in schedule.ts): each node starts
176
+ * after the one before it. `entry` is what the first node links to; each
177
+ * node's ends become the next node's entry. Returns the last node's ends.
178
+ */
179
+ function walkSequence(children, entry, outline, ctx, drops, tasks, schedule) {
180
+ let prev = entry;
181
+ for (const child of children) {
182
+ prev = walkNode(child, prev, [], outline, ctx, drops, tasks, schedule);
183
+ }
184
+ return prev;
185
+ }
186
+ /**
187
+ * Writes one lane or group child and returns the UIDs that end it. `entry`
188
+ * links to the previous node; `inheritedAfter` is a parallel's own `after:`,
189
+ * which each of its tracks carries since the parallel has no task.
190
+ */
191
+ function walkNode(child, entry, inheritedAfter, outline, ctx, drops, tasks, schedule) {
170
192
  if (child.$type === 'ItemDeclaration') {
171
- emitTaskRow(child, outline, ctx, drops, tasks, schedule);
193
+ return [emitTaskRow(child, entry, inheritedAfter, outline, ctx, drops, tasks, schedule)];
172
194
  }
173
- else if (child.$type === 'GroupBlock') {
174
- emitGroup(child, outline, ctx, drops, tasks, schedule);
195
+ if (child.$type === 'GroupBlock') {
196
+ return [emitGroup(child, entry, inheritedAfter, outline, ctx, drops, tasks, schedule)];
175
197
  }
176
- else if (child.$type === 'ParallelBlock') {
177
- walkParallel(child, outline, ctx, drops, tasks, schedule);
198
+ if (child.$type === 'ParallelBlock') {
199
+ return walkParallel(child, entry, outline, ctx, drops, tasks, schedule);
178
200
  }
179
- else if (child.$type === 'DescriptionDirective') {
201
+ if (child.$type === 'DescriptionDirective') {
180
202
  drops.description += 1;
181
203
  }
204
+ return entry;
182
205
  }
183
- /** A group is a summary task over its children, one outline level down. */
184
- function emitGroup(group, outline, ctx, drops, tasks, schedule) {
206
+ /**
207
+ * A group is a summary task over its children, one outline level down. Its
208
+ * entry link and its `after:` go on the summary task: MS Project starts no
209
+ * subtask before its summary task's predecessors finish, so the first child
210
+ * needs no link of its own. Returns the summary task's UID, which MS Project
211
+ * finishes with the group's last child.
212
+ */
213
+ function emitGroup(group, entry, inheritedAfter, outline, ctx, drops, tasks, schedule) {
214
+ const uid = ctx.uid++;
185
215
  tasks.push({
186
- uid: ctx.uid++,
216
+ uid,
187
217
  id: ctx.id++,
188
218
  name: displayLabel(group),
189
219
  outlineLevel: outline,
190
220
  isSummary: true,
191
221
  isMilestone: false,
192
222
  durationMinutes: 0,
193
- predecessors: [],
223
+ predecessors: [...getProps(group, 'after'), ...inheritedAfter],
224
+ chainUids: entry,
194
225
  nowlineId: group.name,
195
226
  ownerRefs: [],
196
227
  });
197
- for (const grandchild of group.content) {
198
- walkSwimlaneChild(grandchild, outline + 1, ctx, drops, tasks, schedule);
199
- }
228
+ walkSequence(group.content, [], outline + 1, ctx, drops, tasks, schedule);
229
+ return uid;
200
230
  }
201
231
  /**
202
- * A parallel has no task: its tracks sit at its own outline level. Engine C
203
- * ends a named parallel at its latest track end, so `after:<parallel>` links
204
- * to every track's task (an item, or a group's summary task, which MS Project
205
- * finishes with its last child) and MS Project starts the successor at the
206
- * latest of them.
232
+ * A parallel has no task: its tracks sit at its own outline level, and each
233
+ * track's task (an item, or a group's summary task) takes the links the
234
+ * parallel would have had, its entry and its `after:`. Engine C ends a
235
+ * parallel at its latest track end, so the next node in the lane and
236
+ * `after:<parallel>` link to every track's task and MS Project starts the
237
+ * successor at the latest of them. Returns those track ends.
207
238
  */
208
- function walkParallel(parallel, outline, ctx, drops, tasks, schedule) {
239
+ function walkParallel(parallel, entry, outline, ctx, drops, tasks, schedule) {
240
+ const after = getProps(parallel, 'after');
209
241
  const ends = [];
210
242
  for (const track of parallel.content) {
211
- if (track.$type === 'ItemDeclaration') {
212
- ends.push(ctx.uid);
213
- emitTaskRow(track, outline, ctx, drops, tasks, schedule);
214
- }
215
- else if (track.$type === 'GroupBlock') {
216
- ends.push(ctx.uid);
217
- emitGroup(track, outline, ctx, drops, tasks, schedule);
243
+ if (track.$type === 'ItemDeclaration' || track.$type === 'GroupBlock') {
244
+ ends.push(...walkNode(track, entry, after, outline, ctx, drops, tasks, schedule));
218
245
  }
219
246
  }
220
247
  if (parallel.name)
221
248
  ctx.parallelEnds.set(parallel.name, ends);
249
+ return ends.length > 0 ? ends : entry;
222
250
  }
223
- function emitTaskRow(item, outline, ctx, drops, tasks, schedule) {
251
+ function emitTaskRow(item, entry, inheritedAfter, outline, ctx, drops, tasks, schedule) {
224
252
  countDrops(item, drops);
253
+ const uid = ctx.uid++;
225
254
  tasks.push({
226
- uid: ctx.uid++,
255
+ uid,
227
256
  id: ctx.id++,
228
257
  name: displayLabel(item),
229
258
  outlineLevel: outline,
230
259
  isSummary: false,
231
260
  isMilestone: false,
232
261
  durationMinutes: workingDaysToMinutes(schedule.byNode.get(item)?.days),
233
- predecessors: getProps(item, 'after'),
262
+ predecessors: [...getProps(item, 'after'), ...inheritedAfter],
263
+ chainUids: entry,
234
264
  nowlineId: item.name,
235
265
  ownerRefs: getProps(item, 'owner'),
236
266
  node: item,
237
267
  });
268
+ return uid;
238
269
  }
239
270
  function countDrops(item, drops) {
240
271
  if (getProps(item, 'labels').length > 0)
@@ -277,7 +308,7 @@ function emitTask(t, idToUid, parallelEnds, lines) {
277
308
  linked.add(end);
278
309
  }
279
310
  }
280
- for (const uid of t.extraPredecessorUids ?? []) {
311
+ for (const uid of [...t.chainUids, ...(t.extraPredecessorUids ?? [])]) {
281
312
  if (linked.has(uid))
282
313
  continue;
283
314
  emitPredecessorLink(uid, lines);
@@ -363,6 +394,7 @@ function addWaveTasks(ast, plan, tasks, idToUid, drops) {
363
394
  isMilestone: true,
364
395
  durationMinutes: 0,
365
396
  predecessors: [],
397
+ chainUids: [],
366
398
  ownerRefs: [],
367
399
  extraPredecessorUids: preds,
368
400
  });
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,qEAAqE;AACrE,qCAAqC;AACrC,EAAE;AACF,mCAAmC;AACnC,aAAa;AACb,2EAA2E;AAC3E,kEAAkE;AAClE,6EAA6E;AAC7E,sCAAsC;AACtC,+EAA+E;AAC/E,yDAAyD;AACzD,wEAAwE;AACxE,uEAAuE;AACvE,EAAE;AACF,8EAA8E;AAC9E,yEAAyE;AACzE,wDAAwD;AAgBxD,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAErD,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAC9F,OAAO,EAAE,kBAAkB,EAAwB,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAE5F,OAAO,EAAE,mBAAmB,EAAE,8BAA8B,EAAE,MAAM,eAAe,CAAC;AACpF,OAAO,EAAE,uBAAuB,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAC9E,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAmEtD,MAAM,aAAa,GAAG,sCAAsC,CAAC;AAE7D,MAAM,UAAU,eAAe,CAAC,MAAoB,EAAE,OAAO,GAAkB,EAAE;IAC7E,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC;IACvB,MAAM,KAAK,GAAe;QACtB,MAAM,EAAE,CAAC;QACT,QAAQ,EAAE,GAAG,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,qBAAqB,CAAC,CAAC,MAAM;QACpF,OAAO,EAAE,CAAC;QACV,KAAK,EAAE,CAAC;QACR,QAAQ,EAAE,CAAC;QACX,MAAM,EAAE,CAAC;QACT,WAAW,EAAE,CAAC;QACd,QAAQ,EAAE,CAAC;QACX,SAAS,EAAE,CAAC;KACf,CAAC;IAEF,MAAM,WAAW,GAAG,SAAS,CACzB,OAAO,CAAC,WAAW,IAAI,YAAY,CAAC,GAAG,CAAC,WAAW,IAAI,SAAS,CAAC,CACpE,CAAC;IACF,MAAM,QAAQ,GACV,MAAM,CAAC,QAAQ,IAAI,eAAe,CAAC,GAAG,EAAE,MAAM,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;IACtF,MAAM,SAAS,GAAG,gBAAgB,CAAC,OAAO,CAAC,SAAS,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC;IAE1E,YAAY;IACZ,MAAM,SAAS,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC;IAExC,+CAA+C;IAC/C,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,GAAG,YAAY,CAAC,GAAG,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;IAEnE,mDAAmD;IACnD,MAAM,OAAO,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC1C,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACpB,IAAI,CAAC,CAAC,SAAS;YAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;IACrD,CAAC;IACD,uEAAuE;IACvE,MAAM,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC;IAC/B,IAAI,QAAQ,EAAE,CAAC;QACX,YAAY,CAAC,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;IACvD,CAAC;IACD,MAAM,eAAe,GAAG,IAAI,GAAG,EAAkB,CAAC;IAClD,KAAK,MAAM,CAAC,IAAI,SAAS,EAAE,CAAC;QACxB,IAAI,CAAC,CAAC,SAAS;YAAE,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;IAC7D,CAAC;IAED,WAAW;IACX,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,CAAC,IAAI,CAAC,yDAAyD,CAAC,CAAC;IACtE,KAAK,CAAC,IAAI,CAAC,mBAAmB,aAAa,IAAI,CAAC,CAAC;IACjD,KAAK,CAAC,IAAI,CAAC,WAAW,WAAW,SAAS,CAAC,CAAC;IAC5C,KAAK,CAAC,IAAI,CAAC,YAAY,WAAW,UAAU,CAAC,CAAC;IAC9C,KAAK,CAAC,IAAI,CAAC,gBAAgB,SAAS,uBAAuB,CAAC,CAAC;IAC7D,KAAK,CAAC,IAAI,CAAC,4CAA4C,CAAC,CAAC;IACzD,KAAK,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC;IAC7C,MAAM,EAAE,OAAO,EAAE,GAAG,QAAQ,CAAC,QAAQ,CAAC;IACtC,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC;IAC7E,KAAK,CAAC,IAAI,CACN,mBAAmB,CACf,OAAO,CAAC,eAAe,EACvB,kBAAkB,CAAC,OAAO,EAAE,WAAW,EAAE,SAAS,CAAC,CACtD,CACJ,CAAC;IAEF,cAAc;IACd,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IACxB,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACpB,QAAQ,CAAC,CAAC,EAAE,OAAO,EAAE,YAAY,EAAE,KAAK,CAAC,CAAC;IAC9C,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IAEzB,kBAAkB;IAClB,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvB,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QAC5B,KAAK,MAAM,CAAC,IAAI,SAAS,EAAE,CAAC;YACxB,YAAY,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;QAC3B,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QAE7B,iCAAiC;QACjC,MAAM,WAAW,GAAG,kBAAkB,CAAC,KAAK,EAAE,eAAe,CAAC,CAAC;QAC/D,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACzB,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;YAC9B,KAAK,MAAM,CAAC,IAAI,WAAW,EAAE,CAAC;gBAC1B,cAAc,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;YAC7B,CAAC;YACD,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;QACnC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IAEzB,gBAAgB;IAChB,MAAM,OAAO,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;IACnC,IAAI,OAAO,EAAE,CAAC;QACV,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC;QAC5E,IAAI,CAAC,OAAO,CAAC,CAAC;IAClB,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC5B,CAAC;AAED,8BAA8B;AAE9B,SAAS,YAAY,CACjB,GAAgB,EAChB,KAAiB,EACjB,QAAyB;IAEzB,MAAM,KAAK,GAAc,EAAE,CAAC;IAC5B,MAAM,GAAG,GAAY,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,YAAY,EAAE,IAAI,GAAG,EAAE,EAAE,CAAC;IAEhE,KAAK,MAAM,KAAK,IAAI,GAAG,CAAC,cAAc,EAAE,CAAC;QACrC,IAAI,KAAK,CAAC,KAAK,KAAK,qBAAqB,EAAE,CAAC;YACxC,MAAM,IAAI,GAAG,KAA4B,CAAC;YAC1C,MAAM,UAAU,GAAG,GAAG,CAAC,GAAG,CAAC;YAC3B,KAAK,CAAC,IAAI,CAAC;gBACP,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE;gBACd,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE;gBACZ,IAAI,EAAE,YAAY,CAAC,IAAI,CAAC;gBACxB,YAAY,EAAE,CAAC;gBACf,SAAS,EAAE,IAAI;gBACf,WAAW,EAAE,KAAK;gBAClB,eAAe,EAAE,CAAC;gBAClB,YAAY,EAAE,EAAE;gBAChB,SAAS,EAAE,IAAI,CAAC,IAAI;gBACpB,SAAS,EAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAa;aACjD,CAAC,CAAC;YACH,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;gBAC/B,iBAAiB,CAAC,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;YAC7D,CAAC;YACD,qEAAqE;YACrE,sDAAsD;YACtD,KAAK,UAAU,CAAC;QACpB,CAAC;aAAM,IAAI,KAAK,CAAC,KAAK,KAAK,sBAAsB,EAAE,CAAC;YAChD,MAAM,CAAC,GAAG,KAA6B,CAAC;YACxC,KAAK,CAAC,IAAI,CAAC;gBACP,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE;gBACd,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE;gBACZ,IAAI,EAAE,YAAY,CAAC,CAAC,CAAC;gBACrB,YAAY,EAAE,CAAC;gBACf,SAAS,EAAE,KAAK;gBAChB,WAAW,EAAE,IAAI;gBACjB,eAAe,EAAE,CAAC;gBAClB,YAAY,EAAE,QAAQ,CAAC,CAAC,EAAE,OAAO,CAAa;gBAC9C,SAAS,EAAE,CAAC,CAAC,IAAI;gBACjB,SAAS,EAAE,EAAE;gBACb,QAAQ,EAAE,OAAO,CAAC,CAAC,EAAE,MAAM,CAAC;aAC/B,CAAC,CAAC;YACH,IAAI,OAAO,CAAC,CAAC,EAAE,OAAO,CAAC;gBAAE,KAAK,CAAC,KAAK,IAAI,CAAC,CAAC;QAC9C,CAAC;aAAM,IAAI,KAAK,CAAC,KAAK,KAAK,mBAAmB,EAAE,CAAC;YAC7C,MAAM,CAAC,GAAG,KAA0B,CAAC;YACrC,KAAK,CAAC,IAAI,CAAC;gBACP,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE;gBACd,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE;gBACZ,IAAI,EAAE,YAAY,CAAC,CAAC,CAAC;gBACrB,YAAY,EAAE,CAAC;gBACf,SAAS,EAAE,KAAK;gBAChB,WAAW,EAAE,IAAI,EAAE,qCAAqC;gBACxD,eAAe,EAAE,CAAC;gBAClB,YAAY,EAAE,EAAE;gBAChB,SAAS,EAAE,CAAC,CAAC,IAAI;gBACjB,SAAS,EAAE,EAAE;gBACb,QAAQ,EAAE,OAAO,CAAC,CAAC,EAAE,MAAM,CAAC;aAC/B,CAAC,CAAC;QACP,CAAC;IACL,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,GAAG,CAAC,YAAY,EAAE,CAAC;AACrD,CAAC;AAED,SAAS,iBAAiB,CACtB,KAAqC,EACrC,OAAe,EACf,GAAY,EACZ,KAAiB,EACjB,KAAgB,EAChB,QAAyB;IAEzB,IAAI,KAAK,CAAC,KAAK,KAAK,iBAAiB,EAAE,CAAC;QACpC,WAAW,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;IAC7D,CAAC;SAAM,IAAI,KAAK,CAAC,KAAK,KAAK,YAAY,EAAE,CAAC;QACtC,SAAS,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;IAC3D,CAAC;SAAM,IAAI,KAAK,CAAC,KAAK,KAAK,eAAe,EAAE,CAAC;QACzC,YAAY,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;IAC9D,CAAC;SAAM,IAAI,KAAK,CAAC,KAAK,KAAK,sBAAsB,EAAE,CAAC;QAChD,KAAK,CAAC,WAAW,IAAI,CAAC,CAAC;IAC3B,CAAC;AACL,CAAC;AAED,2EAA2E;AAC3E,SAAS,SAAS,CACd,KAAiB,EACjB,OAAe,EACf,GAAY,EACZ,KAAiB,EACjB,KAAgB,EAChB,QAAyB;IAEzB,KAAK,CAAC,IAAI,CAAC;QACP,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE;QACd,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE;QACZ,IAAI,EAAE,YAAY,CAAC,KAAK,CAAC;QACzB,YAAY,EAAE,OAAO;QACrB,SAAS,EAAE,IAAI;QACf,WAAW,EAAE,KAAK;QAClB,eAAe,EAAE,CAAC;QAClB,YAAY,EAAE,EAAE;QAChB,SAAS,EAAE,KAAK,CAAC,IAAI;QACrB,SAAS,EAAE,EAAE;KAChB,CAAC,CAAC;IACH,KAAK,MAAM,UAAU,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;QACrC,iBAAiB,CAAC,UAAU,EAAE,OAAO,GAAG,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;IAC5E,CAAC;AACL,CAAC;AAED;;;;;;GAMG;AACH,SAAS,YAAY,CACjB,QAAuB,EACvB,OAAe,EACf,GAAY,EACZ,KAAiB,EACjB,KAAgB,EAChB,QAAyB;IAEzB,MAAM,IAAI,GAAa,EAAE,CAAC;IAC1B,KAAK,MAAM,KAAK,IAAI,QAAQ,CAAC,OAAO,EAAE,CAAC;QACnC,IAAI,KAAK,CAAC,KAAK,KAAK,iBAAiB,EAAE,CAAC;YACpC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACnB,WAAW,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;QAC7D,CAAC;aAAM,IAAI,KAAK,CAAC,KAAK,KAAK,YAAY,EAAE,CAAC;YACtC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACnB,SAAS,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;QAC3D,CAAC;IACL,CAAC;IACD,IAAI,QAAQ,CAAC,IAAI;QAAE,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;AACjE,CAAC;AAED,SAAS,WAAW,CAChB,IAAqB,EACrB,OAAe,EACf,GAAY,EACZ,KAAiB,EACjB,KAAgB,EAChB,QAAyB;IAEzB,UAAU,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IACxB,KAAK,CAAC,IAAI,CAAC;QACP,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE;QACd,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE;QACZ,IAAI,EAAE,YAAY,CAAC,IAAI,CAAC;QACxB,YAAY,EAAE,OAAO;QACrB,SAAS,EAAE,KAAK;QAChB,WAAW,EAAE,KAAK;QAClB,eAAe,EAAE,oBAAoB,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC;QACtE,YAAY,EAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAa;QACjD,SAAS,EAAE,IAAI,CAAC,IAAI;QACpB,SAAS,EAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAa;QAC9C,IAAI,EAAE,IAAI;KACb,CAAC,CAAC;AACP,CAAC;AAED,SAAS,UAAU,CAAC,IAAqB,EAAE,KAAiB;IACxD,IAAI,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,MAAM,GAAG,CAAC;QAAE,KAAK,CAAC,MAAM,IAAI,CAAC,CAAC;IAC3D,IAAI,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC;QAAE,KAAK,CAAC,KAAK,IAAI,CAAC,CAAC;IAC7C,IAAI,OAAO,CAAC,IAAI,EAAE,WAAW,CAAC;QAAE,KAAK,CAAC,QAAQ,IAAI,CAAC,CAAC;IACpD,IAAI,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,MAAM,GAAG,CAAC;QAAE,KAAK,CAAC,MAAM,IAAI,CAAC,CAAC;IAC3D,IAAI,IAAI,CAAC,WAAW;QAAE,KAAK,CAAC,WAAW,IAAI,CAAC,CAAC;AACjD,CAAC;AAED,SAAS,QAAQ,CACb,CAAU,EACV,OAA4B,EAC5B,YAAmC,EACnC,KAAe;IAEf,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IACzB,KAAK,CAAC,IAAI,CAAC,SAAS,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACzC,KAAK,CAAC,IAAI,CAAC,SAAS,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IACvC,KAAK,CAAC,IAAI,CAAC,SAAS,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;IACvD,IAAI,CAAC,CAAC,SAAS;QAAE,KAAK,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;IAC1D,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;QAChB,KAAK,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC;QAC7C,KAAK,CAAC,IAAI,CAAC,qCAAqC,CAAC,CAAC;IACtD,CAAC;SAAM,CAAC;QACJ,KAAK,CAAC,IAAI,CAAC,mBAAmB,uBAAuB,CAAC,CAAC,CAAC,eAAe,CAAC,aAAa,CAAC,CAAC;IAC3F,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC,YAAY,iBAAiB,CAAC,CAAC;IACnE,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC;QACb,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,QAAQ,mBAAmB,CAAC,CAAC;IAC9D,CAAC;IACD,MAAM,MAAM,GAAG,IAAI,GAAG,EAAU,CAAC;IACjC,KAAK,MAAM,IAAI,IAAI,CAAC,CAAC,YAAY,EAAE,CAAC;QAChC,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC9B,+DAA+D;QAC/D,KAAK,MAAM,GAAG,IAAI,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC;YAC3E,IAAI,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC;gBAAE,SAAS;YAC9B,mBAAmB,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;YAChC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACpB,CAAC;IACL,CAAC;IACD,KAAK,MAAM,GAAG,IAAI,CAAC,CAAC,oBAAoB,IAAI,EAAE,EAAE,CAAC;QAC7C,IAAI,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC;YAAE,SAAS;QAC9B,mBAAmB,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAChC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACpB,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;AAC9B,CAAC;AAED,SAAS,mBAAmB,CAAC,GAAW,EAAE,KAAe;IACrD,KAAK,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;IACtC,KAAK,CAAC,IAAI,CAAC,WAAW,GAAG,CAAC,gBAAgB,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;IACpD,KAAK,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC,CAAC,KAAK;IAC3C,KAAK,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;AAC3C,CAAC;AAED,8BAA8B;AAE9B;;;;;;;;;;;GAWG;AACH,SAAS,YAAY,CACjB,GAAgB,EAChB,IAAc,EACd,KAAgB,EAChB,OAA4B,EAC5B,KAAiB;IAEjB,MAAM,YAAY,GAAG,IAAI,GAAG,EAAU,CAAC;IACvC,KAAK,MAAM,KAAK,IAAI,GAAG,CAAC,cAAc,EAAE,CAAC;QACrC,IAAI,KAAK,CAAC,KAAK,KAAK,mBAAmB,EAAE,CAAC;YACtC,MAAM,CAAC,GAAG,KAA0B,CAAC;YACrC,IAAI,CAAC,CAAC,IAAI;gBAAE,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QACzC,CAAC;aAAM,IAAI,KAAK,CAAC,KAAK,KAAK,sBAAsB,EAAE,CAAC;YAChD,MAAM,CAAC,GAAG,KAA6B,CAAC;YACxC,IAAI,CAAC,CAAC,IAAI,IAAI,OAAO,CAAC,CAAC,EAAE,MAAM,CAAC,KAAK,SAAS;gBAAE,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAC7E,CAAC;IACL,CAAC;IAED,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACrC,IAAI,GAAG,GAAG,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;IAC/B,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;IAC7B,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;IAE5C,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;QACtC,MAAM,GAAG,GAAa,EAAE,CAAC;QACzB,KAAK,MAAM,GAAG,IAAI,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAa,EAAE,CAAC;YACpD,IAAI,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;gBACxB,KAAK,CAAC,SAAS,IAAI,CAAC,CAAC;gBACrB,SAAS;YACb,CAAC;YACD,MAAM,MAAM,GAAG,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YACpE,IAAI,MAAM,KAAK,SAAS;gBAAE,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC/C,CAAC;QACD,OAAO,GAAG,CAAC;IACf,CAAC,CAAC,CAAC;IAEH,MAAM,UAAU,GAAe,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;IACxD,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACpB,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QACvD,IAAI,CAAC,KAAK,SAAS;YAAE,SAAS;QAC9B,MAAM,KAAK,GAAG,CAAC,GAAG,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACpC,IAAI,CAAC,IAAI,CAAC;YAAE,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAC1C,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;YAAE,CAAC,CAAC,oBAAoB,GAAG,KAAK,CAAC;QACrD,IAAI,CAAC,CAAC,SAAS;YAAE,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;;YAC1C,KAAK,CAAC,QAAQ,IAAI,CAAC,CAAC;IAC7B,CAAC;IAED,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE;QAC3B,MAAM,KAAK,GAAG,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;QAClD,IAAI,CAAC,GAAG,CAAC;YAAE,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACtC,KAAK,CAAC,IAAI,CAAC;YACP,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC;YACf,EAAE,EAAE,EAAE,EAAE;YACR,IAAI,EAAE,GAAG,YAAY,CAAC,IAAI,CAAC,aAAa;YACxC,YAAY,EAAE,CAAC;YACf,SAAS,EAAE,KAAK;YAChB,WAAW,EAAE,IAAI;YACjB,eAAe,EAAE,CAAC;YAClB,YAAY,EAAE,EAAE;YAChB,SAAS,EAAE,EAAE;YACb,oBAAoB,EAAE,KAAK;SAC9B,CAAC,CAAC;QACH,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;YAAE,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;IACjF,CAAC,CAAC,CAAC;AACP,CAAC;AAED,kCAAkC;AAElC,SAAS,gBAAgB,CAAC,GAAgB;IACtC,MAAM,GAAG,GAAkB,EAAE,CAAC;IAC9B,MAAM,GAAG,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;IAC9B,KAAK,MAAM,KAAK,IAAI,GAAG,CAAC,cAAc,EAAE,CAAC;QACrC,IAAI,KAAK,CAAC,KAAK,KAAK,mBAAmB,EAAE,CAAC;YACtC,MAAM,CAAC,GAAG,KAA0B,CAAC;YACrC,GAAG,CAAC,IAAI,CAAC;gBACL,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE;gBACd,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE;gBACZ,IAAI,EAAE,YAAY,CAAC,CAAC,CAAC;gBACrB,SAAS,EAAE,CAAC,CAAC,IAAI;aACpB,CAAC,CAAC;QACP,CAAC;aAAM,IAAI,KAAK,CAAC,KAAK,KAAK,iBAAiB,EAAE,CAAC;YAC3C,WAAW,CAAC,KAAwB,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;QACpD,CAAC;IACL,CAAC;IACD,OAAO,GAAG,CAAC;AACf,CAAC;AAED,SAAS,WAAW,CAChB,IAAqB,EACrB,GAAkB,EAClB,GAAgC;IAEhC,GAAG,CAAC,IAAI,CAAC;QACL,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE;QACd,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE;QACZ,IAAI,EAAE,YAAY,CAAC,IAAI,CAAC;QACxB,SAAS,EAAE,IAAI,CAAC,IAAI;KACvB,CAAC,CAAC;IACH,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;QAC/B,IAAI,KAAK,CAAC,KAAK,KAAK,iBAAiB,EAAE,CAAC;YACpC,WAAW,CAAC,KAAwB,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;QACpD,CAAC;IACL,CAAC;AACL,CAAC;AAED,SAAS,YAAY,CAAC,CAAc,EAAE,KAAe;IACjD,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;IAC7B,KAAK,CAAC,IAAI,CAAC,SAAS,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACzC,KAAK,CAAC,IAAI,CAAC,SAAS,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IACvC,KAAK,CAAC,IAAI,CAAC,SAAS,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;IACvD,KAAK,CAAC,IAAI,CAAC,sBAAsB,8BAA8B,gBAAgB,CAAC,CAAC;IACjF,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;AAClC,CAAC;AASD,SAAS,kBAAkB,CAAC,KAAgB,EAAE,OAA4B;IACtE,MAAM,GAAG,GAAoB,EAAE,CAAC;IAChC,MAAM,aAAa,GAAG,CAAC,CAAC;IACxB,KAAK,aAAa,CAAC;IACnB,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACpB,KAAK,MAAM,KAAK,IAAI,CAAC,CAAC,SAAS,EAAE,CAAC;YAC9B,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YAC/B,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;gBACpB,GAAG,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,GAAG,EAAE,WAAW,EAAE,GAAG,EAAE,CAAC,CAAC;YACnD,CAAC;QACL,CAAC;IACL,CAAC;IACD,OAAO,GAAG,CAAC;AACf,CAAC;AAED,SAAS,cAAc,CAAC,CAAgB,EAAE,KAAe;IACrD,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;IAC/B,KAAK,CAAC,IAAI,CAAC,SAAS,GAAG,CAAC,SAAS,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IACjD,KAAK,CAAC,IAAI,CAAC,SAAS,GAAG,CAAC,aAAa,EAAE,CAAC,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;IACzD,KAAK,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;IACrC,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;AACpC,CAAC;AAED,sCAAsC;AAEtC,SAAS,WAAW,CAAC,KAAiB;IAClC,MAAM,KAAK,GAAyB;QAChC,QAAQ;QACR,UAAU;QACV,SAAS;QACT,OAAO;QACP,UAAU;QACV,QAAQ;QACR,aAAa;QACb,UAAU;QACV,WAAW;KACd,CAAC;IACF,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IAChG,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACpC,OAAO,kCAAkC,KAAK,CAAC,MAAM,mBAAmB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;AAC/F,CAAC;AAED,SAAS,aAAa,CAAC,GAAqB;IACxC,IAAI,GAAG,KAAK,UAAU;QAAE,OAAO,mBAAmB,CAAC;IACnD,IAAI,GAAG,KAAK,WAAW;QAAE,OAAO,YAAY,CAAC;IAC7C,OAAO,GAAG,CAAC;AACf,CAAC;AAED,gCAAgC;AAEhC,SAAS,gBAAgB,CAAC,MAA0B,EAAE,aAAmB;IACrE,IAAI,MAAM,EAAE,CAAC;QACT,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;YAC5B,MAAM,IAAI,KAAK,CAAC,6BAA6B,MAAM,wBAAwB,CAAC,CAAC;QACjF,CAAC;QACD,OAAO,MAAM,CAAC;IAClB,CAAC;IACD,OAAO,aAAa,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AACpD,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nowline/export-msproj",
3
- "version": "0.0.0-dev.20261017174947.ge897dee",
3
+ "version": "0.0.0-dev.20261017184716.ge0dbbdf",
4
4
  "description": "Exports a Nowline roadmap to Microsoft Project XML for import into other PM tools.",
5
5
  "license": "Apache-2.0",
6
6
  "engines": {
@@ -21,9 +21,9 @@
21
21
  "src/"
22
22
  ],
23
23
  "dependencies": {
24
- "@nowline/core": "0.0.0-dev.20261017174947.ge897dee",
25
- "@nowline/export-core": "0.0.0-dev.20261017174947.ge897dee",
26
- "@nowline/layout": "0.0.0-dev.20261017174947.ge897dee"
24
+ "@nowline/core": "0.0.0-dev.20261017184716.ge0dbbdf",
25
+ "@nowline/export-core": "0.0.0-dev.20261017184716.ge0dbbdf",
26
+ "@nowline/layout": "0.0.0-dev.20261017184716.ge0dbbdf"
27
27
  },
28
28
  "devDependencies": {
29
29
  "@types/node": "^26.6.3",
package/src/index.ts CHANGED
@@ -11,6 +11,9 @@
11
11
  // - Lossy export policy: `--strict` does not escalate.
12
12
  // - Waves (specs/waves.md §10): one wave-end milestone task per wave,
13
13
  // appended after every other task so existing UIDs never renumber.
14
+ // - Lane sequencing: each node links finish-to-start to the node before
15
+ // it in its lane or group, so MS Project's forward pass starts every
16
+ // task on engine C's day (specs/rendering.md § MS Project XML Export).
14
17
  //
15
18
  // Determinism: no `new Date()`. Anchoring date comes from `options.startDate`
16
19
  // or the schedule's start (the roadmap's `start:`, else `inputs.today`);
@@ -82,7 +85,9 @@ interface TaskRow {
82
85
  startsAt?: string;
83
86
  /** The source item, for wave membership. */
84
87
  node?: ItemDeclaration;
85
- /** Links by UID, added after `predecessors`, skipping UIDs already linked. */
88
+ /** The previous node in the lane or group: its task, or every track end of a parallel. */
89
+ chainUids: number[];
90
+ /** Links by UID, added after `chainUids`, skipping UIDs already linked. */
86
91
  extraPredecessorUids?: number[];
87
92
  }
88
93
 
@@ -227,12 +232,12 @@ function collectTasks(
227
232
  isMilestone: false,
228
233
  durationMinutes: 0,
229
234
  predecessors: [],
235
+ chainUids: [],
230
236
  nowlineId: lane.name,
231
237
  ownerRefs: getProps(lane, 'owner') as string[],
232
238
  });
233
- for (const child of lane.content) {
234
- walkSwimlaneChild(child, 2, ctx, drops, tasks, schedule);
235
- }
239
+ // A lane's first node links to nothing: it starts on the project start.
240
+ walkSequence(lane.content, [], 2, ctx, drops, tasks, schedule);
236
241
  // Summary spans all child rows — implicit in MSProject by id ranges,
237
242
  // but we don't bother computing FinishDate / actuals.
238
243
  void summaryUid;
@@ -247,6 +252,7 @@ function collectTasks(
247
252
  isMilestone: true,
248
253
  durationMinutes: 0,
249
254
  predecessors: getProps(m, 'after') as string[],
255
+ chainUids: [],
250
256
  nowlineId: m.name,
251
257
  ownerRefs: [],
252
258
  startsAt: getProp(m, 'date'),
@@ -263,6 +269,7 @@ function collectTasks(
263
269
  isMilestone: true, // Anchors → milestones in MS Project
264
270
  durationMinutes: 0,
265
271
  predecessors: [],
272
+ chainUids: [],
266
273
  nowlineId: a.name,
267
274
  ownerRefs: [],
268
275
  startsAt: getProp(a, 'date'),
@@ -272,101 +279,147 @@ function collectTasks(
272
279
  return { tasks, parallelEnds: ctx.parallelEnds };
273
280
  }
274
281
 
275
- function walkSwimlaneChild(
282
+ /**
283
+ * Engine C's sequential rule (`walkLane` in schedule.ts): each node starts
284
+ * after the one before it. `entry` is what the first node links to; each
285
+ * node's ends become the next node's entry. Returns the last node's ends.
286
+ */
287
+ function walkSequence(
288
+ children: readonly (SwimlaneContent | GroupContent)[],
289
+ entry: number[],
290
+ outline: number,
291
+ ctx: WalkCtx,
292
+ drops: DropCounts,
293
+ tasks: TaskRow[],
294
+ schedule: RoadmapSchedule,
295
+ ): number[] {
296
+ let prev = entry;
297
+ for (const child of children) {
298
+ prev = walkNode(child, prev, [], outline, ctx, drops, tasks, schedule);
299
+ }
300
+ return prev;
301
+ }
302
+
303
+ /**
304
+ * Writes one lane or group child and returns the UIDs that end it. `entry`
305
+ * links to the previous node; `inheritedAfter` is a parallel's own `after:`,
306
+ * which each of its tracks carries since the parallel has no task.
307
+ */
308
+ function walkNode(
276
309
  child: SwimlaneContent | GroupContent,
310
+ entry: number[],
311
+ inheritedAfter: string[],
277
312
  outline: number,
278
313
  ctx: WalkCtx,
279
314
  drops: DropCounts,
280
315
  tasks: TaskRow[],
281
316
  schedule: RoadmapSchedule,
282
- ): void {
317
+ ): number[] {
283
318
  if (child.$type === 'ItemDeclaration') {
284
- emitTaskRow(child, outline, ctx, drops, tasks, schedule);
285
- } else if (child.$type === 'GroupBlock') {
286
- emitGroup(child, outline, ctx, drops, tasks, schedule);
287
- } else if (child.$type === 'ParallelBlock') {
288
- walkParallel(child, outline, ctx, drops, tasks, schedule);
289
- } else if (child.$type === 'DescriptionDirective') {
319
+ return [emitTaskRow(child, entry, inheritedAfter, outline, ctx, drops, tasks, schedule)];
320
+ }
321
+ if (child.$type === 'GroupBlock') {
322
+ return [emitGroup(child, entry, inheritedAfter, outline, ctx, drops, tasks, schedule)];
323
+ }
324
+ if (child.$type === 'ParallelBlock') {
325
+ return walkParallel(child, entry, outline, ctx, drops, tasks, schedule);
326
+ }
327
+ if (child.$type === 'DescriptionDirective') {
290
328
  drops.description += 1;
291
329
  }
330
+ return entry;
292
331
  }
293
332
 
294
- /** A group is a summary task over its children, one outline level down. */
333
+ /**
334
+ * A group is a summary task over its children, one outline level down. Its
335
+ * entry link and its `after:` go on the summary task: MS Project starts no
336
+ * subtask before its summary task's predecessors finish, so the first child
337
+ * needs no link of its own. Returns the summary task's UID, which MS Project
338
+ * finishes with the group's last child.
339
+ */
295
340
  function emitGroup(
296
341
  group: GroupBlock,
342
+ entry: number[],
343
+ inheritedAfter: string[],
297
344
  outline: number,
298
345
  ctx: WalkCtx,
299
346
  drops: DropCounts,
300
347
  tasks: TaskRow[],
301
348
  schedule: RoadmapSchedule,
302
- ): void {
349
+ ): number {
350
+ const uid = ctx.uid++;
303
351
  tasks.push({
304
- uid: ctx.uid++,
352
+ uid,
305
353
  id: ctx.id++,
306
354
  name: displayLabel(group),
307
355
  outlineLevel: outline,
308
356
  isSummary: true,
309
357
  isMilestone: false,
310
358
  durationMinutes: 0,
311
- predecessors: [],
359
+ predecessors: [...(getProps(group, 'after') as string[]), ...inheritedAfter],
360
+ chainUids: entry,
312
361
  nowlineId: group.name,
313
362
  ownerRefs: [],
314
363
  });
315
- for (const grandchild of group.content) {
316
- walkSwimlaneChild(grandchild, outline + 1, ctx, drops, tasks, schedule);
317
- }
364
+ walkSequence(group.content, [], outline + 1, ctx, drops, tasks, schedule);
365
+ return uid;
318
366
  }
319
367
 
320
368
  /**
321
- * A parallel has no task: its tracks sit at its own outline level. Engine C
322
- * ends a named parallel at its latest track end, so `after:<parallel>` links
323
- * to every track's task (an item, or a group's summary task, which MS Project
324
- * finishes with its last child) and MS Project starts the successor at the
325
- * latest of them.
369
+ * A parallel has no task: its tracks sit at its own outline level, and each
370
+ * track's task (an item, or a group's summary task) takes the links the
371
+ * parallel would have had, its entry and its `after:`. Engine C ends a
372
+ * parallel at its latest track end, so the next node in the lane and
373
+ * `after:<parallel>` link to every track's task and MS Project starts the
374
+ * successor at the latest of them. Returns those track ends.
326
375
  */
327
376
  function walkParallel(
328
377
  parallel: ParallelBlock,
378
+ entry: number[],
329
379
  outline: number,
330
380
  ctx: WalkCtx,
331
381
  drops: DropCounts,
332
382
  tasks: TaskRow[],
333
383
  schedule: RoadmapSchedule,
334
- ): void {
384
+ ): number[] {
385
+ const after = getProps(parallel, 'after') as string[];
335
386
  const ends: number[] = [];
336
387
  for (const track of parallel.content) {
337
- if (track.$type === 'ItemDeclaration') {
338
- ends.push(ctx.uid);
339
- emitTaskRow(track, outline, ctx, drops, tasks, schedule);
340
- } else if (track.$type === 'GroupBlock') {
341
- ends.push(ctx.uid);
342
- emitGroup(track, outline, ctx, drops, tasks, schedule);
388
+ if (track.$type === 'ItemDeclaration' || track.$type === 'GroupBlock') {
389
+ ends.push(...walkNode(track, entry, after, outline, ctx, drops, tasks, schedule));
343
390
  }
344
391
  }
345
392
  if (parallel.name) ctx.parallelEnds.set(parallel.name, ends);
393
+ return ends.length > 0 ? ends : entry;
346
394
  }
347
395
 
348
396
  function emitTaskRow(
349
397
  item: ItemDeclaration,
398
+ entry: number[],
399
+ inheritedAfter: string[],
350
400
  outline: number,
351
401
  ctx: WalkCtx,
352
402
  drops: DropCounts,
353
403
  tasks: TaskRow[],
354
404
  schedule: RoadmapSchedule,
355
- ): void {
405
+ ): number {
356
406
  countDrops(item, drops);
407
+ const uid = ctx.uid++;
357
408
  tasks.push({
358
- uid: ctx.uid++,
409
+ uid,
359
410
  id: ctx.id++,
360
411
  name: displayLabel(item),
361
412
  outlineLevel: outline,
362
413
  isSummary: false,
363
414
  isMilestone: false,
364
415
  durationMinutes: workingDaysToMinutes(schedule.byNode.get(item)?.days),
365
- predecessors: getProps(item, 'after') as string[],
416
+ predecessors: [...(getProps(item, 'after') as string[]), ...inheritedAfter],
417
+ chainUids: entry,
366
418
  nowlineId: item.name,
367
419
  ownerRefs: getProps(item, 'owner') as string[],
368
420
  node: item,
369
421
  });
422
+ return uid;
370
423
  }
371
424
 
372
425
  function countDrops(item: ItemDeclaration, drops: DropCounts): void {
@@ -408,7 +461,7 @@ function emitTask(
408
461
  linked.add(end);
409
462
  }
410
463
  }
411
- for (const uid of t.extraPredecessorUids ?? []) {
464
+ for (const uid of [...t.chainUids, ...(t.extraPredecessorUids ?? [])]) {
412
465
  if (linked.has(uid)) continue;
413
466
  emitPredecessorLink(uid, lines);
414
467
  linked.add(uid);
@@ -496,6 +549,7 @@ function addWaveTasks(
496
549
  isMilestone: true,
497
550
  durationMinutes: 0,
498
551
  predecessors: [],
552
+ chainUids: [],
499
553
  ownerRefs: [],
500
554
  extraPredecessorUids: preds,
501
555
  });