UNPKG

@tripsnek/tmf

Version:

TypeScript Modeling Framework - A TypeScript port of the Eclipse Modeling Framework (EMF)

85 lines 9.93 kB
/** * Enables enviromental checks for conditional imports, ensuring * that Node functionality in bundle that is not used does not cause * issues in browsers or WebView */ export class Environment { static _isNode = null; static _isBrowser = null; static get isNode() { if (this._isNode === null) { try { this._isNode = typeof process !== 'undefined' && process.versions != null && process.versions.node != null; } catch { this._isNode = false; } } return this._isNode; } static get isBrowser() { if (this._isBrowser === null) { try { this._isBrowser = typeof window !== 'undefined' && typeof document !== 'undefined'; } catch { this._isBrowser = false; } } return this._isBrowser; } static get hasDOMParser() { try { return typeof DOMParser !== 'undefined'; } catch { return false; } } static requireNodeEnvironment(operation) { if (!this.isNode) { throw new Error(`${operation} is only available in Node.js environment`); } } } // Conditional imports helper - now redundant but kept for backward compatibility export class ConditionalImports { static nodeModules = new Map(); /** * This method is kept for backward compatibility but direct imports are preferred */ static async getNodeModule(moduleName) { Environment.requireNodeEnvironment(`Loading ${moduleName}`); if (!this.nodeModules.has(moduleName)) { try { const module = await safeDynamicImport(moduleName); this.nodeModules.set(moduleName, module); return module; } catch (error) { throw new Error(`Failed to load Node.js module '${moduleName}': ${error.message}`); } } return this.nodeModules.get(moduleName); } /** * Helper method for safe dynamic imports with better error messages */ static async safeImport(moduleName, operation) { Environment.requireNodeEnvironment(operation); try { return await safeDynamicImport(moduleName); } catch (error) { throw new Error(`${operation} failed: Cannot load '${moduleName}' module. This operation requires Node.js environment. ${error.message}`); } } } // Or use Function constructor (more robust): export function safeDynamicImport(moduleName) { return new Function('moduleName', 'return import(moduleName)')(moduleName); } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW52aXJvbm1lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3V0aWxzL2Vudmlyb25tZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQU1BOzs7O0dBSUc7QUFDSCxNQUFNLE9BQU8sV0FBVztJQUNkLE1BQU0sQ0FBQyxPQUFPLEdBQW1CLElBQUksQ0FBQztJQUN0QyxNQUFNLENBQUMsVUFBVSxHQUFtQixJQUFJLENBQUM7SUFFakQsTUFBTSxLQUFLLE1BQU07UUFDZixJQUFJLElBQUksQ0FBQyxPQUFPLEtBQUssSUFBSSxFQUFFLENBQUM7WUFDMUIsSUFBSSxDQUFDO2dCQUNILElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxPQUFPLEtBQUssV0FBVztvQkFDOUIsT0FBTyxDQUFDLFFBQVEsSUFBSSxJQUFJO29CQUN4QixPQUFPLENBQUMsUUFBUSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUM7WUFDL0MsQ0FBQztZQUFDLE1BQU0sQ0FBQztnQkFDUCxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztZQUN2QixDQUFDO1FBQ0gsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUN0QixDQUFDO0lBRUQsTUFBTSxLQUFLLFNBQVM7UUFDbEIsSUFBSSxJQUFJLENBQUMsVUFBVSxLQUFLLElBQUksRUFBRSxDQUFDO1lBQzdCLElBQUksQ0FBQztnQkFDSCxJQUFJLENBQUMsVUFBVSxHQUFHLE9BQU8sTUFBTSxLQUFLLFdBQVc7b0JBQzdCLE9BQU8sUUFBUSxLQUFLLFdBQVcsQ0FBQztZQUNwRCxDQUFDO1lBQUMsTUFBTSxDQUFDO2dCQUNQLElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO1lBQzFCLENBQUM7UUFDSCxDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDO0lBQ3pCLENBQUM7SUFFRCxNQUFNLEtBQUssWUFBWTtRQUNyQixJQUFJLENBQUM7WUFDSCxPQUFPLE9BQU8sU0FBUyxLQUFLLFdBQVcsQ0FBQztRQUMxQyxDQUFDO1FBQUMsTUFBTSxDQUFDO1lBQ1AsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO0lBQ0gsQ0FBQztJQUVELE1BQU0sQ0FBQyxzQkFBc0IsQ0FBQyxTQUFpQjtRQUM3QyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ2pCLE1BQU0sSUFBSSxLQUFLLENBQUMsR0FBRyxTQUFTLDJDQUEyQyxDQUFDLENBQUM7UUFDM0UsQ0FBQztJQUNILENBQUM7O0FBR0gsaUZBQWlGO0FBQ2pGLE1BQU0sT0FBTyxrQkFBa0I7SUFDckIsTUFBTSxDQUFDLFdBQVcsR0FBcUIsSUFBSSxHQUFHLEVBQUUsQ0FBQztJQUV6RDs7T0FFRztJQUNILE1BQU0sQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLFVBQWtCO1FBQzNDLFdBQVcsQ0FBQyxzQkFBc0IsQ0FBQyxXQUFXLFVBQVUsRUFBRSxDQUFDLENBQUM7UUFFNUQsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7WUFDdEMsSUFBSSxDQUFDO2dCQUNILE1BQU0sTUFBTSxHQUFHLE1BQU0saUJBQWlCLENBQUMsVUFBVSxDQUFDLENBQUM7Z0JBQ25ELElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLFVBQVUsRUFBRSxNQUFNLENBQUMsQ0FBQztnQkFDekMsT0FBTyxNQUFNLENBQUM7WUFDaEIsQ0FBQztZQUFDLE9BQU8sS0FBVSxFQUFFLENBQUM7Z0JBQ3BCLE1BQU0sSUFBSSxLQUFLLENBQUMsa0NBQWtDLFVBQVUsTUFBTSxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztZQUNyRixDQUFDO1FBQ0gsQ0FBQztRQUVELE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDMUMsQ0FBQztJQUVEOztPQUVHO0lBQ0gsTUFBTSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsVUFBa0IsRUFBRSxTQUFpQjtRQUMzRCxXQUFXLENBQUMsc0JBQXNCLENBQUMsU0FBUyxDQUFDLENBQUM7UUFFOUMsSUFBSSxDQUFDO1lBQ0gsT0FBTyxNQUFNLGlCQUFpQixDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQzdDLENBQUM7UUFBQyxPQUFPLEtBQVUsRUFBRSxDQUFDO1lBQ3BCLE1BQU0sSUFBSSxLQUFLLENBQUMsR0FBRyxTQUFTLHlCQUF5QixVQUFVLDBEQUEwRCxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztRQUM1SSxDQUFDO0lBQ0gsQ0FBQzs7QUFHSCw2Q0FBNkM7QUFDN0MsTUFBTSxVQUFVLGlCQUFpQixDQUFDLFVBQWtCO0lBQ2xELE9BQU8sSUFBSSxRQUFRLENBQUMsWUFBWSxFQUFFLDJCQUEyQixDQUFDLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDN0UsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIFR5cGUtc2FmZSBnbG9iYWwgY2hlY2tzXHJcbmRlY2xhcmUgY29uc3Qgd2luZG93OiBhbnk7XHJcbmRlY2xhcmUgY29uc3QgZG9jdW1lbnQ6IGFueTtcclxuZGVjbGFyZSBjb25zdCBwcm9jZXNzOiBhbnk7XHJcbmRlY2xhcmUgY29uc3QgRE9NUGFyc2VyOiBhbnk7XHJcblxyXG4vKipcclxuICogRW5hYmxlcyBlbnZpcm9tZW50YWwgY2hlY2tzIGZvciBjb25kaXRpb25hbCBpbXBvcnRzLCBlbnN1cmluZ1xyXG4gKiB0aGF0IE5vZGUgZnVuY3Rpb25hbGl0eSBpbiBidW5kbGUgdGhhdCBpcyBub3QgdXNlZCBkb2VzIG5vdCBjYXVzZVxyXG4gKiBpc3N1ZXMgaW4gYnJvd3NlcnMgb3IgV2ViVmlld1xyXG4gKi9cclxuZXhwb3J0IGNsYXNzIEVudmlyb25tZW50IHtcclxuICBwcml2YXRlIHN0YXRpYyBfaXNOb2RlOiBib29sZWFuIHwgbnVsbCA9IG51bGw7XHJcbiAgcHJpdmF0ZSBzdGF0aWMgX2lzQnJvd3NlcjogYm9vbGVhbiB8IG51bGwgPSBudWxsO1xyXG5cclxuICBzdGF0aWMgZ2V0IGlzTm9kZSgpOiBib29sZWFuIHtcclxuICAgIGlmICh0aGlzLl9pc05vZGUgPT09IG51bGwpIHtcclxuICAgICAgdHJ5IHtcclxuICAgICAgICB0aGlzLl9pc05vZGUgPSB0eXBlb2YgcHJvY2VzcyAhPT0gJ3VuZGVmaW5lZCcgJiYgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgcHJvY2Vzcy52ZXJzaW9ucyAhPSBudWxsICYmIFxyXG4gICAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3MudmVyc2lvbnMubm9kZSAhPSBudWxsO1xyXG4gICAgICB9IGNhdGNoIHtcclxuICAgICAgICB0aGlzLl9pc05vZGUgPSBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMuX2lzTm9kZTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBnZXQgaXNCcm93c2VyKCk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKHRoaXMuX2lzQnJvd3NlciA9PT0gbnVsbCkge1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIHRoaXMuX2lzQnJvd3NlciA9IHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCc7XHJcbiAgICAgIH0gY2F0Y2gge1xyXG4gICAgICAgIHRoaXMuX2lzQnJvd3NlciA9IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy5faXNCcm93c2VyO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIGdldCBoYXNET01QYXJzZXIoKTogYm9vbGVhbiB7XHJcbiAgICB0cnkge1xyXG4gICAgICByZXR1cm4gdHlwZW9mIERPTVBhcnNlciAhPT0gJ3VuZGVmaW5lZCc7XHJcbiAgICB9IGNhdGNoIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc3RhdGljIHJlcXVpcmVOb2RlRW52aXJvbm1lbnQob3BlcmF0aW9uOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5pc05vZGUpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKGAke29wZXJhdGlvbn0gaXMgb25seSBhdmFpbGFibGUgaW4gTm9kZS5qcyBlbnZpcm9ubWVudGApO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuLy8gQ29uZGl0aW9uYWwgaW1wb3J0cyBoZWxwZXIgLSBub3cgcmVkdW5kYW50IGJ1dCBrZXB0IGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5XHJcbmV4cG9ydCBjbGFzcyBDb25kaXRpb25hbEltcG9ydHMge1xyXG4gIHByaXZhdGUgc3RhdGljIG5vZGVNb2R1bGVzOiBNYXA8c3RyaW5nLCBhbnk+ID0gbmV3IE1hcCgpO1xyXG5cclxuICAvKipcclxuICAgKiBUaGlzIG1ldGhvZCBpcyBrZXB0IGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IGJ1dCBkaXJlY3QgaW1wb3J0cyBhcmUgcHJlZmVycmVkXHJcbiAgICovXHJcbiAgc3RhdGljIGFzeW5jIGdldE5vZGVNb2R1bGUobW9kdWxlTmFtZTogc3RyaW5nKTogUHJvbWlzZTxhbnk+IHtcclxuICAgIEVudmlyb25tZW50LnJlcXVpcmVOb2RlRW52aXJvbm1lbnQoYExvYWRpbmcgJHttb2R1bGVOYW1lfWApO1xyXG4gICAgXHJcbiAgICBpZiAoIXRoaXMubm9kZU1vZHVsZXMuaGFzKG1vZHVsZU5hbWUpKSB7XHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgY29uc3QgbW9kdWxlID0gYXdhaXQgc2FmZUR5bmFtaWNJbXBvcnQobW9kdWxlTmFtZSk7XHJcbiAgICAgICAgdGhpcy5ub2RlTW9kdWxlcy5zZXQobW9kdWxlTmFtZSwgbW9kdWxlKTtcclxuICAgICAgICByZXR1cm4gbW9kdWxlO1xyXG4gICAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gbG9hZCBOb2RlLmpzIG1vZHVsZSAnJHttb2R1bGVOYW1lfSc6ICR7ZXJyb3IubWVzc2FnZX1gKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgXHJcbiAgICByZXR1cm4gdGhpcy5ub2RlTW9kdWxlcy5nZXQobW9kdWxlTmFtZSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBIZWxwZXIgbWV0aG9kIGZvciBzYWZlIGR5bmFtaWMgaW1wb3J0cyB3aXRoIGJldHRlciBlcnJvciBtZXNzYWdlc1xyXG4gICAqL1xyXG4gIHN0YXRpYyBhc3luYyBzYWZlSW1wb3J0KG1vZHVsZU5hbWU6IHN0cmluZywgb3BlcmF0aW9uOiBzdHJpbmcpOiBQcm9taXNlPGFueT4ge1xyXG4gICAgRW52aXJvbm1lbnQucmVxdWlyZU5vZGVFbnZpcm9ubWVudChvcGVyYXRpb24pO1xyXG4gICAgXHJcbiAgICB0cnkge1xyXG4gICAgICByZXR1cm4gYXdhaXQgc2FmZUR5bmFtaWNJbXBvcnQobW9kdWxlTmFtZSk7XHJcbiAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihgJHtvcGVyYXRpb259IGZhaWxlZDogQ2Fubm90IGxvYWQgJyR7bW9kdWxlTmFtZX0nIG1vZHVsZS4gVGhpcyBvcGVyYXRpb24gcmVxdWlyZXMgTm9kZS5qcyBlbnZpcm9ubWVudC4gJHtlcnJvci5tZXNzYWdlfWApO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuLy8gT3IgdXNlIEZ1bmN0aW9uIGNvbnN0cnVjdG9yIChtb3JlIHJvYnVzdCk6XHJcbmV4cG9ydCBmdW5jdGlvbiBzYWZlRHluYW1pY0ltcG9ydChtb2R1bGVOYW1lOiBzdHJpbmcpOiBQcm9taXNlPGFueT4ge1xyXG4gIHJldHVybiBuZXcgRnVuY3Rpb24oJ21vZHVsZU5hbWUnLCAncmV0dXJuIGltcG9ydChtb2R1bGVOYW1lKScpKG1vZHVsZU5hbWUpO1xyXG59Il19