@nowline/export-xlsx 0.8.6 → 0.9.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/README.md +2 -2
- package/dist/duration.d.ts +0 -2
- package/dist/duration.d.ts.map +1 -1
- package/dist/duration.js +3 -49
- package/dist/duration.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +114 -15
- package/dist/index.js.map +1 -1
- package/package.json +6 -6
- package/src/duration.ts +3 -44
- package/src/index.ts +144 -16
package/README.md
CHANGED
|
@@ -32,8 +32,8 @@ const xlsx = await exportXlsx(inputs, {
|
|
|
32
32
|
|
|
33
33
|
| Sheet | Columns | Notes |
|
|
34
34
|
|--------------------|---------|-------|
|
|
35
|
-
| **Roadmap** |
|
|
36
|
-
| **Items** | id, title, swimlane, group, parallel, status, owner, after, before, duration (
|
|
35
|
+
| **Roadmap** | Roadmap, Author, Scale, Start, Calendar, Generated | Workbook overview. `Calendar` names the calendar the Duration column counts in, e.g. `business (Saturday and Sunday off; 5/22/65/260 days per week/month/quarter/year)`. |
|
|
36
|
+
| **Items** | id, title, swimlane, group, parallel, status, owner, after, before, duration (days), duration (text), labels, description | One row per item. The numeric duration column is the chart's own day count under the file's calendar (sizes, `q` and `capacity:` included; 0 when the item has none) for SUM and filters; the text column preserves the original DSL literal (`2w`, `1m`, etc.). `End` is exclusive. |
|
|
37
37
|
| **Milestones** | id, title, after / before, date | One row per milestone. |
|
|
38
38
|
| **Anchors** | id, title, date | One row per anchor. |
|
|
39
39
|
| **People & Teams** | id, name, type (person\|team) | Ownership references. |
|
package/dist/duration.d.ts
CHANGED
|
@@ -1,4 +1,2 @@
|
|
|
1
|
-
/** 0 if the literal is missing/invalid (Excel sums treat 0 as no-op). */
|
|
2
|
-
export declare function durationToWorkingDays(literal: string | undefined): number;
|
|
3
1
|
export declare function durationLiteralToText(literal: string | undefined): string;
|
|
4
2
|
//# sourceMappingURL=duration.d.ts.map
|
package/dist/duration.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"duration.d.ts","sourceRoot":"","sources":["../src/duration.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"duration.d.ts","sourceRoot":"","sources":["../src/duration.ts"],"names":[],"mappings":"AAIA,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAGzE"}
|
package/dist/duration.js
CHANGED
|
@@ -1,52 +1,6 @@
|
|
|
1
|
-
//
|
|
2
|
-
//
|
|
3
|
-
//
|
|
4
|
-
//
|
|
5
|
-
// We expose two artifacts:
|
|
6
|
-
// - `durationToWorkingDays(literal)` for the cell value (Number type so
|
|
7
|
-
// Excel SUM / sort / filter work).
|
|
8
|
-
// - `durationLiteralToText(literal)` for the optional display column
|
|
9
|
-
// (preserves the original DSL text — `2w`, `xl`, `1m`, …).
|
|
10
|
-
const SIZE_BUCKET_DAYS = {
|
|
11
|
-
xs: 1,
|
|
12
|
-
sm: 3,
|
|
13
|
-
s: 3,
|
|
14
|
-
md: 5,
|
|
15
|
-
m: 5,
|
|
16
|
-
lg: 10,
|
|
17
|
-
l: 10,
|
|
18
|
-
xl: 15,
|
|
19
|
-
};
|
|
20
|
-
const NUMERIC_RE = /^(\d+(?:\.\d+)?)\s*(d|w|m|y)?$/i;
|
|
21
|
-
const WORKING_DAYS_PER_WEEK = 5;
|
|
22
|
-
const WORKING_DAYS_PER_MONTH = 22;
|
|
23
|
-
const WORKING_DAYS_PER_YEAR = 252;
|
|
24
|
-
/** 0 if the literal is missing/invalid (Excel sums treat 0 as no-op). */
|
|
25
|
-
export function durationToWorkingDays(literal) {
|
|
26
|
-
if (!literal)
|
|
27
|
-
return 0;
|
|
28
|
-
const trimmed = literal.trim().toLowerCase();
|
|
29
|
-
if (!trimmed)
|
|
30
|
-
return 0;
|
|
31
|
-
if (trimmed in SIZE_BUCKET_DAYS)
|
|
32
|
-
return SIZE_BUCKET_DAYS[trimmed];
|
|
33
|
-
const match = NUMERIC_RE.exec(trimmed);
|
|
34
|
-
if (!match)
|
|
35
|
-
return 0;
|
|
36
|
-
const value = Number(match[1]);
|
|
37
|
-
if (!Number.isFinite(value) || value <= 0)
|
|
38
|
-
return 0;
|
|
39
|
-
const unit = (match[2] ?? 'd').toLowerCase();
|
|
40
|
-
if (unit === 'd')
|
|
41
|
-
return value;
|
|
42
|
-
if (unit === 'w')
|
|
43
|
-
return value * WORKING_DAYS_PER_WEEK;
|
|
44
|
-
if (unit === 'm')
|
|
45
|
-
return value * WORKING_DAYS_PER_MONTH;
|
|
46
|
-
if (unit === 'y')
|
|
47
|
-
return value * WORKING_DAYS_PER_YEAR;
|
|
48
|
-
return 0;
|
|
49
|
-
}
|
|
1
|
+
// The XLSX "Duration (text)" column: the item's DSL literal as written
|
|
2
|
+
// (`2w`, `xl`, `1m`, …). The numeric "Duration" column is engine C's
|
|
3
|
+
// `ScheduledItem.days`, so it follows the file's calendar and sizes.
|
|
50
4
|
export function durationLiteralToText(literal) {
|
|
51
5
|
if (!literal)
|
|
52
6
|
return '';
|
package/dist/duration.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"duration.js","sourceRoot":"","sources":["../src/duration.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"duration.js","sourceRoot":"","sources":["../src/duration.ts"],"names":[],"mappings":"AAAA,uEAAuE;AACvE,qEAAqE;AACrE,qEAAqE;AAErE,MAAM,UAAU,qBAAqB,CAAC,OAA2B;IAC7D,IAAI,CAAC,OAAO;QAAE,OAAO,EAAE,CAAC;IACxB,OAAO,OAAO,CAAC,IAAI,EAAE,CAAC;AAC1B,CAAC"}
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAyCA,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,CAgDrB"}
|
package/dist/index.js
CHANGED
|
@@ -5,7 +5,9 @@
|
|
|
5
5
|
// - Resolution 5 (working-day duration): the "Duration" cell is a NUMBER
|
|
6
6
|
// of working days; an extra "Duration (text)" column preserves the
|
|
7
7
|
// original DSL literal. Excel can SUM and filter the numeric column
|
|
8
|
-
// without a custom formatter.
|
|
8
|
+
// without a custom formatter. The number is engine C's `days` under the
|
|
9
|
+
// file's calendar (sizes, `capacity:`, `q` included), so it matches the
|
|
10
|
+
// chart; the Roadmap sheet's "Calendar" row names that calendar.
|
|
9
11
|
// - Resolution 8 (deterministic ExcelJS): pin a single ExcelJS version in
|
|
10
12
|
// `package.json`. Any zip-level non-determinism is patched at write time
|
|
11
13
|
// by re-emitting the package's content streams in deterministic order.
|
|
@@ -24,7 +26,7 @@
|
|
|
24
26
|
import { displayLabel, getProp, getProps, roadmapTitle } from '@nowline/export-core';
|
|
25
27
|
import { scheduleRoadmap } from '@nowline/layout';
|
|
26
28
|
import ExcelJS from 'exceljs';
|
|
27
|
-
import { durationLiteralToText
|
|
29
|
+
import { durationLiteralToText } from './duration.js';
|
|
28
30
|
import { normalizeZipTimestamps } from './zip-normalize.js';
|
|
29
31
|
export async function exportXlsx(inputs, options = {}) {
|
|
30
32
|
const wb = new ExcelJS.Workbook();
|
|
@@ -35,9 +37,12 @@ export async function exportXlsx(inputs, options = {}) {
|
|
|
35
37
|
wb.created = generated;
|
|
36
38
|
wb.modified = generated;
|
|
37
39
|
wb.title = roadmapTitle(inputs.ast.roadmapDecl ?? undefined);
|
|
38
|
-
const schedule = scheduleRoadmap(inputs.ast, inputs.resolved, { today: inputs.today });
|
|
39
|
-
|
|
40
|
-
|
|
40
|
+
const schedule = inputs.schedule ?? scheduleRoadmap(inputs.ast, inputs.resolved, { today: inputs.today });
|
|
41
|
+
// Undefined when the roadmap declares no waves: the Wave column and the
|
|
42
|
+
// Waves sheet are then omitted (specs/waves.md §10).
|
|
43
|
+
const wavePlan = schedule.plan;
|
|
44
|
+
buildRoadmapSheet(wb, inputs, schedule.calendar, generated);
|
|
45
|
+
buildItemsSheet(wb, inputs.ast, schedule, wavePlan);
|
|
41
46
|
const hasMilestones = inputs.ast.roadmapEntries.some((e) => e.$type === 'MilestoneDeclaration');
|
|
42
47
|
if (hasMilestones) {
|
|
43
48
|
buildMilestonesSheet(wb, inputs.ast, schedule);
|
|
@@ -50,6 +55,10 @@ export async function exportXlsx(inputs, options = {}) {
|
|
|
50
55
|
if (hasPeopleOrTeams) {
|
|
51
56
|
buildPeopleAndTeamsSheet(wb, inputs.ast);
|
|
52
57
|
}
|
|
58
|
+
// Always last, so the indices of the existing sheets never change.
|
|
59
|
+
if (wavePlan) {
|
|
60
|
+
buildWavesSheet(wb, wavePlan, schedule);
|
|
61
|
+
}
|
|
53
62
|
const buf = (await wb.xlsx.writeBuffer());
|
|
54
63
|
const bytes = Buffer.isBuffer(buf)
|
|
55
64
|
? new Uint8Array(buf.buffer, buf.byteOffset, buf.byteLength)
|
|
@@ -63,7 +72,7 @@ function inferAuthor(ast) {
|
|
|
63
72
|
return decl.properties.find((p) => p.key === 'author')?.value;
|
|
64
73
|
}
|
|
65
74
|
// ---------- Sheet 1: Roadmap ----------
|
|
66
|
-
function buildRoadmapSheet(wb, inputs, generated) {
|
|
75
|
+
function buildRoadmapSheet(wb, inputs, calendar, generated) {
|
|
67
76
|
const sheet = wb.addWorksheet('Roadmap');
|
|
68
77
|
const decl = inputs.ast.roadmapDecl;
|
|
69
78
|
const scale = decl ? getProp(decl, 'scale') : undefined;
|
|
@@ -73,19 +82,52 @@ function buildRoadmapSheet(wb, inputs, generated) {
|
|
|
73
82
|
['Author', inputs.ast.roadmapDecl ? (getProp(inputs.ast.roadmapDecl, 'author') ?? '') : ''],
|
|
74
83
|
['Scale', scale ?? ''],
|
|
75
84
|
['Start', start ?? ''],
|
|
85
|
+
['Calendar', calendarLabel(calendar)],
|
|
76
86
|
['Generated', generated],
|
|
77
87
|
];
|
|
78
|
-
|
|
88
|
+
for (const row of rows) {
|
|
79
89
|
const r = sheet.addRow(row);
|
|
80
90
|
r.getCell(1).font = { bold: true };
|
|
81
|
-
if (
|
|
91
|
+
if (row[0] === 'Generated')
|
|
82
92
|
r.getCell(2).numFmt = 'yyyy-mm-dd';
|
|
83
|
-
}
|
|
93
|
+
}
|
|
84
94
|
sheet.columns = [
|
|
85
95
|
{ key: 'field', width: 16 },
|
|
86
96
|
{ key: 'value', width: 36 },
|
|
87
97
|
];
|
|
88
98
|
}
|
|
99
|
+
/** Monday first, so a Saturday and Sunday weekend reads in week order. */
|
|
100
|
+
const WEEKDAY_NAMES_MONDAY_FIRST = [
|
|
101
|
+
[1, 'Monday'],
|
|
102
|
+
[2, 'Tuesday'],
|
|
103
|
+
[3, 'Wednesday'],
|
|
104
|
+
[4, 'Thursday'],
|
|
105
|
+
[5, 'Friday'],
|
|
106
|
+
[6, 'Saturday'],
|
|
107
|
+
[0, 'Sunday'],
|
|
108
|
+
];
|
|
109
|
+
/**
|
|
110
|
+
* The Calendar row: the mode, the open week's days off and the unit day
|
|
111
|
+
* counts, e.g. `business (Saturday and Sunday off; 5/22/65/260 days per
|
|
112
|
+
* week/month/quarter/year)`. It explains the Duration column's numbers.
|
|
113
|
+
*/
|
|
114
|
+
function calendarLabel({ config, working }) {
|
|
115
|
+
const off = WEEKDAY_NAMES_MONDAY_FIRST.filter(([weekday]) => !working.workingWeekdays.has(weekday)).map(([, name]) => name);
|
|
116
|
+
const daysOff = off.length === 0 ? 'no days off' : `${joinWithAnd(off)} off`;
|
|
117
|
+
const counts = [
|
|
118
|
+
config.daysPerWeek,
|
|
119
|
+
config.daysPerMonth,
|
|
120
|
+
config.daysPerQuarter,
|
|
121
|
+
config.daysPerYear,
|
|
122
|
+
].join('/');
|
|
123
|
+
return `${config.mode} (${daysOff}; ${counts} days per week/month/quarter/year)`;
|
|
124
|
+
}
|
|
125
|
+
/** `a`, `a and b`, `a, b and c`. */
|
|
126
|
+
function joinWithAnd(words) {
|
|
127
|
+
if (words.length <= 1)
|
|
128
|
+
return words.join('');
|
|
129
|
+
return `${words.slice(0, -1).join(', ')} and ${words[words.length - 1]}`;
|
|
130
|
+
}
|
|
89
131
|
// ---------- Sheet 2: Items ----------
|
|
90
132
|
const ITEM_HEADERS = [
|
|
91
133
|
{ header: 'ID', key: 'id', width: 18 },
|
|
@@ -96,7 +138,7 @@ const ITEM_HEADERS = [
|
|
|
96
138
|
{ header: 'Duration', key: 'duration', width: 12 },
|
|
97
139
|
{ header: 'Duration (text)', key: 'durationText', width: 16 },
|
|
98
140
|
{ header: 'Start', key: 'start', width: 14 },
|
|
99
|
-
{ header: 'End', key: 'end', width:
|
|
141
|
+
{ header: 'End (exclusive)', key: 'end', width: 16 },
|
|
100
142
|
{ header: 'Status', key: 'status', width: 14 },
|
|
101
143
|
{ header: 'Remaining', key: 'remaining', width: 12 },
|
|
102
144
|
{ header: 'Owner', key: 'owner', width: 14 },
|
|
@@ -106,6 +148,17 @@ const ITEM_HEADERS = [
|
|
|
106
148
|
{ header: 'Link', key: 'link', width: 24 },
|
|
107
149
|
{ header: 'Description', key: 'description', width: 36 },
|
|
108
150
|
];
|
|
151
|
+
/** The Items sheet's `Wave` column, inserted after `Parallel` only when waves exist. */
|
|
152
|
+
const WAVE_HEADER = { header: 'Wave', key: 'wave', width: 16 };
|
|
153
|
+
/** The item columns: `ITEM_HEADERS`, plus `Wave` after `Parallel` when the roadmap has waves. */
|
|
154
|
+
function itemHeaders(plan) {
|
|
155
|
+
const headers = [...ITEM_HEADERS];
|
|
156
|
+
if (plan) {
|
|
157
|
+
const at = headers.findIndex((h) => h.key === 'parallel') + 1;
|
|
158
|
+
headers.splice(at, 0, { ...WAVE_HEADER });
|
|
159
|
+
}
|
|
160
|
+
return headers;
|
|
161
|
+
}
|
|
109
162
|
const STATUS_FILLS = {
|
|
110
163
|
done: 'FFC8E6C9', // green
|
|
111
164
|
'in-progress': 'FFBBDEFB', // blue
|
|
@@ -113,11 +166,12 @@ const STATUS_FILLS = {
|
|
|
113
166
|
blocked: 'FFFFCDD2', // red
|
|
114
167
|
planned: 'FFE0E0E0', // grey
|
|
115
168
|
};
|
|
116
|
-
function buildItemsSheet(wb, ast, schedule) {
|
|
169
|
+
function buildItemsSheet(wb, ast, schedule, plan) {
|
|
117
170
|
const sheet = wb.addWorksheet('Items', {
|
|
118
171
|
views: [{ state: 'frozen', xSplit: 0, ySplit: 1 }],
|
|
119
172
|
});
|
|
120
|
-
|
|
173
|
+
const headers = itemHeaders(plan);
|
|
174
|
+
sheet.columns = headers;
|
|
121
175
|
// Format the Start/End date columns as ISO dates.
|
|
122
176
|
const startCol = sheet.getColumn('start');
|
|
123
177
|
const endCol = sheet.getColumn('end');
|
|
@@ -129,7 +183,11 @@ function buildItemsSheet(wb, ast, schedule) {
|
|
|
129
183
|
collectFromSwimlane(entry, [swimlaneLabel(entry)], rows, '', '', schedule);
|
|
130
184
|
}
|
|
131
185
|
}
|
|
132
|
-
|
|
186
|
+
if (plan) {
|
|
187
|
+
for (const r of rows)
|
|
188
|
+
r.wave = waveIdOf(r.node, plan);
|
|
189
|
+
}
|
|
190
|
+
for (const { node: _node, ...r } of rows)
|
|
133
191
|
sheet.addRow(r);
|
|
134
192
|
// Status conditional formatting via per-row fill; ExcelJS ConditionalFormat
|
|
135
193
|
// is supported but the per-row fill is simpler and equally deterministic.
|
|
@@ -149,7 +207,7 @@ function buildItemsSheet(wb, ast, schedule) {
|
|
|
149
207
|
sheet.getRow(1).font = { bold: true };
|
|
150
208
|
sheet.autoFilter = {
|
|
151
209
|
from: { row: 1, column: 1 },
|
|
152
|
-
to: { row: Math.max(rows.length + 1, 1), column:
|
|
210
|
+
to: { row: Math.max(rows.length + 1, 1), column: headers.length },
|
|
153
211
|
};
|
|
154
212
|
}
|
|
155
213
|
/**
|
|
@@ -219,12 +277,13 @@ function itemRow(item, swimlane, group, parallel, schedule) {
|
|
|
219
277
|
// belt-and-suspenders) for named items in case the node reference differs.
|
|
220
278
|
const scheduled = schedule.byNode.get(item) ?? (item.name ? schedule.items.get(item.name) : undefined);
|
|
221
279
|
return {
|
|
280
|
+
node: item,
|
|
222
281
|
id: item.name ?? '',
|
|
223
282
|
title: item.title ?? '',
|
|
224
283
|
swimlane,
|
|
225
284
|
group,
|
|
226
285
|
parallel,
|
|
227
|
-
duration:
|
|
286
|
+
duration: scheduled?.days ?? 0,
|
|
228
287
|
durationText: durationLiteralToText(durationLiteral),
|
|
229
288
|
start: scheduled?.start,
|
|
230
289
|
end: scheduled?.end,
|
|
@@ -238,6 +297,11 @@ function itemRow(item, swimlane, group, parallel, schedule) {
|
|
|
238
297
|
description: item.description?.text ?? '',
|
|
239
298
|
};
|
|
240
299
|
}
|
|
300
|
+
/** The item's effective wave id (specs/waves.md §4.4); blank for background work. */
|
|
301
|
+
function waveIdOf(item, plan) {
|
|
302
|
+
const k = plan.memberWave(item);
|
|
303
|
+
return k === undefined ? '' : (plan.waves[k - 1]?.name ?? '');
|
|
304
|
+
}
|
|
241
305
|
// ---------- Sheet 3: Milestones ----------
|
|
242
306
|
function buildMilestonesSheet(wb, ast, schedule) {
|
|
243
307
|
const sheet = wb.addWorksheet('Milestones', {
|
|
@@ -336,4 +400,39 @@ function walkTeam(team, parent, sheet) {
|
|
|
336
400
|
}
|
|
337
401
|
}
|
|
338
402
|
}
|
|
403
|
+
// ---------- Sheet 6: Waves ----------
|
|
404
|
+
function buildWavesSheet(wb, plan, schedule) {
|
|
405
|
+
const sheet = wb.addWorksheet('Waves', {
|
|
406
|
+
views: [{ state: 'frozen', xSplit: 0, ySplit: 1 }],
|
|
407
|
+
});
|
|
408
|
+
sheet.columns = [
|
|
409
|
+
{ header: 'ID', key: 'id', width: 18 },
|
|
410
|
+
{ header: 'Title', key: 'title', width: 28 },
|
|
411
|
+
{ header: 'Order', key: 'order', width: 8 },
|
|
412
|
+
{ header: 'Start', key: 'start', width: 14 },
|
|
413
|
+
{ header: 'End (exclusive)', key: 'end', width: 16 },
|
|
414
|
+
{ header: 'Items', key: 'items', width: 8 },
|
|
415
|
+
{ header: 'Held by', key: 'heldBy', width: 18 },
|
|
416
|
+
{ header: 'After', key: 'after', width: 24 },
|
|
417
|
+
{ header: 'Description', key: 'description', width: 36 },
|
|
418
|
+
];
|
|
419
|
+
sheet.getColumn('start').numFmt = 'yyyy-mm-dd';
|
|
420
|
+
sheet.getColumn('end').numFmt = 'yyyy-mm-dd';
|
|
421
|
+
plan.waves.forEach((w, i) => {
|
|
422
|
+
const id = w.name ?? '';
|
|
423
|
+
const scheduled = schedule.waves?.get(id);
|
|
424
|
+
sheet.addRow({
|
|
425
|
+
id,
|
|
426
|
+
title: displayLabel(w),
|
|
427
|
+
order: i + 1,
|
|
428
|
+
start: scheduled?.start ?? '',
|
|
429
|
+
end: scheduled?.end ?? '',
|
|
430
|
+
items: scheduled?.memberCount ?? 0,
|
|
431
|
+
heldBy: scheduled?.heldBy ?? '',
|
|
432
|
+
after: getProps(w, 'after').join('; '),
|
|
433
|
+
description: w.description?.text ?? '',
|
|
434
|
+
});
|
|
435
|
+
});
|
|
436
|
+
sheet.getRow(1).font = { bold: true };
|
|
437
|
+
}
|
|
339
438
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
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,OAAO,GAAgB,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"}
|
|
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,4EAA4E;AAC5E,4EAA4E;AAC5E,qEAAqE;AACrE,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;AAkBtD,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACrF,OAAO,EAA+C,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAC/F,OAAO,OAAO,MAAM,SAAS,CAAC;AAE9B,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAS5D,MAAM,CAAC,KAAK,UAAU,UAAU,CAC5B,MAAoB,EACpB,OAAO,GAAgB,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,GACV,MAAM,CAAC,QAAQ,IAAI,eAAe,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;IAC7F,wEAAwE;IACxE,qDAAqD;IACrD,MAAM,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC;IAE/B,iBAAiB,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;IAC5D,eAAe,CAAC,EAAE,EAAE,MAAM,CAAC,GAAG,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAEpD,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,mEAAmE;IACnE,IAAI,QAAQ,EAAE,CAAC;QACX,eAAe,CAAC,EAAE,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAC5C,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,CACtB,EAAoB,EACpB,MAAoB,EACpB,QAA0B,EAC1B,SAAe;IAEf,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,UAAU,EAAE,aAAa,CAAC,QAAQ,CAAC,CAAC;QACrC,CAAC,WAAW,EAAE,SAAS,CAAC;KAC3B,CAAC;IACF,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACrB,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,CAAC,CAAC,CAAC,KAAK,WAAW;YAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,YAAY,CAAC;IACnE,CAAC;IACD,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,0EAA0E;AAC1E,MAAM,0BAA0B,GAAoC;IAChE,CAAC,CAAC,EAAE,QAAQ,CAAC;IACb,CAAC,CAAC,EAAE,SAAS,CAAC;IACd,CAAC,CAAC,EAAE,WAAW,CAAC;IAChB,CAAC,CAAC,EAAE,UAAU,CAAC;IACf,CAAC,CAAC,EAAE,QAAQ,CAAC;IACb,CAAC,CAAC,EAAE,UAAU,CAAC;IACf,CAAC,CAAC,EAAE,QAAQ,CAAC;CAChB,CAAC;AAEF;;;;GAIG;AACH,SAAS,aAAa,CAAC,EAAE,MAAM,EAAE,OAAO,EAAoB;IACxD,MAAM,GAAG,GAAG,0BAA0B,CAAC,MAAM,CACzC,CAAC,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,eAAe,CAAC,GAAG,CAAC,OAAO,CAAC,CACvD,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC;IAC1B,MAAM,OAAO,GAAG,GAAG,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC;IAC7E,MAAM,MAAM,GAAG;QACX,MAAM,CAAC,WAAW;QAClB,MAAM,CAAC,YAAY;QACnB,MAAM,CAAC,cAAc;QACrB,MAAM,CAAC,WAAW;KACrB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACZ,OAAO,GAAG,MAAM,CAAC,IAAI,KAAK,OAAO,KAAK,MAAM,oCAAoC,CAAC;AACrF,CAAC;AAED,oCAAoC;AACpC,SAAS,WAAW,CAAC,KAAwB;IACzC,IAAI,KAAK,CAAC,MAAM,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC7C,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,CAAC;AAC7E,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,iBAAiB,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE;IACpD,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,wFAAwF;AACxF,MAAM,WAAW,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,EAAW,CAAC;AAExE,iGAAiG;AACjG,SAAS,WAAW,CAChB,IAA0B;IAE1B,MAAM,OAAO,GAAG,CAAC,GAAG,YAAY,CAAC,CAAC;IAClC,IAAI,IAAI,EAAE,CAAC;QACP,MAAM,EAAE,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,UAAU,CAAC,GAAG,CAAC,CAAC;QAC9D,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,GAAG,WAAW,EAAE,CAAC,CAAC;IAC9C,CAAC;IACD,OAAO,OAAO,CAAC;AACnB,CAAC;AAED,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;AA0BF,SAAS,eAAe,CACpB,EAAoB,EACpB,GAAgB,EAChB,QAAyB,EACzB,IAA0B;IAE1B,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,MAAM,OAAO,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;IAClC,KAAK,CAAC,OAAO,GAAG,OAAO,CAAC;IAExB,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,IAAI,IAAI,EAAE,CAAC;QACP,KAAK,MAAM,CAAC,IAAI,IAAI;YAAE,CAAC,CAAC,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAC1D,CAAC;IACD,KAAK,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,CAAC,EAAE,IAAI,IAAI;QAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IAE1D,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,OAAO,CAAC,MAAM,EAAE;KACpE,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,IAAI,EAAE,IAAI;QACV,EAAE,EAAE,IAAI,CAAC,IAAI,IAAI,EAAE;QACnB,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,EAAE;QACvB,QAAQ;QACR,KAAK;QACL,QAAQ;QACR,QAAQ,EAAE,SAAS,EAAE,IAAI,IAAI,CAAC;QAC9B,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,qFAAqF;AACrF,SAAS,QAAQ,CAAC,IAAqB,EAAE,IAAc;IACnD,MAAM,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IAChC,OAAO,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,IAAI,EAAE,CAAC,CAAC;AAClE,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;AAED,uCAAuC;AAEvC,SAAS,eAAe,CAAC,EAAoB,EAAE,IAAc,EAAE,QAAyB;IACpF,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;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,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE;QAC3C,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE;QAC5C,EAAE,MAAM,EAAE,iBAAiB,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE;QACpD,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE;QAC3C,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,EAAE;QAC/C,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE;QAC5C,EAAE,MAAM,EAAE,aAAa,EAAE,GAAG,EAAE,aAAa,EAAE,KAAK,EAAE,EAAE,EAAE;KAC3D,CAAC;IACF,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,MAAM,GAAG,YAAY,CAAC;IAC/C,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,YAAY,CAAC;IAE7C,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAkB,EAAE,CAAC,EAAE,EAAE;QACzC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC;QACxB,MAAM,SAAS,GAAG,QAAQ,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;QAC1C,KAAK,CAAC,MAAM,CAAC;YACT,EAAE;YACF,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC;YACtB,KAAK,EAAE,CAAC,GAAG,CAAC;YACZ,KAAK,EAAE,SAAS,EAAE,KAAK,IAAI,EAAE;YAC7B,GAAG,EAAE,SAAS,EAAE,GAAG,IAAI,EAAE;YACzB,KAAK,EAAE,SAAS,EAAE,WAAW,IAAI,CAAC;YAClC,MAAM,EAAE,SAAS,EAAE,MAAM,IAAI,EAAE;YAC/B,KAAK,EAAE,QAAQ,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;YACtC,WAAW,EAAE,CAAC,CAAC,WAAW,EAAE,IAAI,IAAI,EAAE;SACzC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IACH,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AAC1C,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@nowline/export-xlsx",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.9.0",
|
|
4
4
|
"description": "Exports a Nowline roadmap as an Excel workbook.",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"engines": {
|
|
@@ -21,16 +21,16 @@
|
|
|
21
21
|
"src/"
|
|
22
22
|
],
|
|
23
23
|
"dependencies": {
|
|
24
|
-
"@nowline/core": "0.
|
|
25
|
-
"@nowline/export-core": "0.
|
|
26
|
-
"@nowline/layout": "0.
|
|
24
|
+
"@nowline/core": "0.9.0",
|
|
25
|
+
"@nowline/export-core": "0.9.0",
|
|
26
|
+
"@nowline/layout": "0.9.0",
|
|
27
27
|
"exceljs": "4.4.0"
|
|
28
28
|
},
|
|
29
29
|
"devDependencies": {
|
|
30
|
-
"@types/node": "^26.6.
|
|
30
|
+
"@types/node": "^26.6.5",
|
|
31
31
|
"langium": "~4.4.0",
|
|
32
32
|
"typescript": "^7.0.2",
|
|
33
|
-
"vitest": "^5.0.
|
|
33
|
+
"vitest": "^5.0.5"
|
|
34
34
|
},
|
|
35
35
|
"scripts": {
|
|
36
36
|
"build": "tsc -b tsconfig.json",
|
package/src/duration.ts
CHANGED
|
@@ -1,47 +1,6 @@
|
|
|
1
|
-
//
|
|
2
|
-
//
|
|
3
|
-
//
|
|
4
|
-
//
|
|
5
|
-
// We expose two artifacts:
|
|
6
|
-
// - `durationToWorkingDays(literal)` for the cell value (Number type so
|
|
7
|
-
// Excel SUM / sort / filter work).
|
|
8
|
-
// - `durationLiteralToText(literal)` for the optional display column
|
|
9
|
-
// (preserves the original DSL text — `2w`, `xl`, `1m`, …).
|
|
10
|
-
|
|
11
|
-
const SIZE_BUCKET_DAYS: Readonly<Record<string, number>> = {
|
|
12
|
-
xs: 1,
|
|
13
|
-
sm: 3,
|
|
14
|
-
s: 3,
|
|
15
|
-
md: 5,
|
|
16
|
-
m: 5,
|
|
17
|
-
lg: 10,
|
|
18
|
-
l: 10,
|
|
19
|
-
xl: 15,
|
|
20
|
-
};
|
|
21
|
-
|
|
22
|
-
const NUMERIC_RE = /^(\d+(?:\.\d+)?)\s*(d|w|m|y)?$/i;
|
|
23
|
-
|
|
24
|
-
const WORKING_DAYS_PER_WEEK = 5;
|
|
25
|
-
const WORKING_DAYS_PER_MONTH = 22;
|
|
26
|
-
const WORKING_DAYS_PER_YEAR = 252;
|
|
27
|
-
|
|
28
|
-
/** 0 if the literal is missing/invalid (Excel sums treat 0 as no-op). */
|
|
29
|
-
export function durationToWorkingDays(literal: string | undefined): number {
|
|
30
|
-
if (!literal) return 0;
|
|
31
|
-
const trimmed = literal.trim().toLowerCase();
|
|
32
|
-
if (!trimmed) return 0;
|
|
33
|
-
if (trimmed in SIZE_BUCKET_DAYS) return SIZE_BUCKET_DAYS[trimmed];
|
|
34
|
-
const match = NUMERIC_RE.exec(trimmed);
|
|
35
|
-
if (!match) return 0;
|
|
36
|
-
const value = Number(match[1]);
|
|
37
|
-
if (!Number.isFinite(value) || value <= 0) return 0;
|
|
38
|
-
const unit = (match[2] ?? 'd').toLowerCase();
|
|
39
|
-
if (unit === 'd') return value;
|
|
40
|
-
if (unit === 'w') return value * WORKING_DAYS_PER_WEEK;
|
|
41
|
-
if (unit === 'm') return value * WORKING_DAYS_PER_MONTH;
|
|
42
|
-
if (unit === 'y') return value * WORKING_DAYS_PER_YEAR;
|
|
43
|
-
return 0;
|
|
44
|
-
}
|
|
1
|
+
// The XLSX "Duration (text)" column: the item's DSL literal as written
|
|
2
|
+
// (`2w`, `xl`, `1m`, …). The numeric "Duration" column is engine C's
|
|
3
|
+
// `ScheduledItem.days`, so it follows the file's calendar and sizes.
|
|
45
4
|
|
|
46
5
|
export function durationLiteralToText(literal: string | undefined): string {
|
|
47
6
|
if (!literal) return '';
|
package/src/index.ts
CHANGED
|
@@ -5,7 +5,9 @@
|
|
|
5
5
|
// - Resolution 5 (working-day duration): the "Duration" cell is a NUMBER
|
|
6
6
|
// of working days; an extra "Duration (text)" column preserves the
|
|
7
7
|
// original DSL literal. Excel can SUM and filter the numeric column
|
|
8
|
-
// without a custom formatter.
|
|
8
|
+
// without a custom formatter. The number is engine C's `days` under the
|
|
9
|
+
// file's calendar (sizes, `capacity:`, `q` included), so it matches the
|
|
10
|
+
// chart; the Roadmap sheet's "Calendar" row names that calendar.
|
|
9
11
|
// - Resolution 8 (deterministic ExcelJS): pin a single ExcelJS version in
|
|
10
12
|
// `package.json`. Any zip-level non-determinism is patched at write time
|
|
11
13
|
// by re-emitting the package's content streams in deterministic order.
|
|
@@ -34,13 +36,15 @@ import type {
|
|
|
34
36
|
SwimlaneContent,
|
|
35
37
|
SwimlaneDeclaration,
|
|
36
38
|
TeamDeclaration,
|
|
39
|
+
WaveDeclaration,
|
|
40
|
+
WavePlan,
|
|
37
41
|
} from '@nowline/core';
|
|
38
42
|
import type { ExportInputs } from '@nowline/export-core';
|
|
39
43
|
import { displayLabel, getProp, getProps, roadmapTitle } from '@nowline/export-core';
|
|
40
|
-
import { type RoadmapSchedule, scheduleRoadmap } from '@nowline/layout';
|
|
44
|
+
import { type ResolvedCalendar, type RoadmapSchedule, scheduleRoadmap } from '@nowline/layout';
|
|
41
45
|
import ExcelJS from 'exceljs';
|
|
42
46
|
|
|
43
|
-
import { durationLiteralToText
|
|
47
|
+
import { durationLiteralToText } from './duration.js';
|
|
44
48
|
import { normalizeZipTimestamps } from './zip-normalize.js';
|
|
45
49
|
|
|
46
50
|
export interface XlsxOptions {
|
|
@@ -65,10 +69,14 @@ export async function exportXlsx(
|
|
|
65
69
|
wb.modified = generated;
|
|
66
70
|
wb.title = roadmapTitle(inputs.ast.roadmapDecl ?? undefined);
|
|
67
71
|
|
|
68
|
-
const schedule =
|
|
72
|
+
const schedule =
|
|
73
|
+
inputs.schedule ?? scheduleRoadmap(inputs.ast, inputs.resolved, { today: inputs.today });
|
|
74
|
+
// Undefined when the roadmap declares no waves: the Wave column and the
|
|
75
|
+
// Waves sheet are then omitted (specs/waves.md §10).
|
|
76
|
+
const wavePlan = schedule.plan;
|
|
69
77
|
|
|
70
|
-
buildRoadmapSheet(wb, inputs, generated);
|
|
71
|
-
buildItemsSheet(wb, inputs.ast, schedule);
|
|
78
|
+
buildRoadmapSheet(wb, inputs, schedule.calendar, generated);
|
|
79
|
+
buildItemsSheet(wb, inputs.ast, schedule, wavePlan);
|
|
72
80
|
|
|
73
81
|
const hasMilestones = inputs.ast.roadmapEntries.some((e) => e.$type === 'MilestoneDeclaration');
|
|
74
82
|
if (hasMilestones) {
|
|
@@ -87,6 +95,11 @@ export async function exportXlsx(
|
|
|
87
95
|
buildPeopleAndTeamsSheet(wb, inputs.ast);
|
|
88
96
|
}
|
|
89
97
|
|
|
98
|
+
// Always last, so the indices of the existing sheets never change.
|
|
99
|
+
if (wavePlan) {
|
|
100
|
+
buildWavesSheet(wb, wavePlan, schedule);
|
|
101
|
+
}
|
|
102
|
+
|
|
90
103
|
const buf = (await wb.xlsx.writeBuffer()) as ArrayBuffer | Buffer;
|
|
91
104
|
const bytes = Buffer.isBuffer(buf)
|
|
92
105
|
? new Uint8Array(buf.buffer, buf.byteOffset, buf.byteLength)
|
|
@@ -102,7 +115,12 @@ function inferAuthor(ast: NowlineFile): string | undefined {
|
|
|
102
115
|
|
|
103
116
|
// ---------- Sheet 1: Roadmap ----------
|
|
104
117
|
|
|
105
|
-
function buildRoadmapSheet(
|
|
118
|
+
function buildRoadmapSheet(
|
|
119
|
+
wb: ExcelJS.Workbook,
|
|
120
|
+
inputs: ExportInputs,
|
|
121
|
+
calendar: ResolvedCalendar,
|
|
122
|
+
generated: Date,
|
|
123
|
+
): void {
|
|
106
124
|
const sheet = wb.addWorksheet('Roadmap');
|
|
107
125
|
const decl = inputs.ast.roadmapDecl;
|
|
108
126
|
const scale = decl ? getProp(decl, 'scale') : undefined;
|
|
@@ -113,19 +131,56 @@ function buildRoadmapSheet(wb: ExcelJS.Workbook, inputs: ExportInputs, generated
|
|
|
113
131
|
['Author', inputs.ast.roadmapDecl ? (getProp(inputs.ast.roadmapDecl, 'author') ?? '') : ''],
|
|
114
132
|
['Scale', scale ?? ''],
|
|
115
133
|
['Start', start ?? ''],
|
|
134
|
+
['Calendar', calendarLabel(calendar)],
|
|
116
135
|
['Generated', generated],
|
|
117
136
|
];
|
|
118
|
-
|
|
137
|
+
for (const row of rows) {
|
|
119
138
|
const r = sheet.addRow(row);
|
|
120
139
|
r.getCell(1).font = { bold: true };
|
|
121
|
-
if (
|
|
122
|
-
}
|
|
140
|
+
if (row[0] === 'Generated') r.getCell(2).numFmt = 'yyyy-mm-dd';
|
|
141
|
+
}
|
|
123
142
|
sheet.columns = [
|
|
124
143
|
{ key: 'field', width: 16 },
|
|
125
144
|
{ key: 'value', width: 36 },
|
|
126
145
|
];
|
|
127
146
|
}
|
|
128
147
|
|
|
148
|
+
/** Monday first, so a Saturday and Sunday weekend reads in week order. */
|
|
149
|
+
const WEEKDAY_NAMES_MONDAY_FIRST: ReadonlyArray<[number, string]> = [
|
|
150
|
+
[1, 'Monday'],
|
|
151
|
+
[2, 'Tuesday'],
|
|
152
|
+
[3, 'Wednesday'],
|
|
153
|
+
[4, 'Thursday'],
|
|
154
|
+
[5, 'Friday'],
|
|
155
|
+
[6, 'Saturday'],
|
|
156
|
+
[0, 'Sunday'],
|
|
157
|
+
];
|
|
158
|
+
|
|
159
|
+
/**
|
|
160
|
+
* The Calendar row: the mode, the open week's days off and the unit day
|
|
161
|
+
* counts, e.g. `business (Saturday and Sunday off; 5/22/65/260 days per
|
|
162
|
+
* week/month/quarter/year)`. It explains the Duration column's numbers.
|
|
163
|
+
*/
|
|
164
|
+
function calendarLabel({ config, working }: ResolvedCalendar): string {
|
|
165
|
+
const off = WEEKDAY_NAMES_MONDAY_FIRST.filter(
|
|
166
|
+
([weekday]) => !working.workingWeekdays.has(weekday),
|
|
167
|
+
).map(([, name]) => name);
|
|
168
|
+
const daysOff = off.length === 0 ? 'no days off' : `${joinWithAnd(off)} off`;
|
|
169
|
+
const counts = [
|
|
170
|
+
config.daysPerWeek,
|
|
171
|
+
config.daysPerMonth,
|
|
172
|
+
config.daysPerQuarter,
|
|
173
|
+
config.daysPerYear,
|
|
174
|
+
].join('/');
|
|
175
|
+
return `${config.mode} (${daysOff}; ${counts} days per week/month/quarter/year)`;
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
/** `a`, `a and b`, `a, b and c`. */
|
|
179
|
+
function joinWithAnd(words: readonly string[]): string {
|
|
180
|
+
if (words.length <= 1) return words.join('');
|
|
181
|
+
return `${words.slice(0, -1).join(', ')} and ${words[words.length - 1]}`;
|
|
182
|
+
}
|
|
183
|
+
|
|
129
184
|
// ---------- Sheet 2: Items ----------
|
|
130
185
|
|
|
131
186
|
const ITEM_HEADERS: ReadonlyArray<{ header: string; key: string; width: number }> = [
|
|
@@ -137,7 +192,7 @@ const ITEM_HEADERS: ReadonlyArray<{ header: string; key: string; width: number }
|
|
|
137
192
|
{ header: 'Duration', key: 'duration', width: 12 },
|
|
138
193
|
{ header: 'Duration (text)', key: 'durationText', width: 16 },
|
|
139
194
|
{ header: 'Start', key: 'start', width: 14 },
|
|
140
|
-
{ header: 'End', key: 'end', width:
|
|
195
|
+
{ header: 'End (exclusive)', key: 'end', width: 16 },
|
|
141
196
|
{ header: 'Status', key: 'status', width: 14 },
|
|
142
197
|
{ header: 'Remaining', key: 'remaining', width: 12 },
|
|
143
198
|
{ header: 'Owner', key: 'owner', width: 14 },
|
|
@@ -148,6 +203,21 @@ const ITEM_HEADERS: ReadonlyArray<{ header: string; key: string; width: number }
|
|
|
148
203
|
{ header: 'Description', key: 'description', width: 36 },
|
|
149
204
|
];
|
|
150
205
|
|
|
206
|
+
/** The Items sheet's `Wave` column, inserted after `Parallel` only when waves exist. */
|
|
207
|
+
const WAVE_HEADER = { header: 'Wave', key: 'wave', width: 16 } as const;
|
|
208
|
+
|
|
209
|
+
/** The item columns: `ITEM_HEADERS`, plus `Wave` after `Parallel` when the roadmap has waves. */
|
|
210
|
+
function itemHeaders(
|
|
211
|
+
plan: WavePlan | undefined,
|
|
212
|
+
): Array<{ header: string; key: string; width: number }> {
|
|
213
|
+
const headers = [...ITEM_HEADERS];
|
|
214
|
+
if (plan) {
|
|
215
|
+
const at = headers.findIndex((h) => h.key === 'parallel') + 1;
|
|
216
|
+
headers.splice(at, 0, { ...WAVE_HEADER });
|
|
217
|
+
}
|
|
218
|
+
return headers;
|
|
219
|
+
}
|
|
220
|
+
|
|
151
221
|
const STATUS_FILLS: Readonly<Record<string, string>> = {
|
|
152
222
|
done: 'FFC8E6C9', // green
|
|
153
223
|
'in-progress': 'FFBBDEFB', // blue
|
|
@@ -157,11 +227,15 @@ const STATUS_FILLS: Readonly<Record<string, string>> = {
|
|
|
157
227
|
};
|
|
158
228
|
|
|
159
229
|
interface ItemRow {
|
|
230
|
+
/** The source item; not a column (stripped before the row is added). */
|
|
231
|
+
node: ItemDeclaration;
|
|
160
232
|
id: string;
|
|
161
233
|
title: string;
|
|
162
234
|
swimlane: string;
|
|
163
235
|
group: string;
|
|
164
236
|
parallel: string;
|
|
237
|
+
/** The effective wave id; present only when the roadmap has waves. */
|
|
238
|
+
wave?: string;
|
|
165
239
|
duration: number;
|
|
166
240
|
durationText: string;
|
|
167
241
|
start: Date | undefined;
|
|
@@ -176,11 +250,17 @@ interface ItemRow {
|
|
|
176
250
|
description: string;
|
|
177
251
|
}
|
|
178
252
|
|
|
179
|
-
function buildItemsSheet(
|
|
253
|
+
function buildItemsSheet(
|
|
254
|
+
wb: ExcelJS.Workbook,
|
|
255
|
+
ast: NowlineFile,
|
|
256
|
+
schedule: RoadmapSchedule,
|
|
257
|
+
plan: WavePlan | undefined,
|
|
258
|
+
): void {
|
|
180
259
|
const sheet = wb.addWorksheet('Items', {
|
|
181
260
|
views: [{ state: 'frozen', xSplit: 0, ySplit: 1 }],
|
|
182
261
|
});
|
|
183
|
-
|
|
262
|
+
const headers = itemHeaders(plan);
|
|
263
|
+
sheet.columns = headers;
|
|
184
264
|
|
|
185
265
|
// Format the Start/End date columns as ISO dates.
|
|
186
266
|
const startCol = sheet.getColumn('start');
|
|
@@ -201,7 +281,10 @@ function buildItemsSheet(wb: ExcelJS.Workbook, ast: NowlineFile, schedule: Roadm
|
|
|
201
281
|
);
|
|
202
282
|
}
|
|
203
283
|
}
|
|
204
|
-
|
|
284
|
+
if (plan) {
|
|
285
|
+
for (const r of rows) r.wave = waveIdOf(r.node, plan);
|
|
286
|
+
}
|
|
287
|
+
for (const { node: _node, ...r } of rows) sheet.addRow(r);
|
|
205
288
|
|
|
206
289
|
// Status conditional formatting via per-row fill; ExcelJS ConditionalFormat
|
|
207
290
|
// is supported but the per-row fill is simpler and equally deterministic.
|
|
@@ -221,7 +304,7 @@ function buildItemsSheet(wb: ExcelJS.Workbook, ast: NowlineFile, schedule: Roadm
|
|
|
221
304
|
sheet.getRow(1).font = { bold: true };
|
|
222
305
|
sheet.autoFilter = {
|
|
223
306
|
from: { row: 1, column: 1 },
|
|
224
|
-
to: { row: Math.max(rows.length + 1, 1), column:
|
|
307
|
+
to: { row: Math.max(rows.length + 1, 1), column: headers.length },
|
|
225
308
|
};
|
|
226
309
|
}
|
|
227
310
|
|
|
@@ -321,12 +404,13 @@ function itemRow(
|
|
|
321
404
|
const scheduled =
|
|
322
405
|
schedule.byNode.get(item) ?? (item.name ? schedule.items.get(item.name) : undefined);
|
|
323
406
|
return {
|
|
407
|
+
node: item,
|
|
324
408
|
id: item.name ?? '',
|
|
325
409
|
title: item.title ?? '',
|
|
326
410
|
swimlane,
|
|
327
411
|
group,
|
|
328
412
|
parallel,
|
|
329
|
-
duration:
|
|
413
|
+
duration: scheduled?.days ?? 0,
|
|
330
414
|
durationText: durationLiteralToText(durationLiteral),
|
|
331
415
|
start: scheduled?.start,
|
|
332
416
|
end: scheduled?.end,
|
|
@@ -341,6 +425,12 @@ function itemRow(
|
|
|
341
425
|
};
|
|
342
426
|
}
|
|
343
427
|
|
|
428
|
+
/** The item's effective wave id (specs/waves.md §4.4); blank for background work. */
|
|
429
|
+
function waveIdOf(item: ItemDeclaration, plan: WavePlan): string {
|
|
430
|
+
const k = plan.memberWave(item);
|
|
431
|
+
return k === undefined ? '' : (plan.waves[k - 1]?.name ?? '');
|
|
432
|
+
}
|
|
433
|
+
|
|
344
434
|
// ---------- Sheet 3: Milestones ----------
|
|
345
435
|
|
|
346
436
|
function buildMilestonesSheet(
|
|
@@ -455,3 +545,41 @@ function walkTeam(team: TeamDeclaration, parent: string, sheet: ExcelJS.Workshee
|
|
|
455
545
|
}
|
|
456
546
|
}
|
|
457
547
|
}
|
|
548
|
+
|
|
549
|
+
// ---------- Sheet 6: Waves ----------
|
|
550
|
+
|
|
551
|
+
function buildWavesSheet(wb: ExcelJS.Workbook, plan: WavePlan, schedule: RoadmapSchedule): void {
|
|
552
|
+
const sheet = wb.addWorksheet('Waves', {
|
|
553
|
+
views: [{ state: 'frozen', xSplit: 0, ySplit: 1 }],
|
|
554
|
+
});
|
|
555
|
+
sheet.columns = [
|
|
556
|
+
{ header: 'ID', key: 'id', width: 18 },
|
|
557
|
+
{ header: 'Title', key: 'title', width: 28 },
|
|
558
|
+
{ header: 'Order', key: 'order', width: 8 },
|
|
559
|
+
{ header: 'Start', key: 'start', width: 14 },
|
|
560
|
+
{ header: 'End (exclusive)', key: 'end', width: 16 },
|
|
561
|
+
{ header: 'Items', key: 'items', width: 8 },
|
|
562
|
+
{ header: 'Held by', key: 'heldBy', width: 18 },
|
|
563
|
+
{ header: 'After', key: 'after', width: 24 },
|
|
564
|
+
{ header: 'Description', key: 'description', width: 36 },
|
|
565
|
+
];
|
|
566
|
+
sheet.getColumn('start').numFmt = 'yyyy-mm-dd';
|
|
567
|
+
sheet.getColumn('end').numFmt = 'yyyy-mm-dd';
|
|
568
|
+
|
|
569
|
+
plan.waves.forEach((w: WaveDeclaration, i) => {
|
|
570
|
+
const id = w.name ?? '';
|
|
571
|
+
const scheduled = schedule.waves?.get(id);
|
|
572
|
+
sheet.addRow({
|
|
573
|
+
id,
|
|
574
|
+
title: displayLabel(w),
|
|
575
|
+
order: i + 1,
|
|
576
|
+
start: scheduled?.start ?? '',
|
|
577
|
+
end: scheduled?.end ?? '',
|
|
578
|
+
items: scheduled?.memberCount ?? 0,
|
|
579
|
+
heldBy: scheduled?.heldBy ?? '',
|
|
580
|
+
after: getProps(w, 'after').join('; '),
|
|
581
|
+
description: w.description?.text ?? '',
|
|
582
|
+
});
|
|
583
|
+
});
|
|
584
|
+
sheet.getRow(1).font = { bold: true };
|
|
585
|
+
}
|