@@ -11,23 +11,28 @@ export interface IndexFieldOptions {
11
11
collate ?: string ;
12
12
}
13
13
14
+ export interface IndexesMeta {
15
+ named : { [ name : string ] : IndexOptions } ;
16
+ unnamed : IndexOptions [ ] ;
17
+ }
18
+
14
19
export type IndexOptions = Pick < SequelizeIndexOptions , Exclude < keyof SequelizeIndexOptions , 'fields' > > ;
15
20
16
21
/**
17
22
* Returns model indexes from class by restoring this
18
23
* information from reflect metadata
19
24
*/
20
- export function getIndexes ( target : any ) : any | undefined {
21
- const indexes = Reflect . getMetadata ( INDEXES_KEY , target ) ;
25
+ export function getIndexes ( target : any ) : IndexesMeta {
26
+ const { named = { } , unnamed = [ ] } : IndexesMeta =
27
+ Reflect . getMetadata ( INDEXES_KEY , target ) || { } ;
22
28
23
- // tslint:disable-next-line:prefer-object-spread
24
- return indexes && Object . assign ( [ ] , indexes ) ;
29
+ return { named : { ...named } , unnamed : [ ...unnamed ] } ;
25
30
}
26
31
27
32
/**
28
33
* Sets indexes
29
34
*/
30
- export function setIndexes ( target : any , indexes : any ) : void {
35
+ export function setIndexes ( target : any , indexes : IndexesMeta ) : void {
31
36
Reflect . defineMetadata ( INDEXES_KEY , indexes , target ) ;
32
37
}
33
38
@@ -39,14 +44,17 @@ export function addFieldToIndex(target: any,
39
44
fieldOptions : IndexFieldOptions ,
40
45
indexOptions : IndexOptions ,
41
46
indexId ?: string | number ) : string | number {
42
- const indexes = getIndexes ( target ) || [ ] ;
47
+ const indexes = getIndexes ( target ) ;
43
48
44
49
const chosenId = typeof indexId !== 'undefined'
45
50
? indexId
46
- : indexOptions . name || indexes . length ;
47
- if ( ! indexes [ chosenId ] ) indexes [ chosenId ] = { ...indexOptions } ;
51
+ : indexOptions . name || indexes . unnamed . length ;
52
+ const indexStore = typeof chosenId === 'string'
53
+ ? indexes . named
54
+ : indexes . unnamed ;
55
+ if ( ! indexStore [ chosenId ] ) indexStore [ chosenId ] = { ...indexOptions } ;
48
56
49
- const index = indexes [ chosenId ] ;
57
+ const index = indexStore [ chosenId ] ;
50
58
if ( ! index . fields ) index . fields = [ ] ;
51
59
index . fields . push ( fieldOptions ) ;
52
60
0 commit comments