From 458999c3d9a8fcce4758ba0cf5c72d8cd3116648 Mon Sep 17 00:00:00 2001 From: YuTengjing Date: Fri, 16 Feb 2024 11:00:16 +0800 Subject: [PATCH] support check compact --- .github/workflows/ci.yml | 14 ++- package.json | 8 +- pnpm-lock.yaml | 179 ++++++++++++++++++++++++++++++++++++ scripts/check-css-compat.ts | 25 +++++ 4 files changed, 221 insertions(+), 5 deletions(-) create mode 100644 scripts/check-css-compat.ts diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 378e320..f5d7e60 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -14,15 +14,15 @@ jobs: runs-on: ${{ matrix.os }} steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Set node ${{ matrix.node }} - uses: actions/setup-node@v3 + uses: actions/setup-node@v4 with: node-version: 20.x - name: Install pnpm - uses: pnpm/action-setup@v2 + uses: pnpm/action-setup@v3 with: version: 8 run_install: false @@ -33,7 +33,7 @@ jobs: echo "STORE_PATH=$(pnpm store path --silent)" >> $GITHUB_ENV - name: Setup pnpm cache - uses: actions/cache@v3 + uses: actions/cache@v4 with: path: ${{ env.STORE_PATH }} key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }} @@ -45,3 +45,9 @@ jobs: - name: Lint run: pnpm lint + + - name: Build + run: pnpm build + + - name: Check Compat + run: pnpm check-compat diff --git a/package.json b/package.json index 00828d0..2ea9144 100644 --- a/package.json +++ b/package.json @@ -21,7 +21,10 @@ "lint:type": "tsc -b tsconfig.check.json", "lint:eslint": "eslint .", "lint:stylelint": "stylelint src/**/*.{css,scss}", - "lint:format": "prettier . --check" + "lint:format": "prettier . --check", + "check-compat": "pnpm run /^check-compat:/", + "check-compat:js": "check-es-compat ./dist", + "check-compat:css": "tsx ./scripts/check-css-compat.ts" }, "dependencies": { "antd": "^5.14.0", @@ -45,7 +48,9 @@ "@yutengjing/tsconfig-node": "^0.0.5", "@yutengjing/tsconfig-react": "^0.0.5", "browserslist": "^4.22.3", + "check-es-compat": "^3.2.0", "css-minimizer-webpack-plugin": "^6.0.0", + "doiuse": "^6.0.2", "eslint": "^8.56.0", "eslint-define-config": "^2.1.0", "html-webpack-plugin": "^5.6.0", @@ -55,6 +60,7 @@ "sass": "^1.70.0", "sass-loader": "^14.1.0", "stylelint": "^16.2.1", + "stylelint-no-unsupported-browser-features": "^8.0.1", "tsx": "^4.7.0", "typescript": "^5.3.3", "webpack-merge": "^5.10.0" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 745cd2e..f375e6b 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -64,9 +64,15 @@ devDependencies: browserslist: specifier: ^4.22.3 version: 4.22.3 + check-es-compat: + specifier: ^3.2.0 + version: 3.2.0 css-minimizer-webpack-plugin: specifier: ^6.0.0 version: 6.0.0(lightningcss@1.23.0)(webpack@5.90.1) + doiuse: + specifier: ^6.0.2 + version: 6.0.2 eslint: specifier: ^8.56.0 version: 8.56.0 @@ -94,6 +100,9 @@ devDependencies: stylelint: specifier: ^16.2.1 version: 16.2.1(typescript@5.3.3) + stylelint-no-unsupported-browser-features: + specifier: ^8.0.1 + version: 8.0.1(stylelint@16.2.1) tsx: specifier: ^4.7.0 version: 4.7.0 @@ -599,6 +608,10 @@ packages: resolution: {integrity: sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==} dev: true + /@mdn/browser-compat-data@5.5.6: + resolution: {integrity: sha512-dZgfsA1v8r+8QBPh7YqPaNz9KRlLi/iyac1/mwbaIV7yFrtW1qCkmzBJiJGsMhI1/JdayJvC81lVS/UEzHsgbA==} + dev: true + /@module-federation/runtime-tools@0.0.8: resolution: {integrity: sha512-tqx3wlVHnpWLk+vn22c0x9Nv1BqdZnoS6vdMb53IsVpbQIFP70nhhvymHUyFuPkoLzMFidS7GpG58DYT/4lvCw==} dependencies: @@ -1550,6 +1563,10 @@ packages: resolution: {integrity: sha512-iJt33IQnVRkqeqC7PzBHPTC6fDlRNRW8vjrgqtScAhrmMwe8c4Eo7+fUGTa+XdWrpEgpyKWMYmi2dIwMAYRzPw==} dev: true + /@types/minimatch@3.0.5: + resolution: {integrity: sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==} + dev: true + /@types/ms@0.7.34: resolution: {integrity: sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==} dev: true @@ -2297,6 +2314,11 @@ packages: is-array-buffer: 3.0.4 dev: true + /array-differ@3.0.0: + resolution: {integrity: sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg==} + engines: {node: '>=8'} + dev: true + /array-flatten@1.1.1: resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==} dev: true @@ -2387,6 +2409,11 @@ packages: is-shared-array-buffer: 1.0.2 dev: true + /arrify@2.0.1: + resolution: {integrity: sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==} + engines: {node: '>=8'} + dev: true + /ast-types-flow@0.0.8: resolution: {integrity: sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==} dev: true @@ -2737,6 +2764,17 @@ packages: resolution: {integrity: sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==} dev: true + /check-es-compat@3.2.0: + resolution: {integrity: sha512-9YfgenvN41ZLBxMAXXXdW5mn4CdrhPIpI6QluAVrsop5wFgrDbF3WP8pXiNru/Y+AbxjQiki2+5I3wDVflqPeA==} + engines: {node: ^14.18.0 || >=16.0.0} + hasBin: true + dependencies: + eslint: 8.56.0 + eslint-plugin-ecmascript-compat: 3.2.0(eslint@8.56.0) + transitivePeerDependencies: + - supports-color + dev: true + /chevrotain@7.1.1: resolution: {integrity: sha512-wy3mC1x4ye+O+QkEinVJkPf5u2vsrDIYW9G7ZuwFl6v/Yu0LwUuT2POsb+NUWApebyxfkQq6+yDfRExbnI5rcw==} dependencies: @@ -3062,6 +3100,13 @@ packages: nth-check: 2.1.1 dev: true + /css-tokenize@1.0.1: + resolution: {integrity: sha512-gLmmbJdwH9HLY4bcA17lnZ8GgPwEXRbvxBJGHnkiB6gLhRpTzjkjtMIvz7YORGW/Ptv2oMk8b5g+u7mRD6Dd7A==} + dependencies: + inherits: 2.0.4 + readable-stream: 1.1.14 + dev: true + /css-tree@2.2.1: resolution: {integrity: sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==} engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0'} @@ -3364,6 +3409,22 @@ packages: esutils: 2.0.3 dev: true + /doiuse@6.0.2: + resolution: {integrity: sha512-eBTs23NOX+EAYPr4RbCR6J4DRW/TML3uMo37y0X1whlkersDYFCk9HmCl09KX98cis22VKsV1QaxfVNauJ3NBw==} + engines: {node: '>=16'} + hasBin: true + dependencies: + browserslist: 4.22.3 + caniuse-lite: 1.0.30001584 + css-tokenize: 1.0.1 + duplexify: 4.1.2 + ldjson-stream: 1.2.1 + multimatch: 5.0.0 + postcss: 8.4.34 + source-map: 0.7.4 + yargs: 17.7.2 + dev: true + /dom-converter@0.2.0: resolution: {integrity: sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==} dependencies: @@ -3431,6 +3492,15 @@ packages: resolution: {integrity: sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==} dev: true + /duplexify@4.1.2: + resolution: {integrity: sha512-fz3OjcNCHmRP12MJoZMPglx8m4rrFP8rovnk4vT8Fs+aonZoCwGg10dSsQsfP/E62eZcPTMSMP6686fu9Qlqtw==} + dependencies: + end-of-stream: 1.4.4 + inherits: 2.0.4 + readable-stream: 3.6.2 + stream-shift: 1.0.3 + dev: true + /eastasianwidth@0.2.0: resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} dev: true @@ -3461,6 +3531,12 @@ packages: engines: {node: '>= 0.8'} dev: true + /end-of-stream@1.4.4: + resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} + dependencies: + once: 1.4.0 + dev: true + /engine.io-parser@5.2.2: resolution: {integrity: sha512-RcyUFKA93/CXH20l4SoVvzZfrSDMOTUS3bWVpTt2FuFP+XYrL8i8oonHP7WInRyVHXh0n/ORtoeiE1os+8qkSw==} engines: {node: '>=10.0.0'} @@ -3779,6 +3855,19 @@ packages: postcss-value-parser: 4.2.0 dev: true + /eslint-plugin-ecmascript-compat@3.2.0(eslint@8.56.0): + resolution: {integrity: sha512-9lLIUw5xIDCNNYP6KO31gpAjMWDBFIstZ6vBqk4EH94Z8J2MXmMcdzTgerdMWG5mEyKZ2LvWyyFX9hghS9IuPA==} + engines: {node: ^14.18.0 || >=16.0.0} + peerDependencies: + eslint: '>=8' + dependencies: + '@mdn/browser-compat-data': 5.5.6 + browserslist: 4.22.3 + eslint: 8.56.0 + eslint-plugin-es-x: 7.5.0(eslint@8.56.0) + lodash: 4.17.21 + dev: true + /eslint-plugin-es-x@7.5.0(eslint@8.56.0): resolution: {integrity: sha512-ODswlDSO0HJDzXU0XvgZ3lF3lS3XAZEossh15Q2UHjwrJggWeBoKqqEsLTZLXl+dh5eOAozG0zRcYtuE35oTuQ==} engines: {node: ^14.18.0 || >=16.0.0} @@ -5240,6 +5329,10 @@ packages: is-docker: 2.2.1 dev: true + /isarray@0.0.1: + resolution: {integrity: sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==} + dev: true + /isarray@1.0.0: resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} dev: true @@ -5456,6 +5549,13 @@ packages: shell-quote: 1.8.1 dev: true + /ldjson-stream@1.2.1: + resolution: {integrity: sha512-xw/nNEXafuPSLu8NjjG3+atVVw+8U1APZAQylmwQn19Hgw6rC7QjHvP6MupnHWCrzSm9m0xs5QWkCLuRvBPjgQ==} + dependencies: + split2: 0.2.1 + through2: 0.6.5 + dev: true + /levn@0.4.1: resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} engines: {node: '>= 0.8.0'} @@ -6048,6 +6148,17 @@ packages: thunky: 1.1.0 dev: true + /multimatch@5.0.0: + resolution: {integrity: sha512-ypMKuglUrZUD99Tk2bUQ+xNQj43lPEfAeX2o9cTteAmShXy2VHDJpuwu1o0xqoKCt9jLVAvwyFKdLTPXKAfJyA==} + engines: {node: '>=10'} + dependencies: + '@types/minimatch': 3.0.5 + array-differ: 3.0.0 + array-union: 2.1.0 + arrify: 2.0.1 + minimatch: 3.1.2 + dev: true + /nanoid@3.3.7: resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} @@ -7477,6 +7588,24 @@ packages: type-fest: 0.6.0 dev: true + /readable-stream@1.0.34: + resolution: {integrity: sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg==} + dependencies: + core-util-is: 1.0.3 + inherits: 2.0.4 + isarray: 0.0.1 + string_decoder: 0.10.31 + dev: true + + /readable-stream@1.1.14: + resolution: {integrity: sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ==} + dependencies: + core-util-is: 1.0.3 + inherits: 2.0.4 + isarray: 0.0.1 + string_decoder: 0.10.31 + dev: true + /readable-stream@2.3.8: resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==} dependencies: @@ -8114,6 +8243,12 @@ packages: - supports-color dev: true + /split2@0.2.1: + resolution: {integrity: sha512-D/oTExYAkC9nWleOCTOyNmAuzfAT/6rHGBA9LIK7FVnGo13CSvrKCUzKenwH6U1s2znY9MqH6v0UQTEDa3vJmg==} + dependencies: + through2: 0.6.5 + dev: true + /statuses@1.5.0: resolution: {integrity: sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==} engines: {node: '>= 0.6'} @@ -8124,6 +8259,10 @@ packages: engines: {node: '>= 0.8'} dev: true + /stream-shift@1.0.3: + resolution: {integrity: sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ==} + dev: true + /string-convert@0.2.1: resolution: {integrity: sha512-u/1tdPl4yQnPBjnVrmdLo9gtuLvELKsAoRapekWggdiQNvvvum+jYF329d84NAa660KQw7pB2n36KrIKVoXa3A==} dev: false @@ -8185,6 +8324,10 @@ packages: es-abstract: 1.22.3 dev: true + /string_decoder@0.10.31: + resolution: {integrity: sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==} + dev: true + /string_decoder@1.1.1: resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} dependencies: @@ -8312,6 +8455,17 @@ packages: stylelint: 16.2.1(typescript@5.3.3) dev: true + /stylelint-no-unsupported-browser-features@8.0.1(stylelint@16.2.1): + resolution: {integrity: sha512-tc8Xn5DaqJhxTmbA4H8gZbYdAz027NfuSZv5+cVieQb7BtBrF/1/iKYdpcGwXPl3GtqkQrisiXuGqKkKnzWcLw==} + engines: {node: '>=18.12.0'} + peerDependencies: + stylelint: ^16.0.2 + dependencies: + doiuse: 6.0.2 + postcss: 8.4.34 + stylelint: 16.2.1(typescript@5.3.3) + dev: true + /stylelint-order@6.0.4(stylelint@16.2.1): resolution: {integrity: sha512-0UuKo4+s1hgQ/uAxlYU4h0o0HS4NiQDud0NAUNI0aa8FJdmYHA5ZZTFHiV5FpmE3071e9pZx5j0QpVJW5zOCUA==} peerDependencies: @@ -8526,6 +8680,13 @@ packages: engines: {node: '>=12.22'} dev: false + /through2@0.6.5: + resolution: {integrity: sha512-RkK/CCESdTKQZHdmKICijdKKsCRVHs5KsLZ6pACAmF/1GPUQhonHSXWNERctxEp7RmvjdNbZTL5z9V7nSCXKcg==} + dependencies: + readable-stream: 1.0.34 + xtend: 4.0.2 + dev: true + /thunky@1.1.0: resolution: {integrity: sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==} dev: true @@ -9140,6 +9301,11 @@ packages: optional: true dev: true + /xtend@4.0.2: + resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} + engines: {node: '>=0.4'} + dev: true + /y18n@5.0.8: resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} engines: {node: '>=10'} @@ -9181,6 +9347,19 @@ packages: yargs-parser: 21.1.1 dev: true + /yargs@17.7.2: + resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} + engines: {node: '>=12'} + dependencies: + cliui: 8.0.1 + escalade: 3.1.2 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + string-width: 4.2.3 + y18n: 5.0.8 + yargs-parser: 21.1.1 + dev: true + /yocto-queue@0.1.0: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} diff --git a/scripts/check-css-compat.ts b/scripts/check-css-compat.ts new file mode 100644 index 0000000..907708c --- /dev/null +++ b/scripts/check-css-compat.ts @@ -0,0 +1,25 @@ +import { resolve } from 'node:path'; + +import stylelint from 'stylelint'; + +async function checkCssCompact() { + const result = await stylelint.lint({ + cwd: resolve(import.meta.dirname, '../'), + files: 'dist/**/*.css', + formatter: 'string', + config: { + plugins: ['stylelint-no-unsupported-browser-features'], + rules: { + 'plugin/no-unsupported-browser-features': [true], + }, + }, + }); + + if (result.errored) { + console.log(result.report); + // eslint-disable-next-line unicorn/no-process-exit + process.exit(1); + } +} + +checkCssCompact();