/** * @fileoverview Defines environment settings and globals. * @author Elan Shanker */ //------------------------------------------------------------------------------ // Requirements //------------------------------------------------------------------------------ import globals from 'globals'; //------------------------------------------------------------------------------ // Helpers //------------------------------------------------------------------------------ /** * Get the object that has difference. * @param {Record} current The newer object. * @param {Record} prev The older object. * @returns {Record} The difference object. */ function getDiff(current, prev) { const retv = {}; for (const [key, value] of Object.entries(current)) { if (!Object.hasOwn(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} */ 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, }, }) );