AK-21/Graphite-Industrial-Intelligence
0
1import { useEffect, useReducer } from "react";2async function readMigrationFiles({ journal, migrations }) {3 const migrationQueries = [];4 for await (const journalEntry of journal.entries) {5 const query = migrations[`m${journalEntry.idx.toString().padStart(4, "0")}`];6 if (!query) {7 throw new Error(`Missing migration: ${journalEntry.tag}`);8 }9 try {10 const result = query.split("--> statement-breakpoint").map((it) => {11 return it;12 });13 migrationQueries.push({14 sql: result,15 bps: journalEntry.breakpoints,16 folderMillis: journalEntry.when,17 hash: ""18 });19 } catch {20 throw new Error(`Failed to parse migration: ${journalEntry.tag}`);21 }22 }23 return migrationQueries;24}25async function migrate(db, config) {26 const migrations = await readMigrationFiles(config);27 return db.dialect.migrate(migrations, db.session);28}29const useMigrations = (db, migrations) => {30 const initialState = {31 success: false,32 error: void 033 };34 const fetchReducer = (state2, action) => {35 switch (action.type) {36 case "migrating": {37 return { ...initialState };38 }39 case "migrated": {40 return { ...initialState, success: action.payload };41 }42 case "error": {43 return { ...initialState, error: action.payload };44 }45 default: {46 return state2;47 }48 }49 };50 const [state, dispatch] = useReducer(fetchReducer, initialState);51 useEffect(() => {52 dispatch({ type: "migrating" });53 migrate(db, migrations).then(() => {54 dispatch({ type: "migrated", payload: true });55 }).catch((error) => {56 dispatch({ type: "error", payload: error });57 });58 }, []);59 return state;60};61export {62 migrate,63 useMigrations64};65//# sourceMappingURL=migrator.js.map