Home / Function/ prepareServer() — drizzle-orm Function Reference

prepareServer() — drizzle-orm Function Reference

Architecture documentation for the prepareServer() function in studio.ts from the drizzle-orm codebase.

Entity Profile

Dependency Diagram

graph TD
  2a2d384e_29cd_b901_fdda_e10fca96a027["prepareServer()"]
  82de12f8_a8ca_9d38_8da8_9ac945d81e01["studio.ts"]
  2a2d384e_29cd_b901_fdda_e10fca96a027 -->|defined in| 82de12f8_a8ca_9d38_8da8_9ac945d81e01
  4989a948_cacf_e4b2_7283_c9335d2b7983["startServerFromSetup()"]
  4989a948_cacf_e4b2_7283_c9335d2b7983 -->|calls| 2a2d384e_29cd_b901_fdda_e10fca96a027
  72630e5c_93c3_75d3_29f3_af0928ebe15c["studio.handler()"]
  72630e5c_93c3_75d3_29f3_af0928ebe15c -->|calls| 2a2d384e_29cd_b901_fdda_e10fca96a027
  92c3479f_50d7_632d_a64a_ace0d75fef1e["extractRelations()"]
  2a2d384e_29cd_b901_fdda_e10fca96a027 -->|calls| 92c3479f_50d7_632d_a64a_ace0d75fef1e
  649d9820_66d0_6975_1e12_72ca2dab5d5a["jsonStringify()"]
  2a2d384e_29cd_b901_fdda_e10fca96a027 -->|calls| 649d9820_66d0_6975_1e12_72ca2dab5d5a
  style 2a2d384e_29cd_b901_fdda_e10fca96a027 fill:#6366f1,stroke:#818cf8,color:#fff

Relationship Graph

Source Code

drizzle-kit/src/serializer/studio.ts lines 685–847

export const prepareServer = async (
	{
		dialect,
		driver,
		packageName,
		databaseName,
		proxy,
		transactionProxy,
		customDefaults,
		schema: drizzleSchema,
		relations,
		dbHash,
		casing,
		schemaFiles,
	}: Setup,
	app?: Hono,
): Promise<Server> => {
	app = app !== undefined ? app : new Hono();

	app.use(compress());
	app.use(async (ctx, next) => {
		await next();
		// * https://wicg.github.io/private-network-access/#headers
		// * https://github.com/drizzle-team/drizzle-orm/issues/1857#issuecomment-2395724232
		ctx.header('Access-Control-Allow-Private-Network', 'true');
	});
	app.use(cors());
	app.onError((err, ctx) => {
		console.error(err);
		return ctx.json({
			status: 'error',
			error: err.message,
		});
	});

	const relationalSchema: Record<string, unknown> = {
		...Object.fromEntries(
			Object.entries(drizzleSchema)
				.map(([schemaName, schema]) => {
					// have unique keys across schemas
					const mappedTableEntries = Object.entries(schema).map(
						([tableName, table]) => {
							return [`__${schemaName}__.${tableName}`, table];
						},
					);

					return mappedTableEntries;
				})
				.flat(),
		),
		...relations,
	};

	const relationsConfig = extractTablesRelationalConfig(
		relationalSchema,
		createTableRelationsHelpers,
	);

	app.post('/', zValidator('json', schema), async (c) => {
		const body = c.req.valid('json');
		const { type } = body;

		if (type === 'init') {
			const preparedDefaults = customDefaults.map((d) => ({
				schema: d.schema,
				table: d.table,
				column: d.column,
			}));

			let relations: Relation[] = [];
			// Attempt to extract relations from the relational config.
			// An error may occur if the relations are ambiguous or misconfigured.
			try {
				relations = extractRelations(relationsConfig, casing);
			} catch (error) {
				console.warn(
					'Failed to extract relations. This is likely due to ambiguous or misconfigured relations.',
				);
				console.warn(
					'Please check your schema and ensure that all relations are correctly defined.',
				);

Domain

Subdomains

Frequently Asked Questions

What does prepareServer() do?
prepareServer() is a function in the drizzle-orm codebase, defined in drizzle-kit/src/serializer/studio.ts.
Where is prepareServer() defined?
prepareServer() is defined in drizzle-kit/src/serializer/studio.ts at line 685.
What does prepareServer() call?
prepareServer() calls 2 function(s): extractRelations, jsonStringify.
What calls prepareServer()?
prepareServer() is called by 2 function(s): startServerFromSetup, studio.handler.

Analyze Your Own Codebase

Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.

Try Supermodel Free