kysely 0.10.1 → 0.11.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 (156) hide show
  1. package/README.md +7 -3
  2. package/dist/cjs/dialect/dialect-adapter.d.ts +3 -2
  3. package/dist/cjs/dialect/mysql/mysql-adapter.js +1 -1
  4. package/dist/cjs/dialect/mysql/mysql-dialect.d.ts +3 -3
  5. package/dist/cjs/dialect/mysql/mysql-driver.js +25 -32
  6. package/dist/cjs/dialect/mysql/mysql-query-compiler.d.ts +0 -2
  7. package/dist/cjs/dialect/mysql/mysql-query-compiler.js +0 -6
  8. package/dist/cjs/dialect/postgres/postgres-dialect.d.ts +2 -2
  9. package/dist/cjs/dialect/postgres/postgres-driver.js +8 -19
  10. package/dist/cjs/dialect/postgres/postgres-query-compiler.d.ts +3 -0
  11. package/dist/cjs/dialect/postgres/postgres-query-compiler.js +9 -1
  12. package/dist/cjs/dialect/sqlite/sqlite-adapter.d.ts +7 -0
  13. package/dist/cjs/dialect/sqlite/sqlite-adapter.js +18 -0
  14. package/dist/cjs/dialect/sqlite/sqlite-dialect.d.ts +64 -0
  15. package/dist/cjs/dialect/sqlite/sqlite-dialect.js +33 -0
  16. package/dist/cjs/dialect/sqlite/sqlite-driver.d.ts +14 -0
  17. package/dist/cjs/dialect/sqlite/sqlite-driver.js +116 -0
  18. package/dist/cjs/dialect/sqlite/sqlite-introspector.d.ts +7 -0
  19. package/dist/cjs/dialect/sqlite/sqlite-introspector.js +44 -0
  20. package/dist/cjs/dialect/sqlite/sqlite-query-compiler.d.ts +7 -0
  21. package/dist/cjs/dialect/sqlite/sqlite-query-compiler.js +19 -0
  22. package/dist/cjs/driver/database-connection.d.ts +2 -2
  23. package/dist/cjs/driver/runtime-driver.js +1 -1
  24. package/dist/cjs/index.d.ts +46 -30
  25. package/dist/cjs/index.js +45 -29
  26. package/dist/cjs/kysely.d.ts +28 -10
  27. package/dist/cjs/kysely.js +6 -4
  28. package/dist/cjs/migration/migration.d.ts +1 -1
  29. package/dist/cjs/migration/migration.js +3 -3
  30. package/dist/cjs/operation-node/alias-node.d.ts +1 -1
  31. package/dist/cjs/operation-node/create-view-node.d.ts +1 -0
  32. package/dist/cjs/operation-node/having-node.d.ts +4 -8
  33. package/dist/cjs/operation-node/having-node.js +3 -3
  34. package/dist/cjs/operation-node/join-node.d.ts +6 -9
  35. package/dist/cjs/operation-node/join-node.js +10 -7
  36. package/dist/cjs/operation-node/on-node.d.ts +14 -0
  37. package/dist/cjs/operation-node/on-node.js +28 -0
  38. package/dist/cjs/operation-node/operation-node-transformer.d.ts +2 -0
  39. package/dist/cjs/operation-node/operation-node-transformer.js +8 -0
  40. package/dist/cjs/operation-node/operation-node-utils.d.ts +1 -1
  41. package/dist/cjs/operation-node/operation-node-visitor.d.ts +3 -0
  42. package/dist/cjs/operation-node/operation-node-visitor.js +4 -0
  43. package/dist/cjs/operation-node/operation-node.d.ts +1 -1
  44. package/dist/cjs/operation-node/query-node.d.ts +3 -3
  45. package/dist/cjs/operation-node/select-query-node.d.ts +4 -4
  46. package/dist/cjs/operation-node/where-node.d.ts +4 -8
  47. package/dist/cjs/operation-node/where-node.js +3 -3
  48. package/dist/cjs/parser/filter-parser.d.ts +1 -0
  49. package/dist/cjs/parser/filter-parser.js +49 -52
  50. package/dist/cjs/parser/returning-parser.d.ts +4 -2
  51. package/dist/cjs/parser/select-parser.d.ts +2 -2
  52. package/dist/cjs/plugin/immediate-value.ts/immediate-value-plugin.d.ts +1 -1
  53. package/dist/cjs/query-builder/delete-result.d.ts +5 -0
  54. package/dist/cjs/query-builder/delete-result.js +13 -0
  55. package/dist/cjs/query-builder/expression-builder.d.ts +2 -2
  56. package/dist/cjs/query-builder/expression-builder.js +1 -1
  57. package/dist/cjs/query-builder/function-builder.d.ts +5 -5
  58. package/dist/cjs/query-builder/function-builder.js +3 -3
  59. package/dist/cjs/query-builder/insert-result.d.ts +27 -0
  60. package/dist/cjs/query-builder/insert-result.js +35 -0
  61. package/dist/cjs/query-builder/join-builder.d.ts +3 -0
  62. package/dist/cjs/query-builder/query-builder.d.ts +95 -81
  63. package/dist/cjs/query-builder/query-builder.js +38 -41
  64. package/dist/cjs/query-builder/update-result.d.ts +5 -0
  65. package/dist/cjs/query-builder/update-result.js +13 -0
  66. package/dist/cjs/query-compiler/compiled-query.d.ts +5 -0
  67. package/dist/cjs/query-compiler/compiled-query.js +12 -0
  68. package/dist/cjs/query-compiler/default-query-compiler.d.ts +2 -0
  69. package/dist/cjs/query-compiler/default-query-compiler.js +24 -13
  70. package/dist/cjs/query-creator.d.ts +36 -26
  71. package/dist/cjs/query-creator.js +25 -17
  72. package/dist/cjs/schema/create-view-builder.d.ts +4 -0
  73. package/dist/cjs/schema/create-view-builder.js +11 -0
  74. package/dist/cjs/util/dynamic-import.d.ts +2 -0
  75. package/dist/cjs/util/dynamic-import.js +32 -0
  76. package/dist/cjs/util/log.d.ts +10 -8
  77. package/dist/cjs/util/log.js +29 -9
  78. package/dist/cjs/util/type-utils.d.ts +4 -15
  79. package/dist/esm/dialect/dialect-adapter.d.ts +3 -2
  80. package/dist/esm/dialect/mysql/mysql-adapter.js +1 -1
  81. package/dist/esm/dialect/mysql/mysql-dialect.d.ts +3 -3
  82. package/dist/esm/dialect/mysql/mysql-driver.js +26 -33
  83. package/dist/esm/dialect/mysql/mysql-query-compiler.d.ts +0 -2
  84. package/dist/esm/dialect/mysql/mysql-query-compiler.js +0 -6
  85. package/dist/esm/dialect/postgres/postgres-dialect.d.ts +2 -2
  86. package/dist/esm/dialect/postgres/postgres-driver.js +8 -19
  87. package/dist/esm/dialect/postgres/postgres-query-compiler.d.ts +3 -0
  88. package/dist/esm/dialect/postgres/postgres-query-compiler.js +9 -1
  89. package/dist/esm/dialect/sqlite/sqlite-adapter.d.ts +7 -0
  90. package/dist/esm/dialect/sqlite/sqlite-adapter.js +14 -0
  91. package/dist/esm/dialect/sqlite/sqlite-dialect.d.ts +64 -0
  92. package/dist/esm/dialect/sqlite/sqlite-dialect.js +29 -0
  93. package/dist/esm/dialect/sqlite/sqlite-driver.d.ts +14 -0
  94. package/dist/esm/dialect/sqlite/sqlite-driver.js +112 -0
  95. package/dist/esm/dialect/sqlite/sqlite-introspector.d.ts +7 -0
  96. package/dist/esm/dialect/sqlite/sqlite-introspector.js +40 -0
  97. package/dist/esm/dialect/sqlite/sqlite-query-compiler.d.ts +7 -0
  98. package/dist/esm/dialect/sqlite/sqlite-query-compiler.js +15 -0
  99. package/dist/esm/driver/database-connection.d.ts +2 -2
  100. package/dist/esm/driver/runtime-driver.js +1 -1
  101. package/dist/esm/index.d.ts +46 -30
  102. package/dist/esm/index.js +45 -29
  103. package/dist/esm/kysely.d.ts +28 -10
  104. package/dist/esm/kysely.js +6 -4
  105. package/dist/esm/migration/migration.d.ts +1 -1
  106. package/dist/esm/migration/migration.js +3 -3
  107. package/dist/esm/operation-node/alias-node.d.ts +1 -1
  108. package/dist/esm/operation-node/create-view-node.d.ts +1 -0
  109. package/dist/esm/operation-node/having-node.d.ts +4 -8
  110. package/dist/esm/operation-node/having-node.js +3 -3
  111. package/dist/esm/operation-node/join-node.d.ts +6 -9
  112. package/dist/esm/operation-node/join-node.js +10 -7
  113. package/dist/esm/operation-node/on-node.d.ts +14 -0
  114. package/dist/esm/operation-node/on-node.js +25 -0
  115. package/dist/esm/operation-node/operation-node-transformer.d.ts +2 -0
  116. package/dist/esm/operation-node/operation-node-transformer.js +8 -0
  117. package/dist/esm/operation-node/operation-node-utils.d.ts +1 -1
  118. package/dist/esm/operation-node/operation-node-visitor.d.ts +3 -0
  119. package/dist/esm/operation-node/operation-node-visitor.js +4 -0
  120. package/dist/esm/operation-node/operation-node.d.ts +1 -1
  121. package/dist/esm/operation-node/query-node.d.ts +3 -3
  122. package/dist/esm/operation-node/select-query-node.d.ts +4 -4
  123. package/dist/esm/operation-node/where-node.d.ts +4 -8
  124. package/dist/esm/operation-node/where-node.js +3 -3
  125. package/dist/esm/parser/filter-parser.d.ts +1 -0
  126. package/dist/esm/parser/filter-parser.js +48 -52
  127. package/dist/esm/parser/returning-parser.d.ts +4 -2
  128. package/dist/esm/parser/select-parser.d.ts +2 -2
  129. package/dist/esm/plugin/immediate-value.ts/immediate-value-plugin.d.ts +1 -1
  130. package/dist/esm/query-builder/delete-result.d.ts +5 -0
  131. package/dist/esm/query-builder/delete-result.js +9 -0
  132. package/dist/esm/query-builder/expression-builder.d.ts +2 -2
  133. package/dist/esm/query-builder/expression-builder.js +1 -1
  134. package/dist/esm/query-builder/function-builder.d.ts +5 -5
  135. package/dist/esm/query-builder/function-builder.js +3 -3
  136. package/dist/esm/query-builder/insert-result.d.ts +27 -0
  137. package/dist/esm/query-builder/insert-result.js +31 -0
  138. package/dist/esm/query-builder/join-builder.d.ts +3 -0
  139. package/dist/esm/query-builder/query-builder.d.ts +95 -81
  140. package/dist/esm/query-builder/query-builder.js +38 -41
  141. package/dist/esm/query-builder/update-result.d.ts +5 -0
  142. package/dist/esm/query-builder/update-result.js +9 -0
  143. package/dist/esm/query-compiler/compiled-query.d.ts +5 -0
  144. package/dist/esm/query-compiler/compiled-query.js +11 -1
  145. package/dist/esm/query-compiler/default-query-compiler.d.ts +2 -0
  146. package/dist/esm/query-compiler/default-query-compiler.js +24 -13
  147. package/dist/esm/query-creator.d.ts +36 -26
  148. package/dist/esm/query-creator.js +25 -17
  149. package/dist/esm/schema/create-view-builder.d.ts +4 -0
  150. package/dist/esm/schema/create-view-builder.js +11 -0
  151. package/dist/esm/util/dynamic-import.d.ts +2 -0
  152. package/dist/esm/util/dynamic-import.js +27 -0
  153. package/dist/esm/util/log.d.ts +10 -8
  154. package/dist/esm/util/log.js +30 -10
  155. package/dist/esm/util/type-utils.d.ts +4 -15
  156. package/package.json +3 -1
