@cgzair/cgz-fabric 1.6.5 → 2.0.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,15 +1,17 @@
1
- # cgz-fabric
1
+ # @cgzair/cgz-fabric
2
2
 
3
3
  fabric 是《信息技术部前端编码手册》的配套 CLI 工具,一键接入符合前端研发部门的编码规范,提高项目研发效率。
4
4
 
5
5
  ## 使用
6
6
 
7
- 安装
7
+ 安装:
8
8
 
9
9
  ```bash
10
- yarn add @cgzair/cgz-fabric -D
10
+ pnpm add @cgzair/cgz-fabric -D
11
11
  ```
12
12
 
13
+ ![fabric](/images/fabric.gif)
14
+
13
15
  ### 自动配置
14
16
 
15
17
  1.通过 `shell` 命令
@@ -18,7 +20,7 @@ yarn add @cgzair/cgz-fabric -D
18
20
  npx fabric install
19
21
  ```
20
22
 
21
- 2.通过 `npm scripts`
23
+ 2.通过 `pnpm scripts`
22
24
 
23
25
  ```json
24
26
  // package.json
@@ -45,6 +47,6 @@ npx fabric install
45
47
 
46
48
  帮助
47
49
 
48
- ``` bash
50
+ ```bash
49
51
  fabric -h
