@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,EAGL,aAAa,EACb,WAAW,EACZ,MAAM,oBAAoB,CAAC;AAE5B,qBAAa,sBAAuB,YAAW,WAAW;IACxD,IAAI,SAA4B;IAChC,KAAK,SAA2B;IAEhC,SAAS,CAAC,QAAQ,EAAE,aAAa,GAAG,aAAa;CAgBlD"}
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.2",
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.2"
36
+ "@ahoo-wang/fetcher": "0.8.3"
37
37
  },
38
38
  "devDependencies": {
39
39
  "@vitest/coverage-v8": "^3.2.4",