(input: {
db: Database.Interface["db"]
workspaceID: WorkspaceV2.ID
state: Record<string, number>
signal?: AbortSignal
timeout: number
})
| 896 | } |
| 897 | |
| 898 | function waitUntilSynced(input: { |
| 899 | db: Database.Interface["db"] |
| 900 | workspaceID: WorkspaceV2.ID |
| 901 | state: Record<string, number> |
| 902 | signal?: AbortSignal |
| 903 | timeout: number |
| 904 | }): Effect.Effect<void, unknown> { |
| 905 | return Effect.suspend(() => |
| 906 | waitEvent({ |
| 907 | timeout: input.timeout, |
| 908 | signal: input.signal, |
| 909 | fn(event) { |
| 910 | return event.workspace === input.workspaceID || event.payload.type === "sync" |
| 911 | }, |
| 912 | }).pipe( |
| 913 | Effect.andThen(synced(input.db, input.state)), |
| 914 | Effect.flatMap((done): Effect.Effect<void, unknown> => (done ? Effect.void : waitUntilSynced(input))), |
| 915 | ), |
| 916 | ) |
| 917 | } |
| 918 | |
| 919 | function synced(db: Database.Interface["db"], state: Record<string, number>): Effect.Effect<boolean> { |
| 920 | const ids = Object.keys(state) |
no test coverage detected