@sqlbraid/core 0.1.0-rc.0 → 1.0.0-rc.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.
package/dist/index.js CHANGED
@@ -1,16 +1,402 @@
1
+ //#region src/authoring-modules.ts
2
+ const AUTHORING_MODULE_CATALOG = Object.freeze([
3
+ {
4
+ moduleSpecifier: "@sqlbraid/template",
5
+ helperFamily: "template"
6
+ },
7
+ {
8
+ moduleSpecifier: "@sqlbraid/postgres",
9
+ dialectId: "postgres",
10
+ helperFamily: "template"
11
+ },
12
+ {
13
+ moduleSpecifier: "@sqlbraid/mysql",
14
+ dialectId: "mysql",
15
+ helperFamily: "template"
16
+ },
17
+ {
18
+ moduleSpecifier: "@sqlbraid/mariadb",
19
+ dialectId: "mariadb",
20
+ helperFamily: "template"
21
+ },
22
+ {
23
+ moduleSpecifier: "@sqlbraid/sqlite",
24
+ dialectId: "sqlite",
25
+ helperFamily: "template"
26
+ },
27
+ {
28
+ moduleSpecifier: "@sqlbraid/oracle",
29
+ dialectId: "oracle",
30
+ helperFamily: "template"
31
+ },
32
+ {
33
+ moduleSpecifier: "@sqlbraid/mssql",
34
+ dialectId: "mssql",
35
+ helperFamily: "template"
36
+ },
37
+ {
38
+ moduleSpecifier: "sqlbraid/pg",
39
+ dialectId: "postgres",
40
+ helperFamily: "facade"
41
+ },
42
+ {
43
+ moduleSpecifier: "sqlbraid/mysql2",
44
+ dialectId: "mysql",
45
+ helperFamily: "facade"
46
+ },
47
+ {
48
+ moduleSpecifier: "sqlbraid/mariadb",
49
+ dialectId: "mariadb",
50
+ helperFamily: "facade"
51
+ },
52
+ {
53
+ moduleSpecifier: "sqlbraid/node-sqlite",
54
+ dialectId: "sqlite",
55
+ helperFamily: "facade"
56
+ },
57
+ {
58
+ moduleSpecifier: "sqlbraid/better-sqlite3",
59
+ dialectId: "sqlite",
60
+ helperFamily: "facade"
61
+ },
62
+ {
63
+ moduleSpecifier: "sqlbraid/libsql",
64
+ dialectId: "sqlite",
65
+ helperFamily: "facade"
66
+ },
67
+ {
68
+ moduleSpecifier: "sqlbraid/sqlite-wasm",
69
+ dialectId: "sqlite",
70
+ helperFamily: "facade"
71
+ },
72
+ {
73
+ moduleSpecifier: "sqlbraid/d1",
74
+ dialectId: "sqlite",
75
+ helperFamily: "facade"
76
+ },
77
+ {
78
+ moduleSpecifier: "sqlbraid/oracledb",
79
+ dialectId: "oracle",
80
+ helperFamily: "facade"
81
+ },
82
+ {
83
+ moduleSpecifier: "sqlbraid/tedious",
84
+ dialectId: "mssql",
85
+ helperFamily: "facade"
86
+ },
87
+ {
88
+ moduleSpecifier: "sqlbraid/postgres",
89
+ dialectId: "postgres",
90
+ helperFamily: "facade"
91
+ },
92
+ {
93
+ moduleSpecifier: "sqlbraid/mysql",
94
+ dialectId: "mysql",
95
+ helperFamily: "facade"
96
+ },
97
+ {
98
+ moduleSpecifier: "sqlbraid/sqlite",
99
+ dialectId: "sqlite",
100
+ helperFamily: "facade"
101
+ },
102
+ {
103
+ moduleSpecifier: "sqlbraid/oracle",
104
+ dialectId: "oracle",
105
+ helperFamily: "facade"
106
+ },
107
+ {
108
+ moduleSpecifier: "sqlbraid/mssql",
109
+ dialectId: "mssql",
110
+ helperFamily: "facade"
111
+ }
112
+ ].map((entry) => Object.freeze(entry)));
113
+
114
+ //#endregion
1
115
  //#region src/index.ts
