@sqlbraid/core 1.0.0-rc.1 → 1.0.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.
- package/README.md +6 -0
- package/dist/driver.d.ts +16 -0
- package/dist/driver.d.ts.map +1 -0
- package/dist/driver.js +93 -0
- package/dist/driver.js.map +1 -0
- package/dist/index.d.ts +199 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +295 -21
- package/dist/index.js.map +1 -1
- package/package.json +22 -18
package/README.md
CHANGED
|
@@ -11,4 +11,10 @@ Use this low-level package when authoring an adapter or integration. It defines
|
|
|
11
11
|
contracts only and does not connect to a database or execute queries; use
|
|
12
12
|
`@sqlbraid/runtime` for application execution.
|
|
13
13
|
|
|
14
|
+
Driver authors can import `@sqlbraid/core/driver` for explicit cleanup scopes,
|
|
15
|
+
safe result-property definition, and savepoint-name validation. Cleanup scopes
|
|
16
|
+
run registered actions in LIFO order exactly once, preserve the primary failure,
|
|
17
|
+
aggregate cleanup failures under `BRAID_RESOURCE_CLEANUP`, and support disarm
|
|
18
|
+
after ownership transfer without forcing synchronous actions through Promises.
|
|
19
|
+
|
|
14
20
|
See the [SQLBraid documentation](https://clickin.github.io/SQLBraid/).
|
package/dist/driver.d.ts
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
//#region src/driver.d.ts
|
|
2
|
+
export type CleanupAction = () => void | PromiseLike<void>;
|
|
3
|
+
export interface CleanupScope {
|
|
4
|
+
add(action: CleanupAction): void;
|
|
5
|
+
disarm(): void;
|
|
6
|
+
/**
|
|
7
|
+
* Runs cleanup once. Calls made again while asynchronous cleanup is pending
|
|
8
|
+
* return the same Promise; cleanup actions must not await this scope's run.
|
|
9
|
+
*/
|
|
10
|
+
run(primary?: unknown): void | Promise<void>;
|
|
11
|
+
}
|
|
12
|
+
export declare function createCleanupScope(): CleanupScope;
|
|
13
|
+
export declare function defineResultProperty(row: Record<string, unknown>, key: string, value: unknown): void;
|
|
14
|
+
export declare function assertSavepointName(name: string): string;
|
|
15
|
+
//#endregion
|
|
16
|
+
//# sourceMappingURL=driver.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"driver.d.ts","names":[],"sources":["../src/driver.ts"],"mappings":";YAAY,6BAA6B;iBAExB;EACf,IAAI,QAAQ;EACZ;;;;;EAKA,IAAI,2BAA2B;;wBA8DjB,sBAAsB;wBA8CtB,qBAAqB,KAAK,yBAAyB,aAAa;wBAShE,oBAAoB"}
|
package/dist/driver.js
ADDED
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
//#region src/driver.ts
|
|
2
|
+
const NO_PRIMARY = Symbol("sqlbraid.no-primary");
|
|
3
|
+
const RESOURCE_CLEANUP_CODE = "BRAID_RESOURCE_CLEANUP";
|
|
4
|
+
const SAVEPOINT_NAME = /^[A-Za-z_][A-Za-z0-9_]*$/u;
|
|
5
|
+
function resourceCleanupError(primary, failures) {
|
|
6
|
+
const hasPrimary = primary !== NO_PRIMARY;
|
|
7
|
+
const values = hasPrimary ? [primary, ...failures] : failures;
|
|
8
|
+
const error = values.length === 1 && !hasPrimary ? new Error("BRAID_RESOURCE_CLEANUP: resource cleanup failed.", { cause: failures[0] }) : new AggregateError(values, "BRAID_RESOURCE_CLEANUP: resource cleanup failed.", { cause: hasPrimary ? primary : failures[0] });
|
|
9
|
+
Object.defineProperty(error, "code", {
|
|
10
|
+
configurable: false,
|
|
11
|
+
enumerable: true,
|
|
12
|
+
value: RESOURCE_CLEANUP_CODE,
|
|
13
|
+
writable: false
|
|
14
|
+
});
|
|
15
|
+
return error;
|
|
16
|
+
}
|
|
17
|
+
function finish(primary, failures) {
|
|
18
|
+
if (failures.length === 0) {
|
|
19
|
+
if (primary !== NO_PRIMARY) throw primary;
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
22
|
+
throw resourceCleanupError(primary, failures);
|
|
23
|
+
}
|
|
24
|
+
function isThenable(value) {
|
|
25
|
+
return typeof value === "object" && value !== null || typeof value === "function" ? typeof value.then === "function" : false;
|
|
26
|
+
}
|
|
27
|
+
async function finishAsync(current, pending, nextIndex, primary, failures) {
|
|
28
|
+
try {
|
|
29
|
+
await current;
|
|
30
|
+
} catch (error) {
|
|
31
|
+
failures.push(error);
|
|
32
|
+
}
|
|
33
|
+
for (let index = nextIndex; index < pending.length; index += 1) try {
|
|
34
|
+
await pending[index]();
|
|
35
|
+
} catch (error) {
|
|
36
|
+
failures.push(error);
|
|
37
|
+
}
|
|
38
|
+
finish(primary, failures);
|
|
39
|
+
}
|
|
40
|
+
function createCleanupScope() {
|
|
41
|
+
let actions = [];
|
|
42
|
+
let state = "open";
|
|
43
|
+
let inFlight;
|
|
44
|
+
return {
|
|
45
|
+
add(action) {
|
|
46
|
+
if (state !== "open") throw new Error("Cannot register cleanup after scope closure.");
|
|
47
|
+
if (typeof action !== "function") throw new TypeError("Cleanup action must be a function.");
|
|
48
|
+
actions.push(action);
|
|
49
|
+
},
|
|
50
|
+
disarm() {
|
|
51
|
+
if (state !== "open") return;
|
|
52
|
+
state = "disarmed";
|
|
53
|
+
actions = [];
|
|
54
|
+
},
|
|
55
|
+
run(primary) {
|
|
56
|
+
if (inFlight !== void 0) return inFlight;
|
|
57
|
+
if (state !== "open") return;
|
|
58
|
+
state = "running";
|
|
59
|
+
const pending = actions.reverse();
|
|
60
|
+
actions = [];
|
|
61
|
+
const failures = [];
|
|
62
|
+
const primaryValue = arguments.length === 0 ? NO_PRIMARY : primary;
|
|
63
|
+
for (let index = 0; index < pending.length; index += 1) try {
|
|
64
|
+
const result = pending[index]();
|
|
65
|
+
if (isThenable(result)) {
|
|
66
|
+
state = "closed";
|
|
67
|
+
inFlight = finishAsync(result, pending, index + 1, primaryValue, failures);
|
|
68
|
+
return inFlight;
|
|
69
|
+
}
|
|
70
|
+
} catch (error) {
|
|
71
|
+
failures.push(error);
|
|
72
|
+
}
|
|
73
|
+
state = "closed";
|
|
74
|
+
finish(primaryValue, failures);
|
|
75
|
+
}
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
function defineResultProperty(row, key, value) {
|
|
79
|
+
Object.defineProperty(row, key, {
|
|
80
|
+
configurable: true,
|
|
81
|
+
enumerable: true,
|
|
82
|
+
value,
|
|
83
|
+
writable: true
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
function assertSavepointName(name) {
|
|
87
|
+
if (typeof name !== "string" || !SAVEPOINT_NAME.test(name)) throw new TypeError("Invalid SQLBraid savepoint name.");
|
|
88
|
+
return name;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
//#endregion
|
|
92
|
+
export { assertSavepointName, createCleanupScope, defineResultProperty };
|
|
93
|
+
//# sourceMappingURL=driver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"driver.js","names":[],"sources":["../src/driver.ts"],"sourcesContent":["export type CleanupAction = () => void | PromiseLike<void>;\n\nexport interface CleanupScope {\n add(action: CleanupAction): void;\n disarm(): void;\n /**\n * Runs cleanup once. Calls made again while asynchronous cleanup is pending\n * return the same Promise; cleanup actions must not await this scope's run.\n */\n run(primary?: unknown): void | Promise<void>;\n}\n\nconst NO_PRIMARY = Symbol(\"sqlbraid.no-primary\");\nconst RESOURCE_CLEANUP_CODE = \"BRAID_RESOURCE_CLEANUP\" as const;\nconst SAVEPOINT_NAME = /^[A-Za-z_][A-Za-z0-9_]*$/u;\n\nfunction resourceCleanupError(primary: unknown | typeof NO_PRIMARY, failures: readonly unknown[]): Error {\n const hasPrimary = primary !== NO_PRIMARY;\n const values = hasPrimary ? [primary, ...failures] : failures;\n const error =\n values.length === 1 && !hasPrimary\n ? new Error(\"BRAID_RESOURCE_CLEANUP: resource cleanup failed.\", { cause: failures[0] })\n : new AggregateError(values, \"BRAID_RESOURCE_CLEANUP: resource cleanup failed.\", {\n cause: hasPrimary ? primary : failures[0],\n });\n Object.defineProperty(error, \"code\", {\n configurable: false,\n enumerable: true,\n value: RESOURCE_CLEANUP_CODE,\n writable: false,\n });\n return error;\n}\n\nfunction finish(primary: unknown | typeof NO_PRIMARY, failures: readonly unknown[]): void {\n if (failures.length === 0) {\n if (primary !== NO_PRIMARY) throw primary;\n return;\n }\n throw resourceCleanupError(primary, failures);\n}\n\nfunction isThenable(value: unknown): value is PromiseLike<void> {\n return (typeof value === \"object\" && value !== null) || typeof value === \"function\"\n ? typeof (value as { readonly then?: unknown }).then === \"function\"\n : false;\n}\n\nasync function finishAsync(\n current: PromiseLike<void>,\n pending: readonly CleanupAction[],\n nextIndex: number,\n primary: unknown | typeof NO_PRIMARY,\n failures: unknown[],\n): Promise<void> {\n try {\n await current;\n } catch (error) {\n failures.push(error);\n }\n for (let index = nextIndex; index < pending.length; index += 1) {\n try {\n // oxlint-disable-next-line no-await-in-loop -- Cleanup must complete sequentially in LIFO order.\n await pending[index]!();\n } catch (error) {\n failures.push(error);\n }\n }\n finish(primary, failures);\n}\n\nexport function createCleanupScope(): CleanupScope {\n let actions: CleanupAction[] = [];\n let state: \"open\" | \"running\" | \"closed\" | \"disarmed\" = \"open\";\n let inFlight: Promise<void> | undefined;\n\n return {\n add(action: CleanupAction): void {\n if (state !== \"open\") throw new Error(\"Cannot register cleanup after scope closure.\");\n if (typeof action !== \"function\") throw new TypeError(\"Cleanup action must be a function.\");\n actions.push(action);\n },\n\n disarm(): void {\n if (state !== \"open\") return;\n state = \"disarmed\";\n actions = [];\n },\n\n run(primary?: unknown): void | Promise<void> {\n if (inFlight !== undefined) return inFlight;\n if (state !== \"open\") return;\n state = \"running\";\n // oxlint-disable-next-line unicorn/no-array-reverse -- Consume this owned action array in LIFO order without copying.\n const pending = actions.reverse();\n actions = [];\n const failures: unknown[] = [];\n const primaryValue = arguments.length === 0 ? NO_PRIMARY : primary;\n\n for (let index = 0; index < pending.length; index += 1) {\n try {\n const result = pending[index]!();\n if (isThenable(result)) {\n state = \"closed\";\n inFlight = finishAsync(result, pending, index + 1, primaryValue, failures);\n return inFlight;\n }\n } catch (error) {\n failures.push(error);\n }\n }\n state = \"closed\";\n finish(primaryValue, failures);\n },\n };\n}\n\nexport function defineResultProperty(row: Record<string, unknown>, key: string, value: unknown): void {\n Object.defineProperty(row, key, {\n configurable: true,\n enumerable: true,\n value,\n writable: true,\n });\n}\n\nexport function assertSavepointName(name: string): string {\n if (typeof name !== \"string\" || !SAVEPOINT_NAME.test(name)) {\n throw new TypeError(\"Invalid SQLBraid savepoint name.\");\n }\n return name;\n}\n"],"mappings":";AAYA,MAAM,aAAa,OAAO,qBAAqB;AAC/C,MAAM,wBAAwB;AAC9B,MAAM,iBAAiB;AAEvB,SAAS,qBAAqB,SAAsC,UAAqC;CACvG,MAAM,aAAa,YAAY;CAC/B,MAAM,SAAS,aAAa,CAAC,SAAS,GAAG,QAAQ,IAAI;CACrD,MAAM,QACJ,OAAO,WAAW,KAAK,CAAC,aACpB,IAAI,MAAM,oDAAoD,EAAE,OAAO,SAAS,GAAG,CAAC,IACpF,IAAI,eAAe,QAAQ,oDAAoD,EAC7E,OAAO,aAAa,UAAU,SAAS,GACzC,CAAC;CACP,OAAO,eAAe,OAAO,QAAQ;EACnC,cAAc;EACd,YAAY;EACZ,OAAO;EACP,UAAU;CACZ,CAAC;CACD,OAAO;AACT;AAEA,SAAS,OAAO,SAAsC,UAAoC;CACxF,IAAI,SAAS,WAAW,GAAG;EACzB,IAAI,YAAY,YAAY,MAAM;EAClC;CACF;CACA,MAAM,qBAAqB,SAAS,QAAQ;AAC9C;AAEA,SAAS,WAAW,OAA4C;CAC9D,OAAQ,OAAO,UAAU,YAAY,UAAU,QAAS,OAAO,UAAU,aACrE,OAAQ,MAAsC,SAAS,aACvD;AACN;AAEA,eAAe,YACb,SACA,SACA,WACA,SACA,UACe;CACf,IAAI;EACF,MAAM;CACR,SAAS,OAAO;EACd,SAAS,KAAK,KAAK;CACrB;CACA,KAAK,IAAI,QAAQ,WAAW,QAAQ,QAAQ,QAAQ,SAAS,GAC3D,IAAI;EAEF,MAAM,QAAQ,MAAM,CAAE;CACxB,SAAS,OAAO;EACd,SAAS,KAAK,KAAK;CACrB;CAEF,OAAO,SAAS,QAAQ;AAC1B;AAEA,SAAgB,qBAAmC;CACjD,IAAI,UAA2B,CAAC;CAChC,IAAI,QAAoD;CACxD,IAAI;CAEJ,OAAO;EACL,IAAI,QAA6B;GAC/B,IAAI,UAAU,QAAQ,MAAM,IAAI,MAAM,8CAA8C;GACpF,IAAI,OAAO,WAAW,YAAY,MAAM,IAAI,UAAU,oCAAoC;GAC1F,QAAQ,KAAK,MAAM;EACrB;EAEA,SAAe;GACb,IAAI,UAAU,QAAQ;GACtB,QAAQ;GACR,UAAU,CAAC;EACb;EAEA,IAAI,SAAyC;GAC3C,IAAI,aAAa,QAAW,OAAO;GACnC,IAAI,UAAU,QAAQ;GACtB,QAAQ;GAER,MAAM,UAAU,QAAQ,QAAQ;GAChC,UAAU,CAAC;GACX,MAAM,WAAsB,CAAC;GAC7B,MAAM,eAAe,UAAU,WAAW,IAAI,aAAa;GAE3D,KAAK,IAAI,QAAQ,GAAG,QAAQ,QAAQ,QAAQ,SAAS,GACnD,IAAI;IACF,MAAM,SAAS,QAAQ,MAAM,CAAE;IAC/B,IAAI,WAAW,MAAM,GAAG;KACtB,QAAQ;KACR,WAAW,YAAY,QAAQ,SAAS,QAAQ,GAAG,cAAc,QAAQ;KACzE,OAAO;IACT;GACF,SAAS,OAAO;IACd,SAAS,KAAK,KAAK;GACrB;GAEF,QAAQ;GACR,OAAO,cAAc,QAAQ;EAC/B;CACF;AACF;AAEA,SAAgB,qBAAqB,KAA8B,KAAa,OAAsB;CACpG,OAAO,eAAe,KAAK,KAAK;EAC9B,cAAc;EACd,YAAY;EACZ;EACA,UAAU;CACZ,CAAC;AACH;AAEA,SAAgB,oBAAoB,MAAsB;CACxD,IAAI,OAAO,SAAS,YAAY,CAAC,eAAe,KAAK,IAAI,GACvD,MAAM,IAAI,UAAU,kCAAkC;CAExD,OAAO;AACT"}
|
package/dist/index.d.ts
CHANGED
|
@@ -8,6 +8,191 @@ type AuthoringModuleCatalogEntry = {
|
|
|
8
8
|
};
|
|
9
9
|
export declare const AUTHORING_MODULE_CATALOG: readonly AuthoringModuleCatalogEntry[];
|
|
10
10
|
//#endregion
|
|
11
|
+
//#region src/capabilities.d.ts
|
|
12
|
+
/**
|
|
13
|
+
* The machine-readable capability vocabulary shared by adapters, support data,
|
|
14
|
+
* and documentation. A capability's family describes what its status proves;
|
|
15
|
+
* representation and metadata evidence are not execution support aliases.
|
|
16
|
+
*/
|
|
17
|
+
type CapabilityFamily = "support" | "representation" | "metadata";
|
|
18
|
+
interface WellKnownCapability {
|
|
19
|
+
readonly id: string;
|
|
20
|
+
readonly family: CapabilityFamily;
|
|
21
|
+
}
|
|
22
|
+
declare const definitions: readonly [{
|
|
23
|
+
readonly id: "sql.native-transparency";
|
|
24
|
+
readonly family: "support";
|
|
25
|
+
}, {
|
|
26
|
+
readonly id: "sql.generated-structure";
|
|
27
|
+
readonly family: "support";
|
|
28
|
+
}, {
|
|
29
|
+
readonly id: "result.rows";
|
|
30
|
+
readonly family: "support";
|
|
31
|
+
}, {
|
|
32
|
+
readonly id: "result.command";
|
|
33
|
+
readonly family: "support";
|
|
34
|
+
}, {
|
|
35
|
+
readonly id: "result.multiple-sets";
|
|
36
|
+
readonly family: "support";
|
|
37
|
+
}, {
|
|
38
|
+
readonly id: "result.standard-schema";
|
|
39
|
+
readonly family: "support";
|
|
40
|
+
}, {
|
|
41
|
+
readonly id: "numeric.exact-integer";
|
|
42
|
+
readonly family: "representation";
|
|
43
|
+
}, {
|
|
44
|
+
readonly id: "numeric.exact-decimal";
|
|
45
|
+
readonly family: "representation";
|
|
46
|
+
}, {
|
|
47
|
+
readonly id: "numeric.approximate-float";
|
|
48
|
+
readonly family: "representation";
|
|
49
|
+
}, {
|
|
50
|
+
readonly id: "numeric.approximate-special";
|
|
51
|
+
readonly family: "representation";
|
|
52
|
+
}, {
|
|
53
|
+
readonly id: "numeric.bind-exact";
|
|
54
|
+
readonly family: "representation";
|
|
55
|
+
}, {
|
|
56
|
+
readonly id: "numeric.aggregate";
|
|
57
|
+
readonly family: "representation";
|
|
58
|
+
}, {
|
|
59
|
+
readonly id: "numeric.command-metadata";
|
|
60
|
+
readonly family: "representation";
|
|
61
|
+
}, {
|
|
62
|
+
readonly id: "numeric.special-values";
|
|
63
|
+
readonly family: "representation";
|
|
64
|
+
}, {
|
|
65
|
+
readonly id: "numeric.scale-greater-than-precision";
|
|
66
|
+
readonly family: "representation";
|
|
67
|
+
}, {
|
|
68
|
+
readonly id: "numeric.negative-scale";
|
|
69
|
+
readonly family: "representation";
|
|
70
|
+
}, {
|
|
71
|
+
readonly id: "data.json-parsed";
|
|
72
|
+
readonly family: "representation";
|
|
73
|
+
}, {
|
|
74
|
+
readonly id: "data.json-lossless-text";
|
|
75
|
+
readonly family: "representation";
|
|
76
|
+
}, {
|
|
77
|
+
readonly id: "data.sql-variant";
|
|
78
|
+
readonly family: "representation";
|
|
79
|
+
}, {
|
|
80
|
+
readonly id: "data.oracle-object";
|
|
81
|
+
readonly family: "representation";
|
|
82
|
+
}, {
|
|
83
|
+
readonly id: "data.oracle-collection";
|
|
84
|
+
readonly family: "representation";
|
|
85
|
+
}, {
|
|
86
|
+
readonly id: "data.vector";
|
|
87
|
+
readonly family: "representation";
|
|
88
|
+
}, {
|
|
89
|
+
readonly id: "data.binary";
|
|
90
|
+
readonly family: "representation";
|
|
91
|
+
}, {
|
|
92
|
+
readonly id: "data.uuid";
|
|
93
|
+
readonly family: "representation";
|
|
94
|
+
}, {
|
|
95
|
+
readonly id: "data.temporal-native";
|
|
96
|
+
readonly family: "representation";
|
|
97
|
+
}, {
|
|
98
|
+
readonly id: "data.temporal-lossless";
|
|
99
|
+
readonly family: "representation";
|
|
100
|
+
}, {
|
|
101
|
+
readonly id: "data.timezone";
|
|
102
|
+
readonly family: "representation";
|
|
103
|
+
}, {
|
|
104
|
+
readonly id: "metadata.command-safe";
|
|
105
|
+
readonly family: "metadata";
|
|
106
|
+
}, {
|
|
107
|
+
readonly id: "dml.insert-returning";
|
|
108
|
+
readonly family: "support";
|
|
109
|
+
}, {
|
|
110
|
+
readonly id: "dml.update-returning";
|
|
111
|
+
readonly family: "support";
|
|
112
|
+
}, {
|
|
113
|
+
readonly id: "dml.delete-returning";
|
|
114
|
+
readonly family: "support";
|
|
115
|
+
}, {
|
|
116
|
+
readonly id: "dml.merge-returning";
|
|
117
|
+
readonly family: "support";
|
|
118
|
+
}, {
|
|
119
|
+
readonly id: "dml.upsert-returning";
|
|
120
|
+
readonly family: "support";
|
|
121
|
+
}, {
|
|
122
|
+
readonly id: "session.pinned";
|
|
123
|
+
readonly family: "support";
|
|
124
|
+
}, {
|
|
125
|
+
readonly id: "statement.prepare";
|
|
126
|
+
readonly family: "support";
|
|
127
|
+
}, {
|
|
128
|
+
readonly id: "statement.cancel";
|
|
129
|
+
readonly family: "support";
|
|
130
|
+
}, {
|
|
131
|
+
readonly id: "statement.stream";
|
|
132
|
+
readonly family: "support";
|
|
133
|
+
}, {
|
|
134
|
+
readonly id: "statement.bulk";
|
|
135
|
+
readonly family: "support";
|
|
136
|
+
}, {
|
|
137
|
+
readonly id: "execution.bulk-fidelity";
|
|
138
|
+
readonly family: "support";
|
|
139
|
+
}, {
|
|
140
|
+
readonly id: "transaction";
|
|
141
|
+
readonly family: "support";
|
|
142
|
+
}, {
|
|
143
|
+
readonly id: "transaction.savepoint";
|
|
144
|
+
readonly family: "support";
|
|
145
|
+
}, {
|
|
146
|
+
readonly id: "transaction.read-only";
|
|
147
|
+
readonly family: "support";
|
|
148
|
+
}, {
|
|
149
|
+
readonly id: "transaction.isolation.read-uncommitted";
|
|
150
|
+
readonly family: "support";
|
|
151
|
+
}, {
|
|
152
|
+
readonly id: "transaction.isolation.read-committed";
|
|
153
|
+
readonly family: "support";
|
|
154
|
+
}, {
|
|
155
|
+
readonly id: "transaction.isolation.repeatable-read";
|
|
156
|
+
readonly family: "support";
|
|
157
|
+
}, {
|
|
158
|
+
readonly id: "transaction.isolation.serializable";
|
|
159
|
+
readonly family: "support";
|
|
160
|
+
}, {
|
|
161
|
+
readonly id: "routine.call";
|
|
162
|
+
readonly family: "support";
|
|
163
|
+
}, {
|
|
164
|
+
readonly id: "routine.out";
|
|
165
|
+
readonly family: "support";
|
|
166
|
+
}, {
|
|
167
|
+
readonly id: "routine.inout";
|
|
168
|
+
readonly family: "support";
|
|
169
|
+
}, {
|
|
170
|
+
readonly id: "routine.result-sets";
|
|
171
|
+
readonly family: "support";
|
|
172
|
+
}, {
|
|
173
|
+
readonly id: "routine.out-cursor";
|
|
174
|
+
readonly family: "support";
|
|
175
|
+
}, {
|
|
176
|
+
readonly id: "routine.return-value";
|
|
177
|
+
readonly family: "support";
|
|
178
|
+
}, {
|
|
179
|
+
readonly id: "metadata.identity";
|
|
180
|
+
readonly family: "metadata";
|
|
181
|
+
}, {
|
|
182
|
+
readonly id: "metadata.generated";
|
|
183
|
+
readonly family: "metadata";
|
|
184
|
+
}, {
|
|
185
|
+
readonly id: "metadata.routines";
|
|
186
|
+
readonly family: "metadata";
|
|
187
|
+
}, {
|
|
188
|
+
readonly id: "metadata.types";
|
|
189
|
+
readonly family: "metadata";
|
|
190
|
+
}];
|
|
191
|
+
export declare const WELL_KNOWN_CAPABILITIES: readonly WellKnownCapability[];
|
|
192
|
+
type WellKnownCapabilityId = (typeof definitions)[number]["id"];
|
|
193
|
+
export declare const WELL_KNOWN_CAPABILITY_IDS: readonly WellKnownCapabilityId[];
|
|
194
|
+
export declare function isWellKnownCapabilityId(value: string): value is WellKnownCapabilityId;
|
|
195
|
+
//#endregion
|
|
11
196
|
//#region src/index.d.ts
|
|
12
197
|
export declare const SQL_FRAGMENT: unique symbol;
|
|
13
198
|
declare const boundParameterBrand: unique symbol;
|
|
@@ -45,6 +230,11 @@ export interface PublicErrorDefinition {
|
|
|
45
230
|
readonly code: string;
|
|
46
231
|
readonly category: PublicErrorCategory;
|
|
47
232
|
readonly owner: string;
|
|
233
|
+
/**
|
|
234
|
+
* UnsupportedFeatureError only: features for which this code is a public
|
|
235
|
+
* contract. Other public errors intentionally omit this metadata.
|
|
236
|
+
*/
|
|
237
|
+
readonly features?: readonly string[];
|
|
48
238
|
}
|
|
49
239
|
/**
|
|
50
240
|
* The intentionally small compatibility boundary for SQLBraid-owned errors.
|
|
@@ -238,6 +428,10 @@ export declare function createStatementBindingDescription(statement: RenderedSta
|
|
|
238
428
|
export declare function createBulkBindingDescription(bulk: RenderedBulk, context: StatementBindingContext, options: StatementBindingDescriptionOptions): BulkBindingDescription;
|
|
239
429
|
export interface DialectLexicalProfile {
|
|
240
430
|
readonly lineCommentPrefixes: readonly string[];
|
|
431
|
+
/** Require whitespace/control after -- (MySQL/MariaDB). Defaults to false. */
|
|
432
|
+
readonly doubleDashRequiresWhitespace?: boolean;
|
|
433
|
+
/** Characters that terminate a line comment. Defaults to CR and LF. */
|
|
434
|
+
readonly lineCommentTerminators?: string;
|
|
241
435
|
readonly supportsNestedBlockComments?: boolean;
|
|
242
436
|
readonly supportsDollarQuotes?: boolean;
|
|
243
437
|
readonly supportsBacktickIdentifiers?: boolean;
|
|
@@ -391,6 +585,8 @@ export declare class UnsupportedFeatureError extends Error {
|
|
|
391
585
|
readonly code: `BRAID_${string}`;
|
|
392
586
|
constructor(feature: string, code: `BRAID_${string}`, message: string, options?: ErrorOptions);
|
|
393
587
|
}
|
|
588
|
+
/** Return true only for a registered, semantically valid feature/code pair. */
|
|
589
|
+
export declare function isPublicUnsupportedFeatureError(error: unknown): error is UnsupportedFeatureError;
|
|
394
590
|
/** An adapter-owned input/transport failure that retains TypeError semantics. */
|
|
395
591
|
export declare class AdapterError extends TypeError {
|
|
396
592
|
readonly code: `BRAID_${string}`;
|
|
@@ -465,6 +661,7 @@ export interface QueryExecutor {
|
|
|
465
661
|
stream<Row>(rendered: RenderedStatement, binding?: StatementBindingDescription, options?: ExecutionOptions): AsyncIterable<Row>;
|
|
466
662
|
call(rendered: RenderedStatement, binding?: StatementBindingDescription, options?: ExecutionOptions): Awaitable<DriverRoutineResult>;
|
|
467
663
|
bulk?(bulk: RenderedBulk, binding: BulkBindingDescription, options?: ExecutionOptions): Awaitable<BulkExecutionResult>;
|
|
664
|
+
validateTransactionOptions?(options: TransactionOptions): void;
|
|
468
665
|
begin?(options?: TransactionOptions): Awaitable<void>;
|
|
469
666
|
commit?(): Awaitable<void>;
|
|
470
667
|
rollback?(): Awaitable<void>;
|
|
@@ -480,6 +677,7 @@ export interface ConnectionLease extends QueryExecutor {
|
|
|
480
677
|
export interface ConnectionProvider {
|
|
481
678
|
readonly statementBinding: StatementBindingAdapter;
|
|
482
679
|
readonly environment?: DriverEnvironment;
|
|
680
|
+
validateTransactionOptions?(options: TransactionOptions): void;
|
|
483
681
|
acquire(): Promise<ConnectionLease>;
|
|
484
682
|
}
|
|
485
683
|
export interface QueryExecutionPlan {
|
|
@@ -784,5 +982,5 @@ export declare class SqlRenderError extends Error {
|
|
|
784
982
|
constructor(code: string, message: string);
|
|
785
983
|
}
|
|
786
984
|
//#endregion
|
|
787
|
-
export type { AuthoringModuleCatalogEntry, StandardSchemaV1 };
|
|
985
|
+
export type { AuthoringModuleCatalogEntry, CapabilityFamily, StandardSchemaV1, WellKnownCapability, WellKnownCapabilityId };
|
|
788
986
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","names":[],"sources":["../src/authoring-modules.ts","../src/index.ts"],"mappings":";;;KACY;WACD;WACA;WACA;;qBAGE,mCAAmC;;;
|
|
1
|
+
{"version":3,"file":"index.d.ts","names":[],"sources":["../src/authoring-modules.ts","../src/capabilities.ts","../src/index.ts"],"mappings":"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A;WACA,UAAU,SAAS;WACnB;WACA;;iBAGM;WACN;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;;iBAGM;WACN;WACA;WACA;WACA;WACA;WACA;WACA,WAAW;WACX,iBAAiB,eAAe,UAAU,sBAAsB;;iBAG1D;WACN;WACA;WACA;WACA;WACA,eAAe;WACf;WACA;WACA;;YAGC;iBAgBK;WACN;WACA;WACA;WACA;WACA;WACA;WACA,OAAO;WACP;WACA;WACA;WACA;WACA;;iBAGM;WACN;WACA;WACA;WACA;WACA;aACE;aACA;aACA,YAAY;aACZ;;WAEF,2BAA2B;WAC3B,WAAW;WACX,iBAAiB,UAAU,sBAAsB;WACjD;WACA;WACA;WACA;WACA;;iBAGM;WACN;WACA;WACA;WACA;WACA;WACA;WACA;WACA;;YAGC;iBAQK;WACN;WACA;WACA,OAAO;WACP;WACA;WACA;WACA;WACA;;YAGC,iBACR,kBACA,mBACA,mBACA,iBACA,kBACA,kBACA,mBACA,iBACA;iBAEa;EACf,QAAQ,OAAO,wBAAwB;;iBAGxB;WACN;WACA;WACA;WACA;;iBAGM;WACN;aAAqB;aAA0B;aAA2B;;WAC1E;aAAmB;aAAqB;aAA2B;;WACnE;aAAoB;aAAqB;;WACzC;aAAwB;aAAqB;;WAC7C,cAAc,SAAS,eAAe;WACtC;aACE;aACA;aACA;;;;iBAKI;WACN,UAAU;WACV,QAAQ;WACR;aAAwB;aAAqB;;WAC7C,cAAc;WACd;aACE,WAAW;aACX,OAAO;eACL;eACA;eACA,eAAe,SAAS,eAAe;;;;;iBAMrC;WACN;WACA;WACA;aAAqB;aAA0B;aAA0B;;WACzE;aAAmB;aAAqB;aAA0B;;WAClE;aAAoB;aAAqB;;WACzC;aAAuB;aAAqB;;WAC5C;aAAqB;;;iBAGf;WACN,mBAAmB;;WAEnB;;iBAGM;WACN,qBAAqB;WACrB,QAAQ;;YAGP,kBAAkB,kBAAkB;YAEpC;WAAoC;;WAA6B;;YAEjE,kBAAkB,OAAO,YAAY,0BAC5C,UAAU,YACV,OAAO,OAAO,UAAU;YAEjB,cAAc,OAAO,UAAU;WAChC;KACN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"}
|