mirror of
https://github.com/TryGhost/Ghost.git
synced 2025-02-03 23:00:14 -05:00
6ee94f66b4
refs https://linear.app/tryghost/issue/CORE-35/refactor-route-and-redirect-settings
refs e457fd5fe0 (diff-b292e8480eee007786cc602f55ed05006a06b8da9fe6934d51fbef8328013278R36)
- There were two separate instances of the SettingsPathManager in route-settings and settings-loader causing the configured paths missmatching on test environment. Because of this missmatch, uploading and resetting the routes.yaml file didn't work!
84 lines
2.6 KiB
JavaScript
84 lines
2.6 KiB
JavaScript
const fs = require('fs-extra');
|
|
const debug = require('@tryghost/debug')('frontend:services:settings:settings-loader');
|
|
const tpl = require('@tryghost/tpl');
|
|
const errors = require('@tryghost/errors');
|
|
const validate = require('./validate');
|
|
|
|
const messages = {
|
|
settingsLoaderError: `Error trying to load YAML setting for {setting} from '{path}'.`
|
|
};
|
|
|
|
class SettingsLoader {
|
|
/**
|
|
* @param {Object} options
|
|
* @param {Function} options.parseYaml yaml parser
|
|
* @param {String} options.settingFilePath routes settings file path
|
|
*/
|
|
constructor({parseYaml, settingFilePath}) {
|
|
this.parseYaml = parseYaml;
|
|
|
|
this.settingFilePath = settingFilePath;
|
|
}
|
|
|
|
/**
|
|
* Functionally same as loadSettingsSync with exception of loading
|
|
* settings asynchronously. This method is used at new places to read settings
|
|
* to prevent blocking the eventloop
|
|
* @returns {Promise<Object>} settingsFile
|
|
*/
|
|
async loadSettings() {
|
|
try {
|
|
const file = await fs.readFile(this.settingFilePath, 'utf8');
|
|
debug('routes settings file found for:', this.settingFilePath);
|
|
|
|
const object = this.parseYaml(file);
|
|
debug('YAML settings file parsed:', this.settingFilePath);
|
|
|
|
return validate(object);
|
|
} catch (err) {
|
|
if (errors.utils.isIgnitionError(err)) {
|
|
throw err;
|
|
}
|
|
|
|
throw new errors.GhostError({
|
|
message: tpl(messages.settingsLoaderError, {
|
|
setting: 'routes',
|
|
path: this.settingFilePath
|
|
}),
|
|
err: err
|
|
});
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Reads the routes.yaml settings file and passes the
|
|
* file to the YAML parser which then returns a JSON object.
|
|
*
|
|
* @returns {Object} settingsFile in following format: {routes: {}, collections: {}, resources: {}}
|
|
*/
|
|
loadSettingsSync() {
|
|
try {
|
|
const file = fs.readFileSync(this.settingFilePath, 'utf8');
|
|
debug('routes settings file found for:', this.settingFilePath);
|
|
|
|
const object = this.parseYaml(file);
|
|
debug('YAML settings file parsed:', this.settingFilePath);
|
|
|
|
return validate(object);
|
|
} catch (err) {
|
|
if (errors.utils.isIgnitionError(err)) {
|
|
throw err;
|
|
}
|
|
|
|
throw new errors.GhostError({
|
|
message: tpl(messages.settingsLoaderError, {
|
|
setting: 'routes',
|
|
path: this.settingFilePath
|
|
}),
|
|
err: err
|
|
});
|
|
}
|
|
}
|
|
}
|
|
|
|
module.exports = SettingsLoader;
|