termcast 1.3.53 → 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 +46 -20
- 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/candle-chart.d.ts +110 -0
- package/dist/components/candle-chart.d.ts.map +1 -0
- package/dist/components/candle-chart.js +295 -0
- package/dist/components/candle-chart.js.map +1 -0
- 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/components/table.d.ts +2 -0
- package/dist/components/table.d.ts.map +1 -1
- package/dist/components/table.js +41 -4
- package/dist/components/table.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/examples/simple-candle-chart-data.d.ts +9064 -0
- package/dist/examples/simple-candle-chart-data.d.ts.map +1 -0
- package/dist/examples/simple-candle-chart-data.js +12683 -0
- package/dist/examples/simple-candle-chart-data.js.map +1 -0
- package/dist/examples/simple-candle-chart.d.ts +2 -0
- package/dist/examples/simple-candle-chart.d.ts.map +1 -0
- package/dist/examples/simple-candle-chart.js +125 -0
- package/dist/examples/simple-candle-chart.js.map +1 -0
- 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/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.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 +51 -20
- package/src/cli.tsx +14 -15
- package/src/compile.vitest.tsx +2 -2
- package/src/components/actions.tsx +19 -1
- package/src/components/candle-chart.tsx +410 -0
- 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/components/table.tsx +46 -4
- 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-data.ts +12683 -0
- package/src/examples/simple-candle-chart.tsx +363 -0
- package/src/examples/simple-candle-chart.vitest.tsx +269 -0
- package/src/examples/simple-detail-markdown.vitest.tsx +8 -8
- package/src/examples/simple-detail-table.vitest.tsx +10 -10
- 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/simple-table-wrap.vitest.tsx +19 -19
- 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/table-flex-grow.vitest.tsx +8 -8
- 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/index.tsx +7 -0
- 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
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sqlite.js","sourceRoot":"","sources":["../../../src/platform/bun/sqlite.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,QAAQ,IAAI,WAAW,EAAE,MAAM,YAAY,CAAA;AAEpD,MAAM,CAAC,MAAM,QAAQ,GAAG,WAAW,CAAA"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Node/Bun Cache implementation backed by SQLite.
|
|
3
|
+
* Moved from apis/cache.tsx — this is the platform-specific storage layer.
|
|
4
|
+
*/
|
|
5
|
+
export declare class Cache {
|
|
6
|
+
static get STORAGE_DIRECTORY_NAME(): string;
|
|
7
|
+
static get DEFAULT_CAPACITY(): number;
|
|
8
|
+
private db;
|
|
9
|
+
private capacity;
|
|
10
|
+
private namespace;
|
|
11
|
+
private subscribers;
|
|
12
|
+
private currentSize;
|
|
13
|
+
constructor(options?: Cache.Options);
|
|
14
|
+
get storageDirectory(): string;
|
|
15
|
+
get(key: string): string | undefined;
|
|
16
|
+
has(key: string): boolean;
|
|
17
|
+
get isEmpty(): boolean;
|
|
18
|
+
set(key: string, data: string): void;
|
|
19
|
+
remove(key: string): boolean;
|
|
20
|
+
clear(options?: {
|
|
21
|
+
notifySubscribers: boolean;
|
|
22
|
+
}): void;
|
|
23
|
+
subscribe(subscriber: Cache.Subscriber): Cache.Subscription;
|
|
24
|
+
private maintainCapacity;
|
|
25
|
+
private notifySubscribers;
|
|
26
|
+
}
|
|
27
|
+
export declare namespace Cache {
|
|
28
|
+
interface Options {
|
|
29
|
+
namespace?: string;
|
|
30
|
+
capacity?: number;
|
|
31
|
+
}
|
|
32
|
+
type Subscriber = (key: string | undefined, data: string | undefined) => void;
|
|
33
|
+
type Subscription = () => void;
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=cache.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../../../src/platform/node/cache.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAuIH,qBAAa,KAAK;IAChB,MAAM,KAAK,sBAAsB,IAAI,MAAM,CAG1C;IAED,MAAM,KAAK,gBAAgB,IAAI,MAAM,CAEpC;IAED,OAAO,CAAC,EAAE,CAAkB;IAC5B,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;IA4CnC,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;IAoB5B,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;IA+BxB,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"}
|
|
@@ -0,0 +1,269 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Node/Bun Cache implementation backed by SQLite.
|
|
3
|
+
* Moved from apis/cache.tsx — this is the platform-specific storage layer.
|
|
4
|
+
*/
|
|
5
|
+
import { Database } from '#sqlite';
|
|
6
|
+
import { joinPath, dirname, homedir, ensureDir, byteLength } from '#platform/runtime';
|
|
7
|
+
import { logger } from '../../logger';
|
|
8
|
+
import { useStore } from '../../state';
|
|
9
|
+
const CACHE_TABLE_NAME = 'cache_entries';
|
|
10
|
+
const DEFAULT_NAMESPACE = '__default__';
|
|
11
|
+
const initializedDatabasePaths = new Set();
|
|
12
|
+
let logicalTimestamp = Date.now();
|
|
13
|
+
function nextTimestamp() {
|
|
14
|
+
logicalTimestamp += 1;
|
|
15
|
+
return logicalTimestamp;
|
|
16
|
+
}
|
|
17
|
+
function getCurrentDatabasePath() {
|
|
18
|
+
const { extensionPath } = useStore.getState();
|
|
19
|
+
const dbSuffix = globalThis.process?.env?.TERMCAST_DB_SUFFIX?.replace(/[^a-zA-Z0-9_-]/g, '_');
|
|
20
|
+
const dbFileName = dbSuffix ? `data-${dbSuffix}.db` : 'data.db';
|
|
21
|
+
if (extensionPath) {
|
|
22
|
+
return joinPath(extensionPath, '.termcast-bundle', dbFileName);
|
|
23
|
+
}
|
|
24
|
+
// Fallback for examples/tests that don't set extensionPath
|
|
25
|
+
return joinPath(homedir(), '.termcast', '.termcast-bundle', dbFileName);
|
|
26
|
+
}
|
|
27
|
+
function getCurrentCacheDir(namespace) {
|
|
28
|
+
const { extensionPath } = useStore.getState();
|
|
29
|
+
const baseDir = extensionPath
|
|
30
|
+
? joinPath(extensionPath, '.termcast-bundle', 'cache')
|
|
31
|
+
: joinPath(homedir(), '.termcast', '.termcast-bundle', 'cache');
|
|
32
|
+
return namespace ? joinPath(baseDir, namespace) : baseDir;
|
|
33
|
+
}
|
|
34
|
+
function getNamespace(namespace) {
|
|
35
|
+
return namespace || DEFAULT_NAMESPACE;
|
|
36
|
+
}
|
|
37
|
+
function initializeDatabaseOnce({ db, dbPath }) {
|
|
38
|
+
if (initializedDatabasePaths.has(dbPath)) {
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
db.exec('PRAGMA journal_mode = WAL');
|
|
42
|
+
db.exec('PRAGMA wal_autocheckpoint = 1000');
|
|
43
|
+
db.exec('PRAGMA synchronous = NORMAL');
|
|
44
|
+
db.exec(`
|
|
45
|
+
CREATE TABLE IF NOT EXISTS ${CACHE_TABLE_NAME} (
|
|
46
|
+
namespace TEXT NOT NULL,
|
|
47
|
+
key TEXT NOT NULL,
|
|
48
|
+
data TEXT NOT NULL,
|
|
49
|
+
size INTEGER NOT NULL,
|
|
50
|
+
last_accessed_at INTEGER NOT NULL,
|
|
51
|
+
updated_at INTEGER NOT NULL,
|
|
52
|
+
PRIMARY KEY(namespace, key)
|
|
53
|
+
)
|
|
54
|
+
`);
|
|
55
|
+
db.exec(`
|
|
56
|
+
CREATE INDEX IF NOT EXISTS idx_${CACHE_TABLE_NAME}_namespace_lru
|
|
57
|
+
ON ${CACHE_TABLE_NAME}(namespace, last_accessed_at)
|
|
58
|
+
`);
|
|
59
|
+
cleanupLegacyCacheTables(db);
|
|
60
|
+
initializedDatabasePaths.add(dbPath);
|
|
61
|
+
}
|
|
62
|
+
function cleanupLegacyCacheTables(db) {
|
|
63
|
+
const rows = db
|
|
64
|
+
.prepare(`SELECT name FROM sqlite_master
|
|
65
|
+
WHERE type = 'table'
|
|
66
|
+
AND (name = 'cache' OR name LIKE 'cache_%')
|
|
67
|
+
AND name != ?`)
|
|
68
|
+
.all(CACHE_TABLE_NAME);
|
|
69
|
+
if (rows.length === 0) {
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
const tx = db.transaction(() => {
|
|
73
|
+
const upsert = db.prepare(`INSERT INTO ${CACHE_TABLE_NAME} (namespace, key, data, size, last_accessed_at, updated_at)
|
|
74
|
+
VALUES (?, ?, ?, ?, ?, ?)
|
|
75
|
+
ON CONFLICT(namespace, key)
|
|
76
|
+
DO UPDATE SET
|
|
77
|
+
data = excluded.data,
|
|
78
|
+
size = excluded.size,
|
|
79
|
+
last_accessed_at = excluded.last_accessed_at,
|
|
80
|
+
updated_at = excluded.updated_at`);
|
|
81
|
+
for (const { name } of rows) {
|
|
82
|
+
const namespace = name === 'cache'
|
|
83
|
+
? DEFAULT_NAMESPACE
|
|
84
|
+
: name === 'cache_tanstack_query'
|
|
85
|
+
? 'tanstack-query'
|
|
86
|
+
: `legacy:${name.slice('cache_'.length)}`;
|
|
87
|
+
try {
|
|
88
|
+
const values = db
|
|
89
|
+
.prepare(`SELECT key, data, size, rowid FROM ${name}`)
|
|
90
|
+
.all();
|
|
91
|
+
values.forEach((entry) => {
|
|
92
|
+
const timestamp = entry.rowid;
|
|
93
|
+
upsert.run(namespace, entry.key, entry.data, entry.size, timestamp, timestamp);
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
catch {
|
|
97
|
+
// Ignore invalid legacy tables and continue cleanup.
|
|
98
|
+
}
|
|
99
|
+
db.exec(`DROP TABLE IF EXISTS ${name}`);
|
|
100
|
+
}
|
|
101
|
+
});
|
|
102
|
+
tx();
|
|
103
|
+
}
|
|
104
|
+
export class Cache {
|
|
105
|
+
static get STORAGE_DIRECTORY_NAME() {
|
|
106
|
+
const extensionPath = useStore.getState().extensionPath;
|
|
107
|
+
return extensionPath ? 'cache' : '.termcast-cache';
|
|
108
|
+
}
|
|
109
|
+
static get DEFAULT_CAPACITY() {
|
|
110
|
+
return 10 * 1024 * 1024; // 10 MB
|
|
111
|
+
}
|
|
112
|
+
db;
|
|
113
|
+
capacity;
|
|
114
|
+
namespace;
|
|
115
|
+
subscribers = [];
|
|
116
|
+
currentSize = 0;
|
|
117
|
+
constructor(options) {
|
|
118
|
+
const sqliteLoadStart = Date.now();
|
|
119
|
+
this.capacity = options?.capacity || Cache.DEFAULT_CAPACITY;
|
|
120
|
+
this.namespace = getNamespace(options?.namespace);
|
|
121
|
+
const dbPath = getCurrentDatabasePath();
|
|
122
|
+
// Ensure parent directory exists
|
|
123
|
+
const dbDir = dirname(dbPath);
|
|
124
|
+
ensureDir(dbDir);
|
|
125
|
+
this.db = new Database(dbPath, {
|
|
126
|
+
create: true,
|
|
127
|
+
readwrite: true,
|
|
128
|
+
});
|
|
129
|
+
initializeDatabaseOnce({ db: this.db, dbPath });
|
|
130
|
+
// Calculate initial size
|
|
131
|
+
const row = this.db
|
|
132
|
+
.prepare(`SELECT COALESCE(SUM(size), 0) as total FROM ${CACHE_TABLE_NAME} WHERE namespace = ?`)
|
|
133
|
+
.get(this.namespace);
|
|
134
|
+
this.currentSize = row?.total || 0;
|
|
135
|
+
const sqliteLoadMs = Date.now() - sqliteLoadStart;
|
|
136
|
+
if (sqliteLoadMs > 500) {
|
|
137
|
+
logger.log(`[perf] sqlite cache init took ${sqliteLoadMs}ms (namespace=${this.namespace})`);
|
|
138
|
+
}
|
|
139
|
+
// Bind all methods to this instance
|
|
140
|
+
this.get = this.get.bind(this);
|
|
141
|
+
this.has = this.has.bind(this);
|
|
142
|
+
this.set = this.set.bind(this);
|
|
143
|
+
this.remove = this.remove.bind(this);
|
|
144
|
+
this.clear = this.clear.bind(this);
|
|
145
|
+
this.subscribe = this.subscribe.bind(this);
|
|
146
|
+
this.maintainCapacity = this.maintainCapacity.bind(this);
|
|
147
|
+
this.notifySubscribers = this.notifySubscribers.bind(this);
|
|
148
|
+
}
|
|
149
|
+
get storageDirectory() {
|
|
150
|
+
return getCurrentCacheDir(this.namespace);
|
|
151
|
+
}
|
|
152
|
+
get(key) {
|
|
153
|
+
const now = nextTimestamp();
|
|
154
|
+
const row = this.db
|
|
155
|
+
.prepare(`SELECT data, size FROM ${CACHE_TABLE_NAME} WHERE namespace = ? AND key = ?`)
|
|
156
|
+
.get(this.namespace, key);
|
|
157
|
+
if (row) {
|
|
158
|
+
this.db
|
|
159
|
+
.prepare(`UPDATE ${CACHE_TABLE_NAME} SET last_accessed_at = ? WHERE namespace = ? AND key = ?`)
|
|
160
|
+
.run(now, this.namespace, key);
|
|
161
|
+
return row.data;
|
|
162
|
+
}
|
|
163
|
+
return undefined;
|
|
164
|
+
}
|
|
165
|
+
has(key) {
|
|
166
|
+
const row = this.db
|
|
167
|
+
.prepare(`SELECT 1 FROM ${CACHE_TABLE_NAME} WHERE namespace = ? AND key = ?`)
|
|
168
|
+
.get(this.namespace, key);
|
|
169
|
+
return !!row;
|
|
170
|
+
}
|
|
171
|
+
get isEmpty() {
|
|
172
|
+
const row = this.db
|
|
173
|
+
.prepare(`SELECT COUNT(*) as count FROM ${CACHE_TABLE_NAME} WHERE namespace = ?`)
|
|
174
|
+
.get(this.namespace);
|
|
175
|
+
return row.count === 0;
|
|
176
|
+
}
|
|
177
|
+
set(key, data) {
|
|
178
|
+
const now = nextTimestamp();
|
|
179
|
+
const dataSize = byteLength(data);
|
|
180
|
+
// Get existing size if any
|
|
181
|
+
const existingRow = this.db
|
|
182
|
+
.prepare(`SELECT size FROM ${CACHE_TABLE_NAME} WHERE namespace = ? AND key = ?`)
|
|
183
|
+
.get(this.namespace, key);
|
|
184
|
+
const oldSize = existingRow?.size || 0;
|
|
185
|
+
const newTotalSize = this.currentSize - oldSize + dataSize;
|
|
186
|
+
if (newTotalSize > this.capacity) {
|
|
187
|
+
this.maintainCapacity(newTotalSize - this.capacity);
|
|
188
|
+
}
|
|
189
|
+
// Insert or update the cache entry
|
|
190
|
+
this.db
|
|
191
|
+
.prepare(`INSERT INTO ${CACHE_TABLE_NAME} (namespace, key, data, size, last_accessed_at, updated_at)
|
|
192
|
+
VALUES (?, ?, ?, ?, ?, ?)
|
|
193
|
+
ON CONFLICT(namespace, key)
|
|
194
|
+
DO UPDATE SET
|
|
195
|
+
data = excluded.data,
|
|
196
|
+
size = excluded.size,
|
|
197
|
+
last_accessed_at = excluded.last_accessed_at,
|
|
198
|
+
updated_at = excluded.updated_at`)
|
|
199
|
+
.run(this.namespace, key, data, dataSize, now, now);
|
|
200
|
+
this.currentSize = this.currentSize - oldSize + dataSize;
|
|
201
|
+
this.notifySubscribers(key, data);
|
|
202
|
+
}
|
|
203
|
+
remove(key) {
|
|
204
|
+
const row = this.db
|
|
205
|
+
.prepare(`SELECT size FROM ${CACHE_TABLE_NAME} WHERE namespace = ? AND key = ?`)
|
|
206
|
+
.get(this.namespace, key);
|
|
207
|
+
if (row) {
|
|
208
|
+
this.db
|
|
209
|
+
.prepare(`DELETE FROM ${CACHE_TABLE_NAME} WHERE namespace = ? AND key = ?`)
|
|
210
|
+
.run(this.namespace, key);
|
|
211
|
+
this.currentSize -= row.size;
|
|
212
|
+
this.notifySubscribers(key, undefined);
|
|
213
|
+
return true;
|
|
214
|
+
}
|
|
215
|
+
return false;
|
|
216
|
+
}
|
|
217
|
+
clear(options) {
|
|
218
|
+
this.db
|
|
219
|
+
.prepare(`DELETE FROM ${CACHE_TABLE_NAME} WHERE namespace = ?`)
|
|
220
|
+
.run(this.namespace);
|
|
221
|
+
this.currentSize = 0;
|
|
222
|
+
if (options?.notifySubscribers !== false) {
|
|
223
|
+
this.notifySubscribers(undefined, undefined);
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
subscribe(subscriber) {
|
|
227
|
+
this.subscribers.push(subscriber);
|
|
228
|
+
return () => {
|
|
229
|
+
const index = this.subscribers.indexOf(subscriber);
|
|
230
|
+
if (index > -1) {
|
|
231
|
+
this.subscribers.splice(index, 1);
|
|
232
|
+
}
|
|
233
|
+
};
|
|
234
|
+
}
|
|
235
|
+
maintainCapacity(bytesToFree) {
|
|
236
|
+
const rows = this.db
|
|
237
|
+
.prepare(`SELECT key, size FROM ${CACHE_TABLE_NAME}
|
|
238
|
+
WHERE namespace = ?
|
|
239
|
+
ORDER BY last_accessed_at ASC`)
|
|
240
|
+
.all(this.namespace);
|
|
241
|
+
let freedBytes = 0;
|
|
242
|
+
const keysToRemove = [];
|
|
243
|
+
for (const row of rows) {
|
|
244
|
+
if (freedBytes >= bytesToFree) {
|
|
245
|
+
break;
|
|
246
|
+
}
|
|
247
|
+
keysToRemove.push(row.key);
|
|
248
|
+
freedBytes += row.size;
|
|
249
|
+
}
|
|
250
|
+
if (keysToRemove.length > 0) {
|
|
251
|
+
const placeholders = keysToRemove.map(() => '?').join(',');
|
|
252
|
+
const stmt = this.db.prepare(`DELETE FROM ${CACHE_TABLE_NAME}
|
|
253
|
+
WHERE namespace = ? AND key IN (${placeholders})`);
|
|
254
|
+
stmt.run(this.namespace, ...keysToRemove);
|
|
255
|
+
this.currentSize -= freedBytes;
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
notifySubscribers(key, data) {
|
|
259
|
+
for (const subscriber of this.subscribers) {
|
|
260
|
+
try {
|
|
261
|
+
subscriber(key, data);
|
|
262
|
+
}
|
|
263
|
+
catch (error) {
|
|
264
|
+
logger.error('Cache subscriber error:', error);
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
//# sourceMappingURL=cache.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cache.js","sourceRoot":"","sources":["../../../src/platform/node/cache.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Node/Bun LocalStorage implementation backed by SQLite.
|
|
3
|
+
* Moved from apis/localstorage.tsx.
|
|
4
|
+
*/
|
|
5
|
+
export declare namespace LocalStorage {
|
|
6
|
+
type Value = string | number | boolean;
|
|
7
|
+
interface Values {
|
|
8
|
+
[key: string]: any;
|
|
9
|
+
}
|
|
10
|
+
function getItem<T extends Value = Value>(key: string): Promise<T | undefined>;
|
|
11
|
+
function getItemSync<T extends Value = Value>(key: string): T | undefined;
|
|
12
|
+
function setItem(key: string, value: Value): Promise<void>;
|
|
13
|
+
function removeItem(key: string): Promise<void>;
|
|
14
|
+
function allItems<T extends Values = Values>(): Promise<T>;
|
|
15
|
+
function clear(): Promise<void>;
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=localstorage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"localstorage.d.ts","sourceRoot":"","sources":["../../../src/platform/node/localstorage.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAyDH,yBAAiB,YAAY,CAAC;IAC5B,KAAY,KAAK,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAA;IAE7C,UAAiB,MAAM;QACrB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;KACnB;IAED,SAAsB,OAAO,CAAC,CAAC,SAAS,KAAK,GAAG,KAAK,EACnD,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC,CA+BxB;IAED,SAAgB,WAAW,CAAC,CAAC,SAAS,KAAK,GAAG,KAAK,EACjD,GAAG,EAAE,MAAM,GACV,CAAC,GAAG,SAAS,CA4Bf;IAED,SAAsB,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,CAgBtE;IAED,SAAsB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAW3D;IAED,SAAsB,QAAQ,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,CAkCtE;IAED,SAAsB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAW3C;CACF"}
|
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Node/Bun LocalStorage implementation backed by SQLite.
|
|
3
|
+
* Moved from apis/localstorage.tsx.
|
|
4
|
+
*/
|
|
5
|
+
import { Database } from '#sqlite';
|
|
6
|
+
import { joinPath, dirname, ensureDir } from '#platform/runtime';
|
|
7
|
+
import { logger } from '../../logger';
|
|
8
|
+
import { useStore } from '../../state';
|
|
9
|
+
let db = null;
|
|
10
|
+
let currentDbPath = null;
|
|
11
|
+
function getCurrentDatabasePath() {
|
|
12
|
+
const { extensionPath } = useStore.getState();
|
|
13
|
+
if (!extensionPath) {
|
|
14
|
+
throw new Error('Cannot access LocalStorage - extensionPath not set');
|
|
15
|
+
}
|
|
16
|
+
return joinPath(extensionPath, '.termcast-bundle', 'data.db');
|
|
17
|
+
}
|
|
18
|
+
function getDatabase() {
|
|
19
|
+
const dbPath = getCurrentDatabasePath();
|
|
20
|
+
// Check if we need to reconnect due to path change
|
|
21
|
+
if (db && currentDbPath !== dbPath) {
|
|
22
|
+
db.close();
|
|
23
|
+
db = null;
|
|
24
|
+
currentDbPath = null;
|
|
25
|
+
}
|
|
26
|
+
if (!db) {
|
|
27
|
+
// Ensure parent directory exists
|
|
28
|
+
const dbDir = dirname(dbPath);
|
|
29
|
+
ensureDir(dbDir);
|
|
30
|
+
db = new Database(dbPath, {
|
|
31
|
+
create: true,
|
|
32
|
+
readwrite: true,
|
|
33
|
+
});
|
|
34
|
+
currentDbPath = dbPath;
|
|
35
|
+
// Use WAL mode and optimize for single file usage
|
|
36
|
+
db.exec('PRAGMA journal_mode = WAL');
|
|
37
|
+
db.exec('PRAGMA wal_autocheckpoint = 1000');
|
|
38
|
+
db.exec('PRAGMA synchronous = NORMAL');
|
|
39
|
+
db.exec(`
|
|
40
|
+
CREATE TABLE IF NOT EXISTS localstorage (
|
|
41
|
+
key TEXT PRIMARY KEY,
|
|
42
|
+
value TEXT NOT NULL,
|
|
43
|
+
type TEXT NOT NULL
|
|
44
|
+
)
|
|
45
|
+
`);
|
|
46
|
+
}
|
|
47
|
+
return db;
|
|
48
|
+
}
|
|
49
|
+
export var LocalStorage;
|
|
50
|
+
(function (LocalStorage) {
|
|
51
|
+
async function getItem(key) {
|
|
52
|
+
return new Promise((resolve) => {
|
|
53
|
+
try {
|
|
54
|
+
const db = getDatabase();
|
|
55
|
+
const row = db
|
|
56
|
+
.prepare('SELECT value, type FROM localstorage WHERE key = ?')
|
|
57
|
+
.get(key);
|
|
58
|
+
if (!row) {
|
|
59
|
+
resolve(undefined);
|
|
60
|
+
return;
|
|
61
|
+
}
|
|
62
|
+
let value;
|
|
63
|
+
switch (row.type) {
|
|
64
|
+
case 'number':
|
|
65
|
+
value = parseFloat(row.value);
|
|
66
|
+
break;
|
|
67
|
+
case 'boolean':
|
|
68
|
+
value = row.value === 'true';
|
|
69
|
+
break;
|
|
70
|
+
default:
|
|
71
|
+
value = row.value;
|
|
72
|
+
}
|
|
73
|
+
resolve(value);
|
|
74
|
+
}
|
|
75
|
+
catch (err) {
|
|
76
|
+
logger.error('LocalStorage.getItem error:', err);
|
|
77
|
+
resolve(undefined);
|
|
78
|
+
}
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
LocalStorage.getItem = getItem;
|
|
82
|
+
function getItemSync(key) {
|
|
83
|
+
try {
|
|
84
|
+
const db = getDatabase();
|
|
85
|
+
const row = db
|
|
86
|
+
.prepare('SELECT value, type FROM localstorage WHERE key = ?')
|
|
87
|
+
.get(key);
|
|
88
|
+
if (!row) {
|
|
89
|
+
return undefined;
|
|
90
|
+
}
|
|
91
|
+
let value;
|
|
92
|
+
switch (row.type) {
|
|
93
|
+
case 'number':
|
|
94
|
+
value = parseFloat(row.value);
|
|
95
|
+
break;
|
|
96
|
+
case 'boolean':
|
|
97
|
+
value = row.value === 'true';
|
|
98
|
+
break;
|
|
99
|
+
default:
|
|
100
|
+
value = row.value;
|
|
101
|
+
}
|
|
102
|
+
return value;
|
|
103
|
+
}
|
|
104
|
+
catch (err) {
|
|
105
|
+
logger.error('LocalStorage.getItemSync error:', err);
|
|
106
|
+
return undefined;
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
LocalStorage.getItemSync = getItemSync;
|
|
110
|
+
async function setItem(key, value) {
|
|
111
|
+
return new Promise((resolve, reject) => {
|
|
112
|
+
try {
|
|
113
|
+
const db = getDatabase();
|
|
114
|
+
const type = typeof value;
|
|
115
|
+
const stringValue = String(value);
|
|
116
|
+
db.prepare('INSERT OR REPLACE INTO localstorage (key, value, type) VALUES (?, ?, ?)').run(key, stringValue, type);
|
|
117
|
+
resolve();
|
|
118
|
+
}
|
|
119
|
+
catch (err) {
|
|
120
|
+
logger.error('LocalStorage.setItem error:', err);
|
|
121
|
+
reject(err);
|
|
122
|
+
}
|
|
123
|
+
});
|
|
124
|
+
}
|
|
125
|
+
LocalStorage.setItem = setItem;
|
|
126
|
+
async function removeItem(key) {
|
|
127
|
+
return new Promise((resolve, reject) => {
|
|
128
|
+
try {
|
|
129
|
+
const db = getDatabase();
|
|
130
|
+
db.prepare('DELETE FROM localstorage WHERE key = ?').run(key);
|
|
131
|
+
resolve();
|
|
132
|
+
}
|
|
133
|
+
catch (err) {
|
|
134
|
+
logger.error('LocalStorage.removeItem error:', err);
|
|
135
|
+
reject(err);
|
|
136
|
+
}
|
|
137
|
+
});
|
|
138
|
+
}
|
|
139
|
+
LocalStorage.removeItem = removeItem;
|
|
140
|
+
async function allItems() {
|
|
141
|
+
return new Promise((resolve, reject) => {
|
|
142
|
+
try {
|
|
143
|
+
const db = getDatabase();
|
|
144
|
+
const rows = db
|
|
145
|
+
.prepare('SELECT key, value, type FROM localstorage')
|
|
146
|
+
.all();
|
|
147
|
+
const result = {};
|
|
148
|
+
for (const row of rows) {
|
|
149
|
+
let value;
|
|
150
|
+
switch (row.type) {
|
|
151
|
+
case 'number':
|
|
152
|
+
value = parseFloat(row.value);
|
|
153
|
+
break;
|
|
154
|
+
case 'boolean':
|
|
155
|
+
value = row.value === 'true';
|
|
156
|
+
break;
|
|
157
|
+
default:
|
|
158
|
+
value = row.value;
|
|
159
|
+
}
|
|
160
|
+
result[row.key] = value;
|
|
161
|
+
}
|
|
162
|
+
resolve(result);
|
|
163
|
+
}
|
|
164
|
+
catch (err) {
|
|
165
|
+
logger.error('LocalStorage.allItems error:', err);
|
|
166
|
+
reject(err);
|
|
167
|
+
}
|
|
168
|
+
});
|
|
169
|
+
}
|
|
170
|
+
LocalStorage.allItems = allItems;
|
|
171
|
+
async function clear() {
|
|
172
|
+
return new Promise((resolve, reject) => {
|
|
173
|
+
try {
|
|
174
|
+
const db = getDatabase();
|
|
175
|
+
db.exec('DELETE FROM localstorage');
|
|
176
|
+
resolve();
|
|
177
|
+
}
|
|
178
|
+
catch (err) {
|
|
179
|
+
logger.error('LocalStorage.clear error:', err);
|
|
180
|
+
reject(err);
|
|
181
|
+
}
|
|
182
|
+
});
|
|
183
|
+
}
|
|
184
|
+
LocalStorage.clear = clear;
|
|
185
|
+
})(LocalStorage || (LocalStorage = {}));
|
|
186
|
+
//# sourceMappingURL=localstorage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"localstorage.js","sourceRoot":"","sources":["../../../src/platform/node/localstorage.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Node.js / Bun platform runtime.
|
|
3
|
+
*
|
|
4
|
+
* Re-exports native APIs behind a platform-agnostic interface so the rest of
|
|
5
|
+
* termcast never imports node:* directly (except CLI / build tooling which is
|
|
6
|
+
* excluded from the browser bundle).
|
|
7
|
+
*/
|
|
8
|
+
export declare function ensureDir(dir: string): void;
|
|
9
|
+
export declare function fileExists(p: string): boolean;
|
|
10
|
+
export declare function readFileSync(p: string): string;
|
|
11
|
+
export declare function appendToFile(p: string, data: string): void;
|
|
12
|
+
export declare function unlinkIfExists(p: string): void;
|
|
13
|
+
export declare function readdirSync(dir: string): Array<{
|
|
14
|
+
name: string;
|
|
15
|
+
isDirectory(): boolean;
|
|
16
|
+
}>;
|
|
17
|
+
export declare function rmSync(p: string): void;
|
|
18
|
+
export declare function mkdirSync(dir: string): void;
|
|
19
|
+
export declare function cpSync(src: string, dest: string): void;
|
|
20
|
+
export declare function readdirAsync(dir: string): Promise<Array<{
|
|
21
|
+
name: string;
|
|
22
|
+
isDirectory(): boolean;
|
|
23
|
+
}>>;
|
|
24
|
+
export declare function accessAsync(p: string): Promise<boolean>;
|
|
25
|
+
export declare const joinPath: (...parts: string[]) => string;
|
|
26
|
+
export declare const dirname: (p: string) => string;
|
|
27
|
+
export declare const basename: (p: string) => string;
|
|
28
|
+
export declare const resolvePath: (...parts: string[]) => string;
|
|
29
|
+
export declare const isAbsolute: (p: string) => boolean;
|
|
30
|
+
export declare const relativePath: (from: string, to: string) => string;
|
|
31
|
+
export declare function homedir(): string;
|
|
32
|
+
export declare const platform: string;
|
|
33
|
+
export declare function exit(code?: number): void;
|
|
34
|
+
export declare function getEnv(key: string): string | undefined;
|
|
35
|
+
export declare function setEnv(key: string, value: string): void;
|
|
36
|
+
export declare function cwd(): string;
|
|
37
|
+
export declare function stdoutWrite(data: string): void;
|
|
38
|
+
export declare function isTTY(): boolean;
|
|
39
|
+
export declare function getArgv(): string[];
|
|
40
|
+
export declare function getSystemAppearance(): 'dark' | 'light';
|
|
41
|
+
export declare function byteLength(str: string): number;
|
|
42
|
+
export declare function inspectValue(val: unknown, depth?: number): string;
|
|
43
|
+
export declare function setupErrorHandlers(handler: (err: Error, type: string) => void): void;
|
|
44
|
+
export declare function execWithInput(command: string, input: string): Promise<void>;
|
|
45
|
+
export declare function execCommand(command: string): Promise<string>;
|
|
46
|
+
export declare function copyToClipboard(text: string): Promise<void>;
|
|
47
|
+
export declare function readClipboard(): Promise<string>;
|
|
48
|
+
export declare function openUrl(url: string): Promise<void>;
|
|
49
|
+
export declare function openFile(target: string, app?: string): Promise<void>;
|
|
50
|
+
export declare function showInFileManager(filePath: string): Promise<void>;
|
|
51
|
+
export declare function moveToTrash(filePath: string): Promise<void>;
|
|
52
|
+
//# sourceMappingURL=runtime.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../../src/platform/node/runtime.ts"],"names":[],"mappings":"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"}
|