refacto(backend): regrouped config related handling
This commit is contained in:
parent
ca47c41c69
commit
efaa4b795c
@ -1,4 +1,4 @@
|
|||||||
const config = require("./config");
|
const config = require("./config/config");
|
||||||
|
|
||||||
class WhiteboardServerSideInfo {
|
class WhiteboardServerSideInfo {
|
||||||
static defaultScreenResolution = { w: 1000, h: 1000 };
|
static defaultScreenResolution = { w: 1000, h: 1000 };
|
||||||
|
@ -1,12 +1,8 @@
|
|||||||
const util = require("util");
|
const util = require("util");
|
||||||
|
|
||||||
const {
|
const { getDefaultConfig, getConfig, deepMergeConfigs, isConfigValid } = require("./utils");
|
||||||
getArgs,
|
|
||||||
getDefaultConfig,
|
const { getArgs } = require("./../utils");
|
||||||
getConfig,
|
|
||||||
deepMergeConfigs,
|
|
||||||
isConfigValid,
|
|
||||||
} = require("./utils");
|
|
||||||
|
|
||||||
const defaultConfig = getDefaultConfig();
|
const defaultConfig = getDefaultConfig();
|
||||||
|
|
92
scripts/config/utils.js
Normal file
92
scripts/config/utils.js
Normal file
@ -0,0 +1,92 @@
|
|||||||
|
const path = require("path");
|
||||||
|
const fs = require("fs");
|
||||||
|
const yaml = require("js-yaml");
|
||||||
|
|
||||||
|
const Ajv = require("ajv");
|
||||||
|
const ajv = new Ajv({ allErrors: true });
|
||||||
|
|
||||||
|
const configSchema = require("./config-schema.json");
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Load a yaml config file from a given path.
|
||||||
|
*
|
||||||
|
* @param path
|
||||||
|
* @return {Object}
|
||||||
|
*/
|
||||||
|
function getConfig(path) {
|
||||||
|
return yaml.safeLoad(fs.readFileSync(path, "utf8"));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check that a config object is valid.
|
||||||
|
*
|
||||||
|
* @param {Object} config Config object
|
||||||
|
* @param {boolean} warn Should we warn in console for errors
|
||||||
|
* @return {boolean}
|
||||||
|
*/
|
||||||
|
function isConfigValid(config, warn = true) {
|
||||||
|
const validate = ajv.compile(configSchema);
|
||||||
|
const isValidAgainstSchema = validate(config);
|
||||||
|
|
||||||
|
if (!isValidAgainstSchema && warn) console.warn(validate.errors);
|
||||||
|
|
||||||
|
let structureIsValid = false;
|
||||||
|
try {
|
||||||
|
structureIsValid = config.frontend.performance.pointerEventsThrottling.some(
|
||||||
|
(item) => item.fromNbUser === 0
|
||||||
|
);
|
||||||
|
} catch (e) {
|
||||||
|
if (!e instanceof TypeError) {
|
||||||
|
throw e;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!structureIsValid && warn)
|
||||||
|
console.warn(
|
||||||
|
"At least one item under frontend.performance.pointerEventsThrottling" +
|
||||||
|
"must have fromNbUser set to 0"
|
||||||
|
);
|
||||||
|
|
||||||
|
return isValidAgainstSchema && structureIsValid;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Load the default project config
|
||||||
|
* @return {Object}
|
||||||
|
*/
|
||||||
|
function getDefaultConfig() {
|
||||||
|
const defaultConfigPath = path.join(__dirname, "..", "..", "config.default.yml");
|
||||||
|
return getConfig(defaultConfigPath);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Deep merge of project config
|
||||||
|
*
|
||||||
|
* Objects are merged, not arrays
|
||||||
|
*
|
||||||
|
* @param baseConfig
|
||||||
|
* @param overrideConfig
|
||||||
|
* @return {Object}
|
||||||
|
*/
|
||||||
|
function deepMergeConfigs(baseConfig, overrideConfig) {
|
||||||
|
const out = {};
|
||||||
|
|
||||||
|
Object.entries(baseConfig).forEach(([key, val]) => {
|
||||||
|
out[key] = val;
|
||||||
|
if (overrideConfig.hasOwnProperty(key)) {
|
||||||
|
const overrideVal = overrideConfig[key];
|
||||||
|
if (typeof val === "object" && !Array.isArray(val) && val !== null) {
|
||||||
|
out[key] = deepMergeConfigs(val, overrideVal);
|
||||||
|
} else {
|
||||||
|
out[key] = overrideVal;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
return out;
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports.getConfig = getConfig;
|
||||||
|
module.exports.getDefaultConfig = getDefaultConfig;
|
||||||
|
module.exports.deepMergeConfigs = deepMergeConfigs;
|
||||||
|
module.exports.isConfigValid = isConfigValid;
|
@ -1,6 +1,6 @@
|
|||||||
const path = require("path");
|
const path = require("path");
|
||||||
|
|
||||||
const config = require("./config");
|
const config = require("./config/config");
|
||||||
const WhiteboardServerSideInfo = require("./WhiteboardServerSideInfo");
|
const WhiteboardServerSideInfo = require("./WhiteboardServerSideInfo");
|
||||||
|
|
||||||
function startBackendServer(port) {
|
function startBackendServer(port) {
|
||||||
|
@ -1,12 +1,3 @@
|
|||||||
const path = require("path");
|
|
||||||
const fs = require("fs");
|
|
||||||
const yaml = require("js-yaml");
|
|
||||||
|
|
||||||
const Ajv = require("ajv");
|
|
||||||
const ajv = new Ajv({ allErrors: true });
|
|
||||||
|
|
||||||
const configSchema = require("./config-schema.json");
|
|
||||||
|
|
||||||
function getArgs() {
|
function getArgs() {
|
||||||
const args = {};
|
const args = {};
|
||||||
process.argv.slice(2, process.argv.length).forEach((arg) => {
|
process.argv.slice(2, process.argv.length).forEach((arg) => {
|
||||||
@ -26,85 +17,4 @@ function getArgs() {
|
|||||||
return args;
|
return args;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* TODO
|
|
||||||
*
|
|
||||||
* @param path
|
|
||||||
* @return {any}
|
|
||||||
*/
|
|
||||||
function getConfig(path) {
|
|
||||||
return yaml.safeLoad(fs.readFileSync(path, "utf8"));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* TODO
|
|
||||||
* @param config
|
|
||||||
* @param warn
|
|
||||||
* @return {*}
|
|
||||||
*/
|
|
||||||
function isConfigValid(config, warn = true) {
|
|
||||||
const validate = ajv.compile(configSchema);
|
|
||||||
const isValidAgainstSchema = validate(config);
|
|
||||||
|
|
||||||
if (!isValidAgainstSchema && warn) console.warn(validate.errors);
|
|
||||||
|
|
||||||
let structureIsValid = false;
|
|
||||||
try {
|
|
||||||
structureIsValid = config.frontend.performance.pointerEventsThrottling.some(
|
|
||||||
(item) => item.fromNbUser === 0
|
|
||||||
);
|
|
||||||
} catch (e) {
|
|
||||||
if (!e instanceof TypeError) {
|
|
||||||
throw e;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!structureIsValid && warn)
|
|
||||||
console.warn(
|
|
||||||
"At least one item under frontend.performance.pointerEventsThrottling" +
|
|
||||||
"must have fromNbUser set to 0"
|
|
||||||
);
|
|
||||||
|
|
||||||
return isValidAgainstSchema && structureIsValid;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* TODO
|
|
||||||
* @return {*}
|
|
||||||
*/
|
|
||||||
function getDefaultConfig() {
|
|
||||||
const defaultConfigPath = path.join(__dirname, "..", "config.default.yml");
|
|
||||||
return getConfig(defaultConfigPath);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* TODO
|
|
||||||
* Deep merges objects, not arrays.
|
|
||||||
*
|
|
||||||
* @param baseConfig
|
|
||||||
* @param overrideConfig
|
|
||||||
* @return {{}}
|
|
||||||
*/
|
|
||||||
function deepMergeConfigs(baseConfig, overrideConfig) {
|
|
||||||
const out = {};
|
|
||||||
|
|
||||||
Object.entries(baseConfig).forEach(([key, val]) => {
|
|
||||||
out[key] = val;
|
|
||||||
if (overrideConfig.hasOwnProperty(key)) {
|
|
||||||
const overrideVal = overrideConfig[key];
|
|
||||||
if (typeof val === "object" && !Array.isArray(val) && val !== null) {
|
|
||||||
out[key] = deepMergeConfigs(val, overrideVal);
|
|
||||||
} else {
|
|
||||||
out[key] = overrideVal;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
return out;
|
|
||||||
}
|
|
||||||
|
|
||||||
module.exports.getArgs = getArgs;
|
module.exports.getArgs = getArgs;
|
||||||
module.exports.getConfig = getConfig;
|
|
||||||
module.exports.getDefaultConfig = getDefaultConfig;
|
|
||||||
module.exports.deepMergeConfigs = deepMergeConfigs;
|
|
||||||
module.exports.isConfigValid = isConfigValid;
|
|
||||||
|
Loading…
Reference in New Issue
Block a user