diff --git a/packages/maker.js/src/core/maker.ts b/packages/maker.js/src/core/maker.ts index 95dc895c..c0b0c5eb 100644 --- a/packages/maker.js/src/core/maker.ts +++ b/packages/maker.js/src/core/maker.ts @@ -29,33 +29,36 @@ namespace MakerJs { */ var EPSILON = Number.EPSILON || Math.pow(2, -52); - /** - * @private - */ - function tryEval(name: string) { - try { - var value = eval(name); - return value; - } - catch (e) { } - return; - } - /** * @private */ function detectEnvironment() { + + // Use a function to get the global object to avoid TypeScript checking specific globals + var getGlobal = function(): any { + // In browsers and workers, 'self' refers to the global scope + if (typeof self !== 'undefined') { return self; } + // In Node.js, 'global' refers to the global scope + if (typeof global !== 'undefined') { return global; } + // Fallback for older environments + return this || {}; + }; + + var globalObj = getGlobal(); - if (tryEval('WorkerGlobalScope') && tryEval('self')) { + // Check for Web Worker environment + // Workers have 'self' and 'WorkerGlobalScope' but not 'window' + if (globalObj['self'] && globalObj['WorkerGlobalScope'] && !globalObj['window']) { return environmentTypes.WebWorker; } - if (tryEval('window') && tryEval('document')) { + // Check for Browser UI environment + if (globalObj['window'] && globalObj['document']) { return environmentTypes.BrowserUI; } //put node last since packagers usually add shims for it - if (tryEval('global') && tryEval('process')) { + if (globalObj['global'] && globalObj['process']) { return environmentTypes.NodeJs; }