| /** | |
|  * @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 | |
|     } | |
| }));
 |