216 lines
		
	
	
		
			4.9 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			216 lines
		
	
	
		
			4.9 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
/**
 | 
						|
 * @fileoverview Defines environment settings and globals.
 | 
						|
 * @author Elan Shanker
 | 
						|
 */
 | 
						|
 | 
						|
//------------------------------------------------------------------------------
 | 
						|
// Requirements
 | 
						|
//------------------------------------------------------------------------------
 | 
						|
 | 
						|
import globals from "globals";
 | 
						|
 | 
						|
//------------------------------------------------------------------------------
 | 
						|
// Helpers
 | 
						|
//------------------------------------------------------------------------------
 | 
						|
 | 
						|
/**
 | 
						|
 * Get the object that has difference.
 | 
						|
 * @param {Record<string,boolean>} current The newer object.
 | 
						|
 * @param {Record<string,boolean>} prev The older object.
 | 
						|
 * @returns {Record<string,boolean>} The difference object.
 | 
						|
 */
 | 
						|
function getDiff(current, prev) {
 | 
						|
    const retv = {};
 | 
						|
 | 
						|
    for (const [key, value] of Object.entries(current)) {
 | 
						|
        if (!Object.hasOwnProperty.call(prev, key)) {
 | 
						|
            retv[key] = value;
 | 
						|
        }
 | 
						|
    }
 | 
						|
 | 
						|
    return retv;
 | 
						|
}
 | 
						|
 | 
						|
const newGlobals2015 = getDiff(globals.es2015, globals.es5); // 19 variables such as Promise, Map, ...
 | 
						|
const newGlobals2017 = {
 | 
						|
    Atomics: false,
 | 
						|
    SharedArrayBuffer: false
 | 
						|
};
 | 
						|
const newGlobals2020 = {
 | 
						|
    BigInt: false,
 | 
						|
    BigInt64Array: false,
 | 
						|
    BigUint64Array: false,
 | 
						|
    globalThis: false
 | 
						|
};
 | 
						|
 | 
						|
const newGlobals2021 = {
 | 
						|
    AggregateError: false,
 | 
						|
    FinalizationRegistry: false,
 | 
						|
    WeakRef: false
 | 
						|
};
 | 
						|
 | 
						|
//------------------------------------------------------------------------------
 | 
						|
// Public Interface
 | 
						|
//------------------------------------------------------------------------------
 | 
						|
 | 
						|
/** @type {Map<string, import("../lib/shared/types").Environment>} */
 | 
						|
