AK-21/Graphite-Industrial-Intelligence
0
1import { PGlite } from "@electric-sql/pglite";2import { entityKind } from "../entity.js";3import { DefaultLogger } from "../logger.js";4import { PgDatabase } from "../pg-core/db.js";5import { PgDialect } from "../pg-core/dialect.js";6import {7 createTableRelationsHelpers,8 extractTablesRelationalConfig9} from "../relations.js";10import { isConfig } from "../utils.js";11import { PgliteSession } from "./session.js";12class PgliteDriver {13 constructor(client, dialect, options = {}) {14 this.client = client;15 this.dialect = dialect;16 this.options = options;17 }18 static [entityKind] = "PgliteDriver";19 createSession(schema) {20 return new PgliteSession(this.client, this.dialect, schema, {21 logger: this.options.logger,22 cache: this.options.cache23 });24 }25}26class PgliteDatabase extends PgDatabase {27 static [entityKind] = "PgliteDatabase";28}29function construct(client, config = {}) {30 const dialect = new PgDialect({ casing: config.casing });31 let logger;32 if (config.logger === true) {33 logger = new DefaultLogger();34 } else if (config.logger !== false) {35 logger = config.logger;36 }37 let schema;38 if (config.schema) {39 const tablesConfig = extractTablesRelationalConfig(40 config.schema,41 createTableRelationsHelpers42 );43 schema = {44 fullSchema: config.schema,45 schema: tablesConfig.tables,46 tableNamesMap: tablesConfig.tableNamesMap47 };48 }49 const driver = new PgliteDriver(client, dialect, { logger, cache: config.cache });50 const session = driver.createSession(schema);51 const db = new PgliteDatabase(dialect, session, schema);52 db.$client = client;53 db.$cache = config.cache;54 if (db.$cache) {55 db.$cache["invalidate"] = config.cache?.onMutate;56 }57 return db;58}59function drizzle(...params) {60 if (params[0] === void 0 || typeof params[0] === "string") {61 const instance = new PGlite(params[0]);62 return construct(instance, params[1]);63 }64 if (isConfig(params[0])) {65 const { connection, client, ...drizzleConfig } = params[0];66 if (client) return construct(client, drizzleConfig);67 if (typeof connection === "object") {68 const { dataDir, ...options } = connection;69 const instance2 = new PGlite(dataDir, options);70 return construct(instance2, drizzleConfig);71 }72 const instance = new PGlite(connection);73 return construct(instance, drizzleConfig);74 }75 return construct(params[0], params[1]);76}77((drizzle2) => {78 function mock(config) {79 return construct({}, config);80 }81 drizzle2.mock = mock;82})(drizzle || (drizzle = {}));83export {84 PgliteDatabase,85 PgliteDriver,86 drizzle87};88//# sourceMappingURL=driver.js.map