@doist/twist-cli 1.10.0 → 1.10.1
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/__tests__/spinner.test.js +113 -1
- package/dist/__tests__/spinner.test.js.map +1 -1
- package/dist/index.js +73 -27
- package/dist/index.js.map +1 -1
- package/dist/lib/markdown.d.ts.map +1 -1
- package/dist/lib/markdown.js +5 -1
- package/dist/lib/markdown.js.map +1 -1
- package/dist/lib/spinner.d.ts +5 -1
- package/dist/lib/spinner.d.ts.map +1 -1
- package/dist/lib/spinner.js +74 -18
- package/dist/lib/spinner.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';
|
|
2
|
-
import
|
|
2
|
+
import yoctoSpinnerFactory from 'yocto-spinner';
|
|
3
|
+
import { LoadingSpinner, resetEarlySpinner, startEarlySpinner, stopEarlySpinner, withSpinner, } from '../lib/spinner.js';
|
|
3
4
|
// Mock yocto-spinner
|
|
4
5
|
const mockSpinnerInstance = {
|
|
5
6
|
start: vi.fn().mockReturnThis(),
|
|
6
7
|
success: vi.fn(),
|
|
7
8
|
error: vi.fn(),
|
|
8
9
|
stop: vi.fn(),
|
|
10
|
+
text: '',
|
|
9
11
|
};
|
|
10
12
|
vi.mock('yocto-spinner', () => ({
|
|
11
13
|
default: vi.fn(() => mockSpinnerInstance),
|
|
@@ -25,6 +27,7 @@ vi.mock('chalk', () => ({
|
|
|
25
27
|
describe('withSpinner', () => {
|
|
26
28
|
beforeEach(() => {
|
|
27
29
|
vi.clearAllMocks();
|
|
30
|
+
resetEarlySpinner();
|
|
28
31
|
// Reset environment variables
|
|
29
32
|
delete process.env.TW_SPINNER;
|
|
30
33
|
delete process.env.CI;
|
|
@@ -38,6 +41,7 @@ describe('withSpinner', () => {
|
|
|
38
41
|
});
|
|
39
42
|
afterEach(() => {
|
|
40
43
|
vi.clearAllMocks();
|
|
44
|
+
resetEarlySpinner();
|
|
41
45
|
});
|
|
42
46
|
it('should handle successful operations', async () => {
|
|
43
47
|
const result = await withSpinner({ text: 'Testing...', color: 'blue' }, async () => 'success');
|
|
@@ -99,6 +103,7 @@ describe('withSpinner', () => {
|
|
|
99
103
|
describe('LoadingSpinner', () => {
|
|
100
104
|
beforeEach(() => {
|
|
101
105
|
vi.clearAllMocks();
|
|
106
|
+
resetEarlySpinner();
|
|
102
107
|
// Reset environment variables
|
|
103
108
|
delete process.env.TW_SPINNER;
|
|
104
109
|
delete process.env.CI;
|
|
@@ -112,6 +117,7 @@ describe('LoadingSpinner', () => {
|
|
|
112
117
|
});
|
|
113
118
|
afterEach(() => {
|
|
114
119
|
vi.clearAllMocks();
|
|
120
|
+
resetEarlySpinner();
|
|
115
121
|
});
|
|
116
122
|
it('should start and stop spinner', () => {
|
|
117
123
|
const spinner = new LoadingSpinner();
|
|
@@ -147,4 +153,110 @@ describe('LoadingSpinner', () => {
|
|
|
147
153
|
expect(mockSpinnerInstance.error).not.toHaveBeenCalled();
|
|
148
154
|
});
|
|
149
155
|
});
|
|
156
|
+
describe('early spinner', () => {
|
|
157
|
+
let savedStdoutWrite;
|
|
158
|
+
beforeEach(() => {
|
|
159
|
+
vi.clearAllMocks();
|
|
160
|
+
resetEarlySpinner();
|
|
161
|
+
savedStdoutWrite = process.stdout.write;
|
|
162
|
+
delete process.env.TW_SPINNER;
|
|
163
|
+
delete process.env.CI;
|
|
164
|
+
Object.defineProperty(process.stdout, 'isTTY', {
|
|
165
|
+
value: true,
|
|
166
|
+
configurable: true,
|
|
167
|
+
});
|
|
168
|
+
process.argv = ['node', 'tw'];
|
|
169
|
+
});
|
|
170
|
+
afterEach(() => {
|
|
171
|
+
process.stdout.write = savedStdoutWrite;
|
|
172
|
+
resetEarlySpinner();
|
|
173
|
+
vi.clearAllMocks();
|
|
174
|
+
});
|
|
175
|
+
it('should start and stop early spinner', () => {
|
|
176
|
+
startEarlySpinner();
|
|
177
|
+
expect(yoctoSpinnerFactory).toHaveBeenCalledWith({ text: 'Loading...' });
|
|
178
|
+
expect(mockSpinnerInstance.start).toHaveBeenCalled();
|
|
179
|
+
stopEarlySpinner();
|
|
180
|
+
expect(mockSpinnerInstance.stop).toHaveBeenCalled();
|
|
181
|
+
});
|
|
182
|
+
it('should not start when not TTY', () => {
|
|
183
|
+
Object.defineProperty(process.stdout, 'isTTY', {
|
|
184
|
+
value: false,
|
|
185
|
+
configurable: true,
|
|
186
|
+
});
|
|
187
|
+
startEarlySpinner();
|
|
188
|
+
expect(yoctoSpinnerFactory).not.toHaveBeenCalled();
|
|
189
|
+
});
|
|
190
|
+
it('should not start with --json flag', () => {
|
|
191
|
+
process.argv = ['node', 'tw', 'inbox', '--json'];
|
|
192
|
+
startEarlySpinner();
|
|
193
|
+
expect(yoctoSpinnerFactory).not.toHaveBeenCalled();
|
|
194
|
+
});
|
|
195
|
+
it('should not start with --ndjson flag', () => {
|
|
196
|
+
process.argv = ['node', 'tw', 'inbox', '--ndjson'];
|
|
197
|
+
startEarlySpinner();
|
|
198
|
+
expect(yoctoSpinnerFactory).not.toHaveBeenCalled();
|
|
199
|
+
});
|
|
200
|
+
it('should not start with --no-spinner flag', () => {
|
|
201
|
+
process.argv = ['node', 'tw', 'inbox', '--no-spinner'];
|
|
202
|
+
startEarlySpinner();
|
|
203
|
+
expect(yoctoSpinnerFactory).not.toHaveBeenCalled();
|
|
204
|
+
});
|
|
205
|
+
it('should not start in CI', () => {
|
|
206
|
+
process.env.CI = 'true';
|
|
207
|
+
startEarlySpinner();
|
|
208
|
+
expect(yoctoSpinnerFactory).not.toHaveBeenCalled();
|
|
209
|
+
});
|
|
210
|
+
it('should not start when TW_SPINNER=false', () => {
|
|
211
|
+
process.env.TW_SPINNER = 'false';
|
|
212
|
+
startEarlySpinner();
|
|
213
|
+
expect(yoctoSpinnerFactory).not.toHaveBeenCalled();
|
|
214
|
+
});
|
|
215
|
+
it('should be adopted by LoadingSpinner.start()', () => {
|
|
216
|
+
startEarlySpinner();
|
|
217
|
+
vi.clearAllMocks();
|
|
218
|
+
const spinner = new LoadingSpinner();
|
|
219
|
+
spinner.start({ text: 'Fetching data...', color: 'blue' });
|
|
220
|
+
// Should NOT create a new spinner — it adopts the early one
|
|
221
|
+
expect(yoctoSpinnerFactory).not.toHaveBeenCalled();
|
|
222
|
+
expect(mockSpinnerInstance.start).not.toHaveBeenCalled();
|
|
223
|
+
// Should update the text on the adopted instance
|
|
224
|
+
expect(mockSpinnerInstance.text).toBe('Fetching data...');
|
|
225
|
+
});
|
|
226
|
+
it('should release back on stop() so next API call can re-adopt', () => {
|
|
227
|
+
startEarlySpinner();
|
|
228
|
+
vi.clearAllMocks();
|
|
229
|
+
const spinner1 = new LoadingSpinner();
|
|
230
|
+
spinner1.start({ text: 'First call...', color: 'blue' });
|
|
231
|
+
spinner1.stop();
|
|
232
|
+
// Should NOT have called stop — released back
|
|
233
|
+
expect(mockSpinnerInstance.stop).not.toHaveBeenCalled();
|
|
234
|
+
// Second spinner should also adopt (not create new)
|
|
235
|
+
const spinner2 = new LoadingSpinner();
|
|
236
|
+
spinner2.start({ text: 'Second call...', color: 'blue' });
|
|
237
|
+
expect(yoctoSpinnerFactory).not.toHaveBeenCalled();
|
|
238
|
+
expect(mockSpinnerInstance.text).toBe('Second call...');
|
|
239
|
+
});
|
|
240
|
+
it('should actually stop on fail() even if adopted', () => {
|
|
241
|
+
startEarlySpinner();
|
|
242
|
+
vi.clearAllMocks();
|
|
243
|
+
const spinner = new LoadingSpinner();
|
|
244
|
+
spinner.start({ text: 'Failing...', color: 'blue' });
|
|
245
|
+
spinner.fail('Something went wrong');
|
|
246
|
+
expect(mockSpinnerInstance.error).toHaveBeenCalledWith('✗ Something went wrong');
|
|
247
|
+
});
|
|
248
|
+
it('should auto-stop when stdout is written to', () => {
|
|
249
|
+
startEarlySpinner();
|
|
250
|
+
vi.clearAllMocks();
|
|
251
|
+
// Writing to stdout should trigger auto-stop
|
|
252
|
+
process.stdout.write('hello');
|
|
253
|
+
expect(mockSpinnerInstance.stop).toHaveBeenCalled();
|
|
254
|
+
});
|
|
255
|
+
it('should be cleaned up by stopEarlySpinner() if never adopted', () => {
|
|
256
|
+
startEarlySpinner();
|
|
257
|
+
vi.clearAllMocks();
|
|
258
|
+
stopEarlySpinner();
|
|
259
|
+
expect(mockSpinnerInstance.stop).toHaveBeenCalled();
|
|
260
|
+
});
|
|
261
|
+
});
|
|
150
262
|
//# sourceMappingURL=spinner.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spinner.test.js","sourceRoot":"","sources":["../../src/__tests__/spinner.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAA;AACxE,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAE/D,qBAAqB;AACrB,MAAM,mBAAmB,GAAG;IACxB,KAAK,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,cAAc,EAAE;IAC/B,OAAO,EAAE,EAAE,CAAC,EAAE,EAAE;IAChB,KAAK,EAAE,EAAE,CAAC,EAAE,EAAE;IACd,IAAI,EAAE,EAAE,CAAC,EAAE,EAAE;CAChB,CAAA;AAED,EAAE,CAAC,IAAI,CAAC,eAAe,EAAE,GAAG,EAAE,CAAC,CAAC;IAC5B,OAAO,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,mBAAmB,CAAC;CAC5C,CAAC,CAAC,CAAA;AAEH,sCAAsC;AACtC,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC;IACpB,OAAO,EAAE;QACL,KAAK,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC;QAC5B,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC;QAC7B,IAAI,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC;QAC3B,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC;QAC1B,IAAI,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC;QAC3B,IAAI,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC;QAC3B,OAAO,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC;KACjC;CACJ,CAAC,CAAC,CAAA;AAEH,QAAQ,CAAC,aAAa,EAAE,GAAG,EAAE;IACzB,UAAU,CAAC,GAAG,EAAE;QACZ,EAAE,CAAC,aAAa,EAAE,CAAA;QAClB,8BAA8B;QAC9B,OAAO,OAAO,CAAC,GAAG,CAAC,UAAU,CAAA;QAC7B,OAAO,OAAO,CAAC,GAAG,CAAC,EAAE,CAAA;QACrB,8BAA8B;QAC9B,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,EAAE;YAC3C,KAAK,EAAE,IAAI;YACX,YAAY,EAAE,IAAI;SACrB,CAAC,CAAA;QACF,qBAAqB;QACrB,OAAO,CAAC,IAAI,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,CAAA;IACjC,CAAC,CAAC,CAAA;IAEF,SAAS,CAAC,GAAG,EAAE;QACX,EAAE,CAAC,aAAa,EAAE,CAAA;IACtB,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,qCAAqC,EAAE,KAAK,IAAI,EAAE;QACjD,MAAM,MAAM,GAAG,MAAM,WAAW,CAC5B,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,EAAE,EACrC,KAAK,IAAI,EAAE,CAAC,SAAS,CACxB,CAAA;QAED,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;QAC9B,MAAM,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC,gBAAgB,EAAE,CAAA;QACpD,MAAM,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC,gBAAgB,EAAE,CAAA;QACnD,MAAM,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAA;IAC5D,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,iCAAiC,EAAE,KAAK,IAAI,EAAE;QAC7C,MAAM,MAAM,CACR,WAAW,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,KAAK,IAAI,EAAE;YAC1D,MAAM,IAAI,KAAK,CAAC,YAAY,CAAC,CAAA;QACjC,CAAC,CAAC,CACL,CAAC,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,CAAA;QAE/B,MAAM,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC,gBAAgB,EAAE,CAAA;QACpD,MAAM,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC,gBAAgB,EAAE,CAAA;QACpD,MAAM,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAA;IAC3D,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,uDAAuD,EAAE,KAAK,IAAI,EAAE;QACnE,MAAM,MAAM,GAAG,MAAM,WAAW,CAC5B,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,EACtD,KAAK,IAAI,EAAE,CAAC,SAAS,CACxB,CAAA;QAED,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;QAC9B,MAAM,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAA;IAC5D,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,+CAA+C,EAAE,KAAK,IAAI,EAAE;QAC3D,OAAO,CAAC,GAAG,CAAC,UAAU,GAAG,OAAO,CAAA;QAEhC,MAAM,MAAM,GAAG,MAAM,WAAW,CAC5B,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,EAAE,EACrC,KAAK,IAAI,EAAE,CAAC,SAAS,CACxB,CAAA;QAED,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;QAC9B,MAAM,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAA;IAC5D,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,2CAA2C,EAAE,KAAK,IAAI,EAAE;QACvD,OAAO,CAAC,GAAG,CAAC,EAAE,GAAG,MAAM,CAAA;QAEvB,MAAM,MAAM,GAAG,MAAM,WAAW,CAC5B,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,EAAE,EACrC,KAAK,IAAI,EAAE,CAAC,SAAS,CACxB,CAAA;QAED,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;QAC9B,MAAM,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAA;IAC5D,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,yCAAyC,EAAE,KAAK,IAAI,EAAE;QACrD,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,EAAE;YAC3C,KAAK,EAAE,KAAK;YACZ,YAAY,EAAE,IAAI;SACrB,CAAC,CAAA;QAEF,MAAM,MAAM,GAAG,MAAM,WAAW,CAC5B,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,EAAE,EACrC,KAAK,IAAI,EAAE,CAAC,SAAS,CACxB,CAAA;QAED,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;QAC9B,MAAM,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAA;IAC5D,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,IAAI,CAAC;QACJ,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;QACtD,CAAC,UAAU,EAAE,CAAC,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC;QAC1D,CAAC,cAAc,EAAE,CAAC,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,cAAc,CAAC,CAAC;QAClE,CAAC,kBAAkB,EAAE,CAAC,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,kBAAkB,CAAC,CAAC;QACnE;YACI,uBAAuB;YACvB,CAAC,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,sCAAsC,CAAC;SACpE;KACJ,CAAC,CAAC,sCAAsC,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE;QACjE,OAAO,CAAC,IAAI,GAAG,IAAI,CAAA;QAEnB,MAAM,MAAM,GAAG,MAAM,WAAW,CAC5B,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,EAAE,EACrC,KAAK,IAAI,EAAE,CAAC,SAAS,CACxB,CAAA;QAED,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;QAC9B,MAAM,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAA;IAC5D,CAAC,CAAC,CAAA;AACN,CAAC,CAAC,CAAA;AAEF,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;IAC5B,UAAU,CAAC,GAAG,EAAE;QACZ,EAAE,CAAC,aAAa,EAAE,CAAA;QAClB,8BAA8B;QAC9B,OAAO,OAAO,CAAC,GAAG,CAAC,UAAU,CAAA;QAC7B,OAAO,OAAO,CAAC,GAAG,CAAC,EAAE,CAAA;QACrB,8BAA8B;QAC9B,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,EAAE;YAC3C,KAAK,EAAE,IAAI;YACX,YAAY,EAAE,IAAI;SACrB,CAAC,CAAA;QACF,qBAAqB;QACrB,OAAO,CAAC,IAAI,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,CAAA;IACjC,CAAC,CAAC,CAAA;IAEF,SAAS,CAAC,GAAG,EAAE;QACX,EAAE,CAAC,aAAa,EAAE,CAAA;IACtB,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,+BAA+B,EAAE,GAAG,EAAE;QACrC,MAAM,OAAO,GAAG,IAAI,cAAc,EAAE,CAAA;QACpC,OAAO,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAA;QACpD,MAAM,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC,gBAAgB,EAAE,CAAA;QAEpD,OAAO,CAAC,IAAI,EAAE,CAAA;QACd,MAAM,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC,gBAAgB,EAAE,CAAA;IACvD,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,6BAA6B,EAAE,GAAG,EAAE;QACnC,MAAM,OAAO,GAAG,IAAI,cAAc,EAAE,CAAA;QACpC,OAAO,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAA;QACpD,OAAO,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAA;QACtC,MAAM,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC,oBAAoB,CAAC,uBAAuB,CAAC,CAAA;IACrF,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,6BAA6B,EAAE,GAAG,EAAE;QACnC,MAAM,OAAO,GAAG,IAAI,cAAc,EAAE,CAAA;QACpC,OAAO,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAA;QACpD,OAAO,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAA;QAChC,MAAM,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC,oBAAoB,CAAC,oBAAoB,CAAC,CAAA;IAChF,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,iDAAiD,EAAE,GAAG,EAAE;QACvD,MAAM,OAAO,GAAG,IAAI,cAAc,EAAE,CAAA;QACpC,OAAO,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAA;QACpD,OAAO,CAAC,IAAI,EAAE,CAAA;QACd,OAAO,CAAC,IAAI,EAAE,CAAA,CAAC,mBAAmB;QAElC,MAAM,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAA;IAC7D,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE;QACnD,MAAM,OAAO,GAAG,IAAI,cAAc,EAAE,CAAA;QACpC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAA,CAAC,mBAAmB;QAC3C,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA,CAAC,mBAAmB;QAExC,MAAM,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAA;QAC1D,MAAM,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAA;IAC5D,CAAC,CAAC,CAAA;AACN,CAAC,CAAC,CAAA"}
|
|
1
|
+
{"version":3,"file":"spinner.test.js","sourceRoot":"","sources":["../../src/__tests__/spinner.test.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -1,24 +1,53 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import { readFileSync } from 'node:fs';
|
|
3
|
-
import { dirname, join } from 'node:path';
|
|
4
|
-
import { fileURLToPath } from 'node:url';
|
|
5
2
|
import { program } from 'commander';
|
|
6
|
-
import
|
|
7
|
-
import {
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
3
|
+
import pkg from '../package.json' with { type: 'json' };
|
|
4
|
+
import { startEarlySpinner, stopEarlySpinner } from './lib/spinner.js';
|
|
5
|
+
const commands = {
|
|
6
|
+
workspace: [
|
|
7
|
+
'Manage workspace',
|
|
8
|
+
async () => (await import('./commands/workspace.js')).registerWorkspaceCommand,
|
|
9
|
+
],
|
|
10
|
+
user: [
|
|
11
|
+
'Show current user info',
|
|
12
|
+
async () => (await import('./commands/user.js')).registerUserCommand,
|
|
13
|
+
],
|
|
14
|
+
channel: [
|
|
15
|
+
'List channels in a workspace',
|
|
16
|
+
async () => (await import('./commands/channel.js')).registerChannelCommand,
|
|
17
|
+
],
|
|
18
|
+
inbox: [
|
|
19
|
+
'Show inbox threads',
|
|
20
|
+
async () => (await import('./commands/inbox.js')).registerInboxCommand,
|
|
21
|
+
],
|
|
22
|
+
thread: [
|
|
23
|
+
'Thread operations',
|
|
24
|
+
async () => (await import('./commands/thread.js')).registerThreadCommand,
|
|
25
|
+
],
|
|
26
|
+
msg: [
|
|
27
|
+
'Conversation (DM/group) operations',
|
|
28
|
+
async () => (await import('./commands/msg.js')).registerMsgCommand,
|
|
29
|
+
],
|
|
30
|
+
search: [
|
|
31
|
+
'Search content across a workspace',
|
|
32
|
+
async () => (await import('./commands/search.js')).registerSearchCommand,
|
|
33
|
+
],
|
|
34
|
+
react: [
|
|
35
|
+
'Add an emoji reaction (target-type: thread, comment, message)',
|
|
36
|
+
async () => (await import('./commands/react.js')).registerReactCommand,
|
|
37
|
+
],
|
|
38
|
+
auth: [
|
|
39
|
+
'Manage authentication',
|
|
40
|
+
async () => (await import('./commands/auth.js')).registerAuthCommand,
|
|
41
|
+
],
|
|
42
|
+
skill: [
|
|
43
|
+
'Manage agent skill integrations',
|
|
44
|
+
async () => (await import('./commands/skill.js')).registerSkillCommand,
|
|
45
|
+
],
|
|
46
|
+
};
|
|
18
47
|
program
|
|
19
48
|
.name('tw')
|
|
20
49
|
.description('Twist CLI')
|
|
21
|
-
.version(version)
|
|
50
|
+
.version(pkg.version)
|
|
22
51
|
.option('--no-spinner', 'Disable loading animations')
|
|
23
52
|
.option('--progress-jsonl [path]', 'Output progress events as JSONL to stderr or file')
|
|
24
53
|
.option('--include-private-channels', 'Include private channels in output (env: TWIST_INCLUDE_PRIVATE_CHANNELS)')
|
|
@@ -26,15 +55,32 @@ program
|
|
|
26
55
|
Note for AI/LLM agents:
|
|
27
56
|
Use --json or --ndjson flags for unambiguous, parseable output.
|
|
28
57
|
Default JSON shows essential fields; use --full for all fields.`);
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
program.
|
|
58
|
+
// Register lightweight placeholders so --help lists all commands
|
|
59
|
+
for (const [name, [description]] of Object.entries(commands)) {
|
|
60
|
+
program.command(name).description(description);
|
|
61
|
+
}
|
|
62
|
+
// Detect which command is being invoked
|
|
63
|
+
const commandName = process.argv.slice(2).find((a) => !a.startsWith('-') && a in commands);
|
|
64
|
+
if (commandName && commands[commandName]) {
|
|
65
|
+
// Remove the placeholder so the real registration can take its place
|
|
66
|
+
const idx = program.commands.findIndex((c) => c.name() === commandName);
|
|
67
|
+
if (idx !== -1)
|
|
68
|
+
program.commands.splice(idx, 1);
|
|
69
|
+
const loader = commands[commandName][1];
|
|
70
|
+
startEarlySpinner();
|
|
71
|
+
try {
|
|
72
|
+
const register = await loader();
|
|
73
|
+
register(program);
|
|
74
|
+
}
|
|
75
|
+
catch (err) {
|
|
76
|
+
stopEarlySpinner();
|
|
77
|
+
throw err;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
try {
|
|
81
|
+
await program.parseAsync();
|
|
82
|
+
}
|
|
83
|
+
finally {
|
|
84
|
+
stopEarlySpinner();
|
|
85
|
+
}
|
|
40
86
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"markdown.d.ts","sourceRoot":"","sources":["../../src/lib/markdown.ts"],"names":[],"mappings":"AASA,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"markdown.d.ts","sourceRoot":"","sources":["../../src/lib/markdown.ts"],"names":[],"mappings":"AASA,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAQtD"}
|
package/dist/lib/markdown.js
CHANGED
|
@@ -1,10 +1,14 @@
|
|
|
1
1
|
import { marked } from 'marked';
|
|
2
2
|
import { markedTerminal } from 'marked-terminal';
|
|
3
|
-
|
|
3
|
+
let initialized = false;
|
|
4
4
|
function preprocessMentions(content) {
|
|
5
5
|
return content.replace(/\[([^\]]+)\]\((twist-mention:\/\/\d+)\)/g, '[@$1]($2)');
|
|
6
6
|
}
|
|
7
7
|
export function renderMarkdown(content) {
|
|
8
|
+
if (!initialized) {
|
|
9
|
+
marked.use(markedTerminal());
|
|
10
|
+
initialized = true;
|
|
11
|
+
}
|
|
8
12
|
const processed = preprocessMentions(content);
|
|
9
13
|
const rendered = marked.parse(processed, { async: false });
|
|
10
14
|
return rendered.trimEnd();
|
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,
|
|
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,SAAS,kBAAkB,CAAC,OAAe;IACvC,OAAO,OAAO,CAAC,OAAO,CAAC,0CAA0C,EAAE,WAAW,CAAC,CAAA;AACnF,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,OAAe;IAC1C,IAAI,CAAC,WAAW,EAAE,CAAC;QACf,MAAM,CAAC,GAAG,CAAC,cAAc,EAAgC,CAAC,CAAA;QAC1D,WAAW,GAAG,IAAI,CAAA;IACtB,CAAC;IACD,MAAM,SAAS,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAA;IAC7C,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,SAAS,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAW,CAAA;IACpE,OAAO,QAAQ,CAAC,OAAO,EAAE,CAAA;AAC7B,CAAC"}
|
package/dist/lib/spinner.d.ts
CHANGED
|
@@ -3,13 +3,17 @@ 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
|
+
/** For tests only — reset singleton state without stopping */
|
|
9
|
+
export declare function resetEarlySpinner(): void;
|
|
6
10
|
declare class LoadingSpinner {
|
|
7
11
|
private spinnerInstance;
|
|
12
|
+
private adopted;
|
|
8
13
|
start(options: SpinnerOptions): this;
|
|
9
14
|
succeed(text?: string): void;
|
|
10
15
|
fail(text?: string): void;
|
|
11
16
|
stop(): void;
|
|
12
|
-
private shouldDisableSpinner;
|
|
13
17
|
}
|
|
14
18
|
/**
|
|
15
19
|
* 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;AA8BD,wBAAgB,iBAAiB,IAAI,IAAI,CAcxC;AAED,wBAAgB,gBAAgB,IAAI,IAAI,CASvC;AAED,8DAA8D;AAC9D,wBAAgB,iBAAiB,IAAI,IAAI,CAGxC;AAID,cAAM,cAAc;IAChB,OAAO,CAAC,eAAe,CAA+C;IACtE,OAAO,CAAC,OAAO,CAAQ;IAEvB,KAAK,CAAC,OAAO,EAAE,cAAc;IAuB7B,OAAO,CAAC,IAAI,CAAC,EAAE,MAAM;IAcrB,IAAI,CAAC,IAAI,CAAC,EAAE,MAAM;IASlB,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"}
|
package/dist/lib/spinner.js
CHANGED
|
@@ -1,54 +1,110 @@
|
|
|
1
1
|
import chalk from 'chalk';
|
|
2
2
|
import yoctoSpinner from 'yocto-spinner';
|
|
3
|
+
function shouldDisableSpinner() {
|
|
4
|
+
// Check for environment variables that should disable spinners
|
|
5
|
+
if (process.env.TW_SPINNER === 'false') {
|
|
6
|
+
return true;
|
|
7
|
+
}
|
|
8
|
+
// Check if we're in CI environment
|
|
9
|
+
if (process.env.CI) {
|
|
10
|
+
return true;
|
|
11
|
+
}
|
|
12
|
+
// Check process arguments for flags that should disable spinner
|
|
13
|
+
const args = process.argv;
|
|
14
|
+
const spinnerDisablingFlags = ['--json', '--ndjson', '--no-spinner', '--progress-jsonl'];
|
|
15
|
+
// Check for both exact matches and prefix matches (to handle --flag=value variants)
|
|
16
|
+
return spinnerDisablingFlags.some((flag) => args.includes(flag) || // exact match
|
|
17
|
+
args.some((arg) => arg.startsWith(`${flag}=`)));
|
|
18
|
+
}
|
|
19
|
+
// ── Early spinner (shown before command module is loaded) ──────────────
|
|
20
|
+
let earlySpinnerInstance = null;
|
|
21
|
+
let originalStdoutWrite = null;
|
|
22
|
+
export function startEarlySpinner() {
|
|
23
|
+
if (!process.stdout.isTTY || shouldDisableSpinner()) {
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
earlySpinnerInstance = yoctoSpinner({ text: chalk.blue('Loading...') });
|
|
27
|
+
earlySpinnerInstance.start();
|
|
28
|
+
// Intercept stdout.write so the spinner auto-stops before any command output
|
|
29
|
+
originalStdoutWrite = process.stdout.write.bind(process.stdout);
|
|
30
|
+
process.stdout.write = ((...args) => {
|
|
31
|
+
stopEarlySpinner();
|
|
32
|
+
return process.stdout.write(...args);
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
export function stopEarlySpinner() {
|
|
36
|
+
if (originalStdoutWrite) {
|
|
37
|
+
process.stdout.write = originalStdoutWrite;
|
|
38
|
+
originalStdoutWrite = null;
|
|
39
|
+
}
|
|
40
|
+
if (earlySpinnerInstance) {
|
|
41
|
+
earlySpinnerInstance.stop();
|
|
42
|
+
earlySpinnerInstance = null;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
/** For tests only — reset singleton state without stopping */
|
|
46
|
+
export function resetEarlySpinner() {
|
|
47
|
+
earlySpinnerInstance = null;
|
|
48
|
+
originalStdoutWrite = null;
|
|
49
|
+
}
|
|
50
|
+
// ── LoadingSpinner (used by API calls) ─────────────────────────────────
|
|
3
51
|
class LoadingSpinner {
|
|
4
52
|
spinnerInstance = null;
|
|
53
|
+
adopted = false;
|
|
5
54
|
start(options) {
|
|
6
55
|
// Don't show spinner in non-interactive environments, when disabled via options, or when JSON output is expected
|
|
7
|
-
if (!process.stdout.isTTY || options.noSpinner ||
|
|
56
|
+
if (!process.stdout.isTTY || options.noSpinner || shouldDisableSpinner()) {
|
|
57
|
+
return this;
|
|
58
|
+
}
|
|
59
|
+
// If an early spinner is running, adopt it instead of creating a new one
|
|
60
|
+
if (earlySpinnerInstance) {
|
|
61
|
+
this.spinnerInstance = earlySpinnerInstance;
|
|
62
|
+
this.spinnerInstance.text = chalk[options.color || 'blue'](options.text);
|
|
63
|
+
earlySpinnerInstance = null;
|
|
64
|
+
this.adopted = true;
|
|
8
65
|
return this;
|
|
9
66
|
}
|
|
10
67
|
const colorFn = chalk[options.color || 'blue'];
|
|
11
68
|
this.spinnerInstance = yoctoSpinner({
|
|
12
69
|
text: colorFn(options.text),
|
|
13
|
-
// yocto-spinner uses dots spinner by default which matches NPM's braille pattern
|
|
14
70
|
});
|
|
15
71
|
this.spinnerInstance.start();
|
|
16
72
|
return this;
|
|
17
73
|
}
|
|
18
74
|
succeed(text) {
|
|
19
75
|
if (this.spinnerInstance) {
|
|
76
|
+
if (this.adopted) {
|
|
77
|
+
// Release back so subsequent API calls can re-adopt
|
|
78
|
+
earlySpinnerInstance = this.spinnerInstance;
|
|
79
|
+
this.spinnerInstance = null;
|
|
80
|
+
this.adopted = false;
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
20
83
|
this.spinnerInstance.success(text ? chalk.green(`✓ ${text}`) : undefined);
|
|
21
84
|
this.spinnerInstance = null;
|
|
22
85
|
}
|
|
23
86
|
}
|
|
24
87
|
fail(text) {
|
|
25
88
|
if (this.spinnerInstance) {
|
|
89
|
+
// Errors always stop the spinner for real
|
|
26
90
|
this.spinnerInstance.error(text ? chalk.red(`✗ ${text}`) : undefined);
|
|
27
91
|
this.spinnerInstance = null;
|
|
92
|
+
this.adopted = false;
|
|
28
93
|
}
|
|
29
94
|
}
|
|
30
95
|
stop() {
|
|
31
96
|
if (this.spinnerInstance) {
|
|
97
|
+
if (this.adopted) {
|
|
98
|
+
// Release back so subsequent API calls can re-adopt
|
|
99
|
+
earlySpinnerInstance = this.spinnerInstance;
|
|
100
|
+
this.spinnerInstance = null;
|
|
101
|
+
this.adopted = false;
|
|
102
|
+
return;
|
|
103
|
+
}
|
|
32
104
|
this.spinnerInstance.stop();
|
|
33
105
|
this.spinnerInstance = null;
|
|
34
106
|
}
|
|
35
107
|
}
|
|
36
|
-
shouldDisableSpinner() {
|
|
37
|
-
// Check for environment variables that should disable spinners
|
|
38
|
-
if (process.env.TW_SPINNER === 'false') {
|
|
39
|
-
return true;
|
|
40
|
-
}
|
|
41
|
-
// Check if we're in CI environment
|
|
42
|
-
if (process.env.CI) {
|
|
43
|
-
return true;
|
|
44
|
-
}
|
|
45
|
-
// Check process arguments for flags that should disable spinner
|
|
46
|
-
const args = process.argv;
|
|
47
|
-
const spinnerDisablingFlags = ['--json', '--ndjson', '--no-spinner', '--progress-jsonl'];
|
|
48
|
-
// Check for both exact matches and prefix matches (to handle --flag=value variants)
|
|
49
|
-
return spinnerDisablingFlags.some((flag) => args.includes(flag) || // exact match
|
|
50
|
-
args.some((arg) => arg.startsWith(`${flag}=`)));
|
|
51
|
-
}
|
|
52
108
|
}
|
|
53
109
|
/**
|
|
54
110
|
* High-level wrapper function for running async operations with a loading spinner.
|
package/dist/lib/spinner.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spinner.js","sourceRoot":"","sources":["../../src/lib/spinner.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,YAAY,MAAM,eAAe,CAAA;AAQxC,
|
|
1
|
+
{"version":3,"file":"spinner.js","sourceRoot":"","sources":["../../src/lib/spinner.ts"],"names":[],"mappings":"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"}
|