summaryrefslogtreecommitdiff
path: root/node_modules/stylehacks
diff options
context:
space:
mode:
authorlittleblack111 <littleblack11111@gmail.com>2023-10-14 15:05:55 +0800
committerlittleblack111 <littleblack11111@gmail.com>2023-10-14 15:05:55 +0800
commitc06f7ee0a40255214c477e13d9b956a7e07c2900 (patch)
treef5982a568ef8fab865d0142e71c7494fea3e4c1b /node_modules/stylehacks
parent3fd9400d4dccc25aa29b5702216732e0b7542073 (diff)
postcss,(plugins): nanocss, postcss-preset-env
Diffstat (limited to 'node_modules/stylehacks')
-rw-r--r--node_modules/stylehacks/LICENSE-MIT22
-rw-r--r--node_modules/stylehacks/README.md91
-rw-r--r--node_modules/stylehacks/package.json46
-rw-r--r--node_modules/stylehacks/src/dictionary/browsers.js9
-rw-r--r--node_modules/stylehacks/src/dictionary/identifiers.js7
-rw-r--r--node_modules/stylehacks/src/dictionary/postcss.js6
-rw-r--r--node_modules/stylehacks/src/dictionary/tags.js5
-rw-r--r--node_modules/stylehacks/src/exists.js13
-rw-r--r--node_modules/stylehacks/src/index.js60
-rw-r--r--node_modules/stylehacks/src/isMixin.js15
-rw-r--r--node_modules/stylehacks/src/plugin.js108
-rw-r--r--node_modules/stylehacks/src/plugins/bodyEmpty.js49
-rw-r--r--node_modules/stylehacks/src/plugins/htmlCombinatorCommentBody.js54
-rw-r--r--node_modules/stylehacks/src/plugins/htmlFirstChild.js50
-rw-r--r--node_modules/stylehacks/src/plugins/important.js25
-rw-r--r--node_modules/stylehacks/src/plugins/index.js28
-rw-r--r--node_modules/stylehacks/src/plugins/leadingStar.js55
-rw-r--r--node_modules/stylehacks/src/plugins/leadingUnderscore.js51
-rw-r--r--node_modules/stylehacks/src/plugins/mediaSlash0.js26
-rw-r--r--node_modules/stylehacks/src/plugins/mediaSlash0Slash9.js27
-rw-r--r--node_modules/stylehacks/src/plugins/mediaSlash9.js27
-rw-r--r--node_modules/stylehacks/src/plugins/slash9.js26
-rw-r--r--node_modules/stylehacks/src/plugins/starHtml.js50
-rw-r--r--node_modules/stylehacks/src/plugins/trailingSlashComma.js36
-rw-r--r--node_modules/stylehacks/types/dictionary/browsers.d.ts6
-rw-r--r--node_modules/stylehacks/types/dictionary/identifiers.d.ts4
-rw-r--r--node_modules/stylehacks/types/dictionary/postcss.d.ts3
-rw-r--r--node_modules/stylehacks/types/dictionary/tags.d.ts2
-rw-r--r--node_modules/stylehacks/types/exists.d.ts2
-rw-r--r--node_modules/stylehacks/types/index.d.ts16
-rw-r--r--node_modules/stylehacks/types/isMixin.d.ts2
-rw-r--r--node_modules/stylehacks/types/plugin.d.ts60
-rw-r--r--node_modules/stylehacks/types/plugins/bodyEmpty.d.ts17
-rw-r--r--node_modules/stylehacks/types/plugins/htmlCombinatorCommentBody.d.ts16
-rw-r--r--node_modules/stylehacks/types/plugins/htmlFirstChild.d.ts17
-rw-r--r--node_modules/stylehacks/types/plugins/important.d.ts11
-rw-r--r--node_modules/stylehacks/types/plugins/index.d.ts8
-rw-r--r--node_modules/stylehacks/types/plugins/leadingStar.d.ts11
-rw-r--r--node_modules/stylehacks/types/plugins/leadingUnderscore.d.ts11
-rw-r--r--node_modules/stylehacks/types/plugins/mediaSlash0.d.ts11
-rw-r--r--node_modules/stylehacks/types/plugins/mediaSlash0Slash9.d.ts11
-rw-r--r--node_modules/stylehacks/types/plugins/mediaSlash9.d.ts11
-rw-r--r--node_modules/stylehacks/types/plugins/slash9.d.ts11
-rw-r--r--node_modules/stylehacks/types/plugins/starHtml.d.ts17
-rw-r--r--node_modules/stylehacks/types/plugins/trailingSlashComma.d.ts11
45 files changed, 1144 insertions, 0 deletions
diff --git a/node_modules/stylehacks/LICENSE-MIT b/node_modules/stylehacks/LICENSE-MIT
new file mode 100644
index 00000000..fd0e863a
--- /dev/null
+++ b/node_modules/stylehacks/LICENSE-MIT
@@ -0,0 +1,22 @@
+Copyright (c) Ben Briggs <beneb.info@gmail.com> (http://beneb.info)
+
+Permission is hereby granted, free of charge, to any person
+obtaining a copy of this software and associated documentation
+files (the "Software"), to deal in the Software without
+restriction, including without limitation the rights to use,
+copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the
+Software is furnished to do so, subject to the following
+conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+OTHER DEALINGS IN THE SOFTWARE.
diff --git a/node_modules/stylehacks/README.md b/node_modules/stylehacks/README.md
new file mode 100644
index 00000000..a4eed7d5
--- /dev/null
+++ b/node_modules/stylehacks/README.md
@@ -0,0 +1,91 @@
+# stylehacks
+
+> Detect/remove browser hacks from CSS files.
+
+
+## Install
+
+With [npm](https://npmjs.org/package/stylehacks) do:
+
+```
+npm install stylehacks --save
+```
+
+
+## Example
+
+In its default mode, stylehacks will remove hacks from your CSS file, based on
+the browsers that you wish to support.
+
+### Input
+
+```css
+h1 {
+ _color: white;
+ color: rgba(255, 255, 255, 0.5);
+}
+```
+
+### Output
+
+```css
+h1 {
+ color: rgba(255, 255, 255, 0.5);
+}
+```
+
+
+## API
+
+### `stylehacks.detect(node)`
+
+Type: `function`
+Returns: `boolean`
+
+This method will take any PostCSS *node*, run applicable plugins depending on
+its type, then will return a boolean depending on whether it found any of
+the supported hacks. For example, if the `decl` node found below is passed to
+the `detect` function, it will return `true`. But if the `rule` node is passed,
+it will return `false` instead.
+
+```css
+h1 { _color: red }
+```
+
+### `postcss([ stylehacks(opts) ])`
+
+stylehacks can also be consumed as a PostCSS plugin. See the
+[documentation](https://github.com/postcss/postcss#usage) for examples for
+your environment.
+
+#### options
+
+##### lint
+
+Type: `boolean`
+Default: `false`
+
+If lint mode is enabled, stylehacks will not remove hacks from the CSS; instead,
+it will add warnings to `Result#messages`.
+
+
+## Related
+
+stylehacks works well with your existing PostCSS setup:
+
+* [stylelint] - Comprehensive & modern CSS linter, to ensure that your code
+ style rules are respected.
+
+
+## Contributing
+
+Pull requests are welcome. If you add functionality, then please add unit tests
+to cover it.
+
+
+## License
+
+MIT © [Ben Briggs](http://beneb.info)
+
+
+[stylelint]: https://github.com/stylelint/stylelint
diff --git a/node_modules/stylehacks/package.json b/node_modules/stylehacks/package.json
new file mode 100644
index 00000000..661b93ba
--- /dev/null
+++ b/node_modules/stylehacks/package.json
@@ -0,0 +1,46 @@
+{
+ "name": "stylehacks",
+ "version": "6.0.0",
+ "description": "Detect/remove browser hacks from CSS files.",
+ "main": "src/index.js",
+ "types": "types/index.d.ts",
+ "files": [
+ "LICENSE-MIT",
+ "src",
+ "types"
+ ],
+ "keywords": [
+ "browsers",
+ "css",
+ "hack",
+ "hacks",
+ "optimise",
+ "postcss",
+ "postcss-plugin",
+ "stylehacks"
+ ],
+ "license": "MIT",
+ "homepage": "https://github.com/cssnano/cssnano",
+ "author": {
+ "name": "Ben Briggs",
+ "email": "beneb.info@gmail.com",
+ "url": "http://beneb.info"
+ },
+ "repository": "cssnano/cssnano",
+ "dependencies": {
+ "browserslist": "^4.21.4",
+ "postcss-selector-parser": "^6.0.4"
+ },
+ "bugs": {
+ "url": "https://github.com/cssnano/cssnano/issues"
+ },
+ "engines": {
+ "node": "^14 || ^16 || >=18.0"
+ },
+ "devDependencies": {
+ "postcss": "^8.2.15"
+ },
+ "peerDependencies": {
+ "postcss": "^8.2.15"
+ }
+} \ No newline at end of file
diff --git a/node_modules/stylehacks/src/dictionary/browsers.js b/node_modules/stylehacks/src/dictionary/browsers.js
new file mode 100644
index 00000000..0aeb59fd
--- /dev/null
+++ b/node_modules/stylehacks/src/dictionary/browsers.js
@@ -0,0 +1,9 @@
+'use strict';
+const FF_2 = 'firefox 2';
+const IE_5_5 = 'ie 5.5';
+const IE_6 = 'ie 6';
+const IE_7 = 'ie 7';
+const IE_8 = 'ie 8';
+const OP_9 = 'opera 9';
+
+module.exports = { FF_2, IE_5_5, IE_6, IE_7, IE_8, OP_9 };
diff --git a/node_modules/stylehacks/src/dictionary/identifiers.js b/node_modules/stylehacks/src/dictionary/identifiers.js
new file mode 100644
index 00000000..dcdcd40d
--- /dev/null
+++ b/node_modules/stylehacks/src/dictionary/identifiers.js
@@ -0,0 +1,7 @@
+'use strict';
+const MEDIA_QUERY = 'media query';
+const PROPERTY = 'property';
+const SELECTOR = 'selector';
+const VALUE = 'value';
+
+module.exports = { MEDIA_QUERY, PROPERTY, SELECTOR, VALUE };
diff --git a/node_modules/stylehacks/src/dictionary/postcss.js b/node_modules/stylehacks/src/dictionary/postcss.js
new file mode 100644
index 00000000..1c547247
--- /dev/null
+++ b/node_modules/stylehacks/src/dictionary/postcss.js
@@ -0,0 +1,6 @@
+'use strict';
+const ATRULE = 'atrule';
+const DECL = 'decl';
+const RULE = 'rule';
+
+module.exports = { ATRULE, DECL, RULE };
diff --git a/node_modules/stylehacks/src/dictionary/tags.js b/node_modules/stylehacks/src/dictionary/tags.js
new file mode 100644
index 00000000..87a2c48b
--- /dev/null
+++ b/node_modules/stylehacks/src/dictionary/tags.js
@@ -0,0 +1,5 @@
+'use strict';
+const BODY = 'body';
+const HTML = 'html';
+
+module.exports = { BODY, HTML };
diff --git a/node_modules/stylehacks/src/exists.js b/node_modules/stylehacks/src/exists.js
new file mode 100644
index 00000000..ba1c2ed6
--- /dev/null
+++ b/node_modules/stylehacks/src/exists.js
@@ -0,0 +1,13 @@
+'use strict';
+
+/**
+ * @param {import('postcss-selector-parser').Selector} selector
+ * @param {number} index
+ * @param {string} value
+ * @return {boolean | undefined | ''}
+ */
+module.exports = function exists(selector, index, value) {
+ const node = selector.at(index);
+
+ return node && node.value && node.value.toLowerCase() === value;
+};
diff --git a/node_modules/stylehacks/src/index.js b/node_modules/stylehacks/src/index.js
new file mode 100644
index 00000000..6b8ce94c
--- /dev/null
+++ b/node_modules/stylehacks/src/index.js
@@ -0,0 +1,60 @@
+'use strict';
+const browserslist = require('browserslist');
+const plugins = require('./plugins');
+
+/** @typedef {{lint?: boolean}} Options */
+
+/**
+ * @type {import('postcss').PluginCreator<Options>}
+ * @param {Options} opts
+ * @return {import('postcss').Plugin}
+ */
+function pluginCreator(opts = {}) {
+ return {
+ postcssPlugin: 'stylehacks',
+
+ OnceExit(css, { result }) {
+ /** @type {typeof result.opts & browserslist.Options} */
+ const resultOpts = result.opts || {};
+ const browsers = browserslist(null, {
+ stats: resultOpts.stats,
+ path: __dirname,
+ env: resultOpts.env,
+ });
+
+ /** @type {import('./plugin').Plugin[]} */
+ const processors = [];
+ for (const Plugin of plugins) {
+ const hack = new Plugin(result);
+ if (!browsers.some((browser) => hack.targets.has(browser))) {
+ processors.push(hack);
+ }
+ }
+ css.walk((node) => {
+ processors.forEach((proc) => {
+ if (!proc.nodeTypes.has(node.type)) {
+ return;
+ }
+
+ if (opts.lint) {
+ return proc.detectAndWarn(node);
+ }
+
+ return proc.detectAndResolve(node);
+ });
+ });
+ },
+ };
+}
+
+/** @type {(node: import('postcss').Node) => boolean} */
+pluginCreator.detect = (node) => {
+ return plugins.some((Plugin) => {
+ const hack = new Plugin();
+
+ return hack.any(node);
+ });
+};
+
+pluginCreator.postcss = true;
+module.exports = pluginCreator;
diff --git a/node_modules/stylehacks/src/isMixin.js b/node_modules/stylehacks/src/isMixin.js
new file mode 100644
index 00000000..5a08c409
--- /dev/null
+++ b/node_modules/stylehacks/src/isMixin.js
@@ -0,0 +1,15 @@
+'use strict';
+/**
+ * @param {import('postcss').Rule} node
+ * @return {boolean}
+ */
+module.exports = function isMixin(node) {
+ const { selector } = node;
+
+ // If the selector ends with a ':' it is likely a part of a custom mixin.
+ if (!selector || selector[selector.length - 1] === ':') {
+ return true;
+ }
+
+ return false;
+};
diff --git a/node_modules/stylehacks/src/plugin.js b/node_modules/stylehacks/src/plugin.js
new file mode 100644
index 00000000..15c6b5a9
--- /dev/null
+++ b/node_modules/stylehacks/src/plugin.js
@@ -0,0 +1,108 @@
+'use strict';
+/**
+ * @typedef {object} Plugin
+ * @prop {Set<string>} targets
+ * @prop {Set<string>} nodeTypes
+ * @prop {(node: import('postcss').Node) => void} detectAndResolve
+ * @prop {(node: import('postcss').Node) => void} detectAndWarn
+ */
+
+/**
+ * @typedef {import('postcss').Node & {_stylehacks: {
+ message: string,
+ browsers: Set<string>,
+ identifier: string,
+ hack: string }}} NodeWithInfo
+ */
+
+module.exports = class BasePlugin {
+ /**
+ * @param {string[]} targets
+ * @param {string[]} nodeTypes
+ * @param {import('postcss').Result=} result
+ */
+ constructor(targets, nodeTypes, result) {
+ /** @type {NodeWithInfo[]} */
+ this.nodes = [];
+ this.targets = new Set(targets);
+ this.nodeTypes = new Set(nodeTypes);
+ this.result = result;
+ }
+
+ /**
+ * @param {import('postcss').Node} node
+ * @param {{identifier: string, hack: string}} metadata
+ * @return {void}
+ */
+ push(node, metadata) {
+ /** @type {NodeWithInfo} */ (node)._stylehacks = Object.assign(
+ {},
+ metadata,
+ {
+ message: `Bad ${metadata.identifier}: ${metadata.hack}`,
+ browsers: this.targets,
+ }
+ );
+
+ this.nodes.push(/** @type {NodeWithInfo} */ (node));
+ }
+
+ /**
+ * @param {import('postcss').Node} node
+ * @return {boolean}
+ */
+ any(node) {
+ if (this.nodeTypes.has(node.type)) {
+ this.detect(node);
+
+ return /** @type {NodeWithInfo} */ (node)._stylehacks !== undefined;
+ }
+
+ return false;
+ }
+
+ /**
+ * @param {import('postcss').Node} node
+ * @return {void}
+ */
+ detectAndResolve(node) {
+ this.nodes = [];
+
+ this.detect(node);
+
+ return this.resolve();
+ }
+
+ /**
+ * @param {import('postcss').Node} node
+ * @return {void}
+ */
+ detectAndWarn(node) {
+ this.nodes = [];
+
+ this.detect(node);
+
+ return this.warn();
+ }
+ /** @param {import('postcss').Node} node */
+ // eslint-disable-next-line no-unused-vars
+ detect(node) {
+ throw new Error('You need to implement this method in a subclass.');
+ }
+
+ /** @return {void} */
+ resolve() {
+ return this.nodes.forEach((node) => node.remove());
+ }
+
+ warn() {
+ return this.nodes.forEach((node) => {
+ const { message, browsers, identifier, hack } = node._stylehacks;
+
+ return node.warn(
+ /** @type {import('postcss').Result} */ (this.result),
+ message + JSON.stringify({ browsers, identifier, hack })
+ );
+ });
+ }
+};
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<void>}
+ */
+ 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<void>}
+ */
+ 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<void>}
+ */
+ 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<void>}
+ */
+ 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,
+ });
+ }
+ }
+};
diff --git a/node_modules/stylehacks/types/dictionary/browsers.d.ts b/node_modules/stylehacks/types/dictionary/browsers.d.ts
new file mode 100644
index 00000000..297d830c
--- /dev/null
+++ b/node_modules/stylehacks/types/dictionary/browsers.d.ts
@@ -0,0 +1,6 @@
+export const FF_2: "firefox 2";
+export const IE_5_5: "ie 5.5";
+export const IE_6: "ie 6";
+export const IE_7: "ie 7";
+export const IE_8: "ie 8";
+export const OP_9: "opera 9";
diff --git a/node_modules/stylehacks/types/dictionary/identifiers.d.ts b/node_modules/stylehacks/types/dictionary/identifiers.d.ts
new file mode 100644
index 00000000..6d8e0f4d
--- /dev/null
+++ b/node_modules/stylehacks/types/dictionary/identifiers.d.ts
@@ -0,0 +1,4 @@
+export const MEDIA_QUERY: "media query";
+export const PROPERTY: "property";
+export const SELECTOR: "selector";
+export const VALUE: "value";
diff --git a/node_modules/stylehacks/types/dictionary/postcss.d.ts b/node_modules/stylehacks/types/dictionary/postcss.d.ts
new file mode 100644
index 00000000..02d3005a
--- /dev/null
+++ b/node_modules/stylehacks/types/dictionary/postcss.d.ts
@@ -0,0 +1,3 @@
+export const ATRULE: "atrule";
+export const DECL: "decl";
+export const RULE: "rule";
diff --git a/node_modules/stylehacks/types/dictionary/tags.d.ts b/node_modules/stylehacks/types/dictionary/tags.d.ts
new file mode 100644
index 00000000..06fdc70b
--- /dev/null
+++ b/node_modules/stylehacks/types/dictionary/tags.d.ts
@@ -0,0 +1,2 @@
+export const BODY: "body";
+export const HTML: "html";
diff --git a/node_modules/stylehacks/types/exists.d.ts b/node_modules/stylehacks/types/exists.d.ts
new file mode 100644
index 00000000..b3adc065
--- /dev/null
+++ b/node_modules/stylehacks/types/exists.d.ts
@@ -0,0 +1,2 @@
+declare function _exports(selector: import('postcss-selector-parser').Selector, index: number, value: string): boolean | undefined | '';
+export = _exports;
diff --git a/node_modules/stylehacks/types/index.d.ts b/node_modules/stylehacks/types/index.d.ts
new file mode 100644
index 00000000..9c12a566
--- /dev/null
+++ b/node_modules/stylehacks/types/index.d.ts
@@ -0,0 +1,16 @@
+export = pluginCreator;
+/** @typedef {{lint?: boolean}} Options */
+/**
+ * @type {import('postcss').PluginCreator<Options>}
+ * @param {Options} opts
+ * @return {import('postcss').Plugin}
+ */
+declare function pluginCreator(opts?: Options): import('postcss').Plugin;
+declare namespace pluginCreator {
+ export { detect, postcss, Options };
+}
+type Options = {
+ lint?: boolean;
+};
+declare function detect(node: import('postcss').Node): boolean;
+declare var postcss: true;
diff --git a/node_modules/stylehacks/types/isMixin.d.ts b/node_modules/stylehacks/types/isMixin.d.ts
new file mode 100644
index 00000000..c15c4b0e
--- /dev/null
+++ b/node_modules/stylehacks/types/isMixin.d.ts
@@ -0,0 +1,2 @@
+declare function _exports(node: import('postcss').Rule): boolean;
+export = _exports;
diff --git a/node_modules/stylehacks/types/plugin.d.ts b/node_modules/stylehacks/types/plugin.d.ts
new file mode 100644
index 00000000..abbfeb48
--- /dev/null
+++ b/node_modules/stylehacks/types/plugin.d.ts
@@ -0,0 +1,60 @@
+export = BasePlugin;
+declare class BasePlugin {
+ /**
+ * @param {string[]} targets
+ * @param {string[]} nodeTypes
+ * @param {import('postcss').Result=} result
+ */
+ constructor(targets: string[], nodeTypes: string[], result?: import('postcss').Result | undefined);
+ /** @type {NodeWithInfo[]} */
+ nodes: NodeWithInfo[];
+ targets: Set<string>;
+ nodeTypes: Set<string>;
+ result: import("postcss").Result | undefined;
+ /**
+ * @param {import('postcss').Node} node
+ * @param {{identifier: string, hack: string}} metadata
+ * @return {void}
+ */
+ push(node: import('postcss').Node, metadata: {
+ identifier: string;
+ hack: string;
+ }): void;
+ /**
+ * @param {import('postcss').Node} node
+ * @return {boolean}
+ */
+ any(node: import('postcss').Node): boolean;
+ /**
+ * @param {import('postcss').Node} node
+ * @return {void}
+ */
+ detectAndResolve(node: import('postcss').Node): void;
+ /**
+ * @param {import('postcss').Node} node
+ * @return {void}
+ */
+ detectAndWarn(node: import('postcss').Node): void;
+ /** @param {import('postcss').Node} node */
+ detect(node: import('postcss').Node): void;
+ /** @return {void} */
+ resolve(): void;
+ warn(): void;
+}
+declare namespace BasePlugin {
+ export { Plugin, NodeWithInfo };
+}
+type NodeWithInfo = import('postcss').Node & {
+ _stylehacks: {
+ message: string;
+ browsers: Set<string>;
+ identifier: string;
+ hack: string;
+ };
+};
+type Plugin = {
+ targets: Set<string>;
+ nodeTypes: Set<string>;
+ detectAndResolve: (node: import('postcss').Node) => void;
+ detectAndWarn: (node: import('postcss').Node) => void;
+};
diff --git a/node_modules/stylehacks/types/plugins/bodyEmpty.d.ts b/node_modules/stylehacks/types/plugins/bodyEmpty.d.ts
new file mode 100644
index 00000000..46c43b40
--- /dev/null
+++ b/node_modules/stylehacks/types/plugins/bodyEmpty.d.ts
@@ -0,0 +1,17 @@
+export = BodyEmpty;
+declare class BodyEmpty extends BasePlugin {
+ /** @param {import('postcss').Result} result */
+ constructor(result: import('postcss').Result);
+ /**
+ * @param {import('postcss').Rule} rule
+ * @return {void}
+ */
+ detect(rule: import('postcss').Rule): void;
+ /**
+ * @param {import('postcss').Rule} rule
+ * @return {parser.SyncProcessor<void>}
+ */
+ analyse(rule: import('postcss').Rule): parser.SyncProcessor<void>;
+}
+import BasePlugin = require("../plugin");
+import parser = require("postcss-selector-parser");
diff --git a/node_modules/stylehacks/types/plugins/htmlCombinatorCommentBody.d.ts b/node_modules/stylehacks/types/plugins/htmlCombinatorCommentBody.d.ts
new file mode 100644
index 00000000..b5284974
--- /dev/null
+++ b/node_modules/stylehacks/types/plugins/htmlCombinatorCommentBody.d.ts
@@ -0,0 +1,16 @@
+export = HtmlCombinatorCommentBody;
+declare class HtmlCombinatorCommentBody extends BasePlugin {
+ /** @param {import('postcss').Result} result */
+ constructor(result: import('postcss').Result);
+ /**
+ * @param {import('postcss').Rule} rule
+ * @return {void}
+ */
+ detect(rule: import('postcss').Rule): void;
+ /** @param {import('postcss').Rule} rule
+ * @return {parser.SyncProcessor<void>}
+ */
+ analyse(rule: import('postcss').Rule): parser.SyncProcessor<void>;
+}
+import BasePlugin = require("../plugin");
+import parser = require("postcss-selector-parser");
diff --git a/node_modules/stylehacks/types/plugins/htmlFirstChild.d.ts b/node_modules/stylehacks/types/plugins/htmlFirstChild.d.ts
new file mode 100644
index 00000000..f5f20f37
--- /dev/null
+++ b/node_modules/stylehacks/types/plugins/htmlFirstChild.d.ts
@@ -0,0 +1,17 @@
+export = HtmlFirstChild;
+declare class HtmlFirstChild extends BasePlugin {
+ /** @param {import('postcss').Result} result */
+ constructor(result: import('postcss').Result);
+ /**
+ * @param {import('postcss').Rule} rule
+ * @return {void}
+ */
+ detect(rule: import('postcss').Rule): void;
+ /**
+ * @param {import('postcss').Rule} rule
+ * @return {parser.SyncProcessor<void>}
+ */
+ analyse(rule: import('postcss').Rule): parser.SyncProcessor<void>;
+}
+import BasePlugin = require("../plugin");
+import parser = require("postcss-selector-parser");
diff --git a/node_modules/stylehacks/types/plugins/important.d.ts b/node_modules/stylehacks/types/plugins/important.d.ts
new file mode 100644
index 00000000..42d6c456
--- /dev/null
+++ b/node_modules/stylehacks/types/plugins/important.d.ts
@@ -0,0 +1,11 @@
+export = Important;
+declare class Important extends BasePlugin {
+ /** @param {import('postcss').Result=} result */
+ constructor(result?: import('postcss').Result | undefined);
+ /**
+ * @param {import('postcss').Declaration} decl
+ * @return {void}
+ */
+ detect(decl: import('postcss').Declaration): void;
+}
+import BasePlugin = require("../plugin");
diff --git a/node_modules/stylehacks/types/plugins/index.d.ts b/node_modules/stylehacks/types/plugins/index.d.ts
new file mode 100644
index 00000000..8a43eeff
--- /dev/null
+++ b/node_modules/stylehacks/types/plugins/index.d.ts
@@ -0,0 +1,8 @@
+declare const _exports: ({
+ new (result?: import("postcss").Result | undefined): important;
+} | {
+ new (result?: import("postcss").Result | undefined): trailingSlashComma;
+})[];
+export = _exports;
+import important = require("./important");
+import trailingSlashComma = require("./trailingSlashComma");
diff --git a/node_modules/stylehacks/types/plugins/leadingStar.d.ts b/node_modules/stylehacks/types/plugins/leadingStar.d.ts
new file mode 100644
index 00000000..a9ea9683
--- /dev/null
+++ b/node_modules/stylehacks/types/plugins/leadingStar.d.ts
@@ -0,0 +1,11 @@
+export = LeadingStar;
+declare class LeadingStar extends BasePlugin {
+ /** @param {import('postcss').Result=} result */
+ constructor(result?: import('postcss').Result | undefined);
+ /**
+ * @param {import('postcss').Declaration | import('postcss').AtRule} node
+ * @return {void}
+ */
+ detect(node: import('postcss').Declaration | import('postcss').AtRule): void;
+}
+import BasePlugin = require("../plugin");
diff --git a/node_modules/stylehacks/types/plugins/leadingUnderscore.d.ts b/node_modules/stylehacks/types/plugins/leadingUnderscore.d.ts
new file mode 100644
index 00000000..f973a648
--- /dev/null
+++ b/node_modules/stylehacks/types/plugins/leadingUnderscore.d.ts
@@ -0,0 +1,11 @@
+export = LeadingUnderscore;
+declare class LeadingUnderscore extends BasePlugin {
+ /** @param {import('postcss').Result=} result */
+ constructor(result?: import('postcss').Result | undefined);
+ /**
+ * @param {import('postcss').Declaration} decl
+ * @return {void}
+ */
+ detect(decl: import('postcss').Declaration): void;
+}
+import BasePlugin = require("../plugin");
diff --git a/node_modules/stylehacks/types/plugins/mediaSlash0.d.ts b/node_modules/stylehacks/types/plugins/mediaSlash0.d.ts
new file mode 100644
index 00000000..70ad4bf1
--- /dev/null
+++ b/node_modules/stylehacks/types/plugins/mediaSlash0.d.ts
@@ -0,0 +1,11 @@
+export = MediaSlash0;
+declare class MediaSlash0 extends BasePlugin {
+ /** @param {import('postcss').Result} result */
+ constructor(result: import('postcss').Result);
+ /**
+ * @param {import('postcss').AtRule} rule
+ * @return {void}
+ */
+ detect(rule: import('postcss').AtRule): void;
+}
+import BasePlugin = require("../plugin");
diff --git a/node_modules/stylehacks/types/plugins/mediaSlash0Slash9.d.ts b/node_modules/stylehacks/types/plugins/mediaSlash0Slash9.d.ts
new file mode 100644
index 00000000..920d22ef
--- /dev/null
+++ b/node_modules/stylehacks/types/plugins/mediaSlash0Slash9.d.ts
@@ -0,0 +1,11 @@
+export = MediaSlash0Slash9;
+declare class MediaSlash0Slash9 extends BasePlugin {
+ /** @param {import('postcss').Result} result */
+ constructor(result: import('postcss').Result);
+ /**
+ * @param {import('postcss').AtRule} rule
+ * @return {void}
+ */
+ detect(rule: import('postcss').AtRule): void;
+}
+import BasePlugin = require("../plugin");
diff --git a/node_modules/stylehacks/types/plugins/mediaSlash9.d.ts b/node_modules/stylehacks/types/plugins/mediaSlash9.d.ts
new file mode 100644
index 00000000..acbe9fb4
--- /dev/null
+++ b/node_modules/stylehacks/types/plugins/mediaSlash9.d.ts
@@ -0,0 +1,11 @@
+export = MediaSlash9;
+declare class MediaSlash9 extends BasePlugin {
+ /** @param {import('postcss').Result} result */
+ constructor(result: import('postcss').Result);
+ /**
+ * @param {import('postcss').AtRule} rule
+ * @return {void}
+ */
+ detect(rule: import('postcss').AtRule): void;
+}
+import BasePlugin = require("../plugin");
diff --git a/node_modules/stylehacks/types/plugins/slash9.d.ts b/node_modules/stylehacks/types/plugins/slash9.d.ts
new file mode 100644
index 00000000..ed514481
--- /dev/null
+++ b/node_modules/stylehacks/types/plugins/slash9.d.ts
@@ -0,0 +1,11 @@
+export = Slash9;
+declare class Slash9 extends BasePlugin {
+ /** @param {import('postcss').Result=} result */
+ constructor(result?: import('postcss').Result | undefined);
+ /**
+ * @param {import('postcss').Declaration} decl
+ * @return {void}
+ */
+ detect(decl: import('postcss').Declaration): void;
+}
+import BasePlugin = require("../plugin.js");
diff --git a/node_modules/stylehacks/types/plugins/starHtml.d.ts b/node_modules/stylehacks/types/plugins/starHtml.d.ts
new file mode 100644
index 00000000..5e5a495c
--- /dev/null
+++ b/node_modules/stylehacks/types/plugins/starHtml.d.ts
@@ -0,0 +1,17 @@
+export = StarHtml;
+declare class StarHtml extends BasePlugin {
+ /** @param {import('postcss').Result=} result */
+ constructor(result?: import('postcss').Result | undefined);
+ /**
+ * @param {import('postcss').Rule} rule
+ * @return {void}
+ */
+ detect(rule: import('postcss').Rule): void;
+ /**
+ * @param {import('postcss').Rule} rule
+ * @return {parser.SyncProcessor<void>}
+ */
+ analyse(rule: import('postcss').Rule): parser.SyncProcessor<void>;
+}
+import BasePlugin = require("../plugin");
+import parser = require("postcss-selector-parser");
diff --git a/node_modules/stylehacks/types/plugins/trailingSlashComma.d.ts b/node_modules/stylehacks/types/plugins/trailingSlashComma.d.ts
new file mode 100644
index 00000000..17f81fab
--- /dev/null
+++ b/node_modules/stylehacks/types/plugins/trailingSlashComma.d.ts
@@ -0,0 +1,11 @@
+export = TrailingSlashComma;
+declare class TrailingSlashComma extends BasePlugin {
+ /** @param {import('postcss').Result=} result */
+ constructor(result?: import('postcss').Result | undefined);
+ /**
+ * @param {import('postcss').Rule} rule
+ * @return {void}
+ */
+ detect(rule: import('postcss').Rule): void;
+}
+import BasePlugin = require("../plugin");