| 64 | ): Effect.Effect<A, E, R> => Effect.zipLeft(effect, invalidate(keys)) |
| 65 | |
| 66 | const unsafeRegister = ( |
| 67 | keys: ReadonlyArray<unknown> | ReadonlyRecord<string, ReadonlyArray<unknown>>, |
| 68 | handler: () => void |
| 69 | ): () => void => { |
| 70 | const resolvedKeys = Array.isArray(keys) ? keys.map(stringOrHash) : recordHashes(keys as any) |
| 71 | for (let i = 0; i < resolvedKeys.length; i++) { |
| 72 | let set = handlers.get(resolvedKeys[i]) |
| 73 | if (set === undefined) { |
| 74 | set = new Set() |
| 75 | handlers.set(resolvedKeys[i], set) |
| 76 | } |
| 77 | set.add(handler) |
| 78 | } |
| 79 | return () => { |
| 80 | for (let i = 0; i < resolvedKeys.length; i++) { |
| 81 | const set = handlers.get(resolvedKeys[i])! |
| 82 | set.delete(handler) |
| 83 | if (set.size === 0) { |
| 84 | handlers.delete(resolvedKeys[i]) |
| 85 | } |
| 86 | } |
| 87 | } |
| 88 | } |
| 89 | |
| 90 | const query = <A, E, R>( |
| 91 | keys: ReadonlyArray<unknown> | ReadonlyRecord<string, ReadonlyArray<unknown>>, |