UNPKG

@sugarcube/plugin-sql

Version:

Import and export Sugarcube data and queries from and to SQL databases.

90 lines (80 loc) 2.23 kB
"use strict"; 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;