2
116
  const SQL_FRAGMENT = Symbol.for("sqlbraid.fragment");
3
117
  const SQL_BOUND_PARAMETER = Symbol.for("sqlbraid.bound-parameter");
4
118
  const knownBoundParameters = /* @__PURE__ */ new WeakSet();
5
119
  const SQL_ROUTINE_PARAMETER = Symbol.for("sqlbraid.routine-parameter");
6
120
  const knownRoutineParameters = /* @__PURE__ */ new WeakSet();
7
- var ResultExactnessError = class extends Error {
8
- code = "BRAID_RESULT_EXACTNESS";
121
+ var ResultExactnessError = class ResultExactnessError extends Error {
122
+ static {
123
+ this.code = "BRAID_RESULT_EXACTNESS";
124
+ }
9
125
  constructor(message = "Result value does not have an exact representation.") {
10
126
  super(message);
127
+ this.code = ResultExactnessError.code;
11
128
  this.name = "ResultExactnessError";
12
129
  }
13
130
  };
131
+ /**
132
+ * The intentionally small compatibility boundary for SQLBraid-owned errors.
133
+ *
134
+ * Keep this registry explicit. In particular, a BRAID_ token in a driver
135
+ * message or an internal compiler fallback is not public merely because it
136
+ * happens to use the project prefix.
137
+ */
138
+ const PUBLIC_ERROR_DEFINITIONS = Object.freeze([
139
+ {
140
+ code: "BRAID_RESULT_EXACTNESS",
141
+ category: "runtime",
142
+ owner: "ResultExactnessError"
143
+ },
144
+ {
145
+ code: "BRAID_CALL_MAP",
146
+ category: "runtime",
147
+ owner: "RoutineMappingError"
148
+ },
149
+ {
150
+ code: "BRAID_RESULT_KIND",
151
+ category: "runtime",
152
+ owner: "@sqlbraid/runtime:DatabaseResultKindError"
153
+ },
154
+ {
155
+ code: "BRAID_RESULT_VALIDATION",
156
+ category: "runtime",
157
+ owner: "@sqlbraid/runtime:DatabaseResultValidationError"
158
+ },
159
+ {
160
+ code: "BRAID_BATCH_ABORTED",
161
+ category: "runtime",
162
+ owner: "runtime batch lifecycle/synthetic observer error"
163
+ },
164
+ {
165
+ code: "BRAID_TX_SCOPE",
166
+ category: "runtime",
167
+ owner: "@sqlbraid/runtime:DatabaseScopeError"
168
+ },
169
+ {
170
+ code: "BRAID_TX_CLOSED",
171
+ category: "runtime",
172
+ owner: "@sqlbraid/runtime:DatabaseScopeError"
173
+ },
174
+ {
175
+ code: "BRAID_SESSION_SCOPE",
176
+ category: "runtime",
177
+ owner: "@sqlbraid/runtime:DatabaseScopeError"
178
+ },
179
+ {
180
+ code: "BRAID_SESSION_CLOSED",
181
+ category: "runtime",
182
+ owner: "@sqlbraid/runtime:DatabaseScopeError"
183
+ },
184
+ {
185
+ code: "BRAID_CONNECTION_POISONED",
186
+ category: "runtime",
187
+ owner: "@sqlbraid/runtime:DatabaseScopeError"
188
+ },
189
+ {
190
+ code: "BRAID_STREAM_SCOPE",
191
+ category: "runtime",
192
+ owner: "@sqlbraid/runtime:DatabaseScopeError"
193
+ },
194
+ {
195
+ code: "BRAID_REENTRY",
196
+ category: "runtime",
197
+ owner: "@sqlbraid/runtime:DatabaseScopeError"
198
+ },
199
+ {
200
+ code: "BRAID_TX_OPTIONS_NESTED",
201
+ category: "runtime",
202
+ owner: "@sqlbraid/runtime:DatabaseScopeError"
203
+ },
204
+ {
205
+ code: "BRAID_CALL_UNSUPPORTED",
206
+ category: "adapter",
207
+ owner: "UnsupportedFeatureError"
208
+ },
209
+ {
210
+ code: "BRAID_RESULT_SETS_UNSUPPORTED",
211
+ category: "adapter",
212
+ owner: "UnsupportedFeatureError"
213
+ },
214
+ {
215
+ code: "BRAID_STREAM_UNSUPPORTED",
216
+ category: "adapter",
217
+ owner: "UnsupportedFeatureError"
218
+ },
219
+ {
220
+ code: "BRAID_CANCEL_UNSUPPORTED",
221
+ category: "adapter",
222
+ owner: "UnsupportedFeatureError"
223
+ },
224
+ {
225
+ code: "BRAID_SESSION_UNSUPPORTED",
226
+ category: "adapter",
227
+ owner: "UnsupportedFeatureError"
228
+ },
229
+ {
230
+ code: "BRAID_TX_UNSUPPORTED",
231
+ category: "adapter",
232
+ owner: "UnsupportedFeatureError"
233
+ },
234
+ {
235
+ code: "BRAID_TX_OPTIONS_INVALID",
236
+ category: "runtime",
237
+ owner: "TypeError with code"
238
+ },
239
+ {
240
+ code: "BRAID_TX_OPTION_UNSUPPORTED",
241
+ category: "adapter",
242
+ owner: "UnsupportedFeatureError"
243
+ },
244
+ {
245
+ code: "BRAID_CALL_RESULT_SETS",
246
+ category: "adapter",
247
+ owner: "UnsupportedFeatureError"
248
+ },
249
+ {
250
+ code: "BRAID_CALL_CURSOR_TX_REQUIRED",
251
+ category: "adapter",
252
+ owner: "UnsupportedFeatureError"
253
+ },
254
+ {
255
+ code: "BRAID_CALL_OUT_UNSUPPORTED",
256
+ category: "adapter",
257
+ owner: "UnsupportedFeatureError"
258
+ },
259
+ {
260
+ code: "BRAID_CALL_RETURN_UNSUPPORTED",
261
+ category: "adapter",
262
+ owner: "UnsupportedFeatureError"
263
+ },
264
+ {
265
+ code: "BRAID_CALL_CURSOR_UNSUPPORTED",
266
+ category: "adapter",
267
+ owner: "UnsupportedFeatureError"
268
+ },
269
+ {
270
+ code: "BRAID_RESOURCE_CLEANUP",
271
+ category: "adapter",
272
+ owner: "adapter cleanup error with code"
273
+ },
274
+ {
275
+ code: "BRAID_BIND_HINT_UNSUPPORTED",
276
+ category: "adapter",
277
+ owner: "UnsupportedFeatureError"
278
+ },
279
+ {
280
+ code: "BRAID_BIND_VALUE_UNSUPPORTED",
281
+ category: "adapter",
282
+ owner: "AdapterError"
283
+ },
284
+ {
285
+ code: "BRAID_INTEGER_MODE_UNSUPPORTED",
286
+ category: "adapter",
287
+ owner: "UnsupportedFeatureError"
288
+ },
289
+ {
290
+ code: "BRAID_CALL_LOB_UNSUPPORTED",
291
+ category: "adapter",
292
+ owner: "UnsupportedFeatureError"
293
+ },
294
+ {
295
+ code: "BRAID_BULK_UNSUPPORTED",
296
+ category: "adapter",
297
+ owner: "UnsupportedFeatureError"
298
+ },
299
+ {
300
+ code: "BRAID_DIALECT_MISMATCH",
301
+ category: "adapter",
302
+ owner: "UnsupportedFeatureError"
303
+ },
304
+ {
305
+ code: "BRAID_RESULT_KIND_AMBIGUOUS",
306
+ category: "adapter",
307
+ owner: "UnsupportedFeatureError"
308
+ },
309
+ {
310
+ code: "BRAID_PREPARED_NAME",
311
+ category: "runtime",
312
+ owner: "prepared query validation"
313
+ },
314
+ {
315
+ code: "BRAID_PREPARED_SHAPE",
316
+ category: "runtime",
317
+ owner: "prepared query validation"
318
+ },
319
+ {
320
+ code: "BRAID_BIND_TYPE_REQUIRED",
321
+ category: "adapter",
322
+ owner: "AdapterError"
323
+ },
324
+ {
325
+ code: "BRAID_EMPTY_LIST",
326
+ category: "runtime",
327
+ owner: "SqlRenderError"
328
+ },
329
+ {
330
+ code: "BRAID_EMPTY_SET",
331
+ category: "runtime",
332
+ owner: "SqlRenderError"
333
+ },
334
+ {
335
+ code: "BRAID_DIALECT",
336
+ category: "runtime",
337
+ owner: "SqlRenderError"
338
+ },
339
+ {
340
+ code: "BRAID_ASYNC_CONTEXT",
341
+ category: "compiler",
342
+ owner: "compiler diagnostic"
343
+ },
344
+ {
345
+ code: "BRAID_DIRECTIVE_UNTERMINATED",
346
+ category: "runtime",
347
+ owner: "SqlRenderError"
348
+ },
349
+ {
350
+ code: "BRAID_DIRECTIVE",
351
+ category: "runtime",
352
+ owner: "SqlRenderError"
353
+ },
354
+ {
355
+ code: "BRAID_CONDITION",
356
+ category: "runtime",
357
+ owner: "SqlRenderError"
358
+ },
359
+ {
360
+ code: "BRAID_ATTRIBUTES",
361
+ category: "runtime",
362
+ owner: "SqlRenderError"
363
+ },
364
+ {
365
+ code: "BRAID_STRUCTURE",
366
+ category: "runtime",
367
+ owner: "SqlRenderError"
368
+ },
369
+ {
370
+ code: "BRAID_HOLE_CONTEXT",
371
+ category: "runtime",
372
+ owner: "SqlRenderError"
373
+ },
374
+ {
375
+ code: "BRAID_SQL_LEX",
376
+ category: "runtime",
377
+ owner: "SqlRenderError"
378
+ },
379
+ {
380
+ code: "BRAID_DEPTH",
381
+ category: "runtime",
382
+ owner: "SqlRenderError"
383
+ },
384
+ {
385
+ code: "BRAID_STRUCTURE_LIMIT",
386
+ category: "runtime",
387
+ owner: "SqlRenderError"
388
+ },
389
+ {
390
+ code: "BRAID_SQL_LIMIT",
391
+ category: "runtime",
392
+ owner: "SqlRenderError"
393
+ },
394
+ {
395
+ code: "BRAID_BIND_LIMIT",
396
+ category: "runtime",
397
+ owner: "SqlRenderError"
398
+ }
399
+ ]);
14
400
  function exactnessFailure(message) {
15
401
  throw new ResultExactnessError(message);
16
402
  }
@@ -197,6 +583,23 @@ function copyRoutineProcedure(procedure) {
197
583
  parameterNames: Object.freeze(parameterNames)
198
584
  });
