Skip to content

Commit

Permalink
Merge pull request Agoric#28 from dckc/delay-weakmap-xs
Browse files Browse the repository at this point in the history
delay WeakMap until after xs preload
  • Loading branch information
michaelfig authored Sep 4, 2019
2 parents 90925ad + bd2be3f commit cc94296
Showing 1 changed file with 14 additions and 3 deletions.
17 changes: 14 additions & 3 deletions src/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -18,9 +18,18 @@ export default function maybeExtendPromise(Promise) {
return Promise;
}

const presenceToHandler = new WeakMap();
const presenceToPromise = new WeakMap();
const promiseToHandler = new WeakMap();
// xs doesn't support WeakMap in pre-loaded closures
// aka "vetted customization code"
let presenceToHandler;
let presenceToPromise;
let promiseToHandler;
function ensureMaps() {
if (!presenceToHandler) {
presenceToHandler = new WeakMap();
presenceToPromise = new WeakMap();
promiseToHandler = new WeakMap();
}
}

// This special handler accepts Promises, and forwards
// handled Promises to their corresponding fulfilledHandler.
Expand Down Expand Up @@ -94,6 +103,7 @@ export default function maybeExtendPromise(Promise) {
Promise,
Object.getOwnPropertyDescriptors({
resolve(value) {
ensureMaps();
// Resolving a Presence returns the pre-registered handled promise.
const handledPromise = presenceToPromise.get(value);
if (handledPromise) {
Expand All @@ -103,6 +113,7 @@ export default function maybeExtendPromise(Promise) {
},

makeHandled(executor, unfulfilledHandler = undefined) {
ensureMaps();
let handledResolve;
let handledReject;
let continueForwarding = () => {};
Expand Down

0 comments on commit cc94296

Please sign in to comment.