drizzle-orm 0.39.1 → 0.39.2-1177ad8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (222) hide show
  1. package/aws-data-api/pg/driver.cjs +5 -1
  2. package/aws-data-api/pg/driver.cjs.map +1 -1
  3. package/aws-data-api/pg/driver.d.cts +1 -0
  4. package/aws-data-api/pg/driver.d.ts +1 -0
  5. package/aws-data-api/pg/driver.js +5 -1
  6. package/aws-data-api/pg/driver.js.map +1 -1
  7. package/aws-data-api/pg/session.cjs +15 -4
  8. package/aws-data-api/pg/session.cjs.map +1 -1
  9. package/aws-data-api/pg/session.d.cts +13 -3
  10. package/aws-data-api/pg/session.d.ts +13 -3
  11. package/aws-data-api/pg/session.js +15 -4
  12. package/aws-data-api/pg/session.js.map +1 -1
  13. package/bun-sql/driver.cjs +5 -1
  14. package/bun-sql/driver.cjs.map +1 -1
  15. package/bun-sql/driver.js +5 -1
  16. package/bun-sql/driver.js.map +1 -1
  17. package/bun-sql/session.cjs +21 -9
  18. package/bun-sql/session.cjs.map +1 -1
  19. package/bun-sql/session.d.cts +12 -3
  20. package/bun-sql/session.d.ts +12 -3
  21. package/bun-sql/session.js +21 -9
  22. package/bun-sql/session.js.map +1 -1
  23. package/cache/core/cache.cjs +47 -0
  24. package/cache/core/cache.cjs.map +1 -0
  25. package/cache/core/cache.d.cts +35 -0
  26. package/cache/core/cache.d.ts +35 -0
  27. package/cache/core/cache.js +22 -0
  28. package/cache/core/cache.js.map +1 -0
  29. package/cache/core/index.cjs +23 -0
  30. package/cache/core/index.cjs.map +1 -0
  31. package/cache/core/index.d.cts +1 -0
  32. package/cache/core/index.d.ts +1 -0
  33. package/cache/core/index.js +2 -0
  34. package/cache/core/index.js.map +1 -0
  35. package/cache/core/types.cjs +17 -0
  36. package/cache/core/types.cjs.map +1 -0
  37. package/cache/core/types.d.cts +22 -0
  38. package/cache/core/types.d.ts +22 -0
  39. package/cache/core/types.js +1 -0
  40. package/cache/core/types.js.map +1 -0
  41. package/cache/upstash/cache.cjs +98 -0
  42. package/cache/upstash/cache.cjs.map +1 -0
  43. package/cache/upstash/cache.d.cts +23 -0
  44. package/cache/upstash/cache.d.ts +23 -0
  45. package/cache/upstash/cache.js +73 -0
  46. package/cache/upstash/cache.js.map +1 -0
  47. package/cache/upstash/index.cjs +23 -0
  48. package/cache/upstash/index.cjs.map +1 -0
  49. package/cache/upstash/index.d.cts +1 -0
  50. package/cache/upstash/index.d.ts +1 -0
  51. package/cache/upstash/index.js +2 -0
  52. package/cache/upstash/index.js.map +1 -0
  53. package/neon/neon-identity.cjs +2 -2
  54. package/neon/neon-identity.cjs.map +1 -1
  55. package/neon/neon-identity.d.cts +3 -3
  56. package/neon/neon-identity.d.ts +3 -3
  57. package/neon/neon-identity.js +2 -2
  58. package/neon/neon-identity.js.map +1 -1
  59. package/neon-http/driver.cjs +9 -2
  60. package/neon-http/driver.cjs.map +1 -1
  61. package/neon-http/driver.d.cts +2 -0
  62. package/neon-http/driver.d.ts +2 -0
  63. package/neon-http/driver.js +9 -2
  64. package/neon-http/driver.js.map +1 -1
  65. package/neon-http/session.cjs +25 -15
  66. package/neon-http/session.cjs.map +1 -1
  67. package/neon-http/session.d.cts +12 -3
  68. package/neon-http/session.d.ts +12 -3
  69. package/neon-http/session.js +25 -15
  70. package/neon-http/session.js.map +1 -1
  71. package/neon-serverless/driver.cjs +9 -2
  72. package/neon-serverless/driver.cjs.map +1 -1
  73. package/neon-serverless/driver.d.cts +2 -0
  74. package/neon-serverless/driver.d.ts +2 -0
  75. package/neon-serverless/driver.js +9 -2
  76. package/neon-serverless/driver.js.map +1 -1
  77. package/neon-serverless/session.cjs +21 -7
  78. package/neon-serverless/session.cjs.map +1 -1
  79. package/neon-serverless/session.d.cts +12 -3
  80. package/neon-serverless/session.d.ts +12 -3
  81. package/neon-serverless/session.js +21 -7
  82. package/neon-serverless/session.js.map +1 -1
  83. package/node-postgres/driver.cjs +9 -2
  84. package/node-postgres/driver.cjs.map +1 -1
  85. package/node-postgres/driver.d.cts +2 -0
  86. package/node-postgres/driver.d.ts +2 -0
  87. package/node-postgres/driver.js +9 -2
  88. package/node-postgres/driver.js.map +1 -1
  89. package/node-postgres/session.cjs +19 -6
  90. package/node-postgres/session.cjs.map +1 -1
  91. package/node-postgres/session.d.cts +13 -3
  92. package/node-postgres/session.d.ts +13 -3
  93. package/node-postgres/session.js +19 -6
  94. package/node-postgres/session.js.map +1 -1
  95. package/package.json +64 -3
  96. package/pg-core/db.cjs +1 -0
  97. package/pg-core/db.cjs.map +1 -1
  98. package/pg-core/db.d.cts +4 -0
  99. package/pg-core/db.d.ts +4 -0
  100. package/pg-core/db.js +1 -0
  101. package/pg-core/db.js.map +1 -1
  102. package/pg-core/query-builders/delete.cjs +6 -1
  103. package/pg-core/query-builders/delete.cjs.map +1 -1
  104. package/pg-core/query-builders/delete.d.cts +2 -1
  105. package/pg-core/query-builders/delete.d.ts +2 -1
  106. package/pg-core/query-builders/delete.js +6 -1
  107. package/pg-core/query-builders/delete.js.map +1 -1
  108. package/pg-core/query-builders/insert.cjs +6 -1
  109. package/pg-core/query-builders/insert.cjs.map +1 -1
  110. package/pg-core/query-builders/insert.d.cts +2 -1
  111. package/pg-core/query-builders/insert.d.ts +2 -1
  112. package/pg-core/query-builders/insert.js +6 -1
  113. package/pg-core/query-builders/insert.js.map +1 -1
  114. package/pg-core/query-builders/select.cjs +31 -5
  115. package/pg-core/query-builders/select.cjs.map +1 -1
  116. package/pg-core/query-builders/select.d.cts +11 -2
  117. package/pg-core/query-builders/select.d.ts +11 -2
  118. package/pg-core/query-builders/select.js +31 -5
  119. package/pg-core/query-builders/select.js.map +1 -1
  120. package/pg-core/query-builders/select.types.cjs.map +1 -1
  121. package/pg-core/query-builders/select.types.d.cts +7 -0
  122. package/pg-core/query-builders/select.types.d.ts +7 -0
  123. package/pg-core/query-builders/update.cjs +6 -1
  124. package/pg-core/query-builders/update.cjs.map +1 -1
  125. package/pg-core/query-builders/update.d.cts +4 -3
  126. package/pg-core/query-builders/update.d.ts +4 -3
  127. package/pg-core/query-builders/update.js +6 -1
  128. package/pg-core/query-builders/update.js.map +1 -1
  129. package/pg-core/session.cjs +53 -1
  130. package/pg-core/session.cjs.map +1 -1
  131. package/pg-core/session.d.cts +14 -3
  132. package/pg-core/session.d.ts +14 -3
  133. package/pg-core/session.js +54 -2
  134. package/pg-core/session.js.map +1 -1
  135. package/pg-core/utils.cjs +16 -0
  136. package/pg-core/utils.cjs.map +1 -1
  137. package/pg-core/utils.d.cts +8 -4
  138. package/pg-core/utils.d.ts +8 -4
  139. package/pg-core/utils.js +16 -1
  140. package/pg-core/utils.js.map +1 -1
  141. package/pg-proxy/driver.cjs +7 -2
  142. package/pg-proxy/driver.cjs.map +1 -1
  143. package/pg-proxy/driver.js +7 -2
  144. package/pg-proxy/driver.js.map +1 -1
  145. package/pg-proxy/session.cjs +15 -5
  146. package/pg-proxy/session.cjs.map +1 -1
  147. package/pg-proxy/session.d.cts +12 -3
  148. package/pg-proxy/session.d.ts +12 -3
  149. package/pg-proxy/session.js +15 -5
  150. package/pg-proxy/session.js.map +1 -1
  151. package/pglite/driver.cjs +9 -2
  152. package/pglite/driver.cjs.map +1 -1
  153. package/pglite/driver.d.cts +2 -0
  154. package/pglite/driver.d.ts +2 -0
  155. package/pglite/driver.js +9 -2
  156. package/pglite/driver.js.map +1 -1
  157. package/pglite/session.cjs +19 -7
  158. package/pglite/session.cjs.map +1 -1
  159. package/pglite/session.d.cts +12 -3
  160. package/pglite/session.d.ts +12 -3
  161. package/pglite/session.js +19 -7
  162. package/pglite/session.js.map +1 -1
  163. package/postgres-js/driver.cjs +5 -1
  164. package/postgres-js/driver.cjs.map +1 -1
  165. package/postgres-js/driver.js +5 -1
  166. package/postgres-js/driver.js.map +1 -1
  167. package/postgres-js/session.cjs +18 -6
  168. package/postgres-js/session.cjs.map +1 -1
  169. package/postgres-js/session.d.cts +12 -3
  170. package/postgres-js/session.d.ts +12 -3
  171. package/postgres-js/session.js +18 -6
  172. package/postgres-js/session.js.map +1 -1
  173. package/prisma/pg/session.cjs +1 -1
  174. package/prisma/pg/session.cjs.map +1 -1
  175. package/prisma/pg/session.js +1 -1
  176. package/prisma/pg/session.js.map +1 -1
  177. package/query-builders/query-builder.cjs.map +1 -1
  178. package/query-builders/query-builder.d.cts +2 -1
  179. package/query-builders/query-builder.d.ts +2 -1
  180. package/query-builders/query-builder.js.map +1 -1
  181. package/sql/sql.cjs +7 -0
  182. package/sql/sql.cjs.map +1 -1
  183. package/sql/sql.js +7 -0
  184. package/sql/sql.js.map +1 -1
  185. package/subquery.cjs +4 -3
  186. package/subquery.cjs.map +1 -1
  187. package/subquery.d.cts +2 -1
  188. package/subquery.d.ts +2 -1
  189. package/subquery.js +4 -3
  190. package/subquery.js.map +1 -1
  191. package/utils.cjs.map +1 -1
  192. package/utils.d.cts +2 -0
  193. package/utils.d.ts +2 -0
  194. package/utils.js.map +1 -1
  195. package/vercel-postgres/driver.cjs +9 -2
  196. package/vercel-postgres/driver.cjs.map +1 -1
  197. package/vercel-postgres/driver.d.cts +2 -0
  198. package/vercel-postgres/driver.d.ts +2 -0
  199. package/vercel-postgres/driver.js +9 -2
  200. package/vercel-postgres/driver.js.map +1 -1
  201. package/vercel-postgres/session.cjs +21 -7
  202. package/vercel-postgres/session.cjs.map +1 -1
  203. package/vercel-postgres/session.d.cts +12 -3
  204. package/vercel-postgres/session.d.ts +12 -3
  205. package/vercel-postgres/session.js +21 -7
  206. package/vercel-postgres/session.js.map +1 -1
  207. package/version.cjs +1 -1
  208. package/version.d.cts +1 -1
  209. package/version.d.ts +1 -1
  210. package/version.js +1 -1
  211. package/xata-http/driver.cjs +7 -2
  212. package/xata-http/driver.cjs.map +1 -1
  213. package/xata-http/driver.d.cts +2 -0
  214. package/xata-http/driver.d.ts +2 -0
  215. package/xata-http/driver.js +7 -2
  216. package/xata-http/driver.js.map +1 -1
  217. package/xata-http/session.cjs +21 -7
  218. package/xata-http/session.cjs.map +1 -1
  219. package/xata-http/session.d.cts +12 -3
  220. package/xata-http/session.d.ts +12 -3
  221. package/xata-http/session.js +21 -7
  222. package/xata-http/session.js.map +1 -1
