@farming-labs/orm-runtime 0.0.19 → 0.0.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/dist/setup.js ADDED
@@ -0,0 +1,333 @@
1
+ import {
2
+ createOrmFromRuntime,
3
+ hasFunction,
4
+ isRecord,
5
+ resolveDialect,
6
+ resolveMongoDb,
7
+ resolveRuntime
8
+ } from "./chunk-336GVTN5.js";
9
+
10
+ // src/setup.ts
11
+ import { execFile } from "child_process";
12
+ import { mkdtemp, rm, writeFile } from "fs/promises";
13
+ import { tmpdir } from "os";
14
+ import path from "path";
15
+ import { promisify } from "util";
16
+ import {
17
+ createManifest,
18
+ renderPrismaSchema,
19
+ renderSafeSql
20
+ } from "@farming-labs/orm";
21
+ var execFileAsync = promisify(execFile);
22
+ var defaultPrismaPackageRoot = process.cwd();
23
+ function prismaProviderForDialect(dialect) {
24
+ switch (dialect) {
25
+ case "sqlite":
26
+ return "sqlite";
27
+ case "postgres":
28
+ return "postgresql";
29
+ case "mysql":
30
+ return "mysql";
31
+ }
32
+ }
33
+ function withDatabaseEnv(rendered) {
34
+ return rendered.replace(/url\s+=\s+.+/, `url = env("DATABASE_URL")`);
35
+ }
36
+ function renderRuntimePrismaSchema(schema, provider) {
37
+ return withDatabaseEnv(renderPrismaSchema(schema, { provider }));
38
+ }
39
+ function splitSqlStatements(sql) {
40
+ const statements = [];
41
+ let current = "";
42
+ let quote = null;
43
+ for (let index = 0; index < sql.length; index += 1) {
44
+ const char = sql[index];
45
+ const next = sql[index + 1];
46
+ current += char;
47
+ if (quote === "'") {
48
+ if (char === "'" && next === "'") {
49
+ current += next;
50
+ index += 1;
51
+ continue;
52
+ }
53
+ if (char === "\\" && next === "'") {
54
+ current += next;
55
+ index += 1;
56
+ continue;
57
+ }
58
+ if (char === "'") {
59
+ quote = null;
60
+ }
61
+ continue;
62
+ }
63
+ if (quote === '"') {
64
+ if (char === '"' && next === '"') {
65
+ current += next;
66
+ index += 1;
67
+ continue;
68
+ }
69
+ if (char === '"') {
70
+ quote = null;
71
+ }
72
+ continue;
73
+ }
74
+ if (quote === "`") {
75
+ if (char === "`" && next === "`") {
76
+ current += next;
77
+ index += 1;
78
+ continue;
79
+ }
80
+ if (char === "\\" && next === "`") {
81
+ current += next;
82
+ index += 1;
83
+ continue;
84
+ }
85
+ if (char === "`") {
86
+ quote = null;
87
+ }
88
+ continue;
89
+ }
90
+ if (char === "'" || char === '"' || char === "`") {
91
+ quote = char;
92
+ continue;
93
+ }
94
+ if (char === ";") {
95
+ const statement = current.trim();
96
+ if (statement) {
97
+ statements.push(statement);
98
+ }
99
+ current = "";
100
+ }
101
+ }
102
+ const trailing = current.trim();
103
+ if (trailing) {
104
+ statements.push(trailing.endsWith(";") ? trailing : `${trailing};`);
105
+ }
106
+ return statements.map((statement) => statement.endsWith(";") ? statement : `${statement};`);
107
+ }
108
+ async function runSqlStatements(statements, run) {
109
+ for (const statement of statements) {
110
+ await run(statement);
111
+ }
112
+ }
113
+ function resolvePrismaDatabaseUrl(runtime, options) {
114
+ if (options.prisma?.databaseUrl) {
115
+ return options.prisma.databaseUrl;
116
+ }
117
+ const client = runtime.client;
118
+ const engineConfig = isRecord(client._engineConfig) ? client._engineConfig : void 0;
119
+ const overrideDatasources = isRecord(engineConfig?.overrideDatasources) ? engineConfig.overrideDatasources : void 0;
120
+ for (const datasource of Object.values(overrideDatasources ?? {})) {
121
+ if (!isRecord(datasource)) continue;
122
+ if (typeof datasource.url === "string" && datasource.url.length > 0) {
123
+ return datasource.url;
124
+ }
125
+ }
126
+ const inlineDatasources = isRecord(engineConfig?.inlineDatasources) ? engineConfig.inlineDatasources : void 0;
127
+ for (const datasource of Object.values(inlineDatasources ?? {})) {
128
+ if (!isRecord(datasource) || !isRecord(datasource.url)) continue;
129
+ if (typeof datasource.url.value === "string" && datasource.url.value.length > 0) {
130
+ return datasource.url.value;
131
+ }
132
+ if (typeof datasource.url.fromEnvVar === "string" && process.env[datasource.url.fromEnvVar]?.length) {
133
+ return process.env[datasource.url.fromEnvVar];
134
+ }
135
+ }
136
+ throw new Error(
137
+ 'pushSchema() for a Prisma runtime requires a resolvable database URL. Pass "prisma.databaseUrl" when the Prisma client does not expose one.'
138
+ );
139
+ }
140
+ function resolveDrizzleRuntimeClient(runtime, options) {
141
+ const runtimeClient = options.drizzle?.client ?? runtime.client?.$client ?? void 0;
142
+ if (!runtimeClient) {
143
+ throw new Error(
144
+ 'pushSchema() for a Drizzle runtime requires a Drizzle database with a "$client" property or an explicit "drizzle.client" option.'
145
+ );
146
+ }
147
+ return runtimeClient;
148
+ }
149
+ function asMongoSchemaTarget(value) {
150
+ if (hasFunction(value, "collection")) {
151
+ return value;
152
+ }
153
+ throw new Error("Unsupported Mongo schema target. Expected a MongoDB Db or Mongoose connection.");
154
+ }
155
+ function isMongoNamespaceExistsError(error) {
156
+ if (isRecord(error) && error.code === 48) {
157
+ return true;
158
+ }
159
+ const message = error instanceof Error ? error.message : String(error);
160
+ return /already exists|NamespaceExists/i.test(message);
161
+ }
162
+ function isMongoEquivalentIndexError(error) {
163
+ const message = error instanceof Error ? error.message : String(error);
164
+ return /Index already exists with a different name/i.test(message);
165
+ }
166
+ function mongoIndexSpecsForModel(model) {
167
+ const deduped = /* @__PURE__ */ new Map();
168
+ for (const field of Object.values(model.fields)) {
169
+ if (field.kind === "id") {
170
+ if (field.column !== "_id") {
171
+ const keys2 = { [field.column]: 1 };
172
+ deduped.set(JSON.stringify({ keys: keys2, unique: true }), {
173
+ keys: keys2,
174
+ unique: true,
175
+ name: `${model.table}_${field.column}_pk_unique`
176
+ });
177
+ }
178
+ continue;
179
+ }
180
+ if (!field.unique) continue;
181
+ const keys = { [field.column]: 1 };
182
+ deduped.set(JSON.stringify({ keys, unique: true }), {
183
+ keys,
184
+ unique: true,
185
+ name: `${model.table}_${field.column}_unique`
186
+ });
187
+ }
188
+ for (const constraint of [...model.constraints.unique, ...model.constraints.indexes]) {
189
+ const keys = Object.fromEntries(constraint.columns.map((column) => [column, 1]));
190
+ deduped.set(JSON.stringify({ keys, unique: constraint.unique }), {
191
+ keys,
192
+ unique: constraint.unique,
193
+ name: constraint.name
194
+ });
195
+ }
196
+ return [...deduped.values()];
197
+ }
198
+ async function ensureMongoCollectionsAndIndexes(schema, target) {
199
+ const manifest = createManifest(schema);
200
+ for (const model of Object.values(manifest.models)) {
201
+ if (typeof target.createCollection === "function") {
202
+ try {
203
+ await target.createCollection(model.table);
204
+ } catch (error) {
205
+ if (!isMongoNamespaceExistsError(error)) {
206
+ throw error;
207
+ }
208
+ }
209
+ }
210
+ const collection = target.collection(model.table);
211
+ for (const index of mongoIndexSpecsForModel(model)) {
212
+ try {
213
+ await collection.createIndex(index.keys, {
214
+ name: index.name,
215
+ unique: index.unique
216
+ });
217
+ } catch (error) {
218
+ if (!isMongoEquivalentIndexError(error)) {
219
+ throw error;
220
+ }
221
+ }
222
+ }
223
+ }
224
+ }
225
+ async function applySqlSchemaToClient(client, dialect, sql) {
226
+ if (dialect === "sqlite" && hasFunction(client, "exec")) {
227
+ await client.exec(sql);
228
+ return;
229
+ }
230
+ const statements = splitSqlStatements(sql);
231
+ if (hasFunction(client, "query")) {
232
+ await runSqlStatements(statements, (statement) => client.query(statement));
233
+ return;
234
+ }
235
+ if (hasFunction(client, "execute")) {
236
+ await runSqlStatements(
237
+ statements,
238
+ (statement) => client.execute(statement)
239
+ );
240
+ return;
241
+ }
242
+ if (hasFunction(client, "executeQuery")) {
243
+ await runSqlStatements(
244
+ statements,
245
+ (statement) => client.executeQuery({
246
+ sql: statement,
247
+ parameters: [],
248
+ query: {
249
+ kind: "RawNode",
250
+ sqlFragments: [statement],
251
+ parameters: []
252
+ },
253
+ queryId: {}
254
+ })
255
+ );
256
+ return;
257
+ }
258
+ throw new Error(
259
+ `Could not apply generated ${dialect} schema statements to the provided runtime client.`
260
+ );
261
+ }
262
+ async function runPrismaDbPush(schemaPath, databaseUrl, packageRoot) {
263
+ await execFileAsync(
264
+ "pnpm",
265
+ ["exec", "prisma", "db", "push", "--schema", schemaPath, "--skip-generate"],
266
+ {
267
+ cwd: packageRoot,
268
+ env: {
269
+ ...process.env,
270
+ DATABASE_URL: databaseUrl
271
+ }
272
+ }
273
+ );
274
+ }
275
+ async function pushPrismaSchema(schema, runtime, options) {
276
+ const dialect = resolveDialect(runtime, options.dialect);
277
+ const provider = prismaProviderForDialect(dialect);
278
+ const databaseUrl = resolvePrismaDatabaseUrl(runtime, options);
279
+ const packageRoot = options.prisma?.packageRoot ?? defaultPrismaPackageRoot;
280
+ const tempDir = await mkdtemp(path.join(tmpdir(), "farm-orm-runtime-prisma-"));
281
+ const schemaPath = path.join(tempDir, "schema.prisma");
282
+ try {
283
+ await writeFile(schemaPath, renderRuntimePrismaSchema(schema, provider), "utf8");
284
+ await runPrismaDbPush(schemaPath, databaseUrl, packageRoot);
285
+ } finally {
286
+ await rm(tempDir, { recursive: true, force: true });
287
+ }
288
+ }
289
+ async function applySchemaInternal(options) {
290
+ const runtime = resolveRuntime(options);
291
+ if (runtime.kind === "prisma") {
292
+ await pushPrismaSchema(options.schema, runtime, options);
293
+ return;
294
+ }
295
+ if (runtime.kind === "mongo") {
296
+ const db = resolveMongoDb(runtime, options);
297
+ await ensureMongoCollectionsAndIndexes(options.schema, asMongoSchemaTarget(db));
298
+ return;
299
+ }
300
+ if (runtime.kind === "mongoose") {
301
+ const connection = runtime.client;
302
+ const db = isRecord(connection.db) ? connection.db : connection;
303
+ await ensureMongoCollectionsAndIndexes(options.schema, asMongoSchemaTarget(db));
304
+ return;
305
+ }
306
+ const dialect = resolveDialect(runtime, options.dialect);
307
+ const sql = renderSafeSql(options.schema, { dialect });
308
+ if (runtime.kind === "sql") {
309
+ await applySqlSchemaToClient(runtime.client, dialect, sql);
310
+ return;
311
+ }
312
+ if (runtime.kind === "drizzle") {
313
+ await applySqlSchemaToClient(resolveDrizzleRuntimeClient(runtime, options), dialect, sql);
314
+ return;
315
+ }
316
+ await applySqlSchemaToClient(runtime.client, dialect, sql);
317
+ }
318
+ async function applySchema(options) {
319
+ await applySchemaInternal(options);
320
+ }
321
+ async function pushSchema(options) {
322
+ await applySchemaInternal(options);
323
+ }
324
+ async function bootstrapDatabase(options) {
325
+ await pushSchema(options);
326
+ return createOrmFromRuntime(options);
327
+ }
328
+ export {
329
+ applySchema,
330
+ bootstrapDatabase,
331
+ pushSchema
332
+ };
333
+ //# sourceMappingURL=setup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/setup.ts"],"sourcesContent":["import { execFile } from \"node:child_process\";\nimport { mkdtemp, rm, writeFile } from \"node:fs/promises\";\nimport { tmpdir } from \"node:os\";\nimport path from \"node:path\";\nimport { promisify } from \"node:util\";\nimport {\n createManifest,\n renderPrismaSchema,\n renderSafeSql,\n type SchemaDefinition,\n} from \"@farming-labs/orm\";\nimport type { DrizzleDriverConfig } from \"@farming-labs/orm-drizzle\";\nimport type { MongoDbLike } from \"@farming-labs/orm-mongo\";\nimport { createOrmFromRuntime } from \"./index\";\nimport {\n hasFunction,\n isRecord,\n resolveDialect,\n resolveMongoDb,\n resolveRuntime,\n type AutoDialect,\n type AutoDriverHandle,\n type CreateDriverFromRuntimeOptions,\n type CreateOrmFromRuntimeOptions,\n type MongooseConnectionLike,\n} from \"./shared\";\n\ntype PrismaProvider = \"sqlite\" | \"postgresql\" | \"mysql\";\n\nexport type PushSchemaOptions<\n TSchema extends SchemaDefinition<any>,\n TClient = unknown,\n> = CreateDriverFromRuntimeOptions<TSchema, TClient>;\n\nexport type ApplySchemaOptions<\n TSchema extends SchemaDefinition<any>,\n TClient = unknown,\n> = CreateDriverFromRuntimeOptions<TSchema, TClient>;\n\nexport type BootstrapDatabaseOptions<\n TSchema extends SchemaDefinition<any>,\n TClient = unknown,\n> = CreateOrmFromRuntimeOptions<TSchema, TClient>;\n\ntype SqlQueryClient = {\n query(sql: string, params?: readonly unknown[]): Promise<unknown> | unknown;\n};\n\ntype SqlExecuteClient = {\n execute(sql: string, params?: readonly unknown[]): Promise<unknown> | unknown;\n};\n\ntype SqliteExecClient = {\n exec(sql: string): Promise<unknown> | unknown;\n};\n\ntype KyselyExecuteClient = {\n executeQuery(query: {\n sql: string;\n parameters: readonly unknown[];\n query: {\n kind: \"RawNode\";\n sqlFragments: readonly string[];\n parameters: readonly unknown[];\n };\n queryId: object;\n }): Promise<unknown>;\n};\n\ntype MongoIndexCollectionLike = {\n createIndex(\n keys: Record<string, 1 | -1>,\n options?: { unique?: boolean; name?: string },\n ): Promise<unknown>;\n};\n\ntype MongoSchemaTargetLike = {\n collection(name: string): MongoIndexCollectionLike;\n createCollection?(name: string): Promise<unknown>;\n};\n\nconst execFileAsync = promisify(execFile);\nconst defaultPrismaPackageRoot = process.cwd();\n\nfunction prismaProviderForDialect(dialect: AutoDialect): PrismaProvider {\n switch (dialect) {\n case \"sqlite\":\n return \"sqlite\";\n case \"postgres\":\n return \"postgresql\";\n case \"mysql\":\n return \"mysql\";\n }\n}\n\nfunction withDatabaseEnv(rendered: string) {\n return rendered.replace(/url\\s+=\\s+.+/, `url = env(\"DATABASE_URL\")`);\n}\n\nfunction renderRuntimePrismaSchema(schema: SchemaDefinition<any>, provider: PrismaProvider) {\n return withDatabaseEnv(renderPrismaSchema(schema, { provider }));\n}\n\nfunction splitSqlStatements(sql: string) {\n const statements: string[] = [];\n let current = \"\";\n let quote: \"'\" | '\"' | \"`\" | null = null;\n\n for (let index = 0; index < sql.length; index += 1) {\n const char = sql[index]!;\n const next = sql[index + 1];\n\n current += char;\n\n if (quote === \"'\") {\n if (char === \"'\" && next === \"'\") {\n current += next;\n index += 1;\n continue;\n }\n\n if (char === \"\\\\\" && next === \"'\") {\n current += next;\n index += 1;\n continue;\n }\n\n if (char === \"'\") {\n quote = null;\n }\n\n continue;\n }\n\n if (quote === '\"') {\n if (char === '\"' && next === '\"') {\n current += next;\n index += 1;\n continue;\n }\n\n if (char === '\"') {\n quote = null;\n }\n\n continue;\n }\n\n if (quote === \"`\") {\n if (char === \"`\" && next === \"`\") {\n current += next;\n index += 1;\n continue;\n }\n\n if (char === \"\\\\\" && next === \"`\") {\n current += next;\n index += 1;\n continue;\n }\n\n if (char === \"`\") {\n quote = null;\n }\n\n continue;\n }\n\n if (char === \"'\" || char === '\"' || char === \"`\") {\n quote = char;\n continue;\n }\n\n if (char === \";\") {\n const statement = current.trim();\n if (statement) {\n statements.push(statement);\n }\n current = \"\";\n }\n }\n\n const trailing = current.trim();\n if (trailing) {\n statements.push(trailing.endsWith(\";\") ? trailing : `${trailing};`);\n }\n\n return statements.map((statement) => (statement.endsWith(\";\") ? statement : `${statement};`));\n}\n\nasync function runSqlStatements(\n statements: readonly string[],\n run: (sql: string) => Promise<unknown> | unknown,\n) {\n for (const statement of statements) {\n await run(statement);\n }\n}\n\nfunction resolvePrismaDatabaseUrl(\n runtime: ReturnType<typeof resolveRuntime>,\n options: CreateDriverFromRuntimeOptions<any>,\n): string {\n if (options.prisma?.databaseUrl) {\n return options.prisma.databaseUrl;\n }\n\n const client = runtime.client as Record<string, unknown>;\n const engineConfig = isRecord(client._engineConfig) ? client._engineConfig : undefined;\n\n const overrideDatasources = isRecord(engineConfig?.overrideDatasources)\n ? engineConfig.overrideDatasources\n : undefined;\n for (const datasource of Object.values(overrideDatasources ?? {})) {\n if (!isRecord(datasource)) continue;\n if (typeof datasource.url === \"string\" && datasource.url.length > 0) {\n return datasource.url;\n }\n }\n\n const inlineDatasources = isRecord(engineConfig?.inlineDatasources)\n ? engineConfig.inlineDatasources\n : undefined;\n for (const datasource of Object.values(inlineDatasources ?? {})) {\n if (!isRecord(datasource) || !isRecord(datasource.url)) continue;\n if (typeof datasource.url.value === \"string\" && datasource.url.value.length > 0) {\n return datasource.url.value;\n }\n if (\n typeof datasource.url.fromEnvVar === \"string\" &&\n process.env[datasource.url.fromEnvVar]?.length\n ) {\n return process.env[datasource.url.fromEnvVar]!;\n }\n }\n\n throw new Error(\n 'pushSchema() for a Prisma runtime requires a resolvable database URL. Pass \"prisma.databaseUrl\" when the Prisma client does not expose one.',\n );\n}\n\nfunction resolveDrizzleRuntimeClient(\n runtime: ReturnType<typeof resolveRuntime>,\n options: CreateDriverFromRuntimeOptions<any>,\n) {\n const runtimeClient =\n options.drizzle?.client ??\n (runtime.client as DrizzleDriverConfig<any>[\"db\"] | undefined)?.$client ??\n undefined;\n\n if (!runtimeClient) {\n throw new Error(\n 'pushSchema() for a Drizzle runtime requires a Drizzle database with a \"$client\" property or an explicit \"drizzle.client\" option.',\n );\n }\n\n return runtimeClient;\n}\n\nfunction asMongoSchemaTarget(value: unknown): MongoSchemaTargetLike {\n if (hasFunction(value, \"collection\")) {\n return value as MongoSchemaTargetLike;\n }\n\n throw new Error(\"Unsupported Mongo schema target. Expected a MongoDB Db or Mongoose connection.\");\n}\n\nfunction isMongoNamespaceExistsError(error: unknown) {\n if (isRecord(error) && error.code === 48) {\n return true;\n }\n\n const message = error instanceof Error ? error.message : String(error);\n return /already exists|NamespaceExists/i.test(message);\n}\n\nfunction isMongoEquivalentIndexError(error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n return /Index already exists with a different name/i.test(message);\n}\n\nfunction mongoIndexSpecsForModel(model: ReturnType<typeof createManifest>[\"models\"][string]) {\n const deduped = new Map<string, { keys: Record<string, 1>; unique: boolean; name: string }>();\n\n for (const field of Object.values(model.fields)) {\n if (field.kind === \"id\") {\n if (field.column !== \"_id\") {\n const keys = { [field.column]: 1 } satisfies Record<string, 1>;\n deduped.set(JSON.stringify({ keys, unique: true }), {\n keys,\n unique: true,\n name: `${model.table}_${field.column}_pk_unique`,\n });\n }\n continue;\n }\n\n if (!field.unique) continue;\n const keys = { [field.column]: 1 } satisfies Record<string, 1>;\n deduped.set(JSON.stringify({ keys, unique: true }), {\n keys,\n unique: true,\n name: `${model.table}_${field.column}_unique`,\n });\n }\n\n for (const constraint of [...model.constraints.unique, ...model.constraints.indexes]) {\n const keys = Object.fromEntries(constraint.columns.map((column) => [column, 1])) as Record<\n string,\n 1\n >;\n deduped.set(JSON.stringify({ keys, unique: constraint.unique }), {\n keys,\n unique: constraint.unique,\n name: constraint.name,\n });\n }\n\n return [...deduped.values()];\n}\n\nasync function ensureMongoCollectionsAndIndexes(\n schema: SchemaDefinition<any>,\n target: MongoSchemaTargetLike,\n) {\n const manifest = createManifest(schema);\n\n for (const model of Object.values(manifest.models)) {\n if (typeof target.createCollection === \"function\") {\n try {\n await target.createCollection(model.table);\n } catch (error) {\n if (!isMongoNamespaceExistsError(error)) {\n throw error;\n }\n }\n }\n\n const collection = target.collection(model.table);\n for (const index of mongoIndexSpecsForModel(model)) {\n try {\n await collection.createIndex(index.keys, {\n name: index.name,\n unique: index.unique,\n });\n } catch (error) {\n if (!isMongoEquivalentIndexError(error)) {\n throw error;\n }\n }\n }\n }\n}\n\nasync function applySqlSchemaToClient(client: unknown, dialect: AutoDialect, sql: string) {\n if (dialect === \"sqlite\" && hasFunction(client, \"exec\")) {\n await (client as SqliteExecClient).exec(sql);\n return;\n }\n\n const statements = splitSqlStatements(sql);\n\n if (hasFunction(client, \"query\")) {\n await runSqlStatements(statements, (statement) => (client as SqlQueryClient).query(statement));\n return;\n }\n\n if (hasFunction(client, \"execute\")) {\n await runSqlStatements(statements, (statement) =>\n (client as SqlExecuteClient).execute(statement),\n );\n return;\n }\n\n if (hasFunction(client, \"executeQuery\")) {\n await runSqlStatements(statements, (statement) =>\n (client as KyselyExecuteClient).executeQuery({\n sql: statement,\n parameters: [],\n query: {\n kind: \"RawNode\",\n sqlFragments: [statement],\n parameters: [],\n },\n queryId: {},\n }),\n );\n return;\n }\n\n throw new Error(\n `Could not apply generated ${dialect} schema statements to the provided runtime client.`,\n );\n}\n\nasync function runPrismaDbPush(schemaPath: string, databaseUrl: string, packageRoot: string) {\n await execFileAsync(\n \"pnpm\",\n [\"exec\", \"prisma\", \"db\", \"push\", \"--schema\", schemaPath, \"--skip-generate\"],\n {\n cwd: packageRoot,\n env: {\n ...process.env,\n DATABASE_URL: databaseUrl,\n },\n },\n );\n}\n\nasync function pushPrismaSchema(\n schema: SchemaDefinition<any>,\n runtime: ReturnType<typeof resolveRuntime>,\n options: CreateDriverFromRuntimeOptions<any>,\n) {\n const dialect = resolveDialect(runtime, options.dialect);\n const provider = prismaProviderForDialect(dialect);\n const databaseUrl = resolvePrismaDatabaseUrl(runtime, options);\n const packageRoot = options.prisma?.packageRoot ?? defaultPrismaPackageRoot;\n const tempDir = await mkdtemp(path.join(tmpdir(), \"farm-orm-runtime-prisma-\"));\n const schemaPath = path.join(tempDir, \"schema.prisma\");\n\n try {\n await writeFile(schemaPath, renderRuntimePrismaSchema(schema, provider), \"utf8\");\n await runPrismaDbPush(schemaPath, databaseUrl, packageRoot);\n } finally {\n await rm(tempDir, { recursive: true, force: true });\n }\n}\n\nasync function applySchemaInternal<TSchema extends SchemaDefinition<any>, TClient = unknown>(\n options: CreateDriverFromRuntimeOptions<TSchema, TClient>,\n) {\n const runtime = resolveRuntime(options);\n\n if (runtime.kind === \"prisma\") {\n await pushPrismaSchema(options.schema, runtime, options);\n return;\n }\n\n if (runtime.kind === \"mongo\") {\n const db = resolveMongoDb(runtime, options);\n await ensureMongoCollectionsAndIndexes(options.schema, asMongoSchemaTarget(db));\n return;\n }\n\n if (runtime.kind === \"mongoose\") {\n const connection = runtime.client as Record<string, unknown>;\n const db = isRecord(connection.db) ? connection.db : connection;\n await ensureMongoCollectionsAndIndexes(options.schema, asMongoSchemaTarget(db));\n return;\n }\n\n const dialect = resolveDialect(runtime, options.dialect);\n const sql = renderSafeSql(options.schema, { dialect });\n\n if (runtime.kind === \"sql\") {\n await applySqlSchemaToClient(runtime.client, dialect, sql);\n return;\n }\n\n if (runtime.kind === \"drizzle\") {\n await applySqlSchemaToClient(resolveDrizzleRuntimeClient(runtime, options), dialect, sql);\n return;\n }\n\n await applySqlSchemaToClient(runtime.client, dialect, sql);\n}\n\nexport async function applySchema<TSchema extends SchemaDefinition<any>, TClient = unknown>(\n options: ApplySchemaOptions<TSchema, TClient>,\n) {\n await applySchemaInternal(options);\n}\n\nexport async function pushSchema<TSchema extends SchemaDefinition<any>, TClient = unknown>(\n options: PushSchemaOptions<TSchema, TClient>,\n) {\n await applySchemaInternal(options);\n}\n\nexport async function bootstrapDatabase<TSchema extends SchemaDefinition<any>, TClient = unknown>(\n options: BootstrapDatabaseOptions<TSchema, TClient>,\n) {\n await pushSchema(options);\n return createOrmFromRuntime(options);\n}\n\nexport type {\n AutoDialect,\n AutoDriverHandle,\n CreateDriverFromRuntimeOptions,\n CreateOrmFromRuntimeOptions,\n MongooseConnectionLike,\n};\n"],"mappings":";;;;;;;;;;AAAA,SAAS,gBAAgB;AACzB,SAAS,SAAS,IAAI,iBAAiB;AACvC,SAAS,cAAc;AACvB,OAAO,UAAU;AACjB,SAAS,iBAAiB;AAC1B;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OAEK;AAuEP,IAAM,gBAAgB,UAAU,QAAQ;AACxC,IAAM,2BAA2B,QAAQ,IAAI;AAE7C,SAAS,yBAAyB,SAAsC;AACtE,UAAQ,SAAS;AAAA,IACf,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,EACX;AACF;AAEA,SAAS,gBAAgB,UAAkB;AACzC,SAAO,SAAS,QAAQ,gBAAgB,gCAAgC;AAC1E;AAEA,SAAS,0BAA0B,QAA+B,UAA0B;AAC1F,SAAO,gBAAgB,mBAAmB,QAAQ,EAAE,SAAS,CAAC,CAAC;AACjE;AAEA,SAAS,mBAAmB,KAAa;AACvC,QAAM,aAAuB,CAAC;AAC9B,MAAI,UAAU;AACd,MAAI,QAAgC;AAEpC,WAAS,QAAQ,GAAG,QAAQ,IAAI,QAAQ,SAAS,GAAG;AAClD,UAAM,OAAO,IAAI,KAAK;AACtB,UAAM,OAAO,IAAI,QAAQ,CAAC;AAE1B,eAAW;AAEX,QAAI,UAAU,KAAK;AACjB,UAAI,SAAS,OAAO,SAAS,KAAK;AAChC,mBAAW;AACX,iBAAS;AACT;AAAA,MACF;AAEA,UAAI,SAAS,QAAQ,SAAS,KAAK;AACjC,mBAAW;AACX,iBAAS;AACT;AAAA,MACF;AAEA,UAAI,SAAS,KAAK;AAChB,gBAAQ;AAAA,MACV;AAEA;AAAA,IACF;AAEA,QAAI,UAAU,KAAK;AACjB,UAAI,SAAS,OAAO,SAAS,KAAK;AAChC,mBAAW;AACX,iBAAS;AACT;AAAA,MACF;AAEA,UAAI,SAAS,KAAK;AAChB,gBAAQ;AAAA,MACV;AAEA;AAAA,IACF;AAEA,QAAI,UAAU,KAAK;AACjB,UAAI,SAAS,OAAO,SAAS,KAAK;AAChC,mBAAW;AACX,iBAAS;AACT;AAAA,MACF;AAEA,UAAI,SAAS,QAAQ,SAAS,KAAK;AACjC,mBAAW;AACX,iBAAS;AACT;AAAA,MACF;AAEA,UAAI,SAAS,KAAK;AAChB,gBAAQ;AAAA,MACV;AAEA;AAAA,IACF;AAEA,QAAI,SAAS,OAAO,SAAS,OAAO,SAAS,KAAK;AAChD,cAAQ;AACR;AAAA,IACF;AAEA,QAAI,SAAS,KAAK;AAChB,YAAM,YAAY,QAAQ,KAAK;AAC/B,UAAI,WAAW;AACb,mBAAW,KAAK,SAAS;AAAA,MAC3B;AACA,gBAAU;AAAA,IACZ;AAAA,EACF;AAEA,QAAM,WAAW,QAAQ,KAAK;AAC9B,MAAI,UAAU;AACZ,eAAW,KAAK,SAAS,SAAS,GAAG,IAAI,WAAW,GAAG,QAAQ,GAAG;AAAA,EACpE;AAEA,SAAO,WAAW,IAAI,CAAC,cAAe,UAAU,SAAS,GAAG,IAAI,YAAY,GAAG,SAAS,GAAI;AAC9F;AAEA,eAAe,iBACb,YACA,KACA;AACA,aAAW,aAAa,YAAY;AAClC,UAAM,IAAI,SAAS;AAAA,EACrB;AACF;AAEA,SAAS,yBACP,SACA,SACQ;AACR,MAAI,QAAQ,QAAQ,aAAa;AAC/B,WAAO,QAAQ,OAAO;AAAA,EACxB;AAEA,QAAM,SAAS,QAAQ;AACvB,QAAM,eAAe,SAAS,OAAO,aAAa,IAAI,OAAO,gBAAgB;AAE7E,QAAM,sBAAsB,SAAS,cAAc,mBAAmB,IAClE,aAAa,sBACb;AACJ,aAAW,cAAc,OAAO,OAAO,uBAAuB,CAAC,CAAC,GAAG;AACjE,QAAI,CAAC,SAAS,UAAU,EAAG;AAC3B,QAAI,OAAO,WAAW,QAAQ,YAAY,WAAW,IAAI,SAAS,GAAG;AACnE,aAAO,WAAW;AAAA,IACpB;AAAA,EACF;AAEA,QAAM,oBAAoB,SAAS,cAAc,iBAAiB,IAC9D,aAAa,oBACb;AACJ,aAAW,cAAc,OAAO,OAAO,qBAAqB,CAAC,CAAC,GAAG;AAC/D,QAAI,CAAC,SAAS,UAAU,KAAK,CAAC,SAAS,WAAW,GAAG,EAAG;AACxD,QAAI,OAAO,WAAW,IAAI,UAAU,YAAY,WAAW,IAAI,MAAM,SAAS,GAAG;AAC/E,aAAO,WAAW,IAAI;AAAA,IACxB;AACA,QACE,OAAO,WAAW,IAAI,eAAe,YACrC,QAAQ,IAAI,WAAW,IAAI,UAAU,GAAG,QACxC;AACA,aAAO,QAAQ,IAAI,WAAW,IAAI,UAAU;AAAA,IAC9C;AAAA,EACF;AAEA,QAAM,IAAI;AAAA,IACR;AAAA,EACF;AACF;AAEA,SAAS,4BACP,SACA,SACA;AACA,QAAM,gBACJ,QAAQ,SAAS,UAChB,QAAQ,QAAuD,WAChE;AAEF,MAAI,CAAC,eAAe;AAClB,UAAM,IAAI;AAAA,MACR;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AACT;AAEA,SAAS,oBAAoB,OAAuC;AAClE,MAAI,YAAY,OAAO,YAAY,GAAG;AACpC,WAAO;AAAA,EACT;AAEA,QAAM,IAAI,MAAM,gFAAgF;AAClG;AAEA,SAAS,4BAA4B,OAAgB;AACnD,MAAI,SAAS,KAAK,KAAK,MAAM,SAAS,IAAI;AACxC,WAAO;AAAA,EACT;AAEA,QAAM,UAAU,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AACrE,SAAO,kCAAkC,KAAK,OAAO;AACvD;AAEA,SAAS,4BAA4B,OAAgB;AACnD,QAAM,UAAU,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AACrE,SAAO,8CAA8C,KAAK,OAAO;AACnE;AAEA,SAAS,wBAAwB,OAA4D;AAC3F,QAAM,UAAU,oBAAI,IAAwE;AAE5F,aAAW,SAAS,OAAO,OAAO,MAAM,MAAM,GAAG;AAC/C,QAAI,MAAM,SAAS,MAAM;AACvB,UAAI,MAAM,WAAW,OAAO;AAC1B,cAAMA,QAAO,EAAE,CAAC,MAAM,MAAM,GAAG,EAAE;AACjC,gBAAQ,IAAI,KAAK,UAAU,EAAE,MAAAA,OAAM,QAAQ,KAAK,CAAC,GAAG;AAAA,UAClD,MAAAA;AAAA,UACA,QAAQ;AAAA,UACR,MAAM,GAAG,MAAM,KAAK,IAAI,MAAM,MAAM;AAAA,QACtC,CAAC;AAAA,MACH;AACA;AAAA,IACF;AAEA,QAAI,CAAC,MAAM,OAAQ;AACnB,UAAM,OAAO,EAAE,CAAC,MAAM,MAAM,GAAG,EAAE;AACjC,YAAQ,IAAI,KAAK,UAAU,EAAE,MAAM,QAAQ,KAAK,CAAC,GAAG;AAAA,MAClD;AAAA,MACA,QAAQ;AAAA,MACR,MAAM,GAAG,MAAM,KAAK,IAAI,MAAM,MAAM;AAAA,IACtC,CAAC;AAAA,EACH;AAEA,aAAW,cAAc,CAAC,GAAG,MAAM,YAAY,QAAQ,GAAG,MAAM,YAAY,OAAO,GAAG;AACpF,UAAM,OAAO,OAAO,YAAY,WAAW,QAAQ,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC;AAI/E,YAAQ,IAAI,KAAK,UAAU,EAAE,MAAM,QAAQ,WAAW,OAAO,CAAC,GAAG;AAAA,MAC/D;AAAA,MACA,QAAQ,WAAW;AAAA,MACnB,MAAM,WAAW;AAAA,IACnB,CAAC;AAAA,EACH;AAEA,SAAO,CAAC,GAAG,QAAQ,OAAO,CAAC;AAC7B;AAEA,eAAe,iCACb,QACA,QACA;AACA,QAAM,WAAW,eAAe,MAAM;AAEtC,aAAW,SAAS,OAAO,OAAO,SAAS,MAAM,GAAG;AAClD,QAAI,OAAO,OAAO,qBAAqB,YAAY;AACjD,UAAI;AACF,cAAM,OAAO,iBAAiB,MAAM,KAAK;AAAA,MAC3C,SAAS,OAAO;AACd,YAAI,CAAC,4BAA4B,KAAK,GAAG;AACvC,gBAAM;AAAA,QACR;AAAA,MACF;AAAA,IACF;AAEA,UAAM,aAAa,OAAO,WAAW,MAAM,KAAK;AAChD,eAAW,SAAS,wBAAwB,KAAK,GAAG;AAClD,UAAI;AACF,cAAM,WAAW,YAAY,MAAM,MAAM;AAAA,UACvC,MAAM,MAAM;AAAA,UACZ,QAAQ,MAAM;AAAA,QAChB,CAAC;AAAA,MACH,SAAS,OAAO;AACd,YAAI,CAAC,4BAA4B,KAAK,GAAG;AACvC,gBAAM;AAAA,QACR;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;AAEA,eAAe,uBAAuB,QAAiB,SAAsB,KAAa;AACxF,MAAI,YAAY,YAAY,YAAY,QAAQ,MAAM,GAAG;AACvD,UAAO,OAA4B,KAAK,GAAG;AAC3C;AAAA,EACF;AAEA,QAAM,aAAa,mBAAmB,GAAG;AAEzC,MAAI,YAAY,QAAQ,OAAO,GAAG;AAChC,UAAM,iBAAiB,YAAY,CAAC,cAAe,OAA0B,MAAM,SAAS,CAAC;AAC7F;AAAA,EACF;AAEA,MAAI,YAAY,QAAQ,SAAS,GAAG;AAClC,UAAM;AAAA,MAAiB;AAAA,MAAY,CAAC,cACjC,OAA4B,QAAQ,SAAS;AAAA,IAChD;AACA;AAAA,EACF;AAEA,MAAI,YAAY,QAAQ,cAAc,GAAG;AACvC,UAAM;AAAA,MAAiB;AAAA,MAAY,CAAC,cACjC,OAA+B,aAAa;AAAA,QAC3C,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,QACb,OAAO;AAAA,UACL,MAAM;AAAA,UACN,cAAc,CAAC,SAAS;AAAA,UACxB,YAAY,CAAC;AAAA,QACf;AAAA,QACA,SAAS,CAAC;AAAA,MACZ,CAAC;AAAA,IACH;AACA;AAAA,EACF;AAEA,QAAM,IAAI;AAAA,IACR,6BAA6B,OAAO;AAAA,EACtC;AACF;AAEA,eAAe,gBAAgB,YAAoB,aAAqB,aAAqB;AAC3F,QAAM;AAAA,IACJ;AAAA,IACA,CAAC,QAAQ,UAAU,MAAM,QAAQ,YAAY,YAAY,iBAAiB;AAAA,IAC1E;AAAA,MACE,KAAK;AAAA,MACL,KAAK;AAAA,QACH,GAAG,QAAQ;AAAA,QACX,cAAc;AAAA,MAChB;AAAA,IACF;AAAA,EACF;AACF;AAEA,eAAe,iBACb,QACA,SACA,SACA;AACA,QAAM,UAAU,eAAe,SAAS,QAAQ,OAAO;AACvD,QAAM,WAAW,yBAAyB,OAAO;AACjD,QAAM,cAAc,yBAAyB,SAAS,OAAO;AAC7D,QAAM,cAAc,QAAQ,QAAQ,eAAe;AACnD,QAAM,UAAU,MAAM,QAAQ,KAAK,KAAK,OAAO,GAAG,0BAA0B,CAAC;AAC7E,QAAM,aAAa,KAAK,KAAK,SAAS,eAAe;AAErD,MAAI;AACF,UAAM,UAAU,YAAY,0BAA0B,QAAQ,QAAQ,GAAG,MAAM;AAC/E,UAAM,gBAAgB,YAAY,aAAa,WAAW;AAAA,EAC5D,UAAE;AACA,UAAM,GAAG,SAAS,EAAE,WAAW,MAAM,OAAO,KAAK,CAAC;AAAA,EACpD;AACF;AAEA,eAAe,oBACb,SACA;AACA,QAAM,UAAU,eAAe,OAAO;AAEtC,MAAI,QAAQ,SAAS,UAAU;AAC7B,UAAM,iBAAiB,QAAQ,QAAQ,SAAS,OAAO;AACvD;AAAA,EACF;AAEA,MAAI,QAAQ,SAAS,SAAS;AAC5B,UAAM,KAAK,eAAe,SAAS,OAAO;AAC1C,UAAM,iCAAiC,QAAQ,QAAQ,oBAAoB,EAAE,CAAC;AAC9E;AAAA,EACF;AAEA,MAAI,QAAQ,SAAS,YAAY;AAC/B,UAAM,aAAa,QAAQ;AAC3B,UAAM,KAAK,SAAS,WAAW,EAAE,IAAI,WAAW,KAAK;AACrD,UAAM,iCAAiC,QAAQ,QAAQ,oBAAoB,EAAE,CAAC;AAC9E;AAAA,EACF;AAEA,QAAM,UAAU,eAAe,SAAS,QAAQ,OAAO;AACvD,QAAM,MAAM,cAAc,QAAQ,QAAQ,EAAE,QAAQ,CAAC;AAErD,MAAI,QAAQ,SAAS,OAAO;AAC1B,UAAM,uBAAuB,QAAQ,QAAQ,SAAS,GAAG;AACzD;AAAA,EACF;AAEA,MAAI,QAAQ,SAAS,WAAW;AAC9B,UAAM,uBAAuB,4BAA4B,SAAS,OAAO,GAAG,SAAS,GAAG;AACxF;AAAA,EACF;AAEA,QAAM,uBAAuB,QAAQ,QAAQ,SAAS,GAAG;AAC3D;AAEA,eAAsB,YACpB,SACA;AACA,QAAM,oBAAoB,OAAO;AACnC;AAEA,eAAsB,WACpB,SACA;AACA,QAAM,oBAAoB,OAAO;AACnC;AAEA,eAAsB,kBACpB,SACA;AACA,QAAM,WAAW,OAAO;AACxB,SAAO,qBAAqB,OAAO;AACrC;","names":["keys"]}
@@ -0,0 +1,43 @@
1
+ import { DetectedDatabaseDialect, OrmDriverHandle, SchemaDefinition, DetectedDatabaseRuntime, ModelName } from '@farming-labs/orm';
2
+ import { DrizzleDialect, DrizzleDriverConfig } from '@farming-labs/orm-drizzle';
3
+ import { MongoCollectionMap, MongoDbLike, MongoDriverConfig, MongoSessionLike } from '@farming-labs/orm-mongo';
4
+ import { MongooseModelLike, MongooseFieldTransform, MongooseSessionLike, MongooseSessionSourceLike } from '@farming-labs/orm-mongoose';
5
+ import { KyselyDialect } from '@farming-labs/orm-kysely';
6
+ import { PrismaDriverHandle, PrismaDriverConfig } from '@farming-labs/orm-prisma';
7
+ import { SqlDriverHandle } from '@farming-labs/orm-sql';
8
+
9
+ type AutoDialect = DetectedDatabaseDialect;
10
+ type AutoDriverHandle<TClient = unknown> = PrismaDriverHandle | SqlDriverHandle<TClient, AutoDialect> | OrmDriverHandle<"drizzle", TClient, DrizzleDialect> | OrmDriverHandle<"kysely", TClient, KyselyDialect> | OrmDriverHandle<"mongo", unknown> | OrmDriverHandle<"mongoose", unknown>;
11
+ type CreateDriverFromRuntimeOptions<TSchema extends SchemaDefinition<any>, TClient = unknown> = {
12
+ schema: TSchema;
13
+ client?: TClient;
14
+ runtime?: DetectedDatabaseRuntime<TClient>;
15
+ dialect?: AutoDialect;
16
+ databaseName?: string;
17
+ prisma?: Pick<PrismaDriverConfig<TSchema>, "models"> & {
18
+ databaseUrl?: string;
19
+ packageRoot?: string;
20
+ };
21
+ drizzle?: Pick<DrizzleDriverConfig<TSchema>, "client">;
22
+ mongo?: {
23
+ collections?: MongoCollectionMap<TSchema>;
24
+ db?: MongoDbLike;
25
+ transforms?: MongoDriverConfig<TSchema>["transforms"];
26
+ startSession?: () => Promise<MongoSessionLike>;
27
+ };
28
+ mongoose?: {
29
+ models?: Record<ModelName<TSchema>, MongooseModelLike>;
30
+ transforms?: Partial<Record<string, Partial<Record<string, MongooseFieldTransform>>>>;
31
+ startSession?: () => Promise<MongooseSessionLike>;
32
+ };
33
+ };
34
+ type CreateOrmFromRuntimeOptions<TSchema extends SchemaDefinition<any>, TClient = unknown> = CreateDriverFromRuntimeOptions<TSchema, TClient>;
35
+ type MongooseConnectionLike = MongooseSessionSourceLike & {
36
+ models?: Record<string, MongooseModelLike & {
37
+ collection?: {
38
+ collectionName?: string;
39
+ };
40
+ }>;
41
+ };
42
+
43
+ export type { AutoDriverHandle as A, CreateDriverFromRuntimeOptions as C, MongooseConnectionLike as M, CreateOrmFromRuntimeOptions as a, AutoDialect as b };
@@ -0,0 +1,43 @@
1
+ import { DetectedDatabaseDialect, OrmDriverHandle, SchemaDefinition, DetectedDatabaseRuntime, ModelName } from '@farming-labs/orm';
2
+ import { DrizzleDialect, DrizzleDriverConfig } from '@farming-labs/orm-drizzle';
3
+ import { MongoCollectionMap, MongoDbLike, MongoDriverConfig, MongoSessionLike } from '@farming-labs/orm-mongo';
4
+ import { MongooseModelLike, MongooseFieldTransform, MongooseSessionLike, MongooseSessionSourceLike } from '@farming-labs/orm-mongoose';
5
+ import { KyselyDialect } from '@farming-labs/orm-kysely';
6
+ import { PrismaDriverHandle, PrismaDriverConfig } from '@farming-labs/orm-prisma';
7
+ import { SqlDriverHandle } from '@farming-labs/orm-sql';
8
+
9
+ type AutoDialect = DetectedDatabaseDialect;
10
+ type AutoDriverHandle<TClient = unknown> = PrismaDriverHandle | SqlDriverHandle<TClient, AutoDialect> | OrmDriverHandle<"drizzle", TClient, DrizzleDialect> | OrmDriverHandle<"kysely", TClient, KyselyDialect> | OrmDriverHandle<"mongo", unknown> | OrmDriverHandle<"mongoose", unknown>;
11
+ type CreateDriverFromRuntimeOptions<TSchema extends SchemaDefinition<any>, TClient = unknown> = {
12
+ schema: TSchema;
13
+ client?: TClient;
14
+ runtime?: DetectedDatabaseRuntime<TClient>;
15
+ dialect?: AutoDialect;
16
+ databaseName?: string;
17
+ prisma?: Pick<PrismaDriverConfig<TSchema>, "models"> & {
18
+ databaseUrl?: string;
19
+ packageRoot?: string;
20
+ };
21
+ drizzle?: Pick<DrizzleDriverConfig<TSchema>, "client">;
22
+ mongo?: {
23
+ collections?: MongoCollectionMap<TSchema>;
24
+ db?: MongoDbLike;
25
+ transforms?: MongoDriverConfig<TSchema>["transforms"];
26
+ startSession?: () => Promise<MongoSessionLike>;
27
+ };
28
+ mongoose?: {
29
+ models?: Record<ModelName<TSchema>, MongooseModelLike>;
30
+ transforms?: Partial<Record<string, Partial<Record<string, MongooseFieldTransform>>>>;
31
+ startSession?: () => Promise<MongooseSessionLike>;
32
+ };
33
+ };
34
+ type CreateOrmFromRuntimeOptions<TSchema extends SchemaDefinition<any>, TClient = unknown> = CreateDriverFromRuntimeOptions<TSchema, TClient>;
35
+ type MongooseConnectionLike = MongooseSessionSourceLike & {
36
+ models?: Record<string, MongooseModelLike & {
37
+ collection?: {
38
+ collectionName?: string;
39
+ };
40
+ }>;
41
+ };
42
+
43
+ export type { AutoDriverHandle as A, CreateDriverFromRuntimeOptions as C, MongooseConnectionLike as M, CreateOrmFromRuntimeOptions as a, AutoDialect as b };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@farming-labs/orm-runtime",
3
- "version": "0.0.19",
3
+ "version": "0.0.21",
4
4
  "files": [
5
5
  "dist"
6
6
  ],
