Skip to content

Commit

Permalink
Update SDKs to ignore retry if set to default (#573)
Browse files Browse the repository at this point in the history
* Update SDKs to ignore `retry` if set to default

* Remove from test output

* Build
  • Loading branch information
bencroker authored Feb 2, 2025
1 parent 854ce6e commit ed980b3
Show file tree
Hide file tree
Showing 24 changed files with 82 additions and 60 deletions.
18 changes: 9 additions & 9 deletions bundles/datastar-aliased.js

Large diffs are not rendered by default.

6 changes: 3 additions & 3 deletions bundles/datastar-aliased.js.map

Large diffs are not rendered by default.

18 changes: 9 additions & 9 deletions bundles/datastar.js

Large diffs are not rendered by default.

6 changes: 3 additions & 3 deletions bundles/datastar.js.map

Large diffs are not rendered by default.

4 changes: 2 additions & 2 deletions library/src/plugins/official/backend/actions/sse.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
// Slug: Use a GET request to fetch data from a server using Server-Sent Events matching the Datastar SDK interface
// Description: Remember, SSE is just a regular SSE request but with the ability to send 0-inf messages to the client.

import { DATASTAR, DATASTAR_REQUEST } from '../../../../engine/consts'
import { DATASTAR, DATASTAR_REQUEST, DefaultSseRetryDurationMs } from '../../../../engine/consts'
import { runtimeErr } from '../../../../engine/errors'
import type { RuntimeContext } from '../../../../engine/types'
import {
Expand Down Expand Up @@ -75,7 +75,7 @@ export const sse = async (
includeLocal: false,
selector: null,
openWhenHidden: false, // will keep the request open even if the document is hidden.
retryInterval: 1_000, // the retry interval in milliseconds
retryInterval: DefaultSseRetryDurationMs, // the retry interval in milliseconds
retryScaler: 2, // the amount to multiply the retry interval by each time
retryMaxWaitMs: 30_000, // the maximum retry interval in milliseconds
retryMaxCount: 10, // the maximum number of retries before giving up
Expand Down
63 changes: 49 additions & 14 deletions sdk/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,18 +11,6 @@ Provide an SDK in a language agnostic way, to that end
1. Keep SDK as minimal as possible
2. Allow per language/framework extended features to live in an SDK ***sugar*** version

### Status

- [x] Create a document (this) to allow any one to make a spec compliant SDK for any language or framework
- [x] Provide a [reference implementation](../sdk/go) in Go
- [ ] Provide SDKs for
- [ ] JS/TS
- [x] PHP
- [x] .NET
- [x] Python
- [x] Java
- [ ] Haskell?

## Details

### Assumptions
Expand Down Expand Up @@ -84,12 +72,12 @@ Currently valid values are

#### Logic
When called the function ***must*** write to the response buffer the following in specified order. If any part of this process fails you ***must*** return/throw an error depending on language norms.
1. ***Must*** write `event: EVENT_TYPE\n` where `EVENT_TYPE` is [EventType](#EventType)
1. ***Must*** write `event: EVENT_TYPE\n` where `EVENT_TYPE` is [EventType](#EventType).
2. If a user defined event ID is provided, the function ***must*** write `id: EVENT_ID\n` where `EVENT_ID` is the event ID.
3. ***Must*** write `retry: RETRY_DURATION\n` where `RETRY_DURATION` is the provided retry duration, ***unless*** the value is the default of `1000` milliseconds.
4. For each string in the provided `dataLines`, you ***must*** write `data: DATA\n` where `DATA` is the provided string.
5. ***Must*** write a `\n\n` to complete the event per the SSE spec.
6. Afterward the writer ***should*** immediately flush. This can be confounded by other middlewares such as compression layers
6. Afterward the writer ***should*** immediately flush. This can be confounded by other middlewares such as compression layers.

### `ServerSentEventGenerator.MergeFragments`

Expand All @@ -109,6 +97,16 @@ ServerSentEventGenerator.MergeFragments(

#### Example Output

Minimal:

```
event: datastar-merge-fragments
data: fragments <div id="feed">
data: fragments <span>1</span>
data: fragments </div>
Maximal:
```
event: datastar-merge-fragments
id: 123
Expand Down Expand Up @@ -171,6 +169,15 @@ ServerSentEventGenerator.RemoveFragments(
#### Example Output
Minimal:
```
event: datastar-remove-fragments
data: selector #target
```
Maximal:
```
event: datastar-remove-fragments
id: 123
Expand Down Expand Up @@ -213,6 +220,15 @@ ServerSentEventGenerator.MergeSignals(
#### Example Output
Minimal:
```
event: datastar-merge-signals
data: signals {"output":"Patched Output Test","show":true,"input":"Test","user":{"name":"","email":""}}
```
Maximal:
```
event: datastar-merge-signals
id: 123
Expand Down Expand Up @@ -251,6 +267,16 @@ ServerSentEventGenerator.RemoveSignals(

#### Example Output

Minimal:

```
event: datastar-remove-signals
data: paths user.name
data: paths user.email
```

Maximal:

```
event: datastar-remove-signals
id: 123
Expand Down Expand Up @@ -286,6 +312,15 @@ ServerSentEventGenerator.ExecuteScript(

#### Example Output

Minimal:

```
event: datastar-execute-script
data: script window.location = "https://data-star.dev"
```

Maximal:

```
event: datastar-execute-script
id: 123
Expand Down
4 changes: 2 additions & 2 deletions sdk/go/consts.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion sdk/go/sse.go
Original file line number Diff line number Diff line change
Expand Up @@ -126,7 +126,7 @@ func (sse *ServerSentEventGenerator) Send(eventType EventType, dataLines []strin
}

// write retry if needed
if evt.RetryDuration.Milliseconds() > 0 {
if evt.RetryDuration.Milliseconds() > 0 && evt.RetryDuration.Milliseconds() != DefaultSseRetryDuration.Milliseconds() {
retry := int(evt.RetryDuration.Milliseconds())
retryStr := strconv.Itoa(retry)
if err := errors.Join(
Expand Down
4 changes: 3 additions & 1 deletion sdk/php/src/ServerSentEventGenerator.php
Original file line number Diff line number Diff line change
Expand Up @@ -170,7 +170,9 @@ protected function send(EventType $eventType, array $dataLines, array $options =
$output[] = 'id: ' . $eventData->eventId;
}

$output[] = 'retry: ' . $eventData->retryDuration;
if ($eventData->retryDuration !== Consts::DEFAULT_SSE_RETRY_DURATION) {
$output[] = 'retry: ' . $eventData->retryDuration;
}

foreach ($eventData->data as $line) {
$output[] = $line;
Expand Down
1 change: 0 additions & 1 deletion sdk/test/get-cases/executeScriptWithDefaults/output.txt
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
event: datastar-execute-script
retry: 1000
data: script console.log('hello');


Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
event: datastar-execute-script
retry: 1000
data: script if (true) {
data: script console.log('hello');
data: script }
Expand Down
1 change: 0 additions & 1 deletion sdk/test/get-cases/executeScriptWithoutDefaults/output.txt
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
event: datastar-execute-script
retry: 1000
data: script console.log('hello');


1 change: 0 additions & 1 deletion sdk/test/get-cases/mergeFragmentsWithDefaults/output.txt
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
event: datastar-merge-fragments
retry: 1000
data: fragments <div>Merge</div>


Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
event: datastar-merge-fragments
retry: 1000
data: fragments <div>
data: fragments <span>Merge</span>
data: fragments </div>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
event: datastar-merge-fragments
retry: 1000
data: fragments <div>Merge</div>


1 change: 0 additions & 1 deletion sdk/test/get-cases/mergeSignalsWithDefaults/output.txt
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
event: datastar-merge-signals
retry: 1000
data: signals {"one":1,"two":2}


Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
event: datastar-merge-signals
retry: 1000
data: signals {"one":"first\\n signal","two":"second signal"}


1 change: 0 additions & 1 deletion sdk/test/get-cases/mergeSignalsWithoutDefaults/output.txt
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
event: datastar-merge-signals
retry: 1000
data: signals {"one":1,"two":2}


1 change: 0 additions & 1 deletion sdk/test/get-cases/removeFragmentsWithDefaults/output.txt
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
event: datastar-remove-fragments
retry: 1000
data: selector #target


Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
event: datastar-remove-fragments
retry: 1000
data: selector #target


1 change: 0 additions & 1 deletion sdk/test/get-cases/removeSignalsWithDefaults/output.txt
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
event: datastar-remove-signals
retry: 1000
data: paths one


2 changes: 0 additions & 2 deletions sdk/test/get-cases/sendTwoEvents/output.txt
Original file line number Diff line number Diff line change
@@ -1,10 +1,8 @@
event: datastar-merge-fragments
retry: 1000
data: fragments <div>Merge</div>


event: datastar-merge-fragments
retry: 1000
data: fragments <div>Merge 2</div>


1 change: 0 additions & 1 deletion sdk/test/post-cases/readSignalsFromBody/output.txt
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
event: datastar-merge-fragments
retry: 1000
data: fragments <div>Merge</div>


2 changes: 1 addition & 1 deletion site/static/md/reference/sdks.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# SDKs

Datastar provides backend SDKs that simplify the process of generating [SSE events](/reference/sse_events) specific to Datastar.
Datastar provides backend SDKs that simplify the process of generating [SSE events](/reference/sse_events) specific to Datastar. Every SDK must follow the [Architecture Decision Record](https://github.com/starfederation/datastar/blob/develop/sdk/README.md) document.

## Clojure

Expand Down

0 comments on commit ed980b3

Please sign in to comment.