@openyida/yidacli 0.1.11 → 0.1.12
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/publish.js +1 -1
- package/package.json +1 -1
package/dist/publish.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
let fs=require("fs"),path=require("path"),execSync=require("child_process").execSync,https=require("https"),http=require("http"),querystring=require("querystring"),babelTransform=require("./babel-transform").default,UglifyJS=require("uglify-js"),{findProjectRoot,loadCookieData,triggerLogin,refreshCsrfToken,
|
|
2
|
+
let fs=require("fs"),path=require("path"),execSync=require("child_process").execSync,https=require("https"),http=require("http"),querystring=require("querystring"),babelTransform=require("./babel-transform").default,UglifyJS=require("uglify-js"),{findProjectRoot,loadCookieData,triggerLogin,refreshCsrfToken,isLoginExpired,isCsrfTokenExpired}=require("./utils"),CONFIG=fs.existsSync(path.resolve(findProjectRoot(),"config.json"))?JSON.parse(fs.readFileSync(path.resolve(findProjectRoot(),"config.json"),"utf-8")):{},DEFAULT_BASE_URL=CONFIG.defaultBaseUrl||"https://www.aliwork.com",SCHEMA_VERSION="V5",DOMAIN_CODE="tEXDRG",PREFIX="_view",PROJECT_ROOT=findProjectRoot();function parseArgs(){var e=process.argv.slice(2);return e.length<3&&(console.error("用法: node publish.js <appType> <formUuid> <源文件路径>"),console.error("示例:node publish.js APP_XXX FORM-XXX pages/src/xxx.js"),process.exit(1)),{appType:e[0],formUuid:e[1],sourceFile:e[2]}}function resolveBaseUrl(e){return(e.base_url||DEFAULT_BASE_URL).replace(/\/+$/,"")}function compileSource(e){var o=path.basename(e),r=path.parse(e).name+".js",n=path.join(findProjectRoot(),"pages","dist",r),e=(console.error(`[1/4] 读取 ${o} 源码...`),fs.readFileSync(e,"utf-8")),o=(console.error(`[2/4] Babel 编译 ${o}...`),babelTransform(e,{},!1,{RE_VERSION:"7.4.0"}));if(o.error instanceof Error){var s=o.error;let e=" ❌ 编译失败:"+s.message;s.loc&&(e+=`
|
|
3
3
|
位置: 第 ${s.loc.line} 行, 第 ${s.loc.column} 列`),s.code&&(e+=`
|
|
4
4
|
错误码: `+s.code),console.error(e),process.exit(1)}console.error(`[3/4] UglifyJS 压缩 → ${r}...`);s=UglifyJS.minify(o.compiled),s.error&&(console.error(" 压缩失败:"+s.error.message),process.exit(1)),r=path.dirname(n);return fs.existsSync(r)||fs.mkdirSync(r,{recursive:!0}),fs.writeFileSync(n,s.code,"utf-8"),console.error(" ✅ 编译压缩完成:"+n),{sourceCode:e,compiledCode:s.code}}let nodeIdCounter=1;function nextNodeId(){return"node_oc"+Date.now().toString(36)+(nodeIdCounter++).toString(36)}function generateSuffix(){return Date.now().toString(36)+Math.random().toString(36).substring(2,8)}function buildSchemaContent(e,o,r){console.error("[4/4] 构建 Schema...");var n="function constructor() {\nvar module = { exports: {} };\nvar _this = this;\nthis.__initMethods__(module.exports, module);\nObject.keys(module.exports).forEach(function(item) {\n if(typeof module.exports[item] === 'function'){\n _this[item] = module.exports[item];\n }\n});\n\n}",n={schemaType:"superform",schemaVersion:"5.0",pages:[{utils:[{name:"legaoBuiltin",type:"npm",content:{package:"@ali/vu-legao-builtin",version:"3.0.0",exportName:"legaoBuiltin"}},{name:"yidaPlugin",type:"npm",content:{package:"@ali/vu-yida-plugin",version:"1.1.0",exportName:"yidaPlugin"}}],componentsMap:[{package:"@ali/vc-deep-yida",version:"1.5.169",componentName:"RootHeader"},{package:"@ali/vc-deep-yida",version:"1.5.169",componentName:"Jsx"},{package:"@ali/vc-deep-yida",version:"1.5.169",componentName:"RootContent"},{package:"@ali/vc-deep-yida",version:"1.5.169",componentName:"RootFooter"},{package:"@ali/vc-deep-yida",version:"1.5.169",componentName:"Page"}],componentsTree:[{componentName:"Page",id:nextNodeId(),props:{contentBgColor:"white",pageStyle:{backgroundColor:"#f2f3f5"},contentMargin:"0",contentPadding:"0",showTitle:!1,contentPaddingMobile:"0",templateVersion:"1.0.0",contentMarginMobile:"0",className:"page_"+generateSuffix(),contentBgColorMobile:"white"},condition:!0,css:"body{background-color:#f2f3f5}",methods:{__initMethods__:{type:"js",source:"function (exports, module) { /*set actions code here*/ }",compiled:"function (exports, module) { /*set actions code here*/ }"}},dataSource:{offline:[],globalConfig:{fit:{compiled:"'use strict';\n\nvar __preParser__ = function fit(response) {\n var content = response.content !== undefined ? response.content : response;\n var error = {\n message: response.errorMsg || response.errors && response.errors[0] && response.errors[0].msg || response.content || '远程数据源请求出错,success is false'\n };\n var success = true;\n if (response.success !== undefined) {\n success = response.success;\n } else if (response.hasError !== undefined) {\n success = !response.hasError;\n }\n return {\n content: content,\n success: success,\n error: error\n };\n};",source:"function fit(response) {\r\n const content = (response.content !== undefined) ? response.content : response;\r\n const error = {\r\n message: response.errorMsg ||\r\n (response.errors && response.errors[0] && response.errors[0].msg) ||\r\n response.content || '远程数据源请求出错,success is false',\r\n };\r\n let success = true;\r\n if (response.success !== undefined) {\r\n success = response.success;\r\n } else if (response.hasError !== undefined) {\r\n success = !response.hasError;\r\n }\r\n return {\r\n content,\r\n success,\r\n error,\r\n };\r\n}",type:"js",error:{}}},online:[{id:"VCB660714833IBHEOXK376TA7XJH2AXUWR8MMW",name:"urlParams",description:"当前页面地址的参数:如 aliwork.com/APP_XXX/workbench?id=1&name=宜搭,可通过 this.state.urlParams.name 获取到宜搭",formUuid:r,protocal:"URI",isReadonly:!0},{id:"",name:"timestamp",description:"",formUuid:r,protocal:"VALUE",initialData:""}],list:[{id:"VCB660714833IBHEOXK376TA7XJH2AXUWR8MMW",name:"urlParams",description:"当前页面地址的参数:如 aliwork.com/APP_XXX/workbench?id=1&name=宜搭,可通过 this.state.urlParams.name 获取到宜搭",formUuid:r,protocal:"URI",isReadonly:!0},{id:"",name:"timestamp",description:"",formUuid:r,protocal:"VALUE",initialData:""}],sync:!0},lifeCycles:{constructor:{type:"js",compiled:n,source:n},componentWillUnmount:{name:"didUnmount",id:"didUnmount",type:"actionRef",params:{}},componentDidMount:{name:"didMount",id:"didMount",params:{},type:"actionRef"}},hidden:!1,title:"",isLocked:!1,conditionGroup:"",children:[{componentName:"RootHeader",id:nextNodeId(),props:{},condition:!0,hidden:!1,title:"",isLocked:!1,conditionGroup:""},{componentName:"RootContent",id:nextNodeId(),props:{},condition:!0,hidden:!1,title:"",isLocked:!1,conditionGroup:"",children:[{componentName:"Jsx",id:nextNodeId(),props:{render:{type:"js",compiled:'function main(){\n \n "use strict";\n\nvar __compiledFunc__ = function render() {\n return this.renderJsx();\n};\n return __compiledFunc__.apply(this, arguments);\n }',source:"function render() {\n return this.renderJsx();\n}",error:{}},__style__:{},fieldId:"jsx_"+generateSuffix()},condition:!0,hidden:!1,title:"",isLocked:!1,conditionGroup:""}]},{componentName:"RootFooter",id:nextNodeId(),props:{},condition:!0,hidden:!1,title:"",isLocked:!1,conditionGroup:""}]}],id:r,connectComponent:[]}],actions:{module:{compiled:o,source:e},type:"FUNCTION",list:[{id:"getCustomState",title:"getCustomState"},{id:"setCustomState",title:"setCustomState"},{id:"forceUpdate",title:"forceUpdate"},{id:"didMount",title:"didMount"},{id:"didUnmount",title:"didUnmount"},{id:"renderJsx",title:"renderJsx"}]},config:{connectComponent:[]}};return JSON.stringify(n)}let COOKIES_PATH=path.join(PROJECT_ROOT,".cache","cookies.json");function sendSaveRequest(a,d,p,l,u,m){return new Promise((n,o)=>{var e=`/alibaba/web/${u}/${PREFIX}/query/formdesign/saveFormSchema.json?_stamp=`+Date.now(),r=querystring.stringify({_csrf_token:a,prefix:PREFIX,content:p,formUuid:m,schemaVersion:SCHEMA_VERSION,domainCode:DOMAIN_CODE,importSchema:!0}),s=d.map(e=>e.name+"="+e.value).join("; "),t=new URL(l),i="https:"===t.protocol,c=i?https:http,t={hostname:t.hostname,port:t.port||(i?443:80),path:e,method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded","Content-Length":Buffer.byteLength(r),Origin:l,Referer:l+"/",Cookie:s}},i=c.request(t,o=>{let r="";o.on("data",e=>{r+=e}),o.on("end",()=>{console.error(" HTTP 状态码: "+o.statusCode);let e;try{e=JSON.parse(r)}catch(e){return console.error(" 响应内容: "+r.substring(0,500)),void n({success:!1,errorMsg:`HTTP ${o.statusCode}: 响应非 JSON`})}isLoginExpired(e)?(console.error(" 检测到登录过期: "+e.errorMsg),n({__needLogin:!0})):isCsrfTokenExpired(e)?(console.error(" 检测到 csrf_token 过期: "+e.errorMsg),n({__csrfExpired:!0})):n(e)})});i.on("error",e=>{o(e)}),i.write(r),i.end()})}function sendUpdateConfigRequest(a,d,p,l,u,m,f){return new Promise((n,o)=>{var e=`/dingtalk/web/${l}/query/formdesign/updateFormConfig.json`,r=querystring.stringify({_csrf_token:a,formUuid:u,version:m,configType:"MINI_RESOURCE",value:f}),s=d.map(e=>e.name+"="+e.value).join("; "),t=new URL(p),i="https:"===t.protocol,c=i?https:http,t={hostname:t.hostname,port:t.port||(i?443:80),path:e,method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded","Content-Length":Buffer.byteLength(r),Origin:p,Referer:p+"/",Cookie:s}},i=c.request(t,o=>{let r="";o.on("data",e=>{r+=e}),o.on("end",()=>{console.error(" HTTP 状态码: "+o.statusCode);let e;try{e=JSON.parse(r)}catch(e){return console.error(" 响应内容: "+r.substring(0,500)),void n({success:!1,errorMsg:`HTTP ${o.statusCode}: 响应非 JSON`})}isLoginExpired(e)?(console.error(" 检测到登录过期: "+e.errorMsg),n({__needLogin:!0})):isCsrfTokenExpired(e)?(console.error(" 检测到 csrf_token 过期: "+e.errorMsg),n({__csrfExpired:!0})):n(e)})});i.on("error",e=>{o(e)}),i.write(r),i.end()})}async function main(){var{appType:e,formUuid:o,sourceFile:r}=parseArgs(),r=path.resolve(r),n=(fs.existsSync(r)||(console.error("❌ 源文件不存在:"+r),process.exit(1)),path.parse(r)),n=path.join(findProjectRoot(),"pages","dist",n.name+".js"),{sourceCode:s,compiledCode:t}=(console.error("\n📦 Step 1: 编译源码 & 构建 Schema\n"),compileSource(r)),s=buildSchemaContent(s,t,o);console.error(" ✅ Schema 构建完成!"),console.error("\n🔑 Step 2: 读取登录态");let i=loadCookieData(),{csrf_token:c,cookies:a}=(i&&i.csrf_token||(console.error(" ⚠️ 未找到本地登录态或 csrf_token,触发登录..."),i=triggerLogin()),i),d=resolveBaseUrl(i),p=(console.error("=".repeat(50)),console.error(" yida-publish - 宜搭页面发布工具"),console.error("=".repeat(50)),console.error(`
|
|
5
5
|
平台地址: `+d),console.error(" 应用ID: "+e),console.error(" 表单ID: "+o),console.error(" 源文件: "+r),console.error(" 编译产物:"+n),console.error(" 输出目录:pages/dist/"),console.error("\n📤 Step 3: 发布 Schema\n"),await sendSaveRequest(c,a,s,d,e,o));p&&p.__csrfExpired&&(i=refreshCsrfToken(),c=i.csrf_token,a=i.cookies,d=resolveBaseUrl(i),console.error(" 🔄 重新发送 saveFormSchema 请求(csrf_token 已刷新)..."),p=await sendSaveRequest(c,a,s,d,e,o)),p&&p.__needLogin&&(i=triggerLogin(),c=i.csrf_token,a=i.cookies,d=resolveBaseUrl(i),console.error(" 🔄 重新发送 saveFormSchema 请求..."),p=await sendSaveRequest(c,a,s,d,e,o)),p&&p.success||(t=p?p.errorMsg||"未知错误":"请求失败",console.error(`
|