kysely 0.24.1 → 0.25.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/README.md +30 -13
- package/dist/cjs/dialect/mysql/mysql-dialect-config.d.ts +2 -1
- package/dist/cjs/dialect/postgres/postgres-introspector.js +4 -1
- package/dist/cjs/driver/runtime-driver.js +6 -6
- package/dist/cjs/dynamic/dynamic.d.ts +1 -1
- package/dist/cjs/dynamic/dynamic.js +1 -1
- package/dist/cjs/expression/expression-builder.d.ts +56 -1
- package/dist/cjs/expression/expression-builder.js +10 -0
- package/dist/cjs/helpers/mysql.d.ts +3 -3
- package/dist/cjs/helpers/mysql.js +2 -2
- package/dist/cjs/helpers/postgres.d.ts +1 -1
- package/dist/cjs/index.d.ts +4 -0
- package/dist/cjs/index.js +4 -0
- package/dist/cjs/kysely.d.ts +19 -2
- package/dist/cjs/kysely.js +28 -1
- package/dist/cjs/operation-node/aggregate-function-node.d.ts +3 -7
- package/dist/cjs/operation-node/aggregate-function-node.js +1 -1
- package/dist/cjs/operation-node/alter-column-node.d.ts +1 -2
- package/dist/cjs/operation-node/alter-table-node.d.ts +1 -1
- package/dist/cjs/operation-node/alter-table-node.js +1 -2
- package/dist/cjs/operation-node/case-node.d.ts +19 -0
- package/dist/cjs/operation-node/case-node.js +42 -0
- package/dist/cjs/operation-node/create-index-node.d.ts +2 -1
- package/dist/cjs/operation-node/create-index-node.js +6 -0
- package/dist/cjs/operation-node/data-type-node.d.ts +1 -1
- package/dist/cjs/operation-node/operation-node-transformer.d.ts +4 -0
- package/dist/cjs/operation-node/operation-node-transformer.js +20 -2
- package/dist/cjs/operation-node/operation-node-visitor.d.ts +4 -0
- package/dist/cjs/operation-node/operation-node-visitor.js +2 -0
- package/dist/cjs/operation-node/operation-node.d.ts +1 -1
- package/dist/cjs/operation-node/when-node.d.ts +14 -0
- package/dist/cjs/operation-node/when-node.js +24 -0
- package/dist/cjs/parser/binary-operation-parser.d.ts +1 -0
- package/dist/cjs/parser/binary-operation-parser.js +18 -2
- package/dist/cjs/parser/expression-parser.d.ts +2 -1
- package/dist/cjs/parser/order-by-parser.d.ts +1 -0
- package/dist/cjs/parser/order-by-parser.js +5 -1
- package/dist/cjs/parser/reference-parser.d.ts +6 -2
- package/dist/cjs/parser/reference-parser.js +16 -1
- package/dist/cjs/parser/select-parser.d.ts +4 -4
- package/dist/cjs/parser/table-parser.d.ts +5 -4
- package/dist/cjs/parser/with-parser.d.ts +4 -3
- package/dist/cjs/query-builder/case-builder.d.ts +111 -0
- package/dist/cjs/query-builder/case-builder.js +75 -0
- package/dist/cjs/query-builder/delete-query-builder.d.ts +55 -13
- package/dist/cjs/query-builder/delete-query-builder.js +44 -0
- package/dist/cjs/query-builder/function-module.d.ts +36 -5
- package/dist/cjs/query-builder/function-module.js +12 -16
- package/dist/cjs/query-builder/insert-query-builder.d.ts +44 -3
- package/dist/cjs/query-builder/insert-query-builder.js +49 -1
- package/dist/cjs/query-builder/select-query-builder.d.ts +54 -13
- package/dist/cjs/query-builder/select-query-builder.js +43 -0
- package/dist/cjs/query-builder/update-query-builder.d.ts +65 -20
- package/dist/cjs/query-builder/update-query-builder.js +47 -0
- package/dist/cjs/query-compiler/default-query-compiler.d.ts +4 -0
- package/dist/cjs/query-compiler/default-query-compiler.js +30 -3
- package/dist/cjs/schema/alter-column-builder.d.ts +2 -2
- package/dist/cjs/schema/alter-column-builder.js +2 -2
- package/dist/cjs/schema/create-index-builder.d.ts +49 -7
- package/dist/cjs/schema/create-index-builder.js +51 -13
- package/dist/cjs/schema/schema.js +1 -1
- package/dist/cjs/util/column-type.d.ts +3 -2
- package/dist/cjs/util/log.d.ts +3 -3
- package/dist/cjs/util/log.js +4 -4
- package/dist/cjs/util/object-utils.d.ts +2 -1
- package/dist/cjs/util/type-utils.d.ts +43 -29
- package/dist/esm/dialect/mysql/mysql-dialect-config.d.ts +2 -1
- package/dist/esm/dialect/postgres/postgres-introspector.js +4 -1
- package/dist/esm/driver/runtime-driver.js +6 -6
- package/dist/esm/dynamic/dynamic.d.ts +1 -1
- package/dist/esm/dynamic/dynamic.js +1 -1
- package/dist/esm/expression/expression-builder.d.ts +56 -1
- package/dist/esm/expression/expression-builder.js +11 -1
- package/dist/esm/helpers/mysql.d.ts +3 -3
- package/dist/esm/helpers/mysql.js +2 -2
- package/dist/esm/helpers/postgres.d.ts +1 -1
- package/dist/esm/index.d.ts +4 -0
- package/dist/esm/index.js +4 -0
- package/dist/esm/kysely.d.ts +19 -2
- package/dist/esm/kysely.js +29 -2
- package/dist/esm/operation-node/aggregate-function-node.d.ts +3 -7
- package/dist/esm/operation-node/aggregate-function-node.js +1 -1
- package/dist/esm/operation-node/alter-column-node.d.ts +1 -2
- package/dist/esm/operation-node/alter-table-node.d.ts +1 -1
- package/dist/esm/operation-node/alter-table-node.js +1 -2
- package/dist/esm/operation-node/case-node.d.ts +19 -0
- package/dist/esm/operation-node/case-node.js +40 -0
- package/dist/esm/operation-node/create-index-node.d.ts +2 -1
- package/dist/esm/operation-node/create-index-node.js +6 -0
- package/dist/esm/operation-node/data-type-node.d.ts +1 -1
- package/dist/esm/operation-node/operation-node-transformer.d.ts +4 -0
- package/dist/esm/operation-node/operation-node-transformer.js +20 -2
- package/dist/esm/operation-node/operation-node-visitor.d.ts +4 -0
- package/dist/esm/operation-node/operation-node-visitor.js +2 -0
- package/dist/esm/operation-node/operation-node.d.ts +1 -1
- package/dist/esm/operation-node/when-node.d.ts +14 -0
- package/dist/esm/operation-node/when-node.js +22 -0
- package/dist/esm/parser/binary-operation-parser.d.ts +1 -0
- package/dist/esm/parser/binary-operation-parser.js +16 -1
- package/dist/esm/parser/expression-parser.d.ts +2 -1
- package/dist/esm/parser/order-by-parser.d.ts +1 -0
- package/dist/esm/parser/order-by-parser.js +3 -0
- package/dist/esm/parser/reference-parser.d.ts +6 -2
- package/dist/esm/parser/reference-parser.js +14 -0
- package/dist/esm/parser/select-parser.d.ts +4 -4
- package/dist/esm/parser/table-parser.d.ts +5 -4
- package/dist/esm/parser/with-parser.d.ts +4 -3
- package/dist/esm/query-builder/case-builder.d.ts +111 -0
- package/dist/esm/query-builder/case-builder.js +69 -0
- package/dist/esm/query-builder/delete-query-builder.d.ts +55 -13
- package/dist/esm/query-builder/delete-query-builder.js +44 -0
- package/dist/esm/query-builder/function-module.d.ts +36 -5
- package/dist/esm/query-builder/function-module.js +13 -17
- package/dist/esm/query-builder/insert-query-builder.d.ts +44 -3
- package/dist/esm/query-builder/insert-query-builder.js +49 -1
- package/dist/esm/query-builder/select-query-builder.d.ts +54 -13
- package/dist/esm/query-builder/select-query-builder.js +43 -0
- package/dist/esm/query-builder/update-query-builder.d.ts +65 -20
- package/dist/esm/query-builder/update-query-builder.js +47 -0
- package/dist/esm/query-compiler/default-query-compiler.d.ts +4 -0
- package/dist/esm/query-compiler/default-query-compiler.js +30 -3
- package/dist/esm/schema/alter-column-builder.d.ts +2 -2
- package/dist/esm/schema/alter-column-builder.js +2 -2
- package/dist/esm/schema/create-index-builder.d.ts +49 -7
- package/dist/esm/schema/create-index-builder.js +52 -14
- package/dist/esm/schema/schema.js +1 -1
- package/dist/esm/util/column-type.d.ts +3 -2
- package/dist/esm/util/log.d.ts +3 -3
- package/dist/esm/util/log.js +4 -4
- package/dist/esm/util/object-utils.d.ts +2 -1
- package/dist/esm/util/type-utils.d.ts +43 -29
- package/package.json +1 -1
|
@@ -2,10 +2,7 @@ import { SelectQueryBuilder } from '../query-builder/select-query-builder.js';
|
|
|
2
2
|
import { InsertResult } from '../query-builder/insert-result.js';
|
|
3
3
|
import { DeleteResult } from '../query-builder/delete-result.js';
|
|
4
4
|
import { UpdateResult } from '../query-builder/update-result.js';
|
|
5
|
-
|
|
6
|
-
* Given an object type, extracts the union of all value types.
|
|
7
|
-
*/
|
|
8
|
-
export declare type ValueType<T> = T[keyof T];
|
|
5
|
+
import { KyselyTypeError } from './type-error.js';
|
|
9
6
|
/**
|
|
10
7
|
* Given a database type and a union of table names in that db, returns
|
|
11
8
|
* a union type with all possible column names.
|
|
@@ -37,9 +34,9 @@ export declare type ValueType<T> = T[keyof T];
|
|
|
37
34
|
* // Columns == 'id' | 'name' | 'species'
|
|
38
35
|
* ```
|
|
39
36
|
*/
|
|
40
|
-
export declare type AnyColumn<DB, TB extends keyof DB> = {
|
|
37
|
+
export declare type AnyColumn<DB, TB extends keyof DB> = DrainOuterGeneric<{
|
|
41
38
|
[T in TB]: keyof DB[T];
|
|
42
|
-
}[TB] & string
|
|
39
|
+
}[TB] & string>;
|
|
43
40
|
/**
|
|
44
41
|
* Extracts a column type.
|
|
45
42
|
*/
|
|
@@ -102,9 +99,9 @@ export declare type ArrayItemType<T> = T extends ReadonlyArray<infer I> ? I : ne
|
|
|
102
99
|
export declare type AnySelectQueryBuilder = SelectQueryBuilder<any, any, any>;
|
|
103
100
|
export declare type SimplifySingleResult<O> = O extends InsertResult ? O : O extends DeleteResult ? O : O extends UpdateResult ? O : Simplify<O> | undefined;
|
|
104
101
|
export declare type SimplifyResult<O> = O extends InsertResult ? O : O extends DeleteResult ? O : O extends UpdateResult ? O : Simplify<O>;
|
|
105
|
-
export declare type Simplify<T> = {
|
|
102
|
+
export declare type Simplify<T> = DrainOuterGeneric<{
|
|
106
103
|
[K in keyof T]: T[K];
|
|
107
|
-
} & {}
|
|
104
|
+
} & {}>;
|
|
108
105
|
/**
|
|
109
106
|
* Represents a database row whose column names and their types are unknown.
|
|
110
107
|
*/
|
|
@@ -115,33 +112,50 @@ export declare type UnknownRow = Record<string, unknown>;
|
|
|
115
112
|
export declare type Nullable<T> = {
|
|
116
113
|
[P in keyof T]: T[P] | null;
|
|
117
114
|
};
|
|
118
|
-
/**
|
|
119
|
-
* Takes all properties from T1 and merges all properties from T2
|
|
120
|
-
* that don't exist in T1 as optional properties.
|
|
121
|
-
*
|
|
122
|
-
* Example:
|
|
123
|
-
*
|
|
124
|
-
* interface Person {
|
|
125
|
-
* name: string
|
|
126
|
-
* age: number
|
|
127
|
-
* }
|
|
128
|
-
*
|
|
129
|
-
* interface Pet {
|
|
130
|
-
* name: string
|
|
131
|
-
* species: 'cat' | 'dog'
|
|
132
|
-
* }
|
|
133
|
-
*
|
|
134
|
-
* type Merged = MergePartial<Person, Pet>
|
|
135
|
-
*
|
|
136
|
-
* // { name: string, age: number, species?: 'cat' | 'dog' }
|
|
137
|
-
*/
|
|
138
|
-
export declare type MergePartial<T1, T2> = T1 & Partial<Omit<T2, keyof T1>>;
|
|
139
115
|
/**
|
|
140
116
|
* Evaluates to `true` if `T` is `never`.
|
|
141
117
|
*/
|
|
142
118
|
export declare type IsNever<T> = [T] extends [never] ? true : false;
|
|
119
|
+
/**
|
|
120
|
+
* Evaluates to `true` if `T` is `any`.
|
|
121
|
+
*/
|
|
122
|
+
export declare type IsAny<T> = 0 extends T & 1 ? true : false;
|
|
143
123
|
/**
|
|
144
124
|
* Evaluates to `true` if the types `T` and `U` are equal.
|
|
145
125
|
*/
|
|
146
126
|
export declare type Equals<T, U> = (<G>() => G extends T ? 1 : 2) extends <G>() => G extends U ? 1 : 2 ? true : false;
|
|
127
|
+
export declare type NarrowPartial<S, T> = DrainOuterGeneric<{
|
|
128
|
+
[K in keyof S & string]: K extends keyof T ? T[K] extends S[K] ? T[K] : KyselyTypeError<`$narrowType() call failed: passed type does not exist in '${K}'s type union`> : S[K];
|
|
129
|
+
}>;
|
|
147
130
|
export declare type SqlBool = boolean | 0 | 1;
|
|
131
|
+
/**
|
|
132
|
+
* Utility to reduce depth of TypeScript's internal type instantiation stack.
|
|
133
|
+
*
|
|
134
|
+
* Example:
|
|
135
|
+
*
|
|
136
|
+
* ```ts
|
|
137
|
+
* type A<T> = { item: T }
|
|
138
|
+
*
|
|
139
|
+
* type Test<T> = A<
|
|
140
|
+
* A<A<A<A<A<A<A<A<A<A<A<A<A<A<A<A<A<A<A<A<A<A<A<A<T>>>>>>>>>>>>>>>>>>>>>>>>
|
|
141
|
+
* >
|
|
142
|
+
*
|
|
143
|
+
* type Error = Test<number> // Type instantiation is excessively deep and possibly infinite.ts (2589)
|
|
144
|
+
* ```
|
|
145
|
+
*
|
|
146
|
+
* To fix this, we can use `DrainOuterGeneric`:
|
|
147
|
+
*
|
|
148
|
+
* ```ts
|
|
149
|
+
* type A<T> = DrainOuterGeneric<{ item: T }>
|
|
150
|
+
*
|
|
151
|
+
* type Test<T> = A<
|
|
152
|
+
* A<A<A<A<A<A<A<A<A<A<A<A<A<A<A<A<A<A<A<A<A<A<A<A<T>>>>>>>>>>>>>>>>>>>>>>>>
|
|
153
|
+
* >
|
|
154
|
+
*
|
|
155
|
+
* type Ok = Test<number> // Ok
|
|
156
|
+
* ```
|
|
157
|
+
*/
|
|
158
|
+
export declare type DrainOuterGeneric<T> = [T] extends [unknown] ? T : never;
|
|
159
|
+
export declare type ShallowRecord<K extends keyof any, T> = DrainOuterGeneric<{
|
|
160
|
+
[P in K]: T;
|
|
161
|
+
}>;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { DatabaseConnection } from '../../driver/database-connection.js';
|
|
2
|
+
import { ShallowRecord } from '../../util/type-utils.js';
|
|
2
3
|
/**
|
|
3
4
|
* Config for the MySQL dialect.
|
|
4
5
|
*
|
|
@@ -48,4 +49,4 @@ export interface MysqlOkPacket {
|
|
|
48
49
|
affectedRows: number;
|
|
49
50
|
insertId: number;
|
|
50
51
|
}
|
|
51
|
-
export declare type MysqlQueryResult = MysqlOkPacket |
|
|
52
|
+
export declare type MysqlQueryResult = MysqlOkPacket | ShallowRecord<string, unknown>[];
|
|
@@ -48,7 +48,10 @@ export class PostgresIntrospector {
|
|
|
48
48
|
.as('auto_incrementing'),
|
|
49
49
|
])
|
|
50
50
|
// r == normal table
|
|
51
|
-
.where(
|
|
51
|
+
.where(({ cmpr, or }) => or([
|
|
52
|
+
cmpr('c.relkind', '=', 'r'),
|
|
53
|
+
cmpr('c.relkind', '=', 'v'),
|
|
54
|
+
]))
|
|
52
55
|
.where('ns.nspname', '!~', '^pg_')
|
|
53
56
|
.where('ns.nspname', '!=', 'information_schema')
|
|
54
57
|
// No system columns
|
|
@@ -74,24 +74,24 @@ export class RuntimeDriver {
|
|
|
74
74
|
return await executeQuery.call(connection, compiledQuery);
|
|
75
75
|
}
|
|
76
76
|
catch (error) {
|
|
77
|
-
this.#logError(error, compiledQuery, startTime);
|
|
77
|
+
await this.#logError(error, compiledQuery, startTime);
|
|
78
78
|
throw error;
|
|
79
79
|
}
|
|
80
80
|
finally {
|
|
81
|
-
this.#logQuery(compiledQuery, startTime);
|
|
81
|
+
await this.#logQuery(compiledQuery, startTime);
|
|
82
82
|
}
|
|
83
83
|
};
|
|
84
84
|
}
|
|
85
|
-
#logError(error, compiledQuery, startTime) {
|
|
86
|
-
this.#log.error(() => ({
|
|
85
|
+
async #logError(error, compiledQuery, startTime) {
|
|
86
|
+
await this.#log.error(() => ({
|
|
87
87
|
level: 'error',
|
|
88
88
|
error,
|
|
89
89
|
query: compiledQuery,
|
|
90
90
|
queryDurationMillis: this.#calculateDurationMillis(startTime),
|
|
91
91
|
}));
|
|
92
92
|
}
|
|
93
|
-
#logQuery(compiledQuery, startTime) {
|
|
94
|
-
this.#log.query(() => ({
|
|
93
|
+
async #logQuery(compiledQuery, startTime) {
|
|
94
|
+
await this.#log.query(() => ({
|
|
95
95
|
level: 'query',
|
|
96
96
|
query: compiledQuery,
|
|
97
97
|
queryDurationMillis: this.#calculateDurationMillis(startTime),
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { SelectQueryBuilder } from '../query-builder/select-query-builder.js';
|
|
2
2
|
import { TableExpression, From, FromTables, ExtractTableAlias, AnyAliasedTable, PickTableWithAlias } from '../parser/table-parser.js';
|
|
3
3
|
import { FunctionModule } from '../query-builder/function-module.js';
|
|
4
|
-
import { ExtractTypeFromReferenceExpression, ReferenceExpression, StringReference } from '../parser/reference-parser.js';
|
|
4
|
+
import { ExtractTypeFromReferenceExpression, ReferenceExpression, SimpleReferenceExpression, StringReference } from '../parser/reference-parser.js';
|
|
5
5
|
import { QueryExecutor } from '../query-executor/query-executor.js';
|
|
6
6
|
import { BinaryOperatorExpression, ComparisonOperatorExpression, OperandValueExpression, OperandValueExpressionOrList } from '../parser/binary-operation-parser.js';
|
|
7
7
|
import { Expression } from './expression.js';
|
|
@@ -9,6 +9,7 @@ import { ExpressionWrapper } from './expression-wrapper.js';
|
|
|
9
9
|
import { ComparisonOperator, UnaryOperator } from '../operation-node/operator-node.js';
|
|
10
10
|
import { SqlBool } from '../util/type-utils.js';
|
|
11
11
|
import { ExtractTypeFromValueExpressionOrList } from '../parser/value-parser.js';
|
|
12
|
+
import { CaseBuilder } from '../query-builder/case-builder.js';
|
|
12
13
|
export interface ExpressionBuilder<DB, TB extends keyof DB> {
|
|
13
14
|
/**
|
|
14
15
|
* Returns a {@link FunctionModule} that can be used to write type safe function
|
|
@@ -91,6 +92,60 @@ export interface ExpressionBuilder<DB, TB extends keyof DB> {
|
|
|
91
92
|
selectFrom<TE extends keyof DB & string>(from: TE): SelectQueryBuilder<DB, TB | ExtractTableAlias<DB, TE>, {}>;
|
|
92
93
|
selectFrom<TE extends AnyAliasedTable<DB>>(from: TE): SelectQueryBuilder<DB & PickTableWithAlias<DB, TE>, TB | ExtractTableAlias<DB, TE>, {}>;
|
|
93
94
|
selectFrom<TE extends TableExpression<DB, TB>>(from: TE): SelectQueryBuilder<From<DB, TE>, FromTables<DB, TB, TE>, {}>;
|
|
95
|
+
/**
|
|
96
|
+
* Creates a `case` statement/operator.
|
|
97
|
+
*
|
|
98
|
+
* ### Examples
|
|
99
|
+
*
|
|
100
|
+
* Kitchen sink example with 2 flavors of `case` operator:
|
|
101
|
+
*
|
|
102
|
+
* ```ts
|
|
103
|
+
* import { sql } from 'kysely'
|
|
104
|
+
*
|
|
105
|
+
* const { title, name } = await db
|
|
106
|
+
* .selectFrom('person')
|
|
107
|
+
* .where('id', '=', '123')
|
|
108
|
+
* .select((eb) => [
|
|
109
|
+
* eb.fn.coalesce('last_name', 'first_name').as('name'),
|
|
110
|
+
* eb
|
|
111
|
+
* .case()
|
|
112
|
+
* .when('gender', '=', 'male')
|
|
113
|
+
* .then('Mr.')
|
|
114
|
+
* .when('gender', '=', 'female')
|
|
115
|
+
* .then(
|
|
116
|
+
* eb
|
|
117
|
+
* .case('martialStatus')
|
|
118
|
+
* .when('single')
|
|
119
|
+
* .then('Ms.')
|
|
120
|
+
* .else('Mrs.')
|
|
121
|
+
* .end()
|
|
122
|
+
* )
|
|
123
|
+
* .end()
|
|
124
|
+
* .as('title'),
|
|
125
|
+
* ])
|
|
126
|
+
* .executeTakeFirstOrThrow()
|
|
127
|
+
* ```
|
|
128
|
+
*
|
|
129
|
+
* The generated SQL (PostgreSQL):
|
|
130
|
+
*
|
|
131
|
+
* ```sql
|
|
132
|
+
* select
|
|
133
|
+
* coalesce("last_name", "first_name") as "name",
|
|
134
|
+
* case
|
|
135
|
+
* when "gender" = $1 then $2
|
|
136
|
+
* when "gender" = $3 then
|
|
137
|
+
* case "martialStatus"
|
|
138
|
+
* when $4 then $5
|
|
139
|
+
* else $6
|
|
140
|
+
* end
|
|
141
|
+
* end as "title"
|
|
142
|
+
* from "person"
|
|
143
|
+
* where "id" = $7
|
|
144
|
+
* ```
|
|
145
|
+
*/
|
|
146
|
+
case(): CaseBuilder<DB, TB>;
|
|
147
|
+
case<C extends SimpleReferenceExpression<DB, TB>>(column: C): CaseBuilder<DB, TB, ExtractTypeFromReferenceExpression<DB, TB, C>>;
|
|
148
|
+
case<O>(expression: Expression<O>): CaseBuilder<DB, TB, O>;
|
|
94
149
|
/**
|
|
95
150
|
* This can be used to reference columns.
|
|
96
151
|
*
|
|
@@ -5,7 +5,7 @@ import { parseTableExpressionOrList, } from '../parser/table-parser.js';
|
|
|
5
5
|
import { WithSchemaPlugin } from '../plugin/with-schema/with-schema-plugin.js';
|
|
6
6
|
import { createQueryId } from '../util/query-id.js';
|
|
7
7
|
import { createFunctionModule, } from '../query-builder/function-module.js';
|
|
8
|
-
import { parseStringReference, } from '../parser/reference-parser.js';
|
|
8
|
+
import { parseReferenceExpression, parseStringReference, } from '../parser/reference-parser.js';
|
|
9
9
|
import { parseValueBinaryOperation, } from '../parser/binary-operation-parser.js';
|
|
10
10
|
import { AndNode } from '../operation-node/and-node.js';
|
|
11
11
|
import { OrNode } from '../operation-node/or-node.js';
|
|
@@ -15,6 +15,9 @@ import { parseUnaryOperation } from '../parser/unary-operation-parser.js';
|
|
|
15
15
|
import { parseValueExpressionOrList, } from '../parser/value-parser.js';
|
|
16
16
|
import { NOOP_QUERY_EXECUTOR } from '../query-executor/noop-query-executor.js';
|
|
17
17
|
import { ValueNode } from '../operation-node/value-node.js';
|
|
18
|
+
import { CaseBuilder } from '../query-builder/case-builder.js';
|
|
19
|
+
import { CaseNode } from '../operation-node/case-node.js';
|
|
20
|
+
import { isUndefined } from '../util/object-utils.js';
|
|
18
21
|
export function createExpressionBuilder(executor = NOOP_QUERY_EXECUTOR) {
|
|
19
22
|
function unary(op, expr) {
|
|
20
23
|
return new ExpressionWrapper(parseUnaryOperation(op, expr));
|
|
@@ -30,6 +33,13 @@ export function createExpressionBuilder(executor = NOOP_QUERY_EXECUTOR) {
|
|
|
30
33
|
queryNode: SelectQueryNode.create(parseTableExpressionOrList(table)),
|
|
31
34
|
});
|
|
32
35
|
},
|
|
36
|
+
case(reference) {
|
|
37
|
+
return new CaseBuilder({
|
|
38
|
+
node: CaseNode.create(isUndefined(reference)
|
|
39
|
+
? undefined
|
|
40
|
+
: parseReferenceExpression(reference)),
|
|
41
|
+
});
|
|
42
|
+
},
|
|
33
43
|
ref(reference) {
|
|
34
44
|
return new ExpressionWrapper(parseStringReference(reference));
|
|
35
45
|
},
|
|
@@ -3,7 +3,7 @@ import { SelectQueryBuilder } from '../query-builder/select-query-builder.js';
|
|
|
3
3
|
import { RawBuilder } from '../raw-builder/raw-builder.js';
|
|
4
4
|
import { Simplify } from '../util/type-utils.js';
|
|
5
5
|
/**
|
|
6
|
-
* A MySQL helper for aggregating a subquery
|
|
6
|
+
* A MySQL helper for aggregating a subquery into a JSON array.
|
|
7
7
|
*
|
|
8
8
|
* NOTE: This helper is only guaranteed to fully work with the built-in `MysqlDialect`.
|
|
9
9
|
* While the produced SQL is compatibe with all MySQL databases, some 3rd party dialects
|
|
@@ -49,7 +49,7 @@ import { Simplify } from '../util/type-utils.js';
|
|
|
49
49
|
*/
|
|
50
50
|
export declare function jsonArrayFrom<O>(expr: SelectQueryBuilder<any, any, O>): RawBuilder<Simplify<O>[]>;
|
|
51
51
|
/**
|
|
52
|
-
* A MySQL helper for turning a subquery
|
|
52
|
+
* A MySQL helper for turning a subquery into a JSON object.
|
|
53
53
|
*
|
|
54
54
|
* The subquery must only return one row.
|
|
55
55
|
*
|
|
@@ -95,7 +95,7 @@ export declare function jsonArrayFrom<O>(expr: SelectQueryBuilder<any, any, O>):
|
|
|
95
95
|
* from `person`
|
|
96
96
|
* ```
|
|
97
97
|
*/
|
|
98
|
-
export declare function jsonObjectFrom<O>(expr: SelectQueryBuilder<any, any, O>): RawBuilder<Simplify<O
|
|
98
|
+
export declare function jsonObjectFrom<O>(expr: SelectQueryBuilder<any, any, O>): RawBuilder<Simplify<O> | null>;
|
|
99
99
|
/**
|
|
100
100
|
* The MySQL `json_object` function.
|
|
101
101
|
*
|
|
@@ -5,7 +5,7 @@ import { IdentifierNode } from '../operation-node/identifier-node.js';
|
|
|
5
5
|
import { ReferenceNode } from '../operation-node/reference-node.js';
|
|
6
6
|
import { sql } from '../raw-builder/sql.js';
|
|
7
7
|
/**
|
|
8
|
-
* A MySQL helper for aggregating a subquery
|
|
8
|
+
* A MySQL helper for aggregating a subquery into a JSON array.
|
|
9
9
|
*
|
|
10
10
|
* NOTE: This helper is only guaranteed to fully work with the built-in `MysqlDialect`.
|
|
11
11
|
* While the produced SQL is compatibe with all MySQL databases, some 3rd party dialects
|
|
@@ -53,7 +53,7 @@ export function jsonArrayFrom(expr) {
|
|
|
53
53
|
return sql `(select cast(coalesce(json_arrayagg(json_object(${sql.join(getJsonObjectArgs(expr.toOperationNode(), 'agg'))})), '[]') as json) from ${expr} as agg)`;
|
|
54
54
|
}
|
|
55
55
|
/**
|
|
56
|
-
* A MySQL helper for turning a subquery
|
|
56
|
+
* A MySQL helper for turning a subquery into a JSON object.
|
|
57
57
|
*
|
|
58
58
|
* The subquery must only return one row.
|
|
59
59
|
*
|
|
@@ -88,7 +88,7 @@ export declare function jsonArrayFrom<O>(expr: Expression<O>): RawBuilder<Simpli
|
|
|
88
88
|
* from "person"
|
|
89
89
|
* ```
|
|
90
90
|
*/
|
|
91
|
-
export declare function jsonObjectFrom<O>(expr: Expression<O>): RawBuilder<Simplify<O
|
|
91
|
+
export declare function jsonObjectFrom<O>(expr: Expression<O>): RawBuilder<Simplify<O> | null>;
|
|
92
92
|
/**
|
|
93
93
|
* The PostgreSQL `json_build_object` function.
|
|
94
94
|
*
|
package/dist/esm/index.d.ts
CHANGED
|
@@ -2,6 +2,7 @@ export * from './kysely.js';
|
|
|
2
2
|
export * from './query-creator.js';
|
|
3
3
|
export * from './expression/expression.js';
|
|
4
4
|
export { ExpressionBuilder, expressionBuilder, } from './expression/expression-builder.js';
|
|
5
|
+
export * from './expression/expression-wrapper.js';
|
|
5
6
|
export * from './query-builder/where-interface.js';
|
|
6
7
|
export * from './query-builder/returning-interface.js';
|
|
7
8
|
export * from './query-builder/having-interface.js';
|
|
@@ -17,6 +18,7 @@ export * from './query-builder/delete-result.js';
|
|
|
17
18
|
export * from './query-builder/update-result.js';
|
|
18
19
|
export * from './query-builder/on-conflict-builder.js';
|
|
19
20
|
export * from './query-builder/aggregate-function-builder.js';
|
|
21
|
+
export * from './query-builder/case-builder.js';
|
|
20
22
|
export * from './raw-builder/raw-builder.js';
|
|
21
23
|
export * from './raw-builder/sql.js';
|
|
22
24
|
export * from './query-executor/query-executor.js';
|
|
@@ -83,6 +85,7 @@ export * from './operation-node/alias-node.js';
|
|
|
83
85
|
export * from './operation-node/alter-column-node.js';
|
|
84
86
|
export * from './operation-node/alter-table-node.js';
|
|
85
87
|
export * from './operation-node/and-node.js';
|
|
88
|
+
export * from './operation-node/case-node.js';
|
|
86
89
|
export * from './operation-node/check-constraint-node.js';
|
|
87
90
|
export * from './operation-node/column-definition-node.js';
|
|
88
91
|
export * from './operation-node/column-node.js';
|
|
@@ -148,6 +151,7 @@ export * from './operation-node/update-query-node.js';
|
|
|
148
151
|
export * from './operation-node/value-list-node.js';
|
|
149
152
|
export * from './operation-node/value-node.js';
|
|
150
153
|
export * from './operation-node/values-node.js';
|
|
154
|
+
export * from './operation-node/when-node.js';
|
|
151
155
|
export * from './operation-node/where-node.js';
|
|
152
156
|
export * from './operation-node/with-node.js';
|
|
153
157
|
export * from './operation-node/explain-node.js';
|
package/dist/esm/index.js
CHANGED
|
@@ -3,6 +3,7 @@ export * from './kysely.js';
|
|
|
3
3
|
export * from './query-creator.js';
|
|
4
4
|
export * from './expression/expression.js';
|
|
5
5
|
export { expressionBuilder, } from './expression/expression-builder.js';
|
|
6
|
+
export * from './expression/expression-wrapper.js';
|
|
6
7
|
export * from './query-builder/where-interface.js';
|
|
7
8
|
export * from './query-builder/returning-interface.js';
|
|
8
9
|
export * from './query-builder/having-interface.js';
|
|
@@ -18,6 +19,7 @@ export * from './query-builder/delete-result.js';
|
|
|
18
19
|
export * from './query-builder/update-result.js';
|
|
19
20
|
export * from './query-builder/on-conflict-builder.js';
|
|
20
21
|
export * from './query-builder/aggregate-function-builder.js';
|
|
22
|
+
export * from './query-builder/case-builder.js';
|
|
21
23
|
export * from './raw-builder/raw-builder.js';
|
|
22
24
|
export * from './raw-builder/sql.js';
|
|
23
25
|
export * from './query-executor/query-executor.js';
|
|
@@ -84,6 +86,7 @@ export * from './operation-node/alias-node.js';
|
|
|
84
86
|
export * from './operation-node/alter-column-node.js';
|
|
85
87
|
export * from './operation-node/alter-table-node.js';
|
|
86
88
|
export * from './operation-node/and-node.js';
|
|
89
|
+
export * from './operation-node/case-node.js';
|
|
87
90
|
export * from './operation-node/check-constraint-node.js';
|
|
88
91
|
export * from './operation-node/column-definition-node.js';
|
|
89
92
|
export * from './operation-node/column-node.js';
|
|
@@ -149,6 +152,7 @@ export * from './operation-node/update-query-node.js';
|
|
|
149
152
|
export * from './operation-node/value-list-node.js';
|
|
150
153
|
export * from './operation-node/value-node.js';
|
|
151
154
|
export * from './operation-node/values-node.js';
|
|
155
|
+
export * from './operation-node/when-node.js';
|
|
152
156
|
export * from './operation-node/where-node.js';
|
|
153
157
|
export * from './operation-node/with-node.js';
|
|
154
158
|
export * from './operation-node/explain-node.js';
|
package/dist/esm/kysely.d.ts
CHANGED
|
@@ -13,6 +13,8 @@ import { QueryResult } from './driver/database-connection.js';
|
|
|
13
13
|
import { CompiledQuery } from './query-compiler/compiled-query.js';
|
|
14
14
|
import { QueryId } from './util/query-id.js';
|
|
15
15
|
import { Compilable } from './util/compilable.js';
|
|
16
|
+
import { CaseBuilder } from './query-builder/case-builder.js';
|
|
17
|
+
import { Expression } from './expression/expression.js';
|
|
16
18
|
/**
|
|
17
19
|
* The main Kysely class.
|
|
18
20
|
*
|
|
@@ -75,6 +77,13 @@ export declare class Kysely<DB> extends QueryCreator<DB> implements QueryExecuto
|
|
|
75
77
|
* Returns a {@link DatabaseIntrospector | database introspector}.
|
|
76
78
|
*/
|
|
77
79
|
get introspection(): DatabaseIntrospector;
|
|
80
|
+
/**
|
|
81
|
+
* Creates a `case` statement/operator.
|
|
82
|
+
*
|
|
83
|
+
* See {@link ExpressionBuilder.case} for more information.
|
|
84
|
+
*/
|
|
85
|
+
case(): CaseBuilder<DB, keyof DB>;
|
|
86
|
+
case<V>(value: Expression<V>): CaseBuilder<DB, keyof DB, V>;
|
|
78
87
|
/**
|
|
79
88
|
* Returns a {@link FunctionModule} that can be used to write type safe function
|
|
80
89
|
* calls.
|
|
@@ -138,7 +147,7 @@ export declare class Kysely<DB> extends QueryCreator<DB> implements QueryExecuto
|
|
|
138
147
|
* name: 'Catto',
|
|
139
148
|
* species: 'cat'
|
|
140
149
|
* })
|
|
141
|
-
* .
|
|
150
|
+
* .returningAll()
|
|
142
151
|
* .executeTakeFirst()
|
|
143
152
|
* })
|
|
144
153
|
* ```
|
|
@@ -180,6 +189,10 @@ export declare class Kysely<DB> extends QueryCreator<DB> implements QueryExecuto
|
|
|
180
189
|
* Returns a copy of this Kysely instance without any plugins.
|
|
181
190
|
*/
|
|
182
191
|
withoutPlugins(): Kysely<DB>;
|
|
192
|
+
/**
|
|
193
|
+
* @override
|
|
194
|
+
*/
|
|
195
|
+
withSchema(schema: string): Kysely<DB>;
|
|
183
196
|
/**
|
|
184
197
|
* Returns a copy of this Kysely instance with tables added to its
|
|
185
198
|
* database type.
|
|
@@ -279,7 +292,7 @@ export declare class Transaction<DB> extends Kysely<DB> {
|
|
|
279
292
|
* name: 'Catto',
|
|
280
293
|
* species: 'cat'
|
|
281
294
|
* })
|
|
282
|
-
* .
|
|
295
|
+
* .returningAll()
|
|
283
296
|
* .executeTakeFirst()
|
|
284
297
|
* })
|
|
285
298
|
* ```
|
|
@@ -327,6 +340,10 @@ export declare class Transaction<DB> extends Kysely<DB> {
|
|
|
327
340
|
* Returns a copy of this Kysely instance without any plugins.
|
|
328
341
|
*/
|
|
329
342
|
withoutPlugins(): Transaction<DB>;
|
|
343
|
+
/**
|
|
344
|
+
* @override
|
|
345
|
+
*/
|
|
346
|
+
withSchema(schema: string): Transaction<DB>;
|
|
330
347
|
/**
|
|
331
348
|
* Returns a copy of this Kysely instance with tables added to its
|
|
332
349
|
* database type.
|
package/dist/esm/kysely.js
CHANGED
|
@@ -4,7 +4,7 @@ import { DynamicModule } from './dynamic/dynamic.js';
|
|
|
4
4
|
import { DefaultConnectionProvider } from './driver/default-connection-provider.js';
|
|
5
5
|
import { QueryCreator } from './query-creator.js';
|
|
6
6
|
import { DefaultQueryExecutor } from './query-executor/default-query-executor.js';
|
|
7
|
-
import { freeze, isObject } from './util/object-utils.js';
|
|
7
|
+
import { freeze, isObject, isUndefined } from './util/object-utils.js';
|
|
8
8
|
import { RuntimeDriver } from './driver/runtime-driver.js';
|
|
9
9
|
import { SingleConnectionProvider } from './driver/single-connection-provider.js';
|
|
10
10
|
import { TRANSACTION_ISOLATION_LEVELS, } from './driver/driver.js';
|
|
@@ -13,6 +13,10 @@ import { createFunctionModule, } from './query-builder/function-module.js';
|
|
|
13
13
|
import { Log } from './util/log.js';
|
|
14
14
|
import { createQueryId } from './util/query-id.js';
|
|
15
15
|
import { isCompilable } from './util/compilable.js';
|
|
16
|
+
import { CaseBuilder } from './query-builder/case-builder.js';
|
|
17
|
+
import { CaseNode } from './operation-node/case-node.js';
|
|
18
|
+
import { parseExpression } from './parser/expression-parser.js';
|
|
19
|
+
import { WithSchemaPlugin } from './plugin/with-schema/with-schema-plugin.js';
|
|
16
20
|
/**
|
|
17
21
|
* The main Kysely class.
|
|
18
22
|
*
|
|
@@ -106,6 +110,11 @@ export class Kysely extends QueryCreator {
|
|
|
106
110
|
get introspection() {
|
|
107
111
|
return this.#props.dialect.createIntrospector(this.withoutPlugins());
|
|
108
112
|
}
|
|
113
|
+
case(value) {
|
|
114
|
+
return new CaseBuilder({
|
|
115
|
+
node: CaseNode.create(isUndefined(value) ? undefined : parseExpression(value)),
|
|
116
|
+
});
|
|
117
|
+
}
|
|
109
118
|
/**
|
|
110
119
|
* Returns a {@link FunctionModule} that can be used to write type safe function
|
|
111
120
|
* calls.
|
|
@@ -171,7 +180,7 @@ export class Kysely extends QueryCreator {
|
|
|
171
180
|
* name: 'Catto',
|
|
172
181
|
* species: 'cat'
|
|
173
182
|
* })
|
|
174
|
-
* .
|
|
183
|
+
* .returningAll()
|
|
175
184
|
* .executeTakeFirst()
|
|
176
185
|
* })
|
|
177
186
|
* ```
|
|
@@ -227,6 +236,15 @@ export class Kysely extends QueryCreator {
|
|
|
227
236
|
executor: this.#props.executor.withoutPlugins(),
|
|
228
237
|
});
|
|
229
238
|
}
|
|
239
|
+
/**
|
|
240
|
+
* @override
|
|
241
|
+
*/
|
|
242
|
+
withSchema(schema) {
|
|
243
|
+
return new Kysely({
|
|
244
|
+
...this.#props,
|
|
245
|
+
executor: this.#props.executor.withPluginAtFront(new WithSchemaPlugin(schema)),
|
|
246
|
+
});
|
|
247
|
+
}
|
|
230
248
|
/**
|
|
231
249
|
* Returns a copy of this Kysely instance with tables added to its
|
|
232
250
|
* database type.
|
|
@@ -327,6 +345,15 @@ export class Transaction extends Kysely {
|
|
|
327
345
|
executor: this.#props.executor.withoutPlugins(),
|
|
328
346
|
});
|
|
329
347
|
}
|
|
348
|
+
/**
|
|
349
|
+
* @override
|
|
350
|
+
*/
|
|
351
|
+
withSchema(schema) {
|
|
352
|
+
return new Transaction({
|
|
353
|
+
...this.#props,
|
|
354
|
+
executor: this.#props.executor.withPluginAtFront(new WithSchemaPlugin(schema)),
|
|
355
|
+
});
|
|
356
|
+
}
|
|
330
357
|
withTables() {
|
|
331
358
|
return new Transaction({ ...this.#props });
|
|
332
359
|
}
|
|
@@ -1,13 +1,10 @@
|
|
|
1
1
|
import { OperationNode } from './operation-node.js';
|
|
2
2
|
import { OverNode } from './over-node.js';
|
|
3
|
-
import { SelectionNode } from './selection-node.js';
|
|
4
|
-
import { SimpleReferenceExpressionNode } from './simple-reference-expression-node.js';
|
|
5
3
|
import { WhereNode } from './where-node.js';
|
|
6
|
-
declare type AggregateFunction = 'avg' | 'count' | 'max' | 'min' | 'sum';
|
|
7
4
|
export interface AggregateFunctionNode extends OperationNode {
|
|
8
5
|
readonly kind: 'AggregateFunctionNode';
|
|
9
|
-
readonly func:
|
|
10
|
-
readonly aggregated:
|
|
6
|
+
readonly func: string;
|
|
7
|
+
readonly aggregated: readonly OperationNode[];
|
|
11
8
|
readonly distinct?: boolean;
|
|
12
9
|
readonly filter?: WhereNode;
|
|
13
10
|
readonly over?: OverNode;
|
|
@@ -17,10 +14,9 @@ export interface AggregateFunctionNode extends OperationNode {
|
|
|
17
14
|
*/
|
|
18
15
|
export declare const AggregateFunctionNode: Readonly<{
|
|
19
16
|
is(node: OperationNode): node is AggregateFunctionNode;
|
|
20
|
-
create(aggregateFunction:
|
|
17
|
+
create(aggregateFunction: string, aggregated?: readonly OperationNode[]): AggregateFunctionNode;
|
|
21
18
|
cloneWithDistinct(aggregateFunctionNode: AggregateFunctionNode): AggregateFunctionNode;
|
|
22
19
|
cloneWithFilter(aggregateFunctionNode: AggregateFunctionNode, filter: OperationNode): AggregateFunctionNode;
|
|
23
20
|
cloneWithOrFilter(aggregateFunctionNode: AggregateFunctionNode, filter: OperationNode): AggregateFunctionNode;
|
|
24
21
|
cloneWithOver(aggregateFunctionNode: AggregateFunctionNode, over?: OverNode): AggregateFunctionNode;
|
|
25
22
|
}>;
|
|
26
|
-
export {};
|
|
@@ -8,7 +8,7 @@ export const AggregateFunctionNode = freeze({
|
|
|
8
8
|
is(node) {
|
|
9
9
|
return node.kind === 'AggregateFunctionNode';
|
|
10
10
|
},
|
|
11
|
-
create(aggregateFunction, aggregated) {
|
|
11
|
+
create(aggregateFunction, aggregated = []) {
|
|
12
12
|
return freeze({
|
|
13
13
|
kind: 'AggregateFunctionNode',
|
|
14
14
|
func: aggregateFunction,
|
|
@@ -1,12 +1,11 @@
|
|
|
1
1
|
import { OperationNode } from './operation-node.js';
|
|
2
2
|
import { ColumnNode } from './column-node.js';
|
|
3
|
-
import { DataTypeNode } from './data-type-node.js';
|
|
4
3
|
import { RawNode } from './raw-node.js';
|
|
5
4
|
export declare type AlterColumnNodeProps = Omit<AlterColumnNode, 'kind' | 'column'>;
|
|
6
5
|
export interface AlterColumnNode extends OperationNode {
|
|
7
6
|
readonly kind: 'AlterColumnNode';
|
|
8
7
|
readonly column: ColumnNode;
|
|
9
|
-
readonly dataType?:
|
|
8
|
+
readonly dataType?: OperationNode;
|
|
10
9
|
readonly dataTypeExpression?: RawNode;
|
|
11
10
|
readonly setDefault?: OperationNode;
|
|
12
11
|
readonly dropDefault?: true;
|
|
@@ -24,7 +24,7 @@ export interface AlterTableNode extends OperationNode {
|
|
|
24
24
|
*/
|
|
25
25
|
export declare const AlterTableNode: Readonly<{
|
|
26
26
|
is(node: OperationNode): node is AlterTableNode;
|
|
27
|
-
create(table:
|
|
27
|
+
create(table: TableNode): AlterTableNode;
|
|
28
28
|
cloneWithTableProps(node: AlterTableNode, props: AlterTableNodeTableProps): AlterTableNode;
|
|
29
29
|
cloneWithColumnAlteration(node: AlterTableNode, columnAlteration: AlterTableColumnAlterationNode): AlterTableNode;
|
|
30
30
|
}>;
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
/// <reference types="./alter-table-node.d.ts" />
|
|
2
2
|
import { freeze } from '../util/object-utils.js';
|
|
3
|
-
import { TableNode } from './table-node.js';
|
|
4
3
|
/**
|
|
5
4
|
* @internal
|
|
6
5
|
*/
|
|
@@ -11,7 +10,7 @@ export const AlterTableNode = freeze({
|
|
|
11
10
|
create(table) {
|
|
12
11
|
return freeze({
|
|
13
12
|
kind: 'AlterTableNode',
|
|
14
|
-
table
|
|
13
|
+
table,
|
|
15
14
|
});
|
|
16
15
|
},
|
|
17
16
|
cloneWithTableProps(node, props) {
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { OperationNode } from './operation-node.js';
|
|
2
|
+
import { WhenNode } from './when-node.js';
|
|
3
|
+
export interface CaseNode extends OperationNode {
|
|
4
|
+
readonly kind: 'CaseNode';
|
|
5
|
+
readonly value?: OperationNode;
|
|
6
|
+
readonly when?: ReadonlyArray<WhenNode>;
|
|
7
|
+
readonly else?: OperationNode;
|
|
8
|
+
readonly isStatement?: boolean;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* @internal
|
|
12
|
+
*/
|
|
13
|
+
export declare const CaseNode: Readonly<{
|
|
14
|
+
is(node: OperationNode): node is CaseNode;
|
|
15
|
+
create(value?: OperationNode): CaseNode;
|
|
16
|
+
cloneWithWhen(caseNode: CaseNode, when: WhenNode): CaseNode;
|
|
17
|
+
cloneWithThen(caseNode: CaseNode, then: OperationNode): CaseNode;
|
|
18
|
+
cloneWith(caseNode: CaseNode, props: Partial<Pick<CaseNode, 'else' | 'isStatement'>>): CaseNode;
|
|
19
|
+
}>;
|