@doist/todoist-cli 1.29.3 → 1.29.4

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 (246) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/package.json +8 -3
  3. package/dist/__mocks__/chalk.d.ts +0 -3
  4. package/dist/__mocks__/chalk.d.ts.map +0 -1
  5. package/dist/__mocks__/chalk.js +0 -8
  6. package/dist/__mocks__/chalk.js.map +0 -1
  7. package/dist/commands/activity.d.ts +0 -3
  8. package/dist/commands/activity.d.ts.map +0 -1
  9. package/dist/commands/activity.js +0 -267
  10. package/dist/commands/activity.js.map +0 -1
  11. package/dist/commands/add.d.ts +0 -3
  12. package/dist/commands/add.d.ts.map +0 -1
  13. package/dist/commands/add.js +0 -36
  14. package/dist/commands/add.js.map +0 -1
  15. package/dist/commands/attachment.d.ts +0 -3
  16. package/dist/commands/attachment.d.ts.map +0 -1
  17. package/dist/commands/attachment.js +0 -156
  18. package/dist/commands/attachment.js.map +0 -1
  19. package/dist/commands/auth.d.ts +0 -3
  20. package/dist/commands/auth.d.ts.map +0 -1
  21. package/dist/commands/auth.js +0 -124
  22. package/dist/commands/auth.js.map +0 -1
  23. package/dist/commands/changelog.d.ts +0 -8
  24. package/dist/commands/changelog.d.ts.map +0 -1
  25. package/dist/commands/changelog.js +0 -92
  26. package/dist/commands/changelog.js.map +0 -1
  27. package/dist/commands/comment.d.ts +0 -3
  28. package/dist/commands/comment.d.ts.map +0 -1
  29. package/dist/commands/comment.js +0 -301
  30. package/dist/commands/comment.js.map +0 -1
  31. package/dist/commands/completed.d.ts +0 -3
  32. package/dist/commands/completed.d.ts.map +0 -1
  33. package/dist/commands/completed.js +0 -107
  34. package/dist/commands/completed.js.map +0 -1
  35. package/dist/commands/completion.d.ts +0 -3
  36. package/dist/commands/completion.d.ts.map +0 -1
  37. package/dist/commands/completion.js +0 -107
  38. package/dist/commands/completion.js.map +0 -1
  39. package/dist/commands/filter.d.ts +0 -5
  40. package/dist/commands/filter.d.ts.map +0 -1
  41. package/dist/commands/filter.js +0 -287
  42. package/dist/commands/filter.js.map +0 -1
  43. package/dist/commands/inbox.d.ts +0 -3
  44. package/dist/commands/inbox.d.ts.map +0 -1
  45. package/dist/commands/inbox.js +0 -25
  46. package/dist/commands/inbox.js.map +0 -1
  47. package/dist/commands/label.d.ts +0 -5
  48. package/dist/commands/label.d.ts.map +0 -1
  49. package/dist/commands/label.js +0 -328
  50. package/dist/commands/label.js.map +0 -1
  51. package/dist/commands/notification.d.ts +0 -3
  52. package/dist/commands/notification.d.ts.map +0 -1
  53. package/dist/commands/notification.js +0 -274
  54. package/dist/commands/notification.js.map +0 -1
  55. package/dist/commands/project.d.ts +0 -5
  56. package/dist/commands/project.d.ts.map +0 -1
  57. package/dist/commands/project.js +0 -528
  58. package/dist/commands/project.js.map +0 -1
  59. package/dist/commands/reminder.d.ts +0 -3
  60. package/dist/commands/reminder.d.ts.map +0 -1
  61. package/dist/commands/reminder.js +0 -271
  62. package/dist/commands/reminder.js.map +0 -1
  63. package/dist/commands/section.d.ts +0 -3
  64. package/dist/commands/section.d.ts.map +0 -1
  65. package/dist/commands/section.js +0 -172
  66. package/dist/commands/section.js.map +0 -1
  67. package/dist/commands/settings.d.ts +0 -12
  68. package/dist/commands/settings.d.ts.map +0 -1
  69. package/dist/commands/settings.js +0 -312
  70. package/dist/commands/settings.js.map +0 -1
  71. package/dist/commands/skill.d.ts +0 -3
  72. package/dist/commands/skill.d.ts.map +0 -1
  73. package/dist/commands/skill.js +0 -127
  74. package/dist/commands/skill.js.map +0 -1
  75. package/dist/commands/stats.d.ts +0 -3
  76. package/dist/commands/stats.d.ts.map +0 -1
  77. package/dist/commands/stats.js +0 -151
  78. package/dist/commands/stats.js.map +0 -1
  79. package/dist/commands/task.d.ts +0 -5
  80. package/dist/commands/task.d.ts.map +0 -1
  81. package/dist/commands/task.js +0 -559
  82. package/dist/commands/task.js.map +0 -1
  83. package/dist/commands/today.d.ts +0 -18
  84. package/dist/commands/today.d.ts.map +0 -1
  85. package/dist/commands/today.js +0 -108
  86. package/dist/commands/today.js.map +0 -1
  87. package/dist/commands/upcoming.d.ts +0 -17
  88. package/dist/commands/upcoming.d.ts.map +0 -1
  89. package/dist/commands/upcoming.js +0 -129
  90. package/dist/commands/upcoming.js.map +0 -1
  91. package/dist/commands/update.d.ts +0 -6
  92. package/dist/commands/update.d.ts.map +0 -1
  93. package/dist/commands/update.js +0 -90
  94. package/dist/commands/update.js.map +0 -1
  95. package/dist/commands/view.d.ts +0 -3
  96. package/dist/commands/view.d.ts.map +0 -1
  97. package/dist/commands/view.js +0 -79
  98. package/dist/commands/view.js.map +0 -1
  99. package/dist/commands/workspace.d.ts +0 -3
  100. package/dist/commands/workspace.d.ts.map +0 -1
  101. package/dist/commands/workspace.js +0 -309
  102. package/dist/commands/workspace.js.map +0 -1
  103. package/dist/index.d.ts +0 -3
  104. package/dist/index.d.ts.map +0 -1
  105. package/dist/index.js +0 -176
  106. package/dist/index.js.map +0 -1
  107. package/dist/lib/api/core.d.ts +0 -13
  108. package/dist/lib/api/core.d.ts.map +0 -1
  109. package/dist/lib/api/core.js +0 -170
  110. package/dist/lib/api/core.js.map +0 -1
  111. package/dist/lib/api/filters.d.ts +0 -19
  112. package/dist/lib/api/filters.d.ts.map +0 -1
  113. package/dist/lib/api/filters.js +0 -60
  114. package/dist/lib/api/filters.js.map +0 -1
  115. package/dist/lib/api/notifications.d.ts +0 -33
  116. package/dist/lib/api/notifications.d.ts.map +0 -1
  117. package/dist/lib/api/notifications.js +0 -94
  118. package/dist/lib/api/notifications.js.map +0 -1
  119. package/dist/lib/api/reminders.d.ts +0 -30
  120. package/dist/lib/api/reminders.d.ts.map +0 -1
  121. package/dist/lib/api/reminders.js +0 -65
  122. package/dist/lib/api/reminders.js.map +0 -1
  123. package/dist/lib/api/stats.d.ts +0 -41
  124. package/dist/lib/api/stats.d.ts.map +0 -1
  125. package/dist/lib/api/stats.js +0 -74
  126. package/dist/lib/api/stats.js.map +0 -1
  127. package/dist/lib/api/uploads.d.ts +0 -10
  128. package/dist/lib/api/uploads.d.ts.map +0 -1
  129. package/dist/lib/api/uploads.js +0 -31
  130. package/dist/lib/api/uploads.js.map +0 -1
  131. package/dist/lib/api/user-settings.d.ts +0 -34
  132. package/dist/lib/api/user-settings.d.ts.map +0 -1
  133. package/dist/lib/api/user-settings.js +0 -58
  134. package/dist/lib/api/user-settings.js.map +0 -1
  135. package/dist/lib/api/workspaces.d.ts +0 -23
  136. package/dist/lib/api/workspaces.d.ts.map +0 -1
  137. package/dist/lib/api/workspaces.js +0 -61
  138. package/dist/lib/api/workspaces.js.map +0 -1
  139. package/dist/lib/auth.d.ts +0 -14
  140. package/dist/lib/auth.d.ts.map +0 -1
  141. package/dist/lib/auth.js +0 -182
  142. package/dist/lib/auth.js.map +0 -1
  143. package/dist/lib/browser.d.ts +0 -2
  144. package/dist/lib/browser.d.ts.map +0 -1
  145. package/dist/lib/browser.js +0 -6
  146. package/dist/lib/browser.js.map +0 -1
  147. package/dist/lib/collaborators.d.ts +0 -29
  148. package/dist/lib/collaborators.d.ts.map +0 -1
  149. package/dist/lib/collaborators.js +0 -184
  150. package/dist/lib/collaborators.js.map +0 -1
  151. package/dist/lib/completion.d.ts +0 -41
  152. package/dist/lib/completion.d.ts.map +0 -1
  153. package/dist/lib/completion.js +0 -191
  154. package/dist/lib/completion.js.map +0 -1
  155. package/dist/lib/dates.d.ts +0 -16
  156. package/dist/lib/dates.d.ts.map +0 -1
  157. package/dist/lib/dates.js +0 -45
  158. package/dist/lib/dates.js.map +0 -1
  159. package/dist/lib/duration.d.ts +0 -14
  160. package/dist/lib/duration.d.ts.map +0 -1
  161. package/dist/lib/duration.js +0 -58
  162. package/dist/lib/duration.js.map +0 -1
  163. package/dist/lib/logger.d.ts +0 -42
  164. package/dist/lib/logger.d.ts.map +0 -1
  165. package/dist/lib/logger.js +0 -227
  166. package/dist/lib/logger.js.map +0 -1
  167. package/dist/lib/markdown.d.ts +0 -3
  168. package/dist/lib/markdown.d.ts.map +0 -1
  169. package/dist/lib/markdown.js +0 -22
  170. package/dist/lib/markdown.js.map +0 -1
  171. package/dist/lib/oauth-server.d.ts +0 -6
  172. package/dist/lib/oauth-server.d.ts.map +0 -1
  173. package/dist/lib/oauth-server.js +0 -773
  174. package/dist/lib/oauth-server.js.map +0 -1
  175. package/dist/lib/oauth.d.ts +0 -3
  176. package/dist/lib/oauth.d.ts.map +0 -1
  177. package/dist/lib/oauth.js +0 -38
  178. package/dist/lib/oauth.js.map +0 -1
  179. package/dist/lib/options.d.ts +0 -16
  180. package/dist/lib/options.d.ts.map +0 -1
  181. package/dist/lib/options.js +0 -2
  182. package/dist/lib/options.js.map +0 -1
  183. package/dist/lib/output.d.ts +0 -39
  184. package/dist/lib/output.d.ts.map +0 -1
  185. package/dist/lib/output.js +0 -311
  186. package/dist/lib/output.js.map +0 -1
  187. package/dist/lib/pagination.d.ts +0 -23
  188. package/dist/lib/pagination.d.ts.map +0 -1
  189. package/dist/lib/pagination.js +0 -26
  190. package/dist/lib/pagination.js.map +0 -1
  191. package/dist/lib/pkce.d.ts +0 -4
  192. package/dist/lib/pkce.d.ts.map +0 -1
  193. package/dist/lib/pkce.js +0 -19
  194. package/dist/lib/pkce.js.map +0 -1
  195. package/dist/lib/progress.d.ts +0 -29
  196. package/dist/lib/progress.d.ts.map +0 -1
  197. package/dist/lib/progress.js +0 -101
  198. package/dist/lib/progress.js.map +0 -1
  199. package/dist/lib/refs.d.ts +0 -52
  200. package/dist/lib/refs.d.ts.map +0 -1
  201. package/dist/lib/refs.js +0 -225
  202. package/dist/lib/refs.js.map +0 -1
  203. package/dist/lib/secure-store.d.ts +0 -11
  204. package/dist/lib/secure-store.d.ts.map +0 -1
  205. package/dist/lib/secure-store.js +0 -57
  206. package/dist/lib/secure-store.js.map +0 -1
  207. package/dist/lib/skills/content.d.ts +0 -4
  208. package/dist/lib/skills/content.d.ts.map +0 -1
  209. package/dist/lib/skills/content.js +0 -418
  210. package/dist/lib/skills/content.js.map +0 -1
  211. package/dist/lib/skills/create-installer.d.ts +0 -10
  212. package/dist/lib/skills/create-installer.d.ts.map +0 -1
  213. package/dist/lib/skills/create-installer.js +0 -77
  214. package/dist/lib/skills/create-installer.js.map +0 -1
  215. package/dist/lib/skills/index.d.ts +0 -6
  216. package/dist/lib/skills/index.d.ts.map +0 -1
  217. package/dist/lib/skills/index.js +0 -40
  218. package/dist/lib/skills/index.js.map +0 -1
  219. package/dist/lib/skills/types.d.ts +0 -11
  220. package/dist/lib/skills/types.d.ts.map +0 -1
  221. package/dist/lib/skills/types.js +0 -2
  222. package/dist/lib/skills/types.js.map +0 -1
  223. package/dist/lib/skills/update-installed.d.ts +0 -7
  224. package/dist/lib/skills/update-installed.d.ts.map +0 -1
  225. package/dist/lib/skills/update-installed.js +0 -23
  226. package/dist/lib/skills/update-installed.js.map +0 -1
  227. package/dist/lib/spinner.d.ts +0 -23
  228. package/dist/lib/spinner.d.ts.map +0 -1
  229. package/dist/lib/spinner.js +0 -138
  230. package/dist/lib/spinner.js.map +0 -1
  231. package/dist/lib/stdin.d.ts +0 -2
  232. package/dist/lib/stdin.d.ts.map +0 -1
  233. package/dist/lib/stdin.js +0 -12
  234. package/dist/lib/stdin.js.map +0 -1
  235. package/dist/lib/task-list.d.ts +0 -31
  236. package/dist/lib/task-list.d.ts.map +0 -1
  237. package/dist/lib/task-list.js +0 -271
  238. package/dist/lib/task-list.js.map +0 -1
  239. package/dist/lib/urls.d.ts +0 -8
  240. package/dist/lib/urls.d.ts.map +0 -1
  241. package/dist/lib/urls.js +0 -26
  242. package/dist/lib/urls.js.map +0 -1
  243. package/dist/postinstall.d.ts +0 -2
  244. package/dist/postinstall.d.ts.map +0 -1
  245. package/dist/postinstall.js +0 -3
  246. package/dist/postinstall.js.map +0 -1