50
52
  ```
package/lib/cli.js CHANGED
@@ -1,2 +1,2 @@
1
1
  #!/usr/bin/env node
2
- "use strict";var __awaiter=this&&this.__awaiter||function(e,a,c,s){return new(c=c||Promise)(function(r,t){function n(e){try{o(s.next(e))}catch(e){t(e)}}function i(e){try{o(s.throw(e))}catch(e){t(e)}}function o(e){var t;e.done?r(e.value):((t=e.value)instanceof c?t:new c(function(e){e(t)})).then(n,i)}o((s=s.apply(e,a||[])).next())})},__importDefault=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0});const path_1=__importDefault(require("path")),commander_1=require("commander"),cgz_core_1=require("@cgzair/cgz-core"),install_1=__importDefault(require("./scripts/install")),extension_1=__importDefault(require("./utils/extension")),cwd=process.cwd(),currentPkg=(0,cgz_core_1.getCurrentPkg)(path_1.default.resolve(__dirname,"../"));commander_1.program.version(currentPkg.version,"-v").description(currentPkg.name+" 是《信息技术部前端编码手册》的配套 CLI 工具,一键接入符合前端研发部门的编码规范,提高项目研发效率。"),commander_1.program.command("install").alias("i").description("交互式生成适用于当前项目的编码规范").option("--vsc","写入 .vscode 推荐配置").option("--ext","安装 vscode 推荐扩展").action(e=>__awaiter(void 0,void 0,void 0,function*(){e.ext?(0,extension_1.default)():yield(0,install_1.default)({cwd:cwd},e.vsc)})),commander_1.program.parse(process.argv);
2
+ "use strict";var __awaiter=this&&this.__awaiter||function(e,t,r,i){return new(r||(r=Promise))(function(o,n){function a(e){try{s(i.next(e))}catch(e){n(e)}}function c(e){try{s(i.throw(e))}catch(e){n(e)}}function s(e){var t;e.done?o(e.value):(t=e.value,t instanceof r?t:new r(function(e){e(t)})).then(a,c)}s((i=i.apply(e,t||[])).next())})},__importDefault=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0});const path_1=__importDefault(require("path")),cgz_core_1=require("@cgzair/cgz-core"),commander_1=require("commander"),install_1=__importDefault(require("./scripts/install")),extension_1=__importDefault(require("./utils/extension")),cwd=process.cwd(),currentPkg=(0,cgz_core_1.getCurrentPkg)(path_1.default.resolve(__dirname,"../"));commander_1.program.version(currentPkg.version,"-v").description(`${currentPkg.name} 是《信息技术部前端编码手册》的配套 CLI 工具,一键接入符合前端研发部门的编码规范,提高项目研发效率。`),commander_1.program.command("install").alias("i").description("交互式生成适用于当前项目的编码规范").option("--vsc","写入 .vscode 推荐配置").option("--ext","安装 vscode 推荐扩展").option("--local","使用内网 Nexus registry 安装依赖(http://nexus.it.cgzair.com/repository/npm/)").option("--registry <url>","自定义 npm registry 地址,优先级高于 --local").action(e=>__awaiter(void 0,void 0,void 0,function*(){e.ext?(0,extension_1.default)():yield(0,install_1.default)({cwd:cwd,local:e.local,registry:e.registry},e.vsc)})),commander_1.program.parse(process.argv);
@@ -0,0 +1,5 @@
1
+ <%_ if (prettier) { _%>
2
+ <%_ prettierIgnores.forEach((txt)=> { _%>
3
+ <%= txt %>
4
+ <% }) %>
5
+ <%_ } -%>
@@ -1,4 +1,5 @@
1
1
  {
2
+ "eslint.useFlatConfig": true,
2
3
  "eslint.validate": ["javascript", "javascriptreact", "typescript", "typescriptreact", "vue"],
3
4
  <%_ if (stylelint) { _%>
4
5
  "stylelint.validate": [<%- stylelintExt.map((ext) => `"${ext.replace(/^\./, '')}"`).join(', ') %>],
@@ -0,0 +1,37 @@
1
+ import cgz, { defineConfig } from "@cgzair/eslint-config-cgz";
2
+
3
+ export default defineConfig([
4
+ {
5
+ ignores: [
6
+ "**/statics/**",
7
+ "**/dist/**",
8
+ "**/build/**",
9
+ ],
10
+ },
11
+ <%_ if (eslint === 'javascript') { _%>
12
+ ...cgz.common,
13
+ <%_ } else if (eslint === 'typescript') { _%>
14
+ ...cgz.typescript,
15
+ <%_ } else if (eslint === 'react') { _%>
16
+ ...cgz.react,
17
+ <%_ } else if (eslint === 'typescript/react') { _%>
18
+ ...cgz.ts.react,
19
+ <%_ } else if (eslint === 'vue') { _%>
20
+ ...cgz.vue,
21
+ <%_ } else if (eslint === 'typescript/vue') { _%>
22
+ ...cgz.ts.vue,
23
+ <%_ } else if (eslint === 'node') { _%>
24
+ ...cgz.node,
25
+ <%_ } else if (eslint === 'typescript/node') { _%>
26
+ ...cgz.ts.node,
27
+ <%_ } else if (eslint === 'es5') { _%>
28
+ ...cgz.es5,
29
+ <%_ } else if (eslint === 'uni-app') { _%>
30
+ ...cgz.uniApp,
31
+ <%_ } else if (eslint === 'typescript/uni-app') { _%>
32
+ ...cgz.ts.uniApp,
33
+ <%_ } _%>
34
+ <%_ if (prettier) { _%>
35
+ cgz.prettier,
36
+ <%_ } _%>
37
+ ]);
@@ -0,0 +1 @@
1
+ export { default } from "@cgzair/prettier-config-cgz";
@@ -0,0 +1,3 @@
1
+ <%_ if (stylelint) { _%>
2
+ export { default } from "@cgzair/stylelint-config-cgz";
3
+ <%_ } _%>
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.MARKDOWN_LINT_IGNORE_PATTERN=exports.STYLELINT_IGNORE_PATTERN=exports.STYLELINT_FILE_EXT=exports.PROJECT_CATEGORYS=void 0,exports.PROJECT_CATEGORYS=[{name:"非 React、Vue、Node.js 的项目(JavaScript)",value:"javascript"},{name:"非 React、Vue、Node.js 的项目(TypeScript)",value:"typescript"},{name:"React 项目(JavaScript)",value:"react"},{name:"React 项目(TypeScript)",value:"typescript/react"},{name:"Vue 项目(JavaScript)",value:"vue"},{name:"Vue 项目(TypeScript)",value:"typescript/vue"},{name:"Node.js 项目(JavaScript)",value:"node"},{name:"Node.js 项目(TypeScript)",value:"typescript/node"},{name:"使用 ES5 及之前版本 JavaScript 的老项目",value:"es5"},{name:"uni-app 项目(JavaScript)",value:"uni-app"},{name:"uni-app 项目(TypeScript)",value:"typescript/uni-app"}],exports.STYLELINT_FILE_EXT=[".css",".scss",".less"],exports.STYLELINT_IGNORE_PATTERN=["build","statics","dist"],exports.MARKDOWN_LINT_IGNORE_PATTERN=["node_modules/","build","dist","statics"];
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.UNICODE=exports.PRETTIER_IGNORE_PATTERN=exports.MARKDOWN_LINT_IGNORE_PATTERN=exports.STYLELINT_IGNORE_PATTERN=exports.STYLELINT_FILE_EXT=exports.PROJECT_CATEGORYS=void 0,exports.PROJECT_CATEGORYS=[{name:"非 React、Vue、Node.js 的项目(JavaScript)",value:"javascript"},{name:"非 React、Vue、Node.js 的项目(TypeScript)",value:"typescript"},{name:"React 项目(JavaScript)",value:"react"},{name:"React 项目(TypeScript)",value:"typescript/react"},{name:"Vue 项目(JavaScript)",value:"vue"},{name:"Vue 项目(TypeScript)",value:"typescript/vue"},{name:"Node.js 项目(JavaScript)",value:"node"},{name:"Node.js 项目(TypeScript)",value:"typescript/node"},{name:"使用 ES5 及之前版本 JavaScript 的老项目",value:"es5"},{name:"uni-app 项目(JavaScript)",value:"uni-app"},{name:"uni-app 项目(TypeScript)",value:"typescript/uni-app"}],exports.STYLELINT_FILE_EXT=[".css",".scss",".less"],exports.STYLELINT_IGNORE_PATTERN=["build","statics","dist"],exports.MARKDOWN_LINT_IGNORE_PATTERN=["node_modules/","build","dist","statics"],exports.PRETTIER_IGNORE_PATTERN=["node_modules","dist","build",".husky","*.min.js","*.min.css","pnpm-lock.yaml","package-lock.json"],exports.UNICODE={success:"🎉 🎉 🎉 🎉 🎉",failure:"✖"};
package/lib/index.js CHANGED
@@ -1 +1 @@
1
- "use strict";var __awaiter=this&&this.__awaiter||function(t,a,u,s){return new(u=u||Promise)(function(e,i){function n(t){try{o(s.next(t))}catch(t){i(t)}}function r(t){try{o(s.throw(t))}catch(t){i(t)}}function o(t){var i;t.done?e(t.value):((i=t.value)instanceof u?i:new u(function(t){t(i)})).then(n,r)}o((s=s.apply(t,a||[])).next())})},__importDefault=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.init=void 0;const install_1=__importDefault(require("./scripts/install")),init=(t,i)=>__awaiter(void 0,void 0,void 0,function*(){return yield(0,install_1.default)(t,i)});exports.init=init;
1
+ "use strict";var __awaiter=this&&this.__awaiter||function(t,i,e,n){return new(e||(e=Promise))(function(r,o){function a(t){try{s(n.next(t))}catch(t){o(t)}}function u(t){try{s(n.throw(t))}catch(t){o(t)}}function s(t){var i;t.done?r(t.value):(i=t.value,i instanceof e?i:new e(function(t){t(i)})).then(a,u)}s((n=n.apply(t,i||[])).next())})},__importDefault=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.init=void 0;const install_1=__importDefault(require("./scripts/install")),init=(t,i)=>__awaiter(void 0,void 0,void 0,function*(){return yield(0,install_1.default)(t,i)});exports.init=init;
@@ -1 +1 @@
1
- "use strict";var __awaiter=this&&this.__awaiter||function(e,s,l,a){return new(l=l||Promise)(function(i,t){function n(e){try{o(a.next(e))}catch(e){t(e)}}function r(e){try{o(a.throw(e))}catch(e){t(e)}}function o(e){var t;e.done?i(e.value):((t=e.value)instanceof l?t:new l(function(e){e(t)})).then(n,r)}o((a=a.apply(e,s||[])).next())})},__importDefault=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0});const path_1=__importDefault(require("path")),execa_1=__importDefault(require("execa")),inquirer_1=__importDefault(require("inquirer")),cgz_core_1=require("@cgzair/cgz-core"),extension_1=__importDefault(require("../utils/extension")),generate_template_1=__importDefault(require("../utils/generate-template")),constants_1=require("../constants");let step=0;const handleEslint=()=>__awaiter(void 0,void 0,void 0,function*(){var e=(yield inquirer_1.default.prompt({type:"list",name:"type",message:`第 ${++step} 步,请选择项目类型:`,choices:constants_1.PROJECT_CATEGORYS}))["type"];return e}),handleStylelint=t=>__awaiter(void 0,void 0,void 0,function*(){var e=(yield inquirer_1.default.prompt({type:"confirm",name:"enable",message:`第 ${++step} 步,是否启用 stylelint(若没有样式文件则不需要):`,default:t}))["enable"];return e}),handleMarkdownLint=()=>__awaiter(void 0,void 0,void 0,function*(){var e=(yield inquirer_1.default.prompt({type:"confirm",name:"enable",message:`第 ${++step} 步,是否启用 markdownlint:`,default:!0}))["enable"];return e}),handlePrettier=()=>__awaiter(void 0,void 0,void 0,function*(){var e=(yield inquirer_1.default.prompt({type:"confirm",name:"enable",message:`第 ${++step} 步,是否启用 Prettier 格式化代码(推荐始终开启):`,default:!0}))["enable"];return e});exports.default=(i,n)=>__awaiter(void 0,void 0,void 0,function*(){var e=i.cwd||process.cwd(),t={};process.chdir(e),i.eslint&&constants_1.PROJECT_CATEGORYS.some(e=>e.value===i.eslint)?t.eslint=i.eslint:t.eslint=yield handleEslint(),"boolean"==typeof i.stylelint?t.stylelint=i.stylelint:t.stylelint=yield handleStylelint(!/node/.test(t.eslint)),"boolean"==typeof i.markdownlint?t.markdownlint=i.markdownlint:t.markdownlint=yield handleMarkdownLint(),"boolean"==typeof i.prettier?t.prettier=i.prettier:t.prettier=yield handlePrettier(),cgz_core_1.log.info(`第 ${++step} 步,配置 git commit 卡点`);try{execa_1.default.sync("npx",["husky","install"],{cwd:e}),execa_1.default.sync("npx",["husky","set",".husky/commit-msg",'npx --no-install commitlint --edit "$1"'],{cwd:e}),execa_1.default.sync("npx",["husky","set",".husky/pre-commit","npx --no-install lint-staged"],{cwd:e}),(0,cgz_core_1.setScripts)("commit","git-cz",e),(0,cgz_core_1.setScripts)("postinstall","husky install",e),(0,cgz_core_1.setConfig)("config",{commitizen:{path:"@commitlint/cz-commitlint"}},e),(0,cgz_core_1.setConfig)("lint-staged",{"*.{js,jsx,tsx,ts,vue}":"eslint --cache --fix","*.{scss,less,css}":"stylelint --fix --allow-empty-input","*.md":"markdownlint --fix","*.{js,jsx,tsx,ts,vue,scss,less,css,json,html}":"prettier --write"},e),cgz_core_1.log.success("配置 git commit 卡点成功")}catch(e){cgz_core_1.log.error(e),cgz_core_1.log.error("配置 git commit 卡点失败")}cgz_core_1.log.info(`第 ${++step} 步,写入编码规范配置文件`),(0,generate_template_1.default)(e,t,n),cgz_core_1.log.success("写入编码规范配置文件成功"),cgz_core_1.log.info(`第 ${++step} 步,安装vscode 扩展`),(0,extension_1.default)(e),cgz_core_1.log.result("初始化完成",path_1.default.resolve(__dirname,"../../"),!0)});
1
+ "use strict";var __awaiter=this&&this.__awaiter||function(e,t,i,n){return new(i||(i=Promise))(function(s,r){function c(e){try{o(n.next(e))}catch(e){r(e)}}function l(e){try{o(n.throw(e))}catch(e){r(e)}}function o(e){var t;e.done?s(e.value):(t=e.value,t instanceof i?t:new i(function(e){e(t)})).then(c,l)}o((n=n.apply(e,t||[])).next())})},__importDefault=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0});const path_1=__importDefault(require("path")),fs_1=__importDefault(require("fs")),cgz_core_1=require("@cgzair/cgz-core"),execa_1=__importDefault(require("execa")),inquirer_1=__importDefault(require("inquirer")),index_1=require("../constants/index"),extension_1=__importDefault(require("../utils/extension")),generate_template_1=__importDefault(require("../utils/generate-template"));let step=0;const handleEslint=()=>__awaiter(void 0,void 0,void 0,function*(){const{type:e}=yield inquirer_1.default.prompt({type:"list",name:"type",message:`第 ${++step} 步,请选择项目类型:`,choices:index_1.PROJECT_CATEGORYS});return e}),handleStylelint=e=>__awaiter(void 0,void 0,void 0,function*(){const{enable:t}=yield inquirer_1.default.prompt({type:"confirm",name:"enable",message:`第 ${++step} 步,是否启用 stylelint(若没有样式文件则不需要):`,default:e});return t}),handleMarkdownLint=()=>__awaiter(void 0,void 0,void 0,function*(){const{enable:e}=yield inquirer_1.default.prompt({type:"confirm",name:"enable",message:`第 ${++step} 步,是否启用 markdownlint:`,default:!0});return e}),handlePrettier=()=>__awaiter(void 0,void 0,void 0,function*(){const{enable:e}=yield inquirer_1.default.prompt({type:"confirm",name:"enable",message:`第 ${++step} 步,是否启用 Prettier 格式化代码(推荐始终开启):`,default:!0});return e}),removeConflictingDeps=e=>{const t=path_1.default.resolve(e,"package.json");if(!fs_1.default.existsSync(t))return!1;try{const e=JSON.parse(fs_1.default.readFileSync(t,"utf8")),i=e=>!e.startsWith("@cgzair/")&&(!!("eslint"===e||e.startsWith("eslint-")||e.startsWith("@eslint/")||e.includes("eslint-config")||e.includes("eslint-plugin")||e.includes("eslint-formatter")||e.includes("typescript-eslint")||e.startsWith("babel-eslint")||e.startsWith("@babel/eslint-")||"@umijs/lint"===e)||(!!("stylelint"===e||e.startsWith("stylelint-")||e.startsWith("@stylelint/")||e.includes("stylelint-config")||e.includes("stylelint-plugin"))||(!!("prettier"===e||e.startsWith("prettier-")||e.startsWith("@prettier/")||e.includes("prettier-plugin")||e.includes("prettier-config"))||(!!e.includes("markdownlint")||!!e.includes("commitlint")))));let n=!1;if(["dependencies","devDependencies"].forEach(t=>{e[t]&&Object.keys(e[t]).forEach(s=>{i(s)&&(delete e[t][s],n=!0)})}),n)return fs_1.default.writeFileSync(t,`${JSON.stringify(e,null,2)}\n`,"utf8"),cgz_core_1.log.info("已自动从 package.json 中移除冲突的旧版依赖"),!0}catch(e){cgz_core_1.log.error(`读取或修改 package.json 失败: ${e}`)}return!1},addProjectDeps=(e,t)=>{const i=path_1.default.resolve(e,"package.json");if(!fs_1.default.existsSync(i))return!1;try{const e=JSON.parse(fs_1.default.readFileSync(i,"utf8")),n=(0,cgz_core_1.getCurrentPkg)(path_1.default.resolve(__dirname,"../../"));e.devDependencies=e.devDependencies||{};const s=n.peerDependencies||{},r={},c=(e,t)=>{const i=s[e];return!i||i.startsWith("workspace:")?t:i};t.eslint&&(r["@cgzair/eslint-config-cgz"]=c("@cgzair/eslint-config-cgz","^2.0.2"),r.eslint="^9.39.2"),t.stylelint&&(r["@cgzair/stylelint-config-cgz"]=c("@cgzair/stylelint-config-cgz","^2.0.0"),r.stylelint="^16.26.1"),t.prettier&&(r["@cgzair/prettier-config-cgz"]=c("@cgzair/prettier-config-cgz","^2.0.0"),r.prettier="^3.7.4",r["@trivago/prettier-plugin-sort-imports"]="^6.0.0"),t.markdownlint&&(r["@cgzair/markdownlint-config-cgz"]=c("@cgzair/markdownlint-config-cgz","^2.0.0"),r["markdownlint-cli"]="^0.35.0"),r["@cgzair/commitlint-config-cgz"]=c("@cgzair/commitlint-config-cgz","^2.0.0"),r["@commitlint/cli"]="^16.2.1",r["@commitlint/cz-commitlint"]="^20.2.0",r.commitizen="^4.2.4",r.husky="^9.1.7";let l=!1;if(Object.keys(r).forEach(t=>{e.devDependencies[t]!==r[t]&&(e.devDependencies[t]=r[t],l=!0)}),l){const t={};return Object.keys(e.devDependencies).sort().forEach(i=>{t[i]=e.devDependencies[i]}),e.devDependencies=t,fs_1.default.writeFileSync(i,`${JSON.stringify(e,null,2)}\n`,"utf8"),cgz_core_1.log.info("已自动向 package.json 中写入最新的规范依赖包"),!0}}catch(e){cgz_core_1.log.error(`自动向 package.json 写入依赖包失败: ${e}`)}return!1},LOCAL_REGISTRY="http://nexus.it.cgzair.com/repository/npm/",pruneAndInstall=(e,t)=>{if(fs_1.default.existsSync(path_1.default.join(e,"yarn.lock")))return void cgz_core_1.log.error("当前项目使用 yarn,@cgzair/cgz-fabric 仅支持 pnpm(需要 autoInstallPeers 机制自动安装规范依赖),请迁移到 pnpm 后重试。");if(fs_1.default.existsSync(path_1.default.join(e,"package-lock.json")))return void cgz_core_1.log.error("当前项目使用 npm,@cgzair/cgz-fabric 仅支持 pnpm(需要 autoInstallPeers 机制自动安装规范依赖),请迁移到 pnpm 后重试。");const i=t?["--registry",t]:[];t===LOCAL_REGISTRY?cgz_core_1.log.info(`内网模式已开启,将使用内网 Nexus registry:${t}`):t&&cgz_core_1.log.info(`自定义 registry 已设置:${t}`),cgz_core_1.log.info("正在执行 pnpm install(autoInstallPeers 将自动安装规范依赖)...");try{execa_1.default.sync("pnpm",["install",...i],{cwd:e,stdio:"inherit"}),cgz_core_1.log.success("依赖安装完成")}catch(e){cgz_core_1.log.error("自动执行 pnpm install 失败,请稍后手动运行以更新依赖环境。")}};exports.default=(e,t)=>__awaiter(void 0,void 0,void 0,function*(){const i=path_1.default.resolve(e.cwd||process.cwd()),n=e.registry||(e.local?LOCAL_REGISTRY:void 0),s={};process.chdir(i),e.eslint&&index_1.PROJECT_CATEGORYS.some(t=>t.value===e.eslint)?s.eslint=e.eslint:s.eslint=yield handleEslint(),"boolean"==typeof e.stylelint?s.stylelint=e.stylelint:s.stylelint=yield handleStylelint(!/node/.test(s.eslint)),"boolean"==typeof e.markdownlint?s.markdownlint=e.markdownlint:s.markdownlint=yield handleMarkdownLint(),"boolean"==typeof e.prettier?s.prettier=e.prettier:s.prettier=yield handlePrettier(),removeConflictingDeps(i),addProjectDeps(i,s),cgz_core_1.log.info(`第 ${++step} 步,配置 git commit 卡点`);try{try{execa_1.default.sync("npx",["husky","install"],{cwd:i})}catch(e){try{execa_1.default.sync("npx",["husky"],{cwd:i})}catch(e){}}const e=(e,t)=>{const n=path_1.default.join(i,`.husky/${e}`),s=path_1.default.join(i,".husky/_/husky.sh");let r="";r=fs_1.default.existsSync(s)?`#!/usr/bin/env sh\n. "$(dirname -- "$0")/_/husky.sh"\n\n${t}\n`:`#!/usr/bin/env sh\n${t}\n`,fs_1.default.writeFileSync(n,r,{mode:493})};e("commit-msg",'npx --no-install commitlint --edit "$1"'),e("pre-commit","npx --no-install lint-staged"),(0,cgz_core_1.setScripts)("commit","git-cz",i),(0,cgz_core_1.setScripts)("postinstall","husky install",i);const t=[];s.eslint&&((0,cgz_core_1.setScripts)("lint:eslint",'eslint "src/**/*.{js,jsx,ts,tsx,vue}" --cache --fix',i),t.push("pnpm run lint:eslint")),s.stylelint&&((0,cgz_core_1.setScripts)("lint:css",'stylelint "src/**/*.{css,scss,sass,less}" --allow-empty-input --fix',i),t.push("pnpm run lint:css")),s.markdownlint&&((0,cgz_core_1.setScripts)("lint:md",'markdownlint README.md "src/**/*.md" --fix',i),t.push("pnpm run lint:md")),t.length>0&&(0,cgz_core_1.setScripts)("lint",t.join(" && "),i),s.prettier&&(0,cgz_core_1.setScripts)("format",'prettier --write "src/**/*.{js,jsx,ts,tsx,vue,css,scss,sass,less,json,md}"',i),(0,cgz_core_1.setConfig)("config",{commitizen:{path:"@commitlint/cz-commitlint"}},i),(0,cgz_core_1.setConfig)("lint-staged",{"*.{js,jsx,tsx,ts,vue}":"eslint --cache --fix","*.{scss,less,css}":"stylelint --fix --allow-empty-input","*.md":"markdownlint --fix","*.{js,jsx,tsx,ts,vue,scss,less,css,json,html}":"prettier --write"},i),cgz_core_1.log.success("配置 git commit 卡点成功")}catch(e){cgz_core_1.log.error(e),cgz_core_1.log.error("配置 git commit 卡点失败")}cgz_core_1.log.info(`第 ${++step} 步,写入编码规范配置文件`),(0,generate_template_1.default)(i,s,t),cgz_core_1.log.success("写入编码规范配置文件成功"),pruneAndInstall(i,n),cgz_core_1.log.info(`第 ${++step} 步,安装vscode 扩展`),(0,extension_1.default)(i),cgz_core_1.log.result("初始化完成",path_1.default.resolve(__dirname,"../../"),!0)});
@@ -1 +1 @@
1
- "use strict";var __importDefault=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0});const fs_1=__importDefault(require("fs")),child_process_1=require("child_process"),path_1=__importDefault(require("path")),cgz_core_1=require("@cgzair/cgz-core");exports.default=(e=path_1.default.resolve(__dirname,"../../../"))=>{try{(0,child_process_1.execSync)("code -v")}catch(e){return cgz_core_1.log.info("当前系统暂未安装 vscode,扩展安装已跳过,更多请参考:https://code.visualstudio.com/")}JSON.parse(fs_1.default.readFileSync(path_1.default.resolve(__dirname,"../config/_vscode/extensions.json.ejs"),"utf-8")).recommendations.forEach(e=>{cgz_core_1.log.info(`安装 ${e} ...`),(0,child_process_1.execSync)("code --install-extension "+e),cgz_core_1.log.info(e+" 安装成功")}),(0,cgz_core_1.setScripts)("extension","fabric i --ext",e),cgz_core_1.log.info("写入 vscode 扩展 scripts 配置成功"),cgz_core_1.log.success("安装推荐 vscode 扩展成功")};
1
+ "use strict";var __importDefault=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0});const child_process_1=require("child_process"),fs_1=__importDefault(require("fs")),path_1=__importDefault(require("path")),cgz_core_1=require("@cgzair/cgz-core");exports.default=(e=path_1.default.resolve(__dirname,"../../../"))=>{try{(0,child_process_1.execSync)("code -v")}catch(e){return cgz_core_1.log.info("当前系统暂未安装 vscode,扩展安装已跳过,更多请参考:https://code.visualstudio.com/")}JSON.parse(fs_1.default.readFileSync(path_1.default.resolve(__dirname,"../config/_vscode/extensions.json.ejs"),"utf-8")).recommendations.forEach(e=>{cgz_core_1.log.info(`安装 ${e} ...`),(0,child_process_1.execSync)(`code --install-extension ${e}`),cgz_core_1.log.info(`${e} 安装成功`)}),(0,cgz_core_1.setScripts)("extension","fabric i --ext",e),cgz_core_1.log.info("写入 vscode 扩展 scripts 配置成功"),cgz_core_1.log.success("安装推荐 vscode 扩展成功")};
@@ -1 +1 @@
1
- "use strict";var __importDefault=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0});const path_1=__importDefault(require("path")),fs_1=__importDefault(require("fs")),cgz_core_1=require("@cgzair/cgz-core"),lodash_1=__importDefault(require("lodash")),glob_1=__importDefault(require("glob")),ejs_1=__importDefault(require("ejs")),constants_1=require("../constants"),mergeVSCodeConfig=(e,t)=>{if(!(0,cgz_core_1.isAccessSync)(e))return t;try{var r=JSON.parse(fs_1.default.readFileSync(e,"utf8")),s=JSON.parse(t);return JSON.stringify(lodash_1.default.mergeWith(r,s,(e,t)=>{if(Array.isArray(e)&&Array.isArray(t))return lodash_1.default.union(t.concat(e))}),null,2)}catch(e){return""}};exports.default=(t,r,e,s=path_1.default.resolve(__dirname,"../config"))=>{e=glob_1.default.sync(`${e?"_vscode":"**"}/*.ejs`,{cwd:s});(0,cgz_core_1.isAccessSync)(path_1.default.resolve(t,".vscode"))||fs_1.default.mkdirSync(path_1.default.resolve(t,".vscode"));for(const _ of e){var a=path_1.default.resolve(t,_.replace(/\.ejs$/,"").replace(/^_/,"."));let e=ejs_1.default.render(fs_1.default.readFileSync(path_1.default.resolve(s,_),"utf8"),Object.assign({stylelintExt:constants_1.STYLELINT_FILE_EXT,stylelintIgnores:constants_1.STYLELINT_IGNORE_PATTERN,markdownLintIgnores:constants_1.MARKDOWN_LINT_IGNORE_PATTERN},r));(e=/^_vscode/.test(_)?mergeVSCodeConfig(a,e):e).trim()&&fs_1.default.writeFileSync(a,e,"utf8")}};
1
+ "use strict";var __importDefault=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0});const fs_1=__importDefault(require("fs")),path_1=__importDefault(require("path")),cgz_core_1=require("@cgzair/cgz-core"),ejs_1=__importDefault(require("ejs")),glob_1=require("glob"),lodash_1=__importDefault(require("lodash")),index_1=require("../constants/index"),mergeVSCodeConfig=(e,t)=>{if(!(0,cgz_core_1.isAccessSync)(e))return t;try{const r=JSON.parse(fs_1.default.readFileSync(e,"utf8")),s=JSON.parse(t);return JSON.stringify(lodash_1.default.mergeWith(r,s,(e,t)=>{if(Array.isArray(e)&&Array.isArray(t))return lodash_1.default.union(t.concat(e))}),null,2)}catch(e){return""}},removeLegacyConfigs=e=>{const t=[".eslintrc.js",".eslintrc.cjs",".eslintrc.json",".eslintrc.yaml",".eslintrc.yml",".eslintrc",".eslintignore",".prettierrc",".prettierrc.js",".prettierrc.cjs",".prettierrc.json",".prettierrc.yaml",".prettierrc.yml","prettier.config.js","prettier.config.cjs",".prettierignore",".stylelintrc",".stylelintrc.js",".stylelintrc.cjs",".stylelintrc.json",".stylelintrc.yaml",".stylelintrc.yml","stylelint.config.js","stylelint.config.cjs",".stylelintignore",".commitlintrc.js",".commitlintrc.cjs","commitlint.config.js","commitlint.config.mjs"];for(const r of t){const t=path_1.default.resolve(e,r);if(fs_1.default.existsSync(t))try{fs_1.default.unlinkSync(t)}catch(e){}}};exports.default=(e,t,r,s=path_1.default.resolve(__dirname,"../config"))=>{r||removeLegacyConfigs(e);const i=(0,glob_1.globSync)((r?"_vscode":"**")+"/*.ejs",{cwd:s});(0,cgz_core_1.isAccessSync)(path_1.default.resolve(e,".vscode"))||fs_1.default.mkdirSync(path_1.default.resolve(e,".vscode"));for(const r of i){const i=path_1.default.resolve(e,r.replace(/\.ejs$/,"").replace(/^_/,"."));let l=ejs_1.default.render(fs_1.default.readFileSync(path_1.default.resolve(s,r),"utf8"),Object.assign({stylelintExt:index_1.STYLELINT_FILE_EXT,stylelintIgnores:index_1.STYLELINT_IGNORE_PATTERN,markdownLintIgnores:index_1.MARKDOWN_LINT_IGNORE_PATTERN,prettierIgnores:index_1.PRETTIER_IGNORE_PATTERN},t));/^_vscode/.test(r)&&(l=mergeVSCodeConfig(i,l)),l.trim()&&fs_1.default.writeFileSync(i,l,"utf8")}};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cgzair/cgz-fabric",
3
- "version": "1.6.5",
3
+ "version": "2.0.8",
4
4
  "description": "A collection of configuration files containing prettier, eslint, stylelint, markdown",
