driver.js 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. import pg from "pg";
  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 { NodePgSession } from "./session.js";
  12. class 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.cache
  23. });
  24. }
  25. }
  26. class NodePgDatabase extends PgDatabase {
  27. static [entityKind] = "NodePgDatabase";
  28. }
  29. function 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. createTableRelationsHelpers
  42. );
  43. schema = {
  44. fullSchema: config.schema,
  45. schema: tablesConfig.tables,
  46. tableNamesMap: tablesConfig.tableNamesMap
  47. };
  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. }
  59. function 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: connection
  71. }) : 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 = {}));
  82. export {
  83. NodePgDatabase,
  84. NodePgDriver,
  85. drizzle
  86. };
  87. //# sourceMappingURL=driver.js.map