zeed 1.4.0 → 1.5.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/dist/{args-FLoL3OKJ.d.cts → args-CEjib9V9.d.mts} +1 -1
- package/dist/{args-WC9q5kz2.d.mts → args-DEig-jw4.d.cts} +1 -1
- package/dist/{clipboard-BkUO-syY.d.mts → clipboard-BusqmLLY.d.cts} +1 -1
- package/dist/{clipboard-Cfpr331X.d.cts → clipboard-DcuuFRwa.d.mts} +1 -1
- package/dist/common/exec/index.d.cts +2 -2
- package/dist/common/exec/index.d.mts +2 -2
- package/dist/common/exec/promise.d.cts +1 -1
- package/dist/common/exec/promise.d.mts +1 -1
- package/dist/common/exec/throttle-debounce.d.cts +1 -1
- package/dist/common/exec/throttle-debounce.d.mts +1 -1
- package/dist/common/index.cjs +21 -0
- package/dist/common/index.d.cts +14 -11
- package/dist/common/index.d.mts +15 -12
- package/dist/common/index.mjs +4 -1
- package/dist/common/msg/rpc.cjs +8 -8
- package/dist/common/msg/rpc.cjs.map +1 -1
- package/dist/common/msg/rpc.mjs +8 -8
- package/dist/common/msg/rpc.mjs.map +1 -1
- package/dist/common/schema/export-json-schema.cjs +40 -31
- package/dist/common/schema/export-json-schema.cjs.map +1 -1
- package/dist/common/schema/export-json-schema.mjs +40 -31
- package/dist/common/schema/export-json-schema.mjs.map +1 -1
- package/dist/common/schema/index.cjs +21 -0
- package/dist/common/schema/index.d.cts +6 -3
- package/dist/common/schema/index.d.mts +7 -4
- package/dist/common/schema/index.mjs +4 -1
- package/dist/common/schema/sql/expr.cjs +128 -0
- package/dist/common/schema/sql/expr.cjs.map +1 -0
- package/dist/common/schema/sql/expr.d.cts +2 -0
- package/dist/common/schema/sql/expr.d.mts +2 -0
- package/dist/common/schema/sql/expr.mjs +115 -0
- package/dist/common/schema/sql/expr.mjs.map +1 -0
- package/dist/common/schema/sql/index.cjs +23 -0
- package/dist/common/schema/sql/index.d.cts +4 -0
- package/dist/common/schema/sql/index.d.mts +4 -0
- package/dist/common/schema/sql/index.mjs +5 -0
- package/dist/common/schema/sql/select.cjs +143 -0
- package/dist/common/schema/sql/select.cjs.map +1 -0
- package/dist/common/schema/sql/select.d.cts +2 -0
- package/dist/common/schema/sql/select.d.mts +2 -0
- package/dist/common/schema/sql/select.mjs +139 -0
- package/dist/common/schema/sql/select.mjs.map +1 -0
- package/dist/common/schema/sql/table.cjs +23 -0
- package/dist/common/schema/sql/table.cjs.map +1 -0
- package/dist/common/schema/sql/table.d.cts +2 -0
- package/dist/common/schema/sql/table.d.mts +2 -0
- package/dist/common/schema/sql/table.mjs +20 -0
- package/dist/common/schema/sql/table.mjs.map +1 -0
- package/dist/common/schema/type-test.d.cts +1 -1
- package/dist/common/schema/type-test.d.mts +1 -1
- package/dist/common/schema/utils.d.cts +1 -1
- package/dist/common/schema/utils.d.mts +1 -1
- package/dist/common/schema/z.d.mts +1 -1
- package/dist/common/storage/index.d.cts +1 -1
- package/dist/common/storage/index.d.mts +1 -1
- package/dist/common/storage/memstorage.d.cts +1 -1
- package/dist/common/storage/memstorage.d.mts +1 -1
- package/dist/common/test.d.cts +1 -1
- package/dist/common/test.d.mts +1 -1
- package/dist/common/time.d.cts +1 -1
- package/dist/common/time.d.mts +1 -1
- package/dist/common/timeout.d.cts +1 -1
- package/dist/common/timeout.d.mts +1 -1
- package/dist/common/utils.d.cts +1 -1
- package/dist/common/utils.d.mts +1 -1
- package/dist/common/uuid.d.cts +1 -1
- package/dist/common/uuid.d.mts +1 -1
- package/dist/{crypto-CyTV7Qce.d.cts → crypto-D68rVmvU.d.mts} +1 -1
- package/dist/{crypto-LT7EC5_d.d.mts → crypto-KzGHoCJE.d.cts} +1 -1
- package/dist/{env-B3vOiVY8.d.cts → env-BJXdwBKq.d.mts} +1 -1
- package/dist/{env-C3npYe8w.d.mts → env-HsOnA_yK.d.cts} +1 -1
- package/dist/expr-CCKrqOw1.d.mts +25 -0
- package/dist/expr-yYgSeBZ3.d.cts +25 -0
- package/dist/{files-CDNKX9VI.d.mts → files-4O-PxnAC.d.cts} +1 -1
- package/dist/{files-DdI9UZvg.d.cts → files-BlpxqSTT.d.mts} +1 -1
- package/dist/{files-async-1V0bu_ca.d.cts → files-async-DFLC-Nkd.d.cts} +1 -1
- package/dist/{files-async-cBMkRwsu.d.mts → files-async-DfuEEDjH.d.mts} +1 -1
- package/dist/{filestorage-CXQ9MzeW.d.cts → filestorage-BjeBZEAs.d.cts} +1 -1
- package/dist/{filestorage-YzM2z9sU.d.mts → filestorage-CmfztpWm.d.mts} +1 -1
- package/dist/{fs-DHJ9AqUk.d.cts → fs-D837bjRT.d.cts} +1 -1
- package/dist/{fs-DgjZdpuF.d.mts → fs-DlYLapik.d.mts} +1 -1
- package/dist/{glob-Bfs7ZS_i.d.mts → glob-5yW09dkR.d.mts} +1 -1
- package/dist/{glob-Bt150jOY.d.cts → glob-CZaZPqiy.d.cts} +1 -1
- package/dist/index.all.cjs +21 -0
- package/dist/index.all.d.cts +28 -25
- package/dist/index.all.d.mts +29 -26
- package/dist/index.all.mjs +4 -1
- package/dist/index.browser.cjs +21 -0
- package/dist/index.browser.d.cts +14 -11
- package/dist/index.browser.d.mts +15 -12
- package/dist/index.browser.mjs +4 -1
- package/dist/index.jsr.d.cts +4 -4
- package/dist/index.jsr.d.mts +4 -4
- package/dist/index.node.cjs +21 -0
- package/dist/index.node.d.cts +28 -25
- package/dist/index.node.d.mts +29 -26
- package/dist/index.node.mjs +4 -1
- package/dist/{log-file-bsTsc9KM.d.cts → log-file-DwEDms1F.d.cts} +2 -2
- package/dist/{log-file-DTuImomJ.d.mts → log-file-QV1unm3z.d.mts} +2 -2
- package/dist/{log-file-rotation-_YruAcNc.d.cts → log-file-rotation-BpZxXYlU.d.cts} +2 -2
- package/dist/{log-file-rotation-FBmtp_Uz.d.mts → log-file-rotation-DanrO_2y.d.mts} +2 -2
- package/dist/{log-node-DlrXl3QO.d.mts → log-node-BSn7RqAc.d.mts} +1 -1
- package/dist/{log-node-Dk948mHX.d.cts → log-node-D_fiJL6x.d.cts} +1 -1
- package/dist/{log-rotation-CkyjZbK5.d.mts → log-rotation-BdGakFya.d.cts} +1 -1
- package/dist/{log-rotation-_d7iRm9s.d.cts → log-rotation-Ce4e-8LN.d.mts} +1 -1
- package/dist/{log-util-2Ls76P-0.d.cts → log-util-C0U3zCjw.d.cts} +1 -1
- package/dist/{log-util-Da_d19f8.d.mts → log-util-Da_UCcmt.d.mts} +1 -1
- package/dist/{memstorage-D5A9FwiP.d.mts → memstorage-BhWXthO8.d.mts} +1 -1
- package/dist/{memstorage-BcjQLdaQ.d.cts → memstorage-tvlWDYgS.d.cts} +1 -1
- package/dist/node/args.d.cts +1 -1
- package/dist/node/args.d.mts +1 -1
- package/dist/node/clipboard.d.cts +1 -1
- package/dist/node/clipboard.d.mts +1 -1
- package/dist/node/crypto.d.cts +1 -1
- package/dist/node/crypto.d.mts +1 -1
- package/dist/node/env.d.cts +1 -1
- package/dist/node/env.d.mts +1 -1
- package/dist/node/files-async.d.cts +1 -1
- package/dist/node/files-async.d.mts +1 -1
- package/dist/node/files.d.cts +1 -1
- package/dist/node/files.d.mts +1 -1
- package/dist/node/filestorage.d.cts +1 -1
- package/dist/node/filestorage.d.mts +1 -1
- package/dist/node/fs.d.cts +1 -1
- package/dist/node/fs.d.mts +1 -1
- package/dist/node/glob.d.cts +1 -1
- package/dist/node/glob.d.mts +1 -1
- package/dist/node/index.d.cts +14 -14
- package/dist/node/index.d.mts +14 -14
- package/dist/node/log/index.d.cts +5 -5
- package/dist/node/log/index.d.mts +5 -5
- package/dist/node/log/log-file-rotation.d.cts +1 -1
- package/dist/node/log/log-file-rotation.d.mts +1 -1
- package/dist/node/log/log-file.d.cts +1 -1
- package/dist/node/log/log-file.d.mts +1 -1
- package/dist/node/log/log-node.cjs +4 -13
- package/dist/node/log/log-node.cjs.map +1 -1
- package/dist/node/log/log-node.d.cts +1 -1
- package/dist/node/log/log-node.d.mts +1 -1
- package/dist/node/log/log-node.mjs +4 -13
- package/dist/node/log/log-node.mjs.map +1 -1
- package/dist/node/log/log-rotation.d.cts +1 -1
- package/dist/node/log/log-rotation.d.mts +1 -1
- package/dist/node/log/log-util.d.cts +1 -1
- package/dist/node/log/log-util.d.mts +1 -1
- package/dist/{promise-DGgiRckN.d.cts → promise-CU_CENbU.d.cts} +1 -1
- package/dist/{promise-MH3xAy4S.d.mts → promise-CoWXgo4w.d.mts} +1 -1
- package/dist/select-DrciHdk_.d.cts +52 -0
- package/dist/select-F2KpP6mo.d.mts +52 -0
- package/dist/table-Cr8tjDIL.d.mts +19 -0
- package/dist/table-IkLXirT-.d.cts +19 -0
- package/dist/{test-CAhm15f4.d.mts → test-DcXa0MeX.d.cts} +1 -1
- package/dist/{test-D2plOVHF.d.cts → test-jZsc7P2c.d.mts} +1 -1
- package/dist/{throttle-debounce-BLFxAZ8W.d.mts → throttle-debounce-CCh0F100.d.mts} +1 -1
- package/dist/{throttle-debounce-Psb0ay1r.d.cts → throttle-debounce-DyFiyoAk.d.cts} +1 -1
- package/dist/{time-BfKJBbym.d.cts → time-BgFZe9ys.d.cts} +1 -1
- package/dist/{time-DxE-vjjw.d.mts → time-DSV_k3mG.d.mts} +1 -1
- package/dist/{timeout-CnUk6Ruj.d.mts → timeout-DDSSNZY8.d.mts} +1 -1
- package/dist/{timeout-CpFcK8MD.d.cts → timeout-E3ZQbJgK.d.cts} +1 -1
- package/dist/{type-test-BiKyEZkc.d.mts → type-test-BvzWDJz3.d.mts} +1 -1
- package/dist/{type-test-sM7QpfQU.d.cts → type-test-CBK-iJ9d.d.cts} +1 -1
- package/dist/{utils-B8DsVgFr.d.mts → utils-1RyCGkpQ.d.mts} +1 -1
- package/dist/{utils-BfZkD2Pt.d.mts → utils-6Culwiaf.d.cts} +1 -1
- package/dist/{utils-DHQBNh-Z.d.cts → utils-CDJihcg3.d.mts} +1 -1
- package/dist/{utils-Bctk_WhH.d.cts → utils-nCQklGHV.d.cts} +1 -1
- package/dist/{uuid-Cusm2nIK.d.cts → uuid-CKFZfSff.d.mts} +1 -1
- package/dist/{uuid-ININPGKB.d.mts → uuid-D42A8UdP.d.cts} +1 -1
- package/dist/z-C0fpNWZg.d.cts +1 -0
- package/dist/z-D_jezYmm.d.mts +1 -0
- package/dist/{z-collection-BmuBin--.d.mts → z-collection-BSfgRU0Q.d.mts} +1 -1
- package/package.json +7 -8
- package/src/common/schema/export-json-schema.spec.ts +11 -7
- package/src/common/schema/export-json-schema.ts +59 -52
- package/src/common/schema/index.ts +1 -0
- package/src/common/schema/sql/README.md +254 -0
- package/src/common/schema/sql/expr.ts +99 -0
- package/src/common/schema/sql/index.ts +3 -0
- package/src/common/schema/sql/select.spec.ts +144 -0
- package/src/common/schema/sql/select.ts +207 -0
- package/src/common/schema/sql/table.ts +36 -0
- /package/dist/{index-BH1nuHdZ.d.cts → index-CIABef8t.d.mts} +0 -0
- /package/dist/{index-BL7o4fG9.d.cts → index-CliqZ9rj.d.mts} +0 -0
- /package/dist/{index-CP2eJYlK.d.mts → index-D6xqj1Qx.d.cts} +0 -0
- /package/dist/{index-DjOaHFU3.d.mts → index-DHFfG4yr.d.cts} +0 -0
- /package/dist/{index-sViox9YW.d.mts → index-N-OgGgfF.d.mts} +0 -0
- /package/dist/{z-ClMox7qS.d.mts → index-WOw4GVZo.d.cts} +0 -0
- /package/dist/{z-dtM4F8Lo.d.cts → index-luywJTzJ.d.mts} +0 -0
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
import { isColumn } from "./table.mjs";
|
|
2
|
+
|
|
3
|
+
//#region src/common/schema/sql/expr.ts
|
|
4
|
+
function operand(v) {
|
|
5
|
+
if (isColumn(v)) return {
|
|
6
|
+
kind: "expr",
|
|
7
|
+
sql: `"${v._table}"."${v._name}"`,
|
|
8
|
+
params: [],
|
|
9
|
+
refs: [v]
|
|
10
|
+
};
|
|
11
|
+
if (v && v.kind === "expr") return v;
|
|
12
|
+
return {
|
|
13
|
+
kind: "expr",
|
|
14
|
+
sql: "?",
|
|
15
|
+
params: [v],
|
|
16
|
+
refs: []
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
function binop(op) {
|
|
20
|
+
return (a, b) => {
|
|
21
|
+
const x = operand(a);
|
|
22
|
+
const y = operand(b);
|
|
23
|
+
return {
|
|
24
|
+
kind: "expr",
|
|
25
|
+
sql: `${x.sql} ${op} ${y.sql}`,
|
|
26
|
+
params: [...x.params, ...y.params],
|
|
27
|
+
refs: [...x.refs, ...y.refs]
|
|
28
|
+
};
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
const eq = binop("=");
|
|
32
|
+
const ne = binop("<>");
|
|
33
|
+
const gt = binop(">");
|
|
34
|
+
const gte = binop(">=");
|
|
35
|
+
const lt = binop("<");
|
|
36
|
+
const lte = binop("<=");
|
|
37
|
+
const like = binop("LIKE");
|
|
38
|
+
function and(...parts) {
|
|
39
|
+
const list = parts.filter((p) => !!p);
|
|
40
|
+
if (list.length === 0) return {
|
|
41
|
+
kind: "expr",
|
|
42
|
+
sql: "1=1",
|
|
43
|
+
params: [],
|
|
44
|
+
refs: []
|
|
45
|
+
};
|
|
46
|
+
if (list.length === 1) return list[0];
|
|
47
|
+
return {
|
|
48
|
+
kind: "expr",
|
|
49
|
+
sql: list.map((p) => `(${p.sql})`).join(" AND "),
|
|
50
|
+
params: list.flatMap((p) => p.params),
|
|
51
|
+
refs: list.flatMap((p) => p.refs)
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
function or(...parts) {
|
|
55
|
+
const list = parts.filter((p) => !!p);
|
|
56
|
+
if (list.length === 0) return {
|
|
57
|
+
kind: "expr",
|
|
58
|
+
sql: "1=0",
|
|
59
|
+
params: [],
|
|
60
|
+
refs: []
|
|
61
|
+
};
|
|
62
|
+
if (list.length === 1) return list[0];
|
|
63
|
+
return {
|
|
64
|
+
kind: "expr",
|
|
65
|
+
sql: list.map((p) => `(${p.sql})`).join(" OR "),
|
|
66
|
+
params: list.flatMap((p) => p.params),
|
|
67
|
+
refs: list.flatMap((p) => p.refs)
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
function not(e) {
|
|
71
|
+
return {
|
|
72
|
+
kind: "expr",
|
|
73
|
+
sql: `NOT (${e.sql})`,
|
|
74
|
+
params: e.params,
|
|
75
|
+
refs: e.refs
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
function sqlIsNull(col) {
|
|
79
|
+
const x = operand(col);
|
|
80
|
+
return {
|
|
81
|
+
kind: "expr",
|
|
82
|
+
sql: `${x.sql} IS NULL`,
|
|
83
|
+
params: x.params,
|
|
84
|
+
refs: x.refs
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
function sqlIsNotNull(col) {
|
|
88
|
+
const x = operand(col);
|
|
89
|
+
return {
|
|
90
|
+
kind: "expr",
|
|
91
|
+
sql: `${x.sql} IS NOT NULL`,
|
|
92
|
+
params: x.params,
|
|
93
|
+
refs: x.refs
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
function inArray(col, values) {
|
|
97
|
+
const x = operand(col);
|
|
98
|
+
if (values.length === 0) return {
|
|
99
|
+
kind: "expr",
|
|
100
|
+
sql: "1=0",
|
|
101
|
+
params: [],
|
|
102
|
+
refs: x.refs
|
|
103
|
+
};
|
|
104
|
+
const placeholders = values.map(() => "?").join(", ");
|
|
105
|
+
return {
|
|
106
|
+
kind: "expr",
|
|
107
|
+
sql: `${x.sql} IN (${placeholders})`,
|
|
108
|
+
params: [...x.params, ...values],
|
|
109
|
+
refs: x.refs
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
//#endregion
|
|
114
|
+
export { and, eq, gt, gte, inArray, like, lt, lte, ne, not, or, sqlIsNotNull, sqlIsNull };
|
|
115
|
+
//# sourceMappingURL=expr.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"expr.mjs","names":[],"sources":["../../../../src/common/schema/sql/expr.ts"],"sourcesContent":["import type { Column } from './table'\nimport { isColumn } from './table'\n\nexport interface Expr {\n readonly kind: 'expr'\n readonly sql: string\n readonly params: unknown[]\n readonly refs: Column[]\n}\n\nfunction operand(v: any): Expr {\n if (isColumn(v)) {\n return {\n kind: 'expr',\n sql: `\"${v._table}\".\"${v._name}\"`,\n params: [],\n refs: [v],\n }\n }\n if (v && v.kind === 'expr')\n return v as Expr\n return { kind: 'expr', sql: '?', params: [v], refs: [] }\n}\n\nfunction binop(op: string) {\n return (a: Column | Expr | unknown, b: Column | Expr | unknown): Expr => {\n const x = operand(a)\n const y = operand(b)\n return {\n kind: 'expr',\n sql: `${x.sql} ${op} ${y.sql}`,\n params: [...x.params, ...y.params],\n refs: [...x.refs, ...y.refs],\n }\n }\n}\n\nexport const eq = binop('=')\nexport const ne = binop('<>')\nexport const gt = binop('>')\nexport const gte = binop('>=')\nexport const lt = binop('<')\nexport const lte = binop('<=')\nexport const like = binop('LIKE')\n\nexport function and(...parts: (Expr | undefined | false | null)[]): Expr {\n const list = parts.filter((p): p is Expr => !!p)\n if (list.length === 0)\n return { kind: 'expr', sql: '1=1', params: [], refs: [] }\n if (list.length === 1)\n return list[0]\n return {\n kind: 'expr',\n sql: list.map(p => `(${p.sql})`).join(' AND '),\n params: list.flatMap(p => p.params),\n refs: list.flatMap(p => p.refs),\n }\n}\n\nexport function or(...parts: (Expr | undefined | false | null)[]): Expr {\n const list = parts.filter((p): p is Expr => !!p)\n if (list.length === 0)\n return { kind: 'expr', sql: '1=0', params: [], refs: [] }\n if (list.length === 1)\n return list[0]\n return {\n kind: 'expr',\n sql: list.map(p => `(${p.sql})`).join(' OR '),\n params: list.flatMap(p => p.params),\n refs: list.flatMap(p => p.refs),\n }\n}\n\nexport function not(e: Expr): Expr {\n return { kind: 'expr', sql: `NOT (${e.sql})`, params: e.params, refs: e.refs }\n}\n\nexport function sqlIsNull(col: Column | Expr): Expr {\n const x = operand(col)\n return { kind: 'expr', sql: `${x.sql} IS NULL`, params: x.params, refs: x.refs }\n}\n\nexport function sqlIsNotNull(col: Column | Expr): Expr {\n const x = operand(col)\n return { kind: 'expr', sql: `${x.sql} IS NOT NULL`, params: x.params, refs: x.refs }\n}\n\nexport function inArray(col: Column | Expr, values: unknown[]): Expr {\n const x = operand(col)\n if (values.length === 0)\n return { kind: 'expr', sql: '1=0', params: [], refs: x.refs }\n const placeholders = values.map(() => '?').join(', ')\n return {\n kind: 'expr',\n sql: `${x.sql} IN (${placeholders})`,\n params: [...x.params, ...values],\n refs: x.refs,\n }\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
2
|
+
const require_common_schema_sql_table = require('./table.cjs');
|
|
3
|
+
const require_common_schema_sql_expr = require('./expr.cjs');
|
|
4
|
+
const require_common_schema_sql_select = require('./select.cjs');
|
|
5
|
+
|
|
6
|
+
exports.SelectBuilder = require_common_schema_sql_select.SelectBuilder;
|
|
7
|
+
exports.and = require_common_schema_sql_expr.and;
|
|
8
|
+
exports.eq = require_common_schema_sql_expr.eq;
|
|
9
|
+
exports.from = require_common_schema_sql_select.from;
|
|
10
|
+
exports.gt = require_common_schema_sql_expr.gt;
|
|
11
|
+
exports.gte = require_common_schema_sql_expr.gte;
|
|
12
|
+
exports.inArray = require_common_schema_sql_expr.inArray;
|
|
13
|
+
exports.isColumn = require_common_schema_sql_table.isColumn;
|
|
14
|
+
exports.like = require_common_schema_sql_expr.like;
|
|
15
|
+
exports.lt = require_common_schema_sql_expr.lt;
|
|
16
|
+
exports.lte = require_common_schema_sql_expr.lte;
|
|
17
|
+
exports.ne = require_common_schema_sql_expr.ne;
|
|
18
|
+
exports.not = require_common_schema_sql_expr.not;
|
|
19
|
+
exports.or = require_common_schema_sql_expr.or;
|
|
20
|
+
exports.select = require_common_schema_sql_select.select;
|
|
21
|
+
exports.sqlIsNotNull = require_common_schema_sql_expr.sqlIsNotNull;
|
|
22
|
+
exports.sqlIsNull = require_common_schema_sql_expr.sqlIsNull;
|
|
23
|
+
exports.table = require_common_schema_sql_table.table;
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { a as table, i as isColumn, n as TableColumns, r as TableShape, t as Column } from "../../../table-IkLXirT-.cjs";
|
|
2
|
+
import { a as gte, c as lt, d as not, f as or, i as gt, l as lte, m as sqlIsNull, n as and, o as inArray, p as sqlIsNotNull, r as eq, s as like, t as Expr, u as ne } from "../../../expr-yYgSeBZ3.cjs";
|
|
3
|
+
import { a as RowFromTable, c as select, i as RowFromSelection, n as InferRow, o as SelectBuilder, r as QueryDependencies, s as from, t as CompiledQuery } from "../../../select-DrciHdk_.cjs";
|
|
4
|
+
export { Column, CompiledQuery, Expr, InferRow, QueryDependencies, RowFromSelection, RowFromTable, SelectBuilder, TableColumns, TableShape, and, eq, from, gt, gte, inArray, isColumn, like, lt, lte, ne, not, or, select, sqlIsNotNull, sqlIsNull, table };
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { a as table, i as isColumn, n as TableColumns, r as TableShape, t as Column } from "../../../table-Cr8tjDIL.mjs";
|
|
2
|
+
import { a as gte, c as lt, d as not, f as or, i as gt, l as lte, m as sqlIsNull, n as and, o as inArray, p as sqlIsNotNull, r as eq, s as like, t as Expr, u as ne } from "../../../expr-CCKrqOw1.mjs";
|
|
3
|
+
import { a as RowFromTable, c as select, i as RowFromSelection, n as InferRow, o as SelectBuilder, r as QueryDependencies, s as from, t as CompiledQuery } from "../../../select-F2KpP6mo.mjs";
|
|
4
|
+
export { Column, CompiledQuery, Expr, InferRow, QueryDependencies, RowFromSelection, RowFromTable, SelectBuilder, TableColumns, TableShape, and, eq, from, gt, gte, inArray, isColumn, like, lt, lte, ne, not, or, select, sqlIsNotNull, sqlIsNull, table };
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { isColumn, table } from "./table.mjs";
|
|
2
|
+
import { and, eq, gt, gte, inArray, like, lt, lte, ne, not, or, sqlIsNotNull, sqlIsNull } from "./expr.mjs";
|
|
3
|
+
import { SelectBuilder, from, select } from "./select.mjs";
|
|
4
|
+
|
|
5
|
+
export { SelectBuilder, and, eq, from, gt, gte, inArray, isColumn, like, lt, lte, ne, not, or, select, sqlIsNotNull, sqlIsNull, table };
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
2
|
+
|
|
3
|
+
//#region src/common/schema/sql/select.ts
|
|
4
|
+
var SelectBuilder = class {
|
|
5
|
+
_state;
|
|
6
|
+
constructor(state) {
|
|
7
|
+
this._state = state;
|
|
8
|
+
}
|
|
9
|
+
from(t) {
|
|
10
|
+
this._state.from = t;
|
|
11
|
+
return this;
|
|
12
|
+
}
|
|
13
|
+
pick(...keys) {
|
|
14
|
+
if (!this._state.from) throw new Error("pick: from() must be called first");
|
|
15
|
+
const sel = {};
|
|
16
|
+
for (const k of keys) sel[k] = this._state.from[k];
|
|
17
|
+
this._state.selection = sel;
|
|
18
|
+
return this;
|
|
19
|
+
}
|
|
20
|
+
where(expr) {
|
|
21
|
+
this._state.where = expr;
|
|
22
|
+
return this;
|
|
23
|
+
}
|
|
24
|
+
orderBy(col, dir = "ASC") {
|
|
25
|
+
this._state.orderBy.push({
|
|
26
|
+
col,
|
|
27
|
+
dir
|
|
28
|
+
});
|
|
29
|
+
return this;
|
|
30
|
+
}
|
|
31
|
+
limit(n) {
|
|
32
|
+
this._state.limit = n;
|
|
33
|
+
return this;
|
|
34
|
+
}
|
|
35
|
+
offset(n) {
|
|
36
|
+
this._state.offset = n;
|
|
37
|
+
return this;
|
|
38
|
+
}
|
|
39
|
+
toSQL() {
|
|
40
|
+
const s = this._state;
|
|
41
|
+
if (!s.from) throw new Error("select: from() is required");
|
|
42
|
+
const tableName = s.from._name;
|
|
43
|
+
const params = [];
|
|
44
|
+
const selectRefs = [];
|
|
45
|
+
const whereRefs = [];
|
|
46
|
+
const orderByRefs = [];
|
|
47
|
+
let cols;
|
|
48
|
+
if (s.selection) {
|
|
49
|
+
const parts = [];
|
|
50
|
+
for (const [alias, col] of Object.entries(s.selection)) {
|
|
51
|
+
selectRefs.push(col);
|
|
52
|
+
const ident = `"${col._table}"."${col._name}"`;
|
|
53
|
+
parts.push(alias === col._name ? ident : `${ident} AS "${alias}"`);
|
|
54
|
+
}
|
|
55
|
+
cols = parts.join(", ");
|
|
56
|
+
} else {
|
|
57
|
+
const shape = s.from._shape;
|
|
58
|
+
const names = Object.keys(shape);
|
|
59
|
+
for (const n of names) selectRefs.push(s.from[n]);
|
|
60
|
+
cols = names.map((n) => `"${tableName}"."${n}"`).join(", ");
|
|
61
|
+
}
|
|
62
|
+
let sql = `SELECT ${cols} FROM "${tableName}"`;
|
|
63
|
+
if (s.where) {
|
|
64
|
+
sql += ` WHERE ${s.where.sql}`;
|
|
65
|
+
params.push(...s.where.params);
|
|
66
|
+
whereRefs.push(...s.where.refs);
|
|
67
|
+
}
|
|
68
|
+
if (s.orderBy.length) {
|
|
69
|
+
const parts = s.orderBy.map((o) => {
|
|
70
|
+
orderByRefs.push(o.col);
|
|
71
|
+
return `"${o.col._table}"."${o.col._name}" ${o.dir}`;
|
|
72
|
+
});
|
|
73
|
+
sql += ` ORDER BY ${parts.join(", ")}`;
|
|
74
|
+
}
|
|
75
|
+
if (s.limit != null) {
|
|
76
|
+
sql += ` LIMIT ?`;
|
|
77
|
+
params.push(s.limit);
|
|
78
|
+
}
|
|
79
|
+
if (s.offset != null) {
|
|
80
|
+
sql += ` OFFSET ?`;
|
|
81
|
+
params.push(s.offset);
|
|
82
|
+
}
|
|
83
|
+
return {
|
|
84
|
+
sql,
|
|
85
|
+
params,
|
|
86
|
+
dependencies: collectDependencies(selectRefs, whereRefs, orderByRefs),
|
|
87
|
+
__row: void 0
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
dependencies() {
|
|
91
|
+
return this.toSQL().dependencies;
|
|
92
|
+
}
|
|
93
|
+
};
|
|
94
|
+
function collectDependencies(selectRefs, whereRefs, orderByRefs) {
|
|
95
|
+
const map = /* @__PURE__ */ new Map();
|
|
96
|
+
const bucket = (table) => {
|
|
97
|
+
let b = map.get(table);
|
|
98
|
+
if (!b) {
|
|
99
|
+
b = {
|
|
100
|
+
select: /* @__PURE__ */ new Set(),
|
|
101
|
+
where: /* @__PURE__ */ new Set(),
|
|
102
|
+
orderBy: /* @__PURE__ */ new Set()
|
|
103
|
+
};
|
|
104
|
+
map.set(table, b);
|
|
105
|
+
}
|
|
106
|
+
return b;
|
|
107
|
+
};
|
|
108
|
+
for (const c of selectRefs) bucket(c._table).select.add(c._name);
|
|
109
|
+
for (const c of whereRefs) bucket(c._table).where.add(c._name);
|
|
110
|
+
for (const c of orderByRefs) bucket(c._table).orderBy.add(c._name);
|
|
111
|
+
return Array.from(map, ([table, b]) => {
|
|
112
|
+
const all = new Set([
|
|
113
|
+
...b.select,
|
|
114
|
+
...b.where,
|
|
115
|
+
...b.orderBy
|
|
116
|
+
]);
|
|
117
|
+
return {
|
|
118
|
+
table,
|
|
119
|
+
select: Array.from(b.select).sort(),
|
|
120
|
+
where: Array.from(b.where).sort(),
|
|
121
|
+
orderBy: Array.from(b.orderBy).sort(),
|
|
122
|
+
all: Array.from(all).sort()
|
|
123
|
+
};
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
function select(selection) {
|
|
127
|
+
return new SelectBuilder({
|
|
128
|
+
selection,
|
|
129
|
+
orderBy: []
|
|
130
|
+
});
|
|
131
|
+
}
|
|
132
|
+
function from(t) {
|
|
133
|
+
return new SelectBuilder({
|
|
134
|
+
from: t,
|
|
135
|
+
orderBy: []
|
|
136
|
+
});
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
//#endregion
|
|
140
|
+
exports.SelectBuilder = SelectBuilder;
|
|
141
|
+
exports.from = from;
|
|
142
|
+
exports.select = select;
|
|
143
|
+
//# sourceMappingURL=select.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"select.cjs","names":[],"sources":["../../../../src/common/schema/sql/select.ts"],"sourcesContent":["import type { Infer, Type } from '../schema'\nimport type { Expr } from './expr'\nimport type { Column, TableColumns, TableShape } from './table'\n\nexport type RowFromTable<T> = T extends TableColumns<any, infer S>\n ? { [K in keyof S]: Infer<S[K]> }\n : never\n\nexport type RowFromSelection<S> = {\n [K in keyof S]: S[K] extends Column<infer T> ? T : never\n}\n\nexport interface QueryDependencies {\n readonly table: string\n readonly select: readonly string[]\n readonly where: readonly string[]\n readonly orderBy: readonly string[]\n readonly all: readonly string[]\n}\n\nexport interface CompiledQuery<Row> {\n readonly sql: string\n readonly params: readonly unknown[]\n readonly dependencies: readonly QueryDependencies[]\n readonly __row?: Row\n}\n\ninterface OrderByEntry {\n col: Column\n dir: 'ASC' | 'DESC'\n}\n\ninterface SelectState {\n selection?: Record<string, Column>\n from?: TableColumns<any, any>\n where?: Expr\n orderBy: OrderByEntry[]\n limit?: number\n offset?: number\n}\n\ntype ShapeRow<S> = { [K in keyof S]: S[K] extends Type<infer T> ? T : never }\n\nexport class SelectBuilder<Row, Shape = unknown> {\n private _state: SelectState\n\n constructor(state: SelectState) {\n this._state = state\n }\n\n from<N extends string, S extends TableShape>(\n t: TableColumns<N, S>,\n ): SelectBuilder<Row extends void ? ShapeRow<S> : Row, S> {\n this._state.from = t\n return this as any\n }\n\n pick<K extends Extract<keyof Shape, string>>(\n ...keys: K[]\n ): SelectBuilder<{ [P in K]: Shape[P] extends Type<infer T> ? T : never }, Shape> {\n if (!this._state.from)\n throw new Error('pick: from() must be called first')\n const sel: Record<string, Column> = {}\n for (const k of keys) sel[k] = (this._state.from as any)[k]\n this._state.selection = sel\n return this as any\n }\n\n where(expr: Expr): this {\n this._state.where = expr\n return this\n }\n\n orderBy(col: Column, dir: 'ASC' | 'DESC' = 'ASC'): this {\n this._state.orderBy.push({ col, dir })\n return this\n }\n\n limit(n: number): this {\n this._state.limit = n\n return this\n }\n\n offset(n: number): this {\n this._state.offset = n\n return this\n }\n\n toSQL(): CompiledQuery<Row> {\n const s = this._state\n if (!s.from)\n throw new Error('select: from() is required')\n\n const tableName = s.from._name\n const params: unknown[] = []\n const selectRefs: Column[] = []\n const whereRefs: Column[] = []\n const orderByRefs: Column[] = []\n\n let cols: string\n if (s.selection) {\n const parts: string[] = []\n for (const [alias, col] of Object.entries(s.selection)) {\n selectRefs.push(col)\n const ident = `\"${col._table}\".\"${col._name}\"`\n parts.push(alias === col._name ? ident : `${ident} AS \"${alias}\"`)\n }\n cols = parts.join(', ')\n }\n else {\n const shape = s.from._shape\n const names = Object.keys(shape)\n for (const n of names) selectRefs.push((s.from as any)[n])\n cols = names.map(n => `\"${tableName}\".\"${n}\"`).join(', ')\n }\n\n let sql = `SELECT ${cols} FROM \"${tableName}\"`\n\n if (s.where) {\n sql += ` WHERE ${s.where.sql}`\n params.push(...s.where.params)\n whereRefs.push(...s.where.refs)\n }\n\n if (s.orderBy.length) {\n const parts = s.orderBy.map((o) => {\n orderByRefs.push(o.col)\n return `\"${o.col._table}\".\"${o.col._name}\" ${o.dir}`\n })\n sql += ` ORDER BY ${parts.join(', ')}`\n }\n\n if (s.limit != null) {\n sql += ` LIMIT ?`\n params.push(s.limit)\n }\n\n if (s.offset != null) {\n sql += ` OFFSET ?`\n params.push(s.offset)\n }\n\n return {\n sql,\n params,\n dependencies: collectDependencies(selectRefs, whereRefs, orderByRefs),\n __row: undefined as any,\n }\n }\n\n dependencies(): readonly QueryDependencies[] {\n return this.toSQL().dependencies\n }\n}\n\nfunction collectDependencies(\n selectRefs: Column[],\n whereRefs: Column[],\n orderByRefs: Column[],\n): QueryDependencies[] {\n interface Buckets {\n select: Set<string>\n where: Set<string>\n orderBy: Set<string>\n }\n const map = new Map<string, Buckets>()\n const bucket = (table: string): Buckets => {\n let b = map.get(table)\n if (!b) {\n b = { select: new Set(), where: new Set(), orderBy: new Set() }\n map.set(table, b)\n }\n return b\n }\n for (const c of selectRefs) bucket(c._table).select.add(c._name)\n for (const c of whereRefs) bucket(c._table).where.add(c._name)\n for (const c of orderByRefs) bucket(c._table).orderBy.add(c._name)\n\n return Array.from(map, ([table, b]) => {\n const all = new Set<string>([...b.select, ...b.where, ...b.orderBy])\n return {\n table,\n select: Array.from(b.select).sort(),\n where: Array.from(b.where).sort(),\n orderBy: Array.from(b.orderBy).sort(),\n all: Array.from(all).sort(),\n }\n })\n}\n\nexport function select(): SelectBuilder<void>\nexport function select<S extends Record<string, Column<any>>>(\n selection: S,\n): SelectBuilder<RowFromSelection<S>>\nexport function select(selection?: Record<string, Column>): SelectBuilder<any> {\n return new SelectBuilder({ selection, orderBy: [] })\n}\n\nexport function from<N extends string, S extends TableShape>(\n t: TableColumns<N, S>,\n): SelectBuilder<ShapeRow<S>, S> {\n return new SelectBuilder<ShapeRow<S>, S>({ from: t, orderBy: [] })\n}\n\nexport type InferRow<Q> = Q extends SelectBuilder<infer R>\n ? R\n : Q extends CompiledQuery<infer R> ? R : never\n"],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import { a as RowFromTable, c as select, i as RowFromSelection, n as InferRow, o as SelectBuilder, r as QueryDependencies, s as from, t as CompiledQuery } from "../../../select-DrciHdk_.cjs";
|
|
2
|
+
export { CompiledQuery, InferRow, QueryDependencies, RowFromSelection, RowFromTable, SelectBuilder, from, select };
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import { a as RowFromTable, c as select, i as RowFromSelection, n as InferRow, o as SelectBuilder, r as QueryDependencies, s as from, t as CompiledQuery } from "../../../select-F2KpP6mo.mjs";
|
|
2
|
+
export { CompiledQuery, InferRow, QueryDependencies, RowFromSelection, RowFromTable, SelectBuilder, from, select };
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
//#region src/common/schema/sql/select.ts
|
|
2
|
+
var SelectBuilder = class {
|
|
3
|
+
_state;
|
|
4
|
+
constructor(state) {
|
|
5
|
+
this._state = state;
|
|
6
|
+
}
|
|
7
|
+
from(t) {
|
|
8
|
+
this._state.from = t;
|
|
9
|
+
return this;
|
|
10
|
+
}
|
|
11
|
+
pick(...keys) {
|
|
12
|
+
if (!this._state.from) throw new Error("pick: from() must be called first");
|
|
13
|
+
const sel = {};
|
|
14
|
+
for (const k of keys) sel[k] = this._state.from[k];
|
|
15
|
+
this._state.selection = sel;
|
|
16
|
+
return this;
|
|
17
|
+
}
|
|
18
|
+
where(expr) {
|
|
19
|
+
this._state.where = expr;
|
|
20
|
+
return this;
|
|
21
|
+
}
|
|
22
|
+
orderBy(col, dir = "ASC") {
|
|
23
|
+
this._state.orderBy.push({
|
|
24
|
+
col,
|
|
25
|
+
dir
|
|
26
|
+
});
|
|
27
|
+
return this;
|
|
28
|
+
}
|
|
29
|
+
limit(n) {
|
|
30
|
+
this._state.limit = n;
|
|
31
|
+
return this;
|
|
32
|
+
}
|
|
33
|
+
offset(n) {
|
|
34
|
+
this._state.offset = n;
|
|
35
|
+
return this;
|
|
36
|
+
}
|
|
37
|
+
toSQL() {
|
|
38
|
+
const s = this._state;
|
|
39
|
+
if (!s.from) throw new Error("select: from() is required");
|
|
40
|
+
const tableName = s.from._name;
|
|
41
|
+
const params = [];
|
|
42
|
+
const selectRefs = [];
|
|
43
|
+
const whereRefs = [];
|
|
44
|
+
const orderByRefs = [];
|
|
45
|
+
let cols;
|
|
46
|
+
if (s.selection) {
|
|
47
|
+
const parts = [];
|
|
48
|
+
for (const [alias, col] of Object.entries(s.selection)) {
|
|
49
|
+
selectRefs.push(col);
|
|
50
|
+
const ident = `"${col._table}"."${col._name}"`;
|
|
51
|
+
parts.push(alias === col._name ? ident : `${ident} AS "${alias}"`);
|
|
52
|
+
}
|
|
53
|
+
cols = parts.join(", ");
|
|
54
|
+
} else {
|
|
55
|
+
const shape = s.from._shape;
|
|
56
|
+
const names = Object.keys(shape);
|
|
57
|
+
for (const n of names) selectRefs.push(s.from[n]);
|
|
58
|
+
cols = names.map((n) => `"${tableName}"."${n}"`).join(", ");
|
|
59
|
+
}
|
|
60
|
+
let sql = `SELECT ${cols} FROM "${tableName}"`;
|
|
61
|
+
if (s.where) {
|
|
62
|
+
sql += ` WHERE ${s.where.sql}`;
|
|
63
|
+
params.push(...s.where.params);
|
|
64
|
+
whereRefs.push(...s.where.refs);
|
|
65
|
+
}
|
|
66
|
+
if (s.orderBy.length) {
|
|
67
|
+
const parts = s.orderBy.map((o) => {
|
|
68
|
+
orderByRefs.push(o.col);
|
|
69
|
+
return `"${o.col._table}"."${o.col._name}" ${o.dir}`;
|
|
70
|
+
});
|
|
71
|
+
sql += ` ORDER BY ${parts.join(", ")}`;
|
|
72
|
+
}
|
|
73
|
+
if (s.limit != null) {
|
|
74
|
+
sql += ` LIMIT ?`;
|
|
75
|
+
params.push(s.limit);
|
|
76
|
+
}
|
|
77
|
+
if (s.offset != null) {
|
|
78
|
+
sql += ` OFFSET ?`;
|
|
79
|
+
params.push(s.offset);
|
|
80
|
+
}
|
|
81
|
+
return {
|
|
82
|
+
sql,
|
|
83
|
+
params,
|
|
84
|
+
dependencies: collectDependencies(selectRefs, whereRefs, orderByRefs),
|
|
85
|
+
__row: void 0
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
dependencies() {
|
|
89
|
+
return this.toSQL().dependencies;
|
|
90
|
+
}
|
|
91
|
+
};
|
|
92
|
+
function collectDependencies(selectRefs, whereRefs, orderByRefs) {
|
|
93
|
+
const map = /* @__PURE__ */ new Map();
|
|
94
|
+
const bucket = (table) => {
|
|
95
|
+
let b = map.get(table);
|
|
96
|
+
if (!b) {
|
|
97
|
+
b = {
|
|
98
|
+
select: /* @__PURE__ */ new Set(),
|
|
99
|
+
where: /* @__PURE__ */ new Set(),
|
|
100
|
+
orderBy: /* @__PURE__ */ new Set()
|
|
101
|
+
};
|
|
102
|
+
map.set(table, b);
|
|
103
|
+
}
|
|
104
|
+
return b;
|
|
105
|
+
};
|
|
106
|
+
for (const c of selectRefs) bucket(c._table).select.add(c._name);
|
|
107
|
+
for (const c of whereRefs) bucket(c._table).where.add(c._name);
|
|
108
|
+
for (const c of orderByRefs) bucket(c._table).orderBy.add(c._name);
|
|
109
|
+
return Array.from(map, ([table, b]) => {
|
|
110
|
+
const all = new Set([
|
|
111
|
+
...b.select,
|
|
112
|
+
...b.where,
|
|
113
|
+
...b.orderBy
|
|
114
|
+
]);
|
|
115
|
+
return {
|
|
116
|
+
table,
|
|
117
|
+
select: Array.from(b.select).sort(),
|
|
118
|
+
where: Array.from(b.where).sort(),
|
|
119
|
+
orderBy: Array.from(b.orderBy).sort(),
|
|
120
|
+
all: Array.from(all).sort()
|
|
121
|
+
};
|
|
122
|
+
});
|
|
123
|
+
}
|
|
124
|
+
function select(selection) {
|
|
125
|
+
return new SelectBuilder({
|
|
126
|
+
selection,
|
|
127
|
+
orderBy: []
|
|
128
|
+
});
|
|
129
|
+
}
|
|
130
|
+
function from(t) {
|
|
131
|
+
return new SelectBuilder({
|
|
132
|
+
from: t,
|
|
133
|
+
orderBy: []
|
|
134
|
+
});
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
//#endregion
|
|
138
|
+
export { SelectBuilder, from, select };
|
|
139
|
+
//# sourceMappingURL=select.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"select.mjs","names":[],"sources":["../../../../src/common/schema/sql/select.ts"],"sourcesContent":["import type { Infer, Type } from '../schema'\nimport type { Expr } from './expr'\nimport type { Column, TableColumns, TableShape } from './table'\n\nexport type RowFromTable<T> = T extends TableColumns<any, infer S>\n ? { [K in keyof S]: Infer<S[K]> }\n : never\n\nexport type RowFromSelection<S> = {\n [K in keyof S]: S[K] extends Column<infer T> ? T : never\n}\n\nexport interface QueryDependencies {\n readonly table: string\n readonly select: readonly string[]\n readonly where: readonly string[]\n readonly orderBy: readonly string[]\n readonly all: readonly string[]\n}\n\nexport interface CompiledQuery<Row> {\n readonly sql: string\n readonly params: readonly unknown[]\n readonly dependencies: readonly QueryDependencies[]\n readonly __row?: Row\n}\n\ninterface OrderByEntry {\n col: Column\n dir: 'ASC' | 'DESC'\n}\n\ninterface SelectState {\n selection?: Record<string, Column>\n from?: TableColumns<any, any>\n where?: Expr\n orderBy: OrderByEntry[]\n limit?: number\n offset?: number\n}\n\ntype ShapeRow<S> = { [K in keyof S]: S[K] extends Type<infer T> ? T : never }\n\nexport class SelectBuilder<Row, Shape = unknown> {\n private _state: SelectState\n\n constructor(state: SelectState) {\n this._state = state\n }\n\n from<N extends string, S extends TableShape>(\n t: TableColumns<N, S>,\n ): SelectBuilder<Row extends void ? ShapeRow<S> : Row, S> {\n this._state.from = t\n return this as any\n }\n\n pick<K extends Extract<keyof Shape, string>>(\n ...keys: K[]\n ): SelectBuilder<{ [P in K]: Shape[P] extends Type<infer T> ? T : never }, Shape> {\n if (!this._state.from)\n throw new Error('pick: from() must be called first')\n const sel: Record<string, Column> = {}\n for (const k of keys) sel[k] = (this._state.from as any)[k]\n this._state.selection = sel\n return this as any\n }\n\n where(expr: Expr): this {\n this._state.where = expr\n return this\n }\n\n orderBy(col: Column, dir: 'ASC' | 'DESC' = 'ASC'): this {\n this._state.orderBy.push({ col, dir })\n return this\n }\n\n limit(n: number): this {\n this._state.limit = n\n return this\n }\n\n offset(n: number): this {\n this._state.offset = n\n return this\n }\n\n toSQL(): CompiledQuery<Row> {\n const s = this._state\n if (!s.from)\n throw new Error('select: from() is required')\n\n const tableName = s.from._name\n const params: unknown[] = []\n const selectRefs: Column[] = []\n const whereRefs: Column[] = []\n const orderByRefs: Column[] = []\n\n let cols: string\n if (s.selection) {\n const parts: string[] = []\n for (const [alias, col] of Object.entries(s.selection)) {\n selectRefs.push(col)\n const ident = `\"${col._table}\".\"${col._name}\"`\n parts.push(alias === col._name ? ident : `${ident} AS \"${alias}\"`)\n }\n cols = parts.join(', ')\n }\n else {\n const shape = s.from._shape\n const names = Object.keys(shape)\n for (const n of names) selectRefs.push((s.from as any)[n])\n cols = names.map(n => `\"${tableName}\".\"${n}\"`).join(', ')\n }\n\n let sql = `SELECT ${cols} FROM \"${tableName}\"`\n\n if (s.where) {\n sql += ` WHERE ${s.where.sql}`\n params.push(...s.where.params)\n whereRefs.push(...s.where.refs)\n }\n\n if (s.orderBy.length) {\n const parts = s.orderBy.map((o) => {\n orderByRefs.push(o.col)\n return `\"${o.col._table}\".\"${o.col._name}\" ${o.dir}`\n })\n sql += ` ORDER BY ${parts.join(', ')}`\n }\n\n if (s.limit != null) {\n sql += ` LIMIT ?`\n params.push(s.limit)\n }\n\n if (s.offset != null) {\n sql += ` OFFSET ?`\n params.push(s.offset)\n }\n\n return {\n sql,\n params,\n dependencies: collectDependencies(selectRefs, whereRefs, orderByRefs),\n __row: undefined as any,\n }\n }\n\n dependencies(): readonly QueryDependencies[] {\n return this.toSQL().dependencies\n }\n}\n\nfunction collectDependencies(\n selectRefs: Column[],\n whereRefs: Column[],\n orderByRefs: Column[],\n): QueryDependencies[] {\n interface Buckets {\n select: Set<string>\n where: Set<string>\n orderBy: Set<string>\n }\n const map = new Map<string, Buckets>()\n const bucket = (table: string): Buckets => {\n let b = map.get(table)\n if (!b) {\n b = { select: new Set(), where: new Set(), orderBy: new Set() }\n map.set(table, b)\n }\n return b\n }\n for (const c of selectRefs) bucket(c._table).select.add(c._name)\n for (const c of whereRefs) bucket(c._table).where.add(c._name)\n for (const c of orderByRefs) bucket(c._table).orderBy.add(c._name)\n\n return Array.from(map, ([table, b]) => {\n const all = new Set<string>([...b.select, ...b.where, ...b.orderBy])\n return {\n table,\n select: Array.from(b.select).sort(),\n where: Array.from(b.where).sort(),\n orderBy: Array.from(b.orderBy).sort(),\n all: Array.from(all).sort(),\n }\n })\n}\n\nexport function select(): SelectBuilder<void>\nexport function select<S extends Record<string, Column<any>>>(\n selection: S,\n): SelectBuilder<RowFromSelection<S>>\nexport function select(selection?: Record<string, Column>): SelectBuilder<any> {\n return new SelectBuilder({ selection, orderBy: [] })\n}\n\nexport function from<N extends string, S extends TableShape>(\n t: TableColumns<N, S>,\n): SelectBuilder<ShapeRow<S>, S> {\n return new SelectBuilder<ShapeRow<S>, S>({ from: t, orderBy: [] })\n}\n\nexport type InferRow<Q> = Q extends SelectBuilder<infer R>\n ? R\n : Q extends CompiledQuery<infer R> ? R : never\n"],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
2
|
+
|
|
3
|
+
//#region src/common/schema/sql/table.ts
|
|
4
|
+
function table(name, shape) {
|
|
5
|
+
const out = {
|
|
6
|
+
_name: name,
|
|
7
|
+
_shape: shape
|
|
8
|
+
};
|
|
9
|
+
for (const key of Object.keys(shape)) out[key] = {
|
|
10
|
+
_table: name,
|
|
11
|
+
_name: key,
|
|
12
|
+
_type: shape[key]
|
|
13
|
+
};
|
|
14
|
+
return out;
|
|
15
|
+
}
|
|
16
|
+
function isColumn(v) {
|
|
17
|
+
return !!v && typeof v._table === "string" && typeof v._name === "string" && v._type;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
//#endregion
|
|
21
|
+
exports.isColumn = isColumn;
|
|
22
|
+
exports.table = table;
|
|
23
|
+
//# sourceMappingURL=table.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"table.cjs","names":[],"sources":["../../../../src/common/schema/sql/table.ts"],"sourcesContent":["import type { Infer, Type } from '../schema'\n\nexport interface Column<T = unknown> {\n readonly _table: string\n readonly _name: string\n readonly _type: Type<T>\n readonly __row?: T\n}\n\nexport type TableShape = Record<string, Type<any>>\n\nexport type TableColumns<N extends string, S extends TableShape> = {\n readonly [K in keyof S & string]: Column<Infer<S[K]>>\n} & {\n readonly _name: N\n readonly _shape: S\n}\n\nexport function table<N extends string, S extends TableShape>(\n name: N,\n shape: S,\n): TableColumns<N, S> {\n const out: any = { _name: name, _shape: shape }\n for (const key of Object.keys(shape)) {\n out[key] = {\n _table: name,\n _name: key,\n _type: shape[key],\n }\n }\n return out\n}\n\nexport function isColumn(v: any): v is Column {\n return !!v && typeof v._table === 'string' && typeof v._name === 'string' && v._type\n}\n"],"mappings":";;;AAkBA,SAAgB,MACd,MACA,OACoB;CACpB,MAAM,MAAW;EAAE,OAAO;EAAM,QAAQ;EAAO;AAC/C,MAAK,MAAM,OAAO,OAAO,KAAK,MAAM,CAClC,KAAI,OAAO;EACT,QAAQ;EACR,OAAO;EACP,OAAO,MAAM;EACd;AAEH,QAAO;;AAGT,SAAgB,SAAS,GAAqB;AAC5C,QAAO,CAAC,CAAC,KAAK,OAAO,EAAE,WAAW,YAAY,OAAO,EAAE,UAAU,YAAY,EAAE"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
//#region src/common/schema/sql/table.ts
|
|
2
|
+
function table(name, shape) {
|
|
3
|
+
const out = {
|
|
4
|
+
_name: name,
|
|
5
|
+
_shape: shape
|
|
6
|
+
};
|
|
7
|
+
for (const key of Object.keys(shape)) out[key] = {
|
|
8
|
+
_table: name,
|
|
9
|
+
_name: key,
|
|
10
|
+
_type: shape[key]
|
|
11
|
+
};
|
|
12
|
+
return out;
|
|
13
|
+
}
|
|
14
|
+
function isColumn(v) {
|
|
15
|
+
return !!v && typeof v._table === "string" && typeof v._name === "string" && v._type;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
//#endregion
|
|
19
|
+
export { isColumn, table };
|
|
20
|
+
//# sourceMappingURL=table.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"table.mjs","names":[],"sources":["../../../../src/common/schema/sql/table.ts"],"sourcesContent":["import type { Infer, Type } from '../schema'\n\nexport interface Column<T = unknown> {\n readonly _table: string\n readonly _name: string\n readonly _type: Type<T>\n readonly __row?: T\n}\n\nexport type TableShape = Record<string, Type<any>>\n\nexport type TableColumns<N extends string, S extends TableShape> = {\n readonly [K in keyof S & string]: Column<Infer<S[K]>>\n} & {\n readonly _name: N\n readonly _shape: S\n}\n\nexport function table<N extends string, S extends TableShape>(\n name: N,\n shape: S,\n): TableColumns<N, S> {\n const out: any = { _name: name, _shape: shape }\n for (const key of Object.keys(shape)) {\n out[key] = {\n _table: name,\n _name: key,\n _type: shape[key],\n }\n }\n return out\n}\n\nexport function isColumn(v: any): v is Column {\n return !!v && typeof v._table === 'string' && typeof v._name === 'string' && v._type\n}\n"],"mappings":";AAkBA,SAAgB,MACd,MACA,OACoB;CACpB,MAAM,MAAW;EAAE,OAAO;EAAM,QAAQ;EAAO;AAC/C,MAAK,MAAM,OAAO,OAAO,KAAK,MAAM,CAClC,KAAI,OAAO;EACT,QAAQ;EACR,OAAO;EACP,OAAO,MAAM;EACd;AAEH,QAAO;;AAGT,SAAgB,SAAS,GAAqB;AAC5C,QAAO,CAAC,CAAC,KAAK,OAAO,EAAE,WAAW,YAAY,OAAO,EAAE,UAAU,YAAY,EAAE"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { n as IsEqual, t as Expect } from "../../type-test-
|
|
1
|
+
import { n as IsEqual, t as Expect } from "../../type-test-CBK-iJ9d.cjs";
|
|
2
2
|
export { Expect, IsEqual };
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { n as IsEqual, t as Expect } from "../../type-test-
|
|
1
|
+
import { n as IsEqual, t as Expect } from "../../type-test-BvzWDJz3.mjs";
|
|
2
2
|
export { Expect, IsEqual };
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { a as isSchemaPrimitive, i as isSchemaOptional, n as isSchemaObject, r as isSchemaObjectFlat, t as isSchemaDefault } from "../../utils-
|
|
1
|
+
import { a as isSchemaPrimitive, i as isSchemaOptional, n as isSchemaObject, r as isSchemaObjectFlat, t as isSchemaDefault } from "../../utils-nCQklGHV.cjs";
|
|
2
2
|
export { isSchemaDefault, isSchemaObject, isSchemaObjectFlat, isSchemaOptional, isSchemaPrimitive };
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { a as isSchemaPrimitive, i as isSchemaOptional, n as isSchemaObject, r as isSchemaObjectFlat, t as isSchemaDefault } from "../../utils-
|
|
1
|
+
import { a as isSchemaPrimitive, i as isSchemaOptional, n as isSchemaObject, r as isSchemaObjectFlat, t as isSchemaDefault } from "../../utils-1RyCGkpQ.mjs";
|
|
2
2
|
export { isSchemaDefault, isSchemaObject, isSchemaObjectFlat, isSchemaOptional, isSchemaPrimitive };
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { t as z_collection_d_exports } from "../../z-collection-
|
|
1
|
+
import { t as z_collection_d_exports } from "../../z-collection-BSfgRU0Q.mjs";
|
|
2
2
|
export { z_collection_d_exports as z };
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { n as MemStorageOptions, t as MemStorage } from "../../memstorage-
|
|
1
|
+
import { n as MemStorageOptions, t as MemStorage } from "../../memstorage-tvlWDYgS.cjs";
|
|
2
2
|
export { MemStorage, MemStorageOptions };
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { n as MemStorageOptions, t as MemStorage } from "../../memstorage-
|
|
1
|
+
import { n as MemStorageOptions, t as MemStorage } from "../../memstorage-BhWXthO8.mjs";
|
|
2
2
|
export { MemStorage, MemStorageOptions };
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { n as MemStorageOptions, t as MemStorage } from "../../memstorage-
|
|
1
|
+
import { n as MemStorageOptions, t as MemStorage } from "../../memstorage-tvlWDYgS.cjs";
|
|
2
2
|
export { MemStorage, MemStorageOptions };
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { n as MemStorageOptions, t as MemStorage } from "../../memstorage-
|
|
1
|
+
import { n as MemStorageOptions, t as MemStorage } from "../../memstorage-BhWXthO8.mjs";
|
|
2
2
|
export { MemStorage, MemStorageOptions };
|
package/dist/common/test.d.cts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { t as setTestMode } from "../test-
|
|
1
|
+
import { t as setTestMode } from "../test-DcXa0MeX.cjs";
|
|
2
2
|
export { setTestMode };
|
package/dist/common/test.d.mts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { t as setTestMode } from "../test-
|
|
1
|
+
import { t as setTestMode } from "../test-jZsc7P2c.mjs";
|
|
2
2
|
export { setTestMode };
|
package/dist/common/time.d.cts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { C as parseDate, E as timestampSecondsToMilliseconds, S as getTimestampInSeconds, T as timestampMillisecondsToSeconds, _ as formatMilliseconds, a as TIME_MINUTE_MS, b as getSecondsFromBuildNumber, c as TIME_MONTH_S, d as TIME_YEAR_MS, f as TIME_YEAR_S, g as duration, h as datetimeToUTC, i as TIME_HOUR_S, l as TIME_WEEK_MS, m as datetimeToLocal, n as TIME_DAY_S, o as TIME_MINUTE_S, p as dateFromSeconds, r as TIME_HOUR_MS, s as TIME_MONTH_MS, t as TIME_DAY_MS, u as TIME_WEEK_S, v as getBuildNumber, w as setTimestampTest, x as getTimestamp, y as getPerformanceTimestamp } from "../time-
|
|
1
|
+
import { C as parseDate, E as timestampSecondsToMilliseconds, S as getTimestampInSeconds, T as timestampMillisecondsToSeconds, _ as formatMilliseconds, a as TIME_MINUTE_MS, b as getSecondsFromBuildNumber, c as TIME_MONTH_S, d as TIME_YEAR_MS, f as TIME_YEAR_S, g as duration, h as datetimeToUTC, i as TIME_HOUR_S, l as TIME_WEEK_MS, m as datetimeToLocal, n as TIME_DAY_S, o as TIME_MINUTE_S, p as dateFromSeconds, r as TIME_HOUR_MS, s as TIME_MONTH_MS, t as TIME_DAY_MS, u as TIME_WEEK_S, v as getBuildNumber, w as setTimestampTest, x as getTimestamp, y as getPerformanceTimestamp } from "../time-BgFZe9ys.cjs";
|
|
2
2
|
export { TIME_DAY_MS, TIME_DAY_S, TIME_HOUR_MS, TIME_HOUR_S, TIME_MINUTE_MS, TIME_MINUTE_S, TIME_MONTH_MS, TIME_MONTH_S, TIME_WEEK_MS, TIME_WEEK_S, TIME_YEAR_MS, TIME_YEAR_S, dateFromSeconds, datetimeToLocal, datetimeToUTC, duration, formatMilliseconds, getBuildNumber, getPerformanceTimestamp, getSecondsFromBuildNumber, getTimestamp, getTimestampInSeconds, parseDate, setTimestampTest, timestampMillisecondsToSeconds, timestampSecondsToMilliseconds };
|
package/dist/common/time.d.mts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { C as parseDate, E as timestampSecondsToMilliseconds, S as getTimestampInSeconds, T as timestampMillisecondsToSeconds, _ as formatMilliseconds, a as TIME_MINUTE_MS, b as getSecondsFromBuildNumber, c as TIME_MONTH_S, d as TIME_YEAR_MS, f as TIME_YEAR_S, g as duration, h as datetimeToUTC, i as TIME_HOUR_S, l as TIME_WEEK_MS, m as datetimeToLocal, n as TIME_DAY_S, o as TIME_MINUTE_S, p as dateFromSeconds, r as TIME_HOUR_MS, s as TIME_MONTH_MS, t as TIME_DAY_MS, u as TIME_WEEK_S, v as getBuildNumber, w as setTimestampTest, x as getTimestamp, y as getPerformanceTimestamp } from "../time-
|
|
1
|
+
import { C as parseDate, E as timestampSecondsToMilliseconds, S as getTimestampInSeconds, T as timestampMillisecondsToSeconds, _ as formatMilliseconds, a as TIME_MINUTE_MS, b as getSecondsFromBuildNumber, c as TIME_MONTH_S, d as TIME_YEAR_MS, f as TIME_YEAR_S, g as duration, h as datetimeToUTC, i as TIME_HOUR_S, l as TIME_WEEK_MS, m as datetimeToLocal, n as TIME_DAY_S, o as TIME_MINUTE_S, p as dateFromSeconds, r as TIME_HOUR_MS, s as TIME_MONTH_MS, t as TIME_DAY_MS, u as TIME_WEEK_S, v as getBuildNumber, w as setTimestampTest, x as getTimestamp, y as getPerformanceTimestamp } from "../time-DSV_k3mG.mjs";
|
|
2
2
|
export { TIME_DAY_MS, TIME_DAY_S, TIME_HOUR_MS, TIME_HOUR_S, TIME_MINUTE_MS, TIME_MINUTE_S, TIME_MONTH_MS, TIME_MONTH_S, TIME_WEEK_MS, TIME_WEEK_S, TIME_YEAR_MS, TIME_YEAR_S, dateFromSeconds, datetimeToLocal, datetimeToUTC, duration, formatMilliseconds, getBuildNumber, getPerformanceTimestamp, getSecondsFromBuildNumber, getTimestamp, getTimestampInSeconds, parseDate, setTimestampTest, timestampMillisecondsToSeconds, timestampSecondsToMilliseconds };
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { t as safeTimeout } from "../timeout-
|
|
1
|
+
import { t as safeTimeout } from "../timeout-E3ZQbJgK.cjs";
|
|
2
2
|
export { safeTimeout };
|