UNPKG

@golemio/cli

Version:

Collection of executables intended for use with Golemio services and modules

81 lines 3.44 kB
"use strict"; 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