@@ -10,6 +10,10 @@ export declare class CreateViewBuilder implements OperationNodeSource, Compilabl
10
10
  #private;
11
11
  constructor(props: CreateViewBuilderProps);
12
12
  materialized(): CreateViewBuilder;
13
+ /**
14
+ * Only implemented on some dialects like SQLite. On most dialects, use {@link orReplace}.
15
+ */
16
+ ifNotExists(): CreateViewBuilder;
13
17
  orReplace(): CreateViewBuilder;
14
18
  columns(columns: string[]): CreateViewBuilder;
15
19
  as(query: AnyQueryBuilder | AnyRawBuilder): CreateViewBuilder;
@@ -28,6 +28,17 @@ export class CreateViewBuilder {
28
28
  }),
29
29
  });
30
30
  }
31
+ /**
32
+ * Only implemented on some dialects like SQLite. On most dialects, use {@link orReplace}.
33
+ */
34
+ ifNotExists() {
35
+ return new CreateViewBuilder({
36
+ ...this.#props,
37
+ createViewNode: CreateViewNode.cloneWith(this.#props.createViewNode, {
38
+ ifNotExists: true,
39
+ }),
40
+ });
41
+ }
31
42
  orReplace() {
32
43
  return new CreateViewBuilder({
33
44
  ...this.#props,
@@ -0,0 +1,2 @@
1
+ export declare function importFunction<T extends Function>(modulePath: string): Promise<T>;
2
+ export declare function importNamedFunction<T extends Function>(modulePath: string, exportName: string): Promise<T>;
@@ -0,0 +1,27 @@
1
+ import { isFunction, isObject } from './object-utils.js';
2
+ export async function importFunction(modulePath) {
3
+ const module = await import(modulePath);
4
+ const errorMessage = `module "${modulePath}" doesn't export a function`;
5
+ if (isFunction(module)) {
6
+ return module;
7
+ }
8
+ else if (isObject(module) && isFunction(module.default)) {
9
+ return module.default;
10
+ }
11
+ throw new Error(errorMessage);
12
+ }
13
+ export async function importNamedFunction(modulePath, exportName) {
14
+ const module = await import(modulePath);
15
+ const errorMessage = `no function export named "${exportName}" found in module "${modulePath}"`;
16
+ if (!isObject(module)) {
17
+ throw new Error(errorMessage);
18
+ }
19
+ if (isFunction(module[exportName])) {
20
+ return module[exportName];
21
+ }
22
+ else if (isObject(module.default) &&
23
+ isFunction(module.default[exportName])) {
24
+ return module.default[exportName];
25
+ }
26
+ throw new Error(errorMessage);
27
+ }
@@ -1,19 +1,21 @@
1
+ import { CompiledQuery } from '../index.js';
1
2
  import { ArrayItemType } from './type-utils.js';
2
3
  export declare const LOG_LEVELS: readonly ["query", "error"];
3
4
  export declare type LogLevel = ArrayItemType<typeof LOG_LEVELS>;
4
- export declare class Log {
5
- #private;
6
- constructor(levels: ReadonlyArray<LogLevel>);
7
- query(getEvent: () => QueryLogEvent): void;
8
- error(getEvent: () => ErrorLogEvent): void;
9
- }
10
- export declare type LogEvent = QueryLogEvent | ErrorLogEvent;
11
5
  export interface QueryLogEvent {
12
6
  readonly level: 'query';
13
- readonly sql: string;
7
+ readonly query: CompiledQuery;
14
8
  readonly queryDurationMillis: number;
15
9
  }
16
10
  export interface ErrorLogEvent {
17
11
  readonly level: 'error';
18
12
  readonly error: unknown;
19
13
  }
14
+ export declare type LogEvent = QueryLogEvent | ErrorLogEvent;
15
+ export declare type LogConfig = ReadonlyArray<LogLevel> | ((event: LogEvent) => void);
16
+ export declare class Log {
17
+ #private;
18
+ constructor(config: LogConfig);
19
+ query(getEvent: () => QueryLogEvent): void;
20
+ error(getEvent: () => ErrorLogEvent): void;
21
+ }
@@ -1,25 +1,45 @@
1
- import { freeze } from './object-utils.js';
2
- export const LOG_LEVELS = ['query', 'error'];
1
+ import { freeze, isFunction } from './object-utils.js';
2
+ export const LOG_LEVELS = freeze(['query', 'error']);
3
3
  export class Log {
4
4
  #levels;
5
- constructor(levels) {
6
- this.#levels = freeze({
7
- query: levels.includes('query'),
8
- error: levels.includes('error'),
9
- });
5
+ #logger;
6
+ constructor(config) {
7
+ if (isFunction(config)) {
8
+ this.#logger = config;
9
+ this.#levels = freeze({
10
+ query: true,
11
+ error: true,
12
+ });
13
+ }
14
+ else {
15
+ this.#levels = freeze({
16
+ query: config.includes('query'),
17
+ error: config.includes('error'),
18
+ });
19
+ }
10
20
  }
