kysely 0.3.4 → 0.3.9

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 (80) hide show
  1. package/.prettierignore +1 -0
  2. package/README.md +9 -0
  3. package/dist/cjs/dialect/postgres/postgres-driver.js +2 -1
  4. package/dist/cjs/driver/driver-config.d.ts +6 -0
  5. package/dist/cjs/index.d.ts +11 -0
  6. package/dist/cjs/index.js +1 -0
  7. package/dist/cjs/kysely.d.ts +25 -0
  8. package/dist/cjs/kysely.js +27 -0
  9. package/dist/cjs/operation-node/operation-node-transformer.js +2 -1
  10. package/dist/cjs/operation-node/select-query-node.d.ts +4 -2
  11. package/dist/cjs/operation-node/select-query-node.js +9 -1
  12. package/dist/cjs/parser/filter-parser.d.ts +6 -7
  13. package/dist/cjs/parser/filter-parser.js +10 -19
  14. package/dist/cjs/parser/insert-values-parser.d.ts +9 -1
  15. package/dist/cjs/parser/insert-values-parser.js +9 -5
  16. package/dist/cjs/parser/join-parser.d.ts +2 -2
  17. package/dist/cjs/parser/join-parser.js +1 -1
  18. package/dist/cjs/parser/mutation-parser.d.ts +2 -3
  19. package/dist/cjs/parser/reference-parser.d.ts +8 -3
  20. package/dist/cjs/parser/returning-parser.d.ts +2 -2
  21. package/dist/cjs/parser/select-parser.d.ts +6 -5
  22. package/dist/cjs/parser/select-parser.js +1 -1
  23. package/dist/cjs/parser/table-parser.d.ts +2 -2
  24. package/dist/cjs/parser/value-parser.d.ts +6 -7
  25. package/dist/cjs/parser/value-parser.js +3 -1
  26. package/dist/cjs/parser/with-parser.d.ts +2 -1
  27. package/dist/cjs/query-builder/join-builder.d.ts +9 -9
  28. package/dist/cjs/query-builder/join-builder.js +8 -8
  29. package/dist/cjs/query-builder/query-builder.d.ts +202 -106
  30. package/dist/cjs/query-builder/query-builder.js +44 -25
  31. package/dist/cjs/query-builder/type-utils.d.ts +23 -6
  32. package/dist/cjs/query-compiler/default-query-compiler.js +7 -6
  33. package/dist/cjs/query-creator.d.ts +2 -0
  34. package/dist/cjs/query-creator.js +2 -0
  35. package/dist/cjs/schema/alter-table-builder.d.ts +3 -2
  36. package/dist/cjs/schema/column-definition-builder.d.ts +3 -3
  37. package/dist/cjs/util/generated-placeholder.d.ts +3 -0
  38. package/dist/cjs/util/generated-placeholder.js +11 -0
  39. package/dist/cjs/util/object-utils.d.ts +1 -0
  40. package/dist/cjs/util/object-utils.js +2 -1
  41. package/dist/esm/dialect/postgres/postgres-driver.js +2 -1
  42. package/dist/esm/driver/driver-config.d.ts +6 -0
  43. package/dist/esm/index.d.ts +11 -0
  44. package/dist/esm/index.js +1 -0
  45. package/dist/esm/kysely.d.ts +25 -0
  46. package/dist/esm/kysely.js +27 -0
  47. package/dist/esm/operation-node/operation-node-transformer.js +2 -1
  48. package/dist/esm/operation-node/select-query-node.d.ts +4 -2
  49. package/dist/esm/operation-node/select-query-node.js +9 -1
  50. package/dist/esm/parser/filter-parser.d.ts +6 -7
  51. package/dist/esm/parser/filter-parser.js +5 -14
  52. package/dist/esm/parser/insert-values-parser.d.ts +9 -1
  53. package/dist/esm/parser/insert-values-parser.js +7 -3
  54. package/dist/esm/parser/join-parser.d.ts +2 -2
  55. package/dist/esm/parser/join-parser.js +2 -2
  56. package/dist/esm/parser/mutation-parser.d.ts +2 -3
  57. package/dist/esm/parser/reference-parser.d.ts +8 -3
  58. package/dist/esm/parser/reference-parser.js +1 -1
  59. package/dist/esm/parser/returning-parser.d.ts +2 -2
  60. package/dist/esm/parser/select-parser.d.ts +6 -5
  61. package/dist/esm/parser/select-parser.js +2 -2
  62. package/dist/esm/parser/table-parser.d.ts +2 -2
  63. package/dist/esm/parser/value-parser.d.ts +6 -7
  64. package/dist/esm/parser/value-parser.js +4 -2
  65. package/dist/esm/parser/with-parser.d.ts +2 -1
  66. package/dist/esm/query-builder/join-builder.d.ts +9 -9
  67. package/dist/esm/query-builder/join-builder.js +9 -9
  68. package/dist/esm/query-builder/query-builder.d.ts +202 -106
  69. package/dist/esm/query-builder/query-builder.js +46 -27
  70. package/dist/esm/query-builder/type-utils.d.ts +23 -6
  71. package/dist/esm/query-compiler/default-query-compiler.js +7 -6
  72. package/dist/esm/query-creator.d.ts +2 -0
  73. package/dist/esm/query-creator.js +2 -0
  74. package/dist/esm/schema/alter-table-builder.d.ts +3 -2
  75. package/dist/esm/schema/column-definition-builder.d.ts +3 -3
  76. package/dist/esm/util/generated-placeholder.d.ts +3 -0
  77. package/dist/esm/util/generated-placeholder.js +7 -0
  78. package/dist/esm/util/object-utils.d.ts +1 -0
  79. package/dist/esm/util/object-utils.js +1 -1
  80. package/package.json +2 -2
