drizzle-orm 0.12.0-beta.16 → 0.12.0-beta.18

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/.turbo/turbo-build:int.log +13 -0
  2. package/.turbo/turbo-test:types.log +5 -0
  3. package/README.md +0 -30
  4. package/{alias.d.ts → dist/alias.d.ts} +0 -0
  5. package/{alias.js → dist/alias.js} +0 -0
  6. package/{alias.js.map → dist/alias.js.map} +0 -0
  7. package/{branded-types.d.ts → dist/branded-types.d.ts} +0 -0
  8. package/{branded-types.js → dist/branded-types.js} +0 -0
  9. package/{branded-types.js.map → dist/branded-types.js.map} +0 -0
  10. package/{column-builder.d.ts → dist/column-builder.d.ts} +0 -0
  11. package/{column-builder.js → dist/column-builder.js} +0 -0
  12. package/{column-builder.js.map → dist/column-builder.js.map} +0 -0
  13. package/{column.d.ts → dist/column.d.ts} +0 -0
  14. package/{column.js → dist/column.js} +0 -0
  15. package/{column.js.map → dist/column.js.map} +0 -0
  16. package/{connection.d.ts → dist/connection.d.ts} +0 -0
  17. package/{connection.js → dist/connection.js} +5 -28
  18. package/dist/connection.js.map +1 -0
  19. package/{expressions.d.ts → dist/expressions.d.ts} +0 -0
  20. package/{expressions.js → dist/expressions.js} +0 -0
  21. package/{expressions.js.map → dist/expressions.js.map} +0 -0
  22. package/{index.d.ts → dist/index.d.ts} +0 -0
  23. package/{index.js → dist/index.js} +0 -0
  24. package/{index.js.map → dist/index.js.map} +0 -0
  25. package/{operations.d.ts → dist/operations.d.ts} +0 -0
  26. package/{operations.js → dist/operations.js} +0 -0
  27. package/{operations.js.map → dist/operations.js.map} +0 -0
  28. package/dist/package.json +58 -0
  29. package/dist/query-promise.d.ts +7 -0
  30. package/dist/query-promise.js +27 -0
  31. package/dist/query-promise.js.map +1 -0
  32. package/dist/readme.md +30 -0
  33. package/{sql → dist/sql}/expressions/conditions.d.ts +0 -0
  34. package/{sql → dist/sql}/expressions/conditions.js +0 -0
  35. package/{sql → dist/sql}/expressions/conditions.js.map +0 -0
  36. package/{sql → dist/sql}/expressions/index.d.ts +0 -0
  37. package/{sql → dist/sql}/expressions/index.js +0 -0
  38. package/{sql → dist/sql}/expressions/index.js.map +0 -0
  39. package/{sql → dist/sql}/expressions/select.d.ts +0 -0
  40. package/{sql → dist/sql}/expressions/select.js +0 -0
  41. package/{sql → dist/sql}/expressions/select.js.map +0 -0
  42. package/{sql → dist/sql}/index.d.ts +0 -0
  43. package/{sql → dist/sql}/index.js +0 -0
  44. package/{sql → dist/sql}/index.js.map +0 -0
  45. package/{table.d.ts → dist/table.d.ts} +0 -0
  46. package/{table.js → dist/table.js} +0 -0
  47. package/{table.js.map → dist/table.js.map} +0 -0
  48. package/{utils.d.ts → dist/utils.d.ts} +0 -0
  49. package/{utils.js → dist/utils.js} +0 -0
  50. package/{utils.js.map → dist/utils.js.map} +0 -0
  51. package/package.json +6 -3
  52. package/package.tgz +0 -0
  53. package/src/alias.ts +47 -0
  54. package/src/column-builder.ts +69 -0
  55. package/src/column.ts +86 -0
  56. package/src/connection.ts +99 -0
  57. package/src/expressions.ts +1 -0
  58. package/src/index.ts +4 -0
  59. package/src/operations.ts +22 -0
  60. package/src/query-promise.ts +31 -0
  61. package/src/sql/expressions/conditions.ts +168 -0
  62. package/src/sql/expressions/index.ts +2 -0
  63. package/src/sql/expressions/select.ts +10 -0
  64. package/src/sql/index.ts +254 -0
  65. package/src/table.ts +45 -0
  66. package/src/utils.ts +140 -0
  67. package/tsconfig.build.json +8 -0
  68. package/tsconfig.build.tsbuildinfo +1 -0
  69. package/tsconfig.json +7 -0
  70. package/tsconfig.tsbuildinfo +1 -0
  71. package/connection.js.map +0 -1