11
21
  query(getEvent) {
12
22
  if (this.#levels.query) {
13
- this.#defaultQuery(getEvent());
23
+ if (this.#logger) {
24
+ this.#logger(getEvent());
25
+ }
26
+ else {
27
+ this.#defaultQuery(getEvent());
28
+ }
14
29
  }
15
30
  }
16
31
  error(getEvent) {
17
32
  if (this.#levels.error) {
18
- this.#defaultError(getEvent());
33
+ if (this.#logger) {
34
+ this.#logger(getEvent());
35
+ }
36
+ else {
37
+ this.#defaultError(getEvent());
38
+ }
19
39
  }
20
40
  }
21
41
  #defaultQuery(event) {
22
- console.log(`kysely:query: ${event.sql}`);
42
+ console.log(`kysely:query: ${event.query.sql}`);
23
43
  console.log(`kysely:query: duration: ${event.queryDurationMillis.toFixed(1)}ms`);
24
44
  }
25
45
  #defaultError(event) {
@@ -1,6 +1,9 @@
1
1
  import { AliasedRawBuilder, RawBuilder } from '../raw-builder/raw-builder.js';
2
2
  import { AliasedQueryBuilder, QueryBuilder } from '../query-builder/query-builder.js';
3
3
  import { ExpressionBuilder } from '../query-builder/expression-builder.js';
