kysely 0.17.0 → 0.17.3

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 (71) hide show
  1. package/dist/cjs/dialect/mysql/mysql-dialect-config.d.ts +19 -0
  2. package/dist/cjs/driver/connection-provider.d.ts +1 -1
  3. package/dist/cjs/driver/default-connection-provider.d.ts +1 -1
  4. package/dist/cjs/driver/default-connection-provider.js +2 -2
  5. package/dist/cjs/driver/dummy-driver.d.ts +8 -0
  6. package/dist/cjs/driver/dummy-driver.js +8 -0
  7. package/dist/cjs/driver/single-connection-provider.d.ts +1 -1
  8. package/dist/cjs/driver/single-connection-provider.js +2 -2
  9. package/dist/cjs/kysely.js +23 -29
  10. package/dist/cjs/parser/complex-expression-parser.d.ts +1 -1
  11. package/dist/cjs/plugin/deduplicate-joins/deduplicate-joins-transformer.d.ts +2 -1
  12. package/dist/cjs/query-builder/delete-query-builder.d.ts +12 -5
  13. package/dist/cjs/query-builder/expression-builder.d.ts +1 -1
  14. package/dist/cjs/query-builder/expression-builder.js +2 -2
  15. package/dist/cjs/query-builder/function-builder.js +2 -2
  16. package/dist/cjs/query-builder/on-conflict-builder.d.ts +24 -10
  17. package/dist/cjs/query-builder/select-query-builder.d.ts +12 -5
  18. package/dist/cjs/query-builder/update-query-builder.d.ts +12 -5
  19. package/dist/cjs/query-builder/where-interface.d.ts +12 -5
  20. package/dist/cjs/query-executor/default-query-executor.d.ts +14 -7
  21. package/dist/cjs/query-executor/default-query-executor.js +4 -6
  22. package/dist/cjs/query-executor/noop-query-executor.d.ts +12 -6
  23. package/dist/cjs/query-executor/noop-query-executor.js +3 -3
  24. package/dist/cjs/query-executor/query-executor-base.d.ts +62 -0
  25. package/dist/cjs/query-executor/query-executor-base.js +46 -0
  26. package/dist/cjs/query-executor/query-executor.d.ts +15 -15
  27. package/dist/cjs/query-executor/query-executor.js +0 -57
  28. package/dist/cjs/raw-builder/sql.d.ts +11 -3
  29. package/dist/cjs/raw-builder/sql.js +10 -2
  30. package/dist/cjs/schema/alter-table-builder.d.ts +24 -2
  31. package/dist/cjs/schema/alter-table-builder.js +20 -0
  32. package/dist/cjs/schema/column-definition-builder.d.ts +4 -2
  33. package/dist/cjs/schema/create-table-builder.d.ts +1 -1
  34. package/dist/cjs/schema/create-table-builder.js +1 -1
  35. package/dist/cjs/util/type-utils.d.ts +1 -1
  36. package/dist/esm/dialect/mysql/mysql-dialect-config.d.ts +19 -0
  37. package/dist/esm/driver/connection-provider.d.ts +1 -1
  38. package/dist/esm/driver/default-connection-provider.d.ts +1 -1
  39. package/dist/esm/driver/default-connection-provider.js +2 -2
  40. package/dist/esm/driver/dummy-driver.d.ts +8 -0
  41. package/dist/esm/driver/dummy-driver.js +8 -0
  42. package/dist/esm/driver/single-connection-provider.d.ts +1 -1
  43. package/dist/esm/driver/single-connection-provider.js +2 -2
  44. package/dist/esm/kysely.js +23 -29
  45. package/dist/esm/parser/complex-expression-parser.d.ts +1 -1
  46. package/dist/esm/plugin/deduplicate-joins/deduplicate-joins-transformer.d.ts +2 -1
  47. package/dist/esm/query-builder/delete-query-builder.d.ts +12 -5
  48. package/dist/esm/query-builder/expression-builder.d.ts +1 -1
  49. package/dist/esm/query-builder/expression-builder.js +1 -1
  50. package/dist/esm/query-builder/function-builder.js +1 -1
  51. package/dist/esm/query-builder/on-conflict-builder.d.ts +24 -10
  52. package/dist/esm/query-builder/select-query-builder.d.ts +12 -5
  53. package/dist/esm/query-builder/update-query-builder.d.ts +12 -5
  54. package/dist/esm/query-builder/where-interface.d.ts +12 -5
  55. package/dist/esm/query-executor/default-query-executor.d.ts +14 -7
  56. package/dist/esm/query-executor/default-query-executor.js +4 -6
  57. package/dist/esm/query-executor/noop-query-executor.d.ts +12 -6
  58. package/dist/esm/query-executor/noop-query-executor.js +3 -3
  59. package/dist/esm/query-executor/query-executor-base.d.ts +62 -0
  60. package/dist/esm/query-executor/query-executor-base.js +43 -0
  61. package/dist/esm/query-executor/query-executor.d.ts +15 -15
  62. package/dist/esm/query-executor/query-executor.js +1 -55
  63. package/dist/esm/raw-builder/sql.d.ts +11 -3
  64. package/dist/esm/raw-builder/sql.js +10 -2
  65. package/dist/esm/schema/alter-table-builder.d.ts +24 -2
  66. package/dist/esm/schema/alter-table-builder.js +20 -0
  67. package/dist/esm/schema/column-definition-builder.d.ts +4 -2
  68. package/dist/esm/schema/create-table-builder.d.ts +1 -1
  69. package/dist/esm/schema/create-table-builder.js +1 -1
  70. package/dist/esm/util/type-utils.d.ts +1 -1
  71. package/package.json +9 -9
