UNPKG

@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
"use strict"; 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;