durcno 1.0.0-alpha.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 +201 -0
- package/README.md +56 -0
- package/dist/bin.cjs +13522 -0
- package/dist/src/_virtual/_rolldown/runtime.mjs +28 -0
- package/dist/src/cli/helpers.mjs +16 -0
- package/dist/src/columns/bigint.d.mts +19 -0
- package/dist/src/columns/bigint.mjs +32 -0
- package/dist/src/columns/bigserial.d.mts +24 -0
- package/dist/src/columns/bigserial.mjs +35 -0
- package/dist/src/columns/boolean.d.mts +19 -0
- package/dist/src/columns/boolean.mjs +31 -0
- package/dist/src/columns/bytea.d.mts +19 -0
- package/dist/src/columns/bytea.mjs +33 -0
- package/dist/src/columns/char.d.mts +32 -0
- package/dist/src/columns/char.mjs +44 -0
- package/dist/src/columns/cidr.d.mts +19 -0
- package/dist/src/columns/cidr.mjs +31 -0
- package/dist/src/columns/common.d.mts +233 -0
- package/dist/src/columns/common.mjs +276 -0
- package/dist/src/columns/date.d.mts +19 -0
- package/dist/src/columns/date.mjs +32 -0
- package/dist/src/columns/enum.d.mts +21 -0
- package/dist/src/columns/enum.mjs +35 -0
- package/dist/src/columns/inet.d.mts +19 -0
- package/dist/src/columns/inet.mjs +36 -0
- package/dist/src/columns/integer.d.mts +19 -0
- package/dist/src/columns/integer.mjs +32 -0
- package/dist/src/columns/json.d.mts +52 -0
- package/dist/src/columns/json.mjs +67 -0
- package/dist/src/columns/jsonb.d.mts +53 -0
- package/dist/src/columns/jsonb.mjs +68 -0
- package/dist/src/columns/macaddr.d.mts +19 -0
- package/dist/src/columns/macaddr.mjs +31 -0
- package/dist/src/columns/numeric.d.mts +42 -0
- package/dist/src/columns/numeric.mjs +57 -0
- package/dist/src/columns/postgis/geography/index.d.mts +18 -0
- package/dist/src/columns/postgis/geography/index.mjs +17 -0
- package/dist/src/columns/postgis/geography/linestring.d.mts +38 -0
- package/dist/src/columns/postgis/geography/linestring.mjs +70 -0
- package/dist/src/columns/postgis/geography/multilinestring.d.mts +39 -0
- package/dist/src/columns/postgis/geography/multilinestring.mjs +70 -0
- package/dist/src/columns/postgis/geography/multipoint.d.mts +38 -0
- package/dist/src/columns/postgis/geography/multipoint.mjs +70 -0
- package/dist/src/columns/postgis/geography/multipolygon.d.mts +40 -0
- package/dist/src/columns/postgis/geography/multipolygon.mjs +70 -0
- package/dist/src/columns/postgis/geography/point.d.mts +36 -0
- package/dist/src/columns/postgis/geography/point.mjs +69 -0
- package/dist/src/columns/postgis/geography/polygon.d.mts +39 -0
- package/dist/src/columns/postgis/geography/polygon.mjs +70 -0
- package/dist/src/columns/serial.d.mts +24 -0
- package/dist/src/columns/serial.mjs +35 -0
- package/dist/src/columns/smallint.d.mts +19 -0
- package/dist/src/columns/smallint.mjs +32 -0
- package/dist/src/columns/smallserial.d.mts +24 -0
- package/dist/src/columns/smallserial.mjs +35 -0
- package/dist/src/columns/text.d.mts +19 -0
- package/dist/src/columns/text.mjs +30 -0
- package/dist/src/columns/time.d.mts +44 -0
- package/dist/src/columns/time.mjs +47 -0
- package/dist/src/columns/timestamp.d.mts +44 -0
- package/dist/src/columns/timestamp.mjs +47 -0
- package/dist/src/columns/uuid.d.mts +33 -0
- package/dist/src/columns/uuid.mjs +44 -0
- package/dist/src/columns/varchar.d.mts +32 -0
- package/dist/src/columns/varchar.mjs +44 -0
- package/dist/src/connectors/bun.d.mts +18 -0
- package/dist/src/connectors/bun.mjs +97 -0
- package/dist/src/connectors/common.d.mts +148 -0
- package/dist/src/connectors/common.mjs +65 -0
- package/dist/src/connectors/pg.d.mts +18 -0
- package/dist/src/connectors/pg.mjs +103 -0
- package/dist/src/connectors/pglite.d.mts +19 -0
- package/dist/src/connectors/pglite.mjs +94 -0
- package/dist/src/connectors/postgres.d.mts +18 -0
- package/dist/src/connectors/postgres.mjs +93 -0
- package/dist/src/constraints/check.d.mts +88 -0
- package/dist/src/constraints/check.mjs +307 -0
- package/dist/src/constraints/primary-key.d.mts +28 -0
- package/dist/src/constraints/primary-key.mjs +36 -0
- package/dist/src/constraints/unique.d.mts +28 -0
- package/dist/src/constraints/unique.mjs +36 -0
- package/dist/src/db.d.mts +180 -0
- package/dist/src/db.mjs +191 -0
- package/dist/src/entity.mjs +23 -0
- package/dist/src/enumtype.d.mts +27 -0
- package/dist/src/enumtype.mjs +42 -0
- package/dist/src/filters/array.d.mts +97 -0
- package/dist/src/filters/array.mjs +150 -0
- package/dist/src/filters/custom.d.mts +12 -0
- package/dist/src/filters/custom.mjs +7 -0
- package/dist/src/filters/index.d.mts +155 -0
- package/dist/src/filters/index.mjs +318 -0
- package/dist/src/functions/index.d.mts +24 -0
- package/dist/src/functions/index.mjs +29 -0
- package/dist/src/index.d.mts +129 -0
- package/dist/src/index.mjs +78 -0
- package/dist/src/indexes.d.mts +31 -0
- package/dist/src/indexes.mjs +43 -0
- package/dist/src/migration/consts.d.mts +8 -0
- package/dist/src/migration/consts.mjs +8 -0
- package/dist/src/migration/ddl.d.mts +747 -0
- package/dist/src/migration/ddl.mjs +1084 -0
- package/dist/src/migration/index.d.mts +15 -0
- package/dist/src/migration/index.mjs +5 -0
- package/dist/src/migration/snapshot.d.mts +169 -0
- package/dist/src/migration/snapshot.mjs +123 -0
- package/dist/src/migration/statement.d.mts +89 -0
- package/dist/src/migration/statement.mjs +61 -0
- package/dist/src/models.d.mts +34 -0
- package/dist/src/models.mjs +27 -0
- package/dist/src/node_modules/.pnpm/chalk@5.6.2/node_modules/chalk/source/index.mjs +126 -0
- package/dist/src/node_modules/.pnpm/chalk@5.6.2/node_modules/chalk/source/utilities.mjs +29 -0
- package/dist/src/node_modules/.pnpm/chalk@5.6.2/node_modules/chalk/source/vendor/ansi-styles/index.mjs +165 -0
- package/dist/src/node_modules/.pnpm/chalk@5.6.2/node_modules/chalk/source/vendor/supports-color/index.mjs +92 -0
- package/dist/src/query-builders/aggregates.d.mts +20 -0
- package/dist/src/query-builders/aggregates.mjs +43 -0
- package/dist/src/query-builders/count.d.mts +19 -0
- package/dist/src/query-builders/count.mjs +36 -0
- package/dist/src/query-builders/delete.d.mts +19 -0
- package/dist/src/query-builders/delete.mjs +57 -0
- package/dist/src/query-builders/distinct.d.mts +19 -0
- package/dist/src/query-builders/distinct.mjs +42 -0
- package/dist/src/query-builders/exists.d.mts +19 -0
- package/dist/src/query-builders/exists.mjs +37 -0
- package/dist/src/query-builders/first.d.mts +17 -0
- package/dist/src/query-builders/first.mjs +46 -0
- package/dist/src/query-builders/insert-returning.d.mts +16 -0
- package/dist/src/query-builders/insert-returning.mjs +63 -0
- package/dist/src/query-builders/insert.d.mts +22 -0
- package/dist/src/query-builders/insert.mjs +93 -0
- package/dist/src/query-builders/orderby-clause.d.mts +14 -0
- package/dist/src/query-builders/orderby-clause.mjs +20 -0
- package/dist/src/query-builders/pre.d.mts +36 -0
- package/dist/src/query-builders/pre.mjs +60 -0
- package/dist/src/query-builders/query-promise.d.mts +14 -0
- package/dist/src/query-builders/query-promise.mjs +21 -0
- package/dist/src/query-builders/query.d.mts +14 -0
- package/dist/src/query-builders/query.mjs +17 -0
- package/dist/src/query-builders/raw.d.mts +14 -0
- package/dist/src/query-builders/raw.mjs +26 -0
- package/dist/src/query-builders/rq.d.mts +36 -0
- package/dist/src/query-builders/rq.mjs +231 -0
- package/dist/src/query-builders/select.d.mts +48 -0
- package/dist/src/query-builders/select.mjs +118 -0
- package/dist/src/query-builders/update.d.mts +24 -0
- package/dist/src/query-builders/update.mjs +99 -0
- package/dist/src/sequence.d.mts +48 -0
- package/dist/src/sequence.mjs +53 -0
- package/dist/src/sql.d.mts +15 -0
- package/dist/src/sql.mjs +36 -0
- package/dist/src/symbols.d.mts +4 -0
- package/dist/src/symbols.mjs +4 -0
- package/dist/src/table.d.mts +144 -0
- package/dist/src/table.mjs +134 -0
- package/dist/src/types.d.mts +4 -0
- package/dist/src/utils.mjs +10 -0
- package/dist/src/validators/zod.d.mts +23 -0
- package/dist/src/validators/zod.mjs +27 -0
- package/dist/src/wkx/binaryreader.mjs +56 -0
- package/dist/src/wkx/binarywriter.mjs +110 -0
- package/dist/src/wkx/geometry.mjs +101 -0
- package/dist/src/wkx/geometrycollection.mjs +113 -0
- package/dist/src/wkx/index.mjs +18 -0
- package/dist/src/wkx/linestring.mjs +124 -0
- package/dist/src/wkx/multilinestring.mjs +133 -0
- package/dist/src/wkx/multipoint.mjs +120 -0
- package/dist/src/wkx/multipolygon.mjs +155 -0
- package/dist/src/wkx/parser.mjs +183 -0
- package/dist/src/wkx/point.mjs +159 -0
- package/dist/src/wkx/polygon.mjs +189 -0
- package/dist/src/wkx/types.mjs +37 -0
- package/dist/src/wkx/wktparser.mjs +109 -0
- package/dist/src/wkx/zigzag.mjs +18 -0
- package/package.json +100 -0
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
//#region node_modules/.pnpm/chalk@5.6.2/node_modules/chalk/source/vendor/ansi-styles/index.js
|
|
2
|
+
const ANSI_BACKGROUND_OFFSET = 10;
|
|
3
|
+
const wrapAnsi16 = (offset = 0) => (code) => `\u001B[${code + offset}m`;
|
|
4
|
+
const wrapAnsi256 = (offset = 0) => (code) => `\u001B[${38 + offset};5;${code}m`;
|
|
5
|
+
const wrapAnsi16m = (offset = 0) => (red, green, blue) => `\u001B[${38 + offset};2;${red};${green};${blue}m`;
|
|
6
|
+
const styles = {
|
|
7
|
+
modifier: {
|
|
8
|
+
reset: [0, 0],
|
|
9
|
+
bold: [1, 22],
|
|
10
|
+
dim: [2, 22],
|
|
11
|
+
italic: [3, 23],
|
|
12
|
+
underline: [4, 24],
|
|
13
|
+
overline: [53, 55],
|
|
14
|
+
inverse: [7, 27],
|
|
15
|
+
hidden: [8, 28],
|
|
16
|
+
strikethrough: [9, 29]
|
|
17
|
+
},
|
|
18
|
+
color: {
|
|
19
|
+
black: [30, 39],
|
|
20
|
+
red: [31, 39],
|
|
21
|
+
green: [32, 39],
|
|
22
|
+
yellow: [33, 39],
|
|
23
|
+
blue: [34, 39],
|
|
24
|
+
magenta: [35, 39],
|
|
25
|
+
cyan: [36, 39],
|
|
26
|
+
white: [37, 39],
|
|
27
|
+
blackBright: [90, 39],
|
|
28
|
+
gray: [90, 39],
|
|
29
|
+
grey: [90, 39],
|
|
30
|
+
redBright: [91, 39],
|
|
31
|
+
greenBright: [92, 39],
|
|
32
|
+
yellowBright: [93, 39],
|
|
33
|
+
blueBright: [94, 39],
|
|
34
|
+
magentaBright: [95, 39],
|
|
35
|
+
cyanBright: [96, 39],
|
|
36
|
+
whiteBright: [97, 39]
|
|
37
|
+
},
|
|
38
|
+
bgColor: {
|
|
39
|
+
bgBlack: [40, 49],
|
|
40
|
+
bgRed: [41, 49],
|
|
41
|
+
bgGreen: [42, 49],
|
|
42
|
+
bgYellow: [43, 49],
|
|
43
|
+
bgBlue: [44, 49],
|
|
44
|
+
bgMagenta: [45, 49],
|
|
45
|
+
bgCyan: [46, 49],
|
|
46
|
+
bgWhite: [47, 49],
|
|
47
|
+
bgBlackBright: [100, 49],
|
|
48
|
+
bgGray: [100, 49],
|
|
49
|
+
bgGrey: [100, 49],
|
|
50
|
+
bgRedBright: [101, 49],
|
|
51
|
+
bgGreenBright: [102, 49],
|
|
52
|
+
bgYellowBright: [103, 49],
|
|
53
|
+
bgBlueBright: [104, 49],
|
|
54
|
+
bgMagentaBright: [105, 49],
|
|
55
|
+
bgCyanBright: [106, 49],
|
|
56
|
+
bgWhiteBright: [107, 49]
|
|
57
|
+
}
|
|
58
|
+
};
|
|
59
|
+
Object.keys(styles.modifier);
|
|
60
|
+
const foregroundColorNames = Object.keys(styles.color);
|
|
61
|
+
const backgroundColorNames = Object.keys(styles.bgColor);
|
|
62
|
+
[...foregroundColorNames, ...backgroundColorNames];
|
|
63
|
+
function assembleStyles() {
|
|
64
|
+
const codes = /* @__PURE__ */ new Map();
|
|
65
|
+
for (const [groupName, group] of Object.entries(styles)) {
|
|
66
|
+
for (const [styleName, style] of Object.entries(group)) {
|
|
67
|
+
styles[styleName] = {
|
|
68
|
+
open: `\u001B[${style[0]}m`,
|
|
69
|
+
close: `\u001B[${style[1]}m`
|
|
70
|
+
};
|
|
71
|
+
group[styleName] = styles[styleName];
|
|
72
|
+
codes.set(style[0], style[1]);
|
|
73
|
+
}
|
|
74
|
+
Object.defineProperty(styles, groupName, {
|
|
75
|
+
value: group,
|
|
76
|
+
enumerable: false
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
Object.defineProperty(styles, "codes", {
|
|
80
|
+
value: codes,
|
|
81
|
+
enumerable: false
|
|
82
|
+
});
|
|
83
|
+
styles.color.close = "\x1B[39m";
|
|
84
|
+
styles.bgColor.close = "\x1B[49m";
|
|
85
|
+
styles.color.ansi = wrapAnsi16();
|
|
86
|
+
styles.color.ansi256 = wrapAnsi256();
|
|
87
|
+
styles.color.ansi16m = wrapAnsi16m();
|
|
88
|
+
styles.bgColor.ansi = wrapAnsi16(ANSI_BACKGROUND_OFFSET);
|
|
89
|
+
styles.bgColor.ansi256 = wrapAnsi256(ANSI_BACKGROUND_OFFSET);
|
|
90
|
+
styles.bgColor.ansi16m = wrapAnsi16m(ANSI_BACKGROUND_OFFSET);
|
|
91
|
+
Object.defineProperties(styles, {
|
|
92
|
+
rgbToAnsi256: {
|
|
93
|
+
value(red, green, blue) {
|
|
94
|
+
if (red === green && green === blue) {
|
|
95
|
+
if (red < 8) return 16;
|
|
96
|
+
if (red > 248) return 231;
|
|
97
|
+
return Math.round((red - 8) / 247 * 24) + 232;
|
|
98
|
+
}
|
|
99
|
+
return 16 + 36 * Math.round(red / 255 * 5) + 6 * Math.round(green / 255 * 5) + Math.round(blue / 255 * 5);
|
|
100
|
+
},
|
|
101
|
+
enumerable: false
|
|
102
|
+
},
|
|
103
|
+
hexToRgb: {
|
|
104
|
+
value(hex) {
|
|
105
|
+
const matches = /[a-f\d]{6}|[a-f\d]{3}/i.exec(hex.toString(16));
|
|
106
|
+
if (!matches) return [
|
|
107
|
+
0,
|
|
108
|
+
0,
|
|
109
|
+
0
|
|
110
|
+
];
|
|
111
|
+
let [colorString] = matches;
|
|
112
|
+
if (colorString.length === 3) colorString = [...colorString].map((character) => character + character).join("");
|
|
113
|
+
const integer = Number.parseInt(colorString, 16);
|
|
114
|
+
return [
|
|
115
|
+
integer >> 16 & 255,
|
|
116
|
+
integer >> 8 & 255,
|
|
117
|
+
integer & 255
|
|
118
|
+
];
|
|
119
|
+
},
|
|
120
|
+
enumerable: false
|
|
121
|
+
},
|
|
122
|
+
hexToAnsi256: {
|
|
123
|
+
value: (hex) => styles.rgbToAnsi256(...styles.hexToRgb(hex)),
|
|
124
|
+
enumerable: false
|
|
125
|
+
},
|
|
126
|
+
ansi256ToAnsi: {
|
|
127
|
+
value(code) {
|
|
128
|
+
if (code < 8) return 30 + code;
|
|
129
|
+
if (code < 16) return 90 + (code - 8);
|
|
130
|
+
let red;
|
|
131
|
+
let green;
|
|
132
|
+
let blue;
|
|
133
|
+
if (code >= 232) {
|
|
134
|
+
red = ((code - 232) * 10 + 8) / 255;
|
|
135
|
+
green = red;
|
|
136
|
+
blue = red;
|
|
137
|
+
} else {
|
|
138
|
+
code -= 16;
|
|
139
|
+
const remainder = code % 36;
|
|
140
|
+
red = Math.floor(code / 36) / 5;
|
|
141
|
+
green = Math.floor(remainder / 6) / 5;
|
|
142
|
+
blue = remainder % 6 / 5;
|
|
143
|
+
}
|
|
144
|
+
const value = Math.max(red, green, blue) * 2;
|
|
145
|
+
if (value === 0) return 30;
|
|
146
|
+
let result = 30 + (Math.round(blue) << 2 | Math.round(green) << 1 | Math.round(red));
|
|
147
|
+
if (value === 2) result += 60;
|
|
148
|
+
return result;
|
|
149
|
+
},
|
|
150
|
+
enumerable: false
|
|
151
|
+
},
|
|
152
|
+
rgbToAnsi: {
|
|
153
|
+
value: (red, green, blue) => styles.ansi256ToAnsi(styles.rgbToAnsi256(red, green, blue)),
|
|
154
|
+
enumerable: false
|
|
155
|
+
},
|
|
156
|
+
hexToAnsi: {
|
|
157
|
+
value: (hex) => styles.ansi256ToAnsi(styles.hexToAnsi256(hex)),
|
|
158
|
+
enumerable: false
|
|
159
|
+
}
|
|
160
|
+
});
|
|
161
|
+
return styles;
|
|
162
|
+
}
|
|
163
|
+
const ansiStyles = assembleStyles();
|
|
164
|
+
//#endregion
|
|
165
|
+
export { backgroundColorNames, ansiStyles as default, foregroundColorNames };
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import process from "node:process";
|
|
2
|
+
import os from "node:os";
|
|
3
|
+
import tty from "node:tty";
|
|
4
|
+
//#region node_modules/.pnpm/chalk@5.6.2/node_modules/chalk/source/vendor/supports-color/index.js
|
|
5
|
+
function hasFlag(flag, argv = globalThis.Deno ? globalThis.Deno.args : process.argv) {
|
|
6
|
+
const prefix = flag.startsWith("-") ? "" : flag.length === 1 ? "-" : "--";
|
|
7
|
+
const position = argv.indexOf(prefix + flag);
|
|
8
|
+
const terminatorPosition = argv.indexOf("--");
|
|
9
|
+
return position !== -1 && (terminatorPosition === -1 || position < terminatorPosition);
|
|
10
|
+
}
|
|
11
|
+
const { env } = process;
|
|
12
|
+
let flagForceColor;
|
|
13
|
+
if (hasFlag("no-color") || hasFlag("no-colors") || hasFlag("color=false") || hasFlag("color=never")) flagForceColor = 0;
|
|
14
|
+
else if (hasFlag("color") || hasFlag("colors") || hasFlag("color=true") || hasFlag("color=always")) flagForceColor = 1;
|
|
15
|
+
function envForceColor() {
|
|
16
|
+
if ("FORCE_COLOR" in env) {
|
|
17
|
+
if (env.FORCE_COLOR === "true") return 1;
|
|
18
|
+
if (env.FORCE_COLOR === "false") return 0;
|
|
19
|
+
return env.FORCE_COLOR.length === 0 ? 1 : Math.min(Number.parseInt(env.FORCE_COLOR, 10), 3);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
function translateLevel(level) {
|
|
23
|
+
if (level === 0) return false;
|
|
24
|
+
return {
|
|
25
|
+
level,
|
|
26
|
+
hasBasic: true,
|
|
27
|
+
has256: level >= 2,
|
|
28
|
+
has16m: level >= 3
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
function _supportsColor(haveStream, { streamIsTTY, sniffFlags = true } = {}) {
|
|
32
|
+
const noFlagForceColor = envForceColor();
|
|
33
|
+
if (noFlagForceColor !== void 0) flagForceColor = noFlagForceColor;
|
|
34
|
+
const forceColor = sniffFlags ? flagForceColor : noFlagForceColor;
|
|
35
|
+
if (forceColor === 0) return 0;
|
|
36
|
+
if (sniffFlags) {
|
|
37
|
+
if (hasFlag("color=16m") || hasFlag("color=full") || hasFlag("color=truecolor")) return 3;
|
|
38
|
+
if (hasFlag("color=256")) return 2;
|
|
39
|
+
}
|
|
40
|
+
if ("TF_BUILD" in env && "AGENT_NAME" in env) return 1;
|
|
41
|
+
if (haveStream && !streamIsTTY && forceColor === void 0) return 0;
|
|
42
|
+
const min = forceColor || 0;
|
|
43
|
+
if (env.TERM === "dumb") return min;
|
|
44
|
+
if (process.platform === "win32") {
|
|
45
|
+
const osRelease = os.release().split(".");
|
|
46
|
+
if (Number(osRelease[0]) >= 10 && Number(osRelease[2]) >= 10586) return Number(osRelease[2]) >= 14931 ? 3 : 2;
|
|
47
|
+
return 1;
|
|
48
|
+
}
|
|
49
|
+
if ("CI" in env) {
|
|
50
|
+
if ([
|
|
51
|
+
"GITHUB_ACTIONS",
|
|
52
|
+
"GITEA_ACTIONS",
|
|
53
|
+
"CIRCLECI"
|
|
54
|
+
].some((key) => key in env)) return 3;
|
|
55
|
+
if ([
|
|
56
|
+
"TRAVIS",
|
|
57
|
+
"APPVEYOR",
|
|
58
|
+
"GITLAB_CI",
|
|
59
|
+
"BUILDKITE",
|
|
60
|
+
"DRONE"
|
|
61
|
+
].some((sign) => sign in env) || env.CI_NAME === "codeship") return 1;
|
|
62
|
+
return min;
|
|
63
|
+
}
|
|
64
|
+
if ("TEAMCITY_VERSION" in env) return /^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(env.TEAMCITY_VERSION) ? 1 : 0;
|
|
65
|
+
if (env.COLORTERM === "truecolor") return 3;
|
|
66
|
+
if (env.TERM === "xterm-kitty") return 3;
|
|
67
|
+
if (env.TERM === "xterm-ghostty") return 3;
|
|
68
|
+
if (env.TERM === "wezterm") return 3;
|
|
69
|
+
if ("TERM_PROGRAM" in env) {
|
|
70
|
+
const version = Number.parseInt((env.TERM_PROGRAM_VERSION || "").split(".")[0], 10);
|
|
71
|
+
switch (env.TERM_PROGRAM) {
|
|
72
|
+
case "iTerm.app": return version >= 3 ? 3 : 2;
|
|
73
|
+
case "Apple_Terminal": return 2;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
if (/-256(color)?$/i.test(env.TERM)) return 2;
|
|
77
|
+
if (/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(env.TERM)) return 1;
|
|
78
|
+
if ("COLORTERM" in env) return 1;
|
|
79
|
+
return min;
|
|
80
|
+
}
|
|
81
|
+
function createSupportsColor(stream, options = {}) {
|
|
82
|
+
return translateLevel(_supportsColor(stream, {
|
|
83
|
+
streamIsTTY: stream && stream.isTTY,
|
|
84
|
+
...options
|
|
85
|
+
}));
|
|
86
|
+
}
|
|
87
|
+
const supportsColor = {
|
|
88
|
+
stdout: createSupportsColor({ isTTY: tty.isatty(1) }),
|
|
89
|
+
stderr: createSupportsColor({ isTTY: tty.isatty(2) })
|
|
90
|
+
};
|
|
91
|
+
//#endregion
|
|
92
|
+
export { supportsColor as default };
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { Query } from "./query.mjs";
|
|
2
|
+
import { QueryPromise } from "./query-promise.mjs";
|
|
3
|
+
import { BuildFilterExpression } from "../filters/index.mjs";
|
|
4
|
+
import { AnyColumn, TColsToLeftRight, TableColumn, TableWithColumns } from "../table.mjs";
|
|
5
|
+
import { Config } from "../index.mjs";
|
|
6
|
+
import { QueryExecutor } from "../connectors/common.mjs";
|
|
7
|
+
|
|
8
|
+
//#region src/query-builders/aggregates.d.ts
|
|
9
|
+
type AggregateFunction = "SUM" | "AVG" | "MIN" | "MAX";
|
|
10
|
+
declare class AggregateQuery<TTableWC extends TableWithColumns<string, string, Record<string, AnyColumn>>, TColumn extends TableColumn<string, string, Key, AnyColumn>, TReturn extends number | null> extends QueryPromise<TReturn> {
|
|
11
|
+
#private;
|
|
12
|
+
constructor(table: TTableWC, column: TColumn, fn: AggregateFunction, where: BuildFilterExpression<TColsToLeftRight<TTableWC["_"]["columns"]>> | undefined, config: Config, executor: QueryExecutor);
|
|
13
|
+
toQuery(): Query<TReturn>;
|
|
14
|
+
execute(): Promise<TReturn>;
|
|
15
|
+
handleRows(rows: {
|
|
16
|
+
result: string | null;
|
|
17
|
+
}[]): TReturn;
|
|
18
|
+
}
|
|
19
|
+
//#endregion
|
|
20
|
+
export { AggregateQuery };
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { QueryPromise } from "./query-promise.mjs";
|
|
2
|
+
import { Query } from "./query.mjs";
|
|
3
|
+
//#region src/query-builders/aggregates.ts
|
|
4
|
+
var AggregateQuery = class extends QueryPromise {
|
|
5
|
+
#$table;
|
|
6
|
+
#$column;
|
|
7
|
+
#$fn;
|
|
8
|
+
#$where;
|
|
9
|
+
#$config;
|
|
10
|
+
#$executor;
|
|
11
|
+
constructor(table, column, fn, where, config, executor) {
|
|
12
|
+
super();
|
|
13
|
+
this.#$table = table;
|
|
14
|
+
this.#$column = column;
|
|
15
|
+
this.#$fn = fn;
|
|
16
|
+
this.#$where = where;
|
|
17
|
+
this.#$config = config;
|
|
18
|
+
this.#$executor = executor;
|
|
19
|
+
}
|
|
20
|
+
toQuery() {
|
|
21
|
+
const columnName = this.#$column.fullName;
|
|
22
|
+
const query = new Query(`SELECT ${this.#$fn}(${columnName}) as result FROM `, this.handleRows.bind(this));
|
|
23
|
+
query.sql += this.#$table._.fullName;
|
|
24
|
+
if (this.#$where) {
|
|
25
|
+
query.sql += " WHERE ";
|
|
26
|
+
query.sql += this.#$where.toSQL();
|
|
27
|
+
}
|
|
28
|
+
return query;
|
|
29
|
+
}
|
|
30
|
+
async execute() {
|
|
31
|
+
const query = this.toQuery();
|
|
32
|
+
const res = await this.#$executor.query(query.sql, query.arguments);
|
|
33
|
+
const rows = this.#$executor.getRows(res);
|
|
34
|
+
return this.handleRows(rows);
|
|
35
|
+
}
|
|
36
|
+
handleRows(rows) {
|
|
37
|
+
const result = rows[0].result;
|
|
38
|
+
if (result === null) return null;
|
|
39
|
+
return Number(result);
|
|
40
|
+
}
|
|
41
|
+
};
|
|
42
|
+
//#endregion
|
|
43
|
+
export { AggregateQuery };
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { Query } from "./query.mjs";
|
|
2
|
+
import { QueryPromise } from "./query-promise.mjs";
|
|
3
|
+
import { BuildFilterExpression } from "../filters/index.mjs";
|
|
4
|
+
import { AnyColumn, TColsToLeftRight, TableWithColumns } from "../table.mjs";
|
|
5
|
+
import { Config } from "../index.mjs";
|
|
6
|
+
import { QueryExecutor } from "../connectors/common.mjs";
|
|
7
|
+
|
|
8
|
+
//#region src/query-builders/count.d.ts
|
|
9
|
+
declare class CountQuery<TTableWC extends TableWithColumns<string, string, Record<string, AnyColumn>>> extends QueryPromise<number> {
|
|
10
|
+
#private;
|
|
11
|
+
constructor(table: TTableWC, where: BuildFilterExpression<TColsToLeftRight<TTableWC["_"]["columns"]>> | undefined, config: Config, executor: QueryExecutor);
|
|
12
|
+
toQuery(): Query<number>;
|
|
13
|
+
execute(): Promise<number>;
|
|
14
|
+
handleRows(rows: {
|
|
15
|
+
count: string;
|
|
16
|
+
}[]): number;
|
|
17
|
+
}
|
|
18
|
+
//#endregion
|
|
19
|
+
export { CountQuery };
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { QueryPromise } from "./query-promise.mjs";
|
|
2
|
+
import { Query } from "./query.mjs";
|
|
3
|
+
//#region src/query-builders/count.ts
|
|
4
|
+
var CountQuery = class extends QueryPromise {
|
|
5
|
+
#$table;
|
|
6
|
+
#$where;
|
|
7
|
+
#$config;
|
|
8
|
+
#$executor;
|
|
9
|
+
constructor(table, where, config, executor) {
|
|
10
|
+
super();
|
|
11
|
+
this.#$table = table;
|
|
12
|
+
this.#$where = where;
|
|
13
|
+
this.#$config = config;
|
|
14
|
+
this.#$executor = executor;
|
|
15
|
+
}
|
|
16
|
+
toQuery() {
|
|
17
|
+
const query = new Query("SELECT count(*) FROM ", this.handleRows.bind(this));
|
|
18
|
+
query.sql += this.#$table._.fullName;
|
|
19
|
+
if (this.#$where) {
|
|
20
|
+
query.sql += " WHERE ";
|
|
21
|
+
query.sql += this.#$where.toSQL();
|
|
22
|
+
}
|
|
23
|
+
return query;
|
|
24
|
+
}
|
|
25
|
+
async execute() {
|
|
26
|
+
const query = this.toQuery();
|
|
27
|
+
const res = await this.#$executor.query(query.sql, query.arguments);
|
|
28
|
+
const rows = this.#$executor.getRows(res);
|
|
29
|
+
return this.handleRows(rows);
|
|
30
|
+
}
|
|
31
|
+
handleRows(rows) {
|
|
32
|
+
return Number(rows[0].count);
|
|
33
|
+
}
|
|
34
|
+
};
|
|
35
|
+
//#endregion
|
|
36
|
+
export { CountQuery };
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { Query } from "./query.mjs";
|
|
2
|
+
import { QueryPromise } from "./query-promise.mjs";
|
|
3
|
+
import { BuildFilterExpression } from "../filters/index.mjs";
|
|
4
|
+
import { AnyColumn, TColsToLeftRight, TableWithColumns } from "../table.mjs";
|
|
5
|
+
import { Config } from "../index.mjs";
|
|
6
|
+
import { QueryExecutor } from "../connectors/common.mjs";
|
|
7
|
+
|
|
8
|
+
//#region src/query-builders/delete.d.ts
|
|
9
|
+
declare class DeleteQuery<TTableWC extends TableWithColumns<string, string, Record<string, AnyColumn>>, TPrepare extends boolean, TReturning extends { [ColName in keyof TTableWC["_"]["columns"]]?: true } | { [ColName in keyof TTableWC["_"]["columns"]]?: false } | undefined, TReturn = (TReturning extends Record<Key, boolean> ? TReturning extends { [ColName in keyof TTableWC["_"]["columns"]]?: false } ? { [ColName in keyof TTableWC["_"]["columns"] as TReturning[ColName] extends false ? never : ColName]: TTableWC["_"]["columns"][ColName]["ValTypeSelect"] }[] : { [ColName in keyof TTableWC["_"]["columns"] as TReturning[ColName] extends true ? ColName : never]: TTableWC["_"]["columns"][ColName]["ValTypeSelect"] }[] : null)> extends QueryPromise<TReturn> {
|
|
10
|
+
#private;
|
|
11
|
+
constructor(table: TTableWC, where: BuildFilterExpression<TColsToLeftRight<TTableWC["_"]["columns"]>, TPrepare> | undefined, returnings: TReturning, config: Config, executor: QueryExecutor, prepare: TPrepare);
|
|
12
|
+
where<TWhere extends BuildFilterExpression<TColsToLeftRight<TTableWC["_"]["columns"]>, TPrepare>>(where: TWhere): DeleteQuery<TTableWC, TPrepare, TReturning, TReturning extends Record<Key, boolean> ? TReturning extends { [ColName in keyof TTableWC["_"]["columns"]]?: false | undefined } ? { [ColName_1 in keyof TTableWC["_"]["columns"] as TReturning[ColName_1] extends false ? never : ColName_1]: TTableWC["_"]["columns"][ColName_1]["ValTypeSelect"] }[] : { [ColName_2 in keyof TTableWC["_"]["columns"] as TReturning[ColName_2] extends true ? ColName_2 : never]: TTableWC["_"]["columns"][ColName_2]["ValTypeSelect"] }[] : null>;
|
|
13
|
+
returning<TReturnings extends { [ColName in keyof TTableWC["_"]["columns"]]?: true } | { [ColName in keyof TTableWC["_"]["columns"]]?: false }>(returnings: TReturnings): DeleteQuery<TTableWC, TPrepare, TReturnings, TReturnings extends Record<Key, boolean> ? TReturnings extends { [ColName in keyof TTableWC["_"]["columns"]]?: false | undefined } ? { [ColName_1 in keyof TTableWC["_"]["columns"] as TReturnings[ColName_1] extends false ? never : ColName_1]: TTableWC["_"]["columns"][ColName_1]["ValTypeSelect"] }[] : { [ColName_2 in keyof TTableWC["_"]["columns"] as TReturnings[ColName_2] extends true ? ColName_2 : never]: TTableWC["_"]["columns"][ColName_2]["ValTypeSelect"] }[] : null>;
|
|
14
|
+
toQuery(): Query<TReturn>;
|
|
15
|
+
execute(): Promise<TReturn>;
|
|
16
|
+
handleRows(rows: Record<string, unknown>[]): TReturn;
|
|
17
|
+
}
|
|
18
|
+
//#endregion
|
|
19
|
+
export { DeleteQuery };
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { QueryPromise } from "./query-promise.mjs";
|
|
2
|
+
import { Query } from "./query.mjs";
|
|
3
|
+
//#region src/query-builders/delete.ts
|
|
4
|
+
var DeleteQuery = class DeleteQuery extends QueryPromise {
|
|
5
|
+
#$table;
|
|
6
|
+
#$where;
|
|
7
|
+
#$returning;
|
|
8
|
+
#$config;
|
|
9
|
+
#$executor;
|
|
10
|
+
#$prepare;
|
|
11
|
+
constructor(table, where, returnings, config, executor, prepare) {
|
|
12
|
+
super();
|
|
13
|
+
this.#$table = table;
|
|
14
|
+
this.#$where = where;
|
|
15
|
+
this.#$returning = returnings;
|
|
16
|
+
this.#$config = config;
|
|
17
|
+
this.#$executor = executor;
|
|
18
|
+
this.#$prepare = prepare;
|
|
19
|
+
}
|
|
20
|
+
where(where) {
|
|
21
|
+
return new DeleteQuery(this.#$table, where, this.#$returning, this.#$config, this.#$executor, this.#$prepare);
|
|
22
|
+
}
|
|
23
|
+
returning(returnings) {
|
|
24
|
+
return new DeleteQuery(this.#$table, this.#$where, returnings, this.#$config, this.#$executor, this.#$prepare);
|
|
25
|
+
}
|
|
26
|
+
toQuery() {
|
|
27
|
+
const query = new Query("DELETE FROM ", this.handleRows.bind(this));
|
|
28
|
+
query.sql += this.#$table._.fullName;
|
|
29
|
+
if (this.#$where) {
|
|
30
|
+
query.sql += " WHERE ";
|
|
31
|
+
if (this.#$prepare) this.#$where.toQuery(query);
|
|
32
|
+
else query.sql += this.#$where.toSQL();
|
|
33
|
+
}
|
|
34
|
+
if (this.#$returning) {
|
|
35
|
+
query.sql += " RETURNING ";
|
|
36
|
+
const returningFields = Object.keys(this.#$returning).filter((k) => this.#$returning?.[k] === true);
|
|
37
|
+
query.sql += returningFields.map((field) => `"${this.#$table._.columns[field].nameSnake}"`).join(", ");
|
|
38
|
+
}
|
|
39
|
+
query.sql += ";";
|
|
40
|
+
return query;
|
|
41
|
+
}
|
|
42
|
+
async execute() {
|
|
43
|
+
const query = this.toQuery();
|
|
44
|
+
const res = await this.#$executor.query(query.sql, query.arguments);
|
|
45
|
+
const rows = this.#$executor.getRows(res);
|
|
46
|
+
return this.handleRows(rows);
|
|
47
|
+
}
|
|
48
|
+
handleRows(rows) {
|
|
49
|
+
const { columns } = this.#$table._;
|
|
50
|
+
rows.forEach((row) => {
|
|
51
|
+
for (const [key, value] of Object.entries(row)) row[key] = columns[key].fromDriver(value);
|
|
52
|
+
});
|
|
53
|
+
return rows;
|
|
54
|
+
}
|
|
55
|
+
};
|
|
56
|
+
//#endregion
|
|
57
|
+
export { DeleteQuery };
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { Query } from "./query.mjs";
|
|
2
|
+
import { QueryPromise } from "./query-promise.mjs";
|
|
3
|
+
import { BuildFilterExpression } from "../filters/index.mjs";
|
|
4
|
+
import { AnyColumn, TColsToLeftRight, TableColumn, TableWithColumns } from "../table.mjs";
|
|
5
|
+
import { Config } from "../index.mjs";
|
|
6
|
+
import { QueryExecutor } from "../connectors/common.mjs";
|
|
7
|
+
|
|
8
|
+
//#region src/query-builders/distinct.d.ts
|
|
9
|
+
declare class DistinctQuery<TTableWC extends TableWithColumns<string, string, Record<string, AnyColumn>>, TColumn extends TableColumn<string, string, Key, AnyColumn>, TReturn = TColumn["ValTypeSelect"][]> extends QueryPromise<TReturn> {
|
|
10
|
+
#private;
|
|
11
|
+
constructor(table: TTableWC, column: TColumn, where: BuildFilterExpression<TColsToLeftRight<TTableWC["_"]["columns"]>> | undefined, config: Config, executor: QueryExecutor);
|
|
12
|
+
toQuery(): Query<TReturn>;
|
|
13
|
+
execute(): Promise<TReturn>;
|
|
14
|
+
handleRows(rows: {
|
|
15
|
+
value: unknown;
|
|
16
|
+
}[]): TReturn;
|
|
17
|
+
}
|
|
18
|
+
//#endregion
|
|
19
|
+
export { DistinctQuery };
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { QueryPromise } from "./query-promise.mjs";
|
|
2
|
+
import { Query } from "./query.mjs";
|
|
3
|
+
//#region src/query-builders/distinct.ts
|
|
4
|
+
var DistinctQuery = class extends QueryPromise {
|
|
5
|
+
#$table;
|
|
6
|
+
#$column;
|
|
7
|
+
#$where;
|
|
8
|
+
#$config;
|
|
9
|
+
#$executor;
|
|
10
|
+
constructor(table, column, where, config, executor) {
|
|
11
|
+
super();
|
|
12
|
+
this.#$table = table;
|
|
13
|
+
this.#$column = column;
|
|
14
|
+
this.#$where = where;
|
|
15
|
+
this.#$config = config;
|
|
16
|
+
this.#$executor = executor;
|
|
17
|
+
}
|
|
18
|
+
toQuery() {
|
|
19
|
+
const columnName = this.#$column.fullName;
|
|
20
|
+
const query = new Query(`SELECT DISTINCT ${columnName} as value FROM `, this.handleRows.bind(this));
|
|
21
|
+
query.sql += this.#$table._.fullName;
|
|
22
|
+
if (this.#$where) {
|
|
23
|
+
query.sql += " WHERE ";
|
|
24
|
+
query.sql += this.#$where.toSQL();
|
|
25
|
+
}
|
|
26
|
+
query.sql += ` ORDER BY ${columnName}`;
|
|
27
|
+
return query;
|
|
28
|
+
}
|
|
29
|
+
async execute() {
|
|
30
|
+
const query = this.toQuery();
|
|
31
|
+
const res = await this.#$executor.query(query.sql, query.arguments);
|
|
32
|
+
const rows = this.#$executor.getRows(res);
|
|
33
|
+
return this.handleRows(rows);
|
|
34
|
+
}
|
|
35
|
+
handleRows(rows) {
|
|
36
|
+
return rows.map((row) => {
|
|
37
|
+
return this.#$column.fromDriver(row.value);
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
};
|
|
41
|
+
//#endregion
|
|
42
|
+
export { DistinctQuery };
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { Query } from "./query.mjs";
|
|
2
|
+
import { QueryPromise } from "./query-promise.mjs";
|
|
3
|
+
import { BuildFilterExpression } from "../filters/index.mjs";
|
|
4
|
+
import { AnyColumn, TColsToLeftRight, TableWithColumns } from "../table.mjs";
|
|
5
|
+
import { Config } from "../index.mjs";
|
|
6
|
+
import { QueryExecutor } from "../connectors/common.mjs";
|
|
7
|
+
|
|
8
|
+
//#region src/query-builders/exists.d.ts
|
|
9
|
+
declare class ExistsQuery<TTableWC extends TableWithColumns<string, string, Record<string, AnyColumn>>> extends QueryPromise<boolean> {
|
|
10
|
+
#private;
|
|
11
|
+
constructor(table: TTableWC, where: BuildFilterExpression<TColsToLeftRight<TTableWC["_"]["columns"]>> | undefined, config: Config, executor: QueryExecutor);
|
|
12
|
+
toQuery(): Query<boolean>;
|
|
13
|
+
execute(): Promise<boolean>;
|
|
14
|
+
handleRows(rows: {
|
|
15
|
+
exists: boolean;
|
|
16
|
+
}[]): boolean;
|
|
17
|
+
}
|
|
18
|
+
//#endregion
|
|
19
|
+
export { ExistsQuery };
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { QueryPromise } from "./query-promise.mjs";
|
|
2
|
+
import { Query } from "./query.mjs";
|
|
3
|
+
//#region src/query-builders/exists.ts
|
|
4
|
+
var ExistsQuery = class extends QueryPromise {
|
|
5
|
+
#$table;
|
|
6
|
+
#$where;
|
|
7
|
+
#$config;
|
|
8
|
+
#$executor;
|
|
9
|
+
constructor(table, where, config, executor) {
|
|
10
|
+
super();
|
|
11
|
+
this.#$table = table;
|
|
12
|
+
this.#$where = where;
|
|
13
|
+
this.#$config = config;
|
|
14
|
+
this.#$executor = executor;
|
|
15
|
+
}
|
|
16
|
+
toQuery() {
|
|
17
|
+
const query = new Query("SELECT EXISTS(SELECT 1 FROM ", this.handleRows.bind(this));
|
|
18
|
+
query.sql += this.#$table._.fullName;
|
|
19
|
+
if (this.#$where) {
|
|
20
|
+
query.sql += " WHERE ";
|
|
21
|
+
query.sql += this.#$where.toSQL();
|
|
22
|
+
}
|
|
23
|
+
query.sql += ")";
|
|
24
|
+
return query;
|
|
25
|
+
}
|
|
26
|
+
async execute() {
|
|
27
|
+
const query = this.toQuery();
|
|
28
|
+
const res = await this.#$executor.query(query.sql, query.arguments);
|
|
29
|
+
const rows = this.#$executor.getRows(res);
|
|
30
|
+
return this.handleRows(rows);
|
|
31
|
+
}
|
|
32
|
+
handleRows(rows) {
|
|
33
|
+
return rows[0].exists;
|
|
34
|
+
}
|
|
35
|
+
};
|
|
36
|
+
//#endregion
|
|
37
|
+
export { ExistsQuery };
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { Query } from "./query.mjs";
|
|
2
|
+
import { QueryPromise } from "./query-promise.mjs";
|
|
3
|
+
import { BuildFilterExpression } from "../filters/index.mjs";
|
|
4
|
+
import { AnyColumn, TColsToLeftRight, TableWithColumns } from "../table.mjs";
|
|
5
|
+
import { Config } from "../index.mjs";
|
|
6
|
+
import { QueryExecutor } from "../connectors/common.mjs";
|
|
7
|
+
|
|
8
|
+
//#region src/query-builders/first.d.ts
|
|
9
|
+
declare class FirstQuery<TTableWC extends TableWithColumns<string, string, Record<string, AnyColumn>>, TReturn = { [ColName in keyof TTableWC["_"]["columns"]]: TTableWC["_"]["columns"][ColName]["ValTypeSelect"] } | null> extends QueryPromise<TReturn> {
|
|
10
|
+
#private;
|
|
11
|
+
constructor(table: TTableWC, where: BuildFilterExpression<TColsToLeftRight<TTableWC["_"]["columns"]>> | undefined, config: Config, executor: QueryExecutor);
|
|
12
|
+
toQuery(): Query<TReturn>;
|
|
13
|
+
execute(): Promise<TReturn>;
|
|
14
|
+
handleRows(rows: Record<string, unknown>[]): TReturn;
|
|
15
|
+
}
|
|
16
|
+
//#endregion
|
|
17
|
+
export { FirstQuery };
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { QueryPromise } from "./query-promise.mjs";
|
|
2
|
+
import { snakeToCamel } from "../utils.mjs";
|
|
3
|
+
import { Query } from "./query.mjs";
|
|
4
|
+
//#region src/query-builders/first.ts
|
|
5
|
+
var FirstQuery = class extends QueryPromise {
|
|
6
|
+
#$table;
|
|
7
|
+
#$where;
|
|
8
|
+
#$config;
|
|
9
|
+
#$executor;
|
|
10
|
+
constructor(table, where, config, executor) {
|
|
11
|
+
super();
|
|
12
|
+
this.#$table = table;
|
|
13
|
+
this.#$where = where;
|
|
14
|
+
this.#$config = config;
|
|
15
|
+
this.#$executor = executor;
|
|
16
|
+
}
|
|
17
|
+
toQuery() {
|
|
18
|
+
const query = new Query("SELECT * FROM ", this.handleRows.bind(this));
|
|
19
|
+
query.sql += this.#$table._.fullName;
|
|
20
|
+
if (this.#$where) {
|
|
21
|
+
query.sql += " WHERE ";
|
|
22
|
+
query.sql += this.#$where.toSQL();
|
|
23
|
+
}
|
|
24
|
+
query.sql += " LIMIT 1";
|
|
25
|
+
return query;
|
|
26
|
+
}
|
|
27
|
+
async execute() {
|
|
28
|
+
const query = this.toQuery();
|
|
29
|
+
const res = await this.#$executor.query(query.sql, query.arguments);
|
|
30
|
+
const rows = this.#$executor.getRows(res);
|
|
31
|
+
return this.handleRows(rows);
|
|
32
|
+
}
|
|
33
|
+
handleRows(rows) {
|
|
34
|
+
if (rows.length === 0) return null;
|
|
35
|
+
const row = rows[0];
|
|
36
|
+
const { columns } = this.#$table._;
|
|
37
|
+
for (const [key, value] of Object.entries(row)) {
|
|
38
|
+
const keyCamel = snakeToCamel(key);
|
|
39
|
+
row[keyCamel] = columns[keyCamel].fromDriver(value);
|
|
40
|
+
if (keyCamel !== key) delete row[key];
|
|
41
|
+
}
|
|
42
|
+
return row;
|
|
43
|
+
}
|
|
44
|
+
};
|
|
45
|
+
//#endregion
|
|
46
|
+
export { FirstQuery };
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { Query } from "./query.mjs";
|
|
2
|
+
import { QueryPromise } from "./query-promise.mjs";
|
|
3
|
+
import { AnyColumn, TableWithColumns } from "../table.mjs";
|
|
4
|
+
import { Config } from "../index.mjs";
|
|
5
|
+
import { QueryExecutor } from "../connectors/common.mjs";
|
|
6
|
+
|
|
7
|
+
//#region src/query-builders/insert-returning.d.ts
|
|
8
|
+
declare class InsertReturningQuery<TTableWC extends TableWithColumns<string, string, Record<string, AnyColumn>>, TReturn = { [ColName in keyof TTableWC["_"]["columns"]]: TTableWC["_"]["columns"][ColName]["ValTypeSelect"] }> extends QueryPromise<TReturn> {
|
|
9
|
+
#private;
|
|
10
|
+
constructor(table: TTableWC, values: Record<string, unknown>, config: Config, executor: QueryExecutor);
|
|
11
|
+
toQuery(): Query<TReturn>;
|
|
12
|
+
execute(): Promise<TReturn>;
|
|
13
|
+
handleRows(rows: Record<string, unknown>[]): TReturn;
|
|
14
|
+
}
|
|
15
|
+
//#endregion
|
|
16
|
+
export { InsertReturningQuery };
|