@sugarcube/plugin-sql
Version:
Import and export Sugarcube data and queries from and to SQL databases.
117 lines (86 loc) • 4.16 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.connectSqlite = exports.connectPostgres = void 0;
var _fs = _interopRequireDefault(require("fs"));
var _path = _interopRequireDefault(require("path"));
var _fp = require("lodash/fp");
var _pgPromise = _interopRequireWildcard(require("pg-promise"));
var _pgMonitor = _interopRequireDefault(require("pg-monitor"));
var _betterSqlite = _interopRequireDefault(require("better-sqlite3"));
var _queries = _interopRequireDefault(require("./postgres/queries"));
var _units = _interopRequireDefault(require("./postgres/units"));
var _queries2 = _interopRequireDefault(require("./sqlite/queries"));
var _units2 = _interopRequireDefault(require("./sqlite/units"));
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
const sql = (engine, repo) => {
const queries = {};
const dir = _path.default.join(__dirname, "../sql", engine, repo);
_fs.default.readdirSync(dir).filter(file => /\.sql$/.test(file)).forEach(file => {
const queryName = `${(0, _fp.camelCase)(_path.default.basename(file, ".sql"))}Query`;
if (engine === "sqlite") queries[queryName] = _fs.default.readFileSync(_path.default.join(dir, file)).toString();
if (engine === "postgres") {
const qf = new _pgPromise.QueryFile(_path.default.join(dir, file), {
minify: true,
compress: true
});
if (qf.error) {
throw new Error(qf.error);
}
queries[queryName] = qf;
}
});
return queries;
}; // I load the query files for postgres here to avoid duplicate query file creation.
const pgQueries = {
queries: sql("postgres", "queries"),
units: sql("postgres", "units")
};
let pgp;
const initOptions = {
capSQL: true,
// eslint-disable-next-line no-unused-vars
extend(obj, dc) {
// eslint-disable-next-line no-param-reassign
obj.queries = new _queries.default(obj, pgp, pgQueries.queries); // eslint-disable-next-line no-param-reassign
obj.units = new _units.default(obj, pgp, pgQueries.units, {
queriesStore: new _queries.default(obj, pgp, pgQueries.queries)
}); // eslint-disable-next-line no-param-reassign
obj.close = () => pgp.end();
}
};
const connectPostgres = ({
debug,
...config
}) => {
pgp = (0, _pgPromise.default)(initOptions);
const db = pgp(config);
if (debug) _pgMonitor.default.attach(initOptions);
return db;
};
exports.connectPostgres = connectPostgres;
const connectSqlite = ({
debug,
database
}, log) => {
const db = new _betterSqlite.default(database, debug ? {
verbose: log.debug
} : {});
db.pragma("foreign_keys = ON");
const queriesStore = new _queries2.default(db, sql("sqlite", "queries"));
return {
queries: queriesStore,
units: new _units2.default(db, sql("sqlite", "units"), {
queriesStore
}),
checkpoint: () => db.checkpoint(),
close: () => {
db.checkpoint();
db.close();
}
};
};
exports.connectSqlite = connectSqlite;