Skip to content

Commit a327ecb

Browse files
committed
fix(marshal): Fix typing for TS 4.5 compatibility
Make some types explicit any to prevent inference
1 parent 9d4f46b commit a327ecb

File tree

5 files changed

+31
-12
lines changed

5 files changed

+31
-12
lines changed

packages/eventual-send/src/handled-promise.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -427,7 +427,7 @@ export const makeHandledPromise = () => {
427427
},
428428
resolve(value) {
429429
// Resolving a Presence returns the pre-registered handled promise.
430-
let resolvedPromise = presenceToPromise.get(value);
430+
let resolvedPromise = presenceToPromise.get(/** @type {any} */ (value));
431431
if (!resolvedPromise) {
432432
resolvedPromise = Promise.resolve(value);
433433
}

packages/marshal/src/dot-membrane.js

+3
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@ const { fromEntries } = Object;
1414
const { ownKeys } = Reflect;
1515
const { details: X } = assert;
1616

17+
// TODO(erights): Add Converter type
18+
/** @param {any} [mirrorConverter] */
1719
const makeConverter = (mirrorConverter = undefined) => {
1820
/** @type {WeakMap<any,any>=} */
1921
let mineToYours = new WeakMap();
@@ -61,6 +63,7 @@ const makeConverter = (mirrorConverter = undefined) => {
6163
break;
6264
}
6365
case 'remotable': {
66+
/** @param {PropertyKey} [optVerb] */
6467
const myMethodToYours = (optVerb = undefined) => (...yourArgs) => {
6568
// We use mineIf rather than mine so that mine is not accessible
6669
// after revocation. This gives the correct error behavior,

packages/marshal/src/marshal-justin.js

+3-1
Original file line numberDiff line numberDiff line change
@@ -396,7 +396,9 @@ const decodeToJustin = (encoding, shouldIndent = false) => {
396396
return out.close(']');
397397
}
398398
} else {
399-
const names = ownKeys(rawTree);
399+
// rawTree is an `EncodingRecord` which only has string keys,
400+
// but since ownKeys is not generic, it can't propagate that
401+
const names = /** @type {string[]} */ (ownKeys(rawTree));
400402
if (names.length === 0) {
401403
return out.next('{}');
402404
} else {

packages/marshal/src/marshal.js

+1
Original file line numberDiff line numberDiff line change
@@ -451,6 +451,7 @@ export function makeMarshal(
451451

452452
default: {
453453
assert(
454+
// @ts-expect-error exhaustive check should make condition true
454455
qclass !== 'ibid',
455456
X`The protocol no longer supports ibid encoding: ${rawTree}.`,
456457
);

packages/marshal/src/passStyleOf.js

+23-10
Original file line numberDiff line numberDiff line change
@@ -15,21 +15,19 @@ import './types.js';
1515
import './helpers/internal-types.js';
1616
import { assertPassableSymbol } from './helpers/symbol.js';
1717

18+
/** @typedef {Exclude<PassStyle, PrimitiveStyle | "promise">} HelperPassStyle */
19+
1820
const { details: X, quote: q } = assert;
1921
const { ownKeys } = Reflect;
2022
const { isFrozen } = Object;
2123

2224
/**
23-
* @param {PassStyleHelper[]} passStyleHelpers The passStyleHelpers to register,
24-
* in priority order.
25-
* NOTE These must all be "trusted",
26-
* complete, and non-colliding. `makePassStyleOf` may *assume* that each helper
27-
* does what it is supposed to do. `makePassStyleOf` is not trying to defend
28-
* itself against malicious helpers, though it does defend against some
29-
* accidents.
30-
* @returns {PassStyleOf}
25+
* @param {PassStyleHelper[]} passStyleHelpers
26+
* @returns {Record<HelperPassStyle, PassStyleHelper> }
3127
*/
32-
const makePassStyleOf = passStyleHelpers => {
28+
29+
const makeHelperTable = passStyleHelpers => {
30+
/** @type {Record<HelperPassStyle, any> & {__proto__: null}} */
3331
const HelperTable = {
3432
__proto__: null,
3533
copyArray: undefined,
@@ -54,7 +52,22 @@ const makePassStyleOf = passStyleHelpers => {
5452
X`missing helper for ${q(styleName)}`,
5553
);
5654
}
57-
harden(HelperTable);
55+
56+
return harden(HelperTable);
57+
};
58+
59+
/**
60+
* @param {PassStyleHelper[]} passStyleHelpers The passStyleHelpers to register,
61+
* in priority order.
62+
* NOTE These must all be "trusted",
63+
* complete, and non-colliding. `makePassStyleOf` may *assume* that each helper
64+
* does what it is supposed to do. `makePassStyleOf` is not trying to defend
65+
* itself against malicious helpers, though it does defend against some
66+
* accidents.
67+
* @returns {PassStyleOf}
68+
*/
69+
const makePassStyleOf = passStyleHelpers => {
70+
const HelperTable = makeHelperTable(passStyleHelpers);
5871
const remotableHelper = HelperTable.remotable;
5972

6073
/**

0 commit comments

Comments
 (0)