driver.js 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. import pgClient from "postgres";
  2. import { entityKind } from "../entity.js";
  3. import { DefaultLogger } from "../logger.js";
  4. import { PgDatabase } from "../pg-core/db.js";
  5. import { PgDialect } from "../pg-core/dialect.js";
  6. import {
  7. createTableRelationsHelpers,
  8. extractTablesRelationalConfig
  9. } from "../relations.js";
  10. import { isConfig } from "../utils.js";
  11. import { PostgresJsSession } from "./session.js";
  12. class PostgresJsDatabase extends PgDatabase {
  13. static [entityKind] = "PostgresJsDatabase";
  14. }
  15. function construct(client, config = {}) {
  16. const transparentParser = (val) => val;
  17. for (const type of ["1184", "1082", "1083", "1114", "1182", "1185", "1115", "1231"]) {
  18. client.options.parsers[type] = transparentParser;
  19. client.options.serializers[type] = transparentParser;
  20. }
  21. client.options.serializers["114"] = transparentParser;
  22. client.options.serializers["3802"] = transparentParser;
  23. const dialect = new PgDialect({ casing: config.casing });
  24. let logger;
  25. if (config.logger === true) {
  26. logger = new DefaultLogger();
  27. } else if (config.logger !== false) {
  28. logger = config.logger;
  29. }
  30. let schema;
  31. if (config.schema) {
  32. const tablesConfig = extractTablesRelationalConfig(
  33. config.schema,
  34. createTableRelationsHelpers
  35. );
  36. schema = {
  37. fullSchema: config.schema,
  38. schema: tablesConfig.tables,
  39. tableNamesMap: tablesConfig.tableNamesMap
  40. };
  41. }
  42. const session = new PostgresJsSession(client, dialect, schema, { logger, cache: config.cache });
  43. const db = new PostgresJsDatabase(dialect, session, schema);
  44. db.$client = client;
  45. db.$cache = config.cache;
  46. if (db.$cache) {
  47. db.$cache["invalidate"] = config.cache?.onMutate;
  48. }
  49. return db;
  50. }
  51. function drizzle(...params) {
  52. if (typeof params[0] === "string") {
  53. const instance = pgClient(params[0]);
  54. return construct(instance, params[1]);
  55. }
  56. if (isConfig(params[0])) {
  57. const { connection, client, ...drizzleConfig } = params[0];
  58. if (client) return construct(client, drizzleConfig);
  59. if (typeof connection === "object" && connection.url !== void 0) {
  60. const { url, ...config } = connection;
  61. const instance2 = pgClient(url, config);
  62. return construct(instance2, drizzleConfig);
  63. }
  64. const instance = pgClient(connection);
  65. return construct(instance, drizzleConfig);
  66. }
  67. return construct(params[0], params[1]);
  68. }
  69. ((drizzle2) => {
  70. function mock(config) {
  71. return construct({
  72. options: {
  73. parsers: {},
  74. serializers: {}
  75. }
  76. }, config);
  77. }
  78. drizzle2.mock = mock;
  79. })(drizzle || (drizzle = {}));
  80. export {
  81. PostgresJsDatabase,
  82. drizzle
  83. };
  84. //# sourceMappingURL=driver.js.map