drizzle-orm 0.14.0 → 0.14.1-7d1d823
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 +35 -14
- package/connection.d.ts +0 -13
- package/connection.js +1 -46
- package/connection.js.map +1 -1
- package/migrator.d.ts +13 -0
- package/migrator.js +52 -0
- package/migrator.js.map +1 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,30 +1,51 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
1
|
+
<div align="center">
|
|
2
|
+
<h1>Drizzle ORM <a href=""><img alt="npm" src="https://img.shields.io/npm/v/drizzle-orm?label="></a></h1>
|
|
3
|
+
<img alt="npm" src="https://img.shields.io/npm/dw/drizzle-orm">
|
|
4
|
+
<img alt="npm bundle size" src="https://img.shields.io/bundlephobia/min/drizzle-orm">
|
|
5
|
+
<a href="https://discord.gg/yfjTbVXMW4"><img alt="Discord" src="https://img.shields.io/discord/1043890932593987624"></a>
|
|
6
|
+
<img alt="NPM" src="https://img.shields.io/npm/l/drizzle-orm">
|
|
7
|
+
<h6><i>If you know SQL, you know Drizzle ORM</i></h6>
|
|
8
|
+
<hr />
|
|
9
|
+
</div>
|
|
10
|
+
|
|
11
|
+
Drizzle ORM is a TypeScript ORM for SQL databases designed with maximum type safety in mind. It comes with a [drizzle-kit](https://github.com/drizzle-team/drizzle-kit-mirror) CLI companion for automatic SQL migrations generation. Drizzle ORM is meant to be a library, not a framework. It stays as an opt-in solution all the time at any levels.
|
|
12
|
+
|
|
13
|
+
The ORM main philosophy is "If you know SQL, you know Drizzle ORM". We follow the SQL-like syntax whenever possible, are strongly typed ground top and fail at compile time, not in runtime.
|
|
14
|
+
|
|
15
|
+
Drizzle ORM is being battle-tested on production projects by multiple teams 🚀 Give it a try and let us know if you have any questions or feedback on [Discord](https://discord.gg/yfjTbVXMW4).
|
|
16
|
+
|
|
17
|
+
### Feature list
|
|
18
|
+
|
|
19
|
+
- Full type safety
|
|
20
|
+
- [Smart automated migrations generation](https://github.com/drizzle-team/drizzle-kit-mirror)
|
|
21
|
+
- No ORM learning curve
|
|
22
|
+
- SQL-like syntax for table definitions and queries
|
|
23
|
+
- Best in class fully typed joins
|
|
24
|
+
- Fully typed partial and non-partial selects of any complexity
|
|
25
|
+
- Auto-inferring of TS types for DB models for selections and insertions separately
|
|
26
|
+
- Zero dependencies
|
|
27
|
+
|
|
28
|
+
| Database | Support | 📄 |
|
|
29
|
+
|:------------|:-------:|:---|
|
|
10
30
|
| PostgreSQL | ✅ |[Docs](https://github.com/drizzle-team/drizzle-orm/tree/main/drizzle-orm-pg)|
|
|
11
|
-
| MySQL | ⏳ | |
|
|
12
|
-
| SQLite | ✅ |[Docs](https://github.com/drizzle-team/drizzle-orm/tree/main/drizzle-orm-sqlite)|
|
|
31
|
+
| MySQL | ⏳ | |
|
|
32
|
+
| SQLite | ✅ |[Docs](https://github.com/drizzle-team/drizzle-orm/tree/main/drizzle-orm-sqlite)|
|
|
13
33
|
| DynamoDB | ⏳ | |
|
|
14
34
|
| MS SQL | ⏳ | |
|
|
15
35
|
| CockroachDB | ⏳ | |
|
|
16
36
|
|
|
17
37
|
### Installation
|
|
38
|
+
|
|
18
39
|
```bash
|
|
19
|
-
|
|
40
|
+
# postgresql
|
|
20
41
|
npm install drizzle-orm drizzle-orm-pg
|
|
21
42
|
npm install -D drizzle-kit
|
|
22
43
|
|
|
23
|
-
|
|
44
|
+
# mysql
|
|
24
45
|
npm install drizzle-orm drizzle-orm-mysql
|
|
25
46
|
npm install -D drizzle-kit
|
|
26
47
|
|
|
27
|
-
|
|
48
|
+
# sqlite
|
|
28
49
|
npm install drizzle-orm drizzle-orm-sqlite
|
|
29
50
|
npm install -D drizzle-kit
|
|
30
51
|
```
|
package/connection.d.ts
CHANGED
|
@@ -1,8 +1,3 @@
|
|
|
1
|
-
export declare type MigrationMeta = {
|
|
2
|
-
sql: string;
|
|
3
|
-
folderMillis: number;
|
|
4
|
-
hash: string;
|
|
5
|
-
};
|
|
6
1
|
export interface Logger {
|
|
7
2
|
logQuery(query: string, params: unknown[]): void;
|
|
8
3
|
}
|
|
@@ -22,11 +17,3 @@ export declare class DefaultLogger implements Logger {
|
|
|
22
17
|
export declare class NoopLogger implements Logger {
|
|
23
18
|
logQuery(): void;
|
|
24
19
|
}
|
|
25
|
-
export interface KitConfig {
|
|
26
|
-
out: string;
|
|
27
|
-
schema: string;
|
|
28
|
-
}
|
|
29
|
-
export interface MigrationConfig {
|
|
30
|
-
migrationsFolder: string;
|
|
31
|
-
}
|
|
32
|
-
export declare function readMigrationFiles(config: string | MigrationConfig): MigrationMeta[];
|
package/connection.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.NoopLogger = exports.DefaultLogger = exports.ConsoleLogWriter = void 0;
|
|
4
4
|
class ConsoleLogWriter {
|
|
5
5
|
write(message) {
|
|
6
6
|
console.log(message);
|
|
@@ -29,49 +29,4 @@ class NoopLogger {
|
|
|
29
29
|
logQuery() { }
|
|
30
30
|
}
|
|
31
31
|
exports.NoopLogger = NoopLogger;
|
|
32
|
-
function readMigrationFiles(config) {
|
|
33
|
-
const fs = require('fs');
|
|
34
|
-
const crypto = require('crypto');
|
|
35
|
-
const path = require('path');
|
|
36
|
-
let migrationFolderTo;
|
|
37
|
-
if (typeof config === 'string') {
|
|
38
|
-
const configAsString = fs.readFileSync(path.resolve('.', config), 'utf8');
|
|
39
|
-
const jsonConfig = JSON.parse(configAsString);
|
|
40
|
-
migrationFolderTo = jsonConfig.out;
|
|
41
|
-
}
|
|
42
|
-
else {
|
|
43
|
-
migrationFolderTo = config.migrationsFolder;
|
|
44
|
-
}
|
|
45
|
-
if (!migrationFolderTo) {
|
|
46
|
-
throw Error('no migration folder defined');
|
|
47
|
-
}
|
|
48
|
-
const files = fs.readdirSync(migrationFolderTo);
|
|
49
|
-
const migrationQueries = [];
|
|
50
|
-
for (const migrationFolder of files) {
|
|
51
|
-
if (migrationFolder === '.DS_Store') {
|
|
52
|
-
continue;
|
|
53
|
-
}
|
|
54
|
-
const migrationFiles = fs.readdirSync(`${migrationFolderTo}/${migrationFolder}`);
|
|
55
|
-
const migrationFile = migrationFiles.filter((file) => file === 'migration.sql')[0];
|
|
56
|
-
const query = fs
|
|
57
|
-
.readFileSync(`${migrationFolderTo}/${migrationFolder}/${migrationFile}`)
|
|
58
|
-
.toString();
|
|
59
|
-
const year = Number(migrationFolder.slice(0, 4));
|
|
60
|
-
// second param for Date() is month index, that started from 0, so we need
|
|
61
|
-
// to decrement a value for month
|
|
62
|
-
const month = Number(migrationFolder.slice(4, 6)) - 1;
|
|
63
|
-
const day = Number(migrationFolder.slice(6, 8));
|
|
64
|
-
const hour = Number(migrationFolder.slice(8, 10));
|
|
65
|
-
const min = Number(migrationFolder.slice(10, 12));
|
|
66
|
-
const sec = Number(migrationFolder.slice(12, 14));
|
|
67
|
-
const folderAsMillis = Date.UTC(year, month, day, hour, min, sec);
|
|
68
|
-
migrationQueries.push({
|
|
69
|
-
sql: query,
|
|
70
|
-
folderMillis: folderAsMillis,
|
|
71
|
-
hash: crypto.createHash('sha256').update(query).digest('hex'),
|
|
72
|
-
});
|
|
73
|
-
}
|
|
74
|
-
return migrationQueries;
|
|
75
|
-
}
|
|
76
|
-
exports.readMigrationFiles = readMigrationFiles;
|
|
77
32
|
//# sourceMappingURL=connection.js.map
|
package/connection.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"connection.js","sourceRoot":"","sources":["../src/connection.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"connection.js","sourceRoot":"","sources":["../src/connection.ts"],"names":[],"mappings":";;;AAQA,MAAa,gBAAgB;IAC5B,KAAK,CAAC,OAAe;QACpB,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IACtB,CAAC;CACD;AAJD,4CAIC;AAED,MAAa,aAAa;IAGzB,YAAY,SAAgC,EAAE,MAAM,EAAE,IAAI,gBAAgB,EAAE,EAAE;QAC7E,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;IAC7B,CAAC;IAED,QAAQ,CAAC,KAAa,EAAE,MAAiB;QACxC,MAAM,iBAAiB,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;YAC1C,IAAI;gBACH,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;aACzB;YAAC,OAAO,CAAC,EAAE;gBACX,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC;aACjB;QACF,CAAC,CAAC,CAAC;QACH,MAAM,SAAS,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC,gBAAgB,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QAClG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,KAAK,GAAG,SAAS,EAAE,CAAC,CAAC;IAClD,CAAC;CACD;AAlBD,sCAkBC;AAED,MAAa,UAAU;IACtB,QAAQ,KAAU,CAAC;CACnB;AAFD,gCAEC"}
|
package/migrator.d.ts
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export interface KitConfig {
|
|
2
|
+
out: string;
|
|
3
|
+
schema: string;
|
|
4
|
+
}
|
|
5
|
+
export interface MigrationConfig {
|
|
6
|
+
migrationsFolder: string;
|
|
7
|
+
}
|
|
8
|
+
export interface MigrationMeta {
|
|
9
|
+
sql: string;
|
|
10
|
+
folderMillis: number;
|
|
11
|
+
hash: string;
|
|
12
|
+
}
|
|
13
|
+
export declare function readMigrationFiles(config: string | MigrationConfig): MigrationMeta[];
|
package/migrator.js
ADDED
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.readMigrationFiles = void 0;
|
|
7
|
+
const crypto_1 = __importDefault(require("crypto"));
|
|
8
|
+
const fs_1 = __importDefault(require("fs"));
|
|
9
|
+
const path_1 = __importDefault(require("path"));
|
|
10
|
+
function readMigrationFiles(config) {
|
|
11
|
+
let migrationFolderTo;
|
|
12
|
+
if (typeof config === 'string') {
|
|
13
|
+
const configAsString = fs_1.default.readFileSync(path_1.default.resolve('.', config), 'utf8');
|
|
14
|
+
const jsonConfig = JSON.parse(configAsString);
|
|
15
|
+
migrationFolderTo = jsonConfig.out;
|
|
16
|
+
}
|
|
17
|
+
else {
|
|
18
|
+
migrationFolderTo = config.migrationsFolder;
|
|
19
|
+
}
|
|
20
|
+
if (!migrationFolderTo) {
|
|
21
|
+
throw Error('no migration folder defined');
|
|
22
|
+
}
|
|
23
|
+
const files = fs_1.default.readdirSync(migrationFolderTo);
|
|
24
|
+
const migrationQueries = [];
|
|
25
|
+
for (const migrationFolder of files) {
|
|
26
|
+
if (migrationFolder === '.DS_Store') {
|
|
27
|
+
continue;
|
|
28
|
+
}
|
|
29
|
+
const migrationFiles = fs_1.default.readdirSync(`${migrationFolderTo}/${migrationFolder}`);
|
|
30
|
+
const migrationFile = migrationFiles.filter((file) => file === 'migration.sql')[0];
|
|
31
|
+
const query = fs_1.default
|
|
32
|
+
.readFileSync(`${migrationFolderTo}/${migrationFolder}/${migrationFile}`)
|
|
33
|
+
.toString();
|
|
34
|
+
const year = Number(migrationFolder.slice(0, 4));
|
|
35
|
+
// second param for Date() is month index, that started from 0, so we need
|
|
36
|
+
// to decrement a value for month
|
|
37
|
+
const month = Number(migrationFolder.slice(4, 6)) - 1;
|
|
38
|
+
const day = Number(migrationFolder.slice(6, 8));
|
|
39
|
+
const hour = Number(migrationFolder.slice(8, 10));
|
|
40
|
+
const min = Number(migrationFolder.slice(10, 12));
|
|
41
|
+
const sec = Number(migrationFolder.slice(12, 14));
|
|
42
|
+
const folderAsMillis = Date.UTC(year, month, day, hour, min, sec);
|
|
43
|
+
migrationQueries.push({
|
|
44
|
+
sql: query,
|
|
45
|
+
folderMillis: folderAsMillis,
|
|
46
|
+
hash: crypto_1.default.createHash('sha256').update(query).digest('hex'),
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
return migrationQueries;
|
|
50
|
+
}
|
|
51
|
+
exports.readMigrationFiles = readMigrationFiles;
|
|
52
|
+
//# sourceMappingURL=migrator.js.map
|
package/migrator.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"migrator.js","sourceRoot":"","sources":["../src/migrator.ts"],"names":[],"mappings":";;;;;;AAAA,oDAA4B;AAC5B,4CAAoB;AACpB,gDAAwB;AAiBxB,SAAgB,kBAAkB,CAAC,MAAgC;IAClE,IAAI,iBAAqC,CAAC;IAC1C,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE;QAC/B,MAAM,cAAc,GAAG,YAAE,CAAC,YAAY,CAAC,cAAI,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,CAAC;QAC1E,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAc,CAAC;QAC3D,iBAAiB,GAAG,UAAU,CAAC,GAAG,CAAC;KACnC;SAAM;QACN,iBAAiB,GAAG,MAAM,CAAC,gBAAgB,CAAC;KAC5C;IAED,IAAI,CAAC,iBAAiB,EAAE;QACvB,MAAM,KAAK,CAAC,6BAA6B,CAAC,CAAC;KAC3C;IAED,MAAM,KAAK,GAAG,YAAE,CAAC,WAAW,CAAC,iBAAiB,CAAC,CAAC;IAChD,MAAM,gBAAgB,GAAoB,EAAE,CAAC;IAC7C,KAAK,MAAM,eAAe,IAAI,KAAK,EAAE;QACpC,IAAI,eAAe,KAAK,WAAW,EAAE;YACpC,SAAS;SACT;QACD,MAAM,cAAc,GAAG,YAAE,CAAC,WAAW,CAAC,GAAG,iBAAiB,IAAI,eAAe,EAAE,CAAC,CAAC;QACjF,MAAM,aAAa,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC;QAEnF,MAAM,KAAK,GAAG,YAAE;aACd,YAAY,CAAC,GAAG,iBAAiB,IAAI,eAAe,IAAI,aAAa,EAAE,CAAC;aACxE,QAAQ,EAAE,CAAC;QAEb,MAAM,IAAI,GAAG,MAAM,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QACjD,0EAA0E;QAC1E,iCAAiC;QACjC,MAAM,KAAK,GAAG,MAAM,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QACtD,MAAM,GAAG,GAAG,MAAM,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAChD,MAAM,IAAI,GAAG,MAAM,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;QAClD,MAAM,GAAG,GAAG,MAAM,CAAC,eAAe,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;QAClD,MAAM,GAAG,GAAG,MAAM,CAAC,eAAe,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;QAElD,MAAM,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;QAClE,gBAAgB,CAAC,IAAI,CAAC;YACrB,GAAG,EAAE,KAAK;YACV,YAAY,EAAE,cAAc;YAC5B,IAAI,EAAE,gBAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;SAC7D,CAAC,CAAC;KACH;IAED,OAAO,gBAAgB,CAAC;AACzB,CAAC;AA7CD,gDA6CC"}
|