A implementation of the ShadowRealm API Proposal, a JavaScript sandbox, test with TC39 Test262 cases.
declare class ShadowRealm {
constructor();
evaluate(sourceText: string): Primitive | Function;
importValue(specifier: string, bindingName: string): Promise<Primitive | Function>;
}
npm i -S @haohanyang/shadowrealm-api
import ShadowRealm from '@haohanyang/shadowrealm-api'
const realm = new ShadowRealm();
import '@haohanyang/shadowrealm-api/dist/polyfill'
const realm = new ShadowRealm();
Print internal info for debugging
ShadowRealm.__debug = true;
- All code evaluated inside a ShadowRealm runs in strict mode;
- The ESM statement must not contain redundant comments;
// ❌
import/* */defaultExport from "module-name";
export default/* */'xxx';
// ✅
import defaultExport from "module-name";
export default 'xxx';
- Exporting variable declarations is not supported;
// ❌
export const obj = {...}, fn = () => {...};
// ✅
const obj = {...}, fn = () => {...};
export { obj, fn };
IE | Edge | Firefox | Chrome | Safari | Opera |
---|---|---|---|---|---|
14 | 29[1][2] | 32[1][2] | 8[2][3] | 19[1][2] | |
41 | 49 | 10.1[3] | 36 | ||
14.1 |
Notes:
- Don't support destructuring assignment in ESM statement;
- Need
fetch
polyfill in top window;- Need
URL
polyfill in top window;
Use polyfills:
import "fetch polyfill";
import "URL polyfill";
import "@haohanyang/shadowrealm-api/dist/polyfill";
// Your codes