AK-21/Graphite-Industrial-Intelligence
0
1import { neon, types } from "@neondatabase/serverless";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 { createTableRelationsHelpers, extractTablesRelationalConfig } from "../relations.js";7import { isConfig } from "../utils.js";8import { NeonHttpSession } from "./session.js";9class NeonHttpDriver {10 constructor(client, dialect, options = {}) {11 this.client = client;12 this.dialect = dialect;13 this.options = options;14 this.initMappers();15 }16 static [entityKind] = "NeonHttpDriver";17 createSession(schema) {18 return new NeonHttpSession(this.client, this.dialect, schema, {19 logger: this.options.logger,20 cache: this.options.cache21 });22 }23 initMappers() {24 types.setTypeParser(types.builtins.TIMESTAMPTZ, (val) => val);25 types.setTypeParser(types.builtins.TIMESTAMP, (val) => val);26 types.setTypeParser(types.builtins.DATE, (val) => val);27 types.setTypeParser(types.builtins.INTERVAL, (val) => val);28 types.setTypeParser(1231, (val) => val);29 types.setTypeParser(1115, (val) => val);30 types.setTypeParser(1185, (val) => val);31 types.setTypeParser(1187, (val) => val);32 types.setTypeParser(1182, (val) => val);33 }34}35function wrap(target, token, cb, deep) {36 return new Proxy(target, {37 get(target2, p) {38 const element = target2[p];39 if (typeof element !== "function" && (typeof element !== "object" || element === null)) return element;40 if (deep) return wrap(element, token, cb);41 if (p === "query") return wrap(element, token, cb, true);42 return new Proxy(element, {43 apply(target3, thisArg, argArray) {44 const res = target3.call(thisArg, ...argArray);45 if (typeof res === "object" && res !== null && "setToken" in res && typeof res.setToken === "function") {46 res.setToken(token);47 }48 return cb(target3, p, res);49 }50 });51 }52 });53}54class NeonHttpDatabase extends PgDatabase {55 static [entityKind] = "NeonHttpDatabase";56 $withAuth(token) {57 this.authToken = token;58 return wrap(this, token, (target, p, res) => {59 if (p === "with") {60 return wrap(res, token, (_, __, res2) => res2);61 }62 return res;63 });64 }65 async batch(batch) {66 return this.session.batch(batch);67 }68}69function construct(client, config = {}) {70 const dialect = new PgDialect({ casing: config.casing });71 let logger;72 if (config.logger === true) {73 logger = new DefaultLogger();74 } else if (config.logger !== false) {75 logger = config.logger;76 }77 let schema;78 if (config.schema) {79 const tablesConfig = extractTablesRelationalConfig(80 config.schema,81 createTableRelationsHelpers82 );83 schema = {84 fullSchema: config.schema,85 schema: tablesConfig.tables,86 tableNamesMap: tablesConfig.tableNamesMap87 };88 }89 const driver = new NeonHttpDriver(client, dialect, { logger, cache: config.cache });90 const session = driver.createSession(schema);91 const db = new NeonHttpDatabase(92 dialect,93 session,94 schema95 );96 db.$client = client;97 db.$cache = config.cache;98 if (db.$cache) {99 db.$cache["invalidate"] = config.cache?.onMutate;100 }101 return db;102}103function drizzle(...params) {104 if (typeof params[0] === "string") {105 const instance = neon(params[0]);106 return construct(instance, params[1]);107 }108 if (isConfig(params[0])) {109 const { connection, client, ...drizzleConfig } = params[0];110 if (client) return construct(client, drizzleConfig);111 if (typeof connection === "object") {112 const { connectionString, ...options } = connection;113 const instance2 = neon(connectionString, options);114 return construct(instance2, drizzleConfig);115 }116 const instance = neon(connection);117 return construct(instance, drizzleConfig);118 }119 return construct(params[0], params[1]);120}121((drizzle2) => {122 function mock(config) {123 return construct({}, config);124 }125 drizzle2.mock = mock;126})(drizzle || (drizzle = {}));127export {128 NeonHttpDatabase,129 NeonHttpDriver,130 drizzle131};132//# sourceMappingURL=driver.js.map