diff options
| author | littleblack111 <littleblack11111@gmail.com> | 2026-05-18 23:10:59 +0800 |
|---|---|---|
| committer | littleblack111 <littleblack11111@gmail.com> | 2026-05-18 23:41:44 +0800 |
| commit | fc87c009806dcc98867f6b58efe29b042aa01dee (patch) | |
| tree | 8f59b3f4a5b66e9dfef2d40c8d318e258a521228 /node_modules/csso/lib/restructure/utils.js | |
| parent | 3336b2356ee6152d9c6ae59bd9b87ccbc0958407 (diff) | |
node: updatemain
Diffstat (limited to 'node_modules/csso/lib/restructure/utils.js')
| -rw-r--r-- | node_modules/csso/lib/restructure/utils.js | 142 |
1 files changed, 0 insertions, 142 deletions
diff --git a/node_modules/csso/lib/restructure/utils.js b/node_modules/csso/lib/restructure/utils.js deleted file mode 100644 index 792cc59b..00000000 --- a/node_modules/csso/lib/restructure/utils.js +++ /dev/null @@ -1,142 +0,0 @@ -const { hasOwnProperty } = Object.prototype; - -export function isEqualSelectors(a, b) { - let cursor1 = a.head; - let cursor2 = b.head; - - while (cursor1 !== null && cursor2 !== null && cursor1.data.id === cursor2.data.id) { - cursor1 = cursor1.next; - cursor2 = cursor2.next; - } - - return cursor1 === null && cursor2 === null; -} - -export function isEqualDeclarations(a, b) { - let cursor1 = a.head; - let cursor2 = b.head; - - while (cursor1 !== null && cursor2 !== null && cursor1.data.id === cursor2.data.id) { - cursor1 = cursor1.next; - cursor2 = cursor2.next; - } - - return cursor1 === null && cursor2 === null; -} - -export function compareDeclarations(declarations1, declarations2) { - const result = { - eq: [], - ne1: [], - ne2: [], - ne2overrided: [] - }; - - const fingerprints = Object.create(null); - const declarations2hash = Object.create(null); - - for (let cursor = declarations2.head; cursor; cursor = cursor.next) { - declarations2hash[cursor.data.id] = true; - } - - for (let cursor = declarations1.head; cursor; cursor = cursor.next) { - const data = cursor.data; - - if (data.fingerprint) { - fingerprints[data.fingerprint] = data.important; - } - - if (declarations2hash[data.id]) { - declarations2hash[data.id] = false; - result.eq.push(data); - } else { - result.ne1.push(data); - } - } - - for (let cursor = declarations2.head; cursor; cursor = cursor.next) { - const data = cursor.data; - - if (declarations2hash[data.id]) { - // when declarations1 has an overriding declaration, this is not a difference - // unless no !important is used on prev and !important is used on the following - if (!hasOwnProperty.call(fingerprints, data.fingerprint) || - (!fingerprints[data.fingerprint] && data.important)) { - result.ne2.push(data); - } - - result.ne2overrided.push(data); - } - } - - return result; -} - -export function addSelectors(dest, source) { - source.forEach((sourceData) => { - const newStr = sourceData.id; - let cursor = dest.head; - - while (cursor) { - const nextStr = cursor.data.id; - - if (nextStr === newStr) { - return; - } - - if (nextStr > newStr) { - break; - } - - cursor = cursor.next; - } - - dest.insert(dest.createItem(sourceData), cursor); - }); - - return dest; -} - -// check if simpleselectors has no equal specificity and element selector -export function hasSimilarSelectors(selectors1, selectors2) { - let cursor1 = selectors1.head; - - while (cursor1 !== null) { - let cursor2 = selectors2.head; - - while (cursor2 !== null) { - if (cursor1.data.compareMarker === cursor2.data.compareMarker) { - return true; - } - - cursor2 = cursor2.next; - } - - cursor1 = cursor1.next; - } - - return false; -} - -// test node can't to be skipped -export function unsafeToSkipNode(node) { - switch (node.type) { - case 'Rule': - // unsafe skip ruleset with selector similarities - return hasSimilarSelectors(node.prelude.children, this); - - case 'Atrule': - // can skip at-rules with blocks - if (node.block) { - // unsafe skip at-rule if block contains something unsafe to skip - return node.block.children.some(unsafeToSkipNode, this); - } - break; - - case 'Declaration': - return false; - } - - // unsafe by default - return true; -} |
