termcast 1.3.54 → 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.
Files changed (170) hide show
  1. package/dist/action-utils.d.ts.map +1 -1
  2. package/dist/action-utils.js +17 -132
  3. package/dist/action-utils.js.map +1 -1
  4. package/dist/apis/cache.d.ts +8 -30
  5. package/dist/apis/cache.d.ts.map +1 -1
  6. package/dist/apis/cache.js +9 -271
  7. package/dist/apis/cache.js.map +1 -1
  8. package/dist/apis/clipboard.d.ts +4 -2
  9. package/dist/apis/clipboard.d.ts.map +1 -1
  10. package/dist/apis/clipboard.js +18 -31
  11. package/dist/apis/clipboard.js.map +1 -1
  12. package/dist/apis/environment.d.ts.map +1 -1
  13. package/dist/apis/environment.js +14 -49
  14. package/dist/apis/environment.js.map +1 -1
  15. package/dist/apis/localstorage.d.ts +7 -12
  16. package/dist/apis/localstorage.d.ts.map +1 -1
  17. package/dist/apis/localstorage.js +7 -184
  18. package/dist/apis/localstorage.js.map +1 -1
  19. package/dist/app.d.ts.map +1 -1
  20. package/dist/app.js +16 -15
  21. package/dist/app.js.map +1 -1
  22. package/dist/cli.js +7 -6
  23. package/dist/cli.js.map +1 -1
  24. package/dist/components/actions.d.ts.map +1 -1
  25. package/dist/components/actions.js +13 -2
  26. package/dist/components/actions.js.map +1 -1
  27. package/dist/components/extension-preferences.d.ts.map +1 -1
  28. package/dist/components/extension-preferences.js +7 -8
  29. package/dist/components/extension-preferences.js.map +1 -1
  30. package/dist/components/form/file-autocomplete.js +2 -2
  31. package/dist/components/form/file-autocomplete.js.map +1 -1
  32. package/dist/components/list.d.ts.map +1 -1
  33. package/dist/components/list.js +242 -14
  34. package/dist/components/list.js.map +1 -1
  35. package/dist/e2e-node.d.ts.map +1 -1
  36. package/dist/e2e-node.js +5 -4
  37. package/dist/e2e-node.js.map +1 -1
  38. package/dist/extensions/dev.d.ts.map +1 -1
  39. package/dist/extensions/dev.js +5 -2
  40. package/dist/extensions/dev.js.map +1 -1
  41. package/dist/globals.d.ts.map +1 -1
  42. package/dist/globals.js +2 -1
  43. package/dist/globals.js.map +1 -1
  44. package/dist/internal/error-handler.d.ts.map +1 -1
  45. package/dist/internal/error-handler.js +21 -19
  46. package/dist/internal/error-handler.js.map +1 -1
  47. package/dist/internal/providers.d.ts.map +1 -1
  48. package/dist/internal/providers.js +41 -1
  49. package/dist/internal/providers.js.map +1 -1
  50. package/dist/logger.d.ts.map +1 -1
  51. package/dist/logger.js +40 -29
  52. package/dist/logger.js.map +1 -1
  53. package/dist/platform/browser/cache.d.ts +41 -0
  54. package/dist/platform/browser/cache.d.ts.map +1 -0
  55. package/dist/platform/browser/cache.js +262 -0
  56. package/dist/platform/browser/cache.js.map +1 -0
  57. package/dist/platform/browser/localstorage.d.ts +20 -0
  58. package/dist/platform/browser/localstorage.d.ts.map +1 -0
  59. package/dist/platform/browser/localstorage.js +102 -0
  60. package/dist/platform/browser/localstorage.js.map +1 -0
  61. package/dist/platform/browser/runtime.d.ts +51 -0
  62. package/dist/platform/browser/runtime.d.ts.map +1 -0
  63. package/dist/platform/browser/runtime.js +164 -0
  64. package/dist/platform/browser/runtime.js.map +1 -0
  65. package/dist/platform/bun/sqlite.d.ts +17 -0
  66. package/dist/platform/bun/sqlite.d.ts.map +1 -0
  67. package/dist/platform/bun/sqlite.js +6 -0
  68. package/dist/platform/bun/sqlite.js.map +1 -0
  69. package/dist/platform/node/cache.d.ts +35 -0
  70. package/dist/platform/node/cache.d.ts.map +1 -0
  71. package/dist/platform/node/cache.js +269 -0
  72. package/dist/platform/node/cache.js.map +1 -0
  73. package/dist/platform/node/localstorage.d.ts +17 -0
  74. package/dist/platform/node/localstorage.d.ts.map +1 -0
  75. package/dist/platform/node/localstorage.js +186 -0
  76. package/dist/platform/node/localstorage.js.map +1 -0
  77. package/dist/platform/node/runtime.d.ts +52 -0
  78. package/dist/platform/node/runtime.d.ts.map +1 -0
  79. package/dist/platform/node/runtime.js +230 -0
  80. package/dist/platform/node/runtime.js.map +1 -0
  81. package/dist/platform/node/sqlite.d.ts +27 -0
  82. package/dist/platform/node/sqlite.d.ts.map +1 -0
  83. package/dist/platform/node/sqlite.js +21 -0
  84. package/dist/platform/node/sqlite.js.map +1 -0
  85. package/dist/state.d.ts +5 -0
  86. package/dist/state.d.ts.map +1 -1
  87. package/dist/state.js +6 -28
  88. package/dist/state.js.map +1 -1
  89. package/dist/utils/file-system.d.ts.map +1 -1
  90. package/dist/utils/file-system.js +17 -22
  91. package/dist/utils/file-system.js.map +1 -1
  92. package/dist/utils.d.ts +1 -1
  93. package/dist/utils.d.ts.map +1 -1
  94. package/dist/utils.js +42 -47
  95. package/dist/utils.js.map +1 -1
  96. package/dist/vim-mode.d.ts +40 -0
  97. package/dist/vim-mode.d.ts.map +1 -0
  98. package/dist/vim-mode.js +135 -0
  99. package/dist/vim-mode.js.map +1 -0
  100. package/fonts/Inconsolata.otf +0 -0
  101. package/fonts/SIL Open Font License.txt +41 -0
  102. package/package.json +62 -10
  103. package/src/action-utils.tsx +27 -124
  104. package/src/apis/cache.test.ts +1 -1
  105. package/src/apis/cache.tsx +9 -373
  106. package/src/apis/clipboard.tsx +29 -38
  107. package/src/apis/environment.tsx +25 -52
  108. package/src/apis/localstorage.tsx +8 -214
  109. package/src/app.tsx +16 -15
  110. package/src/cli.tsx +14 -15
  111. package/src/compile.vitest.tsx +2 -2
  112. package/src/components/actions.tsx +19 -1
  113. package/src/components/extension-preferences.tsx +7 -8
  114. package/src/components/form/file-autocomplete.tsx +2 -2
  115. package/src/components/list.tsx +279 -14
  116. package/src/e2e-node.tsx +7 -7
  117. package/src/examples/action-shortcut.vitest.tsx +2 -2
  118. package/src/examples/actions-context.vitest.tsx +1 -1
  119. package/src/examples/bar-graph-weekly.vitest.tsx +10 -36
  120. package/src/examples/detail-metadata-showcase.vitest.tsx +37 -42
  121. package/src/examples/form-basic.vitest.tsx +45 -41
  122. package/src/examples/github.vitest.tsx +4 -4
  123. package/src/examples/graph-bar-chart.vitest.tsx +13 -11
  124. package/src/examples/graph-polymarket.vitest.tsx +2 -2
  125. package/src/examples/graph-row.vitest.tsx +66 -66
  126. package/src/examples/graph-styles.vitest.tsx +12 -12
  127. package/src/examples/internal/simple-scrollbox.vitest.tsx +14 -48
  128. package/src/examples/list-detail-metadata.vitest.tsx +5 -5
  129. package/src/examples/list-fetch-data.vitest.tsx +3 -3
  130. package/src/examples/list-item-accessories.vitest.tsx +2 -2
  131. package/src/examples/list-loading-empty-view.vitest.tsx +1 -1
  132. package/src/examples/list-no-actions.vitest.tsx +2 -2
  133. package/src/examples/list-scrollbox.vitest.tsx +5 -5
  134. package/src/examples/list-spacing-mode.vitest.tsx +3 -3
  135. package/src/examples/list-with-detail.vitest.tsx +68 -68
  136. package/src/examples/list-with-dropdown.vitest.tsx +5 -5
  137. package/src/examples/list-with-sections.vitest.tsx +27 -27
  138. package/src/examples/simple-candle-chart.vitest.tsx +7 -7
  139. package/src/examples/simple-detail-markdown.vitest.tsx +8 -8
  140. package/src/examples/simple-detail-table.vitest.tsx +8 -8
  141. package/src/examples/simple-graph.vitest.tsx +3 -3
  142. package/src/examples/simple-grid.vitest.tsx +14 -14
  143. package/src/examples/simple-heatmap.vitest.tsx +10 -10
  144. package/src/examples/simple-navigation.vitest.tsx +17 -17
  145. package/src/examples/simple-progress-bar.vitest.tsx +1 -1
  146. package/src/examples/store.vitest.tsx +1 -1
  147. package/src/examples/swift-extension.vitest.tsx +2 -2
  148. package/src/examples/table-edge-cases.vitest.tsx +18 -18
  149. package/src/examples/toast-action.vitest.tsx +2 -2
  150. package/src/examples/toast-variations.vitest.tsx +5 -5
  151. package/src/extensions/dev.tsx +5 -2
  152. package/src/extensions/dev.vitest.tsx +3 -3
  153. package/src/globals.ts +2 -1
  154. package/src/internal/error-handler.tsx +19 -21
  155. package/src/internal/providers.tsx +39 -0
  156. package/src/logger.tsx +48 -41
  157. package/src/platform/browser/cache.ts +327 -0
  158. package/src/platform/browser/localstorage.ts +119 -0
  159. package/src/platform/browser/runtime.ts +209 -0
  160. package/src/platform/bun/sqlite.ts +19 -0
  161. package/src/platform/node/cache.ts +372 -0
  162. package/src/platform/node/localstorage.ts +214 -0
  163. package/src/platform/node/runtime.ts +264 -0
  164. package/src/platform/node/sqlite.ts +43 -0
  165. package/src/state.tsx +17 -28
  166. package/src/utils/file-system.ts +17 -22
  167. package/src/utils.test.tsx +1 -1
  168. package/src/utils.tsx +56 -47
  169. package/src/vim-mode.tsx +153 -0
  170. package/src/apis/sqlite.ts +0 -14
