@nowline/export-xlsx 0.5.1 → 0.7.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/index.d.ts.map +1 -1
- package/dist/index.js +64 -24
- package/dist/index.js.map +1 -1
- package/package.json +5 -5
- package/src/index.ts +93 -20
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAqCA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAqCA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAQzD,MAAM,WAAW,WAAW;IACxB,kEAAkE;IAClE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,sEAAsE;IACtE,SAAS,CAAC,EAAE,IAAI,CAAC;CACpB;AAED,wBAAsB,UAAU,CAC5B,MAAM,EAAE,YAAY,EACpB,OAAO,GAAE,WAAgB,GAC1B,OAAO,CAAC,UAAU,CAAC,CAuCrB"}
|
package/dist/index.js
CHANGED
|
@@ -22,6 +22,7 @@
|
|
|
22
22
|
// consecutive calls with identical inputs produce byte-identical
|
|
23
23
|
// output. See `zip-normalize.ts` for the patcher.
|
|
24
24
|
import { displayLabel, getProp, getProps, roadmapTitle } from '@nowline/export-core';
|
|
25
|
+
import { scheduleRoadmap } from '@nowline/layout';
|
|
25
26
|
import ExcelJS from 'exceljs';
|
|
26
27
|
import { durationLiteralToText, durationToWorkingDays } from './duration.js';
|
|
27
28
|
import { normalizeZipTimestamps } from './zip-normalize.js';
|
|
@@ -34,11 +35,21 @@ export async function exportXlsx(inputs, options = {}) {
|
|
|
34
35
|
wb.created = generated;
|
|
35
36
|
wb.modified = generated;
|
|
36
37
|
wb.title = roadmapTitle(inputs.ast.roadmapDecl ?? undefined);
|
|
38
|
+
const schedule = scheduleRoadmap(inputs.ast, inputs.resolved, { today: inputs.today });
|
|
37
39
|
buildRoadmapSheet(wb, inputs, generated);
|
|
38
|
-
buildItemsSheet(wb, inputs.ast);
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
40
|
+
buildItemsSheet(wb, inputs.ast, schedule);
|
|
41
|
+
const hasMilestones = inputs.ast.roadmapEntries.some((e) => e.$type === 'MilestoneDeclaration');
|
|
42
|
+
if (hasMilestones) {
|
|
43
|
+
buildMilestonesSheet(wb, inputs.ast, schedule);
|
|
44
|
+
}
|
|
45
|
+
const hasAnchors = inputs.ast.roadmapEntries.some((e) => e.$type === 'AnchorDeclaration');
|
|
46
|
+
if (hasAnchors) {
|
|
47
|
+
buildAnchorsSheet(wb, inputs.ast, schedule);
|
|
48
|
+
}
|
|
49
|
+
const hasPeopleOrTeams = inputs.ast.roadmapEntries.some((e) => e.$type === 'PersonDeclaration' || e.$type === 'TeamDeclaration');
|
|
50
|
+
if (hasPeopleOrTeams) {
|
|
51
|
+
buildPeopleAndTeamsSheet(wb, inputs.ast);
|
|
52
|
+
}
|
|
42
53
|
const buf = (await wb.xlsx.writeBuffer());
|
|
43
54
|
const bytes = Buffer.isBuffer(buf)
|
|
44
55
|
? new Uint8Array(buf.buffer, buf.byteOffset, buf.byteLength)
|
|
@@ -84,6 +95,8 @@ const ITEM_HEADERS = [
|
|
|
84
95
|
{ header: 'Parallel', key: 'parallel', width: 18 },
|
|
85
96
|
{ header: 'Duration', key: 'duration', width: 12 },
|
|
86
97
|
{ header: 'Duration (text)', key: 'durationText', width: 16 },
|
|
98
|
+
{ header: 'Start', key: 'start', width: 14 },
|
|
99
|
+
{ header: 'End', key: 'end', width: 14 },
|
|
87
100
|
{ header: 'Status', key: 'status', width: 14 },
|
|
88
101
|
{ header: 'Remaining', key: 'remaining', width: 12 },
|
|
89
102
|
{ header: 'Owner', key: 'owner', width: 14 },
|
|
@@ -100,15 +113,20 @@ const STATUS_FILLS = {
|
|
|
100
113
|
blocked: 'FFFFCDD2', // red
|
|
101
114
|
planned: 'FFE0E0E0', // grey
|
|
102
115
|
};
|
|
103
|
-
function buildItemsSheet(wb, ast) {
|
|
116
|
+
function buildItemsSheet(wb, ast, schedule) {
|
|
104
117
|
const sheet = wb.addWorksheet('Items', {
|
|
105
118
|
views: [{ state: 'frozen', xSplit: 0, ySplit: 1 }],
|
|
106
119
|
});
|
|
107
120
|
sheet.columns = [...ITEM_HEADERS];
|
|
121
|
+
// Format the Start/End date columns as ISO dates.
|
|
122
|
+
const startCol = sheet.getColumn('start');
|
|
123
|
+
const endCol = sheet.getColumn('end');
|
|
124
|
+
startCol.numFmt = 'yyyy-mm-dd';
|
|
125
|
+
endCol.numFmt = 'yyyy-mm-dd';
|
|
108
126
|
const rows = [];
|
|
109
127
|
for (const entry of ast.roadmapEntries) {
|
|
110
128
|
if (entry.$type === 'SwimlaneDeclaration') {
|
|
111
|
-
collectFromSwimlane(entry, [entry
|
|
129
|
+
collectFromSwimlane(entry, [swimlaneLabel(entry)], rows, '', '', schedule);
|
|
112
130
|
}
|
|
113
131
|
}
|
|
114
132
|
for (const r of rows)
|
|
@@ -134,21 +152,29 @@ function buildItemsSheet(wb, ast) {
|
|
|
134
152
|
to: { row: Math.max(rows.length + 1, 1), column: ITEM_HEADERS.length },
|
|
135
153
|
};
|
|
136
154
|
}
|
|
137
|
-
|
|
155
|
+
/**
|
|
156
|
+
* Resolve the swimlane's display label for the Swimlane column.
|
|
157
|
+
* Prefers the DSL id (name) for stable cross-sheet joins; falls back to
|
|
158
|
+
* the title when the lane has no id.
|
|
159
|
+
*/
|
|
160
|
+
function swimlaneLabel(lane) {
|
|
161
|
+
return lane.name ?? lane.title ?? '';
|
|
162
|
+
}
|
|
163
|
+
function collectFromSwimlane(lane, breadcrumb, rows, group, parallel, schedule) {
|
|
138
164
|
const breadcrumbStr = breadcrumb.filter((s) => s.length > 0).join('.');
|
|
139
165
|
for (const child of lane.content) {
|
|
140
|
-
addSwimlaneChild(child, breadcrumbStr, group, parallel, rows);
|
|
166
|
+
addSwimlaneChild(child, breadcrumbStr, group, parallel, rows, schedule);
|
|
141
167
|
}
|
|
142
168
|
}
|
|
143
|
-
function addSwimlaneChild(child, swimlane, group, parallel, rows) {
|
|
169
|
+
function addSwimlaneChild(child, swimlane, group, parallel, rows, schedule) {
|
|
144
170
|
if (child.$type === 'ItemDeclaration') {
|
|
145
|
-
rows.push(itemRow(child, swimlane, group, parallel));
|
|
171
|
+
rows.push(itemRow(child, swimlane, group, parallel, schedule));
|
|
146
172
|
return;
|
|
147
173
|
}
|
|
148
174
|
if (child.$type === 'GroupBlock') {
|
|
149
175
|
const g = child.name ?? displayLabel(child);
|
|
150
176
|
for (const grandchild of child.content) {
|
|
151
|
-
addGroupChild(grandchild, swimlane, g, parallel, rows);
|
|
177
|
+
addGroupChild(grandchild, swimlane, g, parallel, rows, schedule);
|
|
152
178
|
}
|
|
153
179
|
return;
|
|
154
180
|
}
|
|
@@ -156,39 +182,42 @@ function addSwimlaneChild(child, swimlane, group, parallel, rows) {
|
|
|
156
182
|
const p = child.name ?? displayLabel(child);
|
|
157
183
|
for (const grandchild of child.content) {
|
|
158
184
|
if (grandchild.$type === 'ItemDeclaration') {
|
|
159
|
-
rows.push(itemRow(grandchild, swimlane, group, p));
|
|
185
|
+
rows.push(itemRow(grandchild, swimlane, group, p, schedule));
|
|
160
186
|
}
|
|
161
187
|
else if (grandchild.$type === 'GroupBlock') {
|
|
162
188
|
const g = grandchild.name ?? displayLabel(grandchild);
|
|
163
189
|
for (const inner of grandchild.content) {
|
|
164
|
-
addGroupChild(inner, swimlane, g, p, rows);
|
|
190
|
+
addGroupChild(inner, swimlane, g, p, rows, schedule);
|
|
165
191
|
}
|
|
166
192
|
}
|
|
167
193
|
}
|
|
168
194
|
}
|
|
169
195
|
}
|
|
170
|
-
function addGroupChild(child, swimlane, group, parallel, rows) {
|
|
196
|
+
function addGroupChild(child, swimlane, group, parallel, rows, schedule) {
|
|
171
197
|
if (child.$type === 'ItemDeclaration') {
|
|
172
|
-
rows.push(itemRow(child, swimlane, group, parallel));
|
|
198
|
+
rows.push(itemRow(child, swimlane, group, parallel, schedule));
|
|
173
199
|
}
|
|
174
200
|
else if (child.$type === 'GroupBlock') {
|
|
175
201
|
const sub = child.name ?? displayLabel(child);
|
|
176
202
|
const nested = group ? `${group}.${sub}` : sub;
|
|
177
203
|
for (const grandchild of child.content) {
|
|
178
|
-
addGroupChild(grandchild, swimlane, nested, parallel, rows);
|
|
204
|
+
addGroupChild(grandchild, swimlane, nested, parallel, rows, schedule);
|
|
179
205
|
}
|
|
180
206
|
}
|
|
181
207
|
else if (child.$type === 'ParallelBlock') {
|
|
182
208
|
const p = child.name ?? displayLabel(child);
|
|
183
209
|
for (const grandchild of child.content) {
|
|
184
210
|
if (grandchild.$type === 'ItemDeclaration') {
|
|
185
|
-
rows.push(itemRow(grandchild, swimlane, group, p));
|
|
211
|
+
rows.push(itemRow(grandchild, swimlane, group, p, schedule));
|
|
186
212
|
}
|
|
187
213
|
}
|
|
188
214
|
}
|
|
189
215
|
}
|
|
190
|
-
function itemRow(item, swimlane, group, parallel) {
|
|
216
|
+
function itemRow(item, swimlane, group, parallel, schedule) {
|
|
191
217
|
const durationLiteral = getProp(item, 'duration') ?? getProp(item, 'size');
|
|
218
|
+
// byNode covers anonymous items; fall back to the id map (same object, just
|
|
219
|
+
// belt-and-suspenders) for named items in case the node reference differs.
|
|
220
|
+
const scheduled = schedule.byNode.get(item) ?? (item.name ? schedule.items.get(item.name) : undefined);
|
|
192
221
|
return {
|
|
193
222
|
id: item.name ?? '',
|
|
194
223
|
title: item.title ?? '',
|
|
@@ -197,6 +226,8 @@ function itemRow(item, swimlane, group, parallel) {
|
|
|
197
226
|
parallel,
|
|
198
227
|
duration: durationToWorkingDays(durationLiteral),
|
|
199
228
|
durationText: durationLiteralToText(durationLiteral),
|
|
229
|
+
start: scheduled?.start,
|
|
230
|
+
end: scheduled?.end,
|
|
200
231
|
status: getProp(item, 'status') ?? '',
|
|
201
232
|
remaining: getProp(item, 'remaining') ?? '',
|
|
202
233
|
owner: getProp(item, 'owner') ?? '',
|
|
@@ -208,7 +239,7 @@ function itemRow(item, swimlane, group, parallel) {
|
|
|
208
239
|
};
|
|
209
240
|
}
|
|
210
241
|
// ---------- Sheet 3: Milestones ----------
|
|
211
|
-
function buildMilestonesSheet(wb, ast) {
|
|
242
|
+
function buildMilestonesSheet(wb, ast, schedule) {
|
|
212
243
|
const sheet = wb.addWorksheet('Milestones', {
|
|
213
244
|
views: [{ state: 'frozen', xSplit: 0, ySplit: 1 }],
|
|
214
245
|
});
|
|
@@ -216,23 +247,29 @@ function buildMilestonesSheet(wb, ast) {
|
|
|
216
247
|
{ header: 'ID', key: 'id', width: 18 },
|
|
217
248
|
{ header: 'Title', key: 'title', width: 28 },
|
|
218
249
|
{ header: 'Date', key: 'date', width: 14 },
|
|
219
|
-
{ header: '
|
|
250
|
+
{ header: 'After', key: 'after', width: 28 },
|
|
220
251
|
];
|
|
252
|
+
sheet.getColumn('date').numFmt = 'yyyy-mm-dd';
|
|
221
253
|
for (const entry of ast.roadmapEntries) {
|
|
222
254
|
if (entry.$type === 'MilestoneDeclaration') {
|
|
223
255
|
const m = entry;
|
|
256
|
+
// Prefer the explicit date:; fall back to the schedule-computed date.
|
|
257
|
+
// milestoneByNode covers anonymous milestones; milestones map covers named ones.
|
|
258
|
+
const explicitDate = getProp(m, 'date');
|
|
259
|
+
const computedDate = schedule.milestoneByNode.get(m) ??
|
|
260
|
+
(m.name ? schedule.milestones.get(m.name) : undefined);
|
|
224
261
|
sheet.addRow({
|
|
225
262
|
id: m.name ?? '',
|
|
226
263
|
title: m.title ?? '',
|
|
227
|
-
date:
|
|
228
|
-
|
|
264
|
+
date: explicitDate ? new Date(explicitDate) : (computedDate ?? ''),
|
|
265
|
+
after: getProps(m, 'after').join('; '),
|
|
229
266
|
});
|
|
230
267
|
}
|
|
231
268
|
}
|
|
232
269
|
sheet.getRow(1).font = { bold: true };
|
|
233
270
|
}
|
|
234
271
|
// ---------- Sheet 4: Anchors ----------
|
|
235
|
-
function buildAnchorsSheet(wb, ast) {
|
|
272
|
+
function buildAnchorsSheet(wb, ast, schedule) {
|
|
236
273
|
const sheet = wb.addWorksheet('Anchors', {
|
|
237
274
|
views: [{ state: 'frozen', xSplit: 0, ySplit: 1 }],
|
|
238
275
|
});
|
|
@@ -241,13 +278,16 @@ function buildAnchorsSheet(wb, ast) {
|
|
|
241
278
|
{ header: 'Title', key: 'title', width: 28 },
|
|
242
279
|
{ header: 'Date', key: 'date', width: 14 },
|
|
243
280
|
];
|
|
281
|
+
sheet.getColumn('date').numFmt = 'yyyy-mm-dd';
|
|
244
282
|
for (const entry of ast.roadmapEntries) {
|
|
245
283
|
if (entry.$type === 'AnchorDeclaration') {
|
|
246
284
|
const a = entry;
|
|
285
|
+
const explicitDate = getProp(a, 'date');
|
|
286
|
+
const computedDate = a.name ? schedule.anchors.get(a.name) : undefined;
|
|
247
287
|
sheet.addRow({
|
|
248
288
|
id: a.name ?? '',
|
|
249
289
|
title: a.title ?? '',
|
|
250
|
-
date:
|
|
290
|
+
date: explicitDate ? new Date(explicitDate) : (computedDate ?? ''),
|
|
251
291
|
});
|
|
252
292
|
}
|
|
253
293
|
}
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,mDAAmD;AACnD,EAAE;AACF,sEAAsE;AACtE,aAAa;AACb,2EAA2E;AAC3E,uEAAuE;AACvE,wEAAwE;AACxE,kCAAkC;AAClC,4EAA4E;AAC5E,6EAA6E;AAC7E,2EAA2E;AAC3E,EAAE;AACF,wBAAwB;AACxB,4EAA4E;AAC5E,4BAA4B;AAC5B,mEAAmE;AACnE,yEAAyE;AACzE,0CAA0C;AAC1C,2EAA2E;AAC3E,uEAAuE;AACvE,oEAAoE;AACpE,qEAAqE;AACrE,sDAAsD;AAgBtD,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACrF,OAAO,EAAwB,eAAe,EAAE,MAAM,iBAAiB,CAAC;AACxE,OAAO,OAAO,MAAM,SAAS,CAAC;AAE9B,OAAO,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AAC7E,OAAO,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAS5D,MAAM,CAAC,KAAK,UAAU,UAAU,CAC5B,MAAoB,EACpB,UAAuB,EAAE;IAEzB,MAAM,EAAE,GAAG,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;IAClC,MAAM,KAAK,GAAG,OAAO,CAAC,SAAS,IAAI,MAAM,CAAC,KAAK,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAClF,MAAM,SAAS,GAAG,IAAI,IAAI,CACtB,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,cAAc,EAAE,EAAE,KAAK,CAAC,WAAW,EAAE,EAAE,KAAK,CAAC,UAAU,EAAE,CAAC,CAC5E,CAAC;IACF,EAAE,CAAC,OAAO,GAAG,OAAO,CAAC,MAAM,IAAI,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,SAAS,CAAC;IACpE,EAAE,CAAC,cAAc,GAAG,EAAE,CAAC,OAAO,CAAC;IAC/B,EAAE,CAAC,OAAO,GAAG,SAAS,CAAC;IACvB,EAAE,CAAC,QAAQ,GAAG,SAAS,CAAC;IACxB,EAAE,CAAC,KAAK,GAAG,YAAY,CAAC,MAAM,CAAC,GAAG,CAAC,WAAW,IAAI,SAAS,CAAC,CAAC;IAE7D,MAAM,QAAQ,GAAG,eAAe,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;IAEvF,iBAAiB,CAAC,EAAE,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC;IACzC,eAAe,CAAC,EAAE,EAAE,MAAM,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;IAE1C,MAAM,aAAa,GAAG,MAAM,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,sBAAsB,CAAC,CAAC;IAChG,IAAI,aAAa,EAAE,CAAC;QAChB,oBAAoB,CAAC,EAAE,EAAE,MAAM,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;IACnD,CAAC;IAED,MAAM,UAAU,GAAG,MAAM,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,mBAAmB,CAAC,CAAC;IAC1F,IAAI,UAAU,EAAE,CAAC;QACb,iBAAiB,CAAC,EAAE,EAAE,MAAM,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;IAChD,CAAC;IAED,MAAM,gBAAgB,GAAG,MAAM,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,CACnD,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,mBAAmB,IAAI,CAAC,CAAC,KAAK,KAAK,iBAAiB,CAC1E,CAAC;IACF,IAAI,gBAAgB,EAAE,CAAC;QACnB,wBAAwB,CAAC,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC;IAC7C,CAAC;IAED,MAAM,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,CAAyB,CAAC;IAClE,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC;QAC9B,CAAC,CAAC,IAAI,UAAU,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,UAAU,EAAE,GAAG,CAAC,UAAU,CAAC;QAC5D,CAAC,CAAC,IAAI,UAAU,CAAC,GAAG,CAAC,CAAC;IAC1B,OAAO,sBAAsB,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;AACpD,CAAC;AAED,SAAS,WAAW,CAAC,GAAgB;IACjC,MAAM,IAAI,GAAG,GAAG,CAAC,WAAW,CAAC;IAC7B,IAAI,CAAC,IAAI;QAAE,OAAO,SAAS,CAAC;IAC5B,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,QAAQ,CAAC,EAAE,KAAK,CAAC;AAClE,CAAC;AAED,yCAAyC;AAEzC,SAAS,iBAAiB,CAAC,EAAoB,EAAE,MAAoB,EAAE,SAAe;IAClF,MAAM,KAAK,GAAG,EAAE,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;IACzC,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC;IACpC,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACxD,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAExD,MAAM,IAAI,GAAmD;QACzD,CAAC,SAAS,EAAE,YAAY,CAAC,IAAI,IAAI,SAAS,CAAC,CAAC;QAC5C,CAAC,QAAQ,EAAE,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,WAAW,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3F,CAAC,OAAO,EAAE,KAAK,IAAI,EAAE,CAAC;QACtB,CAAC,OAAO,EAAE,KAAK,IAAI,EAAE,CAAC;QACtB,CAAC,WAAW,EAAE,SAAS,CAAC;KAC3B,CAAC;IACF,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;QACtB,MAAM,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC5B,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;QACnC,IAAI,GAAG,KAAK,CAAC;YAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,YAAY,CAAC;IACtD,CAAC,CAAC,CAAC;IACH,KAAK,CAAC,OAAO,GAAG;QACZ,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE;QAC3B,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE;KAC9B,CAAC;AACN,CAAC;AAED,uCAAuC;AAEvC,MAAM,YAAY,GAAkE;IAChF,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE;IACtC,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE;IAC5C,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,EAAE,EAAE;IAClD,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE;IAC5C,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,EAAE,EAAE;IAClD,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,EAAE,EAAE;IAClD,EAAE,MAAM,EAAE,iBAAiB,EAAE,GAAG,EAAE,cAAc,EAAE,KAAK,EAAE,EAAE,EAAE;IAC7D,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE;IAC5C,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE;IACxC,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,EAAE;IAC9C,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,EAAE,WAAW,EAAE,KAAK,EAAE,EAAE,EAAE;IACpD,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE;IAC5C,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE;IAC5C,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,EAAE;IAC9C,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,EAAE;IAC9C,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE;IAC1C,EAAE,MAAM,EAAE,aAAa,EAAE,GAAG,EAAE,aAAa,EAAE,KAAK,EAAE,EAAE,EAAE;CAC3D,CAAC;AAEF,MAAM,YAAY,GAAqC;IACnD,IAAI,EAAE,UAAU,EAAE,QAAQ;IAC1B,aAAa,EAAE,UAAU,EAAE,OAAO;IAClC,SAAS,EAAE,UAAU,EAAE,SAAS;IAChC,OAAO,EAAE,UAAU,EAAE,MAAM;IAC3B,OAAO,EAAE,UAAU,EAAE,OAAO;CAC/B,CAAC;AAsBF,SAAS,eAAe,CAAC,EAAoB,EAAE,GAAgB,EAAE,QAAyB;IACtF,MAAM,KAAK,GAAG,EAAE,CAAC,YAAY,CAAC,OAAO,EAAE;QACnC,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;KACrD,CAAC,CAAC;IACH,KAAK,CAAC,OAAO,GAAG,CAAC,GAAG,YAAY,CAAC,CAAC;IAElC,kDAAkD;IAClD,MAAM,QAAQ,GAAG,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;IAC1C,MAAM,MAAM,GAAG,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IACtC,QAAQ,CAAC,MAAM,GAAG,YAAY,CAAC;IAC/B,MAAM,CAAC,MAAM,GAAG,YAAY,CAAC;IAE7B,MAAM,IAAI,GAAc,EAAE,CAAC;IAC3B,KAAK,MAAM,KAAK,IAAI,GAAG,CAAC,cAAc,EAAE,CAAC;QACrC,IAAI,KAAK,CAAC,KAAK,KAAK,qBAAqB,EAAE,CAAC;YACxC,mBAAmB,CACf,KAA4B,EAC5B,CAAC,aAAa,CAAC,KAA4B,CAAC,CAAC,EAC7C,IAAI,EACJ,EAAE,EACF,EAAE,EACF,QAAQ,CACX,CAAC;QACN,CAAC;IACL,CAAC;IACD,KAAK,MAAM,CAAC,IAAI,IAAI;QAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IAEtC,4EAA4E;IAC5E,0EAA0E;IAC1E,KAAK,CAAC,OAAO,CAAC,EAAE,YAAY,EAAE,KAAK,EAAE,EAAE,CAAC,GAAG,EAAE,SAAS,EAAE,EAAE;QACtD,IAAI,SAAS,KAAK,CAAC;YAAE,OAAO;QAC5B,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;QACzD,MAAM,IAAI,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;QAClC,IAAI,IAAI,EAAE,CAAC;YACP,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,IAAI,GAAG;gBACzB,IAAI,EAAE,SAAS;gBACf,OAAO,EAAE,OAAO;gBAChB,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE;aAC1B,CAAC;QACN,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IACtC,KAAK,CAAC,UAAU,GAAG;QACf,IAAI,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE;QAC3B,EAAE,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,YAAY,CAAC,MAAM,EAAE;KACzE,CAAC;AACN,CAAC;AAED;;;;GAIG;AACH,SAAS,aAAa,CAAC,IAAyB;IAC5C,OAAO,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;AACzC,CAAC;AAED,SAAS,mBAAmB,CACxB,IAAyB,EACzB,UAA6B,EAC7B,IAAe,EACf,KAAa,EACb,QAAgB,EAChB,QAAyB;IAEzB,MAAM,aAAa,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACvE,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;QAC/B,gBAAgB,CAAC,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;IAC5E,CAAC;AACL,CAAC;AAED,SAAS,gBAAgB,CACrB,KAAsB,EACtB,QAAgB,EAChB,KAAa,EACb,QAAgB,EAChB,IAAe,EACf,QAAyB;IAEzB,IAAI,KAAK,CAAC,KAAK,KAAK,iBAAiB,EAAE,CAAC;QACpC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC;QAC/D,OAAO;IACX,CAAC;IACD,IAAI,KAAK,CAAC,KAAK,KAAK,YAAY,EAAE,CAAC;QAC/B,MAAM,CAAC,GAAG,KAAK,CAAC,IAAI,IAAI,YAAY,CAAC,KAAK,CAAC,CAAC;QAC5C,KAAK,MAAM,UAAU,IAAK,KAAoB,CAAC,OAAyB,EAAE,CAAC;YACvE,aAAa,CAAC,UAAU,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;QACrE,CAAC;QACD,OAAO;IACX,CAAC;IACD,IAAI,KAAK,CAAC,KAAK,KAAK,eAAe,EAAE,CAAC;QAClC,MAAM,CAAC,GAAG,KAAK,CAAC,IAAI,IAAI,YAAY,CAAC,KAAK,CAAC,CAAC;QAC5C,KAAK,MAAM,UAAU,IAAK,KAAuB,CAAC,OAAO,EAAE,CAAC;YACxD,IAAI,UAAU,CAAC,KAAK,KAAK,iBAAiB,EAAE,CAAC;gBACzC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC;YACjE,CAAC;iBAAM,IAAI,UAAU,CAAC,KAAK,KAAK,YAAY,EAAE,CAAC;gBAC3C,MAAM,CAAC,GAAG,UAAU,CAAC,IAAI,IAAI,YAAY,CAAC,UAAU,CAAC,CAAC;gBACtD,KAAK,MAAM,KAAK,IAAK,UAAyB,CAAC,OAAyB,EAAE,CAAC;oBACvE,aAAa,CAAC,KAAK,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;gBACzD,CAAC;YACL,CAAC;QACL,CAAC;IACL,CAAC;AACL,CAAC;AAED,SAAS,aAAa,CAClB,KAAmB,EACnB,QAAgB,EAChB,KAAa,EACb,QAAgB,EAChB,IAAe,EACf,QAAyB;IAEzB,IAAI,KAAK,CAAC,KAAK,KAAK,iBAAiB,EAAE,CAAC;QACpC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC;IACnE,CAAC;SAAM,IAAI,KAAK,CAAC,KAAK,KAAK,YAAY,EAAE,CAAC;QACtC,MAAM,GAAG,GAAG,KAAK,CAAC,IAAI,IAAI,YAAY,CAAC,KAAK,CAAC,CAAC;QAC9C,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC;QAC/C,KAAK,MAAM,UAAU,IAAK,KAAoB,CAAC,OAAyB,EAAE,CAAC;YACvE,aAAa,CAAC,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;QAC1E,CAAC;IACL,CAAC;SAAM,IAAI,KAAK,CAAC,KAAK,KAAK,eAAe,EAAE,CAAC;QACzC,MAAM,CAAC,GAAG,KAAK,CAAC,IAAI,IAAI,YAAY,CAAC,KAAK,CAAC,CAAC;QAC5C,KAAK,MAAM,UAAU,IAAK,KAAuB,CAAC,OAAO,EAAE,CAAC;YACxD,IAAI,UAAU,CAAC,KAAK,KAAK,iBAAiB,EAAE,CAAC;gBACzC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC;YACjE,CAAC;QACL,CAAC;IACL,CAAC;AACL,CAAC;AAED,SAAS,OAAO,CACZ,IAAqB,EACrB,QAAgB,EAChB,KAAa,EACb,QAAgB,EAChB,QAAyB;IAEzB,MAAM,eAAe,GAAG,OAAO,CAAC,IAAI,EAAE,UAAU,CAAC,IAAI,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAC3E,4EAA4E;IAC5E,2EAA2E;IAC3E,MAAM,SAAS,GACX,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IACzF,OAAO;QACH,EAAE,EAAE,IAAI,CAAC,IAAI,IAAI,EAAE;QACnB,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,EAAE;QACvB,QAAQ;QACR,KAAK;QACL,QAAQ;QACR,QAAQ,EAAE,qBAAqB,CAAC,eAAe,CAAC;QAChD,YAAY,EAAE,qBAAqB,CAAC,eAAe,CAAC;QACpD,KAAK,EAAE,SAAS,EAAE,KAAK;QACvB,GAAG,EAAE,SAAS,EAAE,GAAG;QACnB,MAAM,EAAE,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE;QACrC,SAAS,EAAE,OAAO,CAAC,IAAI,EAAE,WAAW,CAAC,IAAI,EAAE;QAC3C,KAAK,EAAE,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE;QACnC,KAAK,EAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;QACzC,MAAM,EAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;QAC3C,MAAM,EAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;QAC3C,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE;QACjC,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,IAAI,EAAE;KAC5C,CAAC;AACN,CAAC;AAED,4CAA4C;AAE5C,SAAS,oBAAoB,CACzB,EAAoB,EACpB,GAAgB,EAChB,QAAyB;IAEzB,MAAM,KAAK,GAAG,EAAE,CAAC,YAAY,CAAC,YAAY,EAAE;QACxC,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;KACrD,CAAC,CAAC;IACH,KAAK,CAAC,OAAO,GAAG;QACZ,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE;QACtC,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE;QAC5C,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE;QAC1C,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE;KAC/C,CAAC;IACF,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,MAAM,GAAG,YAAY,CAAC;IAE9C,KAAK,MAAM,KAAK,IAAI,GAAG,CAAC,cAAc,EAAE,CAAC;QACrC,IAAI,KAAK,CAAC,KAAK,KAAK,sBAAsB,EAAE,CAAC;YACzC,MAAM,CAAC,GAAG,KAA6B,CAAC;YACxC,sEAAsE;YACtE,iFAAiF;YACjF,MAAM,YAAY,GAAG,OAAO,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;YACxC,MAAM,YAAY,GACd,QAAQ,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC;gBAC/B,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;YAC3D,KAAK,CAAC,MAAM,CAAC;gBACT,EAAE,EAAE,CAAC,CAAC,IAAI,IAAI,EAAE;gBAChB,KAAK,EAAE,CAAC,CAAC,KAAK,IAAI,EAAE;gBACpB,IAAI,EAAE,YAAY,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,IAAI,EAAE,CAAC;gBAClE,KAAK,EAAE,QAAQ,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;aACzC,CAAC,CAAC;QACP,CAAC;IACL,CAAC;IACD,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AAC1C,CAAC;AAED,yCAAyC;AAEzC,SAAS,iBAAiB,CACtB,EAAoB,EACpB,GAAgB,EAChB,QAAyB;IAEzB,MAAM,KAAK,GAAG,EAAE,CAAC,YAAY,CAAC,SAAS,EAAE;QACrC,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;KACrD,CAAC,CAAC;IACH,KAAK,CAAC,OAAO,GAAG;QACZ,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE;QACtC,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE;QAC5C,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE;KAC7C,CAAC;IACF,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,MAAM,GAAG,YAAY,CAAC;IAE9C,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,MAAM,YAAY,GAAG,OAAO,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;YACxC,MAAM,YAAY,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YACvE,KAAK,CAAC,MAAM,CAAC;gBACT,EAAE,EAAE,CAAC,CAAC,IAAI,IAAI,EAAE;gBAChB,KAAK,EAAE,CAAC,CAAC,KAAK,IAAI,EAAE;gBACpB,IAAI,EAAE,YAAY,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,IAAI,EAAE,CAAC;aACrE,CAAC,CAAC;QACP,CAAC;IACL,CAAC;IACD,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AAC1C,CAAC;AAED,kDAAkD;AAElD,SAAS,wBAAwB,CAAC,EAAoB,EAAE,GAAgB;IACpE,MAAM,KAAK,GAAG,EAAE,CAAC,YAAY,CAAC,kBAAkB,EAAE;QAC9C,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;KACrD,CAAC,CAAC;IACH,KAAK,CAAC,OAAO,GAAG;QACZ,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE;QACtC,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE;QAC5C,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE;QAC1C,EAAE,MAAM,EAAE,aAAa,EAAE,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,EAAE;QACnD,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE;KAC7C,CAAC;IACF,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,KAAK,CAAC,MAAM,CAAC;gBACT,EAAE,EAAE,CAAC,CAAC,IAAI,IAAI,EAAE;gBAChB,KAAK,EAAE,CAAC,CAAC,KAAK,IAAI,EAAE;gBACpB,IAAI,EAAE,QAAQ;gBACd,MAAM,EAAE,EAAE;gBACV,IAAI,EAAE,OAAO,CAAC,CAAC,EAAE,MAAM,CAAC,IAAI,EAAE;aACjC,CAAC,CAAC;QACP,CAAC;aAAM,IAAI,KAAK,CAAC,KAAK,KAAK,iBAAiB,EAAE,CAAC;YAC3C,QAAQ,CAAC,KAAwB,EAAE,EAAE,EAAE,KAAK,CAAC,CAAC;QAClD,CAAC;IACL,CAAC;IACD,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AAC1C,CAAC;AAED,SAAS,QAAQ,CAAC,IAAqB,EAAE,MAAc,EAAE,KAAwB;IAC7E,KAAK,CAAC,MAAM,CAAC;QACT,EAAE,EAAE,IAAI,CAAC,IAAI,IAAI,EAAE;QACnB,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,EAAE;QACvB,IAAI,EAAE,MAAM;QACZ,MAAM;QACN,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE;KACpC,CAAC,CAAC;IACH,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;QAC/B,IAAI,KAAK,CAAC,KAAK,KAAK,iBAAiB,EAAE,CAAC;YACpC,QAAQ,CAAC,KAAwB,EAAE,IAAI,CAAC,IAAI,IAAI,EAAE,EAAE,KAAK,CAAC,CAAC;QAC/D,CAAC;IACL,CAAC;AACL,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@nowline/export-xlsx",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"description": "Nowline
|
|
3
|
+
"version": "0.7.0",
|
|
4
|
+
"description": "Exports a Nowline roadmap as an Excel workbook.",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"engines": {
|
|
7
7
|
"node": ">=22",
|
|
@@ -22,9 +22,9 @@
|
|
|
22
22
|
],
|
|
23
23
|
"dependencies": {
|
|
24
24
|
"exceljs": "4.4.0",
|
|
25
|
-
"@nowline/
|
|
26
|
-
"@nowline/core": "0.
|
|
27
|
-
"@nowline/layout": "0.
|
|
25
|
+
"@nowline/core": "0.7.0",
|
|
26
|
+
"@nowline/export-core": "0.7.0",
|
|
27
|
+
"@nowline/layout": "0.7.0"
|
|
28
28
|
},
|
|
29
29
|
"devDependencies": {
|
|
30
30
|
"@types/node": "^25.9.1",
|
package/src/index.ts
CHANGED
|
@@ -37,6 +37,7 @@ import type {
|
|
|
37
37
|
} from '@nowline/core';
|
|
38
38
|
import type { ExportInputs } from '@nowline/export-core';
|
|
39
39
|
import { displayLabel, getProp, getProps, roadmapTitle } from '@nowline/export-core';
|
|
40
|
+
import { type RoadmapSchedule, scheduleRoadmap } from '@nowline/layout';
|
|
40
41
|
import ExcelJS from 'exceljs';
|
|
41
42
|
|
|
42
43
|
import { durationLiteralToText, durationToWorkingDays } from './duration.js';
|
|
@@ -64,11 +65,27 @@ export async function exportXlsx(
|
|
|
64
65
|
wb.modified = generated;
|
|
65
66
|
wb.title = roadmapTitle(inputs.ast.roadmapDecl ?? undefined);
|
|
66
67
|
|
|
68
|
+
const schedule = scheduleRoadmap(inputs.ast, inputs.resolved, { today: inputs.today });
|
|
69
|
+
|
|
67
70
|
buildRoadmapSheet(wb, inputs, generated);
|
|
68
|
-
buildItemsSheet(wb, inputs.ast);
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
71
|
+
buildItemsSheet(wb, inputs.ast, schedule);
|
|
72
|
+
|
|
73
|
+
const hasMilestones = inputs.ast.roadmapEntries.some((e) => e.$type === 'MilestoneDeclaration');
|
|
74
|
+
if (hasMilestones) {
|
|
75
|
+
buildMilestonesSheet(wb, inputs.ast, schedule);
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
const hasAnchors = inputs.ast.roadmapEntries.some((e) => e.$type === 'AnchorDeclaration');
|
|
79
|
+
if (hasAnchors) {
|
|
80
|
+
buildAnchorsSheet(wb, inputs.ast, schedule);
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
const hasPeopleOrTeams = inputs.ast.roadmapEntries.some(
|
|
84
|
+
(e) => e.$type === 'PersonDeclaration' || e.$type === 'TeamDeclaration',
|
|
85
|
+
);
|
|
86
|
+
if (hasPeopleOrTeams) {
|
|
87
|
+
buildPeopleAndTeamsSheet(wb, inputs.ast);
|
|
88
|
+
}
|
|
72
89
|
|
|
73
90
|
const buf = (await wb.xlsx.writeBuffer()) as ArrayBuffer | Buffer;
|
|
74
91
|
const bytes = Buffer.isBuffer(buf)
|
|
@@ -119,6 +136,8 @@ const ITEM_HEADERS: ReadonlyArray<{ header: string; key: string; width: number }
|
|
|
119
136
|
{ header: 'Parallel', key: 'parallel', width: 18 },
|
|
120
137
|
{ header: 'Duration', key: 'duration', width: 12 },
|
|
121
138
|
{ header: 'Duration (text)', key: 'durationText', width: 16 },
|
|
139
|
+
{ header: 'Start', key: 'start', width: 14 },
|
|
140
|
+
{ header: 'End', key: 'end', width: 14 },
|
|
122
141
|
{ header: 'Status', key: 'status', width: 14 },
|
|
123
142
|
{ header: 'Remaining', key: 'remaining', width: 12 },
|
|
124
143
|
{ header: 'Owner', key: 'owner', width: 14 },
|
|
@@ -145,6 +164,8 @@ interface ItemRow {
|
|
|
145
164
|
parallel: string;
|
|
146
165
|
duration: number;
|
|
147
166
|
durationText: string;
|
|
167
|
+
start: Date | undefined;
|
|
168
|
+
end: Date | undefined;
|
|
148
169
|
status: string;
|
|
149
170
|
remaining: string;
|
|
150
171
|
owner: string;
|
|
@@ -155,16 +176,29 @@ interface ItemRow {
|
|
|
155
176
|
description: string;
|
|
156
177
|
}
|
|
157
178
|
|
|
158
|
-
function buildItemsSheet(wb: ExcelJS.Workbook, ast: NowlineFile): void {
|
|
179
|
+
function buildItemsSheet(wb: ExcelJS.Workbook, ast: NowlineFile, schedule: RoadmapSchedule): void {
|
|
159
180
|
const sheet = wb.addWorksheet('Items', {
|
|
160
181
|
views: [{ state: 'frozen', xSplit: 0, ySplit: 1 }],
|
|
161
182
|
});
|
|
162
183
|
sheet.columns = [...ITEM_HEADERS];
|
|
163
184
|
|
|
185
|
+
// Format the Start/End date columns as ISO dates.
|
|
186
|
+
const startCol = sheet.getColumn('start');
|
|
187
|
+
const endCol = sheet.getColumn('end');
|
|
188
|
+
startCol.numFmt = 'yyyy-mm-dd';
|
|
189
|
+
endCol.numFmt = 'yyyy-mm-dd';
|
|
190
|
+
|
|
164
191
|
const rows: ItemRow[] = [];
|
|
165
192
|
for (const entry of ast.roadmapEntries) {
|
|
166
193
|
if (entry.$type === 'SwimlaneDeclaration') {
|
|
167
|
-
collectFromSwimlane(
|
|
194
|
+
collectFromSwimlane(
|
|
195
|
+
entry as SwimlaneDeclaration,
|
|
196
|
+
[swimlaneLabel(entry as SwimlaneDeclaration)],
|
|
197
|
+
rows,
|
|
198
|
+
'',
|
|
199
|
+
'',
|
|
200
|
+
schedule,
|
|
201
|
+
);
|
|
168
202
|
}
|
|
169
203
|
}
|
|
170
204
|
for (const r of rows) sheet.addRow(r);
|
|
@@ -191,16 +225,26 @@ function buildItemsSheet(wb: ExcelJS.Workbook, ast: NowlineFile): void {
|
|
|
191
225
|
};
|
|
192
226
|
}
|
|
193
227
|
|
|
228
|
+
/**
|
|
229
|
+
* Resolve the swimlane's display label for the Swimlane column.
|
|
230
|
+
* Prefers the DSL id (name) for stable cross-sheet joins; falls back to
|
|
231
|
+
* the title when the lane has no id.
|
|
232
|
+
*/
|
|
233
|
+
function swimlaneLabel(lane: SwimlaneDeclaration): string {
|
|
234
|
+
return lane.name ?? lane.title ?? '';
|
|
235
|
+
}
|
|
236
|
+
|
|
194
237
|
function collectFromSwimlane(
|
|
195
238
|
lane: SwimlaneDeclaration,
|
|
196
239
|
breadcrumb: readonly string[],
|
|
197
240
|
rows: ItemRow[],
|
|
198
241
|
group: string,
|
|
199
242
|
parallel: string,
|
|
243
|
+
schedule: RoadmapSchedule,
|
|
200
244
|
): void {
|
|
201
245
|
const breadcrumbStr = breadcrumb.filter((s) => s.length > 0).join('.');
|
|
202
246
|
for (const child of lane.content) {
|
|
203
|
-
addSwimlaneChild(child, breadcrumbStr, group, parallel, rows);
|
|
247
|
+
addSwimlaneChild(child, breadcrumbStr, group, parallel, rows, schedule);
|
|
204
248
|
}
|
|
205
249
|
}
|
|
206
250
|
|
|
@@ -210,15 +254,16 @@ function addSwimlaneChild(
|
|
|
210
254
|
group: string,
|
|
211
255
|
parallel: string,
|
|
212
256
|
rows: ItemRow[],
|
|
257
|
+
schedule: RoadmapSchedule,
|
|
213
258
|
): void {
|
|
214
259
|
if (child.$type === 'ItemDeclaration') {
|
|
215
|
-
rows.push(itemRow(child, swimlane, group, parallel));
|
|
260
|
+
rows.push(itemRow(child, swimlane, group, parallel, schedule));
|
|
216
261
|
return;
|
|
217
262
|
}
|
|
218
263
|
if (child.$type === 'GroupBlock') {
|
|
219
264
|
const g = child.name ?? displayLabel(child);
|
|
220
265
|
for (const grandchild of (child as GroupBlock).content as GroupContent[]) {
|
|
221
|
-
addGroupChild(grandchild, swimlane, g, parallel, rows);
|
|
266
|
+
addGroupChild(grandchild, swimlane, g, parallel, rows, schedule);
|
|
222
267
|
}
|
|
223
268
|
return;
|
|
224
269
|
}
|
|
@@ -226,11 +271,11 @@ function addSwimlaneChild(
|
|
|
226
271
|
const p = child.name ?? displayLabel(child);
|
|
227
272
|
for (const grandchild of (child as ParallelBlock).content) {
|
|
228
273
|
if (grandchild.$type === 'ItemDeclaration') {
|
|
229
|
-
rows.push(itemRow(grandchild, swimlane, group, p));
|
|
274
|
+
rows.push(itemRow(grandchild, swimlane, group, p, schedule));
|
|
230
275
|
} else if (grandchild.$type === 'GroupBlock') {
|
|
231
276
|
const g = grandchild.name ?? displayLabel(grandchild);
|
|
232
277
|
for (const inner of (grandchild as GroupBlock).content as GroupContent[]) {
|
|
233
|
-
addGroupChild(inner, swimlane, g, p, rows);
|
|
278
|
+
addGroupChild(inner, swimlane, g, p, rows, schedule);
|
|
234
279
|
}
|
|
235
280
|
}
|
|
236
281
|
}
|
|
@@ -243,20 +288,21 @@ function addGroupChild(
|
|
|
243
288
|
group: string,
|
|
244
289
|
parallel: string,
|
|
245
290
|
rows: ItemRow[],
|
|
291
|
+
schedule: RoadmapSchedule,
|
|
246
292
|
): void {
|
|
247
293
|
if (child.$type === 'ItemDeclaration') {
|
|
248
|
-
rows.push(itemRow(child, swimlane, group, parallel));
|
|
294
|
+
rows.push(itemRow(child, swimlane, group, parallel, schedule));
|
|
249
295
|
} else if (child.$type === 'GroupBlock') {
|
|
250
296
|
const sub = child.name ?? displayLabel(child);
|
|
251
297
|
const nested = group ? `${group}.${sub}` : sub;
|
|
252
298
|
for (const grandchild of (child as GroupBlock).content as GroupContent[]) {
|
|
253
|
-
addGroupChild(grandchild, swimlane, nested, parallel, rows);
|
|
299
|
+
addGroupChild(grandchild, swimlane, nested, parallel, rows, schedule);
|
|
254
300
|
}
|
|
255
301
|
} else if (child.$type === 'ParallelBlock') {
|
|
256
302
|
const p = child.name ?? displayLabel(child);
|
|
257
303
|
for (const grandchild of (child as ParallelBlock).content) {
|
|
258
304
|
if (grandchild.$type === 'ItemDeclaration') {
|
|
259
|
-
rows.push(itemRow(grandchild, swimlane, group, p));
|
|
305
|
+
rows.push(itemRow(grandchild, swimlane, group, p, schedule));
|
|
260
306
|
}
|
|
261
307
|
}
|
|
262
308
|
}
|
|
@@ -267,8 +313,13 @@ function itemRow(
|
|
|
267
313
|
swimlane: string,
|
|
268
314
|
group: string,
|
|
269
315
|
parallel: string,
|
|
316
|
+
schedule: RoadmapSchedule,
|
|
270
317
|
): ItemRow {
|
|
271
318
|
const durationLiteral = getProp(item, 'duration') ?? getProp(item, 'size');
|
|
319
|
+
// byNode covers anonymous items; fall back to the id map (same object, just
|
|
320
|
+
// belt-and-suspenders) for named items in case the node reference differs.
|
|
321
|
+
const scheduled =
|
|
322
|
+
schedule.byNode.get(item) ?? (item.name ? schedule.items.get(item.name) : undefined);
|
|
272
323
|
return {
|
|
273
324
|
id: item.name ?? '',
|
|
274
325
|
title: item.title ?? '',
|
|
@@ -277,6 +328,8 @@ function itemRow(
|
|
|
277
328
|
parallel,
|
|
278
329
|
duration: durationToWorkingDays(durationLiteral),
|
|
279
330
|
durationText: durationLiteralToText(durationLiteral),
|
|
331
|
+
start: scheduled?.start,
|
|
332
|
+
end: scheduled?.end,
|
|
280
333
|
status: getProp(item, 'status') ?? '',
|
|
281
334
|
remaining: getProp(item, 'remaining') ?? '',
|
|
282
335
|
owner: getProp(item, 'owner') ?? '',
|
|
@@ -290,7 +343,11 @@ function itemRow(
|
|
|
290
343
|
|
|
291
344
|
// ---------- Sheet 3: Milestones ----------
|
|
292
345
|
|
|
293
|
-
function buildMilestonesSheet(
|
|
346
|
+
function buildMilestonesSheet(
|
|
347
|
+
wb: ExcelJS.Workbook,
|
|
348
|
+
ast: NowlineFile,
|
|
349
|
+
schedule: RoadmapSchedule,
|
|
350
|
+
): void {
|
|
294
351
|
const sheet = wb.addWorksheet('Milestones', {
|
|
295
352
|
views: [{ state: 'frozen', xSplit: 0, ySplit: 1 }],
|
|
296
353
|
});
|
|
@@ -298,16 +355,24 @@ function buildMilestonesSheet(wb: ExcelJS.Workbook, ast: NowlineFile): void {
|
|
|
298
355
|
{ header: 'ID', key: 'id', width: 18 },
|
|
299
356
|
{ header: 'Title', key: 'title', width: 28 },
|
|
300
357
|
{ header: 'Date', key: 'date', width: 14 },
|
|
301
|
-
{ header: '
|
|
358
|
+
{ header: 'After', key: 'after', width: 28 },
|
|
302
359
|
];
|
|
360
|
+
sheet.getColumn('date').numFmt = 'yyyy-mm-dd';
|
|
361
|
+
|
|
303
362
|
for (const entry of ast.roadmapEntries) {
|
|
304
363
|
if (entry.$type === 'MilestoneDeclaration') {
|
|
305
364
|
const m = entry as MilestoneDeclaration;
|
|
365
|
+
// Prefer the explicit date:; fall back to the schedule-computed date.
|
|
366
|
+
// milestoneByNode covers anonymous milestones; milestones map covers named ones.
|
|
367
|
+
const explicitDate = getProp(m, 'date');
|
|
368
|
+
const computedDate =
|
|
369
|
+
schedule.milestoneByNode.get(m) ??
|
|
370
|
+
(m.name ? schedule.milestones.get(m.name) : undefined);
|
|
306
371
|
sheet.addRow({
|
|
307
372
|
id: m.name ?? '',
|
|
308
373
|
title: m.title ?? '',
|
|
309
|
-
date:
|
|
310
|
-
|
|
374
|
+
date: explicitDate ? new Date(explicitDate) : (computedDate ?? ''),
|
|
375
|
+
after: getProps(m, 'after').join('; '),
|
|
311
376
|
});
|
|
312
377
|
}
|
|
313
378
|
}
|
|
@@ -316,7 +381,11 @@ function buildMilestonesSheet(wb: ExcelJS.Workbook, ast: NowlineFile): void {
|
|
|
316
381
|
|
|
317
382
|
// ---------- Sheet 4: Anchors ----------
|
|
318
383
|
|
|
319
|
-
function buildAnchorsSheet(
|
|
384
|
+
function buildAnchorsSheet(
|
|
385
|
+
wb: ExcelJS.Workbook,
|
|
386
|
+
ast: NowlineFile,
|
|
387
|
+
schedule: RoadmapSchedule,
|
|
388
|
+
): void {
|
|
320
389
|
const sheet = wb.addWorksheet('Anchors', {
|
|
321
390
|
views: [{ state: 'frozen', xSplit: 0, ySplit: 1 }],
|
|
322
391
|
});
|
|
@@ -325,13 +394,17 @@ function buildAnchorsSheet(wb: ExcelJS.Workbook, ast: NowlineFile): void {
|
|
|
325
394
|
{ header: 'Title', key: 'title', width: 28 },
|
|
326
395
|
{ header: 'Date', key: 'date', width: 14 },
|
|
327
396
|
];
|
|
397
|
+
sheet.getColumn('date').numFmt = 'yyyy-mm-dd';
|
|
398
|
+
|
|
328
399
|
for (const entry of ast.roadmapEntries) {
|
|
329
400
|
if (entry.$type === 'AnchorDeclaration') {
|
|
330
401
|
const a = entry as AnchorDeclaration;
|
|
402
|
+
const explicitDate = getProp(a, 'date');
|
|
403
|
+
const computedDate = a.name ? schedule.anchors.get(a.name) : undefined;
|
|
331
404
|
sheet.addRow({
|
|
332
405
|
id: a.name ?? '',
|
|
333
406
|
title: a.title ?? '',
|
|
334
|
-
date:
|
|
407
|
+
date: explicitDate ? new Date(explicitDate) : (computedDate ?? ''),
|
|
335
408
|
});
|
|
336
409
|
}
|
|
337
410
|
}
|