effect-sql-kysely
Version:
A full-featured integration between `@effect/sql` and `Kysely` that provides type-safe database operations with Effect's powerful error handling and resource management.
62 lines (61 loc) • 2.77 kB
JavaScript
;
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || (function () {
var ownKeys = function(o) {
ownKeys = Object.getOwnPropertyNames || function (o) {
var ar = [];
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
return ar;
};
return ownKeys(o);
};
return function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
__setModuleDefault(result, mod);
return result;
};
})();
Object.defineProperty(exports, "__esModule", { value: true });
exports.make = void 0;
const experimental_1 = require("@effect/experimental");
const Context = __importStar(require("effect/Context"));
const Effect = __importStar(require("effect/Effect"));
const Layer = __importStar(require("effect/Layer"));
const makeResolver_js_1 = require("./makeResolver.js");
const makeSchema_js_1 = require("./makeSchema.js");
const makeSqlClient_js_1 = require("./makeSqlClient.js");
const make = (id) => {
const Tag = Context.Tag(id)();
const Kysely = Effect.map(Tag, ({ kysely }) => kysely);
const layerWithCompiler = (options) => Layer.scoped(Tag, Effect.gen(function* () {
const db = yield* options.acquire;
const sql = yield* (0, makeSqlClient_js_1.makeSqlClient)({ ...options, database: db });
return { db, sql, kysely: (0, makeSqlClient_js_1.makeKyselyEffect)(db, sql) };
})).pipe(Layer.provide(experimental_1.Reactivity.layer));
return Object.assign(Tag, {
resolver: (0, makeResolver_js_1.makeResolver)(Kysely),
schema: (0, makeSchema_js_1.makeSchema)(Kysely),
layerWithCompiler,
client: Effect.map(Tag, ({ sql }) => sql),
kysely: (f) => Effect.flatMap(Tag, ({ kysely }) => kysely(f)),
withTransaction: (effect) => Effect.flatMap(Tag, ({ sql }) => sql.withTransaction(effect)),
});
};
exports.make = make;