@@ -7,10 +7,21 @@ type Options = Parameters<typeof useStore>[0] & {
77}
88type AnyWritableAtom = WritableAtom < unknown , never [ ] , unknown >
99
10+ type SpreadArgs < Args extends readonly unknown [ ] > = Args extends readonly [
11+ inferFirst ,
12+ ...inferRest ,
13+ ]
14+ ?readonly [ First , ...Rest ]
15+ :Args extends readonly [ inferSingle ]
16+ ?readonly [ Single ]
17+ :readonly [ ]
18+
1019type InferAtomTuples < T > = {
11- [ K in keyof T ] :T [ K ] extends readonly [ inferA , unknown ]
20+ [ K in keyof T ] :T [ K ] extends readonly [ inferA , ...infer _Rest ]
1221 ?A extends WritableAtom < unknown , inferArgs , infer_Result >
13- ?readonly [ A , Args [ 0 ] ]
22+ ?Args extends readonly unknown [ ]
23+ ?readonly [ A , ...SpreadArgs < Args > ]
24+ :readonly [ A ]
1425 :T [ K ]
1526 :never
1627}
@@ -22,7 +33,7 @@ export type INTERNAL_InferAtomTuples<T> = InferAtomTuples<T>
2233const hydratedMap :WeakMap < Store , WeakSet < AnyWritableAtom > > = new WeakMap ( )
2334
2435export function useHydrateAtoms <
25- T extends ( readonly [ AnyWritableAtom , unknown ] ) [ ] ,
36+ T extends ( readonly [ AnyWritableAtom , ... any [ ] ] ) [ ] ,
2637> ( values :InferAtomTuples < T > , options ?:Options ) :void
2738
2839export function useHydrateAtoms < T extends Map < AnyWritableAtom , unknown > > (
@@ -31,19 +42,19 @@ export function useHydrateAtoms<T extends Map<AnyWritableAtom, unknown>>(
3142) :void
3243
3344export function useHydrateAtoms <
34- T extends Iterable < readonly [ AnyWritableAtom , unknown ] > ,
45+ T extends Iterable < readonly [ AnyWritableAtom , ... any [ ] ] > ,
3546> ( values :InferAtomTuples < T > , options ?:Options ) :void
3647
3748export function useHydrateAtoms <
38- T extends Iterable < readonly [ AnyWritableAtom , unknown ] > ,
49+ T extends Iterable < readonly [ AnyWritableAtom , ... any [ ] ] > ,
3950> ( values :T , options ?:Options ) {
4051const store = useStore ( options )
4152
4253const hydratedSet = getHydratedSet ( store )
43- for ( const [ atom , value ] of values ) {
54+ for ( const [ atom , ... args ] of values ) {
4455if ( ! hydratedSet . has ( atom ) || options ?. dangerouslyForceHydrate ) {
4556hydratedSet . add ( atom )
46- store . set ( atom , value as never )
57+ store . set ( atom , ... ( args as never [ ] ) )
4758}
4859}
4960}