@golemio/cli
Version:
Collection of executables intended for use with Golemio services and modules
81 lines • 3.44 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.extractDangerousWords = exports.importPostgresData = void 0;
const fs_1 = __importDefault(require("fs"));
const path_1 = __importDefault(require("path"));
const fast_glob_1 = __importDefault(require("fast-glob"));
const pg_1 = require("pg");
const pg_format_1 = __importDefault(require("pg-format"));
const gluegun_1 = require("gluegun");
const DANGEROUS_WORDS = ["rabin", "golem"];
/**
* Import SQL dumps
*/
const importPostgresData = async (defaultSchema) => {
var _a;
const files = fast_glob_1.default.sync((_a = process.env.SQL_DUMP_FILES) !== null && _a !== void 0 ? _a : " ");
if (files.length < 1) {
gluegun_1.print.error(`No SQL data to import`);
process.exitCode = 1;
return;
}
const pool = new pg_1.Pool({ connectionString: process.env.POSTGRES_CONN });
const client = await pool.connect();
let currentDirName = "";
let originalSearchPaths = undefined;
for (const file of files) {
if (path_1.default.dirname(file) !== currentDirName) {
gluegun_1.print.divider();
currentDirName = path_1.default.dirname(file);
originalSearchPaths =
originalSearchPaths || (await client.query("SHOW search_path")).rows[0].search_path.split(",");
let searchPaths;
const schema = defaultSchema ||
(() => {
const configLocation = path_1.default.resolve(currentDirName, ".config.json");
return fs_1.default.existsSync(configLocation) && JSON.parse(fs_1.default.readFileSync(configLocation).toString("utf8")).schema;
})();
if (schema && !originalSearchPaths.some((path) => new RegExp(`\\b${schema}\\b`, "i").test(path))) {
searchPaths = [schema, ...originalSearchPaths];
for (let path of searchPaths) {
if (path.indexOf('"') !== 0) {
path = `"${path.trim()}"`;
}
}
gluegun_1.print.highlight(`➔ using schema '${schema}'`);
}
else {
searchPaths = originalSearchPaths;
gluegun_1.print.highlight(`➔ using original schema`);
}
if (searchPaths.length > 0) {
await client.query((0, pg_format_1.default)("SET search_path TO %s", searchPaths));
}
}
gluegun_1.print.info(`Restoring SQL data from '${file}'`);
const query = fs_1.default.readFileSync(file).toString();
try {
await client.query(query);
}
catch (err) {
if (err instanceof Error) {
gluegun_1.print.error(`${gluegun_1.print.xmark} ${err.message} `);
}
process.exitCode = 1;
break;
}
}
client.release();
pool.end();
};
exports.importPostgresData = importPostgresData;
const extractDangerousWords = (str) => {
var _a;
const regexp = new RegExp(DANGEROUS_WORDS.join("|"), "gi");
return (_a = str.match(regexp)) !== null && _a !== void 0 ? _a : [];
};
exports.extractDangerousWords = extractDangerousWords;
//# sourceMappingURL=import-db-data.utils.js.map