@relq/orm 0.1.0

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 (254) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +236 -0
  3. package/dist/cjs/__test-types.cjs +17 -0
  4. package/dist/cjs/addon/cursor.cjs +1473 -0
  5. package/dist/cjs/addon/pg.cjs +4969 -0
  6. package/dist/cjs/cache/index.cjs +9 -0
  7. package/dist/cjs/cache/query-cache.cjs +311 -0
  8. package/dist/cjs/condition/array-condition-builder.cjs +527 -0
  9. package/dist/cjs/condition/array-numeric-condition-builder.cjs +186 -0
  10. package/dist/cjs/condition/array-specialized-condition-builder.cjs +206 -0
  11. package/dist/cjs/condition/array-string-condition-builder.cjs +146 -0
  12. package/dist/cjs/condition/base-condition-builder.cjs +2 -0
  13. package/dist/cjs/condition/condition-collector.cjs +461 -0
  14. package/dist/cjs/condition/fulltext-condition-builder.cjs +61 -0
  15. package/dist/cjs/condition/geometric-condition-builder.cjs +228 -0
  16. package/dist/cjs/condition/index.cjs +29 -0
  17. package/dist/cjs/condition/jsonb-condition-builder.cjs +448 -0
  18. package/dist/cjs/condition/network-condition-builder.cjs +237 -0
  19. package/dist/cjs/condition/postgis-condition-builder.cjs +188 -0
  20. package/dist/cjs/condition/range-condition-builder.cjs +98 -0
  21. package/dist/cjs/core/helpers/ConnectedAggregateBuilder.cjs +132 -0
  22. package/dist/cjs/core/helpers/ConnectedCTEBuilder.cjs +53 -0
  23. package/dist/cjs/core/helpers/ConnectedCountBuilder.cjs +73 -0
  24. package/dist/cjs/core/helpers/ConnectedDeleteBuilder.cjs +65 -0
  25. package/dist/cjs/core/helpers/ConnectedInsertBuilder.cjs +112 -0
  26. package/dist/cjs/core/helpers/ConnectedInsertFromSelectBuilder.cjs +66 -0
  27. package/dist/cjs/core/helpers/ConnectedQueryBuilder.cjs +146 -0
  28. package/dist/cjs/core/helpers/ConnectedRawQueryBuilder.cjs +46 -0
  29. package/dist/cjs/core/helpers/ConnectedSelectBuilder.cjs +331 -0
  30. package/dist/cjs/core/helpers/ConnectedTransactionBuilder.cjs +105 -0
  31. package/dist/cjs/core/helpers/ConnectedUpdateBuilder.cjs +79 -0
  32. package/dist/cjs/core/helpers/PaginateBuilder.cjs +178 -0
  33. package/dist/cjs/core/helpers/ReturningExecutor.cjs +70 -0
  34. package/dist/cjs/core/helpers/capability-guard.cjs +10 -0
  35. package/dist/cjs/core/helpers/index.cjs +31 -0
  36. package/dist/cjs/core/helpers/methods.cjs +10 -0
  37. package/dist/cjs/core/helpers/query-convenience.cjs +238 -0
  38. package/dist/cjs/core/helpers/select-joins.cjs +251 -0
  39. package/dist/cjs/core/helpers/select-pagination.cjs +233 -0
  40. package/dist/cjs/core/helpers/select-types.cjs +2 -0
  41. package/dist/cjs/core/pg-family/cockroachdb-client/capabilities.cjs +31 -0
  42. package/dist/cjs/core/pg-family/cockroachdb-client/index.cjs +7 -0
  43. package/dist/cjs/core/pg-family/cockroachdb-client/relq-cockroach.cjs +16 -0
  44. package/dist/cjs/core/pg-family/dsql-client/capabilities.cjs +31 -0
  45. package/dist/cjs/core/pg-family/dsql-client/index.cjs +7 -0
  46. package/dist/cjs/core/pg-family/dsql-client/relq-dsql.cjs +16 -0
  47. package/dist/cjs/core/pg-family/index.cjs +19 -0
  48. package/dist/cjs/core/pg-family/nile-client/capabilities.cjs +31 -0
  49. package/dist/cjs/core/pg-family/nile-client/index.cjs +7 -0
  50. package/dist/cjs/core/pg-family/nile-client/relq-nile.cjs +36 -0
  51. package/dist/cjs/core/pg-family/nile-client/tenant-context.cjs +44 -0
  52. package/dist/cjs/core/pg-family/pg-client/capabilities.cjs +31 -0
  53. package/dist/cjs/core/pg-family/pg-client/index.cjs +7 -0
  54. package/dist/cjs/core/pg-family/pg-client/relq-postgres.cjs +43 -0
  55. package/dist/cjs/core/pg-family/shared/pg-base.cjs +385 -0
  56. package/dist/cjs/core/pg-family/shared/pg-dialect.cjs +67 -0
  57. package/dist/cjs/core/pg-family/shared/pg-error-parser.cjs +34 -0
  58. package/dist/cjs/core/pg-family/shared/pg-type-coercion.cjs +14 -0
  59. package/dist/cjs/core/relq-base.cjs +307 -0
  60. package/dist/cjs/core/relq-client.cjs +56 -0
  61. package/dist/cjs/core/shared/cleanup.cjs +36 -0
  62. package/dist/cjs/core/shared/column-mapping.cjs +97 -0
  63. package/dist/cjs/core/shared/errors.cjs +17 -0
  64. package/dist/cjs/core/shared/index.cjs +24 -0
  65. package/dist/cjs/core/shared/table-accessor.cjs +22 -0
  66. package/dist/cjs/core/shared/transform.cjs +35 -0
  67. package/dist/cjs/core/shared/types.cjs +2 -0
  68. package/dist/cjs/core/shared/validation.cjs +140 -0
  69. package/dist/cjs/core/types/core.types.cjs +2 -0
  70. package/dist/cjs/count/count-builder.cjs +88 -0
  71. package/dist/cjs/count/index.cjs +5 -0
  72. package/dist/cjs/delete/delete-builder.cjs +176 -0
  73. package/dist/cjs/delete/index.cjs +5 -0
  74. package/dist/cjs/explain/explain-builder.cjs +99 -0
  75. package/dist/cjs/explain/index.cjs +5 -0
  76. package/dist/cjs/index.cjs +26 -0
  77. package/dist/cjs/insert/conflict-builder.cjs +213 -0
  78. package/dist/cjs/insert/index.cjs +5 -0
  79. package/dist/cjs/insert/insert-builder.cjs +320 -0
  80. package/dist/cjs/insert/insert-from-select-builder.cjs +86 -0
  81. package/dist/cjs/pubsub/index.cjs +7 -0
  82. package/dist/cjs/pubsub/listen-notify-builder.cjs +57 -0
  83. package/dist/cjs/pubsub/listener-connection.cjs +180 -0
  84. package/dist/cjs/raw/index.cjs +8 -0
  85. package/dist/cjs/raw/raw-query-builder.cjs +27 -0
  86. package/dist/cjs/raw/sql-template.cjs +73 -0
  87. package/dist/cjs/select/aggregate-builder.cjs +179 -0
  88. package/dist/cjs/select/index.cjs +16 -0
  89. package/dist/cjs/select/join-builder.cjs +192 -0
  90. package/dist/cjs/select/join-condition-builder.cjs +189 -0
  91. package/dist/cjs/select/join-internals.cjs +5 -0
  92. package/dist/cjs/select/join-many-condition-builder.cjs +159 -0
  93. package/dist/cjs/select/scalar-query-builder.cjs +134 -0
  94. package/dist/cjs/select/scalar-select-builder.cjs +78 -0
  95. package/dist/cjs/select/select-builder.cjs +426 -0
  96. package/dist/cjs/select/sql-expression.cjs +38 -0
  97. package/dist/cjs/select/table-proxy.cjs +99 -0
  98. package/dist/cjs/shared/aws-dsql.cjs +181 -0
  99. package/dist/cjs/shared/errors/relq-errors.cjs +361 -0
  100. package/dist/cjs/shared/pg-format.cjs +383 -0
  101. package/dist/cjs/shared/types/config-types.cjs +51 -0
  102. package/dist/cjs/transaction/index.cjs +6 -0
  103. package/dist/cjs/transaction/transaction-builder.cjs +78 -0
  104. package/dist/cjs/types/aggregate-types.cjs +2 -0
  105. package/dist/cjs/types/inference-types.cjs +18 -0
  106. package/dist/cjs/types/pagination-types.cjs +7 -0
  107. package/dist/cjs/types/result-types.cjs +2 -0
  108. package/dist/cjs/types/scalar-types.cjs +2 -0
  109. package/dist/cjs/types/schema-types.cjs +2 -0
  110. package/dist/cjs/types/subscription-types.cjs +2 -0
  111. package/dist/cjs/types.cjs +2 -0
  112. package/dist/cjs/update/array-update-builder.cjs +232 -0
  113. package/dist/cjs/update/index.cjs +16 -0
  114. package/dist/cjs/update/jsonb-update-builder.cjs +219 -0
  115. package/dist/cjs/update/update-builder.cjs +274 -0
  116. package/dist/cjs/utils/addon/pg/cursor.cjs +8 -0
  117. package/dist/cjs/utils/addon/pg/pg.cjs +23 -0
  118. package/dist/cjs/utils/case-converter.cjs +58 -0
  119. package/dist/cjs/utils/env-resolver.cjs +226 -0
  120. package/dist/cjs/utils/environment-detection.cjs +124 -0
  121. package/dist/cjs/utils/fk-resolver.cjs +186 -0
  122. package/dist/cjs/utils/index.cjs +25 -0
  123. package/dist/cjs/utils/pool-defaults.cjs +91 -0
  124. package/dist/cjs/utils/type-coercion.cjs +120 -0
  125. package/dist/cjs/window/index.cjs +5 -0
  126. package/dist/cjs/window/window-builder.cjs +80 -0
  127. package/dist/esm/__test-types.js +15 -0
  128. package/dist/esm/addon/cursor.js +1440 -0
  129. package/dist/esm/addon/pg.js +4931 -0
  130. package/dist/esm/cache/index.js +1 -0
  131. package/dist/esm/cache/query-cache.js +303 -0
  132. package/dist/esm/condition/array-condition-builder.js +519 -0
  133. package/dist/esm/condition/array-numeric-condition-builder.js +182 -0
  134. package/dist/esm/condition/array-specialized-condition-builder.js +200 -0
  135. package/dist/esm/condition/array-string-condition-builder.js +142 -0
  136. package/dist/esm/condition/base-condition-builder.js +1 -0
  137. package/dist/esm/condition/condition-collector.js +452 -0
  138. package/dist/esm/condition/fulltext-condition-builder.js +53 -0
  139. package/dist/esm/condition/geometric-condition-builder.js +220 -0
  140. package/dist/esm/condition/index.js +8 -0
  141. package/dist/esm/condition/jsonb-condition-builder.js +439 -0
  142. package/dist/esm/condition/network-condition-builder.js +229 -0
  143. package/dist/esm/condition/postgis-condition-builder.js +180 -0
  144. package/dist/esm/condition/range-condition-builder.js +90 -0
  145. package/dist/esm/core/helpers/ConnectedAggregateBuilder.js +128 -0
  146. package/dist/esm/core/helpers/ConnectedCTEBuilder.js +49 -0
  147. package/dist/esm/core/helpers/ConnectedCountBuilder.js +69 -0
  148. package/dist/esm/core/helpers/ConnectedDeleteBuilder.js +61 -0
  149. package/dist/esm/core/helpers/ConnectedInsertBuilder.js +108 -0
  150. package/dist/esm/core/helpers/ConnectedInsertFromSelectBuilder.js +62 -0
  151. package/dist/esm/core/helpers/ConnectedQueryBuilder.js +142 -0
  152. package/dist/esm/core/helpers/ConnectedRawQueryBuilder.js +42 -0
  153. package/dist/esm/core/helpers/ConnectedSelectBuilder.js +327 -0
  154. package/dist/esm/core/helpers/ConnectedTransactionBuilder.js +100 -0
  155. package/dist/esm/core/helpers/ConnectedUpdateBuilder.js +75 -0
  156. package/dist/esm/core/helpers/PaginateBuilder.js +174 -0
  157. package/dist/esm/core/helpers/ReturningExecutor.js +66 -0
  158. package/dist/esm/core/helpers/capability-guard.js +7 -0
  159. package/dist/esm/core/helpers/index.js +13 -0
  160. package/dist/esm/core/helpers/methods.js +6 -0
  161. package/dist/esm/core/helpers/query-convenience.js +194 -0
  162. package/dist/esm/core/helpers/select-joins.js +246 -0
  163. package/dist/esm/core/helpers/select-pagination.js +226 -0
  164. package/dist/esm/core/helpers/select-types.js +1 -0
  165. package/dist/esm/core/pg-family/cockroachdb-client/capabilities.js +28 -0
  166. package/dist/esm/core/pg-family/cockroachdb-client/index.js +2 -0
  167. package/dist/esm/core/pg-family/cockroachdb-client/relq-cockroach.js +12 -0
  168. package/dist/esm/core/pg-family/dsql-client/capabilities.js +28 -0
  169. package/dist/esm/core/pg-family/dsql-client/index.js +2 -0
  170. package/dist/esm/core/pg-family/dsql-client/relq-dsql.js +12 -0
  171. package/dist/esm/core/pg-family/index.js +6 -0
  172. package/dist/esm/core/pg-family/nile-client/capabilities.js +28 -0
  173. package/dist/esm/core/pg-family/nile-client/index.js +2 -0
  174. package/dist/esm/core/pg-family/nile-client/relq-nile.js +32 -0
  175. package/dist/esm/core/pg-family/nile-client/tenant-context.js +40 -0
  176. package/dist/esm/core/pg-family/pg-client/capabilities.js +28 -0
  177. package/dist/esm/core/pg-family/pg-client/index.js +2 -0
  178. package/dist/esm/core/pg-family/pg-client/relq-postgres.js +39 -0
  179. package/dist/esm/core/pg-family/shared/pg-base.js +347 -0
  180. package/dist/esm/core/pg-family/shared/pg-dialect.js +63 -0
  181. package/dist/esm/core/pg-family/shared/pg-error-parser.js +29 -0
  182. package/dist/esm/core/pg-family/shared/pg-type-coercion.js +6 -0
  183. package/dist/esm/core/relq-base.js +270 -0
  184. package/dist/esm/core/relq-client.js +48 -0
  185. package/dist/esm/core/shared/cleanup.js +27 -0
  186. package/dist/esm/core/shared/column-mapping.js +90 -0
  187. package/dist/esm/core/shared/errors.js +13 -0
  188. package/dist/esm/core/shared/index.js +6 -0
  189. package/dist/esm/core/shared/table-accessor.js +19 -0
  190. package/dist/esm/core/shared/transform.js +30 -0
  191. package/dist/esm/core/shared/types.js +1 -0
  192. package/dist/esm/core/shared/validation.js +136 -0
  193. package/dist/esm/core/types/core.types.js +1 -0
  194. package/dist/esm/count/count-builder.js +81 -0
  195. package/dist/esm/count/index.js +1 -0
  196. package/dist/esm/delete/delete-builder.js +169 -0
  197. package/dist/esm/delete/index.js +1 -0
  198. package/dist/esm/explain/explain-builder.js +95 -0
  199. package/dist/esm/explain/index.js +1 -0
  200. package/dist/esm/index.js +7 -0
  201. package/dist/esm/insert/conflict-builder.js +202 -0
  202. package/dist/esm/insert/index.js +1 -0
  203. package/dist/esm/insert/insert-builder.js +313 -0
  204. package/dist/esm/insert/insert-from-select-builder.js +79 -0
  205. package/dist/esm/pubsub/index.js +1 -0
  206. package/dist/esm/pubsub/listen-notify-builder.js +48 -0
  207. package/dist/esm/pubsub/listener-connection.js +173 -0
  208. package/dist/esm/raw/index.js +2 -0
  209. package/dist/esm/raw/raw-query-builder.js +20 -0
  210. package/dist/esm/raw/sql-template.js +66 -0
  211. package/dist/esm/select/aggregate-builder.js +172 -0
  212. package/dist/esm/select/index.js +4 -0
  213. package/dist/esm/select/join-builder.js +184 -0
  214. package/dist/esm/select/join-condition-builder.js +181 -0
  215. package/dist/esm/select/join-internals.js +2 -0
  216. package/dist/esm/select/join-many-condition-builder.js +151 -0
  217. package/dist/esm/select/scalar-query-builder.js +126 -0
  218. package/dist/esm/select/scalar-select-builder.js +70 -0
  219. package/dist/esm/select/select-builder.js +419 -0
  220. package/dist/esm/select/sql-expression.js +33 -0
  221. package/dist/esm/select/table-proxy.js +91 -0
  222. package/dist/esm/shared/aws-dsql.js +140 -0
  223. package/dist/esm/shared/errors/relq-errors.js +339 -0
  224. package/dist/esm/shared/pg-format.js +375 -0
  225. package/dist/esm/shared/types/config-types.js +46 -0
  226. package/dist/esm/transaction/index.js +1 -0
  227. package/dist/esm/transaction/transaction-builder.js +70 -0
  228. package/dist/esm/types/aggregate-types.js +1 -0
  229. package/dist/esm/types/inference-types.js +12 -0
  230. package/dist/esm/types/pagination-types.js +4 -0
  231. package/dist/esm/types/result-types.js +1 -0
  232. package/dist/esm/types/scalar-types.js +1 -0
  233. package/dist/esm/types/schema-types.js +1 -0
  234. package/dist/esm/types/subscription-types.js +1 -0
  235. package/dist/esm/types.js +1 -0
  236. package/dist/esm/update/array-update-builder.js +219 -0
  237. package/dist/esm/update/index.js +3 -0
  238. package/dist/esm/update/jsonb-update-builder.js +211 -0
  239. package/dist/esm/update/update-builder.js +267 -0
  240. package/dist/esm/utils/addon/pg/cursor.js +1 -0
  241. package/dist/esm/utils/addon/pg/pg.js +2 -0
  242. package/dist/esm/utils/case-converter.js +55 -0
  243. package/dist/esm/utils/env-resolver.js +213 -0
  244. package/dist/esm/utils/environment-detection.js +114 -0
  245. package/dist/esm/utils/fk-resolver.js +178 -0
  246. package/dist/esm/utils/index.js +4 -0
  247. package/dist/esm/utils/pool-defaults.js +85 -0
  248. package/dist/esm/utils/type-coercion.js +112 -0
  249. package/dist/esm/window/index.js +1 -0
  250. package/dist/esm/window/window-builder.js +73 -0
  251. package/dist/index.cjs +1 -0
  252. package/dist/index.d.ts +7281 -0
  253. package/dist/index.js +1 -0
  254. package/package.json +52 -0
