@ahoo-wang/fetcher-eventstream 0.8.2 → 0.8.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -1,4 +1,33 @@
|
|
|
1
1
|
import { FetchExchange, Interceptor } from '@ahoo-wang/fetcher';
|
|
2
|
+
/**
|
|
3
|
+
* EventStreamInterceptor Class
|
|
4
|
+
*
|
|
5
|
+
* Interceptor responsible for enhancing Response objects with event stream capabilities
|
|
6
|
+
* when the response content type indicates a server-sent event stream.
|
|
7
|
+
*
|
|
8
|
+
* This interceptor detects responses with `text/event-stream` content type and adds
|
|
9
|
+
* an `eventStream()` method to the Response object, which returns a readable stream
|
|
10
|
+
* of Server-Sent Events that can be consumed using `for await` syntax.
|
|
11
|
+
*
|
|
12
|
+
* @remarks
|
|
13
|
+
* This interceptor runs after the HTTP response is received but before the response
|
|
14
|
+
* is returned to the caller. The order is set to Number.MAX_SAFE_INTEGER - 100 to
|
|
15
|
+
* ensure it runs after all standard response processing is complete, as it adds
|
|
16
|
+
* specialized functionality to the response object. This order allows other
|
|
17
|
+
* response interceptors to run after it if needed.
|
|
18
|
+
*
|
|
19
|
+
* @example
|
|
20
|
+
* ```typescript
|
|
21
|
+
* // Using the eventStream method
|
|
22
|
+
* const response = await fetcher.get('/events');
|
|
23
|
+
* if (response.headers.get('content-type')?.includes('text/event-stream')) {
|
|
24
|
+
* const eventStream = response.eventStream();
|
|
25
|
+
* for await (const event of eventStream) {
|
|
26
|
+
* console.log('Received event:', event);
|
|
27
|
+
* }
|
|
28
|
+
* }
|
|
29
|
+
* ```
|
|
30
|
+
*/
|
|
2
31
|
export declare class EventStreamInterceptor implements Interceptor {
|
|
3
32
|
name: string;
|
|
4
33
|
order: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"eventStreamInterceptor.d.ts","sourceRoot":"","sources":["../src/eventStreamInterceptor.ts"],"names":[],"mappings":"AAcA,OAAO,
|
|
1
|
+
{"version":3,"file":"eventStreamInterceptor.d.ts","sourceRoot":"","sources":["../src/eventStreamInterceptor.ts"],"names":[],"mappings":"AAcA,OAAO,EAAwC,aAAa,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEtG;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,qBAAa,sBAAuB,YAAW,WAAW;IACxD,IAAI,SAA4B;IAChC,KAAK,SAAiC;IAEtC,SAAS,CAAC,QAAQ,EAAE,aAAa,GAAG,aAAa;CAgBlD"}
|
package/dist/index.es.js
CHANGED
|
@@ -120,7 +120,7 @@ function T(s) {
|
|
|
120
120
|
}
|
|
121
121
|
class v {
|
|
122
122
|
constructor() {
|
|
123
|
-
this.name = "EventStreamInterceptor", this.order = Number.MAX_SAFE_INTEGER;
|
|
123
|
+
this.name = "EventStreamInterceptor", this.order = Number.MAX_SAFE_INTEGER - 100;
|
|
124
124
|
}
|
|
125
125
|
intercept(t) {
|
|
126
126
|
const e = t.response;
|
package/dist/index.umd.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
(function(s,o){typeof exports=="object"&&typeof module<"u"?o(exports,require("@ahoo-wang/fetcher")):typeof define=="function"&&define.amd?define(["exports","@ahoo-wang/fetcher"],o):(s=typeof globalThis<"u"?globalThis:s||self,o(s.FetcherEventStream={},s.Fetcher))})(this,(function(s,o){"use strict";class d{constructor(){this.buffer=""}transform(t,e){try{this.buffer+=t;const r=this.buffer.split(`
|
|
2
2
|
`);this.buffer=r.pop()||"";for(const a of r)e.enqueue(a)}catch(r){e.error(r)}}flush(t){try{this.buffer&&t.enqueue(this.buffer)}catch(e){t.error(e)}}}class u extends TransformStream{constructor(){super(new d)}}var c=(n=>(n.ID="id",n.RETRY="retry",n.EVENT="event",n.DATA="data",n))(c||{});function T(n,t,e){switch(n){case"event":e.event=t;break;case"data":e.data.push(t);break;case"id":e.id=t;break;case"retry":{const r=parseInt(t,10);isNaN(r)||(e.retry=r);break}}}class m{constructor(){this.currentEvent={event:"message",id:void 0,retry:void 0,data:[]}}transform(t,e){const r=this.currentEvent;try{if(t.trim()===""){r.data.length>0&&(e.enqueue({event:r.event||"message",data:r.data.join(`
|
|
3
3
|
`),id:r.id||"",retry:r.retry}),r.event="message",r.data=[]);return}if(t.startsWith(":"))return;const a=t.indexOf(":");let f,i;a===-1?(f=t.toLowerCase(),i=""):(f=t.substring(0,a).toLowerCase(),i=t.substring(a+1),i.startsWith(" ")&&(i=i.substring(1))),f=f.trim(),i=i.trim(),T(f,i,r)}catch(a){e.error(a instanceof Error?a:new Error(String(a))),r.event="message",r.id=void 0,r.retry=void 0,r.data=[]}}flush(t){const e=this.currentEvent;try{e.data.length>0&&t.enqueue({event:e.event||"message",data:e.data.join(`
|
|
4
|
-
`),id:e.id||"",retry:e.retry})}catch(r){t.error(r instanceof Error?r:new Error(String(r)))}finally{e.event="message",e.id=void 0,e.retry=void 0,e.data=[]}}}class h extends TransformStream{constructor(){super(new m)}}function v(n){if(!n.body)throw new Error("Response body is null");return n.body.pipeThrough(new TextDecoderStream("utf-8")).pipeThrough(new u).pipeThrough(new h)}class S{constructor(){this.name="EventStreamInterceptor",this.order=Number.MAX_SAFE_INTEGER}intercept(t){const e=t.response;if(!e)return t;const r=e.headers.get(o.ContentTypeHeader);return r&&r.includes(o.ContentTypeValues.TEXT_EVENT_STREAM)&&(e.eventStream=()=>v(e)),t}}s.EventStreamInterceptor=S,s.ServerSentEventField=c,s.ServerSentEventTransformStream=h,s.ServerSentEventTransformer=m,s.TextLineTransformStream=u,s.TextLineTransformer=d,s.toServerSentEventStream=v,Object.defineProperty(s,Symbol.toStringTag,{value:"Module"})}));
|
|
4
|
+
`),id:e.id||"",retry:e.retry})}catch(r){t.error(r instanceof Error?r:new Error(String(r)))}finally{e.event="message",e.id=void 0,e.retry=void 0,e.data=[]}}}class h extends TransformStream{constructor(){super(new m)}}function v(n){if(!n.body)throw new Error("Response body is null");return n.body.pipeThrough(new TextDecoderStream("utf-8")).pipeThrough(new u).pipeThrough(new h)}class S{constructor(){this.name="EventStreamInterceptor",this.order=Number.MAX_SAFE_INTEGER-100}intercept(t){const e=t.response;if(!e)return t;const r=e.headers.get(o.ContentTypeHeader);return r&&r.includes(o.ContentTypeValues.TEXT_EVENT_STREAM)&&(e.eventStream=()=>v(e)),t}}s.EventStreamInterceptor=S,s.ServerSentEventField=c,s.ServerSentEventTransformStream=h,s.ServerSentEventTransformer=m,s.TextLineTransformStream=u,s.TextLineTransformer=d,s.toServerSentEventStream=v,Object.defineProperty(s,Symbol.toStringTag,{value:"Module"})}));
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ahoo-wang/fetcher-eventstream",
|
|
3
|
-
"version": "0.8.
|
|
3
|
+
"version": "0.8.3",
|
|
4
4
|
"description": "Server-Sent Events (SSE) support for Fetcher HTTP client",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"fetch",
|
|
@@ -33,7 +33,7 @@
|
|
|
33
33
|
"dist"
|
|
34
34
|
],
|
|
35
35
|
"dependencies": {
|
|
36
|
-
"@ahoo-wang/fetcher": "0.8.
|
|
36
|
+
"@ahoo-wang/fetcher": "0.8.3"
|
|
37
37
|
},
|
|
38
38
|
"devDependencies": {
|
|
39
39
|
"@vitest/coverage-v8": "^3.2.4",
|