UNPKG

@neosjs/eslint-config

Version:

Neosjs's ESLint config

72 lines (64 loc) 13.1 kB
/*! * @neosjs/eslint-config * Version: 1.3.2 * ReleaseTime: 2024-09-21T03:22:36.727Z * Copyright (c) 2021-PRESENT NeosJS */ "use strict";var me=Object.create;var F=Object.defineProperty;var ge=Object.getOwnPropertyDescriptor;var fe=Object.getOwnPropertyNames;var ue=Object.getPrototypeOf,de=Object.prototype.hasOwnProperty;var q=(e,s,n,r)=>{if(s&&typeof s=="object"||typeof s=="function")for(let t of fe(s))!de.call(e,t)&&t!==n&&F(e,t,{get:()=>s[t],enumerable:!(r=ge(s,t))||r.enumerable});return e};var i=(e,s,n)=>(n=e!=null?me(ue(e)):{},q(s||!e||!e.__esModule?F(n,"default",{value:e,enumerable:!0}):n,e)),ye=e=>q(F({},"__esModule",{value:!0}),e);var ke={};module.exports=ye(ke);var M=i(require("process"),1),y=i(require("picocolors"),1),ne=require("yargs/helpers"),re=i(require("yargs"),1),j=i(require("@clack/prompts"),1);var te=i(require("fs"),1),ie=i(require("path"),1),u=i(require("process"),1),d=i(require("picocolors"),1),a=i(require("@clack/prompts"),1);var x=i(require("picocolors"),1);var c={name:"@neosjs/eslint-config",type:"module",version:"1.3.2",packageManager:"pnpm@9.1.0",description:"Neosjs's ESLint config",author:"\u542C\u7740\u60C5\u6B4C\u6D41\u6CEA",license:"MIT",homepage:"https://docs.neosjs.com/eslint-config",keywords:["eslint-config","eslint","neosjs"],exports:{".":{import:"./dist/index.js",require:"./dist/index.cjs"}},main:"./dist/index.js",types:"./dist/index.d.ts",bin:{"eslint-config":"bin/index.js"},files:["bin","dist"],engines:{node:">=18.18.0"},scripts:{build:"pnpm typegen && tsup --format esm,cjs --clean --dts",stub:"tsup --format esm",dev:"npx @eslint/config-inspector --config eslint.config.ts",watch:"tsup --format esm,cjs --watch",lint:"eslint --flag unstable_ts_config .",typegen:"esno scripts/typegen.ts",prepublishOnly:"pnpm build",typecheck:"tsc --noEmit",prepare:"simple-git-hooks",release:"release && npm publish"},peerDependencies:{"@eslint-react/eslint-plugin":"^1.6.0","@prettier/plugin-xml":"^3.4.1","@unocss/eslint-plugin":">=0.50.0",eslint:"^9.10.0","eslint-plugin-format":">=0.1.2","eslint-plugin-react-hooks":"^4.6.2","eslint-plugin-react-refresh":"^0.4.4","prettier-plugin-slidev":"^1.0.5"},peerDependenciesMeta:{"@eslint-react/eslint-plugin":{optional:!0},"@prettier/plugin-xml":{optional:!0},"@unocss/eslint-plugin":{optional:!0},"eslint-plugin-format":{optional:!0},"eslint-plugin-react-hooks":{optional:!0},"eslint-plugin-react-refresh":{optional:!0},"prettier-plugin-slidev":{optional:!0}},dependencies:{"@antfu/install-pkg":"^0.4.1","@clack/prompts":"^0.7.0","@eslint-community/eslint-plugin-eslint-comments":"^4.4.0","@eslint/markdown":"^6.1.0","@stylistic/eslint-plugin":"^2.8.0","@typescript-eslint/eslint-plugin":"^8.6.0","@typescript-eslint/parser":"^8.6.0","@vitest/eslint-plugin":"^1.1.4","eslint-config-flat-gitignore":"^0.3.0","eslint-flat-config-utils":"^0.4.0","eslint-merge-processors":"^0.1.0","eslint-plugin-antfu":"^2.7.0","eslint-plugin-command":"^0.2.5","eslint-plugin-import-x":"^4.2.1","eslint-plugin-jsdoc":"^50.2.4","eslint-plugin-jsonc":"^2.16.0","eslint-plugin-n":"^17.10.3","eslint-plugin-no-only-tests":"^3.3.0","eslint-plugin-perfectionist":"^3.4.0","eslint-plugin-regexp":"^2.6.0","eslint-plugin-toml":"^0.11.1","eslint-plugin-unicorn":"^55.0.0","eslint-plugin-unused-imports":"^4.1.3","eslint-plugin-vue":"^9.28.0","eslint-plugin-yml":"^1.14.0","eslint-processor-vue-blocks":"^0.1.2",globals:"^15.9.0","jsonc-eslint-parser":"^2.4.0","local-pkg":"^0.5.0","parse-gitignore":"^2.0.0",picocolors:"^1.1.0","toml-eslint-parser":"^0.10.0","vue-eslint-parser":"^9.4.3","yaml-eslint-parser":"^1.2.3",yargs:"^17.7.2"},devDependencies:{"@eslint-react/eslint-plugin":"^1.10.1","@eslint/config-inspector":"^0.5.3","@prettier/plugin-xml":"^3.4.1","@stylistic/eslint-plugin-migrate":"^2.6.4","@types/eslint":"^9.6.0","@types/fs-extra":"^11.0.4","@types/node":"^22.5.5","@types/prompts":"^2.4.9","@types/yargs":"^17.0.33","@unocss/eslint-plugin":"^0.62.4",eslint:"^9.10.0","eslint-plugin-format":"^0.1.2","eslint-plugin-react-hooks":"^4.6.2","eslint-plugin-react-refresh":"^0.4.9","eslint-typegen":"^0.3.2",esno:"^4.7.0",execa:"^9.4.0","fast-glob":"^3.3.2","fs-extra":"^11.2.0",jiti:"^1.21.6","lint-staged":"^15.2.9","prettier-plugin-slidev":"^1.0.5",rimraf:"^6.0.0","simple-git-hooks":"^2.11.1",tsup:"^8.3.0",tsx:"^4.19.1",typescript:"^5.6.2",vitest:"^2.0.5",vue:"^3.5.6"},resolutions:{"@eslint-community/eslint-utils":"^4.4.0","@typescript-eslint/utils":"^8.6.0",eslint:"^9.10.0",tsx:"~4.17.0"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"lint-staged":{"*":"eslint --flag unstable_ts_config --fix"},publishConfig:{access:"public",registry:"https://registry.npmjs.org/"}};var $=` // \u542F\u7528ESlint\u6241\u5E73\u5316\u914D\u7F6E\u652F\u6301 // (\u5982\u679C\u4F60\u7684ESLint\u6269\u5C55\u9AD8\u4E8Ev3.0.5\uFF0C\u8BF7\u5220\u9664\u6B64\u9009\u9879) "eslint.experimental.useFlatConfig": true, // \u7981\u7528prettier\u9ED8\u8BA4\u683C\u5F0F\u5316\u5668\uFF0C\u4F7F\u7528eslint\u4EE3\u66FF "prettier.enable": false, "editor.formatOnSave": false, // \u81EA\u52A8\u4FEE\u590D "editor.codeActionsOnSave": { "source.fixAll.eslint": "explicit", "source.organizeImports": "never" }, // \u5728IDE\u4E2D\u7684\u98CE\u683C\u89C4\u5219\uFF0C\u4F46\u4ECD\u7136\u81EA\u52A8\u4FEE\u590D\u5B83\u4EEC "eslint.rules.customizations": [ { "rule": "style/*", "severity": "off" }, { "rule": "format/*", "severity": "off" }, { "rule": "*-indent", "severity": "off" }, { "rule": "*-spacing", "severity": "off" }, { "rule": "*-spaces", "severity": "off" }, { "rule": "*-order", "severity": "off" }, { "rule": "*-dangle", "severity": "off" }, { "rule": "*-newline", "severity": "off" }, { "rule": "*quotes", "severity": "off" }, { "rule": "*semi", "severity": "off" } ], // \u4E3A\u4EE5\u4E0B\u8BED\u8A00\u542F\u7528eslint "eslint.validate": [ "javascript", "javascriptreact", "typescript", "typescriptreact", "vue", "html", "markdown", "json", "jsonc", "yaml", "toml", "xml", "css", "less", "scss", "pcss", "postcss" ] `,D=[{label:x.default.green("Vue"),value:"vue"},{label:x.default.cyan("React"),value:"react"}],_=D.map(({value:e})=>e),L=[{hint:"\u4F7F\u7528\u5916\u90E8\u683C\u5F0F\u5316\u5668(Prettier \u548C/\u6216 dprint)\u6765\u683C\u5F0F\u5316ESLint\u8FD8\u4E0D\u80FD\u5904\u7406\u7684\u6587\u4EF6(.css, .html\u7B49)",label:x.default.red("Formatter"),value:"formatter"},{label:x.default.cyan("UnoCSS"),value:"unocss"}],T=L.map(({value:e})=>e),z={react:["@eslint-react/eslint-plugin","eslint-plugin-react-hooks","eslint-plugin-react-refresh"],slidev:["prettier-plugin-slidev"],vue:[]};var G=require("child_process");function H(){try{return(0,G.execSync)("git diff-index --quiet HEAD --"),!0}catch{return!1}}function W(e,s){return` import neosjs from '@neosjs/eslint-config' export default neosjs({ ${e} }${s?.map(n=>`,{ ${n} }`)}) `.trimStart()}var B=i(require("path"),1),R=i(require("fs/promises"),1),K=i(require("process"),1),O=i(require("picocolors"),1),h=i(require("@clack/prompts"),1);async function U(e){let s=K.default.cwd(),n=B.default.join(s,"package.json");h.log.step(O.default.cyan(`\u5C06 @neosjs/eslint-config \u5347\u7EA7\u5230 v${c.version}`));let r=await R.default.readFile(n,"utf-8"),t=JSON.parse(r);t.devDependencies??={},t.devDependencies["@neosjs/eslint-config"]=`^${c.version}`,t.devDependencies.eslint??=c.devDependencies.eslint.replace("npm:eslint-ts-patch@","").replace(/-\d+$/,"");let p=[];e.extra.length&&e.extra.forEach(l=>{switch(l){case"formatter":["eslint-plugin-format"].forEach(o=>{o&&(t.devDependencies[o]=c.devDependencies[o],p.push(o))});break;case"unocss":["@unocss/eslint-plugin"].forEach(o=>{t.devDependencies[o]=c.devDependencies[o],p.push(o)});break}});for(let l of e.frameworks){let o=z[l];o&&o.forEach(m=>{t.devDependencies[m]=c.devDependencies[m],p.push(m)})}p.length&&h.note(`${O.default.dim(p.join(", "))}`,"Added packages"),await R.default.writeFile(n,JSON.stringify(t,null,2)),h.log.success(O.default.green("\u5BF9 package.json \u8FDB\u884C\u4FEE\u6539"))}var I=i(require("fs"),1),S=i(require("fs/promises"),1),Y=i(require("process"),1),P=i(require("path"),1),C=i(require("picocolors"),1),k=i(require("@clack/prompts"),1),Q=i(require("parse-gitignore"),1);async function X(e){let s=Y.default.cwd(),n=P.default.join(s,".eslintignore"),r=P.default.join(s,"package.json"),t=await S.default.readFile(r,"utf-8"),l=JSON.parse(t).type==="module"?"eslint.config.js":"eslint.config.mjs",o=P.default.join(s,l),m=[];if(I.default.existsSync(n)){k.log.step(C.default.cyan("\u8FC1\u79FB\u73B0\u6709\u7684 .eslintignore"));let g=await S.default.readFile(n,"utf-8"),le=(0,Q.default)(g).globs();for(let b of le)b.type==="ignore"?m.push(...b.patterns):b.type==="unignore"&&m.push(...b.patterns.map(ce=>`!${ce}`))}let v=[];m.length&&v.push(`ignores: ${JSON.stringify(m)},`),e.extra.includes("formatter")&&v.push("formatters: true,"),e.extra.includes("unocss")&&v.push("unocss: true,");for(let g of e.frameworks)v.push(`${g}: true,`);let oe=v.map(g=>` ${g}`).join(` `),pe=W(oe,[]);await S.default.writeFile(o,pe),k.log.success(C.default.green(`\u521B\u5EFA ${l}`));let ae=I.default.readdirSync(s),E=[];ae.forEach(g=>{/eslint|prettier/.test(g)&&!/eslint\.config\./.test(g)&&E.push(g)}),E.length&&k.note(`${C.default.dim(E.join(", "))}`,"You can now remove those files")}var V=i(require("path"),1),w=i(require("fs/promises"),1),J=i(require("fs"),1),Z=i(require("process"),1),N=i(require("picocolors"),1),A=i(require("@clack/prompts"),1);async function ee(e){let s=Z.default.cwd();if(!e.updateVscodeSettings)return;let n=V.default.join(s,".vscode"),r=V.default.join(n,"settings.json");if(J.default.existsSync(n)||await w.default.mkdir(n,{recursive:!0}),!J.default.existsSync(r))await w.default.writeFile(r,`{${$}} `,"utf-8"),A.log.success(N.default.green("\u521B\u5EFA .vscode/settings.json"));else{let t=await w.default.readFile(r,"utf8");t=t.trim().replace(/\s*\}$/,""),t+=t.endsWith(",")||t.endsWith("{")?"":",",t+=`${$}} `,await w.default.writeFile(r,t,"utf-8"),A.log.success(N.default.green("\u66F4\u65B0 .vscode/settings.json"))}}async function se(e={}){let s=!!u.default.env.SKIP_PROMPT||e.yes,n=e.frameworks?.map(p=>p.trim()),r=e.extra?.map(p=>p.trim());if(te.default.existsSync(ie.default.join(u.default.cwd(),"eslint.config.js")))return a.log.warn(d.default.yellow("eslint.config.js \u5DF2\u5B58\u5728\uFF0C\u8FC1\u79FB\u5411\u5BFC\u5DF2\u9000\u51FA.")),u.default.exit(1);let t={extra:r??[],frameworks:n??[],uncommittedConfirmed:!1,updateVscodeSettings:!0};if(!s&&(t=await a.group({uncommittedConfirmed:()=>s||H()?Promise.resolve(!0):a.confirm({initialValue:!1,message:"\u5F53\u524D\u5B58\u50A8\u5E93\u4E2D\u6709\u672A\u63D0\u4EA4\u7684\u66F4\u6539\uFF0C\u60A8\u786E\u5B9A\u7EE7\u7EED\u5417?"}),frameworks:({results:p})=>{let l=typeof n=="string"&&!!_.includes(n);if(!p.uncommittedConfirmed||l)return;let o=!l&&n?`"${n}" \u4E0D\u662F\u4E00\u4E2A\u6709\u6548\u7684\u6A21\u677F\u3002\u8BF7\u4ECE\u4E0B\u9762\u9009\u62E9: `:"\u9009\u62E9\u4E00\u4E2A\u6846\u67B6:";return a.multiselect({message:d.default.reset(o),options:D,required:!1})},extra:({results:p})=>{let l=r?.length&&!r.filter(m=>!T.includes(m)).length;if(!p.uncommittedConfirmed||l)return;let o=!l&&r?`"${r}" \u4E0D\u662F\u6709\u6548\u7684\u989D\u5916\u6548\u7528\u3002\u8BF7\u4ECE\u4E0B\u9762\u9009\u62E9: `:"\u9009\u62E9\u4E00\u4E2A\u989D\u5916\u7684\u5DE5\u5177:";return a.multiselect({message:d.default.reset(o),options:L,required:!1})},updateVscodeSettings:({results:p})=>{if(p.uncommittedConfirmed)return a.confirm({initialValue:!0,message:"\u66F4\u65B0 .vscode/settings.json \u3002\u4E3A\u4E86\u66F4\u597D\u7684 VSCode \u4F53\u9A8C?"})}},{onCancel:()=>{a.cancel("\u64CD\u4F5C\u88AB\u53D6\u6D88."),u.default.exit(0)}}),!t.uncommittedConfirmed))return u.default.exit(1);await U(t),await X(t),await ee(t),a.log.success(d.default.green("\u8BBE\u7F6E\u5B8C\u6210")),a.outro(`\u73B0\u5728\u60A8\u53EF\u4EE5\u66F4\u65B0\u4F9D\u8D56\u9879\u5E76\u8FD0\u884C ${d.default.blue("eslint . --fix")} `)}function xe(){console.log(` `),j.intro(`${y.default.green("@neosjs/eslint-config ")}${y.default.dim(`v${c.version}`)}`)}var he=(0,re.default)((0,ne.hideBin)(M.default.argv)).scriptName("@neosjs/eslint-config").usage("").command("*","\u6267\u884C\u521D\u59CB\u5316\u6216\u8FC1\u79FB",e=>e.option("yes",{alias:"y",description:"\u8DF3\u8FC7\u63D0\u793A\u5E76\u4F7F\u7528\u9ED8\u8BA4\u503C",type:"boolean"}).option("template",{alias:"t",description:"\u4F7F\u7528\u6846\u67B6\u6A21\u677F\u8FDB\u884C\u6700\u4F73\u5B9A\u5236: vue / react",type:"string"}).option("extra",{alias:"e",array:!0,description:"\u4F7F\u7528\u989D\u5916\u7684\u5DE5\u5177: formatter / unocss",type:"string"}).help(),async e=>{xe();try{await se(e)}catch(s){j.log.error(y.default.inverse(y.default.red(" \u8FC1\u79FB\u5931\u8D25 "))),j.log.error(y.default.red(`\u2718 ${String(s)}`)),M.default.exit(1)}}).showHelpOnFail(!1).alias("h","help").version("version",c.version).alias("v","version");he.help().argv;