1
1
import { INVALID } from '../denormalize/symbol.js' ;
2
2
import type { EntityInterface } from '../interface.js' ;
3
3
4
- export const addEntities =
5
- (
6
- newEntities : Map < string , Map < string , any > > ,
7
- newIndexes : Map < string , Map < string , any > > ,
8
- entitiesCopy : Record < string , any > ,
9
- indexesCopy : Record < string , any > ,
10
- entityMetaCopy : {
4
+ export const addEntities = (
5
+ {
6
+ entities,
7
+ indexes,
8
+ entityMeta,
9
+ } : {
10
+ entities : Record < string , any > ;
11
+ indexes : Record < string , any > ;
12
+ entityMeta : {
11
13
[ entityKey : string ] : {
12
14
[ pk : string ] : {
13
15
date : number ;
14
16
expiresAt : number ;
15
17
fetchedAt : number ;
16
18
} ;
17
19
} ;
18
- } ,
19
- actionMeta : { fetchedAt : number ; date : number ; expiresAt : number } ,
20
- ) =>
21
- ( schema : EntityInterface , processedEntity : any , id : string ) => {
20
+ } ;
21
+ } ,
22
+ actionMeta : { fetchedAt : number ; date : number ; expiresAt : number } ,
23
+ ) => {
24
+ const newEntities = new Map < string , Map < string , any > > ( ) ;
25
+ const newIndexes = new Map < string , Map < string , any > > ( ) ;
26
+ return ( schema : EntityInterface , processedEntity : any , id : string ) => {
22
27
const schemaKey = schema . key ;
23
28
// first time we come across this type of entity
24
29
if ( ! newEntities . has ( schemaKey ) ) {
25
30
newEntities . set ( schemaKey , new Map ( ) ) ;
26
31
// we will be editing these, so we need to clone them first
27
- entitiesCopy [ schemaKey ] = { ...entitiesCopy [ schemaKey ] } ;
28
- entityMetaCopy [ schemaKey ] = { ...entityMetaCopy [ schemaKey ] } ;
32
+ entities [ schemaKey ] = { ...entities [ schemaKey ] } ;
33
+ entityMeta [ schemaKey ] = { ...entityMeta [ schemaKey ] } ;
29
34
}
30
35
31
36
const newEntitiesKey = newEntities . get ( schemaKey ) as Map < string , any > ;
32
37
const existingEntity = newEntitiesKey . get ( id ) ;
33
38
if ( existingEntity ) {
34
39
newEntitiesKey . set ( id , schema . merge ( existingEntity , processedEntity ) ) ;
35
40
} else {
36
- const inStoreEntity = entitiesCopy [ schemaKey ] [ id ] ;
41
+ const inStoreEntity = entities [ schemaKey ] [ id ] ;
37
42
let inStoreMeta : {
38
43
date : number ;
39
44
expiresAt : number ;
40
45
fetchedAt : number ;
41
46
} ;
42
47
// this case we already have this entity in store
43
- if ( inStoreEntity && ( inStoreMeta = entityMetaCopy [ schemaKey ] [ id ] ) ) {
48
+ if ( inStoreEntity && ( inStoreMeta = entityMeta [ schemaKey ] [ id ] ) ) {
44
49
newEntitiesKey . set (
45
50
id ,
46
51
schema . mergeWithStore (
@@ -50,36 +55,37 @@ export const addEntities =
50
55
processedEntity ,
51
56
) ,
52
57
) ;
53
- entityMetaCopy [ schemaKey ] [ id ] = schema . mergeMetaWithStore (
58
+ entityMeta [ schemaKey ] [ id ] = schema . mergeMetaWithStore (
54
59
inStoreMeta ,
55
60
actionMeta ,
56
61
inStoreEntity ,
57
62
processedEntity ,
58
63
) ;
59
64
} else {
60
65
newEntitiesKey . set ( id , processedEntity ) ;
61
- entityMetaCopy [ schemaKey ] [ id ] = actionMeta ;
66
+ entityMeta [ schemaKey ] [ id ] = actionMeta ;
62
67
}
63
68
}
64
69
65
70
// update index
66
71
if ( schema . indexes ) {
67
72
if ( ! newIndexes . has ( schemaKey ) ) {
68
73
newIndexes . set ( schemaKey , new Map ( ) ) ;
69
- indexesCopy [ schemaKey ] = { ...indexesCopy [ schemaKey ] } ;
74
+ indexes [ schemaKey ] = { ...indexes [ schemaKey ] } ;
70
75
}
71
76
handleIndexes (
72
77
id ,
73
78
schema . indexes ,
74
79
newIndexes . get ( schemaKey ) as Map < string , any > ,
75
- indexesCopy [ schemaKey ] ,
80
+ indexes [ schemaKey ] ,
76
81
newEntitiesKey . get ( id ) ,
77
- entitiesCopy [ schemaKey ] ,
82
+ entities [ schemaKey ] ,
78
83
) ;
79
84
}
80
85
// set this after index updates so we know what indexes to remove from
81
- entitiesCopy [ schemaKey ] [ id ] = newEntitiesKey . get ( id ) ;
86
+ entities [ schemaKey ] [ id ] = newEntitiesKey . get ( id ) ;
82
87
} ;
88
+ } ;
83
89
84
90
function handleIndexes (
85
91
id : string ,
0 commit comments