- Stage 1
- @dherman
- @caridy
- @erights
You can view the spec rendered as HTML.
- worked on this during ES2015 time frame, so never went through stages process
- got punted to later (rightly so!)
- goal of this proposal: resume work on this, reassert committee interest via advancing to stage 1
- original idea from @dherman: What are Realms?
- sandbox
- iframe without DOM
- principled version of Node's
'vm'
module - sync Worker
- security isolation (with synchronous but coarse-grained communication channel)
- plugins (e.g., spreadsheet functions)
- in-browser code editors
- server-side rendering
- testing/mocking (e.g., jsdom)
- in-browser transpilation
let realm = new Realm();
let outerGlobal = window;
let innerGlobal = realm.global;
let f = realm.evalScript("(function() { return 17 })");
f() === 17 // true
Reflect.getPrototypeOf(f) === outerGlobal.Function.prototype // false
Reflect.getPrototypeOf(f) === innerGlobal.Function.prototype // true
class EmptyRealm extends Realm {
constructor(...args) { super(...args); }
init() { /* do nothing */ }
}
class FakeWindow extends Realm {
init() {
super.init(); // install the standard primordials
let global = this.global;
global.document = new FakeDocument(...);
global.alert = new Proxy(fakeAlert, { ... });
...
}
}
class ESNextRealm extends Realm {
[Realm.directEval](source) { return compile(source); }
[Realm.indirectEval](source) { ... }
...
}
A shim implementation of the Realm API can be found here.
And you can play around with the Shim here.
The source for the spec text is located in spec/index.emu and it is written in ecmarkup language.
When modifying the spec text, you should be able to build the HTML version in
index.html
by using the following command:
npm install
npm run build
open index.html
Alternative, you can use npm run watch
.