Skip to content

Commit

Permalink
refactor(captp): breakout value creation from side effects
Browse files Browse the repository at this point in the history
  • Loading branch information
kumavis committed Oct 3, 2024
1 parent 2e99134 commit 58dc501
Showing 1 changed file with 24 additions and 18 deletions.
42 changes: 24 additions & 18 deletions packages/captp/src/captp.js
Original file line number Diff line number Diff line change
Expand Up @@ -472,37 +472,43 @@ export const makeCapTP = (
return harden({ promise, settler });
};

const makeValueForSlot = (slot, iface) => {
let val;
// Make a new handled promise for the slot.
const { promise, settler } = makeRemoteKit(slot);
if (slot[0] === 'o' || slot[0] === 't') {
if (iface === undefined) {
iface = `Alleged: Presence ${ourId} ${slot}`;
}
// A new remote presence
// Use Remotable rather than Far to make a remote from a presence
val = Remotable(iface, undefined, settler.resolveWithPresence());
} else if (slot[0] === 'p') {
val = promise;
} else {
Fail`Unknown slot type ${slot}`;
}
return { val, settler };
};

/**
* Set up import
*
* @type {import('@endo/marshal').ConvertSlotToVal<import('./types.js').CapTPSlot>}
*/
function convertSlotToVal(theirSlot, iface = undefined) {
let val;
const slot = reverseSlot(theirSlot);

if (slot[1] === '+') {
slotToExported.has(slot) || Fail`Unknown export ${slot}`;
return slotToExported.get(slot);
}
if (!slotToImported.has(slot)) {
// Make a new handled promise for the slot.
const { promise, settler } = makeRemoteKit(slot);
if (slot[0] === 'o' || slot[0] === 't') {
if (iface === undefined) {
iface = `Alleged: Presence ${ourId} ${slot}`;
}
// A new remote presence
// Use Remotable rather than Far to make a remote from a presence
val = Remotable(iface, undefined, settler.resolveWithPresence());
if (importHook) {
importHook(val, slot);
}
} else {
val = promise;
if (importHook) {
importHook(val, slot);
}
const { val, settler } = makeValueForSlot(slot, iface);
if (importHook) {
importHook(val, slot);
}
if (slot[0] === 'p') {
// A new promise
settlers.set(slot, settler);
}
Expand Down

0 comments on commit 58dc501

Please sign in to comment.