neo-cmp-cli 1.15.1 → 1.15.3
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 +1 -1
- package/dist/package.json.js +1 -1
- package/dist/utils/skillUtils/skillDirs.js +1 -1
- package/dist/utils/skillUtils/skillManager.js +1 -1
- package/package.json +3 -2
- package/template/antd-custom-cmp-template/package.json +1 -1
- package/template/antd-custom-cmp-template/src/components/dataDashboard__c/model.ts +2 -1
- package/template/antd-custom-cmp-template/src/components/searchWidget__c/model.ts +2 -1
- package/template/asset-manage-template/package.json +2 -2
- package/template/echarts-custom-cmp-template/package.json +1 -1
- package/template/empty-custom-cmp-template/package.json +1 -1
- package/template/map-custom-cmp-template/package.json +1 -1
- package/template/neo-bi-cmps/package.json +1 -1
- package/template/neo-custom-cmp-template/package.json +1 -1
- package/template/neo-h5-cmps/package.json +1 -1
- package/template/neo-pipeline-cmps/package.json +1 -1
- package/template/neo-pipeline-zh-cmps/package.json +1 -1
- package/template/neo-web-entity-grid/package.json +1 -1
- package/template/neo-web-form/package.json +1 -1
- package/template/react-custom-cmp-template/package.json +1 -1
- package/template/react-ts-custom-cmp-template/package.json +1 -1
- package/template/vue2-custom-cmp-template/package.json +1 -1
package/dist/index2.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./_virtual/index.js"),s=require("figlet"),o=require("yargs"),a=require("chalk"),t=require("inquirer"),i=require("ora"),n=require("./main2.js"),c=require("./utils/common.js"),p=require("./neo/env.js"),l=require("./utils/skillUtils/skillDirs.js"),m=require("./package.json.js");var r;exports.__require=function(){if(r)return e.__exports;r=1;const u=s,d=o,g=a,h=t,y=i,{neoInit:v,neoInitByCopy:b,inspect:f,neoConfigInit:C,validateProjectName:x,getCmpTypeByDir:$,NeoService:w,NeoLoginService:T,hasNeoProject:k,consoleTag:U}=n.__require(),{errorLog:_,successLog:D,warningLog:L}=c.__require(),j=n.__require(),{getNeoCrmAPI:S}=p.__require(),{SKILL_PRODUCT_CHOICES:q,SKILL_PRODUCT_VALUES:M}=l.__require(),N=m.default,A=u.textSync("neo",{font:"Lean"}),P=j.projectConfig,R=function(e){return g.green(g.bold(e))},I={"config init":"初始化配置文件",config:"初始化配置文件",dev:"开启本地调试模式",build:"构建生产环境代码",build2lib:"构建 UMD 模块",build2esm:"构建 ESM 模块",publish2oss:"发布到 OSS",inspect:"输出配置文件",open:"打开项目"},O={...I,init:"初始化自定义组件项目",login:"登录 NeoCRM 平台",logout:"登出 NeoCRM 平台","create project":"创建自定义组件项目","create cmp":"创建自定义组件",linkDebug:"开启外链调试模式",preview:"预览自定义组件","pull cmp":"拉取线上自定义组件","push cmp":"发布自定义组件到平台","delete cmp":"删除线上自定义组件",pull:"拉取线上自定义组件",push:"发布自定义组件到平台",delete:"删除线上自定义组件","add cli-skills":"安装组件开发技能包","remove cli-skills":"移除组件开发技能包","update cli-skills":"更新组件开发技能包",add:"安装组件开发技能包",remove:"移除组件开发技能包",update:"更新组件开发技能包"},E=[{name:"线上生产环境(crm.xiaoshouyi.com)",value:"production"},{name:"P20环境(crm-p20.xiaoshouyi.com)",value:"p20"},{name:"沙盒环境(crm-sandbox.xiaoshouyi.com)",value:"sandbox"},{name:"开发环境(crm-cd.xiaoshouyi.com)",value:"cd"},{name:"tencentuat环境(crm-tencentuat.xiaoshouyi.com)",value:"tencentuat"},{name:"自定义环境(在neo.config.js / neoConfig 中自行配置)",value:"custom"}],B=E.map(e=>e.value);return d.middleware(function(e){if(e.help||e.version)return;const s=function(e){if(!e._||0===e._.length)return"";const s=e._.join(" ");if(O[s])return s;const o=e._[0];return O[o]?o:s||o}(e);if(!s)return;const o=O[s]||s;I[s]&&(console.log(g.green(A)),console.log(g.green(`当前版本:v${N.version}.\n`))),console.log(""),console.log(g.cyan(`执行命令: ${o}`)),console.log("")}).command("init [options]","根据模板创建一个自定义组件",e=>{e.usage(R("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)k()&&(_(`${U}创建自定义组件失败,当前目录(${process.cwd()})已经是一个自定义组件项目,请勿重复创建。`),process.exit(1)),"github"===e.mode?v(e.type,e.name):b(e.type,e.name);else{const s=[],o=[{name:"模板1.Web端列表组件: 含基础大列表、Picker 列表等示例组件",value:"neo-web-entity-grid",short:"neo-web-entity-grid"},{name:"模板2.H5端业务组件: 含全局搜索、数据列表、数据Tabs、打开AI对话页等示例组件",value:"neo-h5-cmps",short:"neo-h5-cmps"},{name:"模板3.自定义业务组件: 含实体表单、实体数据详情、实体数据表格等示例组件",value:"neo",short:"neo"},{name:"模板4.数值指标组件: 可配置展示实体数据源中关键数值指标",value:"neo-bi-cmps",short:"neo-bi-cmps"},{name:"模板5.antd 组件: 含基于 Antd 实现的数据仪表板、搜索组件等示例组件",value:"antd",short:"antd"},{name:"模板6.echarts 组件: 含基于 ECharts 实现的图表示例组件",value:"echarts",short:"echarts"},{name:"模板7.地图组件: 含基于 高德地图API 实现的示例组件",value:"amap",short:"amap"},{name:"模板8.vue2 组件: 含基于 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"}),h.prompt(s).then(s=>{const{isValid:o,errors:a}=x(s.name);o||(_(a.join("\n")),process.exit(1)),"github"===e.mode?v(s.type,s.name):b(s.type,s.name)})}}).command("config init","创建 neo.config.js 配置文件",e=>{e.usage(R("Usage")+": $0 config init").alias("h","help")},()=>{C("neo.config.js")}).command("login","登录 NeoCRM 平台(OAuth2 授权)",e=>{e.usage(R("Usage")+": $0 login [options]").option("env",{alias:"e",describe:"登录环境(可选,不指定则交互选择)。",type:"string",choices:B}).alias("h","help")},async e=>{const s=async e=>{const s=S(e,P.neoConfig);try{const e=new T(s);await e.login(),process.exit(0)}catch(e){_(`\n登录失败: ${e.message||e.msg}`),process.exit(1)}};if(e.env)return void await s(e.env);const o=[{name:"env",type:"list",message:"请选择您要登录的环境:",default:"cd",choices:E}],a=await h.prompt(o);await s(a.env)}).command("logout","登出 NeoCRM 平台",e=>{e.usage(R("Usage")+": $0 logout").alias("h","help")},async()=>{try{const e=new T;await e.logout(),process.exit(0)}catch(e){_(`\n登出失败: ${e.message||e.msg}`),process.exit(1)}}).command("create","创建项目或者组件",e=>e.command("project [options]","创建自定义组件项目(含工程代码)",e=>{e.usage(R("Usage")+": $0 project [options]").option("name",{alias:"n",describe:"自定义组件项目名称"}).alias("h","help")},e=>{if(e.name)j.createCmpProjectByTemplate(e.name);else{const e=[{name:"name",type:"input",message:"请设置自定义组件项目名称:"}];h.prompt(e).then(e=>{const{isValid:s,errors:o}=x(e.name);s||(_(o.join("\n")),process.exit(1)),e.name?j.createCmpProjectByTemplate(e.name):(_("自定义组件项目名称不能为空。"),process.exit(1))})}}).command("cmp [options]","创建自定义组件",e=>{e.usage(R("Usage")+": $0 cmp [options]").option("name",{alias:"n",describe:"自定义组件名称"}).option("targetDevice",{alias:"d",describe:"终端类型(all: 所有端, web: 网页端, mobile: 移动端),不指定则交互选择",choices:["all","web","mobile"]}).alias("h","help")},e=>{const s=[{name:"所有端(all)",value:"all"},{name:"网页端(web)",value:"web"},{name:"移动端(mobile)",value:"mobile"}];if(e.name&&void 0!==e.targetDevice)j.createCmpByTemplate(e.name,{targetDevice:e.targetDevice});else if(e.name){const o=[{name:"targetDevice",type:"list",message:"请选择终端类型:",default:"all",choices:s}];h.prompt(o).then(s=>{j.createCmpByTemplate(e.name,{targetDevice:s.targetDevice})})}else{const e=[{name:"name",type:"input",message:"请设置自定义组件名称:"},{name:"targetDevice",type:"list",message:"请选择终端类型:",default:"all",choices:s}];h.prompt(e).then(e=>{e.name?j.createCmpByTemplate(e.name,{targetDevice:e.targetDevice}):(_("自定义组件名称不能为空。"),process.exit(1))})}})).command("pull cmp [options]","拉取线上自定义组件",e=>{e.usage(R("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 j.pullCmp(e.name)}catch(e){_(e.message||e.msg||"拉取线上自定义组件失败"),process.exit(1)}}else{const e=new w,s=y("正在拉取线上自定义组件列表...").start(),o=await e.getCustomCmpList();0===o.length&&(_("当前租户暂无任何自定义组件。"),process.exit(1)),s.stop("线上自定义组件列表拉取成功。");const a=[{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 h.prompt(a);if(s.cmpType)if("ALL"===s.cmpType){L(`[neo pull cmp] 即将拉取当前租户下的所有自定义组件(共 ${o.length} 个),如本地存在同名组件目录,将可能被覆盖,请提前备份本地修改。`);for(let s=0,a=o.length;s<a;s++){const t=o[s];console.log(g.gray(`[neo pull cmp] 正在拉取第 ${s+1}/${a} 个组件: ${t.cmpType}`)),await j.pullCmp(t.cmpType,e)}D("[neo pull cmp]拉取所有组件命令已执行完成。")}else L(`[neo pull cmp] 即将拉取自定义组件:${s.cmpType},如本地已存在同名组件目录,将可能被覆盖,请提前备份本地修改。`),await j.pullCmp(s.cmpType,e);else _("请选择要拉取的自定义组件。"),process.exit(1)}catch(e){_(e.message||e.msg||"拉取线上自定义组件失败"),process.exit(1)}}}).command("delete cmp [options]","删除线上自定义组件",e=>{e.usage(R("Usage")+": $0 delete cmp [options]").option("name",{alias:"n",describe:"自定义组件名称"}).alias("h","help")},async e=>{if(e.name)j.deleteCmp(e.name);else{const e=new w,s=y("正在获取线上自定义组件列表...").start(),o=await e.getCustomCmpList();0===o.length&&(_("当前租户暂无任何自定义组件。"),process.exit(1)),s.stop("线上自定义组件列表获取成功。");const a=[{name:"cmpType",type:"list",message:"请选择要删除的自定义组件:",choices:o.map(e=>({name:`${e.label}(${e.cmpType})`,value:e.cmpType}))}];h.prompt(a).then(s=>{s.cmpType?j.deleteCmp(s.cmpType,e):(_("自定义组件名称不能为空。"),process.exit(1))})}}).command("preview [options]","预览指定自定义组件(本地仅组件内容)",e=>{e.usage(R("Usage")+": $0 preview [options]").option("name",{alias:"n",describe:"自定义组件名称"}).option("mode",{alias:"m",describe:"预览模式:local(本地预览)、online(在线预览)",type:"string",choices:["local","online"]}).alias("h","help")},async e=>{const s=$(P.componentsDir);0===s.length&&(_("当前自定义组件目录中未找到自定义组件(./src/components 目录下)。"),process.exit(1));let o=e.name,a=e.mode;if(!o){const e=s.map(e=>({name:e,value:e})),a=await h.prompt([{name:"cmpType",type:"list",message:"请选择要预览的自定义组件:",choices:e}]);a.cmpType||(_("未选择要预览的自定义组件。"),process.exit(1)),o=a.cmpType}if(s.includes(o)||(_(`组件目录中未找到「${o}」自定义组件。`),process.exit(1)),!a){const e=await h.prompt([{name:"mode",type:"list",message:"请选择预览模式:",default:"online",choices:[{name:"在线预览(需登录授权)",value:"online",short:"online"},{name:"本地预览",value:"local",short:"local"}]}]);e.mode||(_("未选择预览模式。"),process.exit(1)),a=e.mode}"online"===a?j.linkPreview({cmpType:o}):j.previewCmp(o)}).command("dev","开启本地调试模式",e=>{e.usage(R("Usage")+": $0 dev").alias("h","help")},()=>{j.dev()}).command("linkDebug","开启外链调试模式(在线上页面设计器端调试)",e=>{e.usage(R("Usage")+": $0 linkDebug [options]").option("platform",{alias:"p",describe:"调试设备类型:pc(网页端)、h5(移动端),默认 pc",type:"string",choices:["pc","h5"]}).alias("h","help")},e=>{const s=e=>{j.linkDebug({platform:e})};e.platform?s(e.platform):h.prompt([{name:"platform",type:"list",message:"请选择调试设备类型:",default:"pc",choices:[{name:"网页端(PC)",value:"pc",short:"pc"},{name:"移动端(H5)",value:"h5",short:"h5"}]}]).then(e=>{e.platform||(_("未选择调试设备类型。"),process.exit(1)),s(e.platform)})}).command("build","构建生产环境代码",e=>{e.usage(R("Usage")+": $0 build").alias("h","help")},e=>{j.build()}).command("build2lib","构建 UMD 模块",e=>{e.usage(R("Usage")+": $0 build2lib").alias("h","help")},e=>{j.build2lib()}).command("publish2oss [options]","发布到oss",e=>{e.usage(R("Usage")+": $0 publish2oss [options]").option("name",{alias:"n",describe:"自定义组件名称"}).alias("h","help")},e=>{if(e.name)j.publish2oss(e.name);else{const e=$(P.componentsDir);0===e.length&&(_("当前自定义组件目录中未找到自定义组件。(./src/components 目录下)"),process.exit(1));const s=[{name:"cmpType",type:"list",message:"请选择要发布的自定义组件:",choices:e.map(e=>({name:e,value:e}))}];h.prompt(s).then(e=>{e.cmpType||(_("未选择要发布的自定义组件。"),process.exit(1)),j.publish2oss(e.cmpType)})}}).command("push cmp [options]","构建并发布自定义组件到 NeoCRM 平台",e=>{e.usage(R("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 j.pushCmp(e.name)}catch(e){_(e.message||e.msg||"发布自定义组件失败"),process.exit(1)}}else{const e=$(P.componentsDir);0===e.length&&(_("当前自定义组件目录中未找到自定义组件。(./src/components 目录下)"),process.exit(1));const s=[{name:"cmpType",type:"list",message:"请选择要发布的自定义组件:",choices:[{name:"发布所有组件(ALL)",value:"ALL"},...e.map(e=>({name:e,value:e}))]}];h.prompt(s).then(async s=>{s.cmpType||(_("请选择要发布的自定义组件。"),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 a=e[s];console.log(g.gray(`[neo push cmp] 正在发布第 ${s+1}/${o} 个组件: ${a}`)),await j.pushCmp(a,!0)}D("[neo push cmp]发布所有组件命令已执行完成。")}else L(`[neo push cmp] 即将构建并发布自定义组件:${s.cmpType} 到 NeoCRM 平台,请确保已经通过 neo login 登录到正确的环境。`),await j.pushCmp(s.cmpType)}catch(e){_(e.message||e.msg||"发布失败"),process.exit(1)}})}}).command("build2esm","构建 ESM 模块",e=>{e.usage(R("Usage")+": $0 build2esm").alias("h","help")},()=>{j.build2esm()}).command("inspect","输出当前配置文件",e=>{e.usage(R("Usage")+": $0 inspect").option("type",{alias:"t",describe:"环境类型(本地调试环境/生产环境/library构建环境)",default:"build"}).alias("h","help")},e=>{f(e.type)}).command("open [options]","使用 Cursor 或 VSCode 打开项目",e=>{e.usage(R("Usage")+": $0 open [options]").option("editor",{alias:"e",describe:"编辑器类型(codebuddy/kiro/cursor/vscode/auto),默认为 auto(按 codebuddy > kiro > cursor > vscode 的优先级自动检测)",default:"auto",choices:["codebuddy","kiro","cursor","vscode","code","auto"]}).option("name",{alias:"n",describe:"要打开的项目名称,默认为当前目录"}).alias("h","help")},e=>{j.openEditor(e.editor,e.name)}).command("add cli-skills","安装组件开发技能包(Skills)到指定产品(codebuddy/kiro/cursor/claudeCode)",e=>{e.usage(R("Usage")+": $0 add cli-skills [options]").option("product",{alias:"p",describe:"目标产品(codebuddy/kiro/cursor/claudeCode),不指定则交互选择",type:"string",choices:M}).alias("h","help")},async e=>{const s=async e=>{try{await j.installSkills(e),process.exit(0)}catch(e){_(e.message||e.msg||"安装技能包失败"),process.exit(1)}};if(e.product)return void await s(e.product);const o=await h.prompt([{name:"product",type:"list",message:"请选择要安装技能包的目标产品:",choices:q}]);o.product||(_("未选择目标产品。"),process.exit(1)),await s(o.product)}).command("remove cli-skills","移除指定产品下的组件开发技能包(neo-cmp-cli / neo-cmp-dev / vue-to-react)",e=>{e.usage(R("Usage")+": $0 remove cli-skills [options]").option("product",{alias:"p",describe:"目标产品(codebuddy/kiro/cursor/claudeCode),不指定则交互选择",type:"string",choices:M}).alias("h","help")},async e=>{const s=async e=>{try{await j.removeSkills(e),process.exit(0)}catch(e){_(e.message||e.msg||"移除技能包失败"),process.exit(1)}};if(e.product)return void await s(e.product);const o=await h.prompt([{name:"product",type:"list",message:"请选择要移除技能包的目标产品:",choices:q}]);o.product||(_("未选择目标产品。"),process.exit(1)),await s(o.product)}).command("update cli-skills","更新指定产品下的组件开发技能包(覆盖式 copy neo-cmp-cli / neo-cmp-dev / vue-to-react / frontend-design)",e=>{e.usage(R("Usage")+": $0 update cli-skills [options]").option("product",{alias:"p",describe:"目标产品(codebuddy/kiro/cursor/claudeCode),不指定则交互选择",type:"string",choices:M}).alias("h","help")},async e=>{const s=async e=>{try{await j.updateSkills(e),process.exit(0)}catch(e){_(e.message||e.msg||"更新技能包失败"),process.exit(1)}};if(e.product)return void await s(e.product);const o=await h.prompt([{name:"product",type:"list",message:"请选择要更新技能包的目标产品:",choices:q}]);o.product||(_("未选择目标产品。"),process.exit(1)),await s(o.product)}).alias("h","help").alias("v","version").strict().fail((e,s,o)=>{_(`\n运行命令时发生错误: ${e}。\n`),console.log(R("当前可用命令列表:")),console.log("");[{cmd:"init [options]",desc:"根据模板创建一个自定义组件"},{cmd:"create project [options]",desc:"创建自定义组件项目(含工程代码)"},{cmd:"create cmp [options]",desc:"创建自定义组件"},{cmd:"preview [options]",desc:"预览自定义组件;支持 --mode local|online,在线预览走设计器(同 linkPreview)"},{cmd:"linkDebug [options]",desc:"开启外链调试模式(在线上页面设计器端调试),支持 --platform pc|h5,默认网页端"},{cmd:"login [options]",desc:"登录 NeoCRM 平台(OAuth2 授权),支持 --env cd|uat|cd"},{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 打开项目"},{cmd:"add cli-skills [options]",desc:"安装组件开发技能包到指定产品"},{cmd:"update cli-skills [options]",desc:"更新指定产品下的组件开发技能包"},{cmd:"remove cli-skills [options]",desc:"移除指定产品下的组件开发技能包"}].forEach(({cmd:e,desc:s})=>{console.log(` ${g.cyan(e.padEnd(25))} ${s}`)}),console.log(""),console.log(`使用 ${g.cyan("neo <command> --help")} 查看具体命令的帮助信息。`),console.log(""),process.exit(1)}).help().updateStrings({"Usage:":R("Usage:"),"Commands:":R("Commands:"),"Options:":R("Options:")}).parseAsync().catch(e=>{e&&(_(`\n运行命令时发生错误: ${e.message||e}。\n`),process.exit(1))}),e.__exports};
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./_virtual/index.js"),s=require("figlet"),o=require("yargs"),a=require("chalk"),t=require("inquirer"),i=require("ora"),n=require("./main2.js"),c=require("./utils/common.js"),p=require("./neo/env.js"),l=require("./utils/skillUtils/skillDirs.js"),m=require("./package.json.js");var r;exports.__require=function(){if(r)return e.__exports;r=1;const u=s,d=o,g=a,h=t,y=i,{neoInit:v,neoInitByCopy:b,inspect:f,neoConfigInit:C,validateProjectName:x,getCmpTypeByDir:w,NeoService:$,NeoLoginService:k,hasNeoProject:T,consoleTag:U}=n.__require(),{errorLog:_,successLog:D,warningLog:L}=c.__require(),j=n.__require(),{getNeoCrmAPI:S}=p.__require(),{SKILL_PRODUCT_CHOICES:q,SKILL_PRODUCT_VALUES:A}=l.__require(),M=m.default,N=u.textSync("neo",{font:"Lean"}),P=j.projectConfig,R=function(e){return g.green(g.bold(e))},I={"config init":"初始化配置文件",config:"初始化配置文件",dev:"开启本地调试模式",build:"构建生产环境代码",build2lib:"构建 UMD 模块",build2esm:"构建 ESM 模块",publish2oss:"发布到 OSS",inspect:"输出配置文件",open:"打开项目"},O={...I,init:"初始化自定义组件项目",login:"登录 NeoCRM 平台",logout:"登出 NeoCRM 平台","create project":"创建自定义组件项目","create cmp":"创建自定义组件",linkDebug:"开启外链调试模式",preview:"预览自定义组件","pull cmp":"拉取线上自定义组件","push cmp":"发布自定义组件到平台","delete cmp":"删除线上自定义组件",pull:"拉取线上自定义组件",push:"发布自定义组件到平台",delete:"删除线上自定义组件","add cli-skills":"安装组件开发技能包","remove cli-skills":"移除组件开发技能包","update cli-skills":"更新组件开发技能包",add:"安装组件开发技能包",remove:"移除组件开发技能包",update:"更新组件开发技能包"},B=[{name:"线上生产环境(crm.xiaoshouyi.com)",value:"production"},{name:"P20环境(crm-p20.xiaoshouyi.com)",value:"p20"},{name:"沙盒环境(crm-sandbox.xiaoshouyi.com)",value:"sandbox"},{name:"开发环境(crm-cd.xiaoshouyi.com)",value:"cd"},{name:"tencentuat环境(crm-tencentuat.xiaoshouyi.com)",value:"tencentuat"},{name:"自定义环境(在neo.config.js / neoConfig 中自行配置)",value:"custom"}],E=B.map(e=>e.value);return d.middleware(function(e){if(e.help||e.version)return;const s=function(e){if(!e._||0===e._.length)return"";const s=e._.join(" ");if(O[s])return s;const o=e._[0];return O[o]?o:s||o}(e);if(!s)return;const o=O[s]||s;I[s]&&(console.log(g.green(N)),console.log(g.green(`当前版本:v${M.version}.\n`))),console.log(""),console.log(g.cyan(`执行命令: ${o}`)),console.log("")}).command("init [options]","根据模板创建一个自定义组件",e=>{e.usage(R("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}创建自定义组件失败,当前目录(${process.cwd()})已经是一个自定义组件项目,请勿重复创建。`),process.exit(1)),"github"===e.mode?v(e.type,e.name):b(e.type,e.name);else{const s=[],o=[{name:"模板1.Web端列表组件: 含基础大列表、Picker 列表等示例组件",value:"neo-web-entity-grid",short:"neo-web-entity-grid"},{name:"模板2.H5端业务组件: 含全局搜索、数据列表、数据Tabs、打开AI对话页等示例组件",value:"neo-h5-cmps",short:"neo-h5-cmps"},{name:"模板3.自定义业务组件: 含实体表单、实体数据详情、实体数据表格等示例组件",value:"neo",short:"neo"},{name:"模板4.数值指标组件: 可配置展示实体数据源中关键数值指标",value:"neo-bi-cmps",short:"neo-bi-cmps"},{name:"模板5.antd 组件: 含基于 Antd 实现的数据仪表板、搜索组件等示例组件",value:"antd",short:"antd"},{name:"模板6.echarts 组件: 含基于 ECharts 实现的图表示例组件",value:"echarts",short:"echarts"},{name:"模板7.地图组件: 含基于 高德地图API 实现的示例组件",value:"amap",short:"amap"},{name:"模板8.vue2 组件: 含基于 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"}),h.prompt(s).then(s=>{const{isValid:o,errors:a}=x(s.name);o||(_(a.join("\n")),process.exit(1)),"github"===e.mode?v(s.type,s.name):b(s.type,s.name)})}}).command("config init","创建 neo.config.js 配置文件",e=>{e.usage(R("Usage")+": $0 config init").alias("h","help")},()=>{C("neo.config.js")}).command("login","登录 NeoCRM 平台(OAuth2 授权)",e=>{e.usage(R("Usage")+": $0 login [options]").option("env",{alias:"e",describe:"登录环境(可选,不指定则交互选择)。",type:"string",choices:E}).alias("h","help")},async e=>{const s=async e=>{const s=S(e,P.neoConfig);try{const e=new k(s);await e.login(),process.exit(0)}catch(e){_(`\n登录失败: ${e.message||e.msg}`),process.exit(1)}};if(e.env)return void await s(e.env);const o=[{name:"env",type:"list",message:"请选择您要登录的环境:",default:"cd",choices:B}],a=await h.prompt(o);await s(a.env)}).command("logout","登出 NeoCRM 平台",e=>{e.usage(R("Usage")+": $0 logout").alias("h","help")},async()=>{try{const e=new k;await e.logout(),process.exit(0)}catch(e){_(`\n登出失败: ${e.message||e.msg}`),process.exit(1)}}).command("create","创建项目或者组件",e=>e.command("project [options]","创建自定义组件项目(含工程代码)",e=>{e.usage(R("Usage")+": $0 project [options]").option("name",{alias:"n",describe:"自定义组件项目名称"}).alias("h","help")},e=>{if(e.name)j.createCmpProjectByTemplate(e.name);else{const e=[{name:"name",type:"input",message:"请设置自定义组件项目名称:"}];h.prompt(e).then(e=>{const{isValid:s,errors:o}=x(e.name);s||(_(o.join("\n")),process.exit(1)),e.name?j.createCmpProjectByTemplate(e.name):(_("自定义组件项目名称不能为空。"),process.exit(1))})}}).command("cmp [options]","创建自定义组件",e=>{e.usage(R("Usage")+": $0 cmp [options]").option("name",{alias:"n",describe:"自定义组件名称"}).option("targetDevice",{alias:"d",describe:"终端类型(all: 所有端, web: 网页端, mobile: 移动端),不指定则交互选择",choices:["all","web","mobile"]}).alias("h","help")},e=>{const s=[{name:"所有端(all)",value:"all"},{name:"网页端(web)",value:"web"},{name:"移动端(mobile)",value:"mobile"}];if(e.name&&void 0!==e.targetDevice)j.createCmpByTemplate(e.name,{targetDevice:e.targetDevice});else if(e.name){const o=[{name:"targetDevice",type:"list",message:"请选择终端类型:",default:"all",choices:s}];h.prompt(o).then(s=>{j.createCmpByTemplate(e.name,{targetDevice:s.targetDevice})})}else{const e=[{name:"name",type:"input",message:"请设置自定义组件名称:"},{name:"targetDevice",type:"list",message:"请选择终端类型:",default:"all",choices:s}];h.prompt(e).then(e=>{e.name?j.createCmpByTemplate(e.name,{targetDevice:e.targetDevice}):(_("自定义组件名称不能为空。"),process.exit(1))})}})).command("pull cmp [options]","拉取线上自定义组件",e=>{e.usage(R("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 j.pullCmp(e.name)}catch(e){_(e.message||e.msg||"拉取线上自定义组件失败"),process.exit(1)}}else{const e=new $,s=y("正在拉取线上自定义组件列表...").start(),o=await e.getCustomCmpList();0===o.length&&(_("当前租户暂无任何自定义组件。"),process.exit(1)),s.stop("线上自定义组件列表拉取成功。");const a=[{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 h.prompt(a);if(s.cmpType)if("ALL"===s.cmpType){L(`[neo pull cmp] 即将拉取当前租户下的所有自定义组件(共 ${o.length} 个),如本地存在同名组件目录,将可能被覆盖,请提前备份本地修改。`);for(let s=0,a=o.length;s<a;s++){const t=o[s];console.log(g.gray(`[neo pull cmp] 正在拉取第 ${s+1}/${a} 个组件: ${t.cmpType}`)),await j.pullCmp(t.cmpType,e)}D("[neo pull cmp]拉取所有组件命令已执行完成。")}else L(`[neo pull cmp] 即将拉取自定义组件:${s.cmpType},如本地已存在同名组件目录,将可能被覆盖,请提前备份本地修改。`),await j.pullCmp(s.cmpType,e);else _("请选择要拉取的自定义组件。"),process.exit(1)}catch(e){_(e.message||e.msg||"拉取线上自定义组件失败"),process.exit(1)}}}).command("delete cmp [options]","删除线上自定义组件",e=>{e.usage(R("Usage")+": $0 delete cmp [options]").option("name",{alias:"n",describe:"自定义组件名称"}).alias("h","help")},async e=>{if(e.name)j.deleteCmp(e.name);else{const e=new $,s=y("正在获取线上自定义组件列表...").start(),o=await e.getCustomCmpList();0===o.length&&(_("当前租户暂无任何自定义组件。"),process.exit(1)),s.stop("线上自定义组件列表获取成功。");const a=[{name:"cmpType",type:"list",message:"请选择要删除的自定义组件:",choices:o.map(e=>({name:`${e.label}(${e.cmpType})`,value:e.cmpType}))}];h.prompt(a).then(s=>{s.cmpType?j.deleteCmp(s.cmpType,e):(_("自定义组件名称不能为空。"),process.exit(1))})}}).command("preview [options]","预览指定自定义组件(本地仅组件内容)",e=>{e.usage(R("Usage")+": $0 preview [options]").option("name",{alias:"n",describe:"自定义组件名称"}).option("mode",{alias:"m",describe:"预览模式:local(本地预览)、online(在线预览)",type:"string",choices:["local","online"]}).alias("h","help")},async e=>{const s=w(P.componentsDir);0===s.length&&(_("当前自定义组件目录中未找到自定义组件(./src/components 目录下)。"),process.exit(1));let o=e.name,a=e.mode;if(!o){const e=s.map(e=>({name:e,value:e})),a=await h.prompt([{name:"cmpType",type:"list",message:"请选择要预览的自定义组件:",choices:e}]);a.cmpType||(_("未选择要预览的自定义组件。"),process.exit(1)),o=a.cmpType}if(s.includes(o)||(_(`组件目录中未找到「${o}」自定义组件。`),process.exit(1)),!a){const e=await h.prompt([{name:"mode",type:"list",message:"请选择预览模式:",default:"online",choices:[{name:"在线预览(需登录授权)",value:"online",short:"online"},{name:"本地预览",value:"local",short:"local"}]}]);e.mode||(_("未选择预览模式。"),process.exit(1)),a=e.mode}"online"===a?j.linkPreview({cmpType:o}):j.previewCmp(o)}).command("dev","开启本地调试模式",e=>{e.usage(R("Usage")+": $0 dev").alias("h","help")},()=>{j.dev()}).command("linkDebug","开启外链调试模式(在线上页面设计器端调试)",e=>{e.usage(R("Usage")+": $0 linkDebug [options]").option("platform",{alias:"p",describe:"调试设备类型:pc(网页端)、h5(移动端),默认 pc",type:"string",choices:["pc","h5"]}).alias("h","help")},e=>{const s=e=>{j.linkDebug({platform:e})};e.platform?s(e.platform):h.prompt([{name:"platform",type:"list",message:"请选择调试设备类型:",default:"pc",choices:[{name:"网页端(PC)",value:"pc",short:"pc"},{name:"移动端(H5)",value:"h5",short:"h5"}]}]).then(e=>{e.platform||(_("未选择调试设备类型。"),process.exit(1)),s(e.platform)})}).command("build","构建生产环境代码",e=>{e.usage(R("Usage")+": $0 build").alias("h","help")},e=>{j.build()}).command("build2lib","构建 UMD 模块",e=>{e.usage(R("Usage")+": $0 build2lib").alias("h","help")},e=>{j.build2lib()}).command("publish2oss [options]","发布到oss",e=>{e.usage(R("Usage")+": $0 publish2oss [options]").option("name",{alias:"n",describe:"自定义组件名称"}).alias("h","help")},e=>{if(e.name)j.publish2oss(e.name);else{const e=w(P.componentsDir);0===e.length&&(_("当前自定义组件目录中未找到自定义组件。(./src/components 目录下)"),process.exit(1));const s=[{name:"cmpType",type:"list",message:"请选择要发布的自定义组件:",choices:e.map(e=>({name:e,value:e}))}];h.prompt(s).then(e=>{e.cmpType||(_("未选择要发布的自定义组件。"),process.exit(1)),j.publish2oss(e.cmpType)})}}).command("push cmp [options]","构建并发布自定义组件到 NeoCRM 平台",e=>{e.usage(R("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 j.pushCmp(e.name)}catch(e){_(e.message||e.msg||"发布自定义组件失败"),process.exit(1)}}else{const e=w(P.componentsDir);0===e.length&&(_("当前自定义组件目录中未找到自定义组件。(./src/components 目录下)"),process.exit(1));const s=[{name:"cmpType",type:"list",message:"请选择要发布的自定义组件:",choices:[{name:"发布所有组件(ALL)",value:"ALL"},...e.map(e=>({name:e,value:e}))]}];h.prompt(s).then(async s=>{s.cmpType||(_("请选择要发布的自定义组件。"),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 a=e[s];console.log(g.gray(`[neo push cmp] 正在发布第 ${s+1}/${o} 个组件: ${a}`)),await j.pushCmp(a,!0)}D("[neo push cmp]发布所有组件命令已执行完成。")}else L(`[neo push cmp] 即将构建并发布自定义组件:${s.cmpType} 到 NeoCRM 平台,请确保已经通过 neo login 登录到正确的环境。`),await j.pushCmp(s.cmpType)}catch(e){_(e.message||e.msg||"发布失败"),process.exit(1)}})}}).command("build2esm","构建 ESM 模块",e=>{e.usage(R("Usage")+": $0 build2esm").alias("h","help")},()=>{j.build2esm()}).command("inspect","输出当前配置文件",e=>{e.usage(R("Usage")+": $0 inspect").option("type",{alias:"t",describe:"环境类型(本地调试环境/生产环境/library构建环境)",default:"build"}).alias("h","help")},e=>{f(e.type)}).command("open [options]","使用 Cursor 或 VSCode 打开项目",e=>{e.usage(R("Usage")+": $0 open [options]").option("editor",{alias:"e",describe:"编辑器类型(codebuddy/kiro/cursor/vscode/auto),默认为 auto(按 codebuddy > kiro > cursor > vscode 的优先级自动检测)",default:"auto",choices:["codebuddy","kiro","cursor","vscode","code","auto"]}).option("name",{alias:"n",describe:"要打开的项目名称,默认为当前目录"}).alias("h","help")},e=>{j.openEditor(e.editor,e.name)}).command("add cli-skills","安装组件开发技能包(Skills)到指定产品(codebuddy/kiro/cursor/claudeCode)",e=>{e.usage(R("Usage")+": $0 add cli-skills [options]").option("product",{alias:"p",describe:"目标产品(codebuddy/kiro/cursor/claudeCode),不指定则交互选择",type:"string",choices:A}).alias("h","help")},async e=>{const s=async e=>{try{await j.installSkills(e),process.exit(0)}catch(e){_(e.message||e.msg||"安装技能包失败"),process.exit(1)}};if(e.product)return void await s(e.product);const o=await h.prompt([{name:"product",type:"list",message:"请选择要安装技能包的目标产品:",choices:q}]);o.product||(_("未选择目标产品。"),process.exit(1)),await s(o.product)}).command("remove cli-skills","移除指定产品下的组件开发技能包(neo-cmp-cli / neo-cmp-dev / vue-to-react)",e=>{e.usage(R("Usage")+": $0 remove cli-skills [options]").option("product",{alias:"p",describe:"目标产品(codebuddy/kiro/cursor/claudeCode),不指定则交互选择",type:"string",choices:A}).option("skills",{alias:"s",describe:"额外要移除的 skills 名称列表(字符串数组),将与内置默认要移除的列表合并后执行移除",type:"array",default:[]}).alias("h","help")},async e=>{const s=(o=e.skills,Array.isArray(o)?Array.from(new Set(o.map(e=>"string"==typeof e?e.trim():"").filter(Boolean))):[]);var o;const a=async e=>{try{await j.removeSkills(e,s),process.exit(0)}catch(e){_(e.message||e.msg||"移除技能包失败"),process.exit(1)}};if(e.product)return void await a(e.product);const t=await h.prompt([{name:"product",type:"list",message:"请选择要移除技能包的目标产品:",choices:q}]);t.product||(_("未选择目标产品。"),process.exit(1)),await a(t.product)}).command("update cli-skills","更新指定产品下的组件开发技能包(覆盖式 copy neo-cmp-cli / neo-cmp-dev / vue-to-react / frontend-design)",e=>{e.usage(R("Usage")+": $0 update cli-skills [options]").option("product",{alias:"p",describe:"目标产品(codebuddy/kiro/cursor/claudeCode),不指定则交互选择",type:"string",choices:A}).alias("h","help")},async e=>{const s=async e=>{try{await j.updateSkills(e),process.exit(0)}catch(e){_(e.message||e.msg||"更新技能包失败"),process.exit(1)}};if(e.product)return void await s(e.product);const o=await h.prompt([{name:"product",type:"list",message:"请选择要更新技能包的目标产品:",choices:q}]);o.product||(_("未选择目标产品。"),process.exit(1)),await s(o.product)}).alias("h","help").alias("v","version").strict().fail((e,s,o)=>{_(`\n运行命令时发生错误: ${e}。\n`),console.log(R("当前可用命令列表:")),console.log("");[{cmd:"init [options]",desc:"根据模板创建一个自定义组件"},{cmd:"create project [options]",desc:"创建自定义组件项目(含工程代码)"},{cmd:"create cmp [options]",desc:"创建自定义组件"},{cmd:"preview [options]",desc:"预览自定义组件;支持 --mode local|online,在线预览走设计器(同 linkPreview)"},{cmd:"linkDebug [options]",desc:"开启外链调试模式(在线上页面设计器端调试),支持 --platform pc|h5,默认网页端"},{cmd:"login [options]",desc:"登录 NeoCRM 平台(OAuth2 授权),支持 --env cd|uat|cd"},{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 打开项目"},{cmd:"add cli-skills [options]",desc:"安装组件开发技能包到指定产品"},{cmd:"update cli-skills [options]",desc:"更新指定产品下的组件开发技能包"},{cmd:"remove cli-skills [options]",desc:"移除指定产品下的组件开发技能包"}].forEach(({cmd:e,desc:s})=>{console.log(` ${g.cyan(e.padEnd(25))} ${s}`)}),console.log(""),console.log(`使用 ${g.cyan("neo <command> --help")} 查看具体命令的帮助信息。`),console.log(""),process.exit(1)}).help().updateStrings({"Usage:":R("Usage:"),"Commands:":R("Commands:"),"Options:":R("Options:")}).parseAsync().catch(e=>{e&&(_(`\n运行命令时发生错误: ${e.message||e}。\n`),process.exit(1))}),e.__exports};
|
package/dist/package.json.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});var e="1.
|
|
1
|
+
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});var e="1.15.3";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("node:path"),r=require("node:os");var o,u;exports.__require=function(){if(u)return o;u=1;const a=e,d=r,n={codebuddy:{name:"CodeBuddy",value:"codebuddy",dirName:".codebuddy"},kiro:{name:"Kiro",value:"kiro",dirName:".kiro"},cursor:{name:"Cursor",value:"cursor",dirName:".cursor"},claudeCode:{name:"Claude Code",value:"claudeCode",dirName:".claude"}},
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("node:path"),r=require("node:os");var o,u;exports.__require=function(){if(u)return o;u=1;const a=e,d=r,n={codebuddy:{name:"CodeBuddy",value:"codebuddy",dirName:".codebuddy"},kiro:{name:"Kiro",value:"kiro",dirName:".kiro"},cursor:{name:"Cursor",value:"cursor",dirName:".cursor"},claudeCode:{name:"Claude Code",value:"claudeCode",dirName:".claude"}},t=Object.values(n).map(e=>({name:e.name,value:e.value,short:e.name})),i=Object.keys(n);return o={SKILL_PRODUCT_MAP:n,SKILL_PRODUCT_CHOICES:t,SKILL_PRODUCT_VALUES:i,getSkillDir:function(e){const r=n[e];if(!r)throw new Error(`不支持的产品类型:${e},当前仅支持:${i.join(" / ")}`);return a.join(d.homedir(),r.dirName,"skills")},getProductName:function(e){const r=n[e];return r?r.name:e}}};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("fs-extra"),e=require("node:path"),i=require("node:os"),r=require("axios"),n=require("ora"),s=require("adm-zip"),o=require("chalk"),a=require("../neoParams.js"),c=require("../common.js"),l=require("./skillDirs.js");var u,f;exports.__require=function(){if(f)return u;f=1;const p=t,
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("fs-extra"),e=require("node:path"),i=require("node:os"),r=require("axios"),n=require("ora"),s=require("adm-zip"),o=require("chalk"),a=require("../neoParams.js"),c=require("../common.js"),l=require("./skillDirs.js");var u,f;exports.__require=function(){if(f)return u;f=1;const p=t,y=e,m=i,d=r,$=n,g=s,h=o,{consoleTag:w}=a.__require(),{errorLog:S,warningLog:k,successLog:j}=c.__require(),{getSkillDir:x,getProductName:D}=l.__require(),L="https://neo-cmp-docs.netlify.app/skills.zip",q="skills.json",v=["neo-cmp-cli","neo-cmp-dev","vue-to-react","frontend-design"];async function _(t,e,i){await p.ensureDir(e);const r=(await p.readdir(t)).filter(e=>{const i=y.join(t,e);return p.statSync(i).isDirectory()}),n=[],s=[];for(const o of r){if(i&&i.length>0&&!i.includes(o)){s.push(o);continue}const r=y.join(t,o),a=y.join(e,o);await p.remove(a),await p.copy(r,a),n.push(o)}return{copied:n,skipped:s}}async function A(t){try{t&&await p.pathExists(t)&&await p.remove(t)}catch(t){}}async function B(t){t&&(t.text=`${w}正在下载技能包压缩包...`);const{zipFilePath:e,tempDir:i}=await async function(){const t=y.join(m.tmpdir(),"neo-cli-skills");await p.ensureDir(t);const e=y.join(t,`neo-cmp-skills-${Date.now()}.zip`),i=await d.get(L,{responseType:"arraybuffer",timeout:6e4,maxContentLength:1/0,maxBodyLength:1/0,maxRedirects:5,validateStatus:t=>t>=200&&t<400}),r=i.headers&&i.headers["content-type"]||"";if(/text\/html/i.test(r))throw new Error(`下载技能包失败:返回内容类型为 ${r},请确认资源地址是否可访问(${L})。`);let n;return n=Buffer.isBuffer(i.data)?i.data:i.data instanceof ArrayBuffer?Buffer.from(i.data):i.data&&i.data.buffer instanceof ArrayBuffer?Buffer.from(i.data.buffer):Buffer.from(i.data),await p.writeFile(e,n),{zipFilePath:e,tempDir:t}}();t&&(t.text=`${w}正在解压技能包...`);const r=y.join(i,`extracted-${Date.now()}`);try{!function(t,e){const i=new g(t);p.ensureDirSync(e),i.extractAllTo(e,!0)}(e,r)}catch(t){throw new Error(`解压技能包失败:${t.message||t}。请确认下载的资源为有效的 zip 压缩包。`)}const n=function(t){const e=t=>!(!p.existsSync(t)||!p.statSync(t).isDirectory())&&p.readdirSync(t).some(e=>{const i=y.join(t,e);return p.statSync(i).isDirectory()&&(p.existsSync(y.join(i,"SKILL.md"))||p.existsSync(y.join(i,"skill.md")))});if(e(t))return t;const i=p.readdirSync(t).filter(e=>{const i=y.join(t,e);return p.statSync(i).isDirectory()});for(const r of i){const i=y.join(t,r);if(e(i))return i}return t}(r),s=function(t){const e=y.join(t,q);if(!p.existsSync(e))return null;try{const t=p.readFileSync(e,"utf-8"),i=JSON.parse(t);if(!Array.isArray(i))return null;const r=i.map(t=>t&&"string"==typeof t.name?t.name.trim():"").filter(Boolean);return r.length>0?r:null}catch(t){return null}}(n),o=s&&s.length>0?s:v;if(!(await p.readdir(n)).filter(t=>{const e=y.join(n,t);return p.statSync(e).isDirectory()}).some(t=>o.includes(t)))throw new Error(`解压后未在技能包中找到预期的 skill 目录(期望包含:${o.join(", ")})。`);return{skillsRoot:n,tempDir:i,officialSkills:o}}return u={SKILLS_ZIP_URL:L,SKILLS_MANIFEST_FILE:q,DEFAULT_OFFICIAL_SKILLS:v,installSkills:async function(t){const e=D(t),i=x(t),r=$(`${w}准备安装技能包到 ${e}(${i})...`).start();let n;try{const t=await B(r);n=t.tempDir,r.text=`${w}正在安装技能包到 ${e}...`;const{copied:s}=await _(t.skillsRoot,i);if(r.stop(),0===s.length)return void k("技能包中未找到可安装的 skill。");j(`已成功安装技能包到 ${e}!目录:${i}\n已安装的 skills:${s.map(t=>h.cyan(t)).join(", ")}`)}catch(t){S(`安装技能包失败:${t.message||t.msg||t}`,r),process.exit(1)}finally{await A(n)}},updateSkills:async function(t){const e=D(t),i=x(t),r=$(`${w}准备更新技能包到 ${e}(${i})...`).start();let n;try{const t=await B(r);n=t.tempDir;const s=t.officialSkills;r.text=`${w}正在更新 ${e} 的技能包(覆盖式 copy)...`;const{copied:o,skipped:a}=await _(t.skillsRoot,i,s);if(r.stop(),0===o.length)return void k(`未找到可更新的 skill(期望包含:${s.join(", ")}),请确认技能包内容是否完整。`);j(`已成功更新 ${e} 的技能包!目录:${i}\n已更新的 skills:${o.map(t=>h.cyan(t)).join(", ")}`),a.length>0&&console.log(h.gray(`[neo update cli-skills] 跳过的 skills(非官方维护列表):${a.join(", ")}`))}catch(t){S(`更新技能包失败:${t.message||t.msg||t}`,r),process.exit(1)}finally{await A(n)}},removeSkills:async function(t,e=[]){const i=D(t),r=x(t);if(!await p.pathExists(r))return void k(`${i} 的 skill 目录不存在(${r}),无需移除。`);const n=$(`${w}正在从 ${i}(${r})中移除技能包...`).start(),s=[],o=[];try{const t=Array.isArray(e)?e.map(t=>"string"==typeof t?t.trim():"").filter(Boolean):[],a=Array.from(new Set([...v,...t]));for(const t of a){const e=y.join(r,t);await p.pathExists(e)?(await p.remove(e),s.push(t)):o.push(t)}if(n.stop(),0===s.length)return void k(`未在 ${i}(${r})中找到可移除的 skill(期望:${a.join(", ")})。`);j(`已从 ${i} 中移除技能包!目录:${r}\n已移除的 skills:${s.map(t=>h.cyan(t)).join(", ")}`),o.length>0&&console.log(h.gray(`[neo remove cli-skills] 未找到的 skills:${o.join(", ")}`))}catch(t){S(`移除技能包失败:${t.message||t.msg||t}`,n),process.exit(1)}}}};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "neo-cmp-cli",
|
|
3
|
-
"version": "1.15.
|
|
3
|
+
"version": "1.15.3",
|
|
4
4
|
"description": "Neo 自定义组件开发工具,支持react 和 vue2.0技术栈。",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"neo-cli",
|
|
@@ -14,7 +14,8 @@
|
|
|
14
14
|
"main": "dist/main.js",
|
|
15
15
|
"scripts": {
|
|
16
16
|
"build2node": "akfun build2node",
|
|
17
|
-
"format": "prettier --write \"src/**/**/*.{js,jsx,vue,tsx,ts,scss,less,json}\""
|
|
17
|
+
"format": "prettier --write \"src/**/**/*.{js,jsx,vue,tsx,ts,scss,less,json}\"",
|
|
18
|
+
"format2": "prettier --write \"template/**/**/package.json\""
|
|
18
19
|
},
|
|
19
20
|
"files": [
|
|
20
21
|
"bin/*",
|
|
@@ -12,7 +12,8 @@ export class DataDashboardModel {
|
|
|
12
12
|
label: string = '数据仪表板';
|
|
13
13
|
|
|
14
14
|
// 组件描述,用于设置在编辑器左侧组件面板中展示的描述
|
|
15
|
-
description: string =
|
|
15
|
+
description: string =
|
|
16
|
+
'使用 antd ui 组件实现的数据展示仪表板,支持动态数据更新和动画效果';
|
|
16
17
|
|
|
17
18
|
// 分类标签,用于设置在编辑器左侧组件面板哪个分类中展示
|
|
18
19
|
// tags: string[] = ['自定义组件'];
|
|
@@ -12,7 +12,8 @@ export class SearchWidgetModel {
|
|
|
12
12
|
label: string = '搜索组件';
|
|
13
13
|
|
|
14
14
|
// 组件描述,用于设置在编辑器左侧组件面板中展示的描述
|
|
15
|
-
description: string =
|
|
15
|
+
description: string =
|
|
16
|
+
'使用 antd ui 组件实现的支持搜索输入,点击回车键显示搜索内容';
|
|
16
17
|
|
|
17
18
|
// 分类标签,用于设置在编辑器左侧组件面板哪个分类中展示
|
|
18
19
|
// tags: string[] = ['自定义组件'];
|
|
@@ -52,7 +52,7 @@
|
|
|
52
52
|
"@types/react": "^16.9.11",
|
|
53
53
|
"@types/react-dom": "^16.9.15",
|
|
54
54
|
"@types/axios": "^0.14.0",
|
|
55
|
-
|
|
55
|
+
"neo-cmp-cli": "^1.15.3",
|
|
56
56
|
"husky": "^4.2.5",
|
|
57
57
|
"lint-staged": "^10.2.9",
|
|
58
58
|
"prettier": "^2.0.5",
|
|
@@ -65,5 +65,5 @@
|
|
|
65
65
|
"engines": {
|
|
66
66
|
"node": ">= 16.0.0",
|
|
67
67
|
"npm": ">= 8.0.0"
|
|
68
|
-
}
|
|
68
|
+
}
|
|
69
69
|
}
|