@@ -1,56 +1,2 @@
1
1
  /// <reference types="./query-executor.d.ts" />
2
- import { freeze } from '../util/object-utils.js';
3
- const NO_PLUGINS = freeze([]);
4
- /**
5
- * This class abstracts away the details of how to compile a query into SQL
6
- * and execute it. Instead of passing around all those details, {@link SelectQueryBuilder}
7
- * and other classes that execute queries can just pass around and instance of
8
- * `QueryExecutor`.
9
- */
10
- export class QueryExecutor {
11
- #plugins;
12
- constructor(plugins) {
13
- this.#plugins = plugins ?? NO_PLUGINS;
14
- }
15
- get plugins() {
16
- return this.#plugins;
17
- }
18
- /**
19
- * Given the query the user has built (expressed as an operation node tree)
20
- * this method runs it through all plugins' `transformQuery` methods and
21
- * returns the result.
22
- */
23
- transformQuery(node, queryId) {
24
- for (const plugin of this.#plugins) {
25
- const transformedNode = plugin.transformQuery({ node, queryId });
26
- // We need to do a runtime check here. There is no good way
27
- // to write types that enforce this constraint.
28
- if (transformedNode.kind === node.kind) {
29
- node = transformedNode;
30
- }
31
- else {
32
- throw new Error([
33
- `KyselyPlugin.transformQuery must return a node`,
34
- `of the same kind that was given to it.`,
35
- `The plugin was given a ${node.kind}`,
36
- `but it returned a ${transformedNode.kind}`,
37
- ].join(' '));
38
- }
39
- }
40
- return node;
41
- }
42
- /**
43
- * Executes a compiled query and runs the result through all plugins'
44
- * `transformResult` method.
45
- */
46
- async executeQuery(compiledQuery, queryId) {
47
- const result = await this.executeQueryImpl(compiledQuery, queryId);
48
- return this.#transformResult(result, queryId);
49
- }
50
- async #transformResult(result, queryId) {
51
- for (const plugin of this.#plugins) {
52
- result = await plugin.transformResult({ result, queryId });
53
- }
54
- return result;
55
- }
56
- }
2
+ export {};
@@ -221,7 +221,7 @@ export interface Sql {
221
221
  * sql.id('first_name')
222
222
  * ]
