-
Notifications
You must be signed in to change notification settings - Fork 15
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
feat!: provide
onError
, onComment
, and onRetry
callbacks
BREAKING CHANGE: The parser now takes an object of callbacks instead of an `onParse` callback. This means you do not have to check the type of the event in the `onEvent` callback, but instead provide separate callbacks for each event type. BREAKING CHANGE: The `ParsedEvent` type has been renamed to `EventSourceMessage` and the `type` attribute has been removed. BREAKING CHANGE: The `EventSourceCallback` type has been removed in favor of the `ParserCallbacks` interface. BREAKING CHNAGE: The `ReconnectInterval` type has been removed in favor of providing the interval directly to the `onRetry` callback. BREAKING CHANGE: The `ParseEvent` type has been removed in favor of providing separate callbacks for each event type. BREAKING CHANGE: The parser has been rewritten to be more specification compliant. Certain _rare_ edge cases may now be handled differently. Mixed CRLF and LF line endings will now be handled correctly. `retry` fields now have to be completely valid integers to be parsed.
- Loading branch information
Showing
15 changed files
with
4,626 additions
and
11,232 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,92 @@ | ||
# How to migrate from v2 to v3 | ||
|
||
## If importing from `eventsource-parser` | ||
|
||
The parser now takes an object of callbacks instead of only an `onParse` callback. This means you do not have to check the type of the event in the `onEvent` callback, but instead provide separate callbacks for each event type: | ||
|
||
```diff | ||
-import {createParser, type ParsedEvent, type ReconnectInterval} from 'eventsource-parser' | ||
+import {createParser, type EventSourceMessage} from 'eventsource-parser' | ||
|
||
-const parser = createParser((event: ParsedEvent | ReconnectInterval) => { | ||
- if (event.type === 'event') { | ||
- // …handle event… | ||
- } else if (event.type === 'reconnect-interval') { | ||
- // …handle retry interval change… | ||
- } | ||
-}) | ||
+const parser = createParser({ | ||
+ onEvent: (event: EventSourceMessage) => { | ||
+ // …handle event… | ||
+ }, | ||
+ onRetry: (interval: number) => { | ||
+ // …handle retry interval change… | ||
+ } | ||
+}) | ||
``` | ||
|
||
The parser also now has a `onError` callback that you can use to handle parse errors, as well as an `onComment` callback that you can use to handle comments: | ||
|
||
```ts | ||
const parser = createParser({ | ||
onEvent: (event: EventSourceMessage) => { | ||
// …handle event… | ||
}, | ||
onRetry: (interval: number) => { | ||
// …handle retry interval change… | ||
}, | ||
onError: (error: Error) => { | ||
// …handle parse error… | ||
}, | ||
onComment: (comment: string) => { | ||
// …handle comment… | ||
}, | ||
}) | ||
``` | ||
|
||
Renamed types: | ||
|
||
- `ParsedEvent` => `EventSourceMessage` (and `type` property is removed) | ||
|
||
Removed types: | ||
|
||
- `EventSourceParseCallback` - replaced with `ParserCallbacks` interface (`onEvent` property) | ||
- `ReconnectInterval` - no longer needed, as the `onRetry` callback now provides the interval directly | ||
- `ParseEvent` - no longer needed - the different event types are now handled by separate callbacks | ||
|
||
## If using the `TransformStream` variant | ||
|
||
No change is neccessary, but you can now subscribe to changes in the retry interval by providing a callback to the `onRetry` option when creating the stream: | ||
|
||
```ts | ||
const stream = new EventSourceParserStream({ | ||
onRetry: (interval: number) => { | ||
// …handle retry interval change… | ||
}, | ||
}) | ||
``` | ||
|
||
There is also a new option to specify how parse should be handled - by default it will ignore them, but you can choose to terminate the stream or handle it manually: | ||
|
||
```ts | ||
const stream = new EventSourceParserStream({ | ||
onError: (error: Error) => { | ||
// …handle parse error… | ||
}, | ||
}) | ||
|
||
// …or… | ||
const stream = new EventSourceParserStream({ | ||
onError: 'terminate', | ||
}) | ||
``` | ||
|
||
Lastly, if you're interested in any comments that are encountered during parsing, you can provide a callback to the `onComment` option: | ||
|
||
```ts | ||
const stream = new EventSourceParserStream({ | ||
onComment: (comment: string) => { | ||
// …handle comment… | ||
}, | ||
}) | ||
``` |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.