UNPKG

pg-altergen

Version:

A Node.js CLI tool for managing PostgreSQL schema changes by organizing database objects in SQL files and generating ordered migration scripts with automatic dependency resolution.

90 lines (63 loc) 2.56 kB
const fs = require('fs'); const path = require('path'); const sql_directory = path.join(__dirname, '../sql'); const { fromRoot } = require('./paths'); function listfiles (type, sourcetype='source_dir', uniquename=false) { // source (source_dir, additional_source_dirs, all) var dirs = [ fromRoot('src/sql') ]; var files = []; // source directories if ( sourcetype === 'source_dir') { // only source directory dirs = dirs.concat([ config[ 'source_dir' ] ]); } else if (sourcetype === 'additional_source_dirs') { // additional source directories dirs = dirs.concat(config['additional_source_dirs']); } else if (sourcetype === 'all') { // all source directories dirs = dirs.concat([ config[ 'source_dir' ] ].concat(config['additional_source_dirs'])); } else { throw new Error('Invalid source type: ' + sourcetype); } let items = null; let directory = null; for (let dir of dirs) { if(fs.existsSync(dir)) { let folder = SQL_OBJECT_TYPES[type]; if (folder === undefined) { throw new Error('Invalid type: ' + type); } directory = path.join(dir, folder); if(!fs.existsSync(directory) || !directory) { continue; } items = fs.readdirSync(directory); items.sort(); for (let item of items) { // TODO unique name of file not path files.push(path.join(directory, item)); } } } // remove duplicates base on file name and keep the last one // files = files.reverse().filter((file, index, self) => { // console.log('file', file); // // it has to be a full name of the file // return self.findIndex(t => // }); return files; } /** * Writes `content` to `filePath`, creating any missing directories along the way. * * @param {string} filePath — e.g. './some/nested/folder/file.txt' * @param {string|Buffer} content * @param {Object} [options] — passed through to fs.writeFileSync */ function writeFileRecursive(filePath, content, options = {}) { // 1. Figure out the directory part const dir = path.dirname(filePath); // 2. Make the directory (and parents) if it doesn’t exist fs.mkdirSync(dir, { recursive: true }); // 3. Write the file fs.writeFileSync(filePath, content, options); } module.exports.listfiles = listfiles; module.exports.writeFileRecursive = writeFileRecursive;