@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.
Files changed (98) hide show
  1. package/dist/algorithms/critical-path.d.ts.map +1 -1
  2. package/dist/algorithms/critical-path.js +50 -26
  3. package/dist/algorithms/critical-path.js.map +1 -1
  4. package/dist/algorithms/dependency-integrity.d.ts +73 -0
  5. package/dist/algorithms/dependency-integrity.d.ts.map +1 -0
  6. package/dist/algorithms/dependency-integrity.js +189 -0
  7. package/dist/algorithms/dependency-integrity.js.map +1 -0
  8. package/dist/algorithms/index.d.ts +2 -0
  9. package/dist/algorithms/index.d.ts.map +1 -1
  10. package/dist/algorithms/index.js +2 -0
  11. package/dist/algorithms/index.js.map +1 -1
  12. package/dist/algorithms/tech-analysis.d.ts +106 -0
  13. package/dist/algorithms/tech-analysis.d.ts.map +1 -0
  14. package/dist/algorithms/tech-analysis.js +296 -0
  15. package/dist/algorithms/tech-analysis.js.map +1 -0
  16. package/dist/algorithms/tech-analysis.test.d.ts +2 -0
  17. package/dist/algorithms/tech-analysis.test.d.ts.map +1 -0
  18. package/dist/algorithms/tech-analysis.test.js +338 -0
  19. package/dist/algorithms/tech-analysis.test.js.map +1 -0
  20. package/dist/algorithms/topological-sort.d.ts.map +1 -1
  21. package/dist/algorithms/topological-sort.js +60 -8
  22. package/dist/algorithms/topological-sort.js.map +1 -1
  23. package/dist/schemas/inbox.d.ts +55 -0
  24. package/dist/schemas/inbox.d.ts.map +1 -0
  25. package/dist/schemas/inbox.js +25 -0
  26. package/dist/schemas/inbox.js.map +1 -0
  27. package/dist/schemas/index.d.ts +3 -1
  28. package/dist/schemas/index.d.ts.map +1 -1
  29. package/dist/schemas/index.js +9 -1
  30. package/dist/schemas/index.js.map +1 -1
  31. package/dist/schemas/project.d.ts +154 -41
  32. package/dist/schemas/project.d.ts.map +1 -1
  33. package/dist/schemas/project.js +38 -33
  34. package/dist/schemas/project.js.map +1 -1
  35. package/dist/schemas/response-format.d.ts +80 -0
  36. package/dist/schemas/response-format.d.ts.map +1 -0
  37. package/dist/schemas/response-format.js +17 -0
  38. package/dist/schemas/response-format.js.map +1 -0
  39. package/dist/schemas/task.d.ts +592 -94
  40. package/dist/schemas/task.d.ts.map +1 -1
  41. package/dist/schemas/task.js +124 -64
  42. package/dist/schemas/task.js.map +1 -1
  43. package/dist/schemas/view.d.ts +128 -37
  44. package/dist/schemas/view.d.ts.map +1 -1
  45. package/dist/schemas/view.js +38 -24
  46. package/dist/schemas/view.js.map +1 -1
  47. package/dist/utils/date.d.ts.map +1 -1
  48. package/dist/utils/date.js +17 -2
  49. package/dist/utils/date.js.map +1 -1
  50. package/dist/utils/hierarchy.d.ts +75 -0
  51. package/dist/utils/hierarchy.d.ts.map +1 -0
  52. package/dist/utils/hierarchy.js +179 -0
  53. package/dist/utils/hierarchy.js.map +1 -0
  54. package/dist/utils/id.d.ts +51 -1
  55. package/dist/utils/id.d.ts.map +1 -1
  56. package/dist/utils/id.js +124 -4
  57. package/dist/utils/id.js.map +1 -1
  58. package/dist/utils/id.test.d.ts +2 -0
  59. package/dist/utils/id.test.d.ts.map +1 -0
  60. package/dist/utils/id.test.js +228 -0
  61. package/dist/utils/id.test.js.map +1 -0
  62. package/dist/utils/index.d.ts +4 -2
  63. package/dist/utils/index.d.ts.map +1 -1
  64. package/dist/utils/index.js +7 -2
  65. package/dist/utils/index.js.map +1 -1
  66. package/dist/utils/natural-language.d.ts +45 -0
  67. package/dist/utils/natural-language.d.ts.map +1 -1
  68. package/dist/utils/natural-language.js +86 -0
  69. package/dist/utils/natural-language.js.map +1 -1
  70. package/dist/utils/projection.d.ts +65 -0
  71. package/dist/utils/projection.d.ts.map +1 -0
  72. package/dist/utils/projection.js +181 -0
  73. package/dist/utils/projection.js.map +1 -0
  74. package/dist/utils/projection.test.d.ts +2 -0
  75. package/dist/utils/projection.test.d.ts.map +1 -0
  76. package/dist/utils/projection.test.js +400 -0
  77. package/dist/utils/projection.test.js.map +1 -0
  78. package/package.json +2 -2
  79. package/src/algorithms/critical-path.ts +56 -24
  80. package/src/algorithms/dependency-integrity.ts +270 -0
  81. package/src/algorithms/index.ts +28 -0
  82. package/src/algorithms/tech-analysis.test.ts +413 -0
  83. package/src/algorithms/tech-analysis.ts +412 -0
  84. package/src/algorithms/topological-sort.ts +66 -9
  85. package/src/schemas/inbox.ts +32 -0
  86. package/src/schemas/index.ts +31 -0
  87. package/src/schemas/project.ts +43 -40
  88. package/src/schemas/response-format.ts +108 -0
  89. package/src/schemas/task.ts +145 -77
  90. package/src/schemas/view.ts +43 -33
  91. package/src/utils/date.ts +18 -2
  92. package/src/utils/hierarchy.ts +224 -0
  93. package/src/utils/id.test.ts +281 -0
  94. package/src/utils/id.ts +139 -4
  95. package/src/utils/index.ts +46 -2
  96. package/src/utils/natural-language.ts +113 -0
  97. package/src/utils/projection.test.ts +505 -0
  98. 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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"}
