@playfast/reform-db-sqlite 1.1.0 → 1.2.1
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/engine.d.ts +9 -0
- package/dist/engine.d.ts.map +1 -0
- package/dist/engine.js +69 -0
- package/dist/engine.js.map +1 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -0
- package/dist/sqlite.d.ts +11 -0
- package/dist/sqlite.d.ts.map +1 -0
- package/dist/sqlite.js +11 -0
- package/dist/sqlite.js.map +1 -0
- package/package.json +17 -5
package/dist/engine.d.ts
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { type DbEngine, type Migration } from '@playfast/reform-db';
|
|
2
|
+
export interface SqliteOptionsExternalApi {
|
|
3
|
+
readonly filename?: string;
|
|
4
|
+
readonly migrations?: ReadonlyArray<Migration.Migration>;
|
|
5
|
+
readonly loadDataDir?: Blob;
|
|
6
|
+
}
|
|
7
|
+
export type SqliteOptions = SqliteOptionsExternalApi;
|
|
8
|
+
export declare const make: (options: SqliteOptions) => DbEngine;
|
|
9
|
+
//# sourceMappingURL=engine.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../src/engine.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,QAAQ,EAA+B,KAAK,SAAS,EAAE,MAAM,qBAAqB,CAAA;AAQhG,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;IAE1B,QAAQ,CAAC,UAAU,CAAC,EAAE,aAAa,CAAC,SAAS,CAAC,SAAS,CAAC,CAAA;IACxD,QAAQ,CAAC,WAAW,CAAC,EAAE,IAAI,CAAA;CAC5B;AAED,MAAM,MAAM,aAAa,GAAG,wBAAwB,CAAA;AAiFpD,eAAO,MAAM,IAAI,GAAI,SAAS,aAAa,KAAG,QAG5C,CAAA"}
|
package/dist/engine.js
ADDED
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { DbError } from '@playfast/reform-db';
|
|
2
|
+
import { Effect, Option } from 'effect';
|
|
3
|
+
import { createQueryId, SqliteQueryCompiler } from 'kysely';
|
|
4
|
+
const compiler = new SqliteQueryCompiler();
|
|
5
|
+
const compile = (node) => {
|
|
6
|
+
const compiled = compiler.compileQuery(node, createQueryId());
|
|
7
|
+
return { sql: compiled.sql, parameters: compiled.parameters };
|
|
8
|
+
};
|
|
9
|
+
const bindable = (candidate) => candidate instanceof Uint8Array ||
|
|
10
|
+
typeof candidate === 'string' ||
|
|
11
|
+
typeof candidate === 'number' ||
|
|
12
|
+
typeof candidate === 'bigint' ||
|
|
13
|
+
typeof candidate === 'boolean';
|
|
14
|
+
// SQLite throws on object binds — serialize json-column objects/arrays to text.
|
|
15
|
+
const coerceParam = (param) => {
|
|
16
|
+
if (param === undefined || param === null) {
|
|
17
|
+
return null;
|
|
18
|
+
}
|
|
19
|
+
// oxlint-disable-next-line reform-rules/no-json-parse-stringify -- encodes an already-decoded json-column value for SQLite's text storage; the column's own Schema round-trips it on read
|
|
20
|
+
return bindable(param) ? param : JSON.stringify(param);
|
|
21
|
+
};
|
|
22
|
+
// Lazy bun:sqlite import + migrations: async-shaped so makeDriver acquires Db sync.
|
|
23
|
+
const openSqlite = Effect.fn('openSqlite')(function* (options) {
|
|
24
|
+
const { Database } = yield* Effect.tryPromise({
|
|
25
|
+
try: () => import('bun:sqlite'),
|
|
26
|
+
catch: (cause) => new DbError({ reason: 'bun:sqlite unavailable (Bun runtime required)', cause }),
|
|
27
|
+
});
|
|
28
|
+
// deserialize wants bytes sync; Blob is already in memory — read async then open sync.
|
|
29
|
+
const seed = yield* Option.match(Option.fromNullable(options.loadDataDir), {
|
|
30
|
+
onNone: () => Effect.succeed(Option.none()),
|
|
31
|
+
onSome: (blob) => Effect.tryPromise({
|
|
32
|
+
try: () => blob.arrayBuffer(),
|
|
33
|
+
catch: (cause) => new DbError({ reason: 'loadDataDir read failed', cause }),
|
|
34
|
+
}).pipe(Effect.map((buffer) => Option.some(new Uint8Array(buffer)))),
|
|
35
|
+
});
|
|
36
|
+
const db = yield* Effect.try({
|
|
37
|
+
try: () => Option.match(seed, {
|
|
38
|
+
onNone: () => new Database(options.filename ?? ':memory:'),
|
|
39
|
+
onSome: (bytes) => Database.deserialize(bytes),
|
|
40
|
+
}),
|
|
41
|
+
catch: (cause) => new DbError({ reason: 'open failed', cause }),
|
|
42
|
+
});
|
|
43
|
+
yield* Option.match(Option.fromNullable(options.migrations), {
|
|
44
|
+
onNone: () => Effect.void,
|
|
45
|
+
onSome: (migrations) => Effect.forEach(migrations, (migration) => Effect.forEach(migration.statements, (statement) => Effect.try({
|
|
46
|
+
try: () => db.run(statement),
|
|
47
|
+
catch: (cause) => new DbError({ reason: 'migration failed', sql: statement, cause }),
|
|
48
|
+
}))),
|
|
49
|
+
});
|
|
50
|
+
return db;
|
|
51
|
+
});
|
|
52
|
+
const backendOf = (db) => ({
|
|
53
|
+
query: (sql, parameters) => Effect.try({
|
|
54
|
+
try: () => db.query(sql).all(...parameters.map(coerceParam)),
|
|
55
|
+
catch: (cause) => new DbError({ reason: 'query failed', sql, cause }),
|
|
56
|
+
}),
|
|
57
|
+
// No native live — makeDriver emulates by re-running after write.
|
|
58
|
+
live: Option.none(),
|
|
59
|
+
dump: Effect.try({
|
|
60
|
+
try: () => new Blob([new Uint8Array(db.serialize())]),
|
|
61
|
+
catch: (cause) => new DbError({ reason: 'dump failed', cause }),
|
|
62
|
+
}),
|
|
63
|
+
close: Effect.sync(() => db.close()),
|
|
64
|
+
});
|
|
65
|
+
export const make = (options) => ({
|
|
66
|
+
compile,
|
|
67
|
+
open: () => openSqlite(options).pipe(Effect.map(backendOf)),
|
|
68
|
+
});
|
|
69
|
+
//# sourceMappingURL=engine.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"engine.js","sourceRoot":"","sources":["../src/engine.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,UAAU,CAAA;AAClC,YAAY,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AAC7C,YAAY,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AAC7C,OAAO,EAAE,IAAI,IAAI,gBAAgB,EAAE,MAAM,UAAU,CAAA"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,UAAU,CAAA;AAGlC,OAAO,EAAE,IAAI,IAAI,gBAAgB,EAAE,MAAM,UAAU,CAAA"}
|
package/dist/sqlite.d.ts
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { Db } from '@playfast/reform-db';
|
|
2
|
+
import { Layer } from 'effect';
|
|
3
|
+
import { type SqliteOptions } from './engine.js';
|
|
4
|
+
export interface MemoryOptionsExternalApi {
|
|
5
|
+
readonly migrations?: SqliteOptions['migrations'];
|
|
6
|
+
readonly loadDataDir?: SqliteOptions['loadDataDir'];
|
|
7
|
+
}
|
|
8
|
+
export type MemoryOptions = MemoryOptionsExternalApi;
|
|
9
|
+
export declare const layer: (options?: SqliteOptions) => Layer.Layer<Db>;
|
|
10
|
+
export declare const memory: (options?: MemoryOptions) => Layer.Layer<Db>;
|
|
11
|
+
//# sourceMappingURL=sqlite.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sqlite.d.ts","sourceRoot":"","sources":["../src/sqlite.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAc,MAAM,qBAAqB,CAAA;AACpD,OAAO,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAA;AAC9B,OAAO,EAAQ,KAAK,aAAa,EAAE,MAAM,UAAU,CAAA;AAEnD,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,UAAU,CAAC,EAAE,aAAa,CAAC,YAAY,CAAC,CAAA;IACjD,QAAQ,CAAC,WAAW,CAAC,EAAE,aAAa,CAAC,aAAa,CAAC,CAAA;CACpD;AAED,MAAM,MAAM,aAAa,GAAG,wBAAwB,CAAA;AAEpD,eAAO,MAAM,KAAK,GAAI,UAAS,aAAkB,KAAG,KAAK,CAAC,KAAK,CAAC,EAAE,CACrB,CAAA;AAE7C,eAAO,MAAM,MAAM,GAAI,UAAS,aAAkB,KAAG,KAAK,CAAC,KAAK,CAAC,EAAE,CAUhE,CAAA"}
|
package/dist/sqlite.js
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { Db, makeDriver } from '@playfast/reform-db';
|
|
2
|
+
import { Layer } from 'effect';
|
|
3
|
+
import { make } from './engine.js';
|
|
4
|
+
export const layer = (options = {}) => Layer.scoped(Db, makeDriver(make(options)));
|
|
5
|
+
export const memory = (options = {}) => Layer.scoped(Db,
|
|
6
|
+
// Spread only when set so bare `Sqlite.memory()` open stays unchanged.
|
|
7
|
+
makeDriver(make({
|
|
8
|
+
...(options.migrations !== undefined ? { migrations: options.migrations } : {}),
|
|
9
|
+
...(options.loadDataDir !== undefined ? { loadDataDir: options.loadDataDir } : {}),
|
|
10
|
+
})));
|
|
11
|
+
//# sourceMappingURL=sqlite.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sqlite.js","sourceRoot":"","sources":["../src/sqlite.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AACpD,OAAO,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAA;AAC9B,OAAO,EAAE,IAAI,EAAsB,MAAM,UAAU,CAAA;AASnD,MAAM,CAAC,MAAM,KAAK,GAAG,CAAC,UAAyB,EAAE,EAAmB,EAAE,CACpE,KAAK,CAAC,MAAM,CAAC,EAAE,EAAE,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;AAE7C,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,UAAyB,EAAE,EAAmB,EAAE,CACrE,KAAK,CAAC,MAAM,CACV,EAAE;AACF,uEAAuE;AACvE,UAAU,CACR,IAAI,CAAC;IACH,GAAG,CAAC,OAAO,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAC/E,GAAG,CAAC,OAAO,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;CACnF,CAAC,CACH,CACF,CAAA"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@playfast/reform-db-sqlite",
|
|
3
|
-
"version": "1.1
|
|
3
|
+
"version": "1.2.1",
|
|
4
4
|
"description": "bun:sqlite engine for @playfast/reform-db — a Db driver backed by Bun's built-in SQLite, with emulated reactivity and serialize()/deserialize() snapshots.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"bun",
|
|
@@ -21,15 +21,26 @@
|
|
|
21
21
|
"directory": "packages/reform-db-sqlite"
|
|
22
22
|
},
|
|
23
23
|
"files": [
|
|
24
|
+
"dist",
|
|
24
25
|
"src",
|
|
25
26
|
"README.md"
|
|
26
27
|
],
|
|
27
28
|
"type": "module",
|
|
28
29
|
"sideEffects": false,
|
|
30
|
+
"main": "./dist/index.js",
|
|
31
|
+
"types": "./dist/index.d.ts",
|
|
29
32
|
"exports": {
|
|
30
33
|
"./package.json": "./package.json",
|
|
31
|
-
".":
|
|
32
|
-
|
|
34
|
+
".": {
|
|
35
|
+
"playfast-src": "./src/index.ts",
|
|
36
|
+
"types": "./dist/index.d.ts",
|
|
37
|
+
"default": "./dist/index.js"
|
|
38
|
+
},
|
|
39
|
+
"./*": {
|
|
40
|
+
"playfast-src": "./src/*.ts",
|
|
41
|
+
"types": "./dist/*.d.ts",
|
|
42
|
+
"default": "./dist/*.js"
|
|
43
|
+
}
|
|
33
44
|
},
|
|
34
45
|
"publishConfig": {
|
|
35
46
|
"access": "public"
|
|
@@ -37,10 +48,11 @@
|
|
|
37
48
|
"scripts": {
|
|
38
49
|
"clean": "rm -rf dist .tsbuildinfo",
|
|
39
50
|
"check": "tsc --noEmit",
|
|
40
|
-
"build": "tsc -p tsconfig.build.json",
|
|
51
|
+
"build": "rm -rf dist .tsbuildinfo && tsc -p tsconfig.build.json && bun ../../scripts/fix-esm-extensions.ts dist",
|
|
41
52
|
"test": "bun --bun run vitest run --config vitest.config.ts",
|
|
42
53
|
"lint": "oxlint src",
|
|
43
|
-
"lint:fix": "oxlint --fix src"
|
|
54
|
+
"lint:fix": "oxlint --fix src",
|
|
55
|
+
"prepack": "bun run build"
|
|
44
56
|
},
|
|
45
57
|
"devDependencies": {
|
|
46
58
|
"@types/bun": "^1.3.14"
|