sensemaking 0.27.1 → 0.28.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/bin/cli.js +16 -7
- package/dist/cjs/cli/constants.d.cts +2 -0
- package/dist/cjs/cli/constants.d.ts +2 -0
- package/dist/cjs/cli/constants.js +21 -0
- package/dist/cjs/cli/constants.js.map +1 -0
- package/dist/cjs/cli/named.js +2 -1
- package/dist/cjs/cli/named.js.map +1 -1
- package/dist/cjs/cli/shared.js +5 -4
- package/dist/cjs/cli/shared.js.map +1 -1
- package/dist/cjs/cli.js +10 -9
- package/dist/cjs/cli.js.map +1 -1
- package/dist/cjs/embed/query.js.map +1 -1
- package/dist/cjs/store/duckdb/engine.d.cts +11 -0
- package/dist/cjs/store/duckdb/engine.d.ts +11 -0
- package/dist/cjs/store/duckdb/engine.js +193 -0
- package/dist/cjs/store/duckdb/engine.js.map +1 -0
- package/dist/cjs/store/duckdb/lexical.js +34 -20
- package/dist/cjs/store/duckdb/lexical.js.map +1 -1
- package/dist/cjs/store/duckdb/native.d.cts +5 -2
- package/dist/cjs/store/duckdb/native.d.ts +5 -2
- package/dist/cjs/store/duckdb/native.js +157 -13
- package/dist/cjs/store/duckdb/native.js.map +1 -1
- package/dist/cjs/store/duckdb/open.js +151 -3
- package/dist/cjs/store/duckdb/open.js.map +1 -1
- package/dist/cjs/store/duckdb/ordered-bm25.d.cts +3 -3
- package/dist/cjs/store/duckdb/ordered-bm25.d.ts +3 -3
- package/dist/cjs/store/duckdb/ordered-bm25.js +4 -8
- package/dist/cjs/store/duckdb/ordered-bm25.js.map +1 -1
- package/dist/cjs/store/engine.d.cts +28 -0
- package/dist/cjs/store/engine.d.ts +28 -0
- package/dist/cjs/store/engine.js +362 -0
- package/dist/cjs/store/engine.js.map +1 -0
- package/dist/cjs/store/native.d.cts +8 -5
- package/dist/cjs/store/native.d.ts +8 -5
- package/dist/cjs/store/native.js +78 -73
- package/dist/cjs/store/native.js.map +1 -1
- package/dist/cjs/store/open.js +100 -40
- package/dist/cjs/store/open.js.map +1 -1
- package/dist/cjs/store/sqlite/engine.d.cts +12 -0
- package/dist/cjs/store/sqlite/engine.d.ts +12 -0
- package/dist/cjs/store/sqlite/engine.js +53 -0
- package/dist/cjs/store/sqlite/engine.js.map +1 -0
- package/dist/cjs/store/sqlite/lexical.js +3 -4
- package/dist/cjs/store/sqlite/lexical.js.map +1 -1
- package/dist/cjs/store/sqlite/open.js +119 -6
- package/dist/cjs/store/sqlite/open.js.map +1 -1
- package/dist/cjs/store/turso/engine.d.cts +9 -0
- package/dist/cjs/store/turso/engine.d.ts +9 -0
- package/dist/cjs/store/turso/engine.js +189 -0
- package/dist/cjs/store/turso/engine.js.map +1 -0
- package/dist/cjs/store/turso/lexical.js +16 -11
- package/dist/cjs/store/turso/lexical.js.map +1 -1
- package/dist/cjs/store/turso/native.d.cts +5 -1
- package/dist/cjs/store/turso/native.d.ts +5 -1
- package/dist/cjs/store/turso/native.js +157 -8
- package/dist/cjs/store/turso/native.js.map +1 -1
- package/dist/cjs/store/turso/open.js +172 -27
- package/dist/cjs/store/turso/open.js.map +1 -1
- package/dist/cjs/store/turso/reconcile.d.cts +0 -1
- package/dist/cjs/store/turso/reconcile.d.ts +0 -1
- package/dist/cjs/store/turso/reconcile.js +22 -23
- package/dist/cjs/store/turso/reconcile.js.map +1 -1
- package/dist/cjs/store/types.d.cts +2 -0
- package/dist/cjs/store/types.d.ts +2 -0
- package/dist/cjs/store/types.js.map +1 -1
- package/dist/esm/cli/constants.d.ts +2 -0
- package/dist/esm/cli/constants.js +2 -0
- package/dist/esm/cli/constants.js.map +1 -0
- package/dist/esm/cli/named.js +2 -1
- package/dist/esm/cli/named.js.map +1 -1
- package/dist/esm/cli/shared.js +6 -5
- package/dist/esm/cli/shared.js.map +1 -1
- package/dist/esm/cli.js +10 -9
- package/dist/esm/cli.js.map +1 -1
- package/dist/esm/embed/query.js +1 -1
- package/dist/esm/embed/query.js.map +1 -1
- package/dist/esm/store/duckdb/engine.d.ts +11 -0
- package/dist/esm/store/duckdb/engine.js +18 -0
- package/dist/esm/store/duckdb/engine.js.map +1 -0
- package/dist/esm/store/duckdb/lexical.js +11 -11
- package/dist/esm/store/duckdb/lexical.js.map +1 -1
- package/dist/esm/store/duckdb/native.d.ts +5 -2
- package/dist/esm/store/duckdb/native.js +16 -12
- package/dist/esm/store/duckdb/native.js.map +1 -1
- package/dist/esm/store/duckdb/open.js +40 -2
- package/dist/esm/store/duckdb/open.js.map +1 -1
- package/dist/esm/store/duckdb/ordered-bm25.d.ts +3 -3
- package/dist/esm/store/duckdb/ordered-bm25.js +4 -9
- package/dist/esm/store/duckdb/ordered-bm25.js.map +1 -1
- package/dist/esm/store/engine.d.ts +28 -0
- package/dist/esm/store/engine.js +85 -0
- package/dist/esm/store/engine.js.map +1 -0
- package/dist/esm/store/native.d.ts +8 -5
- package/dist/esm/store/native.js +59 -57
- package/dist/esm/store/native.js.map +1 -1
- package/dist/esm/store/open.js +24 -7
- package/dist/esm/store/open.js.map +1 -1
- package/dist/esm/store/sqlite/engine.d.ts +12 -0
- package/dist/esm/store/sqlite/engine.js +16 -0
- package/dist/esm/store/sqlite/engine.js.map +1 -0
- package/dist/esm/store/sqlite/lexical.js +2 -3
- package/dist/esm/store/sqlite/lexical.js.map +1 -1
- package/dist/esm/store/sqlite/open.js +38 -7
- package/dist/esm/store/sqlite/open.js.map +1 -1
- package/dist/esm/store/turso/engine.d.ts +9 -0
- package/dist/esm/store/turso/engine.js +14 -0
- package/dist/esm/store/turso/engine.js.map +1 -0
- package/dist/esm/store/turso/lexical.js +9 -9
- package/dist/esm/store/turso/lexical.js.map +1 -1
- package/dist/esm/store/turso/native.d.ts +5 -1
- package/dist/esm/store/turso/native.js +16 -10
- package/dist/esm/store/turso/native.js.map +1 -1
- package/dist/esm/store/turso/open.js +44 -3
- package/dist/esm/store/turso/open.js.map +1 -1
- package/dist/esm/store/turso/reconcile.d.ts +0 -1
- package/dist/esm/store/turso/reconcile.js +3 -8
- package/dist/esm/store/turso/reconcile.js.map +1 -1
- package/dist/esm/store/types.d.ts +2 -0
- package/dist/esm/store/types.js.map +1 -1
- package/package.json +21 -6
- package/skills/sense/SKILL.md +1 -1
- package/skills/sense/references/stores/duckdb.md +1 -1
- package/skills/sense/references/stores/sqlite.md +1 -1
- package/skills/sense/references/stores/turso.md +1 -1
- package/skills/sense-setup/references/stores/duckdb.md +1 -1
- package/skills/sense-setup/references/stores/sqlite.md +1 -1
|
@@ -17,24 +17,173 @@ _export(exports, {
|
|
|
17
17
|
},
|
|
18
18
|
get tursoApi () {
|
|
19
19
|
return tursoApi;
|
|
20
|
+
},
|
|
21
|
+
get tursoNative () {
|
|
22
|
+
return tursoNative;
|
|
20
23
|
}
|
|
21
24
|
});
|
|
22
25
|
var _nativets = require("../native.js");
|
|
26
|
+
function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {
|
|
27
|
+
try {
|
|
28
|
+
var info = gen[key](arg);
|
|
29
|
+
var value = info.value;
|
|
30
|
+
} catch (error) {
|
|
31
|
+
reject(error);
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
if (info.done) resolve(value);
|
|
35
|
+
else Promise.resolve(value).then(_next, _throw);
|
|
36
|
+
}
|
|
37
|
+
function _async_to_generator(fn) {
|
|
38
|
+
return function() {
|
|
39
|
+
var self = this, args = arguments;
|
|
40
|
+
return new Promise(function(resolve, reject) {
|
|
41
|
+
var gen = fn.apply(self, args);
|
|
42
|
+
function _next(value) {
|
|
43
|
+
asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value);
|
|
44
|
+
}
|
|
45
|
+
function _throw(err) {
|
|
46
|
+
asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err);
|
|
47
|
+
}
|
|
48
|
+
_next(undefined);
|
|
49
|
+
});
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
function _ts_generator(thisArg, body) {
|
|
53
|
+
var f, y, t, _ = {
|
|
54
|
+
label: 0,
|
|
55
|
+
sent: function() {
|
|
56
|
+
if (t[0] & 1) throw t[1];
|
|
57
|
+
return t[1];
|
|
58
|
+
},
|
|
59
|
+
trys: [],
|
|
60
|
+
ops: []
|
|
61
|
+
}, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype), d = Object.defineProperty;
|
|
62
|
+
return d(g, "next", {
|
|
63
|
+
value: verb(0)
|
|
64
|
+
}), d(g, "throw", {
|
|
65
|
+
value: verb(1)
|
|
66
|
+
}), d(g, "return", {
|
|
67
|
+
value: verb(2)
|
|
68
|
+
}), typeof Symbol === "function" && d(g, Symbol.iterator, {
|
|
69
|
+
value: function() {
|
|
70
|
+
return this;
|
|
71
|
+
}
|
|
72
|
+
}), g;
|
|
73
|
+
function verb(n) {
|
|
74
|
+
return function(v) {
|
|
75
|
+
return step([
|
|
76
|
+
n,
|
|
77
|
+
v
|
|
78
|
+
]);
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
function step(op) {
|
|
82
|
+
if (f) throw new TypeError("Generator is already executing.");
|
|
83
|
+
while(g && (g = 0, op[0] && (_ = 0)), _)try {
|
|
84
|
+
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
85
|
+
if (y = 0, t) op = [
|
|
86
|
+
op[0] & 2,
|
|
87
|
+
t.value
|
|
88
|
+
];
|
|
89
|
+
switch(op[0]){
|
|
90
|
+
case 0:
|
|
91
|
+
case 1:
|
|
92
|
+
t = op;
|
|
93
|
+
break;
|
|
94
|
+
case 4:
|
|
95
|
+
_.label++;
|
|
96
|
+
return {
|
|
97
|
+
value: op[1],
|
|
98
|
+
done: false
|
|
99
|
+
};
|
|
100
|
+
case 5:
|
|
101
|
+
_.label++;
|
|
102
|
+
y = op[1];
|
|
103
|
+
op = [
|
|
104
|
+
0
|
|
105
|
+
];
|
|
106
|
+
continue;
|
|
107
|
+
case 7:
|
|
108
|
+
op = _.ops.pop();
|
|
109
|
+
_.trys.pop();
|
|
110
|
+
continue;
|
|
111
|
+
default:
|
|
112
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) {
|
|
113
|
+
_ = 0;
|
|
114
|
+
continue;
|
|
115
|
+
}
|
|
116
|
+
if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) {
|
|
117
|
+
_.label = op[1];
|
|
118
|
+
break;
|
|
119
|
+
}
|
|
120
|
+
if (op[0] === 6 && _.label < t[1]) {
|
|
121
|
+
_.label = t[1];
|
|
122
|
+
t = op;
|
|
123
|
+
break;
|
|
124
|
+
}
|
|
125
|
+
if (t && _.label < t[2]) {
|
|
126
|
+
_.label = t[2];
|
|
127
|
+
_.ops.push(op);
|
|
128
|
+
break;
|
|
129
|
+
}
|
|
130
|
+
if (t[2]) _.ops.pop();
|
|
131
|
+
_.trys.pop();
|
|
132
|
+
continue;
|
|
133
|
+
}
|
|
134
|
+
op = body.call(thisArg, _);
|
|
135
|
+
} catch (e) {
|
|
136
|
+
op = [
|
|
137
|
+
6,
|
|
138
|
+
e
|
|
139
|
+
];
|
|
140
|
+
y = 0;
|
|
141
|
+
} finally{
|
|
142
|
+
f = t = 0;
|
|
143
|
+
}
|
|
144
|
+
if (op[0] & 5) throw op[1];
|
|
145
|
+
return {
|
|
146
|
+
value: op[0] ? op[1] : void 0,
|
|
147
|
+
done: true
|
|
148
|
+
};
|
|
149
|
+
}
|
|
150
|
+
}
|
|
23
151
|
var TURSO_PACKAGE = '@tursodatabase/database';
|
|
24
|
-
var TURSO = {
|
|
25
|
-
store: 'turso',
|
|
26
|
-
pkg: TURSO_PACKAGE,
|
|
27
|
-
sizeHint: '~16MB'
|
|
28
|
-
};
|
|
29
152
|
var CONNECT_OPTS = {
|
|
30
153
|
timeout: 30000,
|
|
31
154
|
experimental: [
|
|
32
155
|
'index_method'
|
|
33
156
|
]
|
|
34
157
|
};
|
|
35
|
-
var
|
|
158
|
+
var tursoNativePromise;
|
|
159
|
+
function tursoNative() {
|
|
160
|
+
if (!tursoNativePromise) {
|
|
161
|
+
var descriptor = {
|
|
162
|
+
store: 'turso',
|
|
163
|
+
pkg: TURSO_PACKAGE,
|
|
164
|
+
sizeHint: '~16MB',
|
|
165
|
+
range: (0, _nativets.peerRange)(TURSO_PACKAGE)
|
|
166
|
+
};
|
|
167
|
+
tursoNativePromise = (0, _nativets.loadOrInstall)(descriptor, (0, _nativets.packageNodeModules)());
|
|
168
|
+
}
|
|
169
|
+
return tursoNativePromise;
|
|
170
|
+
}
|
|
36
171
|
function tursoApi() {
|
|
37
|
-
|
|
38
|
-
|
|
172
|
+
return _async_to_generator(function() {
|
|
173
|
+
return _ts_generator(this, function(_state) {
|
|
174
|
+
switch(_state.label){
|
|
175
|
+
case 0:
|
|
176
|
+
return [
|
|
177
|
+
4,
|
|
178
|
+
tursoNative()
|
|
179
|
+
];
|
|
180
|
+
case 1:
|
|
181
|
+
return [
|
|
182
|
+
2,
|
|
183
|
+
_state.sent().api
|
|
184
|
+
];
|
|
185
|
+
}
|
|
186
|
+
});
|
|
187
|
+
})();
|
|
39
188
|
}
|
|
40
189
|
/* CJS INTEROP */ if (exports.__esModule && exports.default) { try { Object.defineProperty(exports.default, '__esModule', { value: true }); for (var key in exports) { exports.default[key] = exports[key]; } } catch (_) {}; module.exports = exports.default; }
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/Users/kevin/Dev/open-source/ai/sensemaking/src/store/turso/native.ts"],"sourcesContent":["import { loadOrInstall, type NativeDescriptor, packageNodeModules } from '../native.ts';\n\nexport const TURSO_PACKAGE = '@tursodatabase/database';\n\
|
|
1
|
+
{"version":3,"sources":["/Users/kevin/Dev/open-source/ai/sensemaking/src/store/turso/native.ts"],"sourcesContent":["import { loadOrInstall, type NativeDescriptor, type NativeModule, packageNodeModules, peerRange } from '../native.ts';\n\nexport const TURSO_PACKAGE = '@tursodatabase/database';\n\n// Every connect() in this store goes through these: the same 30s floor sqlite opens with, and the\n// FTS index method ensureSchema() needs. reclaimSpace adds 'vacuum'; nothing else may (PLAN 3.54).\nexport const CONNECT_OPTS = { timeout: 30_000, experimental: ['index_method'] } as const;\n\ntype TursoApi = typeof import('@tursodatabase/database');\n\nlet tursoNativePromise: Promise<NativeModule<TursoApi>> | undefined;\n\n// One accessor every consumer must go through, not each its own bare-specifier import: Node\n// keeps returning a pre-install \"not found\" miss to any new lookup of the same path afterward.\nexport function tursoNative(): Promise<NativeModule<TursoApi>> {\n if (!tursoNativePromise) {\n const descriptor: NativeDescriptor = { store: 'turso', pkg: TURSO_PACKAGE, sizeHint: '~16MB', range: peerRange(TURSO_PACKAGE) };\n tursoNativePromise = loadOrInstall<TursoApi>(descriptor, packageNodeModules());\n }\n return tursoNativePromise;\n}\n\nexport async function tursoApi(): Promise<TursoApi> {\n return (await tursoNative()).api;\n}\n"],"names":["CONNECT_OPTS","TURSO_PACKAGE","tursoApi","tursoNative","timeout","experimental","tursoNativePromise","descriptor","store","pkg","sizeHint","range","peerRange","loadOrInstall","packageNodeModules","api"],"mappings":";;;;;;;;;;;QAMaA;eAAAA;;QAJAC;eAAAA;;QAoBSC;eAAAA;;QARNC;eAAAA;;;wBAduF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEhG,IAAMF,gBAAgB;AAItB,IAAMD,eAAe;IAAEI,SAAS;IAAQC,cAAc;QAAC;KAAe;AAAC;AAI9E,IAAIC;AAIG,SAASH;IACd,IAAI,CAACG,oBAAoB;QACvB,IAAMC,aAA+B;YAAEC,OAAO;YAASC,KAAKR;YAAeS,UAAU;YAASC,OAAOC,IAAAA,mBAAS,EAACX;QAAe;QAC9HK,qBAAqBO,IAAAA,uBAAa,EAAWN,YAAYO,IAAAA,4BAAkB;IAC7E;IACA,OAAOR;AACT;AAEO,SAAeJ;;;;;oBACZ;;wBAAMC;;;oBAAd;;wBAAQ,cAAqBY,GAAG;;;;IAClC"}
|
|
@@ -25,10 +25,14 @@ _export(exports, {
|
|
|
25
25
|
var _typests = require("../../embed/types.js");
|
|
26
26
|
var _errorsts = require("../../errors.js");
|
|
27
27
|
var _indexts = require("../../features/index.js");
|
|
28
|
+
var _enginets = require("../engine.js");
|
|
29
|
+
var _nativets = require("../native.js");
|
|
28
30
|
var _opents = require("../open.js");
|
|
29
31
|
var _sharedts = require("../shared.js");
|
|
30
32
|
var _connectionts = require("./connection.js");
|
|
31
|
-
var
|
|
33
|
+
var _enginets1 = require("./engine.js");
|
|
34
|
+
var _lexicalts = require("./lexical.js");
|
|
35
|
+
var _nativets1 = require("./native.js");
|
|
32
36
|
var _reconcilets = require("./reconcile.js");
|
|
33
37
|
var _storets = require("./store.js");
|
|
34
38
|
function _array_like_to_array(arr, len) {
|
|
@@ -271,45 +275,50 @@ function ensureCoreSchema(_handle, conn) {
|
|
|
271
275
|
case 4:
|
|
272
276
|
_state.trys.push([
|
|
273
277
|
4,
|
|
274
|
-
9,
|
|
275
278
|
10,
|
|
276
|
-
11
|
|
279
|
+
11,
|
|
280
|
+
12
|
|
277
281
|
]);
|
|
278
|
-
|
|
279
|
-
|
|
282
|
+
return [
|
|
283
|
+
4,
|
|
284
|
+
(0, _enginets1.tursoFts)()
|
|
285
|
+
];
|
|
280
286
|
case 5:
|
|
287
|
+
_iterator = _state.sent().indexDdl()[Symbol.iterator]();
|
|
288
|
+
_state.label = 6;
|
|
289
|
+
case 6:
|
|
281
290
|
if (!!(_iteratorNormalCompletion = (_step = _iterator.next()).done)) return [
|
|
282
291
|
3,
|
|
283
|
-
|
|
292
|
+
9
|
|
284
293
|
];
|
|
285
294
|
ddl = _step.value;
|
|
286
295
|
return [
|
|
287
296
|
4,
|
|
288
297
|
conn.exec(ddl)
|
|
289
298
|
];
|
|
290
|
-
case 6:
|
|
291
|
-
_state.sent();
|
|
292
|
-
_state.label = 7;
|
|
293
299
|
case 7:
|
|
300
|
+
_state.sent();
|
|
301
|
+
_state.label = 8;
|
|
302
|
+
case 8:
|
|
294
303
|
_iteratorNormalCompletion = true;
|
|
295
304
|
return [
|
|
296
305
|
3,
|
|
297
|
-
|
|
306
|
+
6
|
|
298
307
|
];
|
|
299
|
-
case
|
|
308
|
+
case 9:
|
|
300
309
|
return [
|
|
301
310
|
3,
|
|
302
|
-
|
|
311
|
+
12
|
|
303
312
|
];
|
|
304
|
-
case
|
|
313
|
+
case 10:
|
|
305
314
|
err = _state.sent();
|
|
306
315
|
_didIteratorError = true;
|
|
307
316
|
_iteratorError = err;
|
|
308
317
|
return [
|
|
309
318
|
3,
|
|
310
|
-
|
|
319
|
+
12
|
|
311
320
|
];
|
|
312
|
-
case
|
|
321
|
+
case 11:
|
|
313
322
|
try {
|
|
314
323
|
if (!_iteratorNormalCompletion && _iterator.return != null) {
|
|
315
324
|
_iterator.return();
|
|
@@ -322,36 +331,36 @@ function ensureCoreSchema(_handle, conn) {
|
|
|
322
331
|
return [
|
|
323
332
|
7
|
|
324
333
|
];
|
|
325
|
-
case
|
|
334
|
+
case 12:
|
|
326
335
|
return [
|
|
327
336
|
4,
|
|
328
337
|
conn.exec('CREATE TABLE IF NOT EXISTS preset_files ("path" TEXT, preset TEXT, PRIMARY KEY ("path", preset))')
|
|
329
338
|
];
|
|
330
|
-
case
|
|
339
|
+
case 13:
|
|
331
340
|
_state.sent();
|
|
332
341
|
return [
|
|
333
342
|
4,
|
|
334
343
|
conn.exec('CREATE INDEX IF NOT EXISTS preset_files_preset ON preset_files(preset)')
|
|
335
344
|
];
|
|
336
|
-
case
|
|
345
|
+
case 14:
|
|
337
346
|
_state.sent();
|
|
338
347
|
return [
|
|
339
348
|
4,
|
|
340
349
|
(0, _sharedts.getMeta)(conn, 'schema_version')
|
|
341
350
|
];
|
|
342
|
-
case
|
|
351
|
+
case 15:
|
|
343
352
|
if (!(_state.sent() === null)) return [
|
|
344
353
|
3,
|
|
345
|
-
|
|
354
|
+
17
|
|
346
355
|
];
|
|
347
356
|
return [
|
|
348
357
|
4,
|
|
349
358
|
(0, _sharedts.setMeta)(conn, 'schema_version', SCHEMA_VERSION)
|
|
350
359
|
];
|
|
351
|
-
case 15:
|
|
352
|
-
_state.sent();
|
|
353
|
-
_state.label = 16;
|
|
354
360
|
case 16:
|
|
361
|
+
_state.sent();
|
|
362
|
+
_state.label = 17;
|
|
363
|
+
case 17:
|
|
355
364
|
return [
|
|
356
365
|
2
|
|
357
366
|
];
|
|
@@ -509,7 +518,7 @@ function connect(dbPath, _cfg, options) {
|
|
|
509
518
|
]);
|
|
510
519
|
return [
|
|
511
520
|
4,
|
|
512
|
-
(0,
|
|
521
|
+
(0, _nativets1.tursoApi)()
|
|
513
522
|
];
|
|
514
523
|
case 1:
|
|
515
524
|
turso = _state.sent();
|
|
@@ -520,7 +529,7 @@ function connect(dbPath, _cfg, options) {
|
|
|
520
529
|
case 2:
|
|
521
530
|
err = _state.sent();
|
|
522
531
|
if (_instanceof(err, _errorsts.SenseError)) throw err;
|
|
523
|
-
throw new _errorsts.SenseError('STORE_DEPENDENCY_MISSING', 'store "turso" needs the '.concat(
|
|
532
|
+
throw new _errorsts.SenseError('STORE_DEPENDENCY_MISSING', 'store "turso" needs the '.concat(_nativets1.TURSO_PACKAGE, " package (").concat(err.message, ")"));
|
|
524
533
|
case 3:
|
|
525
534
|
_state.trys.push([
|
|
526
535
|
3,
|
|
@@ -530,8 +539,8 @@ function connect(dbPath, _cfg, options) {
|
|
|
530
539
|
]);
|
|
531
540
|
return [
|
|
532
541
|
4,
|
|
533
|
-
turso.connect(dbPath, _object_spread(_object_spread_props(_object_spread({},
|
|
534
|
-
experimental: _to_consumable_array(
|
|
542
|
+
turso.connect(dbPath, _object_spread(_object_spread_props(_object_spread({}, _nativets1.CONNECT_OPTS), {
|
|
543
|
+
experimental: _to_consumable_array(_nativets1.CONNECT_OPTS.experimental)
|
|
535
544
|
}), options.existingOnly ? {
|
|
536
545
|
fileMustExist: true
|
|
537
546
|
} : {}))
|
|
@@ -559,6 +568,140 @@ function connect(dbPath, _cfg, options) {
|
|
|
559
568
|
});
|
|
560
569
|
})();
|
|
561
570
|
}
|
|
571
|
+
function tursoEngineIdentity() {
|
|
572
|
+
return _async_to_generator(function() {
|
|
573
|
+
var _tmp;
|
|
574
|
+
return _ts_generator(this, function(_state) {
|
|
575
|
+
switch(_state.label){
|
|
576
|
+
case 0:
|
|
577
|
+
_tmp = [
|
|
578
|
+
_nativets1.TURSO_PACKAGE
|
|
579
|
+
];
|
|
580
|
+
return [
|
|
581
|
+
4,
|
|
582
|
+
(0, _nativets1.tursoNative)()
|
|
583
|
+
];
|
|
584
|
+
case 1:
|
|
585
|
+
return [
|
|
586
|
+
2,
|
|
587
|
+
_enginets.engineIdentity.apply(void 0, _tmp.concat([
|
|
588
|
+
_state.sent().version
|
|
589
|
+
]))
|
|
590
|
+
];
|
|
591
|
+
}
|
|
592
|
+
});
|
|
593
|
+
})();
|
|
594
|
+
}
|
|
595
|
+
// The real schema, content write and lexical query over store/engine.ts's fixture, in memory.
|
|
596
|
+
function checkTursoEngine() {
|
|
597
|
+
return _async_to_generator(function() {
|
|
598
|
+
var _ref, api, version, db, conn, docs;
|
|
599
|
+
return _ts_generator(this, function(_state) {
|
|
600
|
+
switch(_state.label){
|
|
601
|
+
case 0:
|
|
602
|
+
return [
|
|
603
|
+
4,
|
|
604
|
+
(0, _nativets1.tursoNative)()
|
|
605
|
+
];
|
|
606
|
+
case 1:
|
|
607
|
+
_ref = _state.sent(), api = _ref.api, version = _ref.version;
|
|
608
|
+
return [
|
|
609
|
+
4,
|
|
610
|
+
api.connect(':memory:', _object_spread_props(_object_spread({}, _nativets1.CONNECT_OPTS), {
|
|
611
|
+
experimental: _to_consumable_array(_nativets1.CONNECT_OPTS.experimental)
|
|
612
|
+
}))
|
|
613
|
+
];
|
|
614
|
+
case 2:
|
|
615
|
+
db = _state.sent();
|
|
616
|
+
_state.label = 3;
|
|
617
|
+
case 3:
|
|
618
|
+
_state.trys.push([
|
|
619
|
+
3,
|
|
620
|
+
,
|
|
621
|
+
8,
|
|
622
|
+
10
|
|
623
|
+
]);
|
|
624
|
+
conn = (0, _connectionts.createConnection)(db);
|
|
625
|
+
return [
|
|
626
|
+
4,
|
|
627
|
+
conn.exec('CREATE TABLE meta (key TEXT PRIMARY KEY, value TEXT)')
|
|
628
|
+
];
|
|
629
|
+
case 4:
|
|
630
|
+
_state.sent();
|
|
631
|
+
return [
|
|
632
|
+
4,
|
|
633
|
+
ensureCoreSchema(db, conn)
|
|
634
|
+
];
|
|
635
|
+
case 5:
|
|
636
|
+
_state.sent();
|
|
637
|
+
docs = _enginets.ENGINE_CHECK_DOCS.map(function(doc) {
|
|
638
|
+
return {
|
|
639
|
+
relPath: doc.path,
|
|
640
|
+
search: {
|
|
641
|
+
title: doc.title,
|
|
642
|
+
summary: doc.summary,
|
|
643
|
+
text: doc.text
|
|
644
|
+
}
|
|
645
|
+
};
|
|
646
|
+
});
|
|
647
|
+
return [
|
|
648
|
+
4,
|
|
649
|
+
(0, _reconcilets.reconcileTursoContentWithStrategy)(conn, [], docs, 'incremental')
|
|
650
|
+
];
|
|
651
|
+
case 6:
|
|
652
|
+
_state.sent();
|
|
653
|
+
return [
|
|
654
|
+
4,
|
|
655
|
+
(0, _enginets.checkEngine)('turso', (0, _enginets.engineIdentity)(_nativets1.TURSO_PACKAGE, version), (0, _enginets.npmRemedy)(_nativets1.TURSO_PACKAGE, (0, _nativets.peerRange)(_nativets1.TURSO_PACKAGE)), function(terms) {
|
|
656
|
+
return _async_to_generator(function() {
|
|
657
|
+
return _ts_generator(this, function(_state) {
|
|
658
|
+
switch(_state.label){
|
|
659
|
+
case 0:
|
|
660
|
+
return [
|
|
661
|
+
4,
|
|
662
|
+
(0, _lexicalts.queryLexical)(conn, terms, {
|
|
663
|
+
whereJoin: '',
|
|
664
|
+
whereCond: '',
|
|
665
|
+
scopeCond: '',
|
|
666
|
+
limit: 10
|
|
667
|
+
})
|
|
668
|
+
];
|
|
669
|
+
case 1:
|
|
670
|
+
return [
|
|
671
|
+
2,
|
|
672
|
+
_state.sent().map(function(hit) {
|
|
673
|
+
return hit.path;
|
|
674
|
+
})
|
|
675
|
+
];
|
|
676
|
+
}
|
|
677
|
+
});
|
|
678
|
+
})();
|
|
679
|
+
})
|
|
680
|
+
];
|
|
681
|
+
case 7:
|
|
682
|
+
_state.sent();
|
|
683
|
+
return [
|
|
684
|
+
3,
|
|
685
|
+
10
|
|
686
|
+
];
|
|
687
|
+
case 8:
|
|
688
|
+
return [
|
|
689
|
+
4,
|
|
690
|
+
db.close()
|
|
691
|
+
];
|
|
692
|
+
case 9:
|
|
693
|
+
_state.sent();
|
|
694
|
+
return [
|
|
695
|
+
7
|
|
696
|
+
];
|
|
697
|
+
case 10:
|
|
698
|
+
return [
|
|
699
|
+
2
|
|
700
|
+
];
|
|
701
|
+
}
|
|
702
|
+
});
|
|
703
|
+
})();
|
|
704
|
+
}
|
|
562
705
|
var tursoOpenDialect = {
|
|
563
706
|
filename: DB_FILENAME,
|
|
564
707
|
schemaVersion: SCHEMA_VERSION,
|
|
@@ -571,6 +714,8 @@ var tursoOpenDialect = {
|
|
|
571
714
|
isLocked: function isLocked(err) {
|
|
572
715
|
return /File is locked by another process|locked a portion of the file/.test(err.message);
|
|
573
716
|
},
|
|
717
|
+
engineIdentity: tursoEngineIdentity,
|
|
718
|
+
checkEngine: checkTursoEngine,
|
|
574
719
|
ensureCoreSchema: ensureCoreSchema,
|
|
575
720
|
ensureFeatureSchema: ensureFeatureSchema,
|
|
576
721
|
setDerivedBusyTimeout: setDerivedBusyTimeout,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/Users/kevin/Dev/open-source/ai/sensemaking/src/store/turso/open.ts"],"sourcesContent":["import type { Database } from '@tursodatabase/database';\nimport type { Config, ResolvedConfig } from '../../config/index.ts';\nimport { STORE_DIMS } from '../../embed/types.ts';\nimport { SenseError } from '../../errors.ts';\nimport { activeFeatures } from '../../features/index.ts';\nimport type { InternalOpenOptions, OpenResult } from '../open.ts';\nimport { openWithDialect } from '../open.ts';\nimport { getMeta, setMeta } from '../shared.ts';\nimport type { Connection, OpenDialect } from '../types.ts';\nimport { checkpointWal, createConnection } from './connection.ts';\nimport { CONNECT_OPTS, TURSO_PACKAGE, tursoApi } from './native.ts';\nimport { CONTENT_FTS_DDL, tursoDialect } from './reconcile.ts';\nimport { createStore } from './store.ts';\n\nexport const DB_FILENAME = 'cache.turso.db';\n// Independent of sqlite's and duckdb's SCHEMA_VERSION: each store's cache shape evolves\n// separately. Covers the FTS indexes, the \"_ngram\" sidecar columns, and embeddings.vector's width.\nexport const SCHEMA_VERSION = '10';\n\nexport type { OpenResult };\n\n// This store's Handle (types.ts's OpenDialect<Handle>) is the connected Database itself: no\n// extra native state to thread, unlike duckdb's separate instance/connection pair.\nasync function ensureCoreSchema(_handle: Database, conn: Connection): Promise<void> {\n await conn.exec(`CREATE TABLE IF NOT EXISTS frontmatter (\"path\" TEXT PRIMARY KEY, \"_mtime\" REAL, \"_ctime\" REAL, \"_size\" INTEGER, \"_parse_error\" TEXT)`);\n await conn.exec(`CREATE TABLE IF NOT EXISTS content (\"path\" TEXT PRIMARY KEY, title TEXT, summary TEXT, text TEXT, title_stem TEXT, summary_stem TEXT, text_stem TEXT, title_ngram TEXT, summary_ngram TEXT, text_ngram TEXT)`);\n await conn.exec(`CREATE TABLE IF NOT EXISTS indexed_sources (\"path\" TEXT PRIMARY KEY, text TEXT NOT NULL)`);\n for (const ddl of CONTENT_FTS_DDL) await conn.exec(ddl);\n await conn.exec(`CREATE TABLE IF NOT EXISTS preset_files (\"path\" TEXT, preset TEXT, PRIMARY KEY (\"path\", preset))`);\n await conn.exec('CREATE INDEX IF NOT EXISTS preset_files_preset ON preset_files(preset)');\n if ((await getMeta(conn, 'schema_version')) === null) await setMeta(conn, 'schema_version', SCHEMA_VERSION);\n}\n\nasync function ensureFeatureSchema(_handle: Database, conn: Connection, cfg: Config): Promise<void> {\n for (const feature of activeFeatures(cfg)) {\n // Native F32_BLOB(STORE_DIMS) instead of the embed feature's engine-neutral BLOB DDL. `scale`\n // is kept unused, so the shared reconcile-time INSERT/DELETE names a column both stores have.\n if (feature.name === 'embed') {\n await conn.exec(`CREATE TABLE IF NOT EXISTS embeddings (\"path\" TEXT, chunk INTEGER, start_line INTEGER, end_line INTEGER, content_identity TEXT NOT NULL, scale REAL, vector F32_BLOB(${STORE_DIMS}), PRIMARY KEY (\"path\", chunk))`);\n continue;\n }\n await feature.schema(conn);\n }\n}\n\nasync function close(handle: Database, options: { observational?: boolean } = {}): Promise<void> {\n if (!options.observational) await checkpointWal(handle);\n await handle.close();\n}\n\nasync function setDerivedBusyTimeout(_handle: Database, conn: Connection, ms: number): Promise<void> {\n await conn.exec(`PRAGMA busy_timeout = ${ms}`);\n}\n\nasync function connect(dbPath: string, _cfg: ResolvedConfig, options: { existingOnly: boolean; observational: boolean }): Promise<{ handle: Database; conn: Connection }> {\n // Dynamic, not a top-level import: a sqlite or duckdb tree must never attempt to resolve this\n // optional dependency until a turso tree is actually opened. Installed on first use if missing.\n let turso: Awaited<ReturnType<typeof tursoApi>>;\n try {\n turso = await tursoApi();\n } catch (err) {\n if (err instanceof SenseError) throw err;\n throw new SenseError('STORE_DEPENDENCY_MISSING', `store \"turso\" needs the ${TURSO_PACKAGE} package (${(err as Error).message})`);\n }\n\n let db: Database;\n try {\n // Turso's readonly mode rejects native FTS SELECTs and TEMP query tables. Existing-only opens\n // stay query-capable; shared no-build orchestration and observational close prevent upkeep writes.\n db = await turso.connect(dbPath, { ...CONNECT_OPTS, experimental: [...CONNECT_OPTS.experimental], ...(options.existingOnly ? { fileMustExist: true } : {}) });\n } catch (err) {\n throw new SenseError('STORE_DEPENDENCY_MISSING', `store \"turso\" failed to open ${dbPath}: ${(err as Error).message}`);\n }\n return { handle: db, conn: createConnection(db) };\n}\n\n// This store's dialect (types.ts's OpenDialect) for the shared orchestration in store/open.ts.\nexport const tursoOpenDialect: OpenDialect<Database> = {\n filename: DB_FILENAME,\n schemaVersion: SCHEMA_VERSION,\n reconcileDialect: tursoDialect,\n connect,\n close,\n // \"Locking error: Failed locking file ...\", worded per platform: posix \"File is locked by another\n // process\", Windows \"another process has locked a portion of the file (os error 33)\". Distinct from\n // the write-time \"database is locked\" its connect-time `timeout` covers; that one never reaches here.\n isLocked: (err) => /File is locked by another process|locked a portion of the file/.test(err.message),\n ensureCoreSchema,\n ensureFeatureSchema,\n setDerivedBusyTimeout,\n createStore: (handle, conn, _cfg, options) => createStore(handle, conn, options),\n};\n\nexport async function openTurso(cfg: ResolvedConfig, options?: InternalOpenOptions): Promise<OpenResult> {\n return openWithDialect(cfg, tursoOpenDialect, options);\n}\n"],"names":["DB_FILENAME","SCHEMA_VERSION","openTurso","tursoOpenDialect","ensureCoreSchema","_handle","conn","ddl","exec","CONTENT_FTS_DDL","getMeta","setMeta","ensureFeatureSchema","cfg","feature","activeFeatures","name","STORE_DIMS","schema","close","handle","options","observational","checkpointWal","setDerivedBusyTimeout","ms","connect","dbPath","_cfg","turso","err","db","tursoApi","SenseError","TURSO_PACKAGE","message","CONNECT_OPTS","experimental","existingOnly","fileMustExist","createConnection","filename","schemaVersion","reconcileDialect","tursoDialect","isLocked","test","createStore","openWithDialect"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["/Users/kevin/Dev/open-source/ai/sensemaking/src/store/turso/open.ts"],"sourcesContent":["import type { Database } from '@tursodatabase/database';\nimport type { Config, ResolvedConfig } from '../../config/index.ts';\nimport { STORE_DIMS } from '../../embed/types.ts';\nimport { SenseError } from '../../errors.ts';\nimport { activeFeatures } from '../../features/index.ts';\nimport type { ParsedDoc } from '../../scan/index.ts';\nimport { ENGINE_CHECK_DOCS, engineIdentity, npmRemedy, checkEngine as runEngineCheck } from '../engine.ts';\nimport { peerRange } from '../native.ts';\nimport type { InternalOpenOptions, OpenResult } from '../open.ts';\nimport { openWithDialect } from '../open.ts';\nimport { getMeta, setMeta } from '../shared.ts';\nimport type { Connection, OpenDialect } from '../types.ts';\nimport { checkpointWal, createConnection } from './connection.ts';\nimport { tursoFts } from './engine.ts';\nimport { queryLexical } from './lexical.ts';\nimport { CONNECT_OPTS, TURSO_PACKAGE, tursoApi, tursoNative } from './native.ts';\nimport { reconcileTursoContentWithStrategy, tursoDialect } from './reconcile.ts';\nimport { createStore } from './store.ts';\n\nexport const DB_FILENAME = 'cache.turso.db';\n// Independent of sqlite's and duckdb's SCHEMA_VERSION: each store's cache shape evolves\n// separately. Covers the FTS indexes, the \"_ngram\" sidecar columns, and embeddings.vector's width.\nexport const SCHEMA_VERSION = '10';\n\nexport type { OpenResult };\n\n// This store's Handle (types.ts's OpenDialect<Handle>) is the connected Database itself: no\n// extra native state to thread, unlike duckdb's separate instance/connection pair.\nasync function ensureCoreSchema(_handle: Database, conn: Connection): Promise<void> {\n await conn.exec(`CREATE TABLE IF NOT EXISTS frontmatter (\"path\" TEXT PRIMARY KEY, \"_mtime\" REAL, \"_ctime\" REAL, \"_size\" INTEGER, \"_parse_error\" TEXT)`);\n await conn.exec(`CREATE TABLE IF NOT EXISTS content (\"path\" TEXT PRIMARY KEY, title TEXT, summary TEXT, text TEXT, title_stem TEXT, summary_stem TEXT, text_stem TEXT, title_ngram TEXT, summary_ngram TEXT, text_ngram TEXT)`);\n await conn.exec(`CREATE TABLE IF NOT EXISTS indexed_sources (\"path\" TEXT PRIMARY KEY, text TEXT NOT NULL)`);\n for (const ddl of (await tursoFts()).indexDdl()) await conn.exec(ddl);\n await conn.exec(`CREATE TABLE IF NOT EXISTS preset_files (\"path\" TEXT, preset TEXT, PRIMARY KEY (\"path\", preset))`);\n await conn.exec('CREATE INDEX IF NOT EXISTS preset_files_preset ON preset_files(preset)');\n if ((await getMeta(conn, 'schema_version')) === null) await setMeta(conn, 'schema_version', SCHEMA_VERSION);\n}\n\nasync function ensureFeatureSchema(_handle: Database, conn: Connection, cfg: Config): Promise<void> {\n for (const feature of activeFeatures(cfg)) {\n // Native F32_BLOB(STORE_DIMS) instead of the embed feature's engine-neutral BLOB DDL. `scale`\n // is kept unused, so the shared reconcile-time INSERT/DELETE names a column both stores have.\n if (feature.name === 'embed') {\n await conn.exec(`CREATE TABLE IF NOT EXISTS embeddings (\"path\" TEXT, chunk INTEGER, start_line INTEGER, end_line INTEGER, content_identity TEXT NOT NULL, scale REAL, vector F32_BLOB(${STORE_DIMS}), PRIMARY KEY (\"path\", chunk))`);\n continue;\n }\n await feature.schema(conn);\n }\n}\n\nasync function close(handle: Database, options: { observational?: boolean } = {}): Promise<void> {\n if (!options.observational) await checkpointWal(handle);\n await handle.close();\n}\n\nasync function setDerivedBusyTimeout(_handle: Database, conn: Connection, ms: number): Promise<void> {\n await conn.exec(`PRAGMA busy_timeout = ${ms}`);\n}\n\nasync function connect(dbPath: string, _cfg: ResolvedConfig, options: { existingOnly: boolean; observational: boolean }): Promise<{ handle: Database; conn: Connection }> {\n // Dynamic, not a top-level import: a sqlite or duckdb tree must never attempt to resolve this\n // optional dependency until a turso tree is actually opened. Installed on first use if missing.\n let turso: Awaited<ReturnType<typeof tursoApi>>;\n try {\n turso = await tursoApi();\n } catch (err) {\n if (err instanceof SenseError) throw err;\n throw new SenseError('STORE_DEPENDENCY_MISSING', `store \"turso\" needs the ${TURSO_PACKAGE} package (${(err as Error).message})`);\n }\n\n let db: Database;\n try {\n // Turso's readonly mode rejects native FTS SELECTs and TEMP query tables. Existing-only opens\n // stay query-capable; shared no-build orchestration and observational close prevent upkeep writes.\n db = await turso.connect(dbPath, { ...CONNECT_OPTS, experimental: [...CONNECT_OPTS.experimental], ...(options.existingOnly ? { fileMustExist: true } : {}) });\n } catch (err) {\n throw new SenseError('STORE_DEPENDENCY_MISSING', `store \"turso\" failed to open ${dbPath}: ${(err as Error).message}`);\n }\n return { handle: db, conn: createConnection(db) };\n}\n\nasync function tursoEngineIdentity(): Promise<string> {\n return engineIdentity(TURSO_PACKAGE, (await tursoNative()).version);\n}\n\n// The real schema, content write and lexical query over store/engine.ts's fixture, in memory.\nasync function checkTursoEngine(): Promise<void> {\n const { api, version } = await tursoNative();\n const db = await api.connect(':memory:', { ...CONNECT_OPTS, experimental: [...CONNECT_OPTS.experimental] });\n try {\n const conn = createConnection(db);\n await conn.exec('CREATE TABLE meta (key TEXT PRIMARY KEY, value TEXT)');\n await ensureCoreSchema(db, conn);\n const docs = ENGINE_CHECK_DOCS.map((doc) => ({ relPath: doc.path, search: { title: doc.title, summary: doc.summary, text: doc.text } }) as ParsedDoc);\n await reconcileTursoContentWithStrategy(conn, [], docs, 'incremental');\n await runEngineCheck('turso', engineIdentity(TURSO_PACKAGE, version), npmRemedy(TURSO_PACKAGE, peerRange(TURSO_PACKAGE)), async (terms) => (await queryLexical(conn, terms, { whereJoin: '', whereCond: '', scopeCond: '', limit: 10 })).map((hit) => hit.path));\n } finally {\n await db.close();\n }\n}\n\n// This store's dialect (types.ts's OpenDialect) for the shared orchestration in store/open.ts.\nexport const tursoOpenDialect: OpenDialect<Database> = {\n filename: DB_FILENAME,\n schemaVersion: SCHEMA_VERSION,\n reconcileDialect: tursoDialect,\n connect,\n close,\n // \"Locking error: Failed locking file ...\", worded per platform: posix \"File is locked by another\n // process\", Windows \"another process has locked a portion of the file (os error 33)\". Distinct from\n // the write-time \"database is locked\" its connect-time `timeout` covers; that one never reaches here.\n isLocked: (err) => /File is locked by another process|locked a portion of the file/.test(err.message),\n engineIdentity: tursoEngineIdentity,\n checkEngine: checkTursoEngine,\n ensureCoreSchema,\n ensureFeatureSchema,\n setDerivedBusyTimeout,\n createStore: (handle, conn, _cfg, options) => createStore(handle, conn, options),\n};\n\nexport async function openTurso(cfg: ResolvedConfig, options?: InternalOpenOptions): Promise<OpenResult> {\n return openWithDialect(cfg, tursoOpenDialect, options);\n}\n"],"names":["DB_FILENAME","SCHEMA_VERSION","openTurso","tursoOpenDialect","ensureCoreSchema","_handle","conn","ddl","exec","tursoFts","indexDdl","getMeta","setMeta","ensureFeatureSchema","cfg","feature","activeFeatures","name","STORE_DIMS","schema","close","handle","options","observational","checkpointWal","setDerivedBusyTimeout","ms","connect","dbPath","_cfg","turso","err","db","tursoApi","SenseError","TURSO_PACKAGE","message","CONNECT_OPTS","experimental","existingOnly","fileMustExist","createConnection","tursoEngineIdentity","tursoNative","engineIdentity","version","checkTursoEngine","api","docs","ENGINE_CHECK_DOCS","map","doc","relPath","path","search","title","summary","text","reconcileTursoContentWithStrategy","runEngineCheck","npmRemedy","peerRange","terms","queryLexical","whereJoin","whereCond","scopeCond","limit","hit","filename","schemaVersion","reconcileDialect","tursoDialect","isLocked","test","checkEngine","createStore","openWithDialect"],"mappings":"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"}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import type { ReconcileDelta } from '../../features/types.js';
|
|
2
2
|
import type { ParsedDoc } from '../../scan/index.js';
|
|
3
3
|
import type { Connection, ReconcileDialect } from '../types.js';
|
|
4
|
-
export declare const CONTENT_FTS_DDL: readonly ["CREATE INDEX IF NOT EXISTS content_fts ON content USING fts (title_stem, summary_stem, text_stem) WITH (weights = 'title_stem=10.0,summary_stem=5.0,text_stem=1.0')", "CREATE INDEX IF NOT EXISTS content_fts_ngram ON content USING fts (title_ngram, summary_ngram, text_ngram) WITH (tokenizer='ngram', weights='title_ngram=10.0,summary_ngram=5.0,text_ngram=1.0')"];
|
|
5
4
|
export declare const CONTENT_FTS_NAMES: readonly ["content_fts", "content_fts_ngram"];
|
|
6
5
|
export declare const FTS_REBUILD_THRESHOLD = 250;
|
|
7
6
|
export type TursoFtsStrategy = 'incremental' | 'rebuild';
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import type { ReconcileDelta } from '../../features/types.js';
|
|
2
2
|
import type { ParsedDoc } from '../../scan/index.js';
|
|
3
3
|
import type { Connection, ReconcileDialect } from '../types.js';
|
|
4
|
-
export declare const CONTENT_FTS_DDL: readonly ["CREATE INDEX IF NOT EXISTS content_fts ON content USING fts (title_stem, summary_stem, text_stem) WITH (weights = 'title_stem=10.0,summary_stem=5.0,text_stem=1.0')", "CREATE INDEX IF NOT EXISTS content_fts_ngram ON content USING fts (title_ngram, summary_ngram, text_ngram) WITH (tokenizer='ngram', weights='title_ngram=10.0,summary_ngram=5.0,text_ngram=1.0')"];
|
|
5
4
|
export declare const CONTENT_FTS_NAMES: readonly ["content_fts", "content_fts_ngram"];
|
|
6
5
|
export declare const FTS_REBUILD_THRESHOLD = 250;
|
|
7
6
|
export type TursoFtsStrategy = 'incremental' | 'rebuild';
|