4
+ import { InsertResult } from '../query-builder/insert-result.js';
5
+ import { DeleteResult } from '../query-builder/delete-result.js';
6
+ import { UpdateResult } from '../query-builder/update-result.js';
4
7
  /**
5
8
  * Given an object type, extracts the union of all value types.
6
9
  */
@@ -134,25 +137,11 @@ export declare type QueryBuilderFactory<DB, TB extends keyof DB> = (qb: Expressi
134
137
  export declare type AliasedQueryBuilderFactory<DB, TB extends keyof DB> = (qb: ExpressionBuilder<DB, TB>) => AnyAliasedQueryBuilder;
135
138
  export declare type RawBuilderFactory<DB, TB extends keyof DB> = (qb: ExpressionBuilder<DB, TB>) => AnyRawBuilder;
136
139
  export declare type AliasedRawBuilderFactory<DB, TB extends keyof DB> = (qb: ExpressionBuilder<DB, TB>) => AnyAliasedRawBuilder;
137
- export interface InsertResultTypeTag {
138
- /** @internal */
139
- readonly __isInsertResultTypeTag__: true;
140
- }
141
- export interface DeleteResultTypeTag {
142
- /** @internal */
143
- readonly __isDeleteResultTypeTag__: true;
144
- }
145
- export interface UpdateResultTypeTag {
146
- /** @internal */
147
- readonly __isUpdateResultTypeTag__: true;
148
- }
149
140
  export interface GeneratedPlaceholder {
150
141
  /** @internal */
151
142
  readonly __isGeneratedPlaceholder__: true;
152
143
  }
153
- export declare type ManyResultRowType<O> = O extends InsertResultTypeTag ? number | undefined : O extends DeleteResultTypeTag ? number : O extends UpdateResultTypeTag ? number : O;
154
- export declare type SingleResultRowType<O> = O extends InsertResultTypeTag ? number | undefined : O extends DeleteResultTypeTag ? number : O extends UpdateResultTypeTag ? number : O | undefined;
155
- export declare type NonEmptySingleResultRowType<O> = O extends InsertResultTypeTag ? number : O extends DeleteResultTypeTag ? number : O extends UpdateResultTypeTag ? number : O;
144
+ export declare type SingleResultType<O> = O extends InsertResult ? O : O extends DeleteResult ? O : O extends UpdateResult ? O : O | undefined;
156
145
  export declare type UnknownRow = Record<string, unknown>;
157
146
  export declare type Nullable<T> = {
158
147
  [P in keyof T]: T[P] | null;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "kysely",
3
- "version": "0.10.1",
3
+ "version": "0.11.3",
4
4
  "description": "Type safe SQL query builder",
5
5
  "repository": {
6
6
  "type": "git",
@@ -38,10 +38,12 @@
38
38
  "@types/node": "^16.11.9"
39
39
  },
40
40
  "devDependencies": {
41
+ "@types/better-sqlite3": "^7.4.1",
41
42
  "@types/chai": "^4.2.22",
42
43
  "@types/chai-subset": "^1.3.3",
43
44
  "@types/mocha": "^9.0.0",
44
45
  "@types/pg": "^8.6.1",
46
+ "better-sqlite3": "^7.4.5",
45
47
  "chai": "^4.3.4",
46
48
  "chai-subset": "^1.6.0",
47
49
  "mocha": "^9.1.3",