@@ -0,0 +1 @@
1
+ *.md
package/README.md CHANGED
@@ -1,3 +1,6 @@
1
+ [![Discord](https://img.shields.io/discord/890118421587578920)](https://discord.gg/C9aJ49mCra)
2
+ [![Tests](https://github.com/koskimas/kysely/actions/workflows/test.yml/badge.svg)](https://github.com/koskimas/kysely)
3
+
1
4
  # [Kysely](https://koskimas.github.io/kysely/index.html)
2
5
 
3
6
  A type-safe and autocompletion-friendly typescript SQL query builder for node.js. Heavily inspired by
@@ -26,6 +29,12 @@ Kysely is still young and some useful methods and modules are not yet implemente
26
29
  Kysely, please open an issue as soon as you can't find something you want to use.
27
30
 
28
31
  - [API reference](https://koskimas.github.io/kysely/index.html)
32
+ - [select](https://koskimas.github.io/kysely/classes/QueryBuilder.html#select)
33
+ - [where](https://koskimas.github.io/kysely/classes/QueryBuilder.html#where)
34
+ - [join](https://koskimas.github.io/kysely/classes/QueryBuilder.html#innerJoin)
35
+ - [insert](https://koskimas.github.io/kysely/classes/QueryBuilder.html#values)
36
+ - [update](https://koskimas.github.io/kysely/classes/QueryBuilder.html#set)
37
+ - [delete](https://koskimas.github.io/kysely/classes/Kysely.html#deleteFrom)
29
38
  - [Migrations](#migrations)
30
39
 
31
40
  # Installation
@@ -26,6 +26,7 @@ class PostgresDriver extends driver_js_1.Driver {
26
26
  port: cfg.port,
27
27
  user: cfg.user,
28
28
  password: cfg.password,
29
+ ssl: cfg.ssl,
29
30
  // Pool options.
30
31
  connectionTimeoutMillis: cfg.pool.connectionTimeoutMillis,
31
32
  idleTimeoutMillis: cfg.pool.idleTimeoutMillis,
@@ -63,7 +64,7 @@ exports.PostgresDriver = PostgresDriver;
63
64
  async function importPgPool() {
64
65
  try {
65
66
  // For this to work with both esm and cjs modules we need
66
- // this hacky craph here.
67
+ // this hacky crap here.
67
68
  const pg = (await Promise.resolve().then(() => require('pg')));
68
69
  if (object_utils_js_1.isFunction(pg.Pool)) {
69
70
  return pg.Pool;
@@ -1,3 +1,5 @@
1
+ /// <reference types="node" />
2
+ import { SecureContextOptions } from 'tls';
1
3
  import { DatabaseConnection } from './database-connection.js';
2
4
  export interface DriverConfig {
3
5
  /**
@@ -24,6 +26,10 @@ export interface DriverConfig {
24
26
  * Connection pooling config.
25
27
  */
26
28
  pool?: PoolConfig;
29
+ /**
30
+ * Optional SSL configuration.
31
+ */
32
+ ssl?: SecureContextOptions;
27
33
  }
28
34
  export interface PoolConfig {
29
35
  /**
@@ -95,4 +95,15 @@ export * from './operation-node/offset-node.js';
95
95
  export * from './operation-node//on-conflict-node.js';
96
96
  export * from './operation-node/operation-node.js';
97
97
  export * from './operation-node/operation-node-source.js';
98
+ export * from './operation-node/order-by-node.js';
98
99
  export * from './util/compilable.js';
100
+ export { AnyColumn } from './query-builder/type-utils.js';
101
+ export { SelectExpression, SelectExpressionOrList, } from './parser/select-parser';
102
+ export { ReferenceExpression, ReferenceExpressionOrList, } from './parser/reference-parser';
103
+ export { ValueExpression, ValueExpressionOrList } from './parser/value-parser';
104
+ export { ExistsExpression, FilterOperator } from './parser/filter-parser';
105
+ export { TableExpression } from './parser/table-parser';
106
+ export { JoinReferenceExpression, JoinCallbackExpression, } from './parser/join-parser';
107
+ export { InsertObject } from './parser/insert-values-parser';
108
+ export { MutationObject } from './parser/mutation-parser';
109
+ export { OrderByExpression } from './parser/order-by-parser';
package/dist/cjs/index.js CHANGED
@@ -107,4 +107,5 @@ __exportStar(require("./operation-node/offset-node.js"), exports);
107
107
  __exportStar(require("./operation-node//on-conflict-node.js"), exports);
108
108
  __exportStar(require("./operation-node/operation-node.js"), exports);
109
109
  __exportStar(require("./operation-node/operation-node-source.js"), exports);
110
+ __exportStar(require("./operation-node/order-by-node.js"), exports);
110
111
  __exportStar(require("./util/compilable.js"), exports);
@@ -8,6 +8,7 @@ import { MigrationModule } from './migration/migration.js';
8
8
  import { QueryExecutor } from './query-executor/query-executor.js';
9
9
  import { QueryCreator } from './query-creator.js';
10
10
  import { KyselyPlugin } from './plugin/plugin.js';
11
+ import { GeneratedPlaceholder } from './query-builder/type-utils.js';
11
12
  /**
12
13
  * The main Kysely class.
13
14
  *
@@ -62,6 +63,30 @@ export declare class Kysely<DB> extends QueryCreator<DB> {
62
63
  * passing in dynamic values for the queries.
63
64
  */
64
65
  get dynamic(): DynamicModule;
66
+ /**
67
+ * A value to be used in place of columns that are generated in the database
68
+ * when inserting rows.
69
+ *
70
+ * @example
71
+ * In this example the `Person` table has non-null properties `id` and `created_at`
72
+ * which are both automatically genereted by the database. Since their types are
73
+ * `number` and `string` respectively instead of `number | null` and `string | null`
74
+ * the `values` method requires you to give a value for them. the `generated`
75
+ * placeholder can be used in these cases.
76
+ *
77
+ * ```ts
78
+ * await db.insertInto('person')
79
+ * .values({
80
+ * id: db.generated,
81
+ * created_at: db.generated,
82
+ * first_name: 'Jennifer',
83
+ * last_name: 'Aniston',
84
+ * gender: 'female'
85
+ * })
86
+ * .execute()
87
+ * ```
88
+ */
89
+ get generated(): GeneratedPlaceholder;
65
90
  /**
66
91
  * Starts a transaction. If the callback throws the transaction is rolled back,
67
92
  * otherwise it's committed.
@@ -11,6 +11,7 @@ const driver_internal_js_1 = require("./driver/driver-internal.js");
11
11
  const migration_js_1 = require("./migration/migration.js");
12
12
  const query_executor_js_1 = require("./query-executor/query-executor.js");
13
13
  const query_creator_js_1 = require("./query-creator.js");
14
+ const generated_placeholder_js_1 = require("./util/generated-placeholder.js");
14
15
  /**
15
16
  * The main Kysely class.
16
17
  *
@@ -97,6 +98,32 @@ class Kysely extends query_creator_js_1.QueryCreator {
97
98
  get dynamic() {
98
99
  return new dynamic_js_1.DynamicModule();
99
100
  }
101
+ /**
102
+ * A value to be used in place of columns that are generated in the database
103
+ * when inserting rows.
104
+ *
105
+ * @example
106
+ * In this example the `Person` table has non-null properties `id` and `created_at`
107
+ * which are both automatically genereted by the database. Since their types are
108
+ * `number` and `string` respectively instead of `number | null` and `string | null`
109
+ * the `values` method requires you to give a value for them. the `generated`
110
+ * placeholder can be used in these cases.
111
+ *
112
+ * ```ts
113
+ * await db.insertInto('person')
114
+ * .values({
115
+ * id: db.generated,
116
+ * created_at: db.generated,
117
+ * first_name: 'Jennifer',
118
+ * last_name: 'Aniston',
119
+ * gender: 'female'
120
+ * })
121
+ * .execute()
122
+ * ```
123
+ */
124
+ get generated() {
125
+ return generated_placeholder_js_1.generatedPlaceholder;
126
+ }
100
127
  /**
101
128
  * Starts a transaction. If the callback throws the transaction is rolled back,
102
129
  * otherwise it's committed.
@@ -112,11 +112,12 @@ class OperationNodeTransformer {
112
112
  from: this.transformNode(node.from),
113
113
  selections: this.transformNodeList(node.selections),
114
114
  distinctOnSelections: this.transformNodeList(node.distinctOnSelections),
115
+ isDistinct: node.isDistinct,
115
116
  joins: this.transformNodeList(node.joins),
116
117
  groupBy: this.transformNode(node.groupBy),
117
118
  orderBy: this.transformNode(node.orderBy),
118
119
  where: this.transformNode(node.where),
119
- modifier: node.modifier,
120
+ modifiers: node.modifiers,
120
121
  limit: this.transformNode(node.limit),
121
122
  offset: this.transformNode(node.offset),
122
123
  with: this.transformNode(node.with),
@@ -12,17 +12,18 @@ import { OrderByNode } from './order-by-node.js';
12
12
  import { SelectionNode } from './selection-node.js';
13
13
  import { WhereNode } from './where-node.js';
14
14
  import { WithNode } from './with-node.js';
15
- export declare type SelectModifier = 'Distinct' | 'ForUpdate' | 'ForNoKeyUpdate' | 'ForShare' | 'ForKeyShare' | 'NoWait' | 'SkipLocked';
15
+ export declare type SelectModifier = 'ForUpdate' | 'ForNoKeyUpdate' | 'ForShare' | 'ForKeyShare' | 'NoWait' | 'SkipLocked';
16
16
  export interface SelectQueryNode extends OperationNode {
17
17
  readonly kind: 'SelectQueryNode';
18
18
  readonly from: FromNode;
19
19
  readonly selections?: ReadonlyArray<SelectionNode>;
20
20
  readonly distinctOnSelections?: ReadonlyArray<SelectionNode>;
21
+ readonly isDistinct?: boolean;
21
22
  readonly joins?: ReadonlyArray<JoinNode>;
22
23
  readonly groupBy?: GroupByNode;
23
24
  readonly orderBy?: OrderByNode;
24
25
  readonly where?: WhereNode;
25
- readonly modifier?: SelectModifier;
26
+ readonly modifiers?: ReadonlyArray<SelectModifier>;
26
27
  readonly limit?: LimitNode;
27
28
  readonly offset?: OffsetNode;
28
29
  readonly with?: WithNode;
@@ -42,4 +43,5 @@ export declare const selectQueryNode: Readonly<{
42
43
  cloneWithLimit(selectNode: SelectQueryNode, limit: LimitNode): SelectQueryNode;
43
44
  cloneWithOffset(selectNode: SelectQueryNode, offset: OffsetNode): SelectQueryNode;
44
45
  cloneWithHaving(selectNode: SelectQueryNode, op: 'and' | 'or', filter: HavingNodeChild): SelectQueryNode;
46
+ cloneWithDistinct(selectNode: SelectQueryNode): SelectQueryNode;
45
47
  }>;
@@ -39,7 +39,9 @@ exports.selectQueryNode = object_utils_js_1.freeze({
39
39
  cloneWithModifier(select, modifier) {
40
40
  return object_utils_js_1.freeze({
41
41
  ...select,
42
- modifier,
42
+ modifiers: select.modifiers
43
+ ? object_utils_js_1.freeze([...select.modifiers, modifier])
44
+ : object_utils_js_1.freeze([modifier]),
43
45
  });
44
46
  },
45
47
  cloneWithOrderByItem(selectNode, item) {
@@ -78,4 +80,10 @@ exports.selectQueryNode = object_utils_js_1.freeze({
78
80
  : having_node_js_1.havingNode.create(filter),
79
81
  });
80
82
  },
83
+ cloneWithDistinct(selectNode) {
84
+ return object_utils_js_1.freeze({
85
+ ...selectNode,
86
+ isDistinct: true,
87
+ });
88
+ },
81
89
  });
@@ -1,14 +1,13 @@
1
1
  import { FilterNode } from '../operation-node/filter-node.js';
2
- import { RawBuilder } from '../raw-builder/raw-builder.js';
3
- import { AnyQueryBuilder, QueryBuilderFactory, RawBuilderFactory } from '../query-builder/type-utils.js';
2
+ import { AnyQueryBuilder, AnyRawBuilder, QueryBuilderFactory, RawBuilderFactory } from '../query-builder/type-utils.js';
4
3
  import { Operator } from '../operation-node/operator-node.js';
5
4
  import { ReferenceExpression } from './reference-parser.js';
6
5
  import { JoinBuilder } from '../query-builder/join-builder.js';
7
6
  import { FilterExpressionNode } from '../operation-node/operation-node-utils.js';
8
- export declare type ExistsFilterArg<DB, TB extends keyof DB> = AnyQueryBuilder | QueryBuilderFactory<DB, TB> | RawBuilder<any> | RawBuilderFactory<DB, TB>;
9
- export declare type FilterOperatorArg = Operator | RawBuilder<any>;
7
+ export declare type ExistsExpression<DB, TB extends keyof DB> = AnyQueryBuilder | QueryBuilderFactory<DB, TB> | AnyRawBuilder | RawBuilderFactory<DB, TB>;
8
+ export declare type FilterOperator = Operator | AnyRawBuilder;
10
9
  export declare type FilterType = 'Where' | 'On' | 'Having';
11
- export declare function parseFilterArgs(filterType: FilterType, args: any[]): FilterExpressionNode;
12
- export declare function parseReferenceFilterArgs(lhs: ReferenceExpression<any, any>, op: FilterOperatorArg, rhs: ReferenceExpression<any, any>): FilterNode;
13
- export declare function parseExistsFilterArgs(type: 'exists' | 'not exists', arg: ExistsFilterArg<any, any>): FilterNode;
10
+ export declare function parseFilter(filterType: FilterType, args: any[]): FilterExpressionNode;
11
+ export declare function parseReferenceFilter(lhs: ReferenceExpression<any, any>, op: FilterOperator, rhs: ReferenceExpression<any, any>): FilterNode;
12
+ export declare function parseExistExpression(type: 'exists' | 'not exists', arg: ExistsExpression<any, any>): FilterNode;
14
13
  export declare function createEmptyJoinBuilder(): JoinBuilder<any, any>;
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.createEmptyJoinBuilder = exports.parseExistsFilterArgs = exports.parseReferenceFilterArgs = exports.parseFilterArgs = void 0;
3
+ exports.createEmptyJoinBuilder = exports.parseExistExpression = exports.parseReferenceFilter = exports.parseFilter = void 0;
4
4
  const filter_node_js_1 = require("../operation-node/filter-node.js");
5
5
  const object_utils_js_1 = require("../util/object-utils.js");
6
6
  const operation_node_source_js_1 = require("../operation-node/operation-node-source.js");
@@ -15,12 +15,12 @@ const query_builder_js_1 = require("../query-builder/query-builder.js");
15
15
  const join_builder_js_1 = require("../query-builder/join-builder.js");
16
16
  const table_parser_js_1 = require("./table-parser.js");
17
17
  const join_node_js_1 = require("../operation-node/join-node.js");
18
- const index_js_1 = require("../index.js");
19
- function parseFilterArgs(filterType, args) {
18
+ const value_node_js_1 = require("../operation-node/value-node.js");
19
+ function parseFilter(filterType, args) {
20
20
  if (args.length === 3) {
21
21
  return parseThreeArgFilter(args[0], args[1], args[2]);
22
22
  }
23
- else if (args.length === 1) {
23
+ else if (args.length === 1 && object_utils_js_1.isFunction(args[0])) {
24
24
  if (filterType === 'Where') {
25
25
  return parseWhereGrouper(args[0]);
26
26
  }
@@ -35,12 +35,12 @@ function parseFilterArgs(filterType, args) {
35
35
  throw new Error(`invalid arguments passed to a filter method ${JSON.stringify(args)}`);
36
36
  }
37
37
  }
38
- exports.parseFilterArgs = parseFilterArgs;
39
- function parseReferenceFilterArgs(lhs, op, rhs) {
38
+ exports.parseFilter = parseFilter;
39
+ function parseReferenceFilter(lhs, op, rhs) {
40
40
  return filter_node_js_1.filterNode.create(reference_parser_js_1.parseReferenceExpression(lhs), parseFilterOperator(op), reference_parser_js_1.parseReferenceExpression(rhs));
41
41
  }
42
- exports.parseReferenceFilterArgs = parseReferenceFilterArgs;
43
- function parseExistsFilterArgs(type, arg) {
42
+ exports.parseReferenceFilter = parseReferenceFilter;
43
+ function parseExistExpression(type, arg) {
44
44
  const node = object_utils_js_1.isFunction(arg)
45
45
  ? arg(new sub_query_builder_js_1.SubQueryBuilder()).toOperationNode()
46
46
  : arg.toOperationNode();
@@ -49,7 +49,7 @@ function parseExistsFilterArgs(type, arg) {
49
49
  }
50
50
  return filter_node_js_1.filterNode.create(undefined, operator_node_js_1.operatorNode.create(type), node);
51
51
  }
52
- exports.parseExistsFilterArgs = parseExistsFilterArgs;
52
+ exports.parseExistExpression = parseExistExpression;
53
53
  function parseThreeArgFilter(left, op, right) {
54
54
  if ((op === 'is' || op === 'is not') && (object_utils_js_1.isNull(right) || object_utils_js_1.isBoolean(right))) {
55
55
  return parseIsFilter(left, op, right);
@@ -57,7 +57,7 @@ function parseThreeArgFilter(left, op, right) {
57
57
  return filter_node_js_1.filterNode.create(reference_parser_js_1.parseReferenceExpression(left), parseFilterOperator(op), value_parser_js_1.parseValueExpressionOrList(right));
58
58
  }
59
59
  function parseIsFilter(left, op, right) {
60
- return filter_node_js_1.filterNode.create(reference_parser_js_1.parseReferenceExpression(left), parseFilterOperator(op), index_js_1.valueNode.createImmediate(right));
60
+ return filter_node_js_1.filterNode.create(reference_parser_js_1.parseReferenceExpression(left), parseFilterOperator(op), value_node_js_1.valueNode.createImmediate(right));
61
61
  }
62
62
  function parseFilterOperator(op) {
63
63
  if (operation_node_source_js_1.isOperationNodeSource(op)) {
@@ -72,9 +72,6 @@ function parseFilterOperator(op) {
72
72
  throw new Error(`invalid comparison operator ${JSON.stringify(op)} passed to a filter method`);
73
73
  }
74
74
  function parseWhereGrouper(grouper) {
75
- if (!object_utils_js_1.isFunction(grouper)) {
76
- throw new Error(`invalid call to queryBuilder.where: ${JSON.stringify(grouper)}`);
77
- }
78
75
  const query = grouper(query_builder_js_1.createEmptySelectQuery());
79
76
  const queryNode = query.toOperationNode();
80
77
  if (!queryNode.where) {
@@ -83,9 +80,6 @@ function parseWhereGrouper(grouper) {
83
80
  return parens_node_js_1.parensNode.create(queryNode.where.where);
84
81
  }
85
82
  function parseHavingGrouper(grouper) {
86
- if (!object_utils_js_1.isFunction(grouper)) {
87
- throw new Error(`invalid call to queryBuilder.having: ${JSON.stringify(grouper)}`);
88
- }
89
83
  const query = grouper(query_builder_js_1.createEmptySelectQuery());
90
84
  const queryNode = query.toOperationNode();
91
85
  if (!queryNode.having) {
@@ -94,9 +88,6 @@ function parseHavingGrouper(grouper) {
94
88
  return parens_node_js_1.parensNode.create(queryNode.having.having);
95
89
  }
96
90
  function parseOnGrouper(grouper) {
97
- if (!object_utils_js_1.isFunction(grouper)) {
98
- throw new Error(`invalid call to joinBuilder.on: ${JSON.stringify(grouper)}`);
99
- }
100
91
  const joinBuilder = grouper(createEmptyJoinBuilder());
101
92
  const joinNode = joinBuilder.toOperationNode();
102
93
  if (!joinNode.on) {
@@ -1,3 +1,11 @@
1
1
  import { ColumnNode } from '../operation-node/column-node.js';
2
2
  import { InsertValuesNode } from '../operation-node/insert-query-node.js';
3
- export declare function parseInsertValuesArgs(args: any): [ReadonlyArray<ColumnNode>, ReadonlyArray<InsertValuesNode>];
3
+ import { AnyQueryBuilder, AnyRawBuilder, GeneratedPlaceholder } from '../query-builder/type-utils.js';
4
+ import { PrimitiveValue } from '../util/object-utils.js';
5
+ export declare type InsertObject<DB, TB extends keyof DB> = {
6
+ [C in keyof DB[TB]]: InsertValueExpression<DB[TB][C]>;
7
+ };
8
+ export declare type InsertObjectOrList<DB, TB extends keyof DB> = InsertObject<DB, TB> | InsertObject<DB, TB>[];
9
+ declare type InsertValueExpression<T extends PrimitiveValue> = T | AnyQueryBuilder | AnyRawBuilder | GeneratedPlaceholder;
10
+ export declare function parseInsertObjectOrList(args: InsertObjectOrList<any, any>): [ReadonlyArray<ColumnNode>, ReadonlyArray<InsertValuesNode>];
11
+ export {};
@@ -1,21 +1,23 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.parseInsertValuesArgs = void 0;
3
+ exports.parseInsertObjectOrList = void 0;
4
4
  const column_node_js_1 = require("../operation-node/column-node.js");
5
5
  const primitive_value_list_node_js_1 = require("../operation-node/primitive-value-list-node.js");
6
6
  const value_list_node_js_1 = require("../operation-node/value-list-node.js");
7
+ const generated_placeholder_js_1 = require("../util/generated-placeholder.js");
7
8
  const object_utils_js_1 = require("../util/object-utils.js");
8
9
  const mutation_parser_js_1 = require("./mutation-parser.js");
9
- function parseInsertValuesArgs(args) {
10
+ function parseInsertObjectOrList(args) {
10
11
  return parseInsertColumnsAndValues(Array.isArray(args) ? args : [args]);
11
12
  }
12
- exports.parseInsertValuesArgs = parseInsertValuesArgs;
13
+ exports.parseInsertObjectOrList = parseInsertObjectOrList;
13
14
  function parseInsertColumnsAndValues(rows) {
14
15
  const columns = [];
15
16
  const values = [];
16
17
  for (const row of rows) {
17
18
  for (const column of Object.keys(row)) {
18
- if (!columns.includes(column)) {
19
+ const value = row[column];
20
+ if (!columns.includes(column) && !generated_placeholder_js_1.isGeneratedPlaceholder(value)) {
19
21
  columns.push(column);
20
22
  }
21
23
  }
@@ -24,7 +26,9 @@ function parseInsertColumnsAndValues(rows) {
24
26
  const rowValues = columns.map(() => null);
25
27
  for (const column of Object.keys(row)) {
26
28
  const columnIdx = columns.indexOf(column);
27
- rowValues[columnIdx] = row[column];
29
+ if (columnIdx !== -1) {
30
+ rowValues[columnIdx] = row[column];
31
+ }
28
32
  }
29
33
  if (rowValues.every(object_utils_js_1.isPrimitive)) {
30
34
  values.push(primitive_value_list_node_js_1.primitiveValueListNode.create(rowValues));
@@ -2,6 +2,6 @@ import { JoinNode, JoinType } from '../operation-node/join-node.js';
2
2
  import { AnyColumn, AnyColumnWithTable } from '../query-builder/type-utils.js';
3
3
  import { ExtractAliasFromTableExpression, TableExpressionDatabaseType } from './table-parser.js';
4
4
  import { JoinBuilder } from '../query-builder/join-builder.js';
5
- export declare type JoinReferenceArg<DB, TB extends keyof DB, F> = AnyColumn<TableExpressionDatabaseType<DB, F>, TB | ExtractAliasFromTableExpression<DB, F>> | AnyColumnWithTable<TableExpressionDatabaseType<DB, F>, TB | ExtractAliasFromTableExpression<DB, F>>;
6
- export declare type JoinCallbackArg<DB, TB extends keyof DB, F> = (join: JoinBuilder<TableExpressionDatabaseType<DB, F>, TB | ExtractAliasFromTableExpression<DB, F>>) => JoinBuilder<any, any>;
5
+ export declare type JoinReferenceExpression<DB, TB extends keyof DB, F> = AnyColumn<TableExpressionDatabaseType<DB, F>, TB | ExtractAliasFromTableExpression<DB, F>> | AnyColumnWithTable<TableExpressionDatabaseType<DB, F>, TB | ExtractAliasFromTableExpression<DB, F>>;
6
+ export declare type JoinCallbackExpression<DB, TB extends keyof DB, F> = (join: JoinBuilder<TableExpressionDatabaseType<DB, F>, TB | ExtractAliasFromTableExpression<DB, F>>) => JoinBuilder<any, any>;
7
7
  export declare function parseJoinArgs(joinType: JoinType, args: any[]): JoinNode;
@@ -24,5 +24,5 @@ function parseCallbackJoin(joinType, from, callback) {
24
24
  }
25
25
  function parseSingleOnJoin(joinType, from, lhsColumn, rhsColumn) {
26
26
  const tableNode = table_parser_js_1.parseTableExpression(from);
27
- return join_node_js_1.joinNode.cloneWithOn(join_node_js_1.joinNode.create(joinType, tableNode), 'and', filter_parser_js_1.parseReferenceFilterArgs(lhsColumn, '=', rhsColumn));
27
+ return join_node_js_1.joinNode.cloneWithOn(join_node_js_1.joinNode.create(joinType, tableNode), 'and', filter_parser_js_1.parseReferenceFilter(lhsColumn, '=', rhsColumn));
28
28
  }
@@ -1,11 +1,10 @@
1
1
  import { RawNode } from '../operation-node/raw-node.js';
2
2
  import { SelectQueryNode } from '../operation-node/select-query-node.js';
3
3
  import { ValueNode } from '../operation-node/value-node.js';
4
- import { AnyQueryBuilder } from '../query-builder/type-utils.js';
5
- import { RawBuilder } from '../raw-builder/raw-builder.js';
4
+ import { AnyQueryBuilder, AnyRawBuilder } from '../query-builder/type-utils.js';
6
5
  import { PrimitiveValue } from '../util/object-utils.js';
7
6
  export declare type MutationObject<DB, TB extends keyof DB> = {
8
7
  [C in keyof DB[TB]]?: MutationValueExpression<DB[TB][C]>;
9
8
  };
10
- export declare type MutationValueExpression<T extends PrimitiveValue> = T | AnyQueryBuilder | RawBuilder<any>;
9
+ export declare type MutationValueExpression<T extends PrimitiveValue> = T | AnyQueryBuilder | AnyRawBuilder;
11
10
  export declare function parseMutationValueExpression(value: MutationValueExpression<PrimitiveValue>): ValueNode | RawNode | SelectQueryNode;
@@ -2,13 +2,18 @@ import { AliasNode } from '../operation-node/alias-node.js';
2
2
  import { ColumnNode } from '../operation-node/column-node.js';
3
3
  import { ReferenceExpressionNode } from '../operation-node/operation-node-utils.js';
4
4
  import { ReferenceNode } from '../operation-node/reference-node.js';
5
- import { RawBuilder } from '../raw-builder/raw-builder.js';
6
- import { AnyColumn, AnyColumnWithTable, AnyQueryBuilder, QueryBuilderFactory, RawBuilderFactory } from '../query-builder/type-utils.js';
5
+ import { PrimitiveValue } from '../util/object-utils.js';
6
+ import { AnyColumn, AnyColumnWithTable, AnyQueryBuilder, AnyRawBuilder, QueryBuilderFactory, RawBuilderFactory, RowType, ValueType } from '../query-builder/type-utils.js';
7
7
  import { DynamicReferenceBuilder } from '../dynamic/dynamic-reference-builder.js';
8
- export declare type ReferenceExpression<DB, TB extends keyof DB> = AnyColumn<DB, TB> | AnyColumnWithTable<DB, TB> | AnyQueryBuilder | QueryBuilderFactory<DB, TB> | RawBuilder<any> | RawBuilderFactory<DB, TB> | DynamicReferenceBuilder<any>;
8
+ import { RawBuilder } from '../raw-builder/raw-builder.js';
9
+ import { QueryBuilder } from '../query-builder/query-builder.js';
10
+ export declare type ReferenceExpression<DB, TB extends keyof DB> = AnyColumn<DB, TB> | AnyColumnWithTable<DB, TB> | AnyQueryBuilder | QueryBuilderFactory<DB, TB> | AnyRawBuilder | RawBuilderFactory<DB, TB> | DynamicReferenceBuilder<any>;
9
11
  export declare type ReferenceExpressionOrList<DB, TB extends keyof DB> = ReferenceExpression<DB, TB> | ReferenceExpression<DB, TB>[];
12
+ export declare type ExtractTypeFromReferenceExpression<DB, TB extends keyof DB, RE> = RE extends string ? ExtractTypeFromStringReference<DB, TB, RE> : RE extends RawBuilder<infer O> ? O : RE extends (qb: any) => RawBuilder<infer O> ? O : RE extends QueryBuilder<any, any, infer O> ? ValueType<O> : RE extends (qb: any) => QueryBuilder<any, any, infer O> ? ValueType<O> : PrimitiveValue;
13
+ declare type ExtractTypeFromStringReference<DB, TB extends keyof DB, S extends string, R = RowType<DB, TB>> = S extends `${infer SC}.${infer T}.${infer C}` ? `${SC}.${T}` extends TB ? C extends keyof DB[`${SC}.${T}`] ? DB[`${SC}.${T}`][C] : never : never : S extends `${infer T}.${infer C}` ? T extends TB ? C extends keyof DB[T] ? DB[T][C] : never : never : S extends keyof R ? R[S] : PrimitiveValue;
10
14
  export declare function parseReferenceExpressionOrList(arg: ReferenceExpressionOrList<any, any>): ReferenceExpressionNode[];
11
15
  export declare function parseReferenceExpression(arg: ReferenceExpression<any, any>): ReferenceExpressionNode;
12
16
  export declare function parseStringReference(str: string): ColumnNode | ReferenceNode;
13
17
  export declare function parseAliasedStringReference(str: string): ColumnNode | ReferenceNode | AliasNode;
14
18
  export declare function parseColumnName(column: AnyColumn<any, any>): ColumnNode;
19
+ export {};
@@ -1,7 +1,7 @@
1
1
  import { QueryBuilder } from '../query-builder/query-builder.js';
2
2
  import { DeleteResultTypeTag, InsertResultTypeTag, UpdateResultTypeTag } from '../query-builder/type-utils.js';
3
- import { SelectResultType } from './select-parser.js';
3
+ import { Selection } from './select-parser.js';
4
4
  /**
5
5
  * `returning` method output query builder type
6
6
  */
7
- export declare type QueryBuilderWithReturning<DB, TB extends keyof DB, O, S> = QueryBuilder<DB, TB, O extends InsertResultTypeTag ? SelectResultType<DB, TB, S> : O extends DeleteResultTypeTag ? SelectResultType<DB, TB, S> : O extends UpdateResultTypeTag ? SelectResultType<DB, TB, S> : O & SelectResultType<DB, TB, S>>;
7
+ export declare type QueryBuilderWithReturning<DB, TB extends keyof DB, O, S> = QueryBuilder<DB, TB, O extends InsertResultTypeTag ? Selection<DB, TB, S> : O extends DeleteResultTypeTag ? Selection<DB, TB, S> : O extends UpdateResultTypeTag ? Selection<DB, TB, S> : O & Selection<DB, TB, S>>;
@@ -1,29 +1,30 @@
1
1
  import { AliasedRawBuilder } from '../raw-builder/raw-builder.js';
2
2
  import { AliasedQueryBuilder, QueryBuilder } from '../query-builder/query-builder.js';
3
3
  import { SelectionNode } from '../operation-node/selection-node.js';
4
- import { AliasedQueryBuilderFactory, AliasedRawBuilderFactory, AnyAliasedColumn, AnyAliasedColumnWithTable, AnyAliasedQueryBuilder, AnyColumn, AnyColumnWithTable, InsertResultTypeTag, RowType, ValueType } from '../query-builder/type-utils.js';
4
+ import { AliasedQueryBuilderFactory, AliasedRawBuilderFactory, AnyAliasedColumn, AnyAliasedColumnWithTable, AnyAliasedQueryBuilder, AnyAliasedRawBuilder, AnyColumn, AnyColumnWithTable, InsertResultTypeTag, RowType, ValueType } from '../query-builder/type-utils.js';
5
5
  import { DynamicReferenceBuilder } from '../dynamic/dynamic-reference-builder.js';
6
6
  /**
7
7
  * A selection expression.
8
8
  */
9
- export declare type SelectExpression<DB, TB extends keyof DB> = AnyAliasedColumnWithTable<DB, TB> | AnyAliasedColumn<DB, TB> | AnyColumnWithTable<DB, TB> | AnyColumn<DB, TB> | AliasedRawBuilder<any, any> | AliasedRawBuilderFactory<DB, TB> | AnyAliasedQueryBuilder | AliasedQueryBuilderFactory<DB, TB> | DynamicReferenceBuilder<any>;
9
+ export declare type SelectExpression<DB, TB extends keyof DB> = AnyAliasedColumnWithTable<DB, TB> | AnyAliasedColumn<DB, TB> | AnyColumnWithTable<DB, TB> | AnyColumn<DB, TB> | AnyAliasedRawBuilder | AliasedRawBuilderFactory<DB, TB> | AnyAliasedQueryBuilder | AliasedQueryBuilderFactory<DB, TB> | DynamicReferenceBuilder<any>;
10
+ export declare type SelectExpressionOrList<DB, TB extends keyof DB> = SelectExpression<DB, TB> | ReadonlyArray<SelectExpression<DB, TB>>;
10
11
  /**
11
12
  * Given a selection expression returns a query builder type that
12
13
  * has the selection.
13
14
  */
14
- export declare type QueryBuilderWithSelection<DB, TB extends keyof DB, O, S> = QueryBuilder<DB, TB, O extends InsertResultTypeTag ? InsertResultTypeTag : O & SelectResultType<DB, TB, S>>;
15
+ export declare type QueryBuilderWithSelection<DB, TB extends keyof DB, O, S> = QueryBuilder<DB, TB, O extends InsertResultTypeTag ? InsertResultTypeTag : O & Selection<DB, TB, S>>;
15
16
  /**
16
17
  * `selectAll` output query builder type.
17
18
  */
18
19
  export declare type SelectAllQueryBuilder<DB, TB extends keyof DB, O, S extends keyof DB> = QueryBuilder<DB, TB, O & RowType<DB, S>>;
19
- export declare type SelectResultType<DB, TB extends keyof DB, S> = {
20
+ export declare type Selection<DB, TB extends keyof DB, S> = {
20
21
  [A in ExtractAliasFromSelectExpression<S>]: ExtractTypeFromSelectExpression<DB, TB, S, A>;
21
22
  };
22
23
  declare type ExtractAliasFromSelectExpression<S> = S extends string ? ExtractAliasFromStringSelectExpression<S> : S extends AliasedRawBuilder<any, infer RA> ? RA : S extends (qb: any) => AliasedRawBuilder<any, infer RA> ? RA : S extends AliasedQueryBuilder<any, any, any, infer QA> ? QA : S extends (qb: any) => AliasedQueryBuilder<any, any, any, infer QA> ? QA : S extends DynamicReferenceBuilder<infer RA> ? ExtractAliasFromStringSelectExpression<RA> : never;
23
24
  declare type ExtractAliasFromStringSelectExpression<S extends string> = S extends `${string}.${string}.${string} as ${infer A}` ? A : S extends `${string}.${string} as ${infer A}` ? A : S extends `${string} as ${infer A}` ? A : S extends `${string}.${string}.${infer C}` ? C : S extends `${string}.${infer C}` ? C : S;
24
25
  declare type ExtractTypeFromSelectExpression<DB, TB extends keyof DB, S, A extends keyof any> = S extends string ? ExtractTypeFromStringSelectExpression<DB, TB, S, A> : S extends AliasedRawBuilder<infer O, infer RA> ? RA extends A ? O : never : S extends (qb: any) => AliasedRawBuilder<infer O, infer RA> ? RA extends A ? O : never : S extends AliasedQueryBuilder<any, any, infer O, infer QA> ? QA extends A ? ValueType<O> : never : S extends (qb: any) => AliasedQueryBuilder<any, any, infer O, infer QA> ? QA extends A ? ValueType<O> : never : S extends DynamicReferenceBuilder<infer RA> ? A extends ExtractAliasFromStringSelectExpression<RA> ? ExtractTypeFromStringSelectExpression<DB, TB, RA, A> | undefined : never : never;
25
26
  declare type ExtractTypeFromStringSelectExpression<DB, TB extends keyof DB, S extends string, A extends keyof any, R = RowType<DB, TB>> = S extends `${infer SC}.${infer T}.${infer C} as ${infer RA}` ? RA extends A ? `${SC}.${T}` extends TB ? C extends keyof DB[`${SC}.${T}`] ? DB[`${SC}.${T}`][C] : never : never : never : S extends `${infer T}.${infer C} as ${infer RA}` ? RA extends A ? T extends TB ? C extends keyof DB[T] ? DB[T][C] : never : never : never : S extends `${infer C} as ${infer RA}` ? RA extends A ? C extends keyof R ? R[C] : never : never : S extends `${infer SC}.${infer T}.${infer C}` ? C extends A ? `${SC}.${T}` extends TB ? C extends keyof DB[`${SC}.${T}`] ? DB[`${SC}.${T}`][C] : never : never : never : S extends `${infer T}.${infer C}` ? C extends A ? T extends TB ? C extends keyof DB[T] ? DB[T][C] : never : never : never : S extends A ? S extends keyof R ? R[S] : never : never;
26
- export declare function parseSelectExpressionOrList(selection: SelectExpression<any, any> | SelectExpression<any, any>[]): SelectionNode[];
27
+ export declare function parseSelectExpressionOrList(selection: SelectExpressionOrList<any, any>): SelectionNode[];
27
28
  export declare function parseSelectAllArgs(table?: string | string[]): SelectionNode[];
28
29
  export declare function parseSelectAllArg(table: string): SelectionNode;
29
30
  export {};
@@ -7,7 +7,7 @@ const selection_node_js_1 = require("../operation-node/selection-node.js");
7
7
  const reference_parser_js_1 = require("./reference-parser.js");
8
8
  const sub_query_builder_js_1 = require("../query-builder/sub-query-builder.js");
9
9
  function parseSelectExpressionOrList(selection) {
10
- if (Array.isArray(selection)) {
10
+ if (object_utils_js_1.isReadonlyArray(selection)) {
11
11
  return selection.map((it) => parseSelectExpression(it));
12
12
  }
13
13
  else {
@@ -1,10 +1,10 @@
1
1
  import { AliasedQueryBuilder, QueryBuilder } from '../query-builder/query-builder.js';
2
2
  import { TableNode } from '../operation-node/table-node.js';
3
- import { AliasedQueryBuilderFactory, AnyAliasedQueryBuilder } from '../query-builder/type-utils.js';
3
+ import { AliasedQueryBuilderFactory, AnyAliasedQueryBuilder, AnyAliasedRawBuilder } from '../query-builder/type-utils.js';
4
4
  import { AliasedRawBuilder } from '../raw-builder/raw-builder.js';
5
5
  import { TableExpressionNode } from '../operation-node/operation-node-utils.js';
6
6
  export declare type TableExpression<DB, TB extends keyof DB> = TableReference<DB> | AnyAliasedQueryBuilder | AliasedQueryBuilderFactory<DB, TB>;
7
- export declare type TableReference<DB> = AnyAliasedTable<DB, any, any> | AnyTable<DB> | AliasedRawBuilder<any, any>;
7
+ export declare type TableReference<DB> = AnyAliasedTable<DB, any, any> | AnyTable<DB> | AnyAliasedRawBuilder;
8
8
  export declare type QueryBuilderWithTable<DB, TB extends keyof DB, O, TE> = QueryBuilder<TableExpressionDatabaseType<DB, TE>, TB | ExtractAliasFromTableExpression<DB, TE>, O>;
9
9
  export declare type TableExpressionDatabaseType<DB, TE> = DB extends ExtractDatabaseTypeFromTableExpression<DB, TE> ? DB : DB & ExtractDatabaseTypeFromTableExpression<DB, TE>;
10
10
  export declare type ExtractAliasFromTableExpression<DB, TE> = TE extends `${string} as ${infer TA}` ? TA : TE extends keyof DB ? TE : TE extends AliasedQueryBuilder<any, any, any, infer QA> ? QA : TE extends (qb: any) => AliasedQueryBuilder<any, any, any, infer QA> ? QA : TE extends (qb: any) => AliasedRawBuilder<any, infer RA> ? RA : never;
@@ -1,8 +1,7 @@
1
1
  import { ValueExpressionNode } from '../operation-node/operation-node-utils.js';
2
- import { PrimitiveValue } from '../util/object-utils.js';
3
- import { AnyQueryBuilder, QueryBuilderFactory, RawBuilderFactory } from '../query-builder/type-utils.js';
4
- import { RawBuilder } from '../raw-builder/raw-builder.js';
5
- export declare type ValueExpression<DB, TB extends keyof DB> = PrimitiveValue | AnyQueryBuilder | QueryBuilderFactory<DB, TB> | RawBuilder<any> | RawBuilderFactory<DB, TB>;
6
- export declare type ValueExpressionOrList<DB, TB extends keyof DB> = ValueExpression<DB, TB> | ValueExpression<DB, TB>[];
7
- export declare function parseValueExpressionOrList(arg: ValueExpressionOrList<any, any>): ValueExpressionNode;
8
- export declare function parseValueExpression(arg: ValueExpression<any, any>): ValueExpressionNode;
2
+ import { AnyQueryBuilder, AnyRawBuilder, QueryBuilderFactory, RawBuilderFactory } from '../query-builder/type-utils.js';
3
+ import { ExtractTypeFromReferenceExpression } from './reference-parser.js';
4
+ export declare type ValueExpression<DB, TB extends keyof DB, RE> = ExtractTypeFromReferenceExpression<DB, TB, RE> | AnyQueryBuilder | QueryBuilderFactory<DB, TB> | AnyRawBuilder | RawBuilderFactory<DB, TB>;
5
+ export declare type ValueExpressionOrList<DB, TB extends keyof DB, RE> = ValueExpression<DB, TB, RE> | ValueExpression<DB, TB, RE>[];
6
+ export declare function parseValueExpressionOrList(arg: ValueExpressionOrList<any, any, any>): ValueExpressionNode;
7
+ export declare function parseValueExpression(arg: ValueExpression<any, any, any>): ValueExpressionNode;
@@ -9,6 +9,8 @@ const value_node_js_1 = require("../operation-node/value-node.js");
9
9
  const object_utils_js_1 = require("../util/object-utils.js");
10
10
  const query_node_js_1 = require("../operation-node/query-node.js");
11
11
  const sub_query_builder_js_1 = require("../query-builder/sub-query-builder.js");
12
+ const raw_node_js_1 = require("../operation-node/raw-node.js");
13
+ const select_query_node_js_1 = require("../operation-node/select-query-node.js");
12
14
  function parseValueExpressionOrList(arg) {
13
15
  if (Array.isArray(arg)) {
14
16
  return parseValueExpressionList(arg);
@@ -24,7 +26,7 @@ function parseValueExpression(arg) {
24
26
  }
25
27
  else if (operation_node_source_js_1.isOperationNodeSource(arg)) {
26
28
  const node = arg.toOperationNode();
27
- if (!query_node_js_1.queryNode.isMutating(node)) {
29
+ if (raw_node_js_1.rawNode.is(node) || select_query_node_js_1.selectQueryNode.is(node)) {
28
30
  return node;
29
31
  }
30
32
  }
@@ -2,7 +2,8 @@ import { CommonTableExpressionNode } from '../operation-node/common-table-expres
2
2
  import { QueryBuilder } from '../query-builder/query-builder.js';
3
3
  import { QueryCreator } from '../query-creator.js';
4
4
  import { RawBuilder } from '../raw-builder/raw-builder.js';
5
- export declare type CommonTableExpression<DB> = (creator: QueryCreator<DB>) => QueryBuilder<DB, any> | RawBuilder<any>;
5
+ import { AnyRawBuilder } from '../query-builder/type-utils.js';
6
+ export declare type CommonTableExpression<DB> = (creator: QueryCreator<DB>) => QueryBuilder<DB, any> | AnyRawBuilder;
6
7
  export declare type QueryCreatorWithCommonTableExpression<DB, N extends string, E extends CommonTableExpression<DB>> = QueryCreator<DB & Record<N, ExtractRowTypeFromCommonTableExpression<E>>>;
7
8
  declare type ExtractRowTypeFromCommonTableExpression<E> = E extends (creator: QueryCreator<any>) => infer Q ? Q extends QueryBuilder<any, any, infer QO> ? QO : Q extends RawBuilder<infer RO> ? RO : never : never;
8
9
  export declare function parseCommonTableExpression(name: string, expression: CommonTableExpression<any>): CommonTableExpressionNode;