Launch Week Day 5: Introducing Reachability for PHP.Learn More
Socket
Book a DemoSign in
Socket

@effect/sql-sqlite-bun

Package Overview
Dependencies
Maintainers
0
Versions
385
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@effect/sql-sqlite-bun - npm Package Compare versions

Comparing version
0.0.0-snapshot-d173a21c87b057e0151a0df4c89e7b7420ff7a99
to
0.0.0-snapshot-d33d8b050b8e3c87dcde9587083e6c1cf733f72b
+140
dist/cjs/SqliteClient.js
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.make = exports.layer = exports.TypeId = exports.SqliteClient = void 0;
var Client = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("@effect/sql/SqlClient"));
var _SqlError = /*#__PURE__*/require("@effect/sql/SqlError");
var Statement = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("@effect/sql/Statement"));
var Otel = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("@opentelemetry/semantic-conventions"));
var _bunSqlite = /*#__PURE__*/require("bun:sqlite");
var Config = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("effect/Config"));
var Context = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("effect/Context"));
var Effect = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("effect/Effect"));
var _Function = /*#__PURE__*/require("effect/Function");
var Layer = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("effect/Layer"));
var Scope = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("effect/Scope"));
function _getRequireWildcardCache(e) {
if ("function" != typeof WeakMap) return null;
var r = new WeakMap(),
t = new WeakMap();
return (_getRequireWildcardCache = function (e) {
return e ? t : r;
})(e);
}
function _interopRequireWildcard(e, r) {
if (!r && e && e.__esModule) return e;
if (null === e || "object" != typeof e && "function" != typeof e) return {
default: e
};
var t = _getRequireWildcardCache(r);
if (t && t.has(e)) return t.get(e);
var n = {
__proto__: null
},
a = Object.defineProperty && Object.getOwnPropertyDescriptor;
for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) {
var i = a ? Object.getOwnPropertyDescriptor(e, u) : null;
i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u];
}
return n.default = e, t && t.set(e, n), n;
}
/**
* @since 1.0.0
*/
/**
* @category type ids
* @since 1.0.0
*/
const TypeId = exports.TypeId = /*#__PURE__*/Symbol.for("@effect/sql-sqlite-bun/SqliteClient");
/**
* @category tags
* @since 1.0.0
*/
const SqliteClient = exports.SqliteClient = /*#__PURE__*/Context.GenericTag("@effect/sql-sqlite-bun/Client");
/**
* @category constructor
* @since 1.0.0
*/
const make = options => Effect.gen(function* (_) {
const compiler = Statement.makeCompilerSqlite(options.transformQueryNames);
const transformRows = Statement.defaultTransforms(options.transformResultNames).array;
const makeConnection = Effect.gen(function* (_) {
const db = new _bunSqlite.Database(options.filename, {
readonly: options.readonly,
readwrite: options.readwrite ?? true,
create: options.create ?? true
});
yield* _(Effect.addFinalizer(() => Effect.sync(() => db.close())));
if (options.disableWAL !== true) {
db.run("PRAGMA journal_mode = WAL;");
}
const run = (sql, params = []) => Effect.try({
try: () => db.query(sql).all(...params),
catch: error => new _SqlError.SqlError({
error
})
});
const runTransform = options.transformResultNames ? (sql, params) => Effect.map(run(sql, params), transformRows) : run;
const runValues = (sql, params = []) => Effect.try({
try: () => db.query(sql).values(...params),
catch: error => new _SqlError.SqlError({
error
})
});
return (0, _Function.identity)({
execute(sql, params) {
return runTransform(sql, params);
},
executeValues(sql, params) {
return runValues(sql, params);
},
executeWithoutTransform(sql, params) {
return run(sql, params);
},
executeRaw(sql, params) {
return runTransform(sql, params);
},
executeStream(_sql, _params) {
return Effect.dieMessage("executeStream not implemented");
},
export: Effect.try({
try: () => db.serialize(),
catch: error => new _SqlError.SqlError({
error
})
}),
loadExtension: path => Effect.try({
try: () => db.loadExtension(path),
catch: error => new _SqlError.SqlError({
error
})
})
});
});
const semaphore = yield* _(Effect.makeSemaphore(1));
const connection = yield* _(makeConnection);
const acquirer = semaphore.withPermits(1)(Effect.succeed(connection));
const transactionAcquirer = Effect.uninterruptibleMask(restore => Effect.as(Effect.zipRight(restore(semaphore.take(1)), Effect.tap(Effect.scope, scope => Scope.addFinalizer(scope, semaphore.release(1)))), connection));
return Object.assign(Client.make({
acquirer,
compiler,
transactionAcquirer,
spanAttributes: [...(options.spanAttributes ? Object.entries(options.spanAttributes) : []), [Otel.SEMATTRS_DB_SYSTEM, Otel.DBSYSTEMVALUES_SQLITE]]
}), {
[TypeId]: TypeId,
config: options,
export: Effect.flatMap(acquirer, _ => _.export),
loadExtension: path => Effect.flatMap(acquirer, _ => _.loadExtension(path))
});
});
/**
* @category layers
* @since 1.0.0
*/
exports.make = make;
const layer = config => Layer.scopedContext(Config.unwrap(config).pipe(Effect.flatMap(make), Effect.map(client => Context.make(SqliteClient, client).pipe(Context.add(Client.SqlClient, client)))));
exports.layer = layer;
//# sourceMappingURL=SqliteClient.js.map
{"version":3,"file":"SqliteClient.js","names":["Client","_interopRequireWildcard","require","_SqlError","Statement","Otel","_bunSqlite","Config","Context","Effect","_Function","Layer","Scope","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","hasOwnProperty","call","i","set","TypeId","exports","Symbol","for","SqliteClient","GenericTag","make","options","gen","_","compiler","makeCompilerSqlite","transformQueryNames","transformRows","defaultTransforms","transformResultNames","array","makeConnection","db","Database","filename","readonly","readwrite","create","addFinalizer","sync","close","disableWAL","run","sql","params","try","query","all","catch","error","SqlError","runTransform","map","runValues","values","identity","execute","executeValues","executeWithoutTransform","executeRaw","executeStream","_sql","_params","dieMessage","export","serialize","loadExtension","path","semaphore","makeSemaphore","connection","acquirer","withPermits","succeed","transactionAcquirer","uninterruptibleMask","restore","as","zipRight","take","tap","scope","release","assign","spanAttributes","entries","SEMATTRS_DB_SYSTEM","DBSYSTEMVALUES_SQLITE","config","flatMap","layer","scopedContext","unwrap","pipe","client","add","SqlClient"],"sources":["../../src/SqliteClient.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
var _exportNames = {
run: true,
layer: true
};
exports.run = exports.layer = void 0;
var Command = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("@effect/platform/Command"));
var _FileSystem = /*#__PURE__*/require("@effect/platform/FileSystem");
var _Path = /*#__PURE__*/require("@effect/platform/Path");
var Migrator = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("@effect/sql/Migrator"));
Object.keys(Migrator).forEach(function (key) {
if (key === "default" || key === "__esModule") return;
if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
if (key in exports && exports[key] === Migrator[key]) return;
Object.defineProperty(exports, key, {
enumerable: true,
get: function () {
return Migrator[key];
}
});
});
var Effect = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("effect/Effect"));
var Layer = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("effect/Layer"));
var _SqliteClient = /*#__PURE__*/require("./SqliteClient.js");
var _FileSystem2 = /*#__PURE__*/require("@effect/sql/Migrator/FileSystem");
Object.keys(_FileSystem2).forEach(function (key) {
if (key === "default" || key === "__esModule") return;
if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
if (key in exports && exports[key] === _FileSystem2[key]) return;
Object.defineProperty(exports, key, {
enumerable: true,
get: function () {
return _FileSystem2[key];
}
});
});
function _getRequireWildcardCache(e) {
if ("function" != typeof WeakMap) return null;
var r = new WeakMap(),
t = new WeakMap();
return (_getRequireWildcardCache = function (e) {
return e ? t : r;
})(e);
}
function _interopRequireWildcard(e, r) {
if (!r && e && e.__esModule) return e;
if (null === e || "object" != typeof e && "function" != typeof e) return {
default: e
};
var t = _getRequireWildcardCache(r);
if (t && t.has(e)) return t.get(e);
var n = {
__proto__: null
},
a = Object.defineProperty && Object.getOwnPropertyDescriptor;
for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) {
var i = a ? Object.getOwnPropertyDescriptor(e, u) : null;
i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u];
}
return n.default = e, t && t.set(e, n), n;
}
/**
* @since 1.0.0
*/
/**
* @since 1.0.0
*/
/**
* @since 1.0.0
*/
/**
* @category constructor
* @since 1.0.0
*/
const run = exports.run = /*#__PURE__*/Migrator.make({
dumpSchema(path, table) {
const dump = args => Effect.gen(function* (_) {
const sql = yield* _SqliteClient.SqliteClient;
const dump = yield* _(Command.make("sqlite3", sql.config.filename, ...args), Command.string);
return dump.replace(/^create table sqlite_sequence\(.*$/im, "").replace(/\n{2,}/gm, "\n\n").trim();
}).pipe(Effect.mapError(error => new Migrator.MigrationError({
reason: "failed",
message: error.message
})));
const dumpSchema = dump([".schema"]);
const dumpMigrations = dump(["--cmd", `.mode insert ${table}`, `select * from ${table}`]);
const dumpAll = Effect.map(Effect.all([dumpSchema, dumpMigrations], {
concurrency: 2
}), ([schema, migrations]) => schema + "\n\n" + migrations);
const dumpFile = file => Effect.gen(function* (_) {
const fs = yield* _(_FileSystem.FileSystem);
const path = yield* _(_Path.Path);
const dump = yield* _(dumpAll);
yield* _(fs.makeDirectory(path.dirname(file), {
recursive: true
}));
yield* _(fs.writeFileString(file, dump));
}).pipe(Effect.mapError(error => new Migrator.MigrationError({
reason: "failed",
message: error.message
})));
return dumpFile(path);
}
});
/**
* @category constructor
* @since 1.0.0
*/
const layer = options => Layer.effectDiscard(run(options));
exports.layer = layer;
//# sourceMappingURL=SqliteMigrator.js.map
{"version":3,"file":"SqliteMigrator.js","names":["Command","_interopRequireWildcard","require","_FileSystem","_Path","Migrator","Object","keys","forEach","key","prototype","hasOwnProperty","call","_exportNames","exports","defineProperty","enumerable","get","Effect","Layer","_SqliteClient","_FileSystem2","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","n","__proto__","a","getOwnPropertyDescriptor","u","i","set","run","make","dumpSchema","path","table","dump","args","gen","_","sql","SqliteClient","config","filename","string","replace","trim","pipe","mapError","error","MigrationError","reason","message","dumpMigrations","dumpAll","map","all","concurrency","schema","migrations","dumpFile","file","fs","FileSystem","Path","makeDirectory","dirname","recursive","writeFileString","layer","options","effectDiscard"],"sources":["../../src/SqliteMigrator.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
/**
* @since 1.0.0
*/
import * as Client from "@effect/sql/SqlClient";
import { SqlError } from "@effect/sql/SqlError";
import * as Config from "effect/Config";
import type { ConfigError } from "effect/ConfigError";
import * as Context from "effect/Context";
import * as Effect from "effect/Effect";
import * as Layer from "effect/Layer";
import * as Scope from "effect/Scope";
/**
* @category type ids
* @since 1.0.0
*/
export declare const TypeId: unique symbol;
/**
* @category type ids
* @since 1.0.0
*/
export type TypeId = typeof TypeId;
/**
* @category models
* @since 1.0.0
*/
export interface SqliteClient extends Client.SqlClient {
readonly [TypeId]: TypeId;
readonly config: SqliteClientConfig;
readonly export: Effect.Effect<Uint8Array, SqlError>;
readonly loadExtension: (path: string) => Effect.Effect<void, SqlError>;
/** Not supported in sqlite */
readonly updateValues: never;
}
/**
* @category tags
* @since 1.0.0
*/
export declare const SqliteClient: Context.Tag<SqliteClient, SqliteClient>;
/**
* @category models
* @since 1.0.0
*/
export interface SqliteClientConfig {
readonly filename: string;
readonly readonly?: boolean | undefined;
readonly create?: boolean | undefined;
readonly readwrite?: boolean | undefined;
readonly disableWAL?: boolean | undefined;
readonly spanAttributes?: Record<string, unknown> | undefined;
readonly transformResultNames?: ((str: string) => string) | undefined;
readonly transformQueryNames?: ((str: string) => string) | undefined;
}
/**
* @category constructor
* @since 1.0.0
*/
export declare const make: (options: SqliteClientConfig) => Effect.Effect<SqliteClient, never, Scope.Scope>;
/**
* @category layers
* @since 1.0.0
*/
export declare const layer: (config: Config.Config.Wrap<SqliteClientConfig>) => Layer.Layer<SqliteClient | Client.SqlClient, ConfigError>;
//# sourceMappingURL=SqliteClient.d.ts.map
{"version":3,"file":"SqliteClient.d.ts","sourceRoot":"","sources":["../../src/SqliteClient.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,MAAM,MAAM,uBAAuB,CAAA;AAE/C,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAA;AAI/C,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AACrD,OAAO,KAAK,OAAO,MAAM,gBAAgB,CAAA;AACzC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AAEvC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AACrC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AAErC;;;GAGG;AACH,eAAO,MAAM,MAAM,EAAE,OAAO,MAA0D,CAAA;AAEtF;;;GAGG;AACH,MAAM,MAAM,MAAM,GAAG,OAAO,MAAM,CAAA;AAElC;;;GAGG;AACH,MAAM,WAAW,YAAa,SAAQ,MAAM,CAAC,SAAS;IACpD,QAAQ,CAAC,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,MAAM,EAAE,kBAAkB,CAAA;IACnC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAA;IACpD,QAAQ,CAAC,aAAa,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAA;IAEvE,8BAA8B;IAC9B,QAAQ,CAAC,YAAY,EAAE,KAAK,CAAA;CAC7B;AAED;;;GAGG;AACH,eAAO,MAAM,YAAY,yCAAoE,CAAA;AAE7F;;;GAGG;AACH,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;IACvC,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;IACrC,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;IACxC,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;IAEzC,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAA;IAE7D,QAAQ,CAAC,oBAAoB,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,CAAC,GAAG,SAAS,CAAA;IACrE,QAAQ,CAAC,mBAAmB,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,CAAC,GAAG,SAAS,CAAA;CACrE;AAOD;;;GAGG;AACH,eAAO,MAAM,IAAI,YACN,kBAAkB,KAC1B,OAAO,MAAM,CAAC,YAAY,EAAE,KAAK,EAAE,MAAM,KAAK,CAuG7C,CAAA;AAEJ;;;GAGG;AACH,eAAO,MAAM,KAAK,WACR,OAAO,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,KAC7C,MAAM,KAAK,CAAC,YAAY,GAAG,OAAO,SAAS,EAAE,WAAW,CAUxD,CAAA"}
import type { CommandExecutor } from "@effect/platform/CommandExecutor";
import { FileSystem } from "@effect/platform/FileSystem";
import { Path } from "@effect/platform/Path";
import * as Migrator from "@effect/sql/Migrator";
import type * as Client from "@effect/sql/SqlClient";
import type { SqlError } from "@effect/sql/SqlError";
import * as Effect from "effect/Effect";
import * as Layer from "effect/Layer";
import { SqliteClient } from "./SqliteClient.js";
/**
* @since 1.0.0
*/
export * from "@effect/sql/Migrator";
/**
* @since 1.0.0
*/
export * from "@effect/sql/Migrator/FileSystem";
/**
* @category constructor
* @since 1.0.0
*/
export declare const run: <R2 = never>(options: Migrator.MigratorOptions<R2>) => Effect.Effect<ReadonlyArray<readonly [id: number, name: string]>, Migrator.MigrationError | SqlError, FileSystem | Path | SqliteClient | Client.SqlClient | CommandExecutor | R2>;
/**
* @category constructor
* @since 1.0.0
*/
export declare const layer: <R>(options: Migrator.MigratorOptions<R>) => Layer.Layer<never, SqlError | Migrator.MigrationError, SqliteClient | Client.SqlClient | CommandExecutor | FileSystem | Path | R>;
//# sourceMappingURL=SqliteMigrator.d.ts.map
{"version":3,"file":"SqliteMigrator.d.ts","sourceRoot":"","sources":["../../src/SqliteMigrator.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAA;AACvE,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAA;AACxD,OAAO,EAAE,IAAI,EAAE,MAAM,uBAAuB,CAAA;AAC5C,OAAO,KAAK,QAAQ,MAAM,sBAAsB,CAAA;AAChD,OAAO,KAAK,KAAK,MAAM,MAAM,uBAAuB,CAAA;AACpD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAA;AACpD,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AACrC,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAEhD;;GAEG;AACH,cAAc,sBAAsB,CAAA;AAEpC;;GAEG;AACH,cAAc,iCAAiC,CAAA;AAE/C;;;GAGG;AACH,eAAO,MAAM,GAAG,EAAE,CAAC,EAAE,GAAG,KAAK,EAC3B,OAAO,EAAE,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC,KAClC,MAAM,CAAC,MAAM,CAChB,aAAa,CAAC,SAAS,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC,EAClD,QAAQ,CAAC,cAAc,GAAG,QAAQ,EAClC,UAAU,GAAG,IAAI,GAAG,YAAY,GAAG,MAAM,CAAC,SAAS,GAAG,eAAe,GAAG,EAAE,CA2C1E,CAAA;AAEF;;;GAGG;AACH,eAAO,MAAM,KAAK,eACP,SAAS,eAAe,CAAC,CAAC,CAAC,KACnC,MAAM,KAAK,CACZ,KAAK,EACL,QAAQ,GAAG,SAAS,cAAc,EAClC,YAAY,GAAG,OAAO,SAAS,GAAG,eAAe,GAAG,UAAU,GAAG,IAAI,GAAG,CAAC,CACrC,CAAA"}
/**
* @since 1.0.0
*/
import * as Client from "@effect/sql/SqlClient";
import { SqlError } from "@effect/sql/SqlError";
import * as Statement from "@effect/sql/Statement";
import * as Otel from "@opentelemetry/semantic-conventions";
import { Database } from "bun:sqlite";
import * as Config from "effect/Config";
import * as Context from "effect/Context";
import * as Effect from "effect/Effect";
import { identity } from "effect/Function";
import * as Layer from "effect/Layer";
import * as Scope from "effect/Scope";
/**
* @category type ids
* @since 1.0.0
*/
export const TypeId = /*#__PURE__*/Symbol.for("@effect/sql-sqlite-bun/SqliteClient");
/**
* @category tags
* @since 1.0.0
*/
export const SqliteClient = /*#__PURE__*/Context.GenericTag("@effect/sql-sqlite-bun/Client");
/**
* @category constructor
* @since 1.0.0
*/
export const make = options => Effect.gen(function* (_) {
const compiler = Statement.makeCompilerSqlite(options.transformQueryNames);
const transformRows = Statement.defaultTransforms(options.transformResultNames).array;
const makeConnection = Effect.gen(function* (_) {
const db = new Database(options.filename, {
readonly: options.readonly,
readwrite: options.readwrite ?? true,
create: options.create ?? true
});
yield* _(Effect.addFinalizer(() => Effect.sync(() => db.close())));
if (options.disableWAL !== true) {
db.run("PRAGMA journal_mode = WAL;");
}
const run = (sql, params = []) => Effect.try({
try: () => db.query(sql).all(...params),
catch: error => new SqlError({
error
})
});
const runTransform = options.transformResultNames ? (sql, params) => Effect.map(run(sql, params), transformRows) : run;
const runValues = (sql, params = []) => Effect.try({
try: () => db.query(sql).values(...params),
catch: error => new SqlError({
error
})
});
return identity({
execute(sql, params) {
return runTransform(sql, params);
},
executeValues(sql, params) {
return runValues(sql, params);
},
executeWithoutTransform(sql, params) {
return run(sql, params);
},
executeRaw(sql, params) {
return runTransform(sql, params);
},
executeStream(_sql, _params) {
return Effect.dieMessage("executeStream not implemented");
},
export: Effect.try({
try: () => db.serialize(),
catch: error => new SqlError({
error
})
}),
loadExtension: path => Effect.try({
try: () => db.loadExtension(path),
catch: error => new SqlError({
error
})
})
});
});
const semaphore = yield* _(Effect.makeSemaphore(1));
const connection = yield* _(makeConnection);
const acquirer = semaphore.withPermits(1)(Effect.succeed(connection));
const transactionAcquirer = Effect.uninterruptibleMask(restore => Effect.as(Effect.zipRight(restore(semaphore.take(1)), Effect.tap(Effect.scope, scope => Scope.addFinalizer(scope, semaphore.release(1)))), connection));
return Object.assign(Client.make({
acquirer,
compiler,
transactionAcquirer,
spanAttributes: [...(options.spanAttributes ? Object.entries(options.spanAttributes) : []), [Otel.SEMATTRS_DB_SYSTEM, Otel.DBSYSTEMVALUES_SQLITE]]
}), {
[TypeId]: TypeId,
config: options,
export: Effect.flatMap(acquirer, _ => _.export),
loadExtension: path => Effect.flatMap(acquirer, _ => _.loadExtension(path))
});
});
/**
* @category layers
* @since 1.0.0
*/
export const layer = config => Layer.scopedContext(Config.unwrap(config).pipe(Effect.flatMap(make), Effect.map(client => Context.make(SqliteClient, client).pipe(Context.add(Client.SqlClient, client)))));
//# sourceMappingURL=SqliteClient.js.map
{"version":3,"file":"SqliteClient.js","names":["Client","SqlError","Statement","Otel","Database","Config","Context","Effect","identity","Layer","Scope","TypeId","Symbol","for","SqliteClient","GenericTag","make","options","gen","_","compiler","makeCompilerSqlite","transformQueryNames","transformRows","defaultTransforms","transformResultNames","array","makeConnection","db","filename","readonly","readwrite","create","addFinalizer","sync","close","disableWAL","run","sql","params","try","query","all","catch","error","runTransform","map","runValues","values","execute","executeValues","executeWithoutTransform","executeRaw","executeStream","_sql","_params","dieMessage","export","serialize","loadExtension","path","semaphore","makeSemaphore","connection","acquirer","withPermits","succeed","transactionAcquirer","uninterruptibleMask","restore","as","zipRight","take","tap","scope","release","Object","assign","spanAttributes","entries","SEMATTRS_DB_SYSTEM","DBSYSTEMVALUES_SQLITE","config","flatMap","layer","scopedContext","unwrap","pipe","client","add","SqlClient"],"sources":["../../src/SqliteClient.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
/**
* @since 1.0.0
*/
import * as Command from "@effect/platform/Command";
import { FileSystem } from "@effect/platform/FileSystem";
import { Path } from "@effect/platform/Path";
import * as Migrator from "@effect/sql/Migrator";
import * as Effect from "effect/Effect";
import * as Layer from "effect/Layer";
import { SqliteClient } from "./SqliteClient.js";
/**
* @since 1.0.0
*/
export * from "@effect/sql/Migrator";
/**
* @since 1.0.0
*/
export * from "@effect/sql/Migrator/FileSystem";
/**
* @category constructor
* @since 1.0.0
*/
export const run = /*#__PURE__*/Migrator.make({
dumpSchema(path, table) {
const dump = args => Effect.gen(function* (_) {
const sql = yield* SqliteClient;
const dump = yield* _(Command.make("sqlite3", sql.config.filename, ...args), Command.string);
return dump.replace(/^create table sqlite_sequence\(.*$/im, "").replace(/\n{2,}/gm, "\n\n").trim();
}).pipe(Effect.mapError(error => new Migrator.MigrationError({
reason: "failed",
message: error.message
})));
const dumpSchema = dump([".schema"]);
const dumpMigrations = dump(["--cmd", `.mode insert ${table}`, `select * from ${table}`]);
const dumpAll = Effect.map(Effect.all([dumpSchema, dumpMigrations], {
concurrency: 2
}), ([schema, migrations]) => schema + "\n\n" + migrations);
const dumpFile = file => Effect.gen(function* (_) {
const fs = yield* _(FileSystem);
const path = yield* _(Path);
const dump = yield* _(dumpAll);
yield* _(fs.makeDirectory(path.dirname(file), {
recursive: true
}));
yield* _(fs.writeFileString(file, dump));
}).pipe(Effect.mapError(error => new Migrator.MigrationError({
reason: "failed",
message: error.message
})));
return dumpFile(path);
}
});
/**
* @category constructor
* @since 1.0.0
*/
export const layer = options => Layer.effectDiscard(run(options));
//# sourceMappingURL=SqliteMigrator.js.map
{"version":3,"file":"SqliteMigrator.js","names":["Command","FileSystem","Path","Migrator","Effect","Layer","SqliteClient","run","make","dumpSchema","path","table","dump","args","gen","_","sql","config","filename","string","replace","trim","pipe","mapError","error","MigrationError","reason","message","dumpMigrations","dumpAll","map","all","concurrency","schema","migrations","dumpFile","file","fs","makeDirectory","dirname","recursive","writeFileString","layer","options","effectDiscard"],"sources":["../../src/SqliteMigrator.ts"],"sourcesContent":[null],"mappings":"AAAA;;;AAGA,OAAO,KAAKA,OAAO,MAAM,0BAA0B;AAEnD,SAASC,UAAU,QAAQ,6BAA6B;AACxD,SAASC,IAAI,QAAQ,uBAAuB;AAC5C,OAAO,KAAKC,QAAQ,MAAM,sBAAsB;AAGhD,OAAO,KAAKC,MAAM,MAAM,eAAe;AACvC,OAAO,KAAKC,KAAK,MAAM,cAAc;AACrC,SAASC,YAAY,QAAQ,mBAAmB;AAEhD;;;AAGA,cAAc,sBAAsB;AAEpC;;;AAGA,cAAc,iCAAiC;AAE/C;;;;AAIA,OAAO,MAAMC,GAAG,gBAMZJ,QAAQ,CAACK,IAAI,CAAC;EAChBC,UAAUA,CAACC,IAAI,EAAEC,KAAK;IACpB,MAAMC,IAAI,GAAIC,IAAmB,IAC/BT,MAAM,CAACU,GAAG,CAAC,WAAUC,CAAC;MACpB,MAAMC,GAAG,GAAG,OAAOV,YAAY;MAC/B,MAAMM,IAAI,GAAG,OAAOG,CAAC,CACnBf,OAAO,CAACQ,IAAI,CAAC,SAAS,EAAGQ,GAAoB,CAACC,MAAM,CAACC,QAAQ,EAAE,GAAGL,IAAI,CAAC,EACvEb,OAAO,CAACmB,MAAM,CACf;MACD,OAAOP,IAAI,CAACQ,OAAO,CAAC,sCAAsC,EAAE,EAAE,CAAC,CAC5DA,OAAO,CAAC,UAAU,EAAE,MAAM,CAAC,CAC3BC,IAAI,EAAE;IACX,CAAC,CAAC,CAACC,IAAI,CACLlB,MAAM,CAACmB,QAAQ,CAAEC,KAAK,IAAK,IAAIrB,QAAQ,CAACsB,cAAc,CAAC;MAAEC,MAAM,EAAE,QAAQ;MAAEC,OAAO,EAAEH,KAAK,CAACG;IAAO,CAAE,CAAC,CAAC,CACtG;IAEH,MAAMlB,UAAU,GAAGG,IAAI,CAAC,CAAC,SAAS,CAAC,CAAC;IAEpC,MAAMgB,cAAc,GAAGhB,IAAI,CAAC,CAC1B,OAAO,EACP,gBAAgBD,KAAK,EAAE,EACvB,iBAAiBA,KAAK,EAAE,CACzB,CAAC;IAEF,MAAMkB,OAAO,GAAGzB,MAAM,CAAC0B,GAAG,CACxB1B,MAAM,CAAC2B,GAAG,CAAC,CAACtB,UAAU,EAAEmB,cAAc,CAAC,EAAE;MAAEI,WAAW,EAAE;IAAC,CAAE,CAAC,EAC5D,CAAC,CAACC,MAAM,EAAEC,UAAU,CAAC,KAAKD,MAAM,GAAG,MAAM,GAAGC,UAAU,CACvD;IAED,MAAMC,QAAQ,GAAIC,IAAY,IAC5BhC,MAAM,CAACU,GAAG,CAAC,WAAUC,CAAC;MACpB,MAAMsB,EAAE,GAAG,OAAOtB,CAAC,CAACd,UAAU,CAAC;MAC/B,MAAMS,IAAI,GAAG,OAAOK,CAAC,CAACb,IAAI,CAAC;MAC3B,MAAMU,IAAI,GAAG,OAAOG,CAAC,CAACc,OAAO,CAAC;MAC9B,OAAOd,CAAC,CAACsB,EAAE,CAACC,aAAa,CAAC5B,IAAI,CAAC6B,OAAO,CAACH,IAAI,CAAC,EAAE;QAAEI,SAAS,EAAE;MAAI,CAAE,CAAC,CAAC;MACnE,OAAOzB,CAAC,CAACsB,EAAE,CAACI,eAAe,CAACL,IAAI,EAAExB,IAAI,CAAC,CAAC;IAC1C,CAAC,CAAC,CAACU,IAAI,CACLlB,MAAM,CAACmB,QAAQ,CAAEC,KAAK,IAAK,IAAIrB,QAAQ,CAACsB,cAAc,CAAC;MAAEC,MAAM,EAAE,QAAQ;MAAEC,OAAO,EAAEH,KAAK,CAACG;IAAO,CAAE,CAAC,CAAC,CACtG;IAEH,OAAOQ,QAAQ,CAACzB,IAAI,CAAC;EACvB;CACD,CAAC;AAEF;;;;AAIA,OAAO,MAAMgC,KAAK,GAChBC,OAAoC,IAKjCtC,KAAK,CAACuC,aAAa,CAACrC,GAAG,CAACoC,OAAO,CAAC,CAAC","ignoreList":[]}
{
"main": "../dist/cjs/SqliteClient.js",
"module": "../dist/esm/SqliteClient.js",
"types": "../dist/dts/SqliteClient.d.ts",
"sideEffects": []
}
{
"main": "../dist/cjs/SqliteMigrator.js",
"module": "../dist/esm/SqliteMigrator.js",
"types": "../dist/dts/SqliteMigrator.d.ts",
"sideEffects": []
}
/**
* @since 1.0.0
*/
import * as Client from "@effect/sql/SqlClient"
import type { Connection } from "@effect/sql/SqlConnection"
import { SqlError } from "@effect/sql/SqlError"
import * as Statement from "@effect/sql/Statement"
import * as Otel from "@opentelemetry/semantic-conventions"
import { Database } from "bun:sqlite"
import * as Config from "effect/Config"
import type { ConfigError } from "effect/ConfigError"
import * as Context from "effect/Context"
import * as Effect from "effect/Effect"
import { identity } from "effect/Function"
import * as Layer from "effect/Layer"
import * as Scope from "effect/Scope"
/**
* @category type ids
* @since 1.0.0
*/
export const TypeId: unique symbol = Symbol.for("@effect/sql-sqlite-bun/SqliteClient")
/**
* @category type ids
* @since 1.0.0
*/
export type TypeId = typeof TypeId
/**
* @category models
* @since 1.0.0
*/
export interface SqliteClient extends Client.SqlClient {
readonly [TypeId]: TypeId
readonly config: SqliteClientConfig
readonly export: Effect.Effect<Uint8Array, SqlError>
readonly loadExtension: (path: string) => Effect.Effect<void, SqlError>
/** Not supported in sqlite */
readonly updateValues: never
}
/**
* @category tags
* @since 1.0.0
*/
export const SqliteClient = Context.GenericTag<SqliteClient>("@effect/sql-sqlite-bun/Client")
/**
* @category models
* @since 1.0.0
*/
export interface SqliteClientConfig {
readonly filename: string
readonly readonly?: boolean | undefined
readonly create?: boolean | undefined
readonly readwrite?: boolean | undefined
readonly disableWAL?: boolean | undefined
readonly spanAttributes?: Record<string, unknown> | undefined
readonly transformResultNames?: ((str: string) => string) | undefined
readonly transformQueryNames?: ((str: string) => string) | undefined
}
interface SqliteConnection extends Connection {
readonly export: Effect.Effect<Uint8Array, SqlError>
readonly loadExtension: (path: string) => Effect.Effect<void, SqlError>
}
/**
* @category constructor
* @since 1.0.0
*/
export const make = (
options: SqliteClientConfig
): Effect.Effect<SqliteClient, never, Scope.Scope> =>
Effect.gen(function*(_) {
const compiler = Statement.makeCompilerSqlite(options.transformQueryNames)
const transformRows = Statement.defaultTransforms(
options.transformResultNames!
).array
const makeConnection = Effect.gen(function*(_) {
const db = new Database(options.filename, {
readonly: options.readonly,
readwrite: options.readwrite ?? true,
create: options.create ?? true
} as any)
yield* _(Effect.addFinalizer(() => Effect.sync(() => db.close())))
if (options.disableWAL !== true) {
db.run("PRAGMA journal_mode = WAL;")
}
const run = (
sql: string,
params: ReadonlyArray<Statement.Primitive> = []
) =>
Effect.try({
try: () => db.query(sql).all(...(params as any)) as Array<any>,
catch: (error) => new SqlError({ error })
})
const runTransform = options.transformResultNames
? (sql: string, params?: ReadonlyArray<Statement.Primitive>) => Effect.map(run(sql, params), transformRows)
: run
const runValues = (
sql: string,
params: ReadonlyArray<Statement.Primitive> = []
) =>
Effect.try({
try: () => db.query(sql).values(...(params as any)) as Array<any>,
catch: (error) => new SqlError({ error })
})
return identity<SqliteConnection>({
execute(sql, params) {
return runTransform(sql, params)
},
executeValues(sql, params) {
return runValues(sql, params)
},
executeWithoutTransform(sql, params) {
return run(sql, params)
},
executeRaw(sql, params) {
return runTransform(sql, params)
},
executeStream(_sql, _params) {
return Effect.dieMessage("executeStream not implemented")
},
export: Effect.try({
try: () => db.serialize(),
catch: (error) => new SqlError({ error })
}),
loadExtension: (path) =>
Effect.try({
try: () => db.loadExtension(path),
catch: (error) => new SqlError({ error })
})
})
})
const semaphore = yield* _(Effect.makeSemaphore(1))
const connection = yield* _(makeConnection)
const acquirer = semaphore.withPermits(1)(Effect.succeed(connection))
const transactionAcquirer = Effect.uninterruptibleMask((restore) =>
Effect.as(
Effect.zipRight(
restore(semaphore.take(1)),
Effect.tap(
Effect.scope,
(scope) => Scope.addFinalizer(scope, semaphore.release(1))
)
),
connection
)
)
return Object.assign(
Client.make({
acquirer,
compiler,
transactionAcquirer,
spanAttributes: [
...(options.spanAttributes ? Object.entries(options.spanAttributes) : []),
[Otel.SEMATTRS_DB_SYSTEM, Otel.DBSYSTEMVALUES_SQLITE]
]
}) as SqliteClient,
{
[TypeId]: TypeId as TypeId,
config: options,
export: Effect.flatMap(acquirer, (_) => _.export),
loadExtension: (path: string) => Effect.flatMap(acquirer, (_) => _.loadExtension(path))
}
)
})
/**
* @category layers
* @since 1.0.0
*/
export const layer = (
config: Config.Config.Wrap<SqliteClientConfig>
): Layer.Layer<SqliteClient | Client.SqlClient, ConfigError> =>
Layer.scopedContext(
Config.unwrap(config).pipe(
Effect.flatMap(make),
Effect.map((client) =>
Context.make(SqliteClient, client).pipe(
Context.add(Client.SqlClient, client)
)
)
)
)
/**
* @since 1.0.0
*/
import * as Command from "@effect/platform/Command"
import type { CommandExecutor } from "@effect/platform/CommandExecutor"
import { FileSystem } from "@effect/platform/FileSystem"
import { Path } from "@effect/platform/Path"
import * as Migrator from "@effect/sql/Migrator"
import type * as Client from "@effect/sql/SqlClient"
import type { SqlError } from "@effect/sql/SqlError"
import * as Effect from "effect/Effect"
import * as Layer from "effect/Layer"
import { SqliteClient } from "./SqliteClient.js"
/**
* @since 1.0.0
*/
export * from "@effect/sql/Migrator"
/**
* @since 1.0.0
*/
export * from "@effect/sql/Migrator/FileSystem"
/**
* @category constructor
* @since 1.0.0
*/
export const run: <R2 = never>(
options: Migrator.MigratorOptions<R2>
) => Effect.Effect<
ReadonlyArray<readonly [id: number, name: string]>,
Migrator.MigrationError | SqlError,
FileSystem | Path | SqliteClient | Client.SqlClient | CommandExecutor | R2
> = Migrator.make({
dumpSchema(path, table) {
const dump = (args: Array<string>) =>
Effect.gen(function*(_) {
const sql = yield* SqliteClient
const dump = yield* _(
Command.make("sqlite3", (sql as SqliteClient).config.filename, ...args),
Command.string
)
return dump.replace(/^create table sqlite_sequence\(.*$/im, "")
.replace(/\n{2,}/gm, "\n\n")
.trim()
}).pipe(
Effect.mapError((error) => new Migrator.MigrationError({ reason: "failed", message: error.message }))
)
const dumpSchema = dump([".schema"])
const dumpMigrations = dump([
"--cmd",
`.mode insert ${table}`,
`select * from ${table}`
])
const dumpAll = Effect.map(
Effect.all([dumpSchema, dumpMigrations], { concurrency: 2 }),
([schema, migrations]) => schema + "\n\n" + migrations
)
const dumpFile = (file: string) =>
Effect.gen(function*(_) {
const fs = yield* _(FileSystem)
const path = yield* _(Path)
const dump = yield* _(dumpAll)
yield* _(fs.makeDirectory(path.dirname(file), { recursive: true }))
yield* _(fs.writeFileString(file, dump))
}).pipe(
Effect.mapError((error) => new Migrator.MigrationError({ reason: "failed", message: error.message }))
)
return dumpFile(path)
}
})
/**
* @category constructor
* @since 1.0.0
*/
export const layer = <R>(
options: Migrator.MigratorOptions<R>
): Layer.Layer<
never,
SqlError | Migrator.MigrationError,
SqliteClient | Client.SqlClient | CommandExecutor | FileSystem | Path | R
> => Layer.effectDiscard(run(options))
+5
-5

@@ -6,7 +6,7 @@ "use strict";

});
exports.migrator = exports.client = void 0;
var _client = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("./Client.js"));
exports.client = _client;
var _migrator = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("./Migrator.js"));
exports.migrator = _migrator;
exports.SqliteMigrator = exports.SqliteClient = void 0;
var _SqliteClient = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("./SqliteClient.js"));
exports.SqliteClient = _SqliteClient;
var _SqliteMigrator = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("./SqliteMigrator.js"));
exports.SqliteMigrator = _SqliteMigrator;
function _getRequireWildcardCache(e) {

@@ -13,0 +13,0 @@ if ("function" != typeof WeakMap) return null;

/**
* @since 1.0.0
*/
export * as SqliteClient from "./SqliteClient.js";
/**
* @since 1.0.0
*/
export * as client from "./Client.js";
/**
* @since 1.0.0
*/
export * as migrator from "./Migrator.js";
export * as SqliteMigrator from "./SqliteMigrator.js";
//# sourceMappingURL=index.d.ts.map

@@ -1,1 +0,1 @@

{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,OAAO,KAAK,MAAM,MAAM,aAAa,CAAA;AAErC;;GAEG;AACH,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAA"}
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,YAAY,MAAM,mBAAmB,CAAA;AAEjD;;GAEG;AACH,OAAO,KAAK,cAAc,MAAM,qBAAqB,CAAA"}
/**
* @since 1.0.0
*/
export * as SqliteClient from "./SqliteClient.js";
/**
* @since 1.0.0
*/
export * as client from "./Client.js";
/**
* @since 1.0.0
*/
export * as migrator from "./Migrator.js";
export * as SqliteMigrator from "./SqliteMigrator.js";
//# sourceMappingURL=index.js.map

@@ -1,1 +0,1 @@

{"version":3,"file":"index.js","names":["client","migrator"],"sources":["../../src/index.ts"],"sourcesContent":[null],"mappings":"AAAA;;;AAIA;;;AAGA,OAAO,KAAKA,MAAM,MAAM,aAAa;AAErC;;;AAGA,OAAO,KAAKC,QAAQ,MAAM,eAAe","ignoreList":[]}
{"version":3,"file":"index.js","names":["SqliteClient","SqliteMigrator"],"sources":["../../src/index.ts"],"sourcesContent":[null],"mappings":"AAAA;;;AAGA,OAAO,KAAKA,YAAY,MAAM,mBAAmB;AAEjD;;;AAGA,OAAO,KAAKC,cAAc,MAAM,qBAAqB","ignoreList":[]}
{
"name": "@effect/sql-sqlite-bun",
"version": "0.0.0-snapshot-d173a21c87b057e0151a0df4c89e7b7420ff7a99",
"version": "0.0.0-snapshot-d33d8b050b8e3c87dcde9587083e6c1cf733f72b",
"description": "A SQLite toolkit for Effect",

@@ -16,5 +16,5 @@ "license": "MIT",

"peerDependencies": {
"@effect/platform": "^0.0.0-snapshot-d173a21c87b057e0151a0df4c89e7b7420ff7a99",
"@effect/sql": "^0.0.0-snapshot-d173a21c87b057e0151a0df4c89e7b7420ff7a99",
"effect": "^0.0.0-snapshot-d173a21c87b057e0151a0df4c89e7b7420ff7a99"
"@effect/platform": "^0.0.0-snapshot-d33d8b050b8e3c87dcde9587083e6c1cf733f72b",
"@effect/sql": "^0.0.0-snapshot-d33d8b050b8e3c87dcde9587083e6c1cf733f72b",
"effect": "^0.0.0-snapshot-d33d8b050b8e3c87dcde9587083e6c1cf733f72b"
},

@@ -34,11 +34,11 @@ "publishConfig": {

},
"./Client": {
"types": "./dist/dts/Client.d.ts",
"import": "./dist/esm/Client.js",
"default": "./dist/cjs/Client.js"
"./SqliteClient": {
"types": "./dist/dts/SqliteClient.d.ts",
"import": "./dist/esm/SqliteClient.js",
"default": "./dist/cjs/SqliteClient.js"
},
"./Migrator": {
"types": "./dist/dts/Migrator.d.ts",
"import": "./dist/esm/Migrator.js",
"default": "./dist/cjs/Migrator.js"
"./SqliteMigrator": {
"types": "./dist/dts/SqliteMigrator.d.ts",
"import": "./dist/esm/SqliteMigrator.js",
"default": "./dist/cjs/SqliteMigrator.js"
}

@@ -48,7 +48,7 @@ },

"*": {
"Client": [
"./dist/dts/Client.d.ts"
"SqliteClient": [
"./dist/dts/SqliteClient.d.ts"
],
"Migrator": [
"./dist/dts/Migrator.d.ts"
"SqliteMigrator": [
"./dist/dts/SqliteMigrator.d.ts"
]

@@ -55,0 +55,0 @@ }

/**
* @since 1.0.0
*/
export * as SqliteClient from "./SqliteClient.js"

@@ -8,7 +9,2 @@ /**

*/
export * as client from "./Client.js"
/**
* @since 1.0.0
*/
export * as migrator from "./Migrator.js"
export * as SqliteMigrator from "./SqliteMigrator.js"
{
"main": "../dist/cjs/Client.js",
"module": "../dist/esm/Client.js",
"types": "../dist/dts/Client.d.ts",
"sideEffects": []
}
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.make = exports.layer = exports.TypeId = exports.SqliteClient = void 0;
var Client = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("@effect/sql/Client"));
var _Error = /*#__PURE__*/require("@effect/sql/Error");
var Statement = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("@effect/sql/Statement"));
var Otel = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("@opentelemetry/semantic-conventions"));
var _bunSqlite = /*#__PURE__*/require("bun:sqlite");
var Config = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("effect/Config"));
var Context = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("effect/Context"));
var Effect = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("effect/Effect"));
var _Function = /*#__PURE__*/require("effect/Function");
var Layer = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("effect/Layer"));
var Scope = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("effect/Scope"));
function _getRequireWildcardCache(e) {
if ("function" != typeof WeakMap) return null;
var r = new WeakMap(),
t = new WeakMap();
return (_getRequireWildcardCache = function (e) {
return e ? t : r;
})(e);
}
function _interopRequireWildcard(e, r) {
if (!r && e && e.__esModule) return e;
if (null === e || "object" != typeof e && "function" != typeof e) return {
default: e
};
var t = _getRequireWildcardCache(r);
if (t && t.has(e)) return t.get(e);
var n = {
__proto__: null
},
a = Object.defineProperty && Object.getOwnPropertyDescriptor;
for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) {
var i = a ? Object.getOwnPropertyDescriptor(e, u) : null;
i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u];
}
return n.default = e, t && t.set(e, n), n;
}
/**
* @since 1.0.0
*/
/**
* @category type ids
* @since 1.0.0
*/
const TypeId = exports.TypeId = /*#__PURE__*/Symbol.for("@effect/sql-sqlite-bun/Client");
/**
* @category tags
* @since 1.0.0
*/
const SqliteClient = exports.SqliteClient = /*#__PURE__*/Context.GenericTag("@effect/sql-sqlite-bun/Client");
/**
* @category constructor
* @since 1.0.0
*/
const make = options => Effect.gen(function* (_) {
const compiler = Statement.makeCompilerSqlite(options.transformQueryNames);
const transformRows = Statement.defaultTransforms(options.transformResultNames).array;
const makeConnection = Effect.gen(function* (_) {
const db = new _bunSqlite.Database(options.filename, {
readonly: options.readonly,
readwrite: options.readwrite ?? true,
create: options.create ?? true
});
yield* _(Effect.addFinalizer(() => Effect.sync(() => db.close())));
if (options.disableWAL !== true) {
db.run("PRAGMA journal_mode = WAL;");
}
const run = (sql, params = []) => Effect.try({
try: () => db.query(sql).all(...params),
catch: error => new _Error.SqlError({
error
})
});
const runTransform = options.transformResultNames ? (sql, params) => Effect.map(run(sql, params), transformRows) : run;
const runValues = (sql, params = []) => Effect.try({
try: () => db.query(sql).values(...params),
catch: error => new _Error.SqlError({
error
})
});
return (0, _Function.identity)({
execute(sql, params) {
return runTransform(sql, params);
},
executeValues(sql, params) {
return runValues(sql, params);
},
executeWithoutTransform(sql, params) {
return run(sql, params);
},
executeRaw(sql, params) {
return runTransform(sql, params);
},
executeStream(_sql, _params) {
return Effect.dieMessage("executeStream not implemented");
},
export: Effect.try({
try: () => db.serialize(),
catch: error => new _Error.SqlError({
error
})
}),
loadExtension: path => Effect.try({
try: () => db.loadExtension(path),
catch: error => new _Error.SqlError({
error
})
})
});
});
const semaphore = yield* _(Effect.makeSemaphore(1));
const connection = yield* _(makeConnection);
const acquirer = semaphore.withPermits(1)(Effect.succeed(connection));
const transactionAcquirer = Effect.uninterruptibleMask(restore => Effect.as(Effect.zipRight(restore(semaphore.take(1)), Effect.tap(Effect.scope, scope => Scope.addFinalizer(scope, semaphore.release(1)))), connection));
return Object.assign(Client.make({
acquirer,
compiler,
transactionAcquirer,
spanAttributes: [...(options.spanAttributes ? Object.entries(options.spanAttributes) : []), [Otel.SEMATTRS_DB_SYSTEM, Otel.DBSYSTEMVALUES_SQLITE]]
}), {
[TypeId]: TypeId,
config: options,
export: Effect.flatMap(acquirer, _ => _.export),
loadExtension: path => Effect.flatMap(acquirer, _ => _.loadExtension(path))
});
});
/**
* @category layers
* @since 1.0.0
*/
exports.make = make;
const layer = config => Layer.scopedContext(Config.unwrap(config).pipe(Effect.flatMap(make), Effect.map(client => Context.make(SqliteClient, client).pipe(Context.add(Client.Client, client)))));
exports.layer = layer;
//# sourceMappingURL=Client.js.map
{"version":3,"file":"Client.js","names":["Client","_interopRequireWildcard","require","_Error","Statement","Otel","_bunSqlite","Config","Context","Effect","_Function","Layer","Scope","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","hasOwnProperty","call","i","set","TypeId","exports","Symbol","for","SqliteClient","GenericTag","make","options","gen","_","compiler","makeCompilerSqlite","transformQueryNames","transformRows","defaultTransforms","transformResultNames","array","makeConnection","db","Database","filename","readonly","readwrite","create","addFinalizer","sync","close","disableWAL","run","sql","params","try","query","all","catch","error","SqlError","runTransform","map","runValues","values","identity","execute","executeValues","executeWithoutTransform","executeRaw","executeStream","_sql","_params","dieMessage","export","serialize","loadExtension","path","semaphore","makeSemaphore","connection","acquirer","withPermits","succeed","transactionAcquirer","uninterruptibleMask","restore","as","zipRight","take","tap","scope","release","assign","spanAttributes","entries","SEMATTRS_DB_SYSTEM","DBSYSTEMVALUES_SQLITE","config","flatMap","layer","scopedContext","unwrap","pipe","client","add"],"sources":["../../src/Client.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
var _exportNames = {
run: true,
layer: true
};
exports.run = exports.layer = void 0;
var Command = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("@effect/platform/Command"));
var _FileSystem = /*#__PURE__*/require("@effect/platform/FileSystem");
var _Path = /*#__PURE__*/require("@effect/platform/Path");
var Migrator = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("@effect/sql/Migrator"));
Object.keys(Migrator).forEach(function (key) {
if (key === "default" || key === "__esModule") return;
if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
if (key in exports && exports[key] === Migrator[key]) return;
Object.defineProperty(exports, key, {
enumerable: true,
get: function () {
return Migrator[key];
}
});
});
var Effect = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("effect/Effect"));
var Layer = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("effect/Layer"));
var _Client = /*#__PURE__*/require("./Client.js");
var _FileSystem2 = /*#__PURE__*/require("@effect/sql/Migrator/FileSystem");
Object.keys(_FileSystem2).forEach(function (key) {
if (key === "default" || key === "__esModule") return;
if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
if (key in exports && exports[key] === _FileSystem2[key]) return;
Object.defineProperty(exports, key, {
enumerable: true,
get: function () {
return _FileSystem2[key];
}
});
});
function _getRequireWildcardCache(e) {
if ("function" != typeof WeakMap) return null;
var r = new WeakMap(),
t = new WeakMap();
return (_getRequireWildcardCache = function (e) {
return e ? t : r;
})(e);
}
function _interopRequireWildcard(e, r) {
if (!r && e && e.__esModule) return e;
if (null === e || "object" != typeof e && "function" != typeof e) return {
default: e
};
var t = _getRequireWildcardCache(r);
if (t && t.has(e)) return t.get(e);
var n = {
__proto__: null
},
a = Object.defineProperty && Object.getOwnPropertyDescriptor;
for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) {
var i = a ? Object.getOwnPropertyDescriptor(e, u) : null;
i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u];
}
return n.default = e, t && t.set(e, n), n;
}
/**
* @since 1.0.0
*/
/**
* @since 1.0.0
*/
/**
* @since 1.0.0
*/
/**
* @category constructor
* @since 1.0.0
*/
const run = exports.run = /*#__PURE__*/Migrator.make({
dumpSchema(path, table) {
const dump = args => Effect.gen(function* (_) {
const sql = yield* _Client.SqliteClient;
const dump = yield* _(Command.make("sqlite3", sql.config.filename, ...args), Command.string);
return dump.replace(/^create table sqlite_sequence\(.*$/im, "").replace(/\n{2,}/gm, "\n\n").trim();
}).pipe(Effect.mapError(error => new Migrator.MigrationError({
reason: "failed",
message: error.message
})));
const dumpSchema = dump([".schema"]);
const dumpMigrations = dump(["--cmd", `.mode insert ${table}`, `select * from ${table}`]);
const dumpAll = Effect.map(Effect.all([dumpSchema, dumpMigrations], {
concurrency: 2
}), ([schema, migrations]) => schema + "\n\n" + migrations);
const dumpFile = file => Effect.gen(function* (_) {
const fs = yield* _(_FileSystem.FileSystem);
const path = yield* _(_Path.Path);
const dump = yield* _(dumpAll);
yield* _(fs.makeDirectory(path.dirname(file), {
recursive: true
}));
yield* _(fs.writeFileString(file, dump));
}).pipe(Effect.mapError(error => new Migrator.MigrationError({
reason: "failed",
message: error.message
})));
return dumpFile(path);
}
});
/**
* @category constructor
* @since 1.0.0
*/
const layer = options => Layer.effectDiscard(run(options));
exports.layer = layer;
//# sourceMappingURL=Migrator.js.map
{"version":3,"file":"Migrator.js","names":["Command","_interopRequireWildcard","require","_FileSystem","_Path","Migrator","Object","keys","forEach","key","prototype","hasOwnProperty","call","_exportNames","exports","defineProperty","enumerable","get","Effect","Layer","_Client","_FileSystem2","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","n","__proto__","a","getOwnPropertyDescriptor","u","i","set","run","make","dumpSchema","path","table","dump","args","gen","_","sql","SqliteClient","config","filename","string","replace","trim","pipe","mapError","error","MigrationError","reason","message","dumpMigrations","dumpAll","map","all","concurrency","schema","migrations","dumpFile","file","fs","FileSystem","Path","makeDirectory","dirname","recursive","writeFileString","layer","options","effectDiscard"],"sources":["../../src/Migrator.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
/**
* @since 1.0.0
*/
import * as Client from "@effect/sql/Client";
import { SqlError } from "@effect/sql/Error";
import * as Config from "effect/Config";
import type { ConfigError } from "effect/ConfigError";
import * as Context from "effect/Context";
import * as Effect from "effect/Effect";
import * as Layer from "effect/Layer";
import * as Scope from "effect/Scope";
/**
* @category type ids
* @since 1.0.0
*/
export declare const TypeId: unique symbol;
/**
* @category type ids
* @since 1.0.0
*/
export type TypeId = typeof TypeId;
/**
* @category models
* @since 1.0.0
*/
export interface SqliteClient extends Client.Client {
readonly [TypeId]: TypeId;
readonly config: SqliteClientConfig;
readonly export: Effect.Effect<Uint8Array, SqlError>;
readonly loadExtension: (path: string) => Effect.Effect<void, SqlError>;
/** Not supported in sqlite */
readonly updateValues: never;
}
/**
* @category tags
* @since 1.0.0
*/
export declare const SqliteClient: Context.Tag<SqliteClient, SqliteClient>;
/**
* @category models
* @since 1.0.0
*/
export interface SqliteClientConfig {
readonly filename: string;
readonly readonly?: boolean | undefined;
readonly create?: boolean | undefined;
readonly readwrite?: boolean | undefined;
readonly disableWAL?: boolean | undefined;
readonly spanAttributes?: Record<string, unknown> | undefined;
readonly transformResultNames?: ((str: string) => string) | undefined;
readonly transformQueryNames?: ((str: string) => string) | undefined;
}
/**
* @category constructor
* @since 1.0.0
*/
export declare const make: (options: SqliteClientConfig) => Effect.Effect<SqliteClient, never, Scope.Scope>;
/**
* @category layers
* @since 1.0.0
*/
export declare const layer: (config: Config.Config.Wrap<SqliteClientConfig>) => Layer.Layer<SqliteClient | Client.Client, ConfigError>;
//# sourceMappingURL=Client.d.ts.map
{"version":3,"file":"Client.d.ts","sourceRoot":"","sources":["../../src/Client.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,MAAM,MAAM,oBAAoB,CAAA;AAE5C,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAI5C,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AACrD,OAAO,KAAK,OAAO,MAAM,gBAAgB,CAAA;AACzC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AAEvC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AACrC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AAErC;;;GAGG;AACH,eAAO,MAAM,MAAM,EAAE,OAAO,MAAoD,CAAA;AAEhF;;;GAGG;AACH,MAAM,MAAM,MAAM,GAAG,OAAO,MAAM,CAAA;AAElC;;;GAGG;AACH,MAAM,WAAW,YAAa,SAAQ,MAAM,CAAC,MAAM;IACjD,QAAQ,CAAC,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,MAAM,EAAE,kBAAkB,CAAA;IACnC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAA;IACpD,QAAQ,CAAC,aAAa,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAA;IAEvE,8BAA8B;IAC9B,QAAQ,CAAC,YAAY,EAAE,KAAK,CAAA;CAC7B;AAED;;;GAGG;AACH,eAAO,MAAM,YAAY,yCAAoE,CAAA;AAE7F;;;GAGG;AACH,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;IACvC,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;IACrC,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;IACxC,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;IAEzC,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAA;IAE7D,QAAQ,CAAC,oBAAoB,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,CAAC,GAAG,SAAS,CAAA;IACrE,QAAQ,CAAC,mBAAmB,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,CAAC,GAAG,SAAS,CAAA;CACrE;AAOD;;;GAGG;AACH,eAAO,MAAM,IAAI,YACN,kBAAkB,KAC1B,OAAO,MAAM,CAAC,YAAY,EAAE,KAAK,EAAE,MAAM,KAAK,CAuG7C,CAAA;AAEJ;;;GAGG;AACH,eAAO,MAAM,KAAK,WACR,OAAO,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,KAC7C,MAAM,KAAK,CAAC,YAAY,GAAG,OAAO,MAAM,EAAE,WAAW,CAUrD,CAAA"}
import type { CommandExecutor } from "@effect/platform/CommandExecutor";
import { FileSystem } from "@effect/platform/FileSystem";
import { Path } from "@effect/platform/Path";
import type * as Client from "@effect/sql/Client";
import type { SqlError } from "@effect/sql/Error";
import * as Migrator from "@effect/sql/Migrator";
import * as Effect from "effect/Effect";
import * as Layer from "effect/Layer";
import { SqliteClient } from "./Client.js";
/**
* @since 1.0.0
*/
export * from "@effect/sql/Migrator";
/**
* @since 1.0.0
*/
export * from "@effect/sql/Migrator/FileSystem";
/**
* @category constructor
* @since 1.0.0
*/
export declare const run: <R2 = never>(options: Migrator.MigratorOptions<R2>) => Effect.Effect<ReadonlyArray<readonly [id: number, name: string]>, Migrator.MigrationError | SqlError, FileSystem | Path | SqliteClient | Client.Client | CommandExecutor | R2>;
/**
* @category constructor
* @since 1.0.0
*/
export declare const layer: <R>(options: Migrator.MigratorOptions<R>) => Layer.Layer<never, SqlError | Migrator.MigrationError, SqliteClient | Client.Client | CommandExecutor | FileSystem | Path | R>;
//# sourceMappingURL=Migrator.d.ts.map
{"version":3,"file":"Migrator.d.ts","sourceRoot":"","sources":["../../src/Migrator.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAA;AACvE,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAA;AACxD,OAAO,EAAE,IAAI,EAAE,MAAM,uBAAuB,CAAA;AAC5C,OAAO,KAAK,KAAK,MAAM,MAAM,oBAAoB,CAAA;AACjD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AACjD,OAAO,KAAK,QAAQ,MAAM,sBAAsB,CAAA;AAChD,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AACrC,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAE1C;;GAEG;AACH,cAAc,sBAAsB,CAAA;AAEpC;;GAEG;AACH,cAAc,iCAAiC,CAAA;AAE/C;;;GAGG;AACH,eAAO,MAAM,GAAG,EAAE,CAAC,EAAE,GAAG,KAAK,EAC3B,OAAO,EAAE,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC,KAClC,MAAM,CAAC,MAAM,CAChB,aAAa,CAAC,SAAS,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC,EAClD,QAAQ,CAAC,cAAc,GAAG,QAAQ,EAClC,UAAU,GAAG,IAAI,GAAG,YAAY,GAAG,MAAM,CAAC,MAAM,GAAG,eAAe,GAAG,EAAE,CA2CvE,CAAA;AAEF;;;GAGG;AACH,eAAO,MAAM,KAAK,eACP,SAAS,eAAe,CAAC,CAAC,CAAC,KACnC,MAAM,KAAK,CACZ,KAAK,EACL,QAAQ,GAAG,SAAS,cAAc,EAClC,YAAY,GAAG,OAAO,MAAM,GAAG,eAAe,GAAG,UAAU,GAAG,IAAI,GAAG,CAAC,CAClC,CAAA"}
/**
* @since 1.0.0
*/
import * as Client from "@effect/sql/Client";
import { SqlError } from "@effect/sql/Error";
import * as Statement from "@effect/sql/Statement";
import * as Otel from "@opentelemetry/semantic-conventions";
import { Database } from "bun:sqlite";
import * as Config from "effect/Config";
import * as Context from "effect/Context";
import * as Effect from "effect/Effect";
import { identity } from "effect/Function";
import * as Layer from "effect/Layer";
import * as Scope from "effect/Scope";
/**
* @category type ids
* @since 1.0.0
*/
export const TypeId = /*#__PURE__*/Symbol.for("@effect/sql-sqlite-bun/Client");
/**
* @category tags
* @since 1.0.0
*/
export const SqliteClient = /*#__PURE__*/Context.GenericTag("@effect/sql-sqlite-bun/Client");
/**
* @category constructor
* @since 1.0.0
*/
export const make = options => Effect.gen(function* (_) {
const compiler = Statement.makeCompilerSqlite(options.transformQueryNames);
const transformRows = Statement.defaultTransforms(options.transformResultNames).array;
const makeConnection = Effect.gen(function* (_) {
const db = new Database(options.filename, {
readonly: options.readonly,
readwrite: options.readwrite ?? true,
create: options.create ?? true
});
yield* _(Effect.addFinalizer(() => Effect.sync(() => db.close())));
if (options.disableWAL !== true) {
db.run("PRAGMA journal_mode = WAL;");
}
const run = (sql, params = []) => Effect.try({
try: () => db.query(sql).all(...params),
catch: error => new SqlError({
error
})
});
const runTransform = options.transformResultNames ? (sql, params) => Effect.map(run(sql, params), transformRows) : run;
const runValues = (sql, params = []) => Effect.try({
try: () => db.query(sql).values(...params),
catch: error => new SqlError({
error
})
});
return identity({
execute(sql, params) {
return runTransform(sql, params);
},
executeValues(sql, params) {
return runValues(sql, params);
},
executeWithoutTransform(sql, params) {
return run(sql, params);
},
executeRaw(sql, params) {
return runTransform(sql, params);
},
executeStream(_sql, _params) {
return Effect.dieMessage("executeStream not implemented");
},
export: Effect.try({
try: () => db.serialize(),
catch: error => new SqlError({
error
})
}),
loadExtension: path => Effect.try({
try: () => db.loadExtension(path),
catch: error => new SqlError({
error
})
})
});
});
const semaphore = yield* _(Effect.makeSemaphore(1));
const connection = yield* _(makeConnection);
const acquirer = semaphore.withPermits(1)(Effect.succeed(connection));
const transactionAcquirer = Effect.uninterruptibleMask(restore => Effect.as(Effect.zipRight(restore(semaphore.take(1)), Effect.tap(Effect.scope, scope => Scope.addFinalizer(scope, semaphore.release(1)))), connection));
return Object.assign(Client.make({
acquirer,
compiler,
transactionAcquirer,
spanAttributes: [...(options.spanAttributes ? Object.entries(options.spanAttributes) : []), [Otel.SEMATTRS_DB_SYSTEM, Otel.DBSYSTEMVALUES_SQLITE]]
}), {
[TypeId]: TypeId,
config: options,
export: Effect.flatMap(acquirer, _ => _.export),
loadExtension: path => Effect.flatMap(acquirer, _ => _.loadExtension(path))
});
});
/**
* @category layers
* @since 1.0.0
*/
export const layer = config => Layer.scopedContext(Config.unwrap(config).pipe(Effect.flatMap(make), Effect.map(client => Context.make(SqliteClient, client).pipe(Context.add(Client.Client, client)))));
//# sourceMappingURL=Client.js.map
{"version":3,"file":"Client.js","names":["Client","SqlError","Statement","Otel","Database","Config","Context","Effect","identity","Layer","Scope","TypeId","Symbol","for","SqliteClient","GenericTag","make","options","gen","_","compiler","makeCompilerSqlite","transformQueryNames","transformRows","defaultTransforms","transformResultNames","array","makeConnection","db","filename","readonly","readwrite","create","addFinalizer","sync","close","disableWAL","run","sql","params","try","query","all","catch","error","runTransform","map","runValues","values","execute","executeValues","executeWithoutTransform","executeRaw","executeStream","_sql","_params","dieMessage","export","serialize","loadExtension","path","semaphore","makeSemaphore","connection","acquirer","withPermits","succeed","transactionAcquirer","uninterruptibleMask","restore","as","zipRight","take","tap","scope","release","Object","assign","spanAttributes","entries","SEMATTRS_DB_SYSTEM","DBSYSTEMVALUES_SQLITE","config","flatMap","layer","scopedContext","unwrap","pipe","client","add"],"sources":["../../src/Client.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
/**
* @since 1.0.0
*/
import * as Command from "@effect/platform/Command";
import { FileSystem } from "@effect/platform/FileSystem";
import { Path } from "@effect/platform/Path";
import * as Migrator from "@effect/sql/Migrator";
import * as Effect from "effect/Effect";
import * as Layer from "effect/Layer";
import { SqliteClient } from "./Client.js";
/**
* @since 1.0.0
*/
export * from "@effect/sql/Migrator";
/**
* @since 1.0.0
*/
export * from "@effect/sql/Migrator/FileSystem";
/**
* @category constructor
* @since 1.0.0
*/
export const run = /*#__PURE__*/Migrator.make({
dumpSchema(path, table) {
const dump = args => Effect.gen(function* (_) {
const sql = yield* SqliteClient;
const dump = yield* _(Command.make("sqlite3", sql.config.filename, ...args), Command.string);
return dump.replace(/^create table sqlite_sequence\(.*$/im, "").replace(/\n{2,}/gm, "\n\n").trim();
}).pipe(Effect.mapError(error => new Migrator.MigrationError({
reason: "failed",
message: error.message
})));
const dumpSchema = dump([".schema"]);
const dumpMigrations = dump(["--cmd", `.mode insert ${table}`, `select * from ${table}`]);
const dumpAll = Effect.map(Effect.all([dumpSchema, dumpMigrations], {
concurrency: 2
}), ([schema, migrations]) => schema + "\n\n" + migrations);
const dumpFile = file => Effect.gen(function* (_) {
const fs = yield* _(FileSystem);
const path = yield* _(Path);
const dump = yield* _(dumpAll);
yield* _(fs.makeDirectory(path.dirname(file), {
recursive: true
}));
yield* _(fs.writeFileString(file, dump));
}).pipe(Effect.mapError(error => new Migrator.MigrationError({
reason: "failed",
message: error.message
})));
return dumpFile(path);
}
});
/**
* @category constructor
* @since 1.0.0
*/
export const layer = options => Layer.effectDiscard(run(options));
//# sourceMappingURL=Migrator.js.map
{"version":3,"file":"Migrator.js","names":["Command","FileSystem","Path","Migrator","Effect","Layer","SqliteClient","run","make","dumpSchema","path","table","dump","args","gen","_","sql","config","filename","string","replace","trim","pipe","mapError","error","MigrationError","reason","message","dumpMigrations","dumpAll","map","all","concurrency","schema","migrations","dumpFile","file","fs","makeDirectory","dirname","recursive","writeFileString","layer","options","effectDiscard"],"sources":["../../src/Migrator.ts"],"sourcesContent":[null],"mappings":"AAAA;;;AAGA,OAAO,KAAKA,OAAO,MAAM,0BAA0B;AAEnD,SAASC,UAAU,QAAQ,6BAA6B;AACxD,SAASC,IAAI,QAAQ,uBAAuB;AAG5C,OAAO,KAAKC,QAAQ,MAAM,sBAAsB;AAChD,OAAO,KAAKC,MAAM,MAAM,eAAe;AACvC,OAAO,KAAKC,KAAK,MAAM,cAAc;AACrC,SAASC,YAAY,QAAQ,aAAa;AAE1C;;;AAGA,cAAc,sBAAsB;AAEpC;;;AAGA,cAAc,iCAAiC;AAE/C;;;;AAIA,OAAO,MAAMC,GAAG,gBAMZJ,QAAQ,CAACK,IAAI,CAAC;EAChBC,UAAUA,CAACC,IAAI,EAAEC,KAAK;IACpB,MAAMC,IAAI,GAAIC,IAAmB,IAC/BT,MAAM,CAACU,GAAG,CAAC,WAAUC,CAAC;MACpB,MAAMC,GAAG,GAAG,OAAOV,YAAY;MAC/B,MAAMM,IAAI,GAAG,OAAOG,CAAC,CACnBf,OAAO,CAACQ,IAAI,CAAC,SAAS,EAAGQ,GAAoB,CAACC,MAAM,CAACC,QAAQ,EAAE,GAAGL,IAAI,CAAC,EACvEb,OAAO,CAACmB,MAAM,CACf;MACD,OAAOP,IAAI,CAACQ,OAAO,CAAC,sCAAsC,EAAE,EAAE,CAAC,CAC5DA,OAAO,CAAC,UAAU,EAAE,MAAM,CAAC,CAC3BC,IAAI,EAAE;IACX,CAAC,CAAC,CAACC,IAAI,CACLlB,MAAM,CAACmB,QAAQ,CAAEC,KAAK,IAAK,IAAIrB,QAAQ,CAACsB,cAAc,CAAC;MAAEC,MAAM,EAAE,QAAQ;MAAEC,OAAO,EAAEH,KAAK,CAACG;IAAO,CAAE,CAAC,CAAC,CACtG;IAEH,MAAMlB,UAAU,GAAGG,IAAI,CAAC,CAAC,SAAS,CAAC,CAAC;IAEpC,MAAMgB,cAAc,GAAGhB,IAAI,CAAC,CAC1B,OAAO,EACP,gBAAgBD,KAAK,EAAE,EACvB,iBAAiBA,KAAK,EAAE,CACzB,CAAC;IAEF,MAAMkB,OAAO,GAAGzB,MAAM,CAAC0B,GAAG,CACxB1B,MAAM,CAAC2B,GAAG,CAAC,CAACtB,UAAU,EAAEmB,cAAc,CAAC,EAAE;MAAEI,WAAW,EAAE;IAAC,CAAE,CAAC,EAC5D,CAAC,CAACC,MAAM,EAAEC,UAAU,CAAC,KAAKD,MAAM,GAAG,MAAM,GAAGC,UAAU,CACvD;IAED,MAAMC,QAAQ,GAAIC,IAAY,IAC5BhC,MAAM,CAACU,GAAG,CAAC,WAAUC,CAAC;MACpB,MAAMsB,EAAE,GAAG,OAAOtB,CAAC,CAACd,UAAU,CAAC;MAC/B,MAAMS,IAAI,GAAG,OAAOK,CAAC,CAACb,IAAI,CAAC;MAC3B,MAAMU,IAAI,GAAG,OAAOG,CAAC,CAACc,OAAO,CAAC;MAC9B,OAAOd,CAAC,CAACsB,EAAE,CAACC,aAAa,CAAC5B,IAAI,CAAC6B,OAAO,CAACH,IAAI,CAAC,EAAE;QAAEI,SAAS,EAAE;MAAI,CAAE,CAAC,CAAC;MACnE,OAAOzB,CAAC,CAACsB,EAAE,CAACI,eAAe,CAACL,IAAI,EAAExB,IAAI,CAAC,CAAC;IAC1C,CAAC,CAAC,CAACU,IAAI,CACLlB,MAAM,CAACmB,QAAQ,CAAEC,KAAK,IAAK,IAAIrB,QAAQ,CAACsB,cAAc,CAAC;MAAEC,MAAM,EAAE,QAAQ;MAAEC,OAAO,EAAEH,KAAK,CAACG;IAAO,CAAE,CAAC,CAAC,CACtG;IAEH,OAAOQ,QAAQ,CAACzB,IAAI,CAAC;EACvB;CACD,CAAC;AAEF;;;;AAIA,OAAO,MAAMgC,KAAK,GAChBC,OAAoC,IAKjCtC,KAAK,CAACuC,aAAa,CAACrC,GAAG,CAACoC,OAAO,CAAC,CAAC","ignoreList":[]}
{
"main": "../dist/cjs/Migrator.js",
"module": "../dist/esm/Migrator.js",
"types": "../dist/dts/Migrator.d.ts",
"sideEffects": []
}
/**
* @since 1.0.0
*/
import * as Client from "@effect/sql/Client"
import type { Connection } from "@effect/sql/Connection"
import { SqlError } from "@effect/sql/Error"
import * as Statement from "@effect/sql/Statement"
import * as Otel from "@opentelemetry/semantic-conventions"
import { Database } from "bun:sqlite"
import * as Config from "effect/Config"
import type { ConfigError } from "effect/ConfigError"
import * as Context from "effect/Context"
import * as Effect from "effect/Effect"
import { identity } from "effect/Function"
import * as Layer from "effect/Layer"
import * as Scope from "effect/Scope"
/**
* @category type ids
* @since 1.0.0
*/
export const TypeId: unique symbol = Symbol.for("@effect/sql-sqlite-bun/Client")
/**
* @category type ids
* @since 1.0.0
*/
export type TypeId = typeof TypeId
/**
* @category models
* @since 1.0.0
*/
export interface SqliteClient extends Client.Client {
readonly [TypeId]: TypeId
readonly config: SqliteClientConfig
readonly export: Effect.Effect<Uint8Array, SqlError>
readonly loadExtension: (path: string) => Effect.Effect<void, SqlError>
/** Not supported in sqlite */
readonly updateValues: never
}
/**
* @category tags
* @since 1.0.0
*/
export const SqliteClient = Context.GenericTag<SqliteClient>("@effect/sql-sqlite-bun/Client")
/**
* @category models
* @since 1.0.0
*/
export interface SqliteClientConfig {
readonly filename: string
readonly readonly?: boolean | undefined
readonly create?: boolean | undefined
readonly readwrite?: boolean | undefined
readonly disableWAL?: boolean | undefined
readonly spanAttributes?: Record<string, unknown> | undefined
readonly transformResultNames?: ((str: string) => string) | undefined
readonly transformQueryNames?: ((str: string) => string) | undefined
}
interface SqliteConnection extends Connection {
readonly export: Effect.Effect<Uint8Array, SqlError>
readonly loadExtension: (path: string) => Effect.Effect<void, SqlError>
}
/**
* @category constructor
* @since 1.0.0
*/
export const make = (
options: SqliteClientConfig
): Effect.Effect<SqliteClient, never, Scope.Scope> =>
Effect.gen(function*(_) {
const compiler = Statement.makeCompilerSqlite(options.transformQueryNames)
const transformRows = Statement.defaultTransforms(
options.transformResultNames!
).array
const makeConnection = Effect.gen(function*(_) {
const db = new Database(options.filename, {
readonly: options.readonly,
readwrite: options.readwrite ?? true,
create: options.create ?? true
} as any)
yield* _(Effect.addFinalizer(() => Effect.sync(() => db.close())))
if (options.disableWAL !== true) {
db.run("PRAGMA journal_mode = WAL;")
}
const run = (
sql: string,
params: ReadonlyArray<Statement.Primitive> = []
) =>
Effect.try({
try: () => db.query(sql).all(...(params as any)) as Array<any>,
catch: (error) => new SqlError({ error })
})
const runTransform = options.transformResultNames
? (sql: string, params?: ReadonlyArray<Statement.Primitive>) => Effect.map(run(sql, params), transformRows)
: run
const runValues = (
sql: string,
params: ReadonlyArray<Statement.Primitive> = []
) =>
Effect.try({
try: () => db.query(sql).values(...(params as any)) as Array<any>,
catch: (error) => new SqlError({ error })
})
return identity<SqliteConnection>({
execute(sql, params) {
return runTransform(sql, params)
},
executeValues(sql, params) {
return runValues(sql, params)
},
executeWithoutTransform(sql, params) {
return run(sql, params)
},
executeRaw(sql, params) {
return runTransform(sql, params)
},
executeStream(_sql, _params) {
return Effect.dieMessage("executeStream not implemented")
},
export: Effect.try({
try: () => db.serialize(),
catch: (error) => new SqlError({ error })
}),
loadExtension: (path) =>
Effect.try({
try: () => db.loadExtension(path),
catch: (error) => new SqlError({ error })
})
})
})
const semaphore = yield* _(Effect.makeSemaphore(1))
const connection = yield* _(makeConnection)
const acquirer = semaphore.withPermits(1)(Effect.succeed(connection))
const transactionAcquirer = Effect.uninterruptibleMask((restore) =>
Effect.as(
Effect.zipRight(
restore(semaphore.take(1)),
Effect.tap(
Effect.scope,
(scope) => Scope.addFinalizer(scope, semaphore.release(1))
)
),
connection
)
)
return Object.assign(
Client.make({
acquirer,
compiler,
transactionAcquirer,
spanAttributes: [
...(options.spanAttributes ? Object.entries(options.spanAttributes) : []),
[Otel.SEMATTRS_DB_SYSTEM, Otel.DBSYSTEMVALUES_SQLITE]
]
}) as SqliteClient,
{
[TypeId]: TypeId as TypeId,
config: options,
export: Effect.flatMap(acquirer, (_) => _.export),
loadExtension: (path: string) => Effect.flatMap(acquirer, (_) => _.loadExtension(path))
}
)
})
/**
* @category layers
* @since 1.0.0
*/
export const layer = (
config: Config.Config.Wrap<SqliteClientConfig>
): Layer.Layer<SqliteClient | Client.Client, ConfigError> =>
Layer.scopedContext(
Config.unwrap(config).pipe(
Effect.flatMap(make),
Effect.map((client) =>
Context.make(SqliteClient, client).pipe(
Context.add(Client.Client, client)
)
)
)
)
/**
* @since 1.0.0
*/
import * as Command from "@effect/platform/Command"
import type { CommandExecutor } from "@effect/platform/CommandExecutor"
import { FileSystem } from "@effect/platform/FileSystem"
import { Path } from "@effect/platform/Path"
import type * as Client from "@effect/sql/Client"
import type { SqlError } from "@effect/sql/Error"
import * as Migrator from "@effect/sql/Migrator"
import * as Effect from "effect/Effect"
import * as Layer from "effect/Layer"
import { SqliteClient } from "./Client.js"
/**
* @since 1.0.0
*/
export * from "@effect/sql/Migrator"
/**
* @since 1.0.0
*/
export * from "@effect/sql/Migrator/FileSystem"
/**
* @category constructor
* @since 1.0.0
*/
export const run: <R2 = never>(
options: Migrator.MigratorOptions<R2>
) => Effect.Effect<
ReadonlyArray<readonly [id: number, name: string]>,
Migrator.MigrationError | SqlError,
FileSystem | Path | SqliteClient | Client.Client | CommandExecutor | R2
> = Migrator.make({
dumpSchema(path, table) {
const dump = (args: Array<string>) =>
Effect.gen(function*(_) {
const sql = yield* SqliteClient
const dump = yield* _(
Command.make("sqlite3", (sql as SqliteClient).config.filename, ...args),
Command.string
)
return dump.replace(/^create table sqlite_sequence\(.*$/im, "")
.replace(/\n{2,}/gm, "\n\n")
.trim()
}).pipe(
Effect.mapError((error) => new Migrator.MigrationError({ reason: "failed", message: error.message }))
)
const dumpSchema = dump([".schema"])
const dumpMigrations = dump([
"--cmd",
`.mode insert ${table}`,
`select * from ${table}`
])
const dumpAll = Effect.map(
Effect.all([dumpSchema, dumpMigrations], { concurrency: 2 }),
([schema, migrations]) => schema + "\n\n" + migrations
)
const dumpFile = (file: string) =>
Effect.gen(function*(_) {
const fs = yield* _(FileSystem)
const path = yield* _(Path)
const dump = yield* _(dumpAll)
yield* _(fs.makeDirectory(path.dirname(file), { recursive: true }))
yield* _(fs.writeFileString(file, dump))
}).pipe(
Effect.mapError((error) => new Migrator.MigrationError({ reason: "failed", message: error.message }))
)
return dumpFile(path)
}
})
/**
* @category constructor
* @since 1.0.0
*/
export const layer = <R>(
options: Migrator.MigratorOptions<R>
): Layer.Layer<
never,
SqlError | Migrator.MigrationError,
SqliteClient | Client.Client | CommandExecutor | FileSystem | Path | R
> => Layer.effectDiscard(run(options))