diff options
| author | littleblack111 <littleblack11111@gmail.com> | 2023-10-14 15:05:55 +0800 |
|---|---|---|
| committer | littleblack111 <littleblack11111@gmail.com> | 2023-10-14 15:05:55 +0800 |
| commit | c06f7ee0a40255214c477e13d9b956a7e07c2900 (patch) | |
| tree | f5982a568ef8fab865d0142e71c7494fea3e4c1b /node_modules/csso/lib/usage.js | |
| parent | 3fd9400d4dccc25aa29b5702216732e0b7542073 (diff) | |
postcss,(plugins): nanocss, postcss-preset-env
Diffstat (limited to 'node_modules/csso/lib/usage.js')
| -rw-r--r-- | node_modules/csso/lib/usage.js | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/node_modules/csso/lib/usage.js b/node_modules/csso/lib/usage.js new file mode 100644 index 00000000..1618e931 --- /dev/null +++ b/node_modules/csso/lib/usage.js @@ -0,0 +1,71 @@ +const { hasOwnProperty } = Object.prototype; + +function buildMap(list, caseInsensitive) { + const map = Object.create(null); + + if (!Array.isArray(list)) { + return null; + } + + for (let name of list) { + if (caseInsensitive) { + name = name.toLowerCase(); + } + + map[name] = true; + } + + return map; +} + +function buildList(data) { + if (!data) { + return null; + } + + const tags = buildMap(data.tags, true); + const ids = buildMap(data.ids); + const classes = buildMap(data.classes); + + if (tags === null && + ids === null && + classes === null) { + return null; + } + + return { + tags, + ids, + classes + }; +} + +export function buildIndex(data) { + let scopes = false; + + if (data.scopes && Array.isArray(data.scopes)) { + scopes = Object.create(null); + + for (let i = 0; i < data.scopes.length; i++) { + const list = data.scopes[i]; + + if (!list || !Array.isArray(list)) { + throw new Error('Wrong usage format'); + } + + for (const name of list) { + 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 + }; +} |
