CoolFace
Apppublic

AK-21/Graphite-Industrial-Intelligence

sourceHugging Faceupdated 3mo agoView on Hugging Face
0likes
migrator.js65 linesDownload Raw Back to expo-sqlite
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