5
5
  "main": "lib/index.js",
6
6
  "bin": {
@@ -10,7 +10,7 @@
10
10
  "cgz-fabric"
11
11
  ],
12
12
  "scripts": {
13
- "build": "npm run copy && tsc",
13
+ "build": "npx rimraf -g \"lib/**\" && pnpm run copy && tsc",
14
14
  "copy": "copyfiles -a -u 1 \"src/config/**\" lib",
15
15
  "test": "jest",
16
16
  "test-watch": "jest --watch",
@@ -23,58 +23,59 @@
23
23
  "tsconfig.json"
24
24
  ],
25
25
  "author": "cgz",
26
+ "peerDependencies": {
27
+ "@cgzair/commitlint-config-cgz": "^2.0.0",
28
+ "@cgzair/eslint-config-cgz": "^2.0.4",
29
+ "@cgzair/markdownlint-config-cgz": "^2.0.0",
30
+ "@cgzair/prettier-config-cgz": "^2.0.0",
31
+ "@cgzair/stylelint-config-cgz": "^2.0.1"
32
+ },
33
+ "peerDependenciesMeta": {
34
+ "@cgzair/stylelint-config-cgz": {
35
+ "optional": true
36
+ },
37
+ "@cgzair/prettier-config-cgz": {
38
+ "optional": true
39
+ },
40
+ "@cgzair/markdownlint-config-cgz": {
41
+ "optional": true
42
+ }
43
+ },
26
44
  "dependencies": {
27
- "@babel/core": "^7.16.7",
28
- "@babel/eslint-parser": "^7.16.5",
29
- "@babel/plugin-proposal-class-properties": "^7.16.7",
30
- "@babel/plugin-proposal-decorators": "^7.16.7",
31
- "@babel/preset-env": "^7.16.10",
32
- "@babel/preset-react": "^7.16.7",
33
- "@babel/preset-typescript": "^7.16.7",
34
- "@cgzair/cgz-core": "^1.3.0",
35
- "@cgzair/commitlint-config-cgz": "^1.1.0",
36
- "@cgzair/eslint-config-cgz": "^1.2.4",
37
- "@cgzair/markdownlint-config-cgz": "^1.4.0",
38
- "@cgzair/prettier-config-cgz": "^1.1.2",
39
- "@cgzair/stylelint-config-cgz": "^1.1.0",
40
- "@trivago/prettier-plugin-sort-imports": "^4.3.0",
41
- "@typescript-eslint/eslint-plugin": "^5.13.0",
42
- "@typescript-eslint/parser": "^5.13.0",
45
+ "@cgzair/cgz-core": "^2.0.0-alpha.0",
43
46
  "chalk": "4.1.2",
44
47
  "commander": "^9.0.0",
45
48
  "ejs": "^3.1.6",
46
- "eslint-config-egg": "^12.3.1",
47
- "eslint-config-prettier": "^8.5.0",
48
- "eslint-plugin-import": "^2.25.4",
49
- "eslint-plugin-jsx-a11y": "^6.5.1",
50
- "eslint-plugin-react": "^7.28.0",
51
- "eslint-plugin-react-hooks": "^4.3.0",
52
- "eslint-plugin-vue": "^8.5.0",
53
- "glob": "^7.2.0",
49
+ "glob": "^13.0.0",
54
50
  "inquirer": "^8.2.1",
55
- "lint-staged": "^12.4.1",
56
- "markdownlint-cli": "^0.31.1",
57
- "vue-eslint-parser": "^8.3.0"
51
+ "lodash": "^4.17.21"
58
52
  },