199
585
  }
586
+ function copyNativeTemplate(value, segments) {
587
+ if (!Array.isArray(value) || value.length !== segments.length) throw new TypeError("RenderedStatement nativeTemplate must have one string per segment boundary.");
588
+ if (value.some((segment) => typeof segment !== "string")) throw new TypeError("RenderedStatement nativeTemplate must contain cooked strings.");
589
+ if (value.some((segment, index) => segment !== segments[index])) throw new TypeError("RenderedStatement nativeTemplate cooked strings must match logical segments.");
590
+ const raw = value.raw;
591
+ if (!Array.isArray(raw) || raw.length !== value.length || raw.some((segment) => typeof segment !== "string")) throw new TypeError("RenderedStatement nativeTemplate.raw must contain one raw string per segment boundary.");
592
+ if (Object.isFrozen(value) && Object.isFrozen(raw)) return value;
593
+ const cooked = [...value];
594
+ const frozenRaw = Object.freeze([...raw]);
595
+ Object.defineProperty(cooked, "raw", {
596
+ configurable: false,
597
+ enumerable: false,
598
+ value: frozenRaw,
599
+ writable: false
600
+ });
601
+ return Object.freeze(cooked);
602
+ }
200
603
  function createRenderedStatement(statement) {
201
604
  if (typeof statement !== "object" || statement === null) throw new TypeError("RenderedStatement must be an object.");
202
605
  if (knownRenderedStatements.has(statement)) return statement;
@@ -207,6 +610,7 @@ function createRenderedStatement(statement) {
207
610
  if (typeof statement.dialectId !== "string" || !statement.dialectId) throw new TypeError("RenderedStatement dialectId must be a non-empty string.");
208
611
  const segments = Object.freeze([...statement.segments]);
209
612
  if (segments.some((segment) => typeof segment !== "string")) throw new TypeError("RenderedStatement segments must be an array of strings.");
613
+ const nativeTemplate = statement.nativeTemplate === void 0 ? void 0 : copyNativeTemplate(statement.nativeTemplate, segments);
210
614
  const parameters = Object.freeze(Array.from(statement.parameters, copyRenderedParameter));
211
615
  if (parameters.some((parameter) => parameter.direction === "inout" && statement.resultKind !== "call")) throw new TypeError("INOUT parameters are only valid for call statements.");
212
616
  if (parameters.some((parameter) => parameter.direction === "out" && statement.resultKind !== "call" && statement.resultKind !== "rows")) throw new TypeError("OUT parameters are only valid for call and rows statements.");
@@ -220,6 +624,7 @@ function createRenderedStatement(statement) {
220
624
  const rendered = Object.freeze({
221
625
  segments,
222
626
  parameters,
627
+ ...nativeTemplate === void 0 ? {} : { nativeTemplate },
223
628
  dialectId: statement.dialectId,
224
629
  resultKind: statement.resultKind,
225
630
  ...routineProcedure === void 0 ? {} : { routineProcedure },
@@ -443,8 +848,6 @@ function createBulkBindingDescription(bulk, context, options) {
443
848
  return Object.freeze(description);
444
849
  }
445
850
  var UnsupportedFeatureError = class extends Error {
446
- feature;
447
- code;
448
851
  constructor(feature, code, message, options) {
449
852
  super(`${code}: ${message}`, options);
450
853
  this.feature = feature;
@@ -452,17 +855,26 @@ var UnsupportedFeatureError = class extends Error {
452
855
  this.name = "UnsupportedFeatureError";
453
856
  }
454
857
  };
455
- var RoutineMappingError = class extends Error {
456
- code = "BRAID_CALL_MAP";
457
- location;
858
+ /** An adapter-owned input/transport failure that retains TypeError semantics. */
859
+ var AdapterError = class extends TypeError {
860
+ constructor(code, message, options) {
861
+ super(`${code}: ${message}`, options);
862
+ this.code = code;
863
+ this.name = "AdapterError";
864
+ }
865
+ };
866
+ var RoutineMappingError = class RoutineMappingError extends Error {
867
+ static {
868
+ this.code = "BRAID_CALL_MAP";
869
+ }
458
870
  constructor(message, location, options) {
459
871
  super(message, options);
872
+ this.code = RoutineMappingError.code;
460
873
  this.name = "RoutineMappingError";
461
874
  this.location = Object.freeze(location);
462
875
  }
463
876
  };
464
877
  var SqlRenderError = class extends Error {
465
- code;
466
878
  constructor(code, message) {
467
879
  super(message);
468
880
  this.name = "SqlRenderError";
@@ -471,5 +883,5 @@ var SqlRenderError = class extends Error {
471
883
  };
472
884
 
473
885
  //#endregion
474
- export { ResultExactnessError, RoutineMappingError, SQL_FRAGMENT, SqlRenderError, UnsupportedFeatureError, createBoundParameter, createBulkBindingDescription, createParameterTypeHint, createRenderedBulk, createRenderedStatement, createRoutineInOutParameter, createRoutineOutParameter, createStatementBindingDescription, decodeExactDecimal, decodeExactInteger, isBoundParameter, isRoutineParameter, normalizeExactInteger, parameterizedSql, safeDatabaseCount };
886
+ export { AUTHORING_MODULE_CATALOG, AdapterError, PUBLIC_ERROR_DEFINITIONS, ResultExactnessError, RoutineMappingError, SQL_FRAGMENT, SqlRenderError, UnsupportedFeatureError, createBoundParameter, createBulkBindingDescription, createParameterTypeHint, createRenderedBulk, createRenderedStatement, createRoutineInOutParameter, createRoutineOutParameter, createStatementBindingDescription, decodeExactDecimal, decodeExactInteger, isBoundParameter, isRoutineParameter, normalizeExactInteger, parameterizedSql, safeDatabaseCount };
475
887
  //# sourceMappingURL=index.js.map