All files Query.js

100% Statements 31/31
100% Branches 7/7
100% Functions 8/8
100% Lines 29/29
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    138x 245x       1308x 1308x   1308x 1308x 471x 471x 887x 887x 95x   792x 792x 792x         1308x             297x       369x 369x 369x 383x 383x 383x   369x 369x       1487x       458x 152x   306x 306x      
import Part from './Part.js';
 
const keyToKey = (key) => key;
const keyToLowerCase = (key) => key.toLowerCase();
 
export default class Query extends Part {
    constructor (rawQuery) {
        super(rawQuery);
        rawQuery = this._value;
 
        let components = {};
        if (rawQuery) {
            const queryCouples = rawQuery.split('&');
            queryCouples.forEach((queryCouple) => {
                const equalIndex = queryCouple.indexOf('=');
                if (equalIndex === -1) {
                    components[decodeURIComponent(queryCouple)] = '';
                } else {
                    const queryCoupleKey = decodeURIComponent(queryCouple.substr(0, equalIndex));
                    const queryCoupleValue = decodeURIComponent(queryCouple.substr(equalIndex + 1));
                    components[queryCoupleKey] = queryCoupleValue;
                }
            });
        }
 
        this._value = {
            rawQuery,
            components
        };
    }
 
    isEmpty () {
        return this._value.rawQuery === null;
    }
 
    toString (transformKey=keyToKey) {
        const components = this.toObject();
        const queryCouples = [];
        for (let c in components) {
            const queryCoupleKey = encodeURIComponent(transformKey(c));
            const queryCoupleValue = encodeURIComponent(components[c]);
            queryCouples.push(queryCoupleKey + '=' + queryCoupleValue);
        }
        const rawQuery = queryCouples.join('&');
        return rawQuery;
    }
 
    toObject () {
        return this._value.components;
    }
 
    toLowerCase (condition) {
        if (!condition) {
            return this;
        }
        const PartConstructor = this.constructor;
        return new PartConstructor(this.toString(keyToLowerCase));
    }
}