All files RouteParams.js

100% Statements 26/26
90% Branches 18/20
100% Functions 5/5
100% Lines 25/25
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61          45x             200x 200x 77x 77x 17x 17x   60x         77x 77x 60x   77x       200x       138x       60x 60x 20x     40x       154x 16x 3x 3x   151x 85x   66x      
import {
    isEmpty,
    isMatchGenerate
} from './utils.js';
 
const emptyMatchGenerate = {
    match: [],
    generate: []
};
 
export default class RouteParams {
    constructor (rawRouteParams) {
        const parsedParams = {};
        for (let r in rawRouteParams) {
            let rawRouteParam = rawRouteParams[r];
            if (isMatchGenerate(rawRouteParam)) {
                rawRouteParam.match = RouteParams.normalizeItems(rawRouteParam.match);
                rawRouteParam.generate = RouteParams.normalizeItems(rawRouteParam.generate);
            } else {
                rawRouteParam = {
                    match: RouteParams.normalizeItems(rawRouteParam),
                    generate: RouteParams.normalizeItems()
                };
            }
            Eif (rawRouteParam.match.length || rawRouteParam.generate.length) {
                if (!rawRouteParam.generate.length) {
                    rawRouteParam.generate = RouteParams.completeGenerateItems(rawRouteParam.match);
                }
                parsedParams[r] = rawRouteParam;
            }
        }
 
        this._parsedParams = parsedParams;
    }
 
    getParam (paramName) {
        return this._parsedParams[paramName] || emptyMatchGenerate;
    }
 
    static completeGenerateItems (matchItems) {
        for (let matchItem of matchItems) {
            if (typeof matchItem !== 'function' && matchItem instanceof RegExp === false) {
                return [matchItem];
            }
        }
        return [];
    }
 
    static normalizeItems (rawRouteParamItems) {
        if (rawRouteParamItems instanceof Array) {
            const filteredRouteParamItems = rawRouteParamItems.filter((rawRouteParamItem) => !isEmpty(rawRouteParamItem));
            Eif (filteredRouteParamItems.length) {
                return filteredRouteParamItems;
            }
        } else if (!isEmpty(rawRouteParamItems)) {
            return [rawRouteParamItems];
        }
        return [];
    }
}