migrator.ts — drizzle-orm Source File
Architecture documentation for migrator.ts, a typescript file in the drizzle-orm codebase. 3 imports, 0 dependents.
Entity Profile
Dependency Diagram
graph LR 7d4ff80f_0ea3_5189_875c_e681d73995cd["migrator.ts"] 83aa60fb_f2bc_7cbb_05d6_48650cc6facf["driver.ts"] 7d4ff80f_0ea3_5189_875c_e681d73995cd --> 83aa60fb_f2bc_7cbb_05d6_48650cc6facf d4d235b8_5320_ab49_32b1_655b9b8a9a32["react"] 7d4ff80f_0ea3_5189_875c_e681d73995cd --> d4d235b8_5320_ab49_32b1_655b9b8a9a32 e5e6906d_5758_78e9_01f9_fe38ab11030b["migrator.ts"] 7d4ff80f_0ea3_5189_875c_e681d73995cd --> e5e6906d_5758_78e9_01f9_fe38ab11030b style 7d4ff80f_0ea3_5189_875c_e681d73995cd fill:#6366f1,stroke:#818cf8,color:#fff
Relationship Graph
Source Code
import { useEffect, useReducer } from 'react';
import type { MigrationMeta } from '~/migrator.ts';
import type { OPSQLiteDatabase } from './driver.ts';
interface MigrationConfig {
journal: {
entries: { idx: number; when: number; tag: string; breakpoints: boolean }[];
};
migrations: Record<string, string>;
}
async function readMigrationFiles({ journal, migrations }: MigrationConfig): Promise<MigrationMeta[]> {
const migrationQueries: MigrationMeta[] = [];
for await (const journalEntry of journal.entries) {
const query = migrations[`m${journalEntry.idx.toString().padStart(4, '0')}`];
if (!query) {
throw new Error(`Missing migration: ${journalEntry.tag}`);
}
try {
const result = query.split('--> statement-breakpoint').map((it) => {
return it;
});
migrationQueries.push({
sql: result,
bps: journalEntry.breakpoints,
folderMillis: journalEntry.when,
hash: '',
});
} catch {
throw new Error(`Failed to parse migration: ${journalEntry.tag}`);
}
}
return migrationQueries;
}
export async function migrate<TSchema extends Record<string, unknown>>(
db: OPSQLiteDatabase<TSchema>,
config: MigrationConfig,
) {
const migrations = await readMigrationFiles(config);
return db.dialect.migrate(migrations, db.session);
}
interface State {
success: boolean;
error?: Error;
}
type Action =
| { type: 'migrating' }
| { type: 'migrated'; payload: true }
| { type: 'error'; payload: Error };
export const useMigrations = (db: OPSQLiteDatabase<any>, migrations: {
journal: {
entries: { idx: number; when: number; tag: string; breakpoints: boolean }[];
};
migrations: Record<string, string>;
}): State => {
const initialState: State = {
success: false,
error: undefined,
};
const fetchReducer = (state: State, action: Action): State => {
switch (action.type) {
case 'migrating': {
return { ...initialState };
}
case 'migrated': {
return { ...initialState, success: action.payload };
}
case 'error': {
return { ...initialState, error: action.payload };
}
default: {
return state;
}
}
};
const [state, dispatch] = useReducer(fetchReducer, initialState);
useEffect(() => {
dispatch({ type: 'migrating' });
migrate(db, migrations).then(() => {
dispatch({ type: 'migrated', payload: true });
}).catch((error) => {
dispatch({ type: 'error', payload: error as Error });
});
}, []);
return state;
};
Domain
Subdomains
Dependencies
- driver.ts
- migrator.ts
- react
Source
Frequently Asked Questions
What does migrator.ts do?
migrator.ts is a source file in the drizzle-orm codebase, written in typescript. It belongs to the DrizzleORM domain, SQLDialects subdomain.
What functions are defined in migrator.ts?
migrator.ts defines 3 function(s): migrate, readMigrationFiles, useMigrations.
What does migrator.ts depend on?
migrator.ts imports 3 module(s): driver.ts, migrator.ts, react.
Where is migrator.ts in the architecture?
migrator.ts is located at drizzle-orm/src/op-sqlite/migrator.ts (domain: DrizzleORM, subdomain: SQLDialects, directory: drizzle-orm/src/op-sqlite).
Analyze Your Own Codebase
Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.
Try Supermodel Free