diff --git a/packages/vats/src/nameHub.js b/packages/vats/src/nameHub.js index b475a13f9c9..a56dfc856f8 100644 --- a/packages/vats/src/nameHub.js +++ b/packages/vats/src/nameHub.js @@ -33,19 +33,26 @@ export const makeNameHubKit = () => { return E(firstValue).lookup(...remaining); }, entries() { - return mapIterable(keyToRecord.entries(), ([key, record]) => [ - key, - record.promise || record.value, - ]); + return [ + ...mapIterable( + keyToRecord.entries(), + ([key, record]) => /** @type {[string, ERef]} */ ([ + key, + record.promise || record.value, + ]), + ), + ]; }, values() { - return mapIterable( - keyToRecord.values(), - record => record.promise || record.value, - ); + return [ + ...mapIterable( + keyToRecord.values(), + record => record.promise || record.value, + ), + ]; }, keys() { - return keyToRecord.keys(); + return [...keyToRecord.keys()]; }, }); diff --git a/packages/vats/src/types.js b/packages/vats/src/types.js index ff97844e4ab..787526615cb 100644 --- a/packages/vats/src/types.js +++ b/packages/vats/src/types.js @@ -15,14 +15,19 @@ /** * @typedef {Object} NameHub + * + * NOTE: We need to return arrays, not iterables, because even if marshal could + * allow passing a remote iterable, there would be an inordinate number of round + * trips for the contents of even the simplest nameHub. + * * @property {(...path: Array) => Promise} lookup Look up a * path of keys starting from the current NameHub. Wait on any reserved * promises. - * @property {() => Iterable<[string, unknown]>} entries get all the entries + * @property {() => [string, unknown][]} entries get all the entries * available in the current NameHub - * @property {() => Iterable} keys get all names available in the + * @property {() => string[]} keys get all names available in the * current NameHub - * @property {() => Iterable} values get all values available in the + * @property {() => unknown[]} values get all values available in the * current NameHub */