@j0hanz/memdb 1.0.1 → 1.0.3

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 (71) hide show
  1. package/README.md +157 -66
  2. package/dist/core/database.d.ts +2 -7
  3. package/dist/core/database.d.ts.map +1 -1
  4. package/dist/core/database.js +72 -81
  5. package/dist/core/database.js.map +1 -1
  6. package/dist/core/db-worker-client.d.ts +8 -0
  7. package/dist/core/db-worker-client.d.ts.map +1 -0
  8. package/dist/core/db-worker-client.js +67 -0
  9. package/dist/core/db-worker-client.js.map +1 -0
  10. package/dist/core/db-worker-protocol.d.ts +77 -0
  11. package/dist/core/db-worker-protocol.d.ts.map +1 -0
  12. package/dist/core/db-worker-protocol.js +2 -0
  13. package/dist/core/db-worker-protocol.js.map +1 -0
  14. package/dist/core/db-worker.d.ts +2 -0
  15. package/dist/core/db-worker.d.ts.map +1 -0
  16. package/dist/core/db-worker.js +73 -0
  17. package/dist/core/db-worker.js.map +1 -0
  18. package/dist/core/memory-mappers.d.ts +11 -0
  19. package/dist/core/memory-mappers.d.ts.map +1 -0
  20. package/dist/core/memory-mappers.js +52 -0
  21. package/dist/core/memory-mappers.js.map +1 -0
  22. package/dist/core/memory-search.d.ts +9 -0
  23. package/dist/core/memory-search.d.ts.map +1 -0
  24. package/dist/core/memory-search.js +46 -0
  25. package/dist/core/memory-search.js.map +1 -0
  26. package/dist/core/memory-service-core.d.ts +9 -0
  27. package/dist/core/memory-service-core.d.ts.map +1 -0
  28. package/dist/core/memory-service-core.js +229 -0
  29. package/dist/core/memory-service-core.js.map +1 -0
  30. package/dist/core/memory-service.d.ts +8 -30
  31. package/dist/core/memory-service.d.ts.map +1 -1
  32. package/dist/core/memory-service.js +184 -169
  33. package/dist/core/memory-service.js.map +1 -1
  34. package/dist/core/memory-types.d.ts +18 -0
  35. package/dist/core/memory-types.d.ts.map +1 -0
  36. package/dist/core/memory-types.js +2 -0
  37. package/dist/core/memory-types.js.map +1 -0
  38. package/dist/core/row-mappers.d.ts +7 -0
  39. package/dist/core/row-mappers.d.ts.map +1 -0
  40. package/dist/core/row-mappers.js +52 -0
  41. package/dist/core/row-mappers.js.map +1 -0
  42. package/dist/core/search-errors.d.ts +2 -0
  43. package/dist/core/search-errors.d.ts.map +1 -0
  44. package/dist/core/search-errors.js +21 -0
  45. package/dist/core/search-errors.js.map +1 -0
  46. package/dist/index.js +86 -18
  47. package/dist/index.js.map +1 -1
  48. package/dist/lib/errors.d.ts +3 -2
  49. package/dist/lib/errors.d.ts.map +1 -1
  50. package/dist/lib/errors.js.map +1 -1
  51. package/dist/schemas/inputs.d.ts.map +1 -1
  52. package/dist/schemas/inputs.js +5 -5
  53. package/dist/schemas/inputs.js.map +1 -1
  54. package/dist/tools/index.d.ts.map +1 -1
  55. package/dist/tools/index.js +130 -14
  56. package/dist/tools/index.js.map +1 -1
  57. package/dist/types/index.d.ts +25 -17
  58. package/dist/types/index.d.ts.map +1 -1
  59. package/dist/utils/config.d.ts +4 -0
  60. package/dist/utils/config.d.ts.map +1 -1
  61. package/dist/utils/config.js +48 -1
  62. package/dist/utils/config.js.map +1 -1
  63. package/dist/utils/logger.d.ts +6 -2
  64. package/dist/utils/logger.d.ts.map +1 -1
  65. package/dist/utils/logger.js +25 -10
  66. package/dist/utils/logger.js.map +1 -1
  67. package/dist/utils/protocol.d.ts +2 -0
  68. package/dist/utils/protocol.d.ts.map +1 -0
  69. package/dist/utils/protocol.js +7 -0
  70. package/dist/utils/protocol.js.map +1 -0
  71. package/package.json +5 -1
