@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,181 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.getAwsDsqlToken = getAwsDsqlToken;
40
+ exports.clearAwsDsqlToken = clearAwsDsqlToken;
41
+ exports.isAwsDsql = isAwsDsql;
42
+ const node_process_1 = __importDefault(require("node:process"));
43
+ const node_fs_1 = require("node:fs");
44
+ const node_path_1 = require("node:path");
45
+ const node_os_1 = require("node:os");
46
+ const node_crypto_1 = require("node:crypto");
47
+ const node_constants_1 = require("node:constants");
48
+ const relq_errors_1 = require("./errors/relq-errors.cjs");
49
+ const tokenCache = new Map();
50
+ function getCacheKey(config) {
51
+ const hash = (0, node_crypto_1.createHash)('md5')
52
+ .update(`${config.secretAccessKey ?? ''}-${config.accessKeyId ?? ''}-${config.region}-${config.hostname}`)
53
+ .digest('hex');
54
+ return hash;
55
+ }
56
+ function getTempFolder() {
57
+ return (0, node_path_1.join)((0, node_os_1.tmpdir)(), '.dsql_');
58
+ }
59
+ function isTempFolderAvailable() {
60
+ const tempFolder = getTempFolder();
61
+ try {
62
+ (0, node_fs_1.mkdirSync)(tempFolder, { recursive: true });
63
+ (0, node_fs_1.accessSync)(tempFolder, node_constants_1.F_OK | node_constants_1.R_OK | node_constants_1.W_OK);
64
+ return true;
65
+ }
66
+ catch {
67
+ return false;
68
+ }
69
+ }
70
+ function getFromCache(cacheKey) {
71
+ const memoryToken = tokenCache.get(cacheKey);
72
+ if (memoryToken && memoryToken.expiresAt > Date.now()) {
73
+ return memoryToken;
74
+ }
75
+ const envName = `DSQL_TOKEN_${cacheKey}`;
76
+ const envToken = node_process_1.default.env[envName];
77
+ if (envToken) {
78
+ try {
79
+ const parsed = JSON.parse(envToken);
80
+ if (parsed.expiresAt > Date.now()) {
81
+ tokenCache.set(cacheKey, parsed);
82
+ return parsed;
83
+ }
84
+ }
85
+ catch { }
86
+ }
87
+ if (isTempFolderAvailable()) {
88
+ const tokenFile = (0, node_path_1.join)(getTempFolder(), `${cacheKey}.json`);
89
+ if ((0, node_fs_1.existsSync)(tokenFile)) {
90
+ try {
91
+ const parsed = JSON.parse((0, node_fs_1.readFileSync)(tokenFile, 'utf8'));
92
+ if (parsed.expiresAt > Date.now()) {
93
+ tokenCache.set(cacheKey, parsed);
94
+ node_process_1.default.env[envName] = JSON.stringify(parsed);
95
+ return parsed;
96
+ }
97
+ }
98
+ catch { }
99
+ }
100
+ }
101
+ return null;
102
+ }
103
+ function saveToCache(cacheKey, token) {
104
+ tokenCache.set(cacheKey, token);
105
+ const envName = `DSQL_TOKEN_${cacheKey}`;
106
+ node_process_1.default.env[envName] = JSON.stringify(token);
107
+ if (isTempFolderAvailable()) {
108
+ const tokenFile = (0, node_path_1.join)(getTempFolder(), `${cacheKey}.json`);
109
+ try {
110
+ (0, node_fs_1.writeFileSync)(tokenFile, JSON.stringify(token));
111
+ }
112
+ catch { }
113
+ }
114
+ }
115
+ let DsqlSigner = null;
116
+ async function loadAwsSdk() {
117
+ if (!DsqlSigner) {
118
+ try {
119
+ const sdk = await Promise.resolve().then(() => __importStar(require('@aws-sdk/dsql-signer')));
120
+ DsqlSigner = sdk.DsqlSigner;
121
+ }
122
+ catch (error) {
123
+ throw new relq_errors_1.RelqConfigError('AWS DSQL requires @aws-sdk/dsql-signer package.\n\n' +
124
+ 'Install it with:\n' +
125
+ ' npm install @aws-sdk/dsql-signer\n' +
126
+ ' # or\n' +
127
+ ' bun add @aws-sdk/dsql-signer', { field: '@aws-sdk/dsql-signer', value: 'not installed' });
128
+ }
129
+ }
130
+ return DsqlSigner;
131
+ }
132
+ async function getAwsDsqlToken(config) {
133
+ const cacheKey = getCacheKey(config);
134
+ const cached = getFromCache(cacheKey);
135
+ if (cached) {
136
+ return cached.token;
137
+ }
138
+ if (!config.useDefaultCredentials && (!config.accessKeyId || !config.secretAccessKey)) {
139
+ throw new relq_errors_1.RelqConfigError('AWS DSQL requires credentials. Either provide accessKeyId + secretAccessKey, ' +
140
+ 'or set useDefaultCredentials: true to use AWS credential chain.', { field: 'aws.credentials', value: 'missing' });
141
+ }
142
+ const SignerClass = await loadAwsSdk();
143
+ const expiresIn = config.tokenExpiresIn ?? 604800;
144
+ const signerConfig = {
145
+ hostname: config.hostname,
146
+ region: config.region,
147
+ expiresIn,
148
+ };
149
+ if (!config.useDefaultCredentials) {
150
+ signerConfig.credentials = {
151
+ accessKeyId: config.accessKeyId,
152
+ secretAccessKey: config.secretAccessKey,
153
+ };
154
+ }
155
+ const signer = new SignerClass(signerConfig);
156
+ const token = await signer.getDbConnectAdminAuthToken();
157
+ const cachedToken = {
158
+ token,
159
+ expiresAt: Date.now() + ((expiresIn - 30) * 1000)
160
+ };
161
+ saveToCache(cacheKey, cachedToken);
162
+ return token;
163
+ }
164
+ function clearAwsDsqlToken(config) {
165
+ const cacheKey = getCacheKey(config);
166
+ tokenCache.delete(cacheKey);
167
+ const envName = `DSQL_TOKEN_${cacheKey}`;
168
+ delete node_process_1.default.env[envName];
169
+ if (isTempFolderAvailable()) {
170
+ const tokenFile = (0, node_path_1.join)(getTempFolder(), `${cacheKey}.json`);
171
+ try {
172
+ if ((0, node_fs_1.existsSync)(tokenFile)) {
173
+ (0, node_fs_1.writeFileSync)(tokenFile, '');
174
+ }
175
+ }
176
+ catch { }
177
+ }
178
+ }
179
+ function isAwsDsql(config) {
180
+ return !!config.aws?.hostname && !!config.aws?.region;
181
+ }
@@ -0,0 +1,361 @@
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.RelqBuilderError = exports.RelqEnvironmentError = exports.RelqPoolError = exports.RelqTimeoutError = exports.RelqConfigError = exports.RelqTransactionError = exports.RelqQueryError = exports.RelqConnectionError = exports.RelqError = void 0;
7
+ exports.setupErrorHandler = setupErrorHandler;
8
+ exports.isRelqError = isRelqError;
9
+ exports.isRelqConnectionError = isRelqConnectionError;
10
+ exports.isRelqQueryError = isRelqQueryError;
11
+ exports.isRelqBuilderError = isRelqBuilderError;
12
+ exports.wrapError = wrapError;
13
+ exports.parsePostgresError = parsePostgresError;
14
+ const node_process_1 = __importDefault(require("node:process"));
15
+ function setupErrorHandler() {
16
+ if (typeof node_process_1.default === 'undefined' || !node_process_1.default.on)
17
+ return;
18
+ node_process_1.default.on('uncaughtException', (error) => {
19
+ if (error instanceof RelqError) {
20
+ const inspect = error[Symbol.for('nodejs.util.inspect.custom')];
21
+ if (typeof inspect === 'function') {
22
+ console.error(inspect.call(error, 0, {}));
23
+ }
24
+ else {
25
+ console.error(`${error.name}: ${error.message}`);
26
+ }
27
+ }
28
+ else {
29
+ console.error(`${error.name || 'Error'}: ${error.message}`);
30
+ if (error.stack) {
31
+ const stackLines = error.stack.split('\n').filter(line => line.trim().startsWith('at '));
32
+ console.error(stackLines.slice(0, 5).join('\n'));
33
+ }
34
+ }
35
+ node_process_1.default.exit();
36
+ });
37
+ node_process_1.default.on('unhandledRejection', (reason) => {
38
+ if (reason instanceof RelqError) {
39
+ const inspect = reason[Symbol.for('nodejs.util.inspect.custom')];
40
+ if (typeof inspect === 'function') {
41
+ console.error(inspect.call(reason, 0, {}));
42
+ }
43
+ else {
44
+ console.error(`${reason.name}: ${reason.message}`);
45
+ }
46
+ }
47
+ else if (reason instanceof Error) {
48
+ console.error(`${reason.name || 'Error'}: ${reason.message}`);
49
+ if (reason.stack) {
50
+ const stackLines = reason.stack.split('\n').filter(line => line.trim().startsWith('at '));
51
+ console.error(stackLines.slice(0, 5).join('\n'));
52
+ }
53
+ }
54
+ else {
55
+ console.error('Unhandled rejection:', reason);
56
+ }
57
+ node_process_1.default.exit();
58
+ });
59
+ }
60
+ class RelqError extends Error {
61
+ name;
62
+ cause;
63
+ timestamp;
64
+ constructor(message, cause) {
65
+ super(message);
66
+ this.name = 'RelqError';
67
+ this.cause = cause;
68
+ this.timestamp = new Date();
69
+ if (Error.captureStackTrace) {
70
+ Error.captureStackTrace(this, this.constructor);
71
+ }
72
+ }
73
+ [Symbol.for('nodejs.util.inspect.custom')](_depth, _options) {
74
+ const lines = [
75
+ `${this.name}: ${this.message}`,
76
+ ` timestamp: ${this.timestamp.toISOString()}`
77
+ ];
78
+ const props = this._getInspectProps();
79
+ for (const [key, value] of Object.entries(props)) {
80
+ const strVal = value === undefined ? 'undefined' : JSON.stringify(value);
81
+ lines.push(`${key.padStart(10)}: ${strVal}`);
82
+ }
83
+ if (this.stack) {
84
+ const stackLines = this.stack.split('\n').filter(line => line.trim().startsWith('at ') || line.includes(this.name));
85
+ lines.push('');
86
+ lines.push(...stackLines.slice(1, 6));
87
+ }
88
+ return lines.join('\n');
89
+ }
90
+ _getInspectProps() {
91
+ return {};
92
+ }
93
+ toJSON() {
94
+ return {
95
+ name: this.name,
96
+ message: this.message,
97
+ cause: this.cause?.message,
98
+ timestamp: this.timestamp.toISOString(),
99
+ stack: this.stack
100
+ };
101
+ }
102
+ }
103
+ exports.RelqError = RelqError;
104
+ class RelqConnectionError extends RelqError {
105
+ name = 'RelqConnectionError';
106
+ code;
107
+ host;
108
+ port;
109
+ constructor(message, options) {
110
+ super(message, options?.cause);
111
+ this.code = options?.code;
112
+ this.host = options?.host;
113
+ this.port = options?.port;
114
+ }
115
+ _getInspectProps() {
116
+ return { code: this.code, host: this.host, port: this.port };
117
+ }
118
+ toJSON() {
119
+ return {
120
+ ...super.toJSON(),
121
+ code: this.code,
122
+ host: this.host,
123
+ port: this.port
124
+ };
125
+ }
126
+ }
127
+ exports.RelqConnectionError = RelqConnectionError;
128
+ class RelqQueryError extends RelqError {
129
+ name = 'RelqQueryError';
130
+ sql;
131
+ code;
132
+ detail;
133
+ hint;
134
+ constructor(message, options) {
135
+ super(message, options?.cause);
136
+ this.sql = options?.sql;
137
+ this.code = options?.code;
138
+ this.detail = options?.detail;
139
+ this.hint = options?.hint;
140
+ }
141
+ _getInspectProps() {
142
+ return { sql: this.sql, detail: this.detail, hint: this.hint, code: this.code };
143
+ }
144
+ toJSON() {
145
+ return {
146
+ ...super.toJSON(),
147
+ sql: this.sql,
148
+ code: this.code,
149
+ detail: this.detail,
150
+ hint: this.hint
151
+ };
152
+ }
153
+ }
154
+ exports.RelqQueryError = RelqQueryError;
155
+ class RelqTransactionError extends RelqError {
156
+ name = 'RelqTransactionError';
157
+ operation;
158
+ transactionState;
159
+ constructor(message, operation, options) {
160
+ super(message, options?.cause);
161
+ this.operation = operation;
162
+ this.transactionState = options?.transactionState;
163
+ }
164
+ _getInspectProps() {
165
+ return { operation: this.operation, transactionState: this.transactionState };
166
+ }
167
+ toJSON() {
168
+ return {
169
+ ...super.toJSON(),
170
+ operation: this.operation,
171
+ transactionState: this.transactionState
172
+ };
173
+ }
174
+ }
175
+ exports.RelqTransactionError = RelqTransactionError;
176
+ class RelqConfigError extends RelqError {
177
+ name = 'RelqConfigError';
178
+ field;
179
+ value;
180
+ constructor(message, options) {
181
+ super(message);
182
+ this.field = options?.field;
183
+ this.value = options?.value;
184
+ }
185
+ _getInspectProps() {
186
+ return { field: this.field, value: this.value };
187
+ }
188
+ toJSON() {
189
+ return {
190
+ ...super.toJSON(),
191
+ field: this.field,
192
+ value: this.value
193
+ };
194
+ }
195
+ }
196
+ exports.RelqConfigError = RelqConfigError;
197
+ class RelqTimeoutError extends RelqError {
198
+ name = 'RelqTimeoutError';
199
+ timeout;
200
+ operation;
201
+ constructor(message, timeout, operation, cause) {
202
+ super(message, cause);
203
+ this.timeout = timeout;
204
+ this.operation = operation;
205
+ }
206
+ _getInspectProps() {
207
+ return { timeout: this.timeout, operation: this.operation };
208
+ }
209
+ toJSON() {
210
+ return {
211
+ ...super.toJSON(),
212
+ timeout: this.timeout,
213
+ operation: this.operation
214
+ };
215
+ }
216
+ }
217
+ exports.RelqTimeoutError = RelqTimeoutError;
218
+ class RelqPoolError extends RelqError {
219
+ name = 'RelqPoolError';
220
+ poolSize;
221
+ activeConnections;
222
+ waitingClients;
223
+ constructor(message, options) {
224
+ super(message, options?.cause);
225
+ this.poolSize = options?.poolSize;
226
+ this.activeConnections = options?.activeConnections;
227
+ this.waitingClients = options?.waitingClients;
228
+ }
229
+ _getInspectProps() {
230
+ return { poolSize: this.poolSize, activeConnections: this.activeConnections, waitingClients: this.waitingClients };
231
+ }
232
+ toJSON() {
233
+ return {
234
+ ...super.toJSON(),
235
+ poolSize: this.poolSize,
236
+ activeConnections: this.activeConnections,
237
+ waitingClients: this.waitingClients
238
+ };
239
+ }
240
+ }
241
+ exports.RelqPoolError = RelqPoolError;
242
+ class RelqEnvironmentError extends RelqError {
243
+ name = 'RelqEnvironmentError';
244
+ environment;
245
+ reason;
246
+ constructor(message, environment, reason) {
247
+ super(message);
248
+ this.environment = environment;
249
+ this.reason = reason;
250
+ }
251
+ _getInspectProps() {
252
+ return { environment: this.environment, reason: this.reason };
253
+ }
254
+ toJSON() {
255
+ return {
256
+ ...super.toJSON(),
257
+ environment: this.environment,
258
+ reason: this.reason
259
+ };
260
+ }
261
+ }
262
+ exports.RelqEnvironmentError = RelqEnvironmentError;
263
+ class RelqBuilderError extends RelqError {
264
+ name = 'RelqBuilderError';
265
+ builder;
266
+ missing;
267
+ hint;
268
+ constructor(message, options) {
269
+ super(message);
270
+ this.builder = options?.builder;
271
+ this.missing = options?.missing;
272
+ this.hint = options?.hint;
273
+ }
274
+ _getInspectProps() {
275
+ return { builder: this.builder, missing: this.missing, hint: this.hint };
276
+ }
277
+ toJSON() {
278
+ return {
279
+ ...super.toJSON(),
280
+ builder: this.builder,
281
+ missing: this.missing,
282
+ hint: this.hint
283
+ };
284
+ }
285
+ }
286
+ exports.RelqBuilderError = RelqBuilderError;
287
+ function isRelqError(error) {
288
+ return error instanceof RelqError;
289
+ }
290
+ function isRelqConnectionError(error) {
291
+ return error instanceof RelqConnectionError;
292
+ }
293
+ function isRelqQueryError(error) {
294
+ return error instanceof RelqQueryError;
295
+ }
296
+ function isRelqBuilderError(error) {
297
+ return error instanceof RelqBuilderError;
298
+ }
299
+ function wrapError(error, context) {
300
+ if (isRelqError(error)) {
301
+ return error;
302
+ }
303
+ if (error instanceof Error) {
304
+ const message = context ? `${context}: ${error.message}` : error.message;
305
+ return new RelqError(message, error);
306
+ }
307
+ const message = context
308
+ ? `${context}: ${String(error)}`
309
+ : String(error);
310
+ return new RelqError(message);
311
+ }
312
+ function parsePostgresError(error, sql) {
313
+ const message = error.message || 'Database error';
314
+ const code = error.code;
315
+ if (isNetworkErrorCode(code)) {
316
+ return new RelqConnectionError(message, {
317
+ cause: error,
318
+ code,
319
+ host: error.hostname || error.address,
320
+ port: error.port
321
+ });
322
+ }
323
+ if (code === '57P01' || code === '57P03' || code === '08006' || code === '08001' || code === '08004') {
324
+ return new RelqConnectionError(message, {
325
+ cause: error,
326
+ code,
327
+ host: error.hostname,
328
+ port: error.port
329
+ });
330
+ }
331
+ if (code === '57014') {
332
+ return new RelqTimeoutError('Query execution timed out', error.timeout || 0, 'query', error);
333
+ }
334
+ if (message.includes('timeout exceeded when trying to connect')) {
335
+ return new RelqTimeoutError('Connection timed out', error.timeout || 0, 'connection', error);
336
+ }
337
+ if (!code && (message.includes('Connection terminated') ||
338
+ message.includes('connection is closed') ||
339
+ message.includes('Client has encountered a connection error'))) {
340
+ return new RelqConnectionError(message, {
341
+ cause: error,
342
+ host: error.hostname || error.address,
343
+ port: error.port
344
+ });
345
+ }
346
+ return new RelqQueryError(message, {
347
+ cause: error,
348
+ sql,
349
+ code,
350
+ detail: error.detail,
351
+ hint: error.hint
352
+ });
353
+ }
354
+ const NETWORK_ERROR_CODES = new Set([
355
+ 'ECONNREFUSED', 'ECONNRESET', 'ENOTFOUND', 'ESERVFAIL',
356
+ 'ETIMEDOUT', 'EPIPE', 'EAI_AGAIN', 'EHOSTUNREACH',
357
+ 'CONNECTION_LOST', 'PROTOCOL_CONNECTION_LOST',
358
+ ]);
359
+ function isNetworkErrorCode(code) {
360
+ return !!code && NETWORK_ERROR_CODES.has(code);
361
+ }