import Shelf from '../shelf/Shelf' ; import { ErrorCode , ErrorType , ServiceContext } from './interface' ; interface Pending { state : 'pending' ; } interface Success { state : 'hasValue' ; data ? : any ; } interface Fail { state : 'hasError' ; type : ErrorType ; code : ErrorCode ; message : string ; cause ? : Error ; } export default class DefaultServiceContext implements ServiceContext { shelf : Shelf ; params : unknown ; body : unknown ; cacheMaxAge : number = 0 ; response : Success | Fail | Pending = { state : 'pending' } ; constructor ( shelf , params , body ) { this . shelf = shelf ; this . params = params ; this . body = body ; } async cacheable ( maxAge ) { this . cacheMaxAge = maxAge ; } async success ( data ? ) { this . response = { data , state : 'hasValue' , } ; } async error ( type , code , message , cause ? ) { this . response = { type , code , message , cause , state : 'hasError' , } ; } }