@farming-labs/orm-runtime 0.0.20 → 0.0.22
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/chunk-336GVTN5.js +181 -0
- package/dist/chunk-336GVTN5.js.map +1 -0
- package/dist/index.cjs +35 -345
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +12 -42
- package/dist/index.d.ts +12 -42
- package/dist/index.js +4 -496
- package/dist/index.js.map +1 -1
- package/dist/setup.cjs +528 -0
- package/dist/setup.cjs.map +1 -0
- package/dist/setup.d.cts +19 -0
- package/dist/setup.d.ts +19 -0
- package/dist/setup.js +333 -0
- package/dist/setup.js.map +1 -0
- package/dist/shared-CC7XYRno.d.cts +43 -0
- package/dist/shared-CC7XYRno.d.ts +43 -0
- package/package.json +13 -8
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
// src/index.ts
|
|
2
|
+
import {
|
|
3
|
+
createOrm
|
|
4
|
+
} from "@farming-labs/orm";
|
|
5
|
+
|
|
6
|
+
// src/shared.ts
|
|
7
|
+
import { createManifest, requireDatabaseRuntime } from "@farming-labs/orm";
|
|
8
|
+
function isRecord(value) {
|
|
9
|
+
return !!value && typeof value === "object";
|
|
10
|
+
}
|
|
11
|
+
function hasFunction(value, name) {
|
|
12
|
+
return isRecord(value) && typeof value[name] === "function";
|
|
13
|
+
}
|
|
14
|
+
function resolveRuntime(options) {
|
|
15
|
+
if (options.runtime) {
|
|
16
|
+
return options.runtime;
|
|
17
|
+
}
|
|
18
|
+
if (options.client === void 0) {
|
|
19
|
+
throw new Error(
|
|
20
|
+
'createDriverFromRuntime() requires either a detected "runtime" or a raw "client".'
|
|
21
|
+
);
|
|
22
|
+
}
|
|
23
|
+
return requireDatabaseRuntime(options.client);
|
|
24
|
+
}
|
|
25
|
+
function resolveDialect(runtime, override) {
|
|
26
|
+
const dialect = override ?? runtime.dialect;
|
|
27
|
+
if (!dialect) {
|
|
28
|
+
throw new Error(
|
|
29
|
+
`Could not determine the database dialect for the detected ${runtime.kind} runtime. Pass a "dialect" option explicitly.`
|
|
30
|
+
);
|
|
31
|
+
}
|
|
32
|
+
return dialect;
|
|
33
|
+
}
|
|
34
|
+
function inferMongooseModels(schema, connection) {
|
|
35
|
+
const manifest = createManifest(schema);
|
|
36
|
+
const registeredModels = Object.values(connection.models ?? {});
|
|
37
|
+
const models = {};
|
|
38
|
+
for (const modelName of Object.keys(schema.models)) {
|
|
39
|
+
const expectedTable = manifest.models[modelName].table;
|
|
40
|
+
const inferredModel = registeredModels.find(
|
|
41
|
+
(candidate) => candidate.collection?.collectionName === expectedTable
|
|
42
|
+
) ?? connection.models?.[String(modelName)];
|
|
43
|
+
if (!inferredModel) {
|
|
44
|
+
throw new Error(
|
|
45
|
+
`Could not infer a Mongoose model for schema model "${String(modelName)}". Register a model for collection "${expectedTable}" or pass mongoose.models explicitly.`
|
|
46
|
+
);
|
|
47
|
+
}
|
|
48
|
+
models[modelName] = inferredModel;
|
|
49
|
+
}
|
|
50
|
+
return models;
|
|
51
|
+
}
|
|
52
|
+
function resolveMongoDb(runtime, options) {
|
|
53
|
+
if (options.mongo?.db) {
|
|
54
|
+
return options.mongo.db;
|
|
55
|
+
}
|
|
56
|
+
if (runtime.source === "db") {
|
|
57
|
+
return runtime.client;
|
|
58
|
+
}
|
|
59
|
+
const databaseName = options.databaseName;
|
|
60
|
+
if (!databaseName) {
|
|
61
|
+
throw new Error(
|
|
62
|
+
'MongoClient auto-creation requires a "databaseName" option so the helper can resolve the target database.'
|
|
63
|
+
);
|
|
64
|
+
}
|
|
65
|
+
return runtime.client.db(databaseName);
|
|
66
|
+
}
|
|
67
|
+
function resolveMongoSessionSource(runtime, db, options) {
|
|
68
|
+
if (options.mongo?.startSession) {
|
|
69
|
+
return {
|
|
70
|
+
client: void 0,
|
|
71
|
+
startSession: options.mongo.startSession
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
if (runtime.source === "client" && hasFunction(runtime.client, "startSession")) {
|
|
75
|
+
return {
|
|
76
|
+
client: runtime.client,
|
|
77
|
+
startSession: void 0
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
const dbClient = isRecord(db) ? db["client"] : void 0;
|
|
81
|
+
if (hasFunction(dbClient, "startSession")) {
|
|
82
|
+
return {
|
|
83
|
+
client: dbClient,
|
|
84
|
+
startSession: void 0
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
return {
|
|
88
|
+
client: void 0,
|
|
89
|
+
startSession: void 0
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
// src/index.ts
|
|
94
|
+
async function createSqlDriverFromRuntime(runtime, dialect) {
|
|
95
|
+
const { createMysqlDriver, createPgClientDriver, createPgPoolDriver, createSqliteDriver } = await import("@farming-labs/orm-sql");
|
|
96
|
+
if (dialect === "sqlite") {
|
|
97
|
+
return createSqliteDriver(runtime.client);
|
|
98
|
+
}
|
|
99
|
+
if (dialect === "postgres") {
|
|
100
|
+
if (runtime.source === "pool") {
|
|
101
|
+
return createPgPoolDriver(runtime.client);
|
|
102
|
+
}
|
|
103
|
+
return createPgClientDriver(runtime.client);
|
|
104
|
+
}
|
|
105
|
+
if (runtime.source === "pool") {
|
|
106
|
+
return createMysqlDriver(runtime.client);
|
|
107
|
+
}
|
|
108
|
+
return createMysqlDriver(runtime.client);
|
|
109
|
+
}
|
|
110
|
+
async function createDriverFromRuntime(options) {
|
|
111
|
+
const runtime = resolveRuntime(options);
|
|
112
|
+
switch (runtime.kind) {
|
|
113
|
+
case "prisma": {
|
|
114
|
+
const { createPrismaDriver } = await import("@farming-labs/orm-prisma");
|
|
115
|
+
return createPrismaDriver({
|
|
116
|
+
client: runtime.client,
|
|
117
|
+
models: options.prisma?.models
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
case "drizzle": {
|
|
121
|
+
const { createDrizzleDriver } = await import("@farming-labs/orm-drizzle");
|
|
122
|
+
return createDrizzleDriver({
|
|
123
|
+
db: runtime.client,
|
|
124
|
+
client: options.drizzle?.client,
|
|
125
|
+
dialect: resolveDialect(runtime, options.dialect)
|
|
126
|
+
});
|
|
127
|
+
}
|
|
128
|
+
case "kysely": {
|
|
129
|
+
const { createKyselyDriver } = await import("@farming-labs/orm-kysely");
|
|
130
|
+
return createKyselyDriver({
|
|
131
|
+
db: runtime.client,
|
|
132
|
+
dialect: resolveDialect(runtime, options.dialect)
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
case "sql":
|
|
136
|
+
return await createSqlDriverFromRuntime(
|
|
137
|
+
runtime,
|
|
138
|
+
resolveDialect(runtime, options.dialect)
|
|
139
|
+
);
|
|
140
|
+
case "mongo": {
|
|
141
|
+
const { createMongoDriver } = await import("@farming-labs/orm-mongo");
|
|
142
|
+
const db = resolveMongoDb(runtime, options);
|
|
143
|
+
const sessionSource = resolveMongoSessionSource(runtime, db, options);
|
|
144
|
+
return createMongoDriver({
|
|
145
|
+
collections: options.mongo?.collections,
|
|
146
|
+
db,
|
|
147
|
+
client: sessionSource.client,
|
|
148
|
+
startSession: sessionSource.startSession,
|
|
149
|
+
transforms: options.mongo?.transforms
|
|
150
|
+
});
|
|
151
|
+
}
|
|
152
|
+
case "mongoose": {
|
|
153
|
+
const { createMongooseDriver } = await import("@farming-labs/orm-mongoose");
|
|
154
|
+
const connection = runtime.client;
|
|
155
|
+
return createMongooseDriver({
|
|
156
|
+
models: options.mongoose?.models ?? inferMongooseModels(options.schema, connection),
|
|
157
|
+
connection,
|
|
158
|
+
startSession: options.mongoose?.startSession,
|
|
159
|
+
transforms: options.mongoose?.transforms
|
|
160
|
+
});
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
async function createOrmFromRuntime(options) {
|
|
165
|
+
const driver = await createDriverFromRuntime(options);
|
|
166
|
+
return createOrm({
|
|
167
|
+
schema: options.schema,
|
|
168
|
+
driver
|
|
169
|
+
});
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
export {
|
|
173
|
+
isRecord,
|
|
174
|
+
hasFunction,
|
|
175
|
+
resolveRuntime,
|
|
176
|
+
resolveDialect,
|
|
177
|
+
resolveMongoDb,
|
|
178
|
+
createDriverFromRuntime,
|
|
179
|
+
createOrmFromRuntime
|
|
180
|
+
};
|
|
181
|
+
//# sourceMappingURL=chunk-336GVTN5.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/shared.ts"],"sourcesContent":["import {\n createOrm,\n type OrmClient,\n type OrmDriver,\n type SchemaDefinition,\n} from \"@farming-labs/orm\";\nimport type { DrizzleDialect, DrizzleDriverConfig } from \"@farming-labs/orm-drizzle\";\nimport type { KyselyDialect, KyselyDriverConfig } from \"@farming-labs/orm-kysely\";\nimport type { MongoDriverConfig } from \"@farming-labs/orm-mongo\";\nimport type { MongooseDriverConfig } from \"@farming-labs/orm-mongoose\";\nimport type { PrismaDriverConfig } from \"@farming-labs/orm-prisma\";\nimport type {\n MysqlConnectionLike,\n MysqlPoolLike,\n PgClientLike,\n PgPoolLike,\n SqliteDatabaseLike,\n} from \"@farming-labs/orm-sql\";\nimport {\n inferMongooseModels,\n resolveDialect,\n resolveMongoDb,\n resolveMongoSessionSource,\n resolveRuntime,\n type AutoDriverHandle,\n type CreateDriverFromRuntimeOptions,\n type CreateOrmFromRuntimeOptions,\n type MongooseConnectionLike,\n} from \"./shared\";\n\nasync function createSqlDriverFromRuntime<TSchema extends SchemaDefinition<any>>(\n runtime: Awaited<ReturnType<typeof resolveRuntime>>,\n dialect: ReturnType<typeof resolveDialect>,\n) {\n const { createMysqlDriver, createPgClientDriver, createPgPoolDriver, createSqliteDriver } =\n await import(\"@farming-labs/orm-sql\");\n\n if (dialect === \"sqlite\") {\n return createSqliteDriver<TSchema>(runtime.client as SqliteDatabaseLike);\n }\n\n if (dialect === \"postgres\") {\n if (runtime.source === \"pool\") {\n return createPgPoolDriver<TSchema>(runtime.client as PgPoolLike);\n }\n\n return createPgClientDriver<TSchema>(runtime.client as PgClientLike);\n }\n\n if (runtime.source === \"pool\") {\n return createMysqlDriver<TSchema>(runtime.client as MysqlPoolLike);\n }\n\n return createMysqlDriver<TSchema>(runtime.client as MysqlConnectionLike);\n}\n\nexport async function createDriverFromRuntime<\n TSchema extends SchemaDefinition<any>,\n TClient = unknown,\n>(\n options: CreateDriverFromRuntimeOptions<TSchema, TClient>,\n): Promise<OrmDriver<TSchema, AutoDriverHandle<TClient>>> {\n const runtime = resolveRuntime(options);\n\n switch (runtime.kind) {\n case \"prisma\": {\n const { createPrismaDriver } = await import(\"@farming-labs/orm-prisma\");\n return createPrismaDriver<TSchema>({\n client: runtime.client as PrismaDriverConfig<TSchema>[\"client\"],\n models: options.prisma?.models,\n }) as OrmDriver<TSchema, AutoDriverHandle<TClient>>;\n }\n case \"drizzle\": {\n const { createDrizzleDriver } = await import(\"@farming-labs/orm-drizzle\");\n return createDrizzleDriver<TSchema>({\n db: runtime.client as DrizzleDriverConfig<TSchema>[\"db\"],\n client: options.drizzle?.client,\n dialect: resolveDialect(runtime, options.dialect) as DrizzleDialect,\n }) as OrmDriver<TSchema, AutoDriverHandle<TClient>>;\n }\n case \"kysely\": {\n const { createKyselyDriver } = await import(\"@farming-labs/orm-kysely\");\n return createKyselyDriver<TSchema>({\n db: runtime.client as KyselyDriverConfig<TSchema>[\"db\"],\n dialect: resolveDialect(runtime, options.dialect) as KyselyDialect,\n }) as OrmDriver<TSchema, AutoDriverHandle<TClient>>;\n }\n case \"sql\":\n return (await createSqlDriverFromRuntime<TSchema>(\n runtime,\n resolveDialect(runtime, options.dialect),\n )) as OrmDriver<TSchema, AutoDriverHandle<TClient>>;\n case \"mongo\": {\n const { createMongoDriver } = await import(\"@farming-labs/orm-mongo\");\n const db = resolveMongoDb(runtime, options);\n const sessionSource = resolveMongoSessionSource(runtime, db, options);\n\n return createMongoDriver<TSchema>({\n collections: options.mongo?.collections,\n db,\n client: sessionSource.client,\n startSession: sessionSource.startSession,\n transforms: options.mongo?.transforms as MongoDriverConfig<TSchema>[\"transforms\"],\n }) as OrmDriver<TSchema, AutoDriverHandle<TClient>>;\n }\n case \"mongoose\": {\n const { createMongooseDriver } = await import(\"@farming-labs/orm-mongoose\");\n const connection = runtime.client as MongooseConnectionLike;\n\n return createMongooseDriver<TSchema>({\n models: options.mongoose?.models ?? inferMongooseModels(options.schema, connection),\n connection,\n startSession: options.mongoose?.startSession,\n transforms: options.mongoose?.transforms as MongooseDriverConfig<TSchema>[\"transforms\"],\n }) as OrmDriver<TSchema, AutoDriverHandle<TClient>>;\n }\n }\n}\n\nexport async function createOrmFromRuntime<\n TSchema extends SchemaDefinition<any>,\n TClient = unknown,\n>(\n options: CreateOrmFromRuntimeOptions<TSchema, TClient>,\n): Promise<OrmClient<TSchema, AutoDriverHandle<TClient>>> {\n const driver = await createDriverFromRuntime(options);\n return createOrm({\n schema: options.schema,\n driver,\n }) as OrmClient<TSchema, AutoDriverHandle<TClient>>;\n}\n\nexport type {\n AutoDialect,\n AutoDriverHandle,\n CreateDriverFromRuntimeOptions,\n CreateOrmFromRuntimeOptions,\n MongooseConnectionLike,\n} from \"./shared\";\n","import { createManifest, requireDatabaseRuntime } from \"@farming-labs/orm\";\nimport type {\n DetectedDatabaseDialect,\n DetectedDatabaseRuntime,\n ModelName,\n OrmDriverHandle,\n SchemaDefinition,\n} from \"@farming-labs/orm\";\nimport type { DrizzleDialect, DrizzleDriverConfig } from \"@farming-labs/orm-drizzle\";\nimport type {\n MongoCollectionMap,\n MongoDbLike,\n MongoDriverConfig,\n MongoSessionLike,\n MongoSessionSourceLike,\n} from \"@farming-labs/orm-mongo\";\nimport type {\n MongooseFieldTransform,\n MongooseModelLike,\n MongooseSessionLike,\n MongooseSessionSourceLike,\n} from \"@farming-labs/orm-mongoose\";\nimport type { KyselyDialect } from \"@farming-labs/orm-kysely\";\nimport type { PrismaDriverConfig, PrismaDriverHandle } from \"@farming-labs/orm-prisma\";\nimport type { SqlDriverHandle } from \"@farming-labs/orm-sql\";\n\nexport type AutoDialect = DetectedDatabaseDialect;\n\nexport type AutoDriverHandle<TClient = unknown> =\n | PrismaDriverHandle\n | SqlDriverHandle<TClient, AutoDialect>\n | OrmDriverHandle<\"drizzle\", TClient, DrizzleDialect>\n | OrmDriverHandle<\"kysely\", TClient, KyselyDialect>\n | OrmDriverHandle<\"mongo\", unknown>\n | OrmDriverHandle<\"mongoose\", unknown>;\n\nexport type CreateDriverFromRuntimeOptions<\n TSchema extends SchemaDefinition<any>,\n TClient = unknown,\n> = {\n schema: TSchema;\n client?: TClient;\n runtime?: DetectedDatabaseRuntime<TClient>;\n dialect?: AutoDialect;\n databaseName?: string;\n prisma?: Pick<PrismaDriverConfig<TSchema>, \"models\"> & {\n databaseUrl?: string;\n packageRoot?: string;\n };\n drizzle?: Pick<DrizzleDriverConfig<TSchema>, \"client\">;\n mongo?: {\n collections?: MongoCollectionMap<TSchema>;\n db?: MongoDbLike;\n transforms?: MongoDriverConfig<TSchema>[\"transforms\"];\n startSession?: () => Promise<MongoSessionLike>;\n };\n mongoose?: {\n models?: Record<ModelName<TSchema>, MongooseModelLike>;\n transforms?: Partial<Record<string, Partial<Record<string, MongooseFieldTransform>>>>;\n startSession?: () => Promise<MongooseSessionLike>;\n };\n};\n\nexport type CreateOrmFromRuntimeOptions<\n TSchema extends SchemaDefinition<any>,\n TClient = unknown,\n> = CreateDriverFromRuntimeOptions<TSchema, TClient>;\n\nexport type MongooseConnectionLike = MongooseSessionSourceLike & {\n models?: Record<string, MongooseModelLike & { collection?: { collectionName?: string } }>;\n};\n\ntype MongoClientLike = MongoSessionSourceLike & {\n db(name?: string): MongoDbLike;\n};\n\nexport function isRecord(value: unknown): value is Record<string, unknown> {\n return !!value && typeof value === \"object\";\n}\n\nexport function 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\nexport function resolveRuntime<TClient>(\n options: CreateDriverFromRuntimeOptions<any, TClient>,\n): DetectedDatabaseRuntime<TClient> {\n if (options.runtime) {\n return options.runtime;\n }\n\n if (options.client === undefined) {\n throw new Error(\n 'createDriverFromRuntime() requires either a detected \"runtime\" or a raw \"client\".',\n );\n }\n\n return requireDatabaseRuntime(options.client);\n}\n\nexport function resolveDialect(\n runtime: DetectedDatabaseRuntime<any>,\n override?: AutoDialect,\n): AutoDialect {\n const dialect = override ?? runtime.dialect;\n if (!dialect) {\n throw new Error(\n `Could not determine the database dialect for the detected ${runtime.kind} runtime. Pass a \"dialect\" option explicitly.`,\n );\n }\n return dialect;\n}\n\nexport function inferMongooseModels<TSchema extends SchemaDefinition<any>>(\n schema: TSchema,\n connection: MongooseConnectionLike,\n) {\n const manifest = createManifest(schema);\n const registeredModels = Object.values(connection.models ?? {});\n const models = {} as Record<ModelName<TSchema>, MongooseModelLike>;\n\n for (const modelName of Object.keys(schema.models) as Array<ModelName<TSchema>>) {\n const expectedTable = manifest.models[modelName].table;\n const inferredModel =\n registeredModels.find(\n (candidate) => candidate.collection?.collectionName === expectedTable,\n ) ?? connection.models?.[String(modelName)];\n\n if (!inferredModel) {\n throw new Error(\n `Could not infer a Mongoose model for schema model \"${String(modelName)}\". Register a model for collection \"${expectedTable}\" or pass mongoose.models explicitly.`,\n );\n }\n\n models[modelName] = inferredModel;\n }\n\n return models;\n}\n\nexport function resolveMongoDb(\n runtime: DetectedDatabaseRuntime<any>,\n options: CreateDriverFromRuntimeOptions<any>,\n) {\n if (options.mongo?.db) {\n return options.mongo.db;\n }\n\n if (runtime.source === \"db\") {\n return runtime.client as MongoDbLike;\n }\n\n const databaseName = options.databaseName;\n if (!databaseName) {\n throw new Error(\n 'MongoClient auto-creation requires a \"databaseName\" option so the helper can resolve the target database.',\n );\n }\n\n return (runtime.client as MongoClientLike).db(databaseName);\n}\n\nexport function resolveMongoSessionSource(\n runtime: DetectedDatabaseRuntime<any>,\n db: MongoDbLike,\n options: CreateDriverFromRuntimeOptions<any>,\n) {\n if (options.mongo?.startSession) {\n return {\n client: undefined,\n startSession: options.mongo.startSession,\n };\n }\n\n if (runtime.source === \"client\" && hasFunction(runtime.client, \"startSession\")) {\n return {\n client: runtime.client as MongoSessionSourceLike,\n startSession: undefined,\n };\n }\n\n const dbClient = isRecord(db) ? (db as Record<string, unknown>)[\"client\"] : undefined;\n if (hasFunction(dbClient, \"startSession\")) {\n return {\n client: dbClient as MongoSessionSourceLike,\n startSession: undefined,\n };\n }\n\n return {\n client: undefined,\n startSession: undefined,\n };\n}\n"],"mappings":"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","names":[]}
|
package/dist/index.cjs
CHANGED
|
@@ -30,33 +30,20 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
|
|
|
30
30
|
// src/index.ts
|
|
31
31
|
var index_exports = {};
|
|
32
32
|
__export(index_exports, {
|
|
33
|
-
applySchema: () => applySchema,
|
|
34
|
-
bootstrapDatabase: () => bootstrapDatabase,
|
|
35
33
|
createDriverFromRuntime: () => createDriverFromRuntime,
|
|
36
|
-
createOrmFromRuntime: () => createOrmFromRuntime
|
|
37
|
-
pushSchema: () => pushSchema
|
|
34
|
+
createOrmFromRuntime: () => createOrmFromRuntime
|
|
38
35
|
});
|
|
39
36
|
module.exports = __toCommonJS(index_exports);
|
|
40
|
-
var
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
var import_node_path = __toESM(require("path"), 1);
|
|
44
|
-
var import_node_util = require("util");
|
|
37
|
+
var import_orm2 = require("@farming-labs/orm");
|
|
38
|
+
|
|
39
|
+
// src/shared.ts
|
|
45
40
|
var import_orm = require("@farming-labs/orm");
|
|
46
|
-
var import_orm_drizzle = require("@farming-labs/orm-drizzle");
|
|
47
|
-
var import_orm_kysely = require("@farming-labs/orm-kysely");
|
|
48
|
-
var import_orm_mongo = require("@farming-labs/orm-mongo");
|
|
49
|
-
var import_orm_mongoose = require("@farming-labs/orm-mongoose");
|
|
50
|
-
var import_orm_prisma = require("@farming-labs/orm-prisma");
|
|
51
|
-
var import_orm_sql = require("@farming-labs/orm-sql");
|
|
52
41
|
function isRecord(value) {
|
|
53
42
|
return !!value && typeof value === "object";
|
|
54
43
|
}
|
|
55
44
|
function hasFunction(value, name) {
|
|
56
45
|
return isRecord(value) && typeof value[name] === "function";
|
|
57
46
|
}
|
|
58
|
-
var execFileAsync = (0, import_node_util.promisify)(import_node_child_process.execFile);
|
|
59
|
-
var defaultPrismaPackageRoot = process.cwd();
|
|
60
47
|
function resolveRuntime(options) {
|
|
61
48
|
if (options.runtime) {
|
|
62
49
|
return options.runtime;
|
|
@@ -77,96 +64,6 @@ function resolveDialect(runtime, override) {
|
|
|
77
64
|
}
|
|
78
65
|
return dialect;
|
|
79
66
|
}
|
|
80
|
-
function prismaProviderForDialect(dialect) {
|
|
81
|
-
switch (dialect) {
|
|
82
|
-
case "sqlite":
|
|
83
|
-
return "sqlite";
|
|
84
|
-
case "postgres":
|
|
85
|
-
return "postgresql";
|
|
86
|
-
case "mysql":
|
|
87
|
-
return "mysql";
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
function withDatabaseEnv(rendered) {
|
|
91
|
-
return rendered.replace(/url\s+=\s+.+/, `url = env("DATABASE_URL")`);
|
|
92
|
-
}
|
|
93
|
-
function renderRuntimePrismaSchema(schema, provider) {
|
|
94
|
-
return withDatabaseEnv((0, import_orm.renderPrismaSchema)(schema, { provider }));
|
|
95
|
-
}
|
|
96
|
-
function splitSqlStatements(sql) {
|
|
97
|
-
const statements = [];
|
|
98
|
-
let current = "";
|
|
99
|
-
let quote = null;
|
|
100
|
-
for (let index = 0; index < sql.length; index += 1) {
|
|
101
|
-
const char = sql[index];
|
|
102
|
-
const next = sql[index + 1];
|
|
103
|
-
current += char;
|
|
104
|
-
if (quote === "'") {
|
|
105
|
-
if (char === "'" && next === "'") {
|
|
106
|
-
current += next;
|
|
107
|
-
index += 1;
|
|
108
|
-
continue;
|
|
109
|
-
}
|
|
110
|
-
if (char === "\\" && next === "'") {
|
|
111
|
-
current += next;
|
|
112
|
-
index += 1;
|
|
113
|
-
continue;
|
|
114
|
-
}
|
|
115
|
-
if (char === "'") {
|
|
116
|
-
quote = null;
|
|
117
|
-
}
|
|
118
|
-
continue;
|
|
119
|
-
}
|
|
120
|
-
if (quote === '"') {
|
|
121
|
-
if (char === '"' && next === '"') {
|
|
122
|
-
current += next;
|
|
123
|
-
index += 1;
|
|
124
|
-
continue;
|
|
125
|
-
}
|
|
126
|
-
if (char === '"') {
|
|
127
|
-
quote = null;
|
|
128
|
-
}
|
|
129
|
-
continue;
|
|
130
|
-
}
|
|
131
|
-
if (quote === "`") {
|
|
132
|
-
if (char === "`" && next === "`") {
|
|
133
|
-
current += next;
|
|
134
|
-
index += 1;
|
|
135
|
-
continue;
|
|
136
|
-
}
|
|
137
|
-
if (char === "\\" && next === "`") {
|
|
138
|
-
current += next;
|
|
139
|
-
index += 1;
|
|
140
|
-
continue;
|
|
141
|
-
}
|
|
142
|
-
if (char === "`") {
|
|
143
|
-
quote = null;
|
|
144
|
-
}
|
|
145
|
-
continue;
|
|
146
|
-
}
|
|
147
|
-
if (char === "'" || char === '"' || char === "`") {
|
|
148
|
-
quote = char;
|
|
149
|
-
continue;
|
|
150
|
-
}
|
|
151
|
-
if (char === ";") {
|
|
152
|
-
const statement = current.trim();
|
|
153
|
-
if (statement) {
|
|
154
|
-
statements.push(statement);
|
|
155
|
-
}
|
|
156
|
-
current = "";
|
|
157
|
-
}
|
|
158
|
-
}
|
|
159
|
-
const trailing = current.trim();
|
|
160
|
-
if (trailing) {
|
|
161
|
-
statements.push(trailing.endsWith(";") ? trailing : `${trailing};`);
|
|
162
|
-
}
|
|
163
|
-
return statements.map((statement) => statement.endsWith(";") ? statement : `${statement};`);
|
|
164
|
-
}
|
|
165
|
-
async function runSqlStatements(statements, run) {
|
|
166
|
-
for (const statement of statements) {
|
|
167
|
-
await run(statement);
|
|
168
|
-
}
|
|
169
|
-
}
|
|
170
67
|
function inferMongooseModels(schema, connection) {
|
|
171
68
|
const manifest = (0, import_orm.createManifest)(schema);
|
|
172
69
|
const registeredModels = Object.values(connection.models ?? {});
|
|
@@ -185,33 +82,6 @@ function inferMongooseModels(schema, connection) {
|
|
|
185
82
|
}
|
|
186
83
|
return models;
|
|
187
84
|
}
|
|
188
|
-
function resolvePrismaDatabaseUrl(runtime, options) {
|
|
189
|
-
if (options.prisma?.databaseUrl) {
|
|
190
|
-
return options.prisma.databaseUrl;
|
|
191
|
-
}
|
|
192
|
-
const client = runtime.client;
|
|
193
|
-
const engineConfig = isRecord(client._engineConfig) ? client._engineConfig : void 0;
|
|
194
|
-
const overrideDatasources = isRecord(engineConfig?.overrideDatasources) ? engineConfig.overrideDatasources : void 0;
|
|
195
|
-
for (const datasource of Object.values(overrideDatasources ?? {})) {
|
|
196
|
-
if (!isRecord(datasource)) continue;
|
|
197
|
-
if (typeof datasource.url === "string" && datasource.url.length > 0) {
|
|
198
|
-
return datasource.url;
|
|
199
|
-
}
|
|
200
|
-
}
|
|
201
|
-
const inlineDatasources = isRecord(engineConfig?.inlineDatasources) ? engineConfig.inlineDatasources : void 0;
|
|
202
|
-
for (const datasource of Object.values(inlineDatasources ?? {})) {
|
|
203
|
-
if (!isRecord(datasource) || !isRecord(datasource.url)) continue;
|
|
204
|
-
if (typeof datasource.url.value === "string" && datasource.url.value.length > 0) {
|
|
205
|
-
return datasource.url.value;
|
|
206
|
-
}
|
|
207
|
-
if (typeof datasource.url.fromEnvVar === "string" && process.env[datasource.url.fromEnvVar]?.length) {
|
|
208
|
-
return process.env[datasource.url.fromEnvVar];
|
|
209
|
-
}
|
|
210
|
-
}
|
|
211
|
-
throw new Error(
|
|
212
|
-
'pushSchema() for a Prisma runtime requires a resolvable database URL. Pass "prisma.databaseUrl" when the Prisma client does not expose one.'
|
|
213
|
-
);
|
|
214
|
-
}
|
|
215
85
|
function resolveMongoDb(runtime, options) {
|
|
216
86
|
if (options.mongo?.db) {
|
|
217
87
|
return options.mongo.db;
|
|
@@ -252,227 +122,59 @@ function resolveMongoSessionSource(runtime, db, options) {
|
|
|
252
122
|
startSession: void 0
|
|
253
123
|
};
|
|
254
124
|
}
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
'pushSchema() for a Drizzle runtime requires a Drizzle database with a "$client" property or an explicit "drizzle.client" option.'
|
|
260
|
-
);
|
|
261
|
-
}
|
|
262
|
-
return runtimeClient;
|
|
263
|
-
}
|
|
264
|
-
function asMongoSchemaTarget(value) {
|
|
265
|
-
if (hasFunction(value, "collection")) {
|
|
266
|
-
return value;
|
|
267
|
-
}
|
|
268
|
-
throw new Error("Unsupported Mongo schema target. Expected a MongoDB Db or Mongoose connection.");
|
|
269
|
-
}
|
|
270
|
-
function isMongoNamespaceExistsError(error) {
|
|
271
|
-
if (isRecord(error) && error.code === 48) {
|
|
272
|
-
return true;
|
|
273
|
-
}
|
|
274
|
-
const message = error instanceof Error ? error.message : String(error);
|
|
275
|
-
return /already exists|NamespaceExists/i.test(message);
|
|
276
|
-
}
|
|
277
|
-
function isMongoEquivalentIndexError(error) {
|
|
278
|
-
const message = error instanceof Error ? error.message : String(error);
|
|
279
|
-
return /Index already exists with a different name/i.test(message);
|
|
280
|
-
}
|
|
281
|
-
function mongoIndexSpecsForModel(model) {
|
|
282
|
-
const deduped = /* @__PURE__ */ new Map();
|
|
283
|
-
for (const field of Object.values(model.fields)) {
|
|
284
|
-
if (field.kind === "id") {
|
|
285
|
-
if (field.column !== "_id") {
|
|
286
|
-
const keys2 = { [field.column]: 1 };
|
|
287
|
-
deduped.set(JSON.stringify({ keys: keys2, unique: true }), {
|
|
288
|
-
keys: keys2,
|
|
289
|
-
unique: true,
|
|
290
|
-
name: `${model.table}_${field.column}_pk_unique`
|
|
291
|
-
});
|
|
292
|
-
}
|
|
293
|
-
continue;
|
|
294
|
-
}
|
|
295
|
-
if (!field.unique) continue;
|
|
296
|
-
const keys = { [field.column]: 1 };
|
|
297
|
-
deduped.set(JSON.stringify({ keys, unique: true }), {
|
|
298
|
-
keys,
|
|
299
|
-
unique: true,
|
|
300
|
-
name: `${model.table}_${field.column}_unique`
|
|
301
|
-
});
|
|
302
|
-
}
|
|
303
|
-
for (const constraint of [...model.constraints.unique, ...model.constraints.indexes]) {
|
|
304
|
-
const keys = Object.fromEntries(constraint.columns.map((column) => [column, 1]));
|
|
305
|
-
deduped.set(JSON.stringify({ keys, unique: constraint.unique }), {
|
|
306
|
-
keys,
|
|
307
|
-
unique: constraint.unique,
|
|
308
|
-
name: constraint.name
|
|
309
|
-
});
|
|
310
|
-
}
|
|
311
|
-
return [...deduped.values()];
|
|
312
|
-
}
|
|
313
|
-
async function ensureMongoCollectionsAndIndexes(schema, target) {
|
|
314
|
-
const manifest = (0, import_orm.createManifest)(schema);
|
|
315
|
-
for (const model of Object.values(manifest.models)) {
|
|
316
|
-
if (typeof target.createCollection === "function") {
|
|
317
|
-
try {
|
|
318
|
-
await target.createCollection(model.table);
|
|
319
|
-
} catch (error) {
|
|
320
|
-
if (!isMongoNamespaceExistsError(error)) {
|
|
321
|
-
throw error;
|
|
322
|
-
}
|
|
323
|
-
}
|
|
324
|
-
}
|
|
325
|
-
const collection = target.collection(model.table);
|
|
326
|
-
for (const index of mongoIndexSpecsForModel(model)) {
|
|
327
|
-
try {
|
|
328
|
-
await collection.createIndex(index.keys, {
|
|
329
|
-
name: index.name,
|
|
330
|
-
unique: index.unique
|
|
331
|
-
});
|
|
332
|
-
} catch (error) {
|
|
333
|
-
if (!isMongoEquivalentIndexError(error)) {
|
|
334
|
-
throw error;
|
|
335
|
-
}
|
|
336
|
-
}
|
|
337
|
-
}
|
|
338
|
-
}
|
|
339
|
-
}
|
|
340
|
-
async function applySqlSchemaToClient(client, dialect, sql) {
|
|
341
|
-
if (dialect === "sqlite" && hasFunction(client, "exec")) {
|
|
342
|
-
await client.exec(sql);
|
|
343
|
-
return;
|
|
344
|
-
}
|
|
345
|
-
const statements = splitSqlStatements(sql);
|
|
346
|
-
if (hasFunction(client, "query")) {
|
|
347
|
-
await runSqlStatements(statements, (statement) => client.query(statement));
|
|
348
|
-
return;
|
|
349
|
-
}
|
|
350
|
-
if (hasFunction(client, "execute")) {
|
|
351
|
-
await runSqlStatements(
|
|
352
|
-
statements,
|
|
353
|
-
(statement) => client.execute(statement)
|
|
354
|
-
);
|
|
355
|
-
return;
|
|
356
|
-
}
|
|
357
|
-
if (hasFunction(client, "executeQuery")) {
|
|
358
|
-
await runSqlStatements(
|
|
359
|
-
statements,
|
|
360
|
-
(statement) => client.executeQuery({
|
|
361
|
-
sql: statement,
|
|
362
|
-
parameters: [],
|
|
363
|
-
query: {
|
|
364
|
-
kind: "RawNode",
|
|
365
|
-
sqlFragments: [statement],
|
|
366
|
-
parameters: []
|
|
367
|
-
},
|
|
368
|
-
queryId: {}
|
|
369
|
-
})
|
|
370
|
-
);
|
|
371
|
-
return;
|
|
372
|
-
}
|
|
373
|
-
throw new Error(
|
|
374
|
-
`Could not apply generated ${dialect} schema statements to the provided runtime client.`
|
|
375
|
-
);
|
|
376
|
-
}
|
|
377
|
-
async function runPrismaDbPush(schemaPath, databaseUrl, packageRoot) {
|
|
378
|
-
await execFileAsync(
|
|
379
|
-
"pnpm",
|
|
380
|
-
["exec", "prisma", "db", "push", "--schema", schemaPath, "--skip-generate"],
|
|
381
|
-
{
|
|
382
|
-
cwd: packageRoot,
|
|
383
|
-
env: {
|
|
384
|
-
...process.env,
|
|
385
|
-
DATABASE_URL: databaseUrl
|
|
386
|
-
}
|
|
387
|
-
}
|
|
388
|
-
);
|
|
389
|
-
}
|
|
390
|
-
async function pushPrismaSchema(schema, runtime, options) {
|
|
391
|
-
const dialect = resolveDialect(runtime, options.dialect);
|
|
392
|
-
const provider = prismaProviderForDialect(dialect);
|
|
393
|
-
const databaseUrl = resolvePrismaDatabaseUrl(runtime, options);
|
|
394
|
-
const packageRoot = options.prisma?.packageRoot ?? defaultPrismaPackageRoot;
|
|
395
|
-
const tempDir = await (0, import_promises.mkdtemp)(import_node_path.default.join((0, import_node_os.tmpdir)(), "farm-orm-runtime-prisma-"));
|
|
396
|
-
const schemaPath = import_node_path.default.join(tempDir, "schema.prisma");
|
|
397
|
-
try {
|
|
398
|
-
await (0, import_promises.writeFile)(schemaPath, renderRuntimePrismaSchema(schema, provider), "utf8");
|
|
399
|
-
await runPrismaDbPush(schemaPath, databaseUrl, packageRoot);
|
|
400
|
-
} finally {
|
|
401
|
-
await (0, import_promises.rm)(tempDir, { recursive: true, force: true });
|
|
402
|
-
}
|
|
403
|
-
}
|
|
404
|
-
async function applySchemaInternal(options) {
|
|
405
|
-
const runtime = resolveRuntime(options);
|
|
406
|
-
if (runtime.kind === "prisma") {
|
|
407
|
-
await pushPrismaSchema(options.schema, runtime, options);
|
|
408
|
-
return;
|
|
409
|
-
}
|
|
410
|
-
if (runtime.kind === "mongo") {
|
|
411
|
-
const db = resolveMongoDb(runtime, options);
|
|
412
|
-
await ensureMongoCollectionsAndIndexes(options.schema, asMongoSchemaTarget(db));
|
|
413
|
-
return;
|
|
414
|
-
}
|
|
415
|
-
if (runtime.kind === "mongoose") {
|
|
416
|
-
const connection = runtime.client;
|
|
417
|
-
const db = isRecord(connection.db) ? connection.db : connection;
|
|
418
|
-
await ensureMongoCollectionsAndIndexes(options.schema, asMongoSchemaTarget(db));
|
|
419
|
-
return;
|
|
420
|
-
}
|
|
421
|
-
const dialect = resolveDialect(runtime, options.dialect);
|
|
422
|
-
const sql = (0, import_orm.renderSafeSql)(options.schema, { dialect });
|
|
423
|
-
if (runtime.kind === "sql") {
|
|
424
|
-
await applySqlSchemaToClient(runtime.client, dialect, sql);
|
|
425
|
-
return;
|
|
426
|
-
}
|
|
427
|
-
if (runtime.kind === "drizzle") {
|
|
428
|
-
await applySqlSchemaToClient(resolveDrizzleRuntimeClient(runtime, options), dialect, sql);
|
|
429
|
-
return;
|
|
430
|
-
}
|
|
431
|
-
await applySqlSchemaToClient(runtime.client, dialect, sql);
|
|
432
|
-
}
|
|
433
|
-
function createSqlDriverFromRuntime(runtime, dialect) {
|
|
125
|
+
|
|
126
|
+
// src/index.ts
|
|
127
|
+
async function createSqlDriverFromRuntime(runtime, dialect) {
|
|
128
|
+
const { createMysqlDriver, createPgClientDriver, createPgPoolDriver, createSqliteDriver } = await import("@farming-labs/orm-sql");
|
|
434
129
|
if (dialect === "sqlite") {
|
|
435
|
-
return
|
|
130
|
+
return createSqliteDriver(runtime.client);
|
|
436
131
|
}
|
|
437
132
|
if (dialect === "postgres") {
|
|
438
133
|
if (runtime.source === "pool") {
|
|
439
|
-
return
|
|
134
|
+
return createPgPoolDriver(runtime.client);
|
|
440
135
|
}
|
|
441
|
-
return
|
|
136
|
+
return createPgClientDriver(runtime.client);
|
|
442
137
|
}
|
|
443
138
|
if (runtime.source === "pool") {
|
|
444
|
-
return
|
|
139
|
+
return createMysqlDriver(runtime.client);
|
|
445
140
|
}
|
|
446
|
-
return
|
|
141
|
+
return createMysqlDriver(runtime.client);
|
|
447
142
|
}
|
|
448
|
-
function createDriverFromRuntime(options) {
|
|
143
|
+
async function createDriverFromRuntime(options) {
|
|
449
144
|
const runtime = resolveRuntime(options);
|
|
450
145
|
switch (runtime.kind) {
|
|
451
|
-
case "prisma":
|
|
452
|
-
|
|
146
|
+
case "prisma": {
|
|
147
|
+
const { createPrismaDriver } = await import("@farming-labs/orm-prisma");
|
|
148
|
+
return createPrismaDriver({
|
|
453
149
|
client: runtime.client,
|
|
454
150
|
models: options.prisma?.models
|
|
455
151
|
});
|
|
456
|
-
|
|
457
|
-
|
|
152
|
+
}
|
|
153
|
+
case "drizzle": {
|
|
154
|
+
const { createDrizzleDriver } = await import("@farming-labs/orm-drizzle");
|
|
155
|
+
return createDrizzleDriver({
|
|
458
156
|
db: runtime.client,
|
|
459
157
|
client: options.drizzle?.client,
|
|
460
158
|
dialect: resolveDialect(runtime, options.dialect)
|
|
461
159
|
});
|
|
462
|
-
|
|
463
|
-
|
|
160
|
+
}
|
|
161
|
+
case "kysely": {
|
|
162
|
+
const { createKyselyDriver } = await import("@farming-labs/orm-kysely");
|
|
163
|
+
return createKyselyDriver({
|
|
464
164
|
db: runtime.client,
|
|
465
165
|
dialect: resolveDialect(runtime, options.dialect)
|
|
466
166
|
});
|
|
167
|
+
}
|
|
467
168
|
case "sql":
|
|
468
|
-
return createSqlDriverFromRuntime(
|
|
169
|
+
return await createSqlDriverFromRuntime(
|
|
469
170
|
runtime,
|
|
470
171
|
resolveDialect(runtime, options.dialect)
|
|
471
172
|
);
|
|
472
173
|
case "mongo": {
|
|
174
|
+
const { createMongoDriver } = await import("@farming-labs/orm-mongo");
|
|
473
175
|
const db = resolveMongoDb(runtime, options);
|
|
474
176
|
const sessionSource = resolveMongoSessionSource(runtime, db, options);
|
|
475
|
-
return
|
|
177
|
+
return createMongoDriver({
|
|
476
178
|
collections: options.mongo?.collections,
|
|
477
179
|
db,
|
|
478
180
|
client: sessionSource.client,
|
|
@@ -481,8 +183,9 @@ function createDriverFromRuntime(options) {
|
|
|
481
183
|
});
|
|
482
184
|
}
|
|
483
185
|
case "mongoose": {
|
|
186
|
+
const { createMongooseDriver } = await import("@farming-labs/orm-mongoose");
|
|
484
187
|
const connection = runtime.client;
|
|
485
|
-
return
|
|
188
|
+
return createMongooseDriver({
|
|
486
189
|
models: options.mongoose?.models ?? inferMongooseModels(options.schema, connection),
|
|
487
190
|
connection,
|
|
488
191
|
startSession: options.mongoose?.startSession,
|
|
@@ -491,29 +194,16 @@ function createDriverFromRuntime(options) {
|
|
|
491
194
|
}
|
|
492
195
|
}
|
|
493
196
|
}
|
|
494
|
-
function createOrmFromRuntime(options) {
|
|
495
|
-
const driver = createDriverFromRuntime(options);
|
|
496
|
-
return (0,
|
|
197
|
+
async function createOrmFromRuntime(options) {
|
|
198
|
+
const driver = await createDriverFromRuntime(options);
|
|
199
|
+
return (0, import_orm2.createOrm)({
|
|
497
200
|
schema: options.schema,
|
|
498
201
|
driver
|
|
499
202
|
});
|
|
500
203
|
}
|
|
501
|
-
async function applySchema(options) {
|
|
502
|
-
await applySchemaInternal(options);
|
|
503
|
-
}
|
|
504
|
-
async function pushSchema(options) {
|
|
505
|
-
await applySchemaInternal(options);
|
|
506
|
-
}
|
|
507
|
-
async function bootstrapDatabase(options) {
|
|
508
|
-
await pushSchema(options);
|
|
509
|
-
return createOrmFromRuntime(options);
|
|
510
|
-
}
|
|
511
204
|
// Annotate the CommonJS export names for ESM import in node:
|
|
512
205
|
0 && (module.exports = {
|
|
513
|
-
applySchema,
|
|
514
|
-
bootstrapDatabase,
|
|
515
206
|
createDriverFromRuntime,
|
|
516
|
-
createOrmFromRuntime
|
|
517
|
-
pushSchema
|
|
207
|
+
createOrmFromRuntime
|
|
518
208
|
});
|
|
519
209
|
//# sourceMappingURL=index.cjs.map
|