@farming-labs/orm-drizzle 0.0.12 → 0.0.13
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/dist/index.cjs +82 -18
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +4 -3
- package/dist/index.d.ts +4 -3
- package/dist/index.js +82 -18
- package/dist/index.js.map +1 -1
- package/package.json +3 -3
package/dist/index.cjs
CHANGED
|
@@ -30,7 +30,7 @@ function isRecord(value) {
|
|
|
30
30
|
function hasFunction(value, name) {
|
|
31
31
|
return isRecord(value) && typeof value[name] === "function";
|
|
32
32
|
}
|
|
33
|
-
function
|
|
33
|
+
function resolveRuntimeClient(config) {
|
|
34
34
|
const client = config.client ?? config.db?.$client;
|
|
35
35
|
if (!client) {
|
|
36
36
|
throw new Error(
|
|
@@ -39,45 +39,109 @@ function resolveClient(config) {
|
|
|
39
39
|
}
|
|
40
40
|
return client;
|
|
41
41
|
}
|
|
42
|
-
function
|
|
43
|
-
|
|
44
|
-
|
|
42
|
+
function wrapDrizzleDriver(driver, handle) {
|
|
43
|
+
return {
|
|
44
|
+
handle,
|
|
45
|
+
findMany(schema, model, args) {
|
|
46
|
+
return driver.findMany(schema, model, args);
|
|
47
|
+
},
|
|
48
|
+
findFirst(schema, model, args) {
|
|
49
|
+
return driver.findFirst(schema, model, args);
|
|
50
|
+
},
|
|
51
|
+
findUnique(schema, model, args) {
|
|
52
|
+
return driver.findUnique(schema, model, args);
|
|
53
|
+
},
|
|
54
|
+
count(schema, model, args) {
|
|
55
|
+
return driver.count(schema, model, args);
|
|
56
|
+
},
|
|
57
|
+
create(schema, model, args) {
|
|
58
|
+
return driver.create(schema, model, args);
|
|
59
|
+
},
|
|
60
|
+
createMany(schema, model, args) {
|
|
61
|
+
return driver.createMany(schema, model, args);
|
|
62
|
+
},
|
|
63
|
+
update(schema, model, args) {
|
|
64
|
+
return driver.update(schema, model, args);
|
|
65
|
+
},
|
|
66
|
+
updateMany(schema, model, args) {
|
|
67
|
+
return driver.updateMany(schema, model, args);
|
|
68
|
+
},
|
|
69
|
+
upsert(schema, model, args) {
|
|
70
|
+
return driver.upsert(schema, model, args);
|
|
71
|
+
},
|
|
72
|
+
delete(schema, model, args) {
|
|
73
|
+
return driver.delete(schema, model, args);
|
|
74
|
+
},
|
|
75
|
+
deleteMany(schema, model, args) {
|
|
76
|
+
return driver.deleteMany(schema, model, args);
|
|
77
|
+
},
|
|
78
|
+
transaction(schema, run) {
|
|
79
|
+
return driver.transaction(
|
|
80
|
+
schema,
|
|
81
|
+
async (txDriver) => run(wrapDrizzleDriver(txDriver, handle))
|
|
82
|
+
);
|
|
83
|
+
}
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
function createPostgresDrizzleDriver(runtimeClient, handle) {
|
|
87
|
+
if (hasFunction(runtimeClient, "connect") && hasFunction(runtimeClient, "query")) {
|
|
88
|
+
return wrapDrizzleDriver((0, import_orm_sql.createPgPoolDriver)(runtimeClient), handle);
|
|
45
89
|
}
|
|
46
|
-
if (hasFunction(
|
|
47
|
-
return (0, import_orm_sql.createPgClientDriver)(
|
|
90
|
+
if (hasFunction(runtimeClient, "query")) {
|
|
91
|
+
return wrapDrizzleDriver((0, import_orm_sql.createPgClientDriver)(runtimeClient), handle);
|
|
48
92
|
}
|
|
49
93
|
throw new Error(
|
|
50
94
|
"Drizzle postgres runtime expects a node-postgres Pool or Client under db.$client."
|
|
51
95
|
);
|
|
52
96
|
}
|
|
53
|
-
function createMysqlDrizzleDriver(
|
|
54
|
-
if (hasFunction(
|
|
55
|
-
return (0, import_orm_sql.createMysqlDriver)(
|
|
97
|
+
function createMysqlDrizzleDriver(runtimeClient, handle) {
|
|
98
|
+
if (hasFunction(runtimeClient, "getConnection") && hasFunction(runtimeClient, "execute")) {
|
|
99
|
+
return wrapDrizzleDriver((0, import_orm_sql.createMysqlDriver)(runtimeClient), handle);
|
|
56
100
|
}
|
|
57
|
-
if (hasFunction(
|
|
58
|
-
return (
|
|
101
|
+
if (hasFunction(runtimeClient, "execute") && hasFunction(runtimeClient, "beginTransaction") && hasFunction(runtimeClient, "commit") && hasFunction(runtimeClient, "rollback")) {
|
|
102
|
+
return wrapDrizzleDriver(
|
|
103
|
+
(0, import_orm_sql.createMysqlDriver)(runtimeClient),
|
|
104
|
+
handle
|
|
105
|
+
);
|
|
59
106
|
}
|
|
60
107
|
throw new Error(
|
|
61
108
|
"Drizzle mysql runtime expects a mysql2 Pool or transactional Connection under db.$client."
|
|
62
109
|
);
|
|
63
110
|
}
|
|
64
|
-
function createSqliteDrizzleDriver(
|
|
65
|
-
if (hasFunction(
|
|
66
|
-
return (
|
|
111
|
+
function createSqliteDrizzleDriver(runtimeClient, handle) {
|
|
112
|
+
if (hasFunction(runtimeClient, "prepare") && hasFunction(runtimeClient, "exec")) {
|
|
113
|
+
return wrapDrizzleDriver(
|
|
114
|
+
(0, import_orm_sql.createSqliteDriver)(runtimeClient),
|
|
115
|
+
handle
|
|
116
|
+
);
|
|
67
117
|
}
|
|
68
118
|
throw new Error(
|
|
69
119
|
"Drizzle sqlite runtime expects a sqlite-compatible database with prepare() and exec() under db.$client."
|
|
70
120
|
);
|
|
71
121
|
}
|
|
72
122
|
function createDrizzleDriver(config) {
|
|
73
|
-
const
|
|
123
|
+
const runtimeClient = resolveRuntimeClient(config);
|
|
124
|
+
const handle = {
|
|
125
|
+
kind: "drizzle",
|
|
126
|
+
client: config.db ?? config.client ?? runtimeClient,
|
|
127
|
+
dialect: config.dialect
|
|
128
|
+
};
|
|
74
129
|
switch (config.dialect) {
|
|
75
130
|
case "postgres":
|
|
76
|
-
return createPostgresDrizzleDriver(
|
|
131
|
+
return createPostgresDrizzleDriver(
|
|
132
|
+
runtimeClient,
|
|
133
|
+
handle
|
|
134
|
+
);
|
|
77
135
|
case "mysql":
|
|
78
|
-
return createMysqlDrizzleDriver(
|
|
136
|
+
return createMysqlDrizzleDriver(
|
|
137
|
+
runtimeClient,
|
|
138
|
+
handle
|
|
139
|
+
);
|
|
79
140
|
case "sqlite":
|
|
80
|
-
return createSqliteDrizzleDriver(
|
|
141
|
+
return createSqliteDrizzleDriver(
|
|
142
|
+
runtimeClient,
|
|
143
|
+
handle
|
|
144
|
+
);
|
|
81
145
|
}
|
|
82
146
|
}
|
|
83
147
|
// Annotate the CommonJS export names for ESM import in node:
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts"],"sourcesContent":["import type { OrmDriver, SchemaDefinition } from \"@farming-labs/orm\";\nimport {\n createMysqlDriver,\n createPgClientDriver,\n createPgPoolDriver,\n createSqliteDriver,\n type MysqlConnectionLike,\n type MysqlPoolLike,\n type PgClientLike,\n type PgPoolLike,\n type SqliteDatabaseLike,\n} from \"@farming-labs/orm-sql\";\n\nexport type DrizzleDialect = \"sqlite\" | \"mysql\" | \"postgres\";\n\nexport type DrizzleDatabaseLike = object & {\n $client?: unknown;\n};\n\nexport type DrizzleDriverConfig<TSchema extends SchemaDefinition<any>> = {\n db?: DrizzleDatabaseLike;\n client?: unknown;\n dialect: DrizzleDialect;\n};\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return !!value && typeof value === \"object\";\n}\n\nfunction hasFunction<TName extends string>(\n value: unknown,\n name: TName,\n): value is Record<TName, (...args: any[]) => unknown> {\n return isRecord(value) && typeof value[name] === \"function\";\n}\n\nfunction
|
|
1
|
+
{"version":3,"sources":["../src/index.ts"],"sourcesContent":["import type { OrmDriver, OrmDriverHandle, SchemaDefinition } from \"@farming-labs/orm\";\nimport {\n createMysqlDriver,\n createPgClientDriver,\n createPgPoolDriver,\n createSqliteDriver,\n type MysqlConnectionLike,\n type MysqlPoolLike,\n type PgClientLike,\n type PgPoolLike,\n type SqliteDatabaseLike,\n} from \"@farming-labs/orm-sql\";\n\nexport type DrizzleDialect = \"sqlite\" | \"mysql\" | \"postgres\";\n\nexport type DrizzleDatabaseLike = object & {\n $client?: unknown;\n};\n\nexport type DrizzleDriverConfig<TSchema extends SchemaDefinition<any>> = {\n db?: DrizzleDatabaseLike;\n client?: unknown;\n dialect: DrizzleDialect;\n};\n\nexport type DrizzleDriverHandle<TClient = unknown> = OrmDriverHandle<\n \"drizzle\",\n TClient,\n DrizzleDialect\n>;\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return !!value && typeof value === \"object\";\n}\n\nfunction hasFunction<TName extends string>(\n value: unknown,\n name: TName,\n): value is Record<TName, (...args: any[]) => unknown> {\n return isRecord(value) && typeof value[name] === \"function\";\n}\n\nfunction resolveRuntimeClient(config: DrizzleDriverConfig<any>) {\n const client = config.client ?? config.db?.$client;\n\n if (!client) {\n throw new Error(\n 'Drizzle runtime requires a Drizzle database with a \"$client\" property or an explicit \"client\" option.',\n );\n }\n\n return client;\n}\n\nfunction wrapDrizzleDriver<TSchema extends SchemaDefinition<any>, TClient>(\n driver: OrmDriver<TSchema, any>,\n handle: DrizzleDriverHandle<TClient>,\n): OrmDriver<TSchema, DrizzleDriverHandle<TClient>> {\n return {\n handle,\n findMany(schema, model, args) {\n return driver.findMany(schema, model, args);\n },\n findFirst(schema, model, args) {\n return driver.findFirst(schema, model, args);\n },\n findUnique(schema, model, args) {\n return driver.findUnique(schema, model, args);\n },\n count(schema, model, args) {\n return driver.count(schema, model, args);\n },\n create(schema, model, args) {\n return driver.create(schema, model, args);\n },\n createMany(schema, model, args) {\n return driver.createMany(schema, model, args);\n },\n update(schema, model, args) {\n return driver.update(schema, model, args);\n },\n updateMany(schema, model, args) {\n return driver.updateMany(schema, model, args);\n },\n upsert(schema, model, args) {\n return driver.upsert(schema, model, args);\n },\n delete(schema, model, args) {\n return driver.delete(schema, model, args);\n },\n deleteMany(schema, model, args) {\n return driver.deleteMany(schema, model, args);\n },\n transaction(schema, run) {\n return driver.transaction(schema, async (txDriver) =>\n run(wrapDrizzleDriver(txDriver, handle)),\n );\n },\n };\n}\n\nfunction createPostgresDrizzleDriver<TSchema extends SchemaDefinition<any>, TClient>(\n runtimeClient: unknown,\n handle: DrizzleDriverHandle<TClient>,\n) {\n if (hasFunction(runtimeClient, \"connect\") && hasFunction(runtimeClient, \"query\")) {\n return wrapDrizzleDriver(createPgPoolDriver<TSchema>(runtimeClient as PgPoolLike), handle);\n }\n\n if (hasFunction(runtimeClient, \"query\")) {\n return wrapDrizzleDriver(createPgClientDriver<TSchema>(runtimeClient as PgClientLike), handle);\n }\n\n throw new Error(\n \"Drizzle postgres runtime expects a node-postgres Pool or Client under db.$client.\",\n );\n}\n\nfunction createMysqlDrizzleDriver<TSchema extends SchemaDefinition<any>, TClient>(\n runtimeClient: unknown,\n handle: DrizzleDriverHandle<TClient>,\n) {\n if (hasFunction(runtimeClient, \"getConnection\") && hasFunction(runtimeClient, \"execute\")) {\n return wrapDrizzleDriver(createMysqlDriver<TSchema>(runtimeClient as MysqlPoolLike), handle);\n }\n\n if (\n hasFunction(runtimeClient, \"execute\") &&\n hasFunction(runtimeClient, \"beginTransaction\") &&\n hasFunction(runtimeClient, \"commit\") &&\n hasFunction(runtimeClient, \"rollback\")\n ) {\n return wrapDrizzleDriver(\n createMysqlDriver<TSchema>(runtimeClient as MysqlConnectionLike),\n handle,\n );\n }\n\n throw new Error(\n \"Drizzle mysql runtime expects a mysql2 Pool or transactional Connection under db.$client.\",\n );\n}\n\nfunction createSqliteDrizzleDriver<TSchema extends SchemaDefinition<any>, TClient>(\n runtimeClient: unknown,\n handle: DrizzleDriverHandle<TClient>,\n) {\n if (hasFunction(runtimeClient, \"prepare\") && hasFunction(runtimeClient, \"exec\")) {\n return wrapDrizzleDriver(\n createSqliteDriver<TSchema>(runtimeClient as SqliteDatabaseLike),\n handle,\n );\n }\n\n throw new Error(\n \"Drizzle sqlite runtime expects a sqlite-compatible database with prepare() and exec() under db.$client.\",\n );\n}\n\nexport function createDrizzleDriver<TSchema extends SchemaDefinition<any>>(\n config: DrizzleDriverConfig<TSchema>,\n): OrmDriver<TSchema, DrizzleDriverHandle<DrizzleDatabaseLike | unknown>> {\n const runtimeClient = resolveRuntimeClient(config);\n const handle: DrizzleDriverHandle<DrizzleDatabaseLike | unknown> = {\n kind: \"drizzle\",\n client: config.db ?? config.client ?? runtimeClient,\n dialect: config.dialect,\n };\n\n switch (config.dialect) {\n case \"postgres\":\n return createPostgresDrizzleDriver<TSchema, DrizzleDatabaseLike | unknown>(\n runtimeClient,\n handle,\n );\n case \"mysql\":\n return createMysqlDrizzleDriver<TSchema, DrizzleDatabaseLike | unknown>(\n runtimeClient,\n handle,\n );\n case \"sqlite\":\n return createSqliteDrizzleDriver<TSchema, DrizzleDatabaseLike | unknown>(\n runtimeClient,\n handle,\n );\n }\n}\n"],"mappings":"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","names":[]}
|
package/dist/index.d.cts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { SchemaDefinition, OrmDriver } from '@farming-labs/orm';
|
|
1
|
+
import { SchemaDefinition, OrmDriverHandle, OrmDriver } from '@farming-labs/orm';
|
|
2
2
|
|
|
3
3
|
type DrizzleDialect = "sqlite" | "mysql" | "postgres";
|
|
4
4
|
type DrizzleDatabaseLike = object & {
|
|
@@ -9,6 +9,7 @@ type DrizzleDriverConfig<TSchema extends SchemaDefinition<any>> = {
|
|
|
9
9
|
client?: unknown;
|
|
10
10
|
dialect: DrizzleDialect;
|
|
11
11
|
};
|
|
12
|
-
|
|
12
|
+
type DrizzleDriverHandle<TClient = unknown> = OrmDriverHandle<"drizzle", TClient, DrizzleDialect>;
|
|
13
|
+
declare function createDrizzleDriver<TSchema extends SchemaDefinition<any>>(config: DrizzleDriverConfig<TSchema>): OrmDriver<TSchema, DrizzleDriverHandle<DrizzleDatabaseLike | unknown>>;
|
|
13
14
|
|
|
14
|
-
export { type DrizzleDatabaseLike, type DrizzleDialect, type DrizzleDriverConfig, createDrizzleDriver };
|
|
15
|
+
export { type DrizzleDatabaseLike, type DrizzleDialect, type DrizzleDriverConfig, type DrizzleDriverHandle, createDrizzleDriver };
|
package/dist/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { SchemaDefinition, OrmDriver } from '@farming-labs/orm';
|
|
1
|
+
import { SchemaDefinition, OrmDriverHandle, OrmDriver } from '@farming-labs/orm';
|
|
2
2
|
|
|
3
3
|
type DrizzleDialect = "sqlite" | "mysql" | "postgres";
|
|
4
4
|
type DrizzleDatabaseLike = object & {
|
|
@@ -9,6 +9,7 @@ type DrizzleDriverConfig<TSchema extends SchemaDefinition<any>> = {
|
|
|
9
9
|
client?: unknown;
|
|
10
10
|
dialect: DrizzleDialect;
|
|
11
11
|
};
|
|
12
|
-
|
|
12
|
+
type DrizzleDriverHandle<TClient = unknown> = OrmDriverHandle<"drizzle", TClient, DrizzleDialect>;
|
|
13
|
+
declare function createDrizzleDriver<TSchema extends SchemaDefinition<any>>(config: DrizzleDriverConfig<TSchema>): OrmDriver<TSchema, DrizzleDriverHandle<DrizzleDatabaseLike | unknown>>;
|
|
13
14
|
|
|
14
|
-
export { type DrizzleDatabaseLike, type DrizzleDialect, type DrizzleDriverConfig, createDrizzleDriver };
|
|
15
|
+
export { type DrizzleDatabaseLike, type DrizzleDialect, type DrizzleDriverConfig, type DrizzleDriverHandle, createDrizzleDriver };
|
package/dist/index.js
CHANGED
|
@@ -11,7 +11,7 @@ function isRecord(value) {
|
|
|
11
11
|
function hasFunction(value, name) {
|
|
12
12
|
return isRecord(value) && typeof value[name] === "function";
|
|
13
13
|
}
|
|
14
|
-
function
|
|
14
|
+
function resolveRuntimeClient(config) {
|
|
15
15
|
const client = config.client ?? config.db?.$client;
|
|
16
16
|
if (!client) {
|
|
17
17
|
throw new Error(
|
|
@@ -20,45 +20,109 @@ function resolveClient(config) {
|
|
|
20
20
|
}
|
|
21
21
|
return client;
|
|
22
22
|
}
|
|
23
|
-
function
|
|
24
|
-
|
|
25
|
-
|
|
23
|
+
function wrapDrizzleDriver(driver, handle) {
|
|
24
|
+
return {
|
|
25
|
+
handle,
|
|
26
|
+
findMany(schema, model, args) {
|
|
27
|
+
return driver.findMany(schema, model, args);
|
|
28
|
+
},
|
|
29
|
+
findFirst(schema, model, args) {
|
|
30
|
+
return driver.findFirst(schema, model, args);
|
|
31
|
+
},
|
|
32
|
+
findUnique(schema, model, args) {
|
|
33
|
+
return driver.findUnique(schema, model, args);
|
|
34
|
+
},
|
|
35
|
+
count(schema, model, args) {
|
|
36
|
+
return driver.count(schema, model, args);
|
|
37
|
+
},
|
|
38
|
+
create(schema, model, args) {
|
|
39
|
+
return driver.create(schema, model, args);
|
|
40
|
+
},
|
|
41
|
+
createMany(schema, model, args) {
|
|
42
|
+
return driver.createMany(schema, model, args);
|
|
43
|
+
},
|
|
44
|
+
update(schema, model, args) {
|
|
45
|
+
return driver.update(schema, model, args);
|
|
46
|
+
},
|
|
47
|
+
updateMany(schema, model, args) {
|
|
48
|
+
return driver.updateMany(schema, model, args);
|
|
49
|
+
},
|
|
50
|
+
upsert(schema, model, args) {
|
|
51
|
+
return driver.upsert(schema, model, args);
|
|
52
|
+
},
|
|
53
|
+
delete(schema, model, args) {
|
|
54
|
+
return driver.delete(schema, model, args);
|
|
55
|
+
},
|
|
56
|
+
deleteMany(schema, model, args) {
|
|
57
|
+
return driver.deleteMany(schema, model, args);
|
|
58
|
+
},
|
|
59
|
+
transaction(schema, run) {
|
|
60
|
+
return driver.transaction(
|
|
61
|
+
schema,
|
|
62
|
+
async (txDriver) => run(wrapDrizzleDriver(txDriver, handle))
|
|
63
|
+
);
|
|
64
|
+
}
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
function createPostgresDrizzleDriver(runtimeClient, handle) {
|
|
68
|
+
if (hasFunction(runtimeClient, "connect") && hasFunction(runtimeClient, "query")) {
|
|
69
|
+
return wrapDrizzleDriver(createPgPoolDriver(runtimeClient), handle);
|
|
26
70
|
}
|
|
27
|
-
if (hasFunction(
|
|
28
|
-
return createPgClientDriver(
|
|
71
|
+
if (hasFunction(runtimeClient, "query")) {
|
|
72
|
+
return wrapDrizzleDriver(createPgClientDriver(runtimeClient), handle);
|
|
29
73
|
}
|
|
30
74
|
throw new Error(
|
|
31
75
|
"Drizzle postgres runtime expects a node-postgres Pool or Client under db.$client."
|
|
32
76
|
);
|
|
33
77
|
}
|
|
34
|
-
function createMysqlDrizzleDriver(
|
|
35
|
-
if (hasFunction(
|
|
36
|
-
return createMysqlDriver(
|
|
78
|
+
function createMysqlDrizzleDriver(runtimeClient, handle) {
|
|
79
|
+
if (hasFunction(runtimeClient, "getConnection") && hasFunction(runtimeClient, "execute")) {
|
|
80
|
+
return wrapDrizzleDriver(createMysqlDriver(runtimeClient), handle);
|
|
37
81
|
}
|
|
38
|
-
if (hasFunction(
|
|
39
|
-
return
|
|
82
|
+
if (hasFunction(runtimeClient, "execute") && hasFunction(runtimeClient, "beginTransaction") && hasFunction(runtimeClient, "commit") && hasFunction(runtimeClient, "rollback")) {
|
|
83
|
+
return wrapDrizzleDriver(
|
|
84
|
+
createMysqlDriver(runtimeClient),
|
|
85
|
+
handle
|
|
86
|
+
);
|
|
40
87
|
}
|
|
41
88
|
throw new Error(
|
|
42
89
|
"Drizzle mysql runtime expects a mysql2 Pool or transactional Connection under db.$client."
|
|
43
90
|
);
|
|
44
91
|
}
|
|
45
|
-
function createSqliteDrizzleDriver(
|
|
46
|
-
if (hasFunction(
|
|
47
|
-
return
|
|
92
|
+
function createSqliteDrizzleDriver(runtimeClient, handle) {
|
|
93
|
+
if (hasFunction(runtimeClient, "prepare") && hasFunction(runtimeClient, "exec")) {
|
|
94
|
+
return wrapDrizzleDriver(
|
|
95
|
+
createSqliteDriver(runtimeClient),
|
|
96
|
+
handle
|
|
97
|
+
);
|
|
48
98
|
}
|
|
49
99
|
throw new Error(
|
|
50
100
|
"Drizzle sqlite runtime expects a sqlite-compatible database with prepare() and exec() under db.$client."
|
|
51
101
|
);
|
|
52
102
|
}
|
|
53
103
|
function createDrizzleDriver(config) {
|
|
54
|
-
const
|
|
104
|
+
const runtimeClient = resolveRuntimeClient(config);
|
|
105
|
+
const handle = {
|
|
106
|
+
kind: "drizzle",
|
|
107
|
+
client: config.db ?? config.client ?? runtimeClient,
|
|
108
|
+
dialect: config.dialect
|
|
109
|
+
};
|
|
55
110
|
switch (config.dialect) {
|
|
56
111
|
case "postgres":
|
|
57
|
-
return createPostgresDrizzleDriver(
|
|
112
|
+
return createPostgresDrizzleDriver(
|
|
113
|
+
runtimeClient,
|
|
114
|
+
handle
|
|
115
|
+
);
|
|
58
116
|
case "mysql":
|
|
59
|
-
return createMysqlDrizzleDriver(
|
|
117
|
+
return createMysqlDrizzleDriver(
|
|
118
|
+
runtimeClient,
|
|
119
|
+
handle
|
|
120
|
+
);
|
|
60
121
|
case "sqlite":
|
|
61
|
-
return createSqliteDrizzleDriver(
|
|
122
|
+
return createSqliteDrizzleDriver(
|
|
123
|
+
runtimeClient,
|
|
124
|
+
handle
|
|
125
|
+
);
|
|
62
126
|
}
|
|
63
127
|
}
|
|
64
128
|
export {
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts"],"sourcesContent":["import type { OrmDriver, SchemaDefinition } from \"@farming-labs/orm\";\nimport {\n createMysqlDriver,\n createPgClientDriver,\n createPgPoolDriver,\n createSqliteDriver,\n type MysqlConnectionLike,\n type MysqlPoolLike,\n type PgClientLike,\n type PgPoolLike,\n type SqliteDatabaseLike,\n} from \"@farming-labs/orm-sql\";\n\nexport type DrizzleDialect = \"sqlite\" | \"mysql\" | \"postgres\";\n\nexport type DrizzleDatabaseLike = object & {\n $client?: unknown;\n};\n\nexport type DrizzleDriverConfig<TSchema extends SchemaDefinition<any>> = {\n db?: DrizzleDatabaseLike;\n client?: unknown;\n dialect: DrizzleDialect;\n};\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return !!value && typeof value === \"object\";\n}\n\nfunction hasFunction<TName extends string>(\n value: unknown,\n name: TName,\n): value is Record<TName, (...args: any[]) => unknown> {\n return isRecord(value) && typeof value[name] === \"function\";\n}\n\nfunction
|
|
1
|
+
{"version":3,"sources":["../src/index.ts"],"sourcesContent":["import type { OrmDriver, OrmDriverHandle, SchemaDefinition } from \"@farming-labs/orm\";\nimport {\n createMysqlDriver,\n createPgClientDriver,\n createPgPoolDriver,\n createSqliteDriver,\n type MysqlConnectionLike,\n type MysqlPoolLike,\n type PgClientLike,\n type PgPoolLike,\n type SqliteDatabaseLike,\n} from \"@farming-labs/orm-sql\";\n\nexport type DrizzleDialect = \"sqlite\" | \"mysql\" | \"postgres\";\n\nexport type DrizzleDatabaseLike = object & {\n $client?: unknown;\n};\n\nexport type DrizzleDriverConfig<TSchema extends SchemaDefinition<any>> = {\n db?: DrizzleDatabaseLike;\n client?: unknown;\n dialect: DrizzleDialect;\n};\n\nexport type DrizzleDriverHandle<TClient = unknown> = OrmDriverHandle<\n \"drizzle\",\n TClient,\n DrizzleDialect\n>;\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return !!value && typeof value === \"object\";\n}\n\nfunction hasFunction<TName extends string>(\n value: unknown,\n name: TName,\n): value is Record<TName, (...args: any[]) => unknown> {\n return isRecord(value) && typeof value[name] === \"function\";\n}\n\nfunction resolveRuntimeClient(config: DrizzleDriverConfig<any>) {\n const client = config.client ?? config.db?.$client;\n\n if (!client) {\n throw new Error(\n 'Drizzle runtime requires a Drizzle database with a \"$client\" property or an explicit \"client\" option.',\n );\n }\n\n return client;\n}\n\nfunction wrapDrizzleDriver<TSchema extends SchemaDefinition<any>, TClient>(\n driver: OrmDriver<TSchema, any>,\n handle: DrizzleDriverHandle<TClient>,\n): OrmDriver<TSchema, DrizzleDriverHandle<TClient>> {\n return {\n handle,\n findMany(schema, model, args) {\n return driver.findMany(schema, model, args);\n },\n findFirst(schema, model, args) {\n return driver.findFirst(schema, model, args);\n },\n findUnique(schema, model, args) {\n return driver.findUnique(schema, model, args);\n },\n count(schema, model, args) {\n return driver.count(schema, model, args);\n },\n create(schema, model, args) {\n return driver.create(schema, model, args);\n },\n createMany(schema, model, args) {\n return driver.createMany(schema, model, args);\n },\n update(schema, model, args) {\n return driver.update(schema, model, args);\n },\n updateMany(schema, model, args) {\n return driver.updateMany(schema, model, args);\n },\n upsert(schema, model, args) {\n return driver.upsert(schema, model, args);\n },\n delete(schema, model, args) {\n return driver.delete(schema, model, args);\n },\n deleteMany(schema, model, args) {\n return driver.deleteMany(schema, model, args);\n },\n transaction(schema, run) {\n return driver.transaction(schema, async (txDriver) =>\n run(wrapDrizzleDriver(txDriver, handle)),\n );\n },\n };\n}\n\nfunction createPostgresDrizzleDriver<TSchema extends SchemaDefinition<any>, TClient>(\n runtimeClient: unknown,\n handle: DrizzleDriverHandle<TClient>,\n) {\n if (hasFunction(runtimeClient, \"connect\") && hasFunction(runtimeClient, \"query\")) {\n return wrapDrizzleDriver(createPgPoolDriver<TSchema>(runtimeClient as PgPoolLike), handle);\n }\n\n if (hasFunction(runtimeClient, \"query\")) {\n return wrapDrizzleDriver(createPgClientDriver<TSchema>(runtimeClient as PgClientLike), handle);\n }\n\n throw new Error(\n \"Drizzle postgres runtime expects a node-postgres Pool or Client under db.$client.\",\n );\n}\n\nfunction createMysqlDrizzleDriver<TSchema extends SchemaDefinition<any>, TClient>(\n runtimeClient: unknown,\n handle: DrizzleDriverHandle<TClient>,\n) {\n if (hasFunction(runtimeClient, \"getConnection\") && hasFunction(runtimeClient, \"execute\")) {\n return wrapDrizzleDriver(createMysqlDriver<TSchema>(runtimeClient as MysqlPoolLike), handle);\n }\n\n if (\n hasFunction(runtimeClient, \"execute\") &&\n hasFunction(runtimeClient, \"beginTransaction\") &&\n hasFunction(runtimeClient, \"commit\") &&\n hasFunction(runtimeClient, \"rollback\")\n ) {\n return wrapDrizzleDriver(\n createMysqlDriver<TSchema>(runtimeClient as MysqlConnectionLike),\n handle,\n );\n }\n\n throw new Error(\n \"Drizzle mysql runtime expects a mysql2 Pool or transactional Connection under db.$client.\",\n );\n}\n\nfunction createSqliteDrizzleDriver<TSchema extends SchemaDefinition<any>, TClient>(\n runtimeClient: unknown,\n handle: DrizzleDriverHandle<TClient>,\n) {\n if (hasFunction(runtimeClient, \"prepare\") && hasFunction(runtimeClient, \"exec\")) {\n return wrapDrizzleDriver(\n createSqliteDriver<TSchema>(runtimeClient as SqliteDatabaseLike),\n handle,\n );\n }\n\n throw new Error(\n \"Drizzle sqlite runtime expects a sqlite-compatible database with prepare() and exec() under db.$client.\",\n );\n}\n\nexport function createDrizzleDriver<TSchema extends SchemaDefinition<any>>(\n config: DrizzleDriverConfig<TSchema>,\n): OrmDriver<TSchema, DrizzleDriverHandle<DrizzleDatabaseLike | unknown>> {\n const runtimeClient = resolveRuntimeClient(config);\n const handle: DrizzleDriverHandle<DrizzleDatabaseLike | unknown> = {\n kind: \"drizzle\",\n client: config.db ?? config.client ?? runtimeClient,\n dialect: config.dialect,\n };\n\n switch (config.dialect) {\n case \"postgres\":\n return createPostgresDrizzleDriver<TSchema, DrizzleDatabaseLike | unknown>(\n runtimeClient,\n handle,\n );\n case \"mysql\":\n return createMysqlDrizzleDriver<TSchema, DrizzleDatabaseLike | unknown>(\n runtimeClient,\n handle,\n );\n case \"sqlite\":\n return createSqliteDrizzleDriver<TSchema, DrizzleDatabaseLike | unknown>(\n runtimeClient,\n handle,\n );\n }\n}\n"],"mappings":"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","names":[]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@farming-labs/orm-drizzle",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.13",
|
|
4
4
|
"files": [
|
|
5
5
|
"dist"
|
|
6
6
|
],
|
|
@@ -19,8 +19,8 @@
|
|
|
19
19
|
"access": "public"
|
|
20
20
|
},
|
|
21
21
|
"dependencies": {
|
|
22
|
-
"@farming-labs/orm
|
|
23
|
-
"@farming-labs/orm": "0.0.
|
|
22
|
+
"@farming-labs/orm": "0.0.13",
|
|
23
|
+
"@farming-labs/orm-sql": "0.0.13"
|
|
24
24
|
},
|
|
25
25
|
"devDependencies": {
|
|
26
26
|
"@types/pg": "^8.15.6",
|