@kuindji/typed-sql 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.
- package/LICENSE +21 -0
- package/README.md +227 -0
- package/dist/builder/assemble.d.ts +13 -0
- package/dist/builder/assemble.d.ts.map +1 -0
- package/dist/builder/assemble.js +86 -0
- package/dist/builder/assemble.js.map +1 -0
- package/dist/builder/condition-tree.d.ts +27 -0
- package/dist/builder/condition-tree.d.ts.map +1 -0
- package/dist/builder/condition-tree.js +91 -0
- package/dist/builder/condition-tree.js.map +1 -0
- package/dist/builder/conditional-sql.d.ts +80 -0
- package/dist/builder/conditional-sql.d.ts.map +1 -0
- package/dist/builder/conditional-sql.js +88 -0
- package/dist/builder/conditional-sql.js.map +1 -0
- package/dist/builder/db.d.ts +76 -0
- package/dist/builder/db.d.ts.map +1 -0
- package/dist/builder/db.js +12 -0
- package/dist/builder/db.js.map +1 -0
- package/dist/builder/delete.d.ts +39 -0
- package/dist/builder/delete.d.ts.map +1 -0
- package/dist/builder/delete.js +33 -0
- package/dist/builder/delete.js.map +1 -0
- package/dist/builder/extract-params.d.ts +97 -0
- package/dist/builder/extract-params.d.ts.map +1 -0
- package/dist/builder/extract-params.js +2 -0
- package/dist/builder/extract-params.js.map +1 -0
- package/dist/builder/index.d.ts +23 -0
- package/dist/builder/index.d.ts.map +1 -0
- package/dist/builder/index.js +14 -0
- package/dist/builder/index.js.map +1 -0
- package/dist/builder/insert.d.ts +51 -0
- package/dist/builder/insert.d.ts.map +1 -0
- package/dist/builder/insert.js +39 -0
- package/dist/builder/insert.js.map +1 -0
- package/dist/builder/mutate.d.ts +28 -0
- package/dist/builder/mutate.d.ts.map +1 -0
- package/dist/builder/mutate.js +17 -0
- package/dist/builder/mutate.js.map +1 -0
- package/dist/builder/params.d.ts +22 -0
- package/dist/builder/params.d.ts.map +1 -0
- package/dist/builder/params.js +65 -0
- package/dist/builder/params.js.map +1 -0
- package/dist/builder/return-type.d.ts +39 -0
- package/dist/builder/return-type.d.ts.map +1 -0
- package/dist/builder/return-type.js +2 -0
- package/dist/builder/return-type.js.map +1 -0
- package/dist/builder/scanner.d.ts +49 -0
- package/dist/builder/scanner.d.ts.map +1 -0
- package/dist/builder/scanner.js +240 -0
- package/dist/builder/scanner.js.map +1 -0
- package/dist/builder/select.d.ts +76 -0
- package/dist/builder/select.d.ts.map +1 -0
- package/dist/builder/select.js +240 -0
- package/dist/builder/select.js.map +1 -0
- package/dist/builder/sql-tag.d.ts +319 -0
- package/dist/builder/sql-tag.d.ts.map +1 -0
- package/dist/builder/sql-tag.js +3 -0
- package/dist/builder/sql-tag.js.map +1 -0
- package/dist/builder/sql.d.ts +17 -0
- package/dist/builder/sql.d.ts.map +1 -0
- package/dist/builder/sql.js +36 -0
- package/dist/builder/sql.js.map +1 -0
- package/dist/builder/state.d.ts +53 -0
- package/dist/builder/state.d.ts.map +1 -0
- package/dist/builder/state.js +18 -0
- package/dist/builder/state.js.map +1 -0
- package/dist/builder/update.d.ts +60 -0
- package/dist/builder/update.d.ts.map +1 -0
- package/dist/builder/update.js +40 -0
- package/dist/builder/update.js.map +1 -0
- package/dist/builder/write-assemble.d.ts +5 -0
- package/dist/builder/write-assemble.d.ts.map +1 -0
- package/dist/builder/write-assemble.js +57 -0
- package/dist/builder/write-assemble.js.map +1 -0
- package/dist/builder/write-state.d.ts +39 -0
- package/dist/builder/write-state.d.ts.map +1 -0
- package/dist/builder/write-state.js +6 -0
- package/dist/builder/write-state.js.map +1 -0
- package/dist/builder/write-tag.d.ts +91 -0
- package/dist/builder/write-tag.d.ts.map +1 -0
- package/dist/builder/write-tag.js +2 -0
- package/dist/builder/write-tag.js.map +1 -0
- package/dist/columns.d.ts +33 -0
- package/dist/columns.d.ts.map +1 -0
- package/dist/columns.js +2 -0
- package/dist/columns.js.map +1 -0
- package/dist/expressions.d.ts +71 -0
- package/dist/expressions.d.ts.map +1 -0
- package/dist/expressions.js +2 -0
- package/dist/expressions.js.map +1 -0
- package/dist/index.d.ts +22 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +5 -0
- package/dist/index.js.map +1 -0
- package/dist/parsing/extract.d.ts +47 -0
- package/dist/parsing/extract.d.ts.map +1 -0
- package/dist/parsing/extract.js +2 -0
- package/dist/parsing/extract.js.map +1 -0
- package/dist/parsing/normalize.d.ts +44 -0
- package/dist/parsing/normalize.d.ts.map +1 -0
- package/dist/parsing/normalize.js +2 -0
- package/dist/parsing/normalize.js.map +1 -0
- package/dist/parsing/pg-literals.d.ts +37 -0
- package/dist/parsing/pg-literals.d.ts.map +1 -0
- package/dist/parsing/pg-literals.js +2 -0
- package/dist/parsing/pg-literals.js.map +1 -0
- package/dist/parsing/split.d.ts +100 -0
- package/dist/parsing/split.d.ts.map +1 -0
- package/dist/parsing/split.js +2 -0
- package/dist/parsing/split.js.map +1 -0
- package/dist/parsing/string-utils.d.ts +29 -0
- package/dist/parsing/string-utils.d.ts.map +1 -0
- package/dist/parsing/string-utils.js +2 -0
- package/dist/parsing/string-utils.js.map +1 -0
- package/dist/parsing/tokenize.d.ts +27 -0
- package/dist/parsing/tokenize.d.ts.map +1 -0
- package/dist/parsing/tokenize.js +2 -0
- package/dist/parsing/tokenize.js.map +1 -0
- package/dist/parsing.d.ts +7 -0
- package/dist/parsing.d.ts.map +1 -0
- package/dist/parsing.js +9 -0
- package/dist/parsing.js.map +1 -0
- package/dist/partial.d.ts +30 -0
- package/dist/partial.d.ts.map +1 -0
- package/dist/partial.js +10 -0
- package/dist/partial.js.map +1 -0
- package/dist/schema.d.ts +28 -0
- package/dist/schema.d.ts.map +1 -0
- package/dist/schema.js +2 -0
- package/dist/schema.js.map +1 -0
- package/dist/tables.d.ts +34 -0
- package/dist/tables.d.ts.map +1 -0
- package/dist/tables.js +2 -0
- package/dist/tables.js.map +1 -0
- package/dist/utils.d.ts +13 -0
- package/dist/utils.d.ts.map +1 -0
- package/dist/utils.js +3 -0
- package/dist/utils.js.map +1 -0
- package/dist/validation/cte.d.ts +54 -0
- package/dist/validation/cte.d.ts.map +1 -0
- package/dist/validation/cte.js +2 -0
- package/dist/validation/cte.js.map +1 -0
- package/dist/validation/dispatch.d.ts +31 -0
- package/dist/validation/dispatch.d.ts.map +1 -0
- package/dist/validation/dispatch.js +2 -0
- package/dist/validation/dispatch.js.map +1 -0
- package/dist/validation/joins.d.ts +16 -0
- package/dist/validation/joins.d.ts.map +1 -0
- package/dist/validation/joins.js +2 -0
- package/dist/validation/joins.js.map +1 -0
- package/dist/validation/return-derived.d.ts +67 -0
- package/dist/validation/return-derived.d.ts.map +1 -0
- package/dist/validation/return-derived.js +5 -0
- package/dist/validation/return-derived.js.map +1 -0
- package/dist/validation/return-types.d.ts +41 -0
- package/dist/validation/return-types.d.ts.map +1 -0
- package/dist/validation/return-types.js +2 -0
- package/dist/validation/return-types.js.map +1 -0
- package/dist/validation/validate-columns.d.ts +63 -0
- package/dist/validation/validate-columns.d.ts.map +1 -0
- package/dist/validation/validate-columns.js +2 -0
- package/dist/validation/validate-columns.js.map +1 -0
- package/dist/validation.d.ts +7 -0
- package/dist/validation.d.ts.map +1 -0
- package/dist/validation.js +9 -0
- package/dist/validation.js.map +1 -0
- package/package.json +64 -0
- package/src/builder/assemble.ts +100 -0
- package/src/builder/condition-tree.ts +162 -0
- package/src/builder/conditional-sql.ts +325 -0
- package/src/builder/db.ts +281 -0
- package/src/builder/delete.ts +57 -0
- package/src/builder/extract-params.ts +507 -0
- package/src/builder/index.ts +58 -0
- package/src/builder/insert.ts +75 -0
- package/src/builder/mutate.ts +55 -0
- package/src/builder/params.ts +95 -0
- package/src/builder/return-type.ts +66 -0
- package/src/builder/scanner.ts +254 -0
- package/src/builder/select.ts +470 -0
- package/src/builder/sql-tag.ts +422 -0
- package/src/builder/sql.ts +51 -0
- package/src/builder/state.ts +55 -0
- package/src/builder/update.ts +77 -0
- package/src/builder/write-assemble.ts +52 -0
- package/src/builder/write-state.ts +43 -0
- package/src/builder/write-tag.ts +119 -0
- package/src/columns.ts +336 -0
- package/src/expressions.ts +745 -0
- package/src/index.ts +81 -0
- package/src/parsing/extract.ts +260 -0
- package/src/parsing/normalize.ts +243 -0
- package/src/parsing/pg-literals.ts +289 -0
- package/src/parsing/split.ts +288 -0
- package/src/parsing/string-utils.ts +172 -0
- package/src/parsing/tokenize.ts +321 -0
- package/src/parsing.ts +8 -0
- package/src/partial.ts +241 -0
- package/src/schema.ts +130 -0
- package/src/tables.ts +278 -0
- package/src/utils.ts +43 -0
- package/src/validation/cte.ts +198 -0
- package/src/validation/dispatch.ts +312 -0
- package/src/validation/joins.ts +198 -0
- package/src/validation/return-derived.ts +253 -0
- package/src/validation/return-types.ts +271 -0
- package/src/validation/validate-columns.ts +489 -0
- package/src/validation.ts +8 -0
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
export function assembleInsertSQL(s) {
|
|
2
|
+
// INSERT...SELECT form: emit `insert into T (cols) <select body>` instead of a
|
|
3
|
+
// VALUES list. Any `:params` in the SELECT body are scanned positionally by the
|
|
4
|
+
// shared scanner just like the rest of the statement.
|
|
5
|
+
if (s.fromSelect) {
|
|
6
|
+
let sql = `insert into ${s.table} (${s.columns}) ${s.fromSelect}`;
|
|
7
|
+
if (s.conflict)
|
|
8
|
+
sql += ` on conflict ${s.conflict}`;
|
|
9
|
+
if (s.returning)
|
|
10
|
+
sql += ` returning ${s.returning}`;
|
|
11
|
+
return sql;
|
|
12
|
+
}
|
|
13
|
+
if (s.values.length === 0) {
|
|
14
|
+
throw new Error("INSERT has no columns — all value fragments were conditional and excluded");
|
|
15
|
+
}
|
|
16
|
+
const cols = s.values.map(v => v.col).join(", ");
|
|
17
|
+
const vals = s.values.map(v => v.text).join(", ");
|
|
18
|
+
let sql = `insert into ${s.table} (${cols}) values (${vals})`;
|
|
19
|
+
if (s.conflict)
|
|
20
|
+
sql += ` on conflict ${s.conflict}`;
|
|
21
|
+
if (s.returning)
|
|
22
|
+
sql += ` returning ${s.returning}`;
|
|
23
|
+
return sql;
|
|
24
|
+
}
|
|
25
|
+
export function assembleUpdateSQL(s) {
|
|
26
|
+
if (s.sets.length === 0) {
|
|
27
|
+
throw new Error("UPDATE has no assignments — all SET fragments were conditional and excluded");
|
|
28
|
+
}
|
|
29
|
+
// Build a leading `with ...` clause when CTEs were supplied. It precedes the
|
|
30
|
+
// UPDATE so any `:params` in the CTE bodies are scanned first and get the
|
|
31
|
+
// lowest `$n` positions.
|
|
32
|
+
let prefix = "";
|
|
33
|
+
if (s.ctes?.length) {
|
|
34
|
+
prefix = "with " + s.ctes.map(c => `${c.name} as ${c.materialized ? "materialized " : ""}(${c.body})`).join(", ") + " ";
|
|
35
|
+
}
|
|
36
|
+
// Prepend the alias to the table name when one was supplied.
|
|
37
|
+
const head = s.alias ? `${s.table} ${s.alias}` : s.table;
|
|
38
|
+
let sql = `${prefix}update ${head} set ${s.sets.join(", ")}`;
|
|
39
|
+
if (s.froms.length)
|
|
40
|
+
sql += ` from ${s.froms.join(", ")}`;
|
|
41
|
+
if (s.wheres.length)
|
|
42
|
+
sql += ` where ${s.wheres.join(" and ")}`;
|
|
43
|
+
if (s.returning)
|
|
44
|
+
sql += ` returning ${s.returning}`;
|
|
45
|
+
return sql;
|
|
46
|
+
}
|
|
47
|
+
export function assembleDeleteSQL(s) {
|
|
48
|
+
let sql = `delete from ${s.table}`;
|
|
49
|
+
if (s.usings.length)
|
|
50
|
+
sql += ` using ${s.usings.join(", ")}`;
|
|
51
|
+
if (s.wheres.length)
|
|
52
|
+
sql += ` where ${s.wheres.join(" and ")}`;
|
|
53
|
+
if (s.returning)
|
|
54
|
+
sql += ` returning ${s.returning}`;
|
|
55
|
+
return sql;
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=write-assemble.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"write-assemble.js","sourceRoot":"","sources":["../../src/builder/write-assemble.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import type { DriverParamValue } from "./scanner.js";
|
|
2
|
+
export interface InsertValueEntry {
|
|
3
|
+
readonly col: string;
|
|
4
|
+
readonly text: string;
|
|
5
|
+
}
|
|
6
|
+
export interface RuntimeInsertState {
|
|
7
|
+
readonly table: string;
|
|
8
|
+
readonly values: ReadonlyArray<InsertValueEntry>;
|
|
9
|
+
readonly columns?: string;
|
|
10
|
+
readonly fromSelect?: string;
|
|
11
|
+
readonly conflict?: string;
|
|
12
|
+
readonly returning?: string;
|
|
13
|
+
readonly namedParams: Record<string, DriverParamValue>;
|
|
14
|
+
}
|
|
15
|
+
export interface RuntimeUpdateState {
|
|
16
|
+
readonly table: string;
|
|
17
|
+
readonly alias?: string;
|
|
18
|
+
readonly ctes?: ReadonlyArray<{
|
|
19
|
+
name: string;
|
|
20
|
+
body: string;
|
|
21
|
+
materialized: boolean;
|
|
22
|
+
}>;
|
|
23
|
+
readonly sets: ReadonlyArray<string>;
|
|
24
|
+
readonly froms: ReadonlyArray<string>;
|
|
25
|
+
readonly wheres: ReadonlyArray<string>;
|
|
26
|
+
readonly returning?: string;
|
|
27
|
+
readonly namedParams: Record<string, DriverParamValue>;
|
|
28
|
+
}
|
|
29
|
+
export interface RuntimeDeleteState {
|
|
30
|
+
readonly table: string;
|
|
31
|
+
readonly usings: ReadonlyArray<string>;
|
|
32
|
+
readonly wheres: ReadonlyArray<string>;
|
|
33
|
+
readonly returning?: string;
|
|
34
|
+
readonly namedParams: Record<string, DriverParamValue>;
|
|
35
|
+
}
|
|
36
|
+
export declare const EMPTY_INSERT_STATE: RuntimeInsertState;
|
|
37
|
+
export declare const EMPTY_UPDATE_STATE: RuntimeUpdateState;
|
|
38
|
+
export declare const EMPTY_DELETE_STATE: RuntimeDeleteState;
|
|
39
|
+
//# sourceMappingURL=write-state.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"write-state.d.ts","sourceRoot":"","sources":["../../src/builder/write-state.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAErD,MAAM,WAAW,gBAAgB;IAAG,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CAAE;AAClF,MAAM,WAAW,kBAAkB;IAC/B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC,gBAAgB,CAAC,CAAC;IAIjD,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;CAC1D;AACD,MAAM,WAAW,kBAAkB;IAC/B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAGvB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAIxB,QAAQ,CAAC,IAAI,CAAC,EAAE,aAAa,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;IACrF,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IACrC,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IACtC,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IACvC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;CAC1D;AACD,MAAM,WAAW,kBAAkB;IAC/B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IACvC,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IACvC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;CAC1D;AAGD,eAAO,MAAM,kBAAkB,EAAE,kBAA4E,CAAC;AAC9G,eAAO,MAAM,kBAAkB,EAAE,kBAAoF,CAAC;AACtH,eAAO,MAAM,kBAAkB,EAAE,kBAA2E,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
// `columns: ""` mirrors the type-level EmptyInsertTag default so a `.fromSelect(...)`
|
|
2
|
+
// reached without `.columns(...)` emits an honest `()` rather than `(undefined)`.
|
|
3
|
+
export const EMPTY_INSERT_STATE = { table: "", values: [], columns: "", namedParams: {} };
|
|
4
|
+
export const EMPTY_UPDATE_STATE = { table: "", sets: [], froms: [], wheres: [], namedParams: {} };
|
|
5
|
+
export const EMPTY_DELETE_STATE = { table: "", usings: [], wheres: [], namedParams: {} };
|
|
6
|
+
//# sourceMappingURL=write-state.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"write-state.js","sourceRoot":"","sources":["../../src/builder/write-state.ts"],"names":[],"mappings":"AAsCA,sFAAsF;AACtF,kFAAkF;AAClF,MAAM,CAAC,MAAM,kBAAkB,GAAuB,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC;AAC9G,MAAM,CAAC,MAAM,kBAAkB,GAAuB,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC;AACtH,MAAM,CAAC,MAAM,kBAAkB,GAAuB,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC"}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import type { DatabaseSchema } from "../schema.js";
|
|
2
|
+
import type { ExtractParams, ExtractReturning } from "./extract-params.js";
|
|
3
|
+
export type WriteMode = "max" | "req";
|
|
4
|
+
export interface ValueFrag {
|
|
5
|
+
readonly col: string;
|
|
6
|
+
readonly text: string;
|
|
7
|
+
readonly cond: boolean;
|
|
8
|
+
}
|
|
9
|
+
export interface ClauseFrag {
|
|
10
|
+
readonly text: string;
|
|
11
|
+
readonly cond: boolean;
|
|
12
|
+
}
|
|
13
|
+
export interface InsertTag {
|
|
14
|
+
readonly kind: "insert";
|
|
15
|
+
readonly table: string;
|
|
16
|
+
readonly values: readonly ValueFrag[];
|
|
17
|
+
readonly columns: string;
|
|
18
|
+
readonly fromSelect: string;
|
|
19
|
+
readonly conflict: string | null;
|
|
20
|
+
readonly wheres: readonly ClauseFrag[];
|
|
21
|
+
readonly using: readonly ClauseFrag[];
|
|
22
|
+
readonly from: readonly ClauseFrag[];
|
|
23
|
+
readonly returning: string | null;
|
|
24
|
+
}
|
|
25
|
+
export interface CteFrag {
|
|
26
|
+
readonly name: string;
|
|
27
|
+
readonly body: string;
|
|
28
|
+
readonly materialized: boolean;
|
|
29
|
+
}
|
|
30
|
+
export interface UpdateTag {
|
|
31
|
+
readonly kind: "update";
|
|
32
|
+
readonly table: string;
|
|
33
|
+
readonly alias: string;
|
|
34
|
+
readonly ctes: readonly CteFrag[];
|
|
35
|
+
readonly sets: readonly ClauseFrag[];
|
|
36
|
+
readonly from: readonly ClauseFrag[];
|
|
37
|
+
readonly wheres: readonly ClauseFrag[];
|
|
38
|
+
readonly returning: string | null;
|
|
39
|
+
}
|
|
40
|
+
export interface DeleteTag {
|
|
41
|
+
readonly kind: "delete";
|
|
42
|
+
readonly table: string;
|
|
43
|
+
readonly using: readonly ClauseFrag[];
|
|
44
|
+
readonly wheres: readonly ClauseFrag[];
|
|
45
|
+
readonly returning: string | null;
|
|
46
|
+
}
|
|
47
|
+
type ForMode<List extends readonly {
|
|
48
|
+
cond: boolean;
|
|
49
|
+
}[], Mode extends WriteMode> = Mode extends "max" ? List : DropCond<List>;
|
|
50
|
+
type DropCond<List extends readonly {
|
|
51
|
+
cond: boolean;
|
|
52
|
+
}[]> = List extends readonly [infer H extends {
|
|
53
|
+
cond: boolean;
|
|
54
|
+
}, ...infer R extends readonly {
|
|
55
|
+
cond: boolean;
|
|
56
|
+
}[]] ? H["cond"] extends true ? DropCond<R> : readonly [H, ...DropCond<R>] : readonly [];
|
|
57
|
+
type ColList<List extends readonly ValueFrag[], Acc extends string = ""> = List extends readonly [infer H extends ValueFrag, ...infer R extends readonly ValueFrag[]] ? ColList<R, Acc extends "" ? H["col"] : `${Acc}, ${H["col"]}`> : Acc;
|
|
58
|
+
type ValList<List extends readonly ValueFrag[], Acc extends string = ""> = List extends readonly [infer H extends ValueFrag, ...infer R extends readonly ValueFrag[]] ? ValList<R, Acc extends "" ? H["text"] : `${Acc}, ${H["text"]}`> : Acc;
|
|
59
|
+
type JoinText<List extends readonly {
|
|
60
|
+
text: string;
|
|
61
|
+
}[], Sep extends string, Acc extends string = ""> = List extends readonly [infer H extends {
|
|
62
|
+
text: string;
|
|
63
|
+
}, ...infer R extends readonly {
|
|
64
|
+
text: string;
|
|
65
|
+
}[]] ? JoinText<R, Sep, Acc extends "" ? H["text"] : `${Acc}${Sep}${H["text"]}`> : Acc;
|
|
66
|
+
type Conflict<C extends string | null> = C extends string ? ` on conflict ${C}` : "";
|
|
67
|
+
type Returning<R extends string | null> = R extends string ? ` returning ${R}` : "";
|
|
68
|
+
type FromClause<L extends readonly ClauseFrag[]> = L extends readonly [] ? "" : ` from ${JoinText<L, ", ">}`;
|
|
69
|
+
type UsingClause<L extends readonly ClauseFrag[]> = L extends readonly [] ? "" : ` using ${JoinText<L, ", ">}`;
|
|
70
|
+
type WhereClause<L extends readonly ClauseFrag[]> = L extends readonly [] ? "" : ` where ${JoinText<L, " and ">}`;
|
|
71
|
+
export type BuildInsertSelectSQL<T extends InsertTag> = `insert into ${T["table"]} (${T["columns"]}) ${T["fromSelect"]}${Conflict<T["conflict"]>}${Returning<T["returning"]>}`;
|
|
72
|
+
export type BuildInsertSQL<T extends InsertTag, Mode extends WriteMode> = T["fromSelect"] extends "" ? BuildInsertValuesSQL<T, Mode> : BuildInsertSelectSQL<T>;
|
|
73
|
+
type BuildInsertValuesSQL<T extends InsertTag, Mode extends WriteMode> = ForMode<T["values"], Mode> extends infer V extends readonly ValueFrag[] ? `insert into ${T["table"]} (${ColList<V>}) values (${ValList<V>})${Conflict<T["conflict"]>}${Returning<T["returning"]>}` : never;
|
|
74
|
+
type UpdateHead<T extends UpdateTag> = T["alias"] extends "" ? T["table"] : `${T["table"]} ${T["alias"]}`;
|
|
75
|
+
type RenderCte<C extends CteFrag> = `${C["name"]} as ${C["materialized"] extends true ? "materialized " : ""}(${C["body"]})`;
|
|
76
|
+
type JoinCtes<L extends readonly CteFrag[], Acc extends string = ""> = L extends readonly [infer H extends CteFrag, ...infer R extends readonly CteFrag[]] ? JoinCtes<R, Acc extends "" ? RenderCte<H> : `${Acc}, ${RenderCte<H>}`> : Acc;
|
|
77
|
+
type WithClause<L extends readonly CteFrag[]> = L extends readonly [] ? "" : `with ${JoinCtes<L>} `;
|
|
78
|
+
export type BuildUpdateSQL<T extends UpdateTag, Mode extends WriteMode> = `${WithClause<T["ctes"]>}update ${UpdateHead<T>} set ${JoinText<ForMode<T["sets"], Mode>, ", ">}${FromClause<ForMode<T["from"], Mode>>}${WhereClause<ForMode<T["wheres"], Mode>>}${Returning<T["returning"]>}`;
|
|
79
|
+
export type BuildDeleteSQL<T extends DeleteTag, Mode extends WriteMode> = `delete from ${T["table"]}${UsingClause<ForMode<T["using"], Mode>>}${WhereClause<ForMode<T["wheres"], Mode>>}${Returning<T["returning"]>}`;
|
|
80
|
+
type BuildSQL<T, Mode extends WriteMode> = T extends InsertTag ? BuildInsertSQL<T, Mode> : T extends UpdateTag ? BuildUpdateSQL<T, Mode> : T extends DeleteTag ? BuildDeleteSQL<T, Mode> : never;
|
|
81
|
+
type Partition<Max, Req> = {
|
|
82
|
+
[K in keyof Max as K extends keyof Req ? K : never]: Max[K];
|
|
83
|
+
} & {
|
|
84
|
+
[K in keyof Max as K extends keyof Req ? never : K]?: Max[K];
|
|
85
|
+
};
|
|
86
|
+
export type WriteParamsFor<T, S extends DatabaseSchema> = Partition<ExtractParams<BuildSQL<T, "max">, S>, ExtractParams<BuildSQL<T, "req">, S>> extends infer P ? {
|
|
87
|
+
[K in keyof P]: P[K];
|
|
88
|
+
} : never;
|
|
89
|
+
export type WriteReturnFor<T, S extends DatabaseSchema> = ExtractReturning<BuildSQL<T, "max"> & string, S>;
|
|
90
|
+
export {};
|
|
91
|
+
//# sourceMappingURL=write-tag.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"write-tag.d.ts","sourceRoot":"","sources":["../../src/builder/write-tag.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,KAAK,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAE3E,MAAM,MAAM,SAAS,GAAG,KAAK,GAAG,KAAK,CAAC;AAEtC,MAAM,WAAW,SAAS;IAAG,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;CAAE;AACnG,MAAM,WAAW,UAAU;IAAG,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;CAAE;AAE9E,MAAM,WAAW,SAAS;IACtB,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IACxB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,SAAS,SAAS,EAAE,CAAC;IAGtC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,QAAQ,CAAC,MAAM,EAAE,SAAS,UAAU,EAAE,CAAC;IACvC,QAAQ,CAAC,KAAK,EAAE,SAAS,UAAU,EAAE,CAAC;IACtC,QAAQ,CAAC,IAAI,EAAE,SAAS,UAAU,EAAE,CAAC;IACrC,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CACrC;AACD,MAAM,WAAW,OAAO;IAAG,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC;CAAE;AAC1G,MAAM,WAAW,SAAS;IACtB,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IACxB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,IAAI,EAAE,SAAS,OAAO,EAAE,CAAC;IAClC,QAAQ,CAAC,IAAI,EAAE,SAAS,UAAU,EAAE,CAAC;IACrC,QAAQ,CAAC,IAAI,EAAE,SAAS,UAAU,EAAE,CAAC;IACrC,QAAQ,CAAC,MAAM,EAAE,SAAS,UAAU,EAAE,CAAC;IACvC,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CACrC;AACD,MAAM,WAAW,SAAS;IACtB,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IACxB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,KAAK,EAAE,SAAS,UAAU,EAAE,CAAC;IACtC,QAAQ,CAAC,MAAM,EAAE,SAAS,UAAU,EAAE,CAAC;IACvC,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CACrC;AAGD,KAAK,OAAO,CAAC,IAAI,SAAS,SAAS;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE,EAAE,EAAE,IAAI,SAAS,SAAS,IAC1E,IAAI,SAAS,KAAK,GAAG,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;AAC/C,KAAK,QAAQ,CAAC,IAAI,SAAS,SAAS;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE,EAAE,IACnD,IAAI,SAAS,SAAS,CAAC,MAAM,CAAC,SAAS;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE,EAAE,GAAG,MAAM,CAAC,SAAS,SAAS;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE,EAAE,CAAC,GACpG,CAAC,CAAC,MAAM,CAAC,SAAS,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,EAAE,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,GACnE,SAAS,EAAE,CAAC;AAEtB,KAAK,OAAO,CAAC,IAAI,SAAS,SAAS,SAAS,EAAE,EAAE,GAAG,SAAS,MAAM,GAAG,EAAE,IACnE,IAAI,SAAS,SAAS,CAAC,MAAM,CAAC,SAAS,SAAS,EAAE,GAAG,MAAM,CAAC,SAAS,SAAS,SAAS,EAAE,CAAC,GACpF,OAAO,CAAC,CAAC,EAAE,GAAG,SAAS,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,GAAG,GAAG,KAAK,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;AAC9E,KAAK,OAAO,CAAC,IAAI,SAAS,SAAS,SAAS,EAAE,EAAE,GAAG,SAAS,MAAM,GAAG,EAAE,IACnE,IAAI,SAAS,SAAS,CAAC,MAAM,CAAC,SAAS,SAAS,EAAE,GAAG,MAAM,CAAC,SAAS,SAAS,SAAS,EAAE,CAAC,GACpF,OAAO,CAAC,CAAC,EAAE,GAAG,SAAS,EAAE,GAAG,CAAC,CAAC,MAAM,CAAC,GAAG,GAAG,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;AAChF,KAAK,QAAQ,CAAC,IAAI,SAAS,SAAS;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,EAAE,EAAE,GAAG,SAAS,MAAM,EAAE,GAAG,SAAS,MAAM,GAAG,EAAE,IAC/F,IAAI,SAAS,SAAS,CAAC,MAAM,CAAC,SAAS;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,EAAE,GAAG,MAAM,CAAC,SAAS,SAAS;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,EAAE,CAAC,GAClG,QAAQ,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,SAAS,EAAE,GAAG,CAAC,CAAC,MAAM,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;AAE1F,KAAK,QAAQ,CAAC,CAAC,SAAS,MAAM,GAAG,IAAI,IAAI,CAAC,SAAS,MAAM,GAAG,gBAAgB,CAAC,EAAE,GAAG,EAAE,CAAC;AACrF,KAAK,SAAS,CAAC,CAAC,SAAS,MAAM,GAAG,IAAI,IAAI,CAAC,SAAS,MAAM,GAAG,cAAc,CAAC,EAAE,GAAG,EAAE,CAAC;AACpF,KAAK,UAAU,CAAC,CAAC,SAAS,SAAS,UAAU,EAAE,IAAI,CAAC,SAAS,SAAS,EAAE,GAAG,EAAE,GAAG,SAAS,QAAQ,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC;AAC7G,KAAK,WAAW,CAAC,CAAC,SAAS,SAAS,UAAU,EAAE,IAAI,CAAC,SAAS,SAAS,EAAE,GAAG,EAAE,GAAG,UAAU,QAAQ,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC;AAC/G,KAAK,WAAW,CAAC,CAAC,SAAS,SAAS,UAAU,EAAE,IAAI,CAAC,SAAS,SAAS,EAAE,GAAG,EAAE,GAAG,UAAU,QAAQ,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,CAAC;AAKlH,MAAM,MAAM,oBAAoB,CAAC,CAAC,SAAS,SAAS,IAChD,eAAe,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,YAAY,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC;AAE3H,MAAM,MAAM,cAAc,CAAC,CAAC,SAAS,SAAS,EAAE,IAAI,SAAS,SAAS,IAElE,CAAC,CAAC,YAAY,CAAC,SAAS,EAAE,GAAG,oBAAoB,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,oBAAoB,CAAC,CAAC,CAAC,CAAC;AAGzF,KAAK,oBAAoB,CAAC,CAAC,SAAS,SAAS,EAAE,IAAI,SAAS,SAAS,IACjE,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC,SAAS,MAAM,CAAC,SAAS,SAAS,SAAS,EAAE,GACjE,eAAe,CAAC,CAAC,OAAO,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,aAAa,OAAO,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,EAAE,GACxH,KAAK,CAAC;AAGhB,KAAK,UAAU,CAAC,CAAC,SAAS,SAAS,IAAI,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;AAG1G,KAAK,SAAS,CAAC,CAAC,SAAS,OAAO,IAAI,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,cAAc,CAAC,SAAS,IAAI,GAAG,eAAe,GAAG,EAAE,IAAI,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;AAE7H,KAAK,QAAQ,CAAC,CAAC,SAAS,SAAS,OAAO,EAAE,EAAE,GAAG,SAAS,MAAM,GAAG,EAAE,IAC/D,CAAC,SAAS,SAAS,CAAC,MAAM,CAAC,SAAS,OAAO,EAAE,GAAG,MAAM,CAAC,SAAS,SAAS,OAAO,EAAE,CAAC,GAC7E,QAAQ,CAAC,CAAC,EAAE,GAAG,SAAS,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;AAGvF,KAAK,UAAU,CAAC,CAAC,SAAS,SAAS,OAAO,EAAE,IAAI,CAAC,SAAS,SAAS,EAAE,GAAG,EAAE,GAAG,QAAQ,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC;AAEpG,MAAM,MAAM,cAAc,CAAC,CAAC,SAAS,SAAS,EAAE,IAAI,SAAS,SAAS,IAClE,GAAG,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,UAAU,UAAU,CAAC,CAAC,CAAC,QAAQ,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC;AAEnN,MAAM,MAAM,cAAc,CAAC,CAAC,SAAS,SAAS,EAAE,IAAI,SAAS,SAAS,IAClE,eAAe,CAAC,CAAC,OAAO,CAAC,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC;AAE/I,KAAK,QAAQ,CAAC,CAAC,EAAE,IAAI,SAAS,SAAS,IACnC,CAAC,SAAS,SAAS,GAAG,cAAc,CAAC,CAAC,EAAE,IAAI,CAAC,GAC3C,CAAC,SAAS,SAAS,GAAG,cAAc,CAAC,CAAC,EAAE,IAAI,CAAC,GAC7C,CAAC,SAAS,SAAS,GAAG,cAAc,CAAC,CAAC,EAAE,IAAI,CAAC,GAC7C,KAAK,CAAC;AAIZ,KAAK,SAAS,CAAC,GAAG,EAAE,GAAG,IACjB;KAAG,CAAC,IAAI,MAAM,GAAG,IAAI,CAAC,SAAS,MAAM,GAAG,GAAG,CAAC,GAAG,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC;CAAE,GAC/D;KAAG,CAAC,IAAI,MAAM,GAAG,IAAI,CAAC,SAAS,MAAM,GAAG,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;CAAE,CAAC;AAEvE,MAAM,MAAM,cAAc,CAAC,CAAC,EAAE,CAAC,SAAS,cAAc,IAClD,SAAS,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC,EAAE,aAAa,CAAC,QAAQ,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,MAAM,CAAC,GAC/F;KAAG,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CAAE,GAAG,KAAK,CAAC;AAE3C,MAAM,MAAM,cAAc,CAAC,CAAC,EAAE,CAAC,SAAS,cAAc,IAClD,gBAAgB,CAAC,QAAQ,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,MAAM,EAAE,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"write-tag.js","sourceRoot":"","sources":["../../src/builder/write-tag.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import type { DatabaseSchema, ColumnExists, ColumnExistsInAnyTable, ResolveColumnName, TableExists } from "./schema.js";
|
|
2
|
+
import type { AliasesInQuery, IsAliasName, TableKeyFromToken, TableKeyValid, TablesInQuery } from "./tables.js";
|
|
3
|
+
import type { CanPrecedeColumn, CleanExpr, CleanIdent, HasSpecial, IsParamPlaceholder, IsQualifiedRefCandidate, IsRuntimeStringFragment, IsSqlConstant, OperatorToken, ReplaceAll, SqlReserved, SplitOnDotClean } from "./parsing.js";
|
|
4
|
+
import type { IsNever } from "./utils.js";
|
|
5
|
+
export type ColumnRef<TableKey extends string, Column extends string> = {
|
|
6
|
+
tableKey: TableKey;
|
|
7
|
+
column: Column;
|
|
8
|
+
};
|
|
9
|
+
export type BuildColumnRef<TableKey extends string, Column extends string, S extends DatabaseSchema> = ResolveColumnName<TableKey, Column, S> extends infer Resolved extends string ? ColumnRef<TableKey, Resolved> : never;
|
|
10
|
+
export type StripDoubleQuotes<S extends string> = ReplaceAll<S, `"`, "">;
|
|
11
|
+
export type ParseColumnRef<Expr extends string, Tables extends string, Aliases extends string, S extends DatabaseSchema> = CleanExpr<Expr> extends `"${infer P}".${infer Col}` ? IsQuotedPunctPrefix<P, Col> extends true ? ResolveQuotedPrefixRef<CleanIdent<P>, CleanIdent<Col>, Tables, Aliases, S> : ParseColumnRefGeneric<Expr, Tables, Aliases, S> : ParseColumnRefGeneric<Expr, Tables, Aliases, S>;
|
|
12
|
+
export type IsQuotedPunctPrefix<P extends string, Col extends string> = Col extends `${string}.${string}` ? false : Col extends `${string}"${string}` ? false : Col extends `${string}*${string}` ? false : HasSpecial<P> extends true ? true : false;
|
|
13
|
+
export type ResolveQuotedPrefixRef<P extends string, Col extends string, Tables extends string, Aliases extends string, S extends DatabaseSchema> = [
|
|
14
|
+
ResolveTableKey<P, Tables, Aliases, S>
|
|
15
|
+
] extends [infer TK extends string] ? [TK] extends [never] ? [ResolveTableKeyForUnqualified<Tables, Aliases, S, Col>] extends [infer TKF extends string] ? [TKF] extends [never] ? never : BuildColumnRef<TKF, Col, S> : never : BuildColumnRef<TK, Col, S> : never;
|
|
16
|
+
export type ParseColumnRefGeneric<Expr extends string, Tables extends string, Aliases extends string, S extends DatabaseSchema> = SplitOnDotClean<StripDoubleQuotes<CleanExpr<Expr>>> extends [infer A extends string, infer B extends string, infer C extends string] ? IsSimpleRefPart<A> extends true ? IsSimpleRefPart<B> extends true ? IsSimpleRefPart<C> extends true ? BuildColumnRef<`${A}.${B}`, C, S> : never : never : never : SplitOnDotClean<StripDoubleQuotes<CleanExpr<Expr>>> extends [infer A extends string, infer B extends string] ? IsSimpleRefPart<A> extends true ? IsSimpleRefPart<B> extends true ? IsRuntimeStringFragment<A> extends true ? [ResolveTableKeyForUnqualified<Tables, Aliases, S, B>] extends [infer TKRuntime extends string] ? [TKRuntime] extends [never] ? never : BuildColumnRef<TKRuntime, B, S> : never : CleanIdent<A> extends "excluded" ? [ResolveTableKeyForUnqualified<Tables, Aliases, S, B>] extends [infer TKExcluded extends string] ? [TKExcluded] extends [never] ? never : BuildColumnRef<TKExcluded, B, S> : never : [ResolveTableKey<A, Tables, Aliases, S>] extends [infer TK extends string] ? [TK] extends [never] ? [ResolveTableKeyForUnqualified<Tables, Aliases, S, B>] extends [infer TKFallback extends string] ? [TKFallback] extends [never] ? never : BuildColumnRef<TKFallback, B, S> : never : BuildColumnRef<TK, B, S> : never : never : never : SplitOnDotClean<StripDoubleQuotes<CleanExpr<Expr>>> extends [infer A extends string] ? IsSimpleRefPart<A> extends true ? [ResolveTableKeyForUnqualified<Tables, Aliases, S, A>] extends [infer TK2 extends string] ? [TK2] extends [never] ? never : BuildColumnRef<TK2, A, S> : never : never : never;
|
|
17
|
+
export type IsSimpleRefPart<S extends string> = S extends "" ? false : HasSpecial<S> extends true ? false : true;
|
|
18
|
+
export type ColumnRefValid<ColRef extends string, N extends string, S extends DatabaseSchema> = TablesInQuery<N, S> extends infer Tables extends string ? AliasesInQuery<N, S> extends infer Aliases extends string ? ColumnRefValidWith<ColRef, Tables, Aliases, S> : true : true;
|
|
19
|
+
export type ColumnRefValidWith<ColRef extends string, Tables extends string, Aliases extends string, S extends DatabaseSchema> = ColRef extends `${infer Prefix}.*` ? [ResolveAlias<CleanIdent<Prefix>, Aliases>] extends [infer AliasKey extends string] ? [AliasKey] extends [never] ? TableKeysByName<CleanIdent<Prefix>, Tables> extends infer TableKey extends string ? [TableKey] extends [never] ? CleanIdent<Prefix> extends `${infer Schema}.${infer Table}` ? TableExists<S, Schema, Table> extends true ? TableKeyValid<`${Schema}.${Table}`, S> : false : false : TableKeyValid<TableKey, S> : false : TableKeyValid<AliasKey, S> : false : ParseColumnRef<ColRef, Tables, Aliases, S> extends infer Ref ? [Ref] extends [never] ? true : [Ref] extends [ColumnRef<infer TableKey extends string, infer Column extends string>] ? ColumnExists<TableKey, Column, S> : true : true;
|
|
20
|
+
export type ColumnRefValidLoose<ColRef extends string, N extends string, S extends DatabaseSchema> = TablesInQuery<N, S> extends infer Tables extends string ? AliasesInQuery<N, S> extends infer Aliases extends string ? ColumnRefValidLooseWith<ColRef, Tables, Aliases, S> : ColumnRefValid<ColRef, N, S> : ColumnRefValid<ColRef, N, S>;
|
|
21
|
+
export type ColumnRefValidLooseWith<ColRef extends string, Tables extends string, Aliases extends string, S extends DatabaseSchema> = IsNever<Tables> extends true ? ColumnRefValidNoTables<ColRef, S> : ColumnRefValidWith<ColRef, Tables, Aliases, S>;
|
|
22
|
+
export type ColumnRefValidNoTables<ColRef extends string, S extends DatabaseSchema> = SplitOnDotClean<ColRef> extends [infer A extends string, infer B extends string, infer C extends string] ? TableExists<S, A, B> extends true ? ColumnExists<`${A}.${B}`, C, S> : false : SplitOnDotClean<ColRef> extends [infer A extends string, infer B extends string] ? TableExists<S, S["defaultSchema"], A> extends true ? ColumnExists<`${S["defaultSchema"]}.${A}`, B, S> : ColumnExistsInAnyTable<B, S> : ColumnExistsInAnyTable<CleanIdent<ColRef>, S>;
|
|
23
|
+
export type QualifiedColumnRefs<Tokens extends string[], S extends DatabaseSchema, Tables extends string, Aliases extends string, Acc extends string = never, Prev extends string = "", Steps extends any[] = []> = Steps["length"] extends 900 ? Acc : Tokens extends [infer T extends string, ...infer Rest extends string[]] ? T extends `${string}.${string}` ? Prev extends "from" | "join" | "update" | "into" | "delete" ? QualifiedColumnRefs<Rest, S, Tables, Aliases, Acc, T, [any, ...Steps]> : IsQualifiedRefCandidate<T> extends true ? QualifiedColumnRefs<Rest, S, Tables, Aliases, Acc | T, T, [any, ...Steps]> : QualifiedColumnRefs<Rest, S, Tables, Aliases, Acc, T, [any, ...Steps]> : QualifiedColumnRefs<Rest, S, Tables, Aliases, Acc, T, [any, ...Steps]> : Acc;
|
|
24
|
+
export type UnqualifiedColumnRefs<Tokens extends string[], S extends DatabaseSchema, Tables extends string, Aliases extends string, Acc extends string = never, Prev extends string = "", Steps extends any[] = []> = Steps["length"] extends 900 ? Acc : Tokens extends [infer T extends string, infer Next extends string, ...infer Rest extends string[]] ? IsUnqualifiedColumnCandidate<T, Prev, Next, Tables, Aliases, S> extends true ? UnqualifiedColumnRefs<[Next, ...Rest], S, Tables, Aliases, Acc | T, T, [any, ...Steps]> : UnqualifiedColumnRefs<[Next, ...Rest], S, Tables, Aliases, Acc, T, [any, ...Steps]> : Tokens extends [infer T extends string] ? IsUnqualifiedColumnCandidate<T, Prev, "", Tables, Aliases, S> extends true ? Acc | T : Acc : Acc;
|
|
25
|
+
export type UnqualifiedColumnValid<Col extends string, Tables extends string, Aliases extends string, S extends DatabaseSchema> = IsNever<Tables> extends true ? ColumnExistsInAnyTable<CleanIdent<Col>, S> : [ResolveTableKeyForUnqualified<Tables, Aliases, S, CleanIdent<Col>>] extends [never] ? false : true;
|
|
26
|
+
export type IsUnqualifiedColumnCandidate<Token extends string, Prev extends string, Next extends string, Tables extends string, Aliases extends string, S extends DatabaseSchema> = Token extends "" ? false : IsRuntimeStringFragment<Token> extends true ? false : Token extends OperatorToken ? false : Token extends `${string}.${string}` ? false : Token extends `'${string}'` ? false : Token extends `${string}'${string}` ? false : Token extends `${number}` ? false : IsParamPlaceholder<Token> extends true ? false : IsSqlConstant<Token> extends true ? false : HasSpecial<Token> extends true ? false : CleanIdent<Token> extends SqlReserved ? false : IsAliasName<Token, Aliases> extends true ? false : Prev extends "as" ? false : Prev extends "from" | "join" | "update" | "into" | "delete" ? false : Next extends "(" ? false : Next extends `'${string}` ? false : Prev extends "," ? (IsTableName<Token, S> extends true ? false : CanPrecedeColumn<Prev>) : IsNever<Tables> extends true ? IsTableName<Token, S> extends true ? false : CanPrecedeColumn<Prev> : CanPrecedeColumn<Prev>;
|
|
27
|
+
export type IsTableName<Token extends string, S extends DatabaseSchema> = TableKeyFromToken<Token, S> extends infer TableKey extends string ? TableKeyValid<TableKey, S> : false;
|
|
28
|
+
export type ResolveTableKey<Name extends string, Tables extends string, Aliases extends string, S extends DatabaseSchema> = ResolveAlias<Name, Aliases> | TableKeysByName<Name, Tables> | `${S["defaultSchema"]}.${Name}`;
|
|
29
|
+
export type ResolveTableKeyForUnqualified<Tables extends string, Aliases extends string, S extends DatabaseSchema, Column extends string> = TablesWithColumn<Tables, Column, S> extends infer TK extends string ? TK : never;
|
|
30
|
+
export type ResolveAlias<Name extends string, Aliases extends string> = Aliases extends `${infer A}=>${infer T}` ? A extends Name ? T : never : never;
|
|
31
|
+
export type TableKeysByName<Name extends string, Tables extends string> = Tables extends `${infer Schema}.${infer Table}` ? Table extends Name ? `${Schema}.${Table}` : never : never;
|
|
32
|
+
export type TablesWithColumn<Tables extends string, Column extends string, S extends DatabaseSchema> = Tables extends `${infer Schema}.${infer Table}` ? ColumnExists<`${Schema}.${Table}`, Column, S> extends true ? `${Schema}.${Table}` : never : never;
|
|
33
|
+
//# sourceMappingURL=columns.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"columns.d.ts","sourceRoot":"","sources":["../src/columns.ts"],"names":[],"mappings":"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"}
|
package/dist/columns.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"columns.js","sourceRoot":"","sources":["../src/columns.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import type { DatabaseSchema, ColumnTypeFromTableKey, RowTypeForTable, RowTypeForTables } from "./schema.js";
|
|
2
|
+
import type { ColumnRef, ColumnRefValidLooseWith, ParseColumnRef, QualifiedColumnRefs, ResolveTableKey, UnqualifiedColumnRefs, UnqualifiedColumnValid } from "./columns.js";
|
|
3
|
+
import type { AliasesInQuery, TablesInQuery } from "./tables.js";
|
|
4
|
+
import type { CleanExpr, CleanIdent, ExtractAlias, ExtractAliasResult, ExtractBefore, ExtractBeforeFromTopLevel, IsIdentifier, IsParamPlaceholder, IsRuntimeStringFragment, IsSqlConstant, SqlConstantType, SplitBalancedParen, SplitTopLevel, TokenizeLoose, Trim } from "./parsing.js";
|
|
5
|
+
import type { AllTrue } from "./utils.js";
|
|
6
|
+
export type IsIgnorableRuntimeExpr<E extends string> = IsRuntimeStringFragment<E> extends true ? true : [E] extends [" "] ? true : false;
|
|
7
|
+
export type ExprToObject<E extends string, Tables extends string, Aliases extends string, S extends DatabaseSchema, Nullable extends string = never> = IsIgnorableRuntimeExpr<E> extends true ? {} : ExtractAliasResult<E> extends {
|
|
8
|
+
expr: infer RawExpr extends string;
|
|
9
|
+
alias: infer Alias;
|
|
10
|
+
} ? IsIgnorableRuntimeExpr<RawExpr> extends true ? [Alias] extends [never] ? {} : Alias extends string ? {
|
|
11
|
+
[K in Alias]: unknown;
|
|
12
|
+
} : {} : [Alias] extends [never] ? CleanIdent<RawExpr> extends "*" ? RowTypeForTables<Tables, S> : CleanIdent<RawExpr> extends `${infer T}.*` ? MaybeNullableRow<RowTypeForTable<ResolveTableKey<CleanIdent<T>, Tables, Aliases, S>, S>, T, Nullable> : ExprKey<E, Tables, Aliases, S> extends infer Key extends string | never ? Key extends string ? {
|
|
13
|
+
[K in Key]: ApplyProjectionNull<ExprType<RawExpr, Tables, Aliases, S>, RawExpr, Tables, Aliases, S, Nullable>;
|
|
14
|
+
} : Record<string, unknown> : Record<string, unknown> : Alias extends string ? {
|
|
15
|
+
[K in Alias]: ApplyProjectionNull<ExprType<RawExpr, Tables, Aliases, S>, RawExpr, Tables, Aliases, S, Nullable>;
|
|
16
|
+
} : Record<string, unknown> : Record<string, unknown>;
|
|
17
|
+
export type ApplyJoinNull<T, E extends string, Nullable extends string> = [
|
|
18
|
+
Nullable
|
|
19
|
+
] extends [never] ? T : RefQualifier<E> extends infer Q extends string ? [Q] extends [never] ? T : Q extends Nullable ? T | null : T : T;
|
|
20
|
+
export type RefQualifier<E extends string> = StripOuterCast<E> extends infer Inner extends string ? CleanExpr<Inner> extends `${infer Q}.${string}` ? CleanIdent<Q> : never : never;
|
|
21
|
+
export type StripOuterCast<E extends string> = CleanExpr<E> extends `${infer Inner}::${string}` ? Inner : CleanExpr<E> extends `cast(${infer Inner} as ${string})` ? Inner : CleanExpr<E> extends `cast (${infer Inner} as ${string})` ? Inner : E;
|
|
22
|
+
export type ApplyProjectionNull<T, E extends string, Tables extends string, Aliases extends string, S extends DatabaseSchema, Nullable extends string> = CleanExpr<StripOuterCast<E>> extends `coalesce(${infer Args})` ? CoalesceAllArgsNullable<SplitTopLevel<Args>, Tables, Aliases, S, Nullable> extends true ? T | null : T : ApplyJoinNull<T, E, Nullable>;
|
|
23
|
+
export type CoalesceAllArgsNullable<Args extends string[], Tables extends string, Aliases extends string, S extends DatabaseSchema, Nullable extends string, Steps extends any[] = []> = Steps["length"] extends 30 ? true : Args extends [infer H extends string, ...infer Rest extends string[]] ? CoalesceArgNullable<H, Tables, Aliases, S, Nullable> extends true ? CoalesceAllArgsNullable<Rest, Tables, Aliases, S, Nullable, [any, ...Steps]> : false : true;
|
|
24
|
+
export type CoalesceArgNullable<Arg extends string, Tables extends string, Aliases extends string, S extends DatabaseSchema, Nullable extends string> = RefQualifier<Arg> extends infer Q extends string ? [Q] extends [never] ? null extends ExprType<Arg, Tables, Aliases, S> ? true : false : Q extends Nullable ? true : null extends ExprType<Arg, Tables, Aliases, S> ? true : false : null extends ExprType<Arg, Tables, Aliases, S> ? true : false;
|
|
25
|
+
export type MaybeNullableRow<Row, Qualifier extends string, Nullable extends string> = [
|
|
26
|
+
Nullable
|
|
27
|
+
] extends [never] ? Row : CleanIdent<Qualifier> extends Nullable ? {
|
|
28
|
+
[K in keyof Row]: Row[K] | null;
|
|
29
|
+
} : Row;
|
|
30
|
+
export type ExprKey<E extends string, Tables extends string, Aliases extends string, S extends DatabaseSchema> = CleanIdent<E> extends "*" ? never : CleanIdent<E> extends `${infer T}.*` ? never : CleanExpr<E> extends `${infer Inner}::${string}` ? ColumnKeyFromExpr<Inner, Tables, Aliases, S> : CleanExpr<E> extends `cast(${infer Inner} as ${string})` ? ColumnKeyFromExpr<Inner, Tables, Aliases, S> : CleanExpr<E> extends `cast (${infer Inner} as ${string})` ? ColumnKeyFromExpr<Inner, Tables, Aliases, S> : [ColumnKeyFromExpr<E, Tables, Aliases, S>] extends [never] ? FunctionKeyFromExpr<E> : ColumnKeyFromExpr<E, Tables, Aliases, S>;
|
|
31
|
+
export type ColumnKeyFromExpr<E extends string, Tables extends string, Aliases extends string, S extends DatabaseSchema> = ParseColumnRef<CleanExpr<E>, Tables, Aliases, S> extends infer Ref ? Ref extends ColumnRef<any, any> ? Ref["column"] : never : never;
|
|
32
|
+
export type FunctionKeyFromExpr<E extends string> = CleanExpr<E> extends `case ${string}` ? "case" : CleanExpr<E> extends `${infer Func}(${string}` ? CleanIdent<Func> : CleanExpr<E> extends `${infer Func} (${string}` ? CleanIdent<Func> : never;
|
|
33
|
+
export type IsBoolExpr<CE extends string> = CE extends `case ${string}` ? false : HasTopLevelCompare<CE>;
|
|
34
|
+
export type HasTopLevelCompare<S extends string, Depth extends any[] = [], Steps extends any[] = [], InQ extends boolean = false, InDQ extends boolean = false> = Steps["length"] extends 400 ? false : S extends `${infer C}${infer Rest}` ? InQ extends true ? HasTopLevelCompare<Rest, Depth, [any, ...Steps], C extends "'" ? false : true, InDQ> : InDQ extends true ? HasTopLevelCompare<Rest, Depth, [any, ...Steps], InQ, C extends `"` ? false : true> : C extends "'" ? HasTopLevelCompare<Rest, Depth, [any, ...Steps], true, InDQ> : C extends `"` ? HasTopLevelCompare<Rest, Depth, [any, ...Steps], InQ, true> : C extends "(" ? HasTopLevelCompare<Rest, [any, ...Depth], [any, ...Steps], InQ, InDQ> : C extends ")" ? HasTopLevelCompare<Rest, Depth extends [any, ...infer D] ? D : [], [any, ...Steps], InQ, InDQ> : Depth["length"] extends 0 ? S extends `->>${infer R}` ? HasTopLevelCompare<R, Depth, [any, ...Steps], InQ, InDQ> : S extends `->${infer R}` ? HasTopLevelCompare<R, Depth, [any, ...Steps], InQ, InDQ> : S extends `#>>${infer R}` ? HasTopLevelCompare<R, Depth, [any, ...Steps], InQ, InDQ> : S extends `#>${infer R}` ? HasTopLevelCompare<R, Depth, [any, ...Steps], InQ, InDQ> : S extends `@>${infer R}` ? HasTopLevelCompare<R, Depth, [any, ...Steps], InQ, InDQ> : S extends `<@${infer R}` ? HasTopLevelCompare<R, Depth, [any, ...Steps], InQ, InDQ> : S extends `::${infer R}` ? HasTopLevelCompare<R, Depth, [any, ...Steps], InQ, InDQ> : S extends `<<${infer R}` ? HasTopLevelCompare<R, Depth, [any, ...Steps], InQ, InDQ> : S extends `>>${infer R}` ? HasTopLevelCompare<R, Depth, [any, ...Steps], InQ, InDQ> : C extends "<" | ">" | "=" | "!" ? true : HasTopLevelCompare<Rest, Depth, [any, ...Steps], InQ, InDQ> : HasTopLevelCompare<Rest, Depth, [any, ...Steps], InQ, InDQ> : false;
|
|
35
|
+
type UnwrapRedundantParens<E extends string, Steps extends any[] = []> = Steps["length"] extends 12 ? E : E extends `(select ${string})` ? E : E extends `(${string}` ? SplitBalancedParen<E> extends {
|
|
36
|
+
inner: infer Inner extends string;
|
|
37
|
+
rest: "";
|
|
38
|
+
} ? UnwrapRedundantParens<Trim<Inner>, [any, ...Steps]> : E : E;
|
|
39
|
+
export type ExprType<E extends string, Tables extends string, Aliases extends string, S extends DatabaseSchema, Steps extends any[] = []> = Steps["length"] extends 25 ? unknown : IsIgnorableRuntimeExpr<E> extends true ? unknown : UnwrapRedundantParens<CleanExpr<E>> extends infer CE extends string ? IsRuntimeStringFragment<CE> extends true ? unknown : CE extends "*" ? RowTypeForTables<Tables, S> : CE extends `${infer T}.*` ? RowTypeForTable<ResolveTableKey<CleanIdent<T>, Tables, Aliases, S>, S> : CE extends `(select ${infer SubBody})` ? ScalarSubqueryType<SubBody, S, [any, ...Steps]> : IsBoolExpr<CE> extends true ? boolean : IsCaseExpr<CE> extends true ? unknown : [OuterCastName<CE>] extends [never] ? CE extends `cast(${infer Inner} as ${infer CastTypeName})` ? ExprType<Inner, Tables, Aliases, S, [any, ...Steps]> extends never ? never : SqlTypeToTs<CastTypeName> : CE extends `cast (${infer Inner} as ${infer CastTypeName})` ? ExprType<Inner, Tables, Aliases, S, [any, ...Steps]> extends never ? never : SqlTypeToTs<CastTypeName> : CE extends `${infer Func}(${infer Args})` ? FunctionReturn<CleanIdent<Func>, Args, Tables, Aliases, S, [any, ...Steps]> : CE extends `${infer Func} (${infer Args})` ? FunctionReturn<CleanIdent<Func>, Args, Tables, Aliases, S, [any, ...Steps]> : CE extends `${string}||${string}` ? string : CE extends `${infer JBase}->>${string}` ? ExprType<JBase, Tables, Aliases, S, [any, ...Steps]> extends never ? never : string : CE extends `${infer JBase}#>>${string}` ? ExprType<JBase, Tables, Aliases, S, [any, ...Steps]> extends never ? never : string : CE extends "null" ? null : CE extends `'${infer L}'` ? string : CE extends `${number}` ? number : CE extends "true" ? boolean : CE extends "false" ? boolean : IsSqlConstant<CE> extends true ? SqlConstantType<CE> : IsParamPlaceholder<CE> extends true ? unknown : [ParseColumnRef<CE, Tables, Aliases, S>] extends [infer Ref] ? [Ref] extends [never] ? IsIdentifier<CE> extends true ? never : unknown : Ref extends ColumnRef<infer TableKey extends string, infer Column extends string> ? ColumnTypeFromTableKey<TableKey, Column, S> : IsIdentifier<CE> extends true ? never : unknown : unknown : OuterCastName<CE> extends `${string}->>${string}` ? string : OuterCastName<CE> extends `${string}#>>${string}` ? string : CastInnerIsSimpleRef<OuterCastInner<CE>> extends true ? ExprType<OuterCastInner<CE>, Tables, Aliases, S, [any, ...Steps]> extends never ? never : SqlTypeToTs<OuterCastName<CE>> : SqlTypeToTs<OuterCastName<CE>> : unknown;
|
|
40
|
+
export type ScalarSubqueryType<SubBody extends string, S extends DatabaseSchema, Steps extends any[]> = ExtractBeforeFromTopLevel<SubBody> extends infer SL extends string ? SplitTopLevel<SL> extends [infer First extends string, ...infer _Rest] ? First extends string ? `select ${SubBody}` extends infer SubQuery extends string ? TablesInQuery<SubQuery, S> extends infer SubTables extends string ? AliasesInQuery<SubQuery, S> extends infer SubAliases extends string ? ExtractAliasResult<First> extends {
|
|
41
|
+
expr: infer RawExpr extends string;
|
|
42
|
+
} ? ExprType<RawExpr, SubTables, SubAliases, S, Steps> : unknown : unknown : unknown : unknown : unknown : unknown : unknown;
|
|
43
|
+
export type FunctionReturn<Func extends string, Args extends string, Tables extends string, Aliases extends string, S extends DatabaseSchema, Steps extends any[] = []> = Steps["length"] extends 25 ? unknown : ArgsValid<Args, Tables, Aliases, S, Steps> extends false ? never : Func extends "count" ? number : Func extends "sum" | "avg" ? number : Func extends "min" | "max" ? FirstArgType<Args, Tables, Aliases, S, Steps> : Func extends "upper" | "lower" | "concat" ? string : Func extends "coalesce" ? UnionArgTypes<Args, Tables, Aliases, S, Steps> : unknown;
|
|
44
|
+
export type ExprsValid<Exprs extends string[], N extends string, S extends DatabaseSchema> = TablesInQuery<N, S> extends infer Tables extends string ? AliasesInQuery<N, S> extends infer Aliases extends string ? ExprsValidList<Exprs, Tables, Aliases, S> : true : true;
|
|
45
|
+
export type ExprValid<E extends string, Tables extends string, Aliases extends string, S extends DatabaseSchema> = IsIgnorableRuntimeExpr<E> extends true ? true : ExtractAlias<E> extends {
|
|
46
|
+
expr: infer RawExpr extends string;
|
|
47
|
+
} ? IsIgnorableRuntimeExpr<RawExpr> extends true ? true : ExprType<RawExpr, Tables, Aliases, S> extends never ? false : NeedsTokenRefValidation<RawExpr> extends true ? ExprColumnRefsValid<RawExpr, Tables, Aliases, S> : FuncCompoundArgsValid<RawExpr, Tables, Aliases, S> : true;
|
|
48
|
+
export type FuncCompoundArgsValid<E extends string, Tables extends string, Aliases extends string, S extends DatabaseSchema> = ExtractFuncArgList<CleanExpr<E>> extends infer Args extends string ? [Args] extends [never] ? true : ArgsArithRefsValid<SplitTopLevel<Args>, Tables, Aliases, S> : true;
|
|
49
|
+
export type ExtractFuncArgList<E extends string> = E extends `${infer _Func}(${infer AfterOpen}` ? SplitBalancedParen<`(${AfterOpen}`> extends {
|
|
50
|
+
inner: infer Inner extends string;
|
|
51
|
+
} ? Inner : never : never;
|
|
52
|
+
export type ArgsArithRefsValid<Args extends string[], Tables extends string, Aliases extends string, S extends DatabaseSchema, Steps extends any[] = []> = Steps["length"] extends 30 ? true : Args extends [infer H extends string, ...infer Rest extends string[]] ? Trim<H> extends infer TH extends string ? ExprColumnRefsValid<TH, Tables, Aliases, S> extends false ? false : ArgsArithRefsValid<Rest, Tables, Aliases, S, [any, ...Steps]> : ArgsArithRefsValid<Rest, Tables, Aliases, S, [any, ...Steps]> : true;
|
|
53
|
+
export type NeedsTokenRefValidation<E extends string> = CleanExpr<E> extends `${string}::${string}` ? false : CleanExpr<E> extends `cast(${string} as ${string})` ? false : CleanExpr<E> extends `cast (${string} as ${string})` ? false : CleanExpr<E> extends `${string}(${string}` ? false : CleanExpr<E> extends `${string} (${string}` ? false : true;
|
|
54
|
+
export type ExprColumnRefsValid<E extends string, Tables extends string, Aliases extends string, S extends DatabaseSchema> = ExprQualifiedRefsValid<E, Tables, Aliases, S> extends true ? ExprUnqualifiedRefsValid<E, Tables, Aliases, S> : false;
|
|
55
|
+
export type ExprQualifiedRefsValid<E extends string, Tables extends string, Aliases extends string, S extends DatabaseSchema> = QualifiedColumnRefs<TokenizeLoose<E>, S, Tables, Aliases> extends infer Cols ? AllTrue<Cols extends string ? ColumnRefValidLooseWith<Cols, Tables, Aliases, S> : true> : true;
|
|
56
|
+
export type ExprUnqualifiedRefsValid<E extends string, Tables extends string, Aliases extends string, S extends DatabaseSchema> = UnqualifiedColumnRefs<TokenizeLoose<E>, S, Tables, Aliases> extends infer Cols ? AllTrue<Cols extends string ? UnqualifiedColumnValid<Cols, Tables, Aliases, S> : true> : true;
|
|
57
|
+
export type ExprsValidList<Exprs extends string[], Tables extends string, Aliases extends string, S extends DatabaseSchema, Steps extends any[] = []> = Steps["length"] extends 100 ? true : Exprs extends [infer H extends string, ...infer Rest extends string[]] ? ExprValid<H, Tables, Aliases, S> extends true ? ExprsValidList<Rest, Tables, Aliases, S, [any, ...Steps]> : false : true;
|
|
58
|
+
export type FirstArgType<Args extends string, Tables extends string, Aliases extends string, S extends DatabaseSchema, Steps extends any[]> = SplitTopLevel<Args> extends [infer First extends string, ...infer _] ? ExprType<First, Tables, Aliases, S, Steps> : unknown;
|
|
59
|
+
export type UnionArgTypes<Args extends string, Tables extends string, Aliases extends string, S extends DatabaseSchema, Steps extends any[]> = SplitTopLevel<Args> extends infer Parts extends string[] ? Parts[number] extends infer P extends string ? ExprType<P, Tables, Aliases, S, Steps> : unknown : unknown;
|
|
60
|
+
export type ArgsValid<Args extends string, Tables extends string, Aliases extends string, S extends DatabaseSchema, Steps extends any[]> = Trim<Args> extends "" ? true : SplitTopLevel<Args> extends infer Parts extends string[] ? AllTrue<Parts[number] extends infer P extends string ? (ExprType<P, Tables, Aliases, S, Steps> extends never ? false : true) : true> : true;
|
|
61
|
+
export type SqlTypeToTs<T extends string> = Trim<T> extends `${string}::${infer Rest}` ? SqlTypeToTs<Rest> : Trim<T> extends `${infer Base}[]` ? SqlScalarToTs<NormalizeTypeName<Base>>[] : SqlScalarToTs<NormalizeTypeName<T>>;
|
|
62
|
+
export type SqlScalarToTs<N extends string> = N extends "int" | "integer" | "bigint" | "smallint" | "numeric" | "decimal" | "real" | "double" | "float" | "int2" | "int4" | "int8" | "float4" | "float8" ? number : N extends "bool" | "boolean" ? boolean : N extends "text" | "varchar" | "char" | "character" | "uuid" ? string : N extends "date" | "time" | "timestamp" | "timestamptz" ? string : N extends "json" | "jsonb" ? unknown : N extends "bytea" | "blob" ? Uint8Array : unknown;
|
|
63
|
+
export type NormalizeTypeName<S extends string> = CleanIdent<ExtractBefore<Trim<S>, "(">>;
|
|
64
|
+
export type OuterCastTs<E extends string> = CleanExpr<E> extends `${string}::${infer CastName}` ? SqlTypeToTs<CastName> : CleanExpr<E> extends `cast(${string} as ${infer CastName})` ? SqlTypeToTs<CastName> : CleanExpr<E> extends `cast (${string} as ${infer CastName})` ? SqlTypeToTs<CastName> : unknown;
|
|
65
|
+
type CastAfterIsNested<After extends string> = After extends `${infer P})${string}` ? P extends `${string}(${string}` ? false : true : false;
|
|
66
|
+
export type OuterCastName<E extends string> = E extends `${string}::${infer After}` ? CastAfterIsNested<After> extends true ? OuterCastName<After> : After : never;
|
|
67
|
+
export type OuterCastInner<E extends string, Acc extends string = ""> = E extends `${infer A}::${infer After}` ? CastAfterIsNested<After> extends true ? OuterCastInner<After, `${Acc}${A}::`> : `${Acc}${A}` : E;
|
|
68
|
+
export type CastInnerIsSimpleRef<I extends string> = Trim<I> extends `${string}(${string}` ? false : Trim<I> extends `${string} ${string}` ? false : true;
|
|
69
|
+
export type IsCaseExpr<E extends string> = Trim<E> extends `case ${string}` ? true : Trim<E> extends `(${infer Inner})` ? IsCaseExpr<Inner> : false;
|
|
70
|
+
export {};
|
|
71
|
+
//# sourceMappingURL=expressions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"expressions.d.ts","sourceRoot":"","sources":["../src/expressions.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"expressions.js","sourceRoot":"","sources":["../src/expressions.ts"],"names":[],"mappings":""}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
export type { DatabaseSchema } from "./schema.js";
|
|
2
|
+
import type { DatabaseSchema } from "./schema.js";
|
|
3
|
+
import type { NormalizeQuery } from "./parsing.js";
|
|
4
|
+
import type { DeleteTargetTable, InsertTargetTable, UpdateTargetTable } from "./tables.js";
|
|
5
|
+
import type { ValidateSQLNormalized, GetReturnTypeNormalized, QueryKind } from "./validation.js";
|
|
6
|
+
import type { RowTypeForTable } from "./schema.js";
|
|
7
|
+
export type ValidateSQL<Query extends string, Schema extends DatabaseSchema> = string extends Query ? false : Query extends any ? NormalizeQuery<Query> extends infer N extends string ? ValidateSQLNormalized<N, Schema> : false : false;
|
|
8
|
+
export type GetReturnType<Query extends string, Schema extends DatabaseSchema> = string extends Query ? {} : NormalizeQuery<Query> extends infer N extends string ? QueryKind<N> extends "unknown" ? {} : GetReturnTypeNormalized<N, Schema> : {};
|
|
9
|
+
export type QueryResult<Query extends string, Schema extends DatabaseSchema> = GetReturnType<Query, Schema>;
|
|
10
|
+
export type ValidateSelectSQL<Query extends string, Schema extends DatabaseSchema> = ValidateSQL<Query, Schema>;
|
|
11
|
+
export type ValidateInsertSQL<Query extends string, Schema extends DatabaseSchema> = ValidateSQL<Query, Schema>;
|
|
12
|
+
export type ValidateUpdateSQL<Query extends string, Schema extends DatabaseSchema> = ValidateSQL<Query, Schema>;
|
|
13
|
+
export type ValidateDeleteSQL<Query extends string, Schema extends DatabaseSchema> = ValidateSQL<Query, Schema>;
|
|
14
|
+
export type IsValidInsert<Query extends string, Schema extends DatabaseSchema> = ValidateSQL<Query, Schema>;
|
|
15
|
+
export type IsValidUpdate<Query extends string, Schema extends DatabaseSchema> = ValidateSQL<Query, Schema>;
|
|
16
|
+
export type IsValidDelete<Query extends string, Schema extends DatabaseSchema> = ValidateSQL<Query, Schema>;
|
|
17
|
+
export type GetInsertTableColumns<Query extends string, Schema extends DatabaseSchema> = InsertTargetTable<NormalizeQuery<Query>, Schema> extends infer TableKey extends string ? RowTypeForTable<TableKey, Schema> : never;
|
|
18
|
+
export type GetUpdateTableColumns<Query extends string, Schema extends DatabaseSchema> = UpdateTargetTable<NormalizeQuery<Query>, Schema> extends infer TableKey extends string ? RowTypeForTable<TableKey, Schema> : never;
|
|
19
|
+
export type GetDeleteTableColumns<Query extends string, Schema extends DatabaseSchema> = DeleteTargetTable<NormalizeQuery<Query>, Schema> extends infer TableKey extends string ? RowTypeForTable<TableKey, Schema> : never;
|
|
20
|
+
export type { ValidateFromPart, ValidateJoinPart, ValidateSelectPart, ValidateWherePart, ValidateHavingPart, ValidateGroupByPart, ValidateOrderByPart } from "./partial.js";
|
|
21
|
+
export * from "./builder/index.js";
|
|
22
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,uDAAuD;AACvD,wFAAwF;AA8ExF,+CAA+C;AAC/C,cAAc,oBAAoB,CAAC"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import type { CleanIdent, FilterEmpty, HasSpecial, MapClean, Split, Trim, TrimLeft } from "./string-utils.js";
|
|
2
|
+
import type { ExtractBefore, ExtractBeforeFromTopLevel, SplitCommaSimple, SplitTopLevel, StripDistinct } from "./split.js";
|
|
3
|
+
export type ExtractSelectList<N extends string> = N extends `${infer _}select ${infer After}` ? StripDistinct<ExtractBeforeFromTopLevel<After>> : N extends `${infer _}with ${string} select ${infer After}` ? StripDistinct<ExtractBeforeFromTopLevel<After>> : "";
|
|
4
|
+
export type ExtractReturningList<N extends string> = FirstTopLevelReturningTail<N>;
|
|
5
|
+
export type FirstTopLevelReturningTail<S extends string, InString extends boolean = false, InDString extends boolean = false, Steps extends any[] = []> = string extends S ? "" : Steps["length"] extends 1200 ? S extends `${string} returning ${infer After}` ? After : "" : InString extends true ? S extends `${infer C}${infer Rest}` ? FirstTopLevelReturningTail<Rest, C extends "'" ? false : true, InDString, [any, ...Steps]> : "" : InDString extends true ? S extends `${infer C}${infer Rest}` ? FirstTopLevelReturningTail<Rest, InString, C extends `"` ? false : true, [any, ...Steps]> : "" : S extends ` returning ${infer After}` ? After : S extends `${infer C}${infer Rest}` ? FirstTopLevelReturningTail<Rest, C extends "'" ? true : false, C extends `"` ? true : false, [any, ...Steps]> : "";
|
|
6
|
+
type SplitBalancedParenWorker<S extends string, Depth extends any[] = [], Acc extends string = "", InString extends boolean = false, Steps extends any[] = []> = Steps["length"] extends 350 ? {
|
|
7
|
+
__c: [S, Depth, Acc, InString];
|
|
8
|
+
} : S extends `${infer C}${infer Rest}` ? C extends "'" ? SplitBalancedParenWorker<Rest, Depth, `${Acc}${C}`, InString extends true ? false : true, [any, ...Steps]> : InString extends true ? SplitBalancedParenWorker<Rest, Depth, `${Acc}${C}`, InString, [any, ...Steps]> : C extends "(" ? Depth["length"] extends 0 ? SplitBalancedParenWorker<Rest, [any], Acc, InString, [any, ...Steps]> : SplitBalancedParenWorker<Rest, [any, ...Depth], `${Acc}${C}`, InString, [any, ...Steps]> : C extends ")" ? Depth extends [any, ...infer D extends any[]] ? D["length"] extends 0 ? {
|
|
9
|
+
inner: Acc;
|
|
10
|
+
rest: Rest;
|
|
11
|
+
} : SplitBalancedParenWorker<Rest, D, `${Acc}${C}`, InString, [any, ...Steps]> : {
|
|
12
|
+
inner: Acc;
|
|
13
|
+
rest: Rest;
|
|
14
|
+
} : SplitBalancedParenWorker<Rest, Depth, `${Acc}${C}`, InString, [any, ...Steps]> : {
|
|
15
|
+
inner: Acc;
|
|
16
|
+
rest: "";
|
|
17
|
+
};
|
|
18
|
+
export type SplitBalancedParen<S extends string> = SplitBalancedParenDrive<SplitBalancedParenWorker<S>>;
|
|
19
|
+
type SplitBalancedParenDrive<R> = R extends {
|
|
20
|
+
__c: [infer S extends string, infer Depth extends any[], infer Acc extends string, infer InString extends boolean];
|
|
21
|
+
} ? SplitBalancedParenDrive<SplitBalancedParenWorker<S, Depth, Acc, InString, []>> : R;
|
|
22
|
+
export type StripSubqueries<S extends string, Acc extends string = "", Steps extends any[] = []> = Steps["length"] extends 30 ? `${Acc}${S}` : S extends `${infer Before}(${infer AfterOpen}` ? SplitBalancedParen<`(${AfterOpen}`> extends {
|
|
23
|
+
inner: infer Inner extends string;
|
|
24
|
+
rest: infer Rest extends string;
|
|
25
|
+
} ? Trim<Inner> extends `select ${string}` ? StripSubqueries<Rest, `${Acc}${Before} `, [any, ...Steps]> : StripSubqueries<Rest, `${Acc}${Before}(${Inner})`, [any, ...Steps]> : `${Acc}${S}` : `${Acc}${S}`;
|
|
26
|
+
export type ExtractCallParenBodies<S extends string, Marker extends string, Acc extends string = "", Steps extends any[] = []> = Steps["length"] extends 12 ? Acc : S extends `${infer _Head}${Marker}${infer AfterOpen}` ? SplitBalancedParen<`(${AfterOpen}`> extends {
|
|
27
|
+
inner: infer Inner extends string;
|
|
28
|
+
rest: infer Rest extends string;
|
|
29
|
+
} ? ExtractCallParenBodies<Rest, Marker, `${Acc} ${Inner}`, [any, ...Steps]> : Acc : Acc;
|
|
30
|
+
export type ExtractLastWhere<N extends string> = ExtractBefore<Trim<LastWhereTail<N>>, " returning ">;
|
|
31
|
+
type LastWhereTail<S extends string, Steps extends any[] = []> = Steps["length"] extends 16 ? S : S extends `${infer _Head} where ${infer Rest}` ? LastWhereTail<Rest, [any, ...Steps]> : S;
|
|
32
|
+
export type ExtractFromClause<N extends string> = N extends `${infer _}select ${infer After}` ? ExtractBeforeFromTopLevel<After> extends infer SL extends string ? After extends `${SL} from ${infer FromRest}` ? FromRest : "" : "" : "";
|
|
33
|
+
export type SplitSelectList<S extends string> = S extends "" ? [] : SplitTopLevel<S>;
|
|
34
|
+
export type ExtractInsertColumns<N extends string> = N extends `${infer _}insert into ${infer Rest}` ? Rest extends `${infer _Table}(${infer Cols})${infer _}` ? SplitCommaSimple<Cols> : Rest extends `${infer _Table} (${infer Cols})${infer _}` ? SplitCommaSimple<Cols> : [] : [];
|
|
35
|
+
export type ExtractConflictColumns<N extends string> = N extends `${string} on conflict ${infer Rest}` ? Rest extends `(${infer Cols})${string}` ? SplitCommaSimple<Cols> : Rest extends ` (${infer Cols})${string}` ? SplitCommaSimple<Cols> : [] : [];
|
|
36
|
+
export type ExtractUpdateSetColumns<N extends string> = N extends `${infer _} set ${infer Rest}` ? ExtractBefore<Rest, " where "> extends infer Block1 extends string ? ExtractBefore<Block1, " returning "> extends infer Block2 extends string ? SplitAssignments<Block2> : [] : [] : [];
|
|
37
|
+
export type ExtractConflictUpdateSetColumns<N extends string> = N extends `${string} do update set ${infer Rest}` ? ExtractBefore<Rest, " where "> extends infer Block1 extends string ? ExtractBefore<Block1, " returning "> extends infer Block2 extends string ? SplitAssignments<Block2> : [] : [] : [];
|
|
38
|
+
export type ExtractConflictUpdateExcludedCols<N extends string> = N extends `${string} do update set ${infer Rest}` ? ExtractBefore<Rest, " where "> extends infer Block1 extends string ? ExtractBefore<Block1, " returning "> extends infer Block2 extends string ? MapExcludedRHS<Split<Block2, ",">> : [] : [] : [];
|
|
39
|
+
export type MapExcludedRHS<Parts extends string[], Acc extends string[] = []> = Parts extends [infer P extends string, ...infer Rest extends string[]] ? P extends `${string}=${infer Right}` ? CleanIdent<Right> extends `excluded.${infer Col}` ? MapExcludedRHS<Rest, [...Acc, Col]> : MapExcludedRHS<Rest, Acc> : MapExcludedRHS<Rest, Acc> : Acc;
|
|
40
|
+
export type SplitAssignments<S extends string> = TrimLeft<S> extends `(${string}` ? ExtractRowAssignTargets<TrimLeft<S>> : Split<S, ","> extends infer Parts extends string[] ? MapLeftSide<Parts> : [];
|
|
41
|
+
export type ExtractRowAssignTargets<S extends string> = SplitBalancedParen<S> extends {
|
|
42
|
+
inner: infer Cols extends string;
|
|
43
|
+
rest: infer _Rest extends string;
|
|
44
|
+
} ? FilterEmpty<MapClean<SplitCommaSimple<Cols>>> : [];
|
|
45
|
+
export type MapLeftSide<Parts extends string[], Acc extends string[] = []> = Parts extends [infer P extends string, ...infer Rest extends string[]] ? P extends `${infer Left}=${string}` ? Trim<Left> extends infer L extends string ? L extends "" ? MapLeftSide<Rest, Acc> : HasSpecial<L> extends true ? MapLeftSide<Rest, Acc> : MapLeftSide<Rest, [...Acc, L]> : MapLeftSide<Rest, Acc> : MapLeftSide<Rest, Acc> : Acc;
|
|
46
|
+
export {};
|
|
47
|
+
//# sourceMappingURL=extract.d.ts.map
|