DaniSchenk / moment-feiertage

MomentJS Plugin: Check if a date is a german holiday (Feiertag)
https://www.npmjs.com/package/moment-feiertage
30 stars 11 forks source link

Problem mit der for-in-Schleife #15

Closed ACertainCoder closed 3 years ago

ACertainCoder commented 3 years ago

Hallo, mir ist per Zufall dieses Fehler aufgefallen:

TypeError: Cannot read property 'length' of undefined
at _isHoliday106 (%PROJECT%\node_modules\moment-feiertage\build\index.js:53:39)
at _isHoliday (%PROJECT%\node_modules\moment-feiertage\build\index.js:85:23)

moment: ^2.29.1 moment-duration-format: ^2.3.2 moment-feiertage: ^2.0.3 var holiday = moment().isHoliday();

Ich bin den Part mit dem Debugger durchgegangen und dabei auf eine for-in-Schleife gestoßen. Problem ist, dass diese ebenfalls durch die Prototypen itteriert und dadurch Attribute verarbeitet, die keine Feiertage beinhalten: Code_2020-12-14_17-33-32

Ich habe hier zwei Vorschläge mit denen man das Problem lösen könnte.

1) via Object.keys und for-of:

for (var h of Object.keys(holidays)) {
    if (_moment.isSame(holidays[h].date, 'day')) {
        if (holidays[h].state.length === 0) {
            return h;
        }
        else {
            if (_state && holidays[h].state.indexOf(_state) > -1) {
                return h;
            }
            else {
                return false;
            }
        }
    }
}

2) via Object.entries und for-of

for(var [h, data] of Object.entries(holidays)) {
    if (_moment.isSame(data.date, 'day')) {
        if (data.state.length === 0) {
            return h;
        }
        else {
            if (_state && data.state.indexOf(_state) > -1) {
                return h;
            }
            else {
                return false;
            }
        }
    }
}

Mit diesen Änderungen funktionierte das Modul bei mir wieder. - ggf. erstelle ich auch gerne einen Pull Request

Viele Grüße ACertainCoder

DaniSchenk commented 3 years ago

@ACertainCoder danke für denk Bug Report und die Vorschläge. Ich würde Version 1 bevorzugen.

PRs sind immer willkommen. Genial wäre zusätzlich auch ein Unit Test, der auf deine Fehlerbehebung prüft.