@@ -0,0 +1,22 @@
1
+ export type CacheConfig = {
2
+ /**
3
+ * expire time, in seconds (a positive integer)
4
+ */
5
+ ex?: number;
6
+ /**
7
+ * expire time, in milliseconds (a positive integer).
8
+ */
9
+ px?: number;
10
+ /**
11
+ * Unix time at which the key will expire, in seconds (a positive integer).
12
+ */
13
+ exat?: number;
14
+ /**
15
+ * Unix time at which the key will expire, in milliseconds (a positive integer)
16
+ */
17
+ pxat?: number;
18
+ /**
19
+ * Retain the time to live associated with the key.
20
+ */
21
+ keepTtl?: boolean;
22
+ };
@@ -0,0 +1,22 @@
1
+ export type CacheConfig = {
2
+ /**
3
+ * expire time, in seconds (a positive integer)
4
+ */
5
+ ex?: number;
6
+ /**
7
+ * expire time, in milliseconds (a positive integer).
8
+ */
9
+ px?: number;
10
+ /**
11
+ * Unix time at which the key will expire, in seconds (a positive integer).
12
+ */
13
+ exat?: number;
14
+ /**
15
+ * Unix time at which the key will expire, in milliseconds (a positive integer)
16
+ */
17
+ pxat?: number;
18
+ /**
19
+ * Retain the time to live associated with the key.
20
+ */
21
+ keepTtl?: boolean;
22
+ };
@@ -0,0 +1 @@
1
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -0,0 +1,98 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var cache_exports = {};
20
+ __export(cache_exports, {
21
+ UpstashCache: () => UpstashCache,
22
+ upstashCache: () => upstashCache
23
+ });
24
+ module.exports = __toCommonJS(cache_exports);
25
+ var import_redis = require("@upstash/redis");
26
+ var import_core = require("../core/index.cjs");
27
+ var import_entity = require("../../entity.cjs");
28
+ var import__ = require("../../index.cjs");
29
+ class UpstashCache extends import_core.Cache {
30
+ constructor(redis, config, useGlobally) {
31
+ super();
32
+ this.redis = redis;
33
+ this.useGlobally = useGlobally;
34
+ this.internalConfig = this.toInternalConfig(config);
35
+ }
36
+ static [import_entity.entityKind] = "UpstashCache";
37
+ internalConfig;
38
+ strategy() {
39
+ return this.useGlobally ? "all" : "explicit";
40
+ }
41
+ toInternalConfig(config) {
42
+ return config ? {
43
+ ex: config.ex,
44
+ exat: config.exat,
45
+ px: config.px,
46
+ pxat: config.pxat,
47
+ keepTtl: config.keepTtl
48
+ } : void 0;
49
+ }
50
+ async get(key) {
51
+ const res = (await this.redis.get(key)) ?? void 0;
52
+ return res;
53
+ }
54
+ async put(key, response, tables, config) {
55
+ await this.redis.set(key, response, config ? this.toInternalConfig(config) : this.internalConfig);
56
+ for (const table of tables) {
57
+ await this.redis.sadd(table, key);
58
+ }
59
+ }
60
+ async onMutate(params) {
61
+ const tagsArray = params.tags ? Array.isArray(params.tags) ? params.tags : [params.tags] : [];
62
+ const tablesArray = params.tables ? Array.isArray(params.tables) ? params.tables : [params.tables] : [];
63
+ const keysToDelete = /* @__PURE__ */ new Set();
64
+ for (const table of tablesArray) {
65
+ const tableName = (0, import_entity.is)(table, import__.Table) ? table[import__.OriginalName] : table;
66
+ const keys = await this.redis.smembers(tableName);
67
+ for (const key of keys)
68
+ keysToDelete.add(key);
69
+ }
70
+ if (keysToDelete.size > 0 || tagsArray.length > 0) {
71
+ const pipeline = this.redis.pipeline();
72
+ for (const tag of tagsArray) {
73
+ pipeline.del(tag);
74
+ }
75
+ for (const key of keysToDelete) {
76
+ pipeline.del(key);
77
+ for (const table of tablesArray) {
78
+ const tableName = (0, import_entity.is)(table, import__.Table) ? table[import__.OriginalName] : table;
79
+ pipeline.srem(tableName, key);
80
+ }
81
+ }
82
+ await pipeline.exec();
83
+ }
84
+ }
85
+ }
86
+ function upstashCache({ url, token, config, global = false }) {
87
+ const redis = new import_redis.Redis({
88
+ url,
89
+ token
90
+ });
91
+ return new UpstashCache(redis, config, global);
92
+ }
93
+ // Annotate the CommonJS export names for ESM import in node:
94
+ 0 && (module.exports = {
95
+ UpstashCache,
96
+ upstashCache
97
+ });
98
+ //# sourceMappingURL=cache.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/cache/upstash/cache.ts"],"sourcesContent":["import type { SetCommandOptions } from '@upstash/redis';\nimport { Redis } from '@upstash/redis';\nimport type { MutationOption } from '~/cache/core/index.ts';\nimport { Cache } from '~/cache/core/index.ts';\nimport { entityKind, is } from '~/entity.ts';\nimport { OriginalName, Table } from '~/index.ts';\nimport type { CacheConfig } from '../core/types.ts';\n\nexport class UpstashCache extends Cache {\n\tstatic override readonly [entityKind]: string = 'UpstashCache';\n\n\tprivate internalConfig?: SetCommandOptions;\n\n\tconstructor(public redis: Redis, config?: CacheConfig, protected useGlobally?: boolean) {\n\t\tsuper();\n\t\tthis.internalConfig = this.toInternalConfig(config);\n\t}\n\n\tpublic strategy() {\n\t\treturn this.useGlobally ? 'all' : 'explicit';\n\t}\n\n\tprivate toInternalConfig(config?: CacheConfig) {\n\t\treturn config\n\t\t\t? {\n\t\t\t\tex: config.ex,\n\t\t\t\texat: config.exat,\n\t\t\t\tpx: config.px,\n\t\t\t\tpxat: config.pxat,\n\t\t\t\tkeepTtl: config.keepTtl,\n\t\t\t} as SetCommandOptions\n\t\t\t: undefined;\n\t}\n\n\toverride async get(key: string) {\n\t\tconst res = await this.redis.get<any[]>(key) ?? undefined;\n\t\treturn res;\n\t}\n\n\toverride async put(key: string, response: any, tables: string[], config?: CacheConfig) {\n\t\tawait this.redis.set(key, response, config ? this.toInternalConfig(config) : this.internalConfig);\n\t\tfor (const table of tables) {\n\t\t\tawait this.redis.sadd(table, key);\n\t\t}\n\t}\n\n\toverride async onMutate(params: MutationOption) {\n\t\tconst tagsArray = params.tags ? Array.isArray(params.tags) ? params.tags : [params.tags] : [];\n\t\tconst tablesArray = params.tables ? Array.isArray(params.tables) ? params.tables : [params.tables] : [];\n\n\t\tconst keysToDelete = new Set<string>();\n\n\t\tfor (const table of tablesArray) {\n\t\t\tconst tableName = is(table, Table) ? table[OriginalName] : table as string;\n\t\t\tconst keys = await this.redis.smembers(tableName);\n\t\t\tfor (const key of keys) keysToDelete.add(key); // Add to the set\n\t\t}\n\n\t\tif (keysToDelete.size > 0 || tagsArray.length > 0) {\n\t\t\tconst pipeline = this.redis.pipeline();\n\n\t\t\tfor (const tag of tagsArray) {\n\t\t\t\tpipeline.del(tag);\n\t\t\t}\n\n\t\t\tfor (const key of keysToDelete) {\n\t\t\t\tpipeline.del(key);\n\t\t\t\tfor (const table of tablesArray) {\n\t\t\t\t\tconst tableName = is(table, Table) ? table[OriginalName] : table as string;\n\t\t\t\t\tpipeline.srem(tableName, key);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tawait pipeline.exec();\n\t\t}\n\t}\n}\n\nexport function upstashCache(\n\t{ url, token, config, global = false }: { url: string; token: string; config?: CacheConfig; global?: boolean },\n): UpstashCache {\n\tconst redis = new Redis({\n\t\turl,\n\t\ttoken,\n\t});\n\n\treturn new UpstashCache(redis, config, global);\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,mBAAsB;AAEtB,kBAAsB;AACtB,oBAA+B;AAC/B,eAAoC;AAG7B,MAAM,qBAAqB,kBAAM;AAAA,EAKvC,YAAmB,OAAc,QAAgC,aAAuB;AACvF,UAAM;AADY;AAA8C;AAEhE,SAAK,iBAAiB,KAAK,iBAAiB,MAAM;AAAA,EACnD;AAAA,EAPA,QAA0B,wBAAU,IAAY;AAAA,EAExC;AAAA,EAOD,WAAW;AACjB,WAAO,KAAK,cAAc,QAAQ;AAAA,EACnC;AAAA,EAEQ,iBAAiB,QAAsB;AAC9C,WAAO,SACJ;AAAA,MACD,IAAI,OAAO;AAAA,MACX,MAAM,OAAO;AAAA,MACb,IAAI,OAAO;AAAA,MACX,MAAM,OAAO;AAAA,MACb,SAAS,OAAO;AAAA,IACjB,IACE;AAAA,EACJ;AAAA,EAEA,MAAe,IAAI,KAAa;AAC/B,UAAM,MAAM,MAAM,KAAK,MAAM,IAAW,GAAG,KAAK;AAChD,WAAO;AAAA,EACR;AAAA,EAEA,MAAe,IAAI,KAAa,UAAe,QAAkB,QAAsB;AACtF,UAAM,KAAK,MAAM,IAAI,KAAK,UAAU,SAAS,KAAK,iBAAiB,MAAM,IAAI,KAAK,cAAc;AAChG,eAAW,SAAS,QAAQ;AAC3B,YAAM,KAAK,MAAM,KAAK,OAAO,GAAG;AAAA,IACjC;AAAA,EACD;AAAA,EAEA,MAAe,SAAS,QAAwB;AAC/C,UAAM,YAAY,OAAO,OAAO,MAAM,QAAQ,OAAO,IAAI,IAAI,OAAO,OAAO,CAAC,OAAO,IAAI,IAAI,CAAC;AAC5F,UAAM,cAAc,OAAO,SAAS,MAAM,QAAQ,OAAO,MAAM,IAAI,OAAO,SAAS,CAAC,OAAO,MAAM,IAAI,CAAC;AAEtG,UAAM,eAAe,oBAAI,IAAY;AAErC,eAAW,SAAS,aAAa;AAChC,YAAM,gBAAY,kBAAG,OAAO,cAAK,IAAI,MAAM,qBAAY,IAAI;AAC3D,YAAM,OAAO,MAAM,KAAK,MAAM,SAAS,SAAS;AAChD,iBAAW,OAAO;AAAM,qBAAa,IAAI,GAAG;AAAA,IAC7C;AAEA,QAAI,aAAa,OAAO,KAAK,UAAU,SAAS,GAAG;AAClD,YAAM,WAAW,KAAK,MAAM,SAAS;AAErC,iBAAW,OAAO,WAAW;AAC5B,iBAAS,IAAI,GAAG;AAAA,MACjB;AAEA,iBAAW,OAAO,cAAc;AAC/B,iBAAS,IAAI,GAAG;AAChB,mBAAW,SAAS,aAAa;AAChC,gBAAM,gBAAY,kBAAG,OAAO,cAAK,IAAI,MAAM,qBAAY,IAAI;AAC3D,mBAAS,KAAK,WAAW,GAAG;AAAA,QAC7B;AAAA,MACD;AAEA,YAAM,SAAS,KAAK;AAAA,IACrB;AAAA,EACD;AACD;AAEO,SAAS,aACf,EAAE,KAAK,OAAO,QAAQ,SAAS,MAAM,GACtB;AACf,QAAM,QAAQ,IAAI,mBAAM;AAAA,IACvB;AAAA,IACA;AAAA,EACD,CAAC;AAED,SAAO,IAAI,aAAa,OAAO,QAAQ,MAAM;AAC9C;","names":[]}
@@ -0,0 +1,23 @@
1
+ import { Redis } from '@upstash/redis';
2
+ import type { MutationOption } from "../core/index.cjs";
3
+ import { Cache } from "../core/index.cjs";
4
+ import { entityKind } from "../../entity.cjs";
5
+ import type { CacheConfig } from "../core/types.cjs";
6
+ export declare class UpstashCache extends Cache {
7
+ redis: Redis;
8
+ protected useGlobally?: boolean | undefined;
9
+ static readonly [entityKind]: string;
10
+ private internalConfig?;
11
+ constructor(redis: Redis, config?: CacheConfig, useGlobally?: boolean | undefined);
12
+ strategy(): "all" | "explicit";
13
+ private toInternalConfig;
14
+ get(key: string): Promise<any[] | undefined>;
15
+ put(key: string, response: any, tables: string[], config?: CacheConfig): Promise<void>;
16
+ onMutate(params: MutationOption): Promise<void>;
17
+ }
18
+ export declare function upstashCache({ url, token, config, global }: {
19
+ url: string;
20
+ token: string;
21
+ config?: CacheConfig;
22
+ global?: boolean;
23
+ }): UpstashCache;
@@ -0,0 +1,23 @@
1
+ import { Redis } from '@upstash/redis';
2
+ import type { MutationOption } from "../core/index.js";
3
+ import { Cache } from "../core/index.js";
4
+ import { entityKind } from "../../entity.js";
5
+ import type { CacheConfig } from "../core/types.js";
6
+ export declare class UpstashCache extends Cache {
7
+ redis: Redis;
8
+ protected useGlobally?: boolean | undefined;
9
+ static readonly [entityKind]: string;
10
+ private internalConfig?;
11
+ constructor(redis: Redis, config?: CacheConfig, useGlobally?: boolean | undefined);
12
+ strategy(): "all" | "explicit";
13
+ private toInternalConfig;
14
+ get(key: string): Promise<any[] | undefined>;
15
+ put(key: string, response: any, tables: string[], config?: CacheConfig): Promise<void>;
16
+ onMutate(params: MutationOption): Promise<void>;
17
+ }
18
+ export declare function upstashCache({ url, token, config, global }: {
19
+ url: string;
20
+ token: string;
21
+ config?: CacheConfig;
22
+ global?: boolean;
23
+ }): UpstashCache;
@@ -0,0 +1,73 @@
1
+ import { Redis } from "@upstash/redis";
2
+ import { Cache } from "../core/index.js";
3
+ import { entityKind, is } from "../../entity.js";
4
+ import { OriginalName, Table } from "../../index.js";
5
+ class UpstashCache extends Cache {
6
+ constructor(redis, config, useGlobally) {
7
+ super();
8
+ this.redis = redis;
9
+ this.useGlobally = useGlobally;
10
+ this.internalConfig = this.toInternalConfig(config);
11
+ }
12
+ static [entityKind] = "UpstashCache";
13
+ internalConfig;
14
+ strategy() {
15
+ return this.useGlobally ? "all" : "explicit";
16
+ }
17
+ toInternalConfig(config) {
18
+ return config ? {
19
+ ex: config.ex,
20
+ exat: config.exat,
21
+ px: config.px,
22
+ pxat: config.pxat,
23
+ keepTtl: config.keepTtl
24
+ } : void 0;
25
+ }
26
+ async get(key) {
27
+ const res = (await this.redis.get(key)) ?? void 0;
28
+ return res;
29
+ }
30
+ async put(key, response, tables, config) {
31
+ await this.redis.set(key, response, config ? this.toInternalConfig(config) : this.internalConfig);
32
+ for (const table of tables) {
33
+ await this.redis.sadd(table, key);
34
+ }
35
+ }
36
+ async onMutate(params) {
37
+ const tagsArray = params.tags ? Array.isArray(params.tags) ? params.tags : [params.tags] : [];
38
+ const tablesArray = params.tables ? Array.isArray(params.tables) ? params.tables : [params.tables] : [];
39
+ const keysToDelete = /* @__PURE__ */ new Set();
40
+ for (const table of tablesArray) {
41
+ const tableName = is(table, Table) ? table[OriginalName] : table;
42
+ const keys = await this.redis.smembers(tableName);
43
+ for (const key of keys)
44
+ keysToDelete.add(key);
45
+ }
46
+ if (keysToDelete.size > 0 || tagsArray.length > 0) {
47
+ const pipeline = this.redis.pipeline();
48
+ for (const tag of tagsArray) {
49
+ pipeline.del(tag);
50
+ }
51
+ for (const key of keysToDelete) {
52
+ pipeline.del(key);
53
+ for (const table of tablesArray) {
54
+ const tableName = is(table, Table) ? table[OriginalName] : table;
55
+ pipeline.srem(tableName, key);
56
+ }
57
+ }
58
+ await pipeline.exec();
59
+ }
60
+ }
61
+ }
62
+ function upstashCache({ url, token, config, global = false }) {
63
+ const redis = new Redis({
64
+ url,
65
+ token
66
+ });
67
+ return new UpstashCache(redis, config, global);
68
+ }
69
+ export {
70
+ UpstashCache,
71
+ upstashCache
72
+ };
73
+ //# sourceMappingURL=cache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/cache/upstash/cache.ts"],"sourcesContent":["import type { SetCommandOptions } from '@upstash/redis';\nimport { Redis } from '@upstash/redis';\nimport type { MutationOption } from '~/cache/core/index.ts';\nimport { Cache } from '~/cache/core/index.ts';\nimport { entityKind, is } from '~/entity.ts';\nimport { OriginalName, Table } from '~/index.ts';\nimport type { CacheConfig } from '../core/types.ts';\n\nexport class UpstashCache extends Cache {\n\tstatic override readonly [entityKind]: string = 'UpstashCache';\n\n\tprivate internalConfig?: SetCommandOptions;\n\n\tconstructor(public redis: Redis, config?: CacheConfig, protected useGlobally?: boolean) {\n\t\tsuper();\n\t\tthis.internalConfig = this.toInternalConfig(config);\n\t}\n\n\tpublic strategy() {\n\t\treturn this.useGlobally ? 'all' : 'explicit';\n\t}\n\n\tprivate toInternalConfig(config?: CacheConfig) {\n\t\treturn config\n\t\t\t? {\n\t\t\t\tex: config.ex,\n\t\t\t\texat: config.exat,\n\t\t\t\tpx: config.px,\n\t\t\t\tpxat: config.pxat,\n\t\t\t\tkeepTtl: config.keepTtl,\n\t\t\t} as SetCommandOptions\n\t\t\t: undefined;\n\t}\n\n\toverride async get(key: string) {\n\t\tconst res = await this.redis.get<any[]>(key) ?? undefined;\n\t\treturn res;\n\t}\n\n\toverride async put(key: string, response: any, tables: string[], config?: CacheConfig) {\n\t\tawait this.redis.set(key, response, config ? this.toInternalConfig(config) : this.internalConfig);\n\t\tfor (const table of tables) {\n\t\t\tawait this.redis.sadd(table, key);\n\t\t}\n\t}\n\n\toverride async onMutate(params: MutationOption) {\n\t\tconst tagsArray = params.tags ? Array.isArray(params.tags) ? params.tags : [params.tags] : [];\n\t\tconst tablesArray = params.tables ? Array.isArray(params.tables) ? params.tables : [params.tables] : [];\n\n\t\tconst keysToDelete = new Set<string>();\n\n\t\tfor (const table of tablesArray) {\n\t\t\tconst tableName = is(table, Table) ? table[OriginalName] : table as string;\n\t\t\tconst keys = await this.redis.smembers(tableName);\n\t\t\tfor (const key of keys) keysToDelete.add(key); // Add to the set\n\t\t}\n\n\t\tif (keysToDelete.size > 0 || tagsArray.length > 0) {\n\t\t\tconst pipeline = this.redis.pipeline();\n\n\t\t\tfor (const tag of tagsArray) {\n\t\t\t\tpipeline.del(tag);\n\t\t\t}\n\n\t\t\tfor (const key of keysToDelete) {\n\t\t\t\tpipeline.del(key);\n\t\t\t\tfor (const table of tablesArray) {\n\t\t\t\t\tconst tableName = is(table, Table) ? table[OriginalName] : table as string;\n\t\t\t\t\tpipeline.srem(tableName, key);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tawait pipeline.exec();\n\t\t}\n\t}\n}\n\nexport function upstashCache(\n\t{ url, token, config, global = false }: { url: string; token: string; config?: CacheConfig; global?: boolean },\n): UpstashCache {\n\tconst redis = new Redis({\n\t\turl,\n\t\ttoken,\n\t});\n\n\treturn new UpstashCache(redis, config, global);\n}\n"],"mappings":"AACA,SAAS,aAAa;AAEtB,SAAS,aAAa;AACtB,SAAS,YAAY,UAAU;AAC/B,SAAS,cAAc,aAAa;AAG7B,MAAM,qBAAqB,MAAM;AAAA,EAKvC,YAAmB,OAAc,QAAgC,aAAuB;AACvF,UAAM;AADY;AAA8C;AAEhE,SAAK,iBAAiB,KAAK,iBAAiB,MAAM;AAAA,EACnD;AAAA,EAPA,QAA0B,UAAU,IAAY;AAAA,EAExC;AAAA,EAOD,WAAW;AACjB,WAAO,KAAK,cAAc,QAAQ;AAAA,EACnC;AAAA,EAEQ,iBAAiB,QAAsB;AAC9C,WAAO,SACJ;AAAA,MACD,IAAI,OAAO;AAAA,MACX,MAAM,OAAO;AAAA,MACb,IAAI,OAAO;AAAA,MACX,MAAM,OAAO;AAAA,MACb,SAAS,OAAO;AAAA,IACjB,IACE;AAAA,EACJ;AAAA,EAEA,MAAe,IAAI,KAAa;AAC/B,UAAM,MAAM,MAAM,KAAK,MAAM,IAAW,GAAG,KAAK;AAChD,WAAO;AAAA,EACR;AAAA,EAEA,MAAe,IAAI,KAAa,UAAe,QAAkB,QAAsB;AACtF,UAAM,KAAK,MAAM,IAAI,KAAK,UAAU,SAAS,KAAK,iBAAiB,MAAM,IAAI,KAAK,cAAc;AAChG,eAAW,SAAS,QAAQ;AAC3B,YAAM,KAAK,MAAM,KAAK,OAAO,GAAG;AAAA,IACjC;AAAA,EACD;AAAA,EAEA,MAAe,SAAS,QAAwB;AAC/C,UAAM,YAAY,OAAO,OAAO,MAAM,QAAQ,OAAO,IAAI,IAAI,OAAO,OAAO,CAAC,OAAO,IAAI,IAAI,CAAC;AAC5F,UAAM,cAAc,OAAO,SAAS,MAAM,QAAQ,OAAO,MAAM,IAAI,OAAO,SAAS,CAAC,OAAO,MAAM,IAAI,CAAC;AAEtG,UAAM,eAAe,oBAAI,IAAY;AAErC,eAAW,SAAS,aAAa;AAChC,YAAM,YAAY,GAAG,OAAO,KAAK,IAAI,MAAM,YAAY,IAAI;AAC3D,YAAM,OAAO,MAAM,KAAK,MAAM,SAAS,SAAS;AAChD,iBAAW,OAAO;AAAM,qBAAa,IAAI,GAAG;AAAA,IAC7C;AAEA,QAAI,aAAa,OAAO,KAAK,UAAU,SAAS,GAAG;AAClD,YAAM,WAAW,KAAK,MAAM,SAAS;AAErC,iBAAW,OAAO,WAAW;AAC5B,iBAAS,IAAI,GAAG;AAAA,MACjB;AAEA,iBAAW,OAAO,cAAc;AAC/B,iBAAS,IAAI,GAAG;AAChB,mBAAW,SAAS,aAAa;AAChC,gBAAM,YAAY,GAAG,OAAO,KAAK,IAAI,MAAM,YAAY,IAAI;AAC3D,mBAAS,KAAK,WAAW,GAAG;AAAA,QAC7B;AAAA,MACD;AAEA,YAAM,SAAS,KAAK;AAAA,IACrB;AAAA,EACD;AACD;AAEO,SAAS,aACf,EAAE,KAAK,OAAO,QAAQ,SAAS,MAAM,GACtB;AACf,QAAM,QAAQ,IAAI,MAAM;AAAA,IACvB;AAAA,IACA;AAAA,EACD,CAAC;AAED,SAAO,IAAI,aAAa,OAAO,QAAQ,MAAM;AAC9C;","names":[]}
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __copyProps = (to, from, except, desc) => {
7
+ if (from && typeof from === "object" || typeof from === "function") {
8
+ for (let key of __getOwnPropNames(from))
9
+ if (!__hasOwnProp.call(to, key) && key !== except)
10
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
11
+ }
12
+ return to;
13
+ };
14
+ var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default"));
15
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
16
+ var upstash_exports = {};
17
+ module.exports = __toCommonJS(upstash_exports);
18
+ __reExport(upstash_exports, require("./cache.cjs"), module.exports);
19
+ // Annotate the CommonJS export names for ESM import in node:
20
+ 0 && (module.exports = {
21
+ ...require("./cache.cjs")
22
+ });
23
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/cache/upstash/index.ts"],"sourcesContent":["export * from './cache.ts';\n"],"mappings":";;;;;;;;;;;;;;;AAAA;AAAA;AAAA,4BAAc,uBAAd;","names":[]}
@@ -0,0 +1 @@
1
+ export * from "./cache.cjs";
@@ -0,0 +1 @@
1
+ export * from "./cache.js";
@@ -0,0 +1,2 @@
1
+ export * from "./cache.js";
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/cache/upstash/index.ts"],"sourcesContent":["export * from './cache.ts';\n"],"mappings":"AAAA,cAAc;","names":[]}
@@ -22,8 +22,8 @@ __export(neon_identity_exports, {
22
22
  });
