Repository: digitalocean/nginxconfig.io
File: src/nginxconfig/util/vue_backwards_compatibility.js (JavaScript)

Code before:

// Migrate old logging settings to new ones
const migrateLogging = data => {
    if (Object.keys(data).length === 0) {
        // Not having anything to migrate, so skip this logic
    }

    const globalLogging = 'logging' in data.global && isObject(data.global.logging) ? data.global.logging : {};

    // global access_log
    const [globalAccessLogPath, ...globalAccessLogParameters] = (globalLogging.accessLog || accessLogPathDefault).split(' ');
    const globalAccessLogEnabled = 
        !('accessLog' in globalLogging) || // accessLog was enabled by default and might not appear at all
        (globalAccessLogPath !== '' && globalAccessLogPath !== 'off'); // *or* someone turned it off explicitly

    // global error_log
    const [globalErrorLogPath, ...globalErrorLogLevel] = (globalLogging.errorLog || `${errorLogPathDefault} ${errorLogLevelDefault}`).split(' ');
    const globalErrorLogEnabled = 
        !('errorLog' in globalLogging) || // errorLog was enabled by default and might not appear at all
        globalErrorLogPath !== '/dev/null'; // *or* someone turned it off explicitly

    // set global access_log / error_log files for every domain UNLESS it was explicitly
    // enabled for the domain
    for (const key in data.domains) {
        if (!Object.prototype.hasOwnProperty.call(data.domains, key)) continue;

        const perDomainServer = 'server' in data.domains[key] && isObject(data.domains[key].server) ? data.domains[key].server : {
            domain: serverDomainDefault,
        };
        const perDomainLogging = 'logging' in data.domains[key] && isObject(data.domains[key].logging) ? data.domains[key].logging : {};

        // access_log
        let accessLogEnabled = globalAccessLogEnabled,
            accessLogPath = globalAccessLogPath;
        const accessLogParameters = globalAccessLogParameters.join(' ') || accessLogParamsDefault;

        const perDomainAccessLogEnabled = !!perDomainLogging.accessLog;
        if (perDomainAccessLogEnabled) {
            accessLogEnabled = true;
            accessLogPath = `/var/log/nginx/${perDomainServer.domain}.access.log`;
        }

        // error_log
        let errorLogEnabled = globalErrorLogEnabled,
            errorLogPath = globalErrorLogPath;
        const errorLogLevel = globalErrorLogLevel.join(' ') || errorLogLevelDefault;
        
        const perDomainErrorLogEnabled = !!perDomainLogging.errorLog;
        if (perDomainErrorLogEnabled) {
            errorLogEnabled = true;
            errorLogPath = `/var/log/nginx/${perDomainServer.domain}.error.log`;

Review comment (suggestion):
Apply the domain default here seems dangerous -- you could have `data.domains[key].server` being an object, but without the `domain` key? (e.g. <https://www.digitalocean.com/community/tools/nginx?domains.0.server.wwwSubdomain=true>)

Code after:

// Migrate old logging settings to new ones
const migrateLogging = data => {
    if (Object.keys(data).length === 0) return;

    const globalLogging = 'logging' in data.global && isObject(data.global.logging) ? data.global.logging : {};

    // global access_log
    const [globalAccessLogPath, ...globalAccessLogParameters] = (globalLogging.accessLog || accessLogPathDefault).split(' ');
    const globalAccessLogEnabled = 
        !('accessLog' in globalLogging) || // accessLog was enabled by default and might not appear at all
        (globalAccessLogPath !== '' && globalAccessLogPath !== 'off'); // *or* someone turned it off explicitly

    // global error_log
    const [globalErrorLogPath, ...globalErrorLogLevel] = (globalLogging.errorLog || `${errorLogPathDefault} ${errorLogLevelDefault}`).split(' ');
    const globalErrorLogEnabled = 
        !('errorLog' in globalLogging) || // errorLog was enabled by default and might not appear at all
        (globalErrorLogPath !== '' && globalErrorLogPath !== errorLogPathDisabled); // *or* someone turned it off explicitly

    // set global access_log / error_log files for every domain UNLESS it was explicitly
    // enabled for the domain
    for (const key in data.domains) {
        if (!Object.prototype.hasOwnProperty.call(data.domains, key)) continue;

        const perDomainServer = {
            domain: serverDomainDefault,
            ...('server' in data.domains[key] && isObject(data.domains[key].server) ? data.domains[key].server : {}),
        };
        const perDomainLogging = 'logging' in data.domains[key] && isObject(data.domains[key].logging) ? data.domains[key].logging : {};

        // access_log
        let accessLogEnabled = globalAccessLogEnabled,
            accessLogPath = globalAccessLogPath;
        const accessLogParameters = globalAccessLogParameters.join(' ') || accessLogParamsDefault;

        const perDomainAccessLogEnabled = !!perDomainLogging.accessLog;
        if (perDomainAccessLogEnabled) {
            accessLogEnabled = true;
            accessLogPath = accessLogPath.replace(/([^/]+)\.log$/, `${perDomainServer.domain}.$1.log`);
        }

        // error_log
        let errorLogEnabled = globalErrorLogEnabled,
            errorLogPath = globalErrorLogPath;
        const errorLogLevel = globalErrorLogLevel.join(' ') || errorLogLevelDefault;
        
        const perDomainErrorLogEnabled = !!perDomainLogging.errorLog;
        if (perDomainErrorLogEnabled) {
            errorLogEnabled = true;
            errorLogPath = errorLogPath.replace(/([^/]+)\.log$/, `${perDomainServer.domain}.$1.log`);
        }