UNPKG

ddl-manager

Version:

store postgres procedures and triggers in files

116 lines 4.24 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); __setModuleDefault(result, mod); return result; }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.FileReader = void 0; const fs_1 = __importDefault(require("fs")); const glob_1 = __importDefault(require("glob")); const events_1 = require("events"); const parser_1 = require("../parser"); const File_1 = require("./File"); const FilesState_1 = require("./FilesState"); const utils_1 = require("./utils"); const helperFunctions = __importStar(require("../database/postgres/helper-functions")); class FileReader extends events_1.EventEmitter { constructor(rootFolders) { super(); this.fileParser = new parser_1.FileParser(); this.state = new FilesState_1.FilesState(); this.rootFolders = rootFolders; for (const [name, fileContent] of Object.entries(helperFunctions)) { const file = new File_1.File({ name: name + ".sql", folder: "HELPERS", path: `HELPERS/${name}.sql`, content: this.fileParser.parseSql(fileContent) }); this.state.addFile(file); } } static read(rootFolders, onError) { const reader = new FileReader(rootFolders); if (onError) { reader.on("error", onError); } reader.read(); return reader.state; } parseFile(rootFolderPath, filePath) { const sqlFile = this.fileParser.parseFile(filePath); const subPath = utils_1.getSubPath(rootFolderPath, filePath); const fileName = filePath.split(/[/\\]/).pop(); return new File_1.File({ name: fileName, folder: rootFolderPath, path: utils_1.formatPath(subPath), content: sqlFile }); } read() { for (const folderPath of this.rootFolders) { this.readFolder(folderPath); } } readFolder(folderPath) { if (!fs_1.default.existsSync(folderPath)) { throw new Error(`folder "${folderPath}" not found`); } // fill this.files, make array of object: // { // name: "some-file-name.sql", // path: "/path/to/some-file-name.sql", // content: { // functions: [], // triggers: [] // } // } const files = glob_1.default.sync(folderPath.replace(/\\/g, "/") + "/**/*.sql"); files.forEach(filePath => { // ignore dirs with *.sql name // ./dir.sql/file const stat = fs_1.default.lstatSync(filePath); if (!stat.isFile()) { return; } let file; try { file = this.parseFile(folderPath, filePath); if (file) { this.state.addFile(file); } } catch (err) { this.emitError({ subPath: filePath.slice(folderPath.length + 1), err }); } }); } emitError(params) { const outError = utils_1.prepareError(params.err, params.subPath); this.emit("error", outError); } } exports.FileReader = FileReader; //# sourceMappingURL=FileReader.js.map