23
23
  module.exports = __toCommonJS(neon_identity_exports);
24
24
  var import_pg_core = require("../pg-core/index.cjs");
25
- const neonIdentitySchema = (0, import_pg_core.pgSchema)("neon_identity");
26
- const usersSync = neonIdentitySchema.table("users_sync", {
25
+ const neonAuthSchema = (0, import_pg_core.pgSchema)("neon_auth");
26
+ const usersSync = neonAuthSchema.table("users_sync", {
27
27
  rawJson: (0, import_pg_core.jsonb)("raw_json").notNull(),
28
28
  id: (0, import_pg_core.text)().primaryKey().notNull(),
29
29
  name: (0, import_pg_core.text)(),
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/neon/neon-identity.ts"],"sourcesContent":["import { jsonb, pgSchema, text, timestamp } from '~/pg-core/index.ts';\n\nconst neonIdentitySchema = pgSchema('neon_identity');\n\n/**\n * Table schema of the `users_sync` table used by Neon Identity.\n * This table automatically synchronizes and stores user data from external authentication providers.\n *\n * @schema neon_identity\n * @table users_sync\n */\nexport const usersSync = neonIdentitySchema.table('users_sync', {\n\trawJson: jsonb('raw_json').notNull(),\n\tid: text().primaryKey().notNull(),\n\tname: text(),\n\temail: text(),\n\tcreatedAt: timestamp('created_at', { withTimezone: true, mode: 'string' }),\n\tdeletedAt: timestamp('deleted_at', { withTimezone: true, mode: 'string' }),\n});\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qBAAiD;AAEjD,MAAM,yBAAqB,yBAAS,eAAe;AAS5C,MAAM,YAAY,mBAAmB,MAAM,cAAc;AAAA,EAC/D,aAAS,sBAAM,UAAU,EAAE,QAAQ;AAAA,EACnC,QAAI,qBAAK,EAAE,WAAW,EAAE,QAAQ;AAAA,EAChC,UAAM,qBAAK;AAAA,EACX,WAAO,qBAAK;AAAA,EACZ,eAAW,0BAAU,cAAc,EAAE,cAAc,MAAM,MAAM,SAAS,CAAC;AAAA,EACzE,eAAW,0BAAU,cAAc,EAAE,cAAc,MAAM,MAAM,SAAS,CAAC;AAC1E,CAAC;","names":[]}
1
+ {"version":3,"sources":["../../src/neon/neon-identity.ts"],"sourcesContent":["import { jsonb, pgSchema, text, timestamp } from '~/pg-core/index.ts';\n\nconst neonAuthSchema = pgSchema('neon_auth');\n\n/**\n * Table schema of the `users_sync` table used by Neon Auth.\n * This table automatically synchronizes and stores user data from external authentication providers.\n *\n * @schema neon_auth\n * @table users_sync\n */\nexport const usersSync = neonAuthSchema.table('users_sync', {\n\trawJson: jsonb('raw_json').notNull(),\n\tid: text().primaryKey().notNull(),\n\tname: text(),\n\temail: text(),\n\tcreatedAt: timestamp('created_at', { withTimezone: true, mode: 'string' }),\n\tdeletedAt: timestamp('deleted_at', { withTimezone: true, mode: 'string' }),\n});\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qBAAiD;AAEjD,MAAM,qBAAiB,yBAAS,WAAW;AASpC,MAAM,YAAY,eAAe,MAAM,cAAc;AAAA,EAC3D,aAAS,sBAAM,UAAU,EAAE,QAAQ;AAAA,EACnC,QAAI,qBAAK,EAAE,WAAW,EAAE,QAAQ;AAAA,EAChC,UAAM,qBAAK;AAAA,EACX,WAAO,qBAAK;AAAA,EACZ,eAAW,0BAAU,cAAc,EAAE,cAAc,MAAM,MAAM,SAAS,CAAC;AAAA,EACzE,eAAW,0BAAU,cAAc,EAAE,cAAc,MAAM,MAAM,SAAS,CAAC;AAC1E,CAAC;","names":[]}
@@ -1,13 +1,13 @@
1
1
  /**
2
- * Table schema of the `users_sync` table used by Neon Identity.
2
+ * Table schema of the `users_sync` table used by Neon Auth.
3
3
  * This table automatically synchronizes and stores user data from external authentication providers.
4
4
  *
5
- * @schema neon_identity
5
+ * @schema neon_auth
6
6
  * @table users_sync
7
7
  */
8
8
  export declare const usersSync: import("../pg-core/index.ts").PgTableWithColumns<{
9
9
  name: "users_sync";
10
- schema: "neon_identity";
10
+ schema: "neon_auth";
11
11
  columns: {
12
12
  rawJson: import("../pg-core/index.ts").PgColumn<{
13
13
  name: "raw_json";
@@ -1,13 +1,13 @@
1
1
  /**
2
- * Table schema of the `users_sync` table used by Neon Identity.
2
+ * Table schema of the `users_sync` table used by Neon Auth.
3
3
  * This table automatically synchronizes and stores user data from external authentication providers.
4
4
  *
5
- * @schema neon_identity
5
+ * @schema neon_auth
6
6
  * @table users_sync
7
7
  */
8
8
  export declare const usersSync: import("../pg-core/index.js").PgTableWithColumns<{
9
9
  name: "users_sync";
10
- schema: "neon_identity";
10
+ schema: "neon_auth";
11
11
  columns: {
12
12
  rawJson: import("../pg-core/index.js").PgColumn<{
13
13
  name: "raw_json";
@@ -1,6 +1,6 @@
1
1
  import { jsonb, pgSchema, text, timestamp } from "../pg-core/index.js";
2
- const neonIdentitySchema = pgSchema("neon_identity");
3
- const usersSync = neonIdentitySchema.table("users_sync", {
2
+ const neonAuthSchema = pgSchema("neon_auth");
3
+ const usersSync = neonAuthSchema.table("users_sync", {
4
4
  rawJson: jsonb("raw_json").notNull(),
5
5
  id: text().primaryKey().notNull(),
6
6
  name: text(),
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/neon/neon-identity.ts"],"sourcesContent":["import { jsonb, pgSchema, text, timestamp } from '~/pg-core/index.ts';\n\nconst neonIdentitySchema = pgSchema('neon_identity');\n\n/**\n * Table schema of the `users_sync` table used by Neon Identity.\n * This table automatically synchronizes and stores user data from external authentication providers.\n *\n * @schema neon_identity\n * @table users_sync\n */\nexport const usersSync = neonIdentitySchema.table('users_sync', {\n\trawJson: jsonb('raw_json').notNull(),\n\tid: text().primaryKey().notNull(),\n\tname: text(),\n\temail: text(),\n\tcreatedAt: timestamp('created_at', { withTimezone: true, mode: 'string' }),\n\tdeletedAt: timestamp('deleted_at', { withTimezone: true, mode: 'string' }),\n});\n"],"mappings":"AAAA,SAAS,OAAO,UAAU,MAAM,iBAAiB;AAEjD,MAAM,qBAAqB,SAAS,eAAe;AAS5C,MAAM,YAAY,mBAAmB,MAAM,cAAc;AAAA,EAC/D,SAAS,MAAM,UAAU,EAAE,QAAQ;AAAA,EACnC,IAAI,KAAK,EAAE,WAAW,EAAE,QAAQ;AAAA,EAChC,MAAM,KAAK;AAAA,EACX,OAAO,KAAK;AAAA,EACZ,WAAW,UAAU,cAAc,EAAE,cAAc,MAAM,MAAM,SAAS,CAAC;AAAA,EACzE,WAAW,UAAU,cAAc,EAAE,cAAc,MAAM,MAAM,SAAS,CAAC;AAC1E,CAAC;","names":[]}
1
+ {"version":3,"sources":["../../src/neon/neon-identity.ts"],"sourcesContent":["import { jsonb, pgSchema, text, timestamp } from '~/pg-core/index.ts';\n\nconst neonAuthSchema = pgSchema('neon_auth');\n\n/**\n * Table schema of the `users_sync` table used by Neon Auth.\n * This table automatically synchronizes and stores user data from external authentication providers.\n *\n * @schema neon_auth\n * @table users_sync\n */\nexport const usersSync = neonAuthSchema.table('users_sync', {\n\trawJson: jsonb('raw_json').notNull(),\n\tid: text().primaryKey().notNull(),\n\tname: text(),\n\temail: text(),\n\tcreatedAt: timestamp('created_at', { withTimezone: true, mode: 'string' }),\n\tdeletedAt: timestamp('deleted_at', { withTimezone: true, mode: 'string' }),\n});\n"],"mappings":"AAAA,SAAS,OAAO,UAAU,MAAM,iBAAiB;AAEjD,MAAM,iBAAiB,SAAS,WAAW;AASpC,MAAM,YAAY,eAAe,MAAM,cAAc;AAAA,EAC3D,SAAS,MAAM,UAAU,EAAE,QAAQ;AAAA,EACnC,IAAI,KAAK,EAAE,WAAW,EAAE,QAAQ;AAAA,EAChC,MAAM,KAAK;AAAA,EACX,OAAO,KAAK;AAAA,EACZ,WAAW,UAAU,cAAc,EAAE,cAAc,MAAM,MAAM,SAAS,CAAC;AAAA,EACzE,WAAW,UAAU,cAAc,EAAE,cAAc,MAAM,MAAM,SAAS,CAAC;AAC1E,CAAC;","names":[]}
@@ -40,7 +40,10 @@ class NeonHttpDriver {
40
40
  }
41
41
  static [import_entity.entityKind] = "NeonHttpDriver";
42
42
  createSession(schema) {
43
- return new import_session.NeonHttpSession(this.client, this.dialect, schema, { logger: this.options.logger });
43
+ return new import_session.NeonHttpSession(this.client, this.dialect, schema, {
44
+ logger: this.options.logger,
45
+ cache: this.options.cache
46
+ });
44
47
  }
45
48
  initMappers() {
46
49
  import_serverless.types.setTypeParser(import_serverless.types.builtins.TIMESTAMPTZ, (val) => val);
@@ -106,7 +109,7 @@ function construct(client, config = {}) {
106
109
  tableNamesMap: tablesConfig.tableNamesMap
107
110
  };
108
111
  }
109
- const driver = new NeonHttpDriver(client, dialect, { logger });
112
+ const driver = new NeonHttpDriver(client, dialect, { logger, cache: config.cache });
110
113
  const session = driver.createSession(schema);
111
114
  const db = new NeonHttpDatabase(
112
115
  dialect,
@@ -114,6 +117,10 @@ function construct(client, config = {}) {
114
117
  schema
115
118
  );
116
119
  db.$client = client;
120
+ db.$cache = config.cache;
121
+ if (db.$cache) {
122
+ db.$cache["invalidate"] = config.cache?.onMutate;
123
+ }
117
124
  return db;
118
125
  }
119
126
  function drizzle(...params) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/neon-http/driver.ts"],"sourcesContent":["import type { HTTPQueryOptions, HTTPTransactionOptions, NeonQueryFunction } from '@neondatabase/serverless';\nimport { neon, types } from '@neondatabase/serverless';\nimport type { BatchItem, BatchResponse } from '~/batch.ts';\nimport { entityKind } from '~/entity.ts';\nimport type { Logger } from '~/logger.ts';\nimport { DefaultLogger } from '~/logger.ts';\nimport { PgDatabase } from '~/pg-core/db.ts';\nimport { PgDialect } from '~/pg-core/dialect.ts';\nimport { createTableRelationsHelpers, extractTablesRelationalConfig } from '~/relations.ts';\nimport type { ExtractTablesWithRelations, RelationalSchemaConfig, TablesRelationalConfig } from '~/relations.ts';\nimport { type DrizzleConfig, isConfig } from '~/utils.ts';\nimport { type NeonHttpClient, type NeonHttpQueryResultHKT, NeonHttpSession } from './session.ts';\n\nexport interface NeonDriverOptions {\n\tlogger?: Logger;\n}\n\nexport class NeonHttpDriver {\n\tstatic readonly [entityKind]: string = 'NeonHttpDriver';\n\n\tconstructor(\n\t\tprivate client: NeonHttpClient,\n\t\tprivate dialect: PgDialect,\n\t\tprivate options: NeonDriverOptions = {},\n\t) {\n\t\tthis.initMappers();\n\t}\n\n\tcreateSession(\n\t\tschema: RelationalSchemaConfig<TablesRelationalConfig> | undefined,\n\t): NeonHttpSession<Record<string, unknown>, TablesRelationalConfig> {\n\t\treturn new NeonHttpSession(this.client, this.dialect, schema, { logger: this.options.logger });\n\t}\n\n\tinitMappers() {\n\t\ttypes.setTypeParser(types.builtins.TIMESTAMPTZ, (val) => val);\n\t\ttypes.setTypeParser(types.builtins.TIMESTAMP, (val) => val);\n\t\ttypes.setTypeParser(types.builtins.DATE, (val) => val);\n\t\ttypes.setTypeParser(types.builtins.INTERVAL, (val) => val);\n\t}\n}\n\nfunction wrap<T extends object>(\n\ttarget: T,\n\ttoken: Exclude<HTTPQueryOptions<true, true>['authToken'], undefined>,\n\tcb: (target: any, p: string | symbol, res: any) => any,\n\tdeep?: boolean,\n) {\n\treturn new Proxy(target, {\n\t\tget(target, p) {\n\t\t\tconst element = target[p as keyof typeof p];\n\t\t\tif (typeof element !== 'function' && (typeof element !== 'object' || element === null)) return element;\n\n\t\t\tif (deep) return wrap(element, token, cb);\n\t\t\tif (p === 'query') return wrap(element, token, cb, true);\n\n\t\t\treturn new Proxy(element as any, {\n\t\t\t\tapply(target, thisArg, argArray) {\n\t\t\t\t\tconst res = target.call(thisArg, ...argArray);\n\t\t\t\t\tif (typeof res === 'object' && res !== null && 'setToken' in res && typeof res.setToken === 'function') {\n\t\t\t\t\t\tres.setToken(token);\n\t\t\t\t\t}\n\t\t\t\t\treturn cb(target, p, res);\n\t\t\t\t},\n\t\t\t});\n\t\t},\n\t});\n}\n\nexport class NeonHttpDatabase<\n\tTSchema extends Record<string, unknown> = Record<string, never>,\n> extends PgDatabase<NeonHttpQueryResultHKT, TSchema> {\n\tstatic override readonly [entityKind]: string = 'NeonHttpDatabase';\n\n\t$withAuth(\n\t\ttoken: Exclude<HTTPQueryOptions<true, true>['authToken'], undefined>,\n\t): Omit<\n\t\tthis,\n\t\tExclude<\n\t\t\tkeyof this,\n\t\t\t| '$count'\n\t\t\t| 'delete'\n\t\t\t| 'select'\n\t\t\t| 'selectDistinct'\n\t\t\t| 'selectDistinctOn'\n\t\t\t| 'update'\n\t\t\t| 'insert'\n\t\t\t| 'with'\n\t\t\t| 'query'\n\t\t\t| 'execute'\n\t\t\t| 'refreshMaterializedView'\n\t\t>\n\t> {\n\t\tthis.authToken = token;\n\n\t\treturn wrap(this, token, (target, p, res) => {\n\t\t\tif (p === 'with') {\n\t\t\t\treturn wrap(res, token, (_, __, res) => res);\n\t\t\t}\n\t\t\treturn res;\n\t\t});\n\t}\n\n\t/** @internal */\n\tdeclare readonly session: NeonHttpSession<TSchema, ExtractTablesWithRelations<TSchema>>;\n\n\tasync batch<U extends BatchItem<'pg'>, T extends Readonly<[U, ...U[]]>>(\n\t\tbatch: T,\n\t): Promise<BatchResponse<T>> {\n\t\treturn this.session.batch(batch) as Promise<BatchResponse<T>>;\n\t}\n}\n\nfunction construct<\n\tTSchema extends Record<string, unknown> = Record<string, never>,\n\tTClient extends NeonQueryFunction<any, any> = NeonQueryFunction<any, any>,\n>(\n\tclient: TClient,\n\tconfig: DrizzleConfig<TSchema> = {},\n): NeonHttpDatabase<TSchema> & {\n\t$client: TClient;\n} {\n\tconst dialect = new PgDialect({ casing: config.casing });\n\tlet logger;\n\tif (config.logger === true) {\n\t\tlogger = new DefaultLogger();\n\t} else if (config.logger !== false) {\n\t\tlogger = config.logger;\n\t}\n\n\tlet schema: RelationalSchemaConfig<TablesRelationalConfig> | undefined;\n\tif (config.schema) {\n\t\tconst tablesConfig = extractTablesRelationalConfig(\n\t\t\tconfig.schema,\n\t\t\tcreateTableRelationsHelpers,\n\t\t);\n\t\tschema = {\n\t\t\tfullSchema: config.schema,\n\t\t\tschema: tablesConfig.tables,\n\t\t\ttableNamesMap: tablesConfig.tableNamesMap,\n\t\t};\n\t}\n\n\tconst driver = new NeonHttpDriver(client, dialect, { logger });\n\tconst session = driver.createSession(schema);\n\n\tconst db = new NeonHttpDatabase(\n\t\tdialect,\n\t\tsession,\n\t\tschema as RelationalSchemaConfig<ExtractTablesWithRelations<TSchema>> | undefined,\n\t);\n\t(<any> db).$client = client;\n\n\treturn db as any;\n}\n\nexport function drizzle<\n\tTSchema extends Record<string, unknown> = Record<string, never>,\n\tTClient extends NeonQueryFunction<any, any> = NeonQueryFunction<false, false>,\n>(\n\t...params: [\n\t\tTClient | string,\n\t] | [\n\t\tTClient | string,\n\t\tDrizzleConfig<TSchema>,\n\t] | [\n\t\t(\n\t\t\t& DrizzleConfig<TSchema>\n\t\t\t& ({\n\t\t\t\tconnection: string | ({ connectionString: string } & HTTPTransactionOptions<boolean, boolean>);\n\t\t\t} | {\n\t\t\t\tclient: TClient;\n\t\t\t})\n\t\t),\n\t]\n): NeonHttpDatabase<TSchema> & {\n\t$client: TClient;\n} {\n\tif (typeof params[0] === 'string') {\n\t\tconst instance = neon(params[0] as string);\n\t\treturn construct(instance, params[1]) as any;\n\t}\n\n\tif (isConfig(params[0])) {\n\t\tconst { connection, client, ...drizzleConfig } = params[0] as\n\t\t\t& {\n\t\t\t\tconnection?:\n\t\t\t\t\t| ({\n\t\t\t\t\t\tconnectionString: string;\n\t\t\t\t\t} & HTTPTransactionOptions<boolean, boolean>)\n\t\t\t\t\t| string;\n\t\t\t\tclient?: TClient;\n\t\t\t}\n\t\t\t& DrizzleConfig<TSchema>;\n\n\t\tif (client) return construct(client, drizzleConfig);\n\n\t\tif (typeof connection === 'object') {\n\t\t\tconst { connectionString, ...options } = connection;\n\n\t\t\tconst instance = neon(connectionString, options);\n\n\t\t\treturn construct(instance, drizzleConfig) as any;\n\t\t}\n\n\t\tconst instance = neon(connection!);\n\n\t\treturn construct(instance, drizzleConfig) as any;\n\t}\n\n\treturn construct(params[0] as TClient, params[1] as DrizzleConfig<TSchema> | undefined) as any;\n}\n\nexport namespace drizzle {\n\texport function mock<TSchema extends Record<string, unknown> = Record<string, never>>(\n\t\tconfig?: DrizzleConfig<TSchema>,\n\t): NeonHttpDatabase<TSchema> & {\n\t\t$client: '$client is not available on drizzle.mock()';\n\t} {\n\t\treturn construct({} as any, config) as any;\n\t}\n}\n"],"mappings":"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","names":["target","res","instance","drizzle"]}
1
+ {"version":3,"sources":["../../src/neon-http/driver.ts"],"sourcesContent":["import type { HTTPQueryOptions, HTTPTransactionOptions, NeonQueryFunction } from '@neondatabase/serverless';\nimport { neon, types } from '@neondatabase/serverless';\nimport type { BatchItem, BatchResponse } from '~/batch.ts';\nimport type { Cache } from '~/cache/core/cache.ts';\nimport { entityKind } from '~/entity.ts';\nimport type { Logger } from '~/logger.ts';\nimport { DefaultLogger } from '~/logger.ts';\nimport { PgDatabase } from '~/pg-core/db.ts';\nimport { PgDialect } from '~/pg-core/dialect.ts';\nimport { createTableRelationsHelpers, extractTablesRelationalConfig } from '~/relations.ts';\nimport type { ExtractTablesWithRelations, RelationalSchemaConfig, TablesRelationalConfig } from '~/relations.ts';\nimport { type DrizzleConfig, isConfig } from '~/utils.ts';\nimport { type NeonHttpClient, type NeonHttpQueryResultHKT, NeonHttpSession } from './session.ts';\n\nexport interface NeonDriverOptions {\n\tlogger?: Logger;\n\tcache?: Cache;\n}\n\nexport class NeonHttpDriver {\n\tstatic readonly [entityKind]: string = 'NeonHttpDriver';\n\n\tconstructor(\n\t\tprivate client: NeonHttpClient,\n\t\tprivate dialect: PgDialect,\n\t\tprivate options: NeonDriverOptions = {},\n\t) {\n\t\tthis.initMappers();\n\t}\n\n\tcreateSession(\n\t\tschema: RelationalSchemaConfig<TablesRelationalConfig> | undefined,\n\t): NeonHttpSession<Record<string, unknown>, TablesRelationalConfig> {\n\t\treturn new NeonHttpSession(this.client, this.dialect, schema, {\n\t\t\tlogger: this.options.logger,\n\t\t\tcache: this.options.cache,\n\t\t});\n\t}\n\n\tinitMappers() {\n\t\ttypes.setTypeParser(types.builtins.TIMESTAMPTZ, (val) => val);\n\t\ttypes.setTypeParser(types.builtins.TIMESTAMP, (val) => val);\n\t\ttypes.setTypeParser(types.builtins.DATE, (val) => val);\n\t\ttypes.setTypeParser(types.builtins.INTERVAL, (val) => val);\n\t}\n}\n\nfunction wrap<T extends object>(\n\ttarget: T,\n\ttoken: Exclude<HTTPQueryOptions<true, true>['authToken'], undefined>,\n\tcb: (target: any, p: string | symbol, res: any) => any,\n\tdeep?: boolean,\n) {\n\treturn new Proxy(target, {\n\t\tget(target, p) {\n\t\t\tconst element = target[p as keyof typeof p];\n\t\t\tif (typeof element !== 'function' && (typeof element !== 'object' || element === null)) return element;\n\n\t\t\tif (deep) return wrap(element, token, cb);\n\t\t\tif (p === 'query') return wrap(element, token, cb, true);\n\n\t\t\treturn new Proxy(element as any, {\n\t\t\t\tapply(target, thisArg, argArray) {\n\t\t\t\t\tconst res = target.call(thisArg, ...argArray);\n\t\t\t\t\tif (typeof res === 'object' && res !== null && 'setToken' in res && typeof res.setToken === 'function') {\n\t\t\t\t\t\tres.setToken(token);\n\t\t\t\t\t}\n\t\t\t\t\treturn cb(target, p, res);\n\t\t\t\t},\n\t\t\t});\n\t\t},\n\t});\n}\n\nexport class NeonHttpDatabase<\n\tTSchema extends Record<string, unknown> = Record<string, never>,\n> extends PgDatabase<NeonHttpQueryResultHKT, TSchema> {\n\tstatic override readonly [entityKind]: string = 'NeonHttpDatabase';\n\n\t$withAuth(\n\t\ttoken: Exclude<HTTPQueryOptions<true, true>['authToken'], undefined>,\n\t): Omit<\n\t\tthis,\n\t\tExclude<\n\t\t\tkeyof this,\n\t\t\t| '$count'\n\t\t\t| 'delete'\n\t\t\t| 'select'\n\t\t\t| 'selectDistinct'\n\t\t\t| 'selectDistinctOn'\n\t\t\t| 'update'\n\t\t\t| 'insert'\n\t\t\t| 'with'\n\t\t\t| 'query'\n\t\t\t| 'execute'\n\t\t\t| 'refreshMaterializedView'\n\t\t>\n\t> {\n\t\tthis.authToken = token;\n\n\t\treturn wrap(this, token, (target, p, res) => {\n\t\t\tif (p === 'with') {\n\t\t\t\treturn wrap(res, token, (_, __, res) => res);\n\t\t\t}\n\t\t\treturn res;\n\t\t});\n\t}\n\n\t/** @internal */\n\tdeclare readonly session: NeonHttpSession<TSchema, ExtractTablesWithRelations<TSchema>>;\n\n\tasync batch<U extends BatchItem<'pg'>, T extends Readonly<[U, ...U[]]>>(\n\t\tbatch: T,\n\t): Promise<BatchResponse<T>> {\n\t\treturn this.session.batch(batch) as Promise<BatchResponse<T>>;\n\t}\n}\n\nfunction construct<\n\tTSchema extends Record<string, unknown> = Record<string, never>,\n\tTClient extends NeonQueryFunction<any, any> = NeonQueryFunction<any, any>,\n>(\n\tclient: TClient,\n\tconfig: DrizzleConfig<TSchema> = {},\n): NeonHttpDatabase<TSchema> & {\n\t$client: TClient;\n} {\n\tconst dialect = new PgDialect({ casing: config.casing });\n\tlet logger;\n\tif (config.logger === true) {\n\t\tlogger = new DefaultLogger();\n\t} else if (config.logger !== false) {\n\t\tlogger = config.logger;\n\t}\n\n\tlet schema: RelationalSchemaConfig<TablesRelationalConfig> | undefined;\n\tif (config.schema) {\n\t\tconst tablesConfig = extractTablesRelationalConfig(\n\t\t\tconfig.schema,\n\t\t\tcreateTableRelationsHelpers,\n\t\t);\n\t\tschema = {\n\t\t\tfullSchema: config.schema,\n\t\t\tschema: tablesConfig.tables,\n\t\t\ttableNamesMap: tablesConfig.tableNamesMap,\n\t\t};\n\t}\n\n\tconst driver = new NeonHttpDriver(client, dialect, { logger, cache: config.cache });\n\tconst session = driver.createSession(schema);\n\n\tconst db = new NeonHttpDatabase(\n\t\tdialect,\n\t\tsession,\n\t\tschema as RelationalSchemaConfig<ExtractTablesWithRelations<TSchema>> | undefined,\n\t);\n\t(<any> db).$client = client;\n\t(<any> db).$cache = config.cache;\n\tif ((<any> db).$cache) {\n\t\t(<any> db).$cache['invalidate'] = config.cache?.onMutate;\n\t}\n\n\treturn db as any;\n}\n\nexport function drizzle<\n\tTSchema extends Record<string, unknown> = Record<string, never>,\n\tTClient extends NeonQueryFunction<any, any> = NeonQueryFunction<false, false>,\n>(\n\t...params: [\n\t\tTClient | string,\n\t] | [\n\t\tTClient | string,\n\t\tDrizzleConfig<TSchema>,\n\t] | [\n\t\t(\n\t\t\t& DrizzleConfig<TSchema>\n\t\t\t& ({\n\t\t\t\tconnection: string | ({ connectionString: string } & HTTPTransactionOptions<boolean, boolean>);\n\t\t\t} | {\n\t\t\t\tclient: TClient;\n\t\t\t})\n\t\t),\n\t]\n): NeonHttpDatabase<TSchema> & {\n\t$client: TClient;\n} {\n\tif (typeof params[0] === 'string') {\n\t\tconst instance = neon(params[0] as string);\n\t\treturn construct(instance, params[1]) as any;\n\t}\n\n\tif (isConfig(params[0])) {\n\t\tconst { connection, client, ...drizzleConfig } = params[0] as\n\t\t\t& {\n\t\t\t\tconnection?:\n\t\t\t\t\t| ({\n\t\t\t\t\t\tconnectionString: string;\n\t\t\t\t\t} & HTTPTransactionOptions<boolean, boolean>)\n\t\t\t\t\t| string;\n\t\t\t\tclient?: TClient;\n\t\t\t}\n\t\t\t& DrizzleConfig<TSchema>;\n\n\t\tif (client) return construct(client, drizzleConfig);\n\n\t\tif (typeof connection === 'object') {\n\t\t\tconst { connectionString, ...options } = connection;\n\n\t\t\tconst instance = neon(connectionString, options);\n\n\t\t\treturn construct(instance, drizzleConfig) as any;\n\t\t}\n\n\t\tconst instance = neon(connection!);\n\n\t\treturn construct(instance, drizzleConfig) as any;\n\t}\n\n\treturn construct(params[0] as TClient, params[1] as DrizzleConfig<TSchema> | undefined) as any;\n}\n\nexport namespace drizzle {\n\texport function mock<TSchema extends Record<string, unknown> = Record<string, never>>(\n\t\tconfig?: DrizzleConfig<TSchema>,\n\t): NeonHttpDatabase<TSchema> & {\n\t\t$client: '$client is not available on drizzle.mock()';\n\t} {\n\t\treturn construct({} as any, config) as any;\n\t}\n}\n"],"mappings":"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","names":["target","res","instance","drizzle"]}
@@ -1,5 +1,6 @@
1
1
  import type { HTTPQueryOptions, HTTPTransactionOptions, NeonQueryFunction } from '@neondatabase/serverless';
2
2
  import type { BatchItem, BatchResponse } from "../batch.cjs";
3
+ import type { Cache } from "../cache/core/cache.cjs";
3
4
  import { entityKind } from "../entity.cjs";
4
5
  import type { Logger } from "../logger.cjs";
5
6
  import { PgDatabase } from "../pg-core/db.cjs";
@@ -9,6 +10,7 @@ import { type DrizzleConfig } from "../utils.cjs";
9
10
  import { type NeonHttpClient, type NeonHttpQueryResultHKT, NeonHttpSession } from "./session.cjs";
10
11
  export interface NeonDriverOptions {
11
12
  logger?: Logger;
13
+ cache?: Cache;
12
14
  }
13
15
  export declare class NeonHttpDriver {
14
16
  private client;
@@ -1,5 +1,6 @@
1
1
  import type { HTTPQueryOptions, HTTPTransactionOptions, NeonQueryFunction } from '@neondatabase/serverless';
2
2
  import type { BatchItem, BatchResponse } from "../batch.js";
3
+ import type { Cache } from "../cache/core/cache.js";
3
4
  import { entityKind } from "../entity.js";
4
5
  import type { Logger } from "../logger.js";
5
6
  import { PgDatabase } from "../pg-core/db.js";
@@ -9,6 +10,7 @@ import { type DrizzleConfig } from "../utils.js";
9
10
  import { type NeonHttpClient, type NeonHttpQueryResultHKT, NeonHttpSession } from "./session.js";
10
11
  export interface NeonDriverOptions {
11
12
  logger?: Logger;
13
+ cache?: Cache;
12
14
  }
13
15
  export declare class NeonHttpDriver {
14
16
  private client;
@@ -15,7 +15,10 @@ class NeonHttpDriver {
15
15
  }
16
16
  static [entityKind] = "NeonHttpDriver";
17
17
  createSession(schema) {
18
- return new NeonHttpSession(this.client, this.dialect, schema, { logger: this.options.logger });
18
+ return new NeonHttpSession(this.client, this.dialect, schema, {
19
+ logger: this.options.logger,
20
+ cache: this.options.cache
21
+ });
19
22
  }
20
23
  initMappers() {
21
24
  types.setTypeParser(types.builtins.TIMESTAMPTZ, (val) => val);
@@ -81,7 +84,7 @@ function construct(client, config = {}) {
81
84
  tableNamesMap: tablesConfig.tableNamesMap
82
85
  };
83
86
  }
84
- const driver = new NeonHttpDriver(client, dialect, { logger });
87
+ const driver = new NeonHttpDriver(client, dialect, { logger, cache: config.cache });
85
88
  const session = driver.createSession(schema);
86
89
  const db = new NeonHttpDatabase(
87
90
  dialect,
@@ -89,6 +92,10 @@ function construct(client, config = {}) {
89
92
  schema
90
93
  );
91
94
  db.$client = client;
95
+ db.$cache = config.cache;
96
+ if (db.$cache) {
97
+ db.$cache["invalidate"] = config.cache?.onMutate;
98
+ }
92
99
  return db;
93
100
  }
94
101
  function drizzle(...params) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/neon-http/driver.ts"],"sourcesContent":["import type { HTTPQueryOptions, HTTPTransactionOptions, NeonQueryFunction } from '@neondatabase/serverless';\nimport { neon, types } from '@neondatabase/serverless';\nimport type { BatchItem, BatchResponse } from '~/batch.ts';\nimport { entityKind } from '~/entity.ts';\nimport type { Logger } from '~/logger.ts';\nimport { DefaultLogger } from '~/logger.ts';\nimport { PgDatabase } from '~/pg-core/db.ts';\nimport { PgDialect } from '~/pg-core/dialect.ts';\nimport { createTableRelationsHelpers, extractTablesRelationalConfig } from '~/relations.ts';\nimport type { ExtractTablesWithRelations, RelationalSchemaConfig, TablesRelationalConfig } from '~/relations.ts';\nimport { type DrizzleConfig, isConfig } from '~/utils.ts';\nimport { type NeonHttpClient, type NeonHttpQueryResultHKT, NeonHttpSession } from './session.ts';\n\nexport interface NeonDriverOptions {\n\tlogger?: Logger;\n}\n\nexport class NeonHttpDriver {\n\tstatic readonly [entityKind]: string = 'NeonHttpDriver';\n\n\tconstructor(\n\t\tprivate client: NeonHttpClient,\n\t\tprivate dialect: PgDialect,\n\t\tprivate options: NeonDriverOptions = {},\n\t) {\n\t\tthis.initMappers();\n\t}\n\n\tcreateSession(\n\t\tschema: RelationalSchemaConfig<TablesRelationalConfig> | undefined,\n\t): NeonHttpSession<Record<string, unknown>, TablesRelationalConfig> {\n\t\treturn new NeonHttpSession(this.client, this.dialect, schema, { logger: this.options.logger });\n\t}\n\n\tinitMappers() {\n\t\ttypes.setTypeParser(types.builtins.TIMESTAMPTZ, (val) => val);\n\t\ttypes.setTypeParser(types.builtins.TIMESTAMP, (val) => val);\n\t\ttypes.setTypeParser(types.builtins.DATE, (val) => val);\n\t\ttypes.setTypeParser(types.builtins.INTERVAL, (val) => val);\n\t}\n}\n\nfunction wrap<T extends object>(\n\ttarget: T,\n\ttoken: Exclude<HTTPQueryOptions<true, true>['authToken'], undefined>,\n\tcb: (target: any, p: string | symbol, res: any) => any,\n\tdeep?: boolean,\n) {\n\treturn new Proxy(target, {\n\t\tget(target, p) {\n\t\t\tconst element = target[p as keyof typeof p];\n\t\t\tif (typeof element !== 'function' && (typeof element !== 'object' || element === null)) return element;\n\n\t\t\tif (deep) return wrap(element, token, cb);\n\t\t\tif (p === 'query') return wrap(element, token, cb, true);\n\n\t\t\treturn new Proxy(element as any, {\n\t\t\t\tapply(target, thisArg, argArray) {\n\t\t\t\t\tconst res = target.call(thisArg, ...argArray);\n\t\t\t\t\tif (typeof res === 'object' && res !== null && 'setToken' in res && typeof res.setToken === 'function') {\n\t\t\t\t\t\tres.setToken(token);\n\t\t\t\t\t}\n\t\t\t\t\treturn cb(target, p, res);\n\t\t\t\t},\n\t\t\t});\n\t\t},\n\t});\n}\n\nexport class NeonHttpDatabase<\n\tTSchema extends Record<string, unknown> = Record<string, never>,\n> extends PgDatabase<NeonHttpQueryResultHKT, TSchema> {\n\tstatic override readonly [entityKind]: string = 'NeonHttpDatabase';\n\n\t$withAuth(\n\t\ttoken: Exclude<HTTPQueryOptions<true, true>['authToken'], undefined>,\n\t): Omit<\n\t\tthis,\n\t\tExclude<\n\t\t\tkeyof this,\n\t\t\t| '$count'\n\t\t\t| 'delete'\n\t\t\t| 'select'\n\t\t\t| 'selectDistinct'\n\t\t\t| 'selectDistinctOn'\n\t\t\t| 'update'\n\t\t\t| 'insert'\n\t\t\t| 'with'\n\t\t\t| 'query'\n\t\t\t| 'execute'\n\t\t\t| 'refreshMaterializedView'\n\t\t>\n\t> {\n\t\tthis.authToken = token;\n\n\t\treturn wrap(this, token, (target, p, res) => {\n\t\t\tif (p === 'with') {\n\t\t\t\treturn wrap(res, token, (_, __, res) => res);\n\t\t\t}\n\t\t\treturn res;\n\t\t});\n\t}\n\n\t/** @internal */\n\tdeclare readonly session: NeonHttpSession<TSchema, ExtractTablesWithRelations<TSchema>>;\n\n\tasync batch<U extends BatchItem<'pg'>, T extends Readonly<[U, ...U[]]>>(\n\t\tbatch: T,\n\t): Promise<BatchResponse<T>> {\n\t\treturn this.session.batch(batch) as Promise<BatchResponse<T>>;\n\t}\n}\n\nfunction construct<\n\tTSchema extends Record<string, unknown> = Record<string, never>,\n\tTClient extends NeonQueryFunction<any, any> = NeonQueryFunction<any, any>,\n>(\n\tclient: TClient,\n\tconfig: DrizzleConfig<TSchema> = {},\n): NeonHttpDatabase<TSchema> & {\n\t$client: TClient;\n} {\n\tconst dialect = new PgDialect({ casing: config.casing });\n\tlet logger;\n\tif (config.logger === true) {\n\t\tlogger = new DefaultLogger();\n\t} else if (config.logger !== false) {\n\t\tlogger = config.logger;\n\t}\n\n\tlet schema: RelationalSchemaConfig<TablesRelationalConfig> | undefined;\n\tif (config.schema) {\n\t\tconst tablesConfig = extractTablesRelationalConfig(\n\t\t\tconfig.schema,\n\t\t\tcreateTableRelationsHelpers,\n\t\t);\n\t\tschema = {\n\t\t\tfullSchema: config.schema,\n\t\t\tschema: tablesConfig.tables,\n\t\t\ttableNamesMap: tablesConfig.tableNamesMap,\n\t\t};\n\t}\n\n\tconst driver = new NeonHttpDriver(client, dialect, { logger });\n\tconst session = driver.createSession(schema);\n\n\tconst db = new NeonHttpDatabase(\n\t\tdialect,\n\t\tsession,\n\t\tschema as RelationalSchemaConfig<ExtractTablesWithRelations<TSchema>> | undefined,\n\t);\n\t(<any> db).$client = client;\n\n\treturn db as any;\n}\n\nexport function drizzle<\n\tTSchema extends Record<string, unknown> = Record<string, never>,\n\tTClient extends NeonQueryFunction<any, any> = NeonQueryFunction<false, false>,\n>(\n\t...params: [\n\t\tTClient | string,\n\t] | [\n\t\tTClient | string,\n\t\tDrizzleConfig<TSchema>,\n\t] | [\n\t\t(\n\t\t\t& DrizzleConfig<TSchema>\n\t\t\t& ({\n\t\t\t\tconnection: string | ({ connectionString: string } & HTTPTransactionOptions<boolean, boolean>);\n\t\t\t} | {\n\t\t\t\tclient: TClient;\n\t\t\t})\n\t\t),\n\t]\n): NeonHttpDatabase<TSchema> & {\n\t$client: TClient;\n} {\n\tif (typeof params[0] === 'string') {\n\t\tconst instance = neon(params[0] as string);\n\t\treturn construct(instance, params[1]) as any;\n\t}\n\n\tif (isConfig(params[0])) {\n\t\tconst { connection, client, ...drizzleConfig } = params[0] as\n\t\t\t& {\n\t\t\t\tconnection?:\n\t\t\t\t\t| ({\n\t\t\t\t\t\tconnectionString: string;\n\t\t\t\t\t} & HTTPTransactionOptions<boolean, boolean>)\n\t\t\t\t\t| string;\n\t\t\t\tclient?: TClient;\n\t\t\t}\n\t\t\t& DrizzleConfig<TSchema>;\n\n\t\tif (client) return construct(client, drizzleConfig);\n\n\t\tif (typeof connection === 'object') {\n\t\t\tconst { connectionString, ...options } = connection;\n\n\t\t\tconst instance = neon(connectionString, options);\n\n\t\t\treturn construct(instance, drizzleConfig) as any;\n\t\t}\n\n\t\tconst instance = neon(connection!);\n\n\t\treturn construct(instance, drizzleConfig) as any;\n\t}\n\n\treturn construct(params[0] as TClient, params[1] as DrizzleConfig<TSchema> | undefined) as any;\n}\n\nexport namespace drizzle {\n\texport function mock<TSchema extends Record<string, unknown> = Record<string, never>>(\n\t\tconfig?: DrizzleConfig<TSchema>,\n\t): NeonHttpDatabase<TSchema> & {\n\t\t$client: '$client is not available on drizzle.mock()';\n\t} {\n\t\treturn construct({} as any, config) as any;\n\t}\n}\n"],"mappings":"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","names":["target","res","instance","drizzle"]}
1
+ {"version":3,"sources":["../../src/neon-http/driver.ts"],"sourcesContent":["import type { HTTPQueryOptions, HTTPTransactionOptions, NeonQueryFunction } from '@neondatabase/serverless';\nimport { neon, types } from '@neondatabase/serverless';\nimport type { BatchItem, BatchResponse } from '~/batch.ts';\nimport type { Cache } from '~/cache/core/cache.ts';\nimport { entityKind } from '~/entity.ts';\nimport type { Logger } from '~/logger.ts';\nimport { DefaultLogger } from '~/logger.ts';\nimport { PgDatabase } from '~/pg-core/db.ts';\nimport { PgDialect } from '~/pg-core/dialect.ts';\nimport { createTableRelationsHelpers, extractTablesRelationalConfig } from '~/relations.ts';\nimport type { ExtractTablesWithRelations, RelationalSchemaConfig, TablesRelationalConfig } from '~/relations.ts';\nimport { type DrizzleConfig, isConfig } from '~/utils.ts';\nimport { type NeonHttpClient, type NeonHttpQueryResultHKT, NeonHttpSession } from './session.ts';\n\nexport interface NeonDriverOptions {\n\tlogger?: Logger;\n\tcache?: Cache;\n}\n\nexport class NeonHttpDriver {\n\tstatic readonly [entityKind]: string = 'NeonHttpDriver';\n\n\tconstructor(\n\t\tprivate client: NeonHttpClient,\n\t\tprivate dialect: PgDialect,\n\t\tprivate options: NeonDriverOptions = {},\n\t) {\n\t\tthis.initMappers();\n\t}\n\n\tcreateSession(\n\t\tschema: RelationalSchemaConfig<TablesRelationalConfig> | undefined,\n\t): NeonHttpSession<Record<string, unknown>, TablesRelationalConfig> {\n\t\treturn new NeonHttpSession(this.client, this.dialect, schema, {\n\t\t\tlogger: this.options.logger,\n\t\t\tcache: this.options.cache,\n\t\t});\n\t}\n\n\tinitMappers() {\n\t\ttypes.setTypeParser(types.builtins.TIMESTAMPTZ, (val) => val);\n\t\ttypes.setTypeParser(types.builtins.TIMESTAMP, (val) => val);\n\t\ttypes.setTypeParser(types.builtins.DATE, (val) => val);\n\t\ttypes.setTypeParser(types.builtins.INTERVAL, (val) => val);\n\t}\n}\n\nfunction wrap<T extends object>(\n\ttarget: T,\n\ttoken: Exclude<HTTPQueryOptions<true, true>['authToken'], undefined>,\n\tcb: (target: any, p: string | symbol, res: any) => any,\n\tdeep?: boolean,\n) {\n\treturn new Proxy(target, {\n\t\tget(target, p) {\n\t\t\tconst element = target[p as keyof typeof p];\n\t\t\tif (typeof element !== 'function' && (typeof element !== 'object' || element === null)) return element;\n\n\t\t\tif (deep) return wrap(element, token, cb);\n\t\t\tif (p === 'query') return wrap(element, token, cb, true);\n\n\t\t\treturn new Proxy(element as any, {\n\t\t\t\tapply(target, thisArg, argArray) {\n\t\t\t\t\tconst res = target.call(thisArg, ...argArray);\n\t\t\t\t\tif (typeof res === 'object' && res !== null && 'setToken' in res && typeof res.setToken === 'function') {\n\t\t\t\t\t\tres.setToken(token);\n\t\t\t\t\t}\n\t\t\t\t\treturn cb(target, p, res);\n\t\t\t\t},\n\t\t\t});\n\t\t},\n\t});\n}\n\nexport class NeonHttpDatabase<\n\tTSchema extends Record<string, unknown> = Record<string, never>,\n> extends PgDatabase<NeonHttpQueryResultHKT, TSchema> {\n\tstatic override readonly [entityKind]: string = 'NeonHttpDatabase';\n\n\t$withAuth(\n\t\ttoken: Exclude<HTTPQueryOptions<true, true>['authToken'], undefined>,\n\t): Omit<\n\t\tthis,\n\t\tExclude<\n\t\t\tkeyof this,\n\t\t\t| '$count'\n\t\t\t| 'delete'\n\t\t\t| 'select'\n\t\t\t| 'selectDistinct'\n\t\t\t| 'selectDistinctOn'\n\t\t\t| 'update'\n\t\t\t| 'insert'\n\t\t\t| 'with'\n\t\t\t| 'query'\n\t\t\t| 'execute'\n\t\t\t| 'refreshMaterializedView'\n\t\t>\n\t> {\n\t\tthis.authToken = token;\n\n\t\treturn wrap(this, token, (target, p, res) => {\n\t\t\tif (p === 'with') {\n\t\t\t\treturn wrap(res, token, (_, __, res) => res);\n\t\t\t}\n\t\t\treturn res;\n\t\t});\n\t}\n\n\t/** @internal */\n\tdeclare readonly session: NeonHttpSession<TSchema, ExtractTablesWithRelations<TSchema>>;\n\n\tasync batch<U extends BatchItem<'pg'>, T extends Readonly<[U, ...U[]]>>(\n\t\tbatch: T,\n\t): Promise<BatchResponse<T>> {\n\t\treturn this.session.batch(batch) as Promise<BatchResponse<T>>;\n\t}\n}\n\nfunction construct<\n\tTSchema extends Record<string, unknown> = Record<string, never>,\n\tTClient extends NeonQueryFunction<any, any> = NeonQueryFunction<any, any>,\n>(\n\tclient: TClient,\n\tconfig: DrizzleConfig<TSchema> = {},\n): NeonHttpDatabase<TSchema> & {\n\t$client: TClient;\n} {\n\tconst dialect = new PgDialect({ casing: config.casing });\n\tlet logger;\n\tif (config.logger === true) {\n\t\tlogger = new DefaultLogger();\n\t} else if (config.logger !== false) {\n\t\tlogger = config.logger;\n\t}\n\n\tlet schema: RelationalSchemaConfig<TablesRelationalConfig> | undefined;\n\tif (config.schema) {\n\t\tconst tablesConfig = extractTablesRelationalConfig(\n\t\t\tconfig.schema,\n\t\t\tcreateTableRelationsHelpers,\n\t\t);\n\t\tschema = {\n\t\t\tfullSchema: config.schema,\n\t\t\tschema: tablesConfig.tables,\n\t\t\ttableNamesMap: tablesConfig.tableNamesMap,\n\t\t};\n\t}\n\n\tconst driver = new NeonHttpDriver(client, dialect, { logger, cache: config.cache });\n\tconst session = driver.createSession(schema);\n\n\tconst db = new NeonHttpDatabase(\n\t\tdialect,\n\t\tsession,\n\t\tschema as RelationalSchemaConfig<ExtractTablesWithRelations<TSchema>> | undefined,\n\t);\n\t(<any> db).$client = client;\n\t(<any> db).$cache = config.cache;\n\tif ((<any> db).$cache) {\n\t\t(<any> db).$cache['invalidate'] = config.cache?.onMutate;\n\t}\n\n\treturn db as any;\n}\n\nexport function drizzle<\n\tTSchema extends Record<string, unknown> = Record<string, never>,\n\tTClient extends NeonQueryFunction<any, any> = NeonQueryFunction<false, false>,\n>(\n\t...params: [\n\t\tTClient | string,\n\t] | [\n\t\tTClient | string,\n\t\tDrizzleConfig<TSchema>,\n\t] | [\n\t\t(\n\t\t\t& DrizzleConfig<TSchema>\n\t\t\t& ({\n\t\t\t\tconnection: string | ({ connectionString: string } & HTTPTransactionOptions<boolean, boolean>);\n\t\t\t} | {\n\t\t\t\tclient: TClient;\n\t\t\t})\n\t\t),\n\t]\n): NeonHttpDatabase<TSchema> & {\n\t$client: TClient;\n} {\n\tif (typeof params[0] === 'string') {\n\t\tconst instance = neon(params[0] as string);\n\t\treturn construct(instance, params[1]) as any;\n\t}\n\n\tif (isConfig(params[0])) {\n\t\tconst { connection, client, ...drizzleConfig } = params[0] as\n\t\t\t& {\n\t\t\t\tconnection?:\n\t\t\t\t\t| ({\n\t\t\t\t\t\tconnectionString: string;\n\t\t\t\t\t} & HTTPTransactionOptions<boolean, boolean>)\n\t\t\t\t\t| string;\n\t\t\t\tclient?: TClient;\n\t\t\t}\n\t\t\t& DrizzleConfig<TSchema>;\n\n\t\tif (client) return construct(client, drizzleConfig);\n\n\t\tif (typeof connection === 'object') {\n\t\t\tconst { connectionString, ...options } = connection;\n\n\t\t\tconst instance = neon(connectionString, options);\n\n\t\t\treturn construct(instance, drizzleConfig) as any;\n\t\t}\n\n\t\tconst instance = neon(connection!);\n\n\t\treturn construct(instance, drizzleConfig) as any;\n\t}\n\n\treturn construct(params[0] as TClient, params[1] as DrizzleConfig<TSchema> | undefined) as any;\n}\n\nexport namespace drizzle {\n\texport function mock<TSchema extends Record<string, unknown> = Record<string, never>>(\n\t\tconfig?: DrizzleConfig<TSchema>,\n\t): NeonHttpDatabase<TSchema> & {\n\t\t$client: '$client is not available on drizzle.mock()';\n\t} {\n\t\treturn construct({} as any, config) as any;\n\t}\n}\n"],"mappings":"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","names":["target","res","instance","drizzle"]}