kysely 0.26.3 → 0.27.1

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 (216) hide show
  1. package/README.md +2 -2
  2. package/dist/cjs/dialect/dialect-adapter-base.d.ts +8 -0
  3. package/dist/cjs/dialect/dialect-adapter-base.js +3 -0
  4. package/dist/cjs/dialect/dialect-adapter.d.ts +8 -0
  5. package/dist/cjs/dialect/mssql/mssql-adapter.d.ts +78 -0
  6. package/dist/cjs/dialect/mssql/mssql-adapter.js +30 -0
  7. package/dist/cjs/dialect/mssql/mssql-dialect-config.d.ts +143 -0
  8. package/dist/cjs/dialect/mssql/mssql-dialect-config.js +2 -0
  9. package/dist/cjs/dialect/mssql/mssql-dialect.d.ts +70 -0
  10. package/dist/cjs/dialect/mssql/mssql-dialect.js +65 -0
  11. package/dist/cjs/dialect/mssql/mssql-driver.d.ts +54 -0
  12. package/dist/cjs/dialect/mssql/mssql-driver.js +268 -0
  13. package/dist/cjs/dialect/mssql/mssql-introspector.d.ts +20 -0
  14. package/dist/cjs/dialect/mssql/mssql-introspector.js +99 -0
  15. package/dist/cjs/dialect/mssql/mssql-query-compiler.d.ts +11 -0
  16. package/dist/cjs/dialect/mssql/mssql-query-compiler.js +64 -0
  17. package/dist/cjs/dialect/mysql/mysql-query-compiler.d.ts +2 -0
  18. package/dist/cjs/dialect/mysql/mysql-query-compiler.js +28 -0
  19. package/dist/cjs/dialect/postgres/postgres-driver.js +1 -1
  20. package/dist/cjs/dialect/sqlite/sqlite-adapter.d.ts +1 -1
  21. package/dist/cjs/dialect/sqlite/sqlite-adapter.js +2 -1
  22. package/dist/cjs/dialect/sqlite/sqlite-dialect-config.d.ts +1 -0
  23. package/dist/cjs/dialect/sqlite/sqlite-driver.js +15 -2
  24. package/dist/cjs/driver/driver.d.ts +1 -1
  25. package/dist/cjs/driver/driver.js +1 -0
  26. package/dist/cjs/driver/runtime-driver.js +5 -1
  27. package/dist/cjs/driver/single-connection-provider.js +7 -8
  28. package/dist/cjs/expression/expression-builder.d.ts +66 -75
  29. package/dist/cjs/expression/expression-builder.js +8 -17
  30. package/dist/cjs/expression/expression-wrapper.d.ts +21 -11
  31. package/dist/cjs/expression/expression-wrapper.js +12 -0
  32. package/dist/cjs/helpers/mssql.d.ts +152 -0
  33. package/dist/cjs/helpers/mssql.js +160 -0
  34. package/dist/cjs/index.d.ts +7 -1
  35. package/dist/cjs/index.js +6 -0
  36. package/dist/cjs/migration/migrator.js +12 -16
  37. package/dist/cjs/operation-node/add-index-node.d.ts +21 -0
  38. package/dist/cjs/operation-node/add-index-node.js +31 -0
  39. package/dist/cjs/operation-node/alter-table-node.d.ts +5 -1
  40. package/dist/cjs/operation-node/column-definition-node.d.ts +1 -0
  41. package/dist/cjs/operation-node/column-update-node.d.ts +2 -3
  42. package/dist/cjs/operation-node/create-index-node.d.ts +1 -0
  43. package/dist/cjs/operation-node/create-table-node.d.ts +1 -0
  44. package/dist/cjs/operation-node/insert-query-node.d.ts +1 -0
  45. package/dist/cjs/operation-node/limit-node.d.ts +2 -3
  46. package/dist/cjs/operation-node/limit-node.js +1 -2
  47. package/dist/cjs/operation-node/offset-node.d.ts +2 -3
  48. package/dist/cjs/operation-node/offset-node.js +1 -2
  49. package/dist/cjs/operation-node/operation-node-transformer.d.ts +2 -0
  50. package/dist/cjs/operation-node/operation-node-transformer.js +19 -0
  51. package/dist/cjs/operation-node/operation-node-visitor.d.ts +2 -0
  52. package/dist/cjs/operation-node/operation-node-visitor.js +1 -0
  53. package/dist/cjs/operation-node/operation-node.d.ts +1 -1
  54. package/dist/cjs/operation-node/operator-node.d.ts +3 -3
  55. package/dist/cjs/operation-node/operator-node.js +2 -0
  56. package/dist/cjs/operation-node/select-modifier-node.d.ts +2 -1
  57. package/dist/cjs/operation-node/select-modifier-node.js +2 -1
  58. package/dist/cjs/operation-node/unique-constraint-node.d.ts +4 -1
  59. package/dist/cjs/operation-node/unique-constraint-node.js +8 -1
  60. package/dist/cjs/parser/binary-operation-parser.js +1 -1
  61. package/dist/cjs/parser/coalesce-parser.d.ts +12 -2
  62. package/dist/cjs/parser/reference-parser.d.ts +2 -1
  63. package/dist/cjs/parser/update-set-parser.d.ts +5 -2
  64. package/dist/cjs/parser/update-set-parser.js +13 -3
  65. package/dist/cjs/query-builder/aggregate-function-builder.d.ts +21 -4
  66. package/dist/cjs/query-builder/aggregate-function-builder.js +21 -0
  67. package/dist/cjs/query-builder/case-builder.d.ts +6 -5
  68. package/dist/cjs/query-builder/delete-query-builder.d.ts +8 -7
  69. package/dist/cjs/query-builder/delete-query-builder.js +4 -3
  70. package/dist/cjs/query-builder/function-module.d.ts +96 -25
  71. package/dist/cjs/query-builder/function-module.js +17 -3
  72. package/dist/cjs/query-builder/having-interface.d.ts +3 -5
  73. package/dist/cjs/query-builder/insert-query-builder.d.ts +34 -12
  74. package/dist/cjs/query-builder/insert-query-builder.js +16 -5
  75. package/dist/cjs/query-builder/insert-result.d.ts +8 -1
  76. package/dist/cjs/query-builder/insert-result.js +8 -1
  77. package/dist/cjs/query-builder/json-path-builder.d.ts +5 -3
  78. package/dist/cjs/query-builder/json-path-builder.js +9 -3
  79. package/dist/cjs/query-builder/on-conflict-builder.d.ts +58 -16
  80. package/dist/cjs/query-builder/on-conflict-builder.js +1 -6
  81. package/dist/cjs/query-builder/over-builder.d.ts +2 -2
  82. package/dist/cjs/query-builder/select-query-builder.d.ts +49 -31
  83. package/dist/cjs/query-builder/select-query-builder.js +12 -10
  84. package/dist/cjs/query-builder/update-query-builder.d.ts +23 -7
  85. package/dist/cjs/query-builder/update-query-builder.js +4 -4
  86. package/dist/cjs/query-builder/where-interface.d.ts +3 -3
  87. package/dist/cjs/query-compiler/default-query-compiler.d.ts +9 -1
  88. package/dist/cjs/query-compiler/default-query-compiler.js +73 -12
  89. package/dist/cjs/raw-builder/raw-builder.d.ts +11 -1
  90. package/dist/cjs/raw-builder/raw-builder.js +3 -0
  91. package/dist/cjs/raw-builder/sql.js +9 -2
  92. package/dist/cjs/schema/alter-table-add-index-builder.d.ts +104 -0
  93. package/dist/cjs/schema/alter-table-add-index-builder.js +146 -0
  94. package/dist/cjs/schema/alter-table-builder.d.ts +41 -1
  95. package/dist/cjs/schema/alter-table-builder.js +59 -2
  96. package/dist/cjs/schema/column-definition-builder.d.ts +25 -0
  97. package/dist/cjs/schema/column-definition-builder.js +27 -0
  98. package/dist/cjs/schema/create-index-builder.d.ts +23 -0
  99. package/dist/cjs/schema/create-index-builder.js +30 -0
  100. package/dist/cjs/schema/create-table-builder.d.ts +28 -2
  101. package/dist/cjs/schema/create-table-builder.js +38 -3
  102. package/dist/cjs/schema/unique-constraint-builder.d.ts +14 -0
  103. package/dist/cjs/schema/unique-constraint-builder.js +24 -0
  104. package/dist/cjs/util/log.js +5 -1
  105. package/dist/cjs/util/object-utils.d.ts +2 -2
  106. package/dist/cjs/util/object-utils.js +1 -1
  107. package/dist/cjs/util/type-utils.d.ts +27 -19
  108. package/dist/esm/dialect/dialect-adapter-base.d.ts +8 -0
  109. package/dist/esm/dialect/dialect-adapter-base.js +3 -0
  110. package/dist/esm/dialect/dialect-adapter.d.ts +8 -0
  111. package/dist/esm/dialect/mssql/mssql-adapter.d.ts +78 -0
  112. package/dist/esm/dialect/mssql/mssql-adapter.js +27 -0
  113. package/dist/esm/dialect/mssql/mssql-dialect-config.d.ts +143 -0
  114. package/dist/esm/dialect/mssql/mssql-dialect-config.js +2 -0
  115. package/dist/esm/dialect/mssql/mssql-dialect.d.ts +70 -0
  116. package/dist/esm/dialect/mssql/mssql-dialect.js +62 -0
  117. package/dist/esm/dialect/mssql/mssql-driver.d.ts +54 -0
  118. package/dist/esm/dialect/mssql/mssql-driver.js +265 -0
  119. package/dist/esm/dialect/mssql/mssql-introspector.d.ts +20 -0
  120. package/dist/esm/dialect/mssql/mssql-introspector.js +96 -0
  121. package/dist/esm/dialect/mssql/mssql-query-compiler.d.ts +11 -0
  122. package/dist/esm/dialect/mssql/mssql-query-compiler.js +61 -0
  123. package/dist/esm/dialect/mysql/mysql-query-compiler.d.ts +2 -0
  124. package/dist/esm/dialect/mysql/mysql-query-compiler.js +28 -0
  125. package/dist/esm/dialect/postgres/postgres-driver.js +1 -1
  126. package/dist/esm/dialect/sqlite/sqlite-adapter.d.ts +1 -1
  127. package/dist/esm/dialect/sqlite/sqlite-adapter.js +2 -1
  128. package/dist/esm/dialect/sqlite/sqlite-dialect-config.d.ts +1 -0
  129. package/dist/esm/dialect/sqlite/sqlite-driver.js +15 -2
  130. package/dist/esm/driver/driver.d.ts +1 -1
  131. package/dist/esm/driver/driver.js +1 -0
  132. package/dist/esm/driver/runtime-driver.js +5 -1
  133. package/dist/esm/driver/single-connection-provider.js +7 -8
  134. package/dist/esm/expression/expression-builder.d.ts +66 -75
  135. package/dist/esm/expression/expression-builder.js +10 -19
  136. package/dist/esm/expression/expression-wrapper.d.ts +21 -11
  137. package/dist/esm/expression/expression-wrapper.js +12 -0
  138. package/dist/esm/helpers/mssql.d.ts +152 -0
  139. package/dist/esm/helpers/mssql.js +155 -0
  140. package/dist/esm/index.d.ts +7 -1
  141. package/dist/esm/index.js +6 -0
  142. package/dist/esm/migration/migrator.js +12 -16
  143. package/dist/esm/operation-node/add-index-node.d.ts +21 -0
  144. package/dist/esm/operation-node/add-index-node.js +29 -0
  145. package/dist/esm/operation-node/alter-table-node.d.ts +5 -1
  146. package/dist/esm/operation-node/column-definition-node.d.ts +1 -0
  147. package/dist/esm/operation-node/column-update-node.d.ts +2 -3
  148. package/dist/esm/operation-node/create-index-node.d.ts +1 -0
  149. package/dist/esm/operation-node/create-table-node.d.ts +1 -0
  150. package/dist/esm/operation-node/insert-query-node.d.ts +1 -0
  151. package/dist/esm/operation-node/limit-node.d.ts +2 -3
  152. package/dist/esm/operation-node/limit-node.js +1 -2
  153. package/dist/esm/operation-node/offset-node.d.ts +2 -3
  154. package/dist/esm/operation-node/offset-node.js +1 -2
  155. package/dist/esm/operation-node/operation-node-transformer.d.ts +2 -0
  156. package/dist/esm/operation-node/operation-node-transformer.js +19 -0
  157. package/dist/esm/operation-node/operation-node-visitor.d.ts +2 -0
  158. package/dist/esm/operation-node/operation-node-visitor.js +1 -0
  159. package/dist/esm/operation-node/operation-node.d.ts +1 -1
  160. package/dist/esm/operation-node/operator-node.d.ts +3 -3
  161. package/dist/esm/operation-node/operator-node.js +2 -0
  162. package/dist/esm/operation-node/select-modifier-node.d.ts +2 -1
  163. package/dist/esm/operation-node/select-modifier-node.js +2 -1
  164. package/dist/esm/operation-node/unique-constraint-node.d.ts +4 -1
  165. package/dist/esm/operation-node/unique-constraint-node.js +8 -1
  166. package/dist/esm/parser/binary-operation-parser.js +1 -1
  167. package/dist/esm/parser/coalesce-parser.d.ts +12 -2
  168. package/dist/esm/parser/reference-parser.d.ts +2 -1
  169. package/dist/esm/parser/update-set-parser.d.ts +5 -2
  170. package/dist/esm/parser/update-set-parser.js +10 -1
  171. package/dist/esm/query-builder/aggregate-function-builder.d.ts +21 -4
  172. package/dist/esm/query-builder/aggregate-function-builder.js +21 -0
  173. package/dist/esm/query-builder/case-builder.d.ts +6 -5
  174. package/dist/esm/query-builder/delete-query-builder.d.ts +8 -7
  175. package/dist/esm/query-builder/delete-query-builder.js +4 -3
  176. package/dist/esm/query-builder/function-module.d.ts +96 -25
  177. package/dist/esm/query-builder/function-module.js +17 -3
  178. package/dist/esm/query-builder/having-interface.d.ts +3 -5
  179. package/dist/esm/query-builder/insert-query-builder.d.ts +34 -12
  180. package/dist/esm/query-builder/insert-query-builder.js +17 -6
  181. package/dist/esm/query-builder/insert-result.d.ts +8 -1
  182. package/dist/esm/query-builder/insert-result.js +8 -1
  183. package/dist/esm/query-builder/json-path-builder.d.ts +5 -3
  184. package/dist/esm/query-builder/json-path-builder.js +9 -3
  185. package/dist/esm/query-builder/on-conflict-builder.d.ts +58 -16
  186. package/dist/esm/query-builder/on-conflict-builder.js +2 -7
  187. package/dist/esm/query-builder/over-builder.d.ts +2 -2
  188. package/dist/esm/query-builder/select-query-builder.d.ts +49 -31
  189. package/dist/esm/query-builder/select-query-builder.js +13 -11
  190. package/dist/esm/query-builder/update-query-builder.d.ts +23 -7
  191. package/dist/esm/query-builder/update-query-builder.js +5 -5
  192. package/dist/esm/query-builder/where-interface.d.ts +3 -3
  193. package/dist/esm/query-compiler/default-query-compiler.d.ts +9 -1
  194. package/dist/esm/query-compiler/default-query-compiler.js +73 -12
  195. package/dist/esm/raw-builder/raw-builder.d.ts +11 -1
  196. package/dist/esm/raw-builder/raw-builder.js +3 -0
  197. package/dist/esm/raw-builder/sql.js +9 -2
  198. package/dist/esm/schema/alter-table-add-index-builder.d.ts +104 -0
  199. package/dist/esm/schema/alter-table-add-index-builder.js +143 -0
  200. package/dist/esm/schema/alter-table-builder.d.ts +41 -1
  201. package/dist/esm/schema/alter-table-builder.js +59 -2
  202. package/dist/esm/schema/column-definition-builder.d.ts +25 -0
  203. package/dist/esm/schema/column-definition-builder.js +27 -0
  204. package/dist/esm/schema/create-index-builder.d.ts +23 -0
  205. package/dist/esm/schema/create-index-builder.js +30 -0
  206. package/dist/esm/schema/create-table-builder.d.ts +28 -2
  207. package/dist/esm/schema/create-table-builder.js +38 -3
  208. package/dist/esm/schema/unique-constraint-builder.d.ts +14 -0
  209. package/dist/esm/schema/unique-constraint-builder.js +21 -0
  210. package/dist/esm/util/log.js +5 -1
  211. package/dist/esm/util/object-utils.d.ts +2 -2
  212. package/dist/esm/util/object-utils.js +1 -1
  213. package/dist/esm/util/type-utils.d.ts +27 -19
  214. package/helpers/mssql.d.ts +1 -0
  215. package/helpers/mssql.js +1 -0
  216. package/package.json +15 -10
