neo-cmp-cli 1.10.20 → 1.11.0

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/dist/index2.js CHANGED
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./_virtual/index.js"),o=require("figlet"),s=require("yargs"),n=require("chalk"),a=require("inquirer"),t=require("ora"),p=require("./main2.js"),c=require("./neo/env.js"),i=require("./package.json.js");var m;exports.__require=function(){if(m)return e.__exports;m=1;const l=o,r=s,u=n,g=a,d=t,{neoInit:h,neoInitByCopy:y,inspect:b,neoConfigInit:v,validateProjectName:C,getCmpTypeByDir:f,NeoService:$,NeoLoginService:x,hasNeoProject:T,consoleTag:w,errorLog:U,successLog:j}=p.__require(),L=p.__require(),{getNeoCrmAPI:N}=c.__require(),_=i.default,M=l.textSync("neo",{font:"Lean"}),q=L.projectConfig,S=function(e){return u.green(u.bold(e))},D={"config init":"初始化配置文件",dev:"开启本地调试模式",build:"构建生产环境代码",build2lib:"构建 UMD 模块",build2esm:"构建 ESM 模块",publish2oss:"发布到 OSS",inspect:"输出配置文件",open:"打开项目"},R={...D,init:"初始化自定义组件项目",login:"登录 NeoCRM 平台",logout:"登出 NeoCRM 平台","create project":"创建自定义组件项目","create cmp":"创建自定义组件",linkDebug:"开启外链调试模式","pull cmp":"拉取线上自定义组件","delete cmp":"删除线上自定义组件",preview:"预览自定义组件","push cmp":"发布自定义组件到平台"};return r.middleware(function(e){if(e.help||e.version)return;const o=function(e){if(!e._||0===e._.length)return"";const o=e._.join(" ");if(R[o])return o;const s=e._[0];return R[s]?s:o||s}(e);if(!o)return;const s=R[o]||o;D[o]&&(console.log(u.green(M)),console.log(u.green(`当前版本:v${_.version}.\n`))),console.log(""),console.log(u.cyan(`执行命令: ${s}`)),console.log("")}).command("init [options]","根据模板创建一个自定义组件",e=>{e.reset().usage(S("Usage")+": $0 init [options]").option("type",{alias:"t",describe:"自定义组件类型(react ts 技术栈/ vue2.0 技术栈/ react 技术栈)"}).option("name",{alias:"n",describe:"自定义组件项目名称"}).alias("h","help")},e=>{if(e.type&&e.name)T()&&(U(`${w}创建自定义组件失败,当前目录(${process.cwd()})已经是一个自定义组件项目,请勿重复创建。`),process.exit(1)),"github"===e.mode?h(e.type,e.name):y(e.type,e.name);else{const o=[],s=[{name:"react&ts 自定义组件",value:"react-ts",short:"react-ts"},{name:"Neo 自定义业务组件",value:"neo",short:"neo"},{name:"Neo H5 自定义业务组件",value:"neo-h5-cmps",short:"neo-h5-cmps"},{name:"antd 自定义组件",value:"antd",short:"antd"},{name:"echarts 自定义组件",value:"echarts",short:"echarts"},{name:"vue2 自定义组件",value:"vue2",short:"vue2"}];e.type||o.push({name:"type",type:"list",message:"请选择您要创建的自定义组件类型: ",default:"react-ts",choices:s}),e.name||o.push({name:"name",type:"input",message:"请设置自定义组件项目名称(默认 neoCustomCmp):",default:"neoCustomCmp"}),g.prompt(o).then(o=>{const{isValid:s,errors:n}=C(o.name);s||(U(n.join("\n")),process.exit(1)),"github"===e.mode?h(o.type,o.name):y(o.type,o.name)})}}).command("config init","创建 neo.config.js 配置文件",e=>{e.reset().usage(S("Usage")+": $0 config init").alias("h","help")},()=>{v("neo.config.js")}).command("login","登录 NeoCRM 平台(OAuth2 授权)",e=>{e.reset().usage(S("Usage")+": $0 login").alias("h","help")},()=>{const e=[{name:"env",type:"list",message:"请选择您要登录的环境:",default:"cd",choices:[{name:"线上生产环境(crm.xiaoshouyi.com)",value:"production"},{name:"灰度环境(crm-gray.xiaoshouyi.com)",value:"gray"},{name:"沙盒环境(crm-sandbox.xiaoshouyi.com)",value:"sandbox"},{name:"开发环境(crm-cd.xiaoshouyi.com)",value:"cd"},{name:"自定义环境(在neo.config.js / neoConfig 中自行配置)",value:"custom"}]}];g.prompt(e).then(async e=>{const o=N(e.env,q.neoConfig);try{const e=new x(o);await e.login(),process.exit(0)}catch(e){U(`\n登录失败: ${e.message||e.msg}`),process.exit(1)}})}).command("logout","登出 NeoCRM 平台",e=>{e.reset().usage(S("Usage")+": $0 logout").alias("h","help")},async()=>{try{const e=new x;await e.logout(),process.exit(0)}catch(e){U(`\n登出失败: ${e.message||e.msg}`),process.exit(1)}}).command("create","创建项目或者组件",e=>e.command("project [options]","创建自定义组件项目(含工程代码)",e=>{e.reset().usage(S("Usage")+": $0 project [options]").option("name",{alias:"n",describe:"自定义组件项目名称"}).alias("h","help")},e=>{if(e.name)L.createCmpProjectByTemplate(e.name);else{const e=[{name:"name",type:"input",message:"请设置自定义组件项目名称:"}];g.prompt(e).then(e=>{const{isValid:o,errors:s}=C(e.name);o||(U(s.join("\n")),process.exit(1)),e.name?L.createCmpProjectByTemplate(e.name):(U("自定义组件项目名称不能为空。"),process.exit(1))})}}).command("cmp [options]","创建自定义组件",e=>{e.reset().usage(S("Usage")+": $0 cmp [options]").option("name",{alias:"n",describe:"自定义组件名称"}).alias("h","help")},e=>{if(e.name)L.createCmpByTemplate(e.name);else{const e=[{name:"name",type:"input",message:"请设置自定义组件名称:"}];g.prompt(e).then(e=>{e.name?L.createCmpByTemplate(e.name):(U("自定义组件名称不能为空。"),process.exit(1))})}})).command("pull cmp [options]","拉取线上自定义组件",e=>{e.reset().usage(S("Usage")+": $0 pull cmp [options]").option("name",{alias:"n",describe:"自定义组件名称"}).alias("h","help")},async e=>{if(e.name)console.log(u.yellow(`[neo pull cmp] 即将拉取自定义组件:${e.name},如本地已存在同名组件目录,将可能被覆盖,请提前备份本地修改。`)),L.pullCmp(e.name);else{const e=new $,o=d("正在拉取线上自定义组件列表...").start(),s=await e.getCustomCmpList();0===s.length&&(U("当前租户暂无任何自定义组件。"),process.exit(1)),o.stop("线上自定义组件列表拉取成功。");const n=[{name:"cmpType",type:"list",message:"请选择要拉取的自定义组件:",choices:[{name:"拉取所有组件(ALL)",value:"ALL"},...s.map(e=>({name:`${e.label}(${e.cmpType})`,value:e.cmpType}))]}];g.prompt(n).then(o=>{o.cmpType?"ALL"===o.cmpType?(console.log(u.yellow(`[neo pull cmp] 即将拉取当前租户下的所有自定义组件(共 ${s.length} 个),如本地存在同名组件目录,将可能被覆盖,请提前备份本地修改。`)),s.forEach(async o=>{await L.pullCmp(o.cmpType,e)}),j("[neo pull cmp]拉取所有组件命令已执行完成。")):(console.log(u.yellow(`[neo pull cmp] 即将拉取自定义组件:${o.cmpType},如本地已存在同名组件目录,将可能被覆盖,请提前备份本地修改。`)),L.pullCmp(o.cmpType,e)):(U("请选择要拉取的自定义组件。"),process.exit(1))})}}).command("delete cmp [options]","删除线上自定义组件",e=>{e.reset().usage(S("Usage")+": $0 delete cmp [options]").option("name",{alias:"n",describe:"自定义组件名称"}).alias("h","help")},async e=>{if(e.name)L.deleteCmp(e.name);else{const e=new $,o=d("正在获取线上自定义组件列表...").start(),s=await e.getCustomCmpList();0===s.length&&(U("当前租户暂无任何自定义组件。"),process.exit(1)),o.stop("线上自定义组件列表获取成功。");const n=[{name:"cmpType",type:"list",message:"请选择要删除的自定义组件:",choices:s.map(e=>({name:`${e.label}(${e.cmpType})`,value:e.cmpType}))}];g.prompt(n).then(o=>{o.cmpType?L.deleteCmp(o.cmpType,e):(U("自定义组件名称不能为空。"),process.exit(1))})}}).command("preview [options]","预览指定自定义组件(仅预览组件本身内容)",e=>{e.reset().usage(S("Usage")+": $0 preview [options]").option("name",{alias:"n",describe:"自定义组件名称"}).alias("h","help")},e=>{if(e.name)L.previewCmp(e.name);else{const e=f(q.componentsDir);0===e.length&&(U("当前自定义组件目录中未找到自定义组件。(./src/components 目录下)"),process.exit(1));const o=[{name:"cmpType",type:"list",message:"请选择要预览的自定义组件:",choices:e.map(e=>({name:e,value:e}))}];g.prompt(o).then(e=>{e.cmpType||(U("未选择要预览的自定义组件。"),process.exit(1)),L.previewCmp(e.cmpType)})}}).command("dev","开启本地调试模式",e=>{e.reset().usage(S("Usage")+": $0 dev").alias("h","help")},()=>{L.dev()}).command("linkDebug","开启外链调试模式(在线上页面设计器端调试)",e=>{e.reset().usage(S("Usage")+": $0 linkDebug").alias("h","help")},e=>{L.linkDebug()}).command("build","构建生产环境代码",e=>{e.reset().usage(S("Usage")+": $0 build").alias("h","help")},e=>{L.build()}).command("build2lib","构建 UMD 模块",e=>{e.reset().usage(S("Usage")+": $0 build2lib").alias("h","help")},e=>{L.build2lib()}).command("publish2oss [options]","发布到oss",e=>{e.reset().usage(S("Usage")+": $0 publish2oss [options]").option("name",{alias:"n",describe:"自定义组件名称"}).alias("h","help")},e=>{if(e.name)L.publish2oss(e.name);else{const e=f(q.componentsDir);0===e.length&&(U("当前自定义组件目录中未找到自定义组件。(./src/components 目录下)"),process.exit(1));const o=[{name:"cmpType",type:"list",message:"请选择要发布的自定义组件:",choices:e.map(e=>({name:e,value:e}))}];g.prompt(o).then(e=>{e.cmpType||(U("未选择要发布的自定义组件。"),process.exit(1)),L.publish2oss(e.cmpType)})}}).command("push cmp [options]","构建并发布自定义组件到 NeoCRM 平台",e=>{e.reset().usage(S("Usage")+": $0 push cmp [options]").option("name",{alias:"n",describe:"自定义组件名称"}).alias("h","help")},e=>{if(e.name)console.log(u.yellow(`[neo push cmp] 即将构建并发布自定义组件:${e.name} 到 NeoCRM 平台,请确保已经通过 neo login 登录到正确的环境。`)),L.pushCmp(e.name);else{const e=f(q.componentsDir);0===e.length&&(U("当前自定义组件目录中未找到自定义组件。(./src/components 目录下)"),process.exit(1));const o=[{name:"cmpType",type:"list",message:"请选择要发布的自定义组件:",choices:[{name:"发布所有组件(ALL)",value:"ALL"},...e.map(e=>({name:e,value:e}))]}];g.prompt(o).then(o=>{o.cmpType||(U("请选择要发布的自定义组件。"),process.exit(1)),"ALL"===o.cmpType?(console.log(u.yellow(`[neo push cmp] 即将构建并发布当前目录下的所有自定义组件(共 ${e.length} 个)到 NeoCRM 平台,请确保已经通过 neo login 登录到正确的环境。`)),e.forEach(async e=>{await L.pushCmp(e)}),j("[neo push cmp]发布所有组件命令已执行完成。")):(console.log(u.yellow(`[neo push cmp] 即将构建并发布自定义组件:${o.cmpType} 到 NeoCRM 平台,请确保已经通过 neo login 登录到正确的环境。`)),L.pushCmp(o.cmpType))})}}).command("build2esm","构建 ESM 模块",e=>{e.reset().usage(S("Usage")+": $0 build2esm").alias("h","help")},()=>{L.build2esm()}).command("inspect","输出当前配置文件",e=>{e.reset().usage(S("Usage")+": $0 inspect").option("type",{alias:"t",describe:"环境类型(本地调试环境/生产环境/library构建环境)",default:"build"}).alias("h","help")},e=>{b(e.type)}).command("open [options]","使用 Cursor 或 VSCode 打开项目",e=>{e.reset().usage(S("Usage")+": $0 open [options]").option("editor",{alias:"e",describe:"编辑器类型(cursor/vscode/auto),默认为 auto(自动检测)",default:"auto",choices:["cursor","vscode","code","auto"]}).option("name",{alias:"n",describe:"要打开的项目名称,默认为当前目录"}).alias("h","help")},e=>{L.openEditor(e.editor,e.name)}).alias("h","help").alias("v","version").strict().fail((e,o,s)=>{U(`\n运行命令时发生错误: ${e}。\n`),console.log(S("当前可用命令列表:")),console.log("");[{cmd:"init [options]",desc:"根据模板创建一个自定义组件"},{cmd:"create project [options]",desc:"创建自定义组件项目(含工程代码)"},{cmd:"create cmp [options]",desc:"创建自定义组件"},{cmd:"preview [options]",desc:"预览指定自定义组件(仅预览组件本身内容)"},{cmd:"linkDebug",desc:"开启外链调试模式(在线上页面设计器端调试)"},{cmd:"login",desc:"登录 NeoCRM 平台(OAuth2 授权)"},{cmd:"logout",desc:"登出 NeoCRM 平台"},{cmd:"pull cmp [options]",desc:"拉取线上自定义组件"},{cmd:"delete cmp [options]",desc:"删除线上自定义组件"},{cmd:"push cmp [options]",desc:"构建并发布自定义组件到 NeoCRM 平台"},{cmd:"open [options]",desc:"使用 Cursor 或 VSCode 打开项目"}].forEach(({cmd:e,desc:o})=>{console.log(` ${u.cyan(e.padEnd(25))} ${o}`)}),console.log(""),console.log(`使用 ${u.cyan("neo <command> --help")} 查看具体命令的帮助信息。`),console.log(""),process.exit(1)}).help().updateStrings({"Usage:":S("Usage:"),"Commands:":S("Commands:"),"Options:":S("Options:")}).argv,e.__exports};
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./_virtual/index.js"),s=require("figlet"),o=require("yargs"),n=require("chalk"),a=require("inquirer"),t=require("ora"),p=require("./main2.js"),c=require("./neo/env.js"),i=require("./package.json.js");var m;exports.__require=function(){if(m)return e.__exports;m=1;const l=s,r=o,u=n,g=a,d=t,{neoInit:h,neoInitByCopy:y,inspect:b,neoConfigInit:v,validateProjectName:C,getCmpTypeByDir:$,NeoService:f,NeoLoginService:x,hasNeoProject:T,consoleTag:w,errorLog:U,successLog:j,warningLog:L}=p.__require(),N=p.__require(),{getNeoCrmAPI:_}=c.__require(),M=i.default,q=l.textSync("neo",{font:"Lean"}),S=N.projectConfig,D=function(e){return u.green(u.bold(e))},R={"config init":"初始化配置文件",dev:"开启本地调试模式",build:"构建生产环境代码",build2lib:"构建 UMD 模块",build2esm:"构建 ESM 模块",publish2oss:"发布到 OSS",inspect:"输出配置文件",open:"打开项目"},A={...R,init:"初始化自定义组件项目",login:"登录 NeoCRM 平台",logout:"登出 NeoCRM 平台","create project":"创建自定义组件项目","create cmp":"创建自定义组件",linkDebug:"开启外链调试模式","pull cmp":"拉取线上自定义组件","delete cmp":"删除线上自定义组件",preview:"预览自定义组件","push cmp":"发布自定义组件到平台"};return r.middleware(function(e){if(e.help||e.version)return;const s=function(e){if(!e._||0===e._.length)return"";const s=e._.join(" ");if(A[s])return s;const o=e._[0];return A[o]?o:s||o}(e);if(!s)return;const o=A[s]||s;R[s]&&(console.log(u.green(q)),console.log(u.green(`当前版本:v${M.version}.\n`))),console.log(""),console.log(u.cyan(`执行命令: ${o}`)),console.log("")}).command("init [options]","根据模板创建一个自定义组件",e=>{e.reset().usage(D("Usage")+": $0 init [options]").option("type",{alias:"t",describe:"自定义组件类型(react ts 技术栈/ vue2.0 技术栈/ react 技术栈)"}).option("name",{alias:"n",describe:"自定义组件项目名称"}).alias("h","help")},e=>{if(e.type&&e.name)T()&&(U(`${w}创建自定义组件失败,当前目录(${process.cwd()})已经是一个自定义组件项目,请勿重复创建。`),process.exit(1)),"github"===e.mode?h(e.type,e.name):y(e.type,e.name);else{const s=[],o=[{name:"react&ts 自定义组件",value:"react-ts",short:"react-ts"},{name:"Neo 自定义业务组件",value:"neo",short:"neo"},{name:"Neo H5 自定义业务组件",value:"neo-h5-cmps",short:"neo-h5-cmps"},{name:"antd 自定义组件",value:"antd",short:"antd"},{name:"echarts 自定义组件",value:"echarts",short:"echarts"},{name:"vue2 自定义组件",value:"vue2",short:"vue2"}];e.type||s.push({name:"type",type:"list",message:"请选择您要创建的自定义组件类型: ",default:"react-ts",choices:o}),e.name||s.push({name:"name",type:"input",message:"请设置自定义组件项目名称(默认 neoCustomCmp):",default:"neoCustomCmp"}),g.prompt(s).then(s=>{const{isValid:o,errors:n}=C(s.name);o||(U(n.join("\n")),process.exit(1)),"github"===e.mode?h(s.type,s.name):y(s.type,s.name)})}}).command("config init","创建 neo.config.js 配置文件",e=>{e.reset().usage(D("Usage")+": $0 config init").alias("h","help")},()=>{v("neo.config.js")}).command("login","登录 NeoCRM 平台(OAuth2 授权)",e=>{e.reset().usage(D("Usage")+": $0 login").alias("h","help")},()=>{const e=[{name:"env",type:"list",message:"请选择您要登录的环境:",default:"cd",choices:[{name:"线上生产环境(crm.xiaoshouyi.com)",value:"production"},{name:"灰度环境(crm-gray.xiaoshouyi.com)",value:"gray"},{name:"沙盒环境(crm-sandbox.xiaoshouyi.com)",value:"sandbox"},{name:"开发环境(crm-cd.xiaoshouyi.com)",value:"cd"},{name:"自定义环境(在neo.config.js / neoConfig 中自行配置)",value:"custom"}]}];g.prompt(e).then(async e=>{const s=_(e.env,S.neoConfig);try{const e=new x(s);await e.login(),process.exit(0)}catch(e){U(`\n登录失败: ${e.message||e.msg}`),process.exit(1)}})}).command("logout","登出 NeoCRM 平台",e=>{e.reset().usage(D("Usage")+": $0 logout").alias("h","help")},async()=>{try{const e=new x;await e.logout(),process.exit(0)}catch(e){U(`\n登出失败: ${e.message||e.msg}`),process.exit(1)}}).command("create","创建项目或者组件",e=>e.command("project [options]","创建自定义组件项目(含工程代码)",e=>{e.reset().usage(D("Usage")+": $0 project [options]").option("name",{alias:"n",describe:"自定义组件项目名称"}).alias("h","help")},e=>{if(e.name)N.createCmpProjectByTemplate(e.name);else{const e=[{name:"name",type:"input",message:"请设置自定义组件项目名称:"}];g.prompt(e).then(e=>{const{isValid:s,errors:o}=C(e.name);s||(U(o.join("\n")),process.exit(1)),e.name?N.createCmpProjectByTemplate(e.name):(U("自定义组件项目名称不能为空。"),process.exit(1))})}}).command("cmp [options]","创建自定义组件",e=>{e.reset().usage(D("Usage")+": $0 cmp [options]").option("name",{alias:"n",describe:"自定义组件名称"}).alias("h","help")},e=>{if(e.name)N.createCmpByTemplate(e.name);else{const e=[{name:"name",type:"input",message:"请设置自定义组件名称:"}];g.prompt(e).then(e=>{e.name?N.createCmpByTemplate(e.name):(U("自定义组件名称不能为空。"),process.exit(1))})}})).command("pull cmp [options]","拉取线上自定义组件",e=>{e.reset().usage(D("Usage")+": $0 pull cmp [options]").option("name",{alias:"n",describe:"自定义组件名称"}).alias("h","help")},async e=>{if(e.name){L(`[neo pull cmp] 即将拉取自定义组件:${e.name},如本地已存在同名组件目录,将可能被覆盖,请提前备份本地修改。`);try{await N.pullCmp(e.name)}catch(e){U(e.message||e.msg||"拉取线上自定义组件失败"),process.exit(1)}}else{const e=new f,s=d("正在拉取线上自定义组件列表...").start(),o=await e.getCustomCmpList();0===o.length&&(U("当前租户暂无任何自定义组件。"),process.exit(1)),s.stop("线上自定义组件列表拉取成功。");const n=[{name:"cmpType",type:"list",message:"请选择要拉取的自定义组件:",choices:[{name:"拉取所有组件(ALL)",value:"ALL"},...o.map(e=>({name:`${e.label}(${e.cmpType})`,value:e.cmpType}))]}];try{const s=await g.prompt(n);if(s.cmpType)if("ALL"===s.cmpType){L(`[neo pull cmp] 即将拉取当前租户下的所有自定义组件(共 ${o.length} 个),如本地存在同名组件目录,将可能被覆盖,请提前备份本地修改。`);for(let s=0,n=o.length;s<n;s++){const a=o[s];console.log(u.gray(`[neo pull cmp] 正在拉取第 ${s+1}/${n} 个组件: ${a.cmpType}`)),await N.pullCmp(a.cmpType,e)}j("[neo pull cmp]拉取所有组件命令已执行完成。")}else L(`[neo pull cmp] 即将拉取自定义组件:${s.cmpType},如本地已存在同名组件目录,将可能被覆盖,请提前备份本地修改。`),await N.pullCmp(s.cmpType,e);else U("请选择要拉取的自定义组件。"),process.exit(1)}catch(e){U(e.message||e.msg||"拉取线上自定义组件失败"),process.exit(1)}}}).command("delete cmp [options]","删除线上自定义组件",e=>{e.reset().usage(D("Usage")+": $0 delete cmp [options]").option("name",{alias:"n",describe:"自定义组件名称"}).alias("h","help")},async e=>{if(e.name)N.deleteCmp(e.name);else{const e=new f,s=d("正在获取线上自定义组件列表...").start(),o=await e.getCustomCmpList();0===o.length&&(U("当前租户暂无任何自定义组件。"),process.exit(1)),s.stop("线上自定义组件列表获取成功。");const n=[{name:"cmpType",type:"list",message:"请选择要删除的自定义组件:",choices:o.map(e=>({name:`${e.label}(${e.cmpType})`,value:e.cmpType}))}];g.prompt(n).then(s=>{s.cmpType?N.deleteCmp(s.cmpType,e):(U("自定义组件名称不能为空。"),process.exit(1))})}}).command("preview [options]","预览指定自定义组件(仅预览组件本身内容)",e=>{e.reset().usage(D("Usage")+": $0 preview [options]").option("name",{alias:"n",describe:"自定义组件名称"}).alias("h","help")},e=>{if(e.name)N.previewCmp(e.name);else{const e=$(S.componentsDir);0===e.length&&(U("当前自定义组件目录中未找到自定义组件。(./src/components 目录下)"),process.exit(1));const s=[{name:"cmpType",type:"list",message:"请选择要预览的自定义组件:",choices:e.map(e=>({name:e,value:e}))}];g.prompt(s).then(e=>{e.cmpType||(U("未选择要预览的自定义组件。"),process.exit(1)),N.previewCmp(e.cmpType)})}}).command("dev","开启本地调试模式",e=>{e.reset().usage(D("Usage")+": $0 dev").alias("h","help")},()=>{N.dev()}).command("linkDebug","开启外链调试模式(在线上页面设计器端调试)",e=>{e.reset().usage(D("Usage")+": $0 linkDebug").alias("h","help")},e=>{N.linkDebug()}).command("build","构建生产环境代码",e=>{e.reset().usage(D("Usage")+": $0 build").alias("h","help")},e=>{N.build()}).command("build2lib","构建 UMD 模块",e=>{e.reset().usage(D("Usage")+": $0 build2lib").alias("h","help")},e=>{N.build2lib()}).command("publish2oss [options]","发布到oss",e=>{e.reset().usage(D("Usage")+": $0 publish2oss [options]").option("name",{alias:"n",describe:"自定义组件名称"}).alias("h","help")},e=>{if(e.name)N.publish2oss(e.name);else{const e=$(S.componentsDir);0===e.length&&(U("当前自定义组件目录中未找到自定义组件。(./src/components 目录下)"),process.exit(1));const s=[{name:"cmpType",type:"list",message:"请选择要发布的自定义组件:",choices:e.map(e=>({name:e,value:e}))}];g.prompt(s).then(e=>{e.cmpType||(U("未选择要发布的自定义组件。"),process.exit(1)),N.publish2oss(e.cmpType)})}}).command("push cmp [options]","构建并发布自定义组件到 NeoCRM 平台",e=>{e.reset().usage(D("Usage")+": $0 push cmp [options]").option("name",{alias:"n",describe:"自定义组件名称"}).alias("h","help")},async e=>{if(e.name){L(`[neo push cmp] 即将构建并发布自定义组件:${e.name} 到 NeoCRM 平台,请确保已经通过 neo login 登录到正确的环境。`);try{await N.pushCmp(e.name)}catch(e){U(e.message||e.msg||"发布自定义组件失败"),process.exit(1)}}else{const e=$(S.componentsDir);0===e.length&&(U("当前自定义组件目录中未找到自定义组件。(./src/components 目录下)"),process.exit(1));const s=[{name:"cmpType",type:"list",message:"请选择要发布的自定义组件:",choices:[{name:"发布所有组件(ALL)",value:"ALL"},...e.map(e=>({name:e,value:e}))]}];g.prompt(s).then(async s=>{s.cmpType||(U("请选择要发布的自定义组件。"),process.exit(1));try{if("ALL"===s.cmpType){L(`[neo push cmp] 即将构建并发布当前目录下的所有自定义组件(共 ${e.length} 个)到 NeoCRM 平台,请确保已经通过 neo login 登录到正确的环境。`);for(let s=0,o=e.length;s<o;s++){const n=e[s];console.log(u.gray(`[neo push cmp] 正在拉取第 ${s+1}/${o} 个组件: ${n}`)),await N.pushCmp(n,!0)}j("[neo push cmp]发布所有组件命令已执行完成。")}else L(`[neo push cmp] 即将构建并发布自定义组件:${s.cmpType} 到 NeoCRM 平台,请确保已经通过 neo login 登录到正确的环境。`),await N.pushCmp(s.cmpType)}catch(e){U(e.message||e.msg||"发布失败"),process.exit(1)}})}}).command("build2esm","构建 ESM 模块",e=>{e.reset().usage(D("Usage")+": $0 build2esm").alias("h","help")},()=>{N.build2esm()}).command("inspect","输出当前配置文件",e=>{e.reset().usage(D("Usage")+": $0 inspect").option("type",{alias:"t",describe:"环境类型(本地调试环境/生产环境/library构建环境)",default:"build"}).alias("h","help")},e=>{b(e.type)}).command("open [options]","使用 Cursor 或 VSCode 打开项目",e=>{e.reset().usage(D("Usage")+": $0 open [options]").option("editor",{alias:"e",describe:"编辑器类型(cursor/vscode/auto),默认为 auto(自动检测)",default:"auto",choices:["cursor","vscode","code","auto"]}).option("name",{alias:"n",describe:"要打开的项目名称,默认为当前目录"}).alias("h","help")},e=>{N.openEditor(e.editor,e.name)}).alias("h","help").alias("v","version").strict().fail((e,s,o)=>{U(`\n运行命令时发生错误: ${e}。\n`),console.log(D("当前可用命令列表:")),console.log("");[{cmd:"init [options]",desc:"根据模板创建一个自定义组件"},{cmd:"create project [options]",desc:"创建自定义组件项目(含工程代码)"},{cmd:"create cmp [options]",desc:"创建自定义组件"},{cmd:"preview [options]",desc:"预览指定自定义组件(仅预览组件本身内容)"},{cmd:"linkDebug",desc:"开启外链调试模式(在线上页面设计器端调试)"},{cmd:"login",desc:"登录 NeoCRM 平台(OAuth2 授权)"},{cmd:"logout",desc:"登出 NeoCRM 平台"},{cmd:"pull cmp [options]",desc:"拉取线上自定义组件"},{cmd:"delete cmp [options]",desc:"删除线上自定义组件"},{cmd:"push cmp [options]",desc:"构建并发布自定义组件到 NeoCRM 平台"},{cmd:"open [options]",desc:"使用 Cursor 或 VSCode 打开项目"}].forEach(({cmd:e,desc:s})=>{console.log(` ${u.cyan(e.padEnd(25))} ${s}`)}),console.log(""),console.log(`使用 ${u.cyan("neo <command> --help")} 查看具体命令的帮助信息。`),console.log(""),process.exit(1)}).help().updateStrings({"Usage:":D("Usage:"),"Commands:":D("Commands:"),"Options:":D("Options:")}).argv,e.__exports};
package/dist/main2.js CHANGED
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("akfun");require("lodash");const r=require("./module/neoInit.js"),i=require("./module/neoInitByCopy.js"),s=require("./module/inspect.js"),t=require("./utils/neoConfigInit.js"),o=require("./utils/neoParams.js"),u=require("./config/index.js"),l=require("./oss/publish2oss.js"),p=require("./neo/pushCmp.js"),n=require("./neo/pullCmp.js"),c=require("./neo/deleteCmp.js"),d=require("./utils/cmpUtils/previewCmp.js"),m=require("./utils/generateEntries.js"),b=require("./utils/cmpUtils/createCmpByTemplate.js"),a=require("./utils/projectUtils/createCmpProjectByTemplate.js"),y=require("./utils/projectUtils/openProject.js"),q=require("./utils/configureNeoBuild.js"),_=require("./utils/common.js"),g=require("./utils/projectNameValidator.js"),j=require("./utils/cmpUtils/getCmpTypeByDir.js"),v=require("./neo/neoService.js"),T=require("./neo/neoLogin.js"),f=require("./utils/projectUtils/hasNeoProject.js");var C,x;exports.__require=function(){if(x)return C;x=1;const h=e,w=r.__require(),E=i.__require(),N=s.__require(),D=t.__require(),{consoleTag:B}=o.__require(),P=u.__require(),k=l.__require(),M=p.__require(),I=n.__require(),L=c.__require(),U=d.__require(),O=m.__require(),S=b.__require(),R=a.__require(),A=y.__require(),{configureNeoBuild:V}=q.__require(),{errorLog:z,successLog:F}=_.__require(),{validateProjectName:G}=g.__require(),H=j.__require(),J=v.__require(),K=T.__require(),Q=f.__require();function W(e,r){const{entryType:i,cmpType:s}=r;let t=[],o={};try{const{entries:r,cmpTypes:u,defaultExports:l}=O({configEntry:e.entry,disableAutoRegister:e.disableAutoRegister,componentsDir:P.componentsDir,entryType:i,cmpType:s});r&&Object.keys(r).length>0&&(e.entry=r,t=u,console.info("已自动生成 entry 入口配置:",r)),o=l}catch(e){z(e.message||e.msg),process.exit(1)}return{cmpTypes:t,defaultExports:o}}function X(e){return Object.assign(P.build2lib,e)}return C={neoInit:w,neoInitByCopy:E,inspect:N,neoConfigInit:D,projectConfig:P,consoleTag:B,errorLog:z,successLog:F,validateProjectName:G,getCmpTypeByDir:H,NeoService:J,NeoLoginService:K,hasNeoProject:Q,createCmpProjectByTemplate:R,createCmpByTemplate:S,dev:()=>{P.dev||(z("未找到 dev 相关配置。"),process.exit(1)),h.dev(P,B)},previewCmp:e=>{e||(z("请输入要预览的组件名称。"),process.exit(1)),P.preview||(z("未找到 preview 相关配置。"),process.exit(1)),P.dev=Object.assign(P.dev,P.preview),delete P.preview,U(P,e)},linkDebug:()=>{P.linkDebug||(z("未找到 debug 相关配置。"),process.exit(1)),P.dev=Object.assign(P.dev,P.linkDebug),delete P.linkDebug,delete P.dev.ignoreNodeModules,P.webpack.ignoreNodeModules=!1;const{cmpTypes:e,defaultExports:r}=W(P.dev,{entryType:"linkDebug"});V(P,P.dev,{cmpTypes:e,defaultExports:r,verbose:!0,excludeModel:!1}),h.dev(P,B)},build:()=>h.build("build",P,B),build2lib:()=>{W(P.build2lib,{entryType:"widget"}),P.build2lib.removeNeoCommonModules&&V(P,P.build2lib,{cmpTypes:[],defaultExports:[],verbose:!1,excludeModel:!0}),h.build("lib",P,B)},publish2oss:e=>{const r=P.publish2oss;P.build2lib=X(r);const{cmpTypes:i,defaultExports:s}=W(P.build2lib,{entryType:"widget",cmpType:e});V(P,P.build2lib,{cmpTypes:i,defaultExports:s,verbose:!0,excludeModel:!0}),h.build("lib",P,B,()=>{k(r.ossType,r.ossConfig,r.assetsRoot)})},pushCmp:e=>{const{pushCmp:r}=P;P.build2lib=X(r);const{cmpTypes:i,defaultExports:s}=W(P.build2lib,{entryType:"widget",cmpType:e});return V(P,P.build2lib,{cmpTypes:i,defaultExports:s,verbose:!1,excludeModel:!0}),new Promise((i,s)=>{h.build("lib",P,B,async()=>{try{await M({...r,componentsDir:P.componentsDir},e),i()}catch(e){s(e)}})})},pullCmp:I,deleteCmp:(e,r)=>{L(e,r)},build2esm:()=>h.build2esm(P,B),openEditor:A},C};
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("akfun");require("lodash");const r=require("./module/neoInit.js"),i=require("./module/neoInitByCopy.js"),s=require("./module/inspect.js"),t=require("./utils/neoConfigInit.js"),o=require("./utils/neoParams.js"),u=require("./config/index.js"),l=require("./oss/publish2oss.js"),p=require("./neo/pushCmp.js"),n=require("./neo/pullCmp.js"),c=require("./neo/deleteCmp.js"),d=require("./utils/cmpUtils/previewCmp.js"),b=require("./utils/generateEntries.js"),m=require("./utils/cmpUtils/createCmpByTemplate.js"),a=require("./utils/projectUtils/createCmpProjectByTemplate.js"),y=require("./utils/projectUtils/openProject.js"),q=require("./utils/configureNeoBuild.js"),_=require("./utils/common.js"),g=require("./utils/projectNameValidator.js"),j=require("./utils/cmpUtils/getCmpTypeByDir.js"),v=require("./neo/neoService.js"),T=require("./neo/neoLogin.js"),f=require("./utils/projectUtils/hasNeoProject.js");var C,x;exports.__require=function(){if(x)return C;x=1;const h=e,w=r.__require(),E=i.__require(),N=s.__require(),D=t.__require(),{consoleTag:B}=o.__require(),P=u.__require(),k=l.__require(),M=p.__require(),I=n.__require(),L=c.__require(),U=d.__require(),O=b.__require(),S=m.__require(),R=a.__require(),A=y.__require(),{configureNeoBuild:V}=q.__require(),{errorLog:z,successLog:F}=_.__require(),{validateProjectName:G}=g.__require(),H=j.__require(),J=v.__require(),K=T.__require(),Q=f.__require();function W(e,r){const{entryType:i,cmpType:s}=r;let t=[],o={};try{const{entries:r,cmpTypes:u,defaultExports:l}=O({configEntry:e.entry,disableAutoRegister:e.disableAutoRegister,componentsDir:P.componentsDir,entryType:i,cmpType:s});r&&Object.keys(r).length>0&&(e.entry=r,t=u,console.info("已自动生成 entry 入口配置:",r)),o=l}catch(e){z(e.message||e.msg),process.exit(1)}return{cmpTypes:t,defaultExports:o}}function X(e){return Object.assign(P.build2lib,e)}return C={neoInit:w,neoInitByCopy:E,inspect:N,neoConfigInit:D,projectConfig:P,consoleTag:B,errorLog:z,successLog:F,validateProjectName:G,getCmpTypeByDir:H,NeoService:J,NeoLoginService:K,hasNeoProject:Q,createCmpProjectByTemplate:R,createCmpByTemplate:S,dev:()=>{P.dev||(z("未找到 dev 相关配置。"),process.exit(1)),h.dev(P,B)},previewCmp:e=>{e||(z("请输入要预览的组件名称。"),process.exit(1)),P.preview||(z("未找到 preview 相关配置。"),process.exit(1)),P.dev=Object.assign(P.dev,P.preview),delete P.preview,U(P,e)},linkDebug:()=>{P.linkDebug||(z("未找到 debug 相关配置。"),process.exit(1)),P.dev=Object.assign(P.dev,P.linkDebug),delete P.linkDebug,delete P.dev.ignoreNodeModules,P.webpack.ignoreNodeModules=!1;const{cmpTypes:e,defaultExports:r}=W(P.dev,{entryType:"linkDebug"});V(P,P.dev,{cmpTypes:e,defaultExports:r,verbose:!0,excludeModel:!1}),h.dev(P,B)},build:()=>h.build("build",P,B),build2lib:()=>{W(P.build2lib,{entryType:"widget"}),P.build2lib.removeNeoCommonModules&&V(P,P.build2lib,{cmpTypes:[],defaultExports:[],verbose:!1,excludeModel:!0}),h.build("lib",P,B)},publish2oss:e=>{const r=P.publish2oss;P.build2lib=X(r);const{cmpTypes:i,defaultExports:s}=W(P.build2lib,{entryType:"widget",cmpType:e});V(P,P.build2lib,{cmpTypes:i,defaultExports:s,verbose:!0,excludeModel:!0}),h.build("lib",P,B,()=>{k(r.ossType,r.ossConfig,r.assetsRoot)})},pushCmp:(e,r=!1)=>{const{pushCmp:i}=P;P.build2lib=X(i),r&&(P.build2lib.entry={});const{cmpTypes:s,defaultExports:t}=W(P.build2lib,{entryType:"widget",cmpType:e});return V(P,P.build2lib,{cmpTypes:s,defaultExports:t,verbose:!1,excludeModel:!0}),new Promise((r,s)=>{h.build("lib",P,B,async()=>{try{await M({...i,componentsDir:P.componentsDir},e),r()}catch(e){s(e)}})})},pullCmp:I,deleteCmp:(e,r)=>{L(e,r)},build2esm:()=>h.build2esm(P,B),openEditor:A},C};
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"}),require("lodash");const e=require("akfun"),r=require("ora"),t=require("./neoService.js"),i=require("../utils/common.js"),o=require("../utils/pathUtils.js"),s=require("../utils/cmpUtils/getCmpTypeByDir.js"),n=require("../utils/cmpUtils/createCmpByZip.js"),c=require("../config/index.js");var u,a;exports.__require=function(){if(a)return u;a=1;const{getConfigObj:p}=e,m=r,g=t.__require(),{getFramework:l,warningLog:q,errorLog:f,successLog:_}=i.__require(),{catchCurPackageJson:y}=o.__require(),w=s.__require(),C=n.__require(),j=c.__require(),k=l(p(y()).framework);return u=async(e,r)=>{w(j.componentsDir).indexOf(e)>-1&&q(`当前项目目录中已存在${e}自定义组件。(./src/components 目录下)`);const t=m("正在拉取组件...").start();try{let i=r,o=[],s={},n=null;r?(o=r.cmpList||[],s=r.cmpInfoMap||{}):(i=new g,t.info("正在获取自定义组件列表..."),o=await i.getCustomCmpList(),s=i.cmpInfoMap||{}),0===o.length&&(f("拉取失败,当前租户暂无任何自定义组件。",t),process.exit(1)),n=i.getCmpInfoByCmpType(e),n||(f(`拉取失败,当前租户不存在${e}自定义组件。`,t),process.exit(1)),n.framework&&n.framework!==k&&(f(`拉取失败,${e}自定义组件与当前项目技术栈不一致。`,t),process.exit(1));const c=i.getCodeLibByCmpType(e),u=await i.ensureValidToken();await C(c,{token:u,cmpName:e,componentBaseDir:j.componentsDir})||(f(`拉取失败,${e}自定义组件源码解析失败,请检查源码文件是否正确。`,t),process.exit(1)),_(`已成功拉取${e}自定义组件!\n`,t)}catch(e){throw f(`拉取自定义组件失败: ${e.message||e.msg}`,t),e}},u};
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"}),require("lodash");const e=require("akfun"),r=require("ora"),t=require("./neoService.js"),o=require("../utils/common.js"),i=require("../utils/pathUtils.js"),n=require("../utils/cmpUtils/getCmpTypeByDir.js"),s=require("../utils/cmpUtils/createCmpByZip.js"),u=require("../config/index.js");var a,c;exports.__require=function(){if(c)return a;c=1;const{getConfigObj:m}=e,p=r,f=t.__require(),{getFramework:g,warningLog:w,errorLog:l,successLog:q}=o.__require(),{catchCurPackageJson:_}=i.__require(),y=n.__require(),h=s.__require(),C=u.__require(),$=g(m(_()).framework);return a=async(e,r)=>{y(C.componentsDir).indexOf(e)>-1&&w(`当前项目目录中已存在${e}自定义组件。(./src/components 目录下)`);const t=p("正在拉取组件...").start();try{let o=r,i=[],n={},s=null;if(r?(i=r.cmpList||[],n=r.cmpInfoMap||{}):(o=new f,t.info("正在获取自定义组件列表..."),i=await o.getCustomCmpList(),n=o.cmpInfoMap||{}),0===i.length)throw l("拉取失败,当前租户暂无任何自定义组件。",t),new Error("拉取失败,当前租户暂无任何自定义组件。");if(s=o.getCmpInfoByCmpType(e),!s)throw l(`拉取失败,当前租户不存在${e}自定义组件。`,t),new Error(`拉取失败,当前租户不存在${e}自定义组件。`);if(s.framework&&s.framework!==$)throw l(`拉取失败,${e}自定义组件与当前项目技术栈不一致。`,t),new Error(`拉取失败,${e}自定义组件与当前项目技术栈不一致。`);const u=o.getCodeLibByCmpType(e),a=await o.ensureValidToken();if(!await h(u,{token:a,cmpName:e,componentBaseDir:C.componentsDir}))throw l(`拉取失败,${e}自定义组件源码解析失败,请检查源码文件是否正确。`,t),new Error(`拉取失败,${e}自定义组件源码解析失败,请检查源码文件是否正确。`);q(`已成功拉取${e}自定义组件!\n`,t)}catch(e){throw l(`拉取自定义组件失败: ${e.message||e.msg}`,t),e}},a};
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("node:fs"),t=require("node:path"),s=require("lodash"),o=require("akfun"),i=require("ora"),r=require("jsdom"),a=require("./neoService.js"),n=require("../utils/common.js"),l=require("../utils/pathUtils.js"),c=require("../utils/projectUtils/createCmpProjectZip.js"),p=require("../utils/projectUtils/updatePublishLog.js"),u=require("../utils/cmpTypeValidator.js");var g,m;exports.__require=function(){if(m)return g;m=1;const d=e,h=t,w=s,{getConfigObj:f}=o,b=i,{JSDOM:T}=r,y=a.__require(),{getFramework:v,errorLog:C,successLog:q}=n.__require(),{catchCurPackageJson:j}=l.__require(),P=c.__require(),$=p.__require(),{validateApiName:_}=u.__require(),x=f(j()),D=(e=[])=>e.map(e=>({label:e.label,description:e.description,propSchema:JSON.stringify(e)})),S=(e=[],t)=>e&&0!==e.length?e.map(e=>({...e,componentType:t,eventCategory:e.eventCategory||2,pageType:e.pageType||1,targetDevice:e.targetDevice||1,eventParams:e.eventParams||[]})):[],O=(e=[],t)=>e&&0!==e.length?e.map(e=>({...e,componentType:t,funcScope:e.funcScope||1,pageType:e.pageType||1,targetDevice:e.targetDevice||1,custom:!0,funcInParams:e.funcInParams||[],funcOutParams:e.funcOutParams||[]})):[];return g=async(e,t)=>{const s=b("正在发布组件...").start(),{isValid:o,errors:i}=_(t);o||(C(i.join("\n")),process.exit(1));try{let o,i=new y;await i.ensureValidToken(),s.start("[1/4] 打包源码文件(含单个自定义组件源码)...");try{o=P(t,process.cwd(),e.assetsRoot),o?q(`[1/4] 源码文件打包完成: ${h.basename(o)}。`,s):C("[1/4] 源码文件打包失败,未返回 zip 文件路径。",s)}catch(e){C("[1/4] 源码文件打包失败。",s)}s.start("[2/4] 获取自定义组件构建产物...");const r=await i.getCmpAssets(t);let a;s.start("[3/4] 构建组件数据...");try{a=await(async(e,t)=>{if(!t||!t.cmpType)return C("自定义组件信息或组件名称不能为空"),null;const{cmpType:s}=t;if(!e||!d.existsSync(e))return C(`未找到自定义组件目录: ${e}`),null;const o=w.camelCase(s),i=h.join(e,`${o}Model.js`);d.existsSync(i)||(C(`未找到自定义组件模型文件,请检查以下路径是否存在:${i}`),process.exit(1));const r=globalThis.window;if(!globalThis.window){const e=new T("<!DOCTYPE html><p>Hello world</p>",{url:"http://localhost",contentType:"text/html",includeNodeLocations:!0,storageQuota:1e5});globalThis.window={...e.window,console:console,neoRequire:()=>{},postMessage:()=>{}},globalThis.document=e.window.document,globalThis.this={}}const a=globalThis.self;globalThis.self||(globalThis.self=globalThis);try{d.existsSync(i)?require(i):(C(`未找到自定义组件模型文件,请检查以下路径是否存在:${i}`),process.exit(1)),globalThis.window&&globalThis.window.NEOEditorCustomModels||(C(`模型文件未导出有效模型方法(CatchCustomCmpModelClass),模型文件地址: ${i} `),process.exit(1));const e=globalThis.window.NEOEditorCustomModels[s];e||(C(`未找到自定义组件模型类(${s}),模型文件地址: ${i} `),process.exit(1));const o=new e;return o||(C(`未找到自定义组件模型信息(${s}),模型文件地址: ${i} `),process.exit(1)),{...t,version:x.version||"1.0.0",framework:x.framework?v(x.framework):0,label:o.label||s,description:o.description||"",componentCategory:(o.tags||["自定义组件"]).join(","),targetPage:o.targetPage||["all"],targetObject:o.targetObject||["all"],targetApplication:o.targetApplication||["all"],targetDevice:o.targetDevice||"web",iconUrl:o.iconUrl||o.iconUrl,defaultProps:JSON.stringify(o.defaultComProps||{}),previewProps:JSON.stringify(o.previewComProps||{}),props:D(o.propsSchema||[]),events:S(o.events||[],s),functions:O(o.functions||o.actions||[],s),exposedToDesigner:void 0===o.exposedToDesigner||o.exposedToDesigner,namespace:o.namespace||"neo-cmp-cli",enableDuplicate:void 0===o.enableDuplicate||o.enableDuplicate}}catch(e){return C(`自定义组件模型文件解析失败 (${i||"未知路径"}): ${e.message||e.msg}`),C(e.stack),null}finally{void 0===r?delete globalThis.window:globalThis.window=r,void 0===a?delete globalThis.self:globalThis.self=a}})(e.assetsRoot,r),a?q("[3/4] 组件数据构建完成。",s):C(`[3/4] 未获取到自定义组件模型信息(${t})。`,s)}catch(e){C(`[3/4] 组件数据构建失败: ${e.message||e.msg}`,s)}s.start("[4/4] 保存组件信息到 NeoCRM 平台...");const n=["assetFile","modelAssetFile","cssAssetFile","codeLibFile"],l={...a};n.forEach(e=>{l[e]&&l[e].fileContent&&(l[e]=w.omit(l[e],["fileContent"]))}),$(l);try{await i.updateCustomComponent(a),q("[4/4] 组件信息保存成功",s)}catch(e){C("[4/4] 组件信息保存失败",s)}const{tenant_id:c,instance_uri:p}=i.tokenCache||{};console.log(`\n✅ 自定义组件发布成功!\n(当前租户 ID: ${c||"未返回"},所在租户的 API 域名: ${p||"未返回"}。)`)}catch(e){try{s&&s.isSpinning&&C(`❌ 自定义组件发布失败: ${e.message||e.msg}`,s)}catch{C(`\n❌ 自定义组件发布失败: ${e.message||e.msg}`)}throw e}},g};
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("node:fs"),t=require("node:path"),o=require("lodash"),r=require("akfun"),s=require("ora"),i=require("jsdom"),a=require("./neoService.js"),n=require("../utils/common.js"),l=require("../utils/pathUtils.js"),c=require("../utils/projectUtils/createCmpProjectZip.js"),p=require("../utils/projectUtils/updatePublishLog.js"),u=require("../utils/cmpTypeValidator.js");var g,m;exports.__require=function(){if(m)return g;m=1;const d=e,w=t,h=o,{getConfigObj:f}=r,b=s,{JSDOM:T}=i,y=a.__require(),{getFramework:C,errorLog:$,successLog:v}=n.__require(),{catchCurPackageJson:q}=l.__require(),j=c.__require(),P=p.__require(),{validateApiName:_}=u.__require(),D=f(q()),S=(e=[])=>e.map(e=>({label:e.label,description:e.description,propSchema:JSON.stringify(e)})),O=(e=[],t)=>e&&0!==e.length?e.map(e=>({...e,componentType:t,eventCategory:e.eventCategory||2,pageType:e.pageType||1,targetDevice:e.targetDevice||1,eventParams:e.eventParams||[]})):[],E=(e=[],t)=>e&&0!==e.length?e.map(e=>({...e,componentType:t,funcScope:e.funcScope||1,pageType:e.pageType||1,targetDevice:e.targetDevice||1,custom:!0,funcInParams:e.funcInParams||[],funcOutParams:e.funcOutParams||[]})):[];return g=async(e,t)=>{const o=b("正在发布组件...").start(),{isValid:r,errors:s}=_(t);if(!r)throw $(s.join("\n")),new Error(s.join("\n"));try{let r,s=new y;await s.ensureValidToken(),o.start("[1/4] 打包源码文件(含单个自定义组件源码)...");try{r=j(t,process.cwd(),e.assetsRoot),r?v(`[1/4] 源码文件打包完成: ${w.basename(r)}。`,o):$("[1/4] 源码文件打包失败,未返回 zip 文件路径。",o)}catch(e){$("[1/4] 源码文件打包失败。",o)}o.start("[2/4] 获取自定义组件构建产物...");const i=await s.getCmpAssets(t);let a;o.start("[3/4] 构建组件数据...");try{a=await(async(e,t)=>{if(!t||!t.cmpType)return $("自定义组件信息或组件名称不能为空"),null;const{cmpType:o}=t;if(!e||!d.existsSync(e))return $(`未找到自定义组件目录: ${e}`),null;const r=h.camelCase(o),s=w.join(e,`${r}Model.js`);if(!d.existsSync(s))throw $(`未找到自定义组件模型文件,请检查以下路径是否存在:${s}`),new Error(`未找到自定义组件模型文件,请检查以下路径是否存在:${s}`);const i=globalThis.window;if(!globalThis.window){const e=new T("<!DOCTYPE html><p>Hello world</p>",{url:"http://localhost",contentType:"text/html",includeNodeLocations:!0,storageQuota:1e5});globalThis.window={...e.window,console:console,neoRequire:()=>{},postMessage:()=>{}},globalThis.document=e.window.document,globalThis.this={}}const a=globalThis.self;globalThis.self||(globalThis.self=globalThis);try{if(!d.existsSync(s))throw $(`未找到自定义组件模型文件,请检查以下路径是否存在:${s}`),new Error(`未找到自定义组件模型文件,请检查以下路径是否存在:${s}`);if(require(s),!globalThis.window||!globalThis.window.NEOEditorCustomModels)throw $(`模型文件未导出有效模型方法(CatchCustomCmpModelClass),模型文件地址: ${s} `),new Error(`模型文件未导出有效模型方法(CatchCustomCmpModelClass),模型文件地址: ${s} `);const e=globalThis.window.NEOEditorCustomModels[o];if(!e)throw $(`未找到自定义组件模型类(${o}),模型文件地址: ${s} `),new Error(`未找到自定义组件模型类(${o}),模型文件地址: ${s} `);const r=new e;if(!r)throw $(`未找到自定义组件模型信息(${o}),模型文件地址: ${s} `),new Error(`未找到自定义组件模型信息(${o}),模型文件地址: ${s} `);return{...t,version:D.version||"1.0.0",framework:D.framework?C(D.framework):0,label:r.label||o,description:r.description||"",componentCategory:(r.tags||["自定义组件"]).join(","),targetPage:r.targetPage||["all"],targetObject:r.targetObject||["all"],targetApplication:r.targetApplication||["all"],targetDevice:r.targetDevice||"web",iconUrl:r.iconUrl||r.iconUrl,defaultProps:JSON.stringify(r.defaultComProps||{}),previewProps:JSON.stringify(r.previewComProps||{}),props:S(r.propsSchema||[]),events:O(r.events||[],o),functions:E(r.functions||r.actions||[],o),exposedToDesigner:void 0===r.exposedToDesigner||r.exposedToDesigner,namespace:r.namespace||"neo-cmp-cli",enableDuplicate:void 0===r.enableDuplicate||r.enableDuplicate}}catch(e){return $(`自定义组件模型文件解析失败 (${s||"未知路径"}): ${e.message||e.msg}`),$(e.stack),null}finally{void 0===i?delete globalThis.window:globalThis.window=i,void 0===a?delete globalThis.self:globalThis.self=a}})(e.assetsRoot,i),a?v("[3/4] 组件数据构建完成。",o):$(`[3/4] 未获取到自定义组件模型信息(${t})。`,o)}catch(e){$(`[3/4] 组件数据构建失败: ${e.message||e.msg}`,o)}o.start("[4/4] 保存组件信息到 NeoCRM 平台...");const n=["assetFile","modelAssetFile","cssAssetFile","codeLibFile"],l={...a};n.forEach(e=>{l[e]&&l[e].fileContent&&(l[e]=h.omit(l[e],["fileContent"]))}),P(l);try{await s.updateCustomComponent(a),v("[4/4] 组件信息保存成功",o)}catch(e){$("[4/4] 组件信息保存失败",o)}const{tenant_id:c,instance_uri:p}=s.tokenCache||{};console.log(`\n✅ 自定义组件发布成功!\n(当前租户 ID: ${c||"未返回"},所在租户的 API 域名: ${p||"未返回"}。)`)}catch(e){try{o&&o.isSpinning&&$(`❌ 自定义组件发布失败: ${e.message||e.msg}`,o)}catch{$(`\n❌ 自定义组件发布失败: ${e.message||e.msg}`)}throw e}},g};
@@ -1 +1 @@
1
- "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});var e="1.10.19";const o={version:e};exports.default=o,exports.version=e;
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});var e="1.11.0";const o={version:e};exports.default=o,exports.version=e;
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("fs-extra"),t=require("node:path"),r=require("axios"),s=require("ora"),n=require("adm-zip"),a=require("lodash"),i=require("../neoParams.js"),o=require("./hasCmpTypeByDir.js"),c=require("../projectUtils/hasNeoProject.js"),u=require("../common.js");var f,p;exports.__require=function(){if(p)return f;p=1;const l=e,m=t,g=r,d=s,w=n,y=a,{consoleTag:h}=i.__require(),j=o.__require(),$=c.__require(),{errorLog:q,warningLog:x,successLog:v,parseTsConfigWithTypeScript:b}=u.__require();function _(e,t=0,r=""){const s=" ".repeat(t),n=" ".repeat(t+1);if(null===e)return"null";if(void 0===e)return"undefined";if("string"==typeof e){if(r&&m.isAbsolute(e))try{const t=m.relative(r,e).replace(/\\/g,"/");if(t&&!t.startsWith("..")&&""!==t){const e=t.startsWith(".")?t:"./"+t;return`resolve(${JSON.stringify(e)})`}}catch(e){}return e.includes("resolve(")||e.includes("auth.")?e:JSON.stringify(e)}if("number"==typeof e||"boolean"==typeof e)return String(e);if(Array.isArray(e)){if(0===e.length)return"[]";return"[\n"+e.map(e=>{const s=_(e,t+1,r);return n+s}).join(",\n")+"\n"+s+"]"}if("object"==typeof e){const a=Object.keys(e);if(0===a.length)return"{}";return"{\n"+a.map(s=>{const a=_(e[s],t+1,r);return n+function(e){return function(e){return!/^[a-zA-Z_$][a-zA-Z0-9_$]*$/.test(e)}(e)?JSON.stringify(e):e}(s)+": "+a}).join(",\n")+"\n"+s+"}"}return String(e)}return f=async function(e,t={}){const{token:r,cmpName:s,componentBaseDir:n="./src/components"}=t||{},a=s;$()||(q(`当前(${process.cwd()})还不是自定义组件项目,请先创建一个自定义组件项目(neo init / neo create project)。`),process.exit(1)),j(a)&&(q(`当前项目已经存在${a}自定义组件。`),process.exit(1));const i=m.join(process.cwd(),".neo-cli","zip-source"),o=d(`${h}正在下载组件源码...`).start();try{await l.ensureDir(i);const t=m.join(i,`${a}.zip`);let s;await l.pathExists(t)&&await l.remove(t);try{s=await g.get(e,{headers:{Authorization:`Bearer ${r}`,"xsy-inner-source":"bff"},responseType:"arraybuffer",timeout:6e4,maxContentLength:1/0,maxBodyLength:1/0,maxRedirects:5,validateStatus:function(e){return e>=200&&e<400}})}catch(e){const t=e.response?`下载文件失败: HTTP ${e.response.status} - ${e.message||e.msg}`:`下载文件失败: ${e.message||e.msg}`;throw q(t,o),e}try{let e;e=Buffer.isBuffer(s.data)?s.data:s.data instanceof ArrayBuffer?Buffer.from(s.data):s.data.buffer instanceof ArrayBuffer?Buffer.from(s.data.buffer):Buffer.from(s.data),await l.writeFile(t,e)}catch(e){throw q(`读取组件源码文件失败: ${e.message}`,o),e}o.info(`${h}正在解压组件源码...`);const c=new w(t),u=m.join(i,a);c.extractAllTo(u,!0);const f=m.join(u,n,a);if(!l.existsSync(f))return q(`解压后的 zip 包中未找到 ${a} 组件源码目录。`,o),await l.remove(u),!1;const p=m.resolve(process.cwd(),n,a);await l.ensureDir(p);try{await l.copy(f,p)}catch(e){return q(`自定义组件模板下载失败:${e.message||e}`,o),await l.remove(u),!1}try{const e=n.replace(/^\.\//,"").replace(/\\/g,"/"),t=async(e,r,s)=>{const n=await l.readdir(e);for(const a of n){const n=m.join(e,a),i=await l.stat(n),c=m.basename(n),f=m.relative(u,n),p=f.replace(/\\/g,"/");if(p.startsWith(s+"/")||p===s)continue;const g=m.join(r,f);if(i.isDirectory())await t(n,r,s);else if(i.isFile()){if(await l.pathExists(g)){if("package.json"===c){const e=await l.readJson(n),t=await l.readJson(g),r=y.omit(e.dependencies,Object.keys(t.dependencies)),s=Object.keys(r);s.length>0&&(x(`检测到 package.json 中新增了 ${s.length} 个依赖包:${s.join(", ")}`),x("为确保组件正常运行,请执行以下命令安装依赖:npm install 或 yarn install"));const a=y.merge({},e,t);await l.writeJson(g,a,{spaces:2})}else if("neo.config.js"===c)try{const e=require.resolve(n),t=require.resolve(g);delete require.cache[e],delete require.cache[t];await l.readFile(n,"utf8");const r=await l.readFile(g,"utf8"),s=require(n),a=require(g),i=y.merge({},s,a),o=r.match(/^([\s\S]*?)(module\.exports\s*=\s*\{[\s\S]*\};?\s*)$/);let c="";if(o)c=o[1];else{const e=r.lastIndexOf("module.exports");c=e>0?r.substring(0,e):"'use strict';\nconst path = require('path');\n\n// 统一路径解析\nfunction resolve(dir) {\n return path.resolve(__dirname, dir);\n}\n\n"}const u=m.dirname(g),f=c+"module.exports = "+_(i,0,u)+";\n";await l.writeFile(g,f,"utf8")}catch(e){o.warn(`${h}合并 neo.config.js 配置文件时出现警告:${e.message||e.msg||e}`)}else if("tsconfig.json"===c)try{const e=b(n);if(await l.pathExists(g)){const t=b(g),r=y.merge({},e,t);await l.writeJson(g,r,{spaces:2})}else await l.writeJson(g,e,{spaces:2})}catch(e){o.warn(`${h}合并 tsconfig.json 配置文件时出现警告:${e.message||e.msg||e}`)}}else await l.ensureDir(m.dirname(g)),await l.copy(n,g)}}};await t(u,process.cwd(),e)}catch(e){o.warn(`${h}处理源码文件出现警告:${e.message||e.msg||e}`)}return await l.remove(u),v(`已成功从 zip 包解析自定义组件(${a})!`,o),!0}catch(e){q(`从 zip 包创建自定义组件失败(${a}):${e.message||e.msg||e}`,o);const t=m.join(i,a);return await l.pathExists(t)&&await l.remove(t),!1}}};
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("fs-extra"),t=require("node:path"),r=require("axios"),s=require("ora"),n=require("adm-zip"),a=require("lodash"),i=require("../neoParams.js"),o=require("./hasCmpTypeByDir.js"),c=require("../projectUtils/hasNeoProject.js"),u=require("../common.js");var f,p;exports.__require=function(){if(p)return f;p=1;const l=e,m=t,g=r,d=s,w=n,y=a,{consoleTag:h}=i.__require();o.__require();const j=c.__require(),{errorLog:$,warningLog:q,successLog:x,parseTsConfigWithTypeScript:v}=u.__require();function b(e,t=0,r=""){const s=" ".repeat(t),n=" ".repeat(t+1);if(null===e)return"null";if(void 0===e)return"undefined";if("string"==typeof e){if(r&&m.isAbsolute(e))try{const t=m.relative(r,e).replace(/\\/g,"/");if(t&&!t.startsWith("..")&&""!==t){const e=t.startsWith(".")?t:"./"+t;return`resolve(${JSON.stringify(e)})`}}catch(e){}return e.includes("resolve(")||e.includes("auth.")?e:JSON.stringify(e)}if("number"==typeof e||"boolean"==typeof e)return String(e);if(Array.isArray(e)){if(0===e.length)return"[]";return"[\n"+e.map(e=>{const s=b(e,t+1,r);return n+s}).join(",\n")+"\n"+s+"]"}if("object"==typeof e){const a=Object.keys(e);if(0===a.length)return"{}";return"{\n"+a.map(s=>{const a=b(e[s],t+1,r);return n+function(e){return function(e){return!/^[a-zA-Z_$][a-zA-Z0-9_$]*$/.test(e)}(e)?JSON.stringify(e):e}(s)+": "+a}).join(",\n")+"\n"+s+"}"}return String(e)}return f=async function(e,t={}){const{token:r,cmpName:s,componentBaseDir:n="./src/components"}=t||{},a=s;j()||($(`当前(${process.cwd()})还不是自定义组件项目,请先创建一个自定义组件项目(neo init / neo create project)。`),process.exit(1));const i=m.join(process.cwd(),".neo-cli","zip-source"),o=d(`${h}正在下载组件源码...`).start();try{await l.ensureDir(i);const t=m.join(i,`${a}.zip`);let s;await l.pathExists(t)&&await l.remove(t);try{s=await g.get(e,{headers:{Authorization:`Bearer ${r}`,"xsy-inner-source":"bff"},responseType:"arraybuffer",timeout:6e4,maxContentLength:1/0,maxBodyLength:1/0,maxRedirects:5,validateStatus:function(e){return e>=200&&e<400}})}catch(e){const t=e.response?`下载文件失败: HTTP ${e.response.status} - ${e.message||e.msg}`:`下载文件失败: ${e.message||e.msg}`;throw $(t,o),e}try{let e;e=Buffer.isBuffer(s.data)?s.data:s.data instanceof ArrayBuffer?Buffer.from(s.data):s.data.buffer instanceof ArrayBuffer?Buffer.from(s.data.buffer):Buffer.from(s.data),await l.writeFile(t,e)}catch(e){throw $(`读取组件源码文件失败: ${e.message}`,o),e}o.info(`${h}正在解压组件源码...`);const c=new w(t),u=m.join(i,a);c.extractAllTo(u,!0);const f=m.join(u,n,a);if(!l.existsSync(f))return $(`解压后的 zip 包中未找到 ${a} 组件源码目录。`,o),await l.remove(u),!1;const p=m.resolve(process.cwd(),n,a);await l.ensureDir(p);try{await l.copy(f,p)}catch(e){return $(`自定义组件模板下载失败:${e.message||e}`,o),await l.remove(u),!1}try{const e=n.replace(/^\.\//,"").replace(/\\/g,"/"),t=async(e,r,s)=>{const n=await l.readdir(e);for(const a of n){const n=m.join(e,a),i=await l.stat(n),c=m.basename(n),f=m.relative(u,n),p=f.replace(/\\/g,"/");if(p.startsWith(s+"/")||p===s)continue;const g=m.join(r,f);if(i.isDirectory())await t(n,r,s);else if(i.isFile()){if(await l.pathExists(g)){if("package.json"===c){const e=await l.readJson(n),t=await l.readJson(g),r=y.omit(e.dependencies,Object.keys(t.dependencies)),s=Object.keys(r);s.length>0&&(q(`检测到 package.json 中新增了 ${s.length} 个依赖包:${s.join(", ")}`),q("为确保组件正常运行,请执行以下命令安装依赖:npm install 或 yarn install"));const a=y.merge({},e,t);await l.writeJson(g,a,{spaces:2})}else if("neo.config.js"===c)try{const e=require.resolve(n),t=require.resolve(g);delete require.cache[e],delete require.cache[t];await l.readFile(n,"utf8");const r=await l.readFile(g,"utf8"),s=require(n),a=require(g),i=y.merge({},s,a),o=r.match(/^([\s\S]*?)(module\.exports\s*=\s*\{[\s\S]*\};?\s*)$/);let c="";if(o)c=o[1];else{const e=r.lastIndexOf("module.exports");c=e>0?r.substring(0,e):"'use strict';\nconst path = require('path');\n\n// 统一路径解析\nfunction resolve(dir) {\n return path.resolve(__dirname, dir);\n}\n\n"}const u=m.dirname(g),f=c+"module.exports = "+b(i,0,u)+";\n";await l.writeFile(g,f,"utf8")}catch(e){o.warn(`${h}合并 neo.config.js 配置文件时出现警告:${e.message||e.msg||e}`)}else if("tsconfig.json"===c)try{const e=v(n);if(await l.pathExists(g)){const t=v(g),r=y.merge({},e,t);await l.writeJson(g,r,{spaces:2})}else await l.writeJson(g,e,{spaces:2})}catch(e){o.warn(`${h}合并 tsconfig.json 配置文件时出现警告:${e.message||e.msg||e}`)}}else await l.ensureDir(m.dirname(g)),await l.copy(n,g)}}};await t(u,process.cwd(),e)}catch(e){o.warn(`${h}处理源码文件出现警告:${e.message||e.msg||e}`)}return await l.remove(u),x(`已成功从 zip 包解析自定义组件(${a})!`,o),!0}catch(e){$(`从 zip 包创建自定义组件失败(${a}):${e.message||e.msg||e}`,o);const t=m.join(i,a);return await l.pathExists(t)&&await l.remove(t),!1}}};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "neo-cmp-cli",
3
- "version": "1.10.20",
3
+ "version": "1.11.0",
4
4
  "description": "Neo 自定义组件开发工具,支持react 和 vue2.0技术栈。",
5
5
  "keywords": [
6
6
  "neo-cli",
@@ -48,7 +48,7 @@
48
48
  "@commitlint/config-conventional": "^9.1.1",
49
49
  "@types/react": "^16.9.11",
50
50
  "@types/react-dom": "^16.9.15",
51
- "neo-cmp-cli": "^1.10.20",
51
+ "neo-cmp-cli": "^1.11.0",
52
52
  "husky": "^4.2.5",
53
53
  "lint-staged": "^10.2.9",
54
54
  "prettier": "^2.0.5"
@@ -48,7 +48,7 @@
48
48
  "@commitlint/config-conventional": "^9.1.1",
49
49
  "@types/react": "^16.9.11",
50
50
  "@types/react-dom": "^16.9.15",
51
- "neo-cmp-cli": "^1.10.20",
51
+ "neo-cmp-cli": "^1.11.0",
52
52
  "husky": "^4.2.5",
53
53
  "lint-staged": "^10.2.9",
54
54
  "prettier": "^2.0.5",
@@ -50,7 +50,7 @@
50
50
  "@types/react": "^16.9.11",
51
51
  "@types/react-dom": "^16.9.15",
52
52
  "@types/axios": "^0.14.0",
53
- "neo-cmp-cli": "^1.10.20",
53
+ "neo-cmp-cli": "^1.11.0",
54
54
  "husky": "^4.2.5",
55
55
  "lint-staged": "^10.2.9",
56
56
  "prettier": "^2.0.5"
@@ -55,7 +55,7 @@
55
55
  "@types/react": "^16.9.11",
56
56
  "@types/react-dom": "^16.9.15",
57
57
  "@types/axios": "^0.14.0",
58
- "neo-cmp-cli": "^1.10.20",
58
+ "neo-cmp-cli": "^1.11.0",
59
59
  "husky": "^4.2.5",
60
60
  "lint-staged": "^10.2.9",
61
61
  "prettier": "^2.0.5"
@@ -46,7 +46,7 @@
46
46
  "@types/react": "^16.9.11",
47
47
  "@types/react-dom": "^16.9.15",
48
48
  "@types/axios": "^0.14.0",
49
- "neo-cmp-cli": "^1.10.20",
49
+ "neo-cmp-cli": "^1.11.0",
50
50
  "husky": "^4.2.5",
51
51
  "lint-staged": "^10.2.9",
52
52
  "prettier": "^2.0.5"
@@ -47,7 +47,7 @@
47
47
  "@types/react": "^16.9.11",
48
48
  "@types/react-dom": "^16.9.15",
49
49
  "@types/axios": "^0.14.0",
50
- "neo-cmp-cli": "^1.10.20",
50
+ "neo-cmp-cli": "^1.11.0",
51
51
  "husky": "^4.2.5",
52
52
  "lint-staged": "^10.2.9",
53
53
  "prettier": "^2.0.5"
@@ -45,7 +45,7 @@
45
45
  "devDependencies": {
46
46
  "@commitlint/cli": "^8.3.5",
47
47
  "@commitlint/config-conventional": "^9.1.1",
48
- "neo-cmp-cli": "^1.10.20",
48
+ "neo-cmp-cli": "^1.11.0",
49
49
  "husky": "^4.2.5",
50
50
  "lint-staged": "^10.2.9",
51
51
  "prettier": "^2.0.5"
@@ -47,7 +47,7 @@
47
47
  "@commitlint/config-conventional": "^9.1.1",
48
48
  "@types/react": "^16.9.11",
49
49
  "@types/react-dom": "^16.9.15",
50
- "neo-cmp-cli": "^1.10.20",
50
+ "neo-cmp-cli": "^1.11.0",
51
51
  "husky": "^4.2.5",
52
52
  "lint-staged": "^10.2.9",
53
53
  "prettier": "^2.0.5"
@@ -45,7 +45,7 @@
45
45
  "devDependencies": {
46
46
  "@commitlint/cli": "^8.3.5",
47
47
  "@commitlint/config-conventional": "^9.1.1",
48
- "neo-cmp-cli": "^1.10.20",
48
+ "neo-cmp-cli": "^1.11.0",
49
49
  "husky": "^4.2.5",
50
50
  "lint-staged": "^10.2.9",
51
51
  "prettier": "^2.0.5",