@@ -4,11 +4,11 @@ import {MissingToggleError} from './errors/MissingToggleError.js'
4
4
import { DuplicateToggleValueError } from './errors/DuplicateToggleValueError.js'
5
5
6
6
export class ToggleModule {
7
-
7
+
8
8
constructor ( assets ) {
9
9
this . previousFrame = { }
10
10
this . missingToggles = { }
11
-
11
+
12
12
ToggleModule . refreshContent = ( ) => {
13
13
if ( ! this . currentFrame || ! ToggleModule . toggles ) {
14
14
return
@@ -17,7 +17,7 @@ export class ToggleModule {
17
17
const entity = entityModule . entities . get ( parseInt ( registeredEntity ) )
18
18
const toggleInfo = this . currentFrame . registered [ registeredEntity ]
19
19
const toggleState = ToggleModule . toggles [ toggleInfo . name ]
20
-
20
+
21
21
if ( toggleState == null && ! this . missingToggles [ toggleInfo . name ] ) {
22
22
ErrorLog . push ( new MissingToggleError ( toggleInfo . name ) )
23
23
this . missingToggles [ toggleInfo . name ] = true
@@ -27,19 +27,14 @@ export class ToggleModule {
27
27
)
28
28
}
29
29
}
30
-
31
- for ( const e of ToggleModule . errors ) {
32
- ErrorLog . push ( e )
33
- }
34
-
30
+
31
+ pushDuplicateErrors ( ) ;
35
32
}
36
33
37
34
static refreshContent ( ) { }
38
35
39
36
static defineToggle ( option ) {
40
- if ( new Set ( Object . values ( option . values ) ) . size != Object . values ( option . values ) . length ) {
41
- ToggleModule . errors . push ( new DuplicateToggleValueError ( option . toggle ) )
42
- }
37
+ checkDuplicates ( option ) ;
43
38
44
39
ToggleModule . toggles [ option . toggle ] = option . default
45
40
option . get = ( ) => ToggleModule . toggles [ option . toggle ]
@@ -77,4 +72,42 @@ export class ToggleModule {
77
72
}
78
73
79
74
ToggleModule . toggles = { }
80
- ToggleModule . errors = [ ]
75
+ ToggleModule . duplicateErrors = { }
76
+
77
+ function createIfNull ( obj , key , value ) {
78
+ obj [ key ] = obj [ key ] || value
79
+ }
80
+
81
+ function insertNewDuplicate ( dups , v , key ) {
82
+ createIfNull ( dups , v . key , { keys : [ ] , value : v . value } )
83
+
84
+ if ( ! dups [ v . key ] . keys . includes ( v . key ) ) {
85
+ dups [ v . key ] . keys . push ( v . key )
86
+ }
87
+ dups [ v . key ] . keys . push ( key )
88
+ }
89
+
90
+ function checkDuplicates ( option ) {
91
+ var values = [ ]
92
+
93
+ ToggleModule . duplicateErrors [ option . toggle ] = { }
94
+
95
+ for ( const key in option . values ) {
96
+ const value = option . values [ key ]
97
+ const v = values . find ( elem => elem . value == value )
98
+
99
+ if ( v ) {
100
+ insertNewDuplicate ( ToggleModule . duplicateErrors [ option . toggle ] , v , key )
101
+ } else {
102
+ values . push ( { key : key , value : value } )
103
+ }
104
+ }
105
+ }
106
+
107
+ function pushDuplicateErrors ( ) {
108
+ for ( const toggle in ToggleModule . duplicateErrors ) {
109
+ for ( const dup of Object . values ( ToggleModule . duplicateErrors [ toggle ] ) ) {
110
+ ErrorLog . push ( new DuplicateToggleValueError ( toggle , dup ) )
111
+ }
112
+ }
113
+ }
0 commit comments