44 refer ,
55 Reference ,
66 Instruction ,
7+ Session ,
78 Task ,
89 Fact ,
910 h ,
@@ -20,28 +21,26 @@ type State =
2021 | { status : "Receiving" ; source : Fetch ; content : Promise < { } > }
2122 | { status : "Complete" ; source : Fetch ; content : { } } ;
2223
23- const effects = new WeakMap < Reference , State > ( ) ;
24-
2524export default service ( {
2625 send : {
2726 select : {
2827 request : $ . request ,
2928 } ,
3029 where : [ { Case : [ provider , `~/send` , $ . request ] } ] ,
3130 * perform ( { request } : { request : Reference } ) : Task . Task < Instruction [ ] > {
32- const effect = effects . get ( request ) ;
31+ const effect = Session . resolve < State > ( request ) ;
3332 if ( effect ?. status === "Open" ) {
34- effects . set ( request , {
33+ const state = {
3534 status : "Sending" ,
3635 source : effect . source ,
3736 response : globalThis . fetch ( effect . source . request ) ,
38- } ) ;
37+ }
3938
4039 return [
4140 { Retract : [ provider , "~/send" , request ] } ,
42- { Upsert : [ provider , "~/receive" , request ] } ,
43- { Upsert : [ request , "request/status" , "Sending" ] } ,
44- { Upsert : [ effect . source . consumer , effect . source . port , request ] } ,
41+ { Upsert : [ provider , "~/receive" , state as any ] } ,
42+ { Upsert : [ effect . source . consumer , effect . source . port , effect . source . id ] } ,
43+ { Upsert : [ effect . source . id , "request/status" , "Sending" ] } ,
4544 ] ;
4645 }
4746 return [ ] ;
@@ -53,7 +52,7 @@ export default service({
5352 } ,
5453 where : [ { Case : [ provider , `~/receive` , $ . request ] } ] ,
5554 * perform ( { request } : { request : Reference } ) {
56- const effect = effects . get ( request ) ;
55+ const effect = Session . resolve < State > ( request ) ;
5756 if ( effect ?. status === "Sending" ) {
5857 const response = yield * Task . wait ( effect . response ) ;
5958 const { expect } = effect . source ;
@@ -64,18 +63,18 @@ export default service({
6463 ? response . json ( )
6564 : response . arrayBuffer ( ) ;
6665
67- effects . set ( request , {
66+ const state = {
6867 status : "Receiving" ,
6968 source : effect . source ,
7069 content,
71- } ) ;
70+ }
7271
7372 return [
7473 { Retract : [ provider , "~/receive" , request ] } ,
75- { Upsert : [ provider , `~/complete` , request ] } ,
76- { Upsert : [ request , "request/status" , "Receiving" ] } ,
77- { Upsert : [ request , "response/status/code" , response . status ] } ,
78- { Upsert : [ request , "response/status/text" , response . statusText ] } ,
74+ { Upsert : [ provider , `~/complete` , state as any ] } ,
75+ { Upsert : [ effect . source . id , "request/status" , "Receiving" ] } ,
76+ { Upsert : [ effect . source . id , "response/status/code" , response . status ] } ,
77+ { Upsert : [ effect . source . id , "response/status/text" , response . statusText ] } ,
7978 ] ;
8079 }
8180
@@ -89,18 +88,17 @@ export default service({
8988 where : [ { Case : [ provider , `~/complete` , $ . request ] } ] ,
9089 * perform ( { request } : { request : Reference } ) {
9190 const changes : Instruction [ ] = [ ] ;
92- const effect = effects . get ( request ) ;
91+ const effect = Session . resolve < State > ( request ) ;
9392 if ( effect ?. status === "Receiving" ) {
9493 const content = yield * Task . wait ( effect . content ) ;
95- effects . delete ( request ) ;
9694 changes . push (
9795 { Retract : [ provider , `~/complete` , request ] } ,
9896 { Assert : [ provider , "effect/log" , request ] } ,
99- { Upsert : [ request , "request/status" , "Complete" ] } ,
97+ { Upsert : [ effect . source . id , "request/status" , "Complete" ] } ,
10098 ) ;
10199
102100 if ( effect . source . expect === "json" ) {
103- const id = refer ( content ) ;
101+ const id = refer ( content ) ; // NOTE(ja):
104102 changes . push (
105103 { Import : content } ,
106104 { Upsert : [ request , `response/json` , id ] } ,
@@ -260,6 +258,7 @@ export class Fetch {
260258 port : string ;
261259 request : Request ;
262260 expect : Expect ;
261+ id : Reference ;
263262 constructor (
264263 consumer : Reference ,
265264 port : string ,
@@ -270,10 +269,7 @@ export class Fetch {
270269 this . port = port ;
271270 this . request = request ;
272271 this . expect = expect ;
273- }
274-
275- get Assert ( ) : Fact {
276- const request = refer ( {
272+ this . id = refer ( {
277273 provider,
278274 consumer : this . consumer ,
279275 port : this . port ,
@@ -287,10 +283,10 @@ export class Fetch {
287283 expect : this . expect ,
288284 } ,
289285 } ) ;
286+ }
290287
291- effects . set ( request , { status : "Open" , source : this } ) ;
292-
293- return [ provider , `~/send` , request ] ;
288+ get Assert ( ) : Fact {
289+ return [ provider , `~/send` , { status : "Open" , source : this } as any ] ;
294290 }
295291
296292 text ( ) {
0 commit comments