@paroicms/server
Version:
The ParoiCMS server
151 lines • 6.5 kB
JavaScript
import { isObj } from "@paroicms/public-anywhere-lib";
export function toAppConf(conf) {
if (conf.thisServer) {
console.warn(`[WARNING] "thisServer" is deprecated, use "port", "publicPort", "adminUiPort" and "hostname" instead.`);
}
if (conf.log) {
console.warn(`[WARNING] "log" is deprecated, use "logLevel" and "logFile" instead.`);
}
if (conf.boPort) {
console.warn(`[WARNING] "boPort" is deprecated, use "adminUiPort" instead.`);
}
if (conf.devAccount) {
console.warn('[WARNING] "devAccount" is deprecated, use "localDevAccount" instead.');
}
const port = conf.port ?? conf.thisServer?.port;
if (!port)
throw new Error("missing port in the configuration");
const publicPort = conf.publicPort ?? conf.thisServer?.publicPort;
const adminUiPort = conf.adminUiPort ?? conf.boPort ?? conf.thisServer?.boPublicPort;
const hostName = conf.hostname ?? conf.thisServer?.hostName;
if (conf.clearImageCacheAfterStart && !conf.clearCacheAfterStart) {
throw new Error('"clearImageCacheAfterStart" can\'t be set when "clearCacheAfterStart" is not set');
}
if (conf.enableCache === false && conf.cacheTimeToIdle !== undefined) {
console.warn('[WARNING] "cacheTimeToIdle" is ignored when "enableCache" is false');
}
const rawCacheTimeToIdle = conf.enableCache === false ? "disabled" : (conf.cacheTimeToIdle ?? "30d");
if (!isCacheDuration(rawCacheTimeToIdle)) {
throw new Error(`Invalid cacheTimeToIdle: ${rawCacheTimeToIdle}`);
}
const cacheTimeToIdle = rawCacheTimeToIdle;
const base = {
port,
publicPort: publicPort ?? port,
adminUiPort: adminUiPort ?? publicPort ?? port,
hostname: hostName ?? undefined,
publicProtocol: conf.publicProtocol ?? (conf.thisServer?.https ? "https" : undefined) ?? "http",
logLevel: conf.logLevel ?? conf.log?.level ?? "info",
logFile: conf.logFile ?? conf.log?.file,
allowRobots: conf.allowRobots,
immutableAssets: conf.immutableAssets ?? !!conf.enableCache,
cacheTimeToIdle,
clearCacheAfterStart: conf.clearCacheAfterStart,
clearImageCacheAfterStart: conf.clearImageCacheAfterStart,
graphqlDevTools: conf.graphqlDevTools,
generateMissingDatabases: conf.generateMissingDatabases,
googleAuth: conf.googleAuth,
imageProcessor: conf.imageProcessor
? formatImageProcessor(conf.imageProcessor)
: {
allowConcurrency: false,
},
localDevAccount: conf.localDevAccount ?? conf.devAccount,
platformAdminAccounts: conf.platformAdminAccounts,
plugins: createPluginStaticConfigurations(conf),
httpRedirections: conf.httpRedirections,
};
if ("singleSite" in conf) {
return {
kind: "singleSite",
...base,
singleSite: conf.singleSite,
};
}
const sitePacks = conf.sitePacks.map((item) => {
if ("serveOn" in item) {
return item;
}
console.warn(`[WARNING] "serveAs" configuration is deprecated, please rename it to "serveOn" in pack '${item.packName}'`);
const { serveAs, ...rest } = item;
return { ...rest, serveOn: serveAs };
});
return {
kind: "multisite",
...base,
platform: conf.platform,
sitePacks,
};
}
function isCacheDuration(value) {
if (value === "disabled" || value === "infinite")
return true;
return /^[0-9]+d$/.test(value);
}
function formatImageProcessor(conf) {
if ("oneSharpAtATime" in conf) {
console.warn('[WARNING] "oneSharpAtATime" is deprecated, use "allowConcurrency" instead (inverse the value)');
return {
allowConcurrency: !conf.oneSharpAtATime,
cpuCoresPerFile: conf.cpuCoresPerFile,
};
}
return conf;
}
function createPluginStaticConfigurations(conf) {
let plugins = conf.plugins ?? [];
if (!Array.isArray(plugins)) {
console.warn(`[WARNING] "plugins" as object is deprecated. Please convert it to the array format.`);
plugins = Object.entries(plugins).map(([name, configuration]) => ({ name, configuration }));
}
const result = {};
if (conf.awsSesMail) {
console.warn('[WARNING] "awsSesMail" is deprecated, use "@paroicms/send-mail-aws-ses-plugin" instead.');
if (!conf.awsSesMail.disabled &&
!plugins.find((p) => p.name === "@paroicms/send-mail-aws-ses-plugin")) {
result["@paroicms/send-mail-aws-ses-plugin"] = {
platform: true,
configuration: {
from: conf.awsSesMail.from,
awsAccessKeyId: conf.awsSesMail.accessKeyId,
awsSecretAccessKey: conf.awsSesMail.secretAccessKey,
awsRegion: conf.awsSesMail.region,
},
};
}
}
if (conf.googleRecaptcha) {
console.warn('[WARNING] "googleRecaptcha" configuration is deprecated, set it in "@paroicms/contact-form-plugin" instead.');
if (!conf.googleRecaptcha.disabled) {
let pluginConf = plugins.find((p) => p.name === "@paroicms/contact-form-plugin");
if (!pluginConf) {
pluginConf = {
name: "@paroicms/contact-form-plugin",
configuration: {},
};
plugins.push(pluginConf);
}
if (!pluginConf.configuration) {
pluginConf.configuration = {};
}
pluginConf.configuration.googleRecaptchaSiteKey = conf.googleRecaptcha.siteKey;
pluginConf.configuration.googleRecaptchaSecretKey = conf.googleRecaptcha.secretKey;
}
}
for (const pluginConf of plugins) {
const { name, disabled, platform, configuration } = pluginConf;
if (result[name])
throw new Error(`Plugin "${name}" already has a configuration`);
if (disabled)
continue;
if (configuration && "adminUi" in configuration && !isObj(configuration.adminUi)) {
throw new Error(`Invalid plugin configuration for plugin "${name}": "adminUi" should be an object`);
}
result[name] = {
platform: platform ?? false,
configuration: configuration ?? {},
};
}
return result;
}
//# sourceMappingURL=app-conf-formatter.js.map