@@ -1,179 +1,194 @@
1
1
  import crypto from 'node:crypto';
2
- import { dbManager } from './database.js';
3
- export class MemoryService {
4
- db = dbManager.getDb();
5
- createMemory(content, tags = [], importance = 0, memoryType = 'general') {
6
- const hash = crypto.createHash('md5').update(content).digest('hex');
7
- // Check if exists
8
- const existing = this.db
9
- .prepare('SELECT id FROM memories WHERE hash = ?')
10
- .get(hash);
11
- if (existing) {
12
- return { id: existing.id, hash, isNew: false };
13
- }
14
- const insert = this.db.prepare('INSERT INTO memories (content, importance, memory_type, hash) VALUES (?, ?, ?, ?)');
15
- const uniqueTags = tags.length > 0 ? [...new Set(tags)] : [];
16
- if (uniqueTags.length > 0) {
17
- this.db.exec('BEGIN IMMEDIATE');
18
- try {
19
- const result = insert.run(content, importance, memoryType, hash);
20
- const memoryId = result.lastInsertRowid;
21
- const insertTag = this.db.prepare('INSERT INTO tags (memory_id, tag) VALUES (?, ?)');
22
- for (const tag of uniqueTags) {
23
- insertTag.run(memoryId, tag);
24
- }
25
- this.db.exec('COMMIT');
26
- return { id: memoryId, hash, isNew: true };
27
- }
28
- catch (err) {
29
- this.db.exec('ROLLBACK');
30
- throw err;
31
- }
32
- }
33
- const result = insert.run(content, importance, memoryType, hash);
34
- const memoryId = result.lastInsertRowid;
35
- return { id: memoryId, hash, isNew: true };
2
+ import { db } from './database.js';
3
+ import { mapRowToMemory, mapRowToRelatedMemory, mapRowToSearchResult, toSafeInteger, } from './row-mappers.js';
4
+ import { toSearchError } from './search-errors.js';
5
+ const executeAll = (stmt, ...params) => stmt.all(...params);
6
+ const executeGet = (stmt, ...params) => stmt.get(...params);
7
+ const executeRun = (stmt, ...params) => stmt.run(...params);
8
+ const buildSearchQuery = (query, limit, tags, minRelevance) => {
9
+ const sanitizedQuery = `"${query.replace(/"/g, '""')}"`;
10
+ const relevanceExpr = '1.0 / (1.0 + abs(bm25(memories_fts)))';
11
+ const whereParts = ['memories_fts MATCH ?'];
12
+ const params = [sanitizedQuery];
13
+ if (tags.length > 0) {
14
+ whereParts.push(`m.id IN (SELECT memory_id FROM tags WHERE tag IN (${tags
15
+ .map(() => '?')
16
+ .join(', ')}))`);
17
+ params.push(...tags);
36
18
  }
37
- searchMemories(query, limit = 10, tags = [], minRelevance) {
38
- const uniqueTags = tags.length > 0 ? [...new Set(tags)] : [];
39
- const relevanceExpr = '1.0 / (1.0 + abs(bm25(memories_fts)))';
40
- const whereParts = ['memories_fts MATCH ?'];
41
- const params = [query];
42
- if (uniqueTags.length > 0) {
43
- whereParts.push(`m.id IN (SELECT memory_id FROM tags WHERE tag IN (${uniqueTags
44
- .map(() => '?')
45
- .join(', ')}))`);
46
- params.push(...uniqueTags);
47
- }
48
- let sql = `
49
- WITH ranked AS (
50
- SELECT m.*, ${relevanceExpr} as relevance
51
- FROM memories m
52
- JOIN memories_fts fts ON m.id = fts.rowid
53
- WHERE ${whereParts.join(' AND ')}
54
- )
55
- SELECT * FROM ranked
56
- `;
57
- if (minRelevance !== undefined) {
58
- sql += ' WHERE relevance >= ?';
59
- params.push(minRelevance);
60
- }
61
- sql += ' ORDER BY relevance DESC LIMIT ?';
62
- params.push(limit);
63
- const stmt = this.db.prepare(sql);
64
- let rows;
65
- try {
66
- rows = stmt.all(...params);
67
- }
68
- catch (err) {
69
- const message = err instanceof Error ? err.message : String(err);
70
- if (message.includes('fts5') || message.includes('syntax error')) {
71
- throw new Error(`Invalid search query syntax. Check for unbalanced quotes or special characters. Details: ${message}`);
72
- }
73
- throw err;
19
+ let sql = `
20
+ WITH ranked AS (
21
+ SELECT m.*, ${relevanceExpr} as relevance
22
+ FROM memories m
23
+ JOIN memories_fts fts ON m.id = fts.rowid
24
+ WHERE ${whereParts.join(' AND ')}
25
+ )
26
+ SELECT * FROM ranked
27
+ `;
28
+ if (minRelevance !== undefined) {
29
+ sql += ' WHERE relevance >= ?';
30
+ params.push(minRelevance);
31
+ }
32
+ sql += ' ORDER BY relevance DESC LIMIT ?';
33
+ params.push(limit);
34
+ return { sql, params };
35
+ };
36
+ const executeSearch = (sql, params) => {
37
+ try {
38
+ const stmt = db.prepare(sql);
39
+ return executeAll(stmt, ...params);
40
+ }
41
+ catch (err) {
42
+ const mappedError = toSearchError(err);
43
+ if (mappedError) {
44
+ throw mappedError;
74
45
  }
75
- return rows.map((row) => ({
76
- id: row.id,
77
- content: row.content,
78
- summary: row.summary,
79
- importance: row.importance,
80
- memory_type: row.memory_type,
81
- created_at: row.created_at,
82
- accessed_at: row.accessed_at,
83
- hash: row.hash,
84
- relevance: row.relevance,
85
- }));
46
+ throw err;
86
47
  }
87
- getMemory(hash) {
88
- return this.db
89
- .prepare('SELECT * FROM memories WHERE hash = ?')
90
- .get(hash);
48
+ };
49
+ const buildHash = (content) => crypto.createHash('md5').update(content).digest('hex');
50
+ const assertValidTag = (tag) => {
51
+ if (tag.length === 0) {
52
+ throw new Error('Tag must be at least 1 character');
91
53
  }
92
- deleteMemory(hash) {
93
- return this.db
94
- .prepare('DELETE FROM memories WHERE hash = ?')
95
- .run(hash);
54
+ if (tag.length > 50) {
55
+ throw new Error('Tag exceeds 50 characters');
96
56
  }
97
- linkMemories(fromHash, toHash, relationType) {
98
- const from = this.getMemory(fromHash);
99
- const to = this.getMemory(toHash);
100
- if (!from || !to) {
101
- throw new Error('One or both memories not found');
102
- }
103
- const insert = this.db.prepare('INSERT OR IGNORE INTO relationships (from_memory_id, to_memory_id, relation_type) VALUES (?, ?, ?)');
104
- return insert.run(from.id, to.id, relationType);
57
+ };
58
+ const normalizeTags = (tags, maxTags) => {
59
+ if (tags.length === 0)
60
+ return [];
61
+ if (tags.length > maxTags) {
62
+ throw new Error('Too many tags (max ' + String(maxTags) + ')');
105
63
  }
106
- getRelated(hash, relationType, depth = 1) {
107
- const memory = this.getMemory(hash);
108
- if (!memory)
109
- return [];
110
- const maxDepth = Math.max(1, depth);
111
- const baseFilter = relationType ? ' AND r.relation_type = ?' : '';
112
- const baseParams = [memory.id];
113
- if (relationType) {
114
- baseParams.push(relationType);
115
- }
116
- if (maxDepth === 1) {
117
- const sql = `
118
- SELECT m.*, r.relation_type as relation_type, 1 as depth
119
- FROM memories m
120
- JOIN relationships r ON m.id = r.to_memory_id
121
- WHERE r.from_memory_id = ?${baseFilter}
122
- `;
123
- const rows = this.db.prepare(sql).all(...baseParams);
124
- return rows.map((row) => ({
125
- id: row.id,
126
- content: row.content,
127
- summary: row.summary,
128
- importance: row.importance,
129
- memory_type: row.memory_type,
130
- created_at: row.created_at,
131
- accessed_at: row.accessed_at,
132
- hash: row.hash,
133
- relation_type: row.relation_type,
134
- depth: row.depth,
135
- }));
136
- }
137
- const sql = `
138
- WITH RECURSIVE rels(depth, from_id, to_id, relation_type) AS (
139
- SELECT 1, r.from_memory_id, r.to_memory_id, r.relation_type
140
- FROM relationships r
141
- WHERE r.from_memory_id = ?${baseFilter}
142
- UNION ALL
143
- SELECT rels.depth + 1, r.from_memory_id, r.to_memory_id, r.relation_type
144
- FROM relationships r
145
- JOIN rels ON r.from_memory_id = rels.to_id
146
- WHERE rels.depth < ?${relationType ? ' AND r.relation_type = ?' : ''}
147
- )
148
- SELECT m.*, rels.relation_type as relation_type, MIN(rels.depth) as depth
149
- FROM rels
150
- JOIN memories m ON m.id = rels.to_id
151
- GROUP BY m.id, rels.relation_type
152
- ORDER BY depth, m.id
153
- `;
154
- const recursiveParams = [...baseParams, maxDepth];
155
- if (relationType) {
156
- recursiveParams.push(relationType);
157
- }
158
- const rows = this.db.prepare(sql).all(...recursiveParams);
159
- return rows.map((row) => ({
160
- id: row.id,
161
- content: row.content,
162
- summary: row.summary,
163
- importance: row.importance,
164
- memory_type: row.memory_type,
165
- created_at: row.created_at,
166
- accessed_at: row.accessed_at,
167
- hash: row.hash,
168
- relation_type: row.relation_type,
169
- depth: row.depth,
170
- }));
64
+ const seen = new Set();
65
+ for (const tag of tags) {
66
+ assertValidTag(tag);
67
+ seen.add(tag);
68
+ }
69
+ return [...seen];
70
+ };
71
+ const withImmediateTransaction = (operation) => {
72
+ db.exec('BEGIN IMMEDIATE');
73
+ try {
74
+ const result = operation();
75
+ db.exec('COMMIT');
76
+ return result;
77
+ }
78
+ catch (err) {
79
+ db.exec('ROLLBACK');
80
+ throw err;
81
+ }
82
+ };
83
+ const findMemoryIdByHash = (hash) => {
84
+ const row = executeGet(db.prepare('SELECT id FROM memories WHERE hash = ?'), hash);
85
+ if (!row)
86
+ return undefined;
87
+ return toSafeInteger(row.id, 'id');
88
+ };
89
+ const insertTags = (memoryId, tags) => {
90
+ if (tags.length === 0)
91
+ return;
92
+ const insertTag = db.prepare('INSERT OR IGNORE INTO tags (memory_id, tag) VALUES (?, ?)');
93
+ for (const tag of tags) {
94
+ executeRun(insertTag, memoryId, tag);
95
+ }
96
+ };
97
+ export const createMemory = (content, tags = [], importance = 0, memoryType = 'general') => withImmediateTransaction(() => {
98
+ const hash = buildHash(content);
99
+ const normalizedTags = normalizeTags(tags, 100);
100
+ const insert = db.prepare('INSERT OR IGNORE INTO memories (content, importance, ' +
101
+ 'memory_type, hash) VALUES (?, ?, ?, ?)');
102
+ const result = executeRun(insert, content, importance, memoryType, hash);
103
+ const id = findMemoryIdByHash(hash);
104
+ if (id === undefined) {
105
+ throw new Error('Failed to resolve memory id');
106
+ }
107
+ insertTags(id, normalizedTags);
108
+ return { id, hash, isNew: toSafeInteger(result.changes, 'changes') === 1 };
109
+ });
110
+ export const searchMemories = (query, limit = 10, tags = [], minRelevance) => {
111
+ const { sql, params } = buildSearchQuery(query, limit, normalizeTags(tags, 50), minRelevance);
112
+ const rows = executeSearch(sql, params);
113
+ return rows.map((row) => mapRowToSearchResult(row));
114
+ };
115
+ export const getMemory = (hash) => {
116
+ const row = executeGet(db.prepare('SELECT * FROM memories WHERE hash = ?'), hash);
117
+ return row ? mapRowToMemory(row) : undefined;
118
+ };
119
+ export const deleteMemory = (hash) => {
120
+ const result = executeRun(db.prepare('DELETE FROM memories WHERE hash = ?'), hash);
121
+ return { changes: toSafeInteger(result.changes, 'changes') };
122
+ };
123
+ export const linkMemories = (fromHash, toHash, relationType) => {
124
+ const fromId = findMemoryIdByHash(fromHash);
125
+ const toId = findMemoryIdByHash(toHash);
126
+ if (fromId === undefined || toId === undefined) {
127
+ throw new Error('One or both memories not found');
128
+ }
129
+ const insert = db.prepare('INSERT OR IGNORE INTO relationships (from_memory_id, to_memory_id, ' +
130
+ 'relation_type) VALUES (?, ?, ?)');
131
+ const result = executeRun(insert, fromId, toId, relationType);
132
+ return { changes: toSafeInteger(result.changes, 'changes') };
133
+ };
134
+ export const getRelated = (hash, relationType, depth = 1) => {
135
+ const memoryId = findMemoryIdByHash(hash);
136
+ if (memoryId === undefined)
137
+ return [];
138
+ const maxDepth = Math.max(1, depth);
139
+ if (maxDepth === 1) {
140
+ return getRelatedDirect(memoryId, relationType);
171
141
  }
172
- getStats() {
173
- const memoryCount = this.db.prepare('SELECT COUNT(*) as count FROM memories').get().count;
174
- const relationshipCount = this.db.prepare('SELECT COUNT(*) as count FROM relationships').get().count;
175
- return { memoryCount, relationshipCount };
142
+ return getRelatedRecursive(memoryId, relationType, maxDepth);
143
+ };
144
+ export const getStats = () => {
145
+ const memoryRow = executeGet(db.prepare('SELECT COUNT(*) as count FROM memories'));
146
+ const relationshipRow = executeGet(db.prepare('SELECT COUNT(*) as count FROM relationships'));
147
+ if (!memoryRow || !relationshipRow) {
148
+ throw new Error('Failed to load database stats');
176
149
  }
177
- }
178
- export const memoryService = new MemoryService();
150
+ return {
151
+ memoryCount: toSafeInteger(memoryRow.count, 'memoryCount'),
152
+ relationshipCount: toSafeInteger(relationshipRow.count, 'relationshipCount'),
153
+ };
154
+ };
155
+ const getRelatedDirect = (memoryId, relationType) => {
156
+ const clause = relationType ? ' AND r.relation_type = ?' : '';
157
+ const params = relationType ? [relationType] : [];
158
+ const sql = `
159
+ SELECT m.*, r.relation_type as relation_type, 1 as depth
160
+ FROM memories m
161
+ JOIN relationships r ON m.id = r.to_memory_id
162
+ WHERE r.from_memory_id = ?${clause}
163
+ LIMIT 1000
164
+ `;
165
+ const rows = executeAll(db.prepare(sql), memoryId, ...params);
166
+ return rows.map((row) => mapRowToRelatedMemory(row));
167
+ };
168
+ const getRelatedRecursive = (memoryId, relationType, maxDepth) => {
169
+ const clause = relationType ? ' AND r.relation_type = ?' : '';
170
+ const sql = `
171
+ WITH RECURSIVE rels(depth, from_id, to_id, relation_type) AS (
172
+ SELECT 1, r.from_memory_id, r.to_memory_id, r.relation_type
173
+ FROM relationships r
174
+ WHERE r.from_memory_id = ?${clause}
175
+ UNION ALL
176
+ SELECT rels.depth + 1, r.from_memory_id, r.to_memory_id, r.relation_type
177
+ FROM relationships r
178
+ JOIN rels ON r.from_memory_id = rels.to_id
179
+ WHERE rels.depth < ?${clause}
180
+ )
181
+ SELECT m.*, rels.relation_type as relation_type, MIN(rels.depth) as depth
182
+ FROM rels
183
+ JOIN memories m ON m.id = rels.to_id
184
+ GROUP BY m.id, rels.relation_type
185
+ ORDER BY depth, m.id
186
+ LIMIT 1000
187
+ `;
188
+ const queryParams = relationType
189
+ ? [memoryId, relationType, maxDepth, relationType]
190
+ : [memoryId, maxDepth];
191
+ const rows = executeAll(db.prepare(sql), ...queryParams);
192
+ return rows.map((row) => mapRowToRelatedMemory(row));
193
+ };
179
194
  //# sourceMappingURL=memory-service.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"memory-service.js","sourceRoot":"","sources":["../../src/core/memory-service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"memory-service.js","sourceRoot":"","sources":["../../src/core/memory-service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import type { Memory } from '../types/index.js';
2
+ export interface RelatedMemory extends Memory {
3
+ relation_type: string;
4
+ depth: number;
5
+ }
6
+ export interface StatementResult {
7
+ changes: number;
8
+ }
9
+ export interface MemoryInsertResult {
10
+ id: number;
11
+ hash: string;
12
+ isNew: boolean;
13
+ }
14
+ export interface MemoryStats {
15
+ memoryCount: number;
16
+ relationshipCount: number;
17
+ }
18
+ //# sourceMappingURL=memory-types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory-types.d.ts","sourceRoot":"","sources":["../../src/core/memory-types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAEhD,MAAM,WAAW,aAAc,SAAQ,MAAM;IAC3C,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,WAAW;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,iBAAiB,EAAE,MAAM,CAAC;CAC3B"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=memory-types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory-types.js","sourceRoot":"","sources":["../../src/core/memory-types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,7 @@
1
+ import type { Memory, RelatedMemory, SearchResult } from '../types/index.js';
2
+ export type DbRow = Record<string, unknown>;
3
+ export declare const toSafeInteger: (value: unknown, field: string) => number;
4
+ export declare const mapRowToMemory: (row: DbRow) => Memory;
5
+ export declare const mapRowToSearchResult: (row: DbRow) => SearchResult;
6
+ export declare const mapRowToRelatedMemory: (row: DbRow) => RelatedMemory;
7
+ //# sourceMappingURL=row-mappers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"row-mappers.d.ts","sourceRoot":"","sources":["../../src/core/row-mappers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAE7E,MAAM,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAW5C,eAAO,MAAM,aAAa,GAAI,OAAO,OAAO,EAAE,OAAO,MAAM,KAAG,MAM7D,CAAC;AAuBF,eAAO,MAAM,cAAc,GAAI,KAAK,KAAK,KAAG,MAS1C,CAAC;AAEH,eAAO,MAAM,oBAAoB,GAAI,KAAK,KAAK,KAAG,YAGhD,CAAC;AAEH,eAAO,MAAM,qBAAqB,GAAI,KAAK,KAAK,KAAG,aAIjD,CAAC"}
@@ -0,0 +1,52 @@
1
+ const toNumber = (value, field) => {
2
+ if (typeof value === 'number' && Number.isFinite(value))
3
+ return value;
4
+ if (typeof value === 'bigint') {
5
+ const numeric = Number(value);
6
+ if (Number.isFinite(numeric))
7
+ return numeric;
8
+ }
9
+ throw new Error(`Invalid ${field}`);
10
+ };
11
+ export const toSafeInteger = (value, field) => {
12
+ const numeric = toNumber(value, field);
13
+ if (!Number.isSafeInteger(numeric)) {
14
+ throw new Error(`Invalid ${field}`);
15
+ }
16
+ return numeric;
17
+ };
18
+ const toString = (value, field) => {
19
+ if (typeof value === 'string')
20
+ return value;
21
+ throw new Error(`Invalid ${field}`);
22
+ };
23
+ const toOptionalString = (value, field) => {
24
+ if (value === null || value === undefined)
25
+ return undefined;
26
+ return toString(value, field);
27
+ };
28
+ const toOptionalNumber = (value, field) => {
29
+ if (value === null || value === undefined)
30
+ return undefined;
31
+ return toNumber(value, field);
32
+ };
33
+ export const mapRowToMemory = (row) => ({
34
+ id: toSafeInteger(row.id, 'id'),
35
+ content: toString(row.content, 'content'),
36
+ summary: toOptionalString(row.summary, 'summary'),
37
+ importance: toSafeInteger(row.importance, 'importance'),
38
+ memory_type: toString(row.memory_type, 'memory_type'),
39
+ created_at: toString(row.created_at, 'created_at'),
40
+ accessed_at: toString(row.accessed_at, 'accessed_at'),
41
+ hash: toString(row.hash, 'hash'),
42
+ });
43
+ export const mapRowToSearchResult = (row) => ({
44
+ ...mapRowToMemory(row),
45
+ relevance: toOptionalNumber(row.relevance, 'relevance'),
46
+ });
47
+ export const mapRowToRelatedMemory = (row) => ({
48
+ ...mapRowToMemory(row),
49
+ relation_type: toString(row.relation_type, 'relation_type'),
50
+ depth: toSafeInteger(row.depth, 'depth'),
51
+ });
52
+ //# sourceMappingURL=row-mappers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"row-mappers.js","sourceRoot":"","sources":["../../src/core/row-mappers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare const toSearchError: (err: unknown) => Error | undefined;
2
+ //# sourceMappingURL=search-errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search-errors.d.ts","sourceRoot":"","sources":["../../src/core/search-errors.ts"],"names":[],"mappings":"AAYA,eAAO,MAAM,aAAa,GAAI,KAAK,OAAO,KAAG,KAAK,GAAG,SAgBpD,CAAC"}
@@ -0,0 +1,21 @@
1
+ const INDEX_MISSING_TOKENS = [
2
+ 'no such module: fts5',
3
+ 'no such table: memories_fts',
4
+ ];
5
+ const QUERY_INVALID_TOKENS = ['fts5', 'syntax error'];
6
+ const isSearchIndexMissing = (message) => INDEX_MISSING_TOKENS.some((token) => message.includes(token));
7
+ const isSearchQueryInvalid = (message) => QUERY_INVALID_TOKENS.some((token) => message.includes(token));
8
+ export const toSearchError = (err) => {
9
+ const message = err instanceof Error ? err.message : String(err);
10
+ if (isSearchIndexMissing(message)) {
11
+ return new Error('Search index unavailable. Ensure FTS5 is enabled and the index is ' +
12
+ 'initialized.');
13
+ }
14
+ if (isSearchQueryInvalid(message)) {
15
+ return new Error('Invalid search query syntax. Check for unbalanced quotes or special ' +
16
+ 'characters. ' +
17
+ `Details: ${message}`);
18
+ }
19
+ return undefined;
20
+ };
21
+ //# sourceMappingURL=search-errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search-errors.js","sourceRoot":"","sources":["../../src/core/search-errors.ts"],"names":[],"mappings":"AAAA,MAAM,oBAAoB,GAAG;IAC3B,sBAAsB;IACtB,6BAA6B;CAC9B,CAAC;AACF,MAAM,oBAAoB,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;AAEtD,MAAM,oBAAoB,GAAG,CAAC,OAAe,EAAW,EAAE,CACxD,oBAAoB,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;AAEhE,MAAM,oBAAoB,GAAG,CAAC,OAAe,EAAW,EAAE,CACxD,oBAAoB,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;AAEhE,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,GAAY,EAAqB,EAAE;IAC/D,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACjE,IAAI,oBAAoB,CAAC,OAAO,CAAC,EAAE,CAAC;QAClC,OAAO,IAAI,KAAK,CACd,oEAAoE;YAClE,cAAc,CACjB,CAAC;IACJ,CAAC;IACD,IAAI,oBAAoB,CAAC,OAAO,CAAC,EAAE,CAAC;QAClC,OAAO,IAAI,KAAK,CACd,sEAAsE;YACpE,cAAc;YACd,YAAY,OAAO,EAAE,CACxB,CAAC;IACJ,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC,CAAC"}