59
53
  "devDependencies": {
54
+ "@cgzair/commitlint-config-cgz": "2.0.0",
55
+ "@cgzair/eslint-config-cgz": "2.0.4",
56
+ "@cgzair/markdownlint-config-cgz": "2.0.0",
57
+ "@cgzair/prettier-config-cgz": "2.0.0",
58
+ "@cgzair/stylelint-config-cgz": "2.0.1",
60
59
  "@types/ejs": "^3.1.0",
61
60
  "@types/fs-extra": "^9.0.13",
62
61
  "@types/glob": "^7.2.0",
63
62
  "@types/inquirer": "^8.2.0",
63
+ "@types/lodash": "^4.14.195",
64
64
  "copyfiles": "^2.4.1",
65
65
  "execa": "5.1.1",
66
66
  "fs-extra": "^10.1.0",
67
- "jest": "27.3.1",
67
+ "jest": "^30.2.0",
68
68
  "nyc": "^15.1.0",
69
69
  "ts-node": "^10.8.1",
70
- "typescript": "^4.4.4"
70
+ "typescript": "^5.9.3"
71
71
  },
72
72
  "publishConfig": {
73
73
  "access": "public"
74
74
  },
75
75
  "engines": {
76
- "node": ">=12.0.0"
76
+ "node": ">=24.14.1",
77
+ "pnpm": ">=9.0.0"
77
78
  },
