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