@rsksmart/rif-storage-pinning
Version:
Application for providing your storage space to other to use in exchange of RIF Tokens
62 lines (61 loc) • 2.61 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.BigNumberStringType = exports.sequelizeFactory = void 0;
const sequelize_typescript_1 = require("sequelize-typescript");
const path_1 = __importDefault(require("path"));
const sql_formatter_1 = __importDefault(require("sql-formatter"));
const fs_1 = __importDefault(require("fs"));
const config_1 = __importDefault(require("config"));
const bignumber_js_1 = __importDefault(require("bignumber.js"));
const logger_1 = require("./logger");
const logger = logger_1.loggingFactory('db');
function formatLogs(msg) {
const result = msg.match(/^Executing \(([\w\d-]+)\): (.*)/m);
if (!result) {
return msg;
}
return `Executing SQL (${result[1]}):\n${sql_formatter_1.default.format(result[2])}`;
}
function sequelizeFactory(dbPath) {
dbPath = dbPath !== null && dbPath !== void 0 ? dbPath : config_1.default.get('db');
logger.verbose(`Using DB path: ${dbPath}`);
fs_1.default.mkdirSync(path_1.default.dirname(dbPath), { recursive: true });
const dbSettings = {
models: [path_1.default.join(__dirname, '/**/*.model.+(ts|js)')],
modelMatch: (filename, member) => {
return filename.substring(0, filename.indexOf('.model')) === member.toLowerCase();
},
logging: (msg) => logger.debug(formatLogs(msg)),
// @ts-ignore: Not typed in upstream even though supported
transactionType: 'IMMEDIATE'
};
const sequelize = new sequelize_typescript_1.Sequelize(`sqlite:${dbPath}`, dbSettings);
// Set up data relationships
const models = sequelize.models;
Object.keys(models).forEach(name => {
if ('associate' in models[name]) {
models[name].associate(models);
}
});
return sequelize;
}
exports.sequelizeFactory = sequelizeFactory;
function BigNumberStringType(propName) {
return {
type: sequelize_typescript_1.DataType.STRING(),
get() {
return new bignumber_js_1.default(this.getDataValue(propName));
},
set(value) {
const n = new bignumber_js_1.default(value);
if (isNaN(n.toNumber())) {
throw new Error(`${this.constructor.name + ' ' || ''}Model Error: ${propName} should be a one of [number, string(number), BigNumber]`);
}
this.setDataValue(propName, n.toString(10));
}
};
}
exports.BigNumberStringType = BigNumberStringType;