UNPKG

@paroicms/server

Version:
151 lines 6.5 kB
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