223
223
  *
224
- * sql`BEFORE ${sql.array(things, sql`::varchar, `)} AFTER`
224
+ * sql`BEFORE ${sql.join(things, sql`::varchar, `)} AFTER`
225
225
  * ```
226
226
  *
227
227
  * The generated SQL (PostgreSQL):
@@ -281,7 +281,7 @@ export interface Sql {
281
281
  * from "person"
282
282
  * where birthdate between $1 and $2
283
283
  * and "nicknames" @> ARRAY[$3, $4, $5, $6, $7, $8, $9, $10]
284
- * order by concate(first_name, ' ', last_name)
284
+ * order by concat(first_name, ' ', last_name)
285
285
  * ```
286
286
  *
287
287
  * SQL snippets can be executed by calling the `execute` method and passing a `Kysely`
@@ -313,7 +313,15 @@ export interface Sql {
313
313
  * .select([
314
314
  * 'first_name',
315
315
  * 'last_name',
316
- * (eb) => sql<string>`concat(${eb.ref('first_name')}, ' ', ${eb.ref('last_name')})`.as('full_name')
316
+ * (eb) => {
317
+ * // The `eb.ref` method is type-safe and only accepts
318
+ * // column references that are possible.
319
+ * const firstName = eb.ref('first_name')
320
+ * const lastName = eb.ref('last_name')
321
+ *
322
+ * const fullName = sql<string>`concat(${firstName}, ' ', ${lastName})`
323
+ * return fullName.as('full_name')
324
+ * }
317
325
  * ])
318
326
  * ```
319
327
  *
@@ -56,7 +56,7 @@ import { RawBuilder } from './raw-builder.js';
56
56
  * from "person"
57
57
  * where birthdate between $1 and $2
58
58
  * and "nicknames" @> ARRAY[$3, $4, $5, $6, $7, $8, $9, $10]
59
- * order by concate(first_name, ' ', last_name)
59
+ * order by concat(first_name, ' ', last_name)
60
60
  * ```
61
61
  *
62
62
  * SQL snippets can be executed by calling the `execute` method and passing a `Kysely`
@@ -88,7 +88,15 @@ import { RawBuilder } from './raw-builder.js';
88
88
  * .select([
89
89
  * 'first_name',
90
90
  * 'last_name',
91
- * (eb) => sql<string>`concat(${eb.ref('first_name')}, ' ', ${eb.ref('last_name')})`.as('full_name')
91
+ * (eb) => {
92
+ * // The `eb.ref` method is type-safe and only accepts
93
+ * // column references that are possible.
94
+ * const firstName = eb.ref('first_name')
95
+ * const lastName = eb.ref('last_name')
96
+ *
97
+ * const fullName = sql<string>`concat(${firstName}, ' ', ${lastName})`
98
+ * return fullName.as('full_name')
99
+ * }
92
100
  * ])
93
101
  * ```
94
102
  *
@@ -23,6 +23,13 @@ export declare class AlterTableBuilder {
23
23
  alterColumn(column: string): AlterColumnBuilder;
24
24
  dropColumn(column: string): AlterTableExecutor;
25
25
  renameColumn(column: string, newColumn: string): AlterTableExecutor;
26
+ /**
27
+ * See {@link CreateTableBuilder.addColumn}
28
+ *
29
+ * Unlike {@link CreateTableBuilder.addColumn} this method returns the column builder
30
+ * and doesn't take a callback as the last argument. This is because you can only
31
+ * add one column per `ALTER TABLE` query.
32
+ */
26
33
  addColumn(columnName: string, dataType: DataTypeExpression): AlterTableAddColumnBuilder;
27
34
  /**
28
35
  * Creates an `alter table modify column` query. The `modify column` statement
@@ -30,8 +37,21 @@ export declare class AlterTableBuilder {
30
37
  * should use the `alterColumn` method.
31
38
  */
32
39
  modifyColumn(columnName: string, dataType: DataTypeExpression): AlterTableModifyColumnBuilder;
40
+ /**
41
+ * See {@link CreateTableBuilder.addUniqueConstraint}
42
+ */
33
43
  addUniqueConstraint(constraintName: string, columns: string[]): AlterTableExecutor;
44
+ /**
45
+ * See {@link CreateTableBuilder.addCheckConstraint}
46
+ */
34
47
  addCheckConstraint(constraintName: string, checkExpression: AnyRawBuilder): AlterTableExecutor;
48
+ /**
49
+ * See {@link CreateTableBuilder.addForeignKeyConstraint}
50
+ *
51
+ * Unlike {@link CreateTableBuilder.addForeignKeyConstraint} this method returns
52
+ * the constraint builder and doesn't take a callback as the last argument. This
53
+ * is because you can only add one column per `ALTER TABLE` query.
54
+ */
35
55
  addForeignKeyConstraint(constraintName: string, columns: string[], targetTable: string, targetColumns: string[]): AlterTableAddForeignKeyConstraintBuilder;
36
56
  }
37
57
  export interface AlterTableBuilderProps {
@@ -142,7 +162,8 @@ export declare class AlterTableAddColumnBuilder implements ColumnDefinitionBuild
142
162
  * .execute()
143
163
  * ```
144
164
  *
145
- * Raw {@link sql} expressions are also supported:
165
+ * Values passed to `defaultTo` are interpreted as value literals by default. You can define
166
+ * an arbitrary SQL expression using the {@link sql} template tag:
146
167
  *
147
168
  * ```ts
148
169
  * import { sql } from 'kysely'
@@ -306,7 +327,8 @@ export declare class AlterTableModifyColumnBuilder implements ColumnDefinitionBu
306
327
  * .execute()
307
328
  * ```
308
329
  *
309
- * Raw {@link sql} expressions are also supported:
330
+ * Values passed to `defaultTo` are interpreted as value literals by default. You can define
331
+ * an arbitrary SQL expression using the {@link sql} template tag:
310
332
  *
311
333
  * ```ts
312
334
  * import { sql } from 'kysely'
@@ -66,6 +66,13 @@ export class AlterTableBuilder {
66
66
  }),
67
67
  });
68
68
  }
69
+ /**
70
+ * See {@link CreateTableBuilder.addColumn}
71
+ *
72
+ * Unlike {@link CreateTableBuilder.addColumn} this method returns the column builder
73
+ * and doesn't take a callback as the last argument. This is because you can only
74
+ * add one column per `ALTER TABLE` query.
75
+ */
69
76
  addColumn(columnName, dataType) {
70
77
  return new AlterTableAddColumnBuilder({
71
78
  ...this.#props,
@@ -83,6 +90,9 @@ export class AlterTableBuilder {
83
90
  columnBuilder: new ColumnDefinitionBuilder(ColumnDefinitionNode.create(columnName, parseDataTypeExpression(dataType))),
84
91
  });
85
92
  }
93
+ /**
94
+ * See {@link CreateTableBuilder.addUniqueConstraint}
95
+ */
86
96
  addUniqueConstraint(constraintName, columns) {
87
97
  return new AlterTableExecutor({
88
98
  ...this.#props,
@@ -91,6 +101,9 @@ export class AlterTableBuilder {
91
101
  }),
92
102
  });
93
103
  }
104
+ /**
105
+ * See {@link CreateTableBuilder.addCheckConstraint}
106
+ */
94
107
  addCheckConstraint(constraintName, checkExpression) {
95
108
  return new AlterTableExecutor({
96
109
  ...this.#props,
@@ -99,6 +112,13 @@ export class AlterTableBuilder {
99
112
  }),
100
113
  });
101
114
  }
115
+ /**
116
+ * See {@link CreateTableBuilder.addForeignKeyConstraint}
117
+ *
118
+ * Unlike {@link CreateTableBuilder.addForeignKeyConstraint} this method returns
119
+ * the constraint builder and doesn't take a callback as the last argument. This
120
+ * is because you can only add one column per `ALTER TABLE` query.
121
+ */
102
122
  addForeignKeyConstraint(constraintName, columns, targetTable, targetColumns) {
103
123
  return new AlterTableAddForeignKeyConstraintBuilder({
104
124
  ...this.#props,
@@ -83,7 +83,8 @@ export interface ColumnDefinitionBuilderInterface {
83
83
  * .execute()
84
84
  * ```
85
85
  *
86
- * Raw {@link sql} expressions are also supported:
86
+ * Values passed to `defaultTo` are interpreted as value literals by default. You can define
87
+ * an arbitrary SQL expression using the {@link sql} template tag:
87
88
  *
88
89
  * ```ts
89
90
  * import { sql } from 'kysely'
@@ -241,7 +242,8 @@ export declare class ColumnDefinitionBuilder implements ColumnDefinitionBuilderI
241
242
  * .execute()
242
243
  * ```
243
244
  *
244
- * Raw {@link sql} expressions are also supported:
245
+ * Values passed to `defaultTo` are interpreted as value literals by default. You can define
246
+ * an arbitrary SQL expression using the {@link sql} template tag:
245
247
  *
246
248
  * ```ts
247
249
  * import { sql } from 'kysely'
@@ -136,7 +136,7 @@ export declare class CreateTableBuilder<TB extends string, C extends string = ne
136
136
  * )
137
137
  * ```
138
138
  *
139
- * Add constraintfor multiple columns:
139
+ * Add constraint for multiple columns:
140
140
  *
141
141
  * ```ts
142
142
  * addForeignKeyConstraint(
@@ -184,7 +184,7 @@ export class CreateTableBuilder {
184
184
  * )
185
185
  * ```
186
186
  *
187
- * Add constraintfor multiple columns:
187
+ * Add constraint for multiple columns:
188
188
  *
189
189
  * ```ts
190
190
  * addForeignKeyConstraint(
@@ -74,7 +74,7 @@ export declare type ExtractColumnType<DB, TB extends keyof DB, C> = {
74
74
  * movie: Movie
75
75
  * }
76
76
  *
77
- * type Columns = AnyColumn<Database, 'person' | 'pet'>
77
+ * type Columns = AnyColumnWithTable<Database, 'person' | 'pet'>
78
78
  *
79
79
  * // Columns == 'person.id' | 'pet.name' | 'pet.species'
80
80
  * ```
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "kysely",
3
- "version": "0.17.0",
3
+ "version": "0.17.3",
4
4
  "description": "Type safe SQL query builder",
5
5
  "repository": {
6
6
  "type": "git",
@@ -47,22 +47,22 @@
47
47
  "@types/node": "^16.11.9"
48
48
  },
49
49
  "devDependencies": {
50
- "@types/better-sqlite3": "^7.4.2",
50
+ "@types/better-sqlite3": "^7.5.0",
51
51
  "@types/chai": "^4.3.0",
52
52
  "@types/chai-subset": "^1.3.3",
53
53
  "@types/mocha": "^9.1.0",
54
- "@types/pg": "^8.6.4",
54
+ "@types/pg": "^8.6.5",
55
55
  "better-sqlite3": "^7.5.0",
56
56
  "chai": "^4.3.6",
57
57
  "chai-subset": "^1.6.0",
58
- "esbuild": "^0.14.22",
59
- "mocha": "^9.2.0",
58
+ "esbuild": "^0.14.27",
59
+ "mocha": "^9.2.2",
60
60
  "mysql2": "^2.3.3",
61
61
  "pg": "^8.7.3",
62
- "playwright": "^1.19.1",
63
- "prettier": "^2.5.1",
62
+ "playwright": "^1.20.0",
63
+ "prettier": "^2.6.0",
64
64
  "tsd": "^0.19.1",
65
- "typedoc": "^0.22.11",
66
- "typescript": "4.5.5"
65
+ "typedoc": "^0.22.13",
66
+ "typescript": "4.6.2"
67
67
  }
68
68
  }