ddl-manager
Version:
store postgres procedures and triggers in files
116 lines • 4.24 kB
JavaScript
;
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