@nowline/export-xlsx 0.8.5 → 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 CHANGED
@@ -32,8 +32,8 @@ const xlsx = await exportXlsx(inputs, {
32
32
 
33
33
  | Sheet | Columns | Notes |
34
34
  |--------------------|---------|-------|
35
- | **Roadmap** | Title, Author, Generated, Source path | Workbook overview. |
36
- | **Items** | id, title, swimlane, group, parallel, status, owner, after, before, duration (working days), duration (text), labels, description | One row per item. The numeric duration column is in working days for SUM and filters; the text column preserves the original DSL literal (`2w`, `1m`, etc.). |
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. |
@@ -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
@@ -1 +1 @@
1
- {"version":3,"file":"duration.d.ts","sourceRoot":"","sources":["../src/duration.ts"],"names":[],"mappings":"AA2BA,yEAAyE;AACzE,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAezE;AAED,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAGzE"}
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
- // Convert Nowline duration tokens into a numeric working-day count for the
2
- // XLSX "Duration" column. Spec: specs/handoffs/m2c.md § 7
3
- // "Resolution 5: numeric working-day duration".
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 '';
@@ -1 +1 @@
1
- {"version":3,"file":"duration.js","sourceRoot":"","sources":["../src/duration.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAC3E,0DAA0D;AAC1D,gDAAgD;AAChD,EAAE;AACF,2BAA2B;AAC3B,0EAA0E;AAC1E,uCAAuC;AACvC,uEAAuE;AACvE,+DAA+D;AAE/D,MAAM,gBAAgB,GAAqC;IACvD,EAAE,EAAE,CAAC;IACL,EAAE,EAAE,CAAC;IACL,CAAC,EAAE,CAAC;IACJ,EAAE,EAAE,CAAC;IACL,CAAC,EAAE,CAAC;IACJ,EAAE,EAAE,EAAE;IACN,CAAC,EAAE,EAAE;IACL,EAAE,EAAE,EAAE;CACT,CAAC;AAEF,MAAM,UAAU,GAAG,iCAAiC,CAAC;AAErD,MAAM,qBAAqB,GAAG,CAAC,CAAC;AAChC,MAAM,sBAAsB,GAAG,EAAE,CAAC;AAClC,MAAM,qBAAqB,GAAG,GAAG,CAAC;AAElC,yEAAyE;AACzE,MAAM,UAAU,qBAAqB,CAAC,OAA2B;IAC7D,IAAI,CAAC,OAAO;QAAE,OAAO,CAAC,CAAC;IACvB,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC7C,IAAI,CAAC,OAAO;QAAE,OAAO,CAAC,CAAC;IACvB,IAAI,OAAO,IAAI,gBAAgB;QAAE,OAAO,gBAAgB,CAAC,OAAO,CAAC,CAAC;IAClE,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACvC,IAAI,CAAC,KAAK;QAAE,OAAO,CAAC,CAAC;IACrB,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/B,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC;QAAE,OAAO,CAAC,CAAC;IACpD,MAAM,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC;IAC7C,IAAI,IAAI,KAAK,GAAG;QAAE,OAAO,KAAK,CAAC;IAC/B,IAAI,IAAI,KAAK,GAAG;QAAE,OAAO,KAAK,GAAG,qBAAqB,CAAC;IACvD,IAAI,IAAI,KAAK,GAAG;QAAE,OAAO,KAAK,GAAG,sBAAsB,CAAC;IACxD,IAAI,IAAI,KAAK,GAAG;QAAE,OAAO,KAAK,GAAG,qBAAqB,CAAC;IACvD,OAAO,CAAC,CAAC;AACb,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,OAA2B;IAC7D,IAAI,CAAC,OAAO;QAAE,OAAO,EAAE,CAAC;IACxB,OAAO,OAAO,CAAC,IAAI,EAAE,CAAC;AAC1B,CAAC"}
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"}
@@ -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;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"}
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, durationToWorkingDays } from './duration.js';
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
- buildRoadmapSheet(wb, inputs, generated);
40
- buildItemsSheet(wb, inputs.ast, schedule);
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
- rows.forEach((row, idx) => {
88
+ for (const row of rows) {
79
89
  const r = sheet.addRow(row);
80
90
  r.getCell(1).font = { bold: true };
81
- if (idx === 4)
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: 14 },
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
- sheet.columns = [...ITEM_HEADERS];
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
- for (const r of rows)
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: ITEM_HEADERS.length },
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: durationToWorkingDays(durationLiteral),
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":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nowline/export-xlsx",
3
- "version": "0.8.5",
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
- "exceljs": "4.4.0",
25
- "@nowline/core": "0.8.5",
26
- "@nowline/layout": "0.8.5",
27
- "@nowline/export-core": "0.8.5"
24
+ "@nowline/core": "0.9.0",
25
+ "@nowline/export-core": "0.9.0",
26
+ "@nowline/layout": "0.9.0",
27
+ "exceljs": "4.4.0"
28
28
  },
29
29
  "devDependencies": {
30
- "@types/node": "^25.9.3",
31
- "langium": "~4.3.0",
32
- "typescript": "^6.0.3",
33
- "vitest": "^4.1.9"
30
+ "@types/node": "^26.6.5",
31
+ "langium": "~4.4.0",
32
+ "typescript": "^7.0.2",
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
- // Convert Nowline duration tokens into a numeric working-day count for the
2
- // XLSX "Duration" column. Spec: specs/handoffs/m2c.md § 7
3
- // "Resolution 5: numeric working-day duration".
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, durationToWorkingDays } from './duration.js';
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 = scheduleRoadmap(inputs.ast, inputs.resolved, { today: inputs.today });
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(wb: ExcelJS.Workbook, inputs: ExportInputs, generated: Date): void {
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
- rows.forEach((row, idx) => {
137
+ for (const row of rows) {
119
138
  const r = sheet.addRow(row);
120
139
  r.getCell(1).font = { bold: true };
121
- if (idx === 4) r.getCell(2).numFmt = 'yyyy-mm-dd';
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: 14 },
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(wb: ExcelJS.Workbook, ast: NowlineFile, schedule: RoadmapSchedule): void {
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
- sheet.columns = [...ITEM_HEADERS];
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
- for (const r of rows) sheet.addRow(r);
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: ITEM_HEADERS.length },
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: durationToWorkingDays(durationLiteral),
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
+ }