Skip to content

Commit 7df36f1

Browse files
fix(core, plugin-history-sync): accept only serializable parameters (#474)
1 parent 85f5638 commit 7df36f1

File tree

3 files changed

+17
-22
lines changed

3 files changed

+17
-22
lines changed

.changeset/green-bulldogs-learn.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
---
2+
"@stackflow/plugin-history-sync": patch
3+
"@stackflow/core": patch
4+
---
5+
6+
accept only serializable parameters when making domain event

core/src/event-utils/makeEvent.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,10 @@ import type { DomainEvent } from "../event-types";
22
import type { BaseDomainEvent } from "../event-types/_base";
33
import { id, time } from "../utils";
44

5+
function clone<T extends {}>(input: T): T {
6+
return JSON.parse(JSON.stringify(input));
7+
}
8+
59
export function makeEvent<T extends DomainEvent["name"]>(
610
name: T,
711
parameters: Omit<
@@ -13,7 +17,7 @@ export function makeEvent<T extends DomainEvent["name"]>(
1317
return {
1418
id: id(),
1519
eventDate: time(),
16-
...parameters,
20+
...clone(parameters),
1721
name,
1822
} as Extract<DomainEvent, { name: T }>;
1923
}

extensions/plugin-history-sync/src/historyState.ts

Lines changed: 6 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -12,31 +12,16 @@ interface SerializedState extends State {
1212
_TAG: typeof STATE_TAG;
1313
}
1414

15+
function clone<T>(input: T): T {
16+
return JSON.parse(JSON.stringify(input));
17+
}
18+
1519
function serializeStep(step: ActivityStep): ActivityStep {
16-
return {
17-
...step,
18-
enteredBy:
19-
"activityContext" in step.enteredBy
20-
? {
21-
...step.enteredBy,
22-
activityContext: undefined,
23-
}
24-
: {
25-
...step.enteredBy,
26-
},
27-
};
20+
return clone(step);
2821
}
2922

3023
function serializeActivity(activity: Activity): Activity {
31-
return {
32-
...activity,
33-
context: undefined,
34-
enteredBy: {
35-
...activity.enteredBy,
36-
activityContext: undefined,
37-
},
38-
steps: activity.steps.map(serializeStep),
39-
};
24+
return clone(activity);
4025
}
4126

4227
function serializeState(state: State): SerializedState {

0 commit comments

Comments
 (0)