UNPKG

@jspm/core

Version:

This package contains the core libraries used in jspm 2.

140 lines (136 loc) 4.79 kB
var exports$1 = {}, _dewExec = false; var _global = typeof globalThis !== "undefined" ? globalThis : typeof self !== "undefined" ? self : global; function dew() { if (_dewExec) return exports$1; _dewExec = true; var indexOf = function (xs, item) { if (xs.indexOf) return xs.indexOf(item);else for (var i = 0; i < xs.length; i++) { if (xs[i] === item) return i; } return -1; }; var Object_keys = function (obj) { if (Object.keys) return Object.keys(obj);else { var res = []; for (var key in obj) res.push(key); return res; } }; var forEach = function (xs, fn) { if (xs.forEach) return xs.forEach(fn);else for (var i = 0; i < xs.length; i++) { fn(xs[i], i, xs); } }; var defineProp = function () { try { Object.defineProperty({}, "_", {}); return function (obj, name, value) { Object.defineProperty(obj, name, { writable: true, enumerable: false, configurable: true, value: value }); }; } catch (e) { return function (obj, name, value) { obj[name] = value; }; } }(); var globals = ["Array", "Boolean", "Date", "Error", "EvalError", "Function", "Infinity", "JSON", "Math", "NaN", "Number", "Object", "RangeError", "ReferenceError", "RegExp", "String", "SyntaxError", "TypeError", "URIError", "decodeURI", "decodeURIComponent", "encodeURI", "encodeURIComponent", "escape", "eval", "isFinite", "isNaN", "parseFloat", "parseInt", "undefined", "unescape"]; function Context() {} Context.prototype = {}; var Script = exports$1.Script = function NodeScript(code) { if (!((this || _global) instanceof Script)) return new Script(code); (this || _global).code = code; }; Script.prototype.runInContext = function (context) { if (!(context instanceof Context)) { throw new TypeError("needs a 'context' argument."); } var iframe = document.createElement("iframe"); if (!iframe.style) iframe.style = {}; iframe.style.display = "none"; document.body.appendChild(iframe); var win = iframe.contentWindow; var wEval = win.eval, wExecScript = win.execScript; if (!wEval && wExecScript) { // win.eval() magically appears when this is called in IE: wExecScript.call(win, "null"); wEval = win.eval; } forEach(Object_keys(context), function (key) { win[key] = context[key]; }); forEach(globals, function (key) { if (context[key]) { win[key] = context[key]; } }); var winKeys = Object_keys(win); var res = wEval.call(win, (this || _global).code); forEach(Object_keys(win), function (key) { // Avoid copying circular objects like `top` and `window` by only // updating existing context properties or new properties in the `win` // that was only introduced after the eval. if (key in context || indexOf(winKeys, key) === -1) { context[key] = win[key]; } }); forEach(globals, function (key) { if (!(key in context)) { defineProp(context, key, win[key]); } }); document.body.removeChild(iframe); return res; }; Script.prototype.runInThisContext = function () { return eval((this || _global).code); // maybe... }; Script.prototype.runInNewContext = function (context) { var ctx = Script.createContext(context); var res = this.runInContext(ctx); if (context) { forEach(Object_keys(ctx), function (key) { context[key] = ctx[key]; }); } return res; }; forEach(Object_keys(Script.prototype), function (name) { exports$1[name] = Script[name] = function (code) { var s = Script(code); return s[name].apply(s, [].slice.call(arguments, 1)); }; }); exports$1.isContext = function (context) { return context instanceof Context; }; exports$1.createScript = function (code) { return exports$1.Script(code); }; exports$1.createContext = Script.createContext = function (context) { var copy = new Context(); if (typeof context === "object") { forEach(Object_keys(context), function (key) { copy[key] = context[key]; }); } return copy; }; return exports$1; } const exports = dew(); exports['Script']; exports['isContext']; exports['createScript']; exports['createContext']; var Script = exports.Script; var createContext = exports.createContext; var createScript = exports.createScript; var isContext = exports.isContext; var runInContext = exports.runInContext; var runInNewContext = exports.runInNewContext; var runInThisContext = exports.runInThisContext; export { Script, createContext, createScript, exports as default, isContext, runInContext, runInNewContext, runInThisContext };