From f626b54f3dc756c63735f384aff6e6fb8b77caa5 Mon Sep 17 00:00:00 2001 From: JounQin Date: Fri, 8 Dec 2023 23:48:30 +0800 Subject: [PATCH 1/8] feat: use eslint-plugin-mdx for md/mdx files --- README.md | 16 +- package.json | 2 +- pnpm-lock.yaml | 1045 +++++++++++++++++++++++++++++++++++-- src/configs/formatters.ts | 82 +-- src/configs/markdown.ts | 60 +-- src/globs.ts | 8 +- 6 files changed, 1077 insertions(+), 136 deletions(-) diff --git a/README.md b/README.md index 717ebef4dd..453795fd35 100644 --- a/README.md +++ b/README.md @@ -66,7 +66,7 @@ module.exports = antfu( 'eslint:recommended', // Other extends... ], - }) + }), // Other flat configs... ) @@ -189,7 +189,7 @@ export default antfu({ ignores: [ './fixtures', // ...globs - ] + ], }) ``` @@ -235,8 +235,6 @@ import { jsonc, markdown, node, - sortPackageJson, - sortTsconfig, stylistic, typescript, unicorn, @@ -311,7 +309,7 @@ export default antfu( rules: { 'style/semi': ['error', 'never'], }, - } + }, ) ``` @@ -331,7 +329,7 @@ export default antfu({ }, yaml: {}, // ... - } + }, }) ``` @@ -372,8 +370,8 @@ export default antfu({ * Supports Prettier and dprint * By default uses Prettier */ - markdown: 'prettier' - } + markdown: 'prettier', + }, }) ``` @@ -435,7 +433,7 @@ It's recommended to opt-in on each file individually using [configuration commen ```js /* eslint perfectionist/sort-objects: "error" */ -const objectWantedToSort = { +export const objectWantedToSort = { a: 2, b: 1, c: 3, diff --git a/package.json b/package.json index f78914e0d8..2f71ee4475 100644 --- a/package.json +++ b/package.json @@ -78,7 +78,7 @@ "eslint-plugin-i": "^2.29.0", "eslint-plugin-jsdoc": "^46.9.0", "eslint-plugin-jsonc": "^2.10.0", - "eslint-plugin-markdown": "^3.0.1", + "eslint-plugin-mdx": "^2.2.0", "eslint-plugin-n": "^16.3.1", "eslint-plugin-no-only-tests": "^3.1.0", "eslint-plugin-perfectionist": "^2.5.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 03f8fd370c..b55cc957a8 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -56,9 +56,9 @@ importers: eslint-plugin-jsonc: specifier: ^2.10.0 version: 2.10.0(eslint-ts-patch@8.55.0-1) - eslint-plugin-markdown: - specifier: ^3.0.1 - version: 3.0.1(eslint-ts-patch@8.55.0-1) + eslint-plugin-mdx: + specifier: ^2.2.0 + version: 2.2.0(eslint-ts-patch@8.55.0-1) eslint-plugin-n: specifier: ^16.3.1 version: 16.3.1(eslint-ts-patch@8.55.0-1) @@ -85,7 +85,7 @@ importers: version: 1.10.0(eslint-ts-patch@8.55.0-1) eslint-processor-vue-blocks: specifier: ^0.1.1 - version: 0.1.1(@vue/compiler-sfc@3.3.11)(eslint-ts-patch@8.55.0-1) + version: 0.1.1(@vue/compiler-sfc@3.3.10)(eslint-ts-patch@8.55.0-1) globals: specifier: ^13.23.0 version: 13.23.0 @@ -770,7 +770,6 @@ packages: strip-ansi-cjs: /strip-ansi@6.0.1 wrap-ansi: 8.1.0 wrap-ansi-cjs: /wrap-ansi@7.0.0 - dev: true /@jest/schemas@29.6.3: resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==} @@ -835,11 +834,39 @@ packages: '@nodelib/fs.scandir': 2.1.5 fastq: 1.15.0 + /@npmcli/config@6.4.0: + resolution: {integrity: sha512-/fQjIbuNVIT/PbXvw178Tm97bxV0E0nVUFKHivMKtSI2pcs8xKdaWkHJxf9dTI0G/y5hp/KuCvgcUu5HwAtI1w==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + dependencies: + '@npmcli/map-workspaces': 3.0.4 + ci-info: 3.9.0 + ini: 4.1.1 + nopt: 7.2.0 + proc-log: 3.0.0 + read-package-json-fast: 3.0.2 + semver: 7.5.4 + walk-up-path: 3.0.1 + dev: false + + /@npmcli/map-workspaces@3.0.4: + resolution: {integrity: sha512-Z0TbvXkRbacjFFLpVpV0e2mheCh+WzQpcqL+4xp49uNJOxOnIAPZyXtUxZ5Qn3QBTGKA11Exjd9a5411rBrhDg==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + dependencies: + '@npmcli/name-from-folder': 2.0.0 + glob: 10.3.10 + minimatch: 9.0.3 + read-package-json-fast: 3.0.2 + dev: false + + /@npmcli/name-from-folder@2.0.0: + resolution: {integrity: sha512-pwK+BfEBZJbKdNYpHHRTNBwBoqrN/iIMO0AiGvYsp3Hoaq0WbgGSWQR6SCldZovoDpY3yje5lkFUe6gsDgJ2vg==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + dev: false + /@pkgjs/parseargs@0.11.0: resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} engines: {node: '>=14'} requiresBuild: true - dev: true optional: true /@pkgr/utils@2.4.2: @@ -852,7 +879,6 @@ packages: open: 9.1.0 picocolors: 1.0.0 tslib: 2.6.2 - dev: true /@rollup/rollup-android-arm-eabi@4.4.1: resolution: {integrity: sha512-Ss4suS/sd+6xLRu+MLCkED2mUrAyqHmmvZB+zpzZ9Znn9S8wCkTQCJaQ8P8aHofnvG5L16u9MVnJjCqioPErwQ==} @@ -1021,6 +1047,24 @@ packages: - typescript dev: false + /@types/acorn@4.0.6: + resolution: {integrity: sha512-veQTnWP+1D/xbxVrPC3zHnCZRjSrKfhbMUlEA43iMZLu7EsnTtkJklIuwrCPbOi8YkvDQAiW05VQQFvvz9oieQ==} + dependencies: + '@types/estree': 1.0.3 + dev: false + + /@types/concat-stream@2.0.3: + resolution: {integrity: sha512-3qe4oQAPNwVNwK4C9c8u+VJqv9kez+2MR4qJpoPFfXtgxxif1QbFusvXzK0/Wra2VX07smostI2VMmJNSpZjuQ==} + dependencies: + '@types/node': 20.10.4 + dev: false + + /@types/debug@4.1.12: + resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==} + dependencies: + '@types/ms': 0.7.34 + dev: false + /@types/eslint@8.44.8: resolution: {integrity: sha512-4K8GavROwhrYl2QXDXm0Rv9epkA8GBFu0EI+XrrnnuCl7u8CWBRusX7fXJfanhZTDWSAL24gDI/UqXyUM0Injw==} dependencies: @@ -1028,9 +1072,14 @@ packages: '@types/json-schema': 7.0.14 dev: true + /@types/estree-jsx@1.0.3: + resolution: {integrity: sha512-pvQ+TKeRHeiUGRhvYwRrQ/ISnohKkSJR14fT2yqyZ4e9K5vqc7hrtY2Y1Dw0ZwAzQ6DQsxsaCUuSIIi8v0Cq6w==} + dependencies: + '@types/estree': 1.0.3 + dev: false + /@types/estree@1.0.3: resolution: {integrity: sha512-CS2rOaoQ/eAgAfcTfq6amKG7bsN+EMcgGY4FAFQdvSj2y1ixvOZTUA9mOtCai7E1SYu283XNw7urKK30nP3wkQ==} - dev: true /@types/fs-extra@11.0.4: resolution: {integrity: sha512-yTbItCNreRooED33qjunPthRcSjERP1r4MqCZc7wv0u2sUkzTFp45tgUfS5+r7FrZPdmCCNflLhVSP/o+SemsQ==} @@ -1039,6 +1088,16 @@ packages: '@types/node': 20.10.4 dev: true + /@types/hast@2.3.8: + resolution: {integrity: sha512-aMIqAlFd2wTIDZuvLbhUT+TGvMxrNC8ECUIVtH6xxy0sQLs3iu6NO8Kp/VT5je7i5ufnebXzdV1dNDMnvaH6IQ==} + dependencies: + '@types/unist': 2.0.9 + dev: false + + /@types/is-empty@1.2.3: + resolution: {integrity: sha512-4J1l5d79hoIvsrKh5VUKVRA1aIdsOb10Hu5j3J2VfP/msDnfTdGPmNp2E1Wg+vs97Bktzo+MZePFFXSGoykYJw==} + dev: false + /@types/json-schema@7.0.14: resolution: {integrity: sha512-U3PUjAudAdJBeC2pgN8uTIKgxrb4nlDF3SF0++EldXQvQBGkpFZMSnwQiIoDU77tv45VgNkl/L4ouD+rEomujw==} @@ -1054,6 +1113,16 @@ packages: '@types/unist': 2.0.9 dev: false + /@types/ms@0.7.34: + resolution: {integrity: sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==} + dev: false + + /@types/node@18.19.3: + resolution: {integrity: sha512-k5fggr14DwAytoA/t8rPrIz++lXK7/DqckthCmoZOKNsEbJkId4Z//BqgApXBUGrGddrigYa1oqheo/7YmW4rg==} + dependencies: + undici-types: 5.26.5 + dev: false + /@types/node@20.10.4: resolution: {integrity: sha512-D08YG6rr8X90YB56tSIuBaddy/UXAA9RKJoFvrsnogAum/0pmjkgi4+2nx96A330FmioegBWmEYQ+syqCFaveg==} dependencies: @@ -1073,6 +1142,10 @@ packages: /@types/semver@7.5.4: resolution: {integrity: sha512-MMzuxN3GdFwskAnb6fz0orFvhfqi752yjaXylr0Rp4oDg5H0Zn1IuyRhDVvYOwAXoJirx2xuS16I3WjxnAIHiQ==} + /@types/supports-color@8.1.3: + resolution: {integrity: sha512-Hy6UMpxhE3j1tLpl27exp1XqHD7n8chAiNPzWfz16LPZoMMoSc4dzLl6w9qijkEb/r5O1ozdu1CWGA2L83ZeZg==} + dev: false + /@types/unist@2.0.9: resolution: {integrity: sha512-zC0iXxAv1C1ERURduJueYzkzZ2zaGyc+P2c95hgkikHPr3z8EdUZOlgEQ5X0DRmwDZn+hekycQnoeiiRVrmilQ==} dev: false @@ -1332,6 +1405,15 @@ packages: loupe: 2.3.7 pretty-format: 29.7.0 + /@vue/compiler-core@3.3.10: + resolution: {integrity: sha512-doe0hODR1+i1menPkRzJ5MNR6G+9uiZHIknK3Zn5OcIztu6GGw7u0XUzf3AgB8h/dfsZC9eouzoLo3c3+N/cVA==} + dependencies: + '@babel/parser': 7.23.5 + '@vue/shared': 3.3.10 + estree-walker: 2.0.2 + source-map-js: 1.0.2 + dev: false + /@vue/compiler-core@3.3.11: resolution: {integrity: sha512-h97/TGWBilnLuRaj58sxNrsUU66fwdRKLOLQ9N/5iNDfp+DZhYH9Obhe0bXxhedl8fjAgpRANpiZfbgWyruQ0w==} dependencies: @@ -1339,12 +1421,36 @@ packages: '@vue/shared': 3.3.11 estree-walker: 2.0.2 source-map-js: 1.0.2 + dev: true + + /@vue/compiler-dom@3.3.10: + resolution: {integrity: sha512-NCrqF5fm10GXZIK0GrEAauBqdy+F2LZRt3yNHzrYjpYBuRssQbuPLtSnSNjyR9luHKkWSH8we5LMB3g+4z2HvA==} + dependencies: + '@vue/compiler-core': 3.3.10 + '@vue/shared': 3.3.10 + dev: false /@vue/compiler-dom@3.3.11: resolution: {integrity: sha512-zoAiUIqSKqAJ81WhfPXYmFGwDRuO+loqLxvXmfUdR5fOitPoUiIeFI9cTTyv9MU5O1+ZZglJVTusWzy+wfk5hw==} dependencies: '@vue/compiler-core': 3.3.11 '@vue/shared': 3.3.11 + dev: true + + /@vue/compiler-sfc@3.3.10: + resolution: {integrity: sha512-xpcTe7Rw7QefOTRFFTlcfzozccvjM40dT45JtrE3onGm/jBLZ0JhpKu3jkV7rbDFLeeagR/5RlJ2Y9SvyS0lAg==} + dependencies: + '@babel/parser': 7.23.5 + '@vue/compiler-core': 3.3.10 + '@vue/compiler-dom': 3.3.10 + '@vue/compiler-ssr': 3.3.10 + '@vue/reactivity-transform': 3.3.10 + '@vue/shared': 3.3.10 + estree-walker: 2.0.2 + magic-string: 0.30.5 + postcss: 8.4.32 + source-map-js: 1.0.2 + dev: false /@vue/compiler-sfc@3.3.11: resolution: {integrity: sha512-U4iqPlHO0KQeK1mrsxCN0vZzw43/lL8POxgpzcJweopmqtoYy9nljJzWDIQS3EfjiYhfdtdk9Gtgz7MRXnz3GA==} @@ -1359,12 +1465,31 @@ packages: magic-string: 0.30.5 postcss: 8.4.32 source-map-js: 1.0.2 + dev: true + + /@vue/compiler-ssr@3.3.10: + resolution: {integrity: sha512-12iM4jA4GEbskwXMmPcskK5wImc2ohKm408+o9iox3tfN9qua8xL0THIZtoe9OJHnXP4eOWZpgCAAThEveNlqQ==} + dependencies: + '@vue/compiler-dom': 3.3.10 + '@vue/shared': 3.3.10 + dev: false /@vue/compiler-ssr@3.3.11: resolution: {integrity: sha512-Zd66ZwMvndxRTgVPdo+muV4Rv9n9DwQ4SSgWWKWkPFebHQfVYRrVjeygmmDmPewsHyznCNvJ2P2d6iOOhdv8Qg==} dependencies: '@vue/compiler-dom': 3.3.11 '@vue/shared': 3.3.11 + dev: true + + /@vue/reactivity-transform@3.3.10: + resolution: {integrity: sha512-0xBdk+CKHWT+Gev8oZ63Tc0qFfj935YZx+UAynlutnrDZ4diFCVFMWixn65HzjE3S1iJppWOo6Tt1OzASH7VEg==} + dependencies: + '@babel/parser': 7.23.5 + '@vue/compiler-core': 3.3.10 + '@vue/shared': 3.3.10 + estree-walker: 2.0.2 + magic-string: 0.30.5 + dev: false /@vue/reactivity-transform@3.3.11: resolution: {integrity: sha512-fPGjH0wqJo68A0wQ1k158utDq/cRyZNlFoxGwNScE28aUFOKFEnCBsvyD8jHn+0kd0UKVpuGuaZEQ6r9FJRqCg==} @@ -1374,6 +1499,7 @@ packages: '@vue/shared': 3.3.11 estree-walker: 2.0.2 magic-string: 0.30.5 + dev: true /@vue/reactivity@3.3.11: resolution: {integrity: sha512-D5tcw091f0nuu+hXq5XANofD0OXnBmaRqMYl5B3fCR+mX+cXJIGNw/VNawBqkjLNWETrFW0i+xH9NvDbTPVh7g==} @@ -1406,8 +1532,18 @@ packages: vue: 3.3.11(typescript@5.3.3) dev: true + /@vue/shared@3.3.10: + resolution: {integrity: sha512-2y3Y2J1a3RhFa0WisHvACJR2ncvWiVHcP8t0Inxo+NKz+8RKO4ZV8eZgCxRgQoA6ITfV12L4E6POOL9HOU5nqw==} + dev: false + /@vue/shared@3.3.11: resolution: {integrity: sha512-u2G8ZQ9IhMWTMXaWqZycnK4UthG1fA238CD+DP4Dm4WJi5hdUKKLg0RMRaRpDPNMdkTwIDkp7WtD0Rd9BH9fLw==} + dev: true + + /abbrev@2.0.0: + resolution: {integrity: sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + dev: false /acorn-jsx@5.3.2(acorn@8.11.2): resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} @@ -1456,7 +1592,6 @@ packages: /ansi-regex@6.0.1: resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==} engines: {node: '>=12'} - dev: true /ansi-styles@3.2.1: resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} @@ -1479,7 +1614,6 @@ packages: /ansi-styles@6.2.1: resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} engines: {node: '>=12'} - dev: true /any-promise@1.3.0: resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} @@ -1580,13 +1714,16 @@ packages: engines: {node: '>= 0.4'} dev: true + /bail@2.0.2: + resolution: {integrity: sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==} + dev: false + /balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} /big-integer@1.6.51: resolution: {integrity: sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==} engines: {node: '>=0.6'} - dev: true /binary-extensions@2.2.0: resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} @@ -1602,7 +1739,6 @@ packages: engines: {node: '>= 5.10.0'} dependencies: big-integer: 1.6.51 - dev: true /brace-expansion@1.1.11: resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} @@ -1623,7 +1759,6 @@ packages: /buffer-from@1.1.2: resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} - dev: true /builtin-modules@3.3.0: resolution: {integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==} @@ -1656,7 +1791,6 @@ packages: engines: {node: '>=12'} dependencies: run-applescript: 5.0.0 - dev: true /bundle-require@4.0.2(esbuild@0.19.5): resolution: {integrity: sha512-jwzPOChofl67PSTW2SGubV9HBQAhhR2i6nskiOThauo9dzwDUgOWQScFVaJkjEfYX+UXiD+LEx8EblQMc2wIag==} @@ -1706,6 +1840,10 @@ packages: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} engines: {node: '>=6'} + /ccount@2.0.1: + resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} + dev: false + /chai@4.3.10: resolution: {integrity: sha512-0UXG04VuVbruMUYbJ6JctvH0YnC/4q3/AkT18q4NaITo91CUm0liMS9VqzT9vZhVQ/1eqPanMWjBM+Juhfb/9g==} engines: {node: '>=4'} @@ -1740,18 +1878,34 @@ packages: engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} dev: true + /character-entities-html4@2.1.0: + resolution: {integrity: sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==} + dev: false + /character-entities-legacy@1.1.4: resolution: {integrity: sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==} dev: false + /character-entities-legacy@3.0.0: + resolution: {integrity: sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==} + dev: false + /character-entities@1.2.4: resolution: {integrity: sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==} dev: false + /character-entities@2.0.2: + resolution: {integrity: sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==} + dev: false + /character-reference-invalid@1.1.4: resolution: {integrity: sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==} dev: false + /character-reference-invalid@2.0.1: + resolution: {integrity: sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==} + dev: false + /check-error@1.0.3: resolution: {integrity: sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==} dependencies: @@ -1856,6 +2010,16 @@ packages: /concat-map@0.0.1: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + /concat-stream@2.0.0: + resolution: {integrity: sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==} + engines: {'0': node >= 6.0} + dependencies: + buffer-from: 1.1.2 + inherits: 2.0.4 + readable-stream: 3.6.2 + typedarray: 0.0.6 + dev: false + /consola@3.2.3: resolution: {integrity: sha512-I5qxpzLv+sJhTVEoLYNcTW+bThDCPsit0vLNKShZx6rLtpilNpmmeTPaeqJb9ZE9dV3DGaeby6Vuhrw38WjeyQ==} engines: {node: ^14.18.0 || >=16.10.0} @@ -1901,6 +2065,12 @@ packages: dependencies: ms: 2.1.2 + /decode-named-character-reference@1.0.2: + resolution: {integrity: sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==} + dependencies: + character-entities: 2.0.2 + dev: false + /deep-eql@4.1.3: resolution: {integrity: sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==} engines: {node: '>=6'} @@ -1916,7 +2086,6 @@ packages: dependencies: bplist-parser: 0.2.0 untildify: 4.0.0 - dev: true /default-browser@4.0.0: resolution: {integrity: sha512-wX5pXO1+BrhMkSbROFsyxUm0i/cJEScyNhA4PPxc41ICuv05ZZB/MX28s8aZx6xjmatvebIapF6hLEKEcpneUA==} @@ -1926,7 +2095,6 @@ packages: default-browser-id: 3.0.0 execa: 7.2.0 titleize: 3.0.0 - dev: true /define-data-property@1.1.1: resolution: {integrity: sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==} @@ -1940,7 +2108,6 @@ packages: /define-lazy-prop@3.0.0: resolution: {integrity: sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==} engines: {node: '>=12'} - dev: true /define-properties@1.2.1: resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} @@ -1955,6 +2122,11 @@ packages: resolution: {integrity: sha512-+uO4+qr7msjNNWKYPHqN/3+Dx3NFkmIzayk2L1MyZQlvgZb/J1A0fo410dpKrN2SnqFjt8n4JL8fDJE0wIgjFQ==} dev: true + /dequal@2.0.3: + resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} + engines: {node: '>=6'} + dev: false + /destr@2.0.1: resolution: {integrity: sha512-M1Ob1zPSIvlARiJUkKqvAZ3VAqQY6Jcuth/pBKQ2b1dX/Qx0OnJ8Vux6J2H5PTMQeRzWrrbTu70VxBfv/OPDJA==} dev: true @@ -1963,6 +2135,11 @@ packages: resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + /diff@5.1.0: + resolution: {integrity: sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw==} + engines: {node: '>=0.3.1'} + dev: false + /dir-glob@3.0.1: resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} engines: {node: '>=8'} @@ -1988,7 +2165,6 @@ packages: /eastasianwidth@0.2.0: resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} - dev: true /emoji-regex@10.3.0: resolution: {integrity: sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw==} @@ -1999,7 +2175,6 @@ packages: /emoji-regex@9.2.2: resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} - dev: true /error-ex@1.3.2: resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} @@ -2219,6 +2394,31 @@ packages: - supports-color dev: false + /eslint-mdx@2.2.0(eslint-ts-patch@8.55.0-1): + resolution: {integrity: sha512-AriN6lCW6KhWQ9GEiXapR1DokKHefOUqKvCmHxnE9puCWYhWiycU2SNKH8jmrasDBreZ+RtJDLi+RcUNLJatjg==} + engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} + peerDependencies: + eslint: '>=8.0.0' + dependencies: + acorn: 8.11.2 + acorn-jsx: 5.3.2(acorn@8.11.2) + eslint: /eslint-ts-patch@8.55.0-1 + espree: 9.6.1 + estree-util-visit: 1.2.1 + remark-mdx: 2.3.0 + remark-parse: 10.0.2 + remark-stringify: 10.0.3 + synckit: 0.8.6 + tslib: 2.6.2 + unified: 10.1.2 + unified-engine: 10.1.0 + unist-util-visit: 4.1.2 + uvu: 0.5.6 + vfile: 5.3.7 + transitivePeerDependencies: + - supports-color + dev: false + /eslint-merge-processors@0.1.0(eslint-ts-patch@8.55.0-1): resolution: {integrity: sha512-IvRXXtEajLeyssvW4wJcZ2etxkR9mUf4zpNwgI+m/Uac9RfXHskuJefkHUcawVzePnd6xp24enp5jfgdHzjRdQ==} peerDependencies: @@ -2372,6 +2572,25 @@ packages: - supports-color dev: false + /eslint-plugin-mdx@2.2.0(eslint-ts-patch@8.55.0-1): + resolution: {integrity: sha512-OseoMXUIr8iy3E0me+wJLVAxuB0kxHP1plxuYAJDynzorzOj2OKv8Fhr+rIOJ32zfl3bnEWsqFnUiCnyznr1JQ==} + engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} + peerDependencies: + eslint: '>=8.0.0' + dependencies: + eslint: /eslint-ts-patch@8.55.0-1 + eslint-mdx: 2.2.0(eslint-ts-patch@8.55.0-1) + eslint-plugin-markdown: 3.0.1(eslint-ts-patch@8.55.0-1) + remark-mdx: 2.3.0 + remark-parse: 10.0.2 + remark-stringify: 10.0.3 + tslib: 2.6.2 + unified: 10.1.2 + vfile: 5.3.7 + transitivePeerDependencies: + - supports-color + dev: false + /eslint-plugin-n@16.3.1(eslint-ts-patch@8.55.0-1): resolution: {integrity: sha512-w46eDIkxQ2FaTHcey7G40eD+FhTXOdKudDXPUO2n9WNcslze/i/HT2qJ3GXjHngYSGDISIgPNhwGtgoix4zeOw==} engines: {node: '>=16.0.0'} @@ -2560,13 +2779,13 @@ packages: - supports-color dev: false - /eslint-processor-vue-blocks@0.1.1(@vue/compiler-sfc@3.3.11)(eslint-ts-patch@8.55.0-1): + /eslint-processor-vue-blocks@0.1.1(@vue/compiler-sfc@3.3.10)(eslint-ts-patch@8.55.0-1): resolution: {integrity: sha512-9+dU5lU881log570oBwpelaJmOfOzSniben7IWEDRYQPPWwlvaV7NhOtsTuUWDqpYT+dtKKWPsgz4OkOi+aZnA==} peerDependencies: '@vue/compiler-sfc': ^3.3.0 eslint: ^8.50.0 dependencies: - '@vue/compiler-sfc': 3.3.11 + '@vue/compiler-sfc': 3.3.10 eslint: /eslint-ts-patch@8.55.0-1 dev: false @@ -2673,6 +2892,17 @@ packages: resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} engines: {node: '>=4.0'} + /estree-util-is-identifier-name@2.1.0: + resolution: {integrity: sha512-bEN9VHRyXAUOjkKVQVvArFym08BTWB0aJPppZZr0UNyAqWsLaVfAqP7hbaTJjzHifmB5ebnR8Wm7r7yGN/HonQ==} + dev: false + + /estree-util-visit@1.2.1: + resolution: {integrity: sha512-xbgqcrkIVbIG+lI/gzbvd9SGTJL4zqJKBFttUl5pP27KhAjtMKbX/mQXJ7qgyXpMgVy/zvpm0xoQQaGL8OloOw==} + dependencies: + '@types/estree-jsx': 1.0.3 + '@types/unist': 2.0.9 + dev: false + /estree-walker@2.0.2: resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} @@ -2697,7 +2927,6 @@ packages: onetime: 5.1.2 signal-exit: 3.0.7 strip-final-newline: 2.0.0 - dev: true /execa@7.2.0: resolution: {integrity: sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA==} @@ -2712,7 +2941,6 @@ packages: onetime: 6.0.0 signal-exit: 3.0.7 strip-final-newline: 3.0.0 - dev: true /execa@8.0.1: resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==} @@ -2728,6 +2956,10 @@ packages: signal-exit: 4.1.0 strip-final-newline: 3.0.0 + /extend@3.0.2: + resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} + dev: false + /fast-deep-equal@3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} @@ -2756,6 +2988,12 @@ packages: dependencies: reusify: 1.0.4 + /fault@2.0.1: + resolution: {integrity: sha512-WtySTkS4OKev5JtpHXnib4Gxiurzh5NCGvWrFaZ34m6JehfTUhKZvn9njTfw48t6JumVQOmrKqpmGcdwxnhqBQ==} + dependencies: + format: 0.2.2 + dev: false + /file-entry-cache@6.0.1: resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} engines: {node: ^10.12.0 || >=12.0.0} @@ -2811,7 +3049,11 @@ packages: dependencies: cross-spawn: 7.0.3 signal-exit: 4.1.0 - dev: true + + /format@0.2.2: + resolution: {integrity: sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww==} + engines: {node: '>=0.4.x'} + dev: false /fs-extra@11.2.0: resolution: {integrity: sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==} @@ -2885,7 +3127,6 @@ packages: /get-stream@6.0.1: resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} engines: {node: '>=10'} - dev: true /get-stream@8.0.1: resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==} @@ -2941,7 +3182,6 @@ packages: minimatch: 9.0.3 minipass: 7.0.4 path-scurry: 1.10.1 - dev: true /glob@7.1.6: resolution: {integrity: sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==} @@ -2964,6 +3204,17 @@ packages: once: 1.4.0 path-is-absolute: 1.0.1 + /glob@8.1.0: + resolution: {integrity: sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==} + engines: {node: '>=12'} + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 5.1.6 + once: 1.4.0 + dev: false + /globals@13.23.0: resolution: {integrity: sha512-XAmF0RjlrjY23MA51q3HltdlGxUpXPvg0GioKiD9X6HD28iMjo2dKC8Vqwm7lne4GNr78+RHTfliktR6ZH09wA==} engines: {node: '>=8'} @@ -3061,12 +3312,10 @@ packages: /human-signals@2.1.0: resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} engines: {node: '>=10.17.0'} - dev: true /human-signals@4.3.1: resolution: {integrity: sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==} engines: {node: '>=14.18.0'} - dev: true /human-signals@5.0.0: resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==} @@ -3083,6 +3332,10 @@ packages: parent-module: 1.0.1 resolve-from: 4.0.0 + /import-meta-resolve@2.2.2: + resolution: {integrity: sha512-f8KcQ1D80V7RnqVm+/lirO9zkOxjGxhaTC1IPrBGd3MEfNgmNG67tSUO9gTi2F3Blr2Az6g1vocaxzkVnWl9MA==} + dev: false + /imurmurhash@0.1.4: resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} engines: {node: '>=0.8.19'} @@ -3101,6 +3354,11 @@ packages: /inherits@2.0.4: resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + /ini@4.1.1: + resolution: {integrity: sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + dev: false + /internal-slot@1.0.6: resolution: {integrity: sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg==} engines: {node: '>= 0.4'} @@ -3114,6 +3372,10 @@ packages: resolution: {integrity: sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==} dev: false + /is-alphabetical@2.0.1: + resolution: {integrity: sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==} + dev: false + /is-alphanumerical@1.0.4: resolution: {integrity: sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==} dependencies: @@ -3121,6 +3383,13 @@ packages: is-decimal: 1.0.4 dev: false + /is-alphanumerical@2.0.1: + resolution: {integrity: sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==} + dependencies: + is-alphabetical: 2.0.1 + is-decimal: 2.0.1 + dev: false + /is-array-buffer@3.0.2: resolution: {integrity: sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==} dependencies: @@ -3161,6 +3430,11 @@ packages: has-tostringtag: 1.0.0 dev: true + /is-buffer@2.0.5: + resolution: {integrity: sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==} + engines: {node: '>=4'} + dev: false + /is-builtin-module@3.2.1: resolution: {integrity: sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==} engines: {node: '>=6'} @@ -3189,17 +3463,23 @@ packages: resolution: {integrity: sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==} dev: false + /is-decimal@2.0.1: + resolution: {integrity: sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==} + dev: false + /is-docker@2.2.1: resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} engines: {node: '>=8'} hasBin: true - dev: true /is-docker@3.0.0: resolution: {integrity: sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} hasBin: true - dev: true + + /is-empty@1.2.0: + resolution: {integrity: sha512-F2FnH/otLNJv0J6wc73A5Xo7oHLNnqplYqZhUu01tD54DIPvxIRSTSLkrUB/M0nHO4vo1O9PDfN4KoTxCzLh/w==} + dev: false /is-extglob@2.1.1: resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} @@ -3244,13 +3524,16 @@ packages: resolution: {integrity: sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==} dev: false + /is-hexadecimal@2.0.1: + resolution: {integrity: sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==} + dev: false + /is-inside-container@1.0.0: resolution: {integrity: sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==} engines: {node: '>=14.16'} hasBin: true dependencies: is-docker: 3.0.0 - dev: true /is-map@2.0.2: resolution: {integrity: sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==} @@ -3276,6 +3559,11 @@ packages: resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} engines: {node: '>=8'} + /is-plain-obj@4.1.0: + resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} + engines: {node: '>=12'} + dev: false + /is-regex@1.1.4: resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} engines: {node: '>= 0.4'} @@ -3297,7 +3585,6 @@ packages: /is-stream@2.0.1: resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} engines: {node: '>=8'} - dev: true /is-stream@3.0.0: resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} @@ -3346,7 +3633,6 @@ packages: engines: {node: '>=8'} dependencies: is-docker: 2.2.1 - dev: true /isarray@2.0.5: resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} @@ -3372,7 +3658,6 @@ packages: '@isaacs/cliui': 8.0.2 optionalDependencies: '@pkgjs/parseargs': 0.11.0 - dev: true /jiti@1.21.0: resolution: {integrity: sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==} @@ -3416,6 +3701,11 @@ packages: resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} dev: false + /json-parse-even-better-errors@3.0.1: + resolution: {integrity: sha512-aatBvbL26wVUCLmbWdCpeu9iF5wOyWpagiKkInA+kfws3sWdBrTnsvN2CKcyCYyUrc7rebNBlK6+kteg7ksecg==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + dev: false + /json-schema-traverse@0.4.1: resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} @@ -3462,6 +3752,11 @@ packages: resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} engines: {node: '>=6'} + /kleur@4.1.5: + resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} + engines: {node: '>=6'} + dev: false + /levn@0.4.1: resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} engines: {node: '>= 0.8.0'} @@ -3482,6 +3777,11 @@ packages: /lines-and-columns@1.2.4: resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + /lines-and-columns@2.0.4: + resolution: {integrity: sha512-wM1+Z03eypVAVUCE7QdSqpVIvelbOakn1M0bPDoA4SGWPx3sNDVUiMo3L6To6WWGClB7VyXnhQ4Sn7gxiJbE6A==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dev: false + /lint-staged@15.2.0: resolution: {integrity: sha512-TFZzUEV00f+2YLaVPWBWGAMq7So6yQx+GG8YRMDeOEIf95Zn5RyiLMsEiX4KTNl9vq/w+NqRJkLA1kPIo15ufQ==} engines: {node: '>=18.12.0'} @@ -3513,6 +3813,13 @@ packages: wrap-ansi: 9.0.0 dev: true + /load-plugin@5.1.0: + resolution: {integrity: sha512-Lg1CZa1CFj2CbNaxijTL6PCbzd4qGTlZov+iH2p5Xwy/ApcZJh+i6jMN2cYePouTfjJfrNu3nXFdEw8LvbjPFQ==} + dependencies: + '@npmcli/config': 6.4.0 + import-meta-resolve: 2.2.2 + dev: false + /load-tsconfig@0.2.5: resolution: {integrity: sha512-IXO6OCs9yg8tMKzfPZ1YmheJbZCiEsnBdcB03l0OcfK9prKnJb96siuHCr5Fl37/yo9DnKU+TLpxzTUspw9shg==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -3560,6 +3867,10 @@ packages: wrap-ansi: 9.0.0 dev: true + /longest-streak@3.1.0: + resolution: {integrity: sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==} + dev: false + /loose-envify@1.4.0: resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} hasBin: true @@ -3575,7 +3886,6 @@ packages: /lru-cache@10.0.1: resolution: {integrity: sha512-IJ4uwUTi2qCccrioU6g9g/5rvvVl13bsdczUUcqbciD9iLr095yj8DQKdObriEvuNSx325N1rV1O0sJFszx75g==} engines: {node: 14 || >=16.14} - dev: true /lru-cache@6.0.0: resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} @@ -3601,10 +3911,110 @@ packages: - supports-color dev: false + /mdast-util-from-markdown@1.3.1: + resolution: {integrity: sha512-4xTO/M8c82qBcnQc1tgpNtubGUW/Y1tBQ1B0i5CtSoelOLKFYlElIr3bvgREYYO5iRqbMY1YuqZng0GVOI8Qww==} + dependencies: + '@types/mdast': 3.0.14 + '@types/unist': 2.0.9 + decode-named-character-reference: 1.0.2 + mdast-util-to-string: 3.2.0 + micromark: 3.2.0 + micromark-util-decode-numeric-character-reference: 1.1.0 + micromark-util-decode-string: 1.1.0 + micromark-util-normalize-identifier: 1.1.0 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 + unist-util-stringify-position: 3.0.3 + uvu: 0.5.6 + transitivePeerDependencies: + - supports-color + dev: false + + /mdast-util-mdx-expression@1.3.2: + resolution: {integrity: sha512-xIPmR5ReJDu/DHH1OoIT1HkuybIfRGYRywC+gJtI7qHjCJp/M9jrmBEJW22O8lskDWm562BX2W8TiAwRTb0rKA==} + dependencies: + '@types/estree-jsx': 1.0.3 + '@types/hast': 2.3.8 + '@types/mdast': 3.0.14 + mdast-util-from-markdown: 1.3.1 + mdast-util-to-markdown: 1.5.0 + transitivePeerDependencies: + - supports-color + dev: false + + /mdast-util-mdx-jsx@2.1.4: + resolution: {integrity: sha512-DtMn9CmVhVzZx3f+optVDF8yFgQVt7FghCRNdlIaS3X5Bnym3hZwPbg/XW86vdpKjlc1PVj26SpnLGeJBXD3JA==} + dependencies: + '@types/estree-jsx': 1.0.3 + '@types/hast': 2.3.8 + '@types/mdast': 3.0.14 + '@types/unist': 2.0.9 + ccount: 2.0.1 + mdast-util-from-markdown: 1.3.1 + mdast-util-to-markdown: 1.5.0 + parse-entities: 4.0.1 + stringify-entities: 4.0.3 + unist-util-remove-position: 4.0.2 + unist-util-stringify-position: 3.0.3 + vfile-message: 3.1.4 + transitivePeerDependencies: + - supports-color + dev: false + + /mdast-util-mdx@2.0.1: + resolution: {integrity: sha512-38w5y+r8nyKlGvNjSEqWrhG0w5PmnRA+wnBvm+ulYCct7nsGYhFVb0lljS9bQav4psDAS1eGkP2LMVcZBi/aqw==} + dependencies: + mdast-util-from-markdown: 1.3.1 + mdast-util-mdx-expression: 1.3.2 + mdast-util-mdx-jsx: 2.1.4 + mdast-util-mdxjs-esm: 1.3.1 + mdast-util-to-markdown: 1.5.0 + transitivePeerDependencies: + - supports-color + dev: false + + /mdast-util-mdxjs-esm@1.3.1: + resolution: {integrity: sha512-SXqglS0HrEvSdUEfoXFtcg7DRl7S2cwOXc7jkuusG472Mmjag34DUDeOJUZtl+BVnyeO1frIgVpHlNRWc2gk/w==} + dependencies: + '@types/estree-jsx': 1.0.3 + '@types/hast': 2.3.8 + '@types/mdast': 3.0.14 + mdast-util-from-markdown: 1.3.1 + mdast-util-to-markdown: 1.5.0 + transitivePeerDependencies: + - supports-color + dev: false + + /mdast-util-phrasing@3.0.1: + resolution: {integrity: sha512-WmI1gTXUBJo4/ZmSk79Wcb2HcjPJBzM1nlI/OUWA8yk2X9ik3ffNbBGsU+09BFmXaL1IBb9fiuvq6/KMiNycSg==} + dependencies: + '@types/mdast': 3.0.14 + unist-util-is: 5.2.1 + dev: false + + /mdast-util-to-markdown@1.5.0: + resolution: {integrity: sha512-bbv7TPv/WC49thZPg3jXuqzuvI45IL2EVAr/KxF0BSdHsU0ceFHOmwQn6evxAh1GaoK/6GQ1wp4R4oW2+LFL/A==} + dependencies: + '@types/mdast': 3.0.14 + '@types/unist': 2.0.9 + longest-streak: 3.1.0 + mdast-util-phrasing: 3.0.1 + mdast-util-to-string: 3.2.0 + micromark-util-decode-string: 1.1.0 + unist-util-visit: 4.1.2 + zwitch: 2.0.4 + dev: false + /mdast-util-to-string@2.0.0: resolution: {integrity: sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w==} dev: false + /mdast-util-to-string@3.2.0: + resolution: {integrity: sha512-V4Zn/ncyN1QNSqSBxTrMOLpjr+IKdHl2v3KVLoWmDPscP4r9GcCi71gjgvUV1SFSKh92AjAG4peFuBl2/YgCJg==} + dependencies: + '@types/mdast': 3.0.14 + dev: false + /merge-stream@2.0.0: resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} @@ -3612,6 +4022,244 @@ packages: resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} engines: {node: '>= 8'} + /micromark-core-commonmark@1.1.0: + resolution: {integrity: sha512-BgHO1aRbolh2hcrzL2d1La37V0Aoz73ymF8rAcKnohLy93titmv62E0gP8Hrx9PKcKrqCZ1BbLGbP3bEhoXYlw==} + dependencies: + decode-named-character-reference: 1.0.2 + micromark-factory-destination: 1.1.0 + micromark-factory-label: 1.1.0 + micromark-factory-space: 1.1.0 + micromark-factory-title: 1.1.0 + micromark-factory-whitespace: 1.1.0 + micromark-util-character: 1.2.0 + micromark-util-chunked: 1.1.0 + micromark-util-classify-character: 1.1.0 + micromark-util-html-tag-name: 1.2.0 + micromark-util-normalize-identifier: 1.1.0 + micromark-util-resolve-all: 1.1.0 + micromark-util-subtokenize: 1.1.0 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 + uvu: 0.5.6 + dev: false + + /micromark-extension-mdx-expression@1.0.8: + resolution: {integrity: sha512-zZpeQtc5wfWKdzDsHRBY003H2Smg+PUi2REhqgIhdzAa5xonhP03FcXxqFSerFiNUr5AWmHpaNPQTBVOS4lrXw==} + dependencies: + '@types/estree': 1.0.3 + micromark-factory-mdx-expression: 1.0.9 + micromark-factory-space: 1.1.0 + micromark-util-character: 1.2.0 + micromark-util-events-to-acorn: 1.2.3 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 + uvu: 0.5.6 + dev: false + + /micromark-extension-mdx-jsx@1.0.5: + resolution: {integrity: sha512-gPH+9ZdmDflbu19Xkb8+gheqEDqkSpdCEubQyxuz/Hn8DOXiXvrXeikOoBA71+e8Pfi0/UYmU3wW3H58kr7akA==} + dependencies: + '@types/acorn': 4.0.6 + '@types/estree': 1.0.3 + estree-util-is-identifier-name: 2.1.0 + micromark-factory-mdx-expression: 1.0.9 + micromark-factory-space: 1.1.0 + micromark-util-character: 1.2.0 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 + uvu: 0.5.6 + vfile-message: 3.1.4 + dev: false + + /micromark-extension-mdx-md@1.0.1: + resolution: {integrity: sha512-7MSuj2S7xjOQXAjjkbjBsHkMtb+mDGVW6uI2dBL9snOBCbZmoNgDAeZ0nSn9j3T42UE/g2xVNMn18PJxZvkBEA==} + dependencies: + micromark-util-types: 1.1.0 + dev: false + + /micromark-extension-mdxjs-esm@1.0.5: + resolution: {integrity: sha512-xNRBw4aoURcyz/S69B19WnZAkWJMxHMT5hE36GtDAyhoyn/8TuAeqjFJQlwk+MKQsUD7b3l7kFX+vlfVWgcX1w==} + dependencies: + '@types/estree': 1.0.3 + micromark-core-commonmark: 1.1.0 + micromark-util-character: 1.2.0 + micromark-util-events-to-acorn: 1.2.3 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 + unist-util-position-from-estree: 1.1.2 + uvu: 0.5.6 + vfile-message: 3.1.4 + dev: false + + /micromark-extension-mdxjs@1.0.1: + resolution: {integrity: sha512-7YA7hF6i5eKOfFUzZ+0z6avRG52GpWR8DL+kN47y3f2KhxbBZMhmxe7auOeaTBrW2DenbbZTf1ea9tA2hDpC2Q==} + dependencies: + acorn: 8.11.2 + acorn-jsx: 5.3.2(acorn@8.11.2) + micromark-extension-mdx-expression: 1.0.8 + micromark-extension-mdx-jsx: 1.0.5 + micromark-extension-mdx-md: 1.0.1 + micromark-extension-mdxjs-esm: 1.0.5 + micromark-util-combine-extensions: 1.1.0 + micromark-util-types: 1.1.0 + dev: false + + /micromark-factory-destination@1.1.0: + resolution: {integrity: sha512-XaNDROBgx9SgSChd69pjiGKbV+nfHGDPVYFs5dOoDd7ZnMAE+Cuu91BCpsY8RT2NP9vo/B8pds2VQNCLiu0zhg==} + dependencies: + micromark-util-character: 1.2.0 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 + dev: false + + /micromark-factory-label@1.1.0: + resolution: {integrity: sha512-OLtyez4vZo/1NjxGhcpDSbHQ+m0IIGnT8BoPamh+7jVlzLJBH98zzuCoUeMxvM6WsNeh8wx8cKvqLiPHEACn0w==} + dependencies: + micromark-util-character: 1.2.0 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 + uvu: 0.5.6 + dev: false + + /micromark-factory-mdx-expression@1.0.9: + resolution: {integrity: sha512-jGIWzSmNfdnkJq05c7b0+Wv0Kfz3NJ3N4cBjnbO4zjXIlxJr+f8lk+5ZmwFvqdAbUy2q6B5rCY//g0QAAaXDWA==} + dependencies: + '@types/estree': 1.0.3 + micromark-util-character: 1.2.0 + micromark-util-events-to-acorn: 1.2.3 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 + unist-util-position-from-estree: 1.1.2 + uvu: 0.5.6 + vfile-message: 3.1.4 + dev: false + + /micromark-factory-space@1.1.0: + resolution: {integrity: sha512-cRzEj7c0OL4Mw2v6nwzttyOZe8XY/Z8G0rzmWQZTBi/jjwyw/U4uqKtUORXQrR5bAZZnbTI/feRV/R7hc4jQYQ==} + dependencies: + micromark-util-character: 1.2.0 + micromark-util-types: 1.1.0 + dev: false + + /micromark-factory-title@1.1.0: + resolution: {integrity: sha512-J7n9R3vMmgjDOCY8NPw55jiyaQnH5kBdV2/UXCtZIpnHH3P6nHUKaH7XXEYuWwx/xUJcawa8plLBEjMPU24HzQ==} + dependencies: + micromark-factory-space: 1.1.0 + micromark-util-character: 1.2.0 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 + dev: false + + /micromark-factory-whitespace@1.1.0: + resolution: {integrity: sha512-v2WlmiymVSp5oMg+1Q0N1Lxmt6pMhIHD457whWM7/GUlEks1hI9xj5w3zbc4uuMKXGisksZk8DzP2UyGbGqNsQ==} + dependencies: + micromark-factory-space: 1.1.0 + micromark-util-character: 1.2.0 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 + dev: false + + /micromark-util-character@1.2.0: + resolution: {integrity: sha512-lXraTwcX3yH/vMDaFWCQJP1uIszLVebzUa3ZHdrgxr7KEU/9mL4mVgCpGbyhvNLNlauROiNUq7WN5u7ndbY6xg==} + dependencies: + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 + dev: false + + /micromark-util-chunked@1.1.0: + resolution: {integrity: sha512-Ye01HXpkZPNcV6FiyoW2fGZDUw4Yc7vT0E9Sad83+bEDiCJ1uXu0S3mr8WLpsz3HaG3x2q0HM6CTuPdcZcluFQ==} + dependencies: + micromark-util-symbol: 1.1.0 + dev: false + + /micromark-util-classify-character@1.1.0: + resolution: {integrity: sha512-SL0wLxtKSnklKSUplok1WQFoGhUdWYKggKUiqhX+Swala+BtptGCu5iPRc+xvzJ4PXE/hwM3FNXsfEVgoZsWbw==} + dependencies: + micromark-util-character: 1.2.0 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 + dev: false + + /micromark-util-combine-extensions@1.1.0: + resolution: {integrity: sha512-Q20sp4mfNf9yEqDL50WwuWZHUrCO4fEyeDCnMGmG5Pr0Cz15Uo7KBs6jq+dq0EgX4DPwwrh9m0X+zPV1ypFvUA==} + dependencies: + micromark-util-chunked: 1.1.0 + micromark-util-types: 1.1.0 + dev: false + + /micromark-util-decode-numeric-character-reference@1.1.0: + resolution: {integrity: sha512-m9V0ExGv0jB1OT21mrWcuf4QhP46pH1KkfWy9ZEezqHKAxkj4mPCy3nIH1rkbdMlChLHX531eOrymlwyZIf2iw==} + dependencies: + micromark-util-symbol: 1.1.0 + dev: false + + /micromark-util-decode-string@1.1.0: + resolution: {integrity: sha512-YphLGCK8gM1tG1bd54azwyrQRjCFcmgj2S2GoJDNnh4vYtnL38JS8M4gpxzOPNyHdNEpheyWXCTnnTDY3N+NVQ==} + dependencies: + decode-named-character-reference: 1.0.2 + micromark-util-character: 1.2.0 + micromark-util-decode-numeric-character-reference: 1.1.0 + micromark-util-symbol: 1.1.0 + dev: false + + /micromark-util-encode@1.1.0: + resolution: {integrity: sha512-EuEzTWSTAj9PA5GOAs992GzNh2dGQO52UvAbtSOMvXTxv3Criqb6IOzJUBCmEqrrXSblJIJBbFFv6zPxpreiJw==} + dev: false + + /micromark-util-events-to-acorn@1.2.3: + resolution: {integrity: sha512-ij4X7Wuc4fED6UoLWkmo0xJQhsktfNh1J0m8g4PbIMPlx+ek/4YdW5mvbye8z/aZvAPUoxgXHrwVlXAPKMRp1w==} + dependencies: + '@types/acorn': 4.0.6 + '@types/estree': 1.0.3 + '@types/unist': 2.0.9 + estree-util-visit: 1.2.1 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 + uvu: 0.5.6 + vfile-message: 3.1.4 + dev: false + + /micromark-util-html-tag-name@1.2.0: + resolution: {integrity: sha512-VTQzcuQgFUD7yYztuQFKXT49KghjtETQ+Wv/zUjGSGBioZnkA4P1XXZPT1FHeJA6RwRXSF47yvJ1tsJdoxwO+Q==} + dev: false + + /micromark-util-normalize-identifier@1.1.0: + resolution: {integrity: sha512-N+w5vhqrBihhjdpM8+5Xsxy71QWqGn7HYNUvch71iV2PM7+E3uWGox1Qp90loa1ephtCxG2ftRV/Conitc6P2Q==} + dependencies: + micromark-util-symbol: 1.1.0 + dev: false + + /micromark-util-resolve-all@1.1.0: + resolution: {integrity: sha512-b/G6BTMSg+bX+xVCshPTPyAu2tmA0E4X98NSR7eIbeC6ycCqCeE7wjfDIgzEbkzdEVJXRtOG4FbEm/uGbCRouA==} + dependencies: + micromark-util-types: 1.1.0 + dev: false + + /micromark-util-sanitize-uri@1.2.0: + resolution: {integrity: sha512-QO4GXv0XZfWey4pYFndLUKEAktKkG5kZTdUNaTAkzbuJxn2tNBOr+QtxR2XpWaMhbImT2dPzyLrPXLlPhph34A==} + dependencies: + micromark-util-character: 1.2.0 + micromark-util-encode: 1.1.0 + micromark-util-symbol: 1.1.0 + dev: false + + /micromark-util-subtokenize@1.1.0: + resolution: {integrity: sha512-kUQHyzRoxvZO2PuLzMt2P/dwVsTiivCK8icYTeR+3WgbuPqfHgPPy7nFKbeqRivBvn/3N3GBiNC+JRTMSxEC7A==} + dependencies: + micromark-util-chunked: 1.1.0 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 + uvu: 0.5.6 + dev: false + + /micromark-util-symbol@1.1.0: + resolution: {integrity: sha512-uEjpEYY6KMs1g7QfJ2eX1SQEV+ZT4rUD3UcF6l57acZvLNK7PBZL+ty82Z1qhK1/yXIY4bdx04FKMgR0g4IAag==} + dev: false + + /micromark-util-types@1.1.0: + resolution: {integrity: sha512-ukRBgie8TIAcacscVHSiddHjO4k/q3pnedmzMQ4iwDcK0FtFCohKOlFbaOL/mPgfnPsL3C1ZyxJa4sbWrBl3jg==} + dev: false + /micromark@2.11.4: resolution: {integrity: sha512-+WoovN/ppKolQOFIAajxi7Lu9kInbPxFuTBVEavFcL8eAfVstoc5MocPmqBeAdBOJV00uaVjegzH4+MA0DN/uA==} dependencies: @@ -3621,6 +4269,30 @@ packages: - supports-color dev: false + /micromark@3.2.0: + resolution: {integrity: sha512-uD66tJj54JLYq0De10AhWycZWGQNUvDI55xPgk2sQM5kn1JYlhbCMTtEeT27+vAhW2FBQxLlOmS3pmA7/2z4aA==} + dependencies: + '@types/debug': 4.1.12 + debug: 4.3.4 + decode-named-character-reference: 1.0.2 + micromark-core-commonmark: 1.1.0 + micromark-factory-space: 1.1.0 + micromark-util-character: 1.2.0 + micromark-util-chunked: 1.1.0 + micromark-util-combine-extensions: 1.1.0 + micromark-util-decode-numeric-character-reference: 1.1.0 + micromark-util-encode: 1.1.0 + micromark-util-normalize-identifier: 1.1.0 + micromark-util-resolve-all: 1.1.0 + micromark-util-sanitize-uri: 1.2.0 + micromark-util-subtokenize: 1.1.0 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 + uvu: 0.5.6 + transitivePeerDependencies: + - supports-color + dev: false + /micromatch@4.0.5: resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} engines: {node: '>=8.6'} @@ -3631,7 +4303,6 @@ packages: /mimic-fn@2.1.0: resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} engines: {node: '>=6'} - dev: true /mimic-fn@4.0.0: resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} @@ -3647,6 +4318,13 @@ packages: dependencies: brace-expansion: 1.1.11 + /minimatch@5.1.6: + resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} + engines: {node: '>=10'} + dependencies: + brace-expansion: 2.0.1 + dev: false + /minimatch@9.0.3: resolution: {integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==} engines: {node: '>=16 || 14 >=14.17'} @@ -3668,7 +4346,6 @@ packages: /minipass@7.0.4: resolution: {integrity: sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==} engines: {node: '>=16 || 14 >=14.17'} - dev: true /minizlib@2.1.2: resolution: {integrity: sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==} @@ -3695,7 +4372,6 @@ packages: /mri@1.2.0: resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} engines: {node: '>=4'} - dev: true /ms@2.1.2: resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} @@ -3728,6 +4404,14 @@ packages: resolution: {integrity: sha512-F5kfEj95kX8tkDhUCYdV8dg3/8Olx/94zB8+ZNthFs6Bz31UpUi8Xh40TN3thLwXgrwXry1pEg9lJ++tLWTcqA==} dev: true + /nopt@7.2.0: + resolution: {integrity: sha512-CVDtwCdhYIvnAzFoJ6NJ6dX3oga9/HyciQDnG1vQDjSLMeKLJ4A93ZqYKDrgYSr1FBY5/hMYC+2VCi24pgpkGA==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + hasBin: true + dependencies: + abbrev: 2.0.0 + dev: false + /normalize-package-data@2.5.0: resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==} dependencies: @@ -3742,12 +4426,16 @@ packages: engines: {node: '>=0.10.0'} dev: true + /npm-normalize-package-bin@3.0.1: + resolution: {integrity: sha512-dMxCf+zZ+3zeQZXKxmyuCKlIDPGuv8EF940xbkC4kQVDTtqoh6rJFO+JTKSA6/Rwi0getWmtuy4Itup0AMcaDQ==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + dev: false + /npm-run-path@4.0.1: resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} engines: {node: '>=8'} dependencies: path-key: 3.1.1 - dev: true /npm-run-path@5.1.0: resolution: {integrity: sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==} @@ -3833,7 +4521,6 @@ packages: engines: {node: '>=6'} dependencies: mimic-fn: 2.1.0 - dev: true /onetime@6.0.0: resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==} @@ -3849,7 +4536,6 @@ packages: define-lazy-prop: 3.0.0 is-inside-container: 1.0.0 is-wsl: 2.2.0 - dev: true /optionator@0.9.3: resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==} @@ -3916,6 +4602,19 @@ packages: is-hexadecimal: 1.0.4 dev: false + /parse-entities@4.0.1: + resolution: {integrity: sha512-SWzvYcSJh4d/SGLIOQfZ/CoNv6BTlI6YEQ7Nj82oDVnRpwe/Z/F1EMx42x3JAOwGBlCjeCH0BRJQbQ/opHL17w==} + dependencies: + '@types/unist': 2.0.9 + character-entities: 2.0.2 + character-entities-legacy: 3.0.0 + character-reference-invalid: 2.0.1 + decode-named-character-reference: 1.0.2 + is-alphanumerical: 2.0.1 + is-decimal: 2.0.1 + is-hexadecimal: 2.0.1 + dev: false + /parse-gitignore@2.0.0: resolution: {integrity: sha512-RmVuCHWsfu0QPNW+mraxh/xjQVw/lhUCUru8Zni3Ctq3AoMhpDTq0OVdKS6iesd6Kqb7viCV3isAL43dciOSog==} engines: {node: '>=14'} @@ -3931,6 +4630,16 @@ packages: lines-and-columns: 1.2.4 dev: false + /parse-json@6.0.2: + resolution: {integrity: sha512-SA5aMiaIjXkAiBrW/yPgLgQAQg42f7K3ACO+2l/zOvtQBwX58DMUsFJXelW2fx3yMBmWOVkR6j1MGsdSbCA4UA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dependencies: + '@babel/code-frame': 7.22.13 + error-ex: 1.3.2 + json-parse-even-better-errors: 2.3.1 + lines-and-columns: 2.0.4 + dev: false + /path-exists@4.0.0: resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} engines: {node: '>=8'} @@ -3956,7 +4665,6 @@ packages: dependencies: lru-cache: 10.0.1 minipass: 7.0.4 - dev: true /path-type@4.0.0: resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} @@ -4059,6 +4767,11 @@ packages: ansi-styles: 5.2.0 react-is: 18.2.0 + /proc-log@3.0.0: + resolution: {integrity: sha512-++Vn7NS4Xf9NacaU9Xq3URUuqZETPsf8L4j5/ckhaRYsfPeRyzGw+iDjFhV/Jr3uNmTvvddEJFWh5R1gRgUH8A==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + dev: false + /prompts@2.4.2: resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} engines: {node: '>= 6'} @@ -4096,6 +4809,14 @@ packages: /react-is@18.2.0: resolution: {integrity: sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==} + /read-package-json-fast@3.0.2: + resolution: {integrity: sha512-0J+Msgym3vrLOUB3hzQCuZHII0xkNGCtz/HJH9xZshwv9DbDwkw1KaE3gx/e2J5rpEY5rtOy6cyhKOPrkP7FZw==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + dependencies: + json-parse-even-better-errors: 3.0.1 + npm-normalize-package-bin: 3.0.1 + dev: false + /read-pkg-up@7.0.1: resolution: {integrity: sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==} engines: {node: '>=8'} @@ -4115,6 +4836,15 @@ packages: type-fest: 0.6.0 dev: false + /readable-stream@3.6.2: + resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} + engines: {node: '>= 6'} + dependencies: + inherits: 2.0.4 + string_decoder: 1.3.0 + util-deprecate: 1.0.2 + dev: false + /readdirp@3.6.0: resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} engines: {node: '>=8.10.0'} @@ -4155,6 +4885,33 @@ packages: jsesc: 0.5.0 dev: false + /remark-mdx@2.3.0: + resolution: {integrity: sha512-g53hMkpM0I98MU266IzDFMrTD980gNF3BJnkyFcmN+dD873mQeD5rdMO3Y2X+x8umQfbSE0PcoEDl7ledSA+2g==} + dependencies: + mdast-util-mdx: 2.0.1 + micromark-extension-mdxjs: 1.0.1 + transitivePeerDependencies: + - supports-color + dev: false + + /remark-parse@10.0.2: + resolution: {integrity: sha512-3ydxgHa/ZQzG8LvC7jTXccARYDcRld3VfcgIIFs7bI6vbRSxJJmzgLEIIoYKyrfhaY+ujuWaf/PJiMZXoiCXgw==} + dependencies: + '@types/mdast': 3.0.14 + mdast-util-from-markdown: 1.3.1 + unified: 10.1.2 + transitivePeerDependencies: + - supports-color + dev: false + + /remark-stringify@10.0.3: + resolution: {integrity: sha512-koyOzCMYoUHudypbj4XpnAKFbkddRMYZHwghnxd7ue5210WzGw6kOBwauJTRUMq16jsovXx8dYNvSSWP89kZ3A==} + dependencies: + '@types/mdast': 3.0.14 + mdast-util-to-markdown: 1.5.0 + unified: 10.1.2 + dev: false + /require-directory@2.1.1: resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} engines: {node: '>=0.10.0'} @@ -4244,13 +5001,19 @@ packages: engines: {node: '>=12'} dependencies: execa: 5.1.1 - dev: true /run-parallel@1.2.0: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} dependencies: queue-microtask: 1.2.3 + /sade@1.8.1: + resolution: {integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==} + engines: {node: '>=6'} + dependencies: + mri: 1.2.0 + dev: false + /safe-array-concat@1.0.1: resolution: {integrity: sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q==} engines: {node: '>=0.4'} @@ -4261,6 +5024,10 @@ packages: isarray: 2.0.5 dev: true + /safe-buffer@5.2.1: + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + dev: false + /safe-regex-test@1.0.0: resolution: {integrity: sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==} dependencies: @@ -4328,7 +5095,6 @@ packages: /signal-exit@3.0.7: resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} - dev: true /signal-exit@4.1.0: resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} @@ -4434,7 +5200,6 @@ packages: eastasianwidth: 0.2.0 emoji-regex: 9.2.2 strip-ansi: 7.1.0 - dev: true /string-width@7.0.0: resolution: {integrity: sha512-GPQHj7row82Hjo9hKZieKcHIhaAIKOJvFSIZXuCU9OASVZrMNUaZuz++SPVrBjnLsnk4k+z9f2EIypgxf2vNFw==} @@ -4484,6 +5249,19 @@ packages: es-abstract: 1.22.3 dev: true + /string_decoder@1.3.0: + resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} + dependencies: + safe-buffer: 5.2.1 + dev: false + + /stringify-entities@4.0.3: + resolution: {integrity: sha512-BP9nNHMhhfcMbiuQKCqMjhDP5yBCAxsPu4pHFFzJ6Alo9dZgY4VLDPutXqIjpRiMoKdp7Av85Gr73Q5uH9k7+g==} + dependencies: + character-entities-html4: 2.1.0 + character-entities-legacy: 3.0.0 + dev: false + /strip-ansi@6.0.1: resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} engines: {node: '>=8'} @@ -4495,12 +5273,10 @@ packages: engines: {node: '>=12'} dependencies: ansi-regex: 6.0.1 - dev: true /strip-final-newline@2.0.0: resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} engines: {node: '>=6'} - dev: true /strip-final-newline@3.0.0: resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==} @@ -4550,6 +5326,11 @@ packages: dependencies: has-flag: 4.0.0 + /supports-color@9.4.0: + resolution: {integrity: sha512-VL+lNrEoIXww1coLPOmiEmK/0sGigko5COxI09KzHc2VJXJsQ37UaQ+8quuxjDeA7+KnLGTWRyOXSLLR2Wb4jw==} + engines: {node: '>=12'} + dev: false + /supports-preserve-symlinks-flag@1.0.0: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} @@ -4568,7 +5349,6 @@ packages: dependencies: '@pkgr/utils': 2.4.2 tslib: 2.6.2 - dev: true /tar@6.2.0: resolution: {integrity: sha512-/Wo7DcT0u5HUV486xg675HtjNd3BXZ6xDbzsCUZPt5iw8bTQ63bP0Raut3mvro9u+CUyq7YQd8Cx55fsZXxqLQ==} @@ -4612,7 +5392,6 @@ packages: /titleize@3.0.0: resolution: {integrity: sha512-KxVu8EYHDPBdUYdKZdKtU2aj2XfEx9AfjXxE/Aj0vT06w2icA09Vus1rh6eSu1y01akYg6BjIK/hxyLJINoMLQ==} engines: {node: '>=12'} - dev: true /to-fast-properties@2.0.0: resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} @@ -4624,6 +5403,13 @@ packages: dependencies: is-number: 7.0.0 + /to-vfile@7.2.4: + resolution: {integrity: sha512-2eQ+rJ2qGbyw3senPI0qjuM7aut8IYXK6AEoOWb+fJx/mQYzviTckm1wDjq91QYHAPBTYzmdJXxMFA6Mk14mdw==} + dependencies: + is-buffer: 2.0.5 + vfile: 5.3.7 + dev: false + /tr46@1.0.1: resolution: {integrity: sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==} dependencies: @@ -4635,6 +5421,10 @@ packages: hasBin: true dev: true + /trough@2.1.0: + resolution: {integrity: sha512-AqTiAOLcj85xS7vQ8QkAV41hPDIJ71XJB4RCUrzo/1GM2CQwhkJGaf9Hgr7BOugMRpgGUrqRg/DrBDl4H40+8g==} + dev: false + /ts-api-utils@1.0.3(typescript@5.3.3): resolution: {integrity: sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg==} engines: {node: '>=16.13.0'} @@ -4649,7 +5439,6 @@ packages: /tslib@2.6.2: resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} - dev: true /tsup@8.0.1(typescript@5.3.3): resolution: {integrity: sha512-hvW7gUSG96j53ZTSlT4j/KL0q1Q2l6TqGBFc6/mu/L46IoNWqLLUzLRLP1R8Q7xrJTmkDxxDoojV5uCVs1sVOg==} @@ -4769,6 +5558,10 @@ packages: is-typed-array: 1.1.12 dev: true + /typedarray@0.0.6: + resolution: {integrity: sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==} + dev: false + /typescript@5.3.3: resolution: {integrity: sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==} engines: {node: '>=14.17'} @@ -4798,12 +5591,99 @@ packages: /undici-types@5.26.5: resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} + /unified-engine@10.1.0: + resolution: {integrity: sha512-5+JDIs4hqKfHnJcVCxTid1yBoI/++FfF/1PFdSMpaftZZZY+qg2JFruRbf7PaIwa9KgLotXQV3gSjtY0IdcFGQ==} + dependencies: + '@types/concat-stream': 2.0.3 + '@types/debug': 4.1.12 + '@types/is-empty': 1.2.3 + '@types/node': 18.19.3 + '@types/unist': 2.0.9 + concat-stream: 2.0.0 + debug: 4.3.4 + fault: 2.0.1 + glob: 8.1.0 + ignore: 5.2.4 + is-buffer: 2.0.5 + is-empty: 1.2.0 + is-plain-obj: 4.1.0 + load-plugin: 5.1.0 + parse-json: 6.0.2 + to-vfile: 7.2.4 + trough: 2.1.0 + unist-util-inspect: 7.0.2 + vfile-message: 3.1.4 + vfile-reporter: 7.0.5 + vfile-statistics: 2.0.1 + yaml: 2.3.4 + transitivePeerDependencies: + - supports-color + dev: false + + /unified@10.1.2: + resolution: {integrity: sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==} + dependencies: + '@types/unist': 2.0.9 + bail: 2.0.2 + extend: 3.0.2 + is-buffer: 2.0.5 + is-plain-obj: 4.1.0 + trough: 2.1.0 + vfile: 5.3.7 + dev: false + + /unist-util-inspect@7.0.2: + resolution: {integrity: sha512-Op0XnmHUl6C2zo/yJCwhXQSm/SmW22eDZdWP2qdf4WpGrgO1ZxFodq+5zFyeRGasFjJotAnLgfuD1jkcKqiH1Q==} + dependencies: + '@types/unist': 2.0.9 + dev: false + + /unist-util-is@5.2.1: + resolution: {integrity: sha512-u9njyyfEh43npf1M+yGKDGVPbY/JWEemg5nH05ncKPfi+kBbKBJoTdsogMu33uhytuLlv9y0O7GH7fEdwLdLQw==} + dependencies: + '@types/unist': 2.0.9 + dev: false + + /unist-util-position-from-estree@1.1.2: + resolution: {integrity: sha512-poZa0eXpS+/XpoQwGwl79UUdea4ol2ZuCYguVaJS4qzIOMDzbqz8a3erUCOmubSZkaOuGamb3tX790iwOIROww==} + dependencies: + '@types/unist': 2.0.9 + dev: false + + /unist-util-remove-position@4.0.2: + resolution: {integrity: sha512-TkBb0HABNmxzAcfLf4qsIbFbaPDvMO6wa3b3j4VcEzFVaw1LBKwnW4/sRJ/atSLSzoIg41JWEdnE7N6DIhGDGQ==} + dependencies: + '@types/unist': 2.0.9 + unist-util-visit: 4.1.2 + dev: false + /unist-util-stringify-position@2.0.3: resolution: {integrity: sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==} dependencies: '@types/unist': 2.0.9 dev: false + /unist-util-stringify-position@3.0.3: + resolution: {integrity: sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg==} + dependencies: + '@types/unist': 2.0.9 + dev: false + + /unist-util-visit-parents@5.1.3: + resolution: {integrity: sha512-x6+y8g7wWMyQhL1iZfhIPhDAs7Xwbn9nRosDXl7qoPTSCy0yNxnKc+hWokFifWQIDGi154rdUqKvbCa4+1kLhg==} + dependencies: + '@types/unist': 2.0.9 + unist-util-is: 5.2.1 + dev: false + + /unist-util-visit@4.1.2: + resolution: {integrity: sha512-MSd8OUGISqHdVvfY9TPhyK2VdUrPgxkUtWSuMHF6XAAFuL4LokseigBnZtPnJMu+FbynTkFNnFlyjxpVKujMRg==} + dependencies: + '@types/unist': 2.0.9 + unist-util-is: 5.2.1 + unist-util-visit-parents: 5.1.3 + dev: false + /universalify@2.0.0: resolution: {integrity: sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==} engines: {node: '>= 10.0.0'} @@ -4812,7 +5692,6 @@ packages: /untildify@4.0.0: resolution: {integrity: sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==} engines: {node: '>=8'} - dev: true /uri-js@4.4.1: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} @@ -4823,6 +5702,17 @@ packages: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} dev: false + /uvu@0.5.6: + resolution: {integrity: sha512-+g8ENReyr8YsOc6fv/NVJs2vFdHBnBNdfE49rshrTzDWOlUx4Gq7KOS2GD8eqhy2j+Ejq29+SbKH8yjkAqXqoA==} + engines: {node: '>=8'} + hasBin: true + dependencies: + dequal: 2.0.3 + diff: 5.1.0 + kleur: 4.1.5 + sade: 1.8.1 + dev: false + /validate-npm-package-license@3.0.4: resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} dependencies: @@ -4830,6 +5720,49 @@ packages: spdx-expression-parse: 3.0.1 dev: false + /vfile-message@3.1.4: + resolution: {integrity: sha512-fa0Z6P8HUrQN4BZaX05SIVXic+7kE3b05PWAtPuYP9QLHsLKYR7/AlLW3NtOrpXRLeawpDLMsVkmk5DG0NXgWw==} + dependencies: + '@types/unist': 2.0.9 + unist-util-stringify-position: 3.0.3 + dev: false + + /vfile-reporter@7.0.5: + resolution: {integrity: sha512-NdWWXkv6gcd7AZMvDomlQbK3MqFWL1RlGzMn++/O2TI+68+nqxCPTvLugdOtfSzXmjh+xUyhp07HhlrbJjT+mw==} + dependencies: + '@types/supports-color': 8.1.3 + string-width: 5.1.2 + supports-color: 9.4.0 + unist-util-stringify-position: 3.0.3 + vfile: 5.3.7 + vfile-message: 3.1.4 + vfile-sort: 3.0.1 + vfile-statistics: 2.0.1 + dev: false + + /vfile-sort@3.0.1: + resolution: {integrity: sha512-1os1733XY6y0D5x0ugqSeaVJm9lYgj0j5qdcZQFyxlZOSy1jYarL77lLyb5gK4Wqr1d5OxmuyflSO3zKyFnTFw==} + dependencies: + vfile: 5.3.7 + vfile-message: 3.1.4 + dev: false + + /vfile-statistics@2.0.1: + resolution: {integrity: sha512-W6dkECZmP32EG/l+dp2jCLdYzmnDBIw6jwiLZSER81oR5AHRcVqL+k3Z+pfH1R73le6ayDkJRMk0sutj1bMVeg==} + dependencies: + vfile: 5.3.7 + vfile-message: 3.1.4 + dev: false + + /vfile@5.3.7: + resolution: {integrity: sha512-r7qlzkgErKjobAmyNIkkSpizsFPYiUPuJb5pNW1RB4JcYVZhs4lIbVqk8XPk033CV/1z8ss5pkax8SuhGpcG8g==} + dependencies: + '@types/unist': 2.0.9 + is-buffer: 2.0.5 + unist-util-stringify-position: 3.0.3 + vfile-message: 3.1.4 + dev: false + /vite-node@1.0.4(@types/node@20.10.4): resolution: {integrity: sha512-9xQQtHdsz5Qn8hqbV7UKqkm8YkJhzT/zr41Dmt5N7AlD8hJXw/Z7y0QiD5I8lnTthV9Rvcvi0QW7PI0Fq83ZPg==} engines: {node: ^18.0.0 || >=20.0.0} @@ -4975,6 +5908,10 @@ packages: typescript: 5.3.3 dev: true + /walk-up-path@3.0.1: + resolution: {integrity: sha512-9YlCL/ynK3CTlrSRrDxZvUauLzAswPCrsaCgilqFevUYpeEW0/3ScEjaa3kbW/T0ghhkEr7mv+fpjqn1Y1YuTA==} + dev: false + /webidl-conversions@4.0.2: resolution: {integrity: sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==} dev: true @@ -5065,7 +6002,6 @@ packages: ansi-styles: 6.2.1 string-width: 5.1.2 strip-ansi: 7.1.0 - dev: true /wrap-ansi@9.0.0: resolution: {integrity: sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==} @@ -5122,7 +6058,6 @@ packages: /yaml@2.3.4: resolution: {integrity: sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA==} engines: {node: '>= 14'} - dev: true /yargs-parser@21.1.1: resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} @@ -5149,3 +6084,7 @@ packages: /yocto-queue@1.0.0: resolution: {integrity: sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==} engines: {node: '>=12.20'} + + /zwitch@2.0.4: + resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==} + dev: false diff --git a/src/configs/formatters.ts b/src/configs/formatters.ts index 49ef5fae22..4877e381eb 100644 --- a/src/configs/formatters.ts +++ b/src/configs/formatters.ts @@ -1,17 +1,26 @@ import * as parserPlain from 'eslint-parser-plain' -import { GLOB_CSS, GLOB_LESS, GLOB_MARKDOWN, GLOB_POSTCSS, GLOB_SCSS } from '../globs' +import { + GLOB_CSS, + GLOB_LESS, + GLOB_MARKDOWN, + GLOB_MDX, + GLOB_POSTCSS, + GLOB_SCSS, +} from '../globs' import type { VendoredPrettierOptions } from '../vender/prettier-types' import { ensurePackages, interopDefault } from '../utils' -import type { FlatConfigItem, OptionsFormatters, StylisticConfig } from '../types' +import type { + FlatConfigItem, + OptionsFormatters, + StylisticConfig, +} from '../types' import { StylisticConfigDefaults } from './stylistic' export async function formatters( options: OptionsFormatters | true = {}, stylistic: StylisticConfig = {}, ): Promise { - await ensurePackages([ - 'eslint-plugin-format', - ]) + await ensurePackages(['eslint-plugin-format']) if (options === true) { options = { @@ -23,11 +32,7 @@ export async function formatters( } } - const { - indent, - quotes, - semi, - } = { + const { indent, quotes, semi } = { ...StylisticConfigDefaults, ...stylistic, } @@ -156,32 +161,43 @@ export async function formatters( } if (options.markdown) { - const formater = options.markdown === true - ? 'prettier' - : options.markdown + const formatter = options.markdown === true ? 'prettier' : options.markdown - configs.push({ - files: [GLOB_MARKDOWN], - languageOptions: { - parser: parserPlain, + configs.push( + { + files: [GLOB_MARKDOWN], + name: 'antfu:formatter:markdown', + rules: { + [`format/${formatter}`]: [ + 'error', + formatter === 'prettier' + ? { + ...prettierOptions, + embeddedLanguageFormatting: 'off', + parser: 'markdown', + } + : { + ...dprintOptions, + language: 'markdown', + }, + ], + }, }, - name: 'antfu:formatter:markdown', - rules: { - [`format/${formater}`]: [ - 'error', - formater === 'prettier' - ? { - ...prettierOptions, - embeddedLanguageFormatting: 'off', - parser: 'markdown', - } - : { - ...dprintOptions, - language: 'markdown', - }, - ], + { + files: [GLOB_MDX], + name: 'antfu:formatter:mdx', + rules: { + [`format/${formatter}`]: [ + 'error', + { + ...prettierOptions, + embeddedLanguageFormatting: 'off', + parser: 'mdx', + }, + ], + }, }, - }) + ) } if (options.graphql) { diff --git a/src/configs/markdown.ts b/src/configs/markdown.ts index 8163057c47..0b553bab26 100644 --- a/src/configs/markdown.ts +++ b/src/configs/markdown.ts @@ -1,51 +1,36 @@ -import * as parserPlain from 'eslint-parser-plain' -import { mergeProcessors, processorPassThrough } from 'eslint-merge-processors' -import type { FlatConfigItem, OptionsComponentExts, OptionsFiles, OptionsOverrides } from '../types' -import { GLOB_MARKDOWN, GLOB_MARKDOWN_CODE, GLOB_MARKDOWN_IN_MARKDOWN } from '../globs' -import { interopDefault } from '../utils' +import * as mdx from 'eslint-plugin-mdx' + +import type { + FlatConfigItem, + OptionsComponentExts, + OptionsFiles, + OptionsOverrides, +} from '../types' +import { GLOB_MARKDOWN_CODE, GLOB_MARKDOWN_OR_MDX } from '../globs' export async function markdown( options: OptionsFiles & OptionsComponentExts & OptionsOverrides = {}, ): Promise { - const { - componentExts = [], - files = [GLOB_MARKDOWN], - overrides = {}, - } = options - - // @ts-expect-error missing types - const markdown = await interopDefault(import('eslint-plugin-markdown')) + const { componentExts = [], overrides = {} } = options return [ { - name: 'antfu:markdown:setup', - plugins: { - markdown, - }, - }, - { - files, - ignores: [GLOB_MARKDOWN_IN_MARKDOWN], - name: 'antfu:markdown:processor', - // `eslint-plugin-markdown` only creates virtual files for code blocks, - // but not the markdown file itself. We use `eslint-merge-processors` to - // add a pass-through processor for the markdown file itself. - processor: mergeProcessors([ - markdown.processors.markdown, - processorPassThrough, - ]), - }, - { - files, - languageOptions: { - parser: parserPlain, + name: 'antfu:markdown-mdx', + ...(mdx.flat as FlatConfigItem), + processor: mdx.createRemarkProcessor({ + lintCodeBlocks: true, + }), + rules: { + ...mdx.flat.rules, + 'style/indent': 'off', }, - name: 'antfu:markdown:parser', }, { + name: 'antfu:markdown-mdx:code-blocks', + ...(mdx.flatCodeBlocks as FlatConfigItem), files: [ GLOB_MARKDOWN_CODE, - ...componentExts.map(ext => `${GLOB_MARKDOWN}/**/*.${ext}`), + ...componentExts.map(ext => `${GLOB_MARKDOWN_OR_MDX}/**/*.${ext}`), ], languageOptions: { parserOptions: { @@ -54,8 +39,9 @@ export async function markdown( }, }, }, - name: 'antfu:markdown:disables', rules: { + ...mdx.flatCodeBlocks.rules, + 'import/newline-after-import': 'off', 'no-alert': 'off', diff --git a/src/globs.ts b/src/globs.ts index a770605104..9361234f8a 100644 --- a/src/globs.ts +++ b/src/globs.ts @@ -18,12 +18,14 @@ export const GLOB_JSON5 = '**/*.json5' export const GLOB_JSONC = '**/*.jsonc' export const GLOB_MARKDOWN = '**/*.md' -export const GLOB_MARKDOWN_IN_MARKDOWN = '**/*.md/*.md' +export const GLOB_MDX = '**/*.mdx' +export const GLOB_MARKDOWN_OR_MDX = '**/*.mdx?' +export const GLOB_MARKDOWN_OR_MDX_IN_MARKDOWN_OR_MDX = '**/*.mdx?/*.mdx?' export const GLOB_VUE = '**/*.vue' export const GLOB_YAML = '**/*.y?(a)ml' export const GLOB_HTML = '**/*.htm?(l)' -export const GLOB_MARKDOWN_CODE = `${GLOB_MARKDOWN}/${GLOB_SRC}` +export const GLOB_MARKDOWN_CODE = `${GLOB_MARKDOWN_OR_MDX}/${GLOB_SRC}` export const GLOB_TESTS = [ `**/__tests__/**/*.${GLOB_SRC_EXT}`, @@ -38,7 +40,7 @@ export const GLOB_ALL_SRC = [ GLOB_STYLE, GLOB_JSON, GLOB_JSON5, - GLOB_MARKDOWN, + GLOB_MARKDOWN_OR_MDX, GLOB_VUE, GLOB_YAML, GLOB_HTML, From 336e45333c54b3aee80f590fe2ef28898913628d Mon Sep 17 00:00:00 2001 From: JounQin Date: Sat, 9 Dec 2023 00:12:24 +0800 Subject: [PATCH 2/8] chore: reformat --- src/configs/formatters.ts | 29 +++++++++++++---------------- src/configs/markdown.ts | 12 +++++------- src/globs.ts | 4 ++-- 3 files changed, 20 insertions(+), 25 deletions(-) diff --git a/src/configs/formatters.ts b/src/configs/formatters.ts index 4877e381eb..53afaf1715 100644 --- a/src/configs/formatters.ts +++ b/src/configs/formatters.ts @@ -1,26 +1,17 @@ import * as parserPlain from 'eslint-parser-plain' -import { - GLOB_CSS, - GLOB_LESS, - GLOB_MARKDOWN, - GLOB_MDX, - GLOB_POSTCSS, - GLOB_SCSS, -} from '../globs' +import { GLOB_CSS, GLOB_LESS, GLOB_MARKDOWN, GLOB_MDX, GLOB_POSTCSS, GLOB_SCSS } from '../globs' import type { VendoredPrettierOptions } from '../vender/prettier-types' import { ensurePackages, interopDefault } from '../utils' -import type { - FlatConfigItem, - OptionsFormatters, - StylisticConfig, -} from '../types' +import type { FlatConfigItem, OptionsFormatters, StylisticConfig } from '../types' import { StylisticConfigDefaults } from './stylistic' export async function formatters( options: OptionsFormatters | true = {}, stylistic: StylisticConfig = {}, ): Promise { - await ensurePackages(['eslint-plugin-format']) + await ensurePackages([ + 'eslint-plugin-format', + ]) if (options === true) { options = { @@ -32,7 +23,11 @@ export async function formatters( } } - const { indent, quotes, semi } = { + const { + indent, + quotes, + semi, + } = { ...StylisticConfigDefaults, ...stylistic, } @@ -161,7 +156,9 @@ export async function formatters( } if (options.markdown) { - const formatter = options.markdown === true ? 'prettier' : options.markdown + const formatter = options.markdown === true + ? 'prettier' + : options.markdown configs.push( { diff --git a/src/configs/markdown.ts b/src/configs/markdown.ts index 0b553bab26..6043db5f56 100644 --- a/src/configs/markdown.ts +++ b/src/configs/markdown.ts @@ -1,17 +1,15 @@ import * as mdx from 'eslint-plugin-mdx' -import type { - FlatConfigItem, - OptionsComponentExts, - OptionsFiles, - OptionsOverrides, -} from '../types' +import type { FlatConfigItem, OptionsComponentExts, OptionsFiles, OptionsOverrides } from '../types' import { GLOB_MARKDOWN_CODE, GLOB_MARKDOWN_OR_MDX } from '../globs' export async function markdown( options: OptionsFiles & OptionsComponentExts & OptionsOverrides = {}, ): Promise { - const { componentExts = [], overrides = {} } = options + const { + componentExts = [], + overrides = {}, + } = options return [ { diff --git a/src/globs.ts b/src/globs.ts index 9361234f8a..aa7a89fe78 100644 --- a/src/globs.ts +++ b/src/globs.ts @@ -19,8 +19,8 @@ export const GLOB_JSONC = '**/*.jsonc' export const GLOB_MARKDOWN = '**/*.md' export const GLOB_MDX = '**/*.mdx' -export const GLOB_MARKDOWN_OR_MDX = '**/*.mdx?' -export const GLOB_MARKDOWN_OR_MDX_IN_MARKDOWN_OR_MDX = '**/*.mdx?/*.mdx?' +export const GLOB_MARKDOWN_OR_MDX = '**/*.md?(x)' +export const GLOB_MARKDOWN_OR_MDX_IN_MARKDOWN_OR_MDX = '**/*.md?(x)/*.md?(x)' export const GLOB_VUE = '**/*.vue' export const GLOB_YAML = '**/*.y?(a)ml' export const GLOB_HTML = '**/*.htm?(l)' From 3a06978e44f64b37ba2a237f1e3c7d4dec03cdbb Mon Sep 17 00:00:00 2001 From: Anthony Fu Date: Mon, 11 Dec 2023 09:09:21 +0100 Subject: [PATCH 3/8] chore: update --- src/configs/markdown.ts | 34 +++++++++++++++++++++++++--------- src/globs.ts | 4 ++-- 2 files changed, 27 insertions(+), 11 deletions(-) diff --git a/src/configs/markdown.ts b/src/configs/markdown.ts index 6043db5f56..221c2df6a0 100644 --- a/src/configs/markdown.ts +++ b/src/configs/markdown.ts @@ -1,5 +1,3 @@ -import * as mdx from 'eslint-plugin-mdx' - import type { FlatConfigItem, OptionsComponentExts, OptionsFiles, OptionsOverrides } from '../types' import { GLOB_MARKDOWN_CODE, GLOB_MARKDOWN_OR_MDX } from '../globs' @@ -11,21 +9,40 @@ export async function markdown( overrides = {}, } = options + const [ + mdx, + mdxParser, + ] = await Promise.all([ + // @ts-expect-error missing types + import('eslint-plugin-mdx'), + import('eslint-mdx'), + ]) + return [ { - name: 'antfu:markdown-mdx', - ...(mdx.flat as FlatConfigItem), + files: ['**/*.{md,mdx}'], + languageOptions: { + ecmaVersion: 'latest', + globals: { + React: false, + }, + parser: mdxParser, + sourceType: 'module', + }, + name: 'antfu:markdown-mdx:setup', + plugins: { + mdx, + }, processor: mdx.createRemarkProcessor({ lintCodeBlocks: true, }), rules: { - ...mdx.flat.rules, + 'mdx/remark': 'warn', + 'no-unused-expressions': 'error', 'style/indent': 'off', }, }, { - name: 'antfu:markdown-mdx:code-blocks', - ...(mdx.flatCodeBlocks as FlatConfigItem), files: [ GLOB_MARKDOWN_CODE, ...componentExts.map(ext => `${GLOB_MARKDOWN_OR_MDX}/**/*.${ext}`), @@ -37,9 +54,8 @@ export async function markdown( }, }, }, + name: 'antfu:markdown-mdx:code-blocks', rules: { - ...mdx.flatCodeBlocks.rules, - 'import/newline-after-import': 'off', 'no-alert': 'off', diff --git a/src/globs.ts b/src/globs.ts index 721e8d74e1..69d98b90de 100644 --- a/src/globs.ts +++ b/src/globs.ts @@ -19,8 +19,8 @@ export const GLOB_JSONC = '**/*.jsonc' export const GLOB_MARKDOWN = '**/*.md' export const GLOB_MDX = '**/*.mdx' -export const GLOB_MARKDOWN_OR_MDX = '**/*.md?(x)' -export const GLOB_MARKDOWN_OR_MDX_IN_MARKDOWN_OR_MDX = '**/*.md?(x)/*.md?(x)' +export const GLOB_MARKDOWN_OR_MDX = '**/*.{md,mdx}' +export const GLOB_MARKDOWN_OR_MDX_IN_MARKDOWN_OR_MDX = '**/*.{md,mdx}/*.{md,mdx}' export const GLOB_VUE = '**/*.vue' export const GLOB_YAML = '**/*.y?(a)ml' export const GLOB_TOML = '**/*.toml' From d2cdaa253d95a6f6c6afbbfcc476c9339a67ac49 Mon Sep 17 00:00:00 2001 From: Anthony Fu Date: Mon, 11 Dec 2023 09:11:04 +0100 Subject: [PATCH 4/8] chore: revert readme --- README.md | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index a1a4ac8b2e..fc7b921a43 100644 --- a/README.md +++ b/README.md @@ -69,7 +69,7 @@ module.exports = antfu( 'eslint:recommended', // Other extends... ], - }), + }) // Other flat configs... ) @@ -193,7 +193,7 @@ export default antfu({ ignores: [ './fixtures', // ...globs - ], + ] }) ``` @@ -239,6 +239,8 @@ import { jsonc, markdown, node, + sortPackageJson, + sortTsconfig, stylistic, toml, typescript, @@ -315,7 +317,7 @@ export default antfu( rules: { 'style/semi': ['error', 'never'], }, - }, + } ) ``` @@ -335,7 +337,7 @@ export default antfu({ }, yaml: {}, // ... - }, + } }) ``` @@ -371,8 +373,8 @@ export default antfu({ * Supports Prettier and dprint * By default uses Prettier */ - markdown: 'prettier', - }, + markdown: 'prettier' + } }) ``` @@ -434,7 +436,7 @@ It's recommended to opt-in on each file individually using [configuration commen ```js /* eslint perfectionist/sort-objects: "error" */ -export const objectWantedToSort = { +const objectWantedToSort = { a: 2, b: 1, c: 3, From 0d18c9f2dba3ae286bd1d32dc87b257edb305af9 Mon Sep 17 00:00:00 2001 From: Anthony Fu Date: Mon, 11 Dec 2023 09:18:39 +0100 Subject: [PATCH 5/8] chore: update --- fixtures/input/mdx.mdx | 41 +++++++++++++++++++++++ src/configs/formatters.ts | 68 ++++++++++++++++++++------------------- src/configs/markdown.ts | 3 +- src/types.ts | 7 ++++ 4 files changed, 84 insertions(+), 35 deletions(-) create mode 100644 fixtures/input/mdx.mdx diff --git a/fixtures/input/mdx.mdx b/fixtures/input/mdx.mdx new file mode 100644 index 0000000000..ba32587b11 --- /dev/null +++ b/fixtures/input/mdx.mdx @@ -0,0 +1,41 @@ +import { Baz } from './Fixture' +import { Buz } from './Fixture' + +export const foo = { + hi: `Fudge ${Baz.displayName || 'Baz'}`, + authors: [ + 'fred', + 'sally' + ] +} + +# Hello, world! + + + I'm an awesome paragraph. + + + + + hi + { hello } + { /* another comment */} + + +``` +test codeblock +``` + +```js +module.exports = 'test' +``` + +```sh +npm i -g foo +``` + +| Test | Table | +| :--- | :---- | +| Col1 | Col2 | + +export default ({children }) => < div>{ children} diff --git a/src/configs/formatters.ts b/src/configs/formatters.ts index 31add428b1..4f5c444f43 100644 --- a/src/configs/formatters.ts +++ b/src/configs/formatters.ts @@ -19,6 +19,7 @@ export async function formatters( graphql: true, html: true, markdown: true, + mdx: true, } } @@ -140,41 +141,42 @@ export async function formatters( ? 'prettier' : options.markdown - configs.push( - { - files: [GLOB_MARKDOWN], - name: 'antfu:formatter:markdown', - rules: { - [`format/${formatter}`]: [ - 'error', - formatter === 'prettier' - ? { - ...prettierOptions, - embeddedLanguageFormatting: 'off', - parser: 'markdown', - } - : { - ...dprintOptions, - language: 'markdown', - }, - ], - }, + configs.push({ + files: [GLOB_MARKDOWN], + name: 'antfu:formatter:markdown', + rules: { + [`format/${formatter}`]: [ + 'error', + formatter === 'prettier' + ? { + ...prettierOptions, + embeddedLanguageFormatting: 'off', + parser: 'markdown', + } + : { + ...dprintOptions, + language: 'markdown', + }, + ], }, - { - files: [GLOB_MDX], - name: 'antfu:formatter:mdx', - rules: { - [`format/${formatter}`]: [ - 'error', - { - ...prettierOptions, - embeddedLanguageFormatting: 'off', - parser: 'mdx', - }, - ], - }, + }) + } + + if (options.mdx) { + configs.push({ + files: [GLOB_MDX], + name: 'antfu:formatter:mdx', + rules: { + 'format/prettier': [ + 'error', + { + ...prettierOptions, + embeddedLanguageFormatting: 'off', + parser: 'mdx', + }, + ], }, - ) + }) } if (options.graphql) { diff --git a/src/configs/markdown.ts b/src/configs/markdown.ts index 221c2df6a0..b79e51582f 100644 --- a/src/configs/markdown.ts +++ b/src/configs/markdown.ts @@ -13,14 +13,13 @@ export async function markdown( mdx, mdxParser, ] = await Promise.all([ - // @ts-expect-error missing types import('eslint-plugin-mdx'), import('eslint-mdx'), ]) return [ { - files: ['**/*.{md,mdx}'], + files: [GLOB_MARKDOWN_OR_MDX], languageOptions: { ecmaVersion: 'latest', globals: { diff --git a/src/types.ts b/src/types.ts index f7b522db33..c9daa9982f 100644 --- a/src/types.ts +++ b/src/types.ts @@ -121,6 +121,13 @@ export interface OptionsFormatters { */ markdown?: 'prettier' | 'dprint' | boolean + /** + * Enable formatting support for MDX. + * + * Currently only support Prettier. + */ + mdx?: 'prettier' | boolean + /** * Enable formatting support for GraphQL. */ From 921883a068cf16829cb672ce9f6c83b4efa99d58 Mon Sep 17 00:00:00 2001 From: Anthony Fu Date: Mon, 11 Dec 2023 09:23:41 +0100 Subject: [PATCH 6/8] chore: fix bundling --- src/configs/markdown.ts | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/src/configs/markdown.ts b/src/configs/markdown.ts index b79e51582f..f910b82e65 100644 --- a/src/configs/markdown.ts +++ b/src/configs/markdown.ts @@ -1,3 +1,4 @@ +import { interopDefault } from '../utils' import type { FlatConfigItem, OptionsComponentExts, OptionsFiles, OptionsOverrides } from '../types' import { GLOB_MARKDOWN_CODE, GLOB_MARKDOWN_OR_MDX } from '../globs' @@ -9,13 +10,7 @@ export async function markdown( overrides = {}, } = options - const [ - mdx, - mdxParser, - ] = await Promise.all([ - import('eslint-plugin-mdx'), - import('eslint-mdx'), - ]) + const mdx = await interopDefault(import('eslint-plugin-mdx')) return [ { @@ -25,7 +20,7 @@ export async function markdown( globals: { React: false, }, - parser: mdxParser, + parser: mdx.configs.flat.languageOptions!.parser, sourceType: 'module', }, name: 'antfu:markdown-mdx:setup', From b6114b4750ca8fdb6dbd16146d7cc5d91d70fd45 Mon Sep 17 00:00:00 2001 From: Anthony Fu Date: Mon, 11 Dec 2023 11:57:05 +0100 Subject: [PATCH 7/8] fix: markdown plain parser --- fixtures/input/mdx.mdx | 4 +- fixtures/output/all/markdown.md | 1 + fixtures/output/all/mdx.mdx | 42 +++++++++++++++++++ fixtures/output/js/markdown.md | 1 + fixtures/output/js/mdx.mdx | 42 +++++++++++++++++++ fixtures/output/no-style/mdx.mdx | 42 +++++++++++++++++++ fixtures/output/tab-double-quotes/markdown.md | 1 + fixtures/output/tab-double-quotes/mdx.mdx | 42 +++++++++++++++++++ fixtures/output/ts-override/markdown.md | 1 + fixtures/output/ts-override/mdx.mdx | 42 +++++++++++++++++++ fixtures/output/with-formatters/mdx.mdx | 41 ++++++++++++++++++ src/configs/formatters.ts | 7 ++++ src/configs/markdown.ts | 1 - src/configs/stylistic.ts | 4 ++ src/factory.ts | 1 + 15 files changed, 270 insertions(+), 2 deletions(-) create mode 100644 fixtures/output/all/mdx.mdx create mode 100644 fixtures/output/js/mdx.mdx create mode 100644 fixtures/output/no-style/mdx.mdx create mode 100644 fixtures/output/tab-double-quotes/mdx.mdx create mode 100644 fixtures/output/ts-override/mdx.mdx create mode 100644 fixtures/output/with-formatters/mdx.mdx diff --git a/fixtures/input/mdx.mdx b/fixtures/input/mdx.mdx index ba32587b11..7711c8f922 100644 --- a/fixtures/input/mdx.mdx +++ b/fixtures/input/mdx.mdx @@ -9,12 +9,14 @@ export const foo = { ] } +export const hello = 'hello' + # Hello, world! I'm an awesome paragraph. - +{ /* I'm a comment */ } hi diff --git a/fixtures/output/all/markdown.md b/fixtures/output/all/markdown.md index 84fde3498c..f6df362d02 100644 --- a/fixtures/output/all/markdown.md +++ b/fixtures/output/all/markdown.md @@ -27,6 +27,7 @@ Jane Roe|JFK|314 + with a [link] (/to/somewhere) + and [another one] + [another one]: http://example.com 'Example title' Lorem ipsum dolor sit amet, consectetur adipiscing elit. diff --git a/fixtures/output/all/mdx.mdx b/fixtures/output/all/mdx.mdx new file mode 100644 index 0000000000..7e56a00764 --- /dev/null +++ b/fixtures/output/all/mdx.mdx @@ -0,0 +1,42 @@ +import { Baz } from './Fixture' + +export const foo = { + hi: `Fudge ${Baz.displayName || 'Baz'}`, + authors: [ + 'fred', + 'sally' + ] +} + +export const hello = 'hello' + +# Hello, world! + + + I'm an awesome paragraph. + +{ /* I'm a comment */ } + + + hi + { hello } + { /* another comment */} + + +``` +test codeblock +``` + +```js +module.exports = 'test' +``` + +```sh +npm i -g foo +``` + +| Test | Table | +| :--- | :---- | +| Col1 | Col2 | + +export default ({children }) => < div>{ children} diff --git a/fixtures/output/js/markdown.md b/fixtures/output/js/markdown.md index 84fde3498c..f6df362d02 100644 --- a/fixtures/output/js/markdown.md +++ b/fixtures/output/js/markdown.md @@ -27,6 +27,7 @@ Jane Roe|JFK|314 + with a [link] (/to/somewhere) + and [another one] + [another one]: http://example.com 'Example title' Lorem ipsum dolor sit amet, consectetur adipiscing elit. diff --git a/fixtures/output/js/mdx.mdx b/fixtures/output/js/mdx.mdx new file mode 100644 index 0000000000..7e56a00764 --- /dev/null +++ b/fixtures/output/js/mdx.mdx @@ -0,0 +1,42 @@ +import { Baz } from './Fixture' + +export const foo = { + hi: `Fudge ${Baz.displayName || 'Baz'}`, + authors: [ + 'fred', + 'sally' + ] +} + +export const hello = 'hello' + +# Hello, world! + + + I'm an awesome paragraph. + +{ /* I'm a comment */ } + + + hi + { hello } + { /* another comment */} + + +``` +test codeblock +``` + +```js +module.exports = 'test' +``` + +```sh +npm i -g foo +``` + +| Test | Table | +| :--- | :---- | +| Col1 | Col2 | + +export default ({children }) => < div>{ children} diff --git a/fixtures/output/no-style/mdx.mdx b/fixtures/output/no-style/mdx.mdx new file mode 100644 index 0000000000..7e56a00764 --- /dev/null +++ b/fixtures/output/no-style/mdx.mdx @@ -0,0 +1,42 @@ +import { Baz } from './Fixture' + +export const foo = { + hi: `Fudge ${Baz.displayName || 'Baz'}`, + authors: [ + 'fred', + 'sally' + ] +} + +export const hello = 'hello' + +# Hello, world! + + + I'm an awesome paragraph. + +{ /* I'm a comment */ } + + + hi + { hello } + { /* another comment */} + + +``` +test codeblock +``` + +```js +module.exports = 'test' +``` + +```sh +npm i -g foo +``` + +| Test | Table | +| :--- | :---- | +| Col1 | Col2 | + +export default ({children }) => < div>{ children} diff --git a/fixtures/output/tab-double-quotes/markdown.md b/fixtures/output/tab-double-quotes/markdown.md index 70cffff3ad..5f35622ca9 100644 --- a/fixtures/output/tab-double-quotes/markdown.md +++ b/fixtures/output/tab-double-quotes/markdown.md @@ -27,6 +27,7 @@ Jane Roe|JFK|314 + with a [link] (/to/somewhere) + and [another one] + [another one]: http://example.com 'Example title' Lorem ipsum dolor sit amet, consectetur adipiscing elit. diff --git a/fixtures/output/tab-double-quotes/mdx.mdx b/fixtures/output/tab-double-quotes/mdx.mdx new file mode 100644 index 0000000000..c53f5aaa07 --- /dev/null +++ b/fixtures/output/tab-double-quotes/mdx.mdx @@ -0,0 +1,42 @@ +import { Baz } from './Fixture' + +export const foo = { + hi: `Fudge ${Baz.displayName || 'Baz'}`, + authors: [ + 'fred', + 'sally' + ] +} + +export const hello = 'hello' + +# Hello, world! + + + I'm an awesome paragraph. + +{ /* I'm a comment */ } + + + hi + { hello } + { /* another comment */} + + +``` +test codeblock +``` + +```js +module.exports = "test" +``` + +```sh +npm i -g foo +``` + +| Test | Table | +| :--- | :---- | +| Col1 | Col2 | + +export default ({children }) => < div>{ children} diff --git a/fixtures/output/ts-override/markdown.md b/fixtures/output/ts-override/markdown.md index 84fde3498c..f6df362d02 100644 --- a/fixtures/output/ts-override/markdown.md +++ b/fixtures/output/ts-override/markdown.md @@ -27,6 +27,7 @@ Jane Roe|JFK|314 + with a [link] (/to/somewhere) + and [another one] + [another one]: http://example.com 'Example title' Lorem ipsum dolor sit amet, consectetur adipiscing elit. diff --git a/fixtures/output/ts-override/mdx.mdx b/fixtures/output/ts-override/mdx.mdx new file mode 100644 index 0000000000..7e56a00764 --- /dev/null +++ b/fixtures/output/ts-override/mdx.mdx @@ -0,0 +1,42 @@ +import { Baz } from './Fixture' + +export const foo = { + hi: `Fudge ${Baz.displayName || 'Baz'}`, + authors: [ + 'fred', + 'sally' + ] +} + +export const hello = 'hello' + +# Hello, world! + + + I'm an awesome paragraph. + +{ /* I'm a comment */ } + + + hi + { hello } + { /* another comment */} + + +``` +test codeblock +``` + +```js +module.exports = 'test' +``` + +```sh +npm i -g foo +``` + +| Test | Table | +| :--- | :---- | +| Col1 | Col2 | + +export default ({children }) => < div>{ children} diff --git a/fixtures/output/with-formatters/mdx.mdx b/fixtures/output/with-formatters/mdx.mdx new file mode 100644 index 0000000000..3b26caa6ae --- /dev/null +++ b/fixtures/output/with-formatters/mdx.mdx @@ -0,0 +1,41 @@ +import { Baz } from './Fixture' + +export const foo = { + hi: `Fudge ${Baz.displayName || 'Baz'}`, + authors: [ + 'fred', + 'sally' + ] +} + +export const hello = 'hello' + +# Hello, world! + +I'm an awesome paragraph. + +{/* I'm a comment */} + + + hi + { hello } + { /* another comment */} + + +``` +test codeblock +``` + +```js +module.exports = 'test' +``` + +```sh +npm i -g foo +``` + +| Test | Table | +| :--- | :---- | +| Col1 | Col2 | + +export default ({children }) => < div>{ children} diff --git a/src/configs/formatters.ts b/src/configs/formatters.ts index 4f5c444f43..0ceb8f018c 100644 --- a/src/configs/formatters.ts +++ b/src/configs/formatters.ts @@ -8,6 +8,7 @@ import { StylisticConfigDefaults } from './stylistic' export async function formatters( options: OptionsFormatters | true = {}, stylistic: StylisticConfig = {}, + markdownParserEnabled = true, ): Promise { await ensurePackages([ 'eslint-plugin-format', @@ -143,6 +144,9 @@ export async function formatters( configs.push({ files: [GLOB_MARKDOWN], + languageOptions: markdownParserEnabled + ? {} + : { parser: parserPlain }, name: 'antfu:formatter:markdown', rules: { [`format/${formatter}`]: [ @@ -165,6 +169,9 @@ export async function formatters( if (options.mdx) { configs.push({ files: [GLOB_MDX], + languageOptions: markdownParserEnabled + ? {} + : { parser: parserPlain }, name: 'antfu:formatter:mdx', rules: { 'format/prettier': [ diff --git a/src/configs/markdown.ts b/src/configs/markdown.ts index f910b82e65..87ef6c1992 100644 --- a/src/configs/markdown.ts +++ b/src/configs/markdown.ts @@ -33,7 +33,6 @@ export async function markdown( rules: { 'mdx/remark': 'warn', 'no-unused-expressions': 'error', - 'style/indent': 'off', }, }, { diff --git a/src/configs/stylistic.ts b/src/configs/stylistic.ts index ef22f5359d..63fd4ba7f8 100644 --- a/src/configs/stylistic.ts +++ b/src/configs/stylistic.ts @@ -1,3 +1,4 @@ +import { GLOB_MARKDOWN_OR_MDX } from '../globs' import { interopDefault } from '../utils' import type { FlatConfigItem, StylisticConfig } from '../types' import { pluginAntfu } from '../plugins' @@ -33,6 +34,9 @@ export async function stylistic(options: StylisticConfig = {}): Promise Date: Mon, 11 Dec 2023 13:13:21 +0100 Subject: [PATCH 8/8] fix: workaround eslint-mdx parser --- README.md | 133 +++++++++--------- eslint.config.ts | 8 ++ fixtures/input/mdx.mdx | 2 +- fixtures/output/all/markdown.md | 1 - fixtures/output/all/mdx.mdx | 25 ++-- fixtures/output/js/markdown.md | 1 - fixtures/output/js/mdx.mdx | 25 ++-- fixtures/output/no-style/mdx.mdx | 2 +- fixtures/output/tab-double-quotes/markdown.md | 1 - fixtures/output/tab-double-quotes/mdx.mdx | 31 ++-- fixtures/output/ts-override/markdown.md | 1 - fixtures/output/ts-override/mdx.mdx | 25 ++-- fixtures/output/with-formatters/mdx.mdx | 24 ++-- package.json | 1 + pnpm-lock.yaml | 17 +++ src/configs/markdown.ts | 35 ++++- src/configs/stylistic.ts | 4 - 17 files changed, 193 insertions(+), 143 deletions(-) diff --git a/README.md b/README.md index fc7b921a43..b90c6b4287 100644 --- a/README.md +++ b/README.md @@ -1,32 +1,33 @@ -# @antfu/eslint-config +@antfu/eslint-config -[![npm](https://img.shields.io/npm/v/@antfu/eslint-config?color=444&label=)](https://npmjs.com/package/@antfu/eslint-config) [![code style](https://antfu.me/badge-code-style.svg)](https://github.com/antfu/eslint-config) +[![code style](https://antfu.me/badge-code-style.svg)](https://github.com/antfu/eslint-config) + +Single quotes, no semi +Auto fix for formatting (aimed to be used standalone **without** Prettier) +Designed to work with TypeScript, JSX, Vue out-of-box +Lints also for json, yaml, toml, markdown +Sorted imports, dangling commas +Reasonable defaults, best practices, only one-line of config +Opinionated, but [very customizable](#customization) +ESLint Flat config](https://eslint.org/docs/latest/use/configure/configuration-files-new), compose easily! +Using [ESLint Stylistic](https://github.com/eslint-stylistic/eslint-stylistic) +Respects `.gitignore` by default +Optional [formatters](#formatters) support for CSS, HTML, etc. +Style principle\*\*: Minimal for reading, stable for diff, consistent -- Single quotes, no semi -- Auto fix for formatting (aimed to be used standalone **without** Prettier) -- Designed to work with TypeScript, JSX, Vue out-of-box -- Lints also for json, yaml, toml, markdown -- Sorted imports, dangling commas -- Reasonable defaults, best practices, only one-line of config -- Opinionated, but [very customizable](#customization) -- [ESLint Flat config](https://eslint.org/docs/latest/use/configure/configuration-files-new), compose easily! -- Using [ESLint Stylistic](https://github.com/eslint-stylistic/eslint-stylistic) -- Respects `.gitignore` by default -- Optional [formatters](#formatters) support for CSS, HTML, etc. -- **Style principle**: Minimal for reading, stable for diff, consistent +[!IMPORTANT] -> [!IMPORTANT] -> Since v1.0.0, this config is rewritten to the new [ESLint Flat config](https://eslint.org/docs/latest/use/configure/configuration-files-new), check the [release note](https://github.com/antfu/eslint-config/releases/tag/v1.0.0) for more details. +Since v1.0.0, this config is rewritten to the new [ESLint Flat config](https://eslint.org/docs/latest/use/configure/configuration-files-new), check the [release note](https://github.com/antfu/eslint-config/releases/tag/v1.0.0) for more details. -## Usage +Usage -### Install +Install ```bash pnpm i -D eslint @antfu/eslint-config ``` -### Create config file +Create config file With [`"type": "module"`](https://nodejs.org/api/packages.html#type) in `package.json` (recommended): @@ -46,8 +47,9 @@ const antfu = require('@antfu/eslint-config').default module.exports = antfu() ``` -> [!TIP] -> ESLint only detects `eslint.config.js` as the flat config entry, meaning you need to put `type: module` in your `package.json` or you have to use CJS in `eslint.config.js`. If you want explicit extension like `.mjs` or `.cjs`, or even `eslint.config.ts`, you can install [`eslint-ts-patch`](https://github.com/antfu/eslint-ts-patch) to fix it. +[!TIP] + +ESLint only detects `eslint.config.js` as the flat config entry, meaning you need to put `type: module` in your `package.json` or you have to use CJS in `eslint.config.js`. If you want explicit extension like `.mjs` or `.cjs`, or even `eslint.config.ts`, you can install [`eslint-ts-patch`](https://github.com/antfu/eslint-ts-patch) to fix it. Combined with legacy config: @@ -75,9 +77,9 @@ module.exports = antfu( ) ``` -> Note that `.eslintignore` no longer works in Flat config, see [customization](#customization) for more details. +Note that `.eslintignore` no longer works in Flat config, see [customization](#customization) for more details. -### Add script for package.json +Add script for package.json For example: @@ -90,7 +92,7 @@ For example: } ``` -### Migration +Migration We provided an experimental CLI tool to help you migrate from the legacy config to the new flat config. @@ -100,7 +102,7 @@ npx @antfu/eslint-config@latest Before running the migration, make sure to commit your unsaved changes first. -## VS Code support (auto fix) +VS Code support (auto fix) Install [VS Code ESLint extension](https://marketplace.visualstudio.com/items?itemName=dbaeumer.vscode-eslint) @@ -152,7 +154,7 @@ Add the following settings to your `.vscode/settings.json`: } ``` -## Customization +Customization Since v1.0, we migrated to [ESLint Flat config](https://eslint.org/docs/latest/use/configure/configuration-files-new). It provides much better organization and composition. @@ -271,9 +273,9 @@ export default combine( Check out the [configs](https://github.com/antfu/eslint-config/blob/main/src/configs) and [factory](https://github.com/antfu/eslint-config/blob/main/src/factory.ts) for more details. -> Thanks to [sxzz/eslint-config](https://github.com/sxzz/eslint-config) for the inspiration and reference. +Thanks to [sxzz/eslint-config](https://github.com/sxzz/eslint-config) for the inspiration and reference. -### Plugins Renaming +Plugins Renaming Since flat config requires us to explicitly provide the plugin names (instead of the mandatory convention from npm package name), we renamed some plugins to make the overall scope more consistent and easier to write. @@ -295,7 +297,7 @@ When you want to override rules, or disable them inline, you need to update to t type foo = { bar: 2 } ``` -### Rules Overrides +Rules Overrides Certain rules would only be enabled in specific files, for example, `ts/*` rules would only be enabled in `.ts` files and `vue/*` rules would only be enabled in `.vue` files. If you want to override the rules, you need to specify the file extension: @@ -341,14 +343,15 @@ export default antfu({ }) ``` -### Optional Configs +Optional Configs We provide some optional configs for specific use cases, that we don't include their dependencies by default. -#### Formatters +Formatters + +[!WARNING] -> [!WARNING] -> Experimental feature, changes might not follow semver. +Experimental feature, changes might not follow semver. Use external formatters to format files that ESLint cannot handle yet (`.css`, `.html`, etc). Powered by [`eslint-plugin-format`](https://github.com/antfu/eslint-plugin-format). @@ -384,7 +387,7 @@ Running `npx eslint` should prompt you to install the required dependencies, oth npm i -D eslint-plugin-format ``` -#### React +React To enable React support, you need to explicitly turn it on: @@ -403,7 +406,7 @@ Running `npx eslint` should prompt you to install the required dependencies, oth npm i -D eslint-plugin-react eslint-plugin-react-hooks eslint-plugin-react-refresh ``` -#### UnoCSS +UnoCSS To enable UnoCSS support, you need to explicitly turn it on: @@ -422,11 +425,11 @@ Running `npx eslint` should prompt you to install the required dependencies, oth npm i -D @unocss/eslint-plugin ``` -### Optional Rules +Optional Rules This config also provides some optional plugins/rules for extended usages. -#### `perfectionist` (sorting) +(sorting) This plugin [`eslint-plugin-perfectionist`](https://github.com/azat-io/eslint-plugin-perfectionist) allows you to sorted object keys, imports, etc, with auto-fix. @@ -444,7 +447,7 @@ const objectWantedToSort = { /* eslint perfectionist/sort-objects: "off" */ ``` -### Type Aware Rules +Type Aware Rules You can optionally enable the [type aware rules](https://typescript-eslint.io/linting/typed-linting/) by passing the options object to the `typescript` config: @@ -459,7 +462,7 @@ export default antfu({ }) ``` -### Lint Staged +Lint Staged If you want to apply lint and auto-fix before every commit, you can add the following to your `package.json`: @@ -480,7 +483,7 @@ and then npm i -D lint-staged simple-git-hooks ``` -## View what rules are enabled +View what rules are enabled I built a visual tool to help you view what rules are enabled in your project and apply them to what files, [eslint-flat-config-viewer](https://github.com/antfu/eslint-flat-config-viewer) @@ -490,24 +493,24 @@ Go to your project root that contains `eslint.config.js` and run: npx eslint-flat-config-viewer ``` -## Versioning Policy +Versioning Policy This project follows [Semantic Versioning](https://semver.org/) for releases. However, since this is just a config and involves opinions and many moving parts, we don't treat rules changes as breaking changes. -### Changes Considered as Breaking Changes +Changes Considered as Breaking Changes -- Node.js version requirement changes -- Huge refactors that might break the config -- Plugins made major changes that might break the config -- Changes that might affect most of the codebases +Node.js version requirement changes +Huge refactors that might break the config +Plugins made major changes that might break the config +Changes that might affect most of the codebases -### Changes Considered as Non-breaking Changes +Changes Considered as Non-breaking Changes -- Enable/disable rules and plugins (that might become stricter) -- Rules options changes -- Version bumps of dependencies +Enable/disable rules and plugins (that might become stricter) +Rules options changes +Version bumps of dependencies -## Badge +Badge If you enjoy this code style, and would like to mention it in your project, here is the badge you can use: @@ -517,35 +520,35 @@ If you enjoy this code style, and would like to mention it in your project, here [![code style](https://antfu.me/badge-code-style.svg)](https://github.com/antfu/eslint-config) -## FAQ +FAQ -### Prettier? +Prettier? -[Why I don't use Prettier](https://antfu.me/posts/why-not-prettier) +Why I don't use Prettier](https://antfu.me/posts/why-not-prettier) Well, you can still use Prettier to format files that are not supported well by ESLint yet, such as `.css`, `.html`, etc. See [formatters](#formatters) for more details. -### dprint? +dprint? -[dprint](https://dprint.dev/) is also a great formatter that with more abilities to customize. However, it's in the same model as Prettier which reads the AST and reprints the code from scratch. This means it's similar to Prettier, which ignores the original line breaks and might also cause the inconsistent diff. So in general, we prefer to use ESLint to format and lint JavaScript/TypeScript code. +dprint](https://dprint.dev/) is also a great formatter that with more abilities to customize. However, it's in the same model as Prettier which reads the AST and reprints the code from scratch. This means it's similar to Prettier, which ignores the original line breaks and might also cause the inconsistent diff. So in general, we prefer to use ESLint to format and lint JavaScript/TypeScript code. Meanwhile, we do have dprint integrations for formatting other files such as `.md`. See [formatters](#formatters) for more details. -### How to format CSS? +How to format CSS? You can opt-in to the [`formatters`](#formatters) feature to format your CSS. Note that it's only doing formatting, but not linting. If you want proper linting support, give [`stylelint`](https://stylelint.io/) a try. -### I prefer XXX... +I prefer XXX... Sure, you can configure and override rules locally in your project to fit your needs. If that still does not work for you, you can always fork this repo and maintain your own. -## Check Also +Check Also -- [antfu/dotfiles](https://github.com/antfu/dotfiles) - My dotfiles -- [antfu/vscode-settings](https://github.com/antfu/vscode-settings) - My VS Code settings -- [antfu/starter-ts](https://github.com/antfu/starter-ts) - My starter template for TypeScript library -- [antfu/vitesse](https://github.com/antfu/vitesse) - My starter template for Vue & Vite app +antfu/dotfiles](https://github.com/antfu/dotfiles) - My dotfiles +antfu/vscode-settings](https://github.com/antfu/vscode-settings) - My VS Code settings +antfu/starter-ts](https://github.com/antfu/starter-ts) - My starter template for TypeScript library +antfu/vitesse](https://github.com/antfu/vitesse) - My starter template for Vue & Vite app -## License +License -[MIT](./LICENSE) License © 2019-PRESENT [Anthony Fu](https://github.com/antfu) +MIT](./LICENSE) License © 2019-PRESENT [Anthony Fu](https://github.com/antfu) diff --git a/eslint.config.ts b/eslint.config.ts index 4b8365474c..80ea25fc8a 100644 --- a/eslint.config.ts +++ b/eslint.config.ts @@ -1,5 +1,6 @@ // @ts-expect-error missing types import styleMigrate from '@stylistic/eslint-plugin-migrate' +import { createSimplePlugin } from 'eslint-factory' import antfu from './src' export default antfu( @@ -28,4 +29,11 @@ export default antfu( 'style-migrate/migrate': ['error', { namespaceTo: 'style' }], }, }, + createSimplePlugin({ + name: 'debugging', + include: ['**/*.mdx'], + create(context) { + console.log(context.sourceCode.ast.tokens) + }, + }), ) diff --git a/fixtures/input/mdx.mdx b/fixtures/input/mdx.mdx index 7711c8f922..629653a4b6 100644 --- a/fixtures/input/mdx.mdx +++ b/fixtures/input/mdx.mdx @@ -19,7 +19,7 @@ export const hello = 'hello' { /* I'm a comment */ } - hi + hi { hello } { /* another comment */} diff --git a/fixtures/output/all/markdown.md b/fixtures/output/all/markdown.md index f6df362d02..84fde3498c 100644 --- a/fixtures/output/all/markdown.md +++ b/fixtures/output/all/markdown.md @@ -27,7 +27,6 @@ Jane Roe|JFK|314 + with a [link] (/to/somewhere) + and [another one] - [another one]: http://example.com 'Example title' Lorem ipsum dolor sit amet, consectetur adipiscing elit. diff --git a/fixtures/output/all/mdx.mdx b/fixtures/output/all/mdx.mdx index 7e56a00764..466f01356b 100644 --- a/fixtures/output/all/mdx.mdx +++ b/fixtures/output/all/mdx.mdx @@ -1,27 +1,26 @@ -import { Baz } from './Fixture' +import { Baz } from './Fixture' -export const foo = { - hi: `Fudge ${Baz.displayName || 'Baz'}`, +export const foo = { + hi: `Fudge ${Baz.displayName || 'Baz'}`, authors: [ - 'fred', - 'sally' - ] + 'fred', + 'sally', + ], } export const hello = 'hello' # Hello, world! - I'm an awesome paragraph. { /* I'm a comment */ } - - hi - { hello } - { /* another comment */} - + + hi + { hello } + { /* another comment */} + ``` test codeblock @@ -39,4 +38,4 @@ npm i -g foo | :--- | :---- | | Col1 | Col2 | -export default ({children }) => < div>{ children} +export default ({ children }) =>
{ children}
diff --git a/fixtures/output/js/markdown.md b/fixtures/output/js/markdown.md index f6df362d02..84fde3498c 100644 --- a/fixtures/output/js/markdown.md +++ b/fixtures/output/js/markdown.md @@ -27,7 +27,6 @@ Jane Roe|JFK|314 + with a [link] (/to/somewhere) + and [another one] - [another one]: http://example.com 'Example title' Lorem ipsum dolor sit amet, consectetur adipiscing elit. diff --git a/fixtures/output/js/mdx.mdx b/fixtures/output/js/mdx.mdx index 7e56a00764..466f01356b 100644 --- a/fixtures/output/js/mdx.mdx +++ b/fixtures/output/js/mdx.mdx @@ -1,27 +1,26 @@ -import { Baz } from './Fixture' +import { Baz } from './Fixture' -export const foo = { - hi: `Fudge ${Baz.displayName || 'Baz'}`, +export const foo = { + hi: `Fudge ${Baz.displayName || 'Baz'}`, authors: [ - 'fred', - 'sally' - ] + 'fred', + 'sally', + ], } export const hello = 'hello' # Hello, world! - I'm an awesome paragraph. { /* I'm a comment */ } - - hi - { hello } - { /* another comment */} - + + hi + { hello } + { /* another comment */} + ``` test codeblock @@ -39,4 +38,4 @@ npm i -g foo | :--- | :---- | | Col1 | Col2 | -export default ({children }) => < div>{ children} +export default ({ children }) =>
{ children}
diff --git a/fixtures/output/no-style/mdx.mdx b/fixtures/output/no-style/mdx.mdx index 7e56a00764..5a0abb0526 100644 --- a/fixtures/output/no-style/mdx.mdx +++ b/fixtures/output/no-style/mdx.mdx @@ -18,7 +18,7 @@ export const hello = 'hello' { /* I'm a comment */ } - hi + hi { hello } { /* another comment */} diff --git a/fixtures/output/tab-double-quotes/markdown.md b/fixtures/output/tab-double-quotes/markdown.md index 5f35622ca9..70cffff3ad 100644 --- a/fixtures/output/tab-double-quotes/markdown.md +++ b/fixtures/output/tab-double-quotes/markdown.md @@ -27,7 +27,6 @@ Jane Roe|JFK|314 + with a [link] (/to/somewhere) + and [another one] - [another one]: http://example.com 'Example title' Lorem ipsum dolor sit amet, consectetur adipiscing elit. diff --git a/fixtures/output/tab-double-quotes/mdx.mdx b/fixtures/output/tab-double-quotes/mdx.mdx index c53f5aaa07..93dbb9a970 100644 --- a/fixtures/output/tab-double-quotes/mdx.mdx +++ b/fixtures/output/tab-double-quotes/mdx.mdx @@ -1,27 +1,26 @@ -import { Baz } from './Fixture' - -export const foo = { - hi: `Fudge ${Baz.displayName || 'Baz'}`, - authors: [ - 'fred', - 'sally' - ] +import { Baz } from "./Fixture" + +export const foo = { + hi: `Fudge ${Baz.displayName || "Baz"}`, + authors: [ + "fred", + "sally", + ], } -export const hello = 'hello' +export const hello = "hello" # Hello, world! - I'm an awesome paragraph. { /* I'm a comment */ } - - hi - { hello } - { /* another comment */} - + + hi + { hello } + { /* another comment */} + ``` test codeblock @@ -39,4 +38,4 @@ npm i -g foo | :--- | :---- | | Col1 | Col2 | -export default ({children }) => < div>{ children} +export default ({ children }) =>
{ children}
diff --git a/fixtures/output/ts-override/markdown.md b/fixtures/output/ts-override/markdown.md index f6df362d02..84fde3498c 100644 --- a/fixtures/output/ts-override/markdown.md +++ b/fixtures/output/ts-override/markdown.md @@ -27,7 +27,6 @@ Jane Roe|JFK|314 + with a [link] (/to/somewhere) + and [another one] - [another one]: http://example.com 'Example title' Lorem ipsum dolor sit amet, consectetur adipiscing elit. diff --git a/fixtures/output/ts-override/mdx.mdx b/fixtures/output/ts-override/mdx.mdx index 7e56a00764..466f01356b 100644 --- a/fixtures/output/ts-override/mdx.mdx +++ b/fixtures/output/ts-override/mdx.mdx @@ -1,27 +1,26 @@ -import { Baz } from './Fixture' +import { Baz } from './Fixture' -export const foo = { - hi: `Fudge ${Baz.displayName || 'Baz'}`, +export const foo = { + hi: `Fudge ${Baz.displayName || 'Baz'}`, authors: [ - 'fred', - 'sally' - ] + 'fred', + 'sally', + ], } export const hello = 'hello' # Hello, world! - I'm an awesome paragraph. { /* I'm a comment */ } - - hi - { hello } - { /* another comment */} - + + hi + { hello } + { /* another comment */} + ``` test codeblock @@ -39,4 +38,4 @@ npm i -g foo | :--- | :---- | | Col1 | Col2 | -export default ({children }) => < div>{ children} +export default ({ children }) =>
{ children}
diff --git a/fixtures/output/with-formatters/mdx.mdx b/fixtures/output/with-formatters/mdx.mdx index 3b26caa6ae..7d50c67ad5 100644 --- a/fixtures/output/with-formatters/mdx.mdx +++ b/fixtures/output/with-formatters/mdx.mdx @@ -1,11 +1,11 @@ -import { Baz } from './Fixture' +import { Baz } from './Fixture' -export const foo = { - hi: `Fudge ${Baz.displayName || 'Baz'}`, +export const foo = { + hi: `Fudge ${Baz.displayName || 'Baz'}`, authors: [ - 'fred', - 'sally' - ] + 'fred', + 'sally', + ], } export const hello = 'hello' @@ -16,11 +16,11 @@ I'm an awesome paragraph. {/* I'm a comment */} - - hi - { hello } - { /* another comment */} - + + hi + { hello } + { /* another comment */} + ``` test codeblock @@ -38,4 +38,4 @@ npm i -g foo | :--- | :---- | | Col1 | Col2 | -export default ({children }) => < div>{ children} +export default ({ children }) =>
{ children}
diff --git a/package.json b/package.json index d4034303d0..55ec94044a 100644 --- a/package.json +++ b/package.json @@ -113,6 +113,7 @@ "@unocss/eslint-plugin": "^0.58.0", "bumpp": "^9.2.1", "eslint": "npm:eslint-ts-patch@^8.55.0-1", + "eslint-factory": "^0.0.2", "eslint-flat-config-viewer": "^0.1.3", "eslint-plugin-format": "^0.1.0", "eslint-plugin-react": "^7.33.2", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 503448920d..85dd0cdec6 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -156,6 +156,9 @@ importers: eslint: specifier: npm:eslint-ts-patch@^8.55.0-1 version: /eslint-ts-patch@8.55.0-1 + eslint-factory: + specifier: ^0.0.2 + version: 0.0.2(@types/eslint@8.44.8)(eslint-ts-patch@8.55.0-1)(typescript@5.3.3) eslint-flat-config-viewer: specifier: ^0.1.3 version: 0.1.3 @@ -2306,6 +2309,20 @@ packages: parse-gitignore: 2.0.0 dev: false + /eslint-factory@0.0.2(@types/eslint@8.44.8)(eslint-ts-patch@8.55.0-1)(typescript@5.3.3): + resolution: {integrity: sha512-XMGK91oUPt/B8dl4pvwzM5EzXPlxtWteNoHwhiay5qOcqoYUIdYK37nAEu60KBrHCcgsMJ2AQ/HYi8gRDYbjqw==} + peerDependencies: + '@types/eslint': ^8.44.0 + eslint: ^8.44.0 + dependencies: + '@types/eslint': 8.44.8 + '@typescript-eslint/utils': 6.13.2(eslint-ts-patch@8.55.0-1)(typescript@5.3.3) + eslint: /eslint-ts-patch@8.55.0-1 + transitivePeerDependencies: + - supports-color + - typescript + dev: true + /eslint-flat-config-viewer@0.1.3: resolution: {integrity: sha512-Fk2FFMoHj6cDBFS4GRUk8ZCOV0yc3rS0tSy5Mb+Uq7ICxkItzgBsgyCIolKd95zeYKXAqzMibjIMjf7NW3sytA==} hasBin: true diff --git a/src/configs/markdown.ts b/src/configs/markdown.ts index 87ef6c1992..39f597872b 100644 --- a/src/configs/markdown.ts +++ b/src/configs/markdown.ts @@ -1,3 +1,4 @@ +import type { Linter } from 'eslint' import { interopDefault } from '../utils' import type { FlatConfigItem, OptionsComponentExts, OptionsFiles, OptionsOverrides } from '../types' import { GLOB_MARKDOWN_CODE, GLOB_MARKDOWN_OR_MDX } from '../globs' @@ -11,6 +12,33 @@ export async function markdown( } = options const mdx = await interopDefault(import('eslint-plugin-mdx')) + const mdxParser = mdx.configs.flat.languageOptions!.parser! + + const patchedParser: Linter.ParserModule = { + ...mdxParser, + parse(text, options) { + // @ts-expect-error cast + const result = mdxParser.parseForESLint!(text, options) + const body = result.ast.body + + function predicate(token: { start: number, end: number }) { + for (const node of body) { + if (node.start <= token.start! && node.end >= token.end!) + return true + } + return false + } + + // `eslint-mdx` produces extra tokens that are not presented in the AST, causing rules like `indent` to fail + result.ast.tokens = result.ast.tokens.filter(predicate) + result.ast.comments = result.ast.comments.filter(predicate) + + return result + }, + } + + // @ts-expect-error cast + patchedParser.parseForESLint = patchedParser.parse return [ { @@ -20,7 +48,7 @@ export async function markdown( globals: { React: false, }, - parser: mdx.configs.flat.languageOptions!.parser, + parser: patchedParser, sourceType: 'module', }, name: 'antfu:markdown-mdx:setup', @@ -33,6 +61,11 @@ export async function markdown( rules: { 'mdx/remark': 'warn', 'no-unused-expressions': 'error', + + // Those rules are not compatible with MDX + // 'style/indent': 'off', + 'style/jsx-closing-bracket-location': 'off', + // 'style/jsx-indent': 'off', }, }, { diff --git a/src/configs/stylistic.ts b/src/configs/stylistic.ts index 63fd4ba7f8..ef22f5359d 100644 --- a/src/configs/stylistic.ts +++ b/src/configs/stylistic.ts @@ -1,4 +1,3 @@ -import { GLOB_MARKDOWN_OR_MDX } from '../globs' import { interopDefault } from '../utils' import type { FlatConfigItem, StylisticConfig } from '../types' import { pluginAntfu } from '../plugins' @@ -34,9 +33,6 @@ export async function stylistic(options: StylisticConfig = {}): Promise