@@ -17,24 +17,34 @@ const Pending = 1;
1717const Resolved = 2 ;
1818const Rejected = 3 ;
1919
20- type EmptyRecord < K , V > = { |
20+ type EmptyRecord < K > = { |
2121 status : 0 ,
2222 suspender : null ,
2323 key : K ,
2424 value : null ,
2525 error : null ,
26- next : Record < K , V> | null ,
27- previous : Record < K , V> | null ,
26+ next : any , // TODO: (issue #12941)
27+ previous : any , // TODO: (issue #12941)
28+ /**
29+ * Proper types would be something like this:
30+ * next: Record<K, V> | null,
31+ * previous: Record<K, V> | null,
32+ */
2833| } ;
2934
3035type PendingRecord < K , V > = { |
3136 status : 1 ,
32- suspender : Promise < K , V> ,
37+ suspender : Promise < V > ,
3338 key : K ,
3439 value : null ,
3540 error : null ,
36- next : Record < K , V> | null ,
37- previous : Record < K , V> | null ,
41+ next : any , // TODO: (issue #12941)
42+ previous : any , // TODO: (issue #12941)
43+ /**
44+ * Proper types would be something like this:
45+ * next: Record<K, V> | null,
46+ * previous: Record<K, V> | null,
47+ */
3848| } ;
3949
4050type ResolvedRecord < K , V > = { |
@@ -43,30 +53,41 @@ type ResolvedRecord<K, V> = {|
4353 key : K ,
4454 value : V ,
4555 error : null ,
46- next : Record < K , V> | null ,
47- previous : Record < K , V> | null ,
56+ next : any , // TODO: (issue #12941)
57+ previous : any , // TODO: (issue #12941)
58+ /**
59+ * Proper types would be something like this:
60+ * next: Record<K, V> | null,
61+ * previous: Record<K, V> | null,
62+ */
4863| } ;
4964
50- type RejectedRecord < K , V > = { |
65+ type RejectedRecord < K > = { |
5166 status : 3 ,
5267 suspender : null ,
5368 key : K ,
5469 value : null ,
5570 error : Error ,
56- next : Record < K , V> | null ,
57- previous : Record < K , V> | null ,
71+ next : any , // TODO: (issue #12941)
72+ previous : any , // TODO: (issue #12941)
73+ /**
74+ * Proper types would be something like this:
75+ * next: Record<K, V> | null,
76+ * previous: Record<K, V> | null,
77+ */
5878| } ;
5979
6080type Record < K , V > =
61- | EmptyRecord < K , V >
81+ | EmptyRecord < K >
6282 | PendingRecord < K , V >
6383 | ResolvedRecord < K , V >
64- | RejectedRecord < K , V > ;
84+ | RejectedRecord < K > ;
6585
6686type RecordCache < K , V > = { |
6787 map : Map < K , Record< K , V >> ,
6888 head : Record < K , V > | null ,
6989 tail : Record < K , V > | null ,
90+ size : number ,
7091| } ;
7192
7293// TODO: How do you express this type with Flow?
@@ -107,7 +128,7 @@ if (__DEV__) {
107128const MAX_SIZE = 500 ;
108129const PAGE_SIZE = 50 ;
109130
110- function createRecord < K , V > ( key : K ) : EmptyRecord < K , V > {
131+ function createRecord < K > (key: K): EmptyRecord< K > {
111132 return {
112133 status : Empty ,
113134 suspender : null ,
@@ -131,7 +152,7 @@ function createRecordCache<K, V>(): RecordCache<K, V> {
131152export function createCache(invalidator: () => mixed ) : Cache {
132153 const resourceMap : ResourceMap = new Map ( ) ;
133154
134- function accessRecord < K , V > (resourceType: any, key: K): Record< V > {
155+ function accessRecord < K , V > (resourceType: any, key: K): Record< K , V > {
135156 if ( __DEV__ ) {
136157 warning (
137158 typeof resourceType !== 'string' && typeof resourceType !== 'number' ,
@@ -206,22 +227,22 @@ export function createCache(invalidator: () => mixed): Cache {
206227 return newHead;
207228 }
208229
209- function load < V > (emptyRecord: EmptyRecord, suspender: Promise< V > ) {
210- const pendingRecord : PendingRecord < V > = ( emptyRecord : any ) ;
230+ function load < K , V > (emptyRecord: EmptyRecord< K > , suspender: Promise< V > ) {
231+ const pendingRecord : PendingRecord < K , V > = ( emptyRecord : any ) ;
211232 pendingRecord . status = Pending ;
212233 pendingRecord . suspender = suspender ;
213234 suspender . then (
214235 value => {
215236 // Resource loaded successfully.
216- const resolvedRecord : ResolvedRecord < V > = (pendingRecord: any);
237+ const resolvedRecord : ResolvedRecord < K , V > = ( pendingRecord : any ) ;
217238 resolvedRecord . status = Resolved ;
218239 resolvedRecord . suspender = null ;
219240 resolvedRecord . value = value ;
220241 } ,
221242 error => {
222243 // Resource failed to load. Stash the error for later so we can throw it
223244 // the next time it's requested.
224- const rejectedRecord : RejectedRecord = ( pendingRecord : any ) ;
245+ const rejectedRecord : RejectedRecord < K > = (pendingRecord: any);
225246 rejectedRecord.status = Rejected;
226247 rejectedRecord.suspender = null;
227248 rejectedRecord.error = error;
@@ -239,7 +260,7 @@ export function createCache(invalidator: () => mixed): Cache {
239260 miss: A => Promise < V > ,
240261 missArg: A,
241262 ): void {
242- const record : Record < V > = accessRecord ( resourceType , key ) ;
263+ const record : Record < K , V > = accessRecord ( resourceType , key ) ;
243264 switch ( record . status ) {
244265 case Empty :
245266 // Warm the cache.
@@ -263,7 +284,7 @@ export function createCache(invalidator: () => mixed): Cache {
263284 miss: A => Promise < V > ,
264285 missArg: A,
265286 ): V {
266- const record : Record < V > = accessRecord ( resourceType , key ) ;
287+ const record : Record < K , V > = accessRecord ( resourceType , key ) ;
267288 switch ( record . status ) {
268289 case Empty :
269290 // Load the requested resource.
0 commit comments