Skip to content

Commit

Permalink
Require Node.js 18, Stylelint 16, and move to ESM
Browse files Browse the repository at this point in the history
Fixes #19
  • Loading branch information
sindresorhus committed May 1, 2024
1 parent e57d60c commit 7a6a55d
Show file tree
Hide file tree
Showing 5 changed files with 186 additions and 181 deletions.
5 changes: 2 additions & 3 deletions .github/workflows/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,10 +12,9 @@ jobs:
node-version:
- 20
- 18
- 16
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: ${{ matrix.node-version }}
- run: npm install
Expand Down
236 changes: 119 additions & 117 deletions index.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
'use strict';
// - const propertiesOrder = require('./properties-order');
// - import propertiesOrder from './properties-order.js';

// Allows:
// foo-bar
Expand All @@ -17,10 +16,10 @@ const reLowerCase = /([a-z][a-z\d]*(-[a-z\d]+)*)/;
const rePascalCase = /(([A-Z][a-zA-Z\d]+)*)/;
const reName = new RegExp(`^(${reLowerCaseFirstUpper.source}|${reLowerCase.source}|${rePascalCase.source})((--|__)(${reLowerCase.source}|${rePascalCase.source}))*$`);

module.exports = {
const config = {
plugins: [
'stylelint-order',
'stylelint-declaration-block-no-ignored-properties'
'stylelint-declaration-block-no-ignored-properties',
],
rules: {
'color-no-invalid-hex': true,
Expand All @@ -39,37 +38,38 @@ module.exports = {
true,
{
ignoreShorthands: [
'grid-template'
]
}
'grid-template',
],
},
],
'declaration-block-no-shorthand-property-overrides': true,
'block-no-empty': [
true,
{
ignore: [
'comments'
]
}
'comments',
],
},
],
'selector-pseudo-class-no-unknown': true,
'selector-pseudo-element-no-unknown': true,
'selector-type-no-unknown': true,
'media-feature-name-no-unknown': true,
'at-rule-no-unknown': true,
'declaration-property-value-no-unknown': true,
'comment-no-empty': true,
'no-descending-specificity': [
true,
{
ignore: [
'selectors-within-list'
]
}
'selectors-within-list',
],
},
],
'no-duplicate-at-import-rules': true,
'no-duplicate-selectors': true,
'no-empty-source': true,
'no-extra-semicolons': true,
'@stylistic/no-extra-semicolons': true,
'no-invalid-double-slash-comments': true,
'alpha-value-notation': 'percentage',
'hue-degree-notation': 'angle',
Expand All @@ -84,9 +84,9 @@ module.exports = {
{
ignoreValues: [
'grab',
'grabbing'
]
}
'grabbing',
],
},
],
'property-no-vendor-prefix': [
true,
Expand All @@ -95,45 +95,45 @@ module.exports = {
'app-region', // For Electron
'appearance',
'mask',
'tab-size' // It's still only prefixed in Firefox
]
}
'tab-size', // It's still only prefixed in Firefox
],
},
],
'declaration-no-important': true,
'declaration-property-value-disallowed-list': {
'/^border(?!-(width|spacing|radius|(top|bottom)-(left|right)-radius))/': [
/thin/,
/medium/,
/thick/,
'0' // Prefer `none`
'0', // Prefer `none`
],
'/^transition/': [
/all/
]
/all/,
],
},
'selector-class-pattern': reName,
'selector-id-pattern': reName,
'selector-max-attribute': 8,
'selector-max-class': 8,
'selector-max-compound-selectors': 8,
'selector-max-empty-lines': 0,
'@stylistic/selector-max-empty-lines': 0,
'selector-max-universal': 1,
'selector-no-vendor-prefix': [
true,
{
ignoreSelectors: [
'::-webkit-input-placeholder'
]
}
'::-webkit-input-placeholder',
],
},
],
'media-feature-name-no-vendor-prefix': true,
'at-rule-no-vendor-prefix': true,
'at-rule-property-required-list': {
'font-face': [
'font-display',
'font-family',
'font-style'
]
'font-style',
],
},
'comment-word-disallowed-list': [
[
Expand All @@ -143,145 +143,147 @@ module.exports = {
'shit',
'damn',
'twerk',
'egg yolk'
'egg yolk',
],
{
severity: 'warning'
}
severity: 'warning',
},
],
'max-nesting-depth': [
8,
{
ignore: [
'pseudo-classes'
]
}
'pseudo-classes',
],
},
],
'color-hex-case': 'lower',
'@stylistic/color-hex-case': 'lower',
'color-hex-length': 'short',
'font-family-name-quotes': 'always-where-recommended',
'font-weight-notation': 'named-where-possible',
'function-comma-newline-after': 'always-multi-line',
'function-comma-newline-before': 'never-multi-line',
'function-comma-space-after': 'always-single-line',
'function-max-empty-lines': 0,
'@stylistic/function-comma-newline-after': 'always-multi-line',
'@stylistic/function-comma-newline-before': 'never-multi-line',
'@stylistic/function-comma-space-after': 'always-single-line',
'@stylistic/function-max-empty-lines': 0,
'function-name-case': 'lower',
'function-parentheses-newline-inside': 'always-multi-line',
'function-parentheses-space-inside': 'never-single-line',
'@stylistic/function-parentheses-newline-inside': 'always-multi-line',
'@stylistic/function-parentheses-space-inside': 'never-single-line',
'function-url-quotes': 'always',
'function-whitespace-after': 'always',
'number-leading-zero': 'always',
'number-no-trailing-zeros': true,
'string-quotes': [
'@stylistic/function-whitespace-after': 'always',
'@stylistic/number-leading-zero': 'always',
'@stylistic/number-no-trailing-zeros': true,
'@stylistic/string-quotes': [
'single',
{
avoidEscape: false
}
avoidEscape: false,
},
],
'length-zero-no-unit': true,
'unit-case': 'lower',
'@stylistic/unit-case': 'lower',
'value-keyword-case': 'lower',
'value-list-comma-newline-after': 'always-multi-line',
'value-list-comma-newline-before': 'never-multi-line',
'value-list-comma-space-after': 'always-single-line',
'value-list-comma-space-before': 'never',
'value-list-max-empty-lines': 0,
'property-case': 'lower',
'declaration-bang-space-after': 'never',
'declaration-bang-space-before': 'always',
'declaration-colon-newline-after': 'always-multi-line',
'declaration-colon-space-after': 'always-single-line',
'declaration-colon-space-before': 'never',
'@stylistic/value-list-comma-newline-after': 'always-multi-line',
'@stylistic/value-list-comma-newline-before': 'never-multi-line',
'@stylistic/value-list-comma-space-after': 'always-single-line',
'@stylistic/value-list-comma-space-before': 'never',
'@stylistic/value-list-max-empty-lines': 0,
'@stylistic/property-case': 'lower',
'@stylistic/declaration-bang-space-after': 'never',
'@stylistic/declaration-bang-space-before': 'always',
'@stylistic/declaration-colon-newline-after': 'always-multi-line',
'@stylistic/declaration-colon-space-after': 'always-single-line',
'@stylistic/declaration-colon-space-before': 'never',
'declaration-empty-line-before': 'never',
'declaration-block-semicolon-newline-after': 'always',
'declaration-block-semicolon-newline-before': 'never-multi-line',
'declaration-block-semicolon-space-after': 'always-single-line',
'declaration-block-semicolon-space-before': 'never',
'declaration-block-trailing-semicolon': 'always',
'block-closing-brace-empty-line-before': 'never',
'block-closing-brace-newline-after': 'always',
'block-closing-brace-newline-before': 'always',
'block-opening-brace-newline-after': 'always',
'block-opening-brace-space-before': 'always',
'selector-attribute-brackets-space-inside': 'never',
'selector-attribute-operator-space-after': 'never',
'selector-attribute-operator-space-before': 'never',
'@stylistic/declaration-block-semicolon-newline-after': 'always',
'@stylistic/declaration-block-semicolon-newline-before': 'never-multi-line',
'@stylistic/declaration-block-semicolon-space-after': 'always-single-line',
'@stylistic/declaration-block-semicolon-space-before': 'never',
'@stylistic/declaration-block-trailing-semicolon': 'always',
'@stylistic/block-closing-brace-empty-line-before': 'never',
'@stylistic/block-closing-brace-newline-after': 'always',
'@stylistic/block-closing-brace-newline-before': 'always',
'@stylistic/block-opening-brace-newline-after': 'always',
'@stylistic/block-opening-brace-space-before': 'always',
'@stylistic/selector-attribute-brackets-space-inside': 'never',
'@stylistic/selector-attribute-operator-space-after': 'never',
'@stylistic/selector-attribute-operator-space-before': 'never',
'selector-attribute-quotes': 'always',
'selector-combinator-space-after': 'always',
'selector-combinator-space-before': 'always',
'selector-descendant-combinator-no-non-space': true,
'selector-pseudo-class-case': 'lower',
'selector-pseudo-class-parentheses-space-inside': 'never',
'selector-pseudo-element-case': 'lower',
'@stylistic/selector-combinator-space-after': 'always',
'@stylistic/selector-combinator-space-before': 'always',
'@stylistic/selector-descendant-combinator-no-non-space': true,
'@stylistic/selector-pseudo-class-case': 'lower',
'@stylistic/selector-pseudo-class-parentheses-space-inside': 'never',
'@stylistic/selector-pseudo-element-case': 'lower',
'selector-pseudo-element-colon-notation': 'double',
'selector-type-case': 'lower',
'selector-list-comma-newline-after': 'always',
'selector-list-comma-newline-before': 'never-multi-line',
'selector-list-comma-space-after': 'always-single-line',
'selector-list-comma-space-before': 'never',
'@stylistic/selector-list-comma-newline-after': 'always',
'@stylistic/selector-list-comma-newline-before': 'never-multi-line',
'@stylistic/selector-list-comma-space-after': 'always-single-line',
'@stylistic/selector-list-comma-space-before': 'never',
'rule-empty-line-before': [
'always',
{
except: [
'after-single-line-comment',
'first-nested'
'first-nested',
],
ignore: [
'after-comment'
]
}
'after-comment',
],
},
],
'media-feature-colon-space-after': 'always',
'media-feature-colon-space-before': 'never',
'media-feature-name-case': 'lower',
'media-feature-parentheses-space-inside': 'never',
'media-feature-range-operator-space-after': 'always',
'media-feature-range-operator-space-before': 'always',
'media-query-list-comma-newline-after': 'always',
'media-query-list-comma-newline-before': 'never-multi-line',
'media-query-list-comma-space-before': 'never',
'@stylistic/media-feature-colon-space-after': 'always',
'@stylistic/media-feature-colon-space-before': 'never',
'@stylistic/media-feature-name-case': 'lower',
'@stylistic/media-feature-parentheses-space-inside': 'never',
'@stylistic/media-feature-range-operator-space-after': 'always',
'@stylistic/media-re-range-operator-space-before': 'always',
'@stylistic/media-query-list-comma-newline-after': 'always',
'@stylistic/media-query-list-comma-newline-before': 'never-multi-line',
'@stylistic/media-query-list-comma-space-before': 'never',
'at-rule-empty-line-before': [
'always',
{
except: [
'inside-block',
'blockless-after-blockless'
'blockless-after-blockless',
],
ignore: [
'after-comment'
]
}
'after-comment',
],
},
],
'at-rule-name-case': 'lower',
'at-rule-name-newline-after': 'always-multi-line',
'at-rule-name-space-after': 'always-single-line',
'at-rule-semicolon-newline-after': 'always',
'at-rule-semicolon-space-before': 'never',
'@stylistic/at-rule-name-case': 'lower',
'@stylistic/at-rule-name-newline-after': 'always-multi-line',
'@stylistic/at-rule-name-space-after': 'always-single-line',
'@stylistic/at-rule-semicolon-newline-after': 'always',
'@stylistic/at-rule-semicolon-space-before': 'never',
'comment-whitespace-inside': 'always',
indentation: [
'@stylistic/indentation': [
'tab',
{
baseIndentLevel: 1
}
baseIndentLevel: 1,
},
],
linebreaks: 'unix',
'max-empty-lines': 2,
'no-eol-whitespace': true,
'no-missing-end-of-source-newline': true,
'no-empty-first-line': true,
'unicode-bom': 'never',
'@stylistic/linebreaks': 'unix',
'@stylistic/max-empty-lines': 2,
'@stylistic/no-eol-whitespace': true,
'@stylistic/no-missing-end-of-source-newline': true,
'@stylistic/no-empty-first-line': true,
'@stylistic/unicode-bom': 'never',

// `stylelint-order`
'order/order': [
'dollar-variables',
'custom-properties',
'declarations',
'rules'
'rules',
],
// Disabled for now: https://github.com/sindresorhus/stylelint-config-xo/pull/2#issuecomment-363438756
// 'order/properties-order': propertiesOrder,

// `stylelint-declaration-block-no-ignored-properties`
'plugin/declaration-block-no-ignored-properties': true
}
'plugin/declaration-block-no-ignored-properties': true,
},
};

export default config;

0 comments on commit 7a6a55d

Please sign in to comment.