@@ -0,0 +1,124 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.detectEnvironment = detectEnvironment;
7
+ exports.isServerless = isServerless;
8
+ exports.isTraditional = isTraditional;
9
+ exports.isEdge = isEdge;
10
+ exports.getEnvironmentDescription = getEnvironmentDescription;
11
+ const node_process_1 = __importDefault(require("node:process"));
12
+ function detectEnvironment() {
13
+ const detected = [];
14
+ const hasProcess = typeof node_process_1.default !== 'undefined' && node_process_1.default.env !== undefined;
15
+ if (!hasProcess) {
16
+ return {
17
+ type: 'edge',
18
+ provider: 'cloudflare',
19
+ detected: ['NO_PROCESS_OBJECT'],
20
+ hasProcess: false
21
+ };
22
+ }
23
+ if (node_process_1.default.env.VERCEL || node_process_1.default.env.VERCEL_ENV) {
24
+ if (node_process_1.default.env.VERCEL)
25
+ detected.push('VERCEL');
26
+ if (node_process_1.default.env.VERCEL_ENV)
27
+ detected.push('VERCEL_ENV');
28
+ return {
29
+ type: 'serverless',
30
+ provider: 'vercel',
31
+ detected,
32
+ hasProcess: true
33
+ };
34
+ }
35
+ if (node_process_1.default.env.AWS_LAMBDA_FUNCTION_NAME ||
36
+ node_process_1.default.env.AWS_EXECUTION_ENV ||
37
+ node_process_1.default.env.LAMBDA_TASK_ROOT) {
38
+ if (node_process_1.default.env.AWS_LAMBDA_FUNCTION_NAME)
39
+ detected.push('AWS_LAMBDA_FUNCTION_NAME');
40
+ if (node_process_1.default.env.AWS_EXECUTION_ENV)
41
+ detected.push('AWS_EXECUTION_ENV');
42
+ if (node_process_1.default.env.LAMBDA_TASK_ROOT)
43
+ detected.push('LAMBDA_TASK_ROOT');
44
+ return {
45
+ type: 'serverless',
46
+ provider: 'aws-lambda',
47
+ detected,
48
+ hasProcess: true
49
+ };
50
+ }
51
+ if (node_process_1.default.env.NETLIFY || node_process_1.default.env.NETLIFY_DEV) {
52
+ if (node_process_1.default.env.NETLIFY)
53
+ detected.push('NETLIFY');
54
+ if (node_process_1.default.env.NETLIFY_DEV)
55
+ detected.push('NETLIFY_DEV');
56
+ return {
57
+ type: 'serverless',
58
+ provider: 'netlify',
59
+ detected,
60
+ hasProcess: true
61
+ };
62
+ }
63
+ if (node_process_1.default.env.FUNCTION_NAME || node_process_1.default.env.FUNCTION_TARGET || node_process_1.default.env.GCP_PROJECT) {
64
+ if (node_process_1.default.env.FUNCTION_NAME)
65
+ detected.push('FUNCTION_NAME');
66
+ if (node_process_1.default.env.FUNCTION_TARGET)
67
+ detected.push('FUNCTION_TARGET');
68
+ if (node_process_1.default.env.GCP_PROJECT)
69
+ detected.push('GCP_PROJECT');
70
+ return {
71
+ type: 'serverless',
72
+ provider: 'google-cloud',
73
+ detected,
74
+ hasProcess: true
75
+ };
76
+ }
77
+ if (node_process_1.default.env.AZURE_FUNCTIONS_ENVIRONMENT || node_process_1.default.env.WEBSITE_INSTANCE_ID) {
78
+ if (node_process_1.default.env.AZURE_FUNCTIONS_ENVIRONMENT)
79
+ detected.push('AZURE_FUNCTIONS_ENVIRONMENT');
80
+ if (node_process_1.default.env.WEBSITE_INSTANCE_ID)
81
+ detected.push('WEBSITE_INSTANCE_ID');
82
+ return {
83
+ type: 'serverless',
84
+ provider: 'azure',
85
+ detected,
86
+ hasProcess: true
87
+ };
88
+ }
89
+ if (node_process_1.default.env.CLOUDFLARE_WORKERS || node_process_1.default.env.CF_PAGES) {
90
+ if (node_process_1.default.env.CLOUDFLARE_WORKERS)
91
+ detected.push('CLOUDFLARE_WORKERS');
92
+ if (node_process_1.default.env.CF_PAGES)
93
+ detected.push('CF_PAGES');
94
+ return {
95
+ type: 'edge',
96
+ provider: 'cloudflare',
97
+ detected,
98
+ hasProcess: true
99
+ };
100
+ }
101
+ return {
102
+ type: 'traditional',
103
+ detected: [],
104
+ hasProcess: true
105
+ };
106
+ }
107
+ function isServerless() {
108
+ return detectEnvironment().type === 'serverless';
109
+ }
110
+ function isTraditional() {
111
+ return detectEnvironment().type === 'traditional';
112
+ }
113
+ function isEdge() {
114
+ return detectEnvironment().type === 'edge';
115
+ }
116
+ function getEnvironmentDescription(env) {
117
+ if (env.type === 'serverless') {
118
+ return `${env.provider} (serverless)`;
119
+ }
120
+ if (env.type === 'edge') {
121
+ return `${env.provider || 'edge'} runtime`;
122
+ }
123
+ return 'Traditional server';
124
+ }
@@ -0,0 +1,186 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ForeignKeyResolutionError = void 0;
4
+ exports.resolveForeignKey = resolveForeignKey;
5
+ exports.resolveForeignKeyOrThrow = resolveForeignKeyOrThrow;
6
+ exports.getAvailableRelations = getAvailableRelations;
7
+ exports.getAllForeignKeys = getAllForeignKeys;
8
+ class ForeignKeyResolutionError extends Error {
9
+ fromTable;
10
+ toTable;
11
+ constructor(fromTable, toTable, message) {
12
+ super(message || `No foreign key relationship found between "${fromTable}" and "${toTable}"`);
13
+ this.fromTable = fromTable;
14
+ this.toTable = toTable;
15
+ this.name = 'ForeignKeyResolutionError';
16
+ }
17
+ }
18
+ exports.ForeignKeyResolutionError = ForeignKeyResolutionError;
19
+ function isArrayFormat(tableRelations) {
20
+ return Array.isArray(tableRelations);
21
+ }
22
+ function* iterateForeignKeys(tableRelations) {
23
+ if (!tableRelations)
24
+ return;
25
+ if (isArrayFormat(tableRelations)) {
26
+ for (const relationDef of tableRelations) {
27
+ if (relationDef.$type === 'foreignKey' && relationDef.$columns?.length > 0) {
28
+ const columnKey = relationDef.$columns[0].column;
29
+ yield [columnKey, relationDef];
30
+ }
31
+ }
32
+ }
33
+ else {
34
+ for (const [columnKey, relationDef] of Object.entries(tableRelations)) {
35
+ yield [columnKey, relationDef];
36
+ }
37
+ }
38
+ }
39
+ function resolveForeignKey(relations, schema, fromTableKey, toTableKey) {
40
+ if (!relations) {
41
+ return null;
42
+ }
43
+ const fromTableDef = schema[fromTableKey];
44
+ const toTableDef = schema[toTableKey];
45
+ if (!fromTableDef || !toTableDef) {
46
+ return null;
47
+ }
48
+ const fromTableName = fromTableDef.$name || fromTableKey;
49
+ const toTableName = toTableDef.$name || toTableKey;
50
+ const fromTableRelations = relations[fromTableKey];
51
+ if (fromTableRelations) {
52
+ for (const [columnKey, relationDef] of Object.entries(fromTableRelations)) {
53
+ if (relationDef.$type === 'foreignKey' && relationDef.$targetTable === toTableName) {
54
+ const fromColumn = getSourceColumnName(fromTableDef, columnKey, relationDef);
55
+ const toColumn = getTargetColumnName(relationDef, toTableDef);
56
+ return {
57
+ fromTable: fromTableName,
58
+ fromColumn,
59
+ toTable: toTableName,
60
+ toColumn,
61
+ direction: 'forward'
62
+ };
63
+ }
64
+ }
65
+ }
66
+ const toTableRelations = relations[toTableKey];
67
+ if (toTableRelations) {
68
+ for (const [columnKey, relationDef] of Object.entries(toTableRelations)) {
69
+ if (relationDef.$type === 'foreignKey' && relationDef.$targetTable === fromTableName) {
70
+ const toColumn = getSourceColumnName(toTableDef, columnKey, relationDef);
71
+ const fromColumn = getTargetColumnName(relationDef, fromTableDef);
72
+ return {
73
+ fromTable: fromTableName,
74
+ fromColumn,
75
+ toTable: toTableName,
76
+ toColumn,
77
+ direction: 'reverse'
78
+ };
79
+ }
80
+ }
81
+ }
82
+ return null;
83
+ }
84
+ function resolveForeignKeyOrThrow(relations, schema, fromTableKey, toTableKey) {
85
+ const result = resolveForeignKey(relations, schema, fromTableKey, toTableKey);
86
+ if (!result) {
87
+ const availableRelations = getAvailableRelations(relations, fromTableKey);
88
+ let message = `No foreign key relationship found between "${fromTableKey}" and "${toTableKey}".`;
89
+ if (availableRelations.length > 0) {
90
+ message += ` Available relations from "${fromTableKey}": ${availableRelations.join(', ')}.`;
91
+ }
92
+ else {
93
+ message += ` No relations defined for "${fromTableKey}".`;
94
+ }
95
+ message += ' Use an explicit join condition instead.';
96
+ throw new ForeignKeyResolutionError(fromTableKey, toTableKey, message);
97
+ }
98
+ return result;
99
+ }
100
+ function getAvailableRelations(relations, tableKey) {
101
+ if (!relations) {
102
+ return [];
103
+ }
104
+ const tableRelations = relations[tableKey];
105
+ if (!tableRelations) {
106
+ return [];
107
+ }
108
+ return Object.entries(tableRelations)
109
+ .filter(([_, def]) => def.$type === 'foreignKey')
110
+ .map(([key, def]) => `${key} → ${def.$targetTable}`);
111
+ }
112
+ function getAllForeignKeys(relations, schema, tableKey) {
113
+ if (!relations) {
114
+ return [];
115
+ }
116
+ const results = [];
117
+ const tableDef = schema[tableKey];
118
+ if (!tableDef) {
119
+ return [];
120
+ }
121
+ const tableName = tableDef.$name || tableKey;
122
+ const tableRelations = relations[tableKey];
123
+ if (tableRelations) {
124
+ for (const [columnKey, relationDef] of Object.entries(tableRelations)) {
125
+ if (relationDef.$type === 'foreignKey') {
126
+ const targetTableKey = findTableKeyByName(schema, relationDef.$targetTable);
127
+ const targetTableDef = targetTableKey ? schema[targetTableKey] : null;
128
+ results.push({
129
+ fromTable: tableName,
130
+ fromColumn: getSourceColumnName(tableDef, columnKey, relationDef),
131
+ toTable: relationDef.$targetTable,
132
+ toColumn: getTargetColumnName(relationDef, targetTableDef),
133
+ direction: 'forward'
134
+ });
135
+ }
136
+ }
137
+ }
138
+ for (const [otherTableKey, otherRelations] of Object.entries(relations)) {
139
+ if (otherTableKey === tableKey)
140
+ continue;
141
+ for (const [columnKey, relationDef] of Object.entries(otherRelations)) {
142
+ if (relationDef.$type === 'foreignKey' && relationDef.$targetTable === tableName) {
143
+ const otherTableDef = schema[otherTableKey];
144
+ results.push({
145
+ fromTable: tableName,
146
+ fromColumn: getTargetColumnName(relationDef, tableDef),
147
+ toTable: otherTableDef?.$name || otherTableKey,
148
+ toColumn: getSourceColumnName(otherTableDef, columnKey, relationDef),
149
+ direction: 'reverse'
150
+ });
151
+ }
152
+ }
153
+ }
154
+ return results;
155
+ }
156
+ function getSourceColumnName(tableDef, columnKey, relationDef) {
157
+ const colKey = (relationDef.$columns && relationDef.$columns.length > 0)
158
+ ? relationDef.$columns[0].column
159
+ : columnKey;
160
+ if (tableDef && tableDef.$columns && tableDef.$columns[colKey]) {
161
+ const colDef = tableDef.$columns[colKey];
162
+ return colDef.$columnName || colKey;
163
+ }
164
+ return camelToSnake(colKey);
165
+ }
166
+ function getTargetColumnName(relationDef, targetTableDef) {
167
+ const colKey = (relationDef.$references && relationDef.$references.length > 0)
168
+ ? relationDef.$references[0].column
169
+ : 'id';
170
+ if (targetTableDef && targetTableDef.$columns && targetTableDef.$columns[colKey]) {
171
+ const colDef = targetTableDef.$columns[colKey];
172
+ return colDef.$columnName || colKey;
173
+ }
174
+ return colKey;
175
+ }
176
+ function findTableKeyByName(schema, tableName) {
177
+ for (const [key, def] of Object.entries(schema)) {
178
+ if (def.$name === tableName || key === tableName) {
179
+ return key;
180
+ }
181
+ }
182
+ return null;
183
+ }
184
+ function camelToSnake(str) {
185
+ return str.replace(/([A-Z])/g, '_$1').toLowerCase().replace(/^_/, '');
186
+ }
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.mergeWithAwsEnv = exports.mergeWithPgEnv = exports.validateEnvConfig = exports.hasAwsEnvConfig = exports.hasPgEnvConfig = exports.resolveAwsEnv = exports.resolvePgEnv = exports.loadEnvFile = exports.ForeignKeyResolutionError = exports.getAllForeignKeys = exports.getAvailableRelations = exports.resolveForeignKeyOrThrow = exports.resolveForeignKey = exports.format = exports.convertCase = void 0;
7
+ var case_converter_1 = require("./case-converter.cjs");
8
+ Object.defineProperty(exports, "convertCase", { enumerable: true, get: function () { return case_converter_1.convertCase; } });
9
+ var pg_format_1 = require("../shared/pg-format.cjs");
10
+ Object.defineProperty(exports, "format", { enumerable: true, get: function () { return __importDefault(pg_format_1).default; } });
11
+ var fk_resolver_1 = require("./fk-resolver.cjs");
12
+ Object.defineProperty(exports, "resolveForeignKey", { enumerable: true, get: function () { return fk_resolver_1.resolveForeignKey; } });
13
+ Object.defineProperty(exports, "resolveForeignKeyOrThrow", { enumerable: true, get: function () { return fk_resolver_1.resolveForeignKeyOrThrow; } });
14
+ Object.defineProperty(exports, "getAvailableRelations", { enumerable: true, get: function () { return fk_resolver_1.getAvailableRelations; } });
15
+ Object.defineProperty(exports, "getAllForeignKeys", { enumerable: true, get: function () { return fk_resolver_1.getAllForeignKeys; } });
16
+ Object.defineProperty(exports, "ForeignKeyResolutionError", { enumerable: true, get: function () { return fk_resolver_1.ForeignKeyResolutionError; } });
17
+ var env_resolver_1 = require("./env-resolver.cjs");
18
+ Object.defineProperty(exports, "loadEnvFile", { enumerable: true, get: function () { return env_resolver_1.loadEnvFile; } });
19
+ Object.defineProperty(exports, "resolvePgEnv", { enumerable: true, get: function () { return env_resolver_1.resolvePgEnv; } });
20
+ Object.defineProperty(exports, "resolveAwsEnv", { enumerable: true, get: function () { return env_resolver_1.resolveAwsEnv; } });
21
+ Object.defineProperty(exports, "hasPgEnvConfig", { enumerable: true, get: function () { return env_resolver_1.hasPgEnvConfig; } });
22
+ Object.defineProperty(exports, "hasAwsEnvConfig", { enumerable: true, get: function () { return env_resolver_1.hasAwsEnvConfig; } });
23
+ Object.defineProperty(exports, "validateEnvConfig", { enumerable: true, get: function () { return env_resolver_1.validateEnvConfig; } });
24
+ Object.defineProperty(exports, "mergeWithPgEnv", { enumerable: true, get: function () { return env_resolver_1.mergeWithPgEnv; } });
25
+ Object.defineProperty(exports, "mergeWithAwsEnv", { enumerable: true, get: function () { return env_resolver_1.mergeWithAwsEnv; } });
@@ -0,0 +1,91 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getSmartPoolDefaults = getSmartPoolDefaults;
4
+ exports.validatePoolConfig = validatePoolConfig;
5
+ exports.mergeWithDefaults = mergeWithDefaults;
6
+ exports.formatPoolConfig = formatPoolConfig;
7
+ const environment_detection_1 = require("./environment-detection.cjs");
8
+ function getSmartPoolDefaults() {
9
+ const env = (0, environment_detection_1.detectEnvironment)();
10
+ const baseConfig = {
11
+ min: 0,
12
+ idleTimeoutMillis: 10000,
13
+ connectionTimeoutMillis: 10000,
14
+ };
15
+ if (env.type === 'serverless' || env.type === 'edge') {
16
+ return {
17
+ ...baseConfig,
18
+ max: 1,
19
+ idleTimeoutMillis: 1000,
20
+ recommendation: `${env.type === 'serverless' ? 'Serverless' : 'Edge'} environment detected (${env.provider}).\n` +
21
+ ' Pool: min: 0, max: 1 (single lazy connection per invocation)'
22
+ };
23
+ }
24
+ return {
25
+ ...baseConfig,
26
+ max: 10,
27
+ idleTimeoutMillis: 30000,
28
+ recommendation: 'Traditional server environment.\n' +
29
+ ' Pool: min: 0, max: 10 (connections created on demand, scale under load)'
30
+ };
31
+ }
32
+ function validatePoolConfig(config, env) {
33
+ const warnings = [];
34
+ const errors = [];
35
+ const min = config.min ?? 0;
36
+ const max = config.max ?? 10;
37
+ if (env.type === 'edge' && max > 1) {
38
+ warnings.push(`⚠️ Running in ${env.provider} (edge) with pool max: ${max}.\n` +
39
+ ' Edge runtimes have short-lived connections.\n' +
40
+ ' \n' +
41
+ ' Recommended: pool: { min: 0, max: 1 }');
42
+ }
43
+ if (min > max) {
44
+ warnings.push(`⚠️ Pool min (${min}) is greater than max (${max}).\n` +
45
+ ` This is invalid. Min will be clamped to max (${max}).`);
46
+ }
47
+ if (env.type === 'serverless' && max > 1) {
48
+ warnings.push(`⚠️ Running in ${env.provider} with pool max: ${max}.\n` +
49
+ ' Each serverless function will create up to ' + max + ' connections.\n' +
50
+ ' With many concurrent functions, this can exhaust PostgreSQL connections.\n' +
51
+ ' \n' +
52
+ ' Recommended: pool: { min: 0, max: 1 }\n' +
53
+ ' \n' +
54
+ ' If you need connection pooling in serverless:\n' +
55
+ ' - Use PgBouncer or connection pooler\n' +
56
+ ' - Use Supabase (built-in pooling)\n' +
57
+ ' - Use Neon serverless driver');
58
+ }
59
+ if (env.type === 'traditional' && min > 5) {
60
+ warnings.push(`⚠️ Pool min set to ${min}. This keeps ${min} connections always open.\n` +
61
+ ' High min values waste resources when traffic is low.\n' +
62
+ ' \n' +
63
+ ' Recommended: min: 0 (connections created on demand)\n' +
64
+ ' Pool will scale up to max: ' + max + ' under load automatically.');
65
+ }
66
+ if (max > 20) {
67
+ warnings.push(`⚠️ Pool max set to ${max}. This is very high.\n` +
68
+ ' PostgreSQL connection limit is typically 100-200.\n' +
69
+ ' Multiple app instances × max connections can exhaust the database.\n' +
70
+ ' \n' +
71
+ ' Recommended: max: 10-20 per app instance');
72
+ }
73
+ return {
74
+ valid: errors.length === 0,
75
+ warnings,
76
+ errors
77
+ };
78
+ }
79
+ function mergeWithDefaults(userConfig) {
80
+ const defaults = getSmartPoolDefaults();
81
+ return {
82
+ min: userConfig?.min ?? defaults.min,
83
+ max: userConfig?.max ?? defaults.max,
84
+ idleTimeoutMillis: userConfig?.idleTimeoutMillis ?? defaults.idleTimeoutMillis,
85
+ connectionTimeoutMillis: userConfig?.connectionTimeoutMillis ?? defaults.connectionTimeoutMillis,
86
+ recommendation: defaults.recommendation
87
+ };
88
+ }
89
+ function formatPoolConfig(config) {
90
+ return `{ min: ${config.min}, max: ${config.max}, idleTimeout: ${config.idleTimeoutMillis}ms }`;
91
+ }
@@ -0,0 +1,120 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.deserializeValue = deserializeValue;
4
+ exports.deserializeRow = deserializeRow;
5
+ exports.deserializeRows = deserializeRows;
6
+ exports.serializeValue = serializeValue;
7
+ exports.serializeRow = serializeRow;
8
+ exports.extractSchemaColumns = extractSchemaColumns;
9
+ const BIGINT_TYPES = new Set(['BIGINT', 'INT8', 'BIGSERIAL', 'SERIAL8']);
10
+ const DATE_TYPES = new Set(['TIMESTAMP', 'TIMESTAMPTZ', 'DATE', 'TIME', 'TIMETZ']);
11
+ const JSON_TYPES = new Set(['JSON', 'JSONB']);
12
+ function deserializeValue(value, pgType) {
13
+ if (value === null || value === undefined) {
14
+ return value;
15
+ }
16
+ const upperType = pgType.toUpperCase();
17
+ if (BIGINT_TYPES.has(upperType)) {
18
+ if (typeof value === 'string') {
19
+ return BigInt(value);
20
+ }
21
+ if (typeof value === 'number') {
22
+ return BigInt(value);
23
+ }
24
+ return value;
25
+ }
26
+ if (DATE_TYPES.has(upperType) || upperType.startsWith('TIMESTAMP')) {
27
+ if (value instanceof Date) {
28
+ return value;
29
+ }
30
+ if (typeof value === 'string' || typeof value === 'number') {
31
+ return new Date(value);
32
+ }
33
+ return value;
34
+ }
35
+ if (JSON_TYPES.has(upperType)) {
36
+ if (typeof value === 'string') {
37
+ try {
38
+ return JSON.parse(value);
39
+ }
40
+ catch {
41
+ return value;
42
+ }
43
+ }
44
+ return value;
45
+ }
46
+ if (upperType === 'BOOLEAN' || upperType === 'BOOL') {
47
+ if (typeof value === 'string') {
48
+ return value.toLowerCase() === 'true' || value === 't' || value === '1';
49
+ }
50
+ return Boolean(value);
51
+ }
52
+ return value;
53
+ }
54
+ function deserializeRow(row, schema) {
55
+ const result = {};
56
+ const columnMap = new Map();
57
+ for (const [key, config] of Object.entries(schema)) {
58
+ const dbColumnName = config.$columnName || key;
59
+ const sqlType = config.$sqlType || (typeof config.$type === 'string' ? config.$type : 'TEXT');
60
+ columnMap.set(dbColumnName, { key, type: sqlType });
61
+ }
62
+ for (const [dbColumn, value] of Object.entries(row)) {
63
+ const mapping = columnMap.get(dbColumn);
64
+ if (mapping) {
65
+ result[mapping.key] = deserializeValue(value, mapping.type);
66
+ }
67
+ else {
68
+ result[dbColumn] = value;
69
+ }
70
+ }
71
+ return result;
72
+ }
73
+ function deserializeRows(rows, schema) {
74
+ return rows.map(row => deserializeRow(row, schema));
75
+ }
76
+ function serializeValue(value, pgType) {
77
+ if (value === null || value === undefined) {
78
+ return value;
79
+ }
80
+ const upperType = pgType.toUpperCase();
81
+ if (BIGINT_TYPES.has(upperType)) {
82
+ if (typeof value === 'bigint') {
83
+ return value.toString();
84
+ }
85
+ return value;
86
+ }
87
+ if (DATE_TYPES.has(upperType) || upperType.startsWith('TIMESTAMP')) {
88
+ if (value instanceof Date) {
89
+ return value.toISOString();
90
+ }
91
+ return value;
92
+ }
93
+ if (JSON_TYPES.has(upperType)) {
94
+ if (typeof value === 'object' && value !== null) {
95
+ return JSON.stringify(value);
96
+ }
97
+ return value;
98
+ }
99
+ return value;
100
+ }
101
+ function serializeRow(row, schema) {
102
+ const result = {};
103
+ for (const [key, value] of Object.entries(row)) {
104
+ const config = schema[key];
105
+ if (config) {
106
+ const sqlType = config.$sqlType || (typeof config.$type === 'string' ? config.$type : 'TEXT');
107
+ result[key] = serializeValue(value, sqlType);
108
+ }
109
+ else {
110
+ result[key] = value;
111
+ }
112
+ }
113
+ return result;
114
+ }
115
+ function extractSchemaColumns(tableDefinition) {
116
+ if (tableDefinition && tableDefinition.$columns) {
117
+ return tableDefinition.$columns;
118
+ }
119
+ return null;
120
+ }
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.WindowBuilder = void 0;
4
+ var window_builder_1 = require("./window-builder.cjs");
5
+ Object.defineProperty(exports, "WindowBuilder", { enumerable: true, get: function () { return window_builder_1.WindowBuilder; } });
@@ -0,0 +1,80 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.WindowBuilder = void 0;
7
+ const pg_format_1 = __importDefault(require("../shared/pg-format.cjs"));
8
+ class WindowBuilder {
9
+ partitionColumns = [];
10
+ orderColumns = [];
11
+ frameStart;
12
+ frameEnd;
13
+ frameMode;
14
+ partitionBy(...columns) {
15
+ this.partitionColumns.push(...columns);
16
+ return this;
17
+ }
18
+ orderBy(column, direction = 'ASC') {
19
+ this.orderColumns.push({ column, direction });
20
+ return this;
21
+ }
22
+ rows(start, end) {
23
+ this.frameMode = 'ROWS';
24
+ this.frameStart = typeof start === 'number' ? `${start} PRECEDING` : start;
25
+ this.frameEnd = end ? (typeof end === 'number' ? `${end} FOLLOWING` : end) : 'CURRENT ROW';
26
+ return this;
27
+ }
28
+ range(start, end) {
29
+ this.frameMode = 'RANGE';
30
+ this.frameStart = typeof start === 'number' ? `${start} PRECEDING` : start;
31
+ this.frameEnd = end ? (typeof end === 'number' ? `${end} FOLLOWING` : end) : 'CURRENT ROW';
32
+ return this;
33
+ }
34
+ groups(start, end) {
35
+ this.frameMode = 'GROUPS';
36
+ this.frameStart = typeof start === 'number' ? `${start} PRECEDING` : start;
37
+ this.frameEnd = end ? (typeof end === 'number' ? `${end} FOLLOWING` : end) : 'CURRENT ROW';
38
+ return this;
39
+ }
40
+ toString() {
41
+ const parts = [];
42
+ if (this.partitionColumns.length > 0) {
43
+ parts.push(`PARTITION BY ${this.partitionColumns.map(c => pg_format_1.default.ident(c)).join(', ')}`);
44
+ }
45
+ if (this.orderColumns.length > 0) {
46
+ parts.push(`ORDER BY ${this.orderColumns.map(o => `${pg_format_1.default.ident(o.column)} ${o.direction}`).join(', ')}`);
47
+ }
48
+ if (this.frameMode && this.frameStart) {
49
+ parts.push(`${this.frameMode} BETWEEN ${this.frameStart} AND ${this.frameEnd}`);
50
+ }
51
+ return parts.join(' ');
52
+ }
53
+ rowNumber() {
54
+ return `ROW_NUMBER() OVER (${this.toString()})`;
55
+ }
56
+ rank() {
57
+ return `RANK() OVER (${this.toString()})`;
58
+ }
59
+ denseRank() {
60
+ return `DENSE_RANK() OVER (${this.toString()})`;
61
+ }
62
+ lag(column, offset = 1, defaultValue) {
63
+ const def = defaultValue !== undefined ? `, ${(0, pg_format_1.default)('%L', defaultValue)}` : '';
64
+ return `LAG(${pg_format_1.default.ident(column)}, ${offset}${def}) OVER (${this.toString()})`;
65
+ }
66
+ lead(column, offset = 1, defaultValue) {
67
+ const def = defaultValue !== undefined ? `, ${(0, pg_format_1.default)('%L', defaultValue)}` : '';
68
+ return `LEAD(${pg_format_1.default.ident(column)}, ${offset}${def}) OVER (${this.toString()})`;
69
+ }
70
+ firstValue(column) {
71
+ return `FIRST_VALUE(${pg_format_1.default.ident(column)}) OVER (${this.toString()})`;
72
+ }
73
+ lastValue(column) {
74
+ return `LAST_VALUE(${pg_format_1.default.ident(column)}) OVER (${this.toString()})`;
75
+ }
76
+ nthValue(column, n) {
77
+ return `NTH_VALUE(${pg_format_1.default.ident(column)}, ${n}) OVER (${this.toString()})`;
78
+ }
79
+ }
80
+ exports.WindowBuilder = WindowBuilder;
@@ -0,0 +1,15 @@
1
+ import { Relq, RelqPostgres, RelqNile } from "./core/relq-client.js";
2
+ const schema = {};
3
+ const pg1 = new Relq(schema, 'postgres');
4
+ const nile1 = new Relq(schema, 'nile');
5
+ const crdb1 = new Relq(schema, 'cockroachdb');
6
+ const dsql1 = new Relq(schema, 'awsdsql');
7
+ const pg2 = new Relq(schema, 'postgres', { host: 'localhost' });
8
+ const nile2 = new Relq(schema, 'nile', { host: 'db.thenile.dev' });
9
+ const pg3 = new RelqPostgres(schema);
10
+ const nile3 = new RelqNile(schema);
11
+ pg1.subscribe;
12
+ nile1.subscribe;
13
+ nile1.setTenant;
14
+ pg1.setTenant;
15
+ console.log('All type checks passed!');