| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879 | var hasOwnProperty = Object.prototype.hasOwnProperty;function buildMap(list, caseInsensitive) {    var map = Object.create(null);    if (!Array.isArray(list)) {        return null;    }    for (var i = 0; i < list.length; i++) {        var name = list[i];        if (caseInsensitive) {            name = name.toLowerCase();        }        map[name] = true;    }    return map;}function buildList(data) {    if (!data) {        return null;    }    var tags = buildMap(data.tags, true);    var ids = buildMap(data.ids);    var classes = buildMap(data.classes);    if (tags === null &&        ids === null &&        classes === null) {        return null;    }    return {        tags: tags,        ids: ids,        classes: classes    };}function buildIndex(data) {    var scopes = false;    if (data.scopes && Array.isArray(data.scopes)) {        scopes = Object.create(null);        for (var i = 0; i < data.scopes.length; i++) {            var list = data.scopes[i];            if (!list || !Array.isArray(list)) {                throw new Error('Wrong usage format');            }            for (var j = 0; j < list.length; j++) {                var name = list[j];                if (hasOwnProperty.call(scopes, name)) {                    throw new Error('Class can\'t be used for several scopes: ' + name);                }                scopes[name] = i + 1;            }        }    }    return {        whitelist: buildList(data),        blacklist: buildList(data.blacklist),        scopes: scopes    };}module.exports = {    buildIndex: buildIndex};
 |