drizzle-orm 0.12.0-beta.20 → 0.12.0-beta.21
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 -0
- package/{dist/alias.d.ts → alias.d.ts} +0 -0
- package/{dist/alias.js → alias.js} +0 -0
- package/{dist/alias.js.map → alias.js.map} +0 -0
- package/{dist/branded-types.d.ts → branded-types.d.ts} +0 -0
- package/{dist/branded-types.js → branded-types.js} +0 -0
- package/{dist/branded-types.js.map → branded-types.js.map} +0 -0
- package/brands/column.d.ts +0 -0
- package/brands/column.js +5 -0
- package/brands/column.js.map +1 -0
- package/brands/common.d.ts +0 -0
- package/brands/common.js +15 -0
- package/brands/common.js.map +1 -0
- package/brands/index.d.ts +0 -0
- package/brands/index.js +5 -0
- package/brands/index.js.map +1 -0
- package/brands/table.d.ts +0 -0
- package/brands/table.js +8 -0
- package/brands/table.js.map +1 -0
- package/{dist/column-builder.d.ts → column-builder.d.ts} +0 -0
- package/{dist/column-builder.js → column-builder.js} +0 -0
- package/{dist/column-builder.js.map → column-builder.js.map} +0 -0
- package/{dist/column.d.ts → column.d.ts} +0 -0
- package/{dist/column.js → column.js} +0 -0
- package/{dist/column.js.map → column.js.map} +0 -0
- package/{dist/connection.d.ts → connection.d.ts} +0 -0
- package/{dist/connection.js → connection.js} +0 -0
- package/{dist/connection.js.map → connection.js.map} +0 -0
- package/{dist/expressions.d.ts → expressions.d.ts} +0 -0
- package/{dist/expressions.js → expressions.js} +0 -0
- package/{dist/expressions.js.map → expressions.js.map} +0 -0
- package/{dist/index.d.ts → index.d.ts} +0 -0
- package/{dist/index.js → index.js} +0 -0
- package/{dist/index.js.map → index.js.map} +0 -0
- package/{dist/operations.d.ts → operations.d.ts} +0 -0
- package/{dist/operations.js → operations.js} +0 -0
- package/{dist/operations.js.map → operations.js.map} +0 -0
- package/package.json +1 -1
- package/{dist/query-promise.d.ts → query-promise.d.ts} +0 -0
- package/{dist/query-promise.js → query-promise.js} +0 -0
- package/{dist/query-promise.js.map → query-promise.js.map} +0 -0
- package/{dist/sql → sql}/expressions/conditions.d.ts +0 -0
- package/{dist/sql → sql}/expressions/conditions.js +0 -0
- package/{dist/sql → sql}/expressions/conditions.js.map +0 -0
- package/{dist/sql → sql}/expressions/index.d.ts +0 -0
- package/{dist/sql → sql}/expressions/index.js +0 -0
- package/{dist/sql → sql}/expressions/index.js.map +0 -0
- package/{dist/sql → sql}/expressions/select.d.ts +0 -0
- package/{dist/sql → sql}/expressions/select.js +0 -0
- package/{dist/sql → sql}/expressions/select.js.map +0 -0
- package/{dist/sql → sql}/index.d.ts +0 -0
- package/{dist/sql → sql}/index.js +0 -0
- package/{dist/sql → sql}/index.js.map +0 -0
- package/{dist/table.d.ts → table.d.ts} +0 -0
- package/{dist/table.js → table.js} +0 -0
- package/{dist/table.js.map → table.js.map} +0 -0
- package/{dist/utils.d.ts → utils.d.ts} +0 -0
- package/{dist/utils.js → utils.js} +0 -0
- package/{dist/utils.js.map → utils.js.map} +0 -0
- package/.turbo/turbo-build:int.log +0 -13
- package/.turbo/turbo-test:types.log +0 -5
- package/dist/package.json +0 -58
- package/dist/readme.md +0 -30
- package/drizzle-orm-0.12.0-beta.19.tgz +0 -0
- package/drizzle-orm-0.12.0-beta.20.tgz +0 -0
- package/package.tgz +0 -0
- package/src/alias.ts +0 -47
- package/src/column-builder.ts +0 -69
- package/src/column.ts +0 -86
- package/src/connection.ts +0 -99
- package/src/expressions.ts +0 -1
- package/src/index.ts +0 -4
- package/src/operations.ts +0 -22
- package/src/query-promise.ts +0 -31
- package/src/sql/expressions/conditions.ts +0 -168
- package/src/sql/expressions/index.ts +0 -2
- package/src/sql/expressions/select.ts +0 -10
- package/src/sql/index.ts +0 -254
- package/src/table.ts +0 -45
- package/src/utils.ts +0 -140
- package/tsconfig.build.json +0 -8
- package/tsconfig.build.tsbuildinfo +0 -1
- package/tsconfig.json +0 -7
- package/tsconfig.tsbuildinfo +0 -1
package/README.md
CHANGED
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
## Drizzle ORM
|
|
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 | ✅ |[Docs](https://github.com/drizzle-team/drizzle-orm/tree/main/drizzle-orm-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
|
package/brands/column.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"column.js","sourceRoot":"","sources":["../../src/brands/column.ts"],"names":[],"mappings":";AAAA,oCAAoC;AAEpC,yEAAyE;AAEzE,uFAAuF"}
|
|
File without changes
|
package/brands/common.js
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// export abstract class Brand<T extends string, TValue> {
|
|
3
|
+
// declare $brand: T;
|
|
4
|
+
// declare value: TValue;
|
|
5
|
+
// constructor(value?: TValue) {
|
|
6
|
+
// if (value !== undefined) {
|
|
7
|
+
// this.value = value;
|
|
8
|
+
// }
|
|
9
|
+
// }
|
|
10
|
+
// toString(): string {
|
|
11
|
+
// return `${this.value}`;
|
|
12
|
+
// }
|
|
13
|
+
// }
|
|
14
|
+
// export type Unwrap<T extends Brand<any, any>> = T['value'];
|
|
15
|
+
//# sourceMappingURL=common.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"common.js","sourceRoot":"","sources":["../../src/brands/common.ts"],"names":[],"mappings":";AAAA,0DAA0D;AAC1D,sBAAsB;AACtB,0BAA0B;AAE1B,iCAAiC;AACjC,+BAA+B;AAC/B,yBAAyB;AACzB,MAAM;AACN,KAAK;AAEL,wBAAwB;AACxB,4BAA4B;AAC5B,KAAK;AACL,IAAI;AAEJ,8DAA8D"}
|
|
File without changes
|
package/brands/index.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/brands/index.ts"],"names":[],"mappings":";AAAA,4BAA4B;AAC5B,2BAA2B;AAC3B,4BAA4B"}
|
|
File without changes
|
package/brands/table.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"table.js","sourceRoot":"","sources":["../../src/brands/table.ts"],"names":[],"mappings":";AAAA,oCAAoC;AAEpC,oFAAoF;AACpF,mCAAmC;AACnC,iBAAiB;AACjB,KAAK;AACL,IAAI"}
|
|
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
|
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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
@@ -1,13 +0,0 @@
|
|
|
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
|
package/dist/package.json
DELETED
|
@@ -1,58 +0,0 @@
|
|
|
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
|
-
}
|
package/dist/readme.md
DELETED
|
@@ -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
|
-
```
|
|
Binary file
|
|
Binary file
|
package/package.tgz
DELETED
|
Binary file
|
package/src/alias.ts
DELETED
|
@@ -1,47 +0,0 @@
|
|
|
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
|
-
}
|
package/src/column-builder.ts
DELETED
|
@@ -1,69 +0,0 @@
|
|
|
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
DELETED
|
@@ -1,86 +0,0 @@
|
|
|
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
|
-
};
|
package/src/connection.ts
DELETED
|
@@ -1,99 +0,0 @@
|
|
|
1
|
-
export type MigrationMeta = { sql: string; folderMillis: number; hash: string };
|
|
2
|
-
|
|
3
|
-
export interface Logger {
|
|
4
|
-
logQuery(query: string, params: unknown[]): void;
|
|
5
|
-
}
|
|
6
|
-
|
|
7
|
-
export interface LogWriter {
|
|
8
|
-
write(message: string): void;
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
export class ConsoleLogWriter implements LogWriter {
|
|
12
|
-
write(message: string) {
|
|
13
|
-
console.log(message);
|
|
14
|
-
}
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
export class DefaultLogger implements Logger {
|
|
18
|
-
readonly writer: LogWriter;
|
|
19
|
-
|
|
20
|
-
constructor(config: { writer: LogWriter } = { writer: new ConsoleLogWriter() }) {
|
|
21
|
-
this.writer = config.writer;
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
logQuery(query: string, params: unknown[]): void {
|
|
25
|
-
const stringifiedParams = params.map((p) => {
|
|
26
|
-
try {
|
|
27
|
-
return JSON.stringify(p);
|
|
28
|
-
} catch (e) {
|
|
29
|
-
return String(p);
|
|
30
|
-
}
|
|
31
|
-
});
|
|
32
|
-
const paramsStr = stringifiedParams.length ? ` -- params: [${stringifiedParams.join(', ')}]` : '';
|
|
33
|
-
this.writer.write(`Query: ${query}${paramsStr}`);
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
export class NoopLogger implements Logger {
|
|
38
|
-
logQuery(): void {}
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
export interface KitConfig {
|
|
42
|
-
out: string;
|
|
43
|
-
schema: string;
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
export interface MigrationConfig {
|
|
47
|
-
migrationsFolder: string;
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
export function readMigrationFiles(config: string | MigrationConfig): MigrationMeta[] {
|
|
51
|
-
const fs = require('fs') as typeof import('fs');
|
|
52
|
-
const crypto = require('crypto') as typeof import('crypto');
|
|
53
|
-
const path = require('path') as typeof import('path');
|
|
54
|
-
|
|
55
|
-
let migrationFolderTo: string | undefined;
|
|
56
|
-
if (typeof config === 'string') {
|
|
57
|
-
const configAsString = fs.readFileSync(path.resolve('.', config), 'utf8');
|
|
58
|
-
const jsonConfig = JSON.parse(configAsString) as KitConfig;
|
|
59
|
-
migrationFolderTo = jsonConfig.out;
|
|
60
|
-
} else {
|
|
61
|
-
migrationFolderTo = config.migrationsFolder;
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
if (!migrationFolderTo) {
|
|
65
|
-
throw Error('no migration folder defined');
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
const files = fs.readdirSync(migrationFolderTo);
|
|
69
|
-
const migrationQueries: MigrationMeta[] = [];
|
|
70
|
-
for (const migrationFolder of files) {
|
|
71
|
-
if (migrationFolder === '.DS_Store') {
|
|
72
|
-
continue;
|
|
73
|
-
}
|
|
74
|
-
const migrationFiles = fs.readdirSync(`${migrationFolderTo}/${migrationFolder}`);
|
|
75
|
-
const migrationFile = migrationFiles.filter((file) => file === 'migration.sql')[0];
|
|
76
|
-
|
|
77
|
-
const query = fs
|
|
78
|
-
.readFileSync(`${migrationFolderTo}/${migrationFolder}/${migrationFile}`)
|
|
79
|
-
.toString();
|
|
80
|
-
|
|
81
|
-
const year = Number(migrationFolder.slice(0, 4));
|
|
82
|
-
// second param for Date() is month index, that started from 0, so we need
|
|
83
|
-
// to decrement a value for month
|
|
84
|
-
const month = Number(migrationFolder.slice(4, 6)) - 1;
|
|
85
|
-
const day = Number(migrationFolder.slice(6, 8));
|
|
86
|
-
const hour = Number(migrationFolder.slice(8, 10));
|
|
87
|
-
const min = Number(migrationFolder.slice(10, 12));
|
|
88
|
-
const sec = Number(migrationFolder.slice(12, 14));
|
|
89
|
-
|
|
90
|
-
const folderAsMillis = Date.UTC(year, month, day, hour, min, sec);
|
|
91
|
-
migrationQueries.push({
|
|
92
|
-
sql: query,
|
|
93
|
-
folderMillis: folderAsMillis,
|
|
94
|
-
hash: crypto.createHash('sha256').update(query).digest('hex'),
|
|
95
|
-
});
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
return migrationQueries;
|
|
99
|
-
}
|
package/src/expressions.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export * from './sql/expressions';
|
package/src/index.ts
DELETED