From c06f7ee0a40255214c477e13d9b956a7e07c2900 Mon Sep 17 00:00:00 2001 From: littleblack111 Date: Sat, 14 Oct 2023 15:05:55 +0800 Subject: postcss,(plugins): nanocss, postcss-preset-env --- node_modules/stylehacks/src/plugins/bodyEmpty.js | 49 +++++++++++++++++++ .../src/plugins/htmlCombinatorCommentBody.js | 54 +++++++++++++++++++++ .../stylehacks/src/plugins/htmlFirstChild.js | 50 ++++++++++++++++++++ node_modules/stylehacks/src/plugins/important.js | 25 ++++++++++ node_modules/stylehacks/src/plugins/index.js | 28 +++++++++++ node_modules/stylehacks/src/plugins/leadingStar.js | 55 ++++++++++++++++++++++ .../stylehacks/src/plugins/leadingUnderscore.js | 51 ++++++++++++++++++++ node_modules/stylehacks/src/plugins/mediaSlash0.js | 26 ++++++++++ .../stylehacks/src/plugins/mediaSlash0Slash9.js | 27 +++++++++++ node_modules/stylehacks/src/plugins/mediaSlash9.js | 27 +++++++++++ node_modules/stylehacks/src/plugins/slash9.js | 26 ++++++++++ node_modules/stylehacks/src/plugins/starHtml.js | 50 ++++++++++++++++++++ .../stylehacks/src/plugins/trailingSlashComma.js | 36 ++++++++++++++ 13 files changed, 504 insertions(+) create mode 100644 node_modules/stylehacks/src/plugins/bodyEmpty.js create mode 100644 node_modules/stylehacks/src/plugins/htmlCombinatorCommentBody.js create mode 100644 node_modules/stylehacks/src/plugins/htmlFirstChild.js create mode 100644 node_modules/stylehacks/src/plugins/important.js create mode 100644 node_modules/stylehacks/src/plugins/index.js create mode 100644 node_modules/stylehacks/src/plugins/leadingStar.js create mode 100644 node_modules/stylehacks/src/plugins/leadingUnderscore.js create mode 100644 node_modules/stylehacks/src/plugins/mediaSlash0.js create mode 100644 node_modules/stylehacks/src/plugins/mediaSlash0Slash9.js create mode 100644 node_modules/stylehacks/src/plugins/mediaSlash9.js create mode 100644 node_modules/stylehacks/src/plugins/slash9.js create mode 100644 node_modules/stylehacks/src/plugins/starHtml.js create mode 100644 node_modules/stylehacks/src/plugins/trailingSlashComma.js (limited to 'node_modules/stylehacks/src/plugins') diff --git a/node_modules/stylehacks/src/plugins/bodyEmpty.js b/node_modules/stylehacks/src/plugins/bodyEmpty.js new file mode 100644 index 00000000..edb40406 --- /dev/null +++ b/node_modules/stylehacks/src/plugins/bodyEmpty.js @@ -0,0 +1,49 @@ +'use strict'; +const parser = require('postcss-selector-parser'); +const exists = require('../exists'); +const isMixin = require('../isMixin'); +const BasePlugin = require('../plugin'); +const { FF_2 } = require('../dictionary/browsers'); +const { SELECTOR } = require('../dictionary/identifiers'); +const { RULE } = require('../dictionary/postcss'); +const { BODY } = require('../dictionary/tags'); + +module.exports = class BodyEmpty extends BasePlugin { + /** @param {import('postcss').Result} result */ + constructor(result) { + super([FF_2], [RULE], result); + } + + /** + * @param {import('postcss').Rule} rule + * @return {void} + */ + detect(rule) { + if (isMixin(rule)) { + return; + } + parser(this.analyse(rule)).processSync(rule.selector); + } + + /** + * @param {import('postcss').Rule} rule + * @return {parser.SyncProcessor} + */ + analyse(rule) { + return (selectors) => { + selectors.each((selector) => { + if ( + exists(selector, 0, BODY) && + exists(selector, 1, ':empty') && + exists(selector, 2, ' ') && + selector.at(3) + ) { + this.push(rule, { + identifier: SELECTOR, + hack: selector.toString(), + }); + } + }); + }; + } +}; diff --git a/node_modules/stylehacks/src/plugins/htmlCombinatorCommentBody.js b/node_modules/stylehacks/src/plugins/htmlCombinatorCommentBody.js new file mode 100644 index 00000000..e20d5535 --- /dev/null +++ b/node_modules/stylehacks/src/plugins/htmlCombinatorCommentBody.js @@ -0,0 +1,54 @@ +'use strict'; +const parser = require('postcss-selector-parser'); +const exists = require('../exists'); +const isMixin = require('../isMixin'); +const BasePlugin = require('../plugin'); +const { IE_5_5, IE_6, IE_7 } = require('../dictionary/browsers'); +const { SELECTOR } = require('../dictionary/identifiers'); +const { RULE } = require('../dictionary/postcss'); +const { BODY, HTML } = require('../dictionary/tags'); + +module.exports = class HtmlCombinatorCommentBody extends BasePlugin { + /** @param {import('postcss').Result} result */ + constructor(result) { + super([IE_5_5, IE_6, IE_7], [RULE], result); + } + + /** + * @param {import('postcss').Rule} rule + * @return {void} + */ + detect(rule) { + if (isMixin(rule)) { + return; + } + if (rule.raws.selector && rule.raws.selector.raw) { + parser(this.analyse(rule)).processSync(rule.raws.selector.raw); + } + } + + /** @param {import('postcss').Rule} rule + * @return {parser.SyncProcessor} + */ + analyse(rule) { + return (selectors) => { + selectors.each((selector) => { + if ( + exists(selector, 0, HTML) && + (exists(selector, 1, '>') || exists(selector, 1, '~')) && + selector.at(2) && + selector.at(2).type === 'comment' && + exists(selector, 3, ' ') && + exists(selector, 4, BODY) && + exists(selector, 5, ' ') && + selector.at(6) + ) { + this.push(rule, { + identifier: SELECTOR, + hack: selector.toString(), + }); + } + }); + }; + } +}; diff --git a/node_modules/stylehacks/src/plugins/htmlFirstChild.js b/node_modules/stylehacks/src/plugins/htmlFirstChild.js new file mode 100644 index 00000000..f772786b --- /dev/null +++ b/node_modules/stylehacks/src/plugins/htmlFirstChild.js @@ -0,0 +1,50 @@ +'use strict'; +const parser = require('postcss-selector-parser'); +const exists = require('../exists'); +const isMixin = require('../isMixin'); +const BasePlugin = require('../plugin'); +const { OP_9 } = require('../dictionary/browsers'); +const { SELECTOR } = require('../dictionary/identifiers'); +const { RULE } = require('../dictionary/postcss'); +const { HTML } = require('../dictionary/tags'); + +module.exports = class HtmlFirstChild extends BasePlugin { + /** @param {import('postcss').Result} result */ + constructor(result) { + super([OP_9], [RULE], result); + } + + /** + * @param {import('postcss').Rule} rule + * @return {void} + */ + detect(rule) { + if (isMixin(rule)) { + return; + } + + parser(this.analyse(rule)).processSync(rule.selector); + } + + /** + * @param {import('postcss').Rule} rule + * @return {parser.SyncProcessor} + */ + analyse(rule) { + return (selectors) => { + selectors.each((selector) => { + if ( + exists(selector, 0, HTML) && + exists(selector, 1, ':first-child') && + exists(selector, 2, ' ') && + selector.at(3) + ) { + this.push(rule, { + identifier: SELECTOR, + hack: selector.toString(), + }); + } + }); + }; + } +}; diff --git a/node_modules/stylehacks/src/plugins/important.js b/node_modules/stylehacks/src/plugins/important.js new file mode 100644 index 00000000..ab3745c9 --- /dev/null +++ b/node_modules/stylehacks/src/plugins/important.js @@ -0,0 +1,25 @@ +'use strict'; +const BasePlugin = require('../plugin'); +const { IE_5_5, IE_6, IE_7 } = require('../dictionary/browsers'); +const { DECL } = require('../dictionary/postcss'); + +module.exports = class Important extends BasePlugin { + /** @param {import('postcss').Result=} result */ + constructor(result) { + super([IE_5_5, IE_6, IE_7], [DECL], result); + } + /** + * @param {import('postcss').Declaration} decl + * @return {void} + */ + detect(decl) { + const match = decl.value.match(/!\w/); + if (match && match.index) { + const hack = decl.value.substr(match.index, decl.value.length - 1); + this.push(decl, { + identifier: '!important', + hack, + }); + } + } +}; diff --git a/node_modules/stylehacks/src/plugins/index.js b/node_modules/stylehacks/src/plugins/index.js new file mode 100644 index 00000000..d09ad206 --- /dev/null +++ b/node_modules/stylehacks/src/plugins/index.js @@ -0,0 +1,28 @@ +'use strict'; +const bodyEmpty = require('./bodyEmpty'); +const htmlCombinatorCommentBody = require('./htmlCombinatorCommentBody'); +const htmlFirstChild = require('./htmlFirstChild'); +const important = require('./important'); +const leadingStar = require('./leadingStar'); +const leadingUnderscore = require('./leadingUnderscore'); +const mediaSlash0 = require('./mediaSlash0'); +const mediaSlash0Slash9 = require('./mediaSlash0Slash9'); +const mediaSlash9 = require('./mediaSlash9'); +const slash9 = require('./slash9'); +const starHtml = require('./starHtml'); +const trailingSlashComma = require('./trailingSlashComma'); + +module.exports = [ + bodyEmpty, + htmlCombinatorCommentBody, + htmlFirstChild, + important, + leadingStar, + leadingUnderscore, + mediaSlash0, + mediaSlash0Slash9, + mediaSlash9, + slash9, + starHtml, + trailingSlashComma, +]; diff --git a/node_modules/stylehacks/src/plugins/leadingStar.js b/node_modules/stylehacks/src/plugins/leadingStar.js new file mode 100644 index 00000000..62064409 --- /dev/null +++ b/node_modules/stylehacks/src/plugins/leadingStar.js @@ -0,0 +1,55 @@ +'use strict'; +const BasePlugin = require('../plugin'); +const { IE_5_5, IE_6, IE_7 } = require('../dictionary/browsers'); +const { PROPERTY } = require('../dictionary/identifiers'); +const { ATRULE, DECL } = require('../dictionary/postcss'); + +const hacks = '!_$_&_*_)_=_%_+_,_._/_`_]_#_~_?_:_|'.split('_'); + +module.exports = class LeadingStar extends BasePlugin { + /** @param {import('postcss').Result=} result */ + constructor(result) { + super([IE_5_5, IE_6, IE_7], [ATRULE, DECL], result); + } + + /** + * @param {import('postcss').Declaration | import('postcss').AtRule} node + * @return {void} + */ + detect(node) { + if (node.type === DECL) { + // some values are not picked up by before, so ensure they are + // at the beginning of the value + hacks.forEach((hack) => { + if (!node.prop.indexOf(hack)) { + this.push(node, { + identifier: PROPERTY, + hack: node.prop, + }); + } + }); + const { before } = node.raws; + if (!before) { + return; + } + hacks.forEach((hack) => { + if (before.includes(hack)) { + this.push(node, { + identifier: PROPERTY, + hack: `${before.trim()}${node.prop}`, + }); + } + }); + } else { + // test for the @property: value; hack + const { name } = node; + const len = name.length - 1; + if (name.lastIndexOf(':') === len) { + this.push(node, { + identifier: PROPERTY, + hack: `@${name.substr(0, len)}`, + }); + } + } + } +}; diff --git a/node_modules/stylehacks/src/plugins/leadingUnderscore.js b/node_modules/stylehacks/src/plugins/leadingUnderscore.js new file mode 100644 index 00000000..ad09354f --- /dev/null +++ b/node_modules/stylehacks/src/plugins/leadingUnderscore.js @@ -0,0 +1,51 @@ +'use strict'; +const BasePlugin = require('../plugin'); +const { IE_6 } = require('../dictionary/browsers'); +const { PROPERTY } = require('../dictionary/identifiers'); +const { DECL } = require('../dictionary/postcss'); + +/** + * @param {string} prop + * @return {string} + */ +function vendorPrefix(prop) { + let match = prop.match(/^(-\w+-)/); + if (match) { + return match[0]; + } + + return ''; +} + +module.exports = class LeadingUnderscore extends BasePlugin { + /** @param {import('postcss').Result=} result */ + constructor(result) { + super([IE_6], [DECL], result); + } + + /** + * @param {import('postcss').Declaration} decl + * @return {void} + */ + detect(decl) { + const { before } = decl.raws; + + if (before && before.includes('_')) { + this.push(decl, { + identifier: PROPERTY, + hack: `${before.trim()}${decl.prop}`, + }); + } + + if ( + decl.prop[0] === '-' && + decl.prop[1] !== '-' && + vendorPrefix(decl.prop) === '' + ) { + this.push(decl, { + identifier: PROPERTY, + hack: decl.prop, + }); + } + } +}; diff --git a/node_modules/stylehacks/src/plugins/mediaSlash0.js b/node_modules/stylehacks/src/plugins/mediaSlash0.js new file mode 100644 index 00000000..c16b1828 --- /dev/null +++ b/node_modules/stylehacks/src/plugins/mediaSlash0.js @@ -0,0 +1,26 @@ +'use strict'; +const BasePlugin = require('../plugin'); +const { IE_8 } = require('../dictionary/browsers'); +const { MEDIA_QUERY } = require('../dictionary/identifiers'); +const { ATRULE } = require('../dictionary/postcss'); + +module.exports = class MediaSlash0 extends BasePlugin { + /** @param {import('postcss').Result} result */ + constructor(result) { + super([IE_8], [ATRULE], result); + } + /** + * @param {import('postcss').AtRule} rule + * @return {void} + */ + detect(rule) { + const params = rule.params.trim(); + + if (params.toLowerCase() === '\\0screen') { + this.push(rule, { + identifier: MEDIA_QUERY, + hack: params, + }); + } + } +}; diff --git a/node_modules/stylehacks/src/plugins/mediaSlash0Slash9.js b/node_modules/stylehacks/src/plugins/mediaSlash0Slash9.js new file mode 100644 index 00000000..6f610023 --- /dev/null +++ b/node_modules/stylehacks/src/plugins/mediaSlash0Slash9.js @@ -0,0 +1,27 @@ +'use strict'; +const BasePlugin = require('../plugin'); +const { IE_5_5, IE_6, IE_7, IE_8 } = require('../dictionary/browsers'); +const { MEDIA_QUERY } = require('../dictionary/identifiers'); +const { ATRULE } = require('../dictionary/postcss'); + +module.exports = class MediaSlash0Slash9 extends BasePlugin { + /** @param {import('postcss').Result} result */ + constructor(result) { + super([IE_5_5, IE_6, IE_7, IE_8], [ATRULE], result); + } + + /** + * @param {import('postcss').AtRule} rule + * @return {void} + */ + detect(rule) { + const params = rule.params.trim(); + + if (params.toLowerCase() === '\\0screen\\,screen\\9') { + this.push(rule, { + identifier: MEDIA_QUERY, + hack: params, + }); + } + } +}; diff --git a/node_modules/stylehacks/src/plugins/mediaSlash9.js b/node_modules/stylehacks/src/plugins/mediaSlash9.js new file mode 100644 index 00000000..ddad451e --- /dev/null +++ b/node_modules/stylehacks/src/plugins/mediaSlash9.js @@ -0,0 +1,27 @@ +'use strict'; +const BasePlugin = require('../plugin'); +const { IE_5_5, IE_6, IE_7 } = require('../dictionary/browsers'); +const { MEDIA_QUERY } = require('../dictionary/identifiers'); +const { ATRULE } = require('../dictionary/postcss'); + +module.exports = class MediaSlash9 extends BasePlugin { + /** @param {import('postcss').Result} result */ + constructor(result) { + super([IE_5_5, IE_6, IE_7], [ATRULE], result); + } + + /** + * @param {import('postcss').AtRule} rule + * @return {void} + */ + detect(rule) { + const params = rule.params.trim(); + + if (params.toLowerCase() === 'screen\\9') { + this.push(rule, { + identifier: MEDIA_QUERY, + hack: params, + }); + } + } +}; diff --git a/node_modules/stylehacks/src/plugins/slash9.js b/node_modules/stylehacks/src/plugins/slash9.js new file mode 100644 index 00000000..08e94626 --- /dev/null +++ b/node_modules/stylehacks/src/plugins/slash9.js @@ -0,0 +1,26 @@ +'use strict'; +const BasePlugin = require('../plugin.js'); +const { IE_6, IE_7, IE_8 } = require('../dictionary/browsers'); +const { VALUE } = require('../dictionary/identifiers'); +const { DECL } = require('../dictionary/postcss'); + +module.exports = class Slash9 extends BasePlugin { + /** @param {import('postcss').Result=} result */ + constructor(result) { + super([IE_6, IE_7, IE_8], [DECL], result); + } + + /** + * @param {import('postcss').Declaration} decl + * @return {void} + */ + detect(decl) { + let v = decl.value; + if (v && v.length > 2 && v.indexOf('\\9') === v.length - 2) { + this.push(decl, { + identifier: VALUE, + hack: v, + }); + } + } +}; diff --git a/node_modules/stylehacks/src/plugins/starHtml.js b/node_modules/stylehacks/src/plugins/starHtml.js new file mode 100644 index 00000000..3de73d3c --- /dev/null +++ b/node_modules/stylehacks/src/plugins/starHtml.js @@ -0,0 +1,50 @@ +'use strict'; +const parser = require('postcss-selector-parser'); +const exists = require('../exists'); +const isMixin = require('../isMixin'); +const BasePlugin = require('../plugin'); +const { IE_5_5, IE_6 } = require('../dictionary/browsers'); +const { SELECTOR } = require('../dictionary/identifiers'); +const { RULE } = require('../dictionary/postcss'); +const { HTML } = require('../dictionary/tags'); + +module.exports = class StarHtml extends BasePlugin { + /** @param {import('postcss').Result=} result */ + constructor(result) { + super([IE_5_5, IE_6], [RULE], result); + } + + /** + * @param {import('postcss').Rule} rule + * @return {void} + */ + detect(rule) { + if (isMixin(rule)) { + return; + } + parser(this.analyse(rule)).processSync(rule.selector); + } + + /** + * @param {import('postcss').Rule} rule + * @return {parser.SyncProcessor} + */ + analyse(rule) { + return (selectors) => { + selectors.each((selector) => { + if ( + exists(selector, 0, '*') && + exists(selector, 1, ' ') && + exists(selector, 2, HTML) && + exists(selector, 3, ' ') && + selector.at(4) + ) { + this.push(rule, { + identifier: SELECTOR, + hack: selector.toString(), + }); + } + }); + }; + } +}; diff --git a/node_modules/stylehacks/src/plugins/trailingSlashComma.js b/node_modules/stylehacks/src/plugins/trailingSlashComma.js new file mode 100644 index 00000000..0d75c47b --- /dev/null +++ b/node_modules/stylehacks/src/plugins/trailingSlashComma.js @@ -0,0 +1,36 @@ +'use strict'; +const BasePlugin = require('../plugin'); +const isMixin = require('../isMixin'); +const { IE_5_5, IE_6, IE_7 } = require('../dictionary/browsers'); +const { SELECTOR } = require('../dictionary/identifiers'); +const { RULE } = require('../dictionary/postcss'); + +module.exports = class TrailingSlashComma extends BasePlugin { + /** @param {import('postcss').Result=} result */ + constructor(result) { + super([IE_5_5, IE_6, IE_7], [RULE], result); + } + + /** + * @param {import('postcss').Rule} rule + * @return {void} + */ + detect(rule) { + if (isMixin(rule)) { + return; + } + + const { selector } = rule; + const trim = selector.trim(); + + if ( + trim.lastIndexOf(',') === selector.length - 1 || + trim.lastIndexOf('\\') === selector.length - 1 + ) { + this.push(rule, { + identifier: SELECTOR, + hack: selector, + }); + } + } +}; -- cgit v1.2.3