@@ -1 +1 @@
1
- {"version":3,"file":"action-utils.d.ts","sourceRoot":"","sources":["../src/action-utils.tsx"],"names":[],"mappings":"AAwBA;;GAEG;AACH,wBAAsB,eAAe,CACnC,OAAO,EAAE,MAAM,GAAG,MAAM,EACxB,SAAS,CAAC,EAAE,OAAO,GAClB,OAAO,CAAC,IAAI,CAAC,CA6Bf;AAED;;GAEG;AACH,wBAAsB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAoB9D;AAED;;GAEG;AACH,wBAAsB,QAAQ,CAC5B,MAAM,EAAE,MAAM,EACd,WAAW,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC,IAAI,CAAC,CAyBf;AAED;;GAEG;AACH,wBAAsB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAgC1E;AAED;;GAEG;AACH,wBAAsB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAsB9D;AAED;;GAEG;AACH,wBAAsB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA8B7D"}
1
+ {"version":3,"file":"action-utils.d.ts","sourceRoot":"","sources":["../src/action-utils.tsx"],"names":[],"mappings":"AAaA;;GAEG;AACH,wBAAsB,eAAe,CACnC,OAAO,EAAE,MAAM,GAAG,MAAM,EACxB,SAAS,CAAC,EAAE,OAAO,GAClB,OAAO,CAAC,IAAI,CAAC,CAcf;AAED;;GAEG;AACH,wBAAsB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAO9D;AAED;;GAEG;AACH,wBAAsB,QAAQ,CAC5B,MAAM,EAAE,MAAM,EACd,WAAW,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC,IAAI,CAAC,CAOf;AAED;;GAEG;AACH,wBAAsB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA8B1E;AAED;;GAEG;AACH,wBAAsB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAO9D;AAED;;GAEG;AACH,wBAAsB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAO7D"}
@@ -1,53 +1,17 @@
1
- import { exec } from 'child_process';
2
- import { promisify } from 'util';
1
+ import { platform, getEnv, copyToClipboard as platformCopy, execWithInput, execCommand, openUrl, openFile as platformOpenFile, showInFileManager, moveToTrash as platformMoveToTrash, } from '#platform/runtime';
3
2
  import { logger } from 'termcast/src/logger';
