@sugarcube/plugin-sql
Version:
Import and export Sugarcube data and queries from and to SQL databases.
90 lines (80 loc) • 2.23 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _fp = require("lodash/fp");
var _core = require("@sugarcube/core");
var _db = require("../db");
var _utils = require("../utils");
const plugin = async (envelope, {
cfg,
log,
stats
}) => {
const debug = (0, _fp.get)("sql.debug", cfg);
const engine = (0, _fp.get)("sql.engine", cfg);
const database = (0, _fp.get)("sql.database", cfg);
const host = (0, _fp.get)("sql.host", cfg);
const port = (0, _fp.get)("sql.port", cfg);
const user = (0, _fp.get)("sql.user", cfg);
const password = (0, _fp.get)("sql.password", cfg);
const queryFields = _core.utils.sToA(",", (0, _fp.get)("sql.query_fields", cfg));
const total = envelope.queries.length;
stats.count("total", total);
log.info(`Exporting ${total} queries.`);
let db;
if (engine === "postgres") db = (0, _db.connectPostgres)({
database,
host,
port,
user,
password,
debug
});
if (engine === "sqlite") db = (0, _db.connectSqlite)({
database: database === "sugarcube" ? `${database}.db` : database,
debug
}, log); // Fix the format of queries to use the new tags field.
const queries = envelope.queries.map(({
type,
term,
tags = [],
...rest
}) => {
const data = (0, _utils.flattenObj)(rest);
return {
type,
term,
tags: Object.keys(queryFields.length === 0 ? rest : (0, _fp.pick)(queryFields, data)).reduce((memo, key) => {
if (data[key] == null || data[key] === "") return memo;
return memo.concat([{
label: data[key],
description: key
}]);
}, []).concat(tags)
};
});
const errors = await db.queries.create(queries);
db.close();
errors.forEach(({
reason,
type,
term
}) => {
stats.fail({
type,
term,
reason
});
log.error(`Query ${type}/${term} failed to export: ${reason}`);
});
const success = queries.length - errors.length;
stats.count("success", success);
log.info(`Exported ${success} queries`);
return envelope;
};
plugin.argv = {};
plugin.desc = "Export queries into a database.";
var _default = plugin;
exports.default = _default;