@endo/eventual-send 0.15.1 → 0.15.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -3,6 +3,32 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ ### [0.15.4](https://github.com/endojs/endo/compare/@endo/eventual-send@0.15.3...@endo/eventual-send@0.15.4) (2022-06-11)
7
+
8
+
9
+ ### Bug Fixes
10
+
11
+ * **eventual-send:** no implicit rejection silencing; just harden ([ca07d81](https://github.com/endojs/endo/commit/ca07d8150fd1e12b9e90505a7c06ada6b25d0743))
12
+ * **eventual-send:** use `!Object.is(a, b)` instead of `a !== b` for NaNs ([2b7e418](https://github.com/endojs/endo/commit/2b7e4189182dcac17832bbdcfb6ac56e32fee456))
13
+
14
+
15
+
16
+ ### [0.15.3](https://github.com/endojs/endo/compare/@endo/eventual-send@0.15.2...@endo/eventual-send@0.15.3) (2022-04-15)
17
+
18
+ **Note:** Version bump only for package @endo/eventual-send
19
+
20
+
21
+
22
+
23
+
24
+ ### [0.15.2](https://github.com/endojs/endo/compare/@endo/eventual-send@0.15.1...@endo/eventual-send@0.15.2) (2022-04-14)
25
+
26
+ **Note:** Version bump only for package @endo/eventual-send
27
+
28
+
29
+
30
+
31
+
6
32
  ### [0.15.1](https://github.com/endojs/endo/compare/@endo/eventual-send@0.15.0...@endo/eventual-send@0.15.1) (2022-04-13)
7
33
 
8
34
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@endo/eventual-send",
3
- "version": "0.15.1",
3
+ "version": "0.15.4",
4
4
  "description": "Extend a Promise class to implement the eventual-send API",
5
5
  "type": "module",
6
6
  "main": "src/no-shim.js",
@@ -27,8 +27,8 @@
27
27
  },
28
28
  "homepage": "https://github.com/endojs/endo#readme",
29
29
  "devDependencies": {
30
- "@endo/lockdown": "^0.1.11",
31
- "@endo/ses-ava": "^0.2.23",
30
+ "@endo/lockdown": "^0.1.14",
31
+ "@endo/ses-ava": "^0.2.26",
32
32
  "ava": "^3.12.1",
33
33
  "c8": "^7.7.3",
34
34
  "tsd": "^0.19.1"
@@ -62,5 +62,5 @@
62
62
  ],
63
63
  "timeout": "2m"
64
64
  },
65
- "gitHead": "ada5203fd64e6828dca74895fd74588e08925d97"
65
+ "gitHead": "7be9306df5e5eae280134cbbaf0d3886b4e51536"
66
66
  }
@@ -26,6 +26,7 @@ const {
26
26
  getPrototypeOf,
27
27
  setPrototypeOf,
28
28
  isFrozen,
29
+ is: objectIs,
29
30
  } = Object;
30
31
 
31
32
  const { apply, construct } = Reflect;
@@ -93,7 +94,7 @@ export const makeHandledPromise = () => {
93
94
  if (presence) {
94
95
  // Presences are final, so it is ok to propagate
95
96
  // this upstream.
96
- while (target !== p) {
97
+ while (!objectIs(target, p)) {
97
98
  const parent = forwardedPromiseToPromise.get(target);
98
99
  forwardedPromiseToPromise.delete(target);
99
100
  promiseToPendingHandler.delete(target);
@@ -104,7 +105,7 @@ export const makeHandledPromise = () => {
104
105
  // We propagate p and remove all other pending handlers
105
106
  // upstream.
106
107
  // Note that everything except presences is covered here.
107
- while (target !== p) {
108
+ while (!objectIs(target, p)) {
108
109
  const parent = forwardedPromiseToPromise.get(target);
109
110
  forwardedPromiseToPromise.set(target, p);
110
111
  promiseToPendingHandler.delete(target);
@@ -237,7 +238,7 @@ export const makeHandledPromise = () => {
237
238
  targetP = presenceToPromise.get(value);
238
239
  }
239
240
  // Ensure our data structure is a proper tree (avoid cycles).
240
- if (targetP && targetP !== handledP) {
241
+ if (targetP && !objectIs(targetP, handledP)) {
241
242
  forwardedPromiseToPromise.set(handledP, targetP);
242
243
  } else {
243
244
  forwardedPromiseToPromise.delete(handledP);
@@ -246,11 +247,6 @@ export const makeHandledPromise = () => {
246
247
  // Remove stale pending handlers, set to canonical form.
247
248
  shorten(handledP);
248
249
 
249
- // Ensure our pendingHandler is cleaned up if not already.
250
- if (promiseToPendingHandler.has(handledP)) {
251
- handledP.then(_ => promiseToPendingHandler.delete(handledP));
252
- }
253
-
254
250
  // Finish the resolution.
255
251
  superResolve(value);
256
252
  resolved = true;
@@ -259,10 +255,11 @@ export const makeHandledPromise = () => {
259
255
  // We're resolved, so forward any postponed operations to us.
260
256
  continueForwarding();
261
257
  };
262
- handledReject = err => {
258
+ handledReject = reason => {
263
259
  if (resolved) {
264
260
  return;
265
261
  }
262
+ harden(reason);
266
263
  assert(
267
264
  !forwardedPromiseToPromise.has(handledP),
268
265
  X`internal: already forwarded`,
@@ -270,7 +267,7 @@ export const makeHandledPromise = () => {
270
267
  );
271
268
  promiseToPendingHandler.delete(handledP);
272
269
  resolved = true;
273
- superReject(err);
270
+ superReject(reason);
274
271
  continueForwarding();
275
272
  };
276
273
  };
@@ -401,7 +398,7 @@ export const makeHandledPromise = () => {
401
398
  },
402
399
  getSendOnly(target, prop) {
403
400
  prop = coerceToObjectProperty(prop);
404
- handle(target, 'getSendOnly', [prop]);
401
+ handle(target, 'getSendOnly', [prop]).catch(() => {});
405
402
  },
406
403
  applyFunction(target, args) {
407
404
  // Ensure args is an array.
@@ -411,7 +408,7 @@ export const makeHandledPromise = () => {
411
408
  applyFunctionSendOnly(target, args) {
412
409
  // Ensure args is an array.
413
410
  args = [...args];
414
- handle(target, 'applyFunctionSendOnly', [args]);
411
+ handle(target, 'applyFunctionSendOnly', [args]).catch(() => {});
415
412
  },
416
413
  applyMethod(target, prop, args) {
417
414
  prop = coerceToObjectProperty(prop);
@@ -423,7 +420,7 @@ export const makeHandledPromise = () => {
423
420
  prop = coerceToObjectProperty(prop);
424
421
  // Ensure args is an array.
425
422
  args = [...args];
426
- handle(target, 'applyMethodSendOnly', [prop, args]);
423
+ handle(target, 'applyMethodSendOnly', [prop, args]).catch(() => {});
427
424
  },
428
425
  resolve(value) {
429
426
  // Resolving a Presence returns the pre-registered handled promise.
@@ -443,7 +440,7 @@ export const makeHandledPromise = () => {
443
440
  const executeThen = (resolve, reject) =>
444
441
  resolvedPromise.then(resolve, reject);
445
442
  return harden(
446
- Promise.resolve().then(_ => new HandledPromise(executeThen)),
443
+ Promise.resolve().then(() => new HandledPromise(executeThen)),
447
444
  );
448
445
  },
449
446
  };
@@ -497,6 +494,7 @@ export const makeHandledPromise = () => {
497
494
  const returnedP = new HandledPromise((resolve, reject) => {
498
495
  // We run in a future turn to prevent synchronous attacks,
499
496
  let raceIsOver = false;
497
+
500
498
  const win = (handlerName, handler, o) => {
501
499
  if (raceIsOver) {
502
500
  return;
@@ -504,16 +502,16 @@ export const makeHandledPromise = () => {
504
502
  try {
505
503
  resolve(trackedDoDispatch(handlerName, handler, o));
506
504
  } catch (reason) {
507
- reject(reason);
505
+ reject(harden(reason));
508
506
  }
509
507
  raceIsOver = true;
510
508
  };
511
509
 
512
- const lose = e => {
510
+ const lose = reason => {
513
511
  if (raceIsOver) {
514
512
  return;
515
513
  }
516
- reject(e);
514
+ reject(harden(reason));
517
515
  raceIsOver = true;
518
516
  };
519
517
 
@@ -546,11 +544,6 @@ export const makeHandledPromise = () => {
546
544
  .catch(lose);
547
545
  });
548
546
 
549
- // Harden the fulfillment and rejection, as well as a workaround for
550
- // Node.js: silence "Unhandled Rejection" by default when using the static
551
- // methods.
552
- returnedP.then(harden, harden);
553
-
554
547
  // We return a handled promise with the default pending handler. This
555
548
  // prevents a race between the above Promise.resolves and pipelining.
556
549
  return harden(returnedP);
@@ -86,7 +86,7 @@ export const trackTurns = funcs => {
86
86
  console.log('REJECTED at top of event loop', reason);
87
87
  }
88
88
  });
89
- return result;
89
+ return harden(result);
90
90
  } finally {
91
91
  hiddenPriorError = undefined;
92
92
  }