driver.js 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. import { PGlite } from "@electric-sql/pglite";
  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 { PgliteSession } from "./session.js";
  12. class PgliteDriver {
  13. constructor(client, dialect, options = {}) {
  14. this.client = client;
  15. this.dialect = dialect;
  16. this.options = options;
  17. }
  18. static [entityKind] = "PgliteDriver";
  19. createSession(schema) {
  20. return new PgliteSession(this.client, this.dialect, schema, {
  21. logger: this.options.logger,
  22. cache: this.options.cache
  23. });
  24. }
  25. }
  26. class PgliteDatabase extends PgDatabase {
  27. static [entityKind] = "PgliteDatabase";
  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 PgliteDriver(client, dialect, { logger, cache: config.cache });
  50. const session = driver.createSession(schema);
  51. const db = new PgliteDatabase(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 (params[0] === void 0 || typeof params[0] === "string") {
  61. const instance = new PGlite(params[0]);
  62. return construct(instance, params[1]);
  63. }
  64. if (isConfig(params[0])) {
  65. const { connection, client, ...drizzleConfig } = params[0];
  66. if (client) return construct(client, drizzleConfig);
  67. if (typeof connection === "object") {
  68. const { dataDir, ...options } = connection;
  69. const instance2 = new PGlite(dataDir, options);
  70. return construct(instance2, drizzleConfig);
  71. }
  72. const instance = new PGlite(connection);
  73. return construct(instance, drizzleConfig);
  74. }
  75. return construct(params[0], params[1]);
  76. }
  77. ((drizzle2) => {
  78. function mock(config) {
  79. return construct({}, config);
  80. }
  81. drizzle2.mock = mock;
  82. })(drizzle || (drizzle = {}));
  83. export {
  84. PgliteDatabase,
  85. PgliteDriver,
  86. drizzle
  87. };
  88. //# sourceMappingURL=driver.js.map