@clickhouse/client 1.22.0 → 1.23.0-head.287977a.1

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 (163) hide show
  1. package/README.md +2 -1
  2. package/dist/client.d.ts +2 -2
  3. package/dist/client.js +11 -4
  4. package/dist/client.js.map +1 -1
  5. package/dist/common/clickhouse_types.d.ts +98 -0
  6. package/dist/common/clickhouse_types.js +30 -0
  7. package/dist/common/clickhouse_types.js.map +1 -0
  8. package/dist/common/client.d.ts +233 -0
  9. package/dist/common/client.js +414 -0
  10. package/dist/common/client.js.map +1 -0
  11. package/dist/common/config.d.ts +234 -0
  12. package/dist/common/config.js +364 -0
  13. package/dist/common/config.js.map +1 -0
  14. package/dist/common/connection.d.ts +124 -0
  15. package/dist/common/connection.js +3 -0
  16. package/dist/common/connection.js.map +1 -0
  17. package/dist/common/data_formatter/format_query_params.d.ts +11 -0
  18. package/dist/common/data_formatter/format_query_params.js +128 -0
  19. package/dist/common/data_formatter/format_query_params.js.map +1 -0
  20. package/dist/common/data_formatter/format_query_settings.d.ts +2 -0
  21. package/dist/common/data_formatter/format_query_settings.js +20 -0
  22. package/dist/common/data_formatter/format_query_settings.js.map +1 -0
  23. package/dist/common/data_formatter/formatter.d.ts +41 -0
  24. package/dist/common/data_formatter/formatter.js +78 -0
  25. package/dist/common/data_formatter/formatter.js.map +1 -0
  26. package/dist/common/data_formatter/index.d.ts +3 -0
  27. package/dist/common/data_formatter/index.js +24 -0
  28. package/dist/common/data_formatter/index.js.map +1 -0
  29. package/dist/common/error/error.d.ts +20 -0
  30. package/dist/common/error/error.js +73 -0
  31. package/dist/common/error/error.js.map +1 -0
  32. package/dist/common/error/index.d.ts +1 -0
  33. package/dist/common/error/index.js +18 -0
  34. package/dist/common/error/index.js.map +1 -0
  35. package/dist/common/index.d.ts +67 -0
  36. package/dist/common/index.js +97 -0
  37. package/dist/common/index.js.map +1 -0
  38. package/dist/common/logger.d.ts +80 -0
  39. package/dist/common/logger.js +154 -0
  40. package/dist/common/logger.js.map +1 -0
  41. package/dist/common/parse/column_types.d.ts +155 -0
  42. package/dist/common/parse/column_types.js +594 -0
  43. package/dist/common/parse/column_types.js.map +1 -0
  44. package/dist/common/parse/index.d.ts +2 -0
  45. package/dist/common/parse/index.js +19 -0
  46. package/dist/common/parse/index.js.map +1 -0
  47. package/dist/common/parse/json_handling.d.ts +19 -0
  48. package/dist/common/parse/json_handling.js +8 -0
  49. package/dist/common/parse/json_handling.js.map +1 -0
  50. package/dist/common/result.d.ts +90 -0
  51. package/dist/common/result.js +3 -0
  52. package/dist/common/result.js.map +1 -0
  53. package/dist/common/settings.d.ts +2007 -0
  54. package/dist/common/settings.js +19 -0
  55. package/dist/common/settings.js.map +1 -0
  56. package/dist/common/tracing.d.ts +146 -0
  57. package/dist/common/tracing.js +76 -0
  58. package/dist/common/tracing.js.map +1 -0
  59. package/dist/common/ts_utils.d.ts +4 -0
  60. package/dist/common/ts_utils.js +3 -0
  61. package/dist/common/ts_utils.js.map +1 -0
  62. package/dist/common/utils/connection.d.ts +21 -0
  63. package/dist/common/utils/connection.js +43 -0
  64. package/dist/common/utils/connection.js.map +1 -0
  65. package/dist/common/utils/index.d.ts +5 -0
  66. package/dist/common/utils/index.js +22 -0
  67. package/dist/common/utils/index.js.map +1 -0
  68. package/dist/common/utils/multipart.d.ts +34 -0
  69. package/dist/common/utils/multipart.js +81 -0
  70. package/dist/common/utils/multipart.js.map +1 -0
  71. package/dist/common/utils/sleep.d.ts +4 -0
  72. package/dist/common/utils/sleep.js +12 -0
  73. package/dist/common/utils/sleep.js.map +1 -0
  74. package/dist/common/utils/stream.d.ts +15 -0
  75. package/dist/common/utils/stream.js +50 -0
  76. package/dist/common/utils/stream.js.map +1 -0
  77. package/dist/common/utils/url.d.ts +20 -0
  78. package/dist/common/utils/url.js +67 -0
  79. package/dist/common/utils/url.js.map +1 -0
  80. package/dist/common/version.d.ts +2 -0
  81. package/dist/common/version.js +4 -0
  82. package/dist/common/version.js.map +1 -0
  83. package/dist/config.d.ts +22 -2
  84. package/dist/config.js +2 -2
  85. package/dist/config.js.map +1 -1
  86. package/dist/connection/compression.d.ts +2 -2
  87. package/dist/connection/compression.js +4 -4
  88. package/dist/connection/compression.js.map +1 -1
  89. package/dist/connection/create_connection.d.ts +1 -1
  90. package/dist/connection/node_base_connection.d.ts +3 -3
  91. package/dist/connection/node_base_connection.js +22 -22
  92. package/dist/connection/node_base_connection.js.map +1 -1
  93. package/dist/connection/node_custom_agent_connection.js +2 -2
  94. package/dist/connection/node_custom_agent_connection.js.map +1 -1
  95. package/dist/connection/node_http_connection.js +2 -2
  96. package/dist/connection/node_http_connection.js.map +1 -1
  97. package/dist/connection/node_https_connection.d.ts +1 -1
  98. package/dist/connection/node_https_connection.js +3 -3
  99. package/dist/connection/node_https_connection.js.map +1 -1
  100. package/dist/connection/socket_pool.d.ts +1 -1
  101. package/dist/connection/socket_pool.js +30 -30
  102. package/dist/connection/socket_pool.js.map +1 -1
  103. package/dist/connection/stream.d.ts +1 -1
  104. package/dist/connection/stream.js +9 -9
  105. package/dist/connection/stream.js.map +1 -1
  106. package/dist/index.d.ts +9 -7
  107. package/dist/index.js +26 -24
  108. package/dist/index.js.map +1 -1
  109. package/dist/result_set.d.ts +1 -1
  110. package/dist/result_set.js +10 -10
  111. package/dist/result_set.js.map +1 -1
  112. package/dist/utils/encoder.d.ts +1 -1
  113. package/dist/utils/encoder.js +5 -5
  114. package/dist/utils/encoder.js.map +1 -1
  115. package/dist/version.d.ts +1 -1
  116. package/dist/version.js +1 -1
  117. package/dist/version.js.map +1 -1
  118. package/package.json +7 -5
  119. package/skills/clickhouse-js-node-rowbinary-parser/EXAMPLES.md +48 -0
  120. package/skills/clickhouse-js-node-rowbinary-parser/README.md +255 -0
  121. package/skills/clickhouse-js-node-rowbinary-parser/SKILL.md +206 -0
  122. package/skills/clickhouse-js-node-rowbinary-parser/case-studies/iot-rowbinary-vs-json.md +83 -0
  123. package/skills/clickhouse-js-node-rowbinary-parser/case-studies/ledger-rowbinary-vs-json.md +103 -0
  124. package/skills/clickhouse-js-node-rowbinary-parser/case-studies/logs-json-wins.md +86 -0
  125. package/skills/clickhouse-js-node-rowbinary-parser/case-studies/wasm-vs-js.md +172 -0
  126. package/skills/clickhouse-js-node-rowbinary-parser/src/aggregateFunction.ts +34 -0
  127. package/skills/clickhouse-js-node-rowbinary-parser/src/bool.ts +10 -0
  128. package/skills/clickhouse-js-node-rowbinary-parser/src/columnar.ts +125 -0
  129. package/skills/clickhouse-js-node-rowbinary-parser/src/compile.ts +318 -0
  130. package/skills/clickhouse-js-node-rowbinary-parser/src/composite.ts +181 -0
  131. package/skills/clickhouse-js-node-rowbinary-parser/src/core.ts +77 -0
  132. package/skills/clickhouse-js-node-rowbinary-parser/src/datetime.ts +113 -0
  133. package/skills/clickhouse-js-node-rowbinary-parser/src/decimals.ts +57 -0
  134. package/skills/clickhouse-js-node-rowbinary-parser/src/dynamic.ts +328 -0
  135. package/skills/clickhouse-js-node-rowbinary-parser/src/enums.ts +28 -0
  136. package/skills/clickhouse-js-node-rowbinary-parser/src/examples/carts.ts +71 -0
  137. package/skills/clickhouse-js-node-rowbinary-parser/src/examples/events.ts +51 -0
  138. package/skills/clickhouse-js-node-rowbinary-parser/src/examples/iot.ts +158 -0
  139. package/skills/clickhouse-js-node-rowbinary-parser/src/examples/ledger.ts +98 -0
  140. package/skills/clickhouse-js-node-rowbinary-parser/src/examples/logs.ts +73 -0
  141. package/skills/clickhouse-js-node-rowbinary-parser/src/examples/observability.ts +142 -0
  142. package/skills/clickhouse-js-node-rowbinary-parser/src/examples/orders.ts +65 -0
  143. package/skills/clickhouse-js-node-rowbinary-parser/src/examples/profiles.ts +60 -0
  144. package/skills/clickhouse-js-node-rowbinary-parser/src/examples/telemetry.ts +102 -0
  145. package/skills/clickhouse-js-node-rowbinary-parser/src/floats.ts +32 -0
  146. package/skills/clickhouse-js-node-rowbinary-parser/src/geo.ts +109 -0
  147. package/skills/clickhouse-js-node-rowbinary-parser/src/header.ts +29 -0
  148. package/skills/clickhouse-js-node-rowbinary-parser/src/integers.ts +95 -0
  149. package/skills/clickhouse-js-node-rowbinary-parser/src/interval.ts +54 -0
  150. package/skills/clickhouse-js-node-rowbinary-parser/src/ip.ts +93 -0
  151. package/skills/clickhouse-js-node-rowbinary-parser/src/json.ts +33 -0
  152. package/skills/clickhouse-js-node-rowbinary-parser/src/lowCardinality.ts +18 -0
  153. package/skills/clickhouse-js-node-rowbinary-parser/src/nested.ts +23 -0
  154. package/skills/clickhouse-js-node-rowbinary-parser/src/nothing.ts +29 -0
  155. package/skills/clickhouse-js-node-rowbinary-parser/src/reader.ts +68 -0
  156. package/skills/clickhouse-js-node-rowbinary-parser/src/rowBinaryWithNamesAndTypes.ts +155 -0
  157. package/skills/clickhouse-js-node-rowbinary-parser/src/rows.ts +58 -0
  158. package/skills/clickhouse-js-node-rowbinary-parser/src/simpleAggregateFunction.ts +20 -0
  159. package/skills/clickhouse-js-node-rowbinary-parser/src/stream.ts +276 -0
  160. package/skills/clickhouse-js-node-rowbinary-parser/src/strings.ts +55 -0
  161. package/skills/clickhouse-js-node-rowbinary-parser/src/time.ts +61 -0
  162. package/skills/clickhouse-js-node-rowbinary-parser/src/uuid.ts +153 -0
  163. package/skills/clickhouse-js-node-rowbinary-parser/src/varint.ts +70 -0
