sensemaking 0.18.2 → 0.18.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.
- package/dist/cjs/cli/status.js +32 -31
- package/dist/cjs/cli/status.js.map +1 -1
- package/dist/cjs/commands/map.js +50 -67
- package/dist/cjs/commands/map.js.map +1 -1
- package/dist/cjs/config/access.d.cts +2 -2
- package/dist/cjs/config/access.d.ts +2 -2
- package/dist/cjs/config/access.js.map +1 -1
- package/dist/cjs/config/index.d.cts +1 -1
- package/dist/cjs/config/index.d.ts +1 -1
- package/dist/cjs/config/index.js.map +1 -1
- package/dist/cjs/config/load.js +3 -2
- package/dist/cjs/config/load.js.map +1 -1
- package/dist/cjs/config/types.d.cts +2 -1
- package/dist/cjs/config/types.d.ts +2 -1
- package/dist/cjs/config/types.js.map +1 -1
- package/dist/cjs/config/validate.js +3 -0
- package/dist/cjs/config/validate.js.map +1 -1
- package/dist/cjs/embed/identity.js +3 -2
- package/dist/cjs/embed/identity.js.map +1 -1
- package/dist/cjs/embed/store.js +3 -3
- package/dist/cjs/embed/store.js.map +1 -1
- package/dist/cjs/index.d.cts +2 -2
- package/dist/cjs/index.d.ts +2 -2
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/lib/atomic-write.d.cts +1 -0
- package/dist/cjs/lib/atomic-write.d.ts +1 -0
- package/dist/cjs/lib/atomic-write.js +26 -0
- package/dist/cjs/lib/atomic-write.js.map +1 -0
- package/dist/cjs/store/duckdb/batch.js +3 -2
- package/dist/cjs/store/duckdb/batch.js.map +1 -1
- package/dist/cjs/store/duckdb/connection.js +12 -0
- package/dist/cjs/store/duckdb/connection.js.map +1 -1
- package/dist/cjs/store/duckdb/fieldStats.d.cts +2 -0
- package/dist/cjs/store/duckdb/fieldStats.d.ts +2 -0
- package/dist/cjs/store/duckdb/fieldStats.js +219 -0
- package/dist/cjs/store/duckdb/fieldStats.js.map +1 -0
- package/dist/cjs/store/duckdb/lexical.js +3 -2
- package/dist/cjs/store/duckdb/lexical.js.map +1 -1
- package/dist/cjs/store/duckdb/native.d.cts +0 -1
- package/dist/cjs/store/duckdb/native.d.ts +0 -1
- package/dist/cjs/store/duckdb/native.js +7 -336
- package/dist/cjs/store/duckdb/native.js.map +1 -1
- package/dist/cjs/store/duckdb/sql-functions.js +1 -1
- package/dist/cjs/store/duckdb/sql-functions.js.map +1 -1
- package/dist/cjs/store/duckdb/store.js +16 -1
- package/dist/cjs/store/duckdb/store.js.map +1 -1
- package/dist/cjs/store/duckdb/vectors.js +5 -17
- package/dist/cjs/store/duckdb/vectors.js.map +1 -1
- package/dist/cjs/store/index.js +6 -0
- package/dist/cjs/store/index.js.map +1 -1
- package/dist/cjs/store/native.d.cts +7 -0
- package/dist/cjs/store/native.d.ts +7 -0
- package/dist/cjs/store/native.js +350 -0
- package/dist/cjs/store/native.js.map +1 -0
- package/dist/cjs/store/sqlite/fieldStats.d.cts +2 -0
- package/dist/cjs/store/sqlite/fieldStats.d.ts +2 -0
- package/dist/cjs/store/sqlite/fieldStats.js +201 -0
- package/dist/cjs/store/sqlite/fieldStats.js.map +1 -0
- package/dist/cjs/store/sqlite/open.js +82 -29
- package/dist/cjs/store/sqlite/open.js.map +1 -1
- package/dist/cjs/store/sqlite/store.js +32 -4
- package/dist/cjs/store/sqlite/store.js.map +1 -1
- package/dist/cjs/store/sqlite/vectors.d.cts +0 -5
- package/dist/cjs/store/sqlite/vectors.d.ts +0 -5
- package/dist/cjs/store/sqlite/vectors.js +5 -71
- package/dist/cjs/store/sqlite/vectors.js.map +1 -1
- package/dist/cjs/store/turso/connection.d.cts +3 -0
- package/dist/cjs/store/turso/connection.d.ts +3 -0
- package/dist/cjs/store/turso/connection.js +529 -0
- package/dist/cjs/store/turso/connection.js.map +1 -0
- package/dist/cjs/store/turso/fieldStats.d.cts +2 -0
- package/dist/cjs/store/turso/fieldStats.d.ts +2 -0
- package/dist/cjs/store/turso/fieldStats.js +201 -0
- package/dist/cjs/store/turso/fieldStats.js.map +1 -0
- package/dist/cjs/store/turso/native.d.cts +2 -0
- package/dist/cjs/store/turso/native.d.ts +2 -0
- package/dist/cjs/store/turso/native.js +31 -0
- package/dist/cjs/store/turso/native.js.map +1 -0
- package/dist/cjs/store/turso/open.d.cts +12 -0
- package/dist/cjs/store/turso/open.d.ts +12 -0
- package/dist/cjs/store/turso/open.js +500 -0
- package/dist/cjs/store/turso/open.js.map +1 -0
- package/dist/cjs/store/turso/reconcile.d.cts +6 -0
- package/dist/cjs/store/turso/reconcile.d.ts +6 -0
- package/dist/cjs/store/turso/reconcile.js +793 -0
- package/dist/cjs/store/turso/reconcile.js.map +1 -0
- package/dist/cjs/store/turso/store.d.cts +5 -0
- package/dist/cjs/store/turso/store.d.ts +5 -0
- package/dist/cjs/store/turso/store.js +609 -0
- package/dist/cjs/store/turso/store.js.map +1 -0
- package/dist/cjs/store/types.d.cts +9 -1
- package/dist/cjs/store/types.d.ts +9 -1
- package/dist/cjs/store/types.js +0 -7
- package/dist/cjs/store/types.js.map +1 -1
- package/dist/cjs/store/vectors.d.cts +9 -0
- package/dist/cjs/store/vectors.d.ts +9 -0
- package/dist/cjs/store/vectors.js +215 -0
- package/dist/cjs/store/vectors.js.map +1 -0
- package/dist/esm/cli/status.js +5 -7
- package/dist/esm/cli/status.js.map +1 -1
- package/dist/esm/commands/map.js +7 -19
- package/dist/esm/commands/map.js.map +1 -1
- package/dist/esm/config/access.d.ts +2 -2
- package/dist/esm/config/access.js.map +1 -1
- package/dist/esm/config/index.d.ts +1 -1
- package/dist/esm/config/index.js.map +1 -1
- package/dist/esm/config/load.js +4 -3
- package/dist/esm/config/load.js.map +1 -1
- package/dist/esm/config/types.d.ts +2 -1
- package/dist/esm/config/types.js.map +1 -1
- package/dist/esm/config/validate.js +3 -0
- package/dist/esm/config/validate.js.map +1 -1
- package/dist/esm/embed/identity.js +4 -3
- package/dist/esm/embed/identity.js.map +1 -1
- package/dist/esm/embed/store.js +3 -3
- package/dist/esm/embed/store.js.map +1 -1
- package/dist/esm/index.d.ts +2 -2
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/lib/atomic-write.d.ts +1 -0
- package/dist/esm/lib/atomic-write.js +17 -0
- package/dist/esm/lib/atomic-write.js.map +1 -0
- package/dist/esm/store/duckdb/batch.js +3 -2
- package/dist/esm/store/duckdb/batch.js.map +1 -1
- package/dist/esm/store/duckdb/connection.js +12 -0
- package/dist/esm/store/duckdb/connection.js.map +1 -1
- package/dist/esm/store/duckdb/fieldStats.d.ts +2 -0
- package/dist/esm/store/duckdb/fieldStats.js +39 -0
- package/dist/esm/store/duckdb/fieldStats.js.map +1 -0
- package/dist/esm/store/duckdb/lexical.js +3 -2
- package/dist/esm/store/duckdb/lexical.js.map +1 -1
- package/dist/esm/store/duckdb/native.d.ts +0 -1
- package/dist/esm/store/duckdb/native.js +7 -84
- package/dist/esm/store/duckdb/native.js.map +1 -1
- package/dist/esm/store/duckdb/sql-functions.js +1 -1
- package/dist/esm/store/duckdb/sql-functions.js.map +1 -1
- package/dist/esm/store/duckdb/store.js +8 -5
- package/dist/esm/store/duckdb/store.js.map +1 -1
- package/dist/esm/store/duckdb/vectors.js +2 -12
- package/dist/esm/store/duckdb/vectors.js.map +1 -1
- package/dist/esm/store/index.js +6 -0
- package/dist/esm/store/index.js.map +1 -1
- package/dist/esm/store/native.d.ts +7 -0
- package/dist/esm/store/native.js +83 -0
- package/dist/esm/store/native.js.map +1 -0
- package/dist/esm/store/sqlite/fieldStats.d.ts +2 -0
- package/dist/esm/store/sqlite/fieldStats.js +25 -0
- package/dist/esm/store/sqlite/fieldStats.js.map +1 -0
- package/dist/esm/store/sqlite/open.js +21 -8
- package/dist/esm/store/sqlite/open.js.map +1 -1
- package/dist/esm/store/sqlite/store.js +14 -1
- package/dist/esm/store/sqlite/store.js.map +1 -1
- package/dist/esm/store/sqlite/vectors.d.ts +0 -5
- package/dist/esm/store/sqlite/vectors.js +2 -22
- package/dist/esm/store/sqlite/vectors.js.map +1 -1
- package/dist/esm/store/turso/connection.d.ts +3 -0
- package/dist/esm/store/turso/connection.js +52 -0
- package/dist/esm/store/turso/connection.js.map +1 -0
- package/dist/esm/store/turso/fieldStats.d.ts +2 -0
- package/dist/esm/store/turso/fieldStats.js +24 -0
- package/dist/esm/store/turso/fieldStats.js.map +1 -0
- package/dist/esm/store/turso/native.d.ts +2 -0
- package/dist/esm/store/turso/native.js +19 -0
- package/dist/esm/store/turso/native.js.map +1 -0
- package/dist/esm/store/turso/open.d.ts +12 -0
- package/dist/esm/store/turso/open.js +113 -0
- package/dist/esm/store/turso/open.js.map +1 -0
- package/dist/esm/store/turso/reconcile.d.ts +6 -0
- package/dist/esm/store/turso/reconcile.js +158 -0
- package/dist/esm/store/turso/reconcile.js.map +1 -0
- package/dist/esm/store/turso/store.d.ts +5 -0
- package/dist/esm/store/turso/store.js +93 -0
- package/dist/esm/store/turso/store.js.map +1 -0
- package/dist/esm/store/types.d.ts +9 -1
- package/dist/esm/store/types.js +0 -7
- package/dist/esm/store/types.js.map +1 -1
- package/dist/esm/store/vectors.d.ts +9 -0
- package/dist/esm/store/vectors.js +26 -0
- package/dist/esm/store/vectors.js.map +1 -0
- package/package.json +2 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/ai/sensemaking/src/store/turso/reconcile.ts"],"sourcesContent":["import type { Config } from '../../config/index.ts';\nimport { SenseError } from '../../errors.ts';\nimport { activeFeatures } from '../../features/index.ts';\nimport type { ExtractedDoc, ReconcileDelta } from '../../features/types.ts';\nimport { progress } from '../../output/progress.ts';\nimport type { ParsedDoc } from '../../scan/index.ts';\nimport { listFiles, RESERVED_COLUMNS } from '../../scan/index.ts';\nimport { reparseFiles } from '../../scan/reparse.ts';\nimport { getColumns, getMeta, quoteIdent, setMeta } from '../shared.ts';\nimport { withTransaction } from '../transaction.ts';\nimport type { Connection } from '../types.ts';\n\n// Fork of sqlite/reconcile.ts (house precedent: each store owns its engine-specific SQL), not\n// duckdb's, even though duckdb's content handling is the structurally closer of the two. duckdb\n// dropped sqlite's reconcile_max_ms bookkeeping entirely, and this store's busy timeout (open.ts)\n// is derived from exactly that recorded value -- forking duckdb's file would lose it silently.\n// content itself follows duckdb's shape instead: a plain table, no rowid coupling, no FTS index\n// (phase 2's job, not reconcile's), and no `_seg` sidecars (turso's unspaced-script path is not\n// FTS5-shaped).\nconst CORE_FRONTMATTER_COLUMNS = new Set(['path', '_mtime', '_ctime', '_size', '_parse_error']);\n\n// Not a compile-time cap on ALTER TABLE ADD COLUMN (spike-measured: turso accepts 10,000 with no\n// error). The real fence is a SELECT projecting more than this many result columns, which fails\n// to prepare (spike-measured, both `SELECT *` and an explicit list), so a wide frontmatter table\n// would pass every write silently and only break the first time something selects across it.\n// Enforced here, before ALTER, the same shape as sqlite's compile-time fence.\nconst MAX_FRONTMATTER_COLUMNS = 2000;\n\n// No rowid coupling (unlike sqlite's FTS5 content): `path` is content's own primary key.\nconst INSERT_CONTENT_SQL = `INSERT INTO content (\"path\", title, summary, text) VALUES (?, ?, ?, ?)`;\n\nfunction contentRow(doc: ParsedDoc): unknown[] {\n return [doc.relPath, doc.search.title, doc.search.summary, doc.search.text];\n}\n\nexport async function reconcile(conn: Connection, cfg: Config, baseDir: string): Promise<{ parsed: number; warnings: string[] }> {\n const files = listFiles(cfg, baseDir);\n const currentSet = new Set(files.map((f) => f.relPath));\n\n const existingStmt = await conn.prepare('SELECT \"path\", \"_mtime\", \"_size\" FROM frontmatter');\n const existingRows = (await existingStmt.all()) as Array<{ path: string; _mtime: number; _size: number }>;\n const existing = new Map(existingRows.map((r) => [r.path, r]));\n const vanished = existingRows.filter((r) => !currentSet.has(r.path)).map((r) => r.path);\n\n const toReparse = files.filter((f) => {\n const row = existing.get(f.relPath);\n return !row || row._mtime !== f.mtimeMs || row._size !== f.size;\n });\n\n if (vanished.length === 0 && toReparse.length === 0) return { parsed: 0, warnings: [] };\n\n const features = activeFeatures(cfg);\n const seenColumns = await getColumns(conn);\n\n // Bulk reparses (a sync, a cold build) are the long silences a query can hit; short\n // reconciles stay silent (progress() has a threshold).\n const report = progress('reparsing files', toReparse.length);\n const { docs: parsedDocs, warnings, newColumns } = await reparseFiles(toReparse, features, cfg, seenColumns, report.tick);\n report.finish();\n for (const col of newColumns) seenColumns.add(col);\n\n const allColumns = [...seenColumns];\n if (allColumns.length > MAX_FRONTMATTER_COLUMNS) {\n throw new SenseError(\n 'COLUMN_LIMIT',\n `frontmatter would need ${allColumns.length} columns, crossing turso's SELECT result-set column limit (${MAX_FRONTMATTER_COLUMNS}; ALTER TABLE ADD COLUMN itself accepts far more, but a query projecting past this many columns fails to prepare). Narrow the presets' include globs so fewer/other files are indexed, or fix whatever is generating unbounded frontmatter keys.`\n );\n }\n // Columns the frontmatter upsert actually writes: core + parsed frontmatter keys, never a\n // feature-owned reserved column (see CORE_FRONTMATTER_COLUMNS above).\n const writableColumns = allColumns.filter((c) => CORE_FRONTMATTER_COLUMNS.has(c) || !RESERVED_COLUMNS.has(c));\n // ON CONFLICT UPDATE (not OR REPLACE) keeps the row's identity stable across reparses.\n const insertSql = `INSERT INTO frontmatter (${writableColumns.map(quoteIdent).join(', ')}) VALUES (${writableColumns.map(() => '?').join(', ')}) ON CONFLICT(\"path\") DO UPDATE SET ${writableColumns\n .filter((c) => c !== 'path')\n .map((c) => `${quoteIdent(c)} = excluded.${quoteIdent(c)}`)\n .join(', ')}`;\n\n const added = toReparse.filter((f) => !existing.has(f.relPath)).map((f) => f.relPath);\n const delta: ReconcileDelta = { files, reparsed: parsedDocs.map((d) => d.relPath), added, vanished };\n const addedSet = new Set(added);\n const reparsedExisting = parsedDocs.map((d) => d.relPath).filter((p) => !addedSet.has(p));\n\n const txStart = Date.now();\n await withTransaction(conn, async () => {\n for (const col of newColumns) await conn.exec(`ALTER TABLE frontmatter ADD COLUMN ${quoteIdent(col)}`);\n\n if (parsedDocs.length > 0) {\n const rows = parsedDocs.map((doc) =>\n writableColumns.map((col) => {\n if (col === 'path') return doc.relPath;\n if (col === '_mtime') return doc.mtimeMs;\n if (col === '_ctime') return doc.ctimeMs;\n if (col === '_size') return doc.size;\n // Written per parse, unlike _rank, which a feature pass owns and the upsert skips.\n if (col === '_parse_error') return doc.parseError;\n return doc.data[col] ?? null;\n })\n );\n await conn.runBatch(insertSql, rows);\n }\n\n // content is a plain table keyed by its own path (no rowid subquery, unlike sqlite's FTS5\n // content), so vanished and reparsed docs delete in one pass.\n const contentTouched = [...vanished, ...reparsedExisting];\n if (contentTouched.length > 0)\n await conn.runBatch(\n 'DELETE FROM content WHERE \"path\" = ?',\n contentTouched.map((p) => [p])\n );\n if (parsedDocs.length > 0) await conn.runBatch(INSERT_CONTENT_SQL, parsedDocs.map(contentRow));\n\n if (vanished.length > 0)\n await conn.runBatch(\n 'DELETE FROM frontmatter WHERE \"path\" = ?',\n vanished.map((p) => [p])\n );\n\n // A preset edit forces a full rebuild, so an unchanged doc's coverage is already correct;\n // new docs have nothing to clear, which keeps cold builds linear.\n const presetTouched = [...vanished, ...reparsedExisting];\n if (presetTouched.length > 0)\n await conn.runBatch(\n 'DELETE FROM preset_files WHERE \"path\" = ?',\n presetTouched.map((p) => [p])\n );\n const presetRows: unknown[][] = [];\n for (const doc of parsedDocs) for (const presetName of doc.presets) presetRows.push([doc.relPath, presetName]);\n if (presetRows.length > 0) await conn.runBatch('INSERT INTO preset_files (\"path\", preset) VALUES (?, ?)', presetRows);\n\n const removedPaths = [...vanished, ...reparsedExisting];\n if (removedPaths.length > 0) for (const feature of features) await feature.remove?.(conn, removedPaths, delta);\n for (const feature of features) {\n const docsForFeature: ExtractedDoc[] = parsedDocs.map((doc) => ({ path: doc.relPath, extracted: doc.extracted[feature.name] }));\n await feature.store?.(conn, docsForFeature, delta);\n }\n for (const feature of features) await feature.afterReconcile?.(conn, delta);\n });\n\n // Reconcile's own write-transaction duration, for open()'s derived busy_timeout: keep the\n // observed max so a big watcher reconcile's lock hold is what the next open bounds its wait\n // against (the same mechanism sqlite's reconcile records, and the one this store's busy\n // timeout is derived from).\n const durationMs = Date.now() - txStart;\n const prevRaw = await getMeta(conn, 'reconcile_max_ms');\n // -1, not 0, so a genuinely 0ms first reconcile (sub-millisecond, common on a tiny tree)\n // still gets recorded instead of losing to the \"nothing recorded yet\" default.\n const prevMax = prevRaw === null ? -1 : Number(prevRaw);\n if (durationMs > prevMax) await setMeta(conn, 'reconcile_max_ms', String(durationMs));\n\n return { parsed: parsedDocs.length, warnings };\n}\n"],"names":["reconcile","CORE_FRONTMATTER_COLUMNS","Set","MAX_FRONTMATTER_COLUMNS","INSERT_CONTENT_SQL","contentRow","doc","relPath","search","title","summary","text","conn","cfg","baseDir","files","currentSet","existingStmt","existingRows","existing","vanished","toReparse","features","seenColumns","report","parsedDocs","warnings","newColumns","col","allColumns","writableColumns","insertSql","added","delta","addedSet","reparsedExisting","txStart","durationMs","prevRaw","prevMax","listFiles","map","f","prepare","all","Map","r","path","filter","has","row","get","_mtime","mtimeMs","_size","size","length","parsed","activeFeatures","getColumns","progress","reparseFiles","tick","docs","finish","add","SenseError","c","RESERVED_COLUMNS","quoteIdent","join","reparsed","d","p","Date","now","withTransaction","feature","rows","contentTouched","presetTouched","presetRows","presetName","removedPaths","exec","ctimeMs","parseError","data","runBatch","presets","push","remove","docsForFeature","extracted","name","store","afterReconcile","getMeta","Number","setMeta","String"],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { Database } from '@tursodatabase/database';
|
|
2
|
+
import type { Config } from '../../config/index.js';
|
|
3
|
+
import type { Capability, Connection, Store } from '../types.js';
|
|
4
|
+
export declare const CAPABILITIES: ReadonlySet<Capability>;
|
|
5
|
+
export declare function createStore(db: Database, conn: Connection, cfg: Config, baseDir: string): Store;
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { Database } from '@tursodatabase/database';
|
|
2
|
+
import type { Config } from '../../config/index.js';
|
|
3
|
+
import type { Capability, Connection, Store } from '../types.js';
|
|
4
|
+
export declare const CAPABILITIES: ReadonlySet<Capability>;
|
|
5
|
+
export declare function createStore(db: Database, conn: Connection, cfg: Config, baseDir: string): Store;
|
|
@@ -0,0 +1,609 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
function _export(target, all) {
|
|
6
|
+
for(var name in all)Object.defineProperty(target, name, {
|
|
7
|
+
enumerable: true,
|
|
8
|
+
get: Object.getOwnPropertyDescriptor(all, name).get
|
|
9
|
+
});
|
|
10
|
+
}
|
|
11
|
+
_export(exports, {
|
|
12
|
+
get CAPABILITIES () {
|
|
13
|
+
return CAPABILITIES;
|
|
14
|
+
},
|
|
15
|
+
get createStore () {
|
|
16
|
+
return createStore;
|
|
17
|
+
}
|
|
18
|
+
});
|
|
19
|
+
var _errorsts = require("../../errors.js");
|
|
20
|
+
var _sharedts = require("../shared.js");
|
|
21
|
+
var _transactionts = require("../transaction.js");
|
|
22
|
+
var _vectorsts = require("../vectors.js");
|
|
23
|
+
var _fieldStatsts = require("./fieldStats.js");
|
|
24
|
+
var _reconcilets = require("./reconcile.js");
|
|
25
|
+
function _array_like_to_array(arr, len) {
|
|
26
|
+
if (len == null || len > arr.length) len = arr.length;
|
|
27
|
+
for(var i = 0, arr2 = new Array(len); i < len; i++)arr2[i] = arr[i];
|
|
28
|
+
return arr2;
|
|
29
|
+
}
|
|
30
|
+
function _array_without_holes(arr) {
|
|
31
|
+
if (Array.isArray(arr)) return _array_like_to_array(arr);
|
|
32
|
+
}
|
|
33
|
+
function _async_generator(gen) {
|
|
34
|
+
var front, back;
|
|
35
|
+
function send(key, arg) {
|
|
36
|
+
return new Promise(function(resolve, reject) {
|
|
37
|
+
var request = {
|
|
38
|
+
key: key,
|
|
39
|
+
arg: arg,
|
|
40
|
+
resolve: resolve,
|
|
41
|
+
reject: reject,
|
|
42
|
+
next: null
|
|
43
|
+
};
|
|
44
|
+
if (back) back = back.next = request;
|
|
45
|
+
else {
|
|
46
|
+
front = back = request;
|
|
47
|
+
resume(key, arg);
|
|
48
|
+
}
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
function resume(key, arg) {
|
|
52
|
+
try {
|
|
53
|
+
var result = gen[key](arg);
|
|
54
|
+
var value = result.value;
|
|
55
|
+
var overloaded = value instanceof _overload_yield;
|
|
56
|
+
Promise.resolve(overloaded ? value.v : value).then(function(arg) {
|
|
57
|
+
if (overloaded) {
|
|
58
|
+
var nextKey = key === "return" ? "return" : "next";
|
|
59
|
+
if (!value.k || arg.done) return resume(nextKey, arg);
|
|
60
|
+
else arg = gen[nextKey](arg).value;
|
|
61
|
+
}
|
|
62
|
+
settle(result.done ? "return" : "normal", arg);
|
|
63
|
+
}, function(err) {
|
|
64
|
+
resume("throw", err);
|
|
65
|
+
});
|
|
66
|
+
} catch (err) {
|
|
67
|
+
settle("throw", err);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
function settle(type, value) {
|
|
71
|
+
switch(type){
|
|
72
|
+
case "return":
|
|
73
|
+
front.resolve({
|
|
74
|
+
value: value,
|
|
75
|
+
done: true
|
|
76
|
+
});
|
|
77
|
+
break;
|
|
78
|
+
case "throw":
|
|
79
|
+
front.reject(value);
|
|
80
|
+
break;
|
|
81
|
+
default:
|
|
82
|
+
front.resolve({
|
|
83
|
+
value: value,
|
|
84
|
+
done: false
|
|
85
|
+
});
|
|
86
|
+
break;
|
|
87
|
+
}
|
|
88
|
+
front = front.next;
|
|
89
|
+
if (front) resume(front.key, front.arg);
|
|
90
|
+
else back = null;
|
|
91
|
+
}
|
|
92
|
+
this._invoke = send;
|
|
93
|
+
if (typeof gen.return !== "function") this.return = undefined;
|
|
94
|
+
}
|
|
95
|
+
_async_generator.prototype[typeof Symbol === "function" && Symbol.asyncIterator || "@@asyncIterator"] = function() {
|
|
96
|
+
return this;
|
|
97
|
+
};
|
|
98
|
+
_async_generator.prototype.next = function(arg) {
|
|
99
|
+
return this._invoke("next", arg);
|
|
100
|
+
};
|
|
101
|
+
_async_generator.prototype.throw = function(arg) {
|
|
102
|
+
return this._invoke("throw", arg);
|
|
103
|
+
};
|
|
104
|
+
_async_generator.prototype.return = function(arg) {
|
|
105
|
+
return this._invoke("return", arg);
|
|
106
|
+
};
|
|
107
|
+
function _async_generator_delegate(inner) {
|
|
108
|
+
var iter = {}, waiting = false;
|
|
109
|
+
function pump(key, value) {
|
|
110
|
+
waiting = true;
|
|
111
|
+
value = new Promise(function(resolve) {
|
|
112
|
+
resolve(inner[key](value));
|
|
113
|
+
});
|
|
114
|
+
return {
|
|
115
|
+
done: false,
|
|
116
|
+
value: new _overload_yield(value, 1)
|
|
117
|
+
};
|
|
118
|
+
}
|
|
119
|
+
iter[typeof Symbol !== "undefined" && Symbol.iterator || "@@iterator"] = function() {
|
|
120
|
+
return this;
|
|
121
|
+
};
|
|
122
|
+
iter.next = function(value) {
|
|
123
|
+
if (waiting) {
|
|
124
|
+
waiting = false;
|
|
125
|
+
return value;
|
|
126
|
+
}
|
|
127
|
+
return pump("next", value);
|
|
128
|
+
};
|
|
129
|
+
if (typeof inner.throw === "function") {
|
|
130
|
+
iter.throw = function(value) {
|
|
131
|
+
if (waiting) {
|
|
132
|
+
waiting = false;
|
|
133
|
+
throw value;
|
|
134
|
+
}
|
|
135
|
+
return pump("throw", value);
|
|
136
|
+
};
|
|
137
|
+
}
|
|
138
|
+
if (typeof inner.return === "function") {
|
|
139
|
+
iter.return = function(value) {
|
|
140
|
+
if (waiting) {
|
|
141
|
+
waiting = false;
|
|
142
|
+
return value;
|
|
143
|
+
}
|
|
144
|
+
return pump("return", value);
|
|
145
|
+
};
|
|
146
|
+
}
|
|
147
|
+
return iter;
|
|
148
|
+
}
|
|
149
|
+
function _async_iterator(iterable) {
|
|
150
|
+
var method, async, sync, retry = 2;
|
|
151
|
+
for("undefined" != typeof Symbol && (async = Symbol.asyncIterator, sync = Symbol.iterator); retry--;){
|
|
152
|
+
if (async && null != (method = iterable[async])) return method.call(iterable);
|
|
153
|
+
if (sync && null != (method = iterable[sync])) return new AsyncFromSyncIterator(method.call(iterable));
|
|
154
|
+
async = "@@asyncIterator", sync = "@@iterator";
|
|
155
|
+
}
|
|
156
|
+
throw new TypeError("Object is not async iterable");
|
|
157
|
+
}
|
|
158
|
+
function AsyncFromSyncIterator(s) {
|
|
159
|
+
function AsyncFromSyncIteratorContinuation(r) {
|
|
160
|
+
if (Object(r) !== r) return Promise.reject(new TypeError(r + " is not an object."));
|
|
161
|
+
var done = r.done;
|
|
162
|
+
return Promise.resolve(r.value).then(function(value) {
|
|
163
|
+
return {
|
|
164
|
+
value: value,
|
|
165
|
+
done: done
|
|
166
|
+
};
|
|
167
|
+
});
|
|
168
|
+
}
|
|
169
|
+
return AsyncFromSyncIterator = function(s) {
|
|
170
|
+
this.s = s, this.n = s.next;
|
|
171
|
+
}, AsyncFromSyncIterator.prototype = {
|
|
172
|
+
s: null,
|
|
173
|
+
n: null,
|
|
174
|
+
next: function() {
|
|
175
|
+
return AsyncFromSyncIteratorContinuation(this.n.apply(this.s, arguments));
|
|
176
|
+
},
|
|
177
|
+
return: function(value) {
|
|
178
|
+
var ret = this.s.return;
|
|
179
|
+
return void 0 === ret ? Promise.resolve({
|
|
180
|
+
value: value,
|
|
181
|
+
done: !0
|
|
182
|
+
}) : AsyncFromSyncIteratorContinuation(ret.apply(this.s, arguments));
|
|
183
|
+
},
|
|
184
|
+
throw: function(value) {
|
|
185
|
+
var thr = this.s.return;
|
|
186
|
+
return void 0 === thr ? Promise.reject(value) : AsyncFromSyncIteratorContinuation(thr.apply(this.s, arguments));
|
|
187
|
+
}
|
|
188
|
+
}, new AsyncFromSyncIterator(s);
|
|
189
|
+
}
|
|
190
|
+
function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {
|
|
191
|
+
try {
|
|
192
|
+
var info = gen[key](arg);
|
|
193
|
+
var value = info.value;
|
|
194
|
+
} catch (error) {
|
|
195
|
+
reject(error);
|
|
196
|
+
return;
|
|
197
|
+
}
|
|
198
|
+
if (info.done) resolve(value);
|
|
199
|
+
else Promise.resolve(value).then(_next, _throw);
|
|
200
|
+
}
|
|
201
|
+
function _async_to_generator(fn) {
|
|
202
|
+
return function() {
|
|
203
|
+
var self = this, args = arguments;
|
|
204
|
+
return new Promise(function(resolve, reject) {
|
|
205
|
+
var gen = fn.apply(self, args);
|
|
206
|
+
function _next(value) {
|
|
207
|
+
asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value);
|
|
208
|
+
}
|
|
209
|
+
function _throw(err) {
|
|
210
|
+
asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err);
|
|
211
|
+
}
|
|
212
|
+
_next(undefined);
|
|
213
|
+
});
|
|
214
|
+
};
|
|
215
|
+
}
|
|
216
|
+
function _iterable_to_array(iter) {
|
|
217
|
+
if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) {
|
|
218
|
+
return Array.from(iter);
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
function _non_iterable_spread() {
|
|
222
|
+
throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
|
|
223
|
+
}
|
|
224
|
+
function _overload_yield(value, kind) {
|
|
225
|
+
this.v = value;
|
|
226
|
+
this.k = kind;
|
|
227
|
+
}
|
|
228
|
+
function _to_consumable_array(arr) {
|
|
229
|
+
return _array_without_holes(arr) || _iterable_to_array(arr) || _unsupported_iterable_to_array(arr) || _non_iterable_spread();
|
|
230
|
+
}
|
|
231
|
+
function _ts_generator(thisArg, body) {
|
|
232
|
+
var f, y, t, _ = {
|
|
233
|
+
label: 0,
|
|
234
|
+
sent: function() {
|
|
235
|
+
if (t[0] & 1) throw t[1];
|
|
236
|
+
return t[1];
|
|
237
|
+
},
|
|
238
|
+
trys: [],
|
|
239
|
+
ops: []
|
|
240
|
+
}, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype), d = Object.defineProperty;
|
|
241
|
+
return d(g, "next", {
|
|
242
|
+
value: verb(0)
|
|
243
|
+
}), d(g, "throw", {
|
|
244
|
+
value: verb(1)
|
|
245
|
+
}), d(g, "return", {
|
|
246
|
+
value: verb(2)
|
|
247
|
+
}), typeof Symbol === "function" && d(g, Symbol.iterator, {
|
|
248
|
+
value: function() {
|
|
249
|
+
return this;
|
|
250
|
+
}
|
|
251
|
+
}), g;
|
|
252
|
+
function verb(n) {
|
|
253
|
+
return function(v) {
|
|
254
|
+
return step([
|
|
255
|
+
n,
|
|
256
|
+
v
|
|
257
|
+
]);
|
|
258
|
+
};
|
|
259
|
+
}
|
|
260
|
+
function step(op) {
|
|
261
|
+
if (f) throw new TypeError("Generator is already executing.");
|
|
262
|
+
while(g && (g = 0, op[0] && (_ = 0)), _)try {
|
|
263
|
+
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;
|
|
264
|
+
if (y = 0, t) op = [
|
|
265
|
+
op[0] & 2,
|
|
266
|
+
t.value
|
|
267
|
+
];
|
|
268
|
+
switch(op[0]){
|
|
269
|
+
case 0:
|
|
270
|
+
case 1:
|
|
271
|
+
t = op;
|
|
272
|
+
break;
|
|
273
|
+
case 4:
|
|
274
|
+
_.label++;
|
|
275
|
+
return {
|
|
276
|
+
value: op[1],
|
|
277
|
+
done: false
|
|
278
|
+
};
|
|
279
|
+
case 5:
|
|
280
|
+
_.label++;
|
|
281
|
+
y = op[1];
|
|
282
|
+
op = [
|
|
283
|
+
0
|
|
284
|
+
];
|
|
285
|
+
continue;
|
|
286
|
+
case 7:
|
|
287
|
+
op = _.ops.pop();
|
|
288
|
+
_.trys.pop();
|
|
289
|
+
continue;
|
|
290
|
+
default:
|
|
291
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) {
|
|
292
|
+
_ = 0;
|
|
293
|
+
continue;
|
|
294
|
+
}
|
|
295
|
+
if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) {
|
|
296
|
+
_.label = op[1];
|
|
297
|
+
break;
|
|
298
|
+
}
|
|
299
|
+
if (op[0] === 6 && _.label < t[1]) {
|
|
300
|
+
_.label = t[1];
|
|
301
|
+
t = op;
|
|
302
|
+
break;
|
|
303
|
+
}
|
|
304
|
+
if (t && _.label < t[2]) {
|
|
305
|
+
_.label = t[2];
|
|
306
|
+
_.ops.push(op);
|
|
307
|
+
break;
|
|
308
|
+
}
|
|
309
|
+
if (t[2]) _.ops.pop();
|
|
310
|
+
_.trys.pop();
|
|
311
|
+
continue;
|
|
312
|
+
}
|
|
313
|
+
op = body.call(thisArg, _);
|
|
314
|
+
} catch (e) {
|
|
315
|
+
op = [
|
|
316
|
+
6,
|
|
317
|
+
e
|
|
318
|
+
];
|
|
319
|
+
y = 0;
|
|
320
|
+
} finally{
|
|
321
|
+
f = t = 0;
|
|
322
|
+
}
|
|
323
|
+
if (op[0] & 5) throw op[1];
|
|
324
|
+
return {
|
|
325
|
+
value: op[0] ? op[1] : void 0,
|
|
326
|
+
done: true
|
|
327
|
+
};
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
function _ts_values(o) {
|
|
331
|
+
var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
|
|
332
|
+
if (m) {
|
|
333
|
+
return m.call(o);
|
|
334
|
+
}
|
|
335
|
+
if (o && typeof o.length === "number") {
|
|
336
|
+
return {
|
|
337
|
+
next: function() {
|
|
338
|
+
if (o && i >= o.length) {
|
|
339
|
+
o = void 0;
|
|
340
|
+
}
|
|
341
|
+
return {
|
|
342
|
+
value: o && o[i++],
|
|
343
|
+
done: !o
|
|
344
|
+
};
|
|
345
|
+
}
|
|
346
|
+
};
|
|
347
|
+
}
|
|
348
|
+
throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
|
|
349
|
+
}
|
|
350
|
+
function _unsupported_iterable_to_array(o, minLen) {
|
|
351
|
+
if (!o) return;
|
|
352
|
+
if (typeof o === "string") return _array_like_to_array(o, minLen);
|
|
353
|
+
var n = Object.prototype.toString.call(o).slice(8, -1);
|
|
354
|
+
if (n === "Object" && o.constructor) n = o.constructor.name;
|
|
355
|
+
if (n === "Map" || n === "Set") return Array.from(n);
|
|
356
|
+
if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _array_like_to_array(o, minLen);
|
|
357
|
+
}
|
|
358
|
+
function _wrap_async_generator(fn) {
|
|
359
|
+
return function() {
|
|
360
|
+
return new _async_generator(fn.apply(this, arguments));
|
|
361
|
+
};
|
|
362
|
+
}
|
|
363
|
+
var CAPABILITIES = new Set();
|
|
364
|
+
function missing(name) {
|
|
365
|
+
throw new _errorsts.SenseError('STORE_CAPABILITY_MISSING', 'store "turso" does not implement "'.concat(name, '" in this build; set "store" to "sqlite" or "duckdb" in this tree\'s config'));
|
|
366
|
+
}
|
|
367
|
+
function createStore(db, conn, cfg, baseDir) {
|
|
368
|
+
return {
|
|
369
|
+
name: 'turso',
|
|
370
|
+
capabilities: CAPABILITIES,
|
|
371
|
+
exec: function exec(sql) {
|
|
372
|
+
return _async_to_generator(function() {
|
|
373
|
+
return _ts_generator(this, function(_state) {
|
|
374
|
+
switch(_state.label){
|
|
375
|
+
case 0:
|
|
376
|
+
return [
|
|
377
|
+
4,
|
|
378
|
+
conn.exec(sql)
|
|
379
|
+
];
|
|
380
|
+
case 1:
|
|
381
|
+
_state.sent();
|
|
382
|
+
return [
|
|
383
|
+
2
|
|
384
|
+
];
|
|
385
|
+
}
|
|
386
|
+
});
|
|
387
|
+
})();
|
|
388
|
+
},
|
|
389
|
+
prepare: function prepare(sql) {
|
|
390
|
+
return _async_to_generator(function() {
|
|
391
|
+
return _ts_generator(this, function(_state) {
|
|
392
|
+
return [
|
|
393
|
+
2,
|
|
394
|
+
conn.prepare(sql)
|
|
395
|
+
];
|
|
396
|
+
});
|
|
397
|
+
})();
|
|
398
|
+
},
|
|
399
|
+
runBatch: function runBatch(sql, paramRows) {
|
|
400
|
+
return _async_to_generator(function() {
|
|
401
|
+
return _ts_generator(this, function(_state) {
|
|
402
|
+
switch(_state.label){
|
|
403
|
+
case 0:
|
|
404
|
+
return [
|
|
405
|
+
4,
|
|
406
|
+
conn.runBatch(sql, paramRows)
|
|
407
|
+
];
|
|
408
|
+
case 1:
|
|
409
|
+
_state.sent();
|
|
410
|
+
return [
|
|
411
|
+
2
|
|
412
|
+
];
|
|
413
|
+
}
|
|
414
|
+
});
|
|
415
|
+
})();
|
|
416
|
+
},
|
|
417
|
+
transaction: function transaction(fn) {
|
|
418
|
+
return _async_to_generator(function() {
|
|
419
|
+
return _ts_generator(this, function(_state) {
|
|
420
|
+
return [
|
|
421
|
+
2,
|
|
422
|
+
(0, _transactionts.withTransaction)(conn, fn)
|
|
423
|
+
];
|
|
424
|
+
});
|
|
425
|
+
})();
|
|
426
|
+
},
|
|
427
|
+
reconcile: function reconcile() {
|
|
428
|
+
return _async_to_generator(function() {
|
|
429
|
+
return _ts_generator(this, function(_state) {
|
|
430
|
+
return [
|
|
431
|
+
2,
|
|
432
|
+
(0, _reconcilets.reconcile)(conn, cfg, baseDir)
|
|
433
|
+
];
|
|
434
|
+
});
|
|
435
|
+
})();
|
|
436
|
+
},
|
|
437
|
+
docs: {
|
|
438
|
+
columns: function columns() {
|
|
439
|
+
return _async_to_generator(function() {
|
|
440
|
+
return _ts_generator(this, function(_state) {
|
|
441
|
+
switch(_state.label){
|
|
442
|
+
case 0:
|
|
443
|
+
return [
|
|
444
|
+
4,
|
|
445
|
+
(0, _sharedts.getColumns)(conn)
|
|
446
|
+
];
|
|
447
|
+
case 1:
|
|
448
|
+
return [
|
|
449
|
+
2,
|
|
450
|
+
_to_consumable_array.apply(void 0, [
|
|
451
|
+
_state.sent()
|
|
452
|
+
])
|
|
453
|
+
];
|
|
454
|
+
}
|
|
455
|
+
});
|
|
456
|
+
})();
|
|
457
|
+
},
|
|
458
|
+
fieldStats: function fieldStats(columns, scopeWhere) {
|
|
459
|
+
return (0, _fieldStatsts.fieldStats)(conn, columns, scopeWhere);
|
|
460
|
+
}
|
|
461
|
+
},
|
|
462
|
+
lexical: {
|
|
463
|
+
query: function query() {
|
|
464
|
+
return _async_to_generator(function() {
|
|
465
|
+
return _ts_generator(this, function(_state) {
|
|
466
|
+
return [
|
|
467
|
+
2,
|
|
468
|
+
missing('lexical')
|
|
469
|
+
];
|
|
470
|
+
});
|
|
471
|
+
})();
|
|
472
|
+
}
|
|
473
|
+
},
|
|
474
|
+
vectors: {
|
|
475
|
+
pending: function pending() {
|
|
476
|
+
return (0, _vectorsts.pendingRows)(conn);
|
|
477
|
+
},
|
|
478
|
+
writeVectors: function writeVectors() {
|
|
479
|
+
return _async_to_generator(function() {
|
|
480
|
+
return _ts_generator(this, function(_state) {
|
|
481
|
+
return [
|
|
482
|
+
2,
|
|
483
|
+
missing('vectors')
|
|
484
|
+
];
|
|
485
|
+
});
|
|
486
|
+
})();
|
|
487
|
+
},
|
|
488
|
+
candidates: function candidates() {
|
|
489
|
+
return _async_to_generator(function() {
|
|
490
|
+
return _ts_generator(this, function(_state) {
|
|
491
|
+
return [
|
|
492
|
+
2,
|
|
493
|
+
missing('vectors')
|
|
494
|
+
];
|
|
495
|
+
});
|
|
496
|
+
})();
|
|
497
|
+
},
|
|
498
|
+
similar: function similar() {
|
|
499
|
+
return _async_to_generator(function() {
|
|
500
|
+
return _ts_generator(this, function(_state) {
|
|
501
|
+
return [
|
|
502
|
+
2,
|
|
503
|
+
missing('vectors')
|
|
504
|
+
];
|
|
505
|
+
});
|
|
506
|
+
})();
|
|
507
|
+
},
|
|
508
|
+
hasVector: function hasVector(path) {
|
|
509
|
+
return (0, _vectorsts.hasVectorRow)(conn, path);
|
|
510
|
+
}
|
|
511
|
+
},
|
|
512
|
+
engineStatus: function engineStatus() {
|
|
513
|
+
return _async_to_generator(function() {
|
|
514
|
+
var row;
|
|
515
|
+
return _ts_generator(this, function(_state) {
|
|
516
|
+
switch(_state.label){
|
|
517
|
+
case 0:
|
|
518
|
+
return [
|
|
519
|
+
4,
|
|
520
|
+
db.prepare('PRAGMA busy_timeout')
|
|
521
|
+
];
|
|
522
|
+
case 1:
|
|
523
|
+
return [
|
|
524
|
+
4,
|
|
525
|
+
_state.sent().get()
|
|
526
|
+
];
|
|
527
|
+
case 2:
|
|
528
|
+
row = _state.sent();
|
|
529
|
+
return [
|
|
530
|
+
2,
|
|
531
|
+
{
|
|
532
|
+
busy_timeout: "".concat(row.busy_timeout, "ms (derived: 3x the largest reconcile this cache has recorded, floored at 30000ms)")
|
|
533
|
+
}
|
|
534
|
+
];
|
|
535
|
+
}
|
|
536
|
+
});
|
|
537
|
+
})();
|
|
538
|
+
},
|
|
539
|
+
raw: {
|
|
540
|
+
prepare: function prepare(sql) {
|
|
541
|
+
return _async_to_generator(function() {
|
|
542
|
+
var stmt;
|
|
543
|
+
return _ts_generator(this, function(_state) {
|
|
544
|
+
switch(_state.label){
|
|
545
|
+
case 0:
|
|
546
|
+
return [
|
|
547
|
+
4,
|
|
548
|
+
db.prepare(sql)
|
|
549
|
+
];
|
|
550
|
+
case 1:
|
|
551
|
+
stmt = _state.sent();
|
|
552
|
+
stmt.safeIntegers(true); // int64 past 2^53 arrives as BigInt instead of losing precision
|
|
553
|
+
return [
|
|
554
|
+
2,
|
|
555
|
+
{
|
|
556
|
+
columns: function columns() {
|
|
557
|
+
return stmt.columns();
|
|
558
|
+
},
|
|
559
|
+
// sense sql streams through the client's own async generator.
|
|
560
|
+
iterate: function iterate() {
|
|
561
|
+
for(var _len = arguments.length, params = new Array(_len), _key = 0; _key < _len; _key++){
|
|
562
|
+
params[_key] = arguments[_key];
|
|
563
|
+
}
|
|
564
|
+
return _wrap_async_generator(function() {
|
|
565
|
+
var _stmt;
|
|
566
|
+
return _ts_generator(this, function(_state) {
|
|
567
|
+
switch(_state.label){
|
|
568
|
+
case 0:
|
|
569
|
+
return [
|
|
570
|
+
5,
|
|
571
|
+
_ts_values(_async_generator_delegate(_async_iterator((_stmt = stmt).iterate.apply(_stmt, _to_consumable_array(params)))))
|
|
572
|
+
];
|
|
573
|
+
case 1:
|
|
574
|
+
_state.sent();
|
|
575
|
+
return [
|
|
576
|
+
2
|
|
577
|
+
];
|
|
578
|
+
}
|
|
579
|
+
});
|
|
580
|
+
})();
|
|
581
|
+
}
|
|
582
|
+
}
|
|
583
|
+
];
|
|
584
|
+
}
|
|
585
|
+
});
|
|
586
|
+
})();
|
|
587
|
+
}
|
|
588
|
+
},
|
|
589
|
+
close: function close() {
|
|
590
|
+
return _async_to_generator(function() {
|
|
591
|
+
return _ts_generator(this, function(_state) {
|
|
592
|
+
switch(_state.label){
|
|
593
|
+
case 0:
|
|
594
|
+
return [
|
|
595
|
+
4,
|
|
596
|
+
db.close()
|
|
597
|
+
];
|
|
598
|
+
case 1:
|
|
599
|
+
_state.sent();
|
|
600
|
+
return [
|
|
601
|
+
2
|
|
602
|
+
];
|
|
603
|
+
}
|
|
604
|
+
});
|
|
605
|
+
})();
|
|
606
|
+
}
|
|
607
|
+
};
|
|
608
|
+
}
|
|
609
|
+
/* 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; }
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/ai/sensemaking/src/store/turso/store.ts"],"sourcesContent":["import type { Database } from '@tursodatabase/database';\nimport type { Config } from '../../config/index.ts';\nimport { SenseError } from '../../errors.ts';\nimport { getColumns } from '../shared.ts';\nimport { withTransaction } from '../transaction.ts';\nimport type { Capability, Connection, Statement, Store } from '../types.ts';\nimport { hasVectorRow, pendingRows } from '../vectors.ts';\nimport { fieldStats } from './fieldStats.ts';\nimport { reconcile } from './reconcile.ts';\n\n// Phase 1: the portable surface only -- frontmatter, links, sections, tags, rank, raw SQL,\n// reconcile, transactions. Neither lexical (Tantivy FTS) nor vectors (native vector_distance_cos\n// scans) is claimed yet -- phase 2 and phase 3 of the plan add them -- so lexical.query() and the\n// vector-math methods throw the named capability error rather than answer differently.\n// pending()/hasVector() are plain IS NULL/IS NOT NULL checks with no engine-specific math, so\n// they're wired through the same store-agnostic helpers duckdb's store.ts reuses: harmless ahead\n// of phase 3 (unreachable in practice, since openStore() already rejects a turso tree whose\n// config uses vectors) and correct with no further change once vectors land.\nexport const CAPABILITIES: ReadonlySet<Capability> = new Set();\n\nfunction missing(name: 'lexical' | 'vectors'): never {\n throw new SenseError('STORE_CAPABILITY_MISSING', `store \"turso\" does not implement \"${name}\" in this build; set \"store\" to \"sqlite\" or \"duckdb\" in this tree's config`);\n}\n\n// Shares one Connection instance (conn) with open()'s own reconcile call so transaction depth\n// (see transaction.ts) is tracked against the same object everywhere.\nexport function createStore(db: Database, conn: Connection, cfg: Config, baseDir: string): Store {\n return {\n name: 'turso',\n capabilities: CAPABILITIES,\n async exec(sql: string): Promise<void> {\n await conn.exec(sql);\n },\n async prepare(sql: string): Promise<Statement> {\n return conn.prepare(sql);\n },\n async runBatch(sql: string, paramRows: unknown[][]): Promise<void> {\n await conn.runBatch(sql, paramRows);\n },\n async transaction<T>(fn: () => Promise<T>): Promise<T> {\n return withTransaction(conn, fn);\n },\n async reconcile() {\n return reconcile(conn, cfg, baseDir);\n },\n docs: {\n async columns() {\n return [...(await getColumns(conn))];\n },\n fieldStats: (columns, scopeWhere) => fieldStats(conn, columns, scopeWhere),\n },\n lexical: {\n async query() {\n return missing('lexical');\n },\n },\n vectors: {\n pending: () => pendingRows(conn),\n async writeVectors() {\n return missing('vectors');\n },\n async candidates() {\n return missing('vectors');\n },\n async similar() {\n return missing('vectors');\n },\n hasVector: (path) => hasVectorRow(conn, path),\n },\n async engineStatus() {\n // Read back rather than recomputed: this is what open() actually set (3x the largest\n // recorded reconcile, floored at 30s, capped at 10min), not a value re-derived here.\n // Turso's raw PRAGMA busy_timeout names its result column \"busy_timeout\" (spike-verified),\n // not \"timeout\" like real SQLite's own quirky column name for this one pragma.\n const row = (await (await db.prepare('PRAGMA busy_timeout')).get()) as { busy_timeout: number };\n return { busy_timeout: `${row.busy_timeout}ms (derived: 3x the largest reconcile this cache has recorded, floored at 30000ms)` };\n },\n raw: {\n async prepare(sql: string) {\n const stmt = await db.prepare(sql);\n stmt.safeIntegers(true); // int64 past 2^53 arrives as BigInt instead of losing precision\n return {\n columns: () => stmt.columns(),\n // sense sql streams through the client's own async generator.\n iterate: async function* (...params: unknown[]) {\n yield* stmt.iterate(...params);\n },\n };\n },\n },\n async close() {\n await db.close();\n },\n };\n}\n"],"names":["CAPABILITIES","createStore","Set","missing","name","SenseError","db","conn","cfg","baseDir","capabilities","exec","sql","prepare","runBatch","paramRows","transaction","fn","withTransaction","reconcile","docs","columns","getColumns","fieldStats","scopeWhere","lexical","query","vectors","pending","pendingRows","writeVectors","candidates","similar","hasVector","path","hasVectorRow","engineStatus","row","get","busy_timeout","raw","stmt","safeIntegers","iterate","params","close"],"mappings":"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"}
|