@@ -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
@@ -1 +1 @@
1
- {"version":3,"file":"id.d.ts","sourceRoot":"","sources":["../../src/utils/id.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,wBAAgB,UAAU,CAAC,MAAM,GAAE,MAAW,GAAG,MAAM,CAItD;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"}
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
- const timestamp = Date.now().toString(36);
6
- const random = Math.random().toString(36).substring(2, 8);
7
- return prefix ? `${prefix}_${timestamp}${random}` : `${timestamp}${random}`;
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
@@ -1 +1 @@
1
- {"version":3,"file":"id.js","sourceRoot":"","sources":["../../src/utils/id.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,UAAU,UAAU,CAAC,SAAiB,EAAE;IAC5C,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IAC1C,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC1D,OAAO,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI,SAAS,GAAG,MAAM,EAAE,CAAC,CAAC,CAAC,GAAG,SAAS,GAAG,MAAM,EAAE,CAAC;AAC9E,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc;IAC5B,OAAO,UAAU,CAAC,MAAM,CAAC,CAAC;AAC5B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB;IAC/B,OAAO,UAAU,CAAC,MAAM,CAAC,CAAC;AAC5B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc;IAC5B,OAAO,UAAU,CAAC,MAAM,CAAC,CAAC;AAC5B,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,EAAU;IACzC,OAAO,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACrC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,aAAa,CAAC,EAAU;IACtC,OAAO,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACrC,CAAC"}
1
+ {"version":3,"file":"id.js","sourceRoot":"","sources":["../../src/utils/id.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=id.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"id.test.d.ts","sourceRoot":"","sources":["../../src/utils/id.test.ts"],"names":[],"mappings":""}