CoolFace
Apppublic

AK-21/Graphite-Industrial-Intelligence

sourceHugging Faceupdated 3mo agoView on Hugging Face
0likes
driver.js132 linesDownload Raw Back to neon-http
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