termcast 1.3.54 → 1.4.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/action-utils.d.ts.map +1 -1
- package/dist/action-utils.js +17 -132
- package/dist/action-utils.js.map +1 -1
- package/dist/apis/cache.d.ts +8 -30
- package/dist/apis/cache.d.ts.map +1 -1
- package/dist/apis/cache.js +9 -271
- package/dist/apis/cache.js.map +1 -1
- package/dist/apis/clipboard.d.ts +4 -2
- package/dist/apis/clipboard.d.ts.map +1 -1
- package/dist/apis/clipboard.js +18 -31
- package/dist/apis/clipboard.js.map +1 -1
- package/dist/apis/environment.d.ts.map +1 -1
- package/dist/apis/environment.js +14 -49
- package/dist/apis/environment.js.map +1 -1
- package/dist/apis/localstorage.d.ts +7 -12
- package/dist/apis/localstorage.d.ts.map +1 -1
- package/dist/apis/localstorage.js +7 -184
- package/dist/apis/localstorage.js.map +1 -1
- package/dist/app.d.ts.map +1 -1
- package/dist/app.js +16 -15
- package/dist/app.js.map +1 -1
- package/dist/cli.js +7 -6
- package/dist/cli.js.map +1 -1
- package/dist/components/actions.d.ts.map +1 -1
- package/dist/components/actions.js +13 -2
- package/dist/components/actions.js.map +1 -1
- package/dist/components/extension-preferences.d.ts.map +1 -1
- package/dist/components/extension-preferences.js +7 -8
- package/dist/components/extension-preferences.js.map +1 -1
- package/dist/components/form/file-autocomplete.js +2 -2
- package/dist/components/form/file-autocomplete.js.map +1 -1
- package/dist/components/list.d.ts.map +1 -1
- package/dist/components/list.js +242 -14
- package/dist/components/list.js.map +1 -1
- package/dist/e2e-node.d.ts.map +1 -1
- package/dist/e2e-node.js +5 -4
- package/dist/e2e-node.js.map +1 -1
- package/dist/extensions/dev.d.ts.map +1 -1
- package/dist/extensions/dev.js +5 -2
- package/dist/extensions/dev.js.map +1 -1
- package/dist/globals.d.ts.map +1 -1
- package/dist/globals.js +2 -1
- package/dist/globals.js.map +1 -1
- package/dist/internal/error-handler.d.ts.map +1 -1
- package/dist/internal/error-handler.js +21 -19
- package/dist/internal/error-handler.js.map +1 -1
- package/dist/internal/providers.d.ts.map +1 -1
- package/dist/internal/providers.js +41 -1
- package/dist/internal/providers.js.map +1 -1
- package/dist/logger.d.ts.map +1 -1
- package/dist/logger.js +31 -29
- package/dist/logger.js.map +1 -1
- package/dist/platform/browser/cache.d.ts +41 -0
- package/dist/platform/browser/cache.d.ts.map +1 -0
- package/dist/platform/browser/cache.js +262 -0
- package/dist/platform/browser/cache.js.map +1 -0
- package/dist/platform/browser/localstorage.d.ts +20 -0
- package/dist/platform/browser/localstorage.d.ts.map +1 -0
- package/dist/platform/browser/localstorage.js +102 -0
- package/dist/platform/browser/localstorage.js.map +1 -0
- package/dist/platform/browser/runtime.d.ts +51 -0
- package/dist/platform/browser/runtime.d.ts.map +1 -0
- package/dist/platform/browser/runtime.js +164 -0
- package/dist/platform/browser/runtime.js.map +1 -0
- package/dist/platform/bun/sqlite.d.ts +17 -0
- package/dist/platform/bun/sqlite.d.ts.map +1 -0
- package/dist/platform/bun/sqlite.js +6 -0
- package/dist/platform/bun/sqlite.js.map +1 -0
- package/dist/platform/node/cache.d.ts +35 -0
- package/dist/platform/node/cache.d.ts.map +1 -0
- package/dist/platform/node/cache.js +269 -0
- package/dist/platform/node/cache.js.map +1 -0
- package/dist/platform/node/localstorage.d.ts +17 -0
- package/dist/platform/node/localstorage.d.ts.map +1 -0
- package/dist/platform/node/localstorage.js +186 -0
- package/dist/platform/node/localstorage.js.map +1 -0
- package/dist/platform/node/runtime.d.ts +52 -0
- package/dist/platform/node/runtime.d.ts.map +1 -0
- package/dist/platform/node/runtime.js +230 -0
- package/dist/platform/node/runtime.js.map +1 -0
- package/dist/platform/node/sqlite.d.ts +27 -0
- package/dist/platform/node/sqlite.d.ts.map +1 -0
- package/dist/platform/node/sqlite.js +21 -0
- package/dist/platform/node/sqlite.js.map +1 -0
- package/dist/state.d.ts +5 -0
- package/dist/state.d.ts.map +1 -1
- package/dist/state.js +6 -28
- package/dist/state.js.map +1 -1
- package/dist/utils/file-system.d.ts.map +1 -1
- package/dist/utils/file-system.js +17 -22
- package/dist/utils/file-system.js.map +1 -1
- package/dist/utils.d.ts +1 -1
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +42 -47
- package/dist/utils.js.map +1 -1
- package/dist/vim-mode.d.ts +40 -0
- package/dist/vim-mode.d.ts.map +1 -0
- package/dist/vim-mode.js +135 -0
- package/dist/vim-mode.js.map +1 -0
- package/fonts/Inconsolata.otf +0 -0
- package/fonts/SIL Open Font License.txt +41 -0
- package/package.json +60 -8
- package/src/action-utils.tsx +27 -124
- package/src/apis/cache.test.ts +1 -1
- package/src/apis/cache.tsx +9 -373
- package/src/apis/clipboard.tsx +29 -38
- package/src/apis/environment.tsx +25 -52
- package/src/apis/localstorage.tsx +8 -214
- package/src/app.tsx +16 -15
- package/src/cli.tsx +14 -15
- package/src/compile.vitest.tsx +2 -2
- package/src/components/actions.tsx +19 -1
- package/src/components/extension-preferences.tsx +7 -8
- package/src/components/form/file-autocomplete.tsx +2 -2
- package/src/components/list.tsx +279 -14
- package/src/e2e-node.tsx +7 -7
- package/src/examples/action-shortcut.vitest.tsx +2 -2
- package/src/examples/actions-context.vitest.tsx +1 -1
- package/src/examples/bar-graph-weekly.vitest.tsx +10 -36
- package/src/examples/detail-metadata-showcase.vitest.tsx +36 -36
- package/src/examples/form-basic.vitest.tsx +21 -17
- package/src/examples/github.vitest.tsx +4 -4
- package/src/examples/graph-bar-chart.vitest.tsx +13 -11
- package/src/examples/graph-polymarket.vitest.tsx +2 -2
- package/src/examples/graph-row.vitest.tsx +66 -66
- package/src/examples/graph-styles.vitest.tsx +12 -12
- package/src/examples/internal/simple-scrollbox.vitest.tsx +14 -48
- package/src/examples/list-detail-metadata.vitest.tsx +5 -5
- package/src/examples/list-fetch-data.vitest.tsx +3 -3
- package/src/examples/list-item-accessories.vitest.tsx +2 -2
- package/src/examples/list-loading-empty-view.vitest.tsx +1 -1
- package/src/examples/list-no-actions.vitest.tsx +2 -2
- package/src/examples/list-scrollbox.vitest.tsx +5 -5
- package/src/examples/list-spacing-mode.vitest.tsx +3 -3
- package/src/examples/list-with-detail.vitest.tsx +68 -68
- package/src/examples/list-with-dropdown.vitest.tsx +5 -5
- package/src/examples/list-with-sections.vitest.tsx +27 -27
- package/src/examples/simple-candle-chart.vitest.tsx +7 -7
- package/src/examples/simple-detail-markdown.vitest.tsx +8 -8
- package/src/examples/simple-detail-table.vitest.tsx +8 -8
- package/src/examples/simple-graph.vitest.tsx +3 -3
- package/src/examples/simple-grid.vitest.tsx +14 -14
- package/src/examples/simple-heatmap.vitest.tsx +1 -1
- package/src/examples/simple-navigation.vitest.tsx +17 -17
- package/src/examples/simple-progress-bar.vitest.tsx +1 -1
- package/src/examples/store.vitest.tsx +1 -1
- package/src/examples/swift-extension.vitest.tsx +2 -2
- package/src/examples/table-edge-cases.vitest.tsx +18 -18
- package/src/examples/toast-action.vitest.tsx +2 -2
- package/src/extensions/dev.tsx +5 -2
- package/src/extensions/dev.vitest.tsx +3 -3
- package/src/globals.ts +2 -1
- package/src/internal/error-handler.tsx +19 -21
- package/src/internal/providers.tsx +39 -0
- package/src/logger.tsx +38 -41
- package/src/platform/browser/cache.ts +327 -0
- package/src/platform/browser/localstorage.ts +119 -0
- package/src/platform/browser/runtime.ts +209 -0
- package/src/platform/bun/sqlite.ts +19 -0
- package/src/platform/node/cache.ts +372 -0
- package/src/platform/node/localstorage.ts +214 -0
- package/src/platform/node/runtime.ts +264 -0
- package/src/platform/node/sqlite.ts +43 -0
- package/src/state.tsx +17 -28
- package/src/utils/file-system.ts +17 -22
- package/src/utils.test.tsx +1 -1
- package/src/utils.tsx +56 -47
- package/src/vim-mode.tsx +153 -0
- package/src/apis/sqlite.ts +0 -14
package/dist/apis/clipboard.js
CHANGED
|
@@ -1,37 +1,29 @@
|
|
|
1
|
-
import
|
|
2
|
-
import path from 'node:path';
|
|
3
|
-
import { exec } from 'child_process';
|
|
4
|
-
import { promisify } from 'util';
|
|
1
|
+
import { platform, getEnv, fileExists, resolvePath, readClipboard as platformRead, execCommand, execWithInput, } from '#platform/runtime';
|
|
5
2
|
import { copyToClipboard, pasteContent } from 'termcast/src/action-utils';
|
|
6
3
|
import { logger } from 'termcast/src/logger';
|
|
7
|
-
const execAsync = promisify(exec);
|
|
8
|
-
const platform = process.platform;
|
|
9
4
|
async function copyFileToClipboard(filePath) {
|
|
10
|
-
const absolutePath =
|
|
11
|
-
if (
|
|
5
|
+
const absolutePath = resolvePath(filePath);
|
|
6
|
+
if (getEnv('VITEST')) {
|
|
12
7
|
logger.log(`📋 [VITEST] Skipping copy file to clipboard: ${filePath}`);
|
|
13
8
|
return;
|
|
14
9
|
}
|
|
15
|
-
if (!
|
|
10
|
+
if (!fileExists(absolutePath)) {
|
|
16
11
|
throw new Error(`File not found: ${absolutePath}`);
|
|
17
12
|
}
|
|
18
13
|
try {
|
|
19
14
|
if (platform === 'darwin') {
|
|
20
|
-
// macOS: Use osascript to copy file to clipboard
|
|
21
15
|
const script = `osascript -e 'set the clipboard to (POSIX file "${absolutePath}")'`;
|
|
22
|
-
await
|
|
16
|
+
await execCommand(script);
|
|
23
17
|
logger.log(`📋 Copied file to clipboard: ${filePath}`);
|
|
24
18
|
}
|
|
25
19
|
else if (platform === 'linux') {
|
|
26
|
-
// Linux: Copy file path as text and file URI
|
|
27
20
|
const fileUri = `file://${absolutePath}`;
|
|
28
|
-
await
|
|
21
|
+
await execWithInput('xclip -selection clipboard -t text/uri-list', fileUri);
|
|
29
22
|
logger.log(`📋 Copied file to clipboard: ${filePath}`);
|
|
30
23
|
}
|
|
31
24
|
else if (platform === 'win32') {
|
|
32
|
-
// Windows: Use PowerShell to copy file to clipboard
|
|
33
25
|
const script = `powershell -command "Set-Clipboard -Path '${absolutePath}'"`;
|
|
34
|
-
await
|
|
26
|
+
await execCommand(script);
|
|
35
27
|
logger.log(`📋 Copied file to clipboard: ${filePath}`);
|
|
36
28
|
}
|
|
37
29
|
else {
|
|
@@ -96,25 +88,21 @@ export const Clipboard = {
|
|
|
96
88
|
let text = '';
|
|
97
89
|
let file;
|
|
98
90
|
if (platform === 'darwin') {
|
|
99
|
-
// Try to get file first
|
|
100
91
|
try {
|
|
101
92
|
const fileCheckScript = `osascript -e 'try' -e 'get the clipboard as «class furl»' -e 'POSIX path of result' -e 'end try'`;
|
|
102
|
-
const
|
|
93
|
+
const filePath = await execCommand(fileCheckScript);
|
|
103
94
|
if (filePath && filePath.trim()) {
|
|
104
95
|
file = filePath.trim();
|
|
105
96
|
}
|
|
106
97
|
}
|
|
107
98
|
catch {
|
|
108
|
-
// No file in clipboard
|
|
99
|
+
// No file in clipboard
|
|
109
100
|
}
|
|
110
|
-
|
|
111
|
-
const { stdout } = await execAsync('pbpaste');
|
|
112
|
-
text = stdout;
|
|
101
|
+
text = await platformRead();
|
|
113
102
|
}
|
|
114
103
|
else if (platform === 'linux') {
|
|
115
|
-
// Check for file URIs
|
|
116
104
|
try {
|
|
117
|
-
const
|
|
105
|
+
const fileUri = await execCommand('xclip -selection clipboard -t text/uri-list -o');
|
|
118
106
|
if (fileUri && fileUri.startsWith('file://')) {
|
|
119
107
|
file = fileUri.replace('file://', '').trim();
|
|
120
108
|
}
|
|
@@ -122,24 +110,23 @@ export const Clipboard = {
|
|
|
122
110
|
catch {
|
|
123
111
|
// No file in clipboard
|
|
124
112
|
}
|
|
125
|
-
// Get text content
|
|
126
113
|
try {
|
|
127
|
-
|
|
128
|
-
text = stdout;
|
|
114
|
+
text = await platformRead();
|
|
129
115
|
}
|
|
130
116
|
catch {
|
|
131
117
|
// No text in clipboard
|
|
132
118
|
}
|
|
133
119
|
}
|
|
134
120
|
else if (platform === 'win32') {
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
text = stdout;
|
|
138
|
-
// Check if it's a file path
|
|
139
|
-
if (text && fs.existsSync(text.trim())) {
|
|
121
|
+
text = await platformRead();
|
|
122
|
+
if (text && fileExists(text.trim())) {
|
|
140
123
|
file = text.trim();
|
|
141
124
|
}
|
|
142
125
|
}
|
|
126
|
+
else {
|
|
127
|
+
// browser or other
|
|
128
|
+
text = await platformRead();
|
|
129
|
+
}
|
|
143
130
|
return { text, file };
|
|
144
131
|
}
|
|
145
132
|
catch (error) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"clipboard.js","sourceRoot":"","sources":["../../src/apis/clipboard.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"clipboard.js","sourceRoot":"","sources":["../../src/apis/clipboard.tsx"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EACR,MAAM,EACN,UAAU,EACV,WAAW,EAEX,aAAa,IAAI,YAAY,EAC7B,WAAW,EACX,aAAa,GACd,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAA;AACzE,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAA;AAE5C,KAAK,UAAU,mBAAmB,CAAC,QAAgB;IACjD,MAAM,YAAY,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAA;IAE1C,IAAI,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;QACrB,MAAM,CAAC,GAAG,CAAC,gDAAgD,QAAQ,EAAE,CAAC,CAAA;QACtE,OAAM;IACR,CAAC;IAED,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QAC9B,MAAM,IAAI,KAAK,CAAC,mBAAmB,YAAY,EAAE,CAAC,CAAA;IACpD,CAAC;IAED,IAAI,CAAC;QACH,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;YAC1B,MAAM,MAAM,GAAG,mDAAmD,YAAY,KAAK,CAAA;YACnF,MAAM,WAAW,CAAC,MAAM,CAAC,CAAA;YACzB,MAAM,CAAC,GAAG,CAAC,gCAAgC,QAAQ,EAAE,CAAC,CAAA;QACxD,CAAC;aAAM,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;YAChC,MAAM,OAAO,GAAG,UAAU,YAAY,EAAE,CAAA;YACxC,MAAM,aAAa,CACjB,6CAA6C,EAC7C,OAAO,CACR,CAAA;YACD,MAAM,CAAC,GAAG,CAAC,gCAAgC,QAAQ,EAAE,CAAC,CAAA;QACxD,CAAC;aAAM,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;YAChC,MAAM,MAAM,GAAG,6CAA6C,YAAY,IAAI,CAAA;YAC5E,MAAM,WAAW,CAAC,MAAM,CAAC,CAAA;YACzB,MAAM,CAAC,GAAG,CAAC,gCAAgC,QAAQ,EAAE,CAAC,CAAA;QACxD,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,GAAG,CAAC,iCAAiC,QAAQ,KAAK,QAAQ,EAAE,CAAC,CAAA;QACtE,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,GAAG,CAAC,wCAAwC,KAAK,EAAE,CAAC,CAAA;QAC3D,MAAM,KAAK,CAAA;IACb,CAAC;AACH,CAAC;AAaD,MAAM,CAAC,MAAM,SAAS,GAAkB;IACtC,KAAK,CAAC,IAAI,CACR,OAA4C,EAC5C,OAA+B;QAE/B,IAAI,WAAmB,CAAA;QAEvB,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;YAC/D,WAAW,GAAG,MAAM,CAAC,OAAO,CAAC,CAAA;QAC/B,CAAC;aAAM,IAAI,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,WAAW,GAAG,OAAO,CAAC,IAAI,IAAI,EAAE,CAAA;QAClC,CAAC;aAAM,IAAI,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,MAAM,mBAAmB,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAA;YAC/C,OAAM;QACR,CAAC;aAAM,IAAI,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,WAAW,GAAG,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAA;QAC5C,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAA;QACnD,CAAC;QAED,MAAM,eAAe,CAAC,WAAW,EAAE,OAAO,EAAE,SAAS,CAAC,CAAA;IACxD,CAAC;IAED,KAAK,CAAC,KAAK;QACT,MAAM,eAAe,CAAC,EAAE,EAAE,KAAK,CAAC,CAAA;QAChC,MAAM,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAA;IACpC,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,OAA4C;QACtD,IAAI,WAAmB,CAAA;QAEvB,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;YAC/D,WAAW,GAAG,MAAM,CAAC,OAAO,CAAC,CAAA;QAC/B,CAAC;aAAM,IAAI,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,WAAW,GAAG,OAAO,CAAC,IAAI,IAAI,EAAE,CAAA;QAClC,CAAC;aAAM,IAAI,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,MAAM,CAAC,GAAG,CAAC,sCAAsC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAA;YAChE,OAAM;QACR,CAAC;aAAM,IAAI,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,WAAW,GAAG,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAA;QAC5C,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAA;QACnD,CAAC;QAED,MAAM,YAAY,CAAC,WAAW,CAAC,CAAA;IACjC,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,OAA6B;QACtC,IAAI,OAAO,EAAE,MAAM,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC1C,MAAM,CAAC,GAAG,CAAC,0CAA0C,CAAC,CAAA;QACxD,CAAC;QAED,IAAI,CAAC;YACH,IAAI,IAAI,GAAG,EAAE,CAAA;YACb,IAAI,IAAwB,CAAA;YAE5B,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;gBAC1B,IAAI,CAAC;oBACH,MAAM,eAAe,GAAG,kGAAkG,CAAA;oBAC1H,MAAM,QAAQ,GAAG,MAAM,WAAW,CAAC,eAAe,CAAC,CAAA;oBACnD,IAAI,QAAQ,IAAI,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC;wBAChC,IAAI,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAA;oBACxB,CAAC;gBACH,CAAC;gBAAC,MAAM,CAAC;oBACP,uBAAuB;gBACzB,CAAC;gBAED,IAAI,GAAG,MAAM,YAAY,EAAE,CAAA;YAC7B,CAAC;iBAAM,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;gBAChC,IAAI,CAAC;oBACH,MAAM,OAAO,GAAG,MAAM,WAAW,CAC/B,gDAAgD,CACjD,CAAA;oBACD,IAAI,OAAO,IAAI,OAAO,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;wBAC7C,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAA;oBAC9C,CAAC;gBACH,CAAC;gBAAC,MAAM,CAAC;oBACP,uBAAuB;gBACzB,CAAC;gBAED,IAAI,CAAC;oBACH,IAAI,GAAG,MAAM,YAAY,EAAE,CAAA;gBAC7B,CAAC;gBAAC,MAAM,CAAC;oBACP,uBAAuB;gBACzB,CAAC;YACH,CAAC;iBAAM,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;gBAChC,IAAI,GAAG,MAAM,YAAY,EAAE,CAAA;gBAC3B,IAAI,IAAI,IAAI,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC;oBACpC,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,CAAA;gBACpB,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,mBAAmB;gBACnB,IAAI,GAAG,MAAM,YAAY,EAAE,CAAA;YAC7B,CAAC;YAED,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,CAAA;QACvB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,GAAG,CAAC,gCAAgC,KAAK,EAAE,CAAC,CAAA;YACnD,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,CAAA;QACrB,CAAC;IACH,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,OAA6B;QAC1C,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QACxC,OAAO,OAAO,CAAC,IAAI,IAAI,SAAS,CAAA;IAClC,CAAC;CACF,CAAA;AA0BD,MAAM,CAAC,MAAM,mBAAmB,GAAG,SAAS,CAAC,IAAI,CAAA;AACjD,MAAM,CAAC,MAAM,cAAc,GAAG,SAAS,CAAC,KAAK,CAAA;AAC7C,MAAM,CAAC,MAAM,SAAS,GAAG,SAAS,CAAC,KAAK,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"environment.d.ts","sourceRoot":"","sources":["../../src/apis/environment.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;
|
|
1
|
+
{"version":3,"file":"environment.d.ts","sourceRoot":"","sources":["../../src/apis/environment.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAeH,MAAM,WAAW,WAAW;IAC1B,UAAU,EAAE,MAAM,GAAG,OAAO,CAAA;IAC5B,UAAU,EAAE,MAAM,CAAA;IAClB,WAAW,EAAE,MAAM,GAAG,SAAS,GAAG,UAAU,CAAA;IAC5C,WAAW,EAAE,MAAM,CAAA;IACnB,aAAa,EAAE,MAAM,CAAA;IACrB,aAAa,EAAE,OAAO,CAAA;IACtB,UAAU,EAAE,UAAU,CAAA;IACtB,iBAAiB,EAAE,MAAM,CAAA;IACzB,cAAc,EAAE,MAAM,CAAA;IACtB,WAAW,EAAE,MAAM,CAAA;IACnB,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAA;IAC5B,SAAS,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,CAAA;IAC5B,KAAK,EAAE,MAAM,GAAG,OAAO,CAAA;CACxB;AAED,oBAAY,UAAU;IACpB,aAAa,kBAAkB;IAC/B,UAAU,eAAe;CAC1B;AAED,MAAM,WAAW,WAAW,CAC1B,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IAEnD,SAAS,EAAE,CAAC,CAAA;IACZ,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,aAAa,CAAC,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;KAAE,CAAA;CACvC;AAED,cAAM,eAAgB,YAAW,WAAW;;IAM1C,IAAI,UAAU,IAAI,MAAM,GAAG,OAAO,CAEjC;IAED,IAAI,UAAU,IAAI,MAAM,CAOvB;IAED,IAAI,WAAW,IAAI,MAAM,GAAG,SAAS,GAAG,UAAU,CAWjD;IAED,IAAI,WAAW,IAAI,MAAM,CAMxB;IAED,IAAI,aAAa,IAAI,MAAM,CAS1B;IAED,IAAI,aAAa,IAAI,OAAO,CAI3B;IAED,IAAI,UAAU,IAAI,UAAU,CAG3B;IAED,IAAI,iBAAiB,IAAI,MAAM,CAU9B;IAED,IAAI,cAAc,IAAI,MAAM,CAG3B;IAED,IAAI,WAAW,IAAI,MAAM,CAYxB;IAED,IAAI,QAAQ,IAAI,QAAQ,GAAG,OAAO,CAGjC;IAGD,IAAI,KAAK,IAAI,MAAM,GAAG,OAAO,CAE5B;IAED,SAAS,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO;CAK7B;AAED,eAAO,MAAM,WAAW,iBAAwB,CAAA;AAIhD,wBAAgB,SAAS,IAAI,OAAO,CAEnC;AAED,wBAAsB,sBAAsB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAqBhE;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,UAAU,CAAA;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IAC/B,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;CAC9B;AAED,wBAAsB,aAAa,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAyDzE;AAED,wBAAsB,eAAe,IAAI,OAAO,CAAC,MAAM,CAAC,CAiBvD"}
|
package/dist/apis/environment.js
CHANGED
|
@@ -14,10 +14,7 @@
|
|
|
14
14
|
* - Support and assets paths for file storage
|
|
15
15
|
* - System integration (selected Finder items, selected text)
|
|
16
16
|
*/
|
|
17
|
-
import
|
|
18
|
-
import path from 'node:path';
|
|
19
|
-
import fs from 'node:fs';
|
|
20
|
-
import { execSync } from 'node:child_process';
|
|
17
|
+
import { homedir, joinPath, basename, platform, getEnv, ensureDir, fileExists, execCommand, getSystemAppearance, } from '#platform/runtime';
|
|
21
18
|
import { useStore } from '../state';
|
|
22
19
|
export var LaunchType;
|
|
23
20
|
(function (LaunchType) {
|
|
@@ -30,25 +27,15 @@ class EnvironmentImpl {
|
|
|
30
27
|
this.canAccess = this.canAccess.bind(this);
|
|
31
28
|
}
|
|
32
29
|
get appearance() {
|
|
33
|
-
|
|
34
|
-
if (process.platform === 'darwin') {
|
|
35
|
-
try {
|
|
36
|
-
const result = execSync('defaults read -g AppleInterfaceStyle 2>/dev/null', { encoding: 'utf8' });
|
|
37
|
-
return result.includes('Dark') ? 'dark' : 'light';
|
|
38
|
-
}
|
|
39
|
-
catch {
|
|
40
|
-
return 'light';
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
return 'light';
|
|
30
|
+
return getSystemAppearance();
|
|
44
31
|
}
|
|
45
32
|
get assetsPath() {
|
|
46
33
|
const state = useStore.getState();
|
|
47
34
|
if (state.extensionPath) {
|
|
48
|
-
return
|
|
35
|
+
return joinPath(state.extensionPath, 'assets');
|
|
49
36
|
}
|
|
50
37
|
// TODO: Fallback for non-dev mode extensions
|
|
51
|
-
return
|
|
38
|
+
return joinPath(homedir(), '.termcast', 'assets');
|
|
52
39
|
}
|
|
53
40
|
get commandMode() {
|
|
54
41
|
const state = useStore.getState();
|
|
@@ -73,7 +60,7 @@ class EnvironmentImpl {
|
|
|
73
60
|
return state.extensionPackageJson.name;
|
|
74
61
|
}
|
|
75
62
|
if (state.extensionPath) {
|
|
76
|
-
return
|
|
63
|
+
return basename(state.extensionPath);
|
|
77
64
|
}
|
|
78
65
|
return '';
|
|
79
66
|
}
|
|
@@ -103,11 +90,8 @@ class EnvironmentImpl {
|
|
|
103
90
|
}
|
|
104
91
|
get supportPath() {
|
|
105
92
|
// Create a support directory in the user's data directory
|
|
106
|
-
const baseDir =
|
|
107
|
-
|
|
108
|
-
if (!fs.existsSync(baseDir)) {
|
|
109
|
-
fs.mkdirSync(baseDir, { recursive: true });
|
|
110
|
-
}
|
|
93
|
+
const baseDir = joinPath(homedir(), '.termcast', 'support', this.extensionName);
|
|
94
|
+
ensureDir(baseDir);
|
|
111
95
|
return baseDir;
|
|
112
96
|
}
|
|
113
97
|
get textSize() {
|
|
@@ -128,17 +112,12 @@ export const environment = new EnvironmentImpl();
|
|
|
128
112
|
// Whether the TUI is running inside a standalone desktop app built with `termcast app build`.
|
|
129
113
|
// In app mode, ESC at root level does not exit the process.
|
|
130
114
|
export function isAppMode() {
|
|
131
|
-
return
|
|
115
|
+
return getEnv('TERMCAST_APP_MODE') === '1';
|
|
132
116
|
}
|
|
133
117
|
export async function getSelectedFinderItems() {
|
|
134
118
|
// TODO: Improve cross-platform support
|
|
135
|
-
|
|
136
|
-
// Should add support for:
|
|
137
|
-
// 1. Windows Explorer selection (via PowerShell or COM)
|
|
138
|
-
// 2. Linux file managers (Nautilus, Dolphin, etc.)
|
|
139
|
-
if (process.platform === 'darwin') {
|
|
119
|
+
if (platform === 'darwin') {
|
|
140
120
|
try {
|
|
141
|
-
// Use AppleScript to get selected Finder items
|
|
142
121
|
const script = `
|
|
143
122
|
tell application "Finder"
|
|
144
123
|
set theSelection to selection
|
|
@@ -149,16 +128,13 @@ export async function getSelectedFinderItems() {
|
|
|
149
128
|
return thePaths
|
|
150
129
|
end tell
|
|
151
130
|
`;
|
|
152
|
-
const result =
|
|
153
|
-
encoding: 'utf8',
|
|
154
|
-
});
|
|
131
|
+
const result = await execCommand(`osascript -e '${script}'`);
|
|
155
132
|
return result.trim().split(', ').filter(Boolean);
|
|
156
133
|
}
|
|
157
134
|
catch {
|
|
158
135
|
return [];
|
|
159
136
|
}
|
|
160
137
|
}
|
|
161
|
-
// TODO: Implement for other platforms
|
|
162
138
|
return [];
|
|
163
139
|
}
|
|
164
140
|
export async function launchCommand(options) {
|
|
@@ -176,8 +152,8 @@ export async function launchCommand(options) {
|
|
|
176
152
|
if (!commandDef) {
|
|
177
153
|
throw new Error(`Command '${options.name}' not found in extension`);
|
|
178
154
|
}
|
|
179
|
-
const bundledPath =
|
|
180
|
-
if (!
|
|
155
|
+
const bundledPath = joinPath(extensionPath, '.termcast-bundle', `${options.name}.js`);
|
|
156
|
+
if (!fileExists(bundledPath)) {
|
|
181
157
|
throw new Error(`Command '${options.name}' has not been built`);
|
|
182
158
|
}
|
|
183
159
|
const importPath = devRebuildCount
|
|
@@ -205,16 +181,8 @@ export async function launchCommand(options) {
|
|
|
205
181
|
});
|
|
206
182
|
}
|
|
207
183
|
export async function getSelectedText() {
|
|
208
|
-
|
|
209
|
-
// Current implementation has issues:
|
|
210
|
-
// 1. Modifies the clipboard (should preserve original content)
|
|
211
|
-
// 2. Uses delay which may not be reliable
|
|
212
|
-
// 3. Only works on macOS
|
|
213
|
-
// Should add support for Windows and Linux
|
|
214
|
-
if (process.platform === 'darwin') {
|
|
184
|
+
if (platform === 'darwin') {
|
|
215
185
|
try {
|
|
216
|
-
// TODO: Save and restore clipboard contents to avoid side effects
|
|
217
|
-
// Use AppleScript to get selected text from frontmost application
|
|
218
186
|
const script = `
|
|
219
187
|
tell application "System Events"
|
|
220
188
|
keystroke "c" using command down
|
|
@@ -222,16 +190,13 @@ export async function getSelectedText() {
|
|
|
222
190
|
return (the clipboard)
|
|
223
191
|
end tell
|
|
224
192
|
`;
|
|
225
|
-
const result =
|
|
226
|
-
encoding: 'utf8',
|
|
227
|
-
});
|
|
193
|
+
const result = await execCommand(`osascript -e '${script}'`);
|
|
228
194
|
return result.trim();
|
|
229
195
|
}
|
|
230
196
|
catch {
|
|
231
197
|
return '';
|
|
232
198
|
}
|
|
233
199
|
}
|
|
234
|
-
// TODO: Implement for Windows (via PowerShell) and Linux (xclip/xsel)
|
|
235
200
|
return '';
|
|
236
201
|
}
|
|
237
202
|
//# sourceMappingURL=environment.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"environment.js","sourceRoot":"","sources":["../../src/apis/environment.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,
|
|
1
|
+
{"version":3,"file":"environment.js","sourceRoot":"","sources":["../../src/apis/environment.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,13 +1,8 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
function setItem(key: string, value: Value): Promise<void>;
|
|
9
|
-
function removeItem(key: string): Promise<void>;
|
|
10
|
-
function allItems<T extends Values = Values>(): Promise<T>;
|
|
11
|
-
function clear(): Promise<void>;
|
|
12
|
-
}
|
|
1
|
+
/**
|
|
2
|
+
* LocalStorage API — platform-agnostic facade.
|
|
3
|
+
*
|
|
4
|
+
* Re-exports the platform-specific LocalStorage from #platform/localstorage
|
|
5
|
+
* (SQLite on Node/Bun, window.localStorage on browser).
|
|
6
|
+
*/
|
|
7
|
+
export { LocalStorage } from '#platform/localstorage';
|
|
13
8
|
//# sourceMappingURL=localstorage.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"localstorage.d.ts","sourceRoot":"","sources":["../../src/apis/localstorage.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"localstorage.d.ts","sourceRoot":"","sources":["../../src/apis/localstorage.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAA"}
|
|
@@ -1,185 +1,8 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
function getCurrentDatabasePath() {
|
|
9
|
-
const { extensionPath } = useStore.getState();
|
|
10
|
-
if (!extensionPath) {
|
|
11
|
-
throw new Error('Cannot access LocalStorage - extensionPath not set');
|
|
12
|
-
}
|
|
13
|
-
return path.join(extensionPath, '.termcast-bundle', 'data.db');
|
|
14
|
-
}
|
|
15
|
-
function getDatabase() {
|
|
16
|
-
const dbPath = getCurrentDatabasePath();
|
|
17
|
-
// Check if we need to reconnect due to path change
|
|
18
|
-
if (db && currentDbPath !== dbPath) {
|
|
19
|
-
db.close();
|
|
20
|
-
db = null;
|
|
21
|
-
currentDbPath = null;
|
|
22
|
-
}
|
|
23
|
-
if (!db) {
|
|
24
|
-
// Ensure parent directory exists
|
|
25
|
-
const dbDir = path.dirname(dbPath);
|
|
26
|
-
if (!fs.existsSync(dbDir)) {
|
|
27
|
-
fs.mkdirSync(dbDir, { recursive: true });
|
|
28
|
-
}
|
|
29
|
-
db = new Database(dbPath, {
|
|
30
|
-
create: true,
|
|
31
|
-
readwrite: true,
|
|
32
|
-
});
|
|
33
|
-
currentDbPath = dbPath;
|
|
34
|
-
// Use WAL mode and optimize for single file usage
|
|
35
|
-
db.exec('PRAGMA journal_mode = WAL');
|
|
36
|
-
db.exec('PRAGMA wal_autocheckpoint = 1000');
|
|
37
|
-
db.exec('PRAGMA synchronous = NORMAL');
|
|
38
|
-
db.exec(`
|
|
39
|
-
CREATE TABLE IF NOT EXISTS localstorage (
|
|
40
|
-
key TEXT PRIMARY KEY,
|
|
41
|
-
value TEXT NOT NULL,
|
|
42
|
-
type TEXT NOT NULL
|
|
43
|
-
)
|
|
44
|
-
`);
|
|
45
|
-
}
|
|
46
|
-
return db;
|
|
47
|
-
}
|
|
48
|
-
export var LocalStorage;
|
|
49
|
-
(function (LocalStorage) {
|
|
50
|
-
async function getItem(key) {
|
|
51
|
-
return new Promise((resolve) => {
|
|
52
|
-
try {
|
|
53
|
-
const db = getDatabase();
|
|
54
|
-
const row = db
|
|
55
|
-
.prepare('SELECT value, type FROM localstorage WHERE key = ?')
|
|
56
|
-
.get(key);
|
|
57
|
-
if (!row) {
|
|
58
|
-
resolve(undefined);
|
|
59
|
-
return;
|
|
60
|
-
}
|
|
61
|
-
let value;
|
|
62
|
-
switch (row.type) {
|
|
63
|
-
case 'number':
|
|
64
|
-
value = parseFloat(row.value);
|
|
65
|
-
break;
|
|
66
|
-
case 'boolean':
|
|
67
|
-
value = row.value === 'true';
|
|
68
|
-
break;
|
|
69
|
-
default:
|
|
70
|
-
value = row.value;
|
|
71
|
-
}
|
|
72
|
-
resolve(value);
|
|
73
|
-
}
|
|
74
|
-
catch (err) {
|
|
75
|
-
logger.error('LocalStorage.getItem error:', err);
|
|
76
|
-
resolve(undefined);
|
|
77
|
-
}
|
|
78
|
-
});
|
|
79
|
-
}
|
|
80
|
-
LocalStorage.getItem = getItem;
|
|
81
|
-
function getItemSync(key) {
|
|
82
|
-
try {
|
|
83
|
-
const db = getDatabase();
|
|
84
|
-
const row = db
|
|
85
|
-
.prepare('SELECT value, type FROM localstorage WHERE key = ?')
|
|
86
|
-
.get(key);
|
|
87
|
-
if (!row) {
|
|
88
|
-
return undefined;
|
|
89
|
-
}
|
|
90
|
-
let value;
|
|
91
|
-
switch (row.type) {
|
|
92
|
-
case 'number':
|
|
93
|
-
value = parseFloat(row.value);
|
|
94
|
-
break;
|
|
95
|
-
case 'boolean':
|
|
96
|
-
value = row.value === 'true';
|
|
97
|
-
break;
|
|
98
|
-
default:
|
|
99
|
-
value = row.value;
|
|
100
|
-
}
|
|
101
|
-
return value;
|
|
102
|
-
}
|
|
103
|
-
catch (err) {
|
|
104
|
-
logger.error('LocalStorage.getItemSync error:', err);
|
|
105
|
-
return undefined;
|
|
106
|
-
}
|
|
107
|
-
}
|
|
108
|
-
LocalStorage.getItemSync = getItemSync;
|
|
109
|
-
async function setItem(key, value) {
|
|
110
|
-
return new Promise((resolve, reject) => {
|
|
111
|
-
try {
|
|
112
|
-
const db = getDatabase();
|
|
113
|
-
const type = typeof value;
|
|
114
|
-
const stringValue = String(value);
|
|
115
|
-
db.prepare('INSERT OR REPLACE INTO localstorage (key, value, type) VALUES (?, ?, ?)').run(key, stringValue, type);
|
|
116
|
-
resolve();
|
|
117
|
-
}
|
|
118
|
-
catch (err) {
|
|
119
|
-
logger.error('LocalStorage.setItem error:', err);
|
|
120
|
-
reject(err);
|
|
121
|
-
}
|
|
122
|
-
});
|
|
123
|
-
}
|
|
124
|
-
LocalStorage.setItem = setItem;
|
|
125
|
-
async function removeItem(key) {
|
|
126
|
-
return new Promise((resolve, reject) => {
|
|
127
|
-
try {
|
|
128
|
-
const db = getDatabase();
|
|
129
|
-
db.prepare('DELETE FROM localstorage WHERE key = ?').run(key);
|
|
130
|
-
resolve();
|
|
131
|
-
}
|
|
132
|
-
catch (err) {
|
|
133
|
-
logger.error('LocalStorage.removeItem error:', err);
|
|
134
|
-
reject(err);
|
|
135
|
-
}
|
|
136
|
-
});
|
|
137
|
-
}
|
|
138
|
-
LocalStorage.removeItem = removeItem;
|
|
139
|
-
async function allItems() {
|
|
140
|
-
return new Promise((resolve, reject) => {
|
|
141
|
-
try {
|
|
142
|
-
const db = getDatabase();
|
|
143
|
-
const rows = db
|
|
144
|
-
.prepare('SELECT key, value, type FROM localstorage')
|
|
145
|
-
.all();
|
|
146
|
-
const result = {};
|
|
147
|
-
for (const row of rows) {
|
|
148
|
-
let value;
|
|
149
|
-
switch (row.type) {
|
|
150
|
-
case 'number':
|
|
151
|
-
value = parseFloat(row.value);
|
|
152
|
-
break;
|
|
153
|
-
case 'boolean':
|
|
154
|
-
value = row.value === 'true';
|
|
155
|
-
break;
|
|
156
|
-
default:
|
|
157
|
-
value = row.value;
|
|
158
|
-
}
|
|
159
|
-
result[row.key] = value;
|
|
160
|
-
}
|
|
161
|
-
resolve(result);
|
|
162
|
-
}
|
|
163
|
-
catch (err) {
|
|
164
|
-
logger.error('LocalStorage.allItems error:', err);
|
|
165
|
-
reject(err);
|
|
166
|
-
}
|
|
167
|
-
});
|
|
168
|
-
}
|
|
169
|
-
LocalStorage.allItems = allItems;
|
|
170
|
-
async function clear() {
|
|
171
|
-
return new Promise((resolve, reject) => {
|
|
172
|
-
try {
|
|
173
|
-
const db = getDatabase();
|
|
174
|
-
db.exec('DELETE FROM localstorage');
|
|
175
|
-
resolve();
|
|
176
|
-
}
|
|
177
|
-
catch (err) {
|
|
178
|
-
logger.error('LocalStorage.clear error:', err);
|
|
179
|
-
reject(err);
|
|
180
|
-
}
|
|
181
|
-
});
|
|
182
|
-
}
|
|
183
|
-
LocalStorage.clear = clear;
|
|
184
|
-
})(LocalStorage || (LocalStorage = {}));
|
|
1
|
+
/**
|
|
2
|
+
* LocalStorage API — platform-agnostic facade.
|
|
3
|
+
*
|
|
4
|
+
* Re-exports the platform-specific LocalStorage from #platform/localstorage
|
|
5
|
+
* (SQLite on Node/Bun, window.localStorage on browser).
|
|
6
|
+
*/
|
|
7
|
+
export { LocalStorage } from '#platform/localstorage';
|
|
185
8
|
//# sourceMappingURL=localstorage.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"localstorage.js","sourceRoot":"","sources":["../../src/apis/localstorage.tsx"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"localstorage.js","sourceRoot":"","sources":["../../src/apis/localstorage.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAA"}
|
package/dist/app.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../src/app.tsx"],"names":[],"mappings":"AAYA,OAAO,EAAoB,KAAK,aAAa,EAAE,MAAM,WAAW,CAAA;
|
|
1
|
+
{"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../src/app.tsx"],"names":[],"mappings":"AAYA,OAAO,EAAoB,KAAK,aAAa,EAAE,MAAM,WAAW,CAAA;AAm9BhE,MAAM,WAAW,eAAe;IAC9B,aAAa,EAAE,MAAM,CAAA;IACrB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,+CAA+C;IAC/C,QAAQ,CAAC,EAAE,aAAa,CAAC,IAAI,CAAC,CAAA;IAC9B,sEAAsE;IACtE,IAAI,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,CAAA;IAC5B,sFAAsF;IACtF,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,6FAA6F;IAC7F,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,mGAAmG;IACnG,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,uCAAuC;IACvC,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,2EAA2E;IAC3E,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,4EAA4E;IAC5E,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,EAAE,MAAM,CAAA;IACf,+FAA+F;IAC/F,aAAa,CAAC,EAAE,MAAM,CAAA;CACvB;AAuJD,wBAAsB,QAAQ,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,cAAc,CAAC,CAgBhF"}
|