@conduit-client/command-sse 3.13.0 → 3.13.1
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.
- package/dist/v1/index.js.map +1 -1
- package/package.json +5 -5
package/dist/v1/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../src/v1/sse-command.ts","../../src/v1/index.ts"],"sourcesContent":["import { StreamingCommand } from '@conduit-client/command-streaming/v1';\nimport type { NamedFetchService } from '@conduit-client/service-fetch-network/v1';\n\nexport type SSEMessage = {\n event: string;\n data: string;\n id: string;\n retry?: number;\n};\n\n/**\n * An implementation of StreamingCommand that handles SSE (Server-Sent Event) streams.\n */\nexport abstract class SSECommand<\n StreamedData = SSEMessage,\n ExtraServices extends object = object,\n> extends StreamingCommand<StreamedData, ExtraServices> {\n constructor(protected services: NamedFetchService & ExtraServices) {\n super(services);\n }\n\n /**\n * Decodes the bytes returned by fetch into the correct shape.\n *\n * @param byteStream ReadableStream<Uint8Array> returned by fetch\n * @returns ReadableStream<StreamedData> that will be the result of the Command\n */\n decodeByteStream(byteStream: ReadableStream<Uint8Array>): ReadableStream<StreamedData> {\n return this.decodeSSEStream(\n byteStream
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../src/v1/sse-command.ts","../../src/v1/index.ts"],"sourcesContent":["import { StreamingCommand } from '@conduit-client/command-streaming/v1';\nimport type { NamedFetchService } from '@conduit-client/service-fetch-network/v1';\n\nexport type SSEMessage = {\n event: string;\n data: string;\n id: string;\n retry?: number;\n};\n\n/**\n * An implementation of StreamingCommand that handles SSE (Server-Sent Event) streams.\n */\nexport abstract class SSECommand<\n StreamedData = SSEMessage,\n ExtraServices extends object = object,\n> extends StreamingCommand<StreamedData, ExtraServices> {\n constructor(protected services: NamedFetchService & ExtraServices) {\n super(services);\n }\n\n /**\n * Decodes the bytes returned by fetch into the correct shape.\n *\n * @param byteStream ReadableStream<Uint8Array> returned by fetch\n * @returns ReadableStream<StreamedData> that will be the result of the Command\n */\n decodeByteStream(byteStream: ReadableStream<Uint8Array>): ReadableStream<StreamedData> {\n return this.decodeSSEStream(\n byteStream.pipeThrough(new TextDecoderStream()).pipeThrough(new SSEParsingStream())\n );\n }\n\n abstract decodeSSEStream(sseStream: ReadableStream<SSEMessage>): ReadableStream<StreamedData>;\n}\n\nconst sseRegex = /^(?<field>[^:]*?)(: ?(?<value>.*?))?(?:\\r\\n?|\\n)/;\n// +-------v------++--------v--------++-----v----+\n// | | |\n// | | CRLF | CR | LF\n// | |\n// | \": value\", or \": comment\" if no field name (optional)\n// |\n// field name (optional); can be entire line if no \":\"\n\n/**\n * A TransformStream that parses server-sent event (SSE) data according to the SSE spec:\n * https://html.spec.whatwg.org/multipage/server-sent-events.html\n */\nexport class SSEParsingStream extends TransformStream<string, SSEMessage> {\n constructor() {\n let ignoreLeadingLF = false,\n partialLine: string = '',\n data: string = '',\n event: string = '',\n id: string = '',\n retry: number | undefined;\n\n super({\n transform(chunk, controller) {\n // account for case where chunk boundary splits \\r\\n\n if (ignoreLeadingLF && chunk.startsWith('\\n')) {\n // eslint-disable-next-line no-param-reassign\n chunk = chunk.slice(1);\n }\n ignoreLeadingLF = chunk.endsWith('\\r');\n\n // prepend partial last line from previous chunk\n let text = partialLine + chunk;\n\n let match: RegExpMatchArray | null;\n while ((match = text.match(sseRegex))) {\n text = text.slice(match[0].length);\n\n // blank linke, end of text/event-stream message\n if (match.groups!.field === '' && match.groups!.value === undefined) {\n // drop messages with no data\n if (data === '') {\n event = '';\n continue;\n }\n\n // strip trailing \\n from data\n if (data.endsWith('\\n')) {\n data = data.slice(0, -1);\n }\n\n const sseMessage: SSEMessage = {\n data,\n id,\n // default event value is \"message\"\n event: event || 'message',\n };\n\n if (retry !== undefined) {\n sseMessage.retry = retry;\n }\n\n controller.enqueue(sseMessage);\n\n // clear data & event for next message; id and retry persist until changed\n data = event = '';\n }\n\n // data: line\n else if (match.groups!.field === 'data') {\n data += (match.groups!.value || '') + '\\n';\n }\n\n // event: line\n else if (match.groups!.field === 'event') {\n event = match.groups!.value || '';\n }\n\n // id: line\n else if (match.groups!.field === 'id') {\n const idValue = match.groups!.value || '';\n if (!idValue.includes('\\u0000')) {\n id = idValue;\n }\n }\n\n // retry: line\n else if (match.groups!.field === 'retry') {\n // ignore bogus values\n if (/^\\d+$/.exec(match.groups!.value)) {\n retry = parseInt(match.groups!.value);\n }\n }\n\n // comment or unrecognized field, ignore\n else {\n // do nothing\n }\n }\n\n // save partial line for next chunk\n partialLine = text;\n },\n });\n }\n}\n","import { type ServiceDescriptor } from '@conduit-client/utils';\nimport { SSECommand } from './sse-command';\nexport { type SSEMessage } from './sse-command';\n\nexport { SSECommand } from './sse-command';\n\nexport type SSECommandServiceDescriptor = ServiceDescriptor<\n typeof SSECommand,\n 'SSECommandBaseClass',\n '1.0'\n>;\n\nexport function buildServiceDescriptor(): SSECommandServiceDescriptor {\n return {\n type: 'SSECommandBaseClass',\n version: '1.0',\n service: SSECommand,\n };\n}\n"],"names":[],"mappings":";;;;;;AAaO,MAAe,mBAGZ,iBAA8C;AAAA,EACpD,YAAsB,UAA6C;AAC/D,UAAM,QAAQ;AADI,SAAA,WAAA;AAAA,EAEtB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,iBAAiB,YAAsE;AACnF,WAAO,KAAK;AAAA,MACR,WAAW,YAAY,IAAI,kBAAA,CAAmB,EAAE,YAAY,IAAI,iBAAA,CAAkB;AAAA,IAAA;AAAA,EAE1F;AAGJ;AAEA,MAAM,WAAW;AAaV,MAAM,yBAAyB,gBAAoC;AAAA,EACtE,cAAc;AACV,QAAI,kBAAkB,OAClB,cAAsB,IACtB,OAAe,IACf,QAAgB,IAChB,KAAa,IACb;AAEJ,UAAM;AAAA,MACF,UAAU,OAAO,YAAY;AAEzB,YAAI,mBAAmB,MAAM,WAAW,IAAI,GAAG;AAE3C,kBAAQ,MAAM,MAAM,CAAC;AAAA,QACzB;AACA,0BAAkB,MAAM,SAAS,IAAI;AAGrC,YAAI,OAAO,cAAc;AAEzB,YAAI;AACJ,eAAQ,QAAQ,KAAK,MAAM,QAAQ,GAAI;AACnC,iBAAO,KAAK,MAAM,MAAM,CAAC,EAAE,MAAM;AAGjC,cAAI,MAAM,OAAQ,UAAU,MAAM,MAAM,OAAQ,UAAU,QAAW;AAEjE,gBAAI,SAAS,IAAI;AACb,sBAAQ;AACR;AAAA,YACJ;AAGA,gBAAI,KAAK,SAAS,IAAI,GAAG;AACrB,qBAAO,KAAK,MAAM,GAAG,EAAE;AAAA,YAC3B;AAEA,kBAAM,aAAyB;AAAA,cAC3B;AAAA,cACA;AAAA;AAAA,cAEA,OAAO,SAAS;AAAA,YAAA;AAGpB,gBAAI,UAAU,QAAW;AACrB,yBAAW,QAAQ;AAAA,YACvB;AAEA,uBAAW,QAAQ,UAAU;AAG7B,mBAAO,QAAQ;AAAA,UACnB,WAGS,MAAM,OAAQ,UAAU,QAAQ;AACrC,qBAAS,MAAM,OAAQ,SAAS,MAAM;AAAA,UAC1C,WAGS,MAAM,OAAQ,UAAU,SAAS;AACtC,oBAAQ,MAAM,OAAQ,SAAS;AAAA,UACnC,WAGS,MAAM,OAAQ,UAAU,MAAM;AACnC,kBAAM,UAAU,MAAM,OAAQ,SAAS;AACvC,gBAAI,CAAC,QAAQ,SAAS,IAAQ,GAAG;AAC7B,mBAAK;AAAA,YACT;AAAA,UACJ,WAGS,MAAM,OAAQ,UAAU,SAAS;AAEtC,gBAAI,QAAQ,KAAK,MAAM,OAAQ,KAAK,GAAG;AACnC,sBAAQ,SAAS,MAAM,OAAQ,KAAK;AAAA,YACxC;AAAA,UACJ,MAGK;AAAA,QAGT;AAGA,sBAAc;AAAA,MAClB;AAAA,IAAA,CACH;AAAA,EACL;AACJ;ACjIO,SAAS,yBAAsD;AAClE,SAAO;AAAA,IACH,MAAM;AAAA,IACN,SAAS;AAAA,IACT,SAAS;AAAA,EAAA;AAEjB;"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@conduit-client/command-sse",
|
|
3
|
-
"version": "3.13.
|
|
3
|
+
"version": "3.13.1",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "Luvio SSE Streaming Command",
|
|
6
6
|
"type": "module",
|
|
@@ -31,10 +31,10 @@
|
|
|
31
31
|
"watch": "npm run build --watch"
|
|
32
32
|
},
|
|
33
33
|
"dependencies": {
|
|
34
|
-
"@conduit-client/command-base": "3.13.
|
|
35
|
-
"@conduit-client/command-streaming": "3.13.
|
|
36
|
-
"@conduit-client/service-fetch-network": "3.13.
|
|
37
|
-
"@conduit-client/utils": "3.13.
|
|
34
|
+
"@conduit-client/command-base": "3.13.1",
|
|
35
|
+
"@conduit-client/command-streaming": "3.13.1",
|
|
36
|
+
"@conduit-client/service-fetch-network": "3.13.1",
|
|
37
|
+
"@conduit-client/utils": "3.13.1"
|
|
38
38
|
},
|
|
39
39
|
"volta": {
|
|
40
40
|
"extends": "../../../../package.json"
|