78
79
  "license": "MIT",
79
- "gitHead": "52c76a5b3b1284b9334639b4b54b3ebbc67a1c7e"
80
+ "gitHead": "516c41f893f18edaf5b49db8eab6e7541ba70c31"
80
81
  }
package/tsconfig.json CHANGED
@@ -10,7 +10,7 @@
10
10
  "skipLibCheck": true,
11
11
  "downlevelIteration": true,
12
12
  "resolveJsonModule": true,
13
- "declaration": false,
13
+ "declaration": true,
14
14
  "strictNullChecks": true
15
15
  },
16
16
  "include": ["src"]
@@ -1,3 +0,0 @@
1
- statics
2
- dist
3
- build
@@ -1,3 +0,0 @@
1
- module.exports = {
2
- extends: ["<%= eslint === 'javascript' ? '@cgzair/eslint-config-cgz' : `@cgzair/eslint-config-cgz/${eslint}` %>"<%_ if (prettier) { _%>, "prettier"<%_ } _%>],
3
- };
@@ -1,3 +0,0 @@
1
- module.exports = {
2
- ...require("@cgzair/prettier-config-cgz"),
3
- };
@@ -1,5 +0,0 @@
1
- <%_ if (stylelint) { _%>
2
- module.exports = {
3
- extends: "@cgzair/stylelint-config-cgz",
4
- };
5
- <%_ } _%>