@@ -137,6 +137,18 @@ export type IApi<Parameter extends RecursiveRecord = RecursiveRecord, Response =
137
137
const isApiTemplate = < T extends RecursiveRecord = RecursiveRecord > ( template : ClientEndpoint < T > | IApi < T > ) : template is ClientEndpoint < T > =>
138
138
template instanceof ClientEndpoint ;
139
139
140
+ /**
141
+ * Clones a response object
142
+ * @param response - The response to clone
143
+ */
144
+ const cloneResponse = < T > ( response : TypedResponse < T > ) : TypedResponse < T > => {
145
+ const clone : Record < keyof TypedResponse < T > , unknown > = response . clone ( ) ;
146
+ Object . entries ( response ) . forEach ( ( [ key , value ] ) => {
147
+ if ( typeof value !== 'function' ) clone [ key as keyof TypedResponse < T > ] = value ;
148
+ } ) ;
149
+ return clone as TypedResponse < T > ;
150
+ } ;
151
+
140
152
/**
141
153
* Represents a client with common functionality.
142
154
*
@@ -244,16 +256,16 @@ export abstract class BaseClient<
244
256
if ( cached ) {
245
257
const templateRetention = typeof template . opts ?. cache === 'number' ? template . opts . cache : undefined ;
246
258
const retention = cacheOptions ?. retention ?? templateRetention ?? this . _cache . retention ;
247
- if ( ! retention ) return cached . value ;
259
+ if ( ! retention ) return cloneResponse ( cached . value ) ;
248
260
const expires = cached . cachedAt + retention ;
249
- if ( expires > Date . now ( ) ) return cached . value ;
261
+ if ( expires > Date . now ( ) ) return cloneResponse ( cached . value ) ;
250
262
}
251
263
}
252
264
try {
253
265
const result = await fn ( param , init ) ;
254
266
await this . _cache . set ( key , {
255
267
cachedAt : Date . now ( ) ,
256
- value : result as ResponseType ,
268
+ value : cloneResponse ( result ) as ResponseType ,
257
269
} ) ;
258
270
return result ;
259
271
} catch ( error ) {
0 commit comments