@@ -919,7 +919,11 @@ export function toModelMessages(
919919 return Effect . runPromise ( toModelMessagesEffect ( input , model , options ) . pipe ( Effect . provide ( EffectLogger . layer ) ) )
920920}
921921
922- export function page ( input : { sessionID : SessionID ; limit : number ; before ?: string } ) {
922+ export const page = Effect . fn ( "MessageV2.page" ) ( function * ( input : {
923+ sessionID : SessionID
924+ limit : number
925+ before ?: string
926+ } ) {
923927 const before = input . before ? cursor . decode ( input . before ) : undefined
924928 const where = before
925929 ? and ( eq ( MessageTable . session_id , input . sessionID ) , older ( before ) )
@@ -937,7 +941,7 @@ export function page(input: { sessionID: SessionID; limit: number; before?: stri
937941 const row = Database . use ( ( db ) =>
938942 db . select ( { id : SessionTable . id } ) . from ( SessionTable ) . where ( eq ( SessionTable . id , input . sessionID ) ) . get ( ) ,
939943 )
940- if ( ! row ) throw new NotFoundError ( { message : `Session not found: ${ input . sessionID } ` } )
944+ if ( ! row ) return yield * new NotFoundError ( { message : `Session not found: ${ input . sessionID } ` } )
941945 return {
942946 items : [ ] as WithParts [ ] ,
943947 more : false ,
@@ -954,24 +958,19 @@ export function page(input: { sessionID: SessionID; limit: number; before?: stri
954958 more,
955959 cursor : more && tail ? cursor . encode ( { id : tail . id , time : tail . time_created } ) : undefined ,
956960 }
957- }
958-
959- export const pageEffect = Effect . fn ( "MessageV2.pageEffect" ) ( function * ( input : {
960- sessionID : SessionID
961- limit : number
962- before ?: string
963- } ) {
964- return yield * Effect . try ( {
965- try : ( ) => page ( input ) ,
966- catch : ( error ) => error ,
967- } ) . pipe ( Effect . catch ( ( error ) => ( NotFoundError . isInstance ( error ) ? Effect . fail ( error ) : Effect . die ( error ) ) ) )
968961} )
969962
970963export function * stream ( sessionID : SessionID ) {
971964 const size = 50
972965 let before : string | undefined
973966 while ( true ) {
974- const next = page ( { sessionID, limit : size , before } )
967+ const next = Effect . runSync (
968+ page ( { sessionID, limit : size , before } ) . pipe (
969+ Effect . catchIf ( NotFoundError . isInstance , ( ) =>
970+ Effect . succeed ( { items : [ ] as WithParts [ ] , more : false , cursor : undefined } ) ,
971+ ) ,
972+ ) ,
973+ )
975974 if ( next . items . length === 0 ) break
976975 for ( let i = next . items . length - 1 ; i >= 0 ; i -- ) {
977976 yield next . items [ i ]
@@ -996,29 +995,19 @@ export function parts(message_id: MessageID) {
996995 )
997996}
998997
999- export function get ( input : { sessionID : SessionID ; messageID : MessageID } ) : WithParts {
998+ export const get = Effect . fn ( "MessageV2.get" ) ( function * ( input : { sessionID : SessionID ; messageID : MessageID } ) {
1000999 const row = Database . use ( ( db ) =>
10011000 db
10021001 . select ( )
10031002 . from ( MessageTable )
10041003 . where ( and ( eq ( MessageTable . id , input . messageID ) , eq ( MessageTable . session_id , input . sessionID ) ) )
10051004 . get ( ) ,
10061005 )
1007- if ( ! row ) throw new NotFoundError ( { message : `Message not found: ${ input . messageID } ` } )
1006+ if ( ! row ) return yield * new NotFoundError ( { message : `Message not found: ${ input . messageID } ` } )
10081007 return {
10091008 info : info ( row ) ,
10101009 parts : parts ( input . messageID ) ,
10111010 }
1012- }
1013-
1014- export const getEffect = Effect . fn ( "MessageV2.getEffect" ) ( function * ( input : {
1015- sessionID : SessionID
1016- messageID : MessageID
1017- } ) {
1018- return yield * Effect . try ( {
1019- try : ( ) => get ( input ) ,
1020- catch : ( error ) => error ,
1021- } ) . pipe ( Effect . catch ( ( error ) => ( NotFoundError . isInstance ( error ) ? Effect . fail ( error ) : Effect . die ( error ) ) ) )
10221011} )
10231012
10241013export function filterCompacted ( msgs : Iterable < WithParts > ) {
0 commit comments