@@ -13,19 +13,24 @@
13
13
  "types": "./dist/index.d.ts",
14
14
  "import": "./dist/index.js",
15
15
  "require": "./dist/index.cjs"
16
+ },
17
+ "./setup": {
18
+ "types": "./dist/setup.d.ts",
19
+ "import": "./dist/setup.js",
20
+ "require": "./dist/setup.cjs"
16
21
  }
17
22
  },
18
23
  "publishConfig": {
19
24
  "access": "public"
20
25
  },
21
26
  "dependencies": {
22
- "@farming-labs/orm": "0.0.19",
23
- "@farming-labs/orm-drizzle": "0.0.19",
24
- "@farming-labs/orm-kysely": "0.0.19",
25
- "@farming-labs/orm-mongo": "0.0.19",
26
- "@farming-labs/orm-mongoose": "0.0.19",
27
- "@farming-labs/orm-prisma": "0.0.19",
28
- "@farming-labs/orm-sql": "0.0.19"
27
+ "@farming-labs/orm": "0.0.21",
28
+ "@farming-labs/orm-kysely": "0.0.21",
29
+ "@farming-labs/orm-drizzle": "0.0.21",
30
+ "@farming-labs/orm-mongo": "0.0.21",
31
+ "@farming-labs/orm-mongoose": "0.0.21",
32
+ "@farming-labs/orm-prisma": "0.0.21",
33
+ "@farming-labs/orm-sql": "0.0.21"
29
34
  },
30
35
  "devDependencies": {
31
36
  "tsup": "^8.4.0"