Skip to content

Commit cedbd4c

Browse files
authored
fix(standard-server): optimize withEventMeta to avoid unnecessary proxies event iterator data (#979)
This prevents structuredClone failures on proxy things Fixes: #977 <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **Performance** * Skips metadata processing when no meaningful event metadata is present, reducing overhead while preserving existing behavior. * **Tests** * Added tests covering cases where metadata should be applied vs. bypassed to ensure consistent, efficient handling. <!-- end of auto-generated comment: release notes by coderabbit.ai -->
1 parent 06aad3a commit cedbd4c

File tree

2 files changed

+22
-0
lines changed

2 files changed

+22
-0
lines changed

packages/standard-server/src/event-iterator/meta.test.ts

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,3 +15,17 @@ it('get/withEventMeta', () => {
1515
expect(() => withEventMeta(data, { retry: -1 })).toThrow('Event\'s retry must be a integer and >= 0')
1616
expect(() => withEventMeta(data, { comments: ['hi\n'] })).toThrow('Event\'s comment must not contain a newline character')
1717
})
18+
19+
it('withEventMeta only proxy when make sense', () => {
20+
const data = { value: 123, meta: undefined }
21+
22+
expect(withEventMeta(data, { id: '123', retry: 10000, comments: ['hello', 'world'] })).not.toBe(data)
23+
expect(withEventMeta(data, { id: '' })).not.toBe(data)
24+
expect(withEventMeta(data, { retry: 0 })).not.toBe(data)
25+
expect(withEventMeta(data, { comments: [''] })).not.toBe(data)
26+
27+
expect(withEventMeta(data, {})).toBe(data)
28+
expect(withEventMeta(data, { notExists: true } as any)).toBe(data)
29+
expect(withEventMeta(data, { id: undefined })).toBe(data)
30+
expect(withEventMeta(data, { comments: [] })).toBe(data)
31+
})

packages/standard-server/src/event-iterator/meta.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,14 @@ const EVENT_SOURCE_META_SYMBOL = Symbol('ORPC_EVENT_SOURCE_META')
77
export type EventMeta = Partial<Pick<EventMessage, 'retry' | 'id' | 'comments'>>
88

99
export function withEventMeta<T extends object>(container: T, meta: EventMeta): T {
10+
if (
11+
meta.id === undefined
12+
&& meta.retry === undefined
13+
&& !meta.comments?.length
14+
) {
15+
return container
16+
}
17+
1018
if (meta.id !== undefined) {
1119
assertEventId(meta.id)
1220
}

0 commit comments

Comments
 (0)