@task-mcp/shared 1.0.4 → 1.0.7
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/algorithms/critical-path.d.ts.map +1 -1
- package/dist/algorithms/critical-path.js +50 -26
- package/dist/algorithms/critical-path.js.map +1 -1
- package/dist/algorithms/dependency-integrity.d.ts +73 -0
- package/dist/algorithms/dependency-integrity.d.ts.map +1 -0
- package/dist/algorithms/dependency-integrity.js +189 -0
- package/dist/algorithms/dependency-integrity.js.map +1 -0
- package/dist/algorithms/index.d.ts +2 -0
- package/dist/algorithms/index.d.ts.map +1 -1
- package/dist/algorithms/index.js +2 -0
- package/dist/algorithms/index.js.map +1 -1
- package/dist/algorithms/tech-analysis.d.ts +106 -0
- package/dist/algorithms/tech-analysis.d.ts.map +1 -0
- package/dist/algorithms/tech-analysis.js +296 -0
- package/dist/algorithms/tech-analysis.js.map +1 -0
- package/dist/algorithms/tech-analysis.test.d.ts +2 -0
- package/dist/algorithms/tech-analysis.test.d.ts.map +1 -0
- package/dist/algorithms/tech-analysis.test.js +338 -0
- package/dist/algorithms/tech-analysis.test.js.map +1 -0
- package/dist/algorithms/topological-sort.d.ts.map +1 -1
- package/dist/algorithms/topological-sort.js +60 -8
- package/dist/algorithms/topological-sort.js.map +1 -1
- package/dist/schemas/inbox.d.ts +55 -0
- package/dist/schemas/inbox.d.ts.map +1 -0
- package/dist/schemas/inbox.js +25 -0
- package/dist/schemas/inbox.js.map +1 -0
- package/dist/schemas/index.d.ts +3 -1
- package/dist/schemas/index.d.ts.map +1 -1
- package/dist/schemas/index.js +9 -1
- package/dist/schemas/index.js.map +1 -1
- package/dist/schemas/project.d.ts +154 -41
- package/dist/schemas/project.d.ts.map +1 -1
- package/dist/schemas/project.js +38 -33
- package/dist/schemas/project.js.map +1 -1
- package/dist/schemas/response-format.d.ts +80 -0
- package/dist/schemas/response-format.d.ts.map +1 -0
- package/dist/schemas/response-format.js +17 -0
- package/dist/schemas/response-format.js.map +1 -0
- package/dist/schemas/task.d.ts +592 -94
- package/dist/schemas/task.d.ts.map +1 -1
- package/dist/schemas/task.js +124 -64
- package/dist/schemas/task.js.map +1 -1
- package/dist/schemas/view.d.ts +128 -37
- package/dist/schemas/view.d.ts.map +1 -1
- package/dist/schemas/view.js +38 -24
- package/dist/schemas/view.js.map +1 -1
- package/dist/utils/date.d.ts.map +1 -1
- package/dist/utils/date.js +17 -2
- package/dist/utils/date.js.map +1 -1
- package/dist/utils/hierarchy.d.ts +75 -0
- package/dist/utils/hierarchy.d.ts.map +1 -0
- package/dist/utils/hierarchy.js +179 -0
- package/dist/utils/hierarchy.js.map +1 -0
- package/dist/utils/id.d.ts +51 -1
- package/dist/utils/id.d.ts.map +1 -1
- package/dist/utils/id.js +124 -4
- package/dist/utils/id.js.map +1 -1
- package/dist/utils/id.test.d.ts +2 -0
- package/dist/utils/id.test.d.ts.map +1 -0
- package/dist/utils/id.test.js +228 -0
- package/dist/utils/id.test.js.map +1 -0
- package/dist/utils/index.d.ts +4 -2
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +7 -2
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/natural-language.d.ts +45 -0
- package/dist/utils/natural-language.d.ts.map +1 -1
- package/dist/utils/natural-language.js +86 -0
- package/dist/utils/natural-language.js.map +1 -1
- package/dist/utils/projection.d.ts +65 -0
- package/dist/utils/projection.d.ts.map +1 -0
- package/dist/utils/projection.js +181 -0
- package/dist/utils/projection.js.map +1 -0
- package/dist/utils/projection.test.d.ts +2 -0
- package/dist/utils/projection.test.d.ts.map +1 -0
- package/dist/utils/projection.test.js +400 -0
- package/dist/utils/projection.test.js.map +1 -0
- package/package.json +2 -2
- package/src/algorithms/critical-path.ts +56 -24
- package/src/algorithms/dependency-integrity.ts +270 -0
- package/src/algorithms/index.ts +28 -0
- package/src/algorithms/tech-analysis.test.ts +413 -0
- package/src/algorithms/tech-analysis.ts +412 -0
- package/src/algorithms/topological-sort.ts +66 -9
- package/src/schemas/inbox.ts +32 -0
- package/src/schemas/index.ts +31 -0
- package/src/schemas/project.ts +43 -40
- package/src/schemas/response-format.ts +108 -0
- package/src/schemas/task.ts +145 -77
- package/src/schemas/view.ts +43 -33
- package/src/utils/date.ts +18 -2
- package/src/utils/hierarchy.ts +224 -0
- package/src/utils/id.test.ts +281 -0
- package/src/utils/id.ts +139 -4
- package/src/utils/index.ts +46 -2
- package/src/utils/natural-language.ts +113 -0
- package/src/utils/projection.test.ts +505 -0
- package/src/utils/projection.ts +251 -0
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import type { Task } from "../schemas/task.js";
|
|
2
|
+
/**
|
|
3
|
+
* Maximum allowed hierarchy depth (0-indexed)
|
|
4
|
+
* 0 = root task
|
|
5
|
+
* 1 = subtask
|
|
6
|
+
* 2 = sub-subtask
|
|
7
|
+
* 3 = sub-sub-subtask (maximum)
|
|
8
|
+
*/
|
|
9
|
+
export declare const MAX_HIERARCHY_DEPTH = 3;
|
|
10
|
+
/**
|
|
11
|
+
* Calculates the hierarchy level of a task.
|
|
12
|
+
* Level 0 = root task (no parent)
|
|
13
|
+
* Level 1 = direct subtask
|
|
14
|
+
* Level 2 = sub-subtask
|
|
15
|
+
* etc.
|
|
16
|
+
*
|
|
17
|
+
* @param tasks - Array of all tasks
|
|
18
|
+
* @param taskId - ID of the task to get level for
|
|
19
|
+
* @returns The hierarchy level (0 for root), or -1 if task not found
|
|
20
|
+
*/
|
|
21
|
+
export declare function getTaskLevel(tasks: Task[], taskId: string): number;
|
|
22
|
+
/**
|
|
23
|
+
* Validates whether adding a child task under the given parent
|
|
24
|
+
* would exceed the maximum hierarchy depth.
|
|
25
|
+
*
|
|
26
|
+
* @param tasks - Array of all tasks
|
|
27
|
+
* @param parentId - ID of the proposed parent task
|
|
28
|
+
* @returns true if a child can be added, false if it would exceed max depth
|
|
29
|
+
*/
|
|
30
|
+
export declare function validateHierarchyDepth(tasks: Task[], parentId: string): boolean;
|
|
31
|
+
/**
|
|
32
|
+
* Gets all ancestor task IDs for a given task (from immediate parent to root).
|
|
33
|
+
*
|
|
34
|
+
* @param tasks - Array of all tasks
|
|
35
|
+
* @param taskId - ID of the task
|
|
36
|
+
* @returns Array of ancestor task IDs, ordered from immediate parent to root
|
|
37
|
+
*/
|
|
38
|
+
export declare function getAncestorIds(tasks: Task[], taskId: string): string[];
|
|
39
|
+
/**
|
|
40
|
+
* Gets all descendant task IDs for a given task (children, grandchildren, etc.).
|
|
41
|
+
*
|
|
42
|
+
* @param tasks - Array of all tasks
|
|
43
|
+
* @param taskId - ID of the parent task
|
|
44
|
+
* @returns Array of descendant task IDs
|
|
45
|
+
*/
|
|
46
|
+
export declare function getDescendantIds(tasks: Task[], taskId: string): string[];
|
|
47
|
+
/**
|
|
48
|
+
* Gets direct children of a task.
|
|
49
|
+
*
|
|
50
|
+
* @param tasks - Array of all tasks
|
|
51
|
+
* @param taskId - ID of the parent task
|
|
52
|
+
* @returns Array of direct child tasks
|
|
53
|
+
*/
|
|
54
|
+
export declare function getChildTasks(tasks: Task[], taskId: string): Task[];
|
|
55
|
+
/**
|
|
56
|
+
* Gets the root task of a hierarchy.
|
|
57
|
+
*
|
|
58
|
+
* @param tasks - Array of all tasks
|
|
59
|
+
* @param taskId - ID of any task in the hierarchy
|
|
60
|
+
* @returns The root task, or null if not found
|
|
61
|
+
*/
|
|
62
|
+
export declare function getRootTask(tasks: Task[], taskId: string): Task | null;
|
|
63
|
+
/**
|
|
64
|
+
* Builds a tree structure from flat task list.
|
|
65
|
+
*
|
|
66
|
+
* @param tasks - Array of all tasks
|
|
67
|
+
* @param rootId - Optional root task ID (if not provided, returns all root tasks)
|
|
68
|
+
* @returns Tree structure with children arrays
|
|
69
|
+
*/
|
|
70
|
+
export interface TaskTreeNode {
|
|
71
|
+
task: Task;
|
|
72
|
+
children: TaskTreeNode[];
|
|
73
|
+
}
|
|
74
|
+
export declare function buildTaskTree(tasks: Task[], rootId?: string): TaskTreeNode[];
|
|
75
|
+
//# sourceMappingURL=hierarchy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hierarchy.d.ts","sourceRoot":"","sources":["../../src/utils/hierarchy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAE/C;;;;;;GAMG;AACH,eAAO,MAAM,mBAAmB,IAAI,CAAC;AAErC;;;;;;;;;;GAUG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CA0BlE;AAED;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,IAAI,EAAE,EACb,QAAQ,EAAE,MAAM,GACf,OAAO,CAUT;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CA0BtE;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAyBxE;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,EAAE,CAEnE;AAED;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAiBtE;AAED;;;;;;GAMG;AACH,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,IAAI,CAAC;IACX,QAAQ,EAAE,YAAY,EAAE,CAAC;CAC1B;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,YAAY,EAAE,CAgC5E"}
|
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Maximum allowed hierarchy depth (0-indexed)
|
|
3
|
+
* 0 = root task
|
|
4
|
+
* 1 = subtask
|
|
5
|
+
* 2 = sub-subtask
|
|
6
|
+
* 3 = sub-sub-subtask (maximum)
|
|
7
|
+
*/
|
|
8
|
+
export const MAX_HIERARCHY_DEPTH = 3;
|
|
9
|
+
/**
|
|
10
|
+
* Calculates the hierarchy level of a task.
|
|
11
|
+
* Level 0 = root task (no parent)
|
|
12
|
+
* Level 1 = direct subtask
|
|
13
|
+
* Level 2 = sub-subtask
|
|
14
|
+
* etc.
|
|
15
|
+
*
|
|
16
|
+
* @param tasks - Array of all tasks
|
|
17
|
+
* @param taskId - ID of the task to get level for
|
|
18
|
+
* @returns The hierarchy level (0 for root), or -1 if task not found
|
|
19
|
+
*/
|
|
20
|
+
export function getTaskLevel(tasks, taskId) {
|
|
21
|
+
const taskMap = new Map(tasks.map((t) => [t.id, t]));
|
|
22
|
+
const task = taskMap.get(taskId);
|
|
23
|
+
if (!task) {
|
|
24
|
+
return -1;
|
|
25
|
+
}
|
|
26
|
+
let level = 0;
|
|
27
|
+
let currentTask = task;
|
|
28
|
+
while (currentTask.parentId) {
|
|
29
|
+
const parent = taskMap.get(currentTask.parentId);
|
|
30
|
+
if (!parent) {
|
|
31
|
+
break; // Parent not found, stop traversal
|
|
32
|
+
}
|
|
33
|
+
level++;
|
|
34
|
+
currentTask = parent;
|
|
35
|
+
// Safety check to prevent infinite loops
|
|
36
|
+
if (level > MAX_HIERARCHY_DEPTH + 1) {
|
|
37
|
+
break;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
return level;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Validates whether adding a child task under the given parent
|
|
44
|
+
* would exceed the maximum hierarchy depth.
|
|
45
|
+
*
|
|
46
|
+
* @param tasks - Array of all tasks
|
|
47
|
+
* @param parentId - ID of the proposed parent task
|
|
48
|
+
* @returns true if a child can be added, false if it would exceed max depth
|
|
49
|
+
*/
|
|
50
|
+
export function validateHierarchyDepth(tasks, parentId) {
|
|
51
|
+
const parentLevel = getTaskLevel(tasks, parentId);
|
|
52
|
+
if (parentLevel === -1) {
|
|
53
|
+
return false; // Parent task not found
|
|
54
|
+
}
|
|
55
|
+
// Child would be at parentLevel + 1
|
|
56
|
+
// If parent is at level 3, child would be at level 4 which exceeds max
|
|
57
|
+
return parentLevel < MAX_HIERARCHY_DEPTH;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Gets all ancestor task IDs for a given task (from immediate parent to root).
|
|
61
|
+
*
|
|
62
|
+
* @param tasks - Array of all tasks
|
|
63
|
+
* @param taskId - ID of the task
|
|
64
|
+
* @returns Array of ancestor task IDs, ordered from immediate parent to root
|
|
65
|
+
*/
|
|
66
|
+
export function getAncestorIds(tasks, taskId) {
|
|
67
|
+
const taskMap = new Map(tasks.map((t) => [t.id, t]));
|
|
68
|
+
const task = taskMap.get(taskId);
|
|
69
|
+
if (!task) {
|
|
70
|
+
return [];
|
|
71
|
+
}
|
|
72
|
+
const ancestors = [];
|
|
73
|
+
let currentTask = task;
|
|
74
|
+
while (currentTask.parentId) {
|
|
75
|
+
ancestors.push(currentTask.parentId);
|
|
76
|
+
const parent = taskMap.get(currentTask.parentId);
|
|
77
|
+
if (!parent) {
|
|
78
|
+
break;
|
|
79
|
+
}
|
|
80
|
+
currentTask = parent;
|
|
81
|
+
// Safety check
|
|
82
|
+
if (ancestors.length > MAX_HIERARCHY_DEPTH + 1) {
|
|
83
|
+
break;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
return ancestors;
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Gets all descendant task IDs for a given task (children, grandchildren, etc.).
|
|
90
|
+
*
|
|
91
|
+
* @param tasks - Array of all tasks
|
|
92
|
+
* @param taskId - ID of the parent task
|
|
93
|
+
* @returns Array of descendant task IDs
|
|
94
|
+
*/
|
|
95
|
+
export function getDescendantIds(tasks, taskId) {
|
|
96
|
+
const descendants = [];
|
|
97
|
+
const childrenMap = new Map();
|
|
98
|
+
// Build parent -> children map
|
|
99
|
+
for (const task of tasks) {
|
|
100
|
+
if (task.parentId) {
|
|
101
|
+
const children = childrenMap.get(task.parentId) || [];
|
|
102
|
+
children.push(task);
|
|
103
|
+
childrenMap.set(task.parentId, children);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
// BFS to collect all descendants
|
|
107
|
+
const queue = [taskId];
|
|
108
|
+
while (queue.length > 0) {
|
|
109
|
+
const currentId = queue.shift();
|
|
110
|
+
const children = childrenMap.get(currentId) || [];
|
|
111
|
+
for (const child of children) {
|
|
112
|
+
descendants.push(child.id);
|
|
113
|
+
queue.push(child.id);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
return descendants;
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Gets direct children of a task.
|
|
120
|
+
*
|
|
121
|
+
* @param tasks - Array of all tasks
|
|
122
|
+
* @param taskId - ID of the parent task
|
|
123
|
+
* @returns Array of direct child tasks
|
|
124
|
+
*/
|
|
125
|
+
export function getChildTasks(tasks, taskId) {
|
|
126
|
+
return tasks.filter((t) => t.parentId === taskId);
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Gets the root task of a hierarchy.
|
|
130
|
+
*
|
|
131
|
+
* @param tasks - Array of all tasks
|
|
132
|
+
* @param taskId - ID of any task in the hierarchy
|
|
133
|
+
* @returns The root task, or null if not found
|
|
134
|
+
*/
|
|
135
|
+
export function getRootTask(tasks, taskId) {
|
|
136
|
+
const taskMap = new Map(tasks.map((t) => [t.id, t]));
|
|
137
|
+
let currentTask = taskMap.get(taskId);
|
|
138
|
+
if (!currentTask) {
|
|
139
|
+
return null;
|
|
140
|
+
}
|
|
141
|
+
while (currentTask.parentId) {
|
|
142
|
+
const parent = taskMap.get(currentTask.parentId);
|
|
143
|
+
if (!parent) {
|
|
144
|
+
break;
|
|
145
|
+
}
|
|
146
|
+
currentTask = parent;
|
|
147
|
+
}
|
|
148
|
+
return currentTask;
|
|
149
|
+
}
|
|
150
|
+
export function buildTaskTree(tasks, rootId) {
|
|
151
|
+
const taskMap = new Map(tasks.map((t) => [t.id, t]));
|
|
152
|
+
const childrenMap = new Map();
|
|
153
|
+
// Build parent -> children map
|
|
154
|
+
for (const task of tasks) {
|
|
155
|
+
if (task.parentId) {
|
|
156
|
+
const children = childrenMap.get(task.parentId) || [];
|
|
157
|
+
children.push(task);
|
|
158
|
+
childrenMap.set(task.parentId, children);
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
function buildNode(task) {
|
|
162
|
+
const children = childrenMap.get(task.id) || [];
|
|
163
|
+
return {
|
|
164
|
+
task,
|
|
165
|
+
children: children.map(buildNode),
|
|
166
|
+
};
|
|
167
|
+
}
|
|
168
|
+
if (rootId) {
|
|
169
|
+
const rootTask = taskMap.get(rootId);
|
|
170
|
+
if (!rootTask) {
|
|
171
|
+
return [];
|
|
172
|
+
}
|
|
173
|
+
return [buildNode(rootTask)];
|
|
174
|
+
}
|
|
175
|
+
// Return all root tasks (no parent)
|
|
176
|
+
const rootTasks = tasks.filter((t) => !t.parentId);
|
|
177
|
+
return rootTasks.map(buildNode);
|
|
178
|
+
}
|
|
179
|
+
//# sourceMappingURL=hierarchy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hierarchy.js","sourceRoot":"","sources":["../../src/utils/hierarchy.ts"],"names":[],"mappings":"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"}
|
package/dist/utils/id.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Generate a unique ID with optional prefix
|
|
2
|
+
* Generate a unique ID with optional prefix.
|
|
3
|
+
* Uses crypto.randomUUID for secure, collision-resistant ID generation.
|
|
3
4
|
*/
|
|
4
5
|
export declare function generateId(prefix?: string): string;
|
|
5
6
|
/**
|
|
@@ -24,4 +25,53 @@ export declare function isValidProjectId(id: string): boolean;
|
|
|
24
25
|
* @returns true if valid format (task_[alphanumeric])
|
|
25
26
|
*/
|
|
26
27
|
export declare function isValidTaskId(id: string): boolean;
|
|
28
|
+
/**
|
|
29
|
+
* Generate an inbox item ID
|
|
30
|
+
*/
|
|
31
|
+
export declare function generateInboxId(): string;
|
|
32
|
+
/**
|
|
33
|
+
* Validate an inbox ID format
|
|
34
|
+
* @returns true if valid format (inbox_[alphanumeric])
|
|
35
|
+
*/
|
|
36
|
+
export declare function isValidInboxId(id: string): boolean;
|
|
37
|
+
/**
|
|
38
|
+
* ID validation error with detailed context
|
|
39
|
+
*/
|
|
40
|
+
export declare class InvalidIdError extends Error {
|
|
41
|
+
readonly idType: "task" | "project" | "inbox" | "view";
|
|
42
|
+
readonly invalidValue: unknown;
|
|
43
|
+
readonly reason: string;
|
|
44
|
+
constructor(idType: "task" | "project" | "inbox" | "view", invalidValue: unknown, reason: string);
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Validation result with reason if invalid
|
|
48
|
+
*/
|
|
49
|
+
export interface IdValidationResult {
|
|
50
|
+
valid: boolean;
|
|
51
|
+
reason?: string;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Validate task ID with detailed error information
|
|
55
|
+
*/
|
|
56
|
+
export declare function validateTaskId(id: unknown): IdValidationResult;
|
|
57
|
+
/**
|
|
58
|
+
* Validate project ID with detailed error information
|
|
59
|
+
*/
|
|
60
|
+
export declare function validateProjectId(id: unknown): IdValidationResult;
|
|
61
|
+
/**
|
|
62
|
+
* Validate inbox ID with detailed error information
|
|
63
|
+
*/
|
|
64
|
+
export declare function validateInboxId(id: unknown): IdValidationResult;
|
|
65
|
+
/**
|
|
66
|
+
* Assert valid task ID, throw if invalid
|
|
67
|
+
*/
|
|
68
|
+
export declare function assertValidTaskId(id: unknown): asserts id is string;
|
|
69
|
+
/**
|
|
70
|
+
* Assert valid project ID, throw if invalid
|
|
71
|
+
*/
|
|
72
|
+
export declare function assertValidProjectId(id: unknown): asserts id is string;
|
|
73
|
+
/**
|
|
74
|
+
* Assert valid inbox ID, throw if invalid
|
|
75
|
+
*/
|
|
76
|
+
export declare function assertValidInboxId(id: unknown): asserts id is string;
|
|
27
77
|
//# sourceMappingURL=id.d.ts.map
|
package/dist/utils/id.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"id.d.ts","sourceRoot":"","sources":["../../src/utils/id.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"id.d.ts","sourceRoot":"","sources":["../../src/utils/id.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,wBAAgB,UAAU,CAAC,MAAM,GAAE,MAAW,GAAG,MAAM,CAKtD;AAED;;GAEG;AACH,wBAAgB,cAAc,IAAI,MAAM,CAEvC;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,MAAM,CAE1C;AAED;;GAEG;AACH,wBAAgB,cAAc,IAAI,MAAM,CAEvC;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAEpD;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAEjD;AAED;;GAEG;AACH,wBAAgB,eAAe,IAAI,MAAM,CAExC;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAElD;AAED;;GAEG;AACH,qBAAa,cAAe,SAAQ,KAAK;aAErB,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,GAAG,MAAM;aAC7C,YAAY,EAAE,OAAO;aACrB,MAAM,EAAE,MAAM;gBAFd,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,GAAG,MAAM,EAC7C,YAAY,EAAE,OAAO,EACrB,MAAM,EAAE,MAAM;CAKjC;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,EAAE,EAAE,OAAO,GAAG,kBAAkB,CAiB9D;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,OAAO,GAAG,kBAAkB,CAiBjE;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,EAAE,EAAE,OAAO,GAAG,kBAAkB,CAiB/D;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,OAAO,GAAG,OAAO,CAAC,EAAE,IAAI,MAAM,CAKnE;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,EAAE,EAAE,OAAO,GAAG,OAAO,CAAC,EAAE,IAAI,MAAM,CAKtE;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,OAAO,GAAG,OAAO,CAAC,EAAE,IAAI,MAAM,CAKpE"}
|
package/dist/utils/id.js
CHANGED
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Generate a unique ID with optional prefix
|
|
2
|
+
* Generate a unique ID with optional prefix.
|
|
3
|
+
* Uses crypto.randomUUID for secure, collision-resistant ID generation.
|
|
3
4
|
*/
|
|
4
5
|
export function generateId(prefix = "") {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
6
|
+
// Use crypto.randomUUID for better randomness and collision resistance
|
|
7
|
+
// Format: prefix_xxxxxxxx (8 chars from UUID, sufficient for local uniqueness)
|
|
8
|
+
const uuid = crypto.randomUUID().replace(/-/g, "").slice(0, 12);
|
|
9
|
+
return prefix ? `${prefix}_${uuid}` : uuid;
|
|
8
10
|
}
|
|
9
11
|
/**
|
|
10
12
|
* Generate a task ID
|
|
@@ -38,4 +40,122 @@ export function isValidProjectId(id) {
|
|
|
38
40
|
export function isValidTaskId(id) {
|
|
39
41
|
return /^task_[a-z0-9]+$/.test(id);
|
|
40
42
|
}
|
|
43
|
+
/**
|
|
44
|
+
* Generate an inbox item ID
|
|
45
|
+
*/
|
|
46
|
+
export function generateInboxId() {
|
|
47
|
+
return generateId("inbox");
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Validate an inbox ID format
|
|
51
|
+
* @returns true if valid format (inbox_[alphanumeric])
|
|
52
|
+
*/
|
|
53
|
+
export function isValidInboxId(id) {
|
|
54
|
+
return /^inbox_[a-z0-9]+$/.test(id);
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* ID validation error with detailed context
|
|
58
|
+
*/
|
|
59
|
+
export class InvalidIdError extends Error {
|
|
60
|
+
idType;
|
|
61
|
+
invalidValue;
|
|
62
|
+
reason;
|
|
63
|
+
constructor(idType, invalidValue, reason) {
|
|
64
|
+
super(`Invalid ${idType} ID: ${reason}`);
|
|
65
|
+
this.idType = idType;
|
|
66
|
+
this.invalidValue = invalidValue;
|
|
67
|
+
this.reason = reason;
|
|
68
|
+
this.name = "InvalidIdError";
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Validate task ID with detailed error information
|
|
73
|
+
*/
|
|
74
|
+
export function validateTaskId(id) {
|
|
75
|
+
if (id === null || id === undefined) {
|
|
76
|
+
return { valid: false, reason: "Task ID is required" };
|
|
77
|
+
}
|
|
78
|
+
if (typeof id !== "string") {
|
|
79
|
+
return { valid: false, reason: `Task ID must be a string (received ${typeof id})` };
|
|
80
|
+
}
|
|
81
|
+
if (id.length === 0) {
|
|
82
|
+
return { valid: false, reason: "Task ID cannot be empty" };
|
|
83
|
+
}
|
|
84
|
+
if (!id.startsWith("task_")) {
|
|
85
|
+
return { valid: false, reason: "Task ID must start with 'task_' prefix" };
|
|
86
|
+
}
|
|
87
|
+
if (!/^task_[a-z0-9]+$/.test(id)) {
|
|
88
|
+
return { valid: false, reason: "Task ID contains invalid characters" };
|
|
89
|
+
}
|
|
90
|
+
return { valid: true };
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Validate project ID with detailed error information
|
|
94
|
+
*/
|
|
95
|
+
export function validateProjectId(id) {
|
|
96
|
+
if (id === null || id === undefined) {
|
|
97
|
+
return { valid: false, reason: "Project ID is required" };
|
|
98
|
+
}
|
|
99
|
+
if (typeof id !== "string") {
|
|
100
|
+
return { valid: false, reason: `Project ID must be a string (received ${typeof id})` };
|
|
101
|
+
}
|
|
102
|
+
if (id.length === 0) {
|
|
103
|
+
return { valid: false, reason: "Project ID cannot be empty" };
|
|
104
|
+
}
|
|
105
|
+
if (!id.startsWith("proj_")) {
|
|
106
|
+
return { valid: false, reason: "Project ID must start with 'proj_' prefix" };
|
|
107
|
+
}
|
|
108
|
+
if (!/^proj_[a-z0-9]+$/.test(id)) {
|
|
109
|
+
return { valid: false, reason: "Project ID contains invalid characters" };
|
|
110
|
+
}
|
|
111
|
+
return { valid: true };
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Validate inbox ID with detailed error information
|
|
115
|
+
*/
|
|
116
|
+
export function validateInboxId(id) {
|
|
117
|
+
if (id === null || id === undefined) {
|
|
118
|
+
return { valid: false, reason: "Inbox ID is required" };
|
|
119
|
+
}
|
|
120
|
+
if (typeof id !== "string") {
|
|
121
|
+
return { valid: false, reason: `Inbox ID must be a string (received ${typeof id})` };
|
|
122
|
+
}
|
|
123
|
+
if (id.length === 0) {
|
|
124
|
+
return { valid: false, reason: "Inbox ID cannot be empty" };
|
|
125
|
+
}
|
|
126
|
+
if (!id.startsWith("inbox_")) {
|
|
127
|
+
return { valid: false, reason: "Inbox ID must start with 'inbox_' prefix" };
|
|
128
|
+
}
|
|
129
|
+
if (!/^inbox_[a-z0-9]+$/.test(id)) {
|
|
130
|
+
return { valid: false, reason: "Inbox ID contains invalid characters" };
|
|
131
|
+
}
|
|
132
|
+
return { valid: true };
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Assert valid task ID, throw if invalid
|
|
136
|
+
*/
|
|
137
|
+
export function assertValidTaskId(id) {
|
|
138
|
+
const result = validateTaskId(id);
|
|
139
|
+
if (!result.valid) {
|
|
140
|
+
throw new InvalidIdError("task", id, result.reason);
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Assert valid project ID, throw if invalid
|
|
145
|
+
*/
|
|
146
|
+
export function assertValidProjectId(id) {
|
|
147
|
+
const result = validateProjectId(id);
|
|
148
|
+
if (!result.valid) {
|
|
149
|
+
throw new InvalidIdError("project", id, result.reason);
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* Assert valid inbox ID, throw if invalid
|
|
154
|
+
*/
|
|
155
|
+
export function assertValidInboxId(id) {
|
|
156
|
+
const result = validateInboxId(id);
|
|
157
|
+
if (!result.valid) {
|
|
158
|
+
throw new InvalidIdError("inbox", id, result.reason);
|
|
159
|
+
}
|
|
160
|
+
}
|
|
41
161
|
//# sourceMappingURL=id.js.map
|
package/dist/utils/id.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"id.js","sourceRoot":"","sources":["../../src/utils/id.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"id.js","sourceRoot":"","sources":["../../src/utils/id.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"id.test.d.ts","sourceRoot":"","sources":["../../src/utils/id.test.ts"],"names":[],"mappings":""}
|