Skip to content

Commit 3796ded

Browse files
committed
refactor(SDK): Move DuplicateToggleValue checks into a separate function
1 parent 42b390f commit 3796ded

File tree

2 files changed

+47
-14
lines changed

2 files changed

+47
-14
lines changed

engine/modules/toggle/src/main/resources/view/toggle-module/ToggleModule.js

Lines changed: 45 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,11 @@ import {MissingToggleError} from './errors/MissingToggleError.js'
44
import {DuplicateToggleValueError} from './errors/DuplicateToggleValueError.js'
55

66
export class ToggleModule {
7-
7+
88
constructor (assets) {
99
this.previousFrame = {}
1010
this.missingToggles = {}
11-
11+
1212
ToggleModule.refreshContent = () => {
1313
if (!this.currentFrame || !ToggleModule.toggles) {
1414
return
@@ -17,7 +17,7 @@ export class ToggleModule {
1717
const entity = entityModule.entities.get(parseInt(registeredEntity))
1818
const toggleInfo = this.currentFrame.registered[registeredEntity]
1919
const toggleState = ToggleModule.toggles[toggleInfo.name]
20-
20+
2121
if (toggleState == null && !this.missingToggles[toggleInfo.name]) {
2222
ErrorLog.push(new MissingToggleError(toggleInfo.name))
2323
this.missingToggles[toggleInfo.name] = true
@@ -27,19 +27,14 @@ export class ToggleModule {
2727
)
2828
}
2929
}
30-
31-
for (const e of ToggleModule.errors) {
32-
ErrorLog.push(e)
33-
}
34-
30+
31+
pushDuplicateErrors();
3532
}
3633

3734
static refreshContent () {}
3835

3936
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);
4338

4439
ToggleModule.toggles[option.toggle] = option.default
4540
option.get = () => ToggleModule.toggles[option.toggle]
@@ -77,4 +72,42 @@ export class ToggleModule {
7772
}
7873

7974
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+
}

engine/modules/toggle/src/main/resources/view/toggle-module/errors/DuplicateToggleValueError.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
export class DuplicateToggleValueError extends Error {
2-
constructor (toggle, cause) {
3-
super('Duplicate values in toggle "' + toggle + '". Make sure it is set up correctly in your config.js.')
2+
constructor (toggle, dup, cause) {
3+
super('(' + dup.keys.toString() + ') have same value \'' + dup.value + '\' in toggle "' + toggle + '". Avoid those duplicates in your config.js.')
44
this.toggle = toggle
55
this.cause = cause
66
this.name = 'DuplicateToggleValueError'

0 commit comments

Comments
 (0)