mcard-js 2.1.39 → 2.1.41

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 (40) hide show
  1. package/dist/AbstractSqlEngine-BSfp8S_Y.d.cts +451 -0
  2. package/dist/AbstractSqlEngine-BSfp8S_Y.d.ts +451 -0
  3. package/dist/CardCollection-MXTUJV4J.js +9 -0
  4. package/dist/EventProducer-AWD6YMZR.js +47 -0
  5. package/dist/Handle-3N4QOA3U.js +13 -0
  6. package/dist/IndexedDBEngine-2G5KCISA.js +11 -0
  7. package/dist/LLMRuntime-LBWUJ7ON.js +16 -0
  8. package/dist/LambdaRuntime-B6D6IQKZ.js +18 -0
  9. package/dist/Loader-3LSJXJQG.js +11 -0
  10. package/dist/MCard-H56VOJLR.js +8 -0
  11. package/dist/NetworkRuntime-IAFHPQSX.js +1570 -0
  12. package/dist/OllamaProvider-QPX2JXL2.js +8 -0
  13. package/dist/chunk-2R4ESMZB.js +110 -0
  14. package/dist/chunk-3EIBJPNF.js +17 -0
  15. package/dist/chunk-3LPY36OG.js +355 -0
  16. package/dist/chunk-3MMMJ7NH.js +1068 -0
  17. package/dist/chunk-42VF42KH.js +273 -0
  18. package/dist/chunk-4PDYHPR6.js +297 -0
  19. package/dist/chunk-ADV52544.js +95 -0
  20. package/dist/chunk-FIE4LAJG.js +215 -0
  21. package/dist/chunk-PNKVD2UK.js +26 -0
  22. package/dist/chunk-RSTKX7WM.js +907 -0
  23. package/dist/chunk-VXV35I5J.js +2315 -0
  24. package/dist/index.browser.cjs +375 -276
  25. package/dist/index.browser.d.cts +4 -4
  26. package/dist/index.browser.d.ts +4 -4
  27. package/dist/index.browser.js +18 -13
  28. package/dist/index.cjs +382 -453
  29. package/dist/index.d.cts +2 -2
  30. package/dist/index.d.ts +2 -2
  31. package/dist/index.js +26 -21
  32. package/dist/storage/SqliteNodeEngine.cjs +395 -270
  33. package/dist/storage/SqliteNodeEngine.d.cts +9 -94
  34. package/dist/storage/SqliteNodeEngine.d.ts +9 -94
  35. package/dist/storage/SqliteNodeEngine.js +6 -5
  36. package/dist/storage/SqliteWasmEngine.cjs +382 -252
  37. package/dist/storage/SqliteWasmEngine.d.cts +8 -29
  38. package/dist/storage/SqliteWasmEngine.d.ts +8 -29
  39. package/dist/storage/SqliteWasmEngine.js +6 -5
  40. package/package.json +1 -1
