AK-21/Graphite-Industrial-Intelligence
0
1import pg from "pg";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 { NodePgSession } from "./session.js";12class NodePgDriver {13 constructor(client, dialect, options = {}) {14 this.client = client;15 this.dialect = dialect;16 this.options = options;17 }18 static [entityKind] = "NodePgDriver";19 createSession(schema) {20 return new NodePgSession(this.client, this.dialect, schema, {21 logger: this.options.logger,22 cache: this.options.cache23 });24 }25}26class NodePgDatabase extends PgDatabase {27 static [entityKind] = "NodePgDatabase";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 NodePgDriver(client, dialect, { logger, cache: config.cache });50 const session = driver.createSession(schema);51 const db = new NodePgDatabase(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 (typeof params[0] === "string") {61 const instance = new pg.Pool({62 connectionString: params[0]63 });64 return construct(instance, params[1]);65 }66 if (isConfig(params[0])) {67 const { connection, client, ...drizzleConfig } = params[0];68 if (client) return construct(client, drizzleConfig);69 const instance = typeof connection === "string" ? new pg.Pool({70 connectionString: connection71 }) : new pg.Pool(connection);72 return construct(instance, drizzleConfig);73 }74 return construct(params[0], params[1]);75}76((drizzle2) => {77 function mock(config) {78 return construct({}, config);79 }80 drizzle2.mock = mock;81})(drizzle || (drizzle = {}));82export {83 NodePgDatabase,84 NodePgDriver,85 drizzle86};87//# sourceMappingURL=driver.js.map