@farming-labs/orm-runtime 0.0.22 → 0.0.24

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.cjs CHANGED
@@ -30,6 +30,7 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
30
30
  // src/setup.ts
31
31
  var setup_exports = {};
32
32
  __export(setup_exports, {
33
+ RuntimeSetupError: () => RuntimeSetupError,
33
34
  applySchema: () => applySchema,
34
35
  bootstrapDatabase: () => bootstrapDatabase,
35
36
  pushSchema: () => pushSchema
@@ -212,6 +213,22 @@ async function createOrmFromRuntime(options) {
212
213
  }
213
214
 
214
215
  // src/setup.ts
216
+ var RuntimeSetupError = class extends Error {
217
+ stage;
218
+ runtimeKind;
219
+ dialect;
220
+ statement;
221
+ cause;
222
+ constructor(input) {
223
+ super(input.message);
224
+ this.name = "RuntimeSetupError";
225
+ this.stage = input.stage;
226
+ this.runtimeKind = input.runtimeKind;
227
+ this.dialect = input.dialect;
228
+ this.statement = input.statement;
229
+ this.cause = input.cause;
230
+ }
231
+ };
215
232
  var execFileAsync = (0, import_node_util.promisify)(import_node_child_process.execFile);
216
233
  var defaultPrismaPackageRoot = process.cwd();
217
234
  function prismaProviderForDialect(dialect) {
@@ -299,9 +316,16 @@ function splitSqlStatements(sql) {
299
316
  }
300
317
  return statements.map((statement) => statement.endsWith(";") ? statement : `${statement};`);
301
318
  }
302
- async function runSqlStatements(statements, run) {
319
+ async function runSqlStatements(dialect, statements, run) {
303
320
  for (const statement of statements) {
304
- await run(statement);
321
+ try {
322
+ await run(statement);
323
+ } catch (error) {
324
+ if (isEquivalentSqlSetupError(dialect, statement, error)) {
325
+ continue;
326
+ }
327
+ throw error;
328
+ }
305
329
  }
306
330
  }
307
331
  function resolvePrismaDatabaseUrl(runtime, options) {
@@ -423,11 +447,16 @@ async function applySqlSchemaToClient(client, dialect, sql) {
423
447
  }
424
448
  const statements = splitSqlStatements(sql);
425
449
  if (hasFunction(client, "query")) {
426
- await runSqlStatements(statements, (statement) => client.query(statement));
450
+ await runSqlStatements(
451
+ dialect,
452
+ statements,
453
+ (statement) => client.query(statement)
454
+ );
427
455
  return;
428
456
  }
429
457
  if (hasFunction(client, "execute")) {
430
458
  await runSqlStatements(
459
+ dialect,
431
460
  statements,
432
461
  (statement) => client.execute(statement)
433
462
  );
@@ -435,6 +464,7 @@ async function applySqlSchemaToClient(client, dialect, sql) {
435
464
  }
436
465
  if (hasFunction(client, "executeQuery")) {
437
466
  await runSqlStatements(
467
+ dialect,
438
468
  statements,
439
469
  (statement) => client.executeQuery({
440
470
  sql: statement,
@@ -466,6 +496,39 @@ async function runPrismaDbPush(schemaPath, databaseUrl, packageRoot) {
466
496
  }
467
497
  );
468
498
  }
499
+ function isEquivalentSqlSetupError(dialect, statement, error) {
500
+ const message = error instanceof Error ? error.message : String(error);
501
+ const code = isRecord(error) ? error.code : void 0;
502
+ const errno = isRecord(error) ? error.errno : void 0;
503
+ const isIndexStatement = /^\s*create\s+(unique\s+)?index\b/i.test(statement);
504
+ if (!isIndexStatement) {
505
+ return false;
506
+ }
507
+ if (dialect === "mysql") {
508
+ return code === "ER_DUP_KEYNAME" || errno === 1061 || /duplicate key name/i.test(message);
509
+ }
510
+ if (dialect === "sqlite") {
511
+ return /index .+ already exists/i.test(message);
512
+ }
513
+ return code === "42P07" || /already exists/i.test(message);
514
+ }
515
+ function wrapSetupError(stage, runtime, error, statement) {
516
+ if (error instanceof RuntimeSetupError) {
517
+ return error;
518
+ }
519
+ const runtimeLabel = runtime.dialect ? `${runtime.kind} (${runtime.dialect})` : runtime.kind;
520
+ const detail = error instanceof Error ? error.message : String(error);
521
+ const suffix = statement ? ` Statement: ${statement}` : "";
522
+ const helperName = stage === "apply" ? "applySchema()" : stage === "push" ? "pushSchema()" : "bootstrapDatabase()";
523
+ return new RuntimeSetupError({
524
+ stage,
525
+ runtimeKind: runtime.kind,
526
+ dialect: runtime.dialect,
527
+ statement,
528
+ cause: error,
529
+ message: `${helperName} failed for ${runtimeLabel} runtime. ${detail}${suffix}`.trim()
530
+ });
531
+ }
469
532
  async function pushPrismaSchema(schema, runtime, options) {
470
533
  const dialect = resolveDialect(runtime, options.dialect);
471
534
  const provider = prismaProviderForDialect(dialect);
@@ -480,47 +543,57 @@ async function pushPrismaSchema(schema, runtime, options) {
480
543
  await (0, import_promises.rm)(tempDir, { recursive: true, force: true });
481
544
  }
482
545
  }
483
- async function applySchemaInternal(options) {
546
+ async function applySchemaInternal(stage, options) {
484
547
  const runtime = resolveRuntime(options);
485
- if (runtime.kind === "prisma") {
486
- await pushPrismaSchema(options.schema, runtime, options);
487
- return;
488
- }
489
- if (runtime.kind === "mongo") {
490
- const db = resolveMongoDb(runtime, options);
491
- await ensureMongoCollectionsAndIndexes(options.schema, asMongoSchemaTarget(db));
492
- return;
493
- }
494
- if (runtime.kind === "mongoose") {
495
- const connection = runtime.client;
496
- const db = isRecord(connection.db) ? connection.db : connection;
497
- await ensureMongoCollectionsAndIndexes(options.schema, asMongoSchemaTarget(db));
498
- return;
499
- }
500
- const dialect = resolveDialect(runtime, options.dialect);
501
- const sql = (0, import_orm3.renderSafeSql)(options.schema, { dialect });
502
- if (runtime.kind === "sql") {
548
+ try {
549
+ if (runtime.kind === "prisma") {
550
+ await pushPrismaSchema(options.schema, runtime, options);
551
+ return;
552
+ }
553
+ if (runtime.kind === "mongo") {
554
+ const db = resolveMongoDb(runtime, options);
555
+ await ensureMongoCollectionsAndIndexes(options.schema, asMongoSchemaTarget(db));
556
+ return;
557
+ }
558
+ if (runtime.kind === "mongoose") {
559
+ const connection = runtime.client;
560
+ const db = isRecord(connection.db) ? connection.db : connection;
561
+ await ensureMongoCollectionsAndIndexes(options.schema, asMongoSchemaTarget(db));
562
+ return;
563
+ }
564
+ const dialect = resolveDialect(runtime, options.dialect);
565
+ const sql = (0, import_orm3.renderSafeSql)(options.schema, { dialect });
566
+ if (runtime.kind === "sql") {
567
+ await applySqlSchemaToClient(runtime.client, dialect, sql);
568
+ return;
569
+ }
570
+ if (runtime.kind === "drizzle") {
571
+ await applySqlSchemaToClient(resolveDrizzleRuntimeClient(runtime, options), dialect, sql);
572
+ return;
573
+ }
503
574
  await applySqlSchemaToClient(runtime.client, dialect, sql);
504
- return;
575
+ } catch (error) {
576
+ throw wrapSetupError(stage, runtime, error);
505
577
  }
506
- if (runtime.kind === "drizzle") {
507
- await applySqlSchemaToClient(resolveDrizzleRuntimeClient(runtime, options), dialect, sql);
508
- return;
509
- }
510
- await applySqlSchemaToClient(runtime.client, dialect, sql);
511
578
  }
512
579
  async function applySchema(options) {
513
- await applySchemaInternal(options);
580
+ await applySchemaInternal("apply", options);
514
581
  }
515
582
  async function pushSchema(options) {
516
- await applySchemaInternal(options);
583
+ await applySchemaInternal("push", options);
517
584
  }
518
585
  async function bootstrapDatabase(options) {
519
- await pushSchema(options);
520
- return createOrmFromRuntime(options);
586
+ const runtime = resolveRuntime(options);
587
+ try {
588
+ await pushSchema(options);
589
+ return await createOrmFromRuntime(options);
590
+ } catch (error) {
591
+ throw wrapSetupError("bootstrap", runtime, error);
592
+ }
521
593
  }
522
594
  // Annotate the CommonJS export names for ESM import in node:
523
595
  0 && (module.exports = {
596
+ RuntimeSetupError,
524
597
  applySchema,
525
598
  bootstrapDatabase,
526
599
  pushSchema
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/setup.ts","../src/index.ts","../src/shared.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","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":["import_orm","import_orm","keys","path"]}
1
+ {"version":3,"sources":["../src/setup.ts","../src/index.ts","../src/shared.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\nexport class RuntimeSetupError extends Error {\n readonly stage: \"apply\" | \"push\" | \"bootstrap\";\n readonly runtimeKind: string;\n readonly dialect?: string;\n readonly statement?: string;\n override readonly cause?: unknown;\n\n constructor(input: {\n stage: \"apply\" | \"push\" | \"bootstrap\";\n runtimeKind: string;\n dialect?: string;\n message: string;\n statement?: string;\n cause?: unknown;\n }) {\n super(input.message);\n this.name = \"RuntimeSetupError\";\n this.stage = input.stage;\n this.runtimeKind = input.runtimeKind;\n this.dialect = input.dialect;\n this.statement = input.statement;\n this.cause = input.cause;\n }\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 dialect: AutoDialect,\n statements: readonly string[],\n run: (sql: string) => Promise<unknown> | unknown,\n) {\n for (const statement of statements) {\n try {\n await run(statement);\n } catch (error) {\n if (isEquivalentSqlSetupError(dialect, statement, error)) {\n continue;\n }\n throw error;\n }\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(dialect, statements, (statement) =>\n (client as SqlQueryClient).query(statement),\n );\n return;\n }\n\n if (hasFunction(client, \"execute\")) {\n await runSqlStatements(dialect, statements, (statement) =>\n (client as SqlExecuteClient).execute(statement),\n );\n return;\n }\n\n if (hasFunction(client, \"executeQuery\")) {\n await runSqlStatements(dialect, 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\nfunction isEquivalentSqlSetupError(dialect: AutoDialect, statement: string, error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n const code = isRecord(error) ? error.code : undefined;\n const errno = isRecord(error) ? error.errno : undefined;\n const isIndexStatement = /^\\s*create\\s+(unique\\s+)?index\\b/i.test(statement);\n\n if (!isIndexStatement) {\n return false;\n }\n\n if (dialect === \"mysql\") {\n return code === \"ER_DUP_KEYNAME\" || errno === 1061 || /duplicate key name/i.test(message);\n }\n\n if (dialect === \"sqlite\") {\n return /index .+ already exists/i.test(message);\n }\n\n return code === \"42P07\" || /already exists/i.test(message);\n}\n\nfunction wrapSetupError(\n stage: \"apply\" | \"push\" | \"bootstrap\",\n runtime: ReturnType<typeof resolveRuntime>,\n error: unknown,\n statement?: string,\n) {\n if (error instanceof RuntimeSetupError) {\n return error;\n }\n\n const runtimeLabel = runtime.dialect ? `${runtime.kind} (${runtime.dialect})` : runtime.kind;\n const detail = error instanceof Error ? error.message : String(error);\n const suffix = statement ? ` Statement: ${statement}` : \"\";\n const helperName =\n stage === \"apply\" ? \"applySchema()\" : stage === \"push\" ? \"pushSchema()\" : \"bootstrapDatabase()\";\n\n return new RuntimeSetupError({\n stage,\n runtimeKind: runtime.kind,\n dialect: runtime.dialect,\n statement,\n cause: error,\n message: `${helperName} failed for ${runtimeLabel} runtime. ${detail}${suffix}`.trim(),\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 stage: \"apply\" | \"push\",\n options: CreateDriverFromRuntimeOptions<TSchema, TClient>,\n) {\n const runtime = resolveRuntime(options);\n\n try {\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 } catch (error) {\n throw wrapSetupError(stage, runtime, error);\n }\n}\n\nexport async function applySchema<TSchema extends SchemaDefinition<any>, TClient = unknown>(\n options: ApplySchemaOptions<TSchema, TClient>,\n) {\n await applySchemaInternal(\"apply\", options);\n}\n\nexport async function pushSchema<TSchema extends SchemaDefinition<any>, TClient = unknown>(\n options: PushSchemaOptions<TSchema, TClient>,\n) {\n await applySchemaInternal(\"push\", options);\n}\n\nexport async function bootstrapDatabase<TSchema extends SchemaDefinition<any>, TClient = unknown>(\n options: BootstrapDatabaseOptions<TSchema, TClient>,\n) {\n const runtime = resolveRuntime(options);\n\n try {\n await pushSchema(options);\n return await createOrmFromRuntime(options);\n } catch (error) {\n throw wrapSetupError(\"bootstrap\", runtime, error);\n }\n}\n\nexport type {\n AutoDialect,\n AutoDriverHandle,\n CreateDriverFromRuntimeOptions,\n CreateOrmFromRuntimeOptions,\n MongooseConnectionLike,\n};\n","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":["import_orm","import_orm","keys","path"]}
package/dist/setup.d.cts CHANGED
@@ -12,8 +12,23 @@ import '@farming-labs/orm-sql';
12
12
  type PushSchemaOptions<TSchema extends SchemaDefinition<any>, TClient = unknown> = CreateDriverFromRuntimeOptions<TSchema, TClient>;
13
13
  type ApplySchemaOptions<TSchema extends SchemaDefinition<any>, TClient = unknown> = CreateDriverFromRuntimeOptions<TSchema, TClient>;
14
14
  type BootstrapDatabaseOptions<TSchema extends SchemaDefinition<any>, TClient = unknown> = CreateOrmFromRuntimeOptions<TSchema, TClient>;
15
+ declare class RuntimeSetupError extends Error {
16
+ readonly stage: "apply" | "push" | "bootstrap";
17
+ readonly runtimeKind: string;
18
+ readonly dialect?: string;
19
+ readonly statement?: string;
20
+ readonly cause?: unknown;
21
+ constructor(input: {
22
+ stage: "apply" | "push" | "bootstrap";
23
+ runtimeKind: string;
24
+ dialect?: string;
25
+ message: string;
26
+ statement?: string;
27
+ cause?: unknown;
28
+ });
29
+ }
15
30
  declare function applySchema<TSchema extends SchemaDefinition<any>, TClient = unknown>(options: ApplySchemaOptions<TSchema, TClient>): Promise<void>;
16
31
  declare function pushSchema<TSchema extends SchemaDefinition<any>, TClient = unknown>(options: PushSchemaOptions<TSchema, TClient>): Promise<void>;
17
32
  declare function bootstrapDatabase<TSchema extends SchemaDefinition<any>, TClient = unknown>(options: BootstrapDatabaseOptions<TSchema, TClient>): Promise<_farming_labs_orm.OrmClient<TSchema, AutoDriverHandle<TClient>>>;
18
33
 
19
- export { type ApplySchemaOptions, AutoDriverHandle, type BootstrapDatabaseOptions, CreateDriverFromRuntimeOptions, CreateOrmFromRuntimeOptions, type PushSchemaOptions, applySchema, bootstrapDatabase, pushSchema };
34
+ export { type ApplySchemaOptions, AutoDriverHandle, type BootstrapDatabaseOptions, CreateDriverFromRuntimeOptions, CreateOrmFromRuntimeOptions, type PushSchemaOptions, RuntimeSetupError, applySchema, bootstrapDatabase, pushSchema };
package/dist/setup.d.ts CHANGED
@@ -12,8 +12,23 @@ import '@farming-labs/orm-sql';
12
12
  type PushSchemaOptions<TSchema extends SchemaDefinition<any>, TClient = unknown> = CreateDriverFromRuntimeOptions<TSchema, TClient>;
13
13
  type ApplySchemaOptions<TSchema extends SchemaDefinition<any>, TClient = unknown> = CreateDriverFromRuntimeOptions<TSchema, TClient>;
14
14
  type BootstrapDatabaseOptions<TSchema extends SchemaDefinition<any>, TClient = unknown> = CreateOrmFromRuntimeOptions<TSchema, TClient>;
15
+ declare class RuntimeSetupError extends Error {
16
+ readonly stage: "apply" | "push" | "bootstrap";
17
+ readonly runtimeKind: string;
18
+ readonly dialect?: string;
19
+ readonly statement?: string;
20
+ readonly cause?: unknown;
21
+ constructor(input: {
22
+ stage: "apply" | "push" | "bootstrap";
23
+ runtimeKind: string;
24
+ dialect?: string;
25
+ message: string;
26
+ statement?: string;
27
+ cause?: unknown;
28
+ });
29
+ }
15
30
  declare function applySchema<TSchema extends SchemaDefinition<any>, TClient = unknown>(options: ApplySchemaOptions<TSchema, TClient>): Promise<void>;
16
31
  declare function pushSchema<TSchema extends SchemaDefinition<any>, TClient = unknown>(options: PushSchemaOptions<TSchema, TClient>): Promise<void>;
17
32
  declare function bootstrapDatabase<TSchema extends SchemaDefinition<any>, TClient = unknown>(options: BootstrapDatabaseOptions<TSchema, TClient>): Promise<_farming_labs_orm.OrmClient<TSchema, AutoDriverHandle<TClient>>>;
18
33
 
19
- export { type ApplySchemaOptions, AutoDriverHandle, type BootstrapDatabaseOptions, CreateDriverFromRuntimeOptions, CreateOrmFromRuntimeOptions, type PushSchemaOptions, applySchema, bootstrapDatabase, pushSchema };
34
+ export { type ApplySchemaOptions, AutoDriverHandle, type BootstrapDatabaseOptions, CreateDriverFromRuntimeOptions, CreateOrmFromRuntimeOptions, type PushSchemaOptions, RuntimeSetupError, applySchema, bootstrapDatabase, pushSchema };
package/dist/setup.js CHANGED
@@ -18,6 +18,22 @@ import {
18
18
  renderPrismaSchema,
19
19
  renderSafeSql
20
20
  } from "@farming-labs/orm";
21
+ var RuntimeSetupError = class extends Error {
22
+ stage;
23
+ runtimeKind;
24
+ dialect;
25
+ statement;
26
+ cause;
27
+ constructor(input) {
28
+ super(input.message);
29
+ this.name = "RuntimeSetupError";
30
+ this.stage = input.stage;
31
+ this.runtimeKind = input.runtimeKind;
32
+ this.dialect = input.dialect;
33
+ this.statement = input.statement;
34
+ this.cause = input.cause;
35
+ }
36
+ };
21
37
  var execFileAsync = promisify(execFile);
22
38
  var defaultPrismaPackageRoot = process.cwd();
23
39
  function prismaProviderForDialect(dialect) {
@@ -105,9 +121,16 @@ function splitSqlStatements(sql) {
105
121
  }
106
122
  return statements.map((statement) => statement.endsWith(";") ? statement : `${statement};`);
107
123
  }
108
- async function runSqlStatements(statements, run) {
124
+ async function runSqlStatements(dialect, statements, run) {
109
125
  for (const statement of statements) {
110
- await run(statement);
126
+ try {
127
+ await run(statement);
128
+ } catch (error) {
129
+ if (isEquivalentSqlSetupError(dialect, statement, error)) {
130
+ continue;
131
+ }
132
+ throw error;
133
+ }
111
134
  }
112
135
  }
113
136
  function resolvePrismaDatabaseUrl(runtime, options) {
@@ -229,11 +252,16 @@ async function applySqlSchemaToClient(client, dialect, sql) {
229
252
  }
230
253
  const statements = splitSqlStatements(sql);
231
254
  if (hasFunction(client, "query")) {
232
- await runSqlStatements(statements, (statement) => client.query(statement));
255
+ await runSqlStatements(
256
+ dialect,
257
+ statements,
258
+ (statement) => client.query(statement)
259
+ );
233
260
  return;
234
261
  }
235
262
  if (hasFunction(client, "execute")) {
236
263
  await runSqlStatements(
264
+ dialect,
237
265
  statements,
238
266
  (statement) => client.execute(statement)
239
267
  );
@@ -241,6 +269,7 @@ async function applySqlSchemaToClient(client, dialect, sql) {
241
269
  }
242
270
  if (hasFunction(client, "executeQuery")) {
243
271
  await runSqlStatements(
272
+ dialect,
244
273
  statements,
245
274
  (statement) => client.executeQuery({
246
275
  sql: statement,
@@ -272,6 +301,39 @@ async function runPrismaDbPush(schemaPath, databaseUrl, packageRoot) {
272
301
  }
273
302
  );
274
303
  }
304
+ function isEquivalentSqlSetupError(dialect, statement, error) {
305
+ const message = error instanceof Error ? error.message : String(error);
306
+ const code = isRecord(error) ? error.code : void 0;
307
+ const errno = isRecord(error) ? error.errno : void 0;
308
+ const isIndexStatement = /^\s*create\s+(unique\s+)?index\b/i.test(statement);
309
+ if (!isIndexStatement) {
310
+ return false;
311
+ }
312
+ if (dialect === "mysql") {
313
+ return code === "ER_DUP_KEYNAME" || errno === 1061 || /duplicate key name/i.test(message);
314
+ }
315
+ if (dialect === "sqlite") {
316
+ return /index .+ already exists/i.test(message);
317
+ }
318
+ return code === "42P07" || /already exists/i.test(message);
319
+ }
320
+ function wrapSetupError(stage, runtime, error, statement) {
321
+ if (error instanceof RuntimeSetupError) {
322
+ return error;
323
+ }
324
+ const runtimeLabel = runtime.dialect ? `${runtime.kind} (${runtime.dialect})` : runtime.kind;
325
+ const detail = error instanceof Error ? error.message : String(error);
326
+ const suffix = statement ? ` Statement: ${statement}` : "";
327
+ const helperName = stage === "apply" ? "applySchema()" : stage === "push" ? "pushSchema()" : "bootstrapDatabase()";
328
+ return new RuntimeSetupError({
329
+ stage,
330
+ runtimeKind: runtime.kind,
331
+ dialect: runtime.dialect,
332
+ statement,
333
+ cause: error,
334
+ message: `${helperName} failed for ${runtimeLabel} runtime. ${detail}${suffix}`.trim()
335
+ });
336
+ }
275
337
  async function pushPrismaSchema(schema, runtime, options) {
276
338
  const dialect = resolveDialect(runtime, options.dialect);
277
339
  const provider = prismaProviderForDialect(dialect);
@@ -286,46 +348,56 @@ async function pushPrismaSchema(schema, runtime, options) {
286
348
  await rm(tempDir, { recursive: true, force: true });
287
349
  }
288
350
  }
289
- async function applySchemaInternal(options) {
351
+ async function applySchemaInternal(stage, options) {
290
352
  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") {
353
+ try {
354
+ if (runtime.kind === "prisma") {
355
+ await pushPrismaSchema(options.schema, runtime, options);
356
+ return;
357
+ }
358
+ if (runtime.kind === "mongo") {
359
+ const db = resolveMongoDb(runtime, options);
360
+ await ensureMongoCollectionsAndIndexes(options.schema, asMongoSchemaTarget(db));
361
+ return;
362
+ }
363
+ if (runtime.kind === "mongoose") {
364
+ const connection = runtime.client;
365
+ const db = isRecord(connection.db) ? connection.db : connection;
366
+ await ensureMongoCollectionsAndIndexes(options.schema, asMongoSchemaTarget(db));
367
+ return;
368
+ }
369
+ const dialect = resolveDialect(runtime, options.dialect);
370
+ const sql = renderSafeSql(options.schema, { dialect });
371
+ if (runtime.kind === "sql") {
372
+ await applySqlSchemaToClient(runtime.client, dialect, sql);
373
+ return;
374
+ }
375
+ if (runtime.kind === "drizzle") {
376
+ await applySqlSchemaToClient(resolveDrizzleRuntimeClient(runtime, options), dialect, sql);
377
+ return;
378
+ }
309
379
  await applySqlSchemaToClient(runtime.client, dialect, sql);
310
- return;
311
- }
312
- if (runtime.kind === "drizzle") {
313
- await applySqlSchemaToClient(resolveDrizzleRuntimeClient(runtime, options), dialect, sql);
314
- return;
380
+ } catch (error) {
381
+ throw wrapSetupError(stage, runtime, error);
315
382
  }
316
- await applySqlSchemaToClient(runtime.client, dialect, sql);
317
383
  }
318
384
  async function applySchema(options) {
319
- await applySchemaInternal(options);
385
+ await applySchemaInternal("apply", options);
320
386
  }
321
387
  async function pushSchema(options) {
322
- await applySchemaInternal(options);
388
+ await applySchemaInternal("push", options);
323
389
  }
324
390
  async function bootstrapDatabase(options) {
325
- await pushSchema(options);
326
- return createOrmFromRuntime(options);
391
+ const runtime = resolveRuntime(options);
392
+ try {
393
+ await pushSchema(options);
394
+ return await createOrmFromRuntime(options);
395
+ } catch (error) {
396
+ throw wrapSetupError("bootstrap", runtime, error);
397
+ }
327
398
  }
328
399
  export {
400
+ RuntimeSetupError,
329
401
  applySchema,
330
402
  bootstrapDatabase,
331
403
  pushSchema
package/dist/setup.js.map CHANGED
@@ -1 +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":"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","names":["keys"]}
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\nexport class RuntimeSetupError extends Error {\n readonly stage: \"apply\" | \"push\" | \"bootstrap\";\n readonly runtimeKind: string;\n readonly dialect?: string;\n readonly statement?: string;\n override readonly cause?: unknown;\n\n constructor(input: {\n stage: \"apply\" | \"push\" | \"bootstrap\";\n runtimeKind: string;\n dialect?: string;\n message: string;\n statement?: string;\n cause?: unknown;\n }) {\n super(input.message);\n this.name = \"RuntimeSetupError\";\n this.stage = input.stage;\n this.runtimeKind = input.runtimeKind;\n this.dialect = input.dialect;\n this.statement = input.statement;\n this.cause = input.cause;\n }\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 dialect: AutoDialect,\n statements: readonly string[],\n run: (sql: string) => Promise<unknown> | unknown,\n) {\n for (const statement of statements) {\n try {\n await run(statement);\n } catch (error) {\n if (isEquivalentSqlSetupError(dialect, statement, error)) {\n continue;\n }\n throw error;\n }\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(dialect, statements, (statement) =>\n (client as SqlQueryClient).query(statement),\n );\n return;\n }\n\n if (hasFunction(client, \"execute\")) {\n await runSqlStatements(dialect, statements, (statement) =>\n (client as SqlExecuteClient).execute(statement),\n );\n return;\n }\n\n if (hasFunction(client, \"executeQuery\")) {\n await runSqlStatements(dialect, 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\nfunction isEquivalentSqlSetupError(dialect: AutoDialect, statement: string, error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n const code = isRecord(error) ? error.code : undefined;\n const errno = isRecord(error) ? error.errno : undefined;\n const isIndexStatement = /^\\s*create\\s+(unique\\s+)?index\\b/i.test(statement);\n\n if (!isIndexStatement) {\n return false;\n }\n\n if (dialect === \"mysql\") {\n return code === \"ER_DUP_KEYNAME\" || errno === 1061 || /duplicate key name/i.test(message);\n }\n\n if (dialect === \"sqlite\") {\n return /index .+ already exists/i.test(message);\n }\n\n return code === \"42P07\" || /already exists/i.test(message);\n}\n\nfunction wrapSetupError(\n stage: \"apply\" | \"push\" | \"bootstrap\",\n runtime: ReturnType<typeof resolveRuntime>,\n error: unknown,\n statement?: string,\n) {\n if (error instanceof RuntimeSetupError) {\n return error;\n }\n\n const runtimeLabel = runtime.dialect ? `${runtime.kind} (${runtime.dialect})` : runtime.kind;\n const detail = error instanceof Error ? error.message : String(error);\n const suffix = statement ? ` Statement: ${statement}` : \"\";\n const helperName =\n stage === \"apply\" ? \"applySchema()\" : stage === \"push\" ? \"pushSchema()\" : \"bootstrapDatabase()\";\n\n return new RuntimeSetupError({\n stage,\n runtimeKind: runtime.kind,\n dialect: runtime.dialect,\n statement,\n cause: error,\n message: `${helperName} failed for ${runtimeLabel} runtime. ${detail}${suffix}`.trim(),\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 stage: \"apply\" | \"push\",\n options: CreateDriverFromRuntimeOptions<TSchema, TClient>,\n) {\n const runtime = resolveRuntime(options);\n\n try {\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 } catch (error) {\n throw wrapSetupError(stage, runtime, error);\n }\n}\n\nexport async function applySchema<TSchema extends SchemaDefinition<any>, TClient = unknown>(\n options: ApplySchemaOptions<TSchema, TClient>,\n) {\n await applySchemaInternal(\"apply\", options);\n}\n\nexport async function pushSchema<TSchema extends SchemaDefinition<any>, TClient = unknown>(\n options: PushSchemaOptions<TSchema, TClient>,\n) {\n await applySchemaInternal(\"push\", options);\n}\n\nexport async function bootstrapDatabase<TSchema extends SchemaDefinition<any>, TClient = unknown>(\n options: BootstrapDatabaseOptions<TSchema, TClient>,\n) {\n const runtime = resolveRuntime(options);\n\n try {\n await pushSchema(options);\n return await createOrmFromRuntime(options);\n } catch (error) {\n throw wrapSetupError(\"bootstrap\", runtime, error);\n }\n}\n\nexport type {\n AutoDialect,\n AutoDriverHandle,\n CreateDriverFromRuntimeOptions,\n CreateOrmFromRuntimeOptions,\n MongooseConnectionLike,\n};\n"],"mappings":"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","names":["keys"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@farming-labs/orm-runtime",
3
- "version": "0.0.22",
3
+ "version": "0.0.24",
4
4
  "files": [
5
5
  "dist"
6
6
  ],
@@ -24,13 +24,13 @@
24
24
  "access": "public"
25
25
  },
26
26
  "dependencies": {
27
- "@farming-labs/orm": "0.0.22",
28
- "@farming-labs/orm-drizzle": "0.0.22",
29
- "@farming-labs/orm-kysely": "0.0.22",
30
- "@farming-labs/orm-mongo": "0.0.22",
31
- "@farming-labs/orm-prisma": "0.0.22",
32
- "@farming-labs/orm-mongoose": "0.0.22",
33
- "@farming-labs/orm-sql": "0.0.22"
27
+ "@farming-labs/orm": "0.0.24",
28
+ "@farming-labs/orm-kysely": "0.0.24",
29
+ "@farming-labs/orm-prisma": "0.0.24",
30
+ "@farming-labs/orm-drizzle": "0.0.24",
31
+ "@farming-labs/orm-sql": "0.0.24",
32
+ "@farming-labs/orm-mongo": "0.0.24",
33
+ "@farming-labs/orm-mongoose": "0.0.24"
34
34
  },
35
35
  "devDependencies": {
36
36
  "tsup": "^8.4.0"