@@ -0,0 +1,215 @@
1
+ import {
2
+ AbstractSqlEngine,
3
+ initCoreSchemas
4
+ } from "./chunk-RSTKX7WM.js";
5
+ import {
6
+ createPage
7
+ } from "./chunk-3EIBJPNF.js";
8
+ import {
9
+ Handle_exports,
10
+ init_Handle
11
+ } from "./chunk-ADV52544.js";
12
+ import {
13
+ DEFAULT_PAGE_SIZE,
14
+ MCard,
15
+ SQLITE_BUSY_TIMEOUT_MS
16
+ } from "./chunk-3MMMJ7NH.js";
17
+ import {
18
+ __toCommonJS
19
+ } from "./chunk-PNKVD2UK.js";
20
+
21
+ // src/storage/engines/SqliteNodeEngine.ts
22
+ var SqliteNodeEngine = class _SqliteNodeEngine extends AbstractSqlEngine {
23
+ db;
24
+ dbPath;
25
+ /**
26
+ * Convert a database row into an MCard instance.
27
+ */
28
+ rowToCard(row) {
29
+ const rawContent = row.content;
30
+ const content = rawContent instanceof Buffer ? new Uint8Array(rawContent) : new Uint8Array(rawContent);
31
+ return MCard.fromData(content, String(row.hash), String(row.g_time));
32
+ }
33
+ /**
34
+ * Create a new SqliteNodeEngine via async factory.
35
+ * @param dbPath Path to database file, or ':memory:' for in-memory database
36
+ */
37
+ static async create(dbPath = ":memory:") {
38
+ const engine = new _SqliteNodeEngine(dbPath);
39
+ await engine.init();
40
+ return engine;
41
+ }
42
+ constructor(dbPath) {
43
+ super();
44
+ this.dbPath = dbPath;
45
+ }
46
+ async init() {
47
+ try {
48
+ const mod = await import("better-sqlite3");
49
+ const Database = mod.default || mod;
50
+ this.db = new Database(this.dbPath);
51
+ this.setupDatabase();
52
+ } catch (e) {
53
+ console.error(`SqliteNodeEngine: Failed to load better-sqlite3: ${e.message}`);
54
+ throw e;
55
+ }
56
+ }
57
+ /**
58
+ * Initialize database schema
59
+ */
60
+ setupDatabase() {
61
+ this.db.pragma("journal_mode = WAL");
62
+ this.db.pragma(`busy_timeout = ${SQLITE_BUSY_TIMEOUT_MS}`);
63
+ this.db.pragma("synchronous = NORMAL");
64
+ initCoreSchemas(this.db);
65
+ }
66
+ // ======================================================================
67
+ // AbstractSqlEngine primitives
68
+ // ======================================================================
69
+ async queryRows(sql, ...params) {
70
+ const stmt = this.db.prepare(sql);
71
+ return stmt.all(...params);
72
+ }
73
+ async execSql(sql, ...params) {
74
+ if (params.length === 0) {
75
+ this.db.exec(sql);
76
+ return 0;
77
+ }
78
+ const stmt = this.db.prepare(sql);
79
+ const result = stmt.run(...params);
80
+ return result.changes;
81
+ }
82
+ /**
83
+ * Close the database connection
84
+ */
85
+ close() {
86
+ this.db.close();
87
+ }
88
+ /**
89
+ * Get the database path
90
+ */
91
+ getDbPath() {
92
+ return this.dbPath;
93
+ }
94
+ // =========== Card Operations (overrides to use Buffer.from for better-sqlite3) ===========
95
+ async add(card) {
96
+ const stmt = this.db.prepare(
97
+ "INSERT OR REPLACE INTO card (hash, content, g_time) VALUES (?, ?, ?)"
98
+ );
99
+ stmt.run(card.hash, Buffer.from(card.content), card.g_time);
100
+ return card.hash;
101
+ }
102
+ // =========== Sync card operations (for performance-critical callers) ===========
103
+ addSync(card) {
104
+ const stmt = this.db.prepare(
105
+ "INSERT OR REPLACE INTO card (hash, content, g_time) VALUES (?, ?, ?)"
106
+ );
107
+ stmt.run(card.hash, Buffer.from(card.content), card.g_time);
108
+ return card.hash;
109
+ }
110
+ getSync(hash) {
111
+ const stmt = this.db.prepare("SELECT hash, content, g_time FROM card WHERE hash = ?");
112
+ const row = stmt.get(hash);
113
+ if (!row) return null;
114
+ return this.rowToCard(row);
115
+ }
116
+ deleteSync(hash) {
117
+ const stmt = this.db.prepare("DELETE FROM card WHERE hash = ?");
118
+ const result = stmt.run(hash);
119
+ return result.changes > 0;
120
+ }
121
+ getPageSync(pageNumber = 1, pageSize = DEFAULT_PAGE_SIZE) {
122
+ if (pageNumber < 1) throw new Error("Page number must be >= 1");
123
+ if (pageSize < 1) throw new Error("Page size must be >= 1");
124
+ const totalItems = this.countSync();
125
+ const offset = (pageNumber - 1) * pageSize;
126
+ const stmt = this.db.prepare(
127
+ "SELECT hash, content, g_time FROM card ORDER BY g_time DESC LIMIT ? OFFSET ?"
128
+ );
129
+ const rows = stmt.all(pageSize, offset);
130
+ const items = rows.map((row) => this.rowToCard(row));
131
+ return createPage(items, totalItems, pageNumber, pageSize);
132
+ }
133
+ countSync() {
134
+ const stmt = this.db.prepare("SELECT COUNT(*) as cnt FROM card");
135
+ const row = stmt.get();
136
+ return row.cnt;
137
+ }
138
+ clearSync() {
139
+ this.db.exec("DELETE FROM handle_history");
140
+ this.db.exec("DELETE FROM handle_registry");
141
+ this.db.exec("DELETE FROM card");
142
+ }
143
+ // =========== Additional sync search operations ===========
144
+ searchByString(searchString, pageNumber = 1, pageSize = DEFAULT_PAGE_SIZE) {
145
+ if (pageNumber < 1) throw new Error("Page number must be >= 1");
146
+ if (pageSize < 1) throw new Error("Page size must be >= 1");
147
+ const pattern = `%${searchString}%`;
148
+ const offset = (pageNumber - 1) * pageSize;
149
+ const countStmt = this.db.prepare(`
150
+ SELECT COUNT(*) as cnt FROM card
151
+ WHERE hash LIKE ? OR g_time LIKE ? OR CAST(content AS TEXT) LIKE ?
152
+ `);
153
+ const countRow = countStmt.get(pattern, pattern, pattern);
154
+ const totalItems = countRow.cnt;
155
+ const stmt = this.db.prepare(`
156
+ SELECT hash, content, g_time FROM card
157
+ WHERE hash LIKE ? OR g_time LIKE ? OR CAST(content AS TEXT) LIKE ?
158
+ ORDER BY g_time DESC LIMIT ? OFFSET ?
159
+ `);
160
+ const rows = stmt.all(pattern, pattern, pattern, pageSize, offset);
161
+ const items = rows.map((row) => this.rowToCard(row));
162
+ return createPage(items, totalItems, pageNumber, pageSize);
163
+ }
164
+ searchByContent(searchPattern, pageNumber = 1, pageSize = DEFAULT_PAGE_SIZE) {
165
+ if (pageNumber < 1) throw new Error("Page number must be >= 1");
166
+ if (pageSize < 1) throw new Error("Page size must be >= 1");
167
+ if (!searchPattern || typeof searchPattern === "string" && searchPattern.length === 0) {
168
+ throw new Error("Search pattern cannot be empty");
169
+ }
170
+ const searchBytes = typeof searchPattern === "string" ? Buffer.from(searchPattern, "utf-8") : Buffer.from(searchPattern);
171
+ const offset = (pageNumber - 1) * pageSize;
172
+ const countStmt = this.db.prepare("SELECT COUNT(*) as cnt FROM card WHERE INSTR(content, ?) > 0");
173
+ const countRow = countStmt.get(searchBytes);
174
+ const totalItems = countRow.cnt;
175
+ const stmt = this.db.prepare(`
176
+ SELECT hash, content, g_time FROM card
177
+ WHERE INSTR(content, ?) > 0
178
+ ORDER BY g_time DESC LIMIT ? OFFSET ?
179
+ `);
180
+ const rows = stmt.all(searchBytes, pageSize, offset);
181
+ const items = rows.map((row) => this.rowToCard(row));
182
+ return createPage(items, totalItems, pageNumber, pageSize);
183
+ }
184
+ getAllCards() {
185
+ const stmt = this.db.prepare("SELECT hash, content, g_time FROM card ORDER BY g_time DESC");
186
+ const rows = stmt.all();
187
+ const items = rows.map((row) => this.rowToCard(row));
188
+ return createPage(items, items.length, 1, items.length || 1);
189
+ }
190
+ // =========== Unique sync method (not in AbstractSqlEngine) ===========
191
+ deleteHistoryEntrySync(handle, previousHash) {
192
+ const { validateHandle } = (init_Handle(), __toCommonJS(Handle_exports));
193
+ const normalized = validateHandle(handle);
194
+ const performStitch = this.db.transaction(() => {
195
+ const rOut = this.db.prepare(
196
+ "SELECT id, previous_hash FROM handle_history WHERE handle = ? AND previous_hash = ? ORDER BY id DESC LIMIT 1"
197
+ ).get(normalized, previousHash);
198
+ if (!rOut) return;
199
+ const rIn = this.db.prepare(
200
+ "SELECT id, previous_hash FROM handle_history WHERE handle = ? AND id < ? ORDER BY id DESC LIMIT 1"
201
+ ).get(normalized, rOut.id);
202
+ if (rIn) {
203
+ this.db.prepare("UPDATE handle_history SET previous_hash = ? WHERE id = ?").run(rIn.previous_hash, rOut.id);
204
+ this.db.prepare("DELETE FROM handle_history WHERE id = ?").run(rIn.id);
205
+ } else {
206
+ this.db.prepare("DELETE FROM handle_history WHERE id = ?").run(rOut.id);
207
+ }
208
+ });
209
+ performStitch();
210
+ }
211
+ };
212
+
213
+ export {
214
+ SqliteNodeEngine
215
+ };
@@ -0,0 +1,26 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
+ var __getOwnPropNames = Object.getOwnPropertyNames;
4
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
5
+ var __esm = (fn, res) => function __init() {
6
+ return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res;
7
+ };
8
+ var __export = (target, all) => {
9
+ for (var name in all)
10
+ __defProp(target, name, { get: all[name], enumerable: true });
11
+ };
12
+ var __copyProps = (to, from, except, desc) => {
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (let key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(to, key) && key !== except)
16
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
+ }
18
+ return to;
19
+ };
20
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
21
+
22
+ export {
23
+ __esm,
24
+ __export,
25
+ __toCommonJS
26
+ };