├── .editorconfig
├── .gitattributes
├── .gitignore
├── .travis.yml
├── CHANGELOG.md
├── LICENSE
├── README.md
├── cli.js
├── config.js
├── fixtures
├── find-package
│ ├── deep
│ │ └── style.css
│ ├── node_modules
│ │ ├── .yarn-integrity
│ │ ├── prettier
│ │ │ ├── index.js
│ │ │ └── package.json
│ │ └── stylelint
│ │ │ ├── lib
│ │ │ └── index.js
│ │ │ └── package.json
│ ├── package.json
│ └── style.css
├── less.less
├── package.json
└── style.css
├── index.js
├── package.json
├── src
├── cli.js
├── index.js
└── utils.js
├── test.js
├── tests
├── error-after-format.css
├── error-syntax.css
├── less.less
├── nestes.css
├── package.json
├── rules
│ └── color-no-invalid-hex.css
└── test-disable-rules.css
└── yarn.lock
/.editorconfig:
--------------------------------------------------------------------------------
1 | root = true
2 |
3 | [*]
4 | indent_style = space
5 | indent_size = 4
6 | end_of_line = lf
7 | charset = utf-8
8 | trim_trailing_whitespace = true
9 | insert_final_newline = true
10 |
11 | [{*.yml}]
12 | indent_style = space
13 | indent_size = 2
14 |
15 | [*.md]
16 | trim_trailing_whitespace = false
17 |
--------------------------------------------------------------------------------
/.gitattributes:
--------------------------------------------------------------------------------
1 | * text=auto
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | logs
2 | *.log
3 | .DS_Store
4 | pids
5 | *.pid
6 | *.seed
7 | coverage
8 | node_modules
9 | .eslintcache
10 | .esm-cache
11 | .vscode
12 | .nyc_output
13 | coverage.lcov
14 | !fixtures/find-package/node_modules
15 |
--------------------------------------------------------------------------------
/.travis.yml:
--------------------------------------------------------------------------------
1 | language: node_js
2 | node_js:
3 | - '8'
4 | - '6'
5 | after_script:
6 | - 'yarn cov:report'
7 |
--------------------------------------------------------------------------------
/CHANGELOG.md:
--------------------------------------------------------------------------------
1 |
2 | ## [0.4.2](https://github.com/hugomrdias/prettier-stylelint/compare/v0.4.1...v0.4.2) (2017-09-25)
3 |
4 |
5 | ### Bug Fixes
6 |
7 | * add repo url ([0be9ac6](https://github.com/hugomrdias/prettier-stylelint/commit/0be9ac6))
8 |
9 |
10 |
11 |
12 | ## [0.4.1](https://github.com/hugomrdias/prettier-stylelint/compare/v0.4.0...v0.4.1) (2017-09-25)
13 |
14 |
15 |
16 |
17 | # [0.4.0](https://github.com/hugomrdias/prettier-stylelint/compare/v0.3.2...v0.4.0) (2017-09-25)
18 |
19 |
20 | ### Features
21 |
22 | * lookup prettier config and relative package import, plus more tests ([bbc651a](https://github.com/hugomrdias/prettier-stylelint/commit/bbc651a))
23 |
24 |
25 |
26 |
27 | ## [0.3.2](https://github.com/hugomrdias/prettier-stylelint/compare/v0.3.1...v0.3.2) (2017-09-21)
28 |
29 |
30 | ### Bug Fixes
31 |
32 | * dont re use the same linter instance because we can't invalidate the config cache ([b6e1f7b](https://github.com/hugomrdias/prettier-stylelint/commit/b6e1f7b))
33 |
34 |
35 |
36 |
37 | ## [0.3.1](https://github.com/hugomrdias/prettier-stylelint/compare/v0.3.0...v0.3.1) (2017-09-21)
38 |
39 |
40 | ### Bug Fixes
41 |
42 | * fix tests and update deps ([fa9ee6e](https://github.com/hugomrdias/prettier-stylelint/commit/fa9ee6e))
43 | * vscode extension PR url ([6da9874](https://github.com/hugomrdias/prettier-stylelint/commit/6da9874))
44 |
45 |
46 |
47 |
48 | # [0.3.0](https://github.com/hugomrdias/prettier-stylelint/compare/v0.2.3...v0.3.0) (2017-09-19)
49 |
50 |
51 | ### Features
52 |
53 | * no more temp file to fix with stylelint ([d78b40c](https://github.com/hugomrdias/prettier-stylelint/commit/d78b40c))
54 |
55 |
56 |
57 |
58 | ## [0.2.3](https://github.com/hugomrdias/prettier-stylelint/compare/v0.2.1...v0.2.3) (2017-09-19)
59 |
60 |
61 | ### Bug Fixes
62 |
63 | * changelog commit again ([57426d4](https://github.com/hugomrdias/prettier-stylelint/commit/57426d4))
64 |
65 |
66 |
67 |
68 | ## [0.2.1](https://github.com/hugomrdias/prettier-stylelint/compare/v0.2.0...v0.2.1) (2017-09-19)
69 |
70 |
71 | ### Bug Fixes
72 |
73 | * add version to build changelog with np ([b925156](https://github.com/hugomrdias/prettier-stylelint/commit/b925156))
74 |
75 |
76 | ### Features
77 |
78 | * add changelog ([2839723](https://github.com/hugomrdias/prettier-stylelint/commit/2839723))
79 |
80 |
81 |
82 |
83 | # [0.2.0](https://github.com/hugomrdias/prettier-stylelint/compare/v0.1.1...v0.2.0) (2017-09-14)
84 |
85 |
86 | ### Bug Fixes
87 |
88 | * no need to check for arrays anymore ([cc27ee9](https://github.com/hugomrdias/prettier-stylelint/commit/cc27ee9))
89 |
90 |
91 | ### Features
92 |
93 | * support extends and add compatibility stylelint config ([5698124](https://github.com/hugomrdias/prettier-stylelint/commit/5698124))
94 |
95 |
96 |
97 |
98 | ## [0.1.1](https://github.com/hugomrdias/prettier-stylelint/compare/v0.1.0...v0.1.1) (2017-09-13)
99 |
100 |
101 |
102 |
103 | # [0.1.0](https://github.com/hugomrdias/prettier-stylelint/compare/v0.0.1...v0.1.0) (2017-09-13)
104 |
105 |
106 | ### Features
107 |
108 | * finish cli ([3e2a6ff](https://github.com/hugomrdias/prettier-stylelint/commit/3e2a6ff))
109 |
110 |
111 |
112 |
113 | ## [0.0.1](https://github.com/hugomrdias/prettier-stylelint/compare/6dbf2f7...v0.0.1) (2017-09-12)
114 |
115 |
116 | ### Bug Fixes
117 |
118 | * cleanup cli ([abf97a2](https://github.com/hugomrdias/prettier-stylelint/commit/abf97a2))
119 | * make this test pass needs further investigation ([208de52](https://github.com/hugomrdias/prettier-stylelint/commit/208de52))
120 | * make this test pass needs further investigation ([f83496b](https://github.com/hugomrdias/prettier-stylelint/commit/f83496b))
121 | * remove [@std](https://github.com/std)/esm cause it breaks in vscode extension ([fa198eb](https://github.com/hugomrdias/prettier-stylelint/commit/fa198eb))
122 |
123 |
124 | ### Features
125 |
126 | * add initial implementation for the formatter and cli ([6dbf2f7](https://github.com/hugomrdias/prettier-stylelint/commit/6dbf2f7))
127 | * add more tests and test custom syntax support ([a1c813b](https://github.com/hugomrdias/prettier-stylelint/commit/a1c813b))
128 |
129 |
130 |
131 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) Hugo Dias (https://hugodias.me)
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # prettier-stylelint [](https://www.npmjs.com/package/prettier-stylelint) [](https://www.npmjs.com/package/prettier-stylelint) [](https://www.npmjs.com/package/prettier-stylelint) [](https://travis-ci.org/hugomrdias/prettier-stylelint) [](https://codecov.io/gh/hugomrdias/prettier-stylelint)
2 | > Format your styles with ease!
3 |
4 | code > prettier > stylelint > formatted code
5 |
6 | prettier-stylelint attempts to create a prettier config based on the stylelint config, then format with prettier followed by stylelint --fix. So after that you should end up with formatted code with no linting errors.
7 |
8 | ## Install
9 |
10 | ```bash
11 | yarn add prettier-stylelint -D
12 | npm install prettier-stylelint --save-dev
13 | ```
14 |
15 | ## Usage
16 | This package has a stylelint config to disable some rules that conflict with prettier.
17 |
18 |
19 | ```json
20 | "stylelint": {
21 | "extends": [
22 | "stylelint-config-idiomatic-order",
23 | "./node_modules/prettier-stylelint/config.js"
24 | ],
25 | "rules": {
26 | "indentation": 4,
27 | "string-quotes": "single"
28 | }
29 | }
30 |
31 | ```
32 |
33 | After adding the disabling config you can just `prettier-stylelint --write` and its done. Check the CLI options below for more information.
34 | Also in a near future we should have support for prettier-stylelint in `prettier-vscode` follow this [PR](https://github.com/prettier/prettier-vscode/pull/218).
35 |
36 |
37 | ### API
38 | ```js
39 | const format = require('prettier-eslint')
40 | const sourceCode = 'a[id="foo"] { content: "x"; }'
41 | const options = {
42 | text: sourceCode
43 | }
44 | const formatted = format(options)
45 |
46 |
47 | // formatted
48 | a[id='foo'] {
49 | content: 'x';
50 | }
51 | ```
52 |
53 | ### CLI Options
54 |
55 | The cli automatically ignores `.gitignore` and `.prettierignore`.
56 |
57 | >**NOTE:** It is recommended that you keep your files under source control and committed
58 | > before running `prettier-stylelint --write` as it will overwrite your files!
59 |
60 |
61 | ```
62 | Usage
63 | $ prettier-stylelint [ ...]
64 |
65 | Options
66 | --ignore Additional paths to ignore [Can be set multiple times]
67 | --extension Additional extension to lint [Can be set multiple times]
68 | --cwd= Working directory for files
69 | --stdin Validate/fix code from stdin ('prettier-stylelint -' also works)
70 | --write Edit files in place (DRAGONS AHEAD !!)
71 | --quiet -q Only log stderr
72 |
73 | Examples
74 | $ prettier-stylelint
75 | $ prettier-stylelint index.js
76 | $ prettier-stylelint *.js !foo.js
77 | $ echo 'a[id="foo"] { content: "x"; }' | prettier-stylelint --stdin
78 |
79 | Default pattern when no arguments:
80 | **/*.{css,scss,less,sss}
81 | ```
82 |
83 | ## Related
84 |
85 | - [prettier-vscode](https://github.com/esbenp/prettier-vscode) - prettier vscode extension
86 | - [prettier-eslint](https://github.com/prettier/prettier-eslint) - the inspiration for this package
87 | - [stylelint](https://github.com/stylelint/stylelint) - the linter ^^
88 |
89 | ## License
90 |
91 | MIT © [Hugo Dias](https://hugodias.me)
92 |
--------------------------------------------------------------------------------
/cli.js:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env node
2 | 'use strict';
3 |
4 | const debug = require('debug')('prettier-stylelint');
5 | const importLocal = require('import-local');
6 |
7 | // Prefer the local installation of prettier-stylelint
8 | if (importLocal(__filename)) {
9 | debug('Using local install of prettier-stylelint cli');
10 | } else {
11 | try {
12 | require('./src/cli');
13 | } catch (err) {
14 | console.error(`\n ${err.message}`);
15 | process.exit(1);
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/config.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | module.exports = {
4 | rules: {
5 | 'function-comma-newline-after': null,
6 | 'function-comma-newline-before': null,
7 | 'function-comma-space-after': null,
8 | 'function-comma-space-before': null,
9 | 'function-max-empty-lines': null,
10 | 'function-parentheses-newline-inside': null,
11 | 'function-parentheses-space-inside': null,
12 | // prettier doesnt care about this space lets keep it here
13 | // "function-whitespace-after": "always"|"never",
14 | 'value-list-comma-newline-after': null,
15 | 'value-list-comma-newline-before': null,
16 | 'value-list-comma-space-after': null,
17 | 'value-list-comma-space-before': null,
18 | 'value-list-max-empty-lines': null,
19 | // this is fixable but lets keep it
20 | // 'custom-property-empty-line-before': 'never'
21 | 'declaration-bang-space-after': 'never',
22 | 'declaration-bang-space-before': 'always',
23 | 'declaration-colon-newline-after': null,
24 | 'declaration-colon-space-after': null,
25 | 'declaration-colon-space-before': null,
26 | 'declaration-block-semicolon-newline-after': null,
27 | 'declaration-block-semicolon-newline-before': null,
28 | 'declaration-block-semicolon-space-after': null,
29 | 'declaration-block-semicolon-space-before': null,
30 | // prettier always adds the trailing semicolon
31 | 'declaration-block-trailing-semicolon': null,
32 | 'block-closing-brace-empty-line-before': null,
33 | 'block-closing-brace-newline-after': null,
34 | 'block-closing-brace-newline-before': null,
35 | 'block-closing-brace-space-after': null,
36 | 'block-closing-brace-space-before': null,
37 | 'block-opening-brace-newline-after': null,
38 | 'block-opening-brace-newline-before': null,
39 | 'block-opening-brace-space-after': null,
40 | 'block-opening-brace-space-before': null,
41 | 'selector-attribute-brackets-space-inside': 'never',
42 | // prettier doesnt care about this space
43 | // 'selector-attribute-operator-space-after': 'never'
44 | // 'selector-attribute-operator-space-before': 'never'
45 | 'selector-attribute-quotes': 'always',
46 | 'selector-combinator-space-after': 'always',
47 | 'selector-combinator-space-before': 'always',
48 | 'selector-descendant-combinator-no-non-space': true,
49 | 'selector-pseudo-class-parentheses-space-inside': 'never',
50 | 'selector-list-comma-newline-after': null,
51 | 'selector-list-comma-newline-before': null,
52 | 'selector-list-comma-space-after': null,
53 | 'selector-list-comma-space-before': null,
54 | 'media-feature-colon-space-after': 'always',
55 | 'media-feature-colon-space-before': 'never',
56 | 'media-feature-parentheses-space-inside': 'never',
57 | // prettier doesnt care about this space
58 | // 'media-feature-range-operator-space-after': 'always',
59 | // 'media-feature-range-operator-space-before': 'always'
60 | 'media-query-list-comma-newline-after': null,
61 | 'media-query-list-comma-newline-before': null,
62 | 'media-query-list-comma-space-after': 'always',
63 | 'media-query-list-comma-space-before': 'never',
64 | 'at-rule-name-newline-after': null,
65 | 'at-rule-name-space-after': 'always',
66 | 'at-rule-semicolon-newline-after': null,
67 | 'at-rule-semicolon-space-before': 'never',
68 | // prettier doesnt care about this whitespace
69 | // 'comment-whitespace-inside': 'always'
70 |
71 | // debatable ( this also checks comments which prettier doesnt care)
72 | 'max-empty-lines': null,
73 | 'no-eol-whitespace': null
74 | }
75 | };
76 |
--------------------------------------------------------------------------------
/fixtures/find-package/deep/style.css:
--------------------------------------------------------------------------------
1 | @media print {
2 | a {
3 | color: #ffffff;
4 | background-position: top left,
5 | top right;
6 | }
7 | }
8 |
9 |
10 |
11 |
12 | a[id="foo"] { content: "x"; }
13 |
--------------------------------------------------------------------------------
/fixtures/find-package/node_modules/.yarn-integrity:
--------------------------------------------------------------------------------
1 | {
2 | "modulesFolders": [
3 | "node_modules"
4 | ],
5 | "flags": [],
6 | "linkedModules": [],
7 | "topLevelPatterns": [
8 | "prettier@1.6.0",
9 | "stylelint@8.0.0"
10 | ],
11 | "lockfileEntries": {
12 | "ajv-keywords@^1.0.0": "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-1.5.1.tgz#314dd0a4b3368fad3dfcdc54ede6171b886daf3c",
13 | "ajv@^4.7.0": "https://registry.yarnpkg.com/ajv/-/ajv-4.11.8.tgz#82ffb02b29e662ae53bdc20af15947706739c536",
14 | "ansi-regex@^2.0.0": "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df",
15 | "ansi-regex@^3.0.0": "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998",
16 | "ansi-styles@^2.2.1": "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe",
17 | "ansi-styles@^3.1.0": "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.0.tgz#c159b8d5be0f9e5a6f346dab94f16ce022161b88",
18 | "argparse@^1.0.7": "https://registry.yarnpkg.com/argparse/-/argparse-1.0.9.tgz#73d83bc263f86e97f8cc4f6bae1b0e90a7d22c86",
19 | "arr-diff@^2.0.0": "https://registry.yarnpkg.com/arr-diff/-/arr-diff-2.0.0.tgz#8f3b827f955a8bd669697e4a4256ac3ceae356cf",
20 | "arr-flatten@^1.0.1": "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1",
21 | "array-find-index@^1.0.1": "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1",
22 | "array-union@^1.0.1": "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39",
23 | "array-uniq@^1.0.1": "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6",
24 | "array-unique@^0.2.1": "https://registry.yarnpkg.com/array-unique/-/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53",
25 | "arrify@^1.0.0": "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d",
26 | "autoprefixer@^7.1.2": "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-7.1.4.tgz#960847dbaa4016bc8e8e52ec891cbf8f1257a748",
27 | "balanced-match@^1.0.0": "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767",
28 | "brace-expansion@^1.1.7": "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.8.tgz#c07b211c7c952ec1f8efd51a77ef0d1d3990a292",
29 | "braces@^1.8.2": "https://registry.yarnpkg.com/braces/-/braces-1.8.5.tgz#ba77962e12dff969d6b76711e914b737857bf6a7",
30 | "browserslist@^2.4.0": "https://registry.yarnpkg.com/browserslist/-/browserslist-2.4.0.tgz#693ee93d01e66468a6348da5498e011f578f87f8",
31 | "builtin-modules@^1.0.0": "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f",
32 | "camelcase-keys@^2.0.0": "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-2.1.0.tgz#308beeaffdf28119051efa1d932213c91b8f92e7",
33 | "camelcase@^2.0.0": "https://registry.yarnpkg.com/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f",
34 | "caniuse-lite@^1.0.30000718": "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000738.tgz#1820c3c9adb9a117e311a5bdca1d25bc34288eba",
35 | "caniuse-lite@^1.0.30000726": "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000738.tgz#1820c3c9adb9a117e311a5bdca1d25bc34288eba",
36 | "chalk@^1.0.0": "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98",
37 | "chalk@^1.1.1": "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98",
38 | "chalk@^1.1.3": "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98",
39 | "chalk@^2.0.1": "https://registry.yarnpkg.com/chalk/-/chalk-2.1.0.tgz#ac5becf14fa21b99c6c92ca7a7d7cfd5b17e743e",
40 | "chalk@^2.1.0": "https://registry.yarnpkg.com/chalk/-/chalk-2.1.0.tgz#ac5becf14fa21b99c6c92ca7a7d7cfd5b17e743e",
41 | "circular-json@^0.3.1": "https://registry.yarnpkg.com/circular-json/-/circular-json-0.3.3.tgz#815c99ea84f6809529d2f45791bdf82711352d66",
42 | "clone-regexp@^1.0.0": "https://registry.yarnpkg.com/clone-regexp/-/clone-regexp-1.0.0.tgz#eae0a2413f55c0942f818c229fefce845d7f3b1c",
43 | "co@^4.6.0": "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184",
44 | "color-convert@^1.9.0": "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.0.tgz#1accf97dd739b983bf994d56fec8f95853641b7a",
45 | "color-name@^1.1.1": "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25",
46 | "concat-map@0.0.1": "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b",
47 | "cosmiconfig@^2.1.3": "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-2.2.2.tgz#6173cebd56fac042c1f4390edf7af6c07c7cb892",
48 | "currently-unhandled@^0.4.1": "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea",
49 | "debug@^2.6.8": "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f",
50 | "decamelize@^1.1.2": "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290",
51 | "del@^2.0.2": "https://registry.yarnpkg.com/del/-/del-2.2.2.tgz#c12c981d067846c84bcaf862cff930d907ffd1a8",
52 | "electron-to-chromium@^1.3.18": "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.22.tgz#4322d52c151406e3eaef74ad02676883e8416418",
53 | "error-ex@^1.2.0": "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.1.tgz#f855a86ce61adc4e8621c3cda21e7a7612c3a8dc",
54 | "escape-string-regexp@^1.0.2": "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4",
55 | "escape-string-regexp@^1.0.5": "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4",
56 | "esprima@^4.0.0": "https://registry.yarnpkg.com/esprima/-/esprima-4.0.0.tgz#4499eddcd1110e0b218bacf2fa7f7f59f55ca804",
57 | "execall@^1.0.0": "https://registry.yarnpkg.com/execall/-/execall-1.0.0.tgz#73d0904e395b3cab0658b08d09ec25307f29bb73",
58 | "expand-brackets@^0.1.4": "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-0.1.5.tgz#df07284e342a807cd733ac5af72411e581d1177b",
59 | "expand-range@^1.8.1": "https://registry.yarnpkg.com/expand-range/-/expand-range-1.8.2.tgz#a299effd335fe2721ebae8e257ec79644fc85337",
60 | "extglob@^0.3.1": "https://registry.yarnpkg.com/extglob/-/extglob-0.3.2.tgz#2e18ff3d2f49ab2765cec9023f011daa8d8349a1",
61 | "file-entry-cache@^2.0.0": "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-2.0.0.tgz#c392990c3e684783d838b8c84a45d8a048458361",
62 | "filename-regex@^2.0.0": "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.1.tgz#c1c4b9bee3e09725ddb106b75c1e301fe2f18b26",
63 | "fill-range@^2.1.0": "https://registry.yarnpkg.com/fill-range/-/fill-range-2.2.3.tgz#50b77dfd7e469bc7492470963699fe7a8485a723",
64 | "find-up@^1.0.0": "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f",
65 | "flat-cache@^1.2.1": "https://registry.yarnpkg.com/flat-cache/-/flat-cache-1.2.2.tgz#fa86714e72c21db88601761ecf2f555d1abc6b96",
66 | "flatten@^1.0.2": "https://registry.yarnpkg.com/flatten/-/flatten-1.0.2.tgz#dae46a9d78fbe25292258cc1e780a41d95c03782",
67 | "for-in@^1.0.1": "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80",
68 | "for-own@^0.1.4": "https://registry.yarnpkg.com/for-own/-/for-own-0.1.5.tgz#5265c681a4f294dabbf17c9509b6763aa84510ce",
69 | "fs.realpath@^1.0.0": "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f",
70 | "get-stdin@^4.0.1": "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe",
71 | "get-stdin@^5.0.1": "https://registry.yarnpkg.com/get-stdin/-/get-stdin-5.0.1.tgz#122e161591e21ff4c52530305693f20e6393a398",
72 | "glob-base@^0.3.0": "https://registry.yarnpkg.com/glob-base/-/glob-base-0.3.0.tgz#dbb164f6221b1c0b1ccf82aea328b497df0ea3c4",
73 | "glob-parent@^2.0.0": "https://registry.yarnpkg.com/glob-parent/-/glob-parent-2.0.0.tgz#81383d72db054fcccf5336daa902f182f6edbb28",
74 | "glob@^7.0.3": "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15",
75 | "glob@^7.0.5": "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15",
76 | "globby@^5.0.0": "https://registry.yarnpkg.com/globby/-/globby-5.0.0.tgz#ebd84667ca0dbb330b99bcfc68eac2bc54370e0d",
77 | "globby@^6.1.0": "https://registry.yarnpkg.com/globby/-/globby-6.1.0.tgz#f5a6d70e8395e21c858fb0489d64df02424d506c",
78 | "globjoin@^0.1.4": "https://registry.yarnpkg.com/globjoin/-/globjoin-0.1.4.tgz#2f4494ac8919e3767c5cbb691e9f463324285d43",
79 | "graceful-fs@^4.1.2": "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658",
80 | "has-ansi@^2.0.0": "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91",
81 | "has-flag@^1.0.0": "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa",
82 | "has-flag@^2.0.0": "https://registry.yarnpkg.com/has-flag/-/has-flag-2.0.0.tgz#e8207af1cc7b30d446cc70b734b5e8be18f88d51",
83 | "hosted-git-info@^2.1.4": "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.5.0.tgz#6d60e34b3abbc8313062c3b798ef8d901a07af3c",
84 | "html-tags@^2.0.0": "https://registry.yarnpkg.com/html-tags/-/html-tags-2.0.0.tgz#10b30a386085f43cede353cc8fa7cb0deeea668b",
85 | "ignore@^3.3.3": "https://registry.yarnpkg.com/ignore/-/ignore-3.3.5.tgz#c4e715455f6073a8d7e5dae72d2fc9d71663dba6",
86 | "imurmurhash@^0.1.4": "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea",
87 | "indent-string@^2.1.0": "https://registry.yarnpkg.com/indent-string/-/indent-string-2.1.0.tgz#8e2d48348742121b4a8218b7a137e9a52049dc80",
88 | "indexes-of@^1.0.1": "https://registry.yarnpkg.com/indexes-of/-/indexes-of-1.0.1.tgz#f30f716c8e2bd346c7b67d3df3915566a7c05607",
89 | "inflight@^1.0.4": "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9",
90 | "inherits@2": "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de",
91 | "is-arrayish@^0.2.1": "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d",
92 | "is-buffer@^1.1.5": "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.5.tgz#1f3b26ef613b214b88cbca23cc6c01d87961eecc",
93 | "is-builtin-module@^1.0.0": "https://registry.yarnpkg.com/is-builtin-module/-/is-builtin-module-1.0.0.tgz#540572d34f7ac3119f8f76c30cbc1b1e037affbe",
94 | "is-directory@^0.3.1": "https://registry.yarnpkg.com/is-directory/-/is-directory-0.3.1.tgz#61339b6f2475fc772fd9c9d83f5c8575dc154ae1",
95 | "is-dotfile@^1.0.0": "https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.3.tgz#a6a2f32ffd2dfb04f5ca25ecd0f6b83cf798a1e1",
96 | "is-equal-shallow@^0.1.3": "https://registry.yarnpkg.com/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz#2238098fc221de0bcfa5d9eac4c45d638aa1c534",
97 | "is-extendable@^0.1.1": "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89",
98 | "is-extglob@^1.0.0": "https://registry.yarnpkg.com/is-extglob/-/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0",
99 | "is-finite@^1.0.0": "https://registry.yarnpkg.com/is-finite/-/is-finite-1.0.2.tgz#cc6677695602be550ef11e8b4aa6305342b6d0aa",
100 | "is-fullwidth-code-point@^2.0.0": "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f",
101 | "is-glob@^2.0.0": "https://registry.yarnpkg.com/is-glob/-/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863",
102 | "is-glob@^2.0.1": "https://registry.yarnpkg.com/is-glob/-/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863",
103 | "is-number@^2.1.0": "https://registry.yarnpkg.com/is-number/-/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f",
104 | "is-number@^3.0.0": "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195",
105 | "is-path-cwd@^1.0.0": "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-1.0.0.tgz#d225ec23132e89edd38fda767472e62e65f1106d",
106 | "is-path-in-cwd@^1.0.0": "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-1.0.0.tgz#6477582b8214d602346094567003be8a9eac04dc",
107 | "is-path-inside@^1.0.0": "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-1.0.0.tgz#fc06e5a1683fbda13de667aff717bbc10a48f37f",
108 | "is-posix-bracket@^0.1.0": "https://registry.yarnpkg.com/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz#3334dc79774368e92f016e6fbc0a88f5cd6e6bc4",
109 | "is-primitive@^2.0.0": "https://registry.yarnpkg.com/is-primitive/-/is-primitive-2.0.0.tgz#207bab91638499c07b2adf240a41a87210034575",
110 | "is-regexp@^1.0.0": "https://registry.yarnpkg.com/is-regexp/-/is-regexp-1.0.0.tgz#fd2d883545c46bac5a633e7b9a09e87fa2cb5069",
111 | "is-supported-regexp-flag@^1.0.0": "https://registry.yarnpkg.com/is-supported-regexp-flag/-/is-supported-regexp-flag-1.0.0.tgz#8b520c85fae7a253382d4b02652e045576e13bb8",
112 | "is-utf8@^0.2.0": "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72",
113 | "isarray@1.0.0": "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11",
114 | "isobject@^2.0.0": "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89",
115 | "js-base64@^2.1.9": "https://registry.yarnpkg.com/js-base64/-/js-base64-2.3.2.tgz#a79a923666372b580f8e27f51845c6f7e8fbfbaf",
116 | "js-yaml@^3.4.3": "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.10.0.tgz#2e78441646bd4682e963f22b6e92823c309c62dc",
117 | "json-stable-stringify@^1.0.1": "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz#9a759d39c5f2ff503fd5300646ed445f88c4f9af",
118 | "jsonify@~0.0.0": "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73",
119 | "kind-of@^3.0.2": "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64",
120 | "kind-of@^4.0.0": "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57",
121 | "known-css-properties@^0.2.0": "https://registry.yarnpkg.com/known-css-properties/-/known-css-properties-0.2.0.tgz#899c94be368e55b42d7db8d5be7d73a4a4a41454",
122 | "load-json-file@^1.0.0": "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0",
123 | "lodash@^4.0.0": "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae",
124 | "lodash@^4.1.0": "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae",
125 | "lodash@^4.17.4": "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae",
126 | "log-symbols@^1.0.2": "https://registry.yarnpkg.com/log-symbols/-/log-symbols-1.0.2.tgz#376ff7b58ea3086a0f09facc74617eca501e1a18",
127 | "loud-rejection@^1.0.0": "https://registry.yarnpkg.com/loud-rejection/-/loud-rejection-1.6.0.tgz#5b46f80147edee578870f086d04821cf998e551f",
128 | "map-obj@^1.0.0": "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d",
129 | "map-obj@^1.0.1": "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d",
130 | "mathml-tag-names@^2.0.1": "https://registry.yarnpkg.com/mathml-tag-names/-/mathml-tag-names-2.0.1.tgz#8d41268168bf86d1102b98109e28e531e7a34578",
131 | "meow@^3.7.0": "https://registry.yarnpkg.com/meow/-/meow-3.7.0.tgz#72cb668b425228290abbfa856892587308a801fb",
132 | "micromatch@^2.3.11": "https://registry.yarnpkg.com/micromatch/-/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565",
133 | "minimatch@^3.0.4": "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083",
134 | "minimist@0.0.8": "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d",
135 | "minimist@^1.1.3": "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284",
136 | "minimist@^1.2.0": "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284",
137 | "mkdirp@^0.5.1": "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903",
138 | "ms@2.0.0": "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8",
139 | "normalize-package-data@^2.3.2": "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.4.0.tgz#12f95a307d58352075a04907b84ac8be98ac012f",
140 | "normalize-package-data@^2.3.4": "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.4.0.tgz#12f95a307d58352075a04907b84ac8be98ac012f",
141 | "normalize-path@^2.0.1": "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9",
142 | "normalize-range@^0.1.2": "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942",
143 | "normalize-selector@^0.2.0": "https://registry.yarnpkg.com/normalize-selector/-/normalize-selector-0.2.0.tgz#d0b145eb691189c63a78d201dc4fdb1293ef0c03",
144 | "num2fraction@^1.2.2": "https://registry.yarnpkg.com/num2fraction/-/num2fraction-1.2.2.tgz#6f682b6a027a4e9ddfa4564cd2589d1d4e669ede",
145 | "number-is-nan@^1.0.0": "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d",
146 | "object-assign@^4.0.1": "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863",
147 | "object-assign@^4.1.0": "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863",
148 | "object.omit@^2.0.0": "https://registry.yarnpkg.com/object.omit/-/object.omit-2.0.1.tgz#1a9c744829f39dbb858c76ca3579ae2a54ebd1fa",
149 | "once@^1.3.0": "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1",
150 | "os-homedir@^1.0.1": "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3",
151 | "parse-glob@^3.0.4": "https://registry.yarnpkg.com/parse-glob/-/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c",
152 | "parse-json@^2.2.0": "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9",
153 | "path-exists@^2.0.0": "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b",
154 | "path-is-absolute@^1.0.0": "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f",
155 | "path-is-inside@^1.0.1": "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53",
156 | "path-type@^1.0.0": "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441",
157 | "pify@^2.0.0": "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c",
158 | "pify@^3.0.0": "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176",
159 | "pinkie-promise@^2.0.0": "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa",
160 | "pinkie@^2.0.0": "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870",
161 | "postcss-less@^1.1.0": "https://registry.yarnpkg.com/postcss-less/-/postcss-less-1.1.0.tgz#bdcc76be64c4324d873fbc5cd9fa2e799e4305fa",
162 | "postcss-media-query-parser@^0.2.3": "https://registry.yarnpkg.com/postcss-media-query-parser/-/postcss-media-query-parser-0.2.3.tgz#27b39c6f4d94f81b1a73b8f76351c609e5cef244",
163 | "postcss-reporter@^4.0.0": "https://registry.yarnpkg.com/postcss-reporter/-/postcss-reporter-4.0.0.tgz#13356c365c36783adde88e28e09dbba6ec6c6501",
164 | "postcss-resolve-nested-selector@^0.1.1": "https://registry.yarnpkg.com/postcss-resolve-nested-selector/-/postcss-resolve-nested-selector-0.1.1.tgz#29ccbc7c37dedfac304e9fff0bf1596b3f6a0e4e",
165 | "postcss-scss@^1.0.2": "https://registry.yarnpkg.com/postcss-scss/-/postcss-scss-1.0.2.tgz#ff45cf3354b879ee89a4eb68680f46ac9bb14f94",
166 | "postcss-selector-parser@^2.2.3": "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-2.2.3.tgz#f9437788606c3c9acee16ffe8d8b16297f27bb90",
167 | "postcss-value-parser@^3.2.3": "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-3.3.0.tgz#87f38f9f18f774a4ab4c8a232f5c5ce8872a9d15",
168 | "postcss-value-parser@^3.3.0": "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-3.3.0.tgz#87f38f9f18f774a4ab4c8a232f5c5ce8872a9d15",
169 | "postcss@^5.2.16": "https://registry.yarnpkg.com/postcss/-/postcss-5.2.17.tgz#cf4f597b864d65c8a492b2eabe9d706c879c388b",
170 | "postcss@^6.0.0": "https://registry.yarnpkg.com/postcss/-/postcss-6.0.12.tgz#6b0155089d2d212f7bd6a0cecd4c58c007403535",
171 | "postcss@^6.0.11": "https://registry.yarnpkg.com/postcss/-/postcss-6.0.12.tgz#6b0155089d2d212f7bd6a0cecd4c58c007403535",
172 | "postcss@^6.0.3": "https://registry.yarnpkg.com/postcss/-/postcss-6.0.12.tgz#6b0155089d2d212f7bd6a0cecd4c58c007403535",
173 | "postcss@^6.0.6": "https://registry.yarnpkg.com/postcss/-/postcss-6.0.12.tgz#6b0155089d2d212f7bd6a0cecd4c58c007403535",
174 | "preserve@^0.2.0": "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b",
175 | "prettier@1.6.0": "https://registry.yarnpkg.com/prettier/-/prettier-1.6.0.tgz#23e9c68251f440feb847f558821bead21765919a",
176 | "randomatic@^1.1.3": "https://registry.yarnpkg.com/randomatic/-/randomatic-1.1.7.tgz#c7abe9cc8b87c0baa876b19fde83fd464797e38c",
177 | "read-pkg-up@^1.0.1": "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02",
178 | "read-pkg@^1.0.0": "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28",
179 | "redent@^1.0.0": "https://registry.yarnpkg.com/redent/-/redent-1.0.0.tgz#cf916ab1fd5f1f16dfb20822dd6ec7f730c2afde",
180 | "regex-cache@^0.4.2": "https://registry.yarnpkg.com/regex-cache/-/regex-cache-0.4.4.tgz#75bdc58a2a1496cec48a12835bc54c8d562336dd",
181 | "remove-trailing-separator@^1.0.1": "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef",
182 | "repeat-element@^1.1.2": "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.2.tgz#ef089a178d1483baae4d93eb98b4f9e4e11d990a",
183 | "repeat-string@^1.5.2": "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637",
184 | "repeating@^2.0.0": "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda",
185 | "require-from-string@^1.1.0": "https://registry.yarnpkg.com/require-from-string/-/require-from-string-1.2.1.tgz#529c9ccef27380adfec9a2f965b649bbee636418",
186 | "resolve-from@^3.0.0": "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748",
187 | "rimraf@^2.2.8": "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.2.tgz#2ed8150d24a16ea8651e6d6ef0f47c4158ce7a36",
188 | "semver@2 || 3 || 4 || 5": "https://registry.yarnpkg.com/semver/-/semver-5.4.1.tgz#e059c09d8571f0540823733433505d3a2f00b18e",
189 | "signal-exit@^3.0.0": "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d",
190 | "slice-ansi@0.0.4": "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-0.0.4.tgz#edbf8903f66f7ce2f8eafd6ceed65e264c831b35",
191 | "source-map@^0.5.6": "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc",
192 | "source-map@^0.5.7": "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc",
193 | "spdx-correct@~1.0.0": "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-1.0.2.tgz#4b3073d933ff51f3912f03ac5519498a4150db40",
194 | "spdx-expression-parse@~1.0.0": "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz#9bdf2f20e1f40ed447fbe273266191fced51626c",
195 | "spdx-license-ids@^1.0.2": "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz#c9df7a3424594ade6bd11900d596696dc06bac57",
196 | "specificity@^0.3.1": "https://registry.yarnpkg.com/specificity/-/specificity-0.3.1.tgz#f1b068424ce317ae07478d95de3c21cf85e8d567",
197 | "sprintf-js@~1.0.2": "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c",
198 | "string-width@^2.0.0": "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e",
199 | "string-width@^2.1.0": "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e",
200 | "strip-ansi@^3.0.0": "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf",
201 | "strip-ansi@^4.0.0": "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f",
202 | "strip-bom@^2.0.0": "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e",
203 | "strip-indent@^1.0.1": "https://registry.yarnpkg.com/strip-indent/-/strip-indent-1.0.1.tgz#0c7962a6adefa7bbd4ac366460a638552ae1a0a2",
204 | "style-search@^0.1.0": "https://registry.yarnpkg.com/style-search/-/style-search-0.1.0.tgz#7958c793e47e32e07d2b5cafe5c0bf8e12e77902",
205 | "stylelint@8.0.0": "https://registry.yarnpkg.com/stylelint/-/stylelint-8.0.0.tgz#87611211776cb315c93fcf6c58bc261d3c92612e",
206 | "sugarss@^1.0.0": "https://registry.yarnpkg.com/sugarss/-/sugarss-1.0.0.tgz#65e51b3958432fb70d5451a68bb33e32d0cf1ef7",
207 | "supports-color@^2.0.0": "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7",
208 | "supports-color@^3.2.3": "https://registry.yarnpkg.com/supports-color/-/supports-color-3.2.3.tgz#65ac0504b3954171d8a64946b2ae3cbb8a5f54f6",
209 | "supports-color@^4.0.0": "https://registry.yarnpkg.com/supports-color/-/supports-color-4.4.0.tgz#883f7ddabc165142b2a61427f3352ded195d1a3e",
210 | "supports-color@^4.4.0": "https://registry.yarnpkg.com/supports-color/-/supports-color-4.4.0.tgz#883f7ddabc165142b2a61427f3352ded195d1a3e",
211 | "svg-tags@^1.0.0": "https://registry.yarnpkg.com/svg-tags/-/svg-tags-1.0.0.tgz#58f71cee3bd519b59d4b2a843b6c7de64ac04764",
212 | "table@^4.0.1": "https://registry.yarnpkg.com/table/-/table-4.0.1.tgz#a8116c133fac2c61f4a420ab6cdf5c4d61f0e435",
213 | "trim-newlines@^1.0.0": "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-1.0.0.tgz#5887966bb582a4503a41eb524f7d35011815a613",
214 | "uniq@^1.0.1": "https://registry.yarnpkg.com/uniq/-/uniq-1.0.1.tgz#b31c5ae8254844a3a8281541ce2b04b865a734ff",
215 | "validate-npm-package-license@^3.0.1": "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz#2804babe712ad3379459acfbe24746ab2c303fbc",
216 | "wrappy@1": "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f",
217 | "write@^0.2.1": "https://registry.yarnpkg.com/write/-/write-0.2.1.tgz#5fc03828e264cea3fe91455476f7a3c566cb0757"
218 | },
219 | "files": [],
220 | "artifacts": {}
221 | }
--------------------------------------------------------------------------------
/fixtures/find-package/node_modules/prettier/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "prettier",
3 | "version": "1.6.0",
4 | "description": "Prettier is an opinionated code formatter",
5 | "bin": {
6 | "prettier": "./bin/prettier.js"
7 | },
8 | "repository": "prettier/prettier",
9 | "homepage": "https://prettier.io",
10 | "author": "James Long",
11 | "license": "MIT",
12 | "main": "./index.js",
13 | "devDependencies": {
14 | "babel-cli": "6.24.1",
15 | "babel-preset-es2015": "6.24.1",
16 | "codecov": "2.2.0",
17 | "cross-env": "5.0.1",
18 | "cross-spawn": "5.1.0",
19 | "eslint": "4.1.1",
20 | "eslint-friendly-formatter": "3.0.0",
21 | "eslint-plugin-import": "2.6.1",
22 | "eslint-plugin-prettier": "2.1.2",
23 | "eslint-plugin-react": "7.1.0",
24 | "jest": "20.0.0",
25 | "mkdirp": "^0.5.1",
26 | "prettier": "1.5.2",
27 | "rimraf": "2.6.1",
28 | "rollup": "0.41.1",
29 | "rollup-plugin-commonjs": "7.0.0",
30 | "rollup-plugin-json": "2.1.0",
31 | "rollup-plugin-node-builtins": "2.0.0",
32 | "rollup-plugin-node-globals": "1.1.0",
33 | "rollup-plugin-node-resolve": "2.0.0",
34 | "rollup-plugin-replace": "1.1.1",
35 | "shelljs": "0.7.8",
36 | "sw-toolbox": "3.6.0",
37 | "uglify-es": "3.0.15",
38 | "webpack": "2.6.1"
39 | },
40 | "scripts": {
41 | "test": "jest",
42 | "test-integration": "jest tests_integration",
43 | "lint": "cross-env EFF_NO_LINK_RULES=true eslint . --format node_modules/eslint-friendly-formatter",
44 | "build": "./scripts/build/build.js"
45 | }
46 | }
--------------------------------------------------------------------------------
/fixtures/find-package/node_modules/stylelint/lib/index.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 |
3 | const checkAgainstRule = require("./utils/checkAgainstRule");
4 | const createPlugin = require("./createPlugin");
5 | const createRuleTester = require("./testUtils/createRuleTester");
6 | const createStylelint = require("./createStylelint");
7 | const formatters = require("./formatters");
8 | const postcssPlugin = require("./postcssPlugin");
9 | const report = require("./utils/report");
10 | const ruleMessages = require("./utils/ruleMessages");
11 | const rules = require("./rules");
12 | const standalone = require("./standalone");
13 | const validateOptions = require("./utils/validateOptions");
14 |
15 | const api = postcssPlugin;
16 |
17 | api.utils = {
18 | report,
19 | ruleMessages,
20 | validateOptions,
21 | checkAgainstRule
22 | };
23 |
24 | api.lint = standalone;
25 | api.rules = rules;
26 | api.formatters = formatters;
27 | api.createPlugin = createPlugin;
28 | api.createRuleTester = createRuleTester;
29 | api.createLinter = createStylelint;
30 |
31 | module.exports = api;
32 |
--------------------------------------------------------------------------------
/fixtures/find-package/node_modules/stylelint/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "stylelint",
3 | "version": "8.0.0",
4 | "description": "A mighty, modern CSS linter.",
5 | "keywords": [
6 | "css",
7 | "less",
8 | "scss",
9 | "sugarss",
10 | "lint",
11 | "linter",
12 | "stylelint"
13 | ],
14 | "authors": [
15 | "David Clark",
16 | "Maxime Thirouin",
17 | "Richard Hallows"
18 | ],
19 | "license": "MIT",
20 | "homepage": "https://stylelint.io",
21 | "repository": {
22 | "type": "git",
23 | "url": "https://github.com/stylelint/stylelint.git"
24 | },
25 | "main": "lib/index.js",
26 | "bin": "bin/stylelint.js",
27 | "files": [
28 | "bin",
29 | "CONTRIBUTING.md",
30 | "decls/*.js",
31 | "docs",
32 | "lib",
33 | "VISION.md",
34 | "!**/__tests__"
35 | ],
36 | "engines": {
37 | "node": ">=4.2.1"
38 | },
39 | "dependencies": {
40 | "autoprefixer": "^7.1.2",
41 | "balanced-match": "^1.0.0",
42 | "chalk": "^2.0.1",
43 | "cosmiconfig": "^2.1.3",
44 | "debug": "^2.6.8",
45 | "execall": "^1.0.0",
46 | "file-entry-cache": "^2.0.0",
47 | "get-stdin": "^5.0.1",
48 | "globby": "^6.1.0",
49 | "globjoin": "^0.1.4",
50 | "html-tags": "^2.0.0",
51 | "ignore": "^3.3.3",
52 | "imurmurhash": "^0.1.4",
53 | "known-css-properties": "^0.2.0",
54 | "lodash": "^4.17.4",
55 | "log-symbols": "^1.0.2",
56 | "mathml-tag-names": "^2.0.1",
57 | "meow": "^3.7.0",
58 | "micromatch": "^2.3.11",
59 | "normalize-selector": "^0.2.0",
60 | "pify": "^3.0.0",
61 | "postcss": "^6.0.6",
62 | "postcss-less": "^1.1.0",
63 | "postcss-media-query-parser": "^0.2.3",
64 | "postcss-reporter": "^4.0.0",
65 | "postcss-resolve-nested-selector": "^0.1.1",
66 | "postcss-scss": "^1.0.2",
67 | "postcss-selector-parser": "^2.2.3",
68 | "postcss-value-parser": "^3.3.0",
69 | "resolve-from": "^3.0.0",
70 | "specificity": "^0.3.1",
71 | "string-width": "^2.1.0",
72 | "style-search": "^0.1.0",
73 | "sugarss": "^1.0.0",
74 | "svg-tags": "^1.0.0",
75 | "table": "^4.0.1"
76 | },
77 | "devDependencies": {
78 | "benchmark": "^2.1.4",
79 | "common-tags": "^1.4.0",
80 | "coveralls": "^2.13.1",
81 | "cp-file": "^4.2.0",
82 | "d3-queue": "^3.0.7",
83 | "del": "^3.0.0",
84 | "eslint": "~4.2.0",
85 | "eslint-config-stylelint": "^7.0.0",
86 | "file-exists-promise": "^1.0.2",
87 | "flow-bin": "^0.50.0",
88 | "fs-promise": "^2.0.3",
89 | "husky": "^0.14.3",
90 | "jest": "^20.0.4",
91 | "lint-staged": "^4.0.1",
92 | "npm-run-all": "^4.0.2",
93 | "npmpub": "^3.1.0",
94 | "postcss-import": "^10.0.0",
95 | "postcss-safe-parser": "^3.0.1",
96 | "prettier": "^1.5.3",
97 | "remark-cli": "^3.0.1",
98 | "remark-preset-lint-consistent": "^2.0.0",
99 | "remark-preset-lint-recommended": "^2.0.0",
100 | "remark-validate-links": "^6.1.0",
101 | "request": "^2.81.0",
102 | "strip-ansi": "^4.0.0"
103 | },
104 | "scripts": {
105 | "precommit": "lint-staged",
106 | "benchmark-rule": "node scripts/benchmark-rule.js",
107 | "dry-release": "npmpub --dry --verbose",
108 | "flow": "flow",
109 | "jest": "jest",
110 | "lint:js": "eslint . --cache",
111 | "lint:md": "remark . --quiet --frail",
112 | "lint": "npm-run-all --parallel lint:*",
113 | "pretest": "npm-run-all --serial lint flow",
114 | "release": "npmpub",
115 | "test": "jest --coverage",
116 | "watch": "jest --watch"
117 | },
118 | "lint-staged": {
119 | "*.js": [
120 | "prettier --write",
121 | "git add"
122 | ]
123 | },
124 | "eslintConfig": {
125 | "extends": [
126 | "stylelint"
127 | ],
128 | "globals": {
129 | "testRule": true
130 | }
131 | },
132 | "jest": {
133 | "clearMocks": true,
134 | "collectCoverage": false,
135 | "collectCoverageFrom": [
136 | "lib/**/*.js"
137 | ],
138 | "coverageDirectory": "./.coverage/",
139 | "coverageReporters": [
140 | "lcov",
141 | "text-summary"
142 | ],
143 | "coverageThreshold": {
144 | "global": {
145 | "branches": 75,
146 | "functions": 75,
147 | "lines": 75,
148 | "statements": 75
149 | }
150 | },
151 | "setupFiles": [
152 | "./jest-setup.js"
153 | ],
154 | "testEnvironment": "node",
155 | "roots": [
156 | "lib",
157 | "system-tests"
158 | ],
159 | "testRegex": ".*\\.test\\.js$|rules/.*/__tests__/.*\\.js$"
160 | },
161 | "greenkeeper": {
162 | "label": "PR: review needed"
163 | },
164 | "remarkConfig": {
165 | "plugins": [
166 | "preset-lint-recommended",
167 | "preset-lint-consistent",
168 | [
169 | "validate-links",
170 | {
171 | "repository": "stylelint/stylelint"
172 | }
173 | ]
174 | ]
175 | }
176 | }
177 |
--------------------------------------------------------------------------------
/fixtures/find-package/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "prettier-stylelint",
3 | "version": "0.3.0",
4 | "description": "code > prettier > stylelint > formatted code",
5 | "author": "Hugo Dias (http://hugodias.me/)",
6 | "license": "MIT",
7 | "dependencies": {
8 | "prettier": "1.6.0",
9 | "stylelint": "8.0.0"
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/fixtures/find-package/style.css:
--------------------------------------------------------------------------------
1 | @media print {
2 | a {
3 | color: #ffffff;
4 | background-position: top left,
5 | top right;
6 | }
7 | }
8 |
9 |
10 |
11 |
12 | a[id="foo"] { content: "x"; }
13 |
--------------------------------------------------------------------------------
/fixtures/less.less:
--------------------------------------------------------------------------------
1 | @base: #f938ab;
2 |
3 | .box-shadow(@style, @c) when (iscolor(@c)) {
4 | -webkit-box-shadow: @style @c;
5 | box-shadow: @style @c;
6 | }
7 | .box-shadow(@style, @alpha: 50%) when (isnumber(@alpha)) {
8 | .box-shadow(@style, rgba(0, 0, 0, @alpha));
9 | }
10 | .box {
11 | color: saturate(@base, 5%);
12 | border-color: lighten(@base, 30%);
13 | div { .box-shadow(0 0 5px, 30%) }
14 | }
15 |
--------------------------------------------------------------------------------
/fixtures/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "stylelint": {
3 | "rules": {
4 | "string-quotes": ["single"],
5 | "indentation": [
6 | 4,
7 | {
8 | "except": ["value"]
9 | }
10 | ],
11 | "color-hex-case": ["upper"],
12 | "color-hex-length": ["short"],
13 | "block-no-empty": null,
14 | "color-no-invalid-hex": true,
15 | "comment-empty-line-before": [
16 | "always",
17 | {
18 | "ignore": ["stylelint-commands", "after-comment"]
19 | }
20 | ],
21 | "declaration-colon-space-after": ["always"],
22 | "max-empty-lines": [2],
23 | "rule-empty-line-before": [
24 | "always",
25 | {
26 | "except": ["first-nested"],
27 | "ignore": ["after-comment"]
28 | }
29 | ],
30 | "unit-whitelist": ["em", "rem", "%", "s"]
31 | }
32 | }
33 | }
34 |
--------------------------------------------------------------------------------
/fixtures/style.css:
--------------------------------------------------------------------------------
1 | @media print {
2 | a {
3 | color: #ffffff;
4 | background-position: top left,
5 | top right;
6 | }
7 | }
8 |
9 |
10 |
11 |
12 | a[id="foo"] { content: "x"; }
13 |
--------------------------------------------------------------------------------
/index.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | module.exports = require('./src/index.js');
4 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "prettier-stylelint",
3 | "version": "0.4.2",
4 | "description": "code > prettier > stylelint > formatted code",
5 | "repository": "hugomrdias/prettier-stylelint",
6 | "main": "index.js",
7 | "bin": "./cli.js",
8 | "author": "Hugo Dias (http://hugodias.me/)",
9 | "license": "MIT",
10 | "keywords": [
11 | "stylelint",
12 | "prettier",
13 | "style",
14 | "lint",
15 | "linter",
16 | "validate",
17 | "code style",
18 | "strict",
19 | "check"
20 | ],
21 | "scripts": {
22 | "test": "nyc ava",
23 | "lint": "eslint --cache *.js src/*.js",
24 | "validate": "run-p lint test",
25 | "precommit": "yarn validate",
26 | "version": "yarn changelog && git add CHANGELOG.md",
27 | "cov": "yarn test && nyc report --reporter=html && hs coverage -s -o -c-1",
28 | "cov:report": "nyc report --reporter=text-lcov > coverage.lcov && codecov",
29 | "changelog": "conventional-changelog -p angular -i CHANGELOG.md -s -r 0"
30 | },
31 | "devDependencies": {
32 | "ava": "^0.22.0",
33 | "codecov": "^2.3.0",
34 | "conventional-changelog-cli": "^1.3.3",
35 | "eslint": "^4.7.1",
36 | "eslint-config-halo": "^2.4.1",
37 | "http-serve": "^1.0.1",
38 | "husky": "^0.14.3",
39 | "np": "^2.16.0",
40 | "npm-run-all": "^4.1.1",
41 | "nyc": "^11.2.1",
42 | "stylelint-config-recommended": "^1.0.0"
43 | },
44 | "dependencies": {
45 | "cosmiconfig": "^3.0.1",
46 | "debug": "^3.0.1",
47 | "get-stdin": "^5.0.1",
48 | "globby": "^6.1.0",
49 | "ignore": "^3.3.5",
50 | "import-local": "^0.1.1",
51 | "meow": "^3.7.0",
52 | "pify": "^3.0.0",
53 | "prettier": "^1.7.0",
54 | "resolve-from": "^4.0.0",
55 | "stylelint": "^8.1.1",
56 | "temp-write": "^3.3.0",
57 | "tempy": "^0.2.1",
58 | "update-notifier": "^2.2.0"
59 | },
60 | "eslintConfig": {
61 | "extends": "halo/node"
62 | },
63 | "stylelint": {
64 | "extends": [
65 | "stylelint-config-recommended",
66 | "./config"
67 | ],
68 | "rules": {
69 | "string-quotes": [
70 | "single"
71 | ],
72 | "indentation": [
73 | 4,
74 | {
75 | "except": [
76 | "value"
77 | ]
78 | }
79 | ],
80 | "color-hex-case": [
81 | "upper"
82 | ],
83 | "color-hex-length": [
84 | "short"
85 | ]
86 | }
87 | },
88 | "prettier": {
89 | "printWidth": 80,
90 | "tabWidth": 4,
91 | "useTabs": false,
92 | "semi": false,
93 | "singleQuote": true,
94 | "trailingComma": "none",
95 | "bracketSpacing": true,
96 | "jsxBracketSameLine": false
97 | }
98 | }
99 |
--------------------------------------------------------------------------------
/src/cli.js:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env node
2 | /* eslint-disable import/unambiguous */
3 | 'use strict';
4 |
5 | const fs = require('fs');
6 | const updateNotifier = require('update-notifier');
7 | const meow = require('meow');
8 | const globby = require('globby');
9 | const getStdin = require('get-stdin');
10 | const pify = require('pify');
11 | const { arrify, ignore } = require('./utils');
12 | const { format } = require('./index');
13 |
14 | const cli = meow(
15 | `
16 | Usage
17 | $ prettier-stylelint [ ...]
18 |
19 | Options
20 | --ignore Additional paths to ignore [Can be set multiple times]
21 | --extension Additional extension to lint [Can be set multiple times]
22 | --cwd= Working directory for files
23 | --stdin Validate/fix code from stdin ('prettier-stylelint -' also works)
24 | --write Edit files in place (DRAGONS AHEAD !!)
25 | --quiet -q Only log std.err
26 |
27 | Examples
28 | $ prettier-stylelint
29 | $ prettier-stylelint index.js
30 | $ prettier-stylelint *.js !foo.js
31 | $ echo 'a[id="foo"] { content: "x"; }' | prettier-stylelint --stdin
32 |
33 | Default pattern when no arguments:
34 | **/*.{css,scss,less,sss}
35 | `,
36 | {
37 | string: ['_', 'ignore', 'extension', 'cwd'],
38 | boolean: ['stdin', 'write'],
39 | default: {
40 | cwd: process.cwd(),
41 | write: false,
42 | quiet: false
43 | },
44 | alias: { q: 'quiet' }
45 | }
46 | );
47 |
48 | updateNotifier({ pkg: cli.pkg }).notify();
49 |
50 | let input = cli.input;
51 | const opts = cli.flags;
52 | const DEFAULT_EXTENSION = ['css', 'scss', 'less', 'sss'];
53 | const DEFAULT_PATTERN = `**/*.{${DEFAULT_EXTENSION.join(',')}}`;
54 | const DEFAULT_IGNORE = [
55 | '**/node_modules/**',
56 | '**/bower_components/**',
57 | 'flow-typed/**',
58 | 'coverage/**',
59 | '{tmp,temp}/**',
60 | '**/*.min.{css,scss,less,sss}',
61 | '**/bundle.{css,scss,less,sss}',
62 | 'fixture{-*,}.{css,scss,less,sss}',
63 | 'fixture{s,}/**',
64 | '{test,tests,spec,__tests__}/fixture{s,}/**',
65 | 'vendor/**',
66 | 'dist/**'
67 | ];
68 |
69 | const options = {
70 | ignore: DEFAULT_IGNORE.concat(arrify(opts.ignore)),
71 | extensions: DEFAULT_EXTENSION.concat(arrify(opts.extension)),
72 | cwd: opts.cwd,
73 | write: opts.write,
74 | quiet: opts.quiet
75 | };
76 |
77 | if (input[0] === '-') {
78 | opts.stdin = true;
79 | input.shift();
80 | }
81 | if (opts.stdin) {
82 | getStdin()
83 | .then(str =>
84 | format({
85 | filepath: opts.cwd,
86 | text: str
87 | }).then(source => process.stdout.write(source))
88 | )
89 | .catch((err) => {
90 | console.error(err.stack || err);
91 | process.exitCode = 1;
92 | });
93 | } else {
94 | const isEmptyPatterns = input.length === 0;
95 |
96 | input = isEmptyPatterns ? [DEFAULT_PATTERN] : arrify(input);
97 |
98 | globby(input, {
99 | ignore: options.ignore,
100 | nodir: true,
101 | cwd: options.cwd
102 | })
103 | .then((paths) => {
104 | paths = ignore(paths, options);
105 |
106 | return Promise.all(
107 | paths.map(path =>
108 | format({
109 | text: fs.readFileSync(path, 'utf8'),
110 | filePath: path,
111 | quiet: options.quiet
112 | })
113 | .then((formatted) => {
114 | if (!options.quiet) {
115 | console.log(formatted);
116 | }
117 | if (options.write) {
118 | return pify(fs.writeFile)(path, formatted);
119 | }
120 |
121 | return formatted;
122 | })
123 | .catch((err) => {
124 | console.error(
125 | `prettier-stylelint [ERROR]: There was an error formatting "${path}"\n`
126 | );
127 | console.error(err.stack || err);
128 | console.error('\n');
129 | process.exitCode = 1;
130 | })
131 | )
132 | );
133 | })
134 | .catch((err) => {
135 | console.error(err.stack || err);
136 | process.exitCode = 1;
137 | });
138 | }
139 |
--------------------------------------------------------------------------------
/src/index.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | const fs = require('fs');
4 | const path = require('path');
5 | const resolveFrom = require('resolve-from');
6 | const debug = require('debug')('prettier-stylelint:main');
7 |
8 | /**
9 | * Resolve Config for the given file
10 | *
11 | * @export
12 | * @param {string} file - filepath
13 | * @param {Object} options - options
14 | * @returns {Promise} -
15 | */
16 | function resolveConfig({
17 | filePath,
18 | stylelintPath,
19 | stylelintConfig,
20 | prettierOptions
21 | }) {
22 | const resolve = resolveConfig.resolve;
23 | const stylelint = requireRelative(stylelintPath, filePath, 'stylelint');
24 | const linterAPI = stylelint.createLinter();
25 |
26 | if (stylelintConfig) {
27 | return Promise.resolve(resolve(stylelintConfig, prettierOptions));
28 | }
29 |
30 | return linterAPI
31 | .getConfigForFile(filePath)
32 | .then(({ config }) => resolve(config, prettierOptions));
33 | }
34 |
35 | resolveConfig.resolve = (stylelintConfig, prettierOptions = {}) => {
36 | const { rules } = stylelintConfig;
37 |
38 | if (rules['max-line-length']) {
39 | const printWidth = rules['max-line-length'][0];
40 |
41 | prettierOptions.printWidth = printWidth;
42 | }
43 |
44 | if (rules['string-quotes']) {
45 | const quotes = rules['string-quotes'][0];
46 |
47 | if (quotes === 'single') {
48 | prettierOptions.singleQuote = true;
49 | }
50 | }
51 |
52 | if (rules.indentation) {
53 | const indentation = rules.indentation[0];
54 |
55 | if (indentation === 'tab') {
56 | prettierOptions.useTabs = true;
57 | prettierOptions.tabWidth = 2;
58 | } else {
59 | prettierOptions.useTabs = false;
60 | prettierOptions.tabWidth = indentation;
61 | }
62 | }
63 | prettierOptions.parser = 'postcss';
64 | debug('prettier %O', prettierOptions);
65 | debug('linter %O', stylelintConfig);
66 |
67 | return [prettierOptions, stylelintConfig];
68 | };
69 |
70 | function stylelinter(code, { filePath, stylelintPath }) {
71 | const stylelint = requireRelative(stylelintPath, filePath, 'stylelint');
72 | const linterAPI = stylelint.createLinter({ fix: true });
73 |
74 | return linterAPI
75 | ._lintSource({
76 | code,
77 | codeFilename: filePath
78 | })
79 | .then((result) => {
80 | const fixed = result.root.toString(result.opts.syntax);
81 |
82 | return fixed;
83 | });
84 | }
85 |
86 | function requireRelative(path, filePath, packageName) {
87 | try {
88 | if (path) {
89 | return require(resolveFrom(path, packageName));
90 | }
91 |
92 | return require(resolveFrom(filePath, packageName));
93 | } catch (err) {
94 | return require(packageName);
95 | }
96 | }
97 |
98 | function getPrettierConfig(filePath, prettierPath) {
99 | const prettier = requireRelative(prettierPath, filePath, 'prettier');
100 |
101 | // NOTE: Backward-compatibility with old prettier versions (<1.7)
102 | // that don't have ``resolveConfig.sync` method.
103 | return typeof prettier.resolveConfig.sync === 'undefined' ?
104 | {} :
105 | prettier.resolveConfig.sync(filePath);
106 | }
107 |
108 | function format({
109 | filePath = '',
110 | text = fs.readFileSync(filePath, 'utf8'),
111 | prettierPath,
112 | stylelintPath,
113 | prettierOptions = getPrettierConfig(filePath, prettierPath),
114 | stylelintConfig
115 | }) {
116 | const options = {
117 | filePath: path.isAbsolute(filePath) ?
118 | filePath :
119 | path.resolve(process.cwd(), filePath),
120 | text,
121 | prettierPath,
122 | stylelintPath,
123 | stylelintConfig,
124 | prettierOptions
125 | };
126 | const prettier = requireRelative(prettierPath, filePath, 'prettier');
127 |
128 | return resolveConfig(options).then(([prettierConfig]) =>
129 | stylelinter(prettier.format(text, prettierConfig), options)
130 | );
131 | }
132 |
133 | exports.format = format;
134 | exports.resolveConfig = resolveConfig;
135 | exports.getPrettierConfig = getPrettierConfig;
136 |
--------------------------------------------------------------------------------
/src/utils.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | const fs = require('fs');
4 | const path = require('path');
5 | const debug = require('debug')('prettier-stylelint:utils');
6 | const ignore = require('ignore');
7 |
8 | exports.arrify = function(val) {
9 | if (val === null || val === undefined) {
10 | return [];
11 | }
12 |
13 | return Array.isArray(val) ? val : [val];
14 | };
15 |
16 | exports.ignore = function(paths, options) {
17 | const ignorer = ignore();
18 | const gitignore = path.resolve(options.cwd, '.gitignore');
19 | const prettierignore = path.resolve(options.cwd, '.prettierignore');
20 |
21 | try {
22 | ignorer.add(fs.readFileSync(gitignore, 'utf8').toString());
23 | } catch (err) {
24 | debug('.gitignore error', err.message);
25 | }
26 |
27 | try {
28 | ignorer.add(fs.readFileSync(prettierignore, 'utf8').toString());
29 | } catch (err) {
30 | debug('.prettierignore error', err.message);
31 | }
32 |
33 | paths = ignorer.filter(paths);
34 |
35 | // Filter out unwanted file extensions
36 | // For silly users that don't specify an extension in the glob pattern
37 | if (paths.length > 0) {
38 | paths = paths.filter((filePath) => {
39 | const ext = path.extname(filePath).replace('.', '');
40 |
41 | return options.extensions.indexOf(ext) !== -1;
42 | });
43 | }
44 |
45 | return paths;
46 | };
47 |
--------------------------------------------------------------------------------
/test.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | const fs = require('fs');
4 | const test = require('ava');
5 | const tempWrite = require('temp-write');
6 | const stylelint = require('stylelint');
7 | const resolveFrom = require('resolve-from');
8 | const { format, resolveConfig, getPrettierConfig } = require('./index');
9 |
10 | const linterAPI = stylelint.createLinter({ fix: true });
11 |
12 | test('resolveConfig', t =>
13 | resolveConfig({ filePath: './fixtures/style.css' }).then(config =>
14 | t.deepEqual(config[1], {
15 | rules: {
16 | 'string-quotes': ['single'],
17 | 'indentation': [4, { except: ['value'] }],
18 | 'color-hex-case': ['upper'],
19 | 'color-hex-length': ['short'],
20 | 'block-no-empty': null,
21 | 'color-no-invalid-hex': [true],
22 | 'comment-empty-line-before': [
23 | 'always',
24 | { ignore: ['stylelint-commands', 'after-comment'] }
25 | ],
26 | 'declaration-colon-space-after': ['always'],
27 | 'max-empty-lines': [2],
28 | 'rule-empty-line-before': [
29 | 'always',
30 | {
31 | except: ['first-nested'],
32 | ignore: ['after-comment']
33 | }
34 | ],
35 | 'unit-whitelist': [['em', 'rem', '%', 's']]
36 | }
37 | })
38 | ));
39 |
40 | test('resolveConfig not found fallback process.cwd', (t) => {
41 | const tempPath = tempWrite.sync(
42 | 'a[id="foo"] { content: "x"; }',
43 | 'test.css'
44 | );
45 |
46 | return resolveConfig({ filePath: tempPath }).then((config) => {
47 | t.is(config[1].rules['function-comma-newline-after'], null);
48 |
49 | return config;
50 | });
51 | });
52 |
53 | test('resolveConfig shortcircuit ', t =>
54 | resolveConfig({ stylelintConfig: { rules: { 'max-line-length': [20] } } }).then((config) => {
55 | t.is(config[0].printWidth, 20);
56 |
57 | return config;
58 | }));
59 |
60 | test('resolve string quotes === double ', (t) => {
61 | const config = resolveConfig.resolve({ rules: { 'string-quotes': ['double'] } });
62 |
63 | t.is(config[0].singleQuote, undefined);
64 | });
65 |
66 | test('resolve indentation === tab', (t) => {
67 | const config = resolveConfig.resolve({ rules: { indentation: ['tab'] } });
68 |
69 | t.plan(2);
70 | t.is(config[0].useTabs, true);
71 | t.is(config[0].tabWidth, 2);
72 | });
73 |
74 | test('resolveConfig prettier merge', t =>
75 | resolveConfig({
76 | filePath: './fixtures/style.css',
77 | prettierOptions: getPrettierConfig('./fixtures/style.css')
78 | }).then((config) => {
79 | t.is(config[0].semi, false);
80 |
81 | return config;
82 | }));
83 |
84 | test('format', (t) => {
85 | const source = fs.readFileSync('./fixtures/style.css', 'utf8');
86 |
87 | return format({
88 | text: source,
89 | filePath: './fixtures/style.css'
90 | }).then((source) => {
91 | t.is(
92 | source,
93 | `@media print {
94 | a {
95 | color: #FFF;
96 | background-position: top left, top right;
97 | }
98 | }
99 |
100 | a[id='foo'] {
101 | content: 'x';
102 | }
103 | `
104 | );
105 |
106 | return source;
107 | });
108 | });
109 |
110 | test('format without code but with filePath', t =>
111 | format({ filePath: './fixtures/style.css' }).then((source) => {
112 | t.is(
113 | source,
114 | `@media print {
115 | a {
116 | color: #FFF;
117 | background-position: top left, top right;
118 | }
119 | }
120 |
121 | a[id='foo'] {
122 | content: 'x';
123 | }
124 | `
125 | );
126 |
127 | return source;
128 | }));
129 |
130 | test('format less', (t) => {
131 | const source = fs.readFileSync('./fixtures/less.less', 'utf8');
132 |
133 | return format({
134 | text: source,
135 | filePath: './fixtures/less.less'
136 | }).then((source) => {
137 | t.is(
138 | source,
139 | `@base: #F938AB;
140 |
141 | .box-shadow(@style, @c) when (iscolor(@c)) {
142 | -webkit-box-shadow: @style @c;
143 | box-shadow: @style @c;
144 | }
145 | .box-shadow(@style, @alpha: 50%) when (isnumber(@alpha)) {
146 | .box-shadow(@style, rgba(0, 0, 0, @alpha));
147 | }
148 |
149 | .box {
150 | color: saturate(@base, 5%);
151 | border-color: lighten(@base, 30%);
152 |
153 | div {
154 | .box-shadow(0 0 5px, 30%);
155 | }
156 | }
157 | `
158 | );
159 |
160 | return source;
161 | });
162 | });
163 |
164 | test('format with syntax error from prettier', (t) => {
165 | const source = fs.readFileSync('./tests/error-syntax.css', 'utf8');
166 |
167 | return format({
168 | text: source,
169 | filePath: './tests/error-syntax.css'
170 | }).catch((err) => {
171 | t.is(err.name, 'SyntaxError');
172 | });
173 | });
174 |
175 | test('alternate stylelint format', (t) => {
176 | const source = fs.readFileSync('./fixtures/style.css', 'utf8');
177 |
178 | return linterAPI
179 | ._lintSource({
180 | code: source
181 | // codeFilename: process.cwd()
182 | // codeFilename: path.resolve(process.cwd(), './tests/less.less')
183 | // filePath: path.resolve(process.cwd(), './fixtures/style.css')
184 | })
185 | .then((result) => {
186 | const fixed = result.root.toString(result.opts.syntax);
187 |
188 | t.is(
189 | result.root.toString(result.opts.syntax),
190 | `@media print {
191 | a {
192 | color: #FFF;
193 | background-position: top left,
194 | top right;
195 | }
196 | }
197 |
198 |
199 |
200 |
201 | a[id="foo"] { content: "x"; }
202 | `
203 | );
204 |
205 | return fixed;
206 | });
207 | });
208 |
209 | test('resolve relative package', (t) => {
210 | const path = resolveFrom('./fixtures/find-package/style.css', 'prettier');
211 |
212 | t.is('1.6.0', require(path).version);
213 | });
214 |
215 | test('resolve relative package deep', (t) => {
216 | const path = resolveFrom(
217 | './fixtures/find-package/deep/style.css',
218 | 'prettier'
219 | );
220 |
221 | t.is('1.6.0', require(path).version);
222 | });
223 |
224 | test('resolve relative package fallback', (t) => {
225 | const path = resolveFrom('./fixtures/style.css', 'prettier');
226 |
227 | t.is('1.7.0', require(path).version);
228 | });
229 |
230 | test('resolve relative package null', (t) => {
231 | const path = resolveFrom(__filename, 'prettier');
232 |
233 | t.is('1.7.0', require(path).version);
234 | });
235 |
--------------------------------------------------------------------------------
/tests/error-after-format.css:
--------------------------------------------------------------------------------
1 | @media print {
2 | a {
3 | color: #ffffff;
4 | background-position: top left,
5 | top right;
6 | }
7 | }
8 |
9 |
10 |
11 |
12 | a[id="foo"] { content: "x"; }
13 | a { color: #fff1az; }
14 |
--------------------------------------------------------------------------------
/tests/error-syntax.css:
--------------------------------------------------------------------------------
1 | a { color: #fff1az;
2 |
--------------------------------------------------------------------------------
/tests/less.less:
--------------------------------------------------------------------------------
1 | @base: #f938ab;
2 |
3 | .box-shadow(@style, @c) when (iscolor(@c)) {
4 | -webkit-box-shadow: @style @c;
5 | box-shadow: @style @c;
6 | }
7 | .box-shadow(@style, @alpha: 50%) when (isnumber(@alpha)) {
8 | .box-shadow(@style, rgba(0, 0, 0, @alpha));
9 | }
10 | .box {
11 | color: saturate(@base, 5%);
12 | border-color: lighten(@base, 30%);
13 | div { .box-shadow(0 0 5px, 30%) }
14 | }
15 |
--------------------------------------------------------------------------------
/tests/nestes.css:
--------------------------------------------------------------------------------
1 | @media print {
2 | a {
3 | color: #ffffff;
4 | background-position: top left,
5 | top right;
6 | }
7 | }
8 |
9 |
10 |
11 |
12 | a[id="foo"] { content: "x"; }
13 |
--------------------------------------------------------------------------------
/tests/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "stylelint": {
3 | "extends": ["stylelint-config-recommended", "./config"],
4 | "rules": {
5 | "string-quotes": "single",
6 | "indentation": [
7 | 4,
8 | {
9 | "except": ["value"]
10 | }
11 | ],
12 | "color-hex-case": "upper",
13 | "color-hex-length": "short",
14 | "unit-whitelist": ["em", "rem", "%", "s", "px"]
15 | }
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/tests/rules/color-no-invalid-hex.css:
--------------------------------------------------------------------------------
1 | a { color: #000; }
2 | a { color: #000f; }
3 | a { color: #fff1a0; }
4 | a { color: #123450aa; }
5 |
6 | a { color: #00; }
7 | a { color: #fff1az; }
8 | a { color: #12345aa; }
9 |
--------------------------------------------------------------------------------
/tests/test-disable-rules.css:
--------------------------------------------------------------------------------
1 | /** this file formatted with prettier-stylelint MUST NOT HAVE ANY ERROR **/
2 | /* ./cli.js tests/test-disable-rules.css --write -q */
3 |
4 | /* https://github.com/hugomrdias/prettier-stylelint/issues/1 */
5 |
6 | /* only prettier or only stylelint might have errors*/
7 |
8 | a {
9 | transform: translate(1, 1);
10 | }
11 |
12 | a {
13 | transform: translate(1, 1);
14 | }
15 |
16 | a {
17 | transform: translate(1, 1);
18 | }
19 |
20 | a {
21 | transform: translate(1, 1);
22 | }
23 |
24 | @font-face {
25 | font-family: 'foo';
26 | src: url('foo.ttf');
27 | }
28 |
29 | a {
30 | background: url('x.jpg');
31 | }
32 |
33 | a {
34 | transform: translate(1, 1)scale(3);
35 | }
36 |
37 | a {
38 | transform: translate(1, 1) scale(3);
39 | }
40 |
41 | a {
42 | padding: calc(1 * 2px), calc(2 * 5px);
43 | }
44 |
45 | a {
46 | background-size: 0, 0;
47 | }
48 |
49 | a {
50 | box-shadow: inset 0 2px 0 #DCFFA6, 0 2px 5px #000, inset 0 2px 0 #DCFFA6,
51 | 0 2px 5px #000, inset 0 2px 0 #DCFFA6, 0 2px 5px #000;
52 | }
53 |
54 | a {
55 | top: 10px;
56 | --foo: pink;
57 | --bar: red;
58 | }
59 |
60 | a {
61 | color: pink !important;
62 | }
63 |
64 | a {
65 | color: pink !important;
66 | }
67 |
68 | a {
69 | color: pink !important;
70 | }
71 |
72 | a {
73 | color: pink !important;
74 | }
75 |
76 | a {
77 | color: pink !important;
78 | }
79 |
80 | a {
81 | box-shadow: 0 0 0 1px #5B9DD9, 0 0 2px 1px rgba(30, 140, 190, 0.8);
82 | }
83 |
84 | a {
85 | --foo: pink;
86 |
87 | top: 5px;
88 | }
89 |
90 | a {
91 | color: pink; /* end-of-line comment
92 | containing a newline */
93 | top: 0;
94 | }
95 |
96 | a {
97 | color: pink; /* end-of-line comment */
98 | top: 0;
99 | }
100 |
101 | a {
102 | color: pink;
103 | top: 0;
104 | }
105 |
106 | a {
107 | background: orange;
108 | color: pink;
109 | }
110 |
111 | a {
112 | background: orange;
113 | color: pink;
114 | }
115 |
116 | a {
117 | color: pink;
118 | }
119 |
120 | a {
121 | color: pink;
122 | }
123 |
124 | a {
125 | color: pink;
126 | }
127 |
128 | b {
129 | color: red;
130 | }
131 |
132 | a {
133 | color: pink;
134 | }
135 |
136 | [target='_blank '] {
137 | color: pink;
138 | }
139 |
140 | [target='_blank '] {
141 | color: pink;
142 | }
143 |
144 | [target ='_blank'] {
145 | color: pink;
146 | }
147 |
148 | [target = '_blank'] {
149 | color: pink;
150 | }
151 |
152 | [title='flower'] {
153 | color: pink;
154 | }
155 |
156 | [target='_blank'] {
157 | color: pink;
158 | }
159 |
160 | [class^='top'] {
161 | color: pink;
162 | }
163 |
164 | a + b {
165 | color: pink;
166 | }
167 |
168 | a > b {
169 | color: pink;
170 | }
171 |
172 | .foo .bar {
173 | color: pink;
174 | }
175 |
176 | input:not([type='submit']) {
177 | color: pink;
178 | }
179 |
180 | a::first-letter {
181 | color: pink;
182 | }
183 |
184 | a:first-letter {
185 | color: pink;
186 | }
187 |
188 | a,
189 | b {
190 | color: pink;
191 | }
192 |
193 | a,
194 | b {
195 | color: pink;
196 | }
197 |
198 | a {
199 | color: pink;
200 | }
201 | b {
202 | color: pink;
203 | }
204 |
205 | @media (max-width: 600px) {
206 | color: pink;
207 | }
208 |
209 | @media (max-width: 600px) {
210 | color: pink;
211 | }
212 |
213 | @media (width >= 600px) {
214 | color: pink;
215 | }
216 |
217 | @media (width >= 600px) {
218 | color: pink;
219 | }
220 |
221 | @media (width >= 600px) {
222 | color: pink;
223 | }
224 |
225 | @media screen and (color), projection and (color) {
226 | color: pink;
227 | }
228 |
229 | @media screen and (color), projection and (color) {
230 | color: pink;
231 | }
232 |
233 | @charset "UTF-8";
234 |
235 | @import 'x.css' screen and (orientation: landscape);
236 |
237 | @media (min-width: 700px) and (orientation: landscape) {
238 | color: pink;
239 | }
240 |
241 | @import url('responsive/gt768.css'), screen and (min-width: 768px);
242 |
243 | @media (min-width: 700px) {
244 | color: pink;
245 | }
246 |
247 | @media (min-width: 700px) {
248 | color: pink;
249 | }
250 |
251 | @import url('x.css');
252 |
253 | @media (min-width: 700px) {
254 | color: pink;
255 | }
256 |
257 | @import url('x.css'); /* end-of-line comment */
258 |
259 | a {
260 | color: pink;
261 | }
262 |
263 | @import url('x.css');
264 | @import url('y.css');
265 |
266 | @import 'components/buttons';
267 |
268 | a {
269 | color: pink;
270 | }
271 | /* comment */
272 |
273 | a {
274 | color: pink;
275 | }
276 |
277 | /* comment */
278 |
279 | a {
280 | /* comment */
281 | color: pink;
282 | }
283 |
284 | /** comment**/
285 | /** comment**/
286 |
287 | /*comment*/
288 |
289 | a {
290 | color: pink;
291 | }
292 |
293 | b {
294 | color: pink;
295 | }
296 |
297 | /**
298 | * Call me Ishmael.
299 | *
300 | *
301 | *
302 | * Some years ago -- never mind how log precisely -- ...
303 | */
304 |
305 | a {
306 | color: pink;
307 | }
308 |
309 | b {
310 | color: pink;
311 | }
312 |
313 | a {
314 | background: linear-gradient(red, blue);
315 | }
316 |
317 | a {
318 | color: pink;
319 | }
320 |
--------------------------------------------------------------------------------