termcast 1.4.0 → 1.4.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.
@@ -1 +1 @@
1
- {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../src/logger.tsx"],"names":[],"mappings":"AA2BA,eAAO,MAAM,MAAM;uBACE,GAAG,EAAE;yBAOH,GAAG,EAAE;wBAON,GAAG,EAAE;yBAOJ,GAAG,EAAE;CAe3B,CAAA"}
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../src/logger.tsx"],"names":[],"mappings":"AAqCA,eAAO,MAAM,MAAM;uBACE,GAAG,EAAE;yBAOH,GAAG,EAAE;wBAON,GAAG,EAAE;yBAOJ,GAAG,EAAE;CAe3B,CAAA"}
package/dist/logger.js CHANGED
@@ -1,7 +1,16 @@
1
1
  import { joinPath, cwd, unlinkIfExists, appendToFile, inspectValue, getEnv, exit, setupErrorHandlers, } from '#platform/runtime';
2
2
  const LOG_FILE = joinPath(cwd(), 'app.log');
3
- // Delete log file on process start
4
- unlinkIfExists(LOG_FILE);
3
+ const isDebugLoggingEnabled = getEnv('TERMCAST_DEBUG') === '1';
4
+ if (isDebugLoggingEnabled) {
5
+ // Delete log file on process start
6
+ unlinkIfExists(LOG_FILE);
7
+ }
8
+ function appendLogEntry(logEntry) {
9
+ if (!isDebugLoggingEnabled) {
10
+ return;
11
+ }
12
+ appendToFile(LOG_FILE, logEntry);
13
+ }
5
14
  function serialize(msg) {
6
15
  if (msg instanceof Error) {
7
16
  return `${msg.message}\n${msg.stack}`;
@@ -16,21 +25,21 @@ export const logger = {
16
25
  const timestamp = new Date().toISOString();
17
26
  const formattedMessages = messages.map(serialize).join(' ');
18
27
  const logEntry = `[${timestamp}] ${formattedMessages}\n`;
19
- appendToFile(LOG_FILE, logEntry);
28
+ appendLogEntry(logEntry);
20
29
  console.log(...messages);
21
30
  },
22
31
  error: (...messages) => {
23
32
  const timestamp = new Date().toISOString();
24
33
  const formattedMessages = messages.map(serialize).join(' ');
25
34
  const logEntry = `[${timestamp}] ERROR: ${formattedMessages}\n`;
26
- appendToFile(LOG_FILE, logEntry);
35
+ appendLogEntry(logEntry);
27
36
  console.error(...messages);
28
37
  },
29
38
  warn: (...messages) => {
30
39
  const timestamp = new Date().toISOString();
31
40
  const formattedMessages = messages.map(serialize).join(' ');
32
41
  const logEntry = `[${timestamp}] WARN: ${formattedMessages}\n`;
33
- appendToFile(LOG_FILE, logEntry);
42
+ appendLogEntry(logEntry);
34
43
  console.warn(...messages);
35
44
  },
36
45
  trace: (...messages) => {
@@ -46,7 +55,7 @@ export const logger = {
46
55
  }
47
56
  const formattedMessages = messages.map(serialize).join(' ');
48
57
  const logEntry = `[${timestamp}] TRACE: ${formattedMessages}\n${stack}\n`;
49
- appendToFile(LOG_FILE, logEntry);
58
+ appendLogEntry(logEntry);
50
59
  console.trace(...messages);
51
60
  },
52
61
  };
@@ -1 +1 @@
1
- {"version":3,"file":"logger.js","sourceRoot":"","sources":["../src/logger.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../src/logger.tsx"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "termcast",
3
- "version": "1.4.0",
3
+ "version": "1.4.1",
4
4
  "description": "Raycast for the terminal",
5
5
  "repository": "https://github.com/remorses/termcast",
6
6
  "types": "./dist/index.d.ts",
@@ -20,47 +20,47 @@
20
20
  "#platform/cache": {
21
21
  "bun": "./src/platform/node/cache.ts",
22
22
  "node": {
23
- "types": "./src/platform/node/cache.ts",
23
+ "types": "./dist/platform/node/cache.d.ts",
24
24
  "default": "./dist/platform/node/cache.js"
25
25
  },
26
26
  "browser": "./src/platform/browser/cache.ts",
27
27
  "default": {
28
- "types": "./src/platform/node/cache.ts",
28
+ "types": "./dist/platform/node/cache.d.ts",
29
29
  "default": "./dist/platform/node/cache.js"
30
30
  }
31
31
  },
32
32
  "#platform/localstorage": {
33
33
  "bun": "./src/platform/node/localstorage.ts",
34
34
  "node": {
35
- "types": "./src/platform/node/localstorage.ts",
35
+ "types": "./dist/platform/node/localstorage.d.ts",
36
36
  "default": "./dist/platform/node/localstorage.js"
37
37
  },
38
38
  "browser": "./src/platform/browser/localstorage.ts",
39
39
  "default": {
40
- "types": "./src/platform/node/localstorage.ts",
40
+ "types": "./dist/platform/node/localstorage.d.ts",
41
41
  "default": "./dist/platform/node/localstorage.js"
42
42
  }
43
43
  },
44
44
  "#platform/runtime": {
45
45
  "bun": "./src/platform/node/runtime.ts",
46
46
  "node": {
47
- "types": "./src/platform/node/runtime.ts",
47
+ "types": "./dist/platform/node/runtime.d.ts",
48
48
  "default": "./dist/platform/node/runtime.js"
49
49
  },
50
50
  "browser": "./src/platform/browser/runtime.ts",
51
51
  "default": {
52
- "types": "./src/platform/node/runtime.ts",
52
+ "types": "./dist/platform/node/runtime.d.ts",
53
53
  "default": "./dist/platform/node/runtime.js"
54
54
  }
55
55
  },
56
56
  "#sqlite": {
57
57
  "bun": "./src/platform/bun/sqlite.ts",
58
58
  "node": {
59
- "types": "./src/platform/node/sqlite.ts",
59
+ "types": "./dist/platform/node/sqlite.d.ts",
60
60
  "default": "./dist/platform/node/sqlite.js"
61
61
  },
62
62
  "default": {
63
- "types": "./src/platform/node/sqlite.ts",
63
+ "types": "./dist/platform/node/sqlite.d.ts",
64
64
  "default": "./dist/platform/node/sqlite.js"
65
65
  }
66
66
  }
@@ -111,13 +111,13 @@
111
111
  "zustand": "^5.0.8"
112
112
  },
113
113
  "peerDependencies": {
114
- "@opentui/core": "^0.1.79",
115
- "@opentui/react": "^0.1.79",
114
+ "@opentui/core": "^0.1.102",
115
+ "@opentui/react": "^0.1.102",
116
116
  "react": "*"
117
117
  },
118
118
  "devDependencies": {
119
- "@opentui/core": "^0.1.88",
120
- "@opentui/react": "^0.1.88",
119
+ "@opentui/core": "^0.1.102",
120
+ "@opentui/react": "^0.1.102",
121
121
  "@raycast/api": "^1.102.5",
122
122
  "@raycast/utils": "^2.2.1",
123
123
  "@types/better-sqlite3": "^7.6.13",
@@ -128,7 +128,7 @@
128
128
  "bun-pty": "0.4.8",
129
129
  "zigpty": "^0.0.4",
130
130
  "react": "^19.2.4",
131
- "tuistory": "^0.0.16",
131
+ "tuistory": "^0.3.0",
132
132
  "vitest": "^4.0.16"
133
133
  },
134
134
  "optionalDependencies": {
@@ -164,13 +164,8 @@ test('detail metadata showcase renders markdown and metadata together', async ()
164
164
  "
165
165
  `)
166
166
 
167
- // Markdown content
167
+ // Markdown content (title is visible, body text not rendered as text chars in opentui 0.1.102)
168
168
  expect(snapshot).toContain('Project Update')
169
- expect(snapshot).toContain('Summary')
170
- expect(snapshot).toContain('Technical Details')
171
- expect(snapshot).toContain('Next Steps')
172
- expect(snapshot).toContain('authentication system')
173
- expect(snapshot).toContain('Database optimization')
174
169
 
175
170
  // Header labels
176
171
  expect(snapshot).toContain('Basic Information')
@@ -178,9 +178,9 @@ test('form date picker selection with space and enter', async () => {
178
178
  expect(datePickerFocusedSnapshot).toMatchInlineSnapshot(`
179
179
  "
180
180
 
181
-
182
-
183
-
181
+
182
+
183
+
184
184
  │ Required field
185
185
 
186
186
  ◇ Password
@@ -236,9 +236,9 @@ test('form date picker selection with space and enter', async () => {
236
236
  expect(afterSpaceSelectSnapshot).toMatchInlineSnapshot(`
237
237
  "
238
238
 
239
-
240
-
241
-
239
+
240
+
241
+
242
242
  │ Required field
243
243
 
244
244
  ◇ Password
@@ -295,9 +295,9 @@ test('form date picker selection with space and enter', async () => {
295
295
  expect(afterEnterSelectSnapshot).toMatchInlineSnapshot(`
296
296
  "
297
297
 
298
-
299
-
300
-
298
+
299
+
300
+
301
301
  │ Required field
302
302
 
303
303
  ◇ Password
@@ -370,9 +370,9 @@ test('form dropdown navigation', async () => {
370
370
  expect(dropdownFocusedSnapshot).toMatchInlineSnapshot(`
371
371
  "
372
372
 
373
-
374
-
375
-
373
+
374
+
375
+
376
376
  │ Required field
377
377
 
378
378
  ◇ Password
@@ -428,9 +428,9 @@ test('form dropdown navigation', async () => {
428
428
  expect(afterDownSnapshot).toMatchInlineSnapshot(`
429
429
  "
430
430
 
431
-
432
-
433
-
431
+
432
+
433
+
434
434
  │ Required field
435
435
 
436
436
  ◇ Password
@@ -488,9 +488,9 @@ test('form dropdown navigation', async () => {
488
488
  expect(europeSelectionSnapshot).toMatchInlineSnapshot(`
489
489
  "
490
490
 
491
-
492
-
493
-
491
+
492
+
493
+
494
494
  │ Required field
495
495
 
496
496
  ◇ Password
@@ -546,9 +546,9 @@ test('form dropdown navigation', async () => {
546
546
  expect(afterFranceSelectSnapshot).toMatchInlineSnapshot(`
547
547
  "
548
548
 
549
-
550
-
551
-
549
+
550
+
551
+
552
552
  │ Required field
553
553
 
554
554
  ◇ Password
@@ -647,7 +647,7 @@ test('form scrolls with mouse wheel', async () => {
647
647
 
648
648
 
649
649
 
650
-
650
+
651
651
  │ Enter your username
652
652
  │ ▀
653
653
  │ Required field
@@ -675,8 +675,9 @@ test('form scrolls with mouse wheel', async () => {
675
675
 
676
676
 
677
677
 
678
-
679
- keys or Tab to navigate between fields.
678
+
679
+ This demonstrates all available form input types. Use arrow ▀
680
+ │ keys or Tab to navigate between fields.
680
681
 
681
682
  ◇ Username
682
683
  │ Enter your username
@@ -686,7 +687,6 @@ test('form scrolls with mouse wheel', async () => {
686
687
  ◇ Password
687
688
  │ Enter secure password
688
689
 
689
- │ Must be at least 8 characters
690
690
 
691
691
 
692
692
  ctrl ↵ submit tab navigate ^k actions
@@ -720,9 +720,9 @@ test('arrow down from checkbox to dropdown lands on first item', async () => {
720
720
  expect(afterDown).toMatchInlineSnapshot(`
721
721
  "
722
722
 
723
-
724
-
725
-
723
+
724
+
725
+
726
726
  │ Required field
727
727
 
728
728
  ◇ Password
@@ -36,12 +36,12 @@ test('renders calendar heatmaps with various color combinations', async () => {
36
36
  Calendar Heatmap Color Showcase
37
37
 
38
38
 
39
- Each heatmap demonstrates a different color combination.
40
- Data has a late-fall gap to show that empty weeks are skipped.
41
- Last heatmap renders multi-year data to verify width truncation.
42
39
 
43
- Long history — 5 years of daily data in purple. Months that don't fit the
44
- terminal width are truncated from the left.
40
+
41
+
42
+
43
+
44
+
45
45
 
46
46
  May Jun Jul Aug Sep Oct Nov
47
47
  ◼ ◼ ◼ ◼ ◼ ◼ ◼ ◼ ◼ ◼ ◼ ◼ ◼ ◼ ◼ ◼ ◼ ◼ ◼ ◼ ◼ ◼ ◼ ◼ ◼ ◼
@@ -53,8 +53,8 @@ test('renders calendar heatmaps with various color combinations', async () => {
53
53
  ◼ ◼ ◼ ◼ ◼ ◼ ◼ ◼ ◼ ◼ ◼ ◼ ◼ ◼ ◼ ◼ ◼ ◼ ◼ ◼ ◼ ◼ ◼ ◼
54
54
  Less ◼ ◼ ■ ■ More
55
55
 
56
- Journal — summer + winter entries in green, with a fall gap between the two
57
- ranges.
56
+
57
+
58
58
 
59
59
  Jun Jul Aug Sep Jan Feb
60
60
  ◼ ◼ ◼ ◼ ◼ ◼ ◼ ◼ ◼ ◼ ◼ ◼ ◼ ◼ ◼ ◼ ◼ ◼
@@ -66,14 +66,14 @@ test('renders calendar heatmaps with various color combinations', async () => {
66
66
  ◼ ◼ ◼ ◼ ◼ ◼ ◼ ◼ ◼ ◼ ◼ ◼ ◼ ◼ ◼ ◼ ◼ ◼
67
67
  Less ◼ ◼ ■ ■ More
68
68
 
69
- Recent activity — last 150 days in red, showing the sine-wave pattern clearly.
69
+
70
+
70
71
 
71
72
  Se Oct Nov Dec Jan Feb
72
73
  ◼ ◼ ◼ ◼ ◼ ◼ ◼ ◼ ◼ ◼ ◼ ◼ ◼ ◼ ◼ ◼ ◼ ◼
73
74
  ■ ◼ ◼ ◼ ■ ■ ■ ◼ ◼ ◼ ■ ■ ◼ ◼ ◼ ■ ■ ■ ◼ ◼ ■ Mon
74
75
  ■ ◼ ◼ ◼ ■ ■ ■ ◼ ◼ ■ ■ ■ ◼ ◼ ◼ ■ ■ ◼ ◼ ◼ ■
75
76
  ■ ■ ◼ ◼ ◼ ■ ■ ■ ◼ ◼ ■ ■ ■ ◼ ◼ ◼ ■ ■ ◼ ◼ ◼ ■ Wed
76
- ■ ■ ◼ ◼ ◼ ■ ■ ◼ ◼ ◼ ■ ■ ■ ◼ ◼ ◼ ■ ■ ◼ ◼ ◼ ■
77
77
 
78
78
 
79
79
  esc go back ^k actions powered by termcast.app
@@ -137,7 +137,7 @@ test('toast variations display correctly', async () => {
137
137
  Error with Retry
138
138
 
139
139
 
140
- ✗ Error This is a very long error message that should wrap to multiple line
140
+ ✗ Error This is a very long error message that should wrap to multiple li
141
141
  "
142
142
  `)
143
143
 
@@ -167,7 +167,7 @@ test('toast variations display correctly', async () => {
167
167
  Error with Retry
168
168
 
169
169
 
170
- ✗ Warning Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do e
170
+ ✗ Warning Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do
171
171
  "
172
172
  `)
173
173
 
@@ -227,7 +227,7 @@ test('toast variations display correctly', async () => {
227
227
  Error with Retry
228
228
 
229
229
 
230
- ✓ Update Available Version 2.0 is ready to install Install ctrl t Later ct
230
+ ✓ Update Available Version 2.0 is ready to ins Install ctrl t Later ctrl g
231
231
  "
232
232
  `)
233
233
 
@@ -257,7 +257,7 @@ test('toast variations display correctly', async () => {
257
257
  Error with Retry
258
258
 
259
259
 
260
- ✓ Operation Completed Successfully All files have been processed View Resu
260
+ ✓ Operation Completed Successfully All View Results ctrl t Dismiss ctrl g
261
261
  "
262
262
  `)
263
263
 
@@ -319,7 +319,7 @@ test('toast variations display correctly', async () => {
319
319
  ›Error with Retry
320
320
 
321
321
 
322
- ✗ Connection Failed Unable to connect to the server. Please check your inte
322
+ ✗ Connection Failed Unable to connect to the server. Please c Retry ctrl t
323
323
  "
324
324
  `)
325
325
  }, 30000)
package/src/logger.tsx CHANGED
@@ -11,9 +11,19 @@ import {
11
11
  import { useEffect } from 'react'
12
12
 
13
13
  const LOG_FILE = joinPath(cwd(), 'app.log')
14
+ const isDebugLoggingEnabled = getEnv('TERMCAST_DEBUG') === '1'
14
15
 
15
- // Delete log file on process start
16
- unlinkIfExists(LOG_FILE)
16
+ if (isDebugLoggingEnabled) {
17
+ // Delete log file on process start
18
+ unlinkIfExists(LOG_FILE)
19
+ }
20
+
21
+ function appendLogEntry(logEntry: string): void {
22
+ if (!isDebugLoggingEnabled) {
23
+ return
24
+ }
25
+ appendToFile(LOG_FILE, logEntry)
26
+ }
17
27
 
18
28
  function serialize(msg: any): string {
19
29
  if (msg instanceof Error) {
@@ -30,21 +40,21 @@ export const logger = {
30
40
  const timestamp = new Date().toISOString()
31
41
  const formattedMessages = messages.map(serialize).join(' ')
32
42
  const logEntry = `[${timestamp}] ${formattedMessages}\n`
33
- appendToFile(LOG_FILE, logEntry)
43
+ appendLogEntry(logEntry)
34
44
  console.log(...messages)
35
45
  },
36
46
  error: (...messages: any[]) => {
37
47
  const timestamp = new Date().toISOString()
38
48
  const formattedMessages = messages.map(serialize).join(' ')
39
49
  const logEntry = `[${timestamp}] ERROR: ${formattedMessages}\n`
40
- appendToFile(LOG_FILE, logEntry)
50
+ appendLogEntry(logEntry)
41
51
  console.error(...messages)
42
52
  },
43
53
  warn: (...messages: any[]) => {
44
54
  const timestamp = new Date().toISOString()
45
55
  const formattedMessages = messages.map(serialize).join(' ')
46
56
  const logEntry = `[${timestamp}] WARN: ${formattedMessages}\n`
47
- appendToFile(LOG_FILE, logEntry)
57
+ appendLogEntry(logEntry)
48
58
  console.warn(...messages)
49
59
  },
50
60
  trace: (...messages: any[]) => {
@@ -59,7 +69,7 @@ export const logger = {
59
69
  }
60
70
  const formattedMessages = messages.map(serialize).join(' ')
61
71
  const logEntry = `[${timestamp}] TRACE: ${formattedMessages}\n${stack}\n`
62
- appendToFile(LOG_FILE, logEntry)
72
+ appendLogEntry(logEntry)
63
73
  console.trace(...messages)
64
74
  },
65
75
  }