Ghost/ghost/settings-path-manager/lib/SettingsPathManager.js

48 lines
1.6 KiB
JavaScript
Raw Permalink Normal View History

const path = require('path');
const tpl = require('@tryghost/tpl');
const format = require('date-fns/format');
const {IncorrectUsageError} = require('@tryghost/errors');
const messages = {
incorrectPathsParameter: 'Attempted to setup settings path manager without paths values.'
};
class SettingsPathManager {
/**
*
* @param {Object} options
* @param {String[]} options.paths - file location paths ordered in priority by where to locate them first
* @param {String} options.type setting file type, e.g: 'routes' or 'redirects'
* @param {String[]} [options.extensions] the supported file extensions with 'yaml' and 'json' defaults. Note 'yml' extension is ignored on purpose
*/
constructor({type, paths, extensions = ['yaml', 'json']}) {
if (!paths || !paths.length) {
throw new IncorrectUsageError({
message: tpl(messages.incorrectPathsParameter)
});
}
this.type = type;
this.filename = type;
this.paths = paths;
this.defaultPath = paths[0];
this.extensions = extensions;
this.defaultExtension = extensions[0];
}
getDefaultFilePath() {
const settingsFolder = this.defaultPath;
return path.join(settingsFolder, `${this.filename}.${this.defaultExtension}`);
}
getBackupFilePath() {
const settingsFolder = this.defaultPath;
const dateStamp = format(new Date(), 'yyyy-MM-dd-HH-mm-ss');
return path.join(settingsFolder, `${this.filename}-${dateStamp}.${this.defaultExtension}`);
}
}
module.exports = SettingsPathManager;