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.
Files changed (174) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +56 -0
  3. package/dist/bin.cjs +13522 -0
  4. package/dist/src/_virtual/_rolldown/runtime.mjs +28 -0
  5. package/dist/src/cli/helpers.mjs +16 -0
  6. package/dist/src/columns/bigint.d.mts +19 -0
  7. package/dist/src/columns/bigint.mjs +32 -0
  8. package/dist/src/columns/bigserial.d.mts +24 -0
  9. package/dist/src/columns/bigserial.mjs +35 -0
  10. package/dist/src/columns/boolean.d.mts +19 -0
  11. package/dist/src/columns/boolean.mjs +31 -0
  12. package/dist/src/columns/bytea.d.mts +19 -0
  13. package/dist/src/columns/bytea.mjs +33 -0
  14. package/dist/src/columns/char.d.mts +32 -0
  15. package/dist/src/columns/char.mjs +44 -0
  16. package/dist/src/columns/cidr.d.mts +19 -0
  17. package/dist/src/columns/cidr.mjs +31 -0
  18. package/dist/src/columns/common.d.mts +233 -0
  19. package/dist/src/columns/common.mjs +276 -0
  20. package/dist/src/columns/date.d.mts +19 -0
  21. package/dist/src/columns/date.mjs +32 -0
  22. package/dist/src/columns/enum.d.mts +21 -0
  23. package/dist/src/columns/enum.mjs +35 -0
  24. package/dist/src/columns/inet.d.mts +19 -0
  25. package/dist/src/columns/inet.mjs +36 -0
  26. package/dist/src/columns/integer.d.mts +19 -0
  27. package/dist/src/columns/integer.mjs +32 -0
  28. package/dist/src/columns/json.d.mts +52 -0
  29. package/dist/src/columns/json.mjs +67 -0
  30. package/dist/src/columns/jsonb.d.mts +53 -0
  31. package/dist/src/columns/jsonb.mjs +68 -0
  32. package/dist/src/columns/macaddr.d.mts +19 -0
  33. package/dist/src/columns/macaddr.mjs +31 -0
  34. package/dist/src/columns/numeric.d.mts +42 -0
  35. package/dist/src/columns/numeric.mjs +57 -0
  36. package/dist/src/columns/postgis/geography/index.d.mts +18 -0
  37. package/dist/src/columns/postgis/geography/index.mjs +17 -0
  38. package/dist/src/columns/postgis/geography/linestring.d.mts +38 -0
  39. package/dist/src/columns/postgis/geography/linestring.mjs +70 -0
  40. package/dist/src/columns/postgis/geography/multilinestring.d.mts +39 -0
  41. package/dist/src/columns/postgis/geography/multilinestring.mjs +70 -0
  42. package/dist/src/columns/postgis/geography/multipoint.d.mts +38 -0
  43. package/dist/src/columns/postgis/geography/multipoint.mjs +70 -0
  44. package/dist/src/columns/postgis/geography/multipolygon.d.mts +40 -0
  45. package/dist/src/columns/postgis/geography/multipolygon.mjs +70 -0
  46. package/dist/src/columns/postgis/geography/point.d.mts +36 -0
  47. package/dist/src/columns/postgis/geography/point.mjs +69 -0
  48. package/dist/src/columns/postgis/geography/polygon.d.mts +39 -0
  49. package/dist/src/columns/postgis/geography/polygon.mjs +70 -0
  50. package/dist/src/columns/serial.d.mts +24 -0
  51. package/dist/src/columns/serial.mjs +35 -0
  52. package/dist/src/columns/smallint.d.mts +19 -0
  53. package/dist/src/columns/smallint.mjs +32 -0
  54. package/dist/src/columns/smallserial.d.mts +24 -0
  55. package/dist/src/columns/smallserial.mjs +35 -0
  56. package/dist/src/columns/text.d.mts +19 -0
  57. package/dist/src/columns/text.mjs +30 -0
  58. package/dist/src/columns/time.d.mts +44 -0
  59. package/dist/src/columns/time.mjs +47 -0
  60. package/dist/src/columns/timestamp.d.mts +44 -0
  61. package/dist/src/columns/timestamp.mjs +47 -0
  62. package/dist/src/columns/uuid.d.mts +33 -0
  63. package/dist/src/columns/uuid.mjs +44 -0
  64. package/dist/src/columns/varchar.d.mts +32 -0
  65. package/dist/src/columns/varchar.mjs +44 -0
  66. package/dist/src/connectors/bun.d.mts +18 -0
  67. package/dist/src/connectors/bun.mjs +97 -0
  68. package/dist/src/connectors/common.d.mts +148 -0
  69. package/dist/src/connectors/common.mjs +65 -0
  70. package/dist/src/connectors/pg.d.mts +18 -0
  71. package/dist/src/connectors/pg.mjs +103 -0
  72. package/dist/src/connectors/pglite.d.mts +19 -0
  73. package/dist/src/connectors/pglite.mjs +94 -0
  74. package/dist/src/connectors/postgres.d.mts +18 -0
  75. package/dist/src/connectors/postgres.mjs +93 -0
  76. package/dist/src/constraints/check.d.mts +88 -0
  77. package/dist/src/constraints/check.mjs +307 -0
  78. package/dist/src/constraints/primary-key.d.mts +28 -0
  79. package/dist/src/constraints/primary-key.mjs +36 -0
  80. package/dist/src/constraints/unique.d.mts +28 -0
  81. package/dist/src/constraints/unique.mjs +36 -0
  82. package/dist/src/db.d.mts +180 -0
  83. package/dist/src/db.mjs +191 -0
  84. package/dist/src/entity.mjs +23 -0
  85. package/dist/src/enumtype.d.mts +27 -0
  86. package/dist/src/enumtype.mjs +42 -0
  87. package/dist/src/filters/array.d.mts +97 -0
  88. package/dist/src/filters/array.mjs +150 -0
  89. package/dist/src/filters/custom.d.mts +12 -0
  90. package/dist/src/filters/custom.mjs +7 -0
  91. package/dist/src/filters/index.d.mts +155 -0
  92. package/dist/src/filters/index.mjs +318 -0
  93. package/dist/src/functions/index.d.mts +24 -0
  94. package/dist/src/functions/index.mjs +29 -0
  95. package/dist/src/index.d.mts +129 -0
  96. package/dist/src/index.mjs +78 -0
  97. package/dist/src/indexes.d.mts +31 -0
  98. package/dist/src/indexes.mjs +43 -0
  99. package/dist/src/migration/consts.d.mts +8 -0
  100. package/dist/src/migration/consts.mjs +8 -0
  101. package/dist/src/migration/ddl.d.mts +747 -0
  102. package/dist/src/migration/ddl.mjs +1084 -0
  103. package/dist/src/migration/index.d.mts +15 -0
  104. package/dist/src/migration/index.mjs +5 -0
  105. package/dist/src/migration/snapshot.d.mts +169 -0
  106. package/dist/src/migration/snapshot.mjs +123 -0
  107. package/dist/src/migration/statement.d.mts +89 -0
  108. package/dist/src/migration/statement.mjs +61 -0
  109. package/dist/src/models.d.mts +34 -0
  110. package/dist/src/models.mjs +27 -0
  111. package/dist/src/node_modules/.pnpm/chalk@5.6.2/node_modules/chalk/source/index.mjs +126 -0
  112. package/dist/src/node_modules/.pnpm/chalk@5.6.2/node_modules/chalk/source/utilities.mjs +29 -0
  113. package/dist/src/node_modules/.pnpm/chalk@5.6.2/node_modules/chalk/source/vendor/ansi-styles/index.mjs +165 -0
  114. package/dist/src/node_modules/.pnpm/chalk@5.6.2/node_modules/chalk/source/vendor/supports-color/index.mjs +92 -0
  115. package/dist/src/query-builders/aggregates.d.mts +20 -0
  116. package/dist/src/query-builders/aggregates.mjs +43 -0
  117. package/dist/src/query-builders/count.d.mts +19 -0
  118. package/dist/src/query-builders/count.mjs +36 -0
  119. package/dist/src/query-builders/delete.d.mts +19 -0
  120. package/dist/src/query-builders/delete.mjs +57 -0
  121. package/dist/src/query-builders/distinct.d.mts +19 -0
  122. package/dist/src/query-builders/distinct.mjs +42 -0
  123. package/dist/src/query-builders/exists.d.mts +19 -0
  124. package/dist/src/query-builders/exists.mjs +37 -0
  125. package/dist/src/query-builders/first.d.mts +17 -0
  126. package/dist/src/query-builders/first.mjs +46 -0
  127. package/dist/src/query-builders/insert-returning.d.mts +16 -0
  128. package/dist/src/query-builders/insert-returning.mjs +63 -0
  129. package/dist/src/query-builders/insert.d.mts +22 -0
  130. package/dist/src/query-builders/insert.mjs +93 -0
  131. package/dist/src/query-builders/orderby-clause.d.mts +14 -0
  132. package/dist/src/query-builders/orderby-clause.mjs +20 -0
  133. package/dist/src/query-builders/pre.d.mts +36 -0
  134. package/dist/src/query-builders/pre.mjs +60 -0
  135. package/dist/src/query-builders/query-promise.d.mts +14 -0
  136. package/dist/src/query-builders/query-promise.mjs +21 -0
  137. package/dist/src/query-builders/query.d.mts +14 -0
  138. package/dist/src/query-builders/query.mjs +17 -0
  139. package/dist/src/query-builders/raw.d.mts +14 -0
  140. package/dist/src/query-builders/raw.mjs +26 -0
  141. package/dist/src/query-builders/rq.d.mts +36 -0
  142. package/dist/src/query-builders/rq.mjs +231 -0
  143. package/dist/src/query-builders/select.d.mts +48 -0
  144. package/dist/src/query-builders/select.mjs +118 -0
  145. package/dist/src/query-builders/update.d.mts +24 -0
  146. package/dist/src/query-builders/update.mjs +99 -0
  147. package/dist/src/sequence.d.mts +48 -0
  148. package/dist/src/sequence.mjs +53 -0
  149. package/dist/src/sql.d.mts +15 -0
  150. package/dist/src/sql.mjs +36 -0
  151. package/dist/src/symbols.d.mts +4 -0
  152. package/dist/src/symbols.mjs +4 -0
  153. package/dist/src/table.d.mts +144 -0
  154. package/dist/src/table.mjs +134 -0
  155. package/dist/src/types.d.mts +4 -0
  156. package/dist/src/utils.mjs +10 -0
  157. package/dist/src/validators/zod.d.mts +23 -0
  158. package/dist/src/validators/zod.mjs +27 -0
  159. package/dist/src/wkx/binaryreader.mjs +56 -0
  160. package/dist/src/wkx/binarywriter.mjs +110 -0
  161. package/dist/src/wkx/geometry.mjs +101 -0
  162. package/dist/src/wkx/geometrycollection.mjs +113 -0
  163. package/dist/src/wkx/index.mjs +18 -0
  164. package/dist/src/wkx/linestring.mjs +124 -0
  165. package/dist/src/wkx/multilinestring.mjs +133 -0
  166. package/dist/src/wkx/multipoint.mjs +120 -0
  167. package/dist/src/wkx/multipolygon.mjs +155 -0
  168. package/dist/src/wkx/parser.mjs +183 -0
  169. package/dist/src/wkx/point.mjs +159 -0
  170. package/dist/src/wkx/polygon.mjs +189 -0
  171. package/dist/src/wkx/types.mjs +37 -0
  172. package/dist/src/wkx/wktparser.mjs +109 -0
  173. package/dist/src/wkx/zigzag.mjs +18 -0
  174. 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 };