@@ -13,6 +13,8 @@ import { UniqueConstraintNode } from '../operation-node/unique-constraint-node.j
13
13
  import { CheckConstraintNode } from '../operation-node/check-constraint-node.js';
14
14
  import { parseTable } from '../parser/table-parser.js';
15
15
  import { parseOnCommitAction } from '../parser/on-commit-action-parse.js';
16
+ import { UniqueConstraintNodeBuilder, } from './unique-constraint-builder.js';
17
+ import { parseExpression } from '../parser/expression-parser.js';
16
18
  /**
17
19
  * This builder can be used to create a `create table` query.
18
20
  */
@@ -84,7 +86,7 @@ export class CreateTableBuilder {
84
86
  * ```
85
87
  *
86
88
  * With this method, it's once again good to remember that Kysely just builds the
87
- * query and doesn't provide the same API for all databses. For example, some
89
+ * query and doesn't provide the same API for all databases. For example, some
88
90
  * databases like older MySQL don't support the `references` statement in the
89
91
  * column definition. Instead foreign key constraints need to be defined in the
90
92
  * `create table` query. See the next example:
@@ -143,11 +145,17 @@ export class CreateTableBuilder {
143
145
  * ```ts
144
146
  * addUniqueConstraint('first_name_last_name_unique', ['first_name', 'last_name'])
145
147
  * ```
148
+ *
149
+ * In dialects such as PostgreSQL you can specify `nulls not distinct` as follows:
150
+ * ```ts
151
+ * addUniqueConstraint('first_name_last_name_unique', ['first_name', 'last_name'], (builder) => builder.nullsNotDistinct())
152
+ * ```
146
153
  */
147
- addUniqueConstraint(constraintName, columns) {
154
+ addUniqueConstraint(constraintName, columns, build = noop) {
155
+ const uniqueConstraintBuilder = build(new UniqueConstraintNodeBuilder(UniqueConstraintNode.create(columns, constraintName)));
148
156
  return new CreateTableBuilder({
149
157
  ...this.#props,
150
- node: CreateTableNode.cloneWithConstraint(this.#props.node, UniqueConstraintNode.create(columns, constraintName)),
158
+ node: CreateTableNode.cloneWithConstraint(this.#props.node, uniqueConstraintBuilder.toOperationNode()),
151
159
  });
152
160
  }
153
161
  /**
@@ -270,6 +278,33 @@ export class CreateTableBuilder {
270
278
  node: CreateTableNode.cloneWithEndModifier(this.#props.node, modifier.toOperationNode()),
271
279
  });
272
280
  }
281
+ /**
282
+ * Allows to create table from `select` query.
283
+ *
284
+ * ### Examples
285
+ *
286
+ * ```ts
287
+ * db.schema.createTable('copy')
288
+ * .temporary()
289
+ * .as(db.selectFrom('person').select(['first_name', 'last_name']))
290
+ * .execute()
291
+ * ```
292
+ *
293
+ * The generated SQL (PostgreSQL):
294
+ *
295
+ * ```sql
296
+ * create temporary table "copy" as
297
+ * select "first_name", "last_name" from "person"
298
+ * ```
299
+ */
300
+ as(expression) {
301
+ return new CreateTableBuilder({
302
+ ...this.#props,
303
+ node: CreateTableNode.cloneWith(this.#props.node, {
304
+ selectQuery: parseExpression(expression),
305
+ }),
306
+ });
307
+ }
273
308
  /**
274
309
  * Calls the given function passing `this` as the only argument.
275
310
  *
@@ -0,0 +1,14 @@
1
+ import { OperationNodeSource } from '../operation-node/operation-node-source.js';
2
+ import { UniqueConstraintNode } from '../operation-node/unique-constraint-node.js';
3
+ export declare class UniqueConstraintNodeBuilder implements OperationNodeSource {
4
+ #private;
5
+ constructor(node: UniqueConstraintNode);
6
+ toOperationNode(): UniqueConstraintNode;
7
+ /**
8
+ * Adds `nulls not distinct` to the unique constraint definition
9
+ *
10
+ * Supported by PostgreSQL dialect only
11
+ */
12
+ nullsNotDistinct(): UniqueConstraintNodeBuilder;
13
+ }
14
+ export type UniqueConstraintNodeBuilderCallback = (builder: UniqueConstraintNodeBuilder) => UniqueConstraintNodeBuilder;
@@ -0,0 +1,21 @@
1
+ /// <reference types="./unique-constraint-builder.d.ts" />
2
+ import { UniqueConstraintNode } from '../operation-node/unique-constraint-node.js';
3
+ import { preventAwait } from '../util/prevent-await.js';
4
+ export class UniqueConstraintNodeBuilder {
5
+ #node;
6
+ constructor(node) {
7
+ this.#node = node;
8
+ }
9
+ toOperationNode() {
10
+ return this.#node;
11
+ }
12
+ /**
13
+ * Adds `nulls not distinct` to the unique constraint definition
14
+ *
15
+ * Supported by PostgreSQL dialect only
16
+ */
17
+ nullsNotDistinct() {
18
+ return new UniqueConstraintNodeBuilder(UniqueConstraintNode.cloneWith(this.#node, { nullsNotDistinct: true }));
19
+ }
20
+ }
21
+ preventAwait(UniqueConstraintNodeBuilder, "don't await UniqueConstraintNodeBuilder instances directly.");
@@ -44,7 +44,11 @@ function defaultLogger(event) {
44
44
  console.error(`kysely:error: ${event.error.stack ?? event.error.message}`);
45
45
  }
46
46
  else {
47
- console.error(`kysely:error: ${event}`);
47
+ console.error(`kysely:error: ${JSON.stringify({
48
+ error: event.error,
49
+ query: event.query.sql,
50
+ queryDurationMillis: event.queryDurationMillis,
51
+ })}`);
48
52
  }
49
53
  }
50
54
  }
@@ -6,7 +6,7 @@ export declare function isNumber(obj: unknown): obj is number;
6
6
  export declare function isBoolean(obj: unknown): obj is boolean;
7
7
  export declare function isNull(obj: unknown): obj is null;
8
8
  export declare function isDate(obj: unknown): obj is Date;
9
- export declare function isBigInt(obj: unknown): obj is BigInt;
9
+ export declare function isBigInt(obj: unknown): obj is bigint;
10
10
  export declare function isBuffer(obj: unknown): obj is {
11
11
  length: number;
12
12
  };
@@ -16,7 +16,7 @@ export declare function isArrayBufferOrView(obj: unknown): obj is ArrayBuffer |
16
16
  export declare function isPlainObject(obj: unknown): obj is Record<string, unknown>;
17
17
  export declare function getLast<T>(arr: ArrayLike<T>): T | undefined;
18
18
  export declare function freeze<T>(obj: T): Readonly<T>;
19
- export declare function asArray<T>(arg: T | T[]): T[];
19
+ export declare function asArray<T>(arg: T | ReadonlyArray<T>): ReadonlyArray<T>;
20
20
  export declare function asReadonlyArray<T>(arg: T | ReadonlyArray<T>): ReadonlyArray<T>;
21
21
  export declare function isReadonlyArray(arg: unknown): arg is ReadonlyArray<unknown>;
22
22
  export declare function noop<T>(obj: T): T;
@@ -57,7 +57,7 @@ export function freeze(obj) {
57
57
  return Object.freeze(obj);
58
58
  }
59
59
  export function asArray(arg) {
60
- if (Array.isArray(arg)) {
60
+ if (isReadonlyArray(arg)) {
61
61
  return arg;
62
62
  }
63
63
  else {
@@ -33,19 +33,15 @@ import { KyselyTypeError } from './type-error.js';
33
33
  * // Columns == 'id' | 'name' | 'species'
34
34
  * ```
35
35
  */
36
- export type AnyColumn<DB, TB extends keyof DB> = [
37
- DB
38
- ] extends [unknown] ? {
36
+ export type AnyColumn<DB, TB extends keyof DB> = {
39
37
  [T in TB]: keyof DB[T];
40
- }[TB] & string : never;
38
+ }[TB] & string;
41
39
  /**
42
40
  * Extracts a column type.
43
41
  */
44
- export type ExtractColumnType<DB, TB extends keyof DB, C> = [
45
- DB
46
- ] extends [unknown] ? {
42
+ export type ExtractColumnType<DB, TB extends keyof DB, C> = {
47
43
  [T in TB]: C extends keyof DB[T] ? DB[T][C] : never;
48
- }[TB] : never;
44
+ }[TB];
49
45
  /**
50
46
  * Given a database type and a union of table names in that db, returns
51
47
  * a union type with all possible `table`.`column` combinations.
@@ -77,21 +73,17 @@ export type ExtractColumnType<DB, TB extends keyof DB, C> = [
77
73
  * // Columns == 'person.id' | 'pet.name' | 'pet.species'
78
74
  * ```
79
75
  */
80
- export type AnyColumnWithTable<DB, TB extends keyof DB> = DrainOuterGeneric<{
81
- [T in TB]: T extends string ? keyof DB[T] extends string ? `${T}.${keyof DB[T]}` : never : never;
82
- }[TB]>;
76
+ export type AnyColumnWithTable<DB, TB extends keyof DB> = {
77
+ [T in TB]: `${T & string}.${keyof DB[T] & string}`;
78
+ }[TB];
83
79
  /**
84
80
  * Just like {@link AnyColumn} but with a ` as <string>` suffix.
85
81
  */
86
- export type AnyAliasedColumn<DB, TB extends keyof DB> = DrainOuterGeneric<{
87
- [T in TB]: T extends string ? keyof DB[T] extends string ? `${keyof DB[T]} as ${string}` : never : never;
88
- }[TB]>;
82
+ export type AnyAliasedColumn<DB, TB extends keyof DB> = `${AnyColumn<DB, TB>} as ${string}`;
89
83
  /**
90
84
  * Just like {@link AnyColumnWithTable} but with a ` as <string>` suffix.
91
85
  */
92
- export type AnyAliasedColumnWithTable<DB, TB extends keyof DB> = DrainOuterGeneric<{
93
- [T in TB]: T extends string ? keyof DB[T] extends string ? `${T}.${keyof DB[T]} as ${string}` : never : never;
94
- }[TB]>;
86
+ export type AnyAliasedColumnWithTable<DB, TB extends keyof DB> = `${AnyColumnWithTable<DB, TB>} as ${string}`;
95
87
  /**
96
88
  * Extracts the item type of an array.
97
89
  */
@@ -123,9 +115,25 @@ export type IsAny<T> = 0 extends T & 1 ? true : false;
123
115
  * Evaluates to `true` if the types `T` and `U` are equal.
124
116
  */
125
117
  export type Equals<T, U> = (<G>() => G extends T ? 1 : 2) extends <G>() => G extends U ? 1 : 2 ? true : false;
126
- export type NarrowPartial<S, T> = DrainOuterGeneric<T extends object ? {
127
- [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];
118
+ export type NarrowPartial<O, T> = DrainOuterGeneric<T extends object ? {
119
+ [K in keyof O & string]: K extends keyof T ? T[K] extends NotNull ? Exclude<O[K], null> : T[K] extends O[K] ? T[K] : KyselyTypeError<`$narrowType() call failed: passed type does not exist in '${K}'s type union`> : O[K];
128
120
  } : never>;
121
+ /**
122
+ * A type constant for marking a column as not null. Can be used with `$narrowPartial`.
123
+ *
124
+ * Example:
125
+ *
126
+ * ```ts
127
+ * const person = await db.selectFrom('person')
128
+ * .where('nullable_column', 'is not', null)
129
+ * .selectAll()
130
+ * .$narrowType<{ nullable_column: NotNull }>()
131
+ * .executeTakeFirstOrThrow()
132
+ * ```
133
+ */
134
+ export type NotNull = {
135
+ readonly __notNull__: unique symbol;
136
+ };
129
137
  export type SqlBool = boolean | 0 | 1;
130
138
  /**
131
139
  * Utility to reduce depth of TypeScript's internal type instantiation stack.
@@ -0,0 +1 @@
1
+ export * from '../dist/cjs/helpers/mssql.js'
@@ -0,0 +1 @@
1
+ module.exports = require('../dist/cjs/helpers/mssql.js')
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "kysely",
3
- "version": "0.26.3",
3
+ "version": "0.27.1",
4
4
  "description": "Type safe SQL query builder",
5
5
  "repository": {
6
6
  "type": "git",
@@ -27,6 +27,11 @@
27
27
  "require": "./dist/cjs/helpers/mysql.js",
28
28
  "default": "./dist/cjs/helpers/mysql.js"
29
29
  },
30
+ "./helpers/mssql": {
31
+ "import": "./dist/esm/helpers/mssql.js",
32
+ "require": "./dist/cjs/helpers/mssql.js",
33
+ "default": "./dist/cjs/helpers/mssql.js"
34
+ },
30
35
  "./helpers/sqlite": {
31
36
  "import": "./dist/esm/helpers/sqlite.js",
32
37
  "require": "./dist/cjs/helpers/sqlite.js",
@@ -35,13 +40,10 @@
35
40
  },
36
41
  "scripts": {
37
42
  "clean": "rm -rf dist & rm -rf test/node/dist & rm -rf test/browser/bundle.js & rm -rf helpers",
38
- "test": "npm run build && npm run test:node:build && concurrently -n node,typings,esmimports \"npm run test:node\" \"npm run test:typings\" \"npm run test:esmimports\"",
43
+ "test": "npm run build && npm run test:node:build && npm run test:node:run && npm run test:typings && npm run test:esmimports",
39
44
  "test:node:build": "tsc -p test/node",
40
- "test:node": "concurrently -n postgres,mysql,sqlite \"npm run test:node:postgres\" \"npm run test:node:mysql\" \"npm run test:node:sqlite\"",
41
- "test:node:postgres": "DIALECT=postgres npm run test:node:run",
42
- "test:node:mysql": "DIALECT=mysql npm run test:node:run",
43
- "test:node:sqlite": "DIALECT=sqlite npm run test:node:run",
44
- "test:node:run": "mocha --reporter min --timeout 15000 test/node/dist/**/*.test.js",
45
+ "test:node": "npm run build && npm run test:node:build && npm run test:node:run",
46
+ "test:node:run": "mocha --timeout 15000 test/node/dist/**/*.test.js",
45
47
  "test:browser:build": "rm -rf test/browser/bundle.js && esbuild test/browser/main.ts --bundle --outfile=test/browser/bundle.js",
46
48
  "test:browser": "npm run build && npm run test:browser:build && node test/browser/test.js",
47
49
  "test:bun": "npm run build && cd test/bun && bun install && bun run test",
@@ -51,7 +53,7 @@
51
53
  "test:esmimports": "node scripts/check-esm-imports.js",
52
54
  "test:esbuild": "esbuild --bundle --platform=node --external:pg-native dist/esm/index.js --outfile=/dev/null",
53
55
  "prettier": "prettier --write 'src/**/*.ts' 'test/**/*.ts'",
54
- "build": "npm run clean && concurrently -n esm,cjs \"npm run build:esm\" \"npm run build:cjs\" && concurrently -n modulefix,docfix \"npm run script:module-fixup\" \"npm run script:copy-interface-doc\"",
56
+ "build": "npm run clean && npm run build:esm && npm run build:cjs && npm run script:module-fixup && npm run script:copy-interface-doc",
55
57
  "build:esm": "tsc -p tsconfig.json && npm run script:add-deno-type-references",
56
58
  "build:cjs": "tsc -p tsconfig-cjs.json",
57
59
  "script:module-fixup": "node scripts/module-fixup.js",
@@ -63,6 +65,7 @@
63
65
  "author": "Sami Koskimäki <sami@jakso.me>",
64
66
  "license": "MIT",
65
67
  "contributors": [
68
+ "Sami Koskimäki <sami@jakso.me>",
66
69
  "Igal Klebanov <igalklebanov@gmail.com>"
67
70
  ],
68
71
  "devDependencies": {
@@ -75,11 +78,11 @@
75
78
  "@types/pg": "^8.10.2",
76
79
  "@types/pg-cursor": "^2.7.0",
77
80
  "@types/sinon": "^10.0.15",
81
+ "@types/tedious": "^4.0.9",
78
82
  "better-sqlite3": "^8.4.0",
79
83
  "chai": "^4.3.7",
80
84
  "chai-as-promised": "^7.1.1",
81
85
  "chai-subset": "^1.6.0",
82
- "concurrently": "^8.1.0",
83
86
  "esbuild": "^0.17.19",
84
87
  "mocha": "^10.2.0",
85
88
  "mysql2": "^3.3.3",
@@ -88,7 +91,9 @@
88
91
  "playwright": "^1.34.3",
89
92
  "prettier": "^2.8.8",
90
93
  "sinon": "^15.1.0",
94
+ "tarn": "^3.0.2",
95
+ "tedious": "^16.4.0",
91
96
  "tsd": "^0.28.1",
92
- "typescript": "^5.1.6"
97
+ "typescript": "^5.2.2"
93
98
  }
94
99
  }