@@ -0,0 +1,364 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.prepareConfigWithURL = prepareConfigWithURL;
4
+ exports.getConnectionParams = getConnectionParams;
5
+ exports.mergeConfigs = mergeConfigs;
6
+ exports.createUrl = createUrl;
7
+ exports.loadConfigOptionsFromURL = loadConfigOptionsFromURL;
8
+ exports.booleanConfigURLValue = booleanConfigURLValue;
9
+ exports.numberConfigURLValue = numberConfigURLValue;
10
+ exports.enumConfigURLValue = enumConfigURLValue;
11
+ const logger_1 = require("./logger");
12
+ const json_handling_1 = require("./parse/json_handling");
13
+ /** Normalizes the public request compression option into the internal codec
14
+ * object, or `undefined` when disabled. `true` keeps gzip for backwards
15
+ * compatibility; the object form (carrying its per-codec option) is passed
16
+ * through verbatim, so untyped JS supplying an unknown codec still reaches the
17
+ * Node guard, which rejects it with a clear error. */
18
+ function normalizeRequestCompression(value) {
19
+ if (!value) {
20
+ return undefined;
21
+ }
22
+ if (value === true) {
23
+ return { codec: "gzip" };
24
+ }
25
+ return value;
26
+ }
27
+ /** Normalizes the public response compression option
28
+ * (`false | true | { codec }`) into the internal codec object, or `undefined`
29
+ * when disabled. `true` keeps gzip for backwards compatibility. */
30
+ function normalizeResponseCompression(value) {
31
+ if (!value) {
32
+ return undefined;
33
+ }
34
+ if (value === true) {
35
+ return { codec: "gzip" };
36
+ }
37
+ return { codec: value.codec };
38
+ }
39
+ /**
40
+ * Validates and normalizes the provided "base" config.
41
+ * Warns about deprecated configuration parameters usage.
42
+ * Parses the common URL parameters into the configuration parameters (these are the same for all implementations).
43
+ * Parses implementation-specific URL parameters using the handler provided by that implementation.
44
+ * Merges these parameters with the base config and implementation-specific defaults.
45
+ * Enforces certain defaults in case of deprecated keys or readonly mode.
46
+ */
47
+ function prepareConfigWithURL(baseConfigOptions, logger, handleImplURLParams) {
48
+ const baseConfig = { ...baseConfigOptions };
49
+ if (baseConfig.additional_headers !== undefined) {
50
+ logger.warn({
51
+ module: "Config",
52
+ message: '"additional_headers" is deprecated. Use "http_headers" instead.',
53
+ });
54
+ baseConfig.http_headers = baseConfig.additional_headers;
55
+ delete baseConfig.additional_headers;
56
+ }
57
+ let configURL;
58
+ if (baseConfig.host !== undefined) {
59
+ logger.warn({
60
+ module: "Config",
61
+ message: '"host" is deprecated. Use "url" instead.',
62
+ });
63
+ configURL = createUrl(baseConfig.host);
64
+ delete baseConfig.host;
65
+ }
66
+ else {
67
+ configURL = createUrl(baseConfig.url);
68
+ }
69
+ const [url, configFromURL] = loadConfigOptionsFromURL(configURL, handleImplURLParams);
70
+ const config = mergeConfigs(baseConfig, configFromURL, logger);
71
+ if (config.pathname !== undefined) {
72
+ url.pathname = config.pathname;
73
+ }
74
+ config.url = url;
75
+ return config;
76
+ }
77
+ function getConnectionParams(config, logger) {
78
+ let auth;
79
+ if (config.access_token !== undefined) {
80
+ if (config.username !== undefined || config.password !== undefined) {
81
+ throw new Error("Both access token and username/password are provided in the configuration. Please use only one authentication method.");
82
+ }
83
+ auth = { access_token: config.access_token, type: "JWT" };
84
+ }
85
+ else {
86
+ auth = {
87
+ username: config.username ?? "default",
88
+ password: config.password ?? "",
89
+ type: "Credentials",
90
+ };
91
+ }
92
+ const log_level = config.log?.level ?? logger_1.ClickHouseLogLevel.WARN;
93
+ const request_timeout = config.request_timeout ?? 30_000;
94
+ const clickhouse_settings = config.clickhouse_settings ?? {};
95
+ if (log_level <= logger_1.ClickHouseLogLevel.WARN) {
96
+ // Warn if request_timeout is high but progress headers are not configured
97
+ // This can lead to socket hang-up errors when long-running queries exceed load balancer idle timeouts
98
+ const THRESHOLD_MS = 60_000; // 60 seconds
99
+ if (request_timeout > THRESHOLD_MS) {
100
+ const send_progress = String(clickhouse_settings.send_progress_in_http_headers) === "1";
101
+ const progress_interval = clickhouse_settings.http_headers_progress_interval_ms;
102
+ if (!send_progress) {
103
+ logger.warn({
104
+ module: "Config",
105
+ message: `request_timeout is set to ${request_timeout}ms, but send_progress_in_http_headers is not enabled. Long-running queries may fail with socket hang-up errors if they exceed the load balancer idle timeout. Consider enabling progress headers with clickhouse_settings: { send_progress_in_http_headers: 1, http_headers_progress_interval_ms: '<interval>' }. See https://github.com/ClickHouse/clickhouse-js/blob/main/docs/howto/long_running_queries.md for more details.`,
106
+ });
107
+ }
108
+ else if (progress_interval === undefined) {
109
+ logger.warn({
110
+ module: "Config",
111
+ message: `request_timeout is set to ${request_timeout}ms and send_progress_in_http_headers is enabled, but http_headers_progress_interval_ms is not set. It is recommended to set http_headers_progress_interval_ms to a value slightly below your load balancer's idle timeout (e.g., '110000' for a 120s LB timeout). See https://github.com/ClickHouse/clickhouse-js/blob/main/docs/howto/long_running_queries.md for more details.`,
112
+ });
113
+ }
114
+ }
115
+ }
116
+ return {
117
+ auth,
118
+ url: config.url,
119
+ application_id: config.application,
120
+ request_timeout,
121
+ max_open_connections: config.max_open_connections ?? 10,
122
+ compression: {
123
+ decompress_response: normalizeResponseCompression(config.compression?.response),
124
+ compress_request: normalizeRequestCompression(config.compression?.request),
125
+ },
126
+ database: config.database ?? "default",
127
+ log_writer: new logger_1.LogWriter(logger, "Connection", log_level),
128
+ log_level: log_level,
129
+ keep_alive: { enabled: config.keep_alive?.enabled ?? true },
130
+ clickhouse_settings,
131
+ http_headers: config.http_headers ?? {},
132
+ json: {
133
+ ...json_handling_1.defaultJSONHandling,
134
+ ...config.json,
135
+ },
136
+ ...(config.use_multipart_params ? { use_multipart_params: true } : {}),
137
+ ...(config.use_multipart_params_auto
138
+ ? { use_multipart_params_auto: true }
139
+ : {}),
140
+ };
141
+ }
142
+ /**
143
+ * Merge two versions of the config: base (hardcoded) from the instance creation and the URL parsed one.
144
+ * URL config takes priority and overrides the base config parameters.
145
+ * If a value is overridden, then a warning will be logged (even if the log level is OFF).
146
+ */
147
+ function mergeConfigs(baseConfig, configFromURL, logger) {
148
+ function deepMerge(base, fromURL, path = []) {
149
+ for (const key of Object.keys(fromURL)) {
150
+ if (typeof fromURL[key] === "object") {
151
+ deepMerge(base, fromURL[key], path.concat(key));
152
+ }
153
+ else {
154
+ let baseAtPath = base;
155
+ for (const key of path) {
156
+ if (baseAtPath[key] === undefined) {
157
+ baseAtPath[key] = {};
158
+ }
159
+ baseAtPath = baseAtPath[key];
160
+ }
161
+ const baseAtKey = baseAtPath[key];
162
+ if (baseAtKey !== undefined) {
163
+ const fullPath = path.concat(key).join(".");
164
+ logger.warn({
165
+ module: "Config",
166
+ message: `"${fullPath}" is overridden by a URL parameter.`,
167
+ });
168
+ }
169
+ baseAtPath[key] = fromURL[key];
170
+ }
171
+ }
172
+ }
173
+ const config = { ...baseConfig };
174
+ deepMerge(config, configFromURL);
175
+ return config;
176
+ }
177
+ function createUrl(configURL) {
178
+ let url;
179
+ try {
180
+ if (typeof configURL === "string" || configURL instanceof URL) {
181
+ url = new URL(configURL);
182
+ }
183
+ else {
184
+ return new URL("http://localhost:8123");
185
+ }
186
+ }
187
+ catch (err) {
188
+ throw new Error("ClickHouse URL is malformed. Expected format: http[s]://[username:password@]hostname:port[/database][?param1=value1&param2=value2]", { cause: err });
189
+ }
190
+ if (url.protocol !== "http:" && url.protocol !== "https:") {
191
+ throw new Error(`ClickHouse URL protocol must be either http or https. Got: ${url.protocol}`);
192
+ }
193
+ return url;
194
+ }
195
+ /**
196
+ * @param url potentially contains auth, database and URL params to parse the configuration from
197
+ * @param handleExtraURLParams some platform-specific URL params might be unknown by the common package;
198
+ * use this function defined in the implementation to handle them. Logs warnings in case of hardcode overrides.
199
+ */
200
+ function loadConfigOptionsFromURL(url, handleExtraURLParams) {
201
+ let config = {};
202
+ // trim is not needed, cause space is not allowed in the URL basic auth and should be encoded as %20
203
+ if (url.username !== "") {
204
+ config.username = decodeURIComponent(url.username);
205
+ }
206
+ if (url.password !== "") {
207
+ config.password = decodeURIComponent(url.password);
208
+ }
209
+ if (url.pathname.trim().length > 1) {
210
+ config.database = url.pathname.slice(1);
211
+ }
212
+ const urlSearchParamsKeys = [...url.searchParams.keys()];
213
+ if (urlSearchParamsKeys.length > 0) {
214
+ const unknownParams = new Set();
215
+ const settingPrefix = "clickhouse_setting_";
216
+ const settingShortPrefix = "ch_";
217
+ const httpHeaderPrefix = "http_header_";
218
+ urlSearchParamsKeys.forEach((key) => {
219
+ let paramWasProcessed = true;
220
+ const value = url.searchParams.get(key);
221
+ if (key.startsWith(settingPrefix)) {
222
+ // clickhouse_settings_*
223
+ const settingKey = key.slice(settingPrefix.length);
224
+ if (config.clickhouse_settings === undefined) {
225
+ config.clickhouse_settings = {};
226
+ }
227
+ config.clickhouse_settings[settingKey] = value;
228
+ }
229
+ else if (key.startsWith(settingShortPrefix)) {
230
+ // ch_*
231
+ const settingKey = key.slice(settingShortPrefix.length);
232
+ if (config.clickhouse_settings === undefined) {
233
+ config.clickhouse_settings = {};
234
+ }
235
+ config.clickhouse_settings[settingKey] = value;
236
+ }
237
+ else if (key.startsWith(httpHeaderPrefix)) {
238
+ // http_headers_*
239
+ const headerKey = key.slice(httpHeaderPrefix.length);
240
+ if (config.http_headers === undefined) {
241
+ config.http_headers = {};
242
+ }
243
+ config.http_headers[headerKey] = value;
244
+ }
245
+ else {
246
+ // static known parameters
247
+ switch (key) {
248
+ case "application":
249
+ config.application = value;
250
+ break;
251
+ case "pathname":
252
+ config.pathname = value;
253
+ break;
254
+ case "session_id":
255
+ config.session_id = value;
256
+ break;
257
+ case "request_timeout":
258
+ config.request_timeout = numberConfigURLValue({
259
+ key,
260
+ value,
261
+ min: 0,
262
+ });
263
+ break;
264
+ case "max_open_connections":
265
+ config.max_open_connections = numberConfigURLValue({
266
+ key,
267
+ value,
268
+ min: 1,
269
+ });
270
+ break;
271
+ case "compression_request":
272
+ if (config.compression === undefined) {
273
+ config.compression = {};
274
+ }
275
+ config.compression.request = booleanConfigURLValue({ key, value });
276
+ break;
277
+ case "compression_response":
278
+ if (config.compression === undefined) {
279
+ config.compression = {};
280
+ }
281
+ config.compression.response = booleanConfigURLValue({
282
+ key,
283
+ value,
284
+ });
285
+ break;
286
+ case "log_level":
287
+ if (config.log === undefined) {
288
+ config.log = {};
289
+ }
290
+ config.log.level = enumConfigURLValue({
291
+ key,
292
+ value,
293
+ enumObject: logger_1.ClickHouseLogLevel,
294
+ });
295
+ break;
296
+ case "keep_alive_enabled":
297
+ if (config.keep_alive === undefined) {
298
+ config.keep_alive = {};
299
+ }
300
+ config.keep_alive.enabled = booleanConfigURLValue({ key, value });
301
+ break;
302
+ case "access_token":
303
+ config.access_token = value;
304
+ break;
305
+ default:
306
+ paramWasProcessed = false;
307
+ unknownParams.add(key);
308
+ break;
309
+ }
310
+ }
311
+ if (paramWasProcessed) {
312
+ // so it won't be passed to the impl URL params handler
313
+ url.searchParams.delete(key);
314
+ }
315
+ });
316
+ if (handleExtraURLParams !== null) {
317
+ const res = handleExtraURLParams(config, url);
318
+ config = res.config;
319
+ if (unknownParams.size > 0) {
320
+ res.handled_params.forEach((k) => unknownParams.delete(k));
321
+ }
322
+ if (res.unknown_params.size > 0) {
323
+ res.unknown_params.forEach((k) => unknownParams.add(k));
324
+ }
325
+ }
326
+ if (unknownParams.size > 0) {
327
+ throw new Error(`Unknown URL parameters: ${Array.from(unknownParams).join(", ")}`);
328
+ }
329
+ }
330
+ // clean up the final ClickHouse URL to be used in the connection
331
+ const clickHouseURL = new URL(`${url.protocol}//${url.host}`);
332
+ return [clickHouseURL, config];
333
+ }
334
+ function booleanConfigURLValue({ key, value, }) {
335
+ const trimmed = value.trim();
336
+ if (trimmed === "true" || trimmed === "1")
337
+ return true;
338
+ if (trimmed === "false" || trimmed === "0")
339
+ return false;
340
+ throw new Error(`"${key}" has invalid boolean value: ${trimmed}. Expected one of: 0, 1, true, false.`);
341
+ }
342
+ function numberConfigURLValue({ key, value, min, max, }) {
343
+ const trimmed = value.trim();
344
+ const number = Number(trimmed);
345
+ if (isNaN(number))
346
+ throw new Error(`"${key}" has invalid numeric value: ${trimmed}`);
347
+ if (min !== undefined && number < min) {
348
+ throw new Error(`"${key}" value ${trimmed} is less than min allowed ${min}`);
349
+ }
350
+ if (max !== undefined && number > max) {
351
+ throw new Error(`"${key}" value ${trimmed} is greater than max allowed ${max}`);
352
+ }
353
+ return number;
354
+ }
355
+ function enumConfigURLValue({ key, value, enumObject, }) {
356
+ const values = Object.keys(enumObject).filter((item) => isNaN(Number(item)));
357
+ const trimmed = value.trim();
358
+ if (!values.includes(trimmed)) {
359
+ const expected = values.join(", ");
360
+ throw new Error(`"${key}" has invalid value: ${trimmed}. Expected one of: ${expected}.`);
361
+ }
362
+ return enumObject[trimmed];
363
+ }
364
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/common/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,124 @@
1
+ import type { JSONHandling } from ".";
2
+ import type { WithClickHouseSummary, WithHttpStatusCode, WithResponseHeaders } from "./clickhouse_types";
3
+ import type { ClickHouseLogLevel, LogWriter } from "./logger";
4
+ import type { ClickHouseSettings } from "./settings";
5
+ export type ConnectionAuth = {
6
+ username: string;
7
+ password: string;
8
+ type: "Credentials";
9
+ } | {
10
+ access_token: string;
11
+ type: "JWT";
12
+ };
13
+ export interface ConnectionParams {
14
+ url: URL;
15
+ request_timeout: number;
16
+ max_open_connections: number;
17
+ compression: CompressionSettings;
18
+ database: string;
19
+ clickhouse_settings: ClickHouseSettings;
20
+ log_writer: LogWriter;
21
+ log_level: ClickHouseLogLevel;
22
+ keep_alive: {
23
+ enabled: boolean;
24
+ };
25
+ application_id?: string;
26
+ http_headers?: Record<string, string>;
27
+ auth: ConnectionAuth;
28
+ json?: JSONHandling;
29
+ use_multipart_params?: boolean;
30
+ use_multipart_params_auto?: boolean;
31
+ }
32
+ /** Compression codecs supported for the HTTP request (insert) and response
33
+ * (read) bodies. `zstd` requires Node.js >= 22.15.0 (zstd support in the
34
+ * built-in `zlib` module); `br` (Brotli) is available on every supported
35
+ * Node.js version. Request-body compression is performed only by
36
+ * `@clickhouse/client` (Node.js); on the web client, response decompression is
37
+ * handled by the browser and only `zstd` is rejected. */
38
+ export type CompressionMethod = "gzip" | "zstd" | "br";
39
+ /** Normalized request (insert) body compression, discriminated by codec so each
40
+ * codec carries its own tuning option: a `level` for gzip/zstd, a `quality` for
41
+ * Brotli. */
42
+ export type RequestCompression = {
43
+ codec: "gzip";
44
+ level?: number;
45
+ } | {
46
+ codec: "zstd";
47
+ level?: number;
48
+ } | {
49
+ codec: "br";
50
+ quality?: number;
51
+ };
52
+ /** Normalized response (read) body compression. The compression options are
53
+ * chosen by the ClickHouse server, so none are carried here. */
54
+ export type ResponseCompression = {
55
+ codec: "gzip";
56
+ } | {
57
+ codec: "zstd";
58
+ } | {
59
+ codec: "br";
60
+ };
61
+ export interface CompressionSettings {
62
+ /** Response decompression codec, or `undefined` to disable. */
63
+ decompress_response: ResponseCompression | undefined;
64
+ /** Request compression codec (with an optional codec-specific level), or
65
+ * `undefined` to disable. */
66
+ compress_request: RequestCompression | undefined;
67
+ }
68
+ export interface ConnBaseQueryParams {
69
+ query: string;
70
+ clickhouse_settings?: ClickHouseSettings;
71
+ query_params?: Record<string, unknown>;
72
+ abort_signal?: AbortSignal;
73
+ session_id?: string;
74
+ query_id?: string;
75
+ auth?: {
76
+ username: string;
77
+ password: string;
78
+ } | {
79
+ access_token: string;
80
+ };
81
+ role?: string | Array<string>;
82
+ http_headers?: Record<string, string>;
83
+ use_multipart_params?: boolean;
84
+ use_multipart_params_auto?: boolean;
85
+ }
86
+ export type ConnPingParams = {
87
+ select: boolean;
88
+ } & Omit<ConnBaseQueryParams, "query" | "query_params">;
89
+ export interface ConnCommandParams extends ConnBaseQueryParams {
90
+ ignore_error_response?: boolean;
91
+ }
92
+ export interface ConnInsertParams<Stream> extends ConnBaseQueryParams {
93
+ values: string | Stream;
94
+ }
95
+ export interface ConnExecParams<Stream> extends ConnBaseQueryParams {
96
+ values?: Stream;
97
+ decompress_response_stream?: boolean;
98
+ ignore_error_response?: boolean;
99
+ }
100
+ export interface ConnBaseResult extends WithResponseHeaders, WithHttpStatusCode {
101
+ query_id: string;
102
+ }
103
+ export interface ConnQueryResult<Stream> extends ConnBaseResult {
104
+ stream: Stream;
105
+ query_id: string;
106
+ }
107
+ export type ConnInsertResult = ConnBaseResult & WithClickHouseSummary;
108
+ export type ConnExecResult<Stream> = ConnQueryResult<Stream> & WithClickHouseSummary;
109
+ export type ConnCommandResult = ConnBaseResult & WithClickHouseSummary;
110
+ export type ConnPingResult = {
111
+ success: true;
112
+ } | {
113
+ success: false;
114
+ error: Error;
115
+ };
116
+ export type ConnOperation = "Ping" | "Query" | "Insert" | "Exec" | "Command";
117
+ export interface Connection<Stream> {
118
+ ping(params: ConnPingParams): Promise<ConnPingResult>;
119
+ query(params: ConnBaseQueryParams): Promise<ConnQueryResult<Stream>>;
120
+ insert(params: ConnInsertParams<Stream>): Promise<ConnInsertResult>;
121
+ command(params: ConnCommandParams): Promise<ConnCommandResult>;
122
+ exec(params: ConnExecParams<Stream>): Promise<ConnExecResult<Stream>>;
123
+ close(): Promise<void>;
124
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=connection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connection.js","sourceRoot":"","sources":["../../src/common/connection.ts"],"names":[],"mappings":""}
@@ -0,0 +1,11 @@
1
+ export declare class TupleParam {
2
+ readonly values: readonly unknown[];
3
+ constructor(values: readonly unknown[]);
4
+ }
5
+ export declare function formatQueryParams({ value, wrapStringInQuotes, printNullAsKeyword, }: FormatQueryParamsOptions): string;
6
+ interface FormatQueryParamsOptions {
7
+ value: unknown;
8
+ wrapStringInQuotes?: boolean;
9
+ printNullAsKeyword?: boolean;
10
+ }
11
+ export {};
@@ -0,0 +1,128 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TupleParam = void 0;
4
+ exports.formatQueryParams = formatQueryParams;
5
+ class TupleParam {
6
+ values;
7
+ constructor(values) {
8
+ this.values = values;
9
+ }
10
+ }
11
+ exports.TupleParam = TupleParam;
12
+ function formatQueryParams({ value, wrapStringInQuotes, printNullAsKeyword, }) {
13
+ return formatQueryParamsInternal({
14
+ value,
15
+ wrapStringInQuotes,
16
+ printNullAsKeyword,
17
+ isInArrayOrTuple: false,
18
+ });
19
+ }
20
+ function formatQueryParamsInternal({ value, wrapStringInQuotes, printNullAsKeyword, isInArrayOrTuple, }) {
21
+ if (value === null || value === undefined) {
22
+ if (printNullAsKeyword)
23
+ return "NULL";
24
+ return "\\N";
25
+ }
26
+ if (Number.isNaN(value))
27
+ return "nan";
28
+ if (value === Number.POSITIVE_INFINITY)
29
+ return "+inf";
30
+ if (value === Number.NEGATIVE_INFINITY)
31
+ return "-inf";
32
+ if (typeof value === "number" || typeof value === "bigint")
33
+ return String(value);
34
+ if (typeof value === "boolean") {
35
+ if (isInArrayOrTuple) {
36
+ return value ? "TRUE" : "FALSE";
37
+ }
38
+ return value ? "1" : "0";
39
+ }
40
+ if (typeof value === "string") {
41
+ let result = "";
42
+ for (let i = 0; i < value.length; i++) {
43
+ switch (value.charCodeAt(i)) {
44
+ case TabASCII:
45
+ result += "\\t";
46
+ break;
47
+ case NewlineASCII:
48
+ result += "\\n";
49
+ break;
50
+ case CarriageReturnASCII:
51
+ result += "\\r";
52
+ break;
53
+ case SingleQuoteASCII:
54
+ result += `\\'`;
55
+ break;
56
+ case BackslashASCII:
57
+ result += "\\\\";
58
+ break;
59
+ default:
60
+ result += value[i];
61
+ }
62
+ }
63
+ return wrapStringInQuotes ? `'${result}'` : result;
64
+ }
65
+ if (Array.isArray(value)) {
66
+ return `[${value
67
+ .map((v) => formatQueryParamsInternal({
68
+ value: v,
69
+ wrapStringInQuotes: true,
70
+ printNullAsKeyword: true,
71
+ isInArrayOrTuple: true,
72
+ }))
73
+ .join(",")}]`;
74
+ }
75
+ if (value instanceof Date) {
76
+ // The ClickHouse server parses numbers as time-zone-agnostic Unix timestamps
77
+ const unixTimestamp = Math.floor(value.getTime() / 1000)
78
+ .toString()
79
+ .padStart(10, "0");
80
+ const milliseconds = value.getUTCMilliseconds();
81
+ return milliseconds === 0
82
+ ? unixTimestamp
83
+ : `${unixTimestamp}.${milliseconds.toString().padStart(3, "0")}`;
84
+ }
85
+ // (42,'foo',NULL)
86
+ if (value instanceof TupleParam) {
87
+ return `(${value.values
88
+ .map((v) => formatQueryParamsInternal({
89
+ value: v,
90
+ wrapStringInQuotes: true,
91
+ printNullAsKeyword: true,
92
+ isInArrayOrTuple: true,
93
+ }))
94
+ .join(",")})`;
95
+ }
96
+ if (value instanceof Map) {
97
+ return formatObjectLikeParam(value.entries());
98
+ }
99
+ // This is only useful for simple maps where the keys are strings
100
+ if (typeof value === "object") {
101
+ return formatObjectLikeParam(Object.entries(value));
102
+ }
103
+ throw new Error(`Unsupported value in query parameters: [${value}].`);
104
+ }
105
+ // {'key1':'value1',42:'value2'}
106
+ function formatObjectLikeParam(entries) {
107
+ const formatted = [];
108
+ for (const [key, val] of entries) {
109
+ formatted.push(`${formatQueryParamsInternal({
110
+ value: key,
111
+ wrapStringInQuotes: true,
112
+ printNullAsKeyword: true,
113
+ isInArrayOrTuple: true,
114
+ })}:${formatQueryParamsInternal({
115
+ value: val,
116
+ wrapStringInQuotes: true,
117
+ printNullAsKeyword: true,
118
+ isInArrayOrTuple: true,
119
+ })}`);
120
+ }
121
+ return `{${formatted.join(",")}}`;
122
+ }
123
+ const TabASCII = 9;
124
+ const NewlineASCII = 10;
125
+ const CarriageReturnASCII = 13;
126
+ const SingleQuoteASCII = 39;
127
+ const BackslashASCII = 92;
128
+ //# sourceMappingURL=format_query_params.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"format_query_params.js","sourceRoot":"","sources":["../../../src/common/data_formatter/format_query_params.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import { SettingsMap } from "../settings";
2
+ export declare function formatQuerySettings(value: number | string | boolean | SettingsMap): string;