@@ -0,0 +1,13 @@
1
+
2
+ > drizzle-orm@0.12.0-beta.17 build:int /Users/alexblokh/Development/drizzle-orm-new/drizzle-orm
3
+ > pnpm build && pnpm run pack
4
+
5
+
6
+ > drizzle-orm@0.12.0-beta.17 build /Users/alexblokh/Development/drizzle-orm-new/drizzle-orm
7
+ > tsc -p tsconfig.build.json
8
+
9
+
10
+ > drizzle-orm@0.12.0-beta.17 pack /Users/alexblokh/Development/drizzle-orm-new/drizzle-orm
11
+ > cp ../README.md package.json dist/ && (cd dist && pnpm pack --pack-destination ..) && rm -f package.tgz && mv *.tgz package.tgz
12
+
13
+ drizzle-orm-0.12.0-beta.17.tgz
@@ -0,0 +1,5 @@
1
+
2
+ > drizzle-orm@0.12.0-beta.17 test:types /Users/alexblokh/Development/drizzle-orm-new/drizzle-orm
3
+ > echo WARN: No tests defined!
4
+
5
+ WARN: No tests defined!
package/README.md CHANGED
@@ -1,30 +0,0 @@
1
- ## DrizzleORM
2
- DrizzleORM is a TypeScript ORM library with a [drizzle-kit](#migrations) CLI companion for automatic SQL migrations generation.
3
- It's meant to be a library, not a framework, stay as an opt-in solution all the time at any levels.
4
- We try to follow SQL-like syntax whenever possible, be strongly typed ground top and fail in compile time, not in runtime.
5
- We implemented best in class `joins` and second to none `migrations generation`.
6
- Library has almost zero dependencies and being battle tested on production projects by multiple teams 🚀
7
-
8
- | database | support | |
9
- |:-- | :---: | :-- |
10
- | PostgreSQL | ✅ |[Docs](https://github.com/drizzle-team/drizzle-orm/tree/main/drizzle-orm-pg)|
11
- | MySQL | ✅ |[Docs](https://github.com/drizzle-team/drizzle-orm/tree/main/drizzle-orm-mysql)| |
12
- | SQLite | ⏳ | |
13
- | DynamoDB | ⏳ | |
14
- | MS SQL | ⏳ | |
15
- | CockroachDB | ⏳ | |
16
-
17
- ### Installation
18
- ```bash
19
- // postgresql
20
- npm install drizzle-orm drizzle-orm-pg
21
- npm install -D drizzle-kit
22
-
23
- // mysql
24
- npm install drizzle-orm drizzle-orm-mysql
25
- npm install -D drizzle-kit
26
-
27
- // sqlite
28
- npm install drizzle-orm drizzle-orm-sqlite
29
- npm install -D drizzle-kit
30
- ```
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
@@ -1,32 +1,6 @@
1
1
  "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || function (mod) {
19
- if (mod && mod.__esModule) return mod;
20
- var result = {};
21
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
- __setModuleDefault(result, mod);
23
- return result;
24
- };
25
2
  Object.defineProperty(exports, "__esModule", { value: true });
26
3
  exports.readMigrationFiles = exports.NoopLogger = exports.DefaultLogger = exports.ConsoleLogWriter = void 0;
27
- const crypto = __importStar(require("crypto"));
28
- const fs = __importStar(require("fs"));
29
- const path = __importStar(require("path"));
30
4
  class ConsoleLogWriter {
31
5
  write(message) {
32
6
  console.log(message);
@@ -56,6 +30,9 @@ class NoopLogger {
56
30
  }
57
31
  exports.NoopLogger = NoopLogger;
58
32
  function readMigrationFiles(config) {
33
+ const fs = require('fs');
34
+ const crypto = require('crypto');
35
+ const path = require('path');
59
36
  let migrationFolderTo;
60
37
  if (typeof config === 'string') {
61
38
  const configAsString = fs.readFileSync(path.resolve('.', config), 'utf8');
@@ -68,9 +45,9 @@ function readMigrationFiles(config) {
68
45
  if (!migrationFolderTo) {
69
46
  throw Error('no migration folder defined');
70
47
  }
71
- const files1 = fs.readdirSync(migrationFolderTo);
48
+ const files = fs.readdirSync(migrationFolderTo);
72
49
  const migrationQueries = [];
73
- for (const migrationFolder of files1) {
50
+ for (const migrationFolder of files) {
74
51
  if (migrationFolder === '.DS_Store') {
75
52
  continue;
76
53
  }
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connection.js","sourceRoot":"","sources":["../src/connection.ts"],"names":[],"mappings":"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"}
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
@@ -0,0 +1,58 @@
1
+ {
2
+ "name": "drizzle-orm",
3
+ "version": "0.12.0-beta.17",
4
+ "description": "Drizzle ORM package for SQL databases",
5
+ "main": "index.js",
6
+ "types": "index.d.ts",
7
+ "scripts": {
8
+ "build": "tsc -p tsconfig.build.json",
9
+ "test:types": "echo WARN: No tests defined!",
10
+ "pack": "cp ../README.md package.json dist/ && (cd dist && pnpm pack --pack-destination ..) && rm -f package.tgz && mv *.tgz package.tgz",
11
+ "publish": "npm publish package.tgz",
12
+ "publish:beta": "npm publish package.tgz --tag beta",
13
+ "release:beta": "pnpm build && pnpm version prerelease && pnpm run pack && pnpm publish:beta",
14
+ "build:int": "pnpm build && pnpm run pack"
15
+ },
16
+ "publishConfig": {
17
+ "access": "public"
18
+ },
19
+ "repository": {
20
+ "type": "git",
21
+ "url": "git+https://github.com/drizzle-team/drizzle-orm.git"
22
+ },
23
+ "keywords": [
24
+ "orm",
25
+ "pg",
26
+ "mysql",
27
+ "postgresql",
28
+ "postgres",
29
+ "database",
30
+ "sql",
31
+ "typescript"
32
+ ],
33
+ "author": "",
34
+ "license": "Apache-2.0",
35
+ "bugs": {
36
+ "url": "https://github.com/drizzle-team/drizzle-orm/issues"
37
+ },
38
+ "homepage": "https://github.com/drizzle-team/drizzle-orm#readme",
39
+ "peerDependencies": {
40
+ "drizzle-orm-mysql": ">=0.12.0 <0.13.0 || >=0.12.0-beta.0 <0.13.0-beta.0",
41
+ "drizzle-orm-pg": ">=0.12.0 <0.13.0 || >=0.12.0-beta.0 <0.13.0-beta.0",
42
+ "drizzle-orm-sqlite": ">=0.12.0 <0.13.0 || >=0.12.0-beta.0 <0.13.0-beta.0"
43
+ },
44
+ "peerDependenciesMeta": {
45
+ "drizzle-orm-mysql": {
46
+ "optional": true
47
+ },
48
+ "drizzle-orm-pg": {
49
+ "optional": true
50
+ },
51
+ "drizzle-orm-sqlite": {
52
+ "optional": true
53
+ }
54
+ },
55
+ "devDependencies": {
56
+ "@types/node": "^18.11.9"
57
+ }
58
+ }
@@ -0,0 +1,7 @@
1
+ export declare abstract class QueryPromise<T> implements Promise<T> {
2
+ [Symbol.toStringTag]: string;
3
+ catch<TResult = never>(onRejected?: ((reason: any) => TResult | PromiseLike<TResult>) | null | undefined): Promise<T | TResult>;
4
+ finally(onFinally?: (() => void) | null | undefined): Promise<T>;
5
+ then<TResult1 = T, TResult2 = never>(onFulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | undefined | null, onRejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | undefined | null): Promise<TResult1 | TResult2>;
6
+ protected abstract execute(): Promise<T>;
7
+ }
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ var _a;
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.QueryPromise = void 0;
5
+ class QueryPromise {
6
+ constructor() {
7
+ this[_a] = 'QueryPromise';
8
+ }
9
+ catch(onRejected) {
10
+ return this.then(undefined, onRejected);
11
+ }
12
+ finally(onFinally) {
13
+ return this.then((value) => {
14
+ onFinally === null || onFinally === void 0 ? void 0 : onFinally();
15
+ return value;
16
+ }, (reason) => {
17
+ onFinally === null || onFinally === void 0 ? void 0 : onFinally();
18
+ return Promise.reject(reason);
19
+ });
20
+ }
21
+ then(onFulfilled, onRejected) {
22
+ return this.execute().then(onFulfilled, onRejected);
23
+ }
24
+ }
25
+ exports.QueryPromise = QueryPromise;
26
+ _a = Symbol.toStringTag;
27
+ //# sourceMappingURL=query-promise.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query-promise.js","sourceRoot":"","sources":["../src/query-promise.ts"],"names":[],"mappings":";;;;AAAA,MAAsB,YAAY;IAAlC;QACC,QAAoB,GAAG,cAAc,CAAC;IA6BvC,CAAC;IA3BA,KAAK,CACJ,UAAiF;QAEjF,OAAO,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;IACzC,CAAC;IAED,OAAO,CAAC,SAA2C;QAClD,OAAO,IAAI,CAAC,IAAI,CACf,CAAC,KAAK,EAAE,EAAE;YACT,SAAS,aAAT,SAAS,uBAAT,SAAS,EAAI,CAAC;YACd,OAAO,KAAK,CAAC;QACd,CAAC,EACD,CAAC,MAAM,EAAE,EAAE;YACV,SAAS,aAAT,SAAS,uBAAT,SAAS,EAAI,CAAC;YACd,OAAO,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC/B,CAAC,CACD,CAAC;IACH,CAAC;IAED,IAAI,CACH,WAAiF,EACjF,UAAmF;QAEnF,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;IACrD,CAAC;CAGD;AA9BD,oCA8BC;KA7BC,MAAM,CAAC,WAAW"}
package/dist/readme.md ADDED
@@ -0,0 +1,30 @@
1
+ ## DrizzleORM
2
+ DrizzleORM is a TypeScript ORM library with a [drizzle-kit](#migrations) CLI companion for automatic SQL migrations generation.
3
+ It's meant to be a library, not a framework, stay as an opt-in solution all the time at any levels.
4
+ We try to follow SQL-like syntax whenever possible, be strongly typed ground top and fail in compile time, not in runtime.
5
+ We implemented best in class `joins` and second to none `migrations generation`.
6
+ Library has almost zero dependencies and being battle tested on production projects by multiple teams 🚀
7
+
8
+ | database | support | |
9
+ |:-- | :---: | :-- |
10
+ | PostgreSQL | ✅ |[Docs](https://github.com/drizzle-team/drizzle-orm/tree/main/drizzle-orm-pg)|
11
+ | MySQL | ✅ |[Docs](https://github.com/drizzle-team/drizzle-orm/tree/main/drizzle-orm-mysql)| |
12
+ | SQLite | ⏳ | |
13
+ | DynamoDB | ⏳ | |
14
+ | MS SQL | ⏳ | |
15
+ | CockroachDB | ⏳ | |
16
+
17
+ ### Installation
18
+ ```bash
19
+ // postgresql
20
+ npm install drizzle-orm drizzle-orm-pg
21
+ npm install -D drizzle-kit
22
+
23
+ // mysql
24
+ npm install drizzle-orm drizzle-orm-mysql
25
+ npm install -D drizzle-kit
26
+
27
+ // sqlite
28
+ npm install drizzle-orm drizzle-orm-sqlite
29
+ npm install -D drizzle-kit
30
+ ```
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "drizzle-orm",
3
- "version": "0.12.0-beta.16",
3
+ "version": "0.12.0-beta.18",
4
4
  "description": "Drizzle ORM package for SQL databases",
5
5
  "main": "index.js",
6
6
  "types": "index.d.ts",
@@ -43,9 +43,12 @@
43
43
  "optional": true
44
44
  }
45
45
  },
46
+ "devDependencies": {
47
+ "@types/node": "^18.11.9"
48
+ },
46
49
  "scripts": {
47
- "build": "concurrently -n build,test \"tsc -p tsconfig.build.json\" pnpm:test",
48
- "test": "echo WARN: No tests defined!",
50
+ "build": "tsc -p tsconfig.build.json",
51
+ "test:types": "echo WARN: No tests defined!",
49
52
  "pack": "cp ../README.md package.json dist/ && (cd dist && pnpm pack --pack-destination ..) && rm -f package.tgz && mv *.tgz package.tgz",
50
53
  "publish:beta": "npm publish package.tgz --tag beta",
51
54
  "release:beta": "pnpm build && pnpm version prerelease && pnpm run pack && pnpm publish:beta",
package/package.tgz ADDED
Binary file
package/src/alias.ts ADDED
@@ -0,0 +1,47 @@
1
+ import { AnyColumn, Column } from './column';
2
+ import { Table } from './table';
3
+
4
+ export class ColumnAliasProxyHandler<TColumn extends AnyColumn> implements ProxyHandler<TColumn> {
5
+ constructor(private table: Table) {}
6
+
7
+ get(columnObj: TColumn, prop: string | symbol, receiver: any): any {
8
+ if (prop === 'table') {
9
+ return this.table;
10
+ }
11
+ return columnObj[prop as keyof TColumn];
12
+ }
13
+ }
14
+
15
+ export class TableAliasProxyHandler implements ProxyHandler<Table> {
16
+ constructor(private alias: string) {}
17
+
18
+ get(tableObj: Table, prop: string | symbol, receiver: any): any {
19
+ if (prop === Table.Symbol.Name) {
20
+ return this.alias;
21
+ }
22
+ if (prop === Table.Symbol.Columns) {
23
+ const columns = tableObj[Table.Symbol.Columns];
24
+ if (!columns) {
25
+ return columns;
26
+ }
27
+
28
+ const proxiedColumns: { [key: string]: any } = {};
29
+
30
+ Object.keys(columns).map((key) => {
31
+ proxiedColumns[key] = new Proxy(
32
+ columns[key]!,
33
+ new ColumnAliasProxyHandler(new Proxy(tableObj, this)),
34
+ );
35
+ });
36
+
37
+ return proxiedColumns;
38
+ }
39
+
40
+ const value = tableObj[prop as keyof Table];
41
+ if (value instanceof Column) {
42
+ return new Proxy(value, new ColumnAliasProxyHandler(new Proxy(tableObj, this)));
43
+ }
44
+
45
+ return value;
46
+ }
47
+ }
@@ -0,0 +1,69 @@
1
+ import { SQL } from './sql';
2
+ import { Update } from './utils';
3
+
4
+ export interface ColumnBuilderBaseConfig {
5
+ data: unknown;
6
+ driverParam: unknown;
7
+ notNull: boolean;
8
+ hasDefault: boolean;
9
+ }
10
+
11
+ export type ColumnBuilderConfig<TPartial extends Partial<ColumnBuilderBaseConfig> = {}> = Update<
12
+ ColumnBuilderBaseConfig & {
13
+ notNull: false;
14
+ hasDefault: false;
15
+ },
16
+ TPartial
17
+ >;
18
+
19
+ // To understand how to use `ColumnBuilder` and `AnyColumnBuilder`, see `Column` and `AnyColumn` documentation.
20
+ export abstract class ColumnBuilder<T extends Partial<ColumnBuilderBaseConfig>> {
21
+ declare protected $brand: {
22
+ type: 'ColumnBuilder';
23
+ subtype: string;
24
+ };
25
+ declare protected $config: T;
26
+ declare protected $data: T['data'];
27
+ declare protected $driverParam: T['driverParam'];
28
+ declare protected $notNull: T['notNull'];
29
+ declare protected $hasDefault: T['hasDefault'];
30
+
31
+ /** @internal */
32
+ config: {
33
+ name: string;
34
+ notNull: boolean;
35
+ default: T['data'] | SQL | undefined;
36
+ primaryKey: boolean;
37
+ };
38
+
39
+ constructor(name: string) {
40
+ this.config = {
41
+ name,
42
+ notNull: false,
43
+ default: undefined,
44
+ primaryKey: false,
45
+ };
46
+ }
47
+
48
+ notNull(): ColumnBuilder<UpdateCBConfig<T, { notNull: true }>> {
49
+ this.config.notNull = true;
50
+ return this as ReturnType<this['notNull']>;
51
+ }
52
+
53
+ default(
54
+ value: T['data'] | SQL,
55
+ ): ColumnBuilder<UpdateCBConfig<T, { hasDefault: true }>> {
56
+ this.config.default = value;
57
+ return this as ReturnType<this['default']>;
58
+ }
59
+
60
+ primaryKey(): ColumnBuilder<UpdateCBConfig<T, { notNull: true }>> {
61
+ this.config.primaryKey = true;
62
+ return this as ReturnType<this['primaryKey']>;
63
+ }
64
+ }
65
+
66
+ export type UpdateCBConfig<
67
+ T extends Partial<ColumnBuilderBaseConfig>,
68
+ TUpdate extends Partial<ColumnBuilderBaseConfig>,
69
+ > = Update<T, TUpdate>;
package/src/column.ts ADDED
@@ -0,0 +1,86 @@
1
+ import { ColumnBuilder, ColumnBuilderBaseConfig, ColumnBuilderConfig } from './column-builder';
2
+ import { DriverValueMapper, SQL } from './sql';
3
+ import { Table } from './table';
4
+ import { Update } from './utils';
5
+
6
+ export interface ColumnBaseConfig extends ColumnBuilderBaseConfig {
7
+ tableName: string;
8
+ }
9
+
10
+ export type ColumnConfig<TPartial extends Partial<ColumnBaseConfig> = {}> = Update<
11
+ ColumnBuilderConfig & { tableName: string },
12
+ TPartial
13
+ >;
14
+
15
+ // export type UpdateColumnConfig<
16
+ // T extends ColumnBaseConfig,
17
+ // TUpdate extends Partial<ColumnBaseConfig>,
18
+ // > = Update<T, TUpdate, keyof ColumnBaseConfig>;
19
+
20
+ /*
21
+ `Column` only accepts a full `ColumnConfig` as its generic.
22
+ To infer parts of the config, use `AnyColumn` that accepts a partial config.
23
+ See `GetColumnData` for example usage of inferring.
24
+ */
25
+ export abstract class Column<T extends Partial<ColumnBaseConfig>>
26
+ implements DriverValueMapper<T['data'], T['driverParam']>
27
+ {
28
+ declare protected $brand: 'Column';
29
+ declare protected $config: T;
30
+ declare protected $data: T['data'];
31
+ declare protected $driverParam: T['driverParam'];
32
+ declare protected $notNull: T['notNull'];
33
+ declare protected $hasDefault: T['hasDefault'];
34
+
35
+ readonly name: string;
36
+ readonly primary: boolean;
37
+ readonly notNull: boolean;
38
+ readonly default: T['data'] | SQL | undefined;
39
+
40
+ constructor(readonly table: Table<T['tableName']>, builder: ColumnBuilder<Omit<T, 'tableName'>>) {
41
+ this.name = builder.config.name;
42
+ this.notNull = builder.config.notNull;
43
+ this.default = builder.config.default;
44
+ this.primary = builder.config.primaryKey;
45
+ }
46
+
47
+ abstract getSQLType(): string;
48
+
49
+ mapFromDriverValue(value: T['driverParam']): T['data'] {
50
+ return value as any;
51
+ }
52
+
53
+ mapToDriverValue(value: T['data']): T['driverParam'] {
54
+ return value as any;
55
+ }
56
+ }
57
+
58
+ export type UpdateColConfig<T extends Partial<ColumnBaseConfig>, TUpdate extends Partial<ColumnBaseConfig>> = Update<
59
+ T,
60
+ TUpdate
61
+ >;
62
+
63
+ export type AnyColumn<TPartial extends Partial<ColumnBaseConfig> = {}> = Column<Update<ColumnBaseConfig, TPartial>>;
64
+
65
+ export type GetColumnData<TColumn extends AnyColumn, TInferMode extends 'query' | 'raw' = 'query'> =
66
+ // dprint-ignore
67
+ TColumn extends AnyColumn<{ data: infer TData; notNull: infer TNotNull extends boolean }>
68
+ ? TInferMode extends 'raw' // Raw mode
69
+ ? TData // Just return the underlying type
70
+ : TNotNull extends true // Query mode
71
+ ? TData // Query mode, not null
72
+ : TData | null // Query mode, nullable
73
+ : never;
74
+
75
+ /**
76
+ `GetColumnConfig` can be used to infer either the full config of the column or a single parameter.
77
+ @example
78
+ type TConfig = GetColumnConfig<typeof column>;
79
+ type TNotNull = GetColumnConfig<typeof column, 'notNull'>;
80
+ */
81
+ export type GetColumnConfig<TColumn extends AnyColumn, TParam extends keyof ColumnBaseConfig | undefined = undefined> =
82
+ TColumn extends Column<infer TConfig> ? TParam extends keyof ColumnBaseConfig ? TConfig[TParam] : TConfig : never;
83
+
84
+ export type InferColumnsDataTypes<TColumns extends Record<string, AnyColumn>> = {
85
+ [Key in keyof TColumns]: GetColumnData<TColumns[Key], 'query'>;
86
+ };