@standardbeagle/dart-query 0.3.4 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/formatters/fieldSelector.d.ts +22 -0
- package/dist/formatters/fieldSelector.d.ts.map +1 -0
- package/dist/formatters/fieldSelector.js +176 -0
- package/dist/formatters/fieldSelector.js.map +1 -0
- package/dist/formatters/index.d.ts +4 -0
- package/dist/formatters/index.d.ts.map +1 -0
- package/dist/formatters/index.js +4 -0
- package/dist/formatters/index.js.map +1 -0
- package/dist/formatters/relationshipExpander.d.ts +26 -0
- package/dist/formatters/relationshipExpander.d.ts.map +1 -0
- package/dist/formatters/relationshipExpander.js +123 -0
- package/dist/formatters/relationshipExpander.js.map +1 -0
- package/dist/formatters/tableFormatter.d.ts +43 -0
- package/dist/formatters/tableFormatter.d.ts.map +1 -0
- package/dist/formatters/tableFormatter.js +354 -0
- package/dist/formatters/tableFormatter.js.map +1 -0
- package/dist/parsers/csv.d.ts.map +1 -1
- package/dist/parsers/csv.js +48 -18
- package/dist/parsers/csv.js.map +1 -1
- package/dist/tools/batch_update_tasks.js +3 -3
- package/dist/tools/batch_update_tasks.js.map +1 -1
- package/dist/tools/get_dartboard.d.ts.map +1 -1
- package/dist/tools/get_dartboard.js +7 -5
- package/dist/tools/get_dartboard.js.map +1 -1
- package/dist/tools/import_tasks_csv.js +1 -1
- package/dist/tools/import_tasks_csv.js.map +1 -1
- package/dist/tools/list_tasks.js +3 -3
- package/dist/tools/list_tasks.js.map +1 -1
- package/dist/tools/move_task.js +1 -1
- package/dist/tools/move_task.js.map +1 -1
- package/dist/tools/search_tasks.js +1 -1
- package/dist/tools/search_tasks.js.map +1 -1
- package/dist/tools/update_task.js +3 -3
- package/dist/tools/update_task.js.map +1 -1
- package/dist/types/index.d.ts +13 -9
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +45 -6
- package/dist/types/index.js.map +1 -1
- package/package.json +2 -1
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { OutputFormat } from './tableFormatter.js';
|
|
2
|
+
export interface FieldSelection {
|
|
3
|
+
fields: string[];
|
|
4
|
+
expand: string[];
|
|
5
|
+
format: OutputFormat;
|
|
6
|
+
truncate_title: number;
|
|
7
|
+
explicit: boolean;
|
|
8
|
+
}
|
|
9
|
+
export interface ParsedQuery {
|
|
10
|
+
selection: FieldSelection;
|
|
11
|
+
whereClause: string;
|
|
12
|
+
}
|
|
13
|
+
export declare const AVAILABLE_FIELDS: string[];
|
|
14
|
+
export declare function parseFieldList(fieldStr: string): FieldSelection;
|
|
15
|
+
export declare function parseFormat(formatStr: string | undefined): OutputFormat;
|
|
16
|
+
export declare function parseQuery(query: string): ParsedQuery;
|
|
17
|
+
export declare function validateFields(fields: string[]): {
|
|
18
|
+
valid: string[];
|
|
19
|
+
unknown: string[];
|
|
20
|
+
};
|
|
21
|
+
export declare function getFieldsHelp(): string;
|
|
22
|
+
//# sourceMappingURL=fieldSelector.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fieldSelector.d.ts","sourceRoot":"","sources":["../../src/formatters/fieldSelector.ts"],"names":[],"mappings":"AAeA,OAAO,EAAuC,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAMxF,MAAM,WAAW,cAAc;IAE7B,MAAM,EAAE,MAAM,EAAE,CAAC;IAEjB,MAAM,EAAE,MAAM,EAAE,CAAC;IAEjB,MAAM,EAAE,YAAY,CAAC;IAErB,cAAc,EAAE,MAAM,CAAC;IAEvB,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,WAAW;IAE1B,SAAS,EAAE,cAAc,CAAC;IAE1B,WAAW,EAAE,MAAM,CAAC;CACrB;AAUD,eAAO,MAAM,gBAAgB,UAO5B,CAAC;AAeF,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,cAAc,CA2D/D;AAKD,wBAAgB,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,GAAG,YAAY,CAWvE;AAUD,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,WAAW,CAqDrD;AAKD,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG;IAAE,KAAK,EAAE,MAAM,EAAE,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAA;CAAE,CAqBvF;AAKD,wBAAgB,aAAa,IAAI,MAAM,CAkDtC"}
|
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
import { ESSENTIAL_FIELDS, FIELD_DEFINITIONS } from './tableFormatter.js';
|
|
2
|
+
const EXPANDABLE_FIELDS = ['subtasks', 'blockers', 'blocking', 'duplicates', 'related'];
|
|
3
|
+
export const AVAILABLE_FIELDS = [
|
|
4
|
+
'id', 'title', 'desc', 'status', 'pri', 'size',
|
|
5
|
+
'assignee', 'board', 'tags', 'due', 'start', 'done',
|
|
6
|
+
'created', 'updated', 'parent',
|
|
7
|
+
'#subtasks', '#blockers', '#blocking', '#dups', '#related',
|
|
8
|
+
];
|
|
9
|
+
export function parseFieldList(fieldStr) {
|
|
10
|
+
const selection = {
|
|
11
|
+
fields: [],
|
|
12
|
+
expand: [],
|
|
13
|
+
format: 'table',
|
|
14
|
+
truncate_title: 25,
|
|
15
|
+
explicit: true,
|
|
16
|
+
};
|
|
17
|
+
if (!fieldStr || fieldStr.trim() === '') {
|
|
18
|
+
selection.fields = [...ESSENTIAL_FIELDS];
|
|
19
|
+
selection.explicit = false;
|
|
20
|
+
return selection;
|
|
21
|
+
}
|
|
22
|
+
const parts = fieldStr.split(',').map(s => s.trim().toLowerCase());
|
|
23
|
+
for (const part of parts) {
|
|
24
|
+
if (!part)
|
|
25
|
+
continue;
|
|
26
|
+
if (part === '*') {
|
|
27
|
+
selection.fields = Object.keys(FIELD_DEFINITIONS);
|
|
28
|
+
continue;
|
|
29
|
+
}
|
|
30
|
+
if (part.startsWith('+')) {
|
|
31
|
+
const field = part.slice(1);
|
|
32
|
+
if (EXPANDABLE_FIELDS.includes(field)) {
|
|
33
|
+
selection.expand.push(field);
|
|
34
|
+
selection.fields.push('#' + field);
|
|
35
|
+
}
|
|
36
|
+
continue;
|
|
37
|
+
}
|
|
38
|
+
if (part.startsWith('#')) {
|
|
39
|
+
const countField = part;
|
|
40
|
+
if (FIELD_DEFINITIONS[countField]) {
|
|
41
|
+
selection.fields.push(countField);
|
|
42
|
+
}
|
|
43
|
+
continue;
|
|
44
|
+
}
|
|
45
|
+
if (FIELD_DEFINITIONS[part]) {
|
|
46
|
+
selection.fields.push(part);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
if (selection.fields.length === 0) {
|
|
50
|
+
selection.fields = [...ESSENTIAL_FIELDS];
|
|
51
|
+
selection.explicit = false;
|
|
52
|
+
}
|
|
53
|
+
return selection;
|
|
54
|
+
}
|
|
55
|
+
export function parseFormat(formatStr) {
|
|
56
|
+
if (!formatStr)
|
|
57
|
+
return 'table';
|
|
58
|
+
const normalized = formatStr.toLowerCase().trim();
|
|
59
|
+
const validFormats = ['table', 'compact', 'csv', 'json', 'ids'];
|
|
60
|
+
if (validFormats.includes(normalized)) {
|
|
61
|
+
return normalized;
|
|
62
|
+
}
|
|
63
|
+
return 'table';
|
|
64
|
+
}
|
|
65
|
+
export function parseQuery(query) {
|
|
66
|
+
const result = {
|
|
67
|
+
selection: {
|
|
68
|
+
fields: [...ESSENTIAL_FIELDS],
|
|
69
|
+
expand: [],
|
|
70
|
+
format: 'table',
|
|
71
|
+
truncate_title: 25,
|
|
72
|
+
explicit: false,
|
|
73
|
+
},
|
|
74
|
+
whereClause: query.trim(),
|
|
75
|
+
};
|
|
76
|
+
if (!query || query.trim() === '') {
|
|
77
|
+
return result;
|
|
78
|
+
}
|
|
79
|
+
let workingQuery = query.trim();
|
|
80
|
+
const formatMatch = workingQuery.match(/\s+format\s*=\s*(\w+)\s*$/i);
|
|
81
|
+
if (formatMatch) {
|
|
82
|
+
result.selection.format = parseFormat(formatMatch[1]);
|
|
83
|
+
workingQuery = workingQuery.slice(0, formatMatch.index).trim();
|
|
84
|
+
}
|
|
85
|
+
const selectMatch = workingQuery.match(/^SELECT\s+(.+?)\s+WHERE\s+(.+)$/i);
|
|
86
|
+
if (selectMatch) {
|
|
87
|
+
const fieldsPart = selectMatch[1].trim();
|
|
88
|
+
const wherePart = selectMatch[2].trim();
|
|
89
|
+
result.selection = {
|
|
90
|
+
...parseFieldList(fieldsPart),
|
|
91
|
+
format: result.selection.format,
|
|
92
|
+
};
|
|
93
|
+
result.whereClause = wherePart;
|
|
94
|
+
return result;
|
|
95
|
+
}
|
|
96
|
+
const selectOnlyMatch = workingQuery.match(/^SELECT\s+(.+)$/i);
|
|
97
|
+
if (selectOnlyMatch && !selectOnlyMatch[1].toLowerCase().includes(' where ')) {
|
|
98
|
+
result.selection = {
|
|
99
|
+
...parseFieldList(selectOnlyMatch[1].trim()),
|
|
100
|
+
format: result.selection.format,
|
|
101
|
+
};
|
|
102
|
+
result.whereClause = '';
|
|
103
|
+
return result;
|
|
104
|
+
}
|
|
105
|
+
result.whereClause = workingQuery;
|
|
106
|
+
return result;
|
|
107
|
+
}
|
|
108
|
+
export function validateFields(fields) {
|
|
109
|
+
const valid = [];
|
|
110
|
+
const unknown = [];
|
|
111
|
+
for (const field of fields) {
|
|
112
|
+
const normalized = field.toLowerCase().trim();
|
|
113
|
+
const cleanField = normalized.replace(/^[+#]/, '');
|
|
114
|
+
if (FIELD_DEFINITIONS[normalized] ||
|
|
115
|
+
FIELD_DEFINITIONS['#' + cleanField] ||
|
|
116
|
+
EXPANDABLE_FIELDS.includes(cleanField) ||
|
|
117
|
+
normalized === '*') {
|
|
118
|
+
valid.push(normalized);
|
|
119
|
+
}
|
|
120
|
+
else {
|
|
121
|
+
unknown.push(field);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
return { valid, unknown };
|
|
125
|
+
}
|
|
126
|
+
export function getFieldsHelp() {
|
|
127
|
+
const lines = [
|
|
128
|
+
'Available fields:',
|
|
129
|
+
'',
|
|
130
|
+
'Core fields:',
|
|
131
|
+
' id - Task ID (abbreviated)',
|
|
132
|
+
' title - Task title',
|
|
133
|
+
' desc - Description',
|
|
134
|
+
' status - Current status',
|
|
135
|
+
' pri - Priority (C/H/M/L)',
|
|
136
|
+
' size - Size (XS/S/M/L/XL)',
|
|
137
|
+
' assignee - Assignee name',
|
|
138
|
+
' board - Dartboard name',
|
|
139
|
+
' tags - Tags (comma-separated)',
|
|
140
|
+
' due - Due date',
|
|
141
|
+
' start - Start date',
|
|
142
|
+
' done - Completion date',
|
|
143
|
+
' created - Created date',
|
|
144
|
+
' updated - Updated date',
|
|
145
|
+
' parent - Parent task ID',
|
|
146
|
+
'',
|
|
147
|
+
'Relationship counts (prefix with #):',
|
|
148
|
+
' #subtasks - Number of subtasks',
|
|
149
|
+
' #blockers - Number of blockers',
|
|
150
|
+
' #blocking - Number of tasks blocked',
|
|
151
|
+
' #dups - Number of duplicates',
|
|
152
|
+
' #related - Number of related tasks',
|
|
153
|
+
'',
|
|
154
|
+
'Expansion (prefix with +):',
|
|
155
|
+
' +subtasks - Expand subtask titles',
|
|
156
|
+
' +blockers - Expand blocker titles',
|
|
157
|
+
' +blocking - Expand blocked task titles',
|
|
158
|
+
'',
|
|
159
|
+
'Special:',
|
|
160
|
+
' * - All fields',
|
|
161
|
+
'',
|
|
162
|
+
'Output formats (append format=X):',
|
|
163
|
+
' table - Aligned text table (default)',
|
|
164
|
+
' compact - Tab-separated, no borders',
|
|
165
|
+
' csv - CSV format',
|
|
166
|
+
' json - Full JSON',
|
|
167
|
+
' ids - Just dart_ids',
|
|
168
|
+
'',
|
|
169
|
+
'Examples:',
|
|
170
|
+
' status = \'Todo\'',
|
|
171
|
+
' SELECT id,title,due WHERE status = \'Todo\'',
|
|
172
|
+
' SELECT id,title,#blockers WHERE has_blockers = true format=compact',
|
|
173
|
+
];
|
|
174
|
+
return lines.join('\n');
|
|
175
|
+
}
|
|
176
|
+
//# sourceMappingURL=fieldSelector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fieldSelector.js","sourceRoot":"","sources":["../../src/formatters/fieldSelector.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export { formatTasks, formatAsTable, formatAsCompact, formatAsCSV, formatAsIds, abbreviateId, truncate, formatPriority, formatAssignee, formatDate, formatTags, formatSize, formatCount, getRelationshipCounts, parseFieldList, ESSENTIAL_FIELDS, FIELD_DEFINITIONS, type OutputFormat, type FieldConfig, type FormatOptions, type RelationshipCounts, } from './tableFormatter.js';
|
|
2
|
+
export { parseFieldList as parseFields, parseFormat, parseQuery, validateFields, getFieldsHelp, AVAILABLE_FIELDS, type FieldSelection, type ParsedQuery, } from './fieldSelector.js';
|
|
3
|
+
export { expandRelationships, collectIdsToExpand, formatExpandedRelationship, formatExpandedAsNested, getTotalRelationshipCount, hasRelationships, type RelatedTaskSummary, type ExpandedTask, type RelationshipType, type ExpandOptions, } from './relationshipExpander.js';
|
|
4
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/formatters/index.ts"],"names":[],"mappings":"AAMA,OAAO,EAEL,WAAW,EACX,aAAa,EACb,eAAe,EACf,WAAW,EACX,WAAW,EACX,YAAY,EACZ,QAAQ,EACR,cAAc,EACd,cAAc,EACd,UAAU,EACV,UAAU,EACV,UAAU,EACV,WAAW,EACX,qBAAqB,EACrB,cAAc,EACd,gBAAgB,EAChB,iBAAiB,EACjB,KAAK,YAAY,EACjB,KAAK,WAAW,EAChB,KAAK,aAAa,EAClB,KAAK,kBAAkB,GACxB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EAEL,cAAc,IAAI,WAAW,EAC7B,WAAW,EACX,UAAU,EACV,cAAc,EACd,aAAa,EACb,gBAAgB,EAChB,KAAK,cAAc,EACnB,KAAK,WAAW,GACjB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAEL,mBAAmB,EACnB,kBAAkB,EAClB,0BAA0B,EAC1B,sBAAsB,EACtB,yBAAyB,EACzB,gBAAgB,EAChB,KAAK,kBAAkB,EACvB,KAAK,YAAY,EACjB,KAAK,gBAAgB,EACrB,KAAK,aAAa,GACnB,MAAM,2BAA2B,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export { formatTasks, formatAsTable, formatAsCompact, formatAsCSV, formatAsIds, abbreviateId, truncate, formatPriority, formatAssignee, formatDate, formatTags, formatSize, formatCount, getRelationshipCounts, parseFieldList, ESSENTIAL_FIELDS, FIELD_DEFINITIONS, } from './tableFormatter.js';
|
|
2
|
+
export { parseFieldList as parseFields, parseFormat, parseQuery, validateFields, getFieldsHelp, AVAILABLE_FIELDS, } from './fieldSelector.js';
|
|
3
|
+
export { expandRelationships, collectIdsToExpand, formatExpandedRelationship, formatExpandedAsNested, getTotalRelationshipCount, hasRelationships, } from './relationshipExpander.js';
|
|
4
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/formatters/index.ts"],"names":[],"mappings":"AAMA,OAAO,EAEL,WAAW,EACX,aAAa,EACb,eAAe,EACf,WAAW,EACX,WAAW,EACX,YAAY,EACZ,QAAQ,EACR,cAAc,EACd,cAAc,EACd,UAAU,EACV,UAAU,EACV,UAAU,EACV,WAAW,EACX,qBAAqB,EACrB,cAAc,EACd,gBAAgB,EAChB,iBAAiB,GAKlB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EAEL,cAAc,IAAI,WAAW,EAC7B,WAAW,EACX,UAAU,EACV,cAAc,EACd,aAAa,EACb,gBAAgB,GAGjB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAEL,mBAAmB,EACnB,kBAAkB,EAClB,0BAA0B,EAC1B,sBAAsB,EACtB,yBAAyB,EACzB,gBAAgB,GAKjB,MAAM,2BAA2B,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { DartTask } from '../types/index.js';
|
|
2
|
+
export interface RelatedTaskSummary {
|
|
3
|
+
dart_id: string;
|
|
4
|
+
title: string;
|
|
5
|
+
}
|
|
6
|
+
export interface ExpandedTask extends DartTask {
|
|
7
|
+
_subtasks?: RelatedTaskSummary[];
|
|
8
|
+
_blockers?: RelatedTaskSummary[];
|
|
9
|
+
_blocking?: RelatedTaskSummary[];
|
|
10
|
+
_duplicates?: RelatedTaskSummary[];
|
|
11
|
+
_related?: RelatedTaskSummary[];
|
|
12
|
+
}
|
|
13
|
+
export type RelationshipType = 'subtasks' | 'blockers' | 'blocking' | 'duplicates' | 'related';
|
|
14
|
+
export interface ExpandOptions {
|
|
15
|
+
expand: RelationshipType[];
|
|
16
|
+
maxDepth?: number;
|
|
17
|
+
fetchTask: (dartId: string) => Promise<DartTask | null>;
|
|
18
|
+
fetchTasks?: (dartIds: string[]) => Promise<Map<string, DartTask>>;
|
|
19
|
+
}
|
|
20
|
+
export declare function collectIdsToExpand(tasks: DartTask[], expand: RelationshipType[]): Set<string>;
|
|
21
|
+
export declare function expandRelationships(tasks: DartTask[], options: ExpandOptions): Promise<ExpandedTask[]>;
|
|
22
|
+
export declare function formatExpandedRelationship(summaries: RelatedTaskSummary[] | undefined, maxItems?: number, maxTitleLen?: number): string;
|
|
23
|
+
export declare function formatExpandedAsNested(summaries: RelatedTaskSummary[] | undefined, indent?: string, maxItems?: number): string[];
|
|
24
|
+
export declare function getTotalRelationshipCount(task: DartTask): number;
|
|
25
|
+
export declare function hasRelationships(task: DartTask): boolean;
|
|
26
|
+
//# sourceMappingURL=relationshipExpander.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"relationshipExpander.d.ts","sourceRoot":"","sources":["../../src/formatters/relationshipExpander.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAM7C,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,YAAa,SAAQ,QAAQ;IAE5C,SAAS,CAAC,EAAE,kBAAkB,EAAE,CAAC;IAEjC,SAAS,CAAC,EAAE,kBAAkB,EAAE,CAAC;IAEjC,SAAS,CAAC,EAAE,kBAAkB,EAAE,CAAC;IAEjC,WAAW,CAAC,EAAE,kBAAkB,EAAE,CAAC;IAEnC,QAAQ,CAAC,EAAE,kBAAkB,EAAE,CAAC;CACjC;AAED,MAAM,MAAM,gBAAgB,GAAG,UAAU,GAAG,UAAU,GAAG,UAAU,GAAG,YAAY,GAAG,SAAS,CAAC;AAE/F,MAAM,WAAW,aAAa;IAE5B,MAAM,EAAE,gBAAgB,EAAE,CAAC;IAE3B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,SAAS,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,CAAC;IAExD,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC;CACpE;AAqBD,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,QAAQ,EAAE,EACjB,MAAM,EAAE,gBAAgB,EAAE,GACzB,GAAG,CAAC,MAAM,CAAC,CAgBb;AAOD,wBAAsB,mBAAmB,CACvC,KAAK,EAAE,QAAQ,EAAE,EACjB,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,YAAY,EAAE,CAAC,CAwEzB;AAOD,wBAAgB,0BAA0B,CACxC,SAAS,EAAE,kBAAkB,EAAE,GAAG,SAAS,EAC3C,QAAQ,GAAE,MAAU,EACpB,WAAW,GAAE,MAAW,GACvB,MAAM,CAkBR;AASD,wBAAgB,sBAAsB,CACpC,SAAS,EAAE,kBAAkB,EAAE,GAAG,SAAS,EAC3C,MAAM,GAAE,MAAa,EACrB,QAAQ,GAAE,MAAU,GACnB,MAAM,EAAE,CAeV;AAKD,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,QAAQ,GAAG,MAAM,CAQhE;AAKD,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAExD"}
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
const RELATIONSHIP_FIELD_MAP = {
|
|
2
|
+
subtasks: 'subtask_ids',
|
|
3
|
+
blockers: 'blocker_ids',
|
|
4
|
+
blocking: 'blocking_ids',
|
|
5
|
+
duplicates: 'duplicate_ids',
|
|
6
|
+
related: 'related_ids',
|
|
7
|
+
};
|
|
8
|
+
export function collectIdsToExpand(tasks, expand) {
|
|
9
|
+
const ids = new Set();
|
|
10
|
+
for (const task of tasks) {
|
|
11
|
+
for (const rel of expand) {
|
|
12
|
+
const fieldKey = RELATIONSHIP_FIELD_MAP[rel];
|
|
13
|
+
const relatedIds = task[fieldKey];
|
|
14
|
+
if (relatedIds && Array.isArray(relatedIds)) {
|
|
15
|
+
for (const id of relatedIds) {
|
|
16
|
+
ids.add(id);
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
return ids;
|
|
22
|
+
}
|
|
23
|
+
export async function expandRelationships(tasks, options) {
|
|
24
|
+
if (options.expand.length === 0) {
|
|
25
|
+
return tasks;
|
|
26
|
+
}
|
|
27
|
+
const idsToFetch = collectIdsToExpand(tasks, options.expand);
|
|
28
|
+
if (idsToFetch.size === 0) {
|
|
29
|
+
return tasks;
|
|
30
|
+
}
|
|
31
|
+
let relatedTaskMap;
|
|
32
|
+
if (options.fetchTasks) {
|
|
33
|
+
relatedTaskMap = await options.fetchTasks(Array.from(idsToFetch));
|
|
34
|
+
}
|
|
35
|
+
else {
|
|
36
|
+
relatedTaskMap = new Map();
|
|
37
|
+
const fetchPromises = Array.from(idsToFetch).map(async (id) => {
|
|
38
|
+
const task = await options.fetchTask(id);
|
|
39
|
+
if (task) {
|
|
40
|
+
relatedTaskMap.set(id, task);
|
|
41
|
+
}
|
|
42
|
+
});
|
|
43
|
+
await Promise.all(fetchPromises);
|
|
44
|
+
}
|
|
45
|
+
const expandedTasks = tasks.map(task => {
|
|
46
|
+
const expanded = { ...task };
|
|
47
|
+
for (const rel of options.expand) {
|
|
48
|
+
const fieldKey = RELATIONSHIP_FIELD_MAP[rel];
|
|
49
|
+
const relatedIds = task[fieldKey];
|
|
50
|
+
if (relatedIds && Array.isArray(relatedIds)) {
|
|
51
|
+
const summaries = relatedIds
|
|
52
|
+
.map(id => {
|
|
53
|
+
const relatedTask = relatedTaskMap.get(id);
|
|
54
|
+
return relatedTask
|
|
55
|
+
? { dart_id: id, title: relatedTask.title }
|
|
56
|
+
: { dart_id: id, title: '(not found)' };
|
|
57
|
+
});
|
|
58
|
+
switch (rel) {
|
|
59
|
+
case 'subtasks':
|
|
60
|
+
expanded._subtasks = summaries;
|
|
61
|
+
break;
|
|
62
|
+
case 'blockers':
|
|
63
|
+
expanded._blockers = summaries;
|
|
64
|
+
break;
|
|
65
|
+
case 'blocking':
|
|
66
|
+
expanded._blocking = summaries;
|
|
67
|
+
break;
|
|
68
|
+
case 'duplicates':
|
|
69
|
+
expanded._duplicates = summaries;
|
|
70
|
+
break;
|
|
71
|
+
case 'related':
|
|
72
|
+
expanded._related = summaries;
|
|
73
|
+
break;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
return expanded;
|
|
78
|
+
});
|
|
79
|
+
return expandedTasks;
|
|
80
|
+
}
|
|
81
|
+
export function formatExpandedRelationship(summaries, maxItems = 3, maxTitleLen = 15) {
|
|
82
|
+
if (!summaries || summaries.length === 0) {
|
|
83
|
+
return '-';
|
|
84
|
+
}
|
|
85
|
+
const items = summaries.slice(0, maxItems).map(s => {
|
|
86
|
+
const shortId = s.dart_id.length > 6 ? '..' + s.dart_id.slice(-4) : s.dart_id;
|
|
87
|
+
const shortTitle = s.title.length > maxTitleLen
|
|
88
|
+
? s.title.slice(0, maxTitleLen - 2) + '..'
|
|
89
|
+
: s.title;
|
|
90
|
+
return `${shortId}:${shortTitle}`;
|
|
91
|
+
});
|
|
92
|
+
const result = items.join(', ');
|
|
93
|
+
if (summaries.length > maxItems) {
|
|
94
|
+
return result + ` (+${summaries.length - maxItems})`;
|
|
95
|
+
}
|
|
96
|
+
return result;
|
|
97
|
+
}
|
|
98
|
+
export function formatExpandedAsNested(summaries, indent = ' ', maxItems = 5) {
|
|
99
|
+
if (!summaries || summaries.length === 0) {
|
|
100
|
+
return [];
|
|
101
|
+
}
|
|
102
|
+
const lines = summaries.slice(0, maxItems).map(s => {
|
|
103
|
+
const shortId = s.dart_id.length > 6 ? '..' + s.dart_id.slice(-4) : s.dart_id;
|
|
104
|
+
return `${indent}└─ ${shortId} ${s.title}`;
|
|
105
|
+
});
|
|
106
|
+
if (summaries.length > maxItems) {
|
|
107
|
+
lines.push(`${indent} ... and ${summaries.length - maxItems} more`);
|
|
108
|
+
}
|
|
109
|
+
return lines;
|
|
110
|
+
}
|
|
111
|
+
export function getTotalRelationshipCount(task) {
|
|
112
|
+
let count = 0;
|
|
113
|
+
count += task.subtask_ids?.length || 0;
|
|
114
|
+
count += task.blocker_ids?.length || 0;
|
|
115
|
+
count += task.blocking_ids?.length || 0;
|
|
116
|
+
count += task.duplicate_ids?.length || 0;
|
|
117
|
+
count += task.related_ids?.length || 0;
|
|
118
|
+
return count;
|
|
119
|
+
}
|
|
120
|
+
export function hasRelationships(task) {
|
|
121
|
+
return getTotalRelationshipCount(task) > 0;
|
|
122
|
+
}
|
|
123
|
+
//# sourceMappingURL=relationshipExpander.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"relationshipExpander.js","sourceRoot":"","sources":["../../src/formatters/relationshipExpander.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { DartTask } from '../types/index.js';
|
|
2
|
+
export type OutputFormat = 'table' | 'compact' | 'csv' | 'json' | 'ids';
|
|
3
|
+
export interface FieldConfig {
|
|
4
|
+
key: string;
|
|
5
|
+
header: string;
|
|
6
|
+
width: number;
|
|
7
|
+
align?: 'left' | 'right';
|
|
8
|
+
format?: (value: unknown, task: DartTask) => string;
|
|
9
|
+
}
|
|
10
|
+
export interface FormatOptions {
|
|
11
|
+
fields?: string[];
|
|
12
|
+
format?: OutputFormat;
|
|
13
|
+
truncate_title?: number;
|
|
14
|
+
show_footer?: boolean;
|
|
15
|
+
total_count?: number;
|
|
16
|
+
has_more?: boolean;
|
|
17
|
+
offset?: number;
|
|
18
|
+
}
|
|
19
|
+
export interface RelationshipCounts {
|
|
20
|
+
subtasks: number;
|
|
21
|
+
blockers: number;
|
|
22
|
+
blocking: number;
|
|
23
|
+
duplicates: number;
|
|
24
|
+
related: number;
|
|
25
|
+
}
|
|
26
|
+
export declare const ESSENTIAL_FIELDS: string[];
|
|
27
|
+
export declare const FIELD_DEFINITIONS: Record<string, FieldConfig>;
|
|
28
|
+
export declare function abbreviateId(id: string): string;
|
|
29
|
+
export declare function truncate(str: string, maxLen: number): string;
|
|
30
|
+
export declare function formatPriority(value: unknown): string;
|
|
31
|
+
export declare function formatAssignee(value: unknown): string;
|
|
32
|
+
export declare function formatDate(value: unknown): string;
|
|
33
|
+
export declare function formatTags(value: unknown): string;
|
|
34
|
+
export declare function formatSize(value: unknown): string;
|
|
35
|
+
export declare function formatCount(value: unknown): string;
|
|
36
|
+
export declare function parseFieldList(fields: string[]): FieldConfig[];
|
|
37
|
+
export declare function formatAsTable(tasks: DartTask[], options?: FormatOptions): string;
|
|
38
|
+
export declare function formatAsCompact(tasks: DartTask[], options?: FormatOptions): string;
|
|
39
|
+
export declare function formatAsCSV(tasks: DartTask[], options?: FormatOptions): string;
|
|
40
|
+
export declare function formatAsIds(tasks: DartTask[]): string;
|
|
41
|
+
export declare function formatTasks(tasks: DartTask[], options?: FormatOptions): string;
|
|
42
|
+
export declare function getRelationshipCounts(task: DartTask): RelationshipCounts;
|
|
43
|
+
//# sourceMappingURL=tableFormatter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tableFormatter.d.ts","sourceRoot":"","sources":["../../src/formatters/tableFormatter.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAM7C,MAAM,MAAM,YAAY,GAAG,OAAO,GAAG,SAAS,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,CAAC;AAOxE,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IACzB,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,KAAK,MAAM,CAAC;CACrD;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;CACjB;AAqBD,eAAO,MAAM,gBAAgB,UAAsD,CAAC;AAGpF,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CA+HzD,CAAC;AAOF,wBAAgB,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAI/C;AAGD,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAI5D;AAGD,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAIrD;AAGD,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAcrD;AAGD,wBAAgB,UAAU,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAQjD;AAGD,wBAAgB,UAAU,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAOjD;AAGD,wBAAgB,UAAU,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAOjD;AAGD,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAIlD;AA0BD,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,WAAW,EAAE,CAkB9D;AAKD,wBAAgB,aAAa,CAC3B,KAAK,EAAE,QAAQ,EAAE,EACjB,OAAO,GAAE,aAAkB,GAC1B,MAAM,CA2CR;AAKD,wBAAgB,eAAe,CAC7B,KAAK,EAAE,QAAQ,EAAE,EACjB,OAAO,GAAE,aAAkB,GAC1B,MAAM,CAyBR;AAKD,wBAAgB,WAAW,CACzB,KAAK,EAAE,QAAQ,EAAE,EACjB,OAAO,GAAE,aAAkB,GAC1B,MAAM,CA+BR;AAKD,wBAAgB,WAAW,CAAC,KAAK,EAAE,QAAQ,EAAE,GAAG,MAAM,CAErD;AA4BD,wBAAgB,WAAW,CACzB,KAAK,EAAE,QAAQ,EAAE,EACjB,OAAO,GAAE,aAAkB,GAC1B,MAAM,CAiBR;AAKD,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,QAAQ,GAAG,kBAAkB,CAQxE"}
|