digital-tasks 2.0.1
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/.turbo/turbo-build.log +5 -0
- package/CHANGELOG.md +10 -0
- package/dist/function-task.d.ts +319 -0
- package/dist/function-task.d.ts.map +1 -0
- package/dist/function-task.js +286 -0
- package/dist/function-task.js.map +1 -0
- package/dist/index.d.ts +72 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +74 -0
- package/dist/index.js.map +1 -0
- package/dist/markdown.d.ts +112 -0
- package/dist/markdown.d.ts.map +1 -0
- package/dist/markdown.js +510 -0
- package/dist/markdown.js.map +1 -0
- package/dist/project.d.ts +259 -0
- package/dist/project.d.ts.map +1 -0
- package/dist/project.js +397 -0
- package/dist/project.js.map +1 -0
- package/dist/queue.d.ts +17 -0
- package/dist/queue.d.ts.map +1 -0
- package/dist/queue.js +347 -0
- package/dist/queue.js.map +1 -0
- package/dist/task.d.ts +69 -0
- package/dist/task.d.ts.map +1 -0
- package/dist/task.js +321 -0
- package/dist/task.js.map +1 -0
- package/dist/types.d.ts +292 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +15 -0
- package/dist/types.js.map +1 -0
- package/package.json +41 -0
- package/src/index.ts +161 -0
- package/src/markdown.ts +622 -0
- package/src/project.ts +571 -0
- package/src/queue.ts +424 -0
- package/src/task.ts +389 -0
- package/src/types.ts +403 -0
- package/test/markdown.test.ts +550 -0
- package/test/project.test.ts +562 -0
- package/test/queue.test.ts +482 -0
- package/test/task.test.ts +464 -0
- package/tsconfig.json +20 -0
package/dist/markdown.js
ADDED
|
@@ -0,0 +1,510 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Markdown Task List Parser and Serializer
|
|
3
|
+
*
|
|
4
|
+
* Bidirectional conversion between markdown task lists and Task objects.
|
|
5
|
+
*
|
|
6
|
+
* ## Syntax
|
|
7
|
+
*
|
|
8
|
+
* - `- [ ]` = Unordered/parallel tasks (can run simultaneously)
|
|
9
|
+
* - `1. [ ]` = Ordered/sequential tasks (must run in order)
|
|
10
|
+
* - `- [x]` or `1. [x]` = Completed task
|
|
11
|
+
* - `- [-]` = In progress task
|
|
12
|
+
* - `- [~]` = Blocked task
|
|
13
|
+
* - `- [!]` = Failed task
|
|
14
|
+
* - Indentation (2 spaces) = Subtasks
|
|
15
|
+
* - `# Heading` = Project name
|
|
16
|
+
* - `## Heading` = Task group/section
|
|
17
|
+
*
|
|
18
|
+
* ## Example
|
|
19
|
+
*
|
|
20
|
+
* ```markdown
|
|
21
|
+
* # Launch Feature
|
|
22
|
+
*
|
|
23
|
+
* ## Planning (parallel)
|
|
24
|
+
* - [ ] Design mockups
|
|
25
|
+
* - [ ] Write technical spec
|
|
26
|
+
* - [x] Create project board
|
|
27
|
+
*
|
|
28
|
+
* ## Implementation (sequential)
|
|
29
|
+
* 1. [ ] Implement backend API
|
|
30
|
+
* 2. [-] Implement frontend UI
|
|
31
|
+
* - [ ] Create components
|
|
32
|
+
* - [ ] Add state management
|
|
33
|
+
* 3. [ ] Write tests
|
|
34
|
+
*
|
|
35
|
+
* ## Deployment
|
|
36
|
+
* 1. [ ] Deploy to staging
|
|
37
|
+
* 2. [ ] QA testing
|
|
38
|
+
* 3. [ ] Deploy to production
|
|
39
|
+
* ```
|
|
40
|
+
*
|
|
41
|
+
* @packageDocumentation
|
|
42
|
+
*/
|
|
43
|
+
import { task, parallel, sequential, createProject } from './project.js';
|
|
44
|
+
// ============================================================================
|
|
45
|
+
// Status Markers
|
|
46
|
+
// ============================================================================
|
|
47
|
+
/**
|
|
48
|
+
* Markdown checkbox markers and their task status
|
|
49
|
+
*/
|
|
50
|
+
const STATUS_MARKERS = {
|
|
51
|
+
' ': 'pending',
|
|
52
|
+
'x': 'completed',
|
|
53
|
+
'X': 'completed',
|
|
54
|
+
'-': 'in_progress',
|
|
55
|
+
'~': 'blocked',
|
|
56
|
+
'!': 'failed',
|
|
57
|
+
'/': 'cancelled',
|
|
58
|
+
'?': 'review',
|
|
59
|
+
};
|
|
60
|
+
/**
|
|
61
|
+
* Reverse mapping: task status to marker
|
|
62
|
+
*/
|
|
63
|
+
const STATUS_TO_MARKER = {
|
|
64
|
+
pending: ' ',
|
|
65
|
+
queued: ' ',
|
|
66
|
+
assigned: '-',
|
|
67
|
+
in_progress: '-',
|
|
68
|
+
blocked: '~',
|
|
69
|
+
review: '?',
|
|
70
|
+
completed: 'x',
|
|
71
|
+
failed: '!',
|
|
72
|
+
cancelled: '/',
|
|
73
|
+
};
|
|
74
|
+
/**
|
|
75
|
+
* Priority markers (can be added after checkbox)
|
|
76
|
+
*/
|
|
77
|
+
const PRIORITY_MARKERS = {
|
|
78
|
+
'!!': 'critical',
|
|
79
|
+
'!': 'urgent',
|
|
80
|
+
'^': 'high',
|
|
81
|
+
'': 'normal',
|
|
82
|
+
'v': 'low',
|
|
83
|
+
};
|
|
84
|
+
// ============================================================================
|
|
85
|
+
// Parser
|
|
86
|
+
// ============================================================================
|
|
87
|
+
/**
|
|
88
|
+
* Parse a single line of markdown
|
|
89
|
+
*/
|
|
90
|
+
function parseLine(line) {
|
|
91
|
+
const raw = line;
|
|
92
|
+
// Count leading spaces for indent (2 spaces = 1 level)
|
|
93
|
+
const leadingSpaces = line.match(/^(\s*)/)?.[1].length || 0;
|
|
94
|
+
const indent = Math.floor(leadingSpaces / 2);
|
|
95
|
+
const trimmed = line.slice(leadingSpaces);
|
|
96
|
+
// Check for heading
|
|
97
|
+
const headingMatch = trimmed.match(/^(#{1,6})\s+(.+)$/);
|
|
98
|
+
if (headingMatch) {
|
|
99
|
+
return {
|
|
100
|
+
indent,
|
|
101
|
+
isTask: false,
|
|
102
|
+
isOrdered: false,
|
|
103
|
+
title: headingMatch[2].trim(),
|
|
104
|
+
isHeading: true,
|
|
105
|
+
headingLevel: headingMatch[1].length,
|
|
106
|
+
raw,
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
// Check for unordered task: - [ ] or - [x] etc.
|
|
110
|
+
const unorderedMatch = trimmed.match(/^[-*]\s+\[([^\]]*)\]\s*(.*)$/);
|
|
111
|
+
if (unorderedMatch) {
|
|
112
|
+
const marker = unorderedMatch[1];
|
|
113
|
+
let title = unorderedMatch[2].trim();
|
|
114
|
+
let priority = 'normal';
|
|
115
|
+
// Check for priority marker at start of title
|
|
116
|
+
if (title.startsWith('!!')) {
|
|
117
|
+
priority = 'critical';
|
|
118
|
+
title = title.slice(2).trim();
|
|
119
|
+
}
|
|
120
|
+
else if (title.startsWith('!')) {
|
|
121
|
+
priority = 'urgent';
|
|
122
|
+
title = title.slice(1).trim();
|
|
123
|
+
}
|
|
124
|
+
else if (title.startsWith('^')) {
|
|
125
|
+
priority = 'high';
|
|
126
|
+
title = title.slice(1).trim();
|
|
127
|
+
}
|
|
128
|
+
else if (title.startsWith('v')) {
|
|
129
|
+
priority = 'low';
|
|
130
|
+
title = title.slice(1).trim();
|
|
131
|
+
}
|
|
132
|
+
return {
|
|
133
|
+
indent,
|
|
134
|
+
isTask: true,
|
|
135
|
+
isOrdered: false,
|
|
136
|
+
status: STATUS_MARKERS[marker] || 'pending',
|
|
137
|
+
priority,
|
|
138
|
+
title,
|
|
139
|
+
isHeading: false,
|
|
140
|
+
raw,
|
|
141
|
+
};
|
|
142
|
+
}
|
|
143
|
+
// Check for ordered task: 1. [ ] or 1. [x] etc.
|
|
144
|
+
const orderedMatch = trimmed.match(/^(\d+)\.\s+\[([^\]]*)\]\s*(.*)$/);
|
|
145
|
+
if (orderedMatch) {
|
|
146
|
+
const marker = orderedMatch[2];
|
|
147
|
+
let title = orderedMatch[3].trim();
|
|
148
|
+
let priority = 'normal';
|
|
149
|
+
// Check for priority marker
|
|
150
|
+
if (title.startsWith('!!')) {
|
|
151
|
+
priority = 'critical';
|
|
152
|
+
title = title.slice(2).trim();
|
|
153
|
+
}
|
|
154
|
+
else if (title.startsWith('!')) {
|
|
155
|
+
priority = 'urgent';
|
|
156
|
+
title = title.slice(1).trim();
|
|
157
|
+
}
|
|
158
|
+
else if (title.startsWith('^')) {
|
|
159
|
+
priority = 'high';
|
|
160
|
+
title = title.slice(1).trim();
|
|
161
|
+
}
|
|
162
|
+
else if (title.startsWith('v')) {
|
|
163
|
+
priority = 'low';
|
|
164
|
+
title = title.slice(1).trim();
|
|
165
|
+
}
|
|
166
|
+
return {
|
|
167
|
+
indent,
|
|
168
|
+
isTask: true,
|
|
169
|
+
isOrdered: true,
|
|
170
|
+
orderNumber: parseInt(orderedMatch[1], 10),
|
|
171
|
+
status: STATUS_MARKERS[marker] || 'pending',
|
|
172
|
+
priority,
|
|
173
|
+
title,
|
|
174
|
+
isHeading: false,
|
|
175
|
+
raw,
|
|
176
|
+
};
|
|
177
|
+
}
|
|
178
|
+
// Plain text line
|
|
179
|
+
return {
|
|
180
|
+
indent,
|
|
181
|
+
isTask: false,
|
|
182
|
+
isOrdered: false,
|
|
183
|
+
title: trimmed,
|
|
184
|
+
isHeading: false,
|
|
185
|
+
raw,
|
|
186
|
+
};
|
|
187
|
+
}
|
|
188
|
+
/**
|
|
189
|
+
* Parse tasks at a specific indent level
|
|
190
|
+
*/
|
|
191
|
+
function parseTasksAtIndent(lines, startIndex, baseIndent) {
|
|
192
|
+
const tasks = [];
|
|
193
|
+
let index = startIndex;
|
|
194
|
+
let mode = 'parallel'; // Default based on first task type
|
|
195
|
+
let modeSet = false;
|
|
196
|
+
while (index < lines.length) {
|
|
197
|
+
const line = lines[index];
|
|
198
|
+
// Stop if we've gone back to a lower indent level
|
|
199
|
+
if (line.indent < baseIndent && (line.isTask || line.isHeading)) {
|
|
200
|
+
break;
|
|
201
|
+
}
|
|
202
|
+
// Skip lines at lower indent (they belong to parent)
|
|
203
|
+
if (line.indent < baseIndent) {
|
|
204
|
+
index++;
|
|
205
|
+
continue;
|
|
206
|
+
}
|
|
207
|
+
// Process tasks at our indent level
|
|
208
|
+
if (line.indent === baseIndent && line.isTask) {
|
|
209
|
+
// Set mode based on first task
|
|
210
|
+
if (!modeSet) {
|
|
211
|
+
mode = line.isOrdered ? 'sequential' : 'parallel';
|
|
212
|
+
modeSet = true;
|
|
213
|
+
}
|
|
214
|
+
// Parse subtasks
|
|
215
|
+
const { tasks: subtasks, nextIndex } = parseTasksAtIndent(lines, index + 1, baseIndent + 1);
|
|
216
|
+
const taskDef = task(line.title, {
|
|
217
|
+
priority: line.priority,
|
|
218
|
+
subtasks: subtasks.length > 0 ? subtasks : undefined,
|
|
219
|
+
metadata: {
|
|
220
|
+
_originalStatus: line.status,
|
|
221
|
+
_lineNumber: index,
|
|
222
|
+
},
|
|
223
|
+
});
|
|
224
|
+
tasks.push(taskDef);
|
|
225
|
+
index = nextIndex;
|
|
226
|
+
}
|
|
227
|
+
else {
|
|
228
|
+
index++;
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
return { tasks, nextIndex: index, mode };
|
|
232
|
+
}
|
|
233
|
+
/**
|
|
234
|
+
* Parse a markdown string into a Project
|
|
235
|
+
*
|
|
236
|
+
* @example
|
|
237
|
+
* ```ts
|
|
238
|
+
* const markdown = `
|
|
239
|
+
* # My Project
|
|
240
|
+
*
|
|
241
|
+
* - [ ] Task 1
|
|
242
|
+
* - [ ] Task 2
|
|
243
|
+
*
|
|
244
|
+
* ## Sequential Work
|
|
245
|
+
* 1. [ ] Step 1
|
|
246
|
+
* 2. [ ] Step 2
|
|
247
|
+
* `
|
|
248
|
+
*
|
|
249
|
+
* const project = parseMarkdown(markdown)
|
|
250
|
+
* ```
|
|
251
|
+
*/
|
|
252
|
+
export function parseMarkdown(markdown) {
|
|
253
|
+
// Normalize line endings (handle Windows \r\n and old Mac \r)
|
|
254
|
+
const normalizedMarkdown = markdown.replace(/\r\n/g, '\n').replace(/\r/g, '\n');
|
|
255
|
+
const rawLines = normalizedMarkdown.split('\n');
|
|
256
|
+
const lines = rawLines.map(parseLine);
|
|
257
|
+
let projectName = 'Untitled Project';
|
|
258
|
+
let projectDescription;
|
|
259
|
+
const allTasks = [];
|
|
260
|
+
// Find project name from first h1
|
|
261
|
+
const h1Index = lines.findIndex(l => l.isHeading && l.headingLevel === 1);
|
|
262
|
+
if (h1Index !== -1) {
|
|
263
|
+
projectName = lines[h1Index].title;
|
|
264
|
+
}
|
|
265
|
+
// Process sections and tasks
|
|
266
|
+
let currentSection = null;
|
|
267
|
+
let index = 0;
|
|
268
|
+
while (index < lines.length) {
|
|
269
|
+
const line = lines[index];
|
|
270
|
+
// New section (h2)
|
|
271
|
+
if (line.isHeading && line.headingLevel === 2) {
|
|
272
|
+
// Save previous section
|
|
273
|
+
if (currentSection && currentSection.tasks.length > 0) {
|
|
274
|
+
if (currentSection.mode === 'sequential') {
|
|
275
|
+
allTasks.push(sequential(...currentSection.tasks));
|
|
276
|
+
}
|
|
277
|
+
else {
|
|
278
|
+
allTasks.push(parallel(...currentSection.tasks));
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
// Detect mode from section name (e.g., "## Implementation (sequential)")
|
|
282
|
+
let sectionName = line.title;
|
|
283
|
+
let sectionMode = 'parallel';
|
|
284
|
+
const modeMatch = sectionName.match(/\((parallel|sequential)\)\s*$/i);
|
|
285
|
+
if (modeMatch) {
|
|
286
|
+
sectionMode = modeMatch[1].toLowerCase();
|
|
287
|
+
sectionName = sectionName.replace(/\s*\((parallel|sequential)\)\s*$/i, '');
|
|
288
|
+
}
|
|
289
|
+
currentSection = { name: sectionName, mode: sectionMode, tasks: [] };
|
|
290
|
+
index++;
|
|
291
|
+
continue;
|
|
292
|
+
}
|
|
293
|
+
// Task at root level or in section
|
|
294
|
+
if (line.isTask && line.indent === 0) {
|
|
295
|
+
const { tasks, nextIndex, mode } = parseTasksAtIndent(lines, index, 0);
|
|
296
|
+
if (currentSection) {
|
|
297
|
+
currentSection.tasks.push(...tasks);
|
|
298
|
+
// Update section mode based on first task if not explicitly set
|
|
299
|
+
if (currentSection.tasks.length === tasks.length) {
|
|
300
|
+
currentSection.mode = mode;
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
else {
|
|
304
|
+
// No section, add to root with appropriate grouping
|
|
305
|
+
if (mode === 'sequential') {
|
|
306
|
+
allTasks.push(sequential(...tasks));
|
|
307
|
+
}
|
|
308
|
+
else {
|
|
309
|
+
allTasks.push(parallel(...tasks));
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
index = nextIndex;
|
|
313
|
+
continue;
|
|
314
|
+
}
|
|
315
|
+
index++;
|
|
316
|
+
}
|
|
317
|
+
// Add final section
|
|
318
|
+
if (currentSection && currentSection.tasks.length > 0) {
|
|
319
|
+
if (currentSection.mode === 'sequential') {
|
|
320
|
+
allTasks.push(sequential(...currentSection.tasks));
|
|
321
|
+
}
|
|
322
|
+
else {
|
|
323
|
+
allTasks.push(parallel(...currentSection.tasks));
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
return createProject({
|
|
327
|
+
name: projectName,
|
|
328
|
+
description: projectDescription,
|
|
329
|
+
tasks: allTasks,
|
|
330
|
+
});
|
|
331
|
+
}
|
|
332
|
+
/**
|
|
333
|
+
* Serialize a task node to markdown lines
|
|
334
|
+
*/
|
|
335
|
+
function serializeTaskNode(node, indent, options, isSequential) {
|
|
336
|
+
const lines = [];
|
|
337
|
+
const indentStr = ' '.repeat(indent * (options.indentSize || 2));
|
|
338
|
+
if (node.__type === 'task') {
|
|
339
|
+
const taskDef = node;
|
|
340
|
+
const status = taskDef.metadata?._originalStatus || 'pending';
|
|
341
|
+
const marker = options.includeStatus !== false ? STATUS_TO_MARKER[status] : ' ';
|
|
342
|
+
let prefix;
|
|
343
|
+
if (isSequential) {
|
|
344
|
+
// Use numbered list for sequential
|
|
345
|
+
const num = taskDef.metadata?._sequenceNumber || 1;
|
|
346
|
+
prefix = `${num}. [${marker}]`;
|
|
347
|
+
}
|
|
348
|
+
else {
|
|
349
|
+
// Use bullet for parallel
|
|
350
|
+
prefix = `- [${marker}]`;
|
|
351
|
+
}
|
|
352
|
+
let title = taskDef.title;
|
|
353
|
+
if (options.includePriority && taskDef.priority && taskDef.priority !== 'normal') {
|
|
354
|
+
const priorityMarker = taskDef.priority === 'critical' ? '!!'
|
|
355
|
+
: taskDef.priority === 'urgent' ? '!'
|
|
356
|
+
: taskDef.priority === 'high' ? '^'
|
|
357
|
+
: taskDef.priority === 'low' ? 'v'
|
|
358
|
+
: '';
|
|
359
|
+
title = `${priorityMarker}${title}`;
|
|
360
|
+
}
|
|
361
|
+
lines.push(`${indentStr}${prefix} ${title}`);
|
|
362
|
+
// Serialize subtasks
|
|
363
|
+
if (taskDef.subtasks && taskDef.subtasks.length > 0) {
|
|
364
|
+
for (const subtask of taskDef.subtasks) {
|
|
365
|
+
lines.push(...serializeTaskNode(subtask, indent + 1, options, false));
|
|
366
|
+
}
|
|
367
|
+
}
|
|
368
|
+
}
|
|
369
|
+
else if (node.__type === 'parallel') {
|
|
370
|
+
const group = node;
|
|
371
|
+
let seqNum = 1;
|
|
372
|
+
for (const child of group.tasks) {
|
|
373
|
+
if (child.__type === 'task') {
|
|
374
|
+
child.metadata = {
|
|
375
|
+
...child.metadata,
|
|
376
|
+
_sequenceNumber: seqNum++,
|
|
377
|
+
};
|
|
378
|
+
}
|
|
379
|
+
lines.push(...serializeTaskNode(child, indent, options, false));
|
|
380
|
+
}
|
|
381
|
+
}
|
|
382
|
+
else if (node.__type === 'sequential') {
|
|
383
|
+
const group = node;
|
|
384
|
+
let seqNum = 1;
|
|
385
|
+
for (const child of group.tasks) {
|
|
386
|
+
if (child.__type === 'task') {
|
|
387
|
+
child.metadata = {
|
|
388
|
+
...child.metadata,
|
|
389
|
+
_sequenceNumber: seqNum++,
|
|
390
|
+
};
|
|
391
|
+
}
|
|
392
|
+
lines.push(...serializeTaskNode(child, indent, options, true));
|
|
393
|
+
}
|
|
394
|
+
}
|
|
395
|
+
return lines;
|
|
396
|
+
}
|
|
397
|
+
/**
|
|
398
|
+
* Serialize a Project to markdown
|
|
399
|
+
*
|
|
400
|
+
* @example
|
|
401
|
+
* ```ts
|
|
402
|
+
* const project = createProject({
|
|
403
|
+
* name: 'My Project',
|
|
404
|
+
* tasks: [
|
|
405
|
+
* parallel(
|
|
406
|
+
* task('Task 1'),
|
|
407
|
+
* task('Task 2'),
|
|
408
|
+
* ),
|
|
409
|
+
* sequential(
|
|
410
|
+
* task('Step 1'),
|
|
411
|
+
* task('Step 2'),
|
|
412
|
+
* ),
|
|
413
|
+
* ],
|
|
414
|
+
* })
|
|
415
|
+
*
|
|
416
|
+
* const markdown = toMarkdown(project)
|
|
417
|
+
* // # My Project
|
|
418
|
+
* //
|
|
419
|
+
* // - [ ] Task 1
|
|
420
|
+
* // - [ ] Task 2
|
|
421
|
+
* //
|
|
422
|
+
* // 1. [ ] Step 1
|
|
423
|
+
* // 2. [ ] Step 2
|
|
424
|
+
* ```
|
|
425
|
+
*/
|
|
426
|
+
export function toMarkdown(project, options = {}) {
|
|
427
|
+
const lines = [];
|
|
428
|
+
// Project title
|
|
429
|
+
lines.push(`# ${project.name}`);
|
|
430
|
+
lines.push('');
|
|
431
|
+
if (project.description) {
|
|
432
|
+
lines.push(project.description);
|
|
433
|
+
lines.push('');
|
|
434
|
+
}
|
|
435
|
+
// Tasks
|
|
436
|
+
for (const node of project.tasks) {
|
|
437
|
+
const taskLines = serializeTaskNode(node, 0, options, false);
|
|
438
|
+
lines.push(...taskLines);
|
|
439
|
+
// Add blank line between top-level groups
|
|
440
|
+
if (taskLines.length > 0) {
|
|
441
|
+
lines.push('');
|
|
442
|
+
}
|
|
443
|
+
}
|
|
444
|
+
return lines.join('\n').trim() + '\n';
|
|
445
|
+
}
|
|
446
|
+
// ============================================================================
|
|
447
|
+
// Conversion Utilities
|
|
448
|
+
// ============================================================================
|
|
449
|
+
/**
|
|
450
|
+
* Update task statuses in a project from markdown
|
|
451
|
+
* (Useful for syncing when markdown is edited externally)
|
|
452
|
+
*/
|
|
453
|
+
export function syncStatusFromMarkdown(project, markdown) {
|
|
454
|
+
const parsed = parseMarkdown(markdown);
|
|
455
|
+
// Build a map of task titles to statuses from parsed markdown
|
|
456
|
+
const statusMap = new Map();
|
|
457
|
+
function collectStatuses(node) {
|
|
458
|
+
if (node.__type === 'task') {
|
|
459
|
+
const taskDef = node;
|
|
460
|
+
const status = taskDef.metadata?._originalStatus;
|
|
461
|
+
if (status) {
|
|
462
|
+
statusMap.set(taskDef.title, status);
|
|
463
|
+
}
|
|
464
|
+
if (taskDef.subtasks) {
|
|
465
|
+
taskDef.subtasks.forEach(collectStatuses);
|
|
466
|
+
}
|
|
467
|
+
}
|
|
468
|
+
else if (node.__type === 'parallel' || node.__type === 'sequential') {
|
|
469
|
+
const group = node;
|
|
470
|
+
group.tasks.forEach(collectStatuses);
|
|
471
|
+
}
|
|
472
|
+
}
|
|
473
|
+
parsed.tasks.forEach(collectStatuses);
|
|
474
|
+
// Update statuses in original project
|
|
475
|
+
function updateStatuses(node) {
|
|
476
|
+
if (node.__type === 'task') {
|
|
477
|
+
const taskDef = node;
|
|
478
|
+
const newStatus = statusMap.get(taskDef.title);
|
|
479
|
+
return {
|
|
480
|
+
...taskDef,
|
|
481
|
+
metadata: {
|
|
482
|
+
...taskDef.metadata,
|
|
483
|
+
_originalStatus: newStatus || taskDef.metadata?._originalStatus,
|
|
484
|
+
},
|
|
485
|
+
subtasks: taskDef.subtasks?.map(updateStatuses),
|
|
486
|
+
};
|
|
487
|
+
}
|
|
488
|
+
else if (node.__type === 'parallel') {
|
|
489
|
+
const group = node;
|
|
490
|
+
return {
|
|
491
|
+
...group,
|
|
492
|
+
tasks: group.tasks.map(updateStatuses),
|
|
493
|
+
};
|
|
494
|
+
}
|
|
495
|
+
else if (node.__type === 'sequential') {
|
|
496
|
+
const group = node;
|
|
497
|
+
return {
|
|
498
|
+
...group,
|
|
499
|
+
tasks: group.tasks.map(updateStatuses),
|
|
500
|
+
};
|
|
501
|
+
}
|
|
502
|
+
return node;
|
|
503
|
+
}
|
|
504
|
+
return {
|
|
505
|
+
...project,
|
|
506
|
+
tasks: project.tasks.map(updateStatuses),
|
|
507
|
+
updatedAt: new Date(),
|
|
508
|
+
};
|
|
509
|
+
}
|
|
510
|
+
//# sourceMappingURL=markdown.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"markdown.js","sourceRoot":"","sources":["../src/markdown.ts"],"names":[],"mappings":"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"}
|