@doist/todoist-cli 1.11.0 → 1.12.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/commands/comment.js +8 -8
- package/dist/commands/comment.js.map +1 -1
- package/dist/commands/label.d.ts.map +1 -1
- package/dist/commands/label.js +15 -46
- package/dist/commands/label.js.map +1 -1
- package/dist/commands/notification.js +3 -3
- package/dist/commands/notification.js.map +1 -1
- package/dist/commands/project.js +3 -3
- package/dist/commands/project.js.map +1 -1
- package/dist/commands/reminder.d.ts.map +1 -1
- package/dist/commands/reminder.js +15 -5
- package/dist/commands/reminder.js.map +1 -1
- package/dist/commands/section.d.ts.map +1 -1
- package/dist/commands/section.js +10 -5
- package/dist/commands/section.js.map +1 -1
- package/dist/commands/task.d.ts.map +1 -1
- package/dist/commands/task.js +17 -7
- package/dist/commands/task.js.map +1 -1
- package/dist/commands/workspace.d.ts.map +1 -1
- package/dist/commands/workspace.js +15 -5
- package/dist/commands/workspace.js.map +1 -1
- package/dist/index.js +109 -40
- package/dist/index.js.map +1 -1
- package/dist/lib/api/core.d.ts.map +1 -1
- package/dist/lib/api/core.js +1 -0
- package/dist/lib/api/core.js.map +1 -1
- package/dist/lib/logger.d.ts +42 -0
- package/dist/lib/logger.d.ts.map +1 -0
- package/dist/lib/logger.js +227 -0
- package/dist/lib/logger.js.map +1 -0
- package/dist/lib/markdown.d.ts.map +1 -1
- package/dist/lib/markdown.js +6 -2
- package/dist/lib/markdown.js.map +1 -1
- package/dist/lib/refs.d.ts +1 -1
- package/dist/lib/refs.d.ts.map +1 -1
- package/dist/lib/refs.js +39 -23
- package/dist/lib/refs.js.map +1 -1
- package/dist/lib/skills/content.d.ts +1 -1
- package/dist/lib/skills/content.d.ts.map +1 -1
- package/dist/lib/skills/content.js +8 -6
- package/dist/lib/skills/content.js.map +1 -1
- package/dist/lib/spinner.d.ts +4 -1
- package/dist/lib/spinner.d.ts.map +1 -1
- package/dist/lib/spinner.js +85 -17
- package/dist/lib/spinner.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,227 @@
|
|
|
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 const Verbosity = {
|
|
14
|
+
SILENT: 0,
|
|
15
|
+
INFO: 1,
|
|
16
|
+
DETAIL: 2,
|
|
17
|
+
DEBUG: 3,
|
|
18
|
+
TRACE: 4,
|
|
19
|
+
};
|
|
20
|
+
const LEVEL_TAG = {
|
|
21
|
+
[Verbosity.INFO]: 'info',
|
|
22
|
+
[Verbosity.DETAIL]: 'detail',
|
|
23
|
+
[Verbosity.DEBUG]: 'debug',
|
|
24
|
+
[Verbosity.TRACE]: 'trace',
|
|
25
|
+
};
|
|
26
|
+
class Logger {
|
|
27
|
+
level = Verbosity.SILENT;
|
|
28
|
+
/** Set verbosity from parsed CLI flags or environment. */
|
|
29
|
+
initialize() {
|
|
30
|
+
// Environment variable takes precedence if set
|
|
31
|
+
const envLevel = process.env.TD_VERBOSE;
|
|
32
|
+
if (envLevel) {
|
|
33
|
+
const parsed = parseInt(envLevel, 10);
|
|
34
|
+
if (parsed >= Verbosity.INFO && parsed <= Verbosity.TRACE) {
|
|
35
|
+
this.level = parsed;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
// Count -v flags in argv (supports -v, -vv, -vvv, -vvvv, and repeated --verbose)
|
|
39
|
+
const args = process.argv.slice(2);
|
|
40
|
+
let cliLevel = 0;
|
|
41
|
+
for (const arg of args) {
|
|
42
|
+
if (arg === '--verbose') {
|
|
43
|
+
cliLevel += 1;
|
|
44
|
+
}
|
|
45
|
+
else if (/^-v+$/.test(arg)) {
|
|
46
|
+
// -v = 1, -vv = 2, -vvv = 3, -vvvv = 4
|
|
47
|
+
cliLevel += arg.length - 1;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
// CLI flags override env var if higher
|
|
51
|
+
if (cliLevel > 0) {
|
|
52
|
+
this.level = Math.min(cliLevel, Verbosity.TRACE);
|
|
53
|
+
}
|
|
54
|
+
if (this.level >= Verbosity.INFO) {
|
|
55
|
+
this.log(Verbosity.INFO, `verbose logging enabled (level=${this.level})`);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
getLevel() {
|
|
59
|
+
return this.level;
|
|
60
|
+
}
|
|
61
|
+
isEnabled(level = Verbosity.INFO) {
|
|
62
|
+
return this.level >= level;
|
|
63
|
+
}
|
|
64
|
+
/** Core log method. Only emits if current verbosity >= requested level. */
|
|
65
|
+
log(level, message, data) {
|
|
66
|
+
if (this.level < level)
|
|
67
|
+
return;
|
|
68
|
+
const tag = LEVEL_TAG[level] ?? 'log';
|
|
69
|
+
const ts = new Date().toISOString();
|
|
70
|
+
let line = `[td:${tag}] ${ts} ${message}`;
|
|
71
|
+
if (data && Object.keys(data).length > 0) {
|
|
72
|
+
const parts = [];
|
|
73
|
+
for (const [key, value] of Object.entries(data)) {
|
|
74
|
+
if (value === undefined || value === null)
|
|
75
|
+
continue;
|
|
76
|
+
parts.push(`${key}=${typeof value === 'object' ? JSON.stringify(value) : value}`);
|
|
77
|
+
}
|
|
78
|
+
if (parts.length > 0) {
|
|
79
|
+
line += ` | ${parts.join(' ')}`;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
process.stderr.write(`${line}\n`);
|
|
83
|
+
}
|
|
84
|
+
/** Level-specific convenience methods. */
|
|
85
|
+
info(message, data) {
|
|
86
|
+
this.log(Verbosity.INFO, message, data);
|
|
87
|
+
}
|
|
88
|
+
detail(message, data) {
|
|
89
|
+
this.log(Verbosity.DETAIL, message, data);
|
|
90
|
+
}
|
|
91
|
+
debug(message, data) {
|
|
92
|
+
this.log(Verbosity.DEBUG, message, data);
|
|
93
|
+
}
|
|
94
|
+
trace(message, data) {
|
|
95
|
+
this.log(Verbosity.TRACE, message, data);
|
|
96
|
+
}
|
|
97
|
+
/** Log timing of an async operation. Returns the operation result. */
|
|
98
|
+
async timed(level, label, operation, extraData) {
|
|
99
|
+
if (this.level < level) {
|
|
100
|
+
return operation();
|
|
101
|
+
}
|
|
102
|
+
const start = performance.now();
|
|
103
|
+
this.log(level, `${label} ...started`, extraData);
|
|
104
|
+
try {
|
|
105
|
+
const result = await operation();
|
|
106
|
+
const durationMs = performance.now() - start;
|
|
107
|
+
this.log(level, `${label} ...done`, {
|
|
108
|
+
...extraData,
|
|
109
|
+
duration_ms: Math.round(durationMs),
|
|
110
|
+
});
|
|
111
|
+
return result;
|
|
112
|
+
}
|
|
113
|
+
catch (error) {
|
|
114
|
+
const durationMs = performance.now() - start;
|
|
115
|
+
this.log(level, `${label} ...FAILED`, {
|
|
116
|
+
...extraData,
|
|
117
|
+
duration_ms: Math.round(durationMs),
|
|
118
|
+
error: error instanceof Error ? error.message : String(error),
|
|
119
|
+
});
|
|
120
|
+
throw error;
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
// Global singleton
|
|
125
|
+
let logger = null;
|
|
126
|
+
export function getLogger() {
|
|
127
|
+
if (!logger) {
|
|
128
|
+
logger = new Logger();
|
|
129
|
+
}
|
|
130
|
+
return logger;
|
|
131
|
+
}
|
|
132
|
+
export function initializeLogger() {
|
|
133
|
+
const log = getLogger();
|
|
134
|
+
log.initialize();
|
|
135
|
+
// When verbose, patch globalThis.fetch so SDK-internal HTTP calls are also logged.
|
|
136
|
+
// This is the only way to get HTTP-level visibility for @doist/todoist-api-typescript
|
|
137
|
+
// since it uses fetch() internally and doesn't expose hooks.
|
|
138
|
+
if (log.isEnabled()) {
|
|
139
|
+
patchGlobalFetch();
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
/** Save original fetch and replace with logging wrapper. */
|
|
143
|
+
function patchGlobalFetch() {
|
|
144
|
+
const originalFetch = globalThis.fetch;
|
|
145
|
+
globalThis.fetch = async (input, init) => {
|
|
146
|
+
const log = getLogger();
|
|
147
|
+
const urlStr = typeof input === 'string' ? input : input instanceof URL ? input.toString() : input.url;
|
|
148
|
+
const method = init?.method ?? (typeof input === 'object' && 'method' in input ? input.method : 'GET');
|
|
149
|
+
const urlObj = new URL(urlStr);
|
|
150
|
+
log.info(`fetch ${method} ${urlObj.pathname}`);
|
|
151
|
+
log.detail(`fetch ${method} ${urlStr}`);
|
|
152
|
+
// Log request body size at DETAIL
|
|
153
|
+
if (init?.body) {
|
|
154
|
+
const bodyStr = typeof init.body === 'string'
|
|
155
|
+
? init.body
|
|
156
|
+
: init.body instanceof URLSearchParams
|
|
157
|
+
? init.body.toString()
|
|
158
|
+
: null;
|
|
159
|
+
if (bodyStr) {
|
|
160
|
+
log.detail('request body', { size_bytes: bodyStr.length });
|
|
161
|
+
if (init.body instanceof URLSearchParams) {
|
|
162
|
+
log.trace('request body keys', { keys: Array.from(init.body.keys()) });
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
// Log request headers at TRACE (redact Authorization)
|
|
167
|
+
if (log.isEnabled(Verbosity.TRACE) && init?.headers) {
|
|
168
|
+
const hdrs = {};
|
|
169
|
+
if (init.headers instanceof Headers) {
|
|
170
|
+
init.headers.forEach((v, k) => {
|
|
171
|
+
hdrs[k] = k.toLowerCase() === 'authorization' ? '[REDACTED]' : v;
|
|
172
|
+
});
|
|
173
|
+
}
|
|
174
|
+
else if (typeof init.headers === 'object') {
|
|
175
|
+
for (const [k, v] of Object.entries(init.headers)) {
|
|
176
|
+
hdrs[k] = k.toLowerCase() === 'authorization' ? '[REDACTED]' : String(v);
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
log.trace('request headers', hdrs);
|
|
180
|
+
}
|
|
181
|
+
const startTime = performance.now();
|
|
182
|
+
const response = await originalFetch(input, init);
|
|
183
|
+
const durationMs = Math.round(performance.now() - startTime);
|
|
184
|
+
// INFO: status + timing
|
|
185
|
+
log.info(`fetch ${method} ${urlObj.pathname} => ${response.status}`, {
|
|
186
|
+
duration_ms: durationMs,
|
|
187
|
+
});
|
|
188
|
+
// DETAIL: content-length
|
|
189
|
+
const contentLength = response.headers.get('content-length');
|
|
190
|
+
if (contentLength) {
|
|
191
|
+
log.detail('response', { content_length: contentLength });
|
|
192
|
+
}
|
|
193
|
+
// DEBUG: rate-limit and diagnostic headers
|
|
194
|
+
const diagHeaders = {};
|
|
195
|
+
for (const name of [
|
|
196
|
+
'x-request-id',
|
|
197
|
+
'x-ratelimit-limit',
|
|
198
|
+
'x-ratelimit-remaining',
|
|
199
|
+
'x-ratelimit-reset',
|
|
200
|
+
'retry-after',
|
|
201
|
+
'cf-ray',
|
|
202
|
+
]) {
|
|
203
|
+
const val = response.headers.get(name);
|
|
204
|
+
if (val)
|
|
205
|
+
diagHeaders[name] = val;
|
|
206
|
+
}
|
|
207
|
+
if (Object.keys(diagHeaders).length > 0) {
|
|
208
|
+
log.debug('response headers', diagHeaders);
|
|
209
|
+
}
|
|
210
|
+
// TRACE: all response headers
|
|
211
|
+
if (log.isEnabled(Verbosity.TRACE)) {
|
|
212
|
+
const allHeaders = {};
|
|
213
|
+
response.headers.forEach((value, name) => {
|
|
214
|
+
if (!name.toLowerCase().includes('set-cookie')) {
|
|
215
|
+
allHeaders[name] = value;
|
|
216
|
+
}
|
|
217
|
+
});
|
|
218
|
+
log.trace('all response headers', allHeaders);
|
|
219
|
+
}
|
|
220
|
+
return response;
|
|
221
|
+
};
|
|
222
|
+
}
|
|
223
|
+
/** Reset for testing. */
|
|
224
|
+
export function resetLogger() {
|
|
225
|
+
logger = null;
|
|
226
|
+
}
|
|
227
|
+
//# sourceMappingURL=logger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/lib/logger.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"markdown.d.ts","sourceRoot":"","sources":["../../src/lib/markdown.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"markdown.d.ts","sourceRoot":"","sources":["../../src/lib/markdown.ts"],"names":[],"mappings":"AAKA,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAanD"}
|
package/dist/lib/markdown.js
CHANGED
|
@@ -1,8 +1,12 @@
|
|
|
1
1
|
import { marked } from 'marked';
|
|
2
2
|
import { markedTerminal } from 'marked-terminal';
|
|
3
|
-
|
|
4
|
-
marked.use(markedTerminal());
|
|
3
|
+
let initialized = false;
|
|
5
4
|
export function renderMarkdown(text) {
|
|
5
|
+
if (!initialized) {
|
|
6
|
+
// Types are outdated - markedTerminal returns MarkedExtension at runtime
|
|
7
|
+
marked.use(markedTerminal());
|
|
8
|
+
initialized = true;
|
|
9
|
+
}
|
|
6
10
|
// Handle uncompletable task prefix: escape leading "* " so it's not a bullet
|
|
7
11
|
const escaped = text.startsWith('* ') ? `\\* ${text.slice(2)}` : text;
|
|
8
12
|
const rendered = marked.parse(escaped);
|
package/dist/lib/markdown.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"markdown.js","sourceRoot":"","sources":["../../src/lib/markdown.ts"],"names":[],"mappings":"AAAA,OAAO,EAAwB,MAAM,EAAE,MAAM,QAAQ,CAAA;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAA;AAEhD,yEAAyE;
|
|
1
|
+
{"version":3,"file":"markdown.js","sourceRoot":"","sources":["../../src/lib/markdown.ts"],"names":[],"mappings":"AAAA,OAAO,EAAwB,MAAM,EAAE,MAAM,QAAQ,CAAA;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAA;AAEhD,IAAI,WAAW,GAAG,KAAK,CAAA;AAEvB,MAAM,UAAU,cAAc,CAAC,IAAY;IACvC,IAAI,CAAC,WAAW,EAAE,CAAC;QACf,yEAAyE;QACzE,MAAM,CAAC,GAAG,CAAC,cAAc,EAAgC,CAAC,CAAA;QAC1D,WAAW,GAAG,IAAI,CAAA;IACtB,CAAC;IACD,6EAA6E;IAC7E,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAA;IACrE,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;IACtC,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAC/B,OAAO,IAAI,CAAA;IACf,CAAC;IACD,OAAO,QAAQ,CAAC,OAAO,EAAE,CAAA;AAC7B,CAAC"}
|
package/dist/lib/refs.d.ts
CHANGED
|
@@ -4,7 +4,7 @@ import { type Workspace } from './api/workspaces.js';
|
|
|
4
4
|
export declare function isIdRef(ref: string): boolean;
|
|
5
5
|
export declare function extractId(ref: string): string;
|
|
6
6
|
export declare function looksLikeRawId(ref: string): boolean;
|
|
7
|
-
export declare function
|
|
7
|
+
export declare function lenientIdRef(ref: string, entityName: string): string;
|
|
8
8
|
export declare function resolveTaskRef(api: TodoistApi, ref: string): Promise<Task>;
|
|
9
9
|
export declare function resolveProjectRef(api: TodoistApi, ref: string): Promise<Project>;
|
|
10
10
|
export declare function resolveProjectId(api: TodoistApi, ref: string): Promise<string>;
|
package/dist/lib/refs.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"refs.d.ts","sourceRoot":"","sources":["../../src/lib/refs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,
|
|
1
|
+
{"version":3,"file":"refs.d.ts","sourceRoot":"","sources":["../../src/lib/refs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAuB,MAAM,+BAA+B,CAAA;AAC/E,OAAO,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAA;AAClD,OAAO,EAAmB,KAAK,SAAS,EAAE,MAAM,qBAAqB,CAAA;AAIrE,wBAAgB,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAE5C;AAED,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAE7C;AAED,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAGnD;AAED,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAQpE;AAkED,wBAAsB,cAAc,CAAC,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAiBhF;AAED,wBAAsB,iBAAiB,CAAC,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAQtF;AAED,wBAAsB,gBAAgB,CAAC,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAGpF;AAED,wBAAsB,gBAAgB,CAClC,GAAG,EAAE,UAAU,EACf,GAAG,EAAE,MAAM,EACX,SAAS,EAAE,MAAM,GAClB,OAAO,CAAC,MAAM,CAAC,CAuCjB;AAED,wBAAsB,mBAAmB,CACrC,GAAG,EAAE,UAAU,EACf,GAAG,EAAE,MAAM,EACX,SAAS,EAAE,MAAM,EACjB,SAAS,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC,MAAM,CAAC,CA4CjB;AAED,wBAAsB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,CAkCzE"}
|
package/dist/lib/refs.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { TodoistRequestError } from '@doist/todoist-api-typescript';
|
|
1
2
|
import { fetchWorkspaces } from './api/workspaces.js';
|
|
2
3
|
import { formatError } from './output.js';
|
|
3
4
|
import { paginate } from './pagination.js';
|
|
@@ -12,18 +13,14 @@ export function looksLikeRawId(ref) {
|
|
|
12
13
|
return false;
|
|
13
14
|
return /^\d+$/.test(ref) || (/[a-zA-Z]/.test(ref) && /\d/.test(ref));
|
|
14
15
|
}
|
|
15
|
-
function
|
|
16
|
-
if (
|
|
17
|
-
return
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
`Use id:xxx format (e.g., id:${ref})`,
|
|
24
|
-
]));
|
|
25
|
-
}
|
|
26
|
-
return extractId(ref);
|
|
16
|
+
export function lenientIdRef(ref, entityName) {
|
|
17
|
+
if (isIdRef(ref))
|
|
18
|
+
return extractId(ref);
|
|
19
|
+
if (looksLikeRawId(ref))
|
|
20
|
+
return ref;
|
|
21
|
+
throw new Error(formatError('INVALID_REF', `Invalid ${entityName} reference "${ref}".`, [
|
|
22
|
+
`Use id:xxx format (e.g., id:${ref})`,
|
|
23
|
+
]));
|
|
27
24
|
}
|
|
28
25
|
async function resolveRef(ref, fetchById, fetchAll, getName, entityType) {
|
|
29
26
|
if (!ref.trim()) {
|
|
@@ -46,20 +43,27 @@ async function resolveRef(ref, fetchById, fetchAll, getName, entityType) {
|
|
|
46
43
|
if (partial.length > 1) {
|
|
47
44
|
throw new Error(formatError(`AMBIGUOUS_${entityType.toUpperCase()}`, `Multiple ${entityType}s match "${ref}":`, partial.slice(0, 5).map((item) => `"${getName(item)}" (id:${item.id})`)));
|
|
48
45
|
}
|
|
49
|
-
|
|
46
|
+
if (looksLikeRawId(ref)) {
|
|
47
|
+
try {
|
|
48
|
+
return await fetchById(ref);
|
|
49
|
+
}
|
|
50
|
+
catch (error) {
|
|
51
|
+
if (error instanceof TodoistRequestError && error.httpStatusCode === 404) {
|
|
52
|
+
// Genuine not-found — fall through to generic error
|
|
53
|
+
}
|
|
54
|
+
else {
|
|
55
|
+
throw error;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
throw new Error(formatError(`${entityType.toUpperCase()}_NOT_FOUND`, `${entityType} "${ref}" not found.`));
|
|
50
60
|
}
|
|
51
61
|
export async function resolveTaskRef(api, ref) {
|
|
52
62
|
return resolveRef(ref, (id) => api.getTask(id), () => paginate((cursor, limit) => api.getTasksByFilter({
|
|
53
63
|
query: `search: ${ref}`,
|
|
54
64
|
cursor: cursor ?? undefined,
|
|
55
65
|
limit,
|
|
56
|
-
}), { limit: 5 }), (t) => t.content, 'task')
|
|
57
|
-
// If ref looks like a raw ID (numeric or alphanumeric mix), try as direct ID lookup
|
|
58
|
-
if (looksLikeRawId(ref)) {
|
|
59
|
-
return resolveTaskRef(api, `id:${ref}`);
|
|
60
|
-
}
|
|
61
|
-
throw err;
|
|
62
|
-
});
|
|
66
|
+
}), { limit: 5 }), (t) => t.content, 'task');
|
|
63
67
|
}
|
|
64
68
|
export async function resolveProjectRef(api, ref) {
|
|
65
69
|
return resolveRef(ref, (id) => api.getProject(id), () => api.getProjects(), (p) => p.name, 'project');
|
|
@@ -88,7 +92,12 @@ export async function resolveSectionId(api, ref, projectId) {
|
|
|
88
92
|
if (partial.length > 1) {
|
|
89
93
|
throw new Error(formatError('AMBIGUOUS_SECTION', `Multiple sections match "${ref}":`, partial.slice(0, 5).map((s) => `"${s.name}" (id:${s.id})`)));
|
|
90
94
|
}
|
|
91
|
-
|
|
95
|
+
if (looksLikeRawId(ref)) {
|
|
96
|
+
const byId = sections.find((s) => s.id === ref);
|
|
97
|
+
if (byId)
|
|
98
|
+
return byId.id;
|
|
99
|
+
}
|
|
100
|
+
throw new Error(formatError('SECTION_NOT_FOUND', `Section "${ref}" not found in project.`));
|
|
92
101
|
}
|
|
93
102
|
export async function resolveParentTaskId(api, ref, projectId, sectionId) {
|
|
94
103
|
if (isIdRef(ref)) {
|
|
@@ -117,7 +126,9 @@ export async function resolveParentTaskId(api, ref, projectId, sectionId) {
|
|
|
117
126
|
if (partial.length > 1) {
|
|
118
127
|
throw new Error(formatError('AMBIGUOUS_PARENT', `Multiple tasks match "${ref}" in project:`, partial.slice(0, 5).map((t) => `"${t.content}" (id:${t.id})`)));
|
|
119
128
|
}
|
|
120
|
-
|
|
129
|
+
if (looksLikeRawId(ref))
|
|
130
|
+
return ref;
|
|
131
|
+
throw new Error(formatError('PARENT_NOT_FOUND', `Parent task "${ref}" not found in project.`));
|
|
121
132
|
}
|
|
122
133
|
export async function resolveWorkspaceRef(ref) {
|
|
123
134
|
const workspaces = await fetchWorkspaces();
|
|
@@ -139,6 +150,11 @@ export async function resolveWorkspaceRef(ref) {
|
|
|
139
150
|
if (partial.length > 1) {
|
|
140
151
|
throw new Error(formatError('AMBIGUOUS_WORKSPACE', `Multiple workspaces match "${ref}":`, partial.slice(0, 5).map((w) => `"${w.name}" (id:${w.id})`)));
|
|
141
152
|
}
|
|
142
|
-
|
|
153
|
+
if (looksLikeRawId(ref)) {
|
|
154
|
+
const byId = workspaces.find((w) => w.id === ref);
|
|
155
|
+
if (byId)
|
|
156
|
+
return byId;
|
|
157
|
+
}
|
|
158
|
+
throw new Error(formatError('WORKSPACE_NOT_FOUND', `Workspace "${ref}" not found.`));
|
|
143
159
|
}
|
|
144
160
|
//# sourceMappingURL=refs.js.map
|
package/dist/lib/refs.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"refs.js","sourceRoot":"","sources":["../../src/lib/refs.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"refs.js","sourceRoot":"","sources":["../../src/lib/refs.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
export declare const SKILL_NAME = "todoist";
|
|
2
2
|
export declare const SKILL_DESCRIPTION = "Manage Todoist tasks, projects, labels, comments, and more via the td CLI";
|
|
3
|
-
export declare const SKILL_CONTENT = "# Todoist CLI (td)\n\nUse this skill when the user wants to interact with their Todoist tasks.\n\n## Quick Reference\n\n- `td today` - Tasks due today and overdue\n- `td inbox` - Inbox tasks\n- `td upcoming` - Tasks due in next N days\n- `td completed` - Recently completed tasks\n- `td task add \"content\"` - Add a task\n- `td task list` - List tasks with filters\n- `td task complete <ref>` - Complete a task\n- `td project list` - List projects\n- `td label list` - List labels\n- `td filter list/show` - Manage and use saved filters\n- `td workspace list` - List workspaces\n- `td activity` - Activity logs\n- `td notification list` - Notifications\n- `td reminder add` - Task reminders\n- `td stats` - Productivity stats\n- `td settings view` - User settings\n\n## Output Formats\n\nAll list commands support:\n- `--json` - JSON output (essential fields)\n- `--ndjson` - Newline-delimited JSON (streaming)\n- `--full` - Include all fields in JSON\n- `--raw` - Disable markdown rendering\n\n## Shared List Options\n\nMost list commands also support:\n- `--limit <n>` - Limit number of results\n- `--all` - Fetch all results (no limit)\n- `--cursor <cursor>` - Continue from pagination cursor\n- `--show-urls` - Show web app URLs for each item\n\n## Global Options\n\n- `--no-spinner` - Disable loading animations\n- `--progress-jsonl` - Machine-readable progress events (JSONL to stderr)\n\n## Task References\n\nTasks can be referenced by:\n- Name (fuzzy matched within context)\n- `id:xxx` - Explicit task ID\n\n## Priority Mapping\n\n- p1 = Highest priority (API value 4)\n- p2 = High priority (API value 3)\n- p3 = Medium priority (API value 2)\n- p4 = Lowest priority (API value 1, default)\n\n## Commands\n\n### Today\n```bash\ntd today # Due today + overdue\ntd today --json # JSON output\ntd today --workspace \"Work\" # Filter to workspace\ntd today --personal # Personal projects only\ntd today --any-assignee # Include tasks assigned to others\n```\n\n### Inbox\n```bash\ntd inbox # Inbox tasks\ntd inbox --priority p1 # Filter by priority\ntd inbox --due today # Filter by due date\n```\n\n### Upcoming\n```bash\ntd upcoming # Next 7 days\ntd upcoming 14 # Next 14 days\ntd upcoming --workspace \"Work\" # Filter to workspace\ntd upcoming --personal # Personal projects only\ntd upcoming --any-assignee # Include tasks assigned to others\n```\n\n### Completed\n```bash\ntd completed # Completed today\ntd completed --since 2024-01-01 --until 2024-01-31\ntd completed --project \"Work\" # Filter by project\n```\n\n### Task Management\n```bash\n# List with filters\ntd task list --project \"Work\"\ntd task list --label \"urgent\" --priority p1\ntd task list --due today\ntd task list --filter \"today | overdue\"\ntd task list --assignee me\ntd task list --assignee \"john@example.com\"\ntd task list --unassigned\ntd task list --workspace \"Work\"\ntd task list --personal\ntd task list --parent \"Parent task\"\n\n# View, complete, uncomplete\ntd task view \"task name\"\ntd task complete \"task name\"\ntd task complete id:123456\ntd task complete \"task name\" --forever # Stop recurrence\ntd task uncomplete id:123456 # Reopen completed task\n\n# Add tasks\ntd task add \"New task\" --due \"tomorrow\" --priority p2\ntd task add \"Task\" --deadline \"2024-03-01\" --project \"Work\"\ntd task add \"Task\" --duration 1h --section
|
|
3
|
+
export declare const SKILL_CONTENT = "# Todoist CLI (td)\n\nUse this skill when the user wants to interact with their Todoist tasks.\n\n## Quick Reference\n\n- `td today` - Tasks due today and overdue\n- `td inbox` - Inbox tasks\n- `td upcoming` - Tasks due in next N days\n- `td completed` - Recently completed tasks\n- `td task add \"content\"` - Add a task\n- `td task list` - List tasks with filters\n- `td task complete <ref>` - Complete a task\n- `td project list` - List projects\n- `td label list` - List labels\n- `td filter list/show` - Manage and use saved filters\n- `td workspace list` - List workspaces\n- `td activity` - Activity logs\n- `td notification list` - Notifications\n- `td reminder add` - Task reminders\n- `td stats` - Productivity stats\n- `td settings view` - User settings\n\n## Output Formats\n\nAll list commands support:\n- `--json` - JSON output (essential fields)\n- `--ndjson` - Newline-delimited JSON (streaming)\n- `--full` - Include all fields in JSON\n- `--raw` - Disable markdown rendering\n\n## Shared List Options\n\nMost list commands also support:\n- `--limit <n>` - Limit number of results\n- `--all` - Fetch all results (no limit)\n- `--cursor <cursor>` - Continue from pagination cursor\n- `--show-urls` - Show web app URLs for each item\n\n## Global Options\n\n- `--no-spinner` - Disable loading animations\n- `--progress-jsonl` - Machine-readable progress events (JSONL to stderr)\n- `-v, --verbose` - Verbose output to stderr (repeat: -v info, -vv detail, -vvv debug, -vvvv trace)\n\n## Task References\n\nTasks can be referenced by:\n- Name (fuzzy matched within context)\n- `id:xxx` - Explicit task ID\n\n## Priority Mapping\n\n- p1 = Highest priority (API value 4)\n- p2 = High priority (API value 3)\n- p3 = Medium priority (API value 2)\n- p4 = Lowest priority (API value 1, default)\n\n## Commands\n\n### Today\n```bash\ntd today # Due today + overdue\ntd today --json # JSON output\ntd today --workspace \"Work\" # Filter to workspace\ntd today --personal # Personal projects only\ntd today --any-assignee # Include tasks assigned to others\n```\n\n### Inbox\n```bash\ntd inbox # Inbox tasks\ntd inbox --priority p1 # Filter by priority\ntd inbox --due today # Filter by due date\n```\n\n### Upcoming\n```bash\ntd upcoming # Next 7 days\ntd upcoming 14 # Next 14 days\ntd upcoming --workspace \"Work\" # Filter to workspace\ntd upcoming --personal # Personal projects only\ntd upcoming --any-assignee # Include tasks assigned to others\n```\n\n### Completed\n```bash\ntd completed # Completed today\ntd completed --since 2024-01-01 --until 2024-01-31\ntd completed --project \"Work\" # Filter by project\n```\n\n### Task Management\n```bash\n# List with filters\ntd task list --project \"Work\"\ntd task list --label \"urgent\" --priority p1\ntd task list --due today\ntd task list --filter \"today | overdue\"\ntd task list --assignee me\ntd task list --assignee \"john@example.com\"\ntd task list --unassigned\ntd task list --workspace \"Work\"\ntd task list --personal\ntd task list --parent \"Parent task\"\n\n# View, complete, uncomplete\ntd task view \"task name\"\ntd task complete \"task name\"\ntd task complete id:123456\ntd task complete \"task name\" --forever # Stop recurrence\ntd task uncomplete id:123456 # Reopen completed task\n\n# Add tasks\ntd task add \"New task\" --due \"tomorrow\" --priority p2\ntd task add \"Task\" --deadline \"2024-03-01\" --project \"Work\"\ntd task add \"Task\" --duration 1h --section \"Planning\" --project \"Work\"\ntd task add \"Task\" --labels \"urgent,review\" --parent \"Parent task\"\ntd task add \"Task\" --description \"Details here\" --assignee me\n\n# Update\ntd task update \"task name\" --due \"next week\"\ntd task update \"task name\" --deadline \"2024-06-01\"\ntd task update \"task name\" --no-deadline\ntd task update \"task name\" --duration 2h\ntd task update \"task name\" --assignee \"john@example.com\"\ntd task update \"task name\" --unassign\n\n# Move\ntd task move \"task name\" --project \"Personal\"\ntd task move \"task name\" --section \"In Progress\"\ntd task move \"task name\" --parent \"Parent task\"\ntd task move \"task name\" --no-parent # Move to project root\ntd task move \"task name\" --no-section # Remove from section\n\n# Delete and browse\ntd task delete \"task name\" --yes\ntd task browse \"task name\" # Open in browser\n```\n\n### Projects\n```bash\ntd project list\ntd project list --personal # Personal projects only\ntd project view \"Project Name\"\ntd project collaborators \"Project Name\"\ntd project create --name \"New Project\" --color \"blue\"\ntd project update \"Project Name\" --favorite\ntd project archive \"Project Name\"\ntd project unarchive \"Project Name\"\ntd project delete \"Project Name\" --yes\ntd project browse \"Project Name\" # Open in browser\n```\n\n### Labels\n```bash\ntd label list\ntd label create --name \"urgent\" --color \"red\"\ntd label update \"urgent\" --color \"orange\"\ntd label delete \"urgent\" --yes\ntd label browse \"urgent\" # Open in browser\n```\n\n### Comments\n```bash\ntd comment list --task \"task name\"\ntd comment list --project \"Project Name\" -P # Project comments\ntd comment add --task \"task name\" --content \"Comment text\"\ntd comment add --task \"task name\" --content \"See attached\" --file ./report.pdf\ntd comment view id:123 # View full comment\ntd comment update id:123 --content \"Updated text\"\ntd comment delete id:123 --yes\ntd comment browse id:123 # Open in browser\n```\n\n### Sections\n```bash\ntd section list \"Work\" # List sections in project (or --project \"Work\")\ntd section list --project \"Work\" # Same, using named flag\ntd section create --project \"Work\" --name \"In Progress\"\ntd section update id:123 --name \"Done\"\ntd section delete id:123 --yes\ntd section browse id:123 # Open in browser\n```\n\n### Filters\n```bash\ntd filter list\ntd filter create --name \"Urgent work\" --query \"p1 & #Work\"\ntd filter show \"Urgent work\" # Show tasks matching filter\ntd filter update \"Urgent work\" --query \"p1 & #Work & today\"\ntd filter delete \"Urgent work\" --yes\ntd filter browse \"Urgent work\" # Open in browser\n```\n\n### Workspaces\n```bash\ntd workspace list\ntd workspace view \"Workspace Name\"\ntd workspace projects \"Workspace Name\" # or --workspace \"Workspace Name\"\ntd workspace users \"Workspace Name\" --role ADMIN,MEMBER # or --workspace \"...\"\n```\n\n### Activity\n```bash\ntd activity # Recent activity\ntd activity --since 2024-01-01 --until 2024-01-31\ntd activity --type task --event completed\ntd activity --project \"Work\"\ntd activity --by me\n```\n\n### Notifications\n```bash\ntd notification list\ntd notification list --unread\ntd notification list --type \"item_assign\"\ntd notification view id:123\ntd notification read --all --yes # Mark all as read\ntd notification accept id:123 # Accept share invitation\ntd notification reject id:123 # Reject share invitation\n```\n\n### Reminders\n```bash\ntd reminder list \"task name\" # or --task \"task name\"\ntd reminder add \"task name\" --before 30m # or --task \"task name\" --before 30m\ntd reminder add \"task name\" --at \"2024-01-15 10:00\"\ntd reminder update id:123 --before 1h\ntd reminder delete id:123 --yes\n```\n\n### Stats\n```bash\ntd stats # View karma and productivity\ntd stats --json\ntd stats goals --daily 10 --weekly 50\ntd stats vacation --on # Enable vacation mode\ntd stats vacation --off # Disable vacation mode\n```\n\n### Settings\n```bash\ntd settings view\ntd settings view --json\ntd settings update --timezone \"America/New_York\"\ntd settings update --time-format 24 --date-format intl\ntd settings themes # List available themes\n```\n\n## Examples\n\n### Daily workflow\n```bash\ntd today --json | jq '.results | length' # Count today's tasks\ntd inbox --limit 5 # Quick inbox check\ntd upcoming # What's coming this week\ntd completed # What I finished today\n```\n\n### Filter by multiple criteria\n```bash\ntd task list --project \"Work\" --label \"urgent\" --priority p1\ntd task list --filter \"today & #Work\"\ntd task list --workspace \"Work\" --due today\n```\n\n### Complete tasks efficiently\n```bash\ntd task complete \"Review PR\"\ntd task complete id:123456789\ntd task uncomplete id:123456789 # Reopen if needed\n```\n";
|
|
4
4
|
//# sourceMappingURL=content.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"content.d.ts","sourceRoot":"","sources":["../../../src/lib/skills/content.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,UAAU,YAAY,CAAA;AACnC,eAAO,MAAM,iBAAiB,8EACiD,CAAA;AAE/E,eAAO,MAAM,aAAa,
|
|
1
|
+
{"version":3,"file":"content.d.ts","sourceRoot":"","sources":["../../../src/lib/skills/content.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,UAAU,YAAY,CAAA;AACnC,eAAO,MAAM,iBAAiB,8EACiD,CAAA;AAE/E,eAAO,MAAM,aAAa,m5RAiRzB,CAAA"}
|
|
@@ -43,6 +43,7 @@ Most list commands also support:
|
|
|
43
43
|
|
|
44
44
|
- \`--no-spinner\` - Disable loading animations
|
|
45
45
|
- \`--progress-jsonl\` - Machine-readable progress events (JSONL to stderr)
|
|
46
|
+
- \`-v, --verbose\` - Verbose output to stderr (repeat: -v info, -vv detail, -vvv debug, -vvvv trace)
|
|
46
47
|
|
|
47
48
|
## Task References
|
|
48
49
|
|
|
@@ -115,7 +116,7 @@ td task uncomplete id:123456 # Reopen completed task
|
|
|
115
116
|
# Add tasks
|
|
116
117
|
td task add "New task" --due "tomorrow" --priority p2
|
|
117
118
|
td task add "Task" --deadline "2024-03-01" --project "Work"
|
|
118
|
-
td task add "Task" --duration 1h --section
|
|
119
|
+
td task add "Task" --duration 1h --section "Planning" --project "Work"
|
|
119
120
|
td task add "Task" --labels "urgent,review" --parent "Parent task"
|
|
120
121
|
td task add "Task" --description "Details here" --assignee me
|
|
121
122
|
|
|
@@ -176,7 +177,8 @@ td comment browse id:123 # Open in browser
|
|
|
176
177
|
|
|
177
178
|
### Sections
|
|
178
179
|
\`\`\`bash
|
|
179
|
-
td section list "Work" # List sections in project
|
|
180
|
+
td section list "Work" # List sections in project (or --project "Work")
|
|
181
|
+
td section list --project "Work" # Same, using named flag
|
|
180
182
|
td section create --project "Work" --name "In Progress"
|
|
181
183
|
td section update id:123 --name "Done"
|
|
182
184
|
td section delete id:123 --yes
|
|
@@ -197,8 +199,8 @@ td filter browse "Urgent work" # Open in browser
|
|
|
197
199
|
\`\`\`bash
|
|
198
200
|
td workspace list
|
|
199
201
|
td workspace view "Workspace Name"
|
|
200
|
-
td workspace projects "Workspace Name"
|
|
201
|
-
td workspace users "Workspace Name" --role ADMIN,MEMBER
|
|
202
|
+
td workspace projects "Workspace Name" # or --workspace "Workspace Name"
|
|
203
|
+
td workspace users "Workspace Name" --role ADMIN,MEMBER # or --workspace "..."
|
|
202
204
|
\`\`\`
|
|
203
205
|
|
|
204
206
|
### Activity
|
|
@@ -223,8 +225,8 @@ td notification reject id:123 # Reject share invitation
|
|
|
223
225
|
|
|
224
226
|
### Reminders
|
|
225
227
|
\`\`\`bash
|
|
226
|
-
td reminder list "task name"
|
|
227
|
-
td reminder add "task name" --before 30m
|
|
228
|
+
td reminder list "task name" # or --task "task name"
|
|
229
|
+
td reminder add "task name" --before 30m # or --task "task name" --before 30m
|
|
228
230
|
td reminder add "task name" --at "2024-01-15 10:00"
|
|
229
231
|
td reminder update id:123 --before 1h
|
|
230
232
|
td reminder delete id:123 --yes
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"content.js","sourceRoot":"","sources":["../../../src/lib/skills/content.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,UAAU,GAAG,SAAS,CAAA;AACnC,MAAM,CAAC,MAAM,iBAAiB,GAC1B,2EAA2E,CAAA;AAE/E,MAAM,CAAC,MAAM,aAAa,GAAG
|
|
1
|
+
{"version":3,"file":"content.js","sourceRoot":"","sources":["../../../src/lib/skills/content.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,UAAU,GAAG,SAAS,CAAA;AACnC,MAAM,CAAC,MAAM,iBAAiB,GAC1B,2EAA2E,CAAA;AAE/E,MAAM,CAAC,MAAM,aAAa,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiR5B,CAAA"}
|
package/dist/lib/spinner.d.ts
CHANGED
|
@@ -3,13 +3,16 @@ interface SpinnerOptions {
|
|
|
3
3
|
color?: 'green' | 'yellow' | 'blue' | 'red' | 'gray' | 'cyan' | 'magenta';
|
|
4
4
|
noSpinner?: boolean;
|
|
5
5
|
}
|
|
6
|
+
export declare function startEarlySpinner(): void;
|
|
7
|
+
export declare function stopEarlySpinner(): void;
|
|
8
|
+
export declare function resetEarlySpinner(): void;
|
|
6
9
|
declare class LoadingSpinner {
|
|
7
10
|
private spinnerInstance;
|
|
11
|
+
private adopted;
|
|
8
12
|
start(options: SpinnerOptions): this;
|
|
9
13
|
succeed(text?: string): void;
|
|
10
14
|
fail(text?: string): void;
|
|
11
15
|
stop(): void;
|
|
12
|
-
private shouldDisableSpinner;
|
|
13
16
|
}
|
|
14
17
|
/**
|
|
15
18
|
* High-level wrapper function for running async operations with a loading spinner.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spinner.d.ts","sourceRoot":"","sources":["../../src/lib/spinner.ts"],"names":[],"mappings":"AAGA,UAAU,cAAc;IACpB,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,MAAM,GAAG,KAAK,GAAG,MAAM,GAAG,MAAM,GAAG,SAAS,CAAA;IACzE,SAAS,CAAC,EAAE,OAAO,CAAA;CACtB;AAED,cAAM,cAAc;IAChB,OAAO,CAAC,eAAe,CAA+C;
|
|
1
|
+
{"version":3,"file":"spinner.d.ts","sourceRoot":"","sources":["../../src/lib/spinner.ts"],"names":[],"mappings":"AAGA,UAAU,cAAc;IACpB,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,MAAM,GAAG,KAAK,GAAG,MAAM,GAAG,MAAM,GAAG,SAAS,CAAA;IACzE,SAAS,CAAC,EAAE,OAAO,CAAA;CACtB;AAsCD,wBAAgB,iBAAiB,IAAI,IAAI,CAkBxC;AAED,wBAAgB,gBAAgB,IAAI,IAAI,CASvC;AAED,wBAAgB,iBAAiB,IAAI,IAAI,CAMxC;AAED,cAAM,cAAc;IAChB,OAAO,CAAC,eAAe,CAA+C;IACtE,OAAO,CAAC,OAAO,CAAQ;IAEvB,KAAK,CAAC,OAAO,EAAE,cAAc;IAyB7B,OAAO,CAAC,IAAI,CAAC,EAAE,MAAM;IAcrB,IAAI,CAAC,IAAI,CAAC,EAAE,MAAM;IAQlB,IAAI;CAaP;AAED;;;GAGG;AACH,wBAAsB,WAAW,CAAC,CAAC,EAC/B,OAAO,EAAE,cAAc,EACvB,cAAc,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GACjC,OAAO,CAAC,CAAC,CAAC,CAWZ;AAED,OAAO,EAAE,cAAc,EAAE,KAAK,cAAc,EAAE,CAAA"}
|