From e5546e21ad4024116ecd638d4d82120170ce6d43 Mon Sep 17 00:00:00 2001 From: Alex <8125011+alex-kinokon@users.noreply.github.com> Date: Fri, 2 Aug 2024 23:04:37 -0400 Subject: [PATCH] Update --- README.md | 2 +- dist/package.json | 9 +++++---- dist/print-config.sh | 2 ++ package.json | 1 + pnpm-lock.yaml | 47 ++++++++++++++++++++++++++++++++++++++++++++ scripts/build.ts | 42 ++++++++++++++++++++++++++++++++------- src/env.ts | 25 +++++++++++++++-------- src/index.ts | 2 +- src/install.ts | 6 +----- 9 files changed, 110 insertions(+), 26 deletions(-) create mode 100644 dist/print-config.sh diff --git a/README.md b/README.md index 7210f52..e235941 100644 --- a/README.md +++ b/README.md @@ -8,4 +8,4 @@ Personal ESLint config. Guaranteed to have no useless polyfills. - ✅ [react](https://github.com/jsx-eslint/eslint-plugin-react/pull/3429) - ✅ [unicorn](https://github.com/sindresorhus/eslint-plugin-unicorn/pull/1886) - ❌ [import](https://github.com/un-ts/eslint-plugin-import-x/issues/29) -- ❌ [jsx-a11y](https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/issues/978) +- ❌ [jsx-a11y](https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/issues/978, supports flat config) diff --git a/dist/package.json b/dist/package.json index 9eded5a..d9458de 100644 --- a/dist/package.json +++ b/dist/package.json @@ -1,9 +1,10 @@ { "name": "@aet/eslint-rules", - "version": "1.0.1-beta.13", + "version": "1.0.1-beta.15", "license": "UNLICENSED", "bin": { - "eslint-install": "./install.js" + "eslint-install": "install.js", + "eslint-print": "print-config.sh" }, "peerDependencies": { "eslint": "^8.57.0", @@ -19,7 +20,7 @@ "@typescript-eslint/parser": "^8.0.0", "@typescript-eslint/type-utils": "^8.0.0", "@typescript-eslint/utils": "^8.0.0", - "@eslint-react/eslint-plugin": "^1.8.0", + "@eslint-react/eslint-plugin": "1.7.1", "aria-query": "^5.3.0", "axe-core": "^4.10.0", "axobject-query": "4.1.0", @@ -63,4 +64,4 @@ "**/is-core-module": "file:./overrides/is-core-module", "**/supports-preserve-symlinks-flag": "file:./overrides/supports-preserve-symlinks-flag" } -} +} \ No newline at end of file diff --git a/dist/print-config.sh b/dist/print-config.sh new file mode 100644 index 0000000..55f6ad4 --- /dev/null +++ b/dist/print-config.sh @@ -0,0 +1,2 @@ +#!/bin/bash +node -e "console.dir(require('./.eslintrc.js'), { depth: null })" diff --git a/package.json b/package.json index ccbd05f..3d17f5f 100644 --- a/package.json +++ b/package.json @@ -45,6 +45,7 @@ "picocolors": "^1.0.1", "prettier": "^3.3.3", "prop-types": "^15.8.1", + "terser": "^5.31.3", "type-fest": "^4.23.0", "typescript": "^5.5.4" }, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b5d8239..b74d910 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -132,6 +132,9 @@ importers: prop-types: specifier: ^15.8.1 version: 15.8.1 + terser: + specifier: ^5.31.3 + version: 5.31.3 type-fest: specifier: ^4.23.0 version: 4.23.0 @@ -923,6 +926,9 @@ packages: resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} engines: {node: '>=6.0.0'} + '@jridgewell/source-map@0.3.6': + resolution: {integrity: sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==} + '@jridgewell/sourcemap-codec@1.5.0': resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} @@ -1158,6 +1164,9 @@ packages: engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true + buffer-from@1.1.2: + resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} + call-me-maybe@1.0.2: resolution: {integrity: sha512-HpX65o1Hnr9HH25ojC1YGs7HCQLq0GCOibSaWER0eNpgJ/Z1MZv2mTc7+xh6WOPxbRVcmgbv4hGU+uSQ/2xFZQ==} @@ -1197,6 +1206,9 @@ packages: color-name@1.1.4: resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + commander@2.20.3: + resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} + common-path-prefix@3.0.0: resolution: {integrity: sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==} @@ -1782,6 +1794,13 @@ packages: resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} engines: {node: '>=8'} + source-map-support@0.5.21: + resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} + + source-map@0.6.1: + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} + engines: {node: '>=0.10.0'} + stable-hash@0.0.4: resolution: {integrity: sha512-LjdcbuBeLcdETCrPn9i8AYAZ1eCtu4ECAWtP7UleOiZ9LzVxRzzUZEoZ8zB24nhkQnDWyET0I+3sWokSDS3E7g==} @@ -1813,6 +1832,11 @@ packages: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} + terser@5.31.3: + resolution: {integrity: sha512-pAfYn3NIZLyZpa83ZKigvj6Rn9c/vd5KfYGX7cN1mnzqgDcxWvrU5ZtAfIKhEXz9nRecw4z3LXkjaq96/qZqAA==} + engines: {node: '>=10'} + hasBin: true + text-table@0.2.0: resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} @@ -2843,6 +2867,11 @@ snapshots: '@jridgewell/set-array@1.2.1': {} + '@jridgewell/source-map@0.3.6': + dependencies: + '@jridgewell/gen-mapping': 0.3.5 + '@jridgewell/trace-mapping': 0.3.25 + '@jridgewell/sourcemap-codec@1.5.0': {} '@jridgewell/trace-mapping@0.3.25': @@ -3131,6 +3160,8 @@ snapshots: node-releases: 2.0.18 update-browserslist-db: 1.1.0(browserslist@4.23.3) + buffer-from@1.1.2: {} + call-me-maybe@1.0.2: {} callsites@3.1.0: {} @@ -3168,6 +3199,8 @@ snapshots: color-name@1.1.4: {} + commander@2.20.3: {} + common-path-prefix@3.0.0: {} concat-map@0.0.1: {} @@ -3768,6 +3801,13 @@ snapshots: slash@3.0.0: {} + source-map-support@0.5.21: + dependencies: + buffer-from: 1.1.2 + source-map: 0.6.1 + + source-map@0.6.1: {} + stable-hash@0.0.4: {} string-argv@0.3.2: {} @@ -3794,6 +3834,13 @@ snapshots: supports-preserve-symlinks-flag@1.0.0: {} + terser@5.31.3: + dependencies: + '@jridgewell/source-map': 0.3.6 + acorn: 8.12.1 + commander: 2.20.3 + source-map-support: 0.5.21 + text-table@0.2.0: {} tmp@0.0.33: diff --git a/scripts/build.ts b/scripts/build.ts index e135d0d..9578f5f 100755 --- a/scripts/build.ts +++ b/scripts/build.ts @@ -6,6 +6,7 @@ import esbuild from 'esbuild'; import type { Plugin } from 'esbuild'; import { memoize } from 'lodash'; import { gray, green } from 'picocolors'; +import { minify_sync } from 'terser'; import { dependencies } from '../dist/package.json'; import { buildLocalRules } from './build-local-rules'; import { dts } from './dts'; @@ -65,15 +66,15 @@ if (process.env.DEBUG) { }); } -function bundle( +async function bundle( entry: string, outfile = entry .replace('./packages/', './dist/') .replace('src/', '') .replace('.ts', '.js'), - options?: esbuild.BuildOptions, + options?: esbuild.BuildOptions & { treeShaking?: boolean }, ) { - return esbuild.build({ + const output = await esbuild.build({ entryPoints: [entry], outfile, bundle: true, @@ -90,6 +91,30 @@ function bundle( }, ...options, }); + + if (options?.treeShaking) { + const [text, setText] = await useText(outfile); + const minified = minify_sync(text, { + module: true, + compress: { + conditionals: true, + dead_code: true, + defaults: false, + evaluate: true, + passes: 3, + pure_new: true, + side_effects: true, + unused: true, + }, + mangle: false, + format: { + comments: true, + }, + }); + setText(minified.code!); + } + + return output; } async function editPackageJson() { @@ -134,6 +159,9 @@ async function main() { bundleType('./src/prettier.ts', './dist/prettier.d.ts'); bundleType('./src/types.ts', './dist/types.d.ts'); + const unminify = { minify: false }; + const treeShake = { treeShaking: true, minify: false }; + console.log('Building packages...'); await Promise.all([ bundle('./packages/eslint-plugin-jsx-a11y/src/index.js'), @@ -142,10 +170,10 @@ async function main() { bundle('./packages/eslint-import-resolver-typescript/src/index.ts'), bundle('./src/rules/index.ts', './dist/eslint-plugin-rules/index.js'), bundle('./src/local/index.ts', './dist/eslint-plugin-local/index.js'), - bundle('./src/index.ts', './dist/index.js'), - bundle('./src/types.ts', './dist/types.js'), - bundle('./src/prettier.ts', './dist/prettier.js'), - bundle('./src/install.ts', './dist/install.js', { minify: false }), + bundle('./src/index.ts', './dist/index.js', unminify), + bundle('./src/types.ts', './dist/types.js', unminify), + bundle('./src/prettier.ts', './dist/prettier.js', unminify), + bundle('./src/install.ts', './dist/install.js', treeShake), editPackageJson(), ]); diff --git a/src/env.ts b/src/env.ts index f4c0e7b..3c39b16 100644 --- a/src/env.ts +++ b/src/env.ts @@ -6,39 +6,48 @@ import { tailwind } from './presets/tailwind'; import { reactQuery } from './presets/misc'; import { testingLibrary } from './presets/testing-library'; +const middlewares = { + react, + reactRefresh, + tailwind, + storybook, + reactQuery, + testingLibrary, +}; + export const envs: { dependency: string; eslintPlugin?: string; - middleware: Middleware; + middleware: keyof typeof middlewares; }[] = [ { dependency: 'react', - middleware: react, + middleware: 'react', }, { dependency: '@vitejs/plugin-react', eslintPlugin: 'eslint-plugin-react-refresh', - middleware: reactRefresh, + middleware: 'reactRefresh', }, { dependency: 'tailwindcss', eslintPlugin: 'eslint-plugin-tailwindcss', - middleware: tailwind, + middleware: 'tailwind', }, { dependency: 'storybook', eslintPlugin: 'eslint-plugin-storybook', - middleware: storybook, + middleware: 'storybook', }, { dependency: '@tanstack/react-query', eslintPlugin: '@tanstack/eslint-plugin-query', - middleware: reactQuery, + middleware: 'reactQuery', }, { dependency: '@testing-library/react', eslintPlugin: 'eslint-plugin-testing-library', - middleware: testingLibrary, + middleware: 'testingLibrary', }, ]; @@ -64,7 +73,7 @@ export function* checkEnv(): Generator { for (const { dependency, eslintPlugin, middleware } of envs) { if (deps.has(dependency) && (!eslintPlugin || deps.has(eslintPlugin))) { - yield middleware; + yield middlewares[middleware]; } } } diff --git a/src/index.ts b/src/index.ts index e1786a9..7b109bb 100644 --- a/src/index.ts +++ b/src/index.ts @@ -135,7 +135,7 @@ interface MiddlewareFunctions { */ export function extendConfig( of: InputConfig & { - middlewares: Middleware[]; + middlewares?: Middleware[]; } = { middlewares: [], }, diff --git a/src/install.ts b/src/install.ts index a4882db..cd7470e 100644 --- a/src/install.ts +++ b/src/install.ts @@ -9,11 +9,7 @@ const packages = uniq( .map(_ => _.eslintPlugin!), ); -console.log('Installing missing ESLint plugins:'); -for (const pkg of packages) { - console.log(`- ${pkg}`); -} -console.log(); +console.log('Installing missing ESLint plugins.\n'); void installPackage(packages, { silent: false,