diff options
Diffstat (limited to 'node_modules/csso/lib/compressor/usage.js')
| -rw-r--r-- | node_modules/csso/lib/compressor/usage.js | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/node_modules/csso/lib/compressor/usage.js b/node_modules/csso/lib/compressor/usage.js new file mode 100644 index 00000000..72d8b15b --- /dev/null +++ b/node_modules/csso/lib/compressor/usage.js @@ -0,0 +1,58 @@ +var hasOwnProperty = Object.prototype.hasOwnProperty; + +function buildMap(list, caseInsensitive) { + var map = Object.create(null); + + if (!Array.isArray(list)) { + return false; + } + + for (var i = 0; i < list.length; i++) { + var name = list[i]; + + if (caseInsensitive) { + name = name.toLowerCase(); + } + + map[name] = true; + } + + return map; +} + +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 { + tags: buildMap(data.tags, true), + ids: buildMap(data.ids), + classes: buildMap(data.classes), + scopes: scopes + }; +} + +module.exports = { + buildIndex: buildIndex +}; |
