react-native-expo-raw-sql-migrations
Version:
Migration tool to use raw sql for SQLite / react-nativ expo.
121 lines • 4.98 kB
JavaScript
;
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