@@ -1,184 +0,0 @@
1
- import { getCurrentUserId, isWorkspaceProject } from './api/core.js';
2
- import { formatError } from './output.js';
3
- import { extractId, isIdRef } from './refs.js';
4
- export class CollaboratorCache {
5
- workspaceUsers = new Map();
6
- projectCollaborators = new Map();
7
- async preload(api, tasks, projects) {
8
- const projectsWithAssignees = new Set();
9
- for (const task of tasks) {
10
- if (task.responsibleUid) {
11
- projectsWithAssignees.add(task.projectId);
12
- }
13
- }
14
- if (projectsWithAssignees.size === 0)
15
- return;
16
- const workspaceIds = new Set();
17
- const sharedPersonalProjectIds = [];
18
- for (const projectId of projectsWithAssignees) {
19
- const project = projects.get(projectId);
20
- if (!project)
21
- continue;
22
- if (isWorkspaceProject(project)) {
23
- workspaceIds.add(project.workspaceId);
24
- }
25
- else if (project.isShared) {
26
- sharedPersonalProjectIds.push(projectId);
27
- }
28
- }
29
- const fetches = [];
30
- for (const workspaceId of workspaceIds) {
31
- if (!this.workspaceUsers.has(workspaceId)) {
32
- fetches.push(this.fetchWorkspaceUsers(api, workspaceId));
33
- }
34
- }
35
- for (const projectId of sharedPersonalProjectIds) {
36
- if (!this.projectCollaborators.has(projectId)) {
37
- fetches.push(this.fetchProjectCollaborators(api, projectId));
38
- }
39
- }
40
- await Promise.all(fetches);
41
- }
42
- async fetchWorkspaceUsers(api, workspaceId) {
43
- const userMap = new Map();
44
- let cursor;
45
- const workspaceIdNum = parseInt(workspaceId, 10);
46
- while (true) {
47
- const response = await api.getWorkspaceUsers({
48
- workspaceId: workspaceIdNum,
49
- cursor,
50
- limit: 200,
51
- });
52
- for (const user of response.workspaceUsers) {
53
- userMap.set(user.userId, {
54
- id: user.userId,
55
- name: user.fullName,
56
- email: user.userEmail,
57
- });
58
- }
59
- if (!response.hasMore || !response.nextCursor)
60
- break;
61
- cursor = response.nextCursor;
62
- }
63
- this.workspaceUsers.set(workspaceId, userMap);
64
- }
65
- async fetchProjectCollaborators(api, projectId) {
66
- const userMap = new Map();
67
- let cursor;
68
- while (true) {
69
- const response = await api.getProjectCollaborators(projectId, { cursor });
70
- for (const user of response.results) {
71
- userMap.set(user.id, {
72
- id: user.id,
73
- name: user.name,
74
- email: user.email,
75
- });
76
- }
77
- if (!response.nextCursor)
78
- break;
79
- cursor = response.nextCursor;
80
- }
81
- this.projectCollaborators.set(projectId, userMap);
82
- }
83
- getUserName({ userId, projectId, projects, }) {
84
- const project = projects.get(projectId);
85
- if (!project)
86
- return null;
87
- if (isWorkspaceProject(project)) {
88
- const workspaceMap = this.workspaceUsers.get(project.workspaceId);
89
- const user = workspaceMap?.get(userId);
90
- return user?.name ?? null;
91
- }
92
- const projectMap = this.projectCollaborators.get(projectId);
93
- const user = projectMap?.get(userId);
94
- return user?.name ?? null;
95
- }
96
- }
97
- export function formatUserShortName(fullName) {
98
- const parts = fullName.trim().split(/\s+/);
99
- if (parts.length === 1) {
100
- return parts[0];
101
- }
102
- const firstName = parts[0];
103
- const lastInitial = parts[parts.length - 1][0];
104
- return `${firstName} ${lastInitial}.`;
105
- }
106
- export function formatAssignee({ userId, projectId, projects, cache, }) {
107
- if (!userId)
108
- return null;
109
- const name = cache.getUserName({ userId, projectId, projects });
110
- if (name) {
111
- return formatUserShortName(name);
112
- }
113
- return userId;
114
- }
115
- async function fetchCollaboratorsForProject(api, project) {
116
- if (isWorkspaceProject(project)) {
117
- const users = [];
118
- let cursor;
119
- const workspaceIdNum = parseInt(project.workspaceId, 10);
120
- while (true) {
121
- const response = await api.getWorkspaceUsers({
122
- workspaceId: workspaceIdNum,
123
- cursor,
124
- limit: 200,
125
- });
126
- for (const user of response.workspaceUsers) {
127
- users.push({
128
- id: user.userId,
129
- name: user.fullName,
130
- email: user.userEmail,
131
- });
132
- }
133
- if (!response.hasMore || !response.nextCursor)
134
- break;
135
- cursor = response.nextCursor;
136
- }
137
- return users;
138
- }
139
- if (project.isShared) {
140
- const users = [];
141
- let cursor;
142
- while (true) {
143
- const response = await api.getProjectCollaborators(project.id, {
144
- cursor,
145
- });
146
- for (const user of response.results) {
147
- users.push({
148
- id: user.id,
149
- name: user.name,
150
- email: user.email,
151
- });
152
- }
153
- if (!response.nextCursor)
154
- break;
155
- cursor = response.nextCursor;
156
- }
157
- return users;
158
- }
159
- throw new Error(formatError('NOT_SHARED', 'Cannot assign tasks in non-shared projects.'));
160
- }
161
- export async function resolveAssigneeId(api, ref, project) {
162
- if (ref.toLowerCase() === 'me') {
163
- return getCurrentUserId();
164
- }
165
- if (isIdRef(ref)) {
166
- return extractId(ref);
167
- }
168
- const collaborators = await fetchCollaboratorsForProject(api, project);
169
- const lower = ref.toLowerCase();
170
- const exactName = collaborators.find((c) => c.name.toLowerCase() === lower);
171
- if (exactName)
172
- return exactName.id;
173
- const exactEmail = collaborators.find((c) => c.email.toLowerCase() === lower);
174
- if (exactEmail)
175
- return exactEmail.id;
176
- const partialName = collaborators.filter((c) => c.name.toLowerCase().includes(lower));
177
- if (partialName.length === 1)
178
- return partialName[0].id;
179
- if (partialName.length > 1) {
180
- throw new Error(formatError('AMBIGUOUS_ASSIGNEE', `Multiple users match "${ref}":`, partialName.slice(0, 5).map((c) => `"${c.name}" (id:${c.id})`)));
181
- }
182
- throw new Error(formatError('ASSIGNEE_NOT_FOUND', `User "${ref}" not found.`));
183
- }
184
- //# sourceMappingURL=collaborators.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"collaborators.js","sourceRoot":"","sources":["../../src/lib/collaborators.ts"],"names":[],"mappings":"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"}
@@ -1,41 +0,0 @@
1
- import type { Command, Option } from 'commander';
2
- /**
3
- * Set argChoices on an option without enabling Commander's built-in
4
- * validation. The choices are surfaced for shell completions but the
5
- * option still accepts any value at parse time.
6
- *
7
- * Useful when the option accepts values beyond the choices list
8
- * (e.g. comma-separated roles, boolean synonyms like true/false/yes/no/1/0).
9
- *
10
- * This sets Commander's internal `argChoices` property directly.
11
- */
12
- export declare function withUnvalidatedChoices(opt: Option, values: string[]): Option;
13
- export declare function withCaseInsensitiveChoices(opt: Option, values: string[]): Option;
14
- /**
15
- * Parse COMP_LINE into words, stripping the binary name and the
16
- * 'completion-server' token that tabtab injects.
17
- *
18
- * FIXME: This splits on whitespace and does not handle quoted arguments.
19
- * A value like `"Buy milk tomorrow"` would be split into three words.
20
- * In practice this is fine because we only walk command/option names,
21
- * and shells provide the already-split COMP_WORDS separately. If a
22
- * positional arg value happens to match a subcommand name, the tree
23
- * walker could descend incorrectly (see tests under "parseCompLine
24
- * quoted argument limitation"). This can be fixed once tabtab exposes
25
- * the shell-provided words: https://github.com/pnpm/tabtab/issues/35
26
- */
27
- export declare function parseCompLine(compLine: string): string[];
28
- export interface CompletionItem {
29
- name: string;
30
- description?: string;
31
- }
32
- /**
33
- * Get completions for the current command line context.
34
- *
35
- * @param program - The root Commander program with all commands registered
36
- * @param words - The words on the command line (excluding the binary name)
37
- * @param current - The current word being typed (may be empty string)
38
- * @returns Array of completion items
39
- */
40
- export declare function getCompletions(program: Command, words: string[], current: string): CompletionItem[];
41
- //# sourceMappingURL=completion.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"completion.d.ts","sourceRoot":"","sources":["../../src/lib/completion.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAA;AAEhD;;;;;;;;;GASG;AACH,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,CAG5E;AAED,wBAAgB,0BAA0B,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,CAUhF;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,CAIxD;AAED,MAAM,WAAW,cAAc;IAC3B,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,CAAC,EAAE,MAAM,CAAA;CACvB;AAoBD;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAC1B,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,MAAM,EAAE,EACf,OAAO,EAAE,MAAM,GAChB,cAAc,EAAE,CA6GlB"}
@@ -1,191 +0,0 @@
1
- /**
2
- * Set argChoices on an option without enabling Commander's built-in
3
- * validation. The choices are surfaced for shell completions but the
4
- * option still accepts any value at parse time.
5
- *
6
- * Useful when the option accepts values beyond the choices list
7
- * (e.g. comma-separated roles, boolean synonyms like true/false/yes/no/1/0).
8
- *
9
- * This sets Commander's internal `argChoices` property directly.
10
- */
11
- export function withUnvalidatedChoices(opt, values) {
12
- opt.argChoices = values;
13
- return opt;
14
- }
15
- export function withCaseInsensitiveChoices(opt, values) {
16
- opt.choices(values);
17
- // choices() sets parseArg internally — assert so we catch if a future
18
- // Commander version changes this, rather than silently losing case-insensitivity.
19
- const original = opt.parseArg;
20
- if (!original) {
21
- throw new Error('Expected Commander choices() to set parseArg');
22
- }
23
- opt.parseArg = (arg, prev) => original(arg.toLowerCase(), prev);
24
- return opt;
25
- }
26
- /**
27
- * Parse COMP_LINE into words, stripping the binary name and the
28
- * 'completion-server' token that tabtab injects.
29
- *
30
- * FIXME: This splits on whitespace and does not handle quoted arguments.
31
- * A value like `"Buy milk tomorrow"` would be split into three words.
32
- * In practice this is fine because we only walk command/option names,
33
- * and shells provide the already-split COMP_WORDS separately. If a
34
- * positional arg value happens to match a subcommand name, the tree
35
- * walker could descend incorrectly (see tests under "parseCompLine
36
- * quoted argument limitation"). This can be fixed once tabtab exposes
37
- * the shell-provided words: https://github.com/pnpm/tabtab/issues/35
38
- */
39
- export function parseCompLine(compLine) {
40
- const words = compLine.split(/\s+/).slice(1); // remove binary name (td)
41
- if (words[0] === 'completion-server')
42
- words.shift();
43
- return words;
44
- }
45
- /** Names to exclude from completion results (internal commands) */
46
- const HIDDEN_COMMAND_NAMES = new Set(['completion-server']);
47
- /**
48
- * Check if a Commander Option expects a value argument (not a boolean flag).
49
- */
50
- function optionExpectsValue(opt) {
51
- // required means <value>, optional means [value] — both expect a value
52
- return opt.required || opt.optional;
53
- }
54
- /**
55
- * Find an option by its long or short flag in a command.
56
- */
57
- function findOption(cmd, flag) {
58
- return cmd.options.find((o) => o.long === flag || o.short === flag);
59
- }
60
- /**
61
- * Get completions for the current command line context.
62
- *
63
- * @param program - The root Commander program with all commands registered
64
- * @param words - The words on the command line (excluding the binary name)
65
- * @param current - The current word being typed (may be empty string)
66
- * @returns Array of completion items
67
- */
68
- export function getCompletions(program, words, current) {
69
- let activeCmd = program;
70
- let seenDoubleDash = false;
71
- const usedOptions = new Set();
72
- // Walk the words to find the active command context
73
- let i = 0;
74
- while (i < words.length) {
75
- const word = words[i];
76
- // If we hit the current word (last position), stop walking
77
- if (i === words.length - 1 && word === current) {
78
- break;
79
- }
80
- if (word === '--') {
81
- seenDoubleDash = true;
82
- i++;
83
- continue;
84
- }
85
- if (!seenDoubleDash && word.startsWith('-')) {
86
- // Handle --flag=value syntax
87
- const eqIdx = word.indexOf('=');
88
- const flag = eqIdx > 0 ? word.slice(0, eqIdx) : word;
89
- usedOptions.add(flag);
90
- // If this option expects a value and no = was used, consume the next word
91
- if (eqIdx < 0) {
92
- const opt = findOption(activeCmd, flag);
93
- if (opt && optionExpectsValue(opt)) {
94
- i++; // skip the value word
95
- }
96
- }
97
- i++;
98
- continue;
99
- }
100
- // Try to descend into a subcommand
101
- const sub = activeCmd.commands.find((c) => c.name() === word || c.aliases().includes(word));
102
- if (sub) {
103
- activeCmd = sub;
104
- usedOptions.clear();
105
- }
106
- // Otherwise it's a positional argument — don't descend, just skip
107
- i++;
108
- }
109
- // Now determine what to complete based on context
110
- // Check if the previous word was an option that expects a value
111
- if (words.length >= 2) {
112
- const prevWord = words[words.length - 2];
113
- if (prevWord && !prevWord.startsWith('-')) {
114
- // prev is not an option, skip
115
- }
116
- else if (prevWord && prevWord !== '--') {
117
- const eqIdx = prevWord.indexOf('=');
118
- const flag = eqIdx > 0 ? prevWord.slice(0, eqIdx) : prevWord;
119
- const opt = findOption(activeCmd, flag);
120
- if (opt && optionExpectsValue(opt) && eqIdx < 0) {
121
- // Previous word is an option expecting a value — suggest enum values
122
- const enumValues = opt.argChoices;
123
- if (enumValues) {
124
- return enumValues.filter((v) => v.startsWith(current)).map((v) => ({ name: v }));
125
- }
126
- // No known enum values — return empty (let shell do default completion)
127
- return [];
128
- }
129
- }
130
- }
131
- // Handle --flag=<TAB> — suggest values after =
132
- if (current.includes('=')) {
133
- const eqIdx = current.indexOf('=');
134
- const flag = current.slice(0, eqIdx);
135
- const partial = current.slice(eqIdx + 1);
136
- const opt = findOption(activeCmd, flag);
137
- if (opt) {
138
- const enumValues = opt.argChoices;
139
- if (enumValues) {
140
- return enumValues
141
- .filter((v) => v.startsWith(partial))
142
- .map((v) => ({ name: `${flag}=${v}` }));
143
- }
144
- }
145
- return [];
146
- }
147
- // After --, everything is positional — no more commands or options
148
- if (seenDoubleDash) {
149
- return [];
150
- }
151
- // If current word starts with -, suggest options
152
- if (current.startsWith('-')) {
153
- return getOptionCompletions(activeCmd, current, usedOptions);
154
- }
155
- // Suggest subcommands, and if there are none, suggest options instead
156
- const subcommands = getSubcommandCompletions(activeCmd, current);
157
- if (subcommands.length > 0) {
158
- return subcommands;
159
- }
160
- return getOptionCompletions(activeCmd, current, usedOptions);
161
- }
162
- function getSubcommandCompletions(cmd, prefix) {
163
- return cmd.commands
164
- .filter((c) => !c._hidden &&
165
- !HIDDEN_COMMAND_NAMES.has(c.name()))
166
- .filter((c) => c.name().startsWith(prefix))
167
- .map((c) => ({
168
- name: c.name(),
169
- description: c.description(),
170
- }));
171
- }
172
- function getOptionCompletions(cmd, prefix, usedOptions) {
173
- return cmd.options
174
- .filter((o) => {
175
- if (!o.long)
176
- return false;
177
- if (o.hidden)
178
- return false;
179
- // Exclude already-used options
180
- if (usedOptions.has(o.long))
181
- return false;
182
- if (o.short && usedOptions.has(o.short))
183
- return false;
184
- return o.long.startsWith(prefix);
185
- })
186
- .map((o) => ({
187
- name: o.long,
188
- description: o.description,
189
- }));
190
- }
191
- //# sourceMappingURL=completion.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"completion.js","sourceRoot":"","sources":["../../src/lib/completion.ts"],"names":[],"mappings":"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"}
@@ -1,16 +0,0 @@
1
- export declare function getLocalDate(daysOffset?: number): string;
2
- /**
3
- * Parse a due date string (handles both date-only and datetime formats)
4
- * and return a Date object set to start of day for date comparison
5
- */
6
- export declare function parseDueDateToDay(dateStr: string): Date;
7
- /**
8
- * Check if a due date is on a specific day
9
- */
10
- export declare function isDueOnDate(dueDate: string, targetDate: string): boolean;
11
- /**
12
- * Check if a due date is before a specific day
13
- */
14
- export declare function isDueBefore(dueDate: string, targetDate: string): boolean;
15
- export declare function formatDateHeader(dateStr: string, today: string): string;
16
- //# sourceMappingURL=dates.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"dates.d.ts","sourceRoot":"","sources":["../../src/lib/dates.ts"],"names":[],"mappings":"AAIA,wBAAgB,YAAY,CAAC,UAAU,SAAI,GAAG,MAAM,CAInD;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAGvD;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAExE;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAExE;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAYvE"}
package/dist/lib/dates.js DELETED
@@ -1,45 +0,0 @@
1
- import { isBefore } from 'date-fns/isBefore';
2
- import { isEqual } from 'date-fns/isEqual';
3
- import { parseISO } from 'date-fns/parseISO';
4
- export function getLocalDate(daysOffset = 0) {
5
- const date = new Date();
6
- date.setDate(date.getDate() + daysOffset);
7
- return `${date.getFullYear()}-${String(date.getMonth() + 1).padStart(2, '0')}-${String(date.getDate()).padStart(2, '0')}`;
8
- }
9
- /**
10
- * Parse a due date string (handles both date-only and datetime formats)
11
- * and return a Date object set to start of day for date comparison
12
- */
13
- export function parseDueDateToDay(dateStr) {
14
- const parsed = parseISO(dateStr);
15
- return new Date(Date.UTC(parsed.getFullYear(), parsed.getMonth(), parsed.getDate()));
16
- }
17
- /**
18
- * Check if a due date is on a specific day
19
- */
20
- export function isDueOnDate(dueDate, targetDate) {
21
- return isEqual(parseDueDateToDay(dueDate), parseDueDateToDay(targetDate));
22
- }
23
- /**
24
- * Check if a due date is before a specific day
25
- */
26
- export function isDueBefore(dueDate, targetDate) {
27
- return isBefore(parseDueDateToDay(dueDate), parseDueDateToDay(targetDate));
28
- }
29
- export function formatDateHeader(dateStr, today) {
30
- if (isDueBefore(dateStr, today))
31
- return 'Overdue';
32
- if (isDueOnDate(dateStr, today))
33
- return 'Today';
34
- const tomorrow = getLocalDate(1);
35
- if (isDueOnDate(dateStr, tomorrow))
36
- return 'Tomorrow';
37
- // Extract just the date part (YYYY-MM-DD) in case dateStr contains a time
38
- const dateOnly = dateStr.split('T')[0];
39
- const [year, month, day] = dateOnly.split('-').map(Number);
40
- return new Date(year, month - 1, day).toLocaleDateString('en-US', {
41
- month: 'short',
42
- day: 'numeric',
43
- });
44
- }
45
- //# sourceMappingURL=dates.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"dates.js","sourceRoot":"","sources":["../../src/lib/dates.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAA;AAC1C,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAE5C,MAAM,UAAU,YAAY,CAAC,UAAU,GAAG,CAAC;IACvC,MAAM,IAAI,GAAG,IAAI,IAAI,EAAE,CAAA;IACvB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,UAAU,CAAC,CAAA;IACzC,OAAO,GAAG,IAAI,CAAC,WAAW,EAAE,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAA;AAC7H,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAAC,OAAe;IAC7C,MAAM,MAAM,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAA;IAChC,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,WAAW,EAAE,EAAE,MAAM,CAAC,QAAQ,EAAE,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,CAAA;AACxF,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,WAAW,CAAC,OAAe,EAAE,UAAkB;IAC3D,OAAO,OAAO,CAAC,iBAAiB,CAAC,OAAO,CAAC,EAAE,iBAAiB,CAAC,UAAU,CAAC,CAAC,CAAA;AAC7E,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,WAAW,CAAC,OAAe,EAAE,UAAkB;IAC3D,OAAO,QAAQ,CAAC,iBAAiB,CAAC,OAAO,CAAC,EAAE,iBAAiB,CAAC,UAAU,CAAC,CAAC,CAAA;AAC9E,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,OAAe,EAAE,KAAa;IAC3D,IAAI,WAAW,CAAC,OAAO,EAAE,KAAK,CAAC;QAAE,OAAO,SAAS,CAAA;IACjD,IAAI,WAAW,CAAC,OAAO,EAAE,KAAK,CAAC;QAAE,OAAO,OAAO,CAAA;IAC/C,MAAM,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC,CAAA;IAChC,IAAI,WAAW,CAAC,OAAO,EAAE,QAAQ,CAAC;QAAE,OAAO,UAAU,CAAA;IACrD,0EAA0E;IAC1E,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;IACtC,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;IAC1D,OAAO,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,kBAAkB,CAAC,OAAO,EAAE;QAC9D,KAAK,EAAE,OAAO;QACd,GAAG,EAAE,SAAS;KACjB,CAAC,CAAA;AACN,CAAC"}
@@ -1,14 +0,0 @@
1
- /**
2
- * Parse a duration string into minutes.
3
- * Supports formats like: "1h", "30m", "2h15m", "1 hour 30 minutes"
4
- * @returns minutes or null if invalid
5
- */
6
- export declare function parseDuration(input: string): number | null;
7
- /**
8
- * Format a duration for display.
9
- * @param amount - the duration amount
10
- * @param unit - 'minute' or 'day'
11
- * @returns formatted string like "1h30m" or "2d"
12
- */
13
- export declare function formatDuration(amount: number, unit?: 'minute' | 'day'): string;
14
- //# sourceMappingURL=duration.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"duration.d.ts","sourceRoot":"","sources":["../../src/lib/duration.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAiC1D;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,GAAE,QAAQ,GAAG,KAAgB,GAAG,MAAM,CAaxF"}
@@ -1,58 +0,0 @@
1
- /**
2
- * Parse a duration string into minutes.
3
- * Supports formats like: "1h", "30m", "2h15m", "1 hour 30 minutes"
4
- * @returns minutes or null if invalid
5
- */
6
- export function parseDuration(input) {
7
- const normalized = input.trim().toLowerCase();
8
- if (!normalized)
9
- return null;
10
- // Match all occurrences of number + unit
11
- // Units: h, hr, hrs, hour, hours, m, min, mins, minute, minutes
12
- const pattern = /(\d+)\s*(hours?|hrs?|h|minutes?|mins?|m)(?=\s|$|\d)/gi;
13
- const matches = [...normalized.matchAll(pattern)];
14
- if (matches.length === 0)
15
- return null;
16
- // Verify the entire input is consumed by valid duration parts
17
- // Remove all matched parts and whitespace, should be empty
18
- let remaining = normalized;
19
- for (const match of matches) {
20
- remaining = remaining.replace(match[0], '');
21
- }
22
- remaining = remaining.replace(/\s+/g, '');
23
- if (remaining !== '')
24
- return null;
25
- let totalMinutes = 0;
26
- for (const match of matches) {
27
- const value = parseInt(match[1], 10);
28
- const unit = match[2].toLowerCase();
29
- if (unit.startsWith('h')) {
30
- totalMinutes += value * 60;
31
- }
32
- else if (unit.startsWith('m')) {
33
- totalMinutes += value;
34
- }
35
- }
36
- return totalMinutes;
37
- }
38
- /**
39
- * Format a duration for display.
40
- * @param amount - the duration amount
41
- * @param unit - 'minute' or 'day'
42
- * @returns formatted string like "1h30m" or "2d"
43
- */
44
- export function formatDuration(amount, unit = 'minute') {
45
- const totalMinutes = unit === 'day' ? amount * 1440 : amount;
46
- const days = Math.floor(totalMinutes / 1440);
47
- const hours = Math.floor((totalMinutes % 1440) / 60);
48
- const minutes = totalMinutes % 60;
49
- const parts = [];
50
- if (days > 0)
51
- parts.push(`${days}d`);
52
- if (hours > 0)
53
- parts.push(`${hours}h`);
54
- if (minutes > 0)
55
- parts.push(`${minutes}m`);
56
- return parts.length > 0 ? parts.join('') : '0m';
57
- }
58
- //# sourceMappingURL=duration.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"duration.js","sourceRoot":"","sources":["../../src/lib/duration.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,UAAU,aAAa,CAAC,KAAa;IACvC,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAA;IAC7C,IAAI,CAAC,UAAU;QAAE,OAAO,IAAI,CAAA;IAE5B,yCAAyC;IACzC,gEAAgE;IAChE,MAAM,OAAO,GAAG,uDAAuD,CAAA;IACvE,MAAM,OAAO,GAAG,CAAC,GAAG,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAA;IAEjD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAA;IAErC,8DAA8D;IAC9D,2DAA2D;IAC3D,IAAI,SAAS,GAAG,UAAU,CAAA;IAC1B,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC1B,SAAS,GAAG,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;IAC/C,CAAC;IACD,SAAS,GAAG,SAAS,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAA;IACzC,IAAI,SAAS,KAAK,EAAE;QAAE,OAAO,IAAI,CAAA;IAEjC,IAAI,YAAY,GAAG,CAAC,CAAA;IACpB,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC1B,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;QACpC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAA;QAEnC,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACvB,YAAY,IAAI,KAAK,GAAG,EAAE,CAAA;QAC9B,CAAC;aAAM,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YAC9B,YAAY,IAAI,KAAK,CAAA;QACzB,CAAC;IACL,CAAC;IAED,OAAO,YAAY,CAAA;AACvB,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,cAAc,CAAC,MAAc,EAAE,OAAyB,QAAQ;IAC5E,MAAM,YAAY,GAAG,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,MAAM,CAAA;IAE5D,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC,CAAA;IAC5C,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,YAAY,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,CAAA;IACpD,MAAM,OAAO,GAAG,YAAY,GAAG,EAAE,CAAA;IAEjC,MAAM,KAAK,GAAa,EAAE,CAAA;IAC1B,IAAI,IAAI,GAAG,CAAC;QAAE,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,CAAA;IACpC,IAAI,KAAK,GAAG,CAAC;QAAE,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,GAAG,CAAC,CAAA;IACtC,IAAI,OAAO,GAAG,CAAC;QAAE,KAAK,CAAC,IAAI,CAAC,GAAG,OAAO,GAAG,CAAC,CAAA;IAE1C,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;AACnD,CAAC"}
@@ -1,42 +0,0 @@
1
- /**
2
- * Verbose logging module for debugging API latency and CLI behavior.
3
- *
4
- * Verbosity levels (stackable -v flags):
5
- * -v (1) INFO : commands invoked, API endpoints hit, response status + total timing
6
- * -vv (2) DETAIL : request parameters, response metadata, pagination progress
7
- * -vvv (3) DEBUG : reference resolution steps, HTTP headers, rate-limit info
8
- * -vvvv (4) TRACE : full request/response headers, body sizes, connection details
9
- *
10
- * All output goes to stderr with prefixed tags so it never pollutes stdout data.
11
- * Can also be activated via TD_VERBOSE=1..4 environment variable.
12
- */
13
- export declare const Verbosity: {
14
- readonly SILENT: 0;
15
- readonly INFO: 1;
16
- readonly DETAIL: 2;
17
- readonly DEBUG: 3;
18
- readonly TRACE: 4;
19
- };
20
- export type Verbosity = (typeof Verbosity)[keyof typeof Verbosity];
21
- declare class Logger {
22
- private level;
23
- /** Set verbosity from parsed CLI flags or environment. */
24
- initialize(): void;
25
- getLevel(): Verbosity;
26
- isEnabled(level?: Verbosity): boolean;
27
- /** Core log method. Only emits if current verbosity >= requested level. */
28
- log(level: Verbosity, message: string, data?: Record<string, unknown>): void;
29
- /** Level-specific convenience methods. */
30
- info(message: string, data?: Record<string, unknown>): void;
31
- detail(message: string, data?: Record<string, unknown>): void;
32
- debug(message: string, data?: Record<string, unknown>): void;
33
- trace(message: string, data?: Record<string, unknown>): void;
34
- /** Log timing of an async operation. Returns the operation result. */
35
- timed<T>(level: Verbosity, label: string, operation: () => Promise<T>, extraData?: Record<string, unknown>): Promise<T>;
36
- }
37
- export declare function getLogger(): Logger;
38
- export declare function initializeLogger(): void;
39
- /** Reset for testing. */
40
- export declare function resetLogger(): void;
41
- export {};
42
- //# sourceMappingURL=logger.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/lib/logger.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,eAAO,MAAM,SAAS;;;;;;CAMZ,CAAA;AAEV,MAAM,MAAM,SAAS,GAAG,CAAC,OAAO,SAAS,CAAC,CAAC,MAAM,OAAO,SAAS,CAAC,CAAA;AASlE,cAAM,MAAM;IACR,OAAO,CAAC,KAAK,CAA8B;IAE3C,0DAA0D;IAC1D,UAAU,IAAI,IAAI;IAgClB,QAAQ,IAAI,SAAS;IAIrB,SAAS,CAAC,KAAK,GAAE,SAA0B,GAAG,OAAO;IAIrD,2EAA2E;IAC3E,GAAG,CAAC,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAqB5E,0CAA0C;IAC1C,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAI3D,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAI7D,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAI5D,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAI5D,sEAAsE;IAChE,KAAK,CAAC,CAAC,EACT,KAAK,EAAE,SAAS,EAChB,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EAC3B,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACpC,OAAO,CAAC,CAAC,CAAC;CA0BhB;AAKD,wBAAgB,SAAS,IAAI,MAAM,CAKlC;AAED,wBAAgB,gBAAgB,IAAI,IAAI,CAUvC;AA+FD,yBAAyB;AACzB,wBAAgB,WAAW,IAAI,IAAI,CAElC"}