export default new Map(Object.entries({
 | 
						|
 | 
						|
    // Language
 | 
						|
    builtin: {
 | 
						|
        globals: globals.es5
 | 
						|
    },
 | 
						|
    es6: {
 | 
						|
        globals: newGlobals2015,
 | 
						|
        parserOptions: {
 | 
						|
            ecmaVersion: 6
 | 
						|
        }
 | 
						|
    },
 | 
						|
    es2015: {
 | 
						|
        globals: newGlobals2015,
 | 
						|
        parserOptions: {
 | 
						|
            ecmaVersion: 6
 | 
						|
        }
 | 
						|
    },
 | 
						|
    es2016: {
 | 
						|
        globals: newGlobals2015,
 | 
						|
        parserOptions: {
 | 
						|
            ecmaVersion: 7
 | 
						|
        }
 | 
						|
    },
 | 
						|
    es2017: {
 | 
						|
        globals: { ...newGlobals2015, ...newGlobals2017 },
 | 
						|
        parserOptions: {
 | 
						|
            ecmaVersion: 8
 | 
						|
        }
 | 
						|
    },
 | 
						|
    es2018: {
 | 
						|
        globals: { ...newGlobals2015, ...newGlobals2017 },
 | 
						|
        parserOptions: {
 | 
						|
            ecmaVersion: 9
 | 
						|
        }
 | 
						|
    },
 | 
						|
    es2019: {
 | 
						|
        globals: { ...newGlobals2015, ...newGlobals2017 },
 | 
						|
        parserOptions: {
 | 
						|
            ecmaVersion: 10
 | 
						|
        }
 | 
						|
    },
 | 
						|
    es2020: {
 | 
						|
        globals: { ...newGlobals2015, ...newGlobals2017, ...newGlobals2020 },
 | 
						|
        parserOptions: {
 | 
						|
            ecmaVersion: 11
 | 
						|
        }
 | 
						|
    },
 | 
						|
    es2021: {
 | 
						|
        globals: { ...newGlobals2015, ...newGlobals2017, ...newGlobals2020, ...newGlobals2021 },
 | 
						|
        parserOptions: {
 | 
						|
            ecmaVersion: 12
 | 
						|
        }
 | 
						|
    },
 | 
						|
    es2022: {
 | 
						|
        globals: { ...newGlobals2015, ...newGlobals2017, ...newGlobals2020, ...newGlobals2021 },
 | 
						|
        parserOptions: {
 | 
						|
            ecmaVersion: 13
 | 
						|
        }
 | 
						|
    },
 | 
						|
    es2023: {
 | 
						|
        globals: { ...newGlobals2015, ...newGlobals2017, ...newGlobals2020, ...newGlobals2021 },
 | 
						|
        parserOptions: {
 | 
						|
            ecmaVersion: 14
 | 
						|
        }
 | 
						|
    },
 | 
						|
    es2024: {
 | 
						|
        globals: { ...newGlobals2015, ...newGlobals2017, ...newGlobals2020, ...newGlobals2021 },
 | 
						|
        parserOptions: {
 | 
						|
            ecmaVersion: 15
 | 
						|
        }
 | 
						|
    },
 | 
						|
 | 
						|
    // Platforms
 | 
						|
    browser: {
 | 
						|
        globals: globals.browser
 | 
						|
    },
 | 
						|
    node: {
 | 
						|
        globals: globals.node,
 | 
						|
        parserOptions: {
 | 
						|
            ecmaFeatures: {
 | 
						|
                globalReturn: true
 | 
						|
            }
 | 
						|
        }
 | 
						|
    },
 | 
						|
    "shared-node-browser": {
 | 
						|
        globals: globals["shared-node-browser"]
 | 
						|
    },
 | 
						|
    worker: {
 | 
						|
        globals: globals.worker
 | 
						|
    },
 | 
						|
    serviceworker: {
 | 
						|
        globals: globals.serviceworker
 | 
						|
    },
 | 
						|
 | 
						|
    // Frameworks
 | 
						|
    commonjs: {
 | 
						|
        globals: globals.commonjs,
 | 
						|
        parserOptions: {
 | 
						|
            ecmaFeatures: {
 | 
						|
                globalReturn: true
 | 
						|
            }
 | 
						|
        }
 | 
						|
    },
 | 
						|
    amd: {
 | 
						|
        globals: globals.amd
 | 
						|
    },
 | 
						|
    mocha: {
 | 
						|
        globals: globals.mocha
 | 
						|
    },
 | 
						|
    jasmine: {
 | 
						|
        globals: globals.jasmine
 | 
						|
    },
 | 
						|
    jest: {
 | 
						|
        globals: globals.jest
 | 
						|
    },
 | 
						|
    phantomjs: {
 | 
						|
        globals: globals.phantomjs
 | 
						|
    },
 | 
						|
    jquery: {
 | 
						|
        globals: globals.jquery
 | 
						|
    },
 | 
						|
    qunit: {
 | 
						|
        globals: globals.qunit
 | 
						|
    },
 | 
						|
    prototypejs: {
 | 
						|
        globals: globals.prototypejs
 | 
						|
    },
 | 
						|
    shelljs: {
 | 
						|
        globals: globals.shelljs
 | 
						|
    },
 | 
						|
    meteor: {
 | 
						|
        globals: globals.meteor
 | 
						|
    },
 | 
						|
    mongo: {
 | 
						|
        globals: globals.mongo
 | 
						|
    },
 | 
						|
    protractor: {
 | 
						|
        globals: globals.protractor
 | 
						|
    },
 | 
						|
    applescript: {
 | 
						|
        globals: globals.applescript
 | 
						|
    },
 | 
						|
    nashorn: {
 | 
						|
        globals: globals.nashorn
 | 
						|
    },
 | 
						|
    atomtest: {
 | 
						|
        globals: globals.atomtest
 | 
						|
    },
 | 
						|
    embertest: {
 | 
						|
        globals: globals.embertest
 | 
						|
    },
 | 
						|
    webextensions: {
 | 
						|
        globals: globals.webextensions
 | 
						|
    },
 | 
						|
    greasemonkey: {
 | 
						|
        globals: globals.greasemonkey
 | 
						|
    }
 | 
						|
}));
 |