4
- const execAsync = promisify(exec);
5
- const platform = process.platform;
6
- /**
7
- * Execute command with input (for commands like pbcopy that need stdin)
8
- */
9
- function execWithInput(command, input) {
10
- return new Promise((resolve, reject) => {
11
- const child = exec(command, (error) => {
12
- if (error) {
13
- reject(error);
14
- }
15
- else {
16
- resolve();
17
- }
18
- });
19
- child.stdin?.write(input);
20
- child.stdin?.end();
21
- });
22
- }
23
3
  /**
24
4
  * Copy text to clipboard
25
5
  */
26
6
  export async function copyToClipboard(content, concealed) {
27
7
  const text = String(content);
28
- if (process.env.VITEST) {
8
+ if (getEnv('VITEST')) {
29
9
  logger.log(`📋 [VITEST] Skipping copy to clipboard: ${concealed ? '[CONCEALED]' : text}`);
30
10
  return;
31
11
  }
32
12
  try {
33
- if (platform === 'darwin') {
34
- // macOS: use pbcopy
35
- await execWithInput('pbcopy', text);
36
- logger.log(`📋 Copied to clipboard: ${concealed ? '[CONCEALED]' : text}`);
37
- }
38
- else if (platform === 'linux') {
39
- // Linux: use xclip if available
40
- await execWithInput('xclip -selection clipboard', text);
41
- logger.log(`📋 Copied to clipboard: ${concealed ? '[CONCEALED]' : text}`);
42
- }
43
- else if (platform === 'win32') {
44
- // Windows: use clip
45
- await execWithInput('clip', text);
46
- logger.log(`📋 Copied to clipboard: ${concealed ? '[CONCEALED]' : text}`);
47
- }
48
- else {
49
- logger.log(`📋 Copy to clipboard not supported on ${platform}: ${concealed ? '[CONCEALED]' : text}`);
50
- }
13
+ await platformCopy(text);
14
+ logger.log(`📋 Copied to clipboard: ${concealed ? '[CONCEALED]' : text}`);
51
15
  }
52
16
  catch (error) {
53
17
  logger.log(`📋 Failed to copy to clipboard: ${error}`);
@@ -58,24 +22,8 @@ export async function copyToClipboard(content, concealed) {
58
22
  */
59
23
  export async function openInBrowser(url) {
60
24
  try {
61
- if (platform === 'darwin') {
62
- // macOS: use open
63
- await execAsync(`open "${url}"`);
64
- logger.log(`🌐 Opened in browser: ${url}`);
65
- }
66
- else if (platform === 'linux') {
67
- // Linux: use xdg-open
68
- await execAsync(`xdg-open "${url}"`);
69
- logger.log(`🌐 Opened in browser: ${url}`);
70
- }
71
- else if (platform === 'win32') {
72
- // Windows: use start
73
- await execAsync(`start "${url}"`);
74
- logger.log(`🌐 Opened in browser: ${url}`);
75
- }
76
- else {
77
- logger.log(`🌐 Opening browser not supported on ${platform}: ${url}`);
78
- }
25
+ await openUrl(url);
26
+ logger.log(`🌐 Opened in browser: ${url}`);
79
27
  }
80
28
  catch (error) {
81
29
  logger.log(`🌐 Failed to open browser: ${error}`);
@@ -86,30 +34,8 @@ export async function openInBrowser(url) {
86
34
  */
87
35
  export async function openFile(target, application) {
88
36
  try {
89
- if (platform === 'darwin') {
90
- // macOS: use open with optional application
91
- if (application) {
92
- await execAsync(`open -a "${application}" "${target}"`);
93
- logger.log(`📂 Opened ${target} with ${application}`);
94
- }
95
- else {
96
- await execAsync(`open "${target}"`);
97
- logger.log(`📂 Opened ${target}`);
98
- }
99
- }
100
- else if (platform === 'linux') {
101
- // Linux: use xdg-open (doesn't support specific application)
102
- await execAsync(`xdg-open "${target}"`);
103
- logger.log(`📂 Opened ${target}`);
104
- }
105
- else if (platform === 'win32') {
106
- // Windows: use start
107
- await execAsync(`start "" "${target}"`);
108
- logger.log(`📂 Opened ${target}`);
109
- }
110
- else {
111
- logger.log(`📂 Opening files not supported on ${platform}: ${target}`);
112
- }
37
+ await platformOpenFile(target, application);
38
+ logger.log(`📂 Opened ${target}${application ? ` with ${application}` : ''}`);
113
39
  }
114
40
  catch (error) {
115
41
  logger.log(`📂 Failed to open file: ${error}`);
@@ -120,7 +46,7 @@ export async function openFile(target, application) {
120
46
  */
121
47
  export async function pasteContent(content) {
122
48
  const text = String(content);
123
- if (process.env.VITEST) {
49
+ if (getEnv('VITEST')) {
124
50
  logger.log(`📝 [VITEST] Skipping paste: ${text}`);
125
51
  return;
126
52
  }
@@ -128,23 +54,21 @@ export async function pasteContent(content) {
128
54
  if (platform === 'darwin') {
129
55
  // macOS: First copy to clipboard, then simulate Cmd+V
130
56
  await execWithInput('pbcopy', text);
131
- // Note: Simulating keypress requires additional tools like osascript
132
- await execAsync(`osascript -e 'tell application "System Events" to keystroke "v" using command down'`);
57
+ await execCommand(`osascript -e 'tell application "System Events" to keystroke "v" using command down'`);
133
58
  logger.log(`📝 Pasted: ${text}`);
134
59
  }
135
60
  else if (platform === 'linux') {
136
- // Linux: Copy to clipboard with xclip
137
61
  await execWithInput('xclip -selection clipboard', text);
138
- // Simulating paste would require xdotool or similar
139
62
  logger.log(`📝 Copied for paste: ${text}`);
140
63
  }
141
64
  else if (platform === 'win32') {
142
- // Windows: Copy to clipboard
143
65
  await execWithInput('clip', text);
144
66
  logger.log(`📝 Copied for paste: ${text}`);
145
67
  }
146
68
  else {
147
- logger.log(`📝 Paste not supported on ${platform}: ${text}`);
69
+ // browser or unknown copy to clipboard
70
+ await platformCopy(text);
71
+ logger.log(`📝 Copied for paste: ${text}`);
148
72
  }
149
73
  }
150
74
  catch (error) {
@@ -156,24 +80,8 @@ export async function pasteContent(content) {
156
80
  */
157
81
  export async function showInFinder(path) {
158
82
  try {
159
- if (platform === 'darwin') {
160
- // macOS: use open -R to reveal in Finder
161
- await execAsync(`open -R "${path}"`);
162
- logger.log(`📁 Revealed in Finder: ${path}`);
163
- }
164
- else if (platform === 'linux') {
165
- // Linux: open containing directory
166
- await execAsync(`xdg-open "$(dirname "${path}")"`);
167
- logger.log(`📁 Opened containing folder: ${path}`);
168
- }
169
- else if (platform === 'win32') {
170
- // Windows: use explorer with /select
171
- await execAsync(`explorer /select,"${path}"`);
172
- logger.log(`📁 Revealed in Explorer: ${path}`);
173
- }
174
- else {
175
- logger.log(`📁 Show in file manager not supported on ${platform}: ${path}`);
176
- }
83
+ await showInFileManager(path);
84
+ logger.log(`📁 Revealed in file manager: ${path}`);
177
85
  }
178
86
  catch (error) {
179
87
  logger.log(`📁 Failed to show in file manager: ${error}`);
@@ -184,31 +92,8 @@ export async function showInFinder(path) {
184
92
  */
185
93
  export async function moveToTrash(path) {
186
94
  try {
187
- if (platform === 'darwin') {
188
- // macOS: use osascript to move to trash
189
- await execAsync(`osascript -e 'tell application "Finder" to delete POSIX file "${path}"'`);
190
- logger.log(`🗑️ Moved to trash: ${path}`);
191
- }
192
- else if (platform === 'linux') {
193
- // Linux: use gio trash if available, otherwise move to trash directory
194
- try {
195
- await execAsync(`gio trash "${path}"`);
196
- }
197
- catch {
198
- // Fallback to moving to trash directory
199
- const trashDir = `${process.env.HOME}/.local/share/Trash/files`;
200
- await execAsync(`mkdir -p "${trashDir}" && mv "${path}" "${trashDir}/"`);
201
- }
202
- logger.log(`🗑️ Moved to trash: ${path}`);
203
- }
204
- else if (platform === 'win32') {
205
- // Windows: use PowerShell to move to recycle bin
206
- await execAsync(`powershell -command "Add-Type -AssemblyName Microsoft.VisualBasic; [Microsoft.VisualBasic.FileIO.FileSystem]::DeleteFile('${path}','OnlyErrorDialogs','SendToRecycleBin')"`);
207
- logger.log(`🗑️ Moved to recycle bin: ${path}`);
208
- }
209
- else {
210
- logger.log(`🗑️ Move to trash not supported on ${platform}: ${path}`);
211
- }
95
+ await platformMoveToTrash(path);
96
+ logger.log(`🗑️ Moved to trash: ${path}`);
212
97
  }
213
98
  catch (error) {
214
99
  logger.log(`🗑️ Failed to move to trash: ${error}`);
@@ -1 +1 @@
1
- {"version":3,"file":"action-utils.js","sourceRoot":"","sources":["../src/action-utils.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"action-utils.js","sourceRoot":"","sources":["../src/action-utils.tsx"],"names":[],"mappings":"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"}
@@ -1,33 +1,11 @@
1
- export declare class Cache {
2
- static get STORAGE_DIRECTORY_NAME(): string;
3
- static get DEFAULT_CAPACITY(): number;
4
- private db;
5
- private capacity;
6
- private namespace;
7
- private subscribers;
8
- private currentSize;
9
- constructor(options?: Cache.Options);
10
- get storageDirectory(): string;
11
- get(key: string): string | undefined;
12
- has(key: string): boolean;
13
- get isEmpty(): boolean;
14
- set(key: string, data: string): void;
15
- remove(key: string): boolean;
16
- clear(options?: {
17
- notifySubscribers: boolean;
18
- }): void;
19
- subscribe(subscriber: Cache.Subscriber): Cache.Subscription;
20
- private maintainCapacity;
21
- private notifySubscribers;
22
- }
23
- export declare namespace Cache {
24
- interface Options {
25
- namespace?: string;
26
- capacity?: number;
27
- }
28
- type Subscriber = (key: string | undefined, data: string | undefined) => void;
29
- type Subscription = () => void;
30
- }
1
+ /**
2
+ * Cache API — platform-agnostic facade.
3
+ *
4
+ * Re-exports the platform-specific Cache class from #platform/cache
5
+ * (SQLite on Node/Bun, IndexedDB on browser) and provides the shared
6
+ * `withCache` higher-order function on top.
7
+ */
8
+ export { Cache } from '#platform/cache';
31
9
  /**
32
10
  * Wraps an async function with caching capabilities.
33
11
  *
@@ -1 +1 @@
1
- {"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../../src/apis/cache.tsx"],"names":[],"mappings":"AA+IA,qBAAa,KAAK;IAChB,MAAM,KAAK,sBAAsB,IAAI,MAAM,CAG1C;IAED,MAAM,KAAK,gBAAgB,IAAI,MAAM,CAEpC;IAED,OAAO,CAAC,EAAE,CAAU;IACpB,OAAO,CAAC,QAAQ,CAAQ;IACxB,OAAO,CAAC,SAAS,CAAQ;IACzB,OAAO,CAAC,WAAW,CAAyB;IAC5C,OAAO,CAAC,WAAW,CAAY;gBAEnB,OAAO,CAAC,EAAE,KAAK,CAAC,OAAO;IA8CnC,IAAI,gBAAgB,IAAI,MAAM,CAE7B;IAED,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAqBpC,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAOzB,IAAI,OAAO,IAAI,OAAO,CAOrB;IAED,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI;IAmCpC,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAsB5B,KAAK,CAAC,OAAO,CAAC,EAAE;QAAE,iBAAiB,EAAE,OAAO,CAAA;KAAE,GAAG,IAAI;IAWrD,SAAS,CAAC,UAAU,EAAE,KAAK,CAAC,UAAU,GAAG,KAAK,CAAC,YAAY;IAU3D,OAAO,CAAC,gBAAgB;IAgCxB,OAAO,CAAC,iBAAiB;CAY1B;AAED,yBAAiB,KAAK,CAAC;IACrB,UAAiB,OAAO;QACtB,SAAS,CAAC,EAAE,MAAM,CAAA;QAClB,QAAQ,CAAC,EAAE,MAAM,CAAA;KAClB;IAED,KAAY,UAAU,GAAG,CACvB,GAAG,EAAE,MAAM,GAAG,SAAS,EACvB,IAAI,EAAE,MAAM,GAAG,SAAS,KACrB,IAAI,CAAA;IACT,KAAY,YAAY,GAAG,MAAM,IAAI,CAAA;CACtC;AAUD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6CG;AACH,wBAAgB,SAAS,CAAC,EAAE,SAAS,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,OAAO,CAAC,GAAG,CAAC,EACnE,EAAE,EAAE,EAAE,EACN,OAAO,CAAC,EAAE;IACR,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,KAAK,OAAO,CAAA;IACrD,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB,GACA,EAAE,GAAG;IAAE,UAAU,EAAE,MAAM,IAAI,CAAA;CAAE,CAgEjC"}
1
+ {"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../../src/apis/cache.tsx"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAA;AAmBvC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6CG;AACH,wBAAgB,SAAS,CAAC,EAAE,SAAS,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,OAAO,CAAC,GAAG,CAAC,EACnE,EAAE,EAAE,EAAE,EACN,OAAO,CAAC,EAAE;IACR,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,KAAK,OAAO,CAAA;IACrD,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB,GACA,EAAE,GAAG;IAAE,UAAU,EAAE,MAAM,IAAI,CAAA;CAAE,CAgEjC"}
@@ -1,104 +1,12 @@
1
- import { Database } from './sqlite';
2
- import * as path from 'path';
3
- import * as os from 'os';
4
- import * as fs from 'fs';
5
- import { logger } from '../logger';
6
- import { useStore } from '../state';
7
- const CACHE_TABLE_NAME = 'cache_entries';
8
- const DEFAULT_NAMESPACE = '__default__';
9
- const initializedDatabasePaths = new Set();
10
- let logicalTimestamp = Date.now();
11
- function nextTimestamp() {
12
- logicalTimestamp += 1;
13
- return logicalTimestamp;
14
- }
15
- function getCurrentDatabasePath() {
16
- const { extensionPath } = useStore.getState();
17
- const dbSuffix = process.env.TERMCAST_DB_SUFFIX?.replace(/[^a-zA-Z0-9_-]/g, '_');
18
- const dbFileName = dbSuffix ? `data-${dbSuffix}.db` : 'data.db';
19
- if (extensionPath) {
20
- return path.join(extensionPath, '.termcast-bundle', dbFileName);
21
- }
22
- // Fallback for examples/tests that don't set extensionPath
23
- return path.join(os.homedir(), '.termcast', '.termcast-bundle', dbFileName);
24
- }
25
- function getCurrentCacheDir(namespace) {
26
- const { extensionPath } = useStore.getState();
27
- const baseDir = extensionPath
28
- ? path.join(extensionPath, '.termcast-bundle', 'cache')
29
- : path.join(os.homedir(), '.termcast', '.termcast-bundle', 'cache');
30
- return namespace ? path.join(baseDir, namespace) : baseDir;
31
- }
32
- function getNamespace(namespace) {
33
- return namespace || DEFAULT_NAMESPACE;
34
- }
35
- function initializeDatabaseOnce({ db, dbPath }) {
36
- if (initializedDatabasePaths.has(dbPath)) {
37
- return;
38
- }
39
- db.exec('PRAGMA journal_mode = WAL');
40
- db.exec('PRAGMA wal_autocheckpoint = 1000');
41
- db.exec('PRAGMA synchronous = NORMAL');
42
- db.exec(`
43
- CREATE TABLE IF NOT EXISTS ${CACHE_TABLE_NAME} (
44
- namespace TEXT NOT NULL,
45
- key TEXT NOT NULL,
46
- data TEXT NOT NULL,
47
- size INTEGER NOT NULL,
48
- last_accessed_at INTEGER NOT NULL,
49
- updated_at INTEGER NOT NULL,
50
- PRIMARY KEY(namespace, key)
51
- )
52
- `);
53
- db.exec(`
54
- CREATE INDEX IF NOT EXISTS idx_${CACHE_TABLE_NAME}_namespace_lru
55
- ON ${CACHE_TABLE_NAME}(namespace, last_accessed_at)
56
- `);
57
- cleanupLegacyCacheTables(db);
58
- initializedDatabasePaths.add(dbPath);
59
- }
60
- function cleanupLegacyCacheTables(db) {
61
- const rows = db
62
- .prepare(`SELECT name FROM sqlite_master
63
- WHERE type = 'table'
64
- AND (name = 'cache' OR name LIKE 'cache_%')
65
- AND name != ?`)
66
- .all(CACHE_TABLE_NAME);
67
- if (rows.length === 0) {
68
- return;
69
- }
70
- const tx = db.transaction(() => {
71
- const upsert = db.prepare(`INSERT INTO ${CACHE_TABLE_NAME} (namespace, key, data, size, last_accessed_at, updated_at)
72
- VALUES (?, ?, ?, ?, ?, ?)
73
- ON CONFLICT(namespace, key)
74
- DO UPDATE SET
75
- data = excluded.data,
76
- size = excluded.size,
77
- last_accessed_at = excluded.last_accessed_at,
78
- updated_at = excluded.updated_at`);
79
- for (const { name } of rows) {
80
- const namespace = name === 'cache'
81
- ? DEFAULT_NAMESPACE
82
- : name === 'cache_tanstack_query'
83
- ? 'tanstack-query'
84
- : `legacy:${name.slice('cache_'.length)}`;
85
- try {
86
- const values = db
87
- .prepare(`SELECT key, data, size, rowid FROM ${name}`)
88
- .all();
89
- values.forEach((entry) => {
90
- const timestamp = entry.rowid;
91
- upsert.run(namespace, entry.key, entry.data, entry.size, timestamp, timestamp);
92
- });
93
- }
94
- catch {
95
- // Ignore invalid legacy tables and continue cleanup.
96
- }
97
- db.exec(`DROP TABLE IF EXISTS ${name}`);
98
- }
99
- });
100
- tx();
101
- }
1
+ /**
2
+ * Cache API platform-agnostic facade.
3
+ *
4
+ * Re-exports the platform-specific Cache class from #platform/cache
5
+ * (SQLite on Node/Bun, IndexedDB on browser) and provides the shared
6
+ * `withCache` higher-order function on top.
7
+ */
8
+ export { Cache } from '#platform/cache';
9
+ import { Cache } from '#platform/cache';
102
10
  function hashString(value) {
103
11
  let hash = 0;
104
12
  for (let i = 0; i < value.length; i++) {
@@ -106,176 +14,6 @@ function hashString(value) {
106
14
  }
107
15
  return Math.abs(hash).toString(36);
108
16
  }
109
- export class Cache {
110
- static get STORAGE_DIRECTORY_NAME() {
111
- const extensionPath = useStore.getState().extensionPath;
112
- return extensionPath ? 'cache' : '.termcast-cache';
113
- }
114
- static get DEFAULT_CAPACITY() {
115
- return 10 * 1024 * 1024; // 10 MB
116
- }
117
- db;
118
- capacity;
119
- namespace;
120
- subscribers = [];
121
- currentSize = 0;
122
- constructor(options) {
123
- const sqliteLoadStart = Date.now();
124
- this.capacity = options?.capacity || Cache.DEFAULT_CAPACITY;
125
- this.namespace = getNamespace(options?.namespace);
126
- const dbPath = getCurrentDatabasePath();
127
- // Ensure parent directory exists
128
- const dbDir = path.dirname(dbPath);
129
- if (!fs.existsSync(dbDir)) {
130
- fs.mkdirSync(dbDir, { recursive: true });
131
- }
132
- this.db = new Database(dbPath, {
133
- create: true,
134
- readwrite: true,
135
- });
136
- initializeDatabaseOnce({ db: this.db, dbPath });
137
- // Calculate initial size
138
- const row = this.db
139
- .prepare(`SELECT COALESCE(SUM(size), 0) as total FROM ${CACHE_TABLE_NAME} WHERE namespace = ?`)
140
- .get(this.namespace);
141
- this.currentSize = row?.total || 0;
142
- const sqliteLoadMs = Date.now() - sqliteLoadStart;
143
- if (sqliteLoadMs > 500) {
144
- logger.log(`[perf] sqlite cache init took ${sqliteLoadMs}ms (namespace=${this.namespace})`);
145
- }
146
- // Bind all methods to this instance
147
- this.get = this.get.bind(this);
148
- this.has = this.has.bind(this);
149
- this.set = this.set.bind(this);
150
- this.remove = this.remove.bind(this);
151
- this.clear = this.clear.bind(this);
152
- this.subscribe = this.subscribe.bind(this);
153
- this.maintainCapacity = this.maintainCapacity.bind(this);
154
- this.notifySubscribers = this.notifySubscribers.bind(this);
155
- }
156
- get storageDirectory() {
157
- return getCurrentCacheDir(this.namespace);
158
- }
159
- get(key) {
160
- const now = nextTimestamp();
161
- const row = this.db
162
- .prepare(`SELECT data, size FROM ${CACHE_TABLE_NAME} WHERE namespace = ? AND key = ?`)
163
- .get(this.namespace, key);
164
- if (row) {
165
- this.db
166
- .prepare(`UPDATE ${CACHE_TABLE_NAME} SET last_accessed_at = ? WHERE namespace = ? AND key = ?`)
167
- .run(now, this.namespace, key);
168
- return row.data;
169
- }
170
- return undefined;
171
- }
172
- has(key) {
173
- const row = this.db
174
- .prepare(`SELECT 1 FROM ${CACHE_TABLE_NAME} WHERE namespace = ? AND key = ?`)
175
- .get(this.namespace, key);
176
- return !!row;
177
- }
178
- get isEmpty() {
179
- const row = this.db
180
- .prepare(`SELECT COUNT(*) as count FROM ${CACHE_TABLE_NAME} WHERE namespace = ?`)
181
- .get(this.namespace);
182
- return row.count === 0;
183
- }
184
- set(key, data) {
185
- const now = nextTimestamp();
186
- const dataSize = Buffer.byteLength(data, 'utf8');
187
- // Get existing size if any
188
- const existingRow = this.db
189
- .prepare(`SELECT size FROM ${CACHE_TABLE_NAME} WHERE namespace = ? AND key = ?`)
190
- .get(this.namespace, key);
191
- const oldSize = existingRow?.size || 0;
192
- const newTotalSize = this.currentSize - oldSize + dataSize;
193
- if (newTotalSize > this.capacity) {
194
- this.maintainCapacity(newTotalSize - this.capacity);
195
- }
196
- // Insert or update the cache entry
197
- this.db
198
- .prepare(`INSERT INTO ${CACHE_TABLE_NAME} (namespace, key, data, size, last_accessed_at, updated_at)
199
- VALUES (?, ?, ?, ?, ?, ?)
200
- ON CONFLICT(namespace, key)
201
- DO UPDATE SET
202
- data = excluded.data,
203
- size = excluded.size,
204
- last_accessed_at = excluded.last_accessed_at,
205
- updated_at = excluded.updated_at`)
206
- .run(this.namespace, key, data, dataSize, now, now);
207
- this.currentSize = this.currentSize - oldSize + dataSize;
208
- this.notifySubscribers(key, data);
209
- }
210
- remove(key) {
211
- // Check if key exists and get its size
212
- const row = this.db
213
- .prepare(`SELECT size FROM ${CACHE_TABLE_NAME} WHERE namespace = ? AND key = ?`)
214
- .get(this.namespace, key);
215
- if (row) {
216
- // Delete the key
217
- this.db
218
- .prepare(`DELETE FROM ${CACHE_TABLE_NAME} WHERE namespace = ? AND key = ?`)
219
- .run(this.namespace, key);
220
- this.currentSize -= row.size;
221
- this.notifySubscribers(key, undefined);
222
- return true;
223
- }
224
- return false;
225
- }
226
- clear(options) {
227
- this.db
228
- .prepare(`DELETE FROM ${CACHE_TABLE_NAME} WHERE namespace = ?`)
229
- .run(this.namespace);
230
- this.currentSize = 0;
231
- if (options?.notifySubscribers !== false) {
232
- this.notifySubscribers(undefined, undefined);
233
- }
234
- }
235
- subscribe(subscriber) {
236
- this.subscribers.push(subscriber);
237
- return () => {
238
- const index = this.subscribers.indexOf(subscriber);
239
- if (index > -1) {
240
- this.subscribers.splice(index, 1);
241
- }
242
- };
243
- }
244
- maintainCapacity(bytesToFree) {
245
- // Order by oldest last-access time first to evict least-recently-used rows.
246
- const rows = this.db
247
- .prepare(`SELECT key, size FROM ${CACHE_TABLE_NAME}
248
- WHERE namespace = ?
249
- ORDER BY last_accessed_at ASC`)
250
- .all(this.namespace);
251
- let freedBytes = 0;
252
- const keysToRemove = [];
253
- for (const row of rows) {
254
- if (freedBytes >= bytesToFree) {
255
- break;
256
- }
257
- keysToRemove.push(row.key);
258
- freedBytes += row.size;
259
- }
260
- if (keysToRemove.length > 0) {
261
- const placeholders = keysToRemove.map(() => '?').join(',');
262
- const stmt = this.db.prepare(`DELETE FROM ${CACHE_TABLE_NAME}
263
- WHERE namespace = ? AND key IN (${placeholders})`);
264
- stmt.run(this.namespace, ...keysToRemove);
265
- this.currentSize -= freedBytes;
266
- }
267
- }
268
- notifySubscribers(key, data) {
269
- for (const subscriber of this.subscribers) {
270
- try {
271
- subscriber(key, data);
272
- }
273
- catch (error) {
274
- logger.error('Cache subscriber error:', error);
275
- }
276
- }
277
- }
278
- }
279
17
  const functionCacheMap = new Map();
280
18
  const functionCacheData = new Map();
281
19
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"cache.js","sourceRoot":"","sources":["../../src/apis/cache.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cache.js","sourceRoot":"","sources":["../../src/apis/cache.tsx"],"names":[],"mappings":"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"}
@@ -1,4 +1,3 @@
1
- import type { PathLike } from 'node:fs';
2
1
  interface ClipboardType {
3
2
  copy: (content: string | number | Clipboard.Content, options?: Clipboard.CopyOptions) => Promise<void>;
4
3
  clear: () => Promise<void>;
@@ -20,7 +19,10 @@ export declare namespace Clipboard {
20
19
  type Content = {
21
20
  text: string;
22
21
  } | {
23
- file: PathLike;
22
+ file: string | {
23
+ href: string;
24
+ toString(): string;
25
+ };
24
26
  } | {
25
27
  html: string;
26
28
  text?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"clipboard.d.ts","sourceRoot":"","sources":["../../src/apis/clipboard.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AAkDvC,UAAU,aAAa;IACrB,IAAI,EAAE,CACJ,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC,OAAO,EAC5C,OAAO,CAAC,EAAE,SAAS,CAAC,WAAW,KAC5B,OAAO,CAAC,IAAI,CAAC,CAAA;IAClB,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;IAC1B,KAAK,EAAE,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IACtE,IAAI,EAAE,CAAC,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,KAAK,OAAO,CAAC,SAAS,CAAC,WAAW,CAAC,CAAA;IACvE,QAAQ,EAAE,CAAC,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,KAAK,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAA;CACzE;AAED,eAAO,MAAM,SAAS,EAAE,aAmHvB,CAAA;AAED,yBAAiB,SAAS,CAAC;IACzB,KAAY,WAAW,GAAG;QACxB,IAAI,EAAE,MAAM,CAAA;QACZ,IAAI,CAAC,EAAE,MAAM,CAAA;QACb,IAAI,CAAC,EAAE,MAAM,CAAA;KACd,CAAA;IAED,KAAY,OAAO,GACf;QACE,IAAI,EAAE,MAAM,CAAA;KACb,GACD;QACE,IAAI,EAAE,QAAQ,CAAA;KACf,GACD;QACE,IAAI,EAAE,MAAM,CAAA;QACZ,IAAI,CAAC,EAAE,MAAM,CAAA;KACd,CAAA;IAEL,KAAY,WAAW,GAAG;QACxB,SAAS,CAAC,EAAE,OAAO,CAAA;KACpB,CAAA;CACF;AAED,eAAO,MAAM,mBAAmB,YAtJnB,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC,OAAO,YAClC,SAAS,CAAC,WAAW,KAC5B,OAAO,CAAC,IAAI,CAoJ8B,CAAA;AACjD,eAAO,MAAM,cAAc,QApJZ,OAAO,CAAC,IAAI,CAoJkB,CAAA;AAC7C,eAAO,MAAM,SAAS,YApJH,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC,OAAO,KAAK,OAAO,CAAC,IAAI,CAoJ/B,CAAA"}
1
+ {"version":3,"file":"clipboard.d.ts","sourceRoot":"","sources":["../../src/apis/clipboard.tsx"],"names":[],"mappings":"AAkDA,UAAU,aAAa;IACrB,IAAI,EAAE,CACJ,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC,OAAO,EAC5C,OAAO,CAAC,EAAE,SAAS,CAAC,WAAW,KAC5B,OAAO,CAAC,IAAI,CAAC,CAAA;IAClB,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;IAC1B,KAAK,EAAE,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IACtE,IAAI,EAAE,CAAC,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,KAAK,OAAO,CAAC,SAAS,CAAC,WAAW,CAAC,CAAA;IACvE,QAAQ,EAAE,CAAC,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,KAAK,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAA;CACzE;AAED,eAAO,MAAM,SAAS,EAAE,aA0GvB,CAAA;AAED,yBAAiB,SAAS,CAAC;IACzB,KAAY,WAAW,GAAG;QACxB,IAAI,EAAE,MAAM,CAAA;QACZ,IAAI,CAAC,EAAE,MAAM,CAAA;QACb,IAAI,CAAC,EAAE,MAAM,CAAA;KACd,CAAA;IAED,KAAY,OAAO,GACf;QACE,IAAI,EAAE,MAAM,CAAA;KACb,GACD;QACE,IAAI,EAAE,MAAM,GAAG;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,QAAQ,IAAI,MAAM,CAAA;SAAE,CAAA;KACpD,GACD;QACE,IAAI,EAAE,MAAM,CAAA;QACZ,IAAI,CAAC,EAAE,MAAM,CAAA;KACd,CAAA;IAEL,KAAY,WAAW,GAAG;QACxB,SAAS,CAAC,EAAE,OAAO,CAAA;KACpB,CAAA;CACF;AAED,eAAO,MAAM,mBAAmB,YA7InB,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC,OAAO,YAClC,SAAS,CAAC,WAAW,KAC5B,OAAO,CAAC,IAAI,CA2I8B,CAAA;AACjD,eAAO,MAAM,cAAc,QA3IZ,OAAO,CAAC,IAAI,CA2IkB,CAAA;AAC7C,eAAO,MAAM,SAAS,YA3IH,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC,OAAO,KAAK,OAAO,CAAC,IAAI,CA2I/B,CAAA"}