tempest-db-js 0.7.0 → 0.8.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/README.md +1 -0
- package/dist/bin.cjs.map +1 -1
- package/dist/bin.js +2 -2
- package/dist/{chunk-SI4CLSF7.js → chunk-MF6O56RO.js} +3 -3
- package/dist/{chunk-SI4CLSF7.js.map → chunk-MF6O56RO.js.map} +1 -1
- package/dist/{chunk-4AWUP7BM.js → chunk-NH6K5LTX.js} +106 -10
- package/dist/chunk-NH6K5LTX.js.map +1 -0
- package/dist/index.cjs +104 -7
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +50 -2
- package/dist/index.d.ts +50 -2
- package/dist/index.js +1 -1
- package/dist/migrations/index.cjs.map +1 -1
- package/dist/migrations/index.js +2 -2
- package/package.json +1 -1
- package/dist/chunk-4AWUP7BM.js.map +0 -1
package/dist/index.cjs
CHANGED
|
@@ -2047,6 +2047,68 @@ var NodeSqliteDriver = class _NodeSqliteDriver {
|
|
|
2047
2047
|
this.db.close();
|
|
2048
2048
|
}
|
|
2049
2049
|
};
|
|
2050
|
+
var BetterSqliteDriver = class _BetterSqliteDriver {
|
|
2051
|
+
// biome-ignore lint/suspicious/noExplicitAny: the peer dep's types are optional here.
|
|
2052
|
+
db;
|
|
2053
|
+
/** Prepared-statement cache keyed by SQL text — see {@link NodeSqliteDriver}. */
|
|
2054
|
+
// biome-ignore lint/suspicious/noExplicitAny: see above.
|
|
2055
|
+
statements = /* @__PURE__ */ new Map();
|
|
2056
|
+
// biome-ignore lint/suspicious/noExplicitAny: accept an already-open Database handle.
|
|
2057
|
+
constructor(database) {
|
|
2058
|
+
this.db = database;
|
|
2059
|
+
}
|
|
2060
|
+
/**
|
|
2061
|
+
* Open a `better-sqlite3` database at the given path (or `":memory:"`).
|
|
2062
|
+
*
|
|
2063
|
+
* @param path The database file, or `":memory:"`.
|
|
2064
|
+
* @param options Passed straight to `new Database()` (`readonly`, `timeout`, …).
|
|
2065
|
+
* @returns A driver over the open handle.
|
|
2066
|
+
* @throws If `better-sqlite3` is not installed — it is an optional peer
|
|
2067
|
+
* dependency, so the error names the package to install.
|
|
2068
|
+
*/
|
|
2069
|
+
static open(path, options) {
|
|
2070
|
+
let Database;
|
|
2071
|
+
try {
|
|
2072
|
+
const mod = nodeRequire("better-sqlite3");
|
|
2073
|
+
Database = mod.default ?? mod;
|
|
2074
|
+
} catch (cause) {
|
|
2075
|
+
throw new Error(
|
|
2076
|
+
'The "better-sqlite3" driver requires the better-sqlite3 package: npm install better-sqlite3',
|
|
2077
|
+
{ cause }
|
|
2078
|
+
);
|
|
2079
|
+
}
|
|
2080
|
+
return new _BetterSqliteDriver(
|
|
2081
|
+
options ? new Database(path, { ...options }) : new Database(path)
|
|
2082
|
+
);
|
|
2083
|
+
}
|
|
2084
|
+
/** Return the cached prepared statement for `sql`, preparing it on first use. */
|
|
2085
|
+
// biome-ignore lint/suspicious/noExplicitAny: statement type is optional here.
|
|
2086
|
+
prepare(sql2) {
|
|
2087
|
+
const cached = this.statements.get(sql2);
|
|
2088
|
+
if (cached) return cached;
|
|
2089
|
+
const stmt = this.db.prepare(sql2);
|
|
2090
|
+
this.statements.set(sql2, stmt);
|
|
2091
|
+
return stmt;
|
|
2092
|
+
}
|
|
2093
|
+
execute(sql2, params) {
|
|
2094
|
+
const stmt = this.prepare(sql2);
|
|
2095
|
+
const bound = params.map(encodeSqliteParam);
|
|
2096
|
+
if (stmt.reader) {
|
|
2097
|
+
return { rows: stmt.all(...bound), changes: 0 };
|
|
2098
|
+
}
|
|
2099
|
+
const info = stmt.run(...bound);
|
|
2100
|
+
return { rows: [], changes: Number(info.changes ?? 0) };
|
|
2101
|
+
}
|
|
2102
|
+
*iterate(sql2, params) {
|
|
2103
|
+
const stmt = this.prepare(sql2);
|
|
2104
|
+
const bound = params.map(encodeSqliteParam);
|
|
2105
|
+
yield* stmt.iterate(...bound);
|
|
2106
|
+
}
|
|
2107
|
+
close() {
|
|
2108
|
+
this.statements.clear();
|
|
2109
|
+
this.db.close();
|
|
2110
|
+
}
|
|
2111
|
+
};
|
|
2050
2112
|
function returnsRows(sql2) {
|
|
2051
2113
|
return /^\s*(select|pragma)/i.test(sql2) || /\breturning\b/i.test(sql2);
|
|
2052
2114
|
}
|
|
@@ -2570,8 +2632,43 @@ function asAsync(driver) {
|
|
|
2570
2632
|
} : {}
|
|
2571
2633
|
};
|
|
2572
2634
|
}
|
|
2573
|
-
|
|
2574
|
-
|
|
2635
|
+
var SQLITE_DRIVER_ALIASES = {
|
|
2636
|
+
"node:sqlite": "node:sqlite",
|
|
2637
|
+
"node-sqlite": "node:sqlite",
|
|
2638
|
+
node: "node:sqlite",
|
|
2639
|
+
"better-sqlite3": "better-sqlite3",
|
|
2640
|
+
better_sqlite3: "better-sqlite3",
|
|
2641
|
+
bettersqlite3: "better-sqlite3"
|
|
2642
|
+
};
|
|
2643
|
+
var SERVER_DRIVER_ALIASES = {
|
|
2644
|
+
postgresql: ["postgres", "postgres.js", "postgresjs", "pg"],
|
|
2645
|
+
mysql: ["mysql", "mysql2"]
|
|
2646
|
+
};
|
|
2647
|
+
function checkServerDriver(dialect, driver) {
|
|
2648
|
+
if (!driver) return;
|
|
2649
|
+
const accepted = SERVER_DRIVER_ALIASES[dialect] ?? [];
|
|
2650
|
+
if (accepted.includes(driver.toLowerCase())) return;
|
|
2651
|
+
throw new Error(
|
|
2652
|
+
`Unknown ${dialect} driver ${JSON.stringify(driver)}; tempest-db-js runs ${dialect} on ${JSON.stringify(accepted[0])}.`
|
|
2653
|
+
);
|
|
2654
|
+
}
|
|
2655
|
+
function resolveSqliteDriver(parsed, options) {
|
|
2656
|
+
const explicit = options?.driver;
|
|
2657
|
+
if (explicit) {
|
|
2658
|
+
const resolved = SQLITE_DRIVER_ALIASES[explicit.toLowerCase()];
|
|
2659
|
+
if (!resolved) {
|
|
2660
|
+
throw new Error(
|
|
2661
|
+
`Unknown SQLite driver ${JSON.stringify(explicit)}; supported: "node:sqlite" (built-in, default) and "better-sqlite3".`
|
|
2662
|
+
);
|
|
2663
|
+
}
|
|
2664
|
+
return resolved;
|
|
2665
|
+
}
|
|
2666
|
+
const fromUrl = parsed.driver ? SQLITE_DRIVER_ALIASES[parsed.driver.toLowerCase()] : void 0;
|
|
2667
|
+
return fromUrl ?? "node:sqlite";
|
|
2668
|
+
}
|
|
2669
|
+
function openSqliteDriver(parsed, options) {
|
|
2670
|
+
const path = parsed.database ?? ":memory:";
|
|
2671
|
+
return resolveSqliteDriver(parsed, options) === "better-sqlite3" ? BetterSqliteDriver.open(path, options?.driverOptions) : NodeSqliteDriver.open(path, options?.driverOptions);
|
|
2575
2672
|
}
|
|
2576
2673
|
function createSyncEngine(url, options) {
|
|
2577
2674
|
const parsed = parseDatabaseUrl(url);
|
|
@@ -2580,27 +2677,26 @@ function createSyncEngine(url, options) {
|
|
|
2580
2677
|
`createSyncEngine supports only SQLite; ${parsed.dialect} is async-only \u2014 use createEngine.`
|
|
2581
2678
|
);
|
|
2582
2679
|
}
|
|
2583
|
-
return new SyncEngine(
|
|
2584
|
-
openSqliteDriver(parsed.database ?? ":memory:", options),
|
|
2585
|
-
options?.onQuery
|
|
2586
|
-
);
|
|
2680
|
+
return new SyncEngine(openSqliteDriver(parsed, options), options?.onQuery);
|
|
2587
2681
|
}
|
|
2588
2682
|
function createEngine(url, options) {
|
|
2589
2683
|
const parsed = parseDatabaseUrl(url);
|
|
2590
2684
|
if (parsed.dialect === "sqlite") {
|
|
2591
2685
|
return new AsyncEngine(
|
|
2592
|
-
asAsync(openSqliteDriver(parsed
|
|
2686
|
+
asAsync(openSqliteDriver(parsed, options)),
|
|
2593
2687
|
"sqlite",
|
|
2594
2688
|
options?.onQuery
|
|
2595
2689
|
);
|
|
2596
2690
|
}
|
|
2597
2691
|
if (parsed.dialect === "mysql") {
|
|
2692
|
+
checkServerDriver("mysql", options?.driver);
|
|
2598
2693
|
return new AsyncEngine(
|
|
2599
2694
|
createMysqlDriver(parsed.raw, options),
|
|
2600
2695
|
"mysql",
|
|
2601
2696
|
options?.onQuery
|
|
2602
2697
|
);
|
|
2603
2698
|
}
|
|
2699
|
+
checkServerDriver("postgresql", options?.driver);
|
|
2604
2700
|
return new AsyncEngine(
|
|
2605
2701
|
createPostgresDriver(parsed.raw, options),
|
|
2606
2702
|
"postgresql",
|
|
@@ -3081,6 +3177,7 @@ exports.AsyncResult = AsyncResult;
|
|
|
3081
3177
|
exports.AsyncSession = AsyncSession;
|
|
3082
3178
|
exports.BaseDialect = BaseDialect;
|
|
3083
3179
|
exports.BaseRepository = BaseRepository;
|
|
3180
|
+
exports.BetterSqliteDriver = BetterSqliteDriver;
|
|
3084
3181
|
exports.Column = Column;
|
|
3085
3182
|
exports.DeleteBuilder = DeleteBuilder;
|
|
3086
3183
|
exports.Expression = Expression;
|