UNPKG

react-native-expo-raw-sql-migrations

Version:

Migration tool to use raw sql for SQLite / react-nativ expo.

121 lines 4.98 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var tslib_1 = require("tslib"); var react_1 = tslib_1.__importStar(require("react")); /** * Constants */ var DEFAULT_TABLE_NAME = "migrations"; var DEFAULT_COLUMN_NAME = "versions"; /** * Logics */ var MigrationContext = react_1.createContext({ isFinished: false, execute: undefined, }); exports.useMigrate = function () { return react_1.useContext(MigrationContext); }; exports.TestComponent = function () { console.log('[raw-sql]render test component'); return react_1.default.createElement(react_1.default.Fragment, null); }; exports.MigrationProvider = function (_a) { var children = _a.children, db = _a.db, migrations = _a.migrations, options = _a.options; console.log('[MigraionProvider]render'); var _startsBootstrap = (options === null || options === void 0 ? void 0 : options.startsBootstrap) || true; return (react_1.default.createElement(exports.MigrationBaseProvider, { db: db, migrations: migrations, startsBootstrap: _startsBootstrap }, children)); }; exports.MigrationBaseProvider = function (_a) { var children = _a.children, db = _a.db, migrations = _a.migrations, startsBootstrap = _a.startsBootstrap; var _b = react_1.useState(false), isFinished = _b[0], setIsFinished = _b[1]; var execute = function (db, migrationList, options) { var tableName = (options === null || options === void 0 ? void 0 : options.tableName) || DEFAULT_TABLE_NAME; var columnName = (options === null || options === void 0 ? void 0 : options.columnName) || DEFAULT_COLUMN_NAME; db.exec([ { sql: "CREATE TABLE IF NOT EXISTS " + tableName + " (" + columnName + " TEXT);", args: [], }, ], false, function (err, results) { if (err) { console.error(err); throw err; } if (!results) { var msg = "canot get results"; console.error(msg); throw err; } var result = results[0]; if (isResultSetError(result)) { console.error(result.error); throw result.error; } db.exec([{ sql: "SELECT * FROM " + tableName + ";", args: [] }], false, function (err, results) { if (err) { console.error(err); throw err; } if (!results) { var msg = "canot get results"; console.error(msg); throw err; } var result = results[0]; if (isResultSetError(result)) { console.error(result.error); throw result.error; } var rows = result.rows; var alreadyMigrated = rows.map(function (m) { return m[columnName]; }) || []; var _migrationList = migrationList.filter(function (m) { return !alreadyMigrated.includes(m.name); }); migrate({ db: db, tableName: tableName, columnName: columnName }, _migrationList); }); }); }; var migrate = function (_a, list) { var db = _a.db, tableName = _a.tableName, columnName = _a.columnName; var migrationParams = list[0], rest = list.slice(1); if (migrationParams == null) { setIsFinished(true); return; } // migration db.exec([{ sql: "" + migrationParams.query, args: [] }], false, function () { // insert migration history db.exec([ { sql: "INSERT INTO " + tableName + " (" + columnName + ") VALUES ('" + migrationParams.name + "');", args: [], }, ], false, function (err, results) { if (err) { console.error(err); throw err; } if (!results) { var msg = "canot get results"; console.error(msg); throw err; } var result = results[0]; if (isResultSetError(result)) { console.error(result.error); throw result.error; } migrate({ db: db, tableName: tableName, columnName: columnName }, rest); }); }); }; var value = { isFinished: isFinished, execute: execute }; react_1.useEffect(function () { if (!startsBootstrap) return; if (isFinished) return; execute(db, migrations); }, [execute, isFinished]); return (react_1.default.createElement(MigrationContext.Provider, { value: value }, children)); }; var isResultSetError = function (r) { return !!r.error; }; //# sourceMappingURL=index.js.map