miniprogram-ci 2.1.32 → 2.1.33

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.
Files changed (355) hide show
  1. package/CHANGELOG.md +2 -0
  2. package/README.md +2 -0
  3. package/dist/@types/ci/cloud/utils.d.ts +1 -1
  4. package/dist/@types/common/code-analyse/index.d.ts +16 -1
  5. package/dist/@types/config/config.d.ts +1 -1
  6. package/dist/@types/index.d.ts +2 -0
  7. package/dist/@types/modules/corecompiler/original/compile/game.d.ts +1 -1
  8. package/dist/@types/modules/corecompiler/original/compile/index.d.ts +1 -1
  9. package/dist/@types/modules/corecompiler/original/index.d.ts +1 -1
  10. package/dist/@types/modules/corecompiler/original/workerThread/childprocessManager.d.ts +1 -1
  11. package/dist/@types/modules/corecompiler/original/workerThread/config.d.ts +3 -0
  12. package/dist/@types/modules/corecompiler/original/workerThread/task/compilejs.d.ts +3 -0
  13. package/dist/@types/modules/corecompiler/original/workerThread/task/func.d.ts +4 -0
  14. package/dist/@types/modules/corecompiler/original/workerThread/workerManager.d.ts +8 -0
  15. package/dist/@types/modules/corecompiler/originalCompiler.d.ts +1 -1
  16. package/dist/@types/modules/corecompiler/summer/pipeManager/index.d.ts +6 -0
  17. package/dist/@types/modules/corecompiler/summer/pipeManager/pipeCPProject.d.ts +17 -0
  18. package/dist/@types/modules/corecompiler/summer/pipeManager/pipeContext.d.ts +10 -0
  19. package/dist/@types/modules/corecompiler/summer/pipeManager/pipeManager.d.ts +12 -0
  20. package/dist/@types/modules/corecompiler/summer/pipeManager/pipeWorker.d.ts +2 -0
  21. package/dist/@types/modules/corecompiler/summer/pipeManager/pipes/appservicePipe/index.d.ts +3 -0
  22. package/dist/@types/modules/corecompiler/summer/pipeManager/pipes/compileWxmlToGlassEaselPipe.d.ts +3 -0
  23. package/dist/@types/modules/corecompiler/summer/pipeManager/pipes/compileWxssPipe.d.ts +3 -0
  24. package/dist/@types/modules/corecompiler/summer/pipeManager/pipes/index.d.ts +2 -0
  25. package/dist/@types/modules/corecompiler/summer/pipeManager/pipes/pageInitSourcePipe/index.d.ts +4 -0
  26. package/dist/@types/modules/corecompiler/summer/pipeManager/pipes/pageframePipe/index.d.ts +3 -0
  27. package/dist/@types/modules/corecompiler/summer/pipeManager/pipes/utils/appdevserver/getAppService.d.ts +6 -0
  28. package/dist/@types/modules/corecompiler/summer/pipeManager/pipes/utils/appdevserver/getwxappcode.d.ts +9 -0
  29. package/dist/@types/modules/corecompiler/summer/pipeManager/pipes/utils/appservice/getjsfile.d.ts +12 -0
  30. package/dist/@types/modules/corecompiler/summer/pipeManager/pipes/utils/appservice/getmainpkgsortedjsfiles.d.ts +11 -0
  31. package/dist/@types/modules/corecompiler/summer/pipeManager/pipes/utils/appservice/getwxappcode.d.ts +8 -0
  32. package/dist/@types/modules/corecompiler/summer/pipeManager/pipes/utils/common/apperrcode.config.d.ts +92 -0
  33. package/dist/@types/modules/corecompiler/summer/pipeManager/pipes/utils/common/tools.d.ts +1 -0
  34. package/dist/@types/modules/corecompiler/summer/pipeManager/pipes/utils/project/appconfig.d.ts +6 -0
  35. package/dist/@types/modules/corecompiler/summer/pipeManager/pipes/utils/project/appjson.d.ts +3 -0
  36. package/dist/@types/modules/corecompiler/summer/pipeManager/pipes/utils/project/customcomponent.d.ts +21 -0
  37. package/dist/@types/modules/corecompiler/summer/pipeManager/pipes/utils/project/helper/theme.d.ts +40 -0
  38. package/dist/@types/modules/corecompiler/summer/pipeManager/pipes/utils/project/pagejson.d.ts +3 -0
  39. package/dist/@types/modules/corecompiler/summer/pipeManager/pipes/utils/project/wxappcodejson.d.ts +3 -0
  40. package/dist/@types/modules/corecompiler/summer/pipeManager/pipes/utils/trans/transwxmltojs.d.ts +19 -0
  41. package/dist/@types/modules/corecompiler/summer/pipeManager/pipes/utils/trans/transwxsstojs.d.ts +15 -0
  42. package/dist/@types/modules/corecompiler/summer/pipeManager/pipes/utils/web/processPath.d.ts +9 -0
  43. package/dist/@types/modules/corecompiler/summer/pipeManager/pipes/wccPipe.d.ts +3 -0
  44. package/dist/@types/modules/corecompiler/summer/pipeManager/types.d.ts +100 -0
  45. package/dist/@types/modules/corecompiler/summer/plugins/script_task/minify_script_task.d.ts +1 -1
  46. package/dist/@types/modules/corecompiler/summerCompiler.d.ts +10 -0
  47. package/dist/@types/modules/index.d.ts +1 -1
  48. package/dist/@types/modules/precompiler/conditioncompile/compiler/plant.d.ts +1 -1
  49. package/dist/@types/modules/precompiler/conditioncompile/index.d.ts +1 -1
  50. package/dist/@types/project/advance/precompileProject.d.ts +1 -1
  51. package/dist/@types/project/baseProject.d.ts +1 -0
  52. package/dist/@types/services/app/ci/appDirService.d.ts +6 -0
  53. package/dist/@types/services/common/getservice.d.ts +6 -3
  54. package/dist/@types/services/compilewxml/common/compilewxmlService.d.ts +2 -2
  55. package/dist/@types/services/compilewxml/node/compileglasseasel.d.ts +14 -0
  56. package/dist/@types/services/multiTaskManager/ci/multiTaskManager.d.ts +5 -0
  57. package/dist/@types/services/multiTaskManager/common/multiTaskManager.d.ts +5 -0
  58. package/dist/@types/services/multiTaskManager/electron/multiTaskManager.d.ts +5 -0
  59. package/dist/@types/services/multiTaskManager/webide/multiTaskManager.d.ts +5 -0
  60. package/dist/@types/services/nativeModule/ci/nativeModule.d.ts +3 -0
  61. package/dist/@types/services/nativeModule/common/nativeModule.d.ts +2 -2
  62. package/dist/@types/services/nativeModule/common/nativeModule.impl.d.ts +3 -2
  63. package/dist/@types/services/pluginFileReader/ci/pluginFileReader.d.ts +3 -0
  64. package/dist/@types/services/pluginFileReader/common/pluginFileReader.base.d.ts +9 -0
  65. package/dist/@types/services/pluginFileReader/common/pluginFileReader.d.ts +12 -0
  66. package/dist/@types/services/pluginFileReader/electron/pluginFileReader.d.ts +3 -0
  67. package/dist/@types/services/pluginFileReader/webide/pluginFileReader.d.ts +9 -0
  68. package/dist/@types/services/root/ci/rootService.d.ts +2 -0
  69. package/dist/@types/services/root/webide/root.d.ts +11 -0
  70. package/dist/@types/services/root/webide/rootService.d.ts +2 -0
  71. package/dist/@types/utils/colorutils.d.ts +4 -0
  72. package/dist/@types/utils/debug.d.ts +1 -0
  73. package/dist/@types/utils/error.d.ts +1 -1
  74. package/dist/@types/utils/fsagent.d.ts +4 -3
  75. package/dist/@types/utils/processBootstrap.d.ts +7 -0
  76. package/dist/@types/utils/subprocess/processManager.d.ts +1 -0
  77. package/dist/@types/utils/wxapkg/pack.d.ts +2 -2
  78. package/dist/ci/android-miniapp-toolkit/dist/index.js +1 -1
  79. package/dist/ci/build-apk.js +1 -1
  80. package/dist/ci/build-ipa.js +1 -1
  81. package/dist/ci/checkCodeQuality.js +1 -1
  82. package/dist/ci/cloud/cloudapi.js +1 -1
  83. package/dist/ci/cloud/createTimeTrigger.js +1 -1
  84. package/dist/ci/cloud/uploadContainer.js +1 -1
  85. package/dist/ci/cloud/uploadFile.js +1 -1
  86. package/dist/ci/cloud/uploadFunction.js +1 -1
  87. package/dist/ci/cloud/utils.js +1 -1
  88. package/dist/ci/code-analyse.js +1 -1
  89. package/dist/ci/cos-upload.js +1 -1
  90. package/dist/ci/gamepkg/apkplug.js +1 -1
  91. package/dist/ci/gamepkg/index.js +1 -1
  92. package/dist/ci/getCompiledResult.js +1 -1
  93. package/dist/ci/getDevSourceMap.js +1 -1
  94. package/dist/ci/getcompiler.js +1 -1
  95. package/dist/ci/miniapp/androidCloudBuild.js +1 -1
  96. package/dist/ci/miniapp/archive.js +1 -1
  97. package/dist/ci/miniapp/iosCloudBuild.js +1 -1
  98. package/dist/ci/miniapp/miniappPlugin.js +1 -1
  99. package/dist/ci/miniapp/sdkManager.js +1 -1
  100. package/dist/ci/miniapp/upload.js +1 -1
  101. package/dist/ci/miniapp-cloud-upload.js +1 -1
  102. package/dist/ci/preview.js +1 -1
  103. package/dist/ci/upload.js +1 -1
  104. package/dist/ci/utils/codeDenpendencyQualityChecker.js +1 -1
  105. package/dist/ci/utils/filterUnusedFile.js +1 -1
  106. package/dist/ci/utils/pack.js +1 -1
  107. package/dist/ci/utils/packfile.js +1 -1
  108. package/dist/ci/utils/terminalQrcode.js +1 -1
  109. package/dist/ci/utils/tools.js +1 -1
  110. package/dist/ci/utils/unpack.js +1 -1
  111. package/dist/ci/utils/wxvpkg/unpack/version0.js +1 -1
  112. package/dist/ci/utils/wxvpkg/unpack/version10.js +1 -1
  113. package/dist/cli/index.js +1 -1
  114. package/dist/common/code-analyse/index.js +1 -1
  115. package/dist/config/config.js +1 -1
  116. package/dist/config/url.config.js +1 -1
  117. package/dist/index.js +1 -1
  118. package/dist/modules/corecompiler/baseCompiler.js +1 -1
  119. package/dist/modules/corecompiler/original/analyse/partial.js +1 -1
  120. package/dist/modules/corecompiler/original/compile/common.js +1 -1
  121. package/dist/modules/corecompiler/original/compile/game.js +1 -1
  122. package/dist/modules/corecompiler/original/compile/gamePlugin.js +1 -1
  123. package/dist/modules/corecompiler/original/compile/handler/js.js +1 -1
  124. package/dist/modules/corecompiler/original/compile/handler/mpjson.js +1 -1
  125. package/dist/modules/corecompiler/original/compile/handler/wxml.js +1 -1
  126. package/dist/modules/corecompiler/original/compile/handler/wxss.js +1 -1
  127. package/dist/modules/corecompiler/original/compile/miniprogram.js +1 -1
  128. package/dist/modules/corecompiler/original/compile/miniprogramPlugin.js +1 -1
  129. package/dist/modules/corecompiler/original/js/enhance.js +1 -1
  130. package/dist/modules/corecompiler/original/js/es6Transform.js +1 -1
  131. package/dist/modules/corecompiler/original/js/generateMap.js +1 -1
  132. package/dist/modules/corecompiler/original/js/minifyjs.js +1 -1
  133. package/dist/modules/corecompiler/original/js/minifyjsAfterWrap.js +1 -1
  134. package/dist/modules/corecompiler/original/js/workletCompile.js +1 -1
  135. package/dist/modules/corecompiler/original/json/app/appJSON.js +1 -1
  136. package/dist/modules/corecompiler/original/json/app/checkAppFields.js +1 -1
  137. package/dist/modules/corecompiler/original/json/app/extJSON.js +1 -1
  138. package/dist/modules/corecompiler/original/json/app/index.js +1 -1
  139. package/dist/modules/corecompiler/original/json/common.js +1 -1
  140. package/dist/modules/corecompiler/original/json/game.js +1 -1
  141. package/dist/modules/corecompiler/original/json/page/checkPageJSON.js +1 -1
  142. package/dist/modules/corecompiler/original/json/page/getPageJSON.js +1 -1
  143. package/dist/modules/corecompiler/original/json/plugin/plugin.js +1 -1
  144. package/dist/modules/corecompiler/original/json/plugin/pluginPage.js +1 -1
  145. package/dist/modules/corecompiler/original/json/projectconfig.js +1 -1
  146. package/dist/modules/corecompiler/original/json/reactiveCache.js +1 -1
  147. package/dist/modules/corecompiler/original/json/signaturejson.js +1 -1
  148. package/dist/modules/corecompiler/original/json/sitemap.js +1 -1
  149. package/dist/modules/corecompiler/original/json/theme.js +1 -1
  150. package/dist/modules/corecompiler/original/npm/filterdeps.js +1 -1
  151. package/dist/modules/corecompiler/original/npm/packnpm.js +1 -1
  152. package/dist/modules/corecompiler/original/protect/fileFlatter.js +1 -1
  153. package/dist/modules/corecompiler/original/protect/uglifyfilenames.js +1 -1
  154. package/dist/modules/corecompiler/original/utils/logger.js +1 -1
  155. package/dist/modules/corecompiler/original/validate/schemaValidate.js +1 -1
  156. package/dist/modules/corecompiler/original/validate/validate.js +1 -1
  157. package/dist/modules/corecompiler/original/workerThread/childprocess.js +1 -1
  158. package/dist/modules/corecompiler/original/workerThread/childprocessManager.js +1 -1
  159. package/dist/modules/corecompiler/original/workerThread/config.js +1 -1
  160. package/dist/modules/corecompiler/original/workerThread/fork.js +1 -1
  161. package/dist/modules/corecompiler/original/workerThread/index.js +1 -1
  162. package/dist/modules/corecompiler/original/workerThread/task/call_func.js +1 -1
  163. package/dist/modules/corecompiler/original/workerThread/task/compilejs.js +1 -1
  164. package/dist/modules/corecompiler/original/workerThread/task/compilewxss.js +1 -1
  165. package/dist/modules/corecompiler/original/workerThread/task/func.js +1 -1
  166. package/dist/modules/corecompiler/original/workerThread/task/index.js +1 -1
  167. package/dist/modules/corecompiler/original/workerThread/task/minifywxml.js +1 -1
  168. package/dist/modules/corecompiler/original/workerThread/worker.js +1 -1
  169. package/dist/modules/corecompiler/original/workerThread/workerManager.js +1 -1
  170. package/dist/modules/corecompiler/originalCompiler.js +1 -1
  171. package/dist/modules/corecompiler/processHandler.js +1 -1
  172. package/dist/modules/corecompiler/summer/graph/appconf.js +1 -1
  173. package/dist/modules/corecompiler/summer/graph/appgraph.js +1 -1
  174. package/dist/modules/corecompiler/summer/graph/basegraph.js +1 -1
  175. package/dist/modules/corecompiler/summer/graph/gameconf.js +1 -1
  176. package/dist/modules/corecompiler/summer/graph/gamegraph.js +1 -1
  177. package/dist/modules/corecompiler/summer/graph/gamepluginconf.js +1 -1
  178. package/dist/modules/corecompiler/summer/graph/gameplugingraph.js +1 -1
  179. package/dist/modules/corecompiler/summer/graph/pluginconf.js +1 -1
  180. package/dist/modules/corecompiler/summer/graph/plugingraph.js +1 -1
  181. package/dist/modules/corecompiler/summer/index.js +1 -1
  182. package/dist/modules/corecompiler/summer/initPlugin.js +1 -1
  183. package/dist/modules/corecompiler/summer/module.js +1 -1
  184. package/dist/modules/corecompiler/summer/persistCache.js +1 -1
  185. package/dist/modules/corecompiler/summer/pipeManager/index.js +1 -0
  186. package/dist/modules/corecompiler/summer/pipeManager/pipeCPProject.js +1 -0
  187. package/dist/modules/corecompiler/summer/pipeManager/pipeContext.js +1 -0
  188. package/dist/modules/corecompiler/summer/pipeManager/pipeManager.js +1 -0
  189. package/dist/modules/corecompiler/summer/pipeManager/pipeWorker.js +1 -0
  190. package/dist/modules/corecompiler/summer/pipeManager/pipes/appservicePipe/index.js +1 -0
  191. package/dist/modules/corecompiler/summer/pipeManager/pipes/compileWxmlToGlassEaselPipe.js +1 -0
  192. package/dist/modules/corecompiler/summer/pipeManager/pipes/compileWxssPipe.js +1 -0
  193. package/dist/modules/corecompiler/summer/pipeManager/pipes/index.js +1 -0
  194. package/dist/modules/corecompiler/summer/pipeManager/pipes/pageInitSourcePipe/index.js +1 -0
  195. package/dist/modules/corecompiler/summer/pipeManager/pipes/pageframePipe/index.js +1 -0
  196. package/dist/modules/corecompiler/summer/pipeManager/pipes/utils/appdevserver/getAppService.js +1 -0
  197. package/dist/modules/corecompiler/summer/pipeManager/pipes/utils/appdevserver/getwxappcode.js +1 -0
  198. package/dist/modules/corecompiler/summer/pipeManager/pipes/utils/appservice/getjsfile.js +1 -0
  199. package/dist/modules/corecompiler/summer/pipeManager/pipes/utils/appservice/getmainpkgsortedjsfiles.js +1 -0
  200. package/dist/modules/corecompiler/summer/pipeManager/pipes/utils/appservice/getwxappcode.js +1 -0
  201. package/dist/modules/corecompiler/summer/pipeManager/pipes/utils/common/apperrcode.config.js +1 -0
  202. package/dist/modules/corecompiler/summer/pipeManager/pipes/utils/common/tools.js +1 -0
  203. package/dist/modules/corecompiler/summer/pipeManager/pipes/utils/project/appconfig.js +1 -0
  204. package/dist/modules/corecompiler/summer/pipeManager/pipes/utils/project/appjson.js +1 -0
  205. package/dist/modules/corecompiler/summer/pipeManager/pipes/utils/project/customcomponent.js +1 -0
  206. package/dist/modules/corecompiler/summer/pipeManager/pipes/utils/project/helper/theme.js +1 -0
  207. package/dist/modules/corecompiler/summer/pipeManager/pipes/utils/project/pagejson.js +1 -0
  208. package/dist/modules/corecompiler/summer/pipeManager/pipes/utils/project/wxappcodejson.js +1 -0
  209. package/dist/modules/corecompiler/summer/pipeManager/pipes/utils/trans/transwxmltojs.js +1 -0
  210. package/dist/modules/corecompiler/summer/pipeManager/pipes/utils/trans/transwxsstojs.js +1 -0
  211. package/dist/modules/corecompiler/summer/pipeManager/pipes/utils/web/processPath.js +1 -0
  212. package/dist/modules/corecompiler/summer/pipeManager/pipes/wccPipe.js +1 -0
  213. package/dist/modules/corecompiler/summer/pipeManager/types.js +1 -0
  214. package/dist/modules/corecompiler/summer/pluginDriver.js +1 -1
  215. package/dist/modules/corecompiler/summer/pluginconfig.js +1 -1
  216. package/dist/modules/corecompiler/summer/plugins/base/es6module.js +1 -1
  217. package/dist/modules/corecompiler/summer/plugins/base/javascript.js +1 -1
  218. package/dist/modules/corecompiler/summer/plugins/base/swc.js +1 -1
  219. package/dist/modules/corecompiler/summer/plugins/base/wxss.js +1 -1
  220. package/dist/modules/corecompiler/summer/plugins/enhance.js +1 -1
  221. package/dist/modules/corecompiler/summer/plugins/filetask/script.js +1 -1
  222. package/dist/modules/corecompiler/summer/plugins/less.js +1 -1
  223. package/dist/modules/corecompiler/summer/plugins/minifywxml.js +1 -1
  224. package/dist/modules/corecompiler/summer/plugins/sass.js +1 -1
  225. package/dist/modules/corecompiler/summer/plugins/script_task/babel_script_task.js +1 -1
  226. package/dist/modules/corecompiler/summer/plugins/script_task/load_script_task.js +1 -1
  227. package/dist/modules/corecompiler/summer/plugins/script_task/minify_script_task.js +1 -1
  228. package/dist/modules/corecompiler/summer/plugins/script_task/swc_task.js +1 -1
  229. package/dist/modules/corecompiler/summer/plugins/terser.js +1 -1
  230. package/dist/modules/corecompiler/summer/plugins/typescript.js +1 -1
  231. package/dist/modules/corecompiler/summer/plugins/worklet.js +1 -1
  232. package/dist/modules/corecompiler/summer/resolver.js +1 -1
  233. package/dist/modules/corecompiler/summer/summer.js +1 -1
  234. package/dist/modules/corecompiler/summer/utils/async.js +1 -1
  235. package/dist/modules/corecompiler/summer/utils/inputsourcemap.js +1 -1
  236. package/dist/modules/corecompiler/summerCompiler.js +1 -1
  237. package/dist/modules/corecompiler/summerEntryProcess.js +1 -1
  238. package/dist/modules/createSummer.js +1 -1
  239. package/dist/modules/fullcompiler/app/app.js +1 -1
  240. package/dist/modules/fullcompiler/app/contactandlaunch/updateContactForSubpkg.js +1 -1
  241. package/dist/modules/fullcompiler/app/contactandlaunch/updatecontactandlaunch.js +1 -1
  242. package/dist/modules/index.js +1 -1
  243. package/dist/modules/nativecompiler/android/adb.js +1 -1
  244. package/dist/modules/nativecompiler/android/device.js +1 -1
  245. package/dist/modules/nativecompiler/android/index.js +1 -1
  246. package/dist/modules/nativecompiler/android/projectconfig.js +1 -1
  247. package/dist/modules/nativecompiler/index.js +1 -1
  248. package/dist/modules/nativecompiler/ios/buildCloud.js +1 -1
  249. package/dist/modules/nativecompiler/ios/device.js +1 -1
  250. package/dist/modules/nativecompiler/ios/index.js +1 -1
  251. package/dist/modules/nativecompiler/nativeEntryProcess.js +1 -1
  252. package/dist/modules/nativecompiler/processHandler.js +1 -1
  253. package/dist/modules/precompiler/conditioncompile/compiler/json.js +1 -1
  254. package/dist/modules/precompiler/conditioncompile/compiler/macro.js +1 -1
  255. package/dist/modules/precompiler/conditioncompile/index.js +1 -1
  256. package/dist/project/advance/precompileProject.js +1 -1
  257. package/dist/project/advance/reactiveProject.js +1 -1
  258. package/dist/project/baseProject.js +1 -1
  259. package/dist/project/ciProjectWithMockBuffer.js +1 -1
  260. package/dist/project/summerCPProject.js +1 -1
  261. package/dist/services/app/ci/appDirService.js +1 -0
  262. package/dist/services/common/getservice.js +1 -1
  263. package/dist/services/common/vsbase.js +1 -1
  264. package/dist/services/compilewxml/node/compileUtils.js +1 -1
  265. package/dist/services/compilewxml/node/compileglasseasel.js +1 -1
  266. package/dist/services/compilewxml/webide/pageFrameWasm/wcc/runWcc.js +1 -1
  267. package/dist/services/compilewxss/node/compileUtils.js +1 -1
  268. package/dist/services/compilewxss/webide/pageFrameWasm/wcsc/runWcsc.js +1 -1
  269. package/dist/services/multiTaskManager/ci/multiTaskManager.js +1 -0
  270. package/dist/services/multiTaskManager/common/multiTaskManager.js +1 -0
  271. package/dist/services/multiTaskManager/electron/multiTaskManager.js +1 -0
  272. package/dist/services/multiTaskManager/webide/multiTaskManager.js +1 -0
  273. package/dist/services/nativeModule/ci/nativeModule.js +1 -0
  274. package/dist/services/nativeModule/common/nativeModule.impl.js +1 -1
  275. package/dist/services/pluginFileReader/ci/pluginFileReader.js +1 -0
  276. package/dist/services/pluginFileReader/common/pluginFileReader.base.js +1 -0
  277. package/dist/services/pluginFileReader/common/pluginFileReader.js +1 -0
  278. package/dist/services/pluginFileReader/electron/pluginFileReader.js +1 -0
  279. package/dist/services/pluginFileReader/webide/pluginFileReader.js +1 -0
  280. package/dist/services/root/{node → ci}/root.js +1 -1
  281. package/dist/services/root/ci/rootService.js +1 -0
  282. package/dist/services/root/electron/root.js +1 -1
  283. package/dist/services/root/electron/rootService.js +1 -1
  284. package/dist/services/root/nw/root.js +1 -1
  285. package/dist/services/root/webide/root.js +1 -0
  286. package/dist/services/root/webide/rootService.js +1 -0
  287. package/dist/utils/asyncTask/index.js +1 -1
  288. package/dist/utils/babel_helper.js +1 -1
  289. package/dist/utils/babel_plugin_worklet.js +1 -1
  290. package/dist/utils/colorutils.js +1 -0
  291. package/dist/utils/common.js +1 -1
  292. package/dist/utils/cosUpload.js +1 -1
  293. package/dist/utils/cp.js +1 -1
  294. package/dist/utils/customError.js +1 -1
  295. package/dist/utils/debug.js +1 -1
  296. package/dist/utils/download.js +1 -1
  297. package/dist/utils/expression.js +1 -1
  298. package/dist/utils/fsagent.js +1 -1
  299. package/dist/utils/genTempFile.js +1 -1
  300. package/dist/utils/generateIpa.js +1 -1
  301. package/dist/utils/glob.js +1 -1
  302. package/dist/utils/hackrequire/wxvpkgreader.js +1 -1
  303. package/dist/utils/helper_util.js +1 -1
  304. package/dist/utils/jsonlint.js +1 -1
  305. package/dist/utils/locales/fomatable_string.js +1 -1
  306. package/dist/utils/locales/locales.js +1 -1
  307. package/dist/utils/log.js +1 -1
  308. package/dist/utils/messageHub.js +1 -1
  309. package/dist/utils/miniAppI18N.js +1 -1
  310. package/dist/utils/miniapp-builder.js +1 -1
  311. package/dist/utils/miniappJson.js +1 -1
  312. package/dist/utils/officialDonutPlugin.js +1 -1
  313. package/dist/utils/packOptionsHelper.js +1 -1
  314. package/dist/utils/processBootstrap.js +1 -0
  315. package/dist/utils/progressRecorder.js +1 -1
  316. package/dist/utils/request.js +1 -1
  317. package/dist/utils/singletontask.js +1 -1
  318. package/dist/utils/subprocess/entryProcess.js +1 -1
  319. package/dist/utils/subprocess/processManager.js +1 -1
  320. package/dist/utils/subprocess/processService.js +1 -1
  321. package/dist/utils/swc_helper.js +1 -1
  322. package/dist/utils/taskmanager.js +1 -1
  323. package/dist/utils/tools.js +1 -1
  324. package/dist/utils/usbProcess.js +1 -1
  325. package/dist/utils/waitable.js +1 -1
  326. package/dist/utils/web/common.js +1 -1
  327. package/dist/utils/white_ext_list.js +1 -1
  328. package/dist/utils/wxapkg/pack.js +1 -1
  329. package/dist/utils/wxvpkgreader/wxvpkg/reader/version0.js +1 -1
  330. package/dist/utils/wxvpkgreader/wxvpkg/reader/version10.js +1 -1
  331. package/dist/utils/wxvpkgreader/wxvpkg/unpack/version0.js +1 -1
  332. package/dist/utils/wxvpkgreader/wxvpkg/unpack/version10.js +1 -1
  333. package/dist/utils/wxvpkgreader/wxvpkgreader.js +1 -1
  334. package/dist/utils/zip.js +1 -1
  335. package/package.json +62 -3
  336. package/dist/@types/services/root/node/rootService.d.ts +0 -0
  337. package/dist/modules/fullcompiler/trans/wcc/build/darwin_arm64/wcc.node +0 -0
  338. package/dist/modules/fullcompiler/trans/wcc/build/darwin_arm64/wcsc.node +0 -0
  339. package/dist/modules/fullcompiler/trans/wcc/build/darwin_x64/wcc.node +0 -0
  340. package/dist/modules/fullcompiler/trans/wcc/build/darwin_x64/wcsc.node +0 -0
  341. package/dist/modules/fullcompiler/trans/wcc/build/node_16.1.0_darwin_arm64_release/wcc.node +0 -0
  342. package/dist/modules/fullcompiler/trans/wcc/build/node_16.1.0_darwin_arm64_release/wcsc.node +0 -0
  343. package/dist/modules/fullcompiler/trans/wcc/build/node_16.1.0_darwin_x64_release/wcc.node +0 -0
  344. package/dist/modules/fullcompiler/trans/wcc/build/node_16.1.0_darwin_x64_release/wcsc.node +0 -0
  345. package/dist/modules/fullcompiler/trans/wcc/build/win32_ia32/wcc.node +0 -0
  346. package/dist/modules/fullcompiler/trans/wcc/build/win32_ia32/wcsc.node +0 -0
  347. package/dist/modules/fullcompiler/trans/wcc/build/win32_x64/wcc.node +0 -0
  348. package/dist/modules/fullcompiler/trans/wcc/build/win32_x64/wcsc.node +0 -0
  349. package/dist/modules/fullcompiler/trans/wcc/lib/addonVersion.js +0 -19
  350. package/dist/modules/fullcompiler/trans/wcc/lib/index.js +0 -4
  351. package/dist/modules/fullcompiler/trans/wcc/lib/util.js +0 -1134
  352. package/dist/modules/fullcompiler/trans/wcc/lib/wcc.js +0 -94
  353. package/dist/modules/fullcompiler/trans/wcc/lib/wcsc.js +0 -93
  354. package/dist/services/root/node/rootService.js +0 -1
  355. /package/dist/@types/services/root/{node → ci}/root.d.ts +0 -0
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.buildApk=buildApk,exports.generateCloudAndroidApk=generateCloudAndroidApk;const tslib_1=require("tslib"),request_1=require("../utils/request"),miniAppI18N_1=tslib_1.__importDefault(require("../utils/miniAppI18N")),checkBuildArgument_1=require("./miniapp/checkBuildArgument"),miniappJson_1=require("../utils/miniappJson"),tools_1=require("../utils/tools"),androidCloudBuild_1=require("./miniapp/androidCloudBuild"),log=tslib_1.__importStar(require("../utils/log")),tools_2=require("./utils/tools"),report_1=require("../utils/report");async function buildApk(e){const r=Date.now();let i;try{if(!e.project)throw new Error("缺少参数 project");const{project:r}=e;r.targetPlatform="mini-android",await r.miniappAttr();const{buildArchiveOpts:o,cloudBuildInfo:t}=(0,checkBuildArgument_1.transformAndroidBuildArgument)(e);e.disableCache&&((0,tools_2.clearAndroidCacheDir)(),log.info("清除 Apk 构建缓存成功")),i=await generateCloudAndroidApk(e,o,t)}catch(e){log.error("构建 Apk 失败:",e.message),i={success:!1,errmsg:"构建 Apk 失败:"+e.message}}const o=Date.now()-r;return e.project&&(0,report_1.reportAction)("buildApk",i.success?0:-1,i.errmsg,o,e.project),i}async function generateCloudAndroidApk(e,r,i){var o;const{project:t,output:s}=e;let n=!1,d="failed";try{miniAppI18N_1.default.createI18NInfo(t.projectPath);const{useCloudUpload:u,useAab:a,packageVersion:c,packageDesc:l,certificateInfo:p,uploadAppInfo:A}=i,g=Object.assign({},r);u?(g.useCloudSync=!0,g.version=c,g.desc=l):(g.version=A?A.userVersion:"",g.desc=A?A.userDesc:"");const k=(0,miniappJson_1.tryGetAndroidMiniappJson)(t.projectPath);await checkAndroidSdkVersion(k);const m=Object.assign(Object.assign({},e),{resourceDir:(0,tools_2.getMiniappCacheDir)(),robot:e.robot||1});let _="";_=a?await(0,androidCloudBuild_1.getAndroidAabBuild)(m).build(g,s,p.androidCertificate):await(0,androidCloudBuild_1.getAndroidApkBuild)(m).build(g,s,p.androidCertificate),(null===(o=k.channel)||void 0===o?void 0:o.value)&&(_=`${_.slice(0,-4)}-${k.channel.value}${a?".aab":".Apk"}`),log.success("构建 Apk 成功"),n=!0,d="success! output file at "+_}catch(e){n=!1,d=e.message,log.error("构建 Apk 失败:",e.message)}return{success:n,errmsg:d}}async function checkAndroidSdkVersion(e){if(e.sdkVersion&&(null==e?void 0:e.usePluginSdk)){const r="http://dldir1.qq.com/WechatWebDev/donut/android-extended-sdk-version.json";let{body:i}=await(0,request_1.request)({url:r,method:"get"});try{i=JSON.parse(i)}catch(e){}const o=i;if(o){Object.keys(e.usePluginSdk).forEach(r=>{const i=e.usePluginSdk[r];if(!i)return;const t=o[r],s=t?t[i]:void 0;if(!s){const e=`当前使用的 ${r} 扩展SDK版本(${i})未包含在官方支持的版本列表内,请检查`;return void log.warn(e)}const n=s.minMainSdk;if((0,tools_1.compareSemVer)(e.sdkVersion,n)<0)throw new Error("存在主模块 SDK 版本不满足拓展 SDK 使用最小版本情况,请检查")})}}}
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.buildApk=buildApk,exports.generateCloudAndroidApk=generateCloudAndroidApk;const tslib_1=require("tslib"),request_1=require("../utils/request"),miniAppI18N_1=tslib_1.__importDefault(require("../utils/miniAppI18N")),checkBuildArgument_1=require("./miniapp/checkBuildArgument"),miniappJson_1=require("../utils/miniappJson"),tools_1=require("../utils/tools"),androidCloudBuild_1=require("./miniapp/androidCloudBuild"),log=tslib_1.__importStar(require("../utils/log")),tools_2=require("./utils/tools"),report_1=require("../utils/report");async function buildApk(e){const r=Date.now();let o;try{if(!e.project)throw new Error("缺少参数 project");const{project:r}=e;r.targetPlatform="mini-android",await r.miniappAttr();const{buildArchiveOpts:i,cloudBuildInfo:t}=(0,checkBuildArgument_1.transformAndroidBuildArgument)(e);e.disableCache&&((0,tools_2.clearAndroidCacheDir)(),log.info("清除 Apk 构建缓存成功")),o=await generateCloudAndroidApk(e,i,t)}catch(e){log.error("构建 Apk 失败:",e.message),o={success:!1,errmsg:`构建 Apk 失败:${e.message}`}}const i=Date.now()-r;return e.project&&(0,report_1.reportAction)("buildApk",o.success?0:-1,o.errmsg,i,e.project),o}async function generateCloudAndroidApk(e,r,o){var i;const{project:t,output:s}=e;let n=!1,d="failed";try{miniAppI18N_1.default.createI18NInfo(t.projectPath);const{useCloudUpload:u,useAab:c,packageVersion:a,packageDesc:l,certificateInfo:p,uploadAppInfo:A}=o,g=Object.assign({},r);u?(g.useCloudSync=!0,g.version=a,g.desc=l):(g.version=A?A.userVersion:"",g.desc=A?A.userDesc:"");const k=(0,miniappJson_1.tryGetAndroidMiniappJson)(t.projectPath);await checkAndroidSdkVersion(k);const m=Object.assign(Object.assign({},e),{resourceDir:(0,tools_2.getMiniappCacheDir)(),robot:e.robot||1});let _="";_=c?await(0,androidCloudBuild_1.getAndroidAabBuild)(m).build(g,s,p.androidCertificate):await(0,androidCloudBuild_1.getAndroidApkBuild)(m).build(g,s,p.androidCertificate),(null===(i=k.channel)||void 0===i?void 0:i.value)&&(_=`${_.slice(0,-4)}-${k.channel.value}${c?".aab":".Apk"}`),log.success("构建 Apk 成功"),n=!0,d=`success! output file at ${_}`}catch(e){n=!1,d=e.message,log.error("构建 Apk 失败:",e.message)}return{success:n,errmsg:d}}async function checkAndroidSdkVersion(e){if(e.sdkVersion&&(null==e?void 0:e.usePluginSdk)){const r="https://devtools.wxqcloud.qq.com.cn/WechatWebDev/donut/android-extended-sdk-version.json";let{body:o}=await(0,request_1.request)({url:r,method:"get"});try{o=JSON.parse(o)}catch(e){}const i=o;if(i){Object.keys(e.usePluginSdk).forEach((r=>{const o=e.usePluginSdk[r];if(!o)return;const t=i[r],s=t?t[o]:void 0;if(!s){const e=`当前使用的 ${r} 扩展SDK版本(${o})未包含在官方支持的版本列表内,请检查`;return void log.warn(e)}const n=s.minMainSdk;if((0,tools_1.compareSemVer)(e.sdkVersion,n)<0)throw new Error("存在主模块 SDK 版本不满足拓展 SDK 使用最小版本情况,请检查")}))}}}
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.buildIpa=buildIpa;const tslib_1=require("tslib"),log=tslib_1.__importStar(require("../utils/log")),checkBuildArgument_1=require("./miniapp/checkBuildArgument"),miniAppI18N_1=tslib_1.__importDefault(require("../utils/miniAppI18N")),miniappJson_1=require("../utils/miniappJson"),sdkManager_1=require("./miniapp/sdkManager"),tools_1=require("./utils/tools"),iosLocalBuild_1=require("./miniapp/iosLocalBuild"),miniappPlugin_1=require("./miniapp/miniappPlugin"),iosTheme_1=require("./miniapp/iosTheme"),report_1=require("../utils/report"),iosCloudBuild_1=require("./miniapp/iosCloudBuild");async function buildIpa(i){var e;const t=Date.now();let o;try{if(!i.project)throw new Error("缺少参数 project");const{project:e}=i;e.targetPlatform="mini-ios",await e.miniappAttr();const{buildArchiveOpts:t,cloudBuildInfo:a}=(0,checkBuildArgument_1.transformIOSBuildArgument)(i);i.disableCache&&((0,tools_1.clearIOSCacheDir)(),log.info("清除 Ipa 构建缓存成功")),o=await generateCloudIOSIPA(i,t,a)}catch(i){log.error("构建 Ipa 失败:",i.message),o={success:!1,errmsg:"构建 Ipa 失败:"+i.message}}const a=Date.now()-t;return i.project&&(0,report_1.reportAction)("buildIpa",o.success?0:-1,`${o.errmsg}。 isRemoteBuild: ${null!==(e=i.isRemoteBuild)&&void 0!==e&&e}`,a,i.project),o}async function generateCloudIOSIPA(i,e,t){var o;const{project:a,output:r}=i;let s=!1,n="failed";try{miniAppI18N_1.default.createI18NInfo(a.projectPath);const{useCloudUpload:p,packageVersion:u,packageDesc:l,useRemoteCloudBuild:c,uploadAppInfo:d}=t;(0,miniappJson_1.autoCompleteIOSPrivacyDesc)(a.projectPath)||log.info("默认隐私信息访问许可描述添加成功");const m=(0,miniappJson_1.tryGetIOSMiniappJson)(a.projectPath),g=m.sdkVersion,{demoIpaPath:I,sdkPath:_}=await(0,sdkManager_1.generateMiniappIOSResources)(a,g,"arm64",!!m.enableIpad);p?(e.useCloudSync=!0,e.version=u,e.desc=l):(e.version=d?d.userVersion:"",e.desc=d?d.userDesc:"");const h=Object.assign(Object.assign({},i),{resourceDir:(0,tools_1.getMiniappCacheDir)(),robot:i.robot||1}),P=(0,miniappPlugin_1.getMiniappPluginManager)(h);await P.downloadPlugin(miniappPlugin_1.OS_TYPE_ENUM.IOS);const f=await P.getPluginDirList(miniappPlugin_1.OS_TYPE_ENUM.IOS),b=await(0,iosTheme_1.getIOSTheme)(a,null===(o=null==m?void 0:m.splashscreen)||void 0===o?void 0:o.customImage),O=await a.miniappAttr()||{},B=(0,tools_1.getMiniappCacheDir)(),C={buildType:"CLOUD",certificateInfo:t.certificateInfo,demoIpaPath:I,sdkPath:_,miniappCacheDirPath:B,bindingInfo:O,output:r,pluginDirList:f,theme:b,i18nInfo:miniAppI18N_1.default.i18nInfo,projectPath:a.projectPath};if(c){const i=(0,iosCloudBuild_1.getIOSCloudBuild)(h);await i.build(e,C,r)}else{C.CILocalBuild=!0;const i=(0,iosLocalBuild_1.getIOSLocalBuild)(h);await i.build(e,C,I)}log.success("构建 Ipa 成功"),s=!0,n="success! output file at "+r}catch(i){s=!1,n=i.message||i,log.error("构建 Ipa 失败:",n)}return{success:s,errmsg:n}}
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.buildIpa=buildIpa;const tslib_1=require("tslib"),log=tslib_1.__importStar(require("../utils/log")),checkBuildArgument_1=require("./miniapp/checkBuildArgument"),miniAppI18N_1=tslib_1.__importDefault(require("../utils/miniAppI18N")),miniappJson_1=require("../utils/miniappJson"),sdkManager_1=require("./miniapp/sdkManager"),tools_1=require("./utils/tools"),iosLocalBuild_1=require("./miniapp/iosLocalBuild"),miniappPlugin_1=require("./miniapp/miniappPlugin"),iosTheme_1=require("./miniapp/iosTheme"),report_1=require("../utils/report"),iosCloudBuild_1=require("./miniapp/iosCloudBuild");async function buildIpa(i){var e;const t=Date.now();let o;try{if(!i.project)throw new Error("缺少参数 project");const{project:e}=i;e.targetPlatform="mini-ios",await e.miniappAttr();const{buildArchiveOpts:t,cloudBuildInfo:a}=(0,checkBuildArgument_1.transformIOSBuildArgument)(i);i.disableCache&&((0,tools_1.clearIOSCacheDir)(),log.info("清除 Ipa 构建缓存成功")),o=await generateCloudIOSIPA(i,t,a)}catch(i){log.error("构建 Ipa 失败:",i.message),o={success:!1,errmsg:`构建 Ipa 失败:${i.message}`}}const a=Date.now()-t;return i.project&&(0,report_1.reportAction)("buildIpa",o.success?0:-1,`${o.errmsg}。 isRemoteBuild: ${null!==(e=i.isRemoteBuild)&&void 0!==e&&e}`,a,i.project),o}async function generateCloudIOSIPA(i,e,t){var o;const{project:a,output:r}=i;let s=!1,n="failed";try{miniAppI18N_1.default.createI18NInfo(a.projectPath);const{useCloudUpload:p,packageVersion:u,packageDesc:l,useRemoteCloudBuild:c,uploadAppInfo:d}=t;(0,miniappJson_1.autoCompleteIOSPrivacyDesc)(a.projectPath)||log.info("默认隐私信息访问许可描述添加成功");const m=(0,miniappJson_1.tryGetIOSMiniappJson)(a.projectPath),g=m.sdkVersion,{demoIpaPath:I,sdkPath:_}=await(0,sdkManager_1.generateMiniappIOSResources)(a,g,"arm64",!!m.enableIpad);p?(e.useCloudSync=!0,e.version=u,e.desc=l):(e.version=d?d.userVersion:"",e.desc=d?d.userDesc:"");const h=Object.assign(Object.assign({},i),{resourceDir:(0,tools_1.getMiniappCacheDir)(),robot:i.robot||1}),P=(0,miniappPlugin_1.getMiniappPluginManager)(h);await P.downloadPlugin(miniappPlugin_1.OS_TYPE_ENUM.IOS);const f=await P.getPluginDirList(miniappPlugin_1.OS_TYPE_ENUM.IOS),b=await(0,iosTheme_1.getIOSTheme)(a,null===(o=null==m?void 0:m.splashscreen)||void 0===o?void 0:o.customImage),O=await a.miniappAttr()||{},B=(0,tools_1.getMiniappCacheDir)(),C={buildType:"CLOUD",certificateInfo:t.certificateInfo,demoIpaPath:I,sdkPath:_,miniappCacheDirPath:B,bindingInfo:O,output:r,pluginDirList:f,theme:b,i18nInfo:miniAppI18N_1.default.i18nInfo,projectPath:a.projectPath};if(c){const i=(0,iosCloudBuild_1.getIOSCloudBuild)(h);await i.build(e,C,r)}else{C.CILocalBuild=!0;const i=(0,iosLocalBuild_1.getIOSLocalBuild)(h);await i.build(e,C,I)}log.success("构建 Ipa 成功"),s=!0,n=`success! output file at ${r}`}catch(i){s=!1,n=i.message||i,log.error("构建 Ipa 失败:",n)}return{success:s,errmsg:n}}
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.transCompileType=transCompileType,exports.checkCodeQuality=checkCodeQuality;const tslib_1=require("tslib"),projectconfig_1=require("../modules/corecompiler/original/json/projectconfig"),code_analyse_1=require("../common/code-analyse"),path_1=tslib_1.__importDefault(require("path")),qualitycheckoption_1=tslib_1.__importDefault(require("./utils/qualitycheckoption")),locales_1=tslib_1.__importDefault(require("../utils/locales/locales")),fomatable_string_1=require("../utils/locales/fomatable_string"),codeDenpendencyQualityChecker_1=require("./utils/codeDenpendencyQualityChecker");function transCompileType(e){if("miniProgram"===e.type)return"miniprogram";if("miniProgramPlugin"===e.type)return"plugin";if("miniGame"===e.type)return"game";if("miniGamePlugin"===e.type)return"gamePlugin";throw new Error("unknown compile type "+e.type)}async function checkCodeQuality(e){const t=transCompileType(e);if("gamePlugin"===t)throw new Error("gamePlugin is not support yet!");if("game"===t)throw new Error("game is not support yet!");if("plugin"===t)throw new Error("plugin is not support yet!");const s=new QualityChecker;return await s.check({project:e}),s.getResult()}const formatDesc=(e,...t)=>{const s=locales_1.default.getLocale();e.text="en"===s?new fomatable_string_1.FormatableString(e.descEn||"").format(...t):new fomatable_string_1.FormatableString(e.desc||"").format(...t)};class QualityChecker{constructor(){this.result=[],this._checkConfig=qualitycheckoption_1.default,this.checkerHandlerMap=new Map,this._codeDepsCheckerPromise=null,this.checkJSCompressIsOpen=async(e,t)=>{var s;let c=!1;formatDesc(e);return c=!!(null===(s=(await(0,projectconfig_1.getProjectConfigJSON)(t.project)).setting)||void 0===s?void 0:s.minified),c},this.checkWXMLCompressIsOpen=async(e,t)=>{var s;let c=!1;formatDesc(e);return c=!!(null===(s=(await(0,projectconfig_1.getProjectConfigJSON)(t.project)).setting)||void 0===s?void 0:s.minifyWXML),c},this.checkWXSSCompressIsOpen=async(e,t)=>{var s;let c=!1;formatDesc(e);return c=!!(null===(s=(await(0,projectconfig_1.getProjectConfigJSON)(t.project)).setting)||void 0===s?void 0:s.minifyWXSS),c},this.checkLazyCodeLoadingIsOpen=async(e,t)=>{let s=!1;formatDesc(e);const c=await(0,projectconfig_1.getProjectConfigJSON)(t.project),{miniprogramRoot:i=""}=c,n=await t.project.getFile(i,"app.json");return s=!!JSON.parse(n.toString("utf-8")).lazyCodeLoading,s},this.checkImageAndAudioSizeLimit=async(e,t)=>{const s=await this.getCodeDepsChecker(t),c=e.limit||200,i=s.caculateResourceFileSize(this._checkConfig.regList.IMAGE_AND_AUDIO_LIMIT)/1024<c;return formatDesc(e,""+c),i},this.checkPackageSizeLimit=async(e,t)=>{const s=(await this.getCodeDepsChecker(t)).caculatePackageSize(),c=e.limit||1.5,i=1024*c;let n=!0;formatDesc(e,""+c);for(const e of Object.values(s))e/1024>i&&(n=!1);return e.detail=s,n},this.getCodeDepsChecker=async e=>{const t=e.project;return this._codeDepsCheckerPromise||(this._codeDepsCheckerPromise=new Promise((s,c)=>{let i=(0,projectconfig_1.getProjectConfigJSON)(t).miniprogramRoot;i=i?path_1.default.posix.join(t.projectPath,i):t.projectPath;const n=new code_analyse_1.Analyzer({root:i,type:"miniprogram",plugins:[]});n.analyse().then(()=>{s(new codeDenpendencyQualityChecker_1.CodeDenpendencyQualityChecker(e.project,n))}).catch(e=>{c(e)})})),this._codeDepsCheckerPromise},this.checkJSDepsOnlyUsedByOtherSubPkg=async(e,t)=>{const s=(await this.getCodeDepsChecker(t)).checkOnlyUsedByOtherPackagesJs();e.detail=s,formatDesc(e,":");let c=!0;return s.size>0&&s.files.length>0&&(c=!1),c},this.checkComponentDepsOnlyUsedByOtherSubPkg=async(e,t)=>{const s=(await this.getCodeDepsChecker(t)).checkMainPackageUnusedComponents();return e.detail=s,formatDesc(e,":"),!0},this.checkUnusedPlugins=async(e,t)=>{const s=await this.getCodeDepsChecker(t),c=await s.checkUnusedPlugins();e.detail=c;let i=!0;return formatDesc(e,""+c.join(" , ")),c.length>0&&(i=!1),i},this.checkUnusedComponents=async(e,t)=>{const s=await this.getCodeDepsChecker(t),c=await s.checkUnusedComponents();e.detail=c,formatDesc(e,":");let i=!0;return c.length>0&&(i=!1),i},this.checkUnusedCodes=async(e,t)=>{var s,c;const i=(await this.getCodeDepsChecker(t)).checkUnusedCodeFiles();e.detail=i,formatDesc(e,i.length);let n=!0;i.length>0&&(n=!1);const r=await(0,projectconfig_1.getProjectConfigJSON)(t.project);return!(!1===(null===(s=r.setting)||void 0===s?void 0:s.ignoreDevUnusedFiles)||!1===(null===(c=r.setting)||void 0===c?void 0:c.ignoreUploadUnusedFiles))||n},this.checkerHandlerMap.set("JS_COMPRESS_OPEN",this.checkJSCompressIsOpen),this.checkerHandlerMap.set("WXML_COMPRESS_OPEN",this.checkWXMLCompressIsOpen),this.checkerHandlerMap.set("WXSS_COMPRESS_OPEN",this.checkWXSSCompressIsOpen),this.checkerHandlerMap.set("LAZYCODE_LOADING_OPEN",this.checkLazyCodeLoadingIsOpen),this.checkerHandlerMap.set("IMAGE_AND_AUDIO_LIMIT",this.checkImageAndAudioSizeLimit),this.checkerHandlerMap.set("PACKAGE_SIZE_LIMIT",this.checkPackageSizeLimit),this.checkerHandlerMap.set("CONTAINS_OTHER_PKG_JS",this.checkJSDepsOnlyUsedByOtherSubPkg),this.checkerHandlerMap.set("CONTAINS_OTHER_PKG_COMPONENTS",this.checkComponentDepsOnlyUsedByOtherSubPkg),this.checkerHandlerMap.set("CONTAINS_UNUSED_COMPONENTS",this.checkUnusedComponents),this.checkerHandlerMap.set("CONTAINS_UNUSED_PLUGINS",this.checkUnusedPlugins),this.checkerHandlerMap.set("CONTAINS_UNUSED_CODES",this.checkUnusedCodes)}async check(e,t){t||(t=[...this.checkerHandlerMap.keys()]);const s=await this.getCheckList(t);return await this.checkList(s,e)}async getCheckList(e){var t;const s=new Set(e);try{return((null===(t=this._checkConfig)||void 0===t?void 0:t.checkList)||[]).filter(e=>s.has(e.name||"")).filter(e=>e.enabled)}catch(e){return console.log(e),[]}}async checkList(e,t){if(!(null==e?void 0:e.length))return[];const s=[];e.forEach(e=>{s.push(this.checkItem(e,t))});const c=await Promise.all(s);return this.result=c.filter(e=>null!==e).map(e=>{const{name:t,success:s,text:c,docURL:i,detail:n}=e;return{name:t,success:s,text:c,docURL:i,detail:n}}),this._codeDepsCheckerPromise=null,this.result}async checkItem(e,t){const s=e.name;if(s&&this.checkerHandlerMap.has(s)){const c=this.checkerHandlerMap.get(s);let i=!1;try{i=await c(e,t)}catch(e){i=!0,console.error(e)}return Object.assign(Object.assign({},e),{success:i})}return null}getResult(){return this.result}}
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.transCompileType=transCompileType,exports.checkCodeQuality=checkCodeQuality;const tslib_1=require("tslib"),projectconfig_1=require("../modules/corecompiler/original/json/projectconfig"),code_analyse_1=require("../common/code-analyse"),path_1=tslib_1.__importDefault(require("path")),qualitycheckoption_1=tslib_1.__importDefault(require("./utils/qualitycheckoption")),locales_1=tslib_1.__importDefault(require("../utils/locales/locales")),fomatable_string_1=require("../utils/locales/fomatable_string"),codeDenpendencyQualityChecker_1=require("./utils/codeDenpendencyQualityChecker");function transCompileType(e){if("miniProgram"===e.type)return"miniprogram";if("miniProgramPlugin"===e.type)return"plugin";if("miniGame"===e.type)return"game";if("miniGamePlugin"===e.type)return"gamePlugin";throw new Error(`unknown compile type ${e.type}`)}async function checkCodeQuality(e){const t=transCompileType(e);if("gamePlugin"===t)throw new Error("gamePlugin is not support yet!");if("game"===t)throw new Error("game is not support yet!");if("plugin"===t)throw new Error("plugin is not support yet!");const s=new QualityChecker;return await s.check({project:e}),s.getResult()}const formatDesc=(e,...t)=>{const s=locales_1.default.getLocale();e.text="en"===s?new fomatable_string_1.FormatableString(e.descEn||"").format(...t):new fomatable_string_1.FormatableString(e.desc||"").format(...t)};class QualityChecker{constructor(){this.result=[],this._checkConfig=qualitycheckoption_1.default,this.checkerHandlerMap=new Map,this._codeDepsCheckerPromise=null,this.checkJSCompressIsOpen=async(e,t)=>{var s;let c=!1;formatDesc(e);return c=!!(null===(s=(await(0,projectconfig_1.getProjectConfigJSON)(t.project)).setting)||void 0===s?void 0:s.minified),c},this.checkWXMLCompressIsOpen=async(e,t)=>{var s;let c=!1;formatDesc(e);return c=!!(null===(s=(await(0,projectconfig_1.getProjectConfigJSON)(t.project)).setting)||void 0===s?void 0:s.minifyWXML),c},this.checkWXSSCompressIsOpen=async(e,t)=>{var s;let c=!1;formatDesc(e);return c=!!(null===(s=(await(0,projectconfig_1.getProjectConfigJSON)(t.project)).setting)||void 0===s?void 0:s.minifyWXSS),c},this.checkLazyCodeLoadingIsOpen=async(e,t)=>{let s=!1;formatDesc(e);const c=await(0,projectconfig_1.getProjectConfigJSON)(t.project),{miniprogramRoot:i=""}=c,n=await t.project.getFile(i,"app.json");return s=!!JSON.parse(n.toString("utf-8")).lazyCodeLoading,s},this.checkImageAndAudioSizeLimit=async(e,t)=>{const s=await this.getCodeDepsChecker(t),c=e.limit||200,i=s.caculateResourceFileSize(this._checkConfig.regList.IMAGE_AND_AUDIO_LIMIT)/1024<c;return formatDesc(e,`${c}`),i},this.checkPackageSizeLimit=async(e,t)=>{const s=(await this.getCodeDepsChecker(t)).caculatePackageSize(),c=e.limit||1.5,i=1024*c;let n=!0;formatDesc(e,`${c}`);for(const e of Object.values(s))e/1024>i&&(n=!1);return e.detail=s,n},this.getCodeDepsChecker=async e=>{const t=e.project;return this._codeDepsCheckerPromise||(this._codeDepsCheckerPromise=new Promise(((s,c)=>{let i=(0,projectconfig_1.getProjectConfigJSON)(t).miniprogramRoot;i=i?path_1.default.posix.join(t.projectPath,i):t.projectPath;const n=new code_analyse_1.Analyzer({root:i,type:"miniprogram",plugins:[]});n.analyse().then((()=>{s(new codeDenpendencyQualityChecker_1.CodeDenpendencyQualityChecker(e.project,n))})).catch((e=>{c(e)}))}))),this._codeDepsCheckerPromise},this.checkJSDepsOnlyUsedByOtherSubPkg=async(e,t)=>{const s=(await this.getCodeDepsChecker(t)).checkOnlyUsedByOtherPackagesJs();e.detail=s,formatDesc(e,":");let c=!0;return s.size>0&&s.files.length>0&&(c=!1),c},this.checkComponentDepsOnlyUsedByOtherSubPkg=async(e,t)=>{const s=(await this.getCodeDepsChecker(t)).checkMainPackageUnusedComponents();return e.detail=s,formatDesc(e,":"),!0},this.checkUnusedPlugins=async(e,t)=>{const s=await this.getCodeDepsChecker(t),c=await s.checkUnusedPlugins();e.detail=c;let i=!0;return formatDesc(e,`${c.join(" , ")}`),c.length>0&&(i=!1),i},this.checkUnusedComponents=async(e,t)=>{const s=await this.getCodeDepsChecker(t),c=await s.checkUnusedComponents();e.detail=c,formatDesc(e,":");let i=!0;return c.length>0&&(i=!1),i},this.checkUnusedCodes=async(e,t)=>{var s,c;const i=(await this.getCodeDepsChecker(t)).checkUnusedCodeFiles();e.detail=i,formatDesc(e,i.length);let n=!0;i.length>0&&(n=!1);const r=await(0,projectconfig_1.getProjectConfigJSON)(t.project);return!(!1===(null===(s=r.setting)||void 0===s?void 0:s.ignoreDevUnusedFiles)||!1===(null===(c=r.setting)||void 0===c?void 0:c.ignoreUploadUnusedFiles))||n},this.checkerHandlerMap.set("JS_COMPRESS_OPEN",this.checkJSCompressIsOpen),this.checkerHandlerMap.set("WXML_COMPRESS_OPEN",this.checkWXMLCompressIsOpen),this.checkerHandlerMap.set("WXSS_COMPRESS_OPEN",this.checkWXSSCompressIsOpen),this.checkerHandlerMap.set("LAZYCODE_LOADING_OPEN",this.checkLazyCodeLoadingIsOpen),this.checkerHandlerMap.set("IMAGE_AND_AUDIO_LIMIT",this.checkImageAndAudioSizeLimit),this.checkerHandlerMap.set("PACKAGE_SIZE_LIMIT",this.checkPackageSizeLimit),this.checkerHandlerMap.set("CONTAINS_OTHER_PKG_JS",this.checkJSDepsOnlyUsedByOtherSubPkg),this.checkerHandlerMap.set("CONTAINS_OTHER_PKG_COMPONENTS",this.checkComponentDepsOnlyUsedByOtherSubPkg),this.checkerHandlerMap.set("CONTAINS_UNUSED_COMPONENTS",this.checkUnusedComponents),this.checkerHandlerMap.set("CONTAINS_UNUSED_PLUGINS",this.checkUnusedPlugins),this.checkerHandlerMap.set("CONTAINS_UNUSED_CODES",this.checkUnusedCodes)}async check(e,t){t||(t=[...this.checkerHandlerMap.keys()]);const s=await this.getCheckList(t);return await this.checkList(s,e)}async getCheckList(e){var t;const s=new Set(e);try{return((null===(t=this._checkConfig)||void 0===t?void 0:t.checkList)||[]).filter((e=>s.has(e.name||""))).filter((e=>e.enabled))}catch(e){return console.log(e),[]}}async checkList(e,t){if(!(null==e?void 0:e.length))return[];const s=[];e.forEach((e=>{s.push(this.checkItem(e,t))}));const c=await Promise.all(s);return this.result=c.filter((e=>null!==e)).map((e=>{const{name:t,success:s,text:c,docURL:i,detail:n}=e;return{name:t,success:s,text:c,docURL:i,detail:n}})),this._codeDepsCheckerPromise=null,this.result}async checkItem(e,t){const s=e.name;if(s&&this.checkerHandlerMap.has(s)){const c=this.checkerHandlerMap.get(s);let i=!1;try{i=await c(e,t)}catch(e){i=!0,console.error(e)}return Object.assign(Object.assign({},e),{success:i})}return null}getResult(){return this.result}}
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.initCloudAPI=initCloudAPI,exports.get3rdCloudCodeSecret=get3rdCloudCodeSecret,exports.boundTransactRequest=boundTransactRequest;const tslib_1=require("tslib"),crypto_1=tslib_1.__importDefault(require("crypto")),request_1=tslib_1.__importDefault(require("request")),cloudAPI=tslib_1.__importStar(require("../../common/cloud-api/index")),request_2=require("../../utils/request"),sign_1=require("../../utils/sign"),jsonParse_1=require("../../utils/jsonParse"),urlConfig=tslib_1.__importStar(require("../../config/url.config"));function initCloudAPI(e){cloudAPI.setDefaultAppID(e),cloudAPI.setTransactType(cloudAPI.TransactType.IDE),cloudAPI.setRequest(transactRequest)}const SERVICE_CLOUD_URL={scf:"https://scf.tencentcloudapi.com",flexdb:"https://flexdb.tencentcloudapi.com",tcb:"https://tcb.tencentcloudapi.com"},DIRECT_CLOUD_API_SET=new Set(["UpdateFunctionCode","CreateFunction"]);async function transactRequest(e){var t;const r=e.project,o=await(0,sign_1.getSignature)(r.privateKey,r.appid),s=await r.getExtAppid();if(DIRECT_CLOUD_API_SET.has(e.identity.action||"")&&Boolean(SERVICE_CLOUD_URL[e.identity.service])){const{body:i}=await(0,request_2.request)({url:urlConfig.GET_CLOUD_API_SIGNATURE,method:"post",body:JSON.stringify({appid:r.appid,extAppid:s||void 0,signature:o,signReq:{action:e.identity.action,path:e.identity.path,service:e.identity.service,version:e.identity.version,region:e.identity.region,hashed_postdata:crypto_1.default.createHash("sha256").update(e.postdata).digest("hex")}}),headers:{"content-type":"application/json"}}),n=(0,jsonParse_1.jsonRespParse)(i,"cloudapi.getCloudAPISignedHeader");if(n.errCode)throw new Error(`getCloudAPISignedHeader failed, errCode: ${i.errCode}, errMsg: ${i.errMsg}`);const a=n.header;if(!a)throw new Error("empty header, recv cgi resp: "+i);const{resp:d}=await new Promise((t,r)=>{(0,request_1.default)({url:SERVICE_CLOUD_URL[e.identity.service],method:"post",body:e.postdata,headers:a.split("\n").map(e=>e.trim()).reduce((e,t)=>{const r=t.indexOf(":");return e[t.slice(0,r)]=t.slice(r+1),e},{})},(e,o)=>{e?r(e):t({resp:o})})});if(413===d.statusCode)throw new Error("Body too large");const c=d.body;if(!c)throw new Error("Empty body "+d);const p="string"==typeof c?JSON.parse(c):c;if(!p.Response||(null===(t=p.Response)||void 0===t?void 0:t.Error))throw new Error("TencentCloud API error: "+c);return c}const{resp:i,body:n}=await(0,request_2.request)({url:urlConfig.cloudAPIAgentURL,method:"post",body:JSON.stringify({appid:r.appid,extAppid:s||void 0,signature:o,agentReq:Object.assign({postdata:e.postdata,test:!1},e.identity)}),headers:Object.assign(Object.assign({},e.headers),{"content-type":"application/json"})});if(413===i.statusCode)throw new Error("Body too large");if(!n)throw new Error("Empty body "+i);const a="string"==typeof n?JSON.parse(n):n;if(a.errCode)throw new Error(`${a.errCode} ${a.errMsg}`);const d=a.data;if(!d||!d.base_resp||"0"!=d.base_resp.ret){if(80210===d.base_resp.ret)throw new Error("NO_CLOUD_MANAGE_PERMISSION_AUTHORIZED_TO_3RD_PLATFORM");throw new Error("Base resp abnormal, "+JSON.stringify(null==d?void 0:d.base_resp))}return d.content}async function get3rdCloudCodeSecret(e){const t=await e.attr();let r,o="",s={};try{r=await e.getFile(e.miniprogramRoot,"ext.json"),s=JSON.parse(r.toString("utf-8"))}catch(e){}if(s&&s.extEnable&&(o=s.extAppid||""),(null==t?void 0:t.platform)&&o)try{const t=await(0,sign_1.getSignature)(e.privateKey,e.appid),{body:r}=await(0,request_2.request)({url:urlConfig.get3rdCloudCodeSecret,method:"post",headers:{"content-type":"application/json"},body:JSON.stringify({appid:e.appid,extAppid:o,signature:t})}),s=(0,jsonParse_1.jsonRespParse)(r);if(0===s.errCode)return s.codeSecret;throw new Error("get 3rd cloud codesecret invalid resp "+JSON.stringify(r))}catch(e){throw new Error("get 3rd cloud codesecret error "+e)}}function boundTransactRequest(e){return t=>transactRequest(Object.assign(Object.assign({},t),{project:e}))}
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.initCloudAPI=initCloudAPI,exports.get3rdCloudCodeSecret=get3rdCloudCodeSecret,exports.boundTransactRequest=boundTransactRequest;const tslib_1=require("tslib"),crypto_1=tslib_1.__importDefault(require("crypto")),request_1=tslib_1.__importDefault(require("request")),cloudAPI=tslib_1.__importStar(require("../../common/cloud-api/index")),request_2=require("../../utils/request"),sign_1=require("../../utils/sign"),jsonParse_1=require("../../utils/jsonParse"),urlConfig=tslib_1.__importStar(require("../../config/url.config"));function initCloudAPI(e){cloudAPI.setDefaultAppID(e),cloudAPI.setTransactType(cloudAPI.TransactType.IDE),cloudAPI.setRequest(transactRequest)}const SERVICE_CLOUD_URL={scf:"https://scf.tencentcloudapi.com",flexdb:"https://flexdb.tencentcloudapi.com",tcb:"https://tcb.tencentcloudapi.com"},DIRECT_CLOUD_API_SET=new Set(["UpdateFunctionCode","CreateFunction"]);async function transactRequest(e){var t;const r=e.project,o=await(0,sign_1.getSignature)(r.privateKey,r.appid),s=await r.getExtAppid();if(DIRECT_CLOUD_API_SET.has(e.identity.action||"")&&Boolean(SERVICE_CLOUD_URL[e.identity.service])){const{body:i}=await(0,request_2.request)({url:urlConfig.GET_CLOUD_API_SIGNATURE,method:"post",body:JSON.stringify({appid:r.appid,extAppid:s||void 0,signature:o,signReq:{action:e.identity.action,path:e.identity.path,service:e.identity.service,version:e.identity.version,region:e.identity.region,hashed_postdata:crypto_1.default.createHash("sha256").update(e.postdata).digest("hex")}}),headers:{"content-type":"application/json"}}),n=(0,jsonParse_1.jsonRespParse)(i,"cloudapi.getCloudAPISignedHeader");if(n.errCode)throw new Error(`getCloudAPISignedHeader failed, errCode: ${i.errCode}, errMsg: ${i.errMsg}`);const a=n.header;if(!a)throw new Error(`empty header, recv cgi resp: ${i}`);const{resp:d}=await new Promise(((t,r)=>{(0,request_1.default)({url:SERVICE_CLOUD_URL[e.identity.service],method:"post",body:e.postdata,headers:a.split("\n").map((e=>e.trim())).reduce(((e,t)=>{const r=t.indexOf(":");return e[t.slice(0,r)]=t.slice(r+1),e}),{})},((e,o)=>{e?r(e):t({resp:o})}))}));if(413===d.statusCode)throw new Error("Body too large");const c=d.body;if(!c)throw new Error(`Empty body ${d}`);const p="string"==typeof c?JSON.parse(c):c;if(!p.Response||(null===(t=p.Response)||void 0===t?void 0:t.Error))throw new Error(`TencentCloud API error: ${c}`);return c}const{resp:i,body:n}=await(0,request_2.request)({url:urlConfig.cloudAPIAgentURL,method:"post",body:JSON.stringify({appid:r.appid,extAppid:s||void 0,signature:o,agentReq:Object.assign({postdata:e.postdata,test:!1},e.identity)}),headers:Object.assign(Object.assign({},e.headers),{"content-type":"application/json"})});if(413===i.statusCode)throw new Error("Body too large");if(!n)throw new Error(`Empty body ${i}`);const a="string"==typeof n?JSON.parse(n):n;if(a.errCode)throw new Error(`${a.errCode} ${a.errMsg}`);const d=a.data;if(!d||!d.base_resp||"0"!=d.base_resp.ret){if(80210===d.base_resp.ret)throw new Error("NO_CLOUD_MANAGE_PERMISSION_AUTHORIZED_TO_3RD_PLATFORM");throw new Error(`Base resp abnormal, ${JSON.stringify(null==d?void 0:d.base_resp)}`)}return d.content}async function get3rdCloudCodeSecret(e){const t=await e.attr();let r,o="",s={};try{r=await e.getFile(e.miniprogramRoot,"ext.json"),s=JSON.parse(r.toString("utf-8"))}catch(e){}if(s&&s.extEnable&&(o=s.extAppid||""),(null==t?void 0:t.platform)&&o)try{const t=await(0,sign_1.getSignature)(e.privateKey,e.appid),{body:r}=await(0,request_2.request)({url:urlConfig.get3rdCloudCodeSecret,method:"post",headers:{"content-type":"application/json"},body:JSON.stringify({appid:e.appid,extAppid:o,signature:t})}),s=(0,jsonParse_1.jsonRespParse)(r);if(0===s.errCode)return s.codeSecret;throw new Error(`get 3rd cloud codesecret invalid resp ${JSON.stringify(r)}`)}catch(e){throw new Error(`get 3rd cloud codesecret error ${e}`)}}function boundTransactRequest(e){return t=>transactRequest(Object.assign(Object.assign({},t),{project:e}))}
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.createTimeTrigger=createTimeTrigger;const tslib_1=require("tslib"),cloudAPI=tslib_1.__importStar(require("../../common/cloud-api")),cloudapi_1=require("./cloudapi"),error_1=require("../../utils/error"),locales_1=tslib_1.__importDefault(require("../../utils/locales/locales")),config_1=require("../../config/config"),requiredParams=["project","envId","functionName","triggersConfig"];async function createTimeTrigger(r){if(!Array.isArray(r.triggersConfig))throw new Error("triggersConfig is not Array");requiredParams.forEach(e=>{if(!r[e])throw new error_1.CodeError(locales_1.default.config.PARAM_ERROR.format("cloud.createTimeTrigger",e),config_1.PARAM_ERROR)});const{project:e,envId:i,functionName:t,triggersConfig:o}=r,n=await e.getExtAppid();(0,cloudapi_1.initCloudAPI)(n||e.appid);const{envList:c}=await cloudAPI.tcbGetEnvironments({},{request:(0,cloudapi_1.boundTransactRequest)(e),transactType:cloudAPI.TransactType.IDE}),a=c.find(r=>r.envId===i);if(!a)throw new Error("env not found");const g=a.functions[0].region,s=o.map((r,e)=>{if("Object"!==Object.prototype.toString.call(r).slice(8,-1))throw new Error(`triggersConfig index ${e} is not Object`);if(!r.name)throw new Error(`triggersConfig index ${e} required name`);if(!r.type)throw new Error(`triggersConfig index ${e} required type`);switch(r.type){case"timer":if(!r.config)throw new Error(`triggersConfig index ${e} required config`)}return{triggerName:r.name,type:r.type,triggerDesc:r.config}});try{return await cloudAPI.scfBatchCreateTrigger({namespace:i,region:g,functionName:t,triggers:s},{request:(0,cloudapi_1.boundTransactRequest)(e),transactType:cloudAPI.TransactType.IDE}),"创建定时触发器成功"}catch(r){return"请检查传入的 triggersConfig 是否符合格式"}}
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.createTimeTrigger=createTimeTrigger;const tslib_1=require("tslib"),cloudAPI=tslib_1.__importStar(require("../../common/cloud-api")),cloudapi_1=require("./cloudapi"),error_1=require("../../utils/error"),locales_1=tslib_1.__importDefault(require("../../utils/locales/locales")),config_1=require("../../config/config"),requiredParams=["project","envId","functionName","triggersConfig"];async function createTimeTrigger(r){if(!Array.isArray(r.triggersConfig))throw new Error("triggersConfig is not Array");requiredParams.forEach((e=>{if(!r[e])throw new error_1.CodeError(locales_1.default.config.PARAM_ERROR.format("cloud.createTimeTrigger",e),config_1.PARAM_ERROR)}));const{project:e,envId:i,functionName:t,triggersConfig:o}=r,n=await e.getExtAppid();(0,cloudapi_1.initCloudAPI)(n||e.appid);const{envList:c}=await cloudAPI.tcbGetEnvironments({},{request:(0,cloudapi_1.boundTransactRequest)(e),transactType:cloudAPI.TransactType.IDE}),a=c.find((r=>r.envId===i));if(!a)throw new Error("env not found");const g=a.functions[0].region,s=o.map(((r,e)=>{if("Object"!==Object.prototype.toString.call(r).slice(8,-1))throw new Error(`triggersConfig index ${e} is not Object`);if(!r.name)throw new Error(`triggersConfig index ${e} required name`);if(!r.type)throw new Error(`triggersConfig index ${e} required type`);if("timer"===r.type)if(!r.config)throw new Error(`triggersConfig index ${e} required config`);return{triggerName:r.name,type:r.type,triggerDesc:r.config}}));try{return await cloudAPI.scfBatchCreateTrigger({namespace:i,region:g,functionName:t,triggers:s},{request:(0,cloudapi_1.boundTransactRequest)(e),transactType:cloudAPI.TransactType.IDE}),"创建定时触发器成功"}catch(r){return"请检查传入的 triggersConfig 是否符合格式"}}
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.uploadContainer=uploadContainer;const tslib_1=require("tslib"),request_1=tslib_1.__importDefault(require("request")),utils_1=require("./utils"),util_1=require("util"),request_2=require("../../utils/request"),request=(0,util_1.promisify)(request_1.default);async function uploadContainer(e){var t;const{currentEnv:o,cloudAPI:a}=await(0,utils_1.initEnvironmentByProject)(e.project,e.env),r=e.version;if("package"===r.uploadType){const o=await a.tcbDescribeCloudBaseBuildService({envId:e.env,serviceName:e.version.serverName}),i=(0,utils_1.zipFile)(e.containerRoot,{});console.log("[ ] uploading container package..."),console.time("[+] upload elapsed");const s=await request({url:o.uploadUrl,proxy:(0,request_2.getCiProxy)(),method:"PUT",headers:Object.assign({"Content-type":"application/zip"},null===(t=o.uploadHeaders)||void 0===t?void 0:t.reduce((e,{key:t,value:o})=>(e[t]=o,e),{})),body:i.generateNodeStream()});console.timeEnd("[+] upload elapsed"),console.log("[+] upload file status",s.statusCode),r.packageName=o.packageName,r.packageVersion=o.packageVersion}const i=await a.tcbCreateCloudBaseRunServerVersion(Object.assign(Object.assign({},r),{envId:o.envId}));return console.log("[+] create version done.",i),i}
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.uploadContainer=uploadContainer;const tslib_1=require("tslib"),request_1=tslib_1.__importDefault(require("request")),utils_1=require("./utils"),util_1=require("util"),request_2=require("../../utils/request"),request=(0,util_1.promisify)(request_1.default);async function uploadContainer(e){var t;const{currentEnv:o,cloudAPI:a}=await(0,utils_1.initEnvironmentByProject)(e.project,e.env),r=e.version;if("package"===r.uploadType){const o=await a.tcbDescribeCloudBaseBuildService({envId:e.env,serviceName:e.version.serverName}),i=(0,utils_1.zipFile)(e.containerRoot,{});console.log("[ ] uploading container package..."),console.time("[+] upload elapsed");const s=await request({url:o.uploadUrl,proxy:(0,request_2.getCiProxy)(),method:"PUT",headers:Object.assign({"Content-type":"application/zip"},null===(t=o.uploadHeaders)||void 0===t?void 0:t.reduce(((e,{key:t,value:o})=>(e[t]=o,e)),{})),body:i.generateNodeStream()});console.timeEnd("[+] upload elapsed"),console.log("[+] upload file status",s.statusCode),r.packageName=o.packageName,r.packageVersion=o.packageVersion}const i=await a.tcbCreateCloudBaseRunServerVersion(Object.assign(Object.assign({},r),{envId:o.envId}));return console.log("[+] create version done.",i),i}
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.uploadFiles=uploadFiles;const tslib_1=require("tslib"),log=tslib_1.__importStar(require("../../utils/log")),error_1=require("../../utils/error"),config_1=require("../../config/config"),locales_1=tslib_1.__importDefault(require("../../utils/locales/locales")),request_1=require("../../utils/request"),sign_1=require("../../utils/sign"),urlConfig=tslib_1.__importStar(require("../../config/url.config")),utils_1=require("./utils"),{resolve:resolve,relative:relative}=require("path"),{readdir:readdir,readFile:readFile}=require("fs").promises,COS=require("cos-nodejs-sdk-v5"),requiredParams=["project","env","path"];async function uploadFiles(e,t){var r,i;const{currentEnv:o}=await(0,utils_1.initEnvironmentByProject)(e.project,e.env);requiredParams.forEach(t=>{if(!e[t])throw new error_1.CodeError(locales_1.default.config.PARAM_ERROR.format("cloud.storage",t),config_1.PARAM_ERROR)});const{project:a,remotePath:s="",path:n,concurrency:l=5}=e;let c=s.endsWith("/")?s:s+"/";if(c.startsWith("/")&&(c=c.slice(1)),"staticstorage"!==t)if("storage"!==t);else{const e=null===(i=o.storages)||void 0===i?void 0:i[0];if(!e)throw new Error(`invalid storage status: ${e}. exiting`);await beginUpload(n,e,c,a,l)}else{const e=null===(r=o.staticStorages)||void 0===r?void 0:r[0];if(!e||"online"!==e.status)throw new Error(`invalid static storage status: ${e.status}. exiting`);await beginUpload(n,e,c,a,l)}}async function beginUpload(e,t,r,i,o){const a=await getFiles(e),s=a.map(t=>relative(e,t));log.info("[storage]","done. begin upload to cos.");const n=await putObjectToCos(s.map((e,i)=>({Bucket:t.bucket,Region:t.region,Key:r+e,Body:a[i]})),i,t,o);log.info("[storage]",n)}async function getFiles(e){const t=await readdir(e,{withFileTypes:!0}),r=await Promise.all(t.map(t=>{const r=resolve(e,t.name);return t.isDirectory()?getFiles(r):r}));return Array.prototype.concat(...r)}async function putObjectToCos(e,t,r,i){const o=new COS({Proxy:(0,request_1.getCiProxy)(),getAuthorization:await getAuthorizationThunk(t,r)}),a=await callCiServerApi(t,"CLOUD_ROUTE_GETCOSMETA",{action:"batchencode",bucket:r.bucket,mpappid:t.appid,paths:e.map(e=>e.Key)},e=>JSON.parse(JSON.parse(e).data.data).x_cos_meta_field_strs),s=new Map(e.map((e,t)=>[e.Key,a[t]]));try{const t=e.length;let r="";const a=async e=>{if(!e)return;const t=await o.putObject(Object.assign(Object.assign({},e),{Body:await readFile(e.Body),Headers:{"x-cos-meta-fileid":s.get(e.Key)}}));return r=e.Key,t};for(await a(e.shift());e.length>0;){const o=e.splice(0,Math.min(e.length,i)).map(a);log.info(`[storage] Uploading ${t-e.length} / ${t}: ${r}`),await Promise.all(o)}return{success:!0}}catch(e){throw new Error("upload to cos failed: "+e.message)}}async function getAuthorizationThunk(e,t){return async function(r,i){var o;const a=Date.now(),s=await callCiServerApi(e,"CLOUD_ROUTE_GETCOSAUTH",{region:t.region,bucket:t.bucket}),n=null===(o=null==s?void 0:s.Response)||void 0===o?void 0:o.Credentials;if(!n)throw new Error("getFederalToken failed: "+JSON.stringify(n));i({TmpSecretId:n.TmpSecretId,TmpSecretKey:n.TmpSecretKey,XCosSecurityToken:n.Token,StartTime:~~(a/1e3),ExpiredTime:s.Response.ExpiredTime})}}async function callCiServerApi(e,t,r,i){const o=await(0,sign_1.getSignature)(e.privateKey,e.appid),a=await e.getExtAppid(),{resp:s,body:n}=await(0,request_1.request)({url:urlConfig.cloudCosUploadURL,method:"post",body:JSON.stringify({appid:e.appid,extAppid:a||void 0,signature:o,action:t,agentReq:r}),headers:{"content-type":"application/json"}});if(413===s.statusCode)throw new Error("Body too large");if(!n)throw new Error("Empty body "+JSON.stringify(s));if(i){return i(n)}const l="string"==typeof n?JSON.parse(n):n,c=JSON.parse(l.data.content);if(l.errCode)throw new Error(`${l.errCode} ${l.errMsg}`);return c}
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.uploadFiles=uploadFiles;const tslib_1=require("tslib"),log=tslib_1.__importStar(require("../../utils/log")),error_1=require("../../utils/error"),config_1=require("../../config/config"),locales_1=tslib_1.__importDefault(require("../../utils/locales/locales")),request_1=require("../../utils/request"),sign_1=require("../../utils/sign"),urlConfig=tslib_1.__importStar(require("../../config/url.config")),utils_1=require("./utils"),{resolve:resolve,relative:relative}=require("path"),{readdir:readdir,readFile:readFile}=require("fs").promises,COS=require("cos-nodejs-sdk-v5"),requiredParams=["project","env","path"];async function uploadFiles(e,t){var r,i;const{currentEnv:o}=await(0,utils_1.initEnvironmentByProject)(e.project,e.env);requiredParams.forEach((t=>{if(!e[t])throw new error_1.CodeError(locales_1.default.config.PARAM_ERROR.format("cloud.storage",t),config_1.PARAM_ERROR)}));const{project:a,remotePath:s="",path:n,concurrency:l=5}=e;let c=s.endsWith("/")?s:`${s}/`;if(c.startsWith("/")&&(c=c.slice(1)),"staticstorage"!==t)if("storage"!==t);else{const e=null===(i=o.storages)||void 0===i?void 0:i[0];if(!e)throw new Error(`invalid storage status: ${e}. exiting`);await beginUpload(n,e,c,a,l)}else{const e=null===(r=o.staticStorages)||void 0===r?void 0:r[0];if(!e||"online"!==e.status)throw new Error(`invalid static storage status: ${e.status}. exiting`);await beginUpload(n,e,c,a,l)}}async function beginUpload(e,t,r,i,o){const a=await getFiles(e),s=a.map((t=>relative(e,t)));log.info("[storage]","done. begin upload to cos.");const n=await putObjectToCos(s.map(((e,i)=>({Bucket:t.bucket,Region:t.region,Key:r+e,Body:a[i]}))),i,t,o);log.info("[storage]",n)}async function getFiles(e){const t=await readdir(e,{withFileTypes:!0}),r=await Promise.all(t.map((t=>{const r=resolve(e,t.name);return t.isDirectory()?getFiles(r):r})));return Array.prototype.concat(...r)}async function putObjectToCos(e,t,r,i){const o=new COS({Proxy:(0,request_1.getCiProxy)(),getAuthorization:await getAuthorizationThunk(t,r)}),a=await callCiServerApi(t,"CLOUD_ROUTE_GETCOSMETA",{action:"batchencode",bucket:r.bucket,mpappid:t.appid,paths:e.map((e=>e.Key))},(e=>JSON.parse(JSON.parse(e).data.data).x_cos_meta_field_strs)),s=new Map(e.map(((e,t)=>[e.Key,a[t]])));try{const t=e.length;let r="";const a=async e=>{if(!e)return;const t=await o.putObject(Object.assign(Object.assign({},e),{Body:await readFile(e.Body),Headers:{"x-cos-meta-fileid":s.get(e.Key)}}));return r=e.Key,t};for(await a(e.shift());e.length>0;){const o=e.splice(0,Math.min(e.length,i)).map(a);log.info(`[storage] Uploading ${t-e.length} / ${t}: ${r}`),await Promise.all(o)}return{success:!0}}catch(e){throw new Error(`upload to cos failed: ${e.message}`)}}async function getAuthorizationThunk(e,t){return async function(r,i){var o;const a=Date.now(),s=await callCiServerApi(e,"CLOUD_ROUTE_GETCOSAUTH",{region:t.region,bucket:t.bucket}),n=null===(o=null==s?void 0:s.Response)||void 0===o?void 0:o.Credentials;if(!n)throw new Error(`getFederalToken failed: ${JSON.stringify(n)}`);i({TmpSecretId:n.TmpSecretId,TmpSecretKey:n.TmpSecretKey,XCosSecurityToken:n.Token,StartTime:~~(a/1e3),ExpiredTime:s.Response.ExpiredTime})}}async function callCiServerApi(e,t,r,i){const o=await(0,sign_1.getSignature)(e.privateKey,e.appid),a=await e.getExtAppid(),{resp:s,body:n}=await(0,request_1.request)({url:urlConfig.cloudCosUploadURL,method:"post",body:JSON.stringify({appid:e.appid,extAppid:a||void 0,signature:o,action:t,agentReq:r}),headers:{"content-type":"application/json"}});if(413===s.statusCode)throw new Error("Body too large");if(!n)throw new Error(`Empty body ${JSON.stringify(s)}`);if(i){return i(n)}const l="string"==typeof n?JSON.parse(n):n,c=JSON.parse(l.data.content);if(l.errCode)throw new Error(`${l.errCode} ${l.errMsg}`);return c}
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.uploadFunction=uploadFunction;const tslib_1=require("tslib"),cloudapi_1=require("./cloudapi"),cloudAPI=tslib_1.__importStar(require("../../common/cloud-api")),utils_1=require("./utils"),log=tslib_1.__importStar(require("../../utils/log")),error_1=require("../../utils/error"),config_1=require("../../config/config"),locales_1=tslib_1.__importDefault(require("../../utils/locales/locales")),HelloWordCode="UEsDBBQACAAIALB+WU4AAAAAAAAAAAAAAAAIABAAaW5kZXguanNVWAwAAZ9zXPuec1z1ARQAdY7BCsIwEETv+Yoll6ZQ+wOhnv0DD+IhxkWC664kWwmI/27V3IpzGuYNw3RzQSiaU9TOG6x3yVrGW0gMEzh8IOsAUVixfkwgOoV47WHawtPAooUVIRxJLs7ukEhgL5nOtl/h79qf+GBZeIM1FbXHdac9aKC9cDwTDfCb9eblzRtQSwcI6+pcr4AAAADOAAAAUEsBAhUDFAAIAAgAsH5ZTuvqXK+AAAAAzgAAAAgADAAAAAAAAAAAQKSBAAAAAGluZGV4LmpzVVgIAAGfc1z7nnNcUEsFBgAAAAABAAEAQgAAAMYAAAAAAA==",requiredParams=["project","name","path"];async function uploadFunction(e){requiredParams.forEach(t=>{if(!e[t])throw new error_1.CodeError(locales_1.default.config.PARAM_ERROR.format("cloud.uploadFunction",t),config_1.PARAM_ERROR)});const{project:t,remoteNpmInstall:o=!1,name:n,path:a,env:c}=e,i=await t.getExtAppid();(0,cloudapi_1.initCloudAPI)(i||t.appid),log.info(`will upload code under ${a} as cloudfunction '${n}' of env ${c}. remote-npm-install: ${o}`);const{envList:r}=await cloudAPI.tcbGetEnvironments({},{request:(0,cloudapi_1.boundTransactRequest)(t),transactType:cloudAPI.TransactType.IDE}),s=r.find(e=>e.envId===c);if(!s)throw new Error("env not found");const u=s.functions[0].region,{clsLogsetId:l,clsTopicId:d}=getLogServiceProperties(s),p=await(0,cloudapi_1.get3rdCloudCodeSecret)(t);log.info("checking cloudfunction status, will only proceed on normal status"),await waitFuncDeploy({namespace:c,region:u,functionName:n,codeSecret:p,topts:{request:(0,cloudapi_1.boundTransactRequest)(e.project),transactType:cloudAPI.TransactType.IDE}});let A,f=!1;try{if(A=await cloudAPI.scfGetFunctionInfo({namespace:c,region:"",functionName:n,codeSecret:p},{request:(0,cloudapi_1.boundTransactRequest)(t),transactType:cloudAPI.TransactType.IDE}),"DeleteFailed"===A.status)throw new Error("delete failed")}catch(e){if("ResourceNotFound.Function"!==e.code)throw e;f=!0}if(log.info("get cloudfunction info done"),log.info(`will ${f?"create":"update"} cloudfunction`),f)await cloudAPI.scfCreateFunction({functionName:n,code:{zipFile:HelloWordCode},handler:"index.main",description:"",memorySize:256,timeout:3,environment:{variables:[]},role:"TCB_QcsRole",runtime:"Nodejs8.9",namespace:c,region:u,stamp:"MINI_QCBASE",installDependency:o,codeSecret:p,clsLogsetId:l,clsTopicId:d},{request:(0,cloudapi_1.boundTransactRequest)(e.project),transactType:cloudAPI.TransactType.IDE}),log.info("create cloudfunction done, continue to update code");else{if("Updating"===A.status)throw new Error("there's another ongoing update, please wait for it to complete and try again later");const t=o?"TRUE":"FALSE";A.installDependency!==t&&(log.info("updating cloudfunction info"),await cloudAPI.scfUpdateFunctionInfo({namespace:c,region:u,functionName:n,installDependency:o,clsLogsetId:l,clsTopicId:d},{request:(0,cloudapi_1.boundTransactRequest)(e.project),transactType:cloudAPI.TransactType.IDE}),log.info("update cloudfunction info done, waiting for it to take into effect"),await waitFuncDeploy({namespace:c,region:u,functionName:n,codeSecret:p,topts:{request:(0,cloudapi_1.boundTransactRequest)(e.project),transactType:cloudAPI.TransactType.IDE}}),log.info("cloudfunction info updated"))}const g=(0,utils_1.zipFile)(a,{ignore:o?["node_modules"]:void 0}),m=await(0,utils_1.zipToBuffer)(g);log.info("zip file done, updating cloudfunction code"),await cloudAPI.scfUpdateFunction({functionName:n,namespace:c,region:u,handler:"index.main",installDependency:o,fileData:m.toString("base64"),codeSecret:p},{request:(0,cloudapi_1.boundTransactRequest)(e.project),transactType:cloudAPI.TransactType.IDE}),log.info("cloudfunction code updated, "+(o?"installing dependencies in the cloud and deploying":"deploying")),await waitFuncDeploy({namespace:c,region:u,functionName:n,codeSecret:p,topts:{request:(0,cloudapi_1.boundTransactRequest)(e.project),transactType:cloudAPI.TransactType.IDE}}),log.info("deployed");return{filesCount:Object.keys(g.files).length,packSize:m.byteLength}}const waitFuncDeploy=async e=>new Promise(async(t,o)=>{let n=!1;const{namespace:a,region:c,functionName:i,onStatusUpdate:r=(t=>{log.info(`env ${e.namespace}'s cloudfunction '${e.functionName}' status: ${t}`)}),maxWaitTimeout:s=9e5,codeSecret:u}=e,l=setTimeout(()=>{n||(n=!0,o(new Error("timeout waiting for function to deploy")))},s);try{let o="";const l=+new Date;for(;!n&&+new Date-l<s;){const s=await cloudAPI.scfGetFunctionInfo({namespace:a,region:c,functionName:i,codeSecret:u},e.topts);switch(s.status!==o&&(r(s.status),o=s.status),s.status){case"Creating":case"Updating":case"Publishing":case"UpdatingAndPublishing":case"UpdateFailed":break;case"CreateFailed":throw new Error("create function failed: "+s.statusDesc);case"Active":n=!0,t(void 0)}}}catch(e){try{log.error(`upload ${a} ${i} failed: `,"string"==typeof e?e:JSON.stringify(e))}catch(e){log.error(`upload ${a} ${i} failed: `,e.toString())}clearTimeout(l),o(e)}});function getLogServiceProperties(e){let t,o;try{const n=e.logServices[0];t=n.logsetId,o=n.topicId}catch(e){}return{clsLogsetId:t,clsTopicId:o}}
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.uploadFunction=uploadFunction;const tslib_1=require("tslib"),cloudapi_1=require("./cloudapi"),cloudAPI=tslib_1.__importStar(require("../../common/cloud-api")),utils_1=require("./utils"),log=tslib_1.__importStar(require("../../utils/log")),error_1=require("../../utils/error"),config_1=require("../../config/config"),locales_1=tslib_1.__importDefault(require("../../utils/locales/locales")),HelloWordCode="UEsDBBQACAAIALB+WU4AAAAAAAAAAAAAAAAIABAAaW5kZXguanNVWAwAAZ9zXPuec1z1ARQAdY7BCsIwEETv+Yoll6ZQ+wOhnv0DD+IhxkWC664kWwmI/27V3IpzGuYNw3RzQSiaU9TOG6x3yVrGW0gMEzh8IOsAUVixfkwgOoV47WHawtPAooUVIRxJLs7ukEhgL5nOtl/h79qf+GBZeIM1FbXHdac9aKC9cDwTDfCb9eblzRtQSwcI6+pcr4AAAADOAAAAUEsBAhUDFAAIAAgAsH5ZTuvqXK+AAAAAzgAAAAgADAAAAAAAAAAAQKSBAAAAAGluZGV4LmpzVVgIAAGfc1z7nnNcUEsFBgAAAAABAAEAQgAAAMYAAAAAAA==",requiredParams=["project","name","path"];async function uploadFunction(e){requiredParams.forEach((t=>{if(!e[t])throw new error_1.CodeError(locales_1.default.config.PARAM_ERROR.format("cloud.uploadFunction",t),config_1.PARAM_ERROR)}));const{project:t,remoteNpmInstall:o=!1,name:n,path:a,env:c}=e,i=await t.getExtAppid();(0,cloudapi_1.initCloudAPI)(i||t.appid),log.info(`will upload code under ${a} as cloudfunction '${n}' of env ${c}. remote-npm-install: ${o}`);const{envList:r}=await cloudAPI.tcbGetEnvironments({},{request:(0,cloudapi_1.boundTransactRequest)(t),transactType:cloudAPI.TransactType.IDE}),s=r.find((e=>e.envId===c));if(!s)throw new Error("env not found");const u=s.functions[0].region,{clsLogsetId:l,clsTopicId:d}=getLogServiceProperties(s),p=await(0,cloudapi_1.get3rdCloudCodeSecret)(t);log.info("checking cloudfunction status, will only proceed on normal status"),await waitFuncDeploy({namespace:c,region:u,functionName:n,codeSecret:p,topts:{request:(0,cloudapi_1.boundTransactRequest)(e.project),transactType:cloudAPI.TransactType.IDE}});let A,f=!1;try{if(A=await cloudAPI.scfGetFunctionInfo({namespace:c,region:"",functionName:n,codeSecret:p},{request:(0,cloudapi_1.boundTransactRequest)(t),transactType:cloudAPI.TransactType.IDE}),"DeleteFailed"===A.status)throw new Error("delete failed")}catch(e){if("ResourceNotFound.Function"!==e.code)throw e;f=!0}if(log.info("get cloudfunction info done"),log.info(`will ${f?"create":"update"} cloudfunction`),f)await cloudAPI.scfCreateFunction({functionName:n,code:{zipFile:HelloWordCode},handler:"index.main",description:"",memorySize:256,timeout:3,environment:{variables:[]},role:"TCB_QcsRole",runtime:"Nodejs8.9",namespace:c,region:u,stamp:"MINI_QCBASE",installDependency:o,codeSecret:p,clsLogsetId:l,clsTopicId:d},{request:(0,cloudapi_1.boundTransactRequest)(e.project),transactType:cloudAPI.TransactType.IDE}),log.info("create cloudfunction done, continue to update code");else{if("Updating"===A.status)throw new Error("there's another ongoing update, please wait for it to complete and try again later");const t=o?"TRUE":"FALSE";A.installDependency!==t&&(log.info("updating cloudfunction info"),await cloudAPI.scfUpdateFunctionInfo({namespace:c,region:u,functionName:n,installDependency:o,clsLogsetId:l,clsTopicId:d},{request:(0,cloudapi_1.boundTransactRequest)(e.project),transactType:cloudAPI.TransactType.IDE}),log.info("update cloudfunction info done, waiting for it to take into effect"),await waitFuncDeploy({namespace:c,region:u,functionName:n,codeSecret:p,topts:{request:(0,cloudapi_1.boundTransactRequest)(e.project),transactType:cloudAPI.TransactType.IDE}}),log.info("cloudfunction info updated"))}const g=(0,utils_1.zipFile)(a,{ignore:o?["node_modules"]:void 0}),m=await(0,utils_1.zipToBuffer)(g);log.info("zip file done, updating cloudfunction code"),await cloudAPI.scfUpdateFunction({functionName:n,namespace:c,region:u,handler:"index.main",installDependency:o,fileData:m.toString("base64"),codeSecret:p},{request:(0,cloudapi_1.boundTransactRequest)(e.project),transactType:cloudAPI.TransactType.IDE}),log.info("cloudfunction code updated, "+(o?"installing dependencies in the cloud and deploying":"deploying")),await waitFuncDeploy({namespace:c,region:u,functionName:n,codeSecret:p,topts:{request:(0,cloudapi_1.boundTransactRequest)(e.project),transactType:cloudAPI.TransactType.IDE}}),log.info("deployed");return{filesCount:Object.keys(g.files).length,packSize:m.byteLength}}const waitFuncDeploy=async e=>new Promise((async(t,o)=>{let n=!1;const{namespace:a,region:c,functionName:i,onStatusUpdate:r=(t=>{log.info(`env ${e.namespace}'s cloudfunction '${e.functionName}' status: ${t}`)}),maxWaitTimeout:s=9e5,codeSecret:u}=e,l=setTimeout((()=>{n||(n=!0,o(new Error("timeout waiting for function to deploy")))}),s);try{let o="";const l=+new Date;for(;!n&&+new Date-l<s;){const s=await cloudAPI.scfGetFunctionInfo({namespace:a,region:c,functionName:i,codeSecret:u},e.topts);switch(s.status!==o&&(r(s.status),o=s.status),s.status){case"Creating":case"Updating":case"Publishing":case"UpdatingAndPublishing":case"UpdateFailed":break;case"CreateFailed":throw new Error(`create function failed: ${s.statusDesc}`);case"Active":n=!0,t(void 0)}}}catch(e){try{log.error(`upload ${a} ${i} failed: `,"string"==typeof e?e:JSON.stringify(e))}catch(e){log.error(`upload ${a} ${i} failed: `,e.toString())}clearTimeout(l),o(e)}}));function getLogServiceProperties(e){let t,o;try{const n=e.logServices[0];t=n.logsetId,o=n.topicId}catch(e){}return{clsLogsetId:t,clsTopicId:o}}
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.zipToBuffer=exports.zipFile=void 0,exports.initEnvironmentByProject=initEnvironmentByProject;const tslib_1=require("tslib"),fs_1=tslib_1.__importDefault(require("fs")),path_1=tslib_1.__importDefault(require("path")),jszip_1=tslib_1.__importDefault(require("jszip")),minimatch_1=tslib_1.__importDefault(require("minimatch")),cloudapi_1=require("./cloudapi"),log=tslib_1.__importStar(require("../../utils/log")),cloudAPI=tslib_1.__importStar(require("../../common/cloud-api")),minimatchWithList=(e,t)=>{if(!t)return!1;for(const i of t)if(i.startsWith("!")&&!(0,minimatch_1.default)(e,i))return!1;for(const i of t)if(!i.startsWith("!")&&(0,minimatch_1.default)(e,i))return!0;return!1},zipFile=(e,{ignore:t,name:i,zip:r=new jszip_1.default,includeRoot:n=!1}={})=>{if(!fs_1.default.existsSync(e))return r;const o=fs_1.default.lstatSync(e),s=i||path_1.default.basename(e);if(o.isSymbolicLink())r.file(s,fs_1.default.readlinkSync(e),{unixPermissions:parseInt("120"+parseInt((o.mode&parseInt("777",8)).toString(8),10),8)});else if(o.isDirectory()){n&&r.folder(s);const i=fs_1.default.readdirSync(e);for(let o=0,a=i.length;o<a;o++){const a=i[o],l=n?path_1.default.posix.join(s,a):a;t&&minimatchWithList(l,t)||(0,exports.zipFile)(path_1.default.join(e,a),{zip:r,ignore:t,name:l,includeRoot:!0})}}else r.file(s,fs_1.default.readFileSync(e),{binary:!0,unixPermissions:o.mode});return r};exports.zipFile=zipFile;const zipToBuffer=(e,t)=>e.generateAsync({type:"nodebuffer",platform:"darwin"===process.platform?"UNIX":"DOS",compression:"DEFLATE",compressionOptions:{level:9}},t);async function initEnvironmentByProject(e,t){const i=await e.getExtAppid();(0,cloudapi_1.initCloudAPI)(i||e.appid),log.info("[cloud] loading env info");const r={request:(0,cloudapi_1.boundTransactRequest)(e),transactType:cloudAPI.TransactType.IDE};cloudAPI.setRequest((0,cloudapi_1.boundTransactRequest)(e)),cloudAPI.setTransactType(cloudAPI.TransactType.IDE);const[n,o]=await Promise.all([cloudAPI.tcbGetEnvironments({},r),cloudAPI.tcbDescribeWxCloudBaseRunEnvs({})]),s=[...n.envList,...o.envList].find(e=>e.envId===t);if(!s)throw new Error("env not found");return{currentEnv:s,cloudAPI:cloudAPI}}exports.zipToBuffer=zipToBuffer;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.zipToBuffer=exports.zipFile=void 0,exports.initEnvironmentByProject=initEnvironmentByProject;const tslib_1=require("tslib"),fs_1=tslib_1.__importDefault(require("fs")),path_1=tslib_1.__importDefault(require("path")),jszip_1=tslib_1.__importDefault(require("jszip")),minimatch_1=tslib_1.__importDefault(require("minimatch")),cloudapi_1=require("./cloudapi"),log=tslib_1.__importStar(require("../../utils/log")),cloudAPI=tslib_1.__importStar(require("../../common/cloud-api")),minimatchWithList=(e,t)=>{if(!t)return!1;for(const i of t)if(i.startsWith("!")&&!(0,minimatch_1.default)(e,i))return!1;for(const i of t)if(!i.startsWith("!")&&(0,minimatch_1.default)(e,i))return!0;return!1},zipFile=(e,{ignore:t,name:i,zip:r=new jszip_1.default,includeRoot:n=!1}={})=>{if(!fs_1.default.existsSync(e))return r;const o=fs_1.default.lstatSync(e),s=i||path_1.default.basename(e);if(o.isSymbolicLink())r.file(s,fs_1.default.readlinkSync(e),{unixPermissions:parseInt(`120${parseInt((o.mode&parseInt("777",8)).toString(8),10)}`,8)});else if(o.isDirectory()){n&&r.folder(s);const i=fs_1.default.readdirSync(e);for(let o=0,a=i.length;o<a;o++){const a=i[o],l=n?path_1.default.posix.join(s,a):a;t&&minimatchWithList(l,t)||(0,exports.zipFile)(path_1.default.join(e,a),{zip:r,ignore:t,name:l,includeRoot:!0})}}else r.file(s,fs_1.default.readFileSync(e),{binary:!0,unixPermissions:o.mode});return r};exports.zipFile=zipFile;const zipToBuffer=(e,t)=>e.generateAsync({type:"nodebuffer",platform:"darwin"===process.platform?"UNIX":"DOS",compression:"DEFLATE",compressionOptions:{level:9}},t);async function initEnvironmentByProject(e,t){const i=await e.getExtAppid();(0,cloudapi_1.initCloudAPI)(i||e.appid),log.info("[cloud] loading env info");const r={request:(0,cloudapi_1.boundTransactRequest)(e),transactType:cloudAPI.TransactType.IDE};cloudAPI.setRequest((0,cloudapi_1.boundTransactRequest)(e)),cloudAPI.setTransactType(cloudAPI.TransactType.IDE);const[n,o]=await Promise.all([cloudAPI.tcbGetEnvironments({},r),cloudAPI.tcbDescribeWxCloudBaseRunEnvs({})]),s=[...n.envList,...o.envList].find((e=>e.envId===t));if(!s)throw new Error("env not found");return{currentEnv:s,cloudAPI:cloudAPI}}exports.zipToBuffer=zipToBuffer;
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.transCompileType=transCompileType,exports.analyseCode=analyseCode;const tslib_1=require("tslib"),projectconfig_1=require("../modules/corecompiler/original/json/projectconfig"),code_analyse_1=require("../common/code-analyse"),path_1=tslib_1.__importDefault(require("path"));function transCompileType(e){if("miniProgram"===e.type)return"miniprogram";if("miniProgramPlugin"===e.type)return"plugin";if("miniGame"===e.type)return"game";if("miniGamePlugin"===e.type)return"gamePlugin";throw new Error("unknown compile type "+e.type)}class LogPlugin{constructor(){this.name="LogPlugin"}onDepResolveFailed(e,o){var n,i;console.warn(`${null===(n=e.originModule)||void 0===n?void 0:n.type} module ${null===(i=e.originModule)||void 0===i?void 0:i.path} resolve dep failed`),console.warn(o)}onModuleBuildFailed(e,o,n){console.warn(`${e.type} module ${e.path} build failed`),console.warn(n)}}async function analyseCode(e,o){const n=(0,projectconfig_1.getProjectConfigJSON)(e),i=transCompileType(e);if("gamePlugin"===i)throw new Error("gamePlugin is not support yet!");let r="plugin"===i?n.pluginRoot:n.miniprogramRoot;r=r?path_1.default.posix.join(e.projectPath,r):e.projectPath;const t=new code_analyse_1.Analyzer({root:r,type:i,plugins:(null==o?void 0:o.silent)?[]:[new LogPlugin]});return await t.analyse(),t.serialize()}
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.transCompileType=transCompileType,exports.analyseCode=analyseCode;const tslib_1=require("tslib"),projectconfig_1=require("../modules/corecompiler/original/json/projectconfig"),code_analyse_1=require("../common/code-analyse"),path_1=tslib_1.__importDefault(require("path"));function transCompileType(e){if("miniProgram"===e.type)return"miniprogram";if("miniProgramPlugin"===e.type)return"plugin";if("miniGame"===e.type)return"game";if("miniGamePlugin"===e.type)return"gamePlugin";throw new Error(`unknown compile type ${e.type}`)}class LogPlugin{constructor(){this.name="LogPlugin"}onDepResolveFailed(e,o){var n,i;console.warn(`${null===(n=e.originModule)||void 0===n?void 0:n.type} module ${null===(i=e.originModule)||void 0===i?void 0:i.path} resolve dep failed`),console.warn(o)}onModuleBuildFailed(e,o,n){console.warn(`${e.type} module ${e.path} build failed`),console.warn(n)}}async function analyseCode(e,o){const n=(0,projectconfig_1.getProjectConfigJSON)(e),i=transCompileType(e);if("gamePlugin"===i)throw new Error("gamePlugin is not support yet!");let r="plugin"===i?n.pluginRoot:n.miniprogramRoot;r=r?path_1.default.posix.join(e.projectPath,r):e.projectPath;const t=new code_analyse_1.Analyzer({root:r,type:i,plugins:(null==o?void 0:o.silent)?[]:[new LogPlugin]});return await t.analyse(),t.serialize()}
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.innerRequest=innerRequest,exports.uploadByCos=uploadByCos,exports.uploadByCosSafely=uploadByCosSafely,exports.uploadByCosSafelyAsyncWithoutMulti=uploadByCosSafelyAsyncWithoutMulti,exports.uploadByCosSafelyWithMultiUpload=uploadByCosSafelyWithMultiUpload;const tslib_1=require("tslib"),url_config_1=require("../config/url.config"),tools_1=require("../utils/tools"),request_1=require("../utils/request"),fs_1=tslib_1.__importDefault(require("fs")),sign_1=require("../utils/sign"),pack_1=require("./utils/pack"),config_1=require("../config/config"),index_1=require("../utils/asyncTask/index"),log=tslib_1.__importStar(require("../utils/log")),jsonParse_1=require("../utils/jsonParse"),cosUpload_1=require("../utils/cosUpload"),__1=require(".."),upload_1=require("./upload"),genTempFile_1=require("../utils/genTempFile"),zlib=require("zlib"),crypto=require("crypto"),COS=require("cos-nodejs-sdk-v5");async function putBufferToCos(e,t){const o=new COS({Proxy:(0,request_1.getCiProxy)(),getAuthorization(e,o){o({TmpSecretId:t.secret_id,TmpSecretKey:t.secret_key,XCosSecurityToken:t.token,ExpiredTime:t.expired_time})}});try{return await new Promise((a,r)=>{o.putObject({Bucket:t.bucket,Region:"ap-shanghai",Key:t.object,Body:e,onProgress(e){}},(e,t)=>{if(e)return console.error(e),r(e.error);a(t)})})}catch(e){throw new Error("upload to cos failed: "+e.message)}}async function innerRequest(e,t){const o=await(0,request_1.request)({url:e,method:"post",body:t,headers:{"content-type":"application/json"}});let a;try{a=JSON.parse(o.body)}catch(t){const o=`request ${e} failed: resp body is not a valid json`;throw log.error(o),new Error(o)}if(0!==a.errCode){const e=`request failed, errCode: ${a.errCode}, errMsg: ${a.errMsg}`;throw log.error(e),new Error(e)}return a.data}async function uploadByCos(e,t,o,a){let r;try{const e=await(0,sign_1.getSignature)(o.privateKey,o.appid);r=await innerRequest(url_config_1.GET_UPLOAD_TOKEN,JSON.stringify({appid:o.appid,signature:e,robot:a}))}catch(e){return console.error("uploadToken error",e),{fallback:!0}}const i=e,s=crypto.randomBytes(12),n=crypto.createCipheriv("aes-256-gcm",Buffer.from(r.crypt_key,"base64"),s),u=Buffer.concat([n.update(i),n.final()]),l=n.getAuthTag(),c=Buffer.alloc(1);c.writeUInt8(l.length+s.length,0);const p=Buffer.concat([c,l,s,u]),d=Date.now();await putBufferToCos(p,r);const g=Date.now()-d,f=(0,tools_1.generateMD5)(i),_=await(0,sign_1.getSignature)(o.privateKey,o.appid),y=`${t}&task_id=${r.task_id}&new_hash=${f}&upload_cos_cost_time=${g}`;log.info("request url:",y);const w=await(0,request_1.request)({url:y,method:"post",body:zlib.gzipSync((0,pack_1.pack)({[index_1.SIGNATURE_FILE_NAME]:JSON.stringify({signature:_,version:config_1.CI_VERSION})}).buffer)});if(0!==(0,jsonParse_1.jsonRespParse)(w.body.toString(),t).errCode)throw new Error(w.body.toString());for(;;){const e=await(0,sign_1.getSignature)(o.privateKey,o.appid),t=await innerRequest(`${url_config_1.GET_ASYNC_RESULT}?task_id=${r.task_id}`,JSON.stringify({appid:o.appid,signature:e,robot:a}));if(1!==t.status){if(0===t.status)return{fallback:!1,body:t,uploadCOSCostTime:g};if(3===t.status)throw new Error(`upload failed with status ${t.status}, task not found`);throw new Error("upload failed with status "+t.status)}await new Promise(e=>{setTimeout(e,1e3)})}}async function uploadByCosSafely(e,t,o,a,r,i){let s={};try{s=(0,genTempFile_1.genTempFile)(),fs_1.default.writeFileSync(s.name,e,"utf8")}catch(e){throw log.error("Error:",e),new Error(e.message)}return uploadByCosSafelyWithMultiUpload(s.name,t,o,a,{getUploadInfo:url_config_1.GET_MULTI_COS_UPLOAD_INFO,getUploadSign:url_config_1.GET_MULTI_COS_UPLOAD_SIGN,getAsyncResult:url_config_1.GET_MULTI_COS_ASYNC_RESULT,businessType:r},i)}async function uploadByCosSafelyAsyncWithoutMulti(e,t,o,a){let r;try{const e=await(0,sign_1.getSignature)(o.privateKey,o.appid);r=await innerRequest(url_config_1.GET_UPLOAD_INFO,JSON.stringify({appid:o.appid,signature:e,robot:a}))}catch(e){return console.error("getUploadInfo failed",e),{fallback:!0}}const i=crypto.randomBytes(12),s=crypto.createCipheriv("aes-256-gcm",Buffer.from(r.crypt_key,"base64"),i),n=Buffer.concat([s.update(e),s.final()]),u=s.getAuthTag();console.info("nonce size:%d",i.length),console.info("tag size:%d",u.length),console.info("encrypted size:%d",n.length);const l=Buffer.alloc(1);l.writeUInt8(u.length+i.length,0);const c=Buffer.concat([l,u,i,n]),p=Date.now();try{await __1.cosUpload.uploadToCosCore({uploadBuf:c,region:"ap-shanghai",getUploadInfoFunc:async()=>r,getAuthFunc:async e=>{let t,i={},s={};switch(e.action){case"name/cos:InitiateMultipartUpload":i={uploads:""};break;case"name/cos:ListMultipartUploads":i={uploads:"",prefix:r.object},s={};break;case"name/cos:UploadPart":case"name/cos:ListParts":case"name/cos:CompleteMultipartUpload":i={uploadId:e.uploadId},s={};break;default:throw new Error("no action ")}try{const n=await(0,sign_1.getSignature)(o.privateKey,o.appid),u=await innerRequest(url_config_1.GET_UPLOAD_SIGN,JSON.stringify({appid:o.appid,signature:n,robot:a,signOpts:JSON.stringify({checksum:r.checksum,action:e.action,upload_id:e.uploadId,headers:s,params:i})}));t={Authorization:u.sign,SecurityToken:u.token,AuthExpireTime:u.expired_time}}catch(e){throw console.info("uploadToCos safely failed ,start fallback"),console.log(e),new Error("")}return t}})}catch(e){return{fallback:!0}}const d=Date.now()-p,g=(0,tools_1.generateMD5)(e),f=await(0,sign_1.getSignature)(o.privateKey,o.appid),_=`${t}&task_id=${r.task_id}&new_hash=${g}&upload_cos_cost_time=${d}`;log.info("request url:",_);const y=await(0,request_1.request)({url:_,method:"post",body:zlib.gzipSync((0,pack_1.pack)({[index_1.SIGNATURE_FILE_NAME]:JSON.stringify({signature:f,version:config_1.CI_VERSION})}).buffer)});if(0!==(0,jsonParse_1.jsonRespParse)(y.body.toString(),t).errCode)throw new Error(y.body.toString());for(;;){const e=await(0,sign_1.getSignature)(o.privateKey,o.appid),t=await innerRequest(`${url_config_1.GET_ASYNC_RESULT}?task_id=${r.task_id}`,JSON.stringify({appid:o.appid,signature:e,robot:a}));if(1!==t.status){if(0===t.status)return{fallback:!1,body:t,uploadCOSCostTime:d};if(3===t.status)throw new Error(`upload failed with status ${t.status}, task not found`);throw new Error("upload failed with status "+t.status)}await new Promise(e=>{setTimeout(e,1e3)})}}async function uploadByCosSafelyWithMultiUpload(e,t,o,a,r,i){let s;const n=await(0,tools_1.generateFileMD5)(e),u=fs_1.default.statSync(e).size;if(log.info("[upload by cos multi version] rawSize: "+u),Math.ceil(u)<upload_1.MIN_COS_UPLOAD_SIZE)return log.error("[upload by cos multi version] file size must larger than 5M"),{fallback:!0};try{const e=await(0,sign_1.getSignature)(o.privateKey,o.appid),t=await innerRequest(r.getUploadInfo,JSON.stringify({appid:o.appid,signature:e,robot:a,rawSize:""+u,md5:n,busitype:r.businessType}));s=Object.assign(Object.assign({},t),t.upload_info)}catch(e){return log.error("[upload by cos multi version] getUploadInfo failed",e),{fallback:!0}}log.info("[upload by cos multi version] get upload info succcessfuly");const l=await(0,index_1.encryptLocalFile)(e,s),c=Date.now();try{await(0,cosUpload_1.uploadToCosCore)({uploadBuf:l,region:"ap-shanghai",onProgress:e=>{null==i||i(e);try{log.log(`[upload by cos multi version] percent: ${Math.floor(100*e.percent)}% loaded: ${e.loaded}bytes total: ${e.total}bytes`)}catch(e){}},getUploadInfoFunc:async()=>s,getAuthFunc:async e=>{let t,i={},n={};switch(e.action){case"name/cos:InitiateMultipartUpload":i={uploads:""};break;case"name/cos:ListMultipartUploads":i={uploads:"",prefix:s.object},n={};break;case"name/cos:UploadPart":case"name/cos:ListParts":case"name/cos:CompleteMultipartUpload":i={uploadId:e.uploadId},n={};break;default:throw log.error("[upload by cos multi version] cos upload no action"),new Error("[upload by cos multi version] cos upload no action")}try{const u=await(0,sign_1.getSignature)(o.privateKey,o.appid),l=await innerRequest(r.getUploadSign,JSON.stringify({appid:o.appid,signature:u,robot:a,signOpts:JSON.stringify({checksum:s.checksum,action:e.action,upload_id:e.uploadId,task_id:s.task_id,headers:n,params:i})}));t={Authorization:l.sign,SecurityToken:l.token,AuthExpireTime:l.expired_time}}catch(e){throw log.info("[upload by cos multi version] uploadToCos safely failed"),log.log(e),new Error("[upload by cos multi version] uploadToCos safely failed")}return t}})}catch(e){return log.error("[upload by cos multi version] getUploadInfo failed",e.message),{fallback:!0}}const p=Date.now()-c,d=""+fs_1.default.statSync(l).size,g=await(0,sign_1.getSignature)(o.privateKey,o.appid),f=`${t}&task_id=${s.task_id}&new_hash=${n}&upload_cos_cost_time=${p}&str_stored_size=${d}&async_ver=2`;log.info("[upload by cos multi version] request url:",f);const _=await(0,request_1.request)({url:f,method:"post",body:zlib.gzipSync((0,pack_1.pack)({[index_1.SIGNATURE_FILE_NAME]:JSON.stringify({signature:g,version:config_1.CI_VERSION})}).buffer)});if(0!==(0,jsonParse_1.jsonRespParse)(_.body.toString(),t).errCode)throw new Error(_.body.toString());for(;;){const e=await(0,sign_1.getSignature)(o.privateKey,o.appid),t=await innerRequest(`${r.getAsyncResult}?task_id=${s.task_id}`,JSON.stringify({appid:o.appid,signature:e,robot:a}));if(2!==t.status){if(3===t.status){const e=Date.now()-c;let o="";try{o=JSON.parse(t.result_json)}catch(e){throw log.error("[upload by cos multi version] upload failed with status "+e.message),e}return{fallback:!1,body:o,uploadCOSCostTime:e}}if(0===t.status)throw new Error(`[upload by cos multi version] upload failed with status ${t.status}, task not found`);throw new Error("[upload by cos multi version] upload failed with status "+t.status)}log.info("[upload by cos multi version] running async task..."),await new Promise(e=>{setTimeout(e,1e3)})}}
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.innerRequest=innerRequest,exports.uploadByCos=uploadByCos,exports.uploadByCosSafely=uploadByCosSafely,exports.uploadByCosSafelyAsyncWithoutMulti=uploadByCosSafelyAsyncWithoutMulti,exports.uploadByCosSafelyWithMultiUpload=uploadByCosSafelyWithMultiUpload;const tslib_1=require("tslib"),url_config_1=require("../config/url.config"),tools_1=require("../utils/tools"),request_1=require("../utils/request"),fs_1=tslib_1.__importDefault(require("fs")),sign_1=require("../utils/sign"),pack_1=require("./utils/pack"),config_1=require("../config/config"),index_1=require("../utils/asyncTask/index"),log=tslib_1.__importStar(require("../utils/log")),jsonParse_1=require("../utils/jsonParse"),cosUpload_1=require("../utils/cosUpload"),__1=require(".."),upload_1=require("./upload"),genTempFile_1=require("../utils/genTempFile"),zlib=require("zlib"),crypto=require("crypto"),COS=require("cos-nodejs-sdk-v5");async function putBufferToCos(e,t){const o=new COS({Proxy:(0,request_1.getCiProxy)(),getAuthorization(e,o){o({TmpSecretId:t.secret_id,TmpSecretKey:t.secret_key,XCosSecurityToken:t.token,ExpiredTime:t.expired_time})}});try{return await new Promise(((a,r)=>{o.putObject({Bucket:t.bucket,Region:"ap-shanghai",Key:t.object,Body:e,onProgress(e){}},((e,t)=>{if(e)return console.error(e),r(e.error);a(t)}))}))}catch(e){throw new Error(`upload to cos failed: ${e.message}`)}}async function innerRequest(e,t){const o=await(0,request_1.request)({url:e,method:"post",body:t,headers:{"content-type":"application/json"}});let a;try{a=JSON.parse(o.body)}catch(t){const o=`request ${e} failed: resp body is not a valid json`;throw log.error(o),new Error(o)}if(0!==a.errCode){const e=`request failed, errCode: ${a.errCode}, errMsg: ${a.errMsg}`;throw log.error(e),new Error(e)}return a.data}async function uploadByCos(e,t,o,a){let r;try{const e=await(0,sign_1.getSignature)(o.privateKey,o.appid);r=await innerRequest(url_config_1.GET_UPLOAD_TOKEN,JSON.stringify({appid:o.appid,signature:e,robot:a}))}catch(e){return console.error("uploadToken error",e),{fallback:!0}}const i=e,s=crypto.randomBytes(12),n=crypto.createCipheriv("aes-256-gcm",Buffer.from(r.crypt_key,"base64"),s),u=Buffer.concat([n.update(i),n.final()]),l=n.getAuthTag(),c=Buffer.alloc(1);c.writeUInt8(l.length+s.length,0);const p=Buffer.concat([c,l,s,u]),d=Date.now();await putBufferToCos(p,r);const g=Date.now()-d,f=(0,tools_1.generateMD5)(i),_=await(0,sign_1.getSignature)(o.privateKey,o.appid),y=`${t}&task_id=${r.task_id}&new_hash=${f}&upload_cos_cost_time=${g}`;log.info("request url:",y);const w=await(0,request_1.request)({url:y,method:"post",body:zlib.gzipSync((0,pack_1.pack)({[index_1.SIGNATURE_FILE_NAME]:JSON.stringify({signature:_,version:config_1.CI_VERSION})}).buffer)});if(0!==(0,jsonParse_1.jsonRespParse)(w.body.toString(),t).errCode)throw new Error(w.body.toString());for(;;){const e=await(0,sign_1.getSignature)(o.privateKey,o.appid),t=await innerRequest(`${url_config_1.GET_ASYNC_RESULT}?task_id=${r.task_id}`,JSON.stringify({appid:o.appid,signature:e,robot:a}));if(1!==t.status){if(0===t.status)return{fallback:!1,body:t,uploadCOSCostTime:g};if(3===t.status)throw new Error(`upload failed with status ${t.status}, task not found`);throw new Error(`upload failed with status ${t.status}`)}await new Promise((e=>{setTimeout(e,1e3)}))}}async function uploadByCosSafely(e,t,o,a,r,i){let s={};try{s=(0,genTempFile_1.genTempFile)(),fs_1.default.writeFileSync(s.name,e,"utf8")}catch(e){throw log.error("Error:",e),new Error(e.message)}return uploadByCosSafelyWithMultiUpload(s.name,t,o,a,{getUploadInfo:url_config_1.GET_MULTI_COS_UPLOAD_INFO,getUploadSign:url_config_1.GET_MULTI_COS_UPLOAD_SIGN,getAsyncResult:url_config_1.GET_MULTI_COS_ASYNC_RESULT,businessType:r},i)}async function uploadByCosSafelyAsyncWithoutMulti(e,t,o,a){let r;try{const e=await(0,sign_1.getSignature)(o.privateKey,o.appid);r=await innerRequest(url_config_1.GET_UPLOAD_INFO,JSON.stringify({appid:o.appid,signature:e,robot:a}))}catch(e){return console.error("getUploadInfo failed",e),{fallback:!0}}const i=crypto.randomBytes(12),s=crypto.createCipheriv("aes-256-gcm",Buffer.from(r.crypt_key,"base64"),i),n=Buffer.concat([s.update(e),s.final()]),u=s.getAuthTag();console.info("nonce size:%d",i.length),console.info("tag size:%d",u.length),console.info("encrypted size:%d",n.length);const l=Buffer.alloc(1);l.writeUInt8(u.length+i.length,0);const c=Buffer.concat([l,u,i,n]),p=Date.now();try{await __1.cosUpload.uploadToCosCore({uploadBuf:c,region:"ap-shanghai",getUploadInfoFunc:async()=>r,getAuthFunc:async e=>{let t,i={},s={};switch(e.action){case"name/cos:InitiateMultipartUpload":i={uploads:""};break;case"name/cos:ListMultipartUploads":i={uploads:"",prefix:r.object},s={};break;case"name/cos:UploadPart":case"name/cos:ListParts":case"name/cos:CompleteMultipartUpload":i={uploadId:e.uploadId},s={};break;default:throw new Error("no action ")}try{const n=await(0,sign_1.getSignature)(o.privateKey,o.appid),u=await innerRequest(url_config_1.GET_UPLOAD_SIGN,JSON.stringify({appid:o.appid,signature:n,robot:a,signOpts:JSON.stringify({checksum:r.checksum,action:e.action,upload_id:e.uploadId,headers:s,params:i})}));t={Authorization:u.sign,SecurityToken:u.token,AuthExpireTime:u.expired_time}}catch(e){throw console.info("uploadToCos safely failed ,start fallback"),console.log(e),new Error("")}return t}})}catch(e){return{fallback:!0}}const d=Date.now()-p,g=(0,tools_1.generateMD5)(e),f=await(0,sign_1.getSignature)(o.privateKey,o.appid),_=`${t}&task_id=${r.task_id}&new_hash=${g}&upload_cos_cost_time=${d}`;log.info("request url:",_);const y=await(0,request_1.request)({url:_,method:"post",body:zlib.gzipSync((0,pack_1.pack)({[index_1.SIGNATURE_FILE_NAME]:JSON.stringify({signature:f,version:config_1.CI_VERSION})}).buffer)});if(0!==(0,jsonParse_1.jsonRespParse)(y.body.toString(),t).errCode)throw new Error(y.body.toString());for(;;){const e=await(0,sign_1.getSignature)(o.privateKey,o.appid),t=await innerRequest(`${url_config_1.GET_ASYNC_RESULT}?task_id=${r.task_id}`,JSON.stringify({appid:o.appid,signature:e,robot:a}));if(1!==t.status){if(0===t.status)return{fallback:!1,body:t,uploadCOSCostTime:d};if(3===t.status)throw new Error(`upload failed with status ${t.status}, task not found`);throw new Error(`upload failed with status ${t.status}`)}await new Promise((e=>{setTimeout(e,1e3)}))}}async function uploadByCosSafelyWithMultiUpload(e,t,o,a,r,i){let s;const n=await(0,tools_1.generateFileMD5)(e),u=fs_1.default.statSync(e).size;if(log.info(`[upload by cos multi version] rawSize: ${u}`),Math.ceil(u)<upload_1.MIN_COS_UPLOAD_SIZE)return log.error("[upload by cos multi version] file size must larger than 5M"),{fallback:!0};try{const e=await(0,sign_1.getSignature)(o.privateKey,o.appid),t=await innerRequest(r.getUploadInfo,JSON.stringify({appid:o.appid,signature:e,robot:a,rawSize:`${u}`,md5:n,busitype:r.businessType}));s=Object.assign(Object.assign({},t),t.upload_info)}catch(e){return log.error("[upload by cos multi version] getUploadInfo failed",e),{fallback:!0}}log.info("[upload by cos multi version] get upload info succcessfuly");const l=await(0,index_1.encryptLocalFile)(e,s),c=Date.now();try{await(0,cosUpload_1.uploadToCosCore)({uploadBuf:l,region:"ap-shanghai",onProgress:e=>{null==i||i(e);try{log.log(`[upload by cos multi version] percent: ${Math.floor(100*e.percent)}% loaded: ${e.loaded}bytes total: ${e.total}bytes`)}catch(e){}},getUploadInfoFunc:async()=>s,getAuthFunc:async e=>{let t,i={},n={};switch(e.action){case"name/cos:InitiateMultipartUpload":i={uploads:""};break;case"name/cos:ListMultipartUploads":i={uploads:"",prefix:s.object},n={};break;case"name/cos:UploadPart":case"name/cos:ListParts":case"name/cos:CompleteMultipartUpload":i={uploadId:e.uploadId},n={};break;default:throw log.error("[upload by cos multi version] cos upload no action"),new Error("[upload by cos multi version] cos upload no action")}try{const u=await(0,sign_1.getSignature)(o.privateKey,o.appid),l=await innerRequest(r.getUploadSign,JSON.stringify({appid:o.appid,signature:u,robot:a,signOpts:JSON.stringify({checksum:s.checksum,action:e.action,upload_id:e.uploadId,task_id:s.task_id,headers:n,params:i})}));t={Authorization:l.sign,SecurityToken:l.token,AuthExpireTime:l.expired_time}}catch(e){throw log.info("[upload by cos multi version] uploadToCos safely failed"),log.log(e),new Error("[upload by cos multi version] uploadToCos safely failed")}return t}})}catch(e){return log.error("[upload by cos multi version] getUploadInfo failed",e.message),{fallback:!0}}const p=Date.now()-c,d=`${fs_1.default.statSync(l).size}`,g=await(0,sign_1.getSignature)(o.privateKey,o.appid),f=`${t}&task_id=${s.task_id}&new_hash=${n}&upload_cos_cost_time=${p}&str_stored_size=${d}&async_ver=2`;log.info("[upload by cos multi version] request url:",f);const _=await(0,request_1.request)({url:f,method:"post",body:zlib.gzipSync((0,pack_1.pack)({[index_1.SIGNATURE_FILE_NAME]:JSON.stringify({signature:g,version:config_1.CI_VERSION})}).buffer)});if(0!==(0,jsonParse_1.jsonRespParse)(_.body.toString(),t).errCode)throw new Error(_.body.toString());for(;;){const e=await(0,sign_1.getSignature)(o.privateKey,o.appid),t=await innerRequest(`${r.getAsyncResult}?task_id=${s.task_id}`,JSON.stringify({appid:o.appid,signature:e,robot:a}));if(2!==t.status){if(3===t.status){const e=Date.now()-c;let o="";try{o=JSON.parse(t.result_json)}catch(e){throw log.error(`[upload by cos multi version] upload failed with status ${e.message}`),e}return{fallback:!1,body:o,uploadCOSCostTime:e}}if(0===t.status)throw new Error(`[upload by cos multi version] upload failed with status ${t.status}, task not found`);throw new Error(`[upload by cos multi version] upload failed with status ${t.status}`)}log.info("[upload by cos multi version] running async task..."),await new Promise((e=>{setTimeout(e,1e3)}))}}
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.innerRequest=innerRequest,exports.getGamePkgList=getGamePkgList,exports.getGamePkgUrl=getGamePkgUrl,exports.checkGamePkgUserVersion=checkGamePkgUserVersion;const tslib_1=require("tslib"),url_config_1=require("../../config/url.config"),log=tslib_1.__importStar(require("../../utils/log")),request_1=require("../../utils/request"),sign_1=require("../../utils/sign");async function innerRequest(e,r){const s=await(0,request_1.request)({url:e,method:"post",body:r,headers:{"content-type":"application/json"}});let i;try{i=JSON.parse(s.body)}catch(r){const s=`request ${e} failed: resp body is not a valid json`;throw log.error(s),new Error(s)}if(0!==i.errCode){const e=`request failed, errCode: ${i.errCode}, errMsg: ${i.errMsg}`;throw log.error(e),new Error(e)}return i.data}async function getGamePkgList(e){var r,s;const i=await(0,sign_1.getSignature)(e.privateKey,e.appid),t=await innerRequest(""+url_config_1.GET_PLUG_PKG_GET_LIST,JSON.stringify({appid:e.appid,signature:i}));return{success:0===(null===(r=null==t?void 0:t.baseresponse)||void 0===r?void 0:r.errcode),errmsg:null===(s=null==t?void 0:t.baseresponse)||void 0===s?void 0:s.errmsg,list:t.commit_list||[]}}async function getGamePkgUrl(e,r){var s,i;const t=await(0,sign_1.getSignature)(e.privateKey,e.appid),n=await innerRequest(""+url_config_1.GET_PLUG_PKG_GET_URL,JSON.stringify({appid:e.appid,signature:t,user_version:r}));return{success:0===(null===(s=null==n?void 0:n.baseresponse)||void 0===s?void 0:s.errcode),errmsg:null===(i=null==n?void 0:n.baseresponse)||void 0===i?void 0:i.errmsg,url:n.url||"url not found"}}async function checkGamePkgUserVersion(e,r){var s,i;const t=await(0,sign_1.getSignature)(e.privateKey,e.appid),n=await innerRequest(""+url_config_1.GET_PLUG_PKG_CHECK_USERVERSION,JSON.stringify({appid:e.appid,signature:t,user_version:r}));return{success:0===(null===(s=null==n?void 0:n.baseresponse)||void 0===s?void 0:s.errcode),errmsg:null===(i=null==n?void 0:n.baseresponse)||void 0===i?void 0:i.errmsg}}
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.innerRequest=innerRequest,exports.getGamePkgList=getGamePkgList,exports.getGamePkgUrl=getGamePkgUrl,exports.checkGamePkgUserVersion=checkGamePkgUserVersion;const tslib_1=require("tslib"),url_config_1=require("../../config/url.config"),log=tslib_1.__importStar(require("../../utils/log")),request_1=require("../../utils/request"),sign_1=require("../../utils/sign");async function innerRequest(e,r){const s=await(0,request_1.request)({url:e,method:"post",body:r,headers:{"content-type":"application/json"}});let i;try{i=JSON.parse(s.body)}catch(r){const s=`request ${e} failed: resp body is not a valid json`;throw log.error(s),new Error(s)}if(0!==i.errCode){const e=`request failed, errCode: ${i.errCode}, errMsg: ${i.errMsg}`;throw log.error(e),new Error(e)}return i.data}async function getGamePkgList(e){var r,s;const i=await(0,sign_1.getSignature)(e.privateKey,e.appid),t=await innerRequest(`${url_config_1.GET_PLUG_PKG_GET_LIST}`,JSON.stringify({appid:e.appid,signature:i}));return{success:0===(null===(r=null==t?void 0:t.baseresponse)||void 0===r?void 0:r.errcode),errmsg:null===(s=null==t?void 0:t.baseresponse)||void 0===s?void 0:s.errmsg,list:t.commit_list||[]}}async function getGamePkgUrl(e,r){var s,i;const t=await(0,sign_1.getSignature)(e.privateKey,e.appid),n=await innerRequest(`${url_config_1.GET_PLUG_PKG_GET_URL}`,JSON.stringify({appid:e.appid,signature:t,user_version:r}));return{success:0===(null===(s=null==n?void 0:n.baseresponse)||void 0===s?void 0:s.errcode),errmsg:null===(i=null==n?void 0:n.baseresponse)||void 0===i?void 0:i.errmsg,url:n.url||"url not found"}}async function checkGamePkgUserVersion(e,r){var s,i;const t=await(0,sign_1.getSignature)(e.privateKey,e.appid),n=await innerRequest(`${url_config_1.GET_PLUG_PKG_CHECK_USERVERSION}`,JSON.stringify({appid:e.appid,signature:t,user_version:r}));return{success:0===(null===(s=null==n?void 0:n.baseresponse)||void 0===s?void 0:s.errcode),errmsg:null===(i=null==n?void 0:n.baseresponse)||void 0===i?void 0:i.errmsg}}
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.uploadGamePkg=uploadGamePkg;const tslib_1=require("tslib"),url_config_1=require("../../config/url.config"),taskstatus_1=require("../../utils/taskstatus"),querystring_1=tslib_1.__importDefault(require("querystring")),cos_upload_1=require("../cos-upload"),fs_1=tslib_1.__importDefault(require("fs")),log=tslib_1.__importStar(require("../../utils/log")),progressupdate_1=require("../utils/progressupdate"),locales_1=tslib_1.__importDefault(require("../../utils/locales/locales")),businesstype_1=require("../../config/businesstype");async function uploadGamePkg(e){if(!fs_1.default.existsSync(e.pkgPath||"")||fs_1.default.statSync(e.pkgPath).isDirectory())throw new Error("[upload game pkg]failed! cant find file: "+e.pkgPath);const s=(0,progressupdate_1.transProgressUpdate)(e.onProgressUpdate||(()=>{})),t={appid:e.project.appid,version:e.version,desc:e.desc,robot:e.robot},o=`${url_config_1.GAME_PKG_UPLOAD_URL}?${querystring_1.default.stringify(t)}`,r=new taskstatus_1.TaskStatus(locales_1.default.config.UPLOAD.toString());s(r);const{fallback:a,uploadCOSCostTime:i}=await(0,cos_upload_1.uploadByCosSafelyWithMultiUpload)(e.pkgPath,o,e.project,e.robot,{getUploadInfo:url_config_1.GET_GAME_PKG_UPLOAD_INFO,getUploadSign:url_config_1.GET_GAME_PKG_UPLOAD_SIGN,getAsyncResult:url_config_1.GET_GAME_PKG_ASYNC_RESULT,businessType:businesstype_1.BUSINESS_TYPE.BusiType_UploadApkPlugin},e.onProgressUpdate);return null!=i||log.log("[upload game pkg] total cost time : "+i),a&&log.error("[upload game pkg] failed!"),r.done(),s(r),{success:!a}}
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.uploadGamePkg=uploadGamePkg;const tslib_1=require("tslib"),url_config_1=require("../../config/url.config"),taskstatus_1=require("../../utils/taskstatus"),querystring_1=tslib_1.__importDefault(require("querystring")),cos_upload_1=require("../cos-upload"),fs_1=tslib_1.__importDefault(require("fs")),log=tslib_1.__importStar(require("../../utils/log")),progressupdate_1=require("../utils/progressupdate"),locales_1=tslib_1.__importDefault(require("../../utils/locales/locales")),businesstype_1=require("../../config/businesstype");async function uploadGamePkg(e){if(!fs_1.default.existsSync(e.pkgPath||"")||fs_1.default.statSync(e.pkgPath).isDirectory())throw new Error(`[upload game pkg]failed! cant find file: ${e.pkgPath}`);const s=(0,progressupdate_1.transProgressUpdate)(e.onProgressUpdate||(()=>{})),t={appid:e.project.appid,version:e.version,desc:e.desc,robot:e.robot},o=`${url_config_1.GAME_PKG_UPLOAD_URL}?${querystring_1.default.stringify(t)}`,r=new taskstatus_1.TaskStatus(locales_1.default.config.UPLOAD.toString());s(r);const{fallback:a,uploadCOSCostTime:i}=await(0,cos_upload_1.uploadByCosSafelyWithMultiUpload)(e.pkgPath,o,e.project,e.robot,{getUploadInfo:url_config_1.GET_GAME_PKG_UPLOAD_INFO,getUploadSign:url_config_1.GET_GAME_PKG_UPLOAD_SIGN,getAsyncResult:url_config_1.GET_GAME_PKG_ASYNC_RESULT,businessType:businesstype_1.BUSINESS_TYPE.BusiType_UploadApkPlugin},e.onProgressUpdate);return null!=i||log.log(`[upload game pkg] total cost time : ${i}`),a&&log.error("[upload game pkg] failed!"),r.done(),s(r),{success:!a}}
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.getCompiledResult=getCompiledResult;const tslib_1=require("tslib"),fs_extra_1=tslib_1.__importDefault(require("fs-extra")),config_1=require("../config/config"),error_1=require("../utils/error"),locales_1=tslib_1.__importDefault(require("../utils/locales/locales")),cache_1=require("../utils/cache"),progressupdate_1=require("./utils/progressupdate"),jszip_1=tslib_1.__importDefault(require("jszip")),path_1=tslib_1.__importDefault(require("path")),getcompiler_1=require("./getcompiler"),tools_1=require("./utils/tools");async function getCompiledResult(e,t){const{project:r,setting:s={},onProgressUpdate:o=(()=>{}),threads:i=0,includedMap:a=!1}=e;if(process.env.COMPILE_THREADS=i.toString(),!r)throw new error_1.CodeError(locales_1.default.config.PARAM_ERROR.format("upload","project"),config_1.PARAM_ERROR);cache_1.cacheManager.clean();const l=await(0,getcompiler_1.getCompiler)(r,s),_=await l.compile({setting:(0,tools_1.formatCISetting)(r,s),onProgressUpdate:(0,progressupdate_1.transProgressUpdate)(o),resultType:"prod",disableSpreadingUsingComponents:!0}),p={};if(Object.keys(_).sort().forEach(e=>{e.endsWith("js.map")&&!a||(p[e]=_[e])}),t){const e=new jszip_1.default;Object.keys(p).forEach(t=>{e.folder(path_1.default.dirname(t)).file(path_1.default.basename(t),p[t])});const r=await e.generateAsync({type:"nodebuffer"});fs_extra_1.default.ensureDirSync(path_1.default.dirname(t)),fs_extra_1.default.writeFileSync(t,r)}return p}
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.getCompiledResult=getCompiledResult;const tslib_1=require("tslib"),fs_extra_1=tslib_1.__importDefault(require("fs-extra")),config_1=require("../config/config"),error_1=require("../utils/error"),locales_1=tslib_1.__importDefault(require("../utils/locales/locales")),cache_1=require("../utils/cache"),progressupdate_1=require("./utils/progressupdate"),jszip_1=tslib_1.__importDefault(require("jszip")),path_1=tslib_1.__importDefault(require("path")),getcompiler_1=require("./getcompiler"),tools_1=require("./utils/tools");async function getCompiledResult(e,t){const{project:r,setting:s={},onProgressUpdate:o=(()=>{}),threads:i=0,includedMap:a=!1}=e;if(process.env.COMPILE_THREADS=i.toString(),!r)throw new error_1.CodeError(locales_1.default.config.PARAM_ERROR.format("upload","project"),config_1.PARAM_ERROR);cache_1.cacheManager.clean();const l=await(0,getcompiler_1.getCompiler)(r,s),_=await l.compile({setting:(0,tools_1.formatCISetting)(r,s),onProgressUpdate:(0,progressupdate_1.transProgressUpdate)(o),resultType:"prod",disableSpreadingUsingComponents:!0}),p={};if(Object.keys(_).sort().forEach((e=>{e.endsWith("js.map")&&!a||(p[e]=_[e])})),t){const e=new jszip_1.default;Object.keys(p).forEach((t=>{e.folder(path_1.default.dirname(t)).file(path_1.default.basename(t),p[t])}));const r=await e.generateAsync({type:"nodebuffer"});fs_extra_1.default.ensureDirSync(path_1.default.dirname(t)),fs_extra_1.default.writeFileSync(t,r)}return p}
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.getDevSourceMap=getDevSourceMap;const tslib_1=require("tslib"),fs_1=tslib_1.__importDefault(require("fs")),path_1=tslib_1.__importDefault(require("path")),log=tslib_1.__importStar(require("../utils/log")),request_1=require("../utils/request"),url_config_1=require("../config/url.config"),sign_1=require("../utils/sign"),JsZip=require("jszip"),ERR_MSG_PREFIX="download source map failed:";async function getExtAppId(r){let e,t={};try{e=await r.getFile(r.miniprogramRoot,"ext.json"),t=JSON.parse(e.toString("utf-8"))}catch(r){}if(null==t?void 0:t.extEnable)return t.extAppid}async function getDevSourceMap(r){const{project:e,robot:t,streaming:o}=r;let{sourceMapSavePath:a}=r;if(!e){const r="params project is requried";throw log.error(r),r}if("number"!=typeof t||Math.round(t)>30||Math.round(t)<=0){const r="params robot is invalid";throw log.error(r),r}if(!a){const r="params sourceMapSavePath is invalid";throw log.error(r),r}path_1.default.isAbsolute(a)||(a=path_1.default.join(process.cwd(),a));const i=await(0,sign_1.getSignature)(e.privateKey,e.appid),s=await getExtAppId(e),{body:p}=await(0,request_1.request)({url:url_config_1.GET_DEV_SOURCE_MAP,method:"post",gzip:!0,body:JSON.stringify({appid:e.appid,signature:i,robot:t,extAppId:s,streaming:o}),headers:{"content-type":"application/json"}});let l,n;try{l=JSON.parse(p)}catch(r){const e=ERR_MSG_PREFIX+" resp body is not a valid json";throw log.error(e),e}if(o)n=l.sourcemap_list;else{if(0!==l.errCode)throw new Error(`request failed, errCode: ${l.errCode}, errMsg: ${l.errMsg}`);const r=l.data;if(!Array.isArray(r.sourcemap_list)){const e=`${ERR_MSG_PREFIX} respData.sourcemap_list, respData: ${JSON.stringify(r)}`;throw log.error(e),e}n=r.sourcemap_list}const u=n,c=new JsZip;try{u.forEach(r=>{c.folder(path_1.default.dirname(r.fullpath)).file(path_1.default.basename(r.fullpath),r.sourcemap)})}catch(r){const e=ERR_MSG_PREFIX+" source map add folder or add file error";throw log.error(e),e}let _;try{_=await c.generateAsync({type:"nodebuffer"})}catch(r){const e=ERR_MSG_PREFIX+" source map generate zip error";throw log.error(e),e}try{fs_1.default.writeFileSync(a,_)}catch(r){const e=`${ERR_MSG_PREFIX} save source map to ${a} failed. Error detail: ${JSON.stringify(r)}`;throw log.error(e),e}return _}
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.getDevSourceMap=getDevSourceMap;const tslib_1=require("tslib"),fs_1=tslib_1.__importDefault(require("fs")),path_1=tslib_1.__importDefault(require("path")),log=tslib_1.__importStar(require("../utils/log")),request_1=require("../utils/request"),url_config_1=require("../config/url.config"),sign_1=require("../utils/sign"),JsZip=require("jszip"),ERR_MSG_PREFIX="download source map failed:";async function getExtAppId(r){let e,t={};try{e=await r.getFile(r.miniprogramRoot,"ext.json"),t=JSON.parse(e.toString("utf-8"))}catch(r){}if(null==t?void 0:t.extEnable)return t.extAppid}async function getDevSourceMap(r){const{project:e,robot:t,streaming:o}=r;let{sourceMapSavePath:a}=r;if(!e){const r="params project is requried";throw log.error(r),r}if("number"!=typeof t||Math.round(t)>30||Math.round(t)<=0){const r="params robot is invalid";throw log.error(r),r}if(!a){const r="params sourceMapSavePath is invalid";throw log.error(r),r}path_1.default.isAbsolute(a)||(a=path_1.default.join(process.cwd(),a));const i=await(0,sign_1.getSignature)(e.privateKey,e.appid),s=await getExtAppId(e),{body:p}=await(0,request_1.request)({url:url_config_1.GET_DEV_SOURCE_MAP,method:"post",gzip:!0,body:JSON.stringify({appid:e.appid,signature:i,robot:t,extAppId:s,streaming:o}),headers:{"content-type":"application/json"}});let l,n;try{l=JSON.parse(p)}catch(r){const e=`${ERR_MSG_PREFIX} resp body is not a valid json`;throw log.error(e),e}if(o)n=l.sourcemap_list;else{if(0!==l.errCode)throw new Error(`request failed, errCode: ${l.errCode}, errMsg: ${l.errMsg}`);const r=l.data;if(!Array.isArray(r.sourcemap_list)){const e=`${ERR_MSG_PREFIX} respData.sourcemap_list, respData: ${JSON.stringify(r)}`;throw log.error(e),e}n=r.sourcemap_list}const u=n,c=new JsZip;try{u.forEach((r=>{c.folder(path_1.default.dirname(r.fullpath)).file(path_1.default.basename(r.fullpath),r.sourcemap)}))}catch(r){const e=`${ERR_MSG_PREFIX} source map add folder or add file error`;throw log.error(e),e}let _;try{_=await c.generateAsync({type:"nodebuffer"})}catch(r){const e=`${ERR_MSG_PREFIX} source map generate zip error`;throw log.error(e),e}try{fs_1.default.writeFileSync(a,_)}catch(r){const e=`${ERR_MSG_PREFIX} save source map to ${a} failed. Error detail: ${JSON.stringify(r)}`;throw log.error(e),e}return _}
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.getCompiler=exports.getOriginalCompiler=void 0,exports.getBuilder=getBuilder;const tslib_1=require("tslib"),originalCompiler_1=require("../modules/corecompiler/originalCompiler"),locales_1=tslib_1.__importDefault(require("../utils/locales/locales")),index_1=require("../modules/index"),precompileProject_1=require("../project/advance/precompileProject"),precompiler_1=require("../modules/precompiler"),tools_1=require("./utils/tools");let compilerInstance;const getOriginalCompiler=async e=>{if(!compilerInstance||!compilerInstance.project||compilerInstance.project.projectPath!==e.projectPath){const r=new precompiler_1.ConditionCompiler(e,void 0,void 0),i=new precompileProject_1.PreCompileProject(e,r,{targetPlatform:"mini-weixin"});compilerInstance=new originalCompiler_1.OriginalCompiler(i)}return await compilerInstance.ready(),compilerInstance.setLocale(locales_1.default.getLocale()),compilerInstance};async function getBuilder(e,r){const i=new index_1.Builder(e,Object.assign({devtoolMessagehub:{showBuildLog:(e,r,i)=>{console.error("msg-"+e,"compile",r,i)}}},r));return await i.ready(),i}exports.getOriginalCompiler=getOriginalCompiler;const getCompiler=async(e,r,i={})=>{e.setting=(0,tools_1.formatCISetting)(e,r);return(await getBuilder(e,Object.assign({},i))).getCompiler()};exports.getCompiler=getCompiler;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.getCompiler=exports.getOriginalCompiler=void 0,exports.getBuilder=getBuilder;const tslib_1=require("tslib"),originalCompiler_1=require("../modules/corecompiler/originalCompiler"),locales_1=tslib_1.__importDefault(require("../utils/locales/locales")),index_1=require("../modules/index"),precompileProject_1=require("../project/advance/precompileProject"),precompiler_1=require("../modules/precompiler"),tools_1=require("./utils/tools");let compilerInstance;const getOriginalCompiler=async e=>{if(!compilerInstance||!compilerInstance.project||compilerInstance.project.projectPath!==e.projectPath){const r=new precompiler_1.ConditionCompiler(e,void 0,void 0),i=new precompileProject_1.PreCompileProject(e,r,{targetPlatform:"mini-weixin"});compilerInstance=new originalCompiler_1.OriginalCompiler(i)}return await compilerInstance.ready(),compilerInstance.setLocale(locales_1.default.getLocale()),compilerInstance};async function getBuilder(e,r){const i=new index_1.Builder(e,Object.assign({devtoolMessagehub:{showBuildLog:(e,r,i)=>{console.error(`msg-${e}`,"compile",r,i)}}},r));return await i.ready(),i}exports.getOriginalCompiler=getOriginalCompiler;const getCompiler=async(e,r,i={})=>{e.setting=(0,tools_1.formatCISetting)(e,r);return(await getBuilder(e,Object.assign({},i))).getCompiler()};exports.getCompiler=getCompiler;
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.getAndroidAabBuild=exports.getAndroidApkBuild=void 0;const tslib_1=require("tslib"),tools_1=require("../../utils/tools"),zip_1=require("../../utils/zip"),archive=tslib_1.__importStar(require("./archive")),miniappJson_1=require("../../utils/miniappJson"),android=tslib_1.__importStar(require("../android-miniapp-toolkit/dist/index")),log=tslib_1.__importStar(require("../../utils/log")),urlConfig=tslib_1.__importStar(require("../../config/url.config")),ciRequest_1=require("../utils/ciRequest"),sign_1=require("../../utils/sign"),request_1=require("../../utils/request"),path=require("path"),fs=require("fs-extra"),safeGet=require("licia/safeGet"),find=require("licia/find"),trim=require("licia/trim"),endWith=require("licia/endWith"),clone=require("licia/clone"),isUndef=require("licia/isUndef"),sleep=require("licia/sleep"),now=require("licia/now"),each=require("licia/each"),fileSize=require("licia/fileSize"),promisify=require("licia/promisify"),AdmZip=require("adm-zip"),rmdir=promisify(require("licia/rmdir"));var TaskStatus;!function(i){i[i.Pending=1]="Pending",i[i.Running=2]="Running",i[i.Success=3]="Success",i[i.Fail=4]="Fail"}(TaskStatus||(TaskStatus={}));const waitTimeout=3e5,waitInterval=1e4;class AndroidCloudBuild{constructor(i,t){this.baseDir="",this.infoPath="",this.androidDir="",this.res=Buffer.from([]),this.md5="",this.output="",this.skipCheckRemote=!1,this.packageName="",this.downloadRes=async i=>new Promise((t,e)=>{(0,request_1.simpleRequest)({url:i,method:"get",encoding:null},(i,s,a)=>{if(i)return e(i);t(a)})}),this.aab=i,this.project=t.project,this.ciOpts=t}async build(i,t,e){return await this.init(t),await this.checkBase()||await this.buildBase(),e&&(isUndef(e.keyStore)||""===trim(e.keyStore))&&(e={}),await this.buildCode(i),await this.buildResult(e),this.output}async init(i){const{aab:t,project:e}=this,s=(0,tools_1.generateMD5)(e.projectPath),a=await this.getPackageName();this.androidDir=path.posix.join(this.ciOpts.resourceDir,"android/"+s),this.baseDir=path.posix.join(this.androidDir,t?"aab":"apk"),this.infoPath=path.posix.join(this.androidDir,t?"info-aab.json":"info.json");const r=(0,miniappJson_1.tryGetAndroidMiniappJson)(e.projectPath).version||"",o=`${a}${r?"-"+r:""}.${t?"aab":"apk"}`;this.output=path.posix.join(i,o),this.skipCheckRemote=!1,this.packageName=a,await fs.ensureDir(this.androidDir),this.res=t?await android.pack({configPath:e.projectPath,aab:!0}):await android.pack({configPath:e.projectPath}),this.md5=(0,tools_1.generateMD5)(this.res),log.info(`本地 Android 配置资源打包,大小:${fileSize(this.res.length)} B`)}async buildCode(i){try{const{version:t,desc:e,miniappPkgType:s,remoteDebugEnable:a,useCloudSync:r=!1}=i,o="mini-android",n=this.project,c=path.posix.join(this.baseDir,this.aab?"base/assets/SaaA_embed":"assets/SaaA_embed");fs.existsSync(c)&&await fs.remove(c),await archive.buildProjectArchive(this.ciOpts,{version:t,desc:e,targetPlatform:o,outputDir:c,miniappOptions:{miniappPkgType:s,remoteDebugEnable:a,useCloudSync:r,archVersion:1,needClientJsExtInfo:(0,miniappJson_1.isAndroidNeedClientJsExtInfo)(n.projectPath)}}),log.info("构建项目资源包成功")}catch(i){throw i}}async checkBase(){return await this.checkLocal()||await this.checkRemote()}async checkLocal(){const{infoPath:i}=this;if(!fs.existsSync(i))return log.info("本地未找到基座 APK,需要远程构建"),!1;const t=JSON.parse(await fs.readFile(i,"utf8"));return t.packageName&&t.packageName!==this.packageName?(this.skipCheckRemote=!0,log.info("本地存在基座 APK,但已过期无法使用,需要远程构建"),!1):t.md5===this.md5?(log.info("本地存在符合基座 APK,直接使用"),!0):(log.info("本地存在基座 APK,但已过期无法使用,需要远程构建"),!1)}async checkRemote(){if(this.skipCheckRemote)return!1;const i=await this.waitForRemoteReady();if(i&&i.status===TaskStatus.Success)try{return await this.downloadBase(i.task_id),log.info("远程存在符合基座 APK,直接使用"),!0}catch(i){log.info(i.message)}else log.info("远程不存在基座 APK,需要构建");return!1}async buildBase(){const{infoPath:i}=this,t=await this.createTask();if(!t){if(fs.existsSync(i))return void log.error("该多端应用当周构建次数已用完,本次构建基于本地基座 APK,仅更新小程序代码");throw Error("该多端应用今日构建次数已用完")}log.info("任务创建成功,任务 ID: "+t);const e=await this.waitForRemoteReady();if(e){if(e.status!==TaskStatus.Success)throw e.status===TaskStatus.Fail?Error("基座 APK 构建失败,错误信息:"+e.errmsg):Error("基座 APK 构建超时,请稍候重试");await this.downloadBase(e.task_id)}}async buildResult(i){var t;const e=this.project,s=(0,miniappJson_1.tryGetAndroidMiniappJson)(e.projectPath);(null===(t=s.channel)||void 0===t?void 0:t.value)&&(this.output=`${this.output.slice(0,-4)}-${s.channel.value}${this.aab?".aab":".apk"}`),await this.genZip(),log.info("对 APK 进行签名");try{this.aab?await android.signV1(this.output,i):await android.sign(this.output,i)}catch(i){throw Error("APK 签名失败,请确保证书配置正确,错误信息:"+i.message)}log.info("APK 构建成功,保存位置:"+this.output)}async genZip(){const{baseDir:i,output:t}=this,e=new AdmZip;await e.addLocalFolderPromise(i);const s=clone(e.getEntries());this.aab?each(s,i=>{i.isDirectory&&(Object.defineProperty(i,"isDirectory",{get:()=>!1}),e.deleteFile(i))}):each(s,i=>{"resources.arsc"===i.entryName&&(i.header.method=0)});const a=await e.toBufferPromise();await fs.writeFile(t,a)}async createTask(){const i=this.project.appid,t=await(0,sign_1.getSignature)(this.project.privateKey,i),e=await(0,ciRequest_1.ciCustomRequest)(`${urlConfig.uploadCloudBuildResourcePack}?os_type=2&appid=${i}&signature=${encodeURIComponent(t)}&robot=${this.ciOpts.robot}`,this.res,{"content-type":"application/octet-stream"}),s=e.baseresponse||{errcode:-1e4},a=parseInt(s.errcode,10);if(0===a)return e.task_id;if(10002053===a)return"";throw Error("任务创建失败,错误码:"+a)}async waitForRemoteReady(){const i=now();for(;;){const t=await this.getTask();if(!t||t.status===TaskStatus.Success||t.status===TaskStatus.Fail||now()-i>3e5)return t;t.status===TaskStatus.Pending?log.info("检查任务状态,等待中..."):t.status===TaskStatus.Running&&log.info("检查任务状态,构建中..."),await sleep(1e4)}}async getTask(){const i=await this.getTaskList();return find(i,i=>!0===i.is_self)}async getTaskList(){return(await(0,ciRequest_1.ciSimpleRequest)({privateKey:this.project.privateKey,appid:this.project.appid,cgi:urlConfig.getCloudBuildTaskList+"?os_type=2",robot:this.ciOpts.robot})).list}async downloadBase(i){log.info("下载远程基座 APK,任务 ID:"+i);const{pkgUrl:t,resUrl:e}=await this.getTaskResultUrl(i),s=await this.downloadRes(e),a=(0,tools_1.generateMD5)(s);if(a!==this.md5)throw Error("远程存在基座 APK,但已过期无法使用,需要重新远程构建");await this.downloadPkg(t);const r={taskId:i,packageName:this.packageName,md5:a};await fs.writeFile(this.infoPath,JSON.stringify(r,null,2),"utf8")}downloadPkg(i){const{baseDir:t,infoPath:e}=this,s=path.resolve(this.androidDir,"base.zip"),a=fs.createWriteStream(s,{mode:511});return new Promise((r,o)=>{(0,request_1.simpleRequest)({url:i,method:"get"},i=>{i&&o(i)}).pipe(a),a.on("error",i=>{o(i)}),a.on("close",async()=>{try{fs.existsSync(e)&&await fs.unlink(e),fs.existsSync(t)&&await rmdir(t),await(0,zip_1.unzip)(s,t);const i=path.resolve(t,"META-INF"),a=await fs.readdir(i);for(let t=0,e=a.length;t<e;t++){const e=a[t];if(endWith(e,".RSA")||endWith(e,".SF")){const t=path.resolve(i,e);await fs.unlink(t)}}await fs.unlink(s)}catch(i){return o(i)}r({})})})}async getTaskResultUrl(i){const t=await(0,ciRequest_1.ciSimpleRequest)({cgi:`${urlConfig.getCloudBuildPkgUrl}?task_id=${i}`,privateKey:this.project.privateKey,appid:this.project.appid,robot:this.ciOpts.robot});return{pkgUrl:t.pkg_url,resUrl:t.resource_url}}async getPackageName(){const i=this.project,t=await i.miniappAttr();return safeGet(t,"mobileapp_info.android_package_name")||"com.tencent.weauth"}}const getAndroidApkBuild=i=>new AndroidCloudBuild(!1,i);exports.getAndroidApkBuild=getAndroidApkBuild;const getAndroidAabBuild=i=>new AndroidCloudBuild(!0,i);exports.getAndroidAabBuild=getAndroidAabBuild;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.getAndroidAabBuild=exports.getAndroidApkBuild=void 0;const tslib_1=require("tslib"),tools_1=require("../../utils/tools"),zip_1=require("../../utils/zip"),archive=tslib_1.__importStar(require("./archive")),miniappJson_1=require("../../utils/miniappJson"),android=tslib_1.__importStar(require("../android-miniapp-toolkit/dist/index")),log=tslib_1.__importStar(require("../../utils/log")),urlConfig=tslib_1.__importStar(require("../../config/url.config")),ciRequest_1=require("../utils/ciRequest"),sign_1=require("../../utils/sign"),request_1=require("../../utils/request"),path=require("path"),fs=require("fs-extra"),safeGet=require("licia/safeGet"),find=require("licia/find"),trim=require("licia/trim"),endWith=require("licia/endWith"),clone=require("licia/clone"),isUndef=require("licia/isUndef"),sleep=require("licia/sleep"),now=require("licia/now"),each=require("licia/each"),fileSize=require("licia/fileSize"),promisify=require("licia/promisify"),AdmZip=require("adm-zip"),rmdir=promisify(require("licia/rmdir"));var TaskStatus;!function(i){i[i.Pending=1]="Pending",i[i.Running=2]="Running",i[i.Success=3]="Success",i[i.Fail=4]="Fail"}(TaskStatus||(TaskStatus={}));const waitTimeout=3e5,waitInterval=1e4;class AndroidCloudBuild{constructor(i,t){this.baseDir="",this.infoPath="",this.androidDir="",this.res=Buffer.from([]),this.md5="",this.output="",this.skipCheckRemote=!1,this.packageName="",this.downloadRes=async i=>new Promise(((t,e)=>{(0,request_1.simpleRequest)({url:i,method:"get",encoding:null},((i,s,a)=>{if(i)return e(i);t(a)}))})),this.aab=i,this.project=t.project,this.ciOpts=t}async build(i,t,e){return await this.init(t),await this.checkBase()||await this.buildBase(),e&&(isUndef(e.keyStore)||""===trim(e.keyStore))&&(e={}),await this.buildCode(i),await this.buildResult(e),this.output}async init(i){const{aab:t,project:e}=this,s=(0,tools_1.generateMD5)(e.projectPath),a=await this.getPackageName();this.androidDir=path.posix.join(this.ciOpts.resourceDir,`android/${s}`),this.baseDir=path.posix.join(this.androidDir,t?"aab":"apk"),this.infoPath=path.posix.join(this.androidDir,t?"info-aab.json":"info.json");const r=(0,miniappJson_1.tryGetAndroidMiniappJson)(e.projectPath).version||"",o=`${a}${r?`-${r}`:""}.${t?"aab":"apk"}`;this.output=path.posix.join(i,o),this.skipCheckRemote=!1,this.packageName=a,await fs.ensureDir(this.androidDir),this.res=t?await android.pack({configPath:e.projectPath,aab:!0}):await android.pack({configPath:e.projectPath}),this.md5=(0,tools_1.generateMD5)(this.res),log.info(`本地 Android 配置资源打包,大小:${fileSize(this.res.length)} B`)}async buildCode(i){try{const{version:t,desc:e,miniappPkgType:s,remoteDebugEnable:a,useCloudSync:r=!1}=i,o="mini-android",n=this.project,c=path.posix.join(this.baseDir,this.aab?"base/assets/SaaA_embed":"assets/SaaA_embed");fs.existsSync(c)&&await fs.remove(c),await archive.buildProjectArchive(this.ciOpts,{version:t,desc:e,targetPlatform:o,outputDir:c,miniappOptions:{miniappPkgType:s,remoteDebugEnable:a,useCloudSync:r,archVersion:1,needClientJsExtInfo:(0,miniappJson_1.isAndroidNeedClientJsExtInfo)(n.projectPath)}}),log.info("构建项目资源包成功")}catch(i){throw i}}async checkBase(){return await this.checkLocal()||await this.checkRemote()}async checkLocal(){const{infoPath:i}=this;if(!fs.existsSync(i))return log.info("本地未找到基座 APK,需要远程构建"),!1;const t=JSON.parse(await fs.readFile(i,"utf8"));return t.packageName&&t.packageName!==this.packageName?(this.skipCheckRemote=!0,log.info("本地存在基座 APK,但已过期无法使用,需要远程构建"),!1):t.md5===this.md5?(log.info("本地存在符合基座 APK,直接使用"),!0):(log.info("本地存在基座 APK,但已过期无法使用,需要远程构建"),!1)}async checkRemote(){if(this.skipCheckRemote)return!1;const i=await this.waitForRemoteReady();if(i&&i.status===TaskStatus.Success)try{return await this.downloadBase(i.task_id),log.info("远程存在符合基座 APK,直接使用"),!0}catch(i){log.info(i.message)}else log.info("远程不存在基座 APK,需要构建");return!1}async buildBase(){const{infoPath:i}=this,t=await this.createTask();if(!t){if(fs.existsSync(i))return void log.error("该多端应用当周构建次数已用完,本次构建基于本地基座 APK,仅更新小程序代码");throw Error("该多端应用今日构建次数已用完")}log.info(`任务创建成功,任务 ID: ${t}`);const e=await this.waitForRemoteReady();if(e){if(e.status!==TaskStatus.Success)throw e.status===TaskStatus.Fail?Error(`基座 APK 构建失败,错误信息:${e.errmsg}`):Error("基座 APK 构建超时,请稍候重试");await this.downloadBase(e.task_id)}}async buildResult(i){var t;const e=this.project,s=(0,miniappJson_1.tryGetAndroidMiniappJson)(e.projectPath);(null===(t=s.channel)||void 0===t?void 0:t.value)&&(this.output=`${this.output.slice(0,-4)}-${s.channel.value}${this.aab?".aab":".apk"}`),await this.genZip(),log.info("对 APK 进行签名");try{this.aab?await android.signV1(this.output,i):await android.sign(this.output,i)}catch(i){throw Error(`APK 签名失败,请确保证书配置正确,错误信息:${i.message}`)}log.info(`APK 构建成功,保存位置:${this.output}`)}async genZip(){const{baseDir:i,output:t}=this,e=new AdmZip;await e.addLocalFolderPromise(i);const s=clone(e.getEntries());this.aab?each(s,(i=>{i.isDirectory&&(Object.defineProperty(i,"isDirectory",{get:()=>!1}),e.deleteFile(i))})):each(s,(i=>{"resources.arsc"===i.entryName&&(i.header.method=0)}));const a=await e.toBufferPromise();await fs.writeFile(t,a)}async createTask(){const i=this.project.appid,t=await(0,sign_1.getSignature)(this.project.privateKey,i),e=await(0,ciRequest_1.ciCustomRequest)(`${urlConfig.uploadCloudBuildResourcePack}?os_type=2&appid=${i}&signature=${encodeURIComponent(t)}&robot=${this.ciOpts.robot}`,this.res,{"content-type":"application/octet-stream"}),s=e.baseresponse||{errcode:-1e4},a=parseInt(s.errcode,10);if(0===a)return e.task_id;if(10002053===a)return"";throw Error(`任务创建失败,错误码:${a}`)}async waitForRemoteReady(){const i=now();for(;;){const t=await this.getTask();if(!t||t.status===TaskStatus.Success||t.status===TaskStatus.Fail||now()-i>3e5)return t;t.status===TaskStatus.Pending?log.info("检查任务状态,等待中..."):t.status===TaskStatus.Running&&log.info("检查任务状态,构建中..."),await sleep(1e4)}}async getTask(){const i=await this.getTaskList();return find(i,(i=>!0===i.is_self))}async getTaskList(){return(await(0,ciRequest_1.ciSimpleRequest)({privateKey:this.project.privateKey,appid:this.project.appid,cgi:`${urlConfig.getCloudBuildTaskList}?os_type=2`,robot:this.ciOpts.robot})).list}async downloadBase(i){log.info(`下载远程基座 APK,任务 ID:${i}`);const{pkgUrl:t,resUrl:e}=await this.getTaskResultUrl(i),s=await this.downloadRes(e),a=(0,tools_1.generateMD5)(s);if(a!==this.md5)throw Error("远程存在基座 APK,但已过期无法使用,需要重新远程构建");await this.downloadPkg(t);const r={taskId:i,packageName:this.packageName,md5:a};await fs.writeFile(this.infoPath,JSON.stringify(r,null,2),"utf8")}downloadPkg(i){const{baseDir:t,infoPath:e}=this,s=path.resolve(this.androidDir,"base.zip"),a=fs.createWriteStream(s,{mode:511});return new Promise(((r,o)=>{(0,request_1.simpleRequest)({url:i,method:"get"},(i=>{i&&o(i)})).pipe(a),a.on("error",(i=>{o(i)})),a.on("close",(async()=>{try{fs.existsSync(e)&&await fs.unlink(e),fs.existsSync(t)&&await rmdir(t),await(0,zip_1.unzip)(s,t);const i=path.resolve(t,"META-INF"),a=await fs.readdir(i);for(let t=0,e=a.length;t<e;t++){const e=a[t];if(endWith(e,".RSA")||endWith(e,".SF")){const t=path.resolve(i,e);await fs.unlink(t)}}await fs.unlink(s)}catch(i){return o(i)}r({})}))}))}async getTaskResultUrl(i){const t=await(0,ciRequest_1.ciSimpleRequest)({cgi:`${urlConfig.getCloudBuildPkgUrl}?task_id=${i}`,privateKey:this.project.privateKey,appid:this.project.appid,robot:this.ciOpts.robot});return{pkgUrl:t.pkg_url,resUrl:t.resource_url}}async getPackageName(){const i=this.project,t=await i.miniappAttr();return safeGet(t,"mobileapp_info.android_package_name")||"com.tencent.weauth"}}const getAndroidApkBuild=i=>new AndroidCloudBuild(!1,i);exports.getAndroidApkBuild=getAndroidApkBuild;const getAndroidAabBuild=i=>new AndroidCloudBuild(!0,i);exports.getAndroidAabBuild=getAndroidAabBuild;
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.getUploadOptions=getUploadOptions,exports.buildProjectArchive=buildProjectArchive;const tslib_1=require("tslib"),tools_1=require("../../utils/tools"),log=tslib_1.__importStar(require("../../utils/log")),upload_1=require("./upload"),url_config_1=require("../../config/url.config"),sign_1=require("../../utils/sign"),jsonParse_1=require("../../utils/jsonParse"),unpack_1=tslib_1.__importDefault(require("../utils/unpack")),app_1=require("../../modules/fullcompiler/app/app"),miniappJson_1=require("../../utils/miniappJson"),path=require("path"),fse=require("fs-extra"),request=require("request"),QueryString=require("querystring");function getUploadOptions(){return{appLaunchInfo:{},uploadType:"build",autoTestMock:!1,onProgressUpdate:(...e)=>{log.info(...e)},onFilesIgnored:()=>{},onFilesMissing:()=>{},remoteDebug:!1,remoteProxyPort:void 0,disableUrlCheck:!1,autoPreview:!1,cdpEnabled:!1,remoteAppservice:!1,remoteAppserviceType:"ios",noMaps:!1,showProgress:!1}}async function downloadWxapkg(e,o,n,r,i,t,s){const{project:a,robot:p}=e,l=await(0,sign_1.getSignature)(a.privateKey,a.appid),c={appid:a.appid,pkg_source:"Release"===i?4:3,pkg_type:n?4:0,use_cloud_sync:t?1:0,os_type:"mini-android"===r?2:1,need_client_js_ext_info:"mini-android"===r?s:1,signature:l,robot:p},u=fse.createWriteStream(o,{mode:511});return new Promise((e,o)=>{const n=request({url:`${url_config_1.getPkgWxapkg}?${QueryString.stringify(c)}`,method:"get"},e=>{e&&o(e)});n.on("response",r=>{const i=r.headers["content-type"];if(null==i?void 0:i.toLocaleLowerCase().includes("text/plain")){let e="";r.on("data",o=>{e+=o}),r.on("end",()=>{var n,r,i;try{e=(0,jsonParse_1.jsonRespParse)(e,url_config_1.getPkgWxapkg);const t=null!==(n=e.baseresponse)&&void 0!==n?n:{},s=null!==(r=t.errcode)&&void 0!==r?r:-1,a=null!==(i=t.errmsg)&&void 0!==i?i:"request fail";o(`errcode ${s}, errmsg ${a}`)}catch(e){o(e)}})}else n.pipe(u),u.on("error",e=>{log.error("download miniapp wxapkg error:"+e.message),o(e)}),u.on("close",()=>{e({})});r.on("error",e=>{o(e)})})}).catch(e=>{throw new Error(`${url_config_1.getPkgWxapkg} fail ${e}`)})}async function extractWxapkgToAppDir(e){const o=e.replace(".wxapkg","");fse.ensureDirSync(o),fse.emptyDirSync(o);const n=fse.readFileSync(e);try{await(0,unpack_1.default)(n,o)}catch(e){let o=n.toString("utf8");o.length>100&&(o=o.slice(0,100));const r=`Download pkg error: ${o} (${e.msg})`;throw new Error(r)}return o}async function genSubPkgAppInfo(e,o,n,r,i,t,s){var a;const{project:p,targetPlatform:l}=this,c=(0,miniappJson_1.getMiniappJson)(p.projectPath,l),u=c.icon,g=c.name,d=(0,miniappJson_1.getRawAppJSON)(p.projectPath),f=(null===(a=null==d?void 0:d.window)||void 0===a?void 0:a.pageOrientation)||"portrait",m=await(0,app_1.generateSubPkgAppInfoJson)({miniModuleId:e,nickName:g,brandIconURL:u,pageOrientation:f,buildVersion:r,subpkgs:o,contact:i,cpfWxaAttrSyncResponse:t,miniappPkgType:s});fse.ensureDirSync(path.dirname(n)),fse.writeJSONSync(n,m)}async function buildProjectArchive(e,o){var n;let r,i="";try{const t=e.project,{module_info:s={}}=await t.miniappAttr()||{};if(!s.module_id)throw new Error("project.miniapp.json 尚未配置 miniModuleId");log.info("构建项目资源包中...");const a=null!==(n=(await(0,upload_1.upload)(Object.assign(Object.assign(Object.assign({},e),o),getUploadOptions()))).useSubPkg)&&void 0!==n&&n,{miniappOptions:p,outputDir:l}=o,{miniappPkgType:c,useCloudSync:u,needClientJsExtInfo:g}=p;log.info("下载项目资源包中..."),r=path.join(e.resourceDir,"app.wxapkg"),await downloadWxapkg(e,r,a,o.targetPlatform,c,u,g),log.info("下载项目资源包成功"),log.info("生成项目资源包中..."),i=await extractWxapkgToAppDir(r);const d=fse.readJsonSync(path.join(i,"info.json"));if(0===d.wxapkgs.length)throw new Error("构建项目资源包失败: 获取不到 wxapkg");fse.ensureDirSync(l),fse.emptyDirSync(l),d.wxapkgs.forEach(e=>{const o=path.join(l,e.file),n=o+".sign";fse.moveSync(path.join(i,e.file),o),fse.moveSync(path.join(i,e.signFile),n);const r=fse.readFileSync(o);e.md5=(0,tools_1.generateMD5)(r),e.versionType=null==p?void 0:p.miniappPkgType});const f=path.join(l,"buildinfo.json");await genSubPkgAppInfo.call(Object.assign(Object.assign({},e),o),s.module_id,d.wxapkgs,f,d.buildVersion,d.contact,d.cpfWxaAttrSyncResponse,p.miniappPkgType),log.info("生成项目资源包成功")}catch(e){throw new Error("build project archive error: "+e.message)}finally{i&&fse.existsSync(i)&&fse.removeSync(i)}}
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.getUploadOptions=getUploadOptions,exports.buildProjectArchive=buildProjectArchive;const tslib_1=require("tslib"),tools_1=require("../../utils/tools"),log=tslib_1.__importStar(require("../../utils/log")),upload_1=require("./upload"),url_config_1=require("../../config/url.config"),sign_1=require("../../utils/sign"),jsonParse_1=require("../../utils/jsonParse"),unpack_1=tslib_1.__importDefault(require("../utils/unpack")),app_1=require("../../modules/fullcompiler/app/app"),miniappJson_1=require("../../utils/miniappJson"),path=require("path"),fse=require("fs-extra"),request=require("request"),QueryString=require("querystring");function getUploadOptions(){return{appLaunchInfo:{},uploadType:"build",autoTestMock:!1,onProgressUpdate:(...e)=>{log.info(...e)},onFilesIgnored:()=>{},onFilesMissing:()=>{},remoteDebug:!1,remoteProxyPort:void 0,disableUrlCheck:!1,autoPreview:!1,cdpEnabled:!1,remoteAppservice:!1,remoteAppserviceType:"ios",noMaps:!1,showProgress:!1}}async function downloadWxapkg(e,o,n,r,i,t,s){const{project:a,robot:p}=e,l=await(0,sign_1.getSignature)(a.privateKey,a.appid),c={appid:a.appid,pkg_source:"Release"===i?4:3,pkg_type:n?4:0,use_cloud_sync:t?1:0,os_type:"mini-android"===r?2:1,need_client_js_ext_info:"mini-android"===r?s:1,signature:l,robot:p},u=fse.createWriteStream(o,{mode:511});return new Promise(((e,o)=>{const n=request({url:`${url_config_1.getPkgWxapkg}?${QueryString.stringify(c)}`,method:"get"},(e=>{e&&o(e)}));n.on("response",(r=>{const i=r.headers["content-type"];if(null==i?void 0:i.toLocaleLowerCase().includes("text/plain")){let e="";r.on("data",(o=>{e+=o})),r.on("end",(()=>{var n,r,i;try{e=(0,jsonParse_1.jsonRespParse)(e,url_config_1.getPkgWxapkg);const t=null!==(n=e.baseresponse)&&void 0!==n?n:{},s=null!==(r=t.errcode)&&void 0!==r?r:-1,a=null!==(i=t.errmsg)&&void 0!==i?i:"request fail";o(`errcode ${s}, errmsg ${a}`)}catch(e){o(e)}}))}else n.pipe(u),u.on("error",(e=>{log.error(`download miniapp wxapkg error:${e.message}`),o(e)})),u.on("close",(()=>{e({})}));r.on("error",(e=>{o(e)}))}))})).catch((e=>{throw new Error(`${url_config_1.getPkgWxapkg} fail ${e}`)}))}async function extractWxapkgToAppDir(e){const o=e.replace(".wxapkg","");fse.ensureDirSync(o),fse.emptyDirSync(o);const n=fse.readFileSync(e);try{await(0,unpack_1.default)(n,o)}catch(e){let o=n.toString("utf8");o.length>100&&(o=o.slice(0,100));const r=`Download pkg error: ${o} (${e.msg})`;throw new Error(r)}return o}async function genSubPkgAppInfo(e,o,n,r,i,t,s){var a;const{project:p,targetPlatform:l}=this,c=(0,miniappJson_1.getMiniappJson)(p.projectPath,l),u=c.icon,g=c.name,d=(0,miniappJson_1.getRawAppJSON)(p.projectPath),f=(null===(a=null==d?void 0:d.window)||void 0===a?void 0:a.pageOrientation)||"portrait",m=await(0,app_1.generateSubPkgAppInfoJson)({miniModuleId:e,nickName:g,brandIconURL:u,pageOrientation:f,buildVersion:r,subpkgs:o,contact:i,cpfWxaAttrSyncResponse:t,miniappPkgType:s});fse.ensureDirSync(path.dirname(n)),fse.writeJSONSync(n,m)}async function buildProjectArchive(e,o){var n;let r,i="";try{const t=e.project,{module_info:s={}}=await t.miniappAttr()||{};if(!s.module_id)throw new Error("project.miniapp.json 尚未配置 miniModuleId");log.info("构建项目资源包中...");const a=null!==(n=(await(0,upload_1.upload)(Object.assign(Object.assign(Object.assign({},e),o),getUploadOptions()))).useSubPkg)&&void 0!==n&&n,{miniappOptions:p,outputDir:l}=o,{miniappPkgType:c,useCloudSync:u,needClientJsExtInfo:g}=p;log.info("下载项目资源包中..."),r=path.join(e.resourceDir,"app.wxapkg"),await downloadWxapkg(e,r,a,o.targetPlatform,c,u,g),log.info("下载项目资源包成功"),log.info("生成项目资源包中..."),i=await extractWxapkgToAppDir(r);const d=fse.readJsonSync(path.join(i,"info.json"));if(0===d.wxapkgs.length)throw new Error("构建项目资源包失败: 获取不到 wxapkg");fse.ensureDirSync(l),fse.emptyDirSync(l),d.wxapkgs.forEach((e=>{const o=path.join(l,e.file),n=`${o}.sign`;fse.moveSync(path.join(i,e.file),o),fse.moveSync(path.join(i,e.signFile),n);const r=fse.readFileSync(o);e.md5=(0,tools_1.generateMD5)(r),e.versionType=null==p?void 0:p.miniappPkgType}));const f=path.join(l,"buildinfo.json");await genSubPkgAppInfo.call(Object.assign(Object.assign({},e),o),s.module_id,d.wxapkgs,f,d.buildVersion,d.contact,d.cpfWxaAttrSyncResponse,p.miniappPkgType),log.info("生成项目资源包成功")}catch(e){throw new Error(`build project archive error: ${e.message}`)}finally{i&&fse.existsSync(i)&&fse.removeSync(i)}}
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.getIOSCloudBuild=void 0;const tslib_1=require("tslib"),tools_1=require("../../utils/tools"),miniappJson_1=require("../../utils/miniappJson"),getcompiler_1=require("../getcompiler"),log=tslib_1.__importStar(require("../../utils/log")),packfile_1=require("../utils/packfile"),archive=tslib_1.__importStar(require("./archive")),urlConfig=tslib_1.__importStar(require("../../config/url.config")),ciRequest_1=require("../utils/ciRequest"),sign_1=require("../../utils/sign"),request_1=require("../../utils/request"),zip_1=require("../../utils/zip"),zlib_1=tslib_1.__importDefault(require("zlib")),path=require("path"),fs=require("fs-extra"),safeGet=require("licia/safeGet"),promisify=require("licia/promisify"),fileSize=require("licia/fileSize"),now=require("licia/now"),find=require("licia/find"),sleep=require("licia/sleep"),gzip=promisify(zlib_1.default.gzip);var OSType,TaskStatus;!function(i){i[i.iOS=1]="iOS",i[i.Android=2]="Android"}(OSType||(OSType={})),function(i){i[i.Pending=1]="Pending",i[i.Running=2]="Running",i[i.Success=3]="Success",i[i.Fail=4]="Fail"}(TaskStatus||(TaskStatus={}));const waitTimeout=3e5,waitInterval=1e4,TransformTipsURL="https://web-v2-1g8g0y2x3197301a-1304825656.tcloudbaseapp.com/important_miniapp/MiniAppBuildTips.json?sign=0f07b014a760d699cf2c8a9bb84845bf&t=1724920547";class IOSCloudBuild{constructor(i){this.baseDir="",this.materialDir="",this.iOSDir="",this.iPADir="",this.res=Buffer.from([]),this.md5="",this.output="",this.buildSuccess=!1,this.logAbPath="",this.project=i.project,this.ciOpts=i}async build(i,t,e){return this.cloudBuildOptions=t,await this.init(e),await this.buildMaterial(i),await this.buildBase(),await this.buildResult(),this.output}async init(i){const t=this.project,e=(0,tools_1.generateMD5)(t.projectPath),s=await this.getBundleId();if(this.iOSDir=path.join(this.ciOpts.resourceDir,"iOSCloudBuild/"+e),this.baseDir=path.join(this.iOSDir),this.materialDir=path.join(this.iOSDir,"project"),this.iPADir=path.join(this.iOSDir,"ipa"),i){const e=(0,miniappJson_1.tryGetAndroidMiniappJson)(t.projectPath).version||"",a=this.getFinalIpaName(s,e);this.output=path.posix.join(i,a)}else this.output=path.posix.join(this.iOSDir,"app.ipa");await fs.ensureDir(this.iOSDir),await fs.ensureDir(this.materialDir),await fs.emptyDir(this.materialDir)}async packAllFilesInDir(i){const t=await(0,packfile_1.packFiledir)(i);return await gzip(t.data)}async buildMaterial(i){let t;try{t=await(0,getcompiler_1.getBuilder)(this.project,{devtoolMessagehub:{showBuildLog:(i,t,e)=>{log.info("miniprogram-ci native compile",t,e)}}});const e=await t.getNativeCompiler();await e.packIOSCloudBuildMaterial(Object.assign(Object.assign({},this.cloudBuildOptions),{matrialDistPath:this.materialDir})),await this.buildCode(i),this.res=await this.packAllFilesInDir(this.materialDir),this.md5=(0,tools_1.generateMD5)(this.res),log.info(`本地 iOS 配置资源打包,大小:${fileSize(this.res.length)} B`)}catch(i){throw i}finally{null==t||t.destroy()}}async buildCode(i){try{const{version:t,desc:e,miniappPkgType:s,remoteDebugEnable:a,useCloudSync:r=!1}=i,o="mini-ios",n=path.posix.join(this.materialDir,"__miniappWxapkg");if(fs.existsSync(n)&&await fs.remove(n),await archive.buildProjectArchive(this.ciOpts,{version:t,desc:e,targetPlatform:o,outputDir:n,miniappOptions:{miniappPkgType:s,remoteDebugEnable:a,useCloudSync:r,archVersion:1}}),!fs.existsSync(n))throw new Error("ios cloudbuild failed: cant find buildCode result: "+n);log.info("构建项目资源包成功")}catch(i){throw i}}async buildBase(){const i=await this.createTask();if(!i)throw Error("该多端应用当周构建次数已用完,本次构建基于本地基座 IOS,仅更新小程序代码");log.info("任务创建成功,任务 ID: "+i);const t=await this.waitForRemoteReady();if(t)if(t.status===TaskStatus.Success)this.buildSuccess=!0,await this.downloadBase(t.task_id,!0);else{if(t.status!==TaskStatus.Fail)throw Error("iOS App 远程云构建超时,请稍候重试");this.buildSuccess=!1,log.info("IPA 构建失败,错误信息:"+t.errmsg),await this.downloadBase(t.task_id,!1)}}async buildResult(){if(!this.buildSuccess){log.info("下载日志成功,保存位置:"+this.output);let{body:i}=await(0,request_1.request)({url:TransformTipsURL,method:"get"});try{i=JSON.parse(i)}catch(i){}const t=null==i?void 0:i.ios,e=(fs.readdirSync(this.logAbPath)||[]).find(i=>i.endsWith(".log"));let s=!1;throw e&&t&&fs.readFileSync(path.join(this.logAbPath,e),{encoding:"utf8"}).split("\n").forEach(i=>{const e=Object.keys(t).find(t=>i.includes(t));e&&(s=!0,log.error(`[${t[e].code}] ${t[e].msg} 原信息:${i}`))}),s?new Error("错误详细日志如上"):new Error("IPA 构建失败,请前往社区反馈 https://developers.weixin.qq.com/community/minihome/mixflow/2889188691586351105")}log.info("IPA 构建成功,保存位置:"+this.output)}async createTask(){const i=this.project.appid,t=await(0,sign_1.getSignature)(this.project.privateKey,i),e=await(0,ciRequest_1.ciCustomRequest)(`${urlConfig.uploadCloudBuildResourcePack}?os_type=${OSType.iOS}&appid=${i}&signature=${encodeURIComponent(t)}&robot=${this.ciOpts.robot}`,this.res,{"content-type":"application/octet-stream"}),s=e.baseresponse||{errcode:-1e4},a=parseInt(s.errcode,10);if(0===a)return e.task_id;if(10002053===a)return"";throw Error("任务创建失败,错误码:"+a)}async waitForRemoteReady(){const i=now();for(;;){const t=await this.getTask();if(!t||t.status===TaskStatus.Success||t.status===TaskStatus.Fail||now()-i>3e5)return t;t.status===TaskStatus.Pending?log.info("检查任务状态,等待中..."):t.status===TaskStatus.Running&&log.info("检查任务状态,构建中..."),await sleep(1e4)}}async getTask(){const i=await this.getTaskList();return find(i,i=>!0===i.is_self)}async getTaskList(){return(await(0,ciRequest_1.ciSimpleRequest)({privateKey:this.project.privateKey,appid:this.project.appid,cgi:`${urlConfig.getCloudBuildTaskList}?os_type=${OSType.iOS}`,robot:this.ciOpts.robot})).list}async downloadBase(i,t){t?log.info("下载远程 IPA,任务 ID:"+i):log.info("下载远程日志文件,任务 ID:"+i);const{pkgUrl:e}=await this.getTaskResultUrl(i);await this.downloadIPA(e,i,t)}downloadIPA(i,t,e){const s=path.resolve(this.iOSDir,t+"/resultZip.zip"),a=path.resolve(this.iOSDir,t+"/result");fs.ensureFileSync(s),fs.ensureDirSync(a);const r=fs.createWriteStream(s,{mode:511});return new Promise((t,o)=>{(0,request_1.simpleRequest)({url:i,method:"get"},i=>{i&&o(i+" at iosCloudBuild download ipa request")}).pipe(r),r.on("error",i=>{o(i+" at iosCloudBuild download ipa deststream")}),r.on("close",async()=>{try{await(0,zip_1.unzip)(s,a)}catch(i){return o(e?"failed process zip file":"build failed! (Cant extract log dir)")}try{const i=fs.readdirSync(a);if(!e){const i=path.join(a,"log");if(fs.existsSync(i)){const e=path.parse(this.output),s=path.posix.join(e.dir,e.name+"_log");return fs.copySync(i,s),this.logAbPath=i,this.output=s,t({})}return o("cant find log dir in result")}{const t=i.find(i=>".ipa"===path.extname(i));if(!t)return o("ipa is not in result");fs.copyFileSync(path.join(a,t),this.output)}}catch(i){return o()}t({})})})}async getTaskResultUrl(i){const t=await(0,ciRequest_1.ciSimpleRequest)({cgi:`${urlConfig.getCloudBuildPkgUrl}?task_id=${i}`,privateKey:this.project.privateKey,appid:this.project.appid,robot:this.ciOpts.robot});return{pkgUrl:t.pkg_url,resUrl:t.resource_url}}async getBundleId(){const i=this.project,t=await i.miniappAttr()||{};return safeGet(t,"mobileapp_info.bundle_id")||"com.tencent.weauth"}getFinalIpaName(i,t){return`${i.replace(/[.*]/g,"")}-${t}.ipa`}}const getIOSCloudBuild=i=>new IOSCloudBuild(i);exports.getIOSCloudBuild=getIOSCloudBuild;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.getIOSCloudBuild=void 0;const tslib_1=require("tslib"),tools_1=require("../../utils/tools"),miniappJson_1=require("../../utils/miniappJson"),getcompiler_1=require("../getcompiler"),log=tslib_1.__importStar(require("../../utils/log")),packfile_1=require("../utils/packfile"),archive=tslib_1.__importStar(require("./archive")),urlConfig=tslib_1.__importStar(require("../../config/url.config")),ciRequest_1=require("../utils/ciRequest"),sign_1=require("../../utils/sign"),request_1=require("../../utils/request"),zip_1=require("../../utils/zip"),zlib_1=tslib_1.__importDefault(require("zlib")),path=require("path"),fs=require("fs-extra"),safeGet=require("licia/safeGet"),promisify=require("licia/promisify"),fileSize=require("licia/fileSize"),now=require("licia/now"),find=require("licia/find"),sleep=require("licia/sleep"),gzip=promisify(zlib_1.default.gzip);var OSType,TaskStatus;!function(i){i[i.iOS=1]="iOS",i[i.Android=2]="Android"}(OSType||(OSType={})),function(i){i[i.Pending=1]="Pending",i[i.Running=2]="Running",i[i.Success=3]="Success",i[i.Fail=4]="Fail"}(TaskStatus||(TaskStatus={}));const waitTimeout=3e5,waitInterval=1e4,TransformTipsURL="https://web-v2-1g8g0y2x3197301a-1304825656.tcloudbaseapp.com/important_miniapp/MiniAppBuildTips.json?sign=0f07b014a760d699cf2c8a9bb84845bf&t=1724920547";class IOSCloudBuild{constructor(i){this.baseDir="",this.materialDir="",this.iOSDir="",this.iPADir="",this.res=Buffer.from([]),this.md5="",this.output="",this.buildSuccess=!1,this.logAbPath="",this.project=i.project,this.ciOpts=i}async build(i,t,e){return this.cloudBuildOptions=t,await this.init(e),await this.buildMaterial(i),await this.buildBase(),await this.buildResult(),this.output}async init(i){const t=this.project,e=(0,tools_1.generateMD5)(t.projectPath),s=await this.getBundleId();if(this.iOSDir=path.join(this.ciOpts.resourceDir,`iOSCloudBuild/${e}`),this.baseDir=path.join(this.iOSDir),this.materialDir=path.join(this.iOSDir,"project"),this.iPADir=path.join(this.iOSDir,"ipa"),i){const e=(0,miniappJson_1.tryGetAndroidMiniappJson)(t.projectPath).version||"",a=this.getFinalIpaName(s,e);this.output=path.posix.join(i,a)}else this.output=path.posix.join(this.iOSDir,"app.ipa");await fs.ensureDir(this.iOSDir),await fs.ensureDir(this.materialDir),await fs.emptyDir(this.materialDir)}async packAllFilesInDir(i){const t=await(0,packfile_1.packFiledir)(i);return await gzip(t.data)}async buildMaterial(i){let t;try{t=await(0,getcompiler_1.getBuilder)(this.project,{devtoolMessagehub:{showBuildLog:(i,t,e)=>{log.info("miniprogram-ci native compile",t,e)}}});const e=await t.getNativeCompiler();await e.packIOSCloudBuildMaterial(Object.assign(Object.assign({},this.cloudBuildOptions),{matrialDistPath:this.materialDir})),await this.buildCode(i),this.res=await this.packAllFilesInDir(this.materialDir),this.md5=(0,tools_1.generateMD5)(this.res),log.info(`本地 iOS 配置资源打包,大小:${fileSize(this.res.length)} B`)}catch(i){throw i}finally{null==t||t.destroy()}}async buildCode(i){try{const{version:t,desc:e,miniappPkgType:s,remoteDebugEnable:a,useCloudSync:r=!1}=i,o="mini-ios",n=path.posix.join(this.materialDir,"__miniappWxapkg");if(fs.existsSync(n)&&await fs.remove(n),await archive.buildProjectArchive(this.ciOpts,{version:t,desc:e,targetPlatform:o,outputDir:n,miniappOptions:{miniappPkgType:s,remoteDebugEnable:a,useCloudSync:r,archVersion:1}}),!fs.existsSync(n))throw new Error(`ios cloudbuild failed: cant find buildCode result: ${n}`);log.info("构建项目资源包成功")}catch(i){throw i}}async buildBase(){const i=await this.createTask();if(!i)throw Error("该多端应用当周构建次数已用完,本次构建基于本地基座 IOS,仅更新小程序代码");log.info(`任务创建成功,任务 ID: ${i}`);const t=await this.waitForRemoteReady();if(t)if(t.status===TaskStatus.Success)this.buildSuccess=!0,await this.downloadBase(t.task_id,!0);else{if(t.status!==TaskStatus.Fail)throw Error("iOS App 远程云构建超时,请稍候重试");this.buildSuccess=!1,log.info(`IPA 构建失败,错误信息:${t.errmsg}`),await this.downloadBase(t.task_id,!1)}}async buildResult(){if(!this.buildSuccess){log.info(`下载日志成功,保存位置:${this.output}`);let{body:i}=await(0,request_1.request)({url:TransformTipsURL,method:"get"});try{i=JSON.parse(i)}catch(i){}const t=null==i?void 0:i.ios,e=(fs.readdirSync(this.logAbPath)||[]).find((i=>i.endsWith(".log")));let s=!1;throw e&&t&&fs.readFileSync(path.join(this.logAbPath,e),{encoding:"utf8"}).split("\n").forEach((i=>{const e=Object.keys(t).find((t=>i.includes(t)));e&&(s=!0,log.error(`[${t[e].code}] ${t[e].msg} 原信息:${i}`))})),s?new Error("错误详细日志如上"):new Error("IPA 构建失败,请前往社区反馈 https://developers.weixin.qq.com/community/minihome/mixflow/2889188691586351105")}log.info(`IPA 构建成功,保存位置:${this.output}`)}async createTask(){const i=this.project.appid,t=await(0,sign_1.getSignature)(this.project.privateKey,i),e=await(0,ciRequest_1.ciCustomRequest)(`${urlConfig.uploadCloudBuildResourcePack}?os_type=${OSType.iOS}&appid=${i}&signature=${encodeURIComponent(t)}&robot=${this.ciOpts.robot}`,this.res,{"content-type":"application/octet-stream"}),s=e.baseresponse||{errcode:-1e4},a=parseInt(s.errcode,10);if(0===a)return e.task_id;if(10002053===a)return"";throw Error(`任务创建失败,错误码:${a}`)}async waitForRemoteReady(){const i=now();for(;;){const t=await this.getTask();if(!t||t.status===TaskStatus.Success||t.status===TaskStatus.Fail||now()-i>3e5)return t;t.status===TaskStatus.Pending?log.info("检查任务状态,等待中..."):t.status===TaskStatus.Running&&log.info("检查任务状态,构建中..."),await sleep(1e4)}}async getTask(){const i=await this.getTaskList();return find(i,(i=>!0===i.is_self))}async getTaskList(){return(await(0,ciRequest_1.ciSimpleRequest)({privateKey:this.project.privateKey,appid:this.project.appid,cgi:`${urlConfig.getCloudBuildTaskList}?os_type=${OSType.iOS}`,robot:this.ciOpts.robot})).list}async downloadBase(i,t){t?log.info(`下载远程 IPA,任务 ID:${i}`):log.info(`下载远程日志文件,任务 ID:${i}`);const{pkgUrl:e}=await this.getTaskResultUrl(i);await this.downloadIPA(e,i,t)}downloadIPA(i,t,e){const s=path.resolve(this.iOSDir,`${t}/resultZip.zip`),a=path.resolve(this.iOSDir,`${t}/result`);fs.ensureFileSync(s),fs.ensureDirSync(a);const r=fs.createWriteStream(s,{mode:511});return new Promise(((t,o)=>{(0,request_1.simpleRequest)({url:i,method:"get"},(i=>{i&&o(`${i} at iosCloudBuild download ipa request`)})).pipe(r),r.on("error",(i=>{o(`${i} at iosCloudBuild download ipa deststream`)})),r.on("close",(async()=>{try{await(0,zip_1.unzip)(s,a)}catch(i){return o(e?"failed process zip file":"build failed! (Cant extract log dir)")}try{const i=fs.readdirSync(a);if(!e){const i=path.join(a,"log");if(fs.existsSync(i)){const e=path.parse(this.output),s=path.posix.join(e.dir,`${e.name}_log`);return fs.copySync(i,s),this.logAbPath=i,this.output=s,t({})}return o("cant find log dir in result")}{const t=i.find((i=>".ipa"===path.extname(i)));if(!t)return o("ipa is not in result");fs.copyFileSync(path.join(a,t),this.output)}}catch(i){return o()}t({})}))}))}async getTaskResultUrl(i){const t=await(0,ciRequest_1.ciSimpleRequest)({cgi:`${urlConfig.getCloudBuildPkgUrl}?task_id=${i}`,privateKey:this.project.privateKey,appid:this.project.appid,robot:this.ciOpts.robot});return{pkgUrl:t.pkg_url,resUrl:t.resource_url}}async getBundleId(){const i=this.project,t=await i.miniappAttr()||{};return safeGet(t,"mobileapp_info.bundle_id")||"com.tencent.weauth"}getFinalIpaName(i,t){return`${i.replace(/[.*]/g,"")}-${t}.ipa`}}const getIOSCloudBuild=i=>new IOSCloudBuild(i);exports.getIOSCloudBuild=getIOSCloudBuild;
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.getMiniappPluginManager=exports.OS_TYPE_ENUM=void 0;const tslib_1=require("tslib"),miniappJson_1=require("../../utils/miniappJson"),urlConfig=tslib_1.__importStar(require("../../config/url.config")),ciRequest_1=require("../utils/ciRequest"),log=tslib_1.__importStar(require("../../utils/log")),fs_extra_1=tslib_1.__importDefault(require("fs-extra")),path_1=tslib_1.__importDefault(require("path")),unpack_1=tslib_1.__importDefault(require("../utils/unpack")),sign_1=require("../../utils/sign"),jsonParse_1=require("../../utils/jsonParse"),request=require("request");var OS_TYPE_ENUM;!function(i){i.IOS="1",i.ANDROID="2"}(OS_TYPE_ENUM||(exports.OS_TYPE_ENUM=OS_TYPE_ENUM={}));class MiniappPluginManager{constructor(i){this.WeappMiniApp="",this.project=i.project,this.ciOpts=i,this.WeappMiniApp=i.resourceDir}async getUsedPluginVersionInfo(i){const{osType:e,pluginList:n}=i;return await(0,ciRequest_1.ciSimpleRequest)({privateKey:this.project.privateKey,appid:this.project.appid,robot:this.ciOpts.robot,cgi:`${urlConfig.getUsedPluginVersionInfo}?os_type=${e}`},{plugin_list:n})}async downloadMiniAppPlugin(i){const{pluginList:e,osType:n}=i,t=this.project.appid,r=this.project.privateKey,s=await(0,sign_1.getSignature)(r,t),o=`${urlConfig.downloadMiniAppPlugin}?os_type=${n}`;return new Promise((i,n)=>{request({url:o,method:"post",body:JSON.stringify({appid:t,signature:s,robot:this.ciOpts.robot,plugin_list:e}),headers:{"content-type":"application/json"}},i=>{i&&n(i)}).on("response",e=>{var t;const r=null===(t=e.headers["content-type"])||void 0===t?void 0:t.toLocaleLowerCase();if((null==r?void 0:r.includes("text/plain"))||(null==r?void 0:r.includes("application/json"))){let t="";e.on("data",i=>{t+=i}),e.on("end",()=>{try{t=(0,jsonParse_1.jsonRespParse)(t,o),i(t.data)}catch(i){n((i.message||i)+" at downloadMiniAppPlugin")}})}else{const n=[];e.setEncoding("binary"),e.on("data",i=>{n.push(Buffer.from(i,"binary"))}),e.on("end",()=>{const e=Buffer.concat(n);i(e)})}e.on("error",i=>{n((i.message||i)+" at downloadMiniAppPlugin")})})})}async removePluginDir(i,e){var n;const t=path_1.default.join(this.WeappMiniApp,"miniapp-plugin/"+(i===OS_TYPE_ENUM.ANDROID?"android":"ios")),r=null===(n=fs_extra_1.default.readdirSync(t,{withFileTypes:!0}).find(i=>i.name.startsWith(e)))||void 0===n?void 0:n.name;r&&fs_extra_1.default.removeSync(path_1.default.join(t,r))}async downloadPlugin(i){var e;const n=this.project,t=(0,miniappJson_1.tryGetPluginMiniappJson)(n.projectPath),r=(null===(e=null==t?void 0:t[i===OS_TYPE_ENUM.ANDROID?"android":"ios"])||void 0===e?void 0:e.filter(i=>i.open&&i.pluginId&&i.pluginVersion&&!i.isFromLocal))||[];if(!r.length)return;const{baseresponse:s,info_list:o}=await this.getUsedPluginVersionInfo({pluginList:r.map(i=>({plugin_id:i.pluginId,version:i.pluginVersion})),osType:i});if(0!==s.errcode)throw new Error("获取插件信息失败 "+s.errmsg);const p=[],a=path_1.default.join(this.ciOpts.resourceDir,"miniapp-plugin/"+(i===OS_TYPE_ENUM.ANDROID?"android":"ios"));fs_extra_1.default.ensureDirSync(a);const l=fs_extra_1.default.readdirSync(a,{withFileTypes:!0});if(o.forEach(e=>{e.is_released||log.info(`使用的多端插件 ${e.plugin_id} 为开发版本,上线前请替换为发布版本`);const n=`${e.plugin_id}-${e.user_version}-`,t=l.find(i=>i.name.startsWith(n));t?e.is_released?t.name!==n+e.release_time&&(this.removePluginDir(i,e.plugin_id),p.push({plugin_id:e.plugin_id,version:e.user_version})):t.name!==n+e.commit_time&&(this.removePluginDir(i,e.plugin_id),p.push({plugin_id:e.plugin_id,version:e.user_version})):p.push({plugin_id:e.plugin_id,version:e.user_version})}),!p.length)return;log.info("多端插件下载中...");const u=await this.downloadMiniAppPlugin({pluginList:p,osType:i});if(u.baseresponse)throw new Error(`多端插件下载失败,错误代码:${u.baseresponse.errcode}, 错误描述: ${u.baseresponse.errmsg}`);log.info("多端插件下载完成");const d=(0,unpack_1.default)(u),g=Object.keys(d);for(const i of g)(0,unpack_1.default)(d[i],path_1.default.join(a,i.replace(".wxapkg","")))}async getPluginDirList(i){var e;const n=this.project,t=(0,miniappJson_1.tryGetPluginMiniappJson)(n.projectPath),r=(null===(e=null==t?void 0:t[i===OS_TYPE_ENUM.ANDROID?"android":"ios"])||void 0===e?void 0:e.filter(i=>i.open))||[];if(!r.length)return[];const s=r.filter(i=>!i.isFromLocal&&i.pluginId&&i.pluginVersion),o=r.filter(i=>i.isFromLocal);if(o.length>0){const i=o.map(i=>i.pluginId).join(",");throw new Error(`CI 构建下,多端插件 ${i} 不支持使用本地插件`)}const p=path_1.default.join(this.WeappMiniApp,"miniapp-plugin/"+(i===OS_TYPE_ENUM.ANDROID?"android":"ios"));fs_extra_1.default.ensureDirSync(p);const a=fs_extra_1.default.readdirSync(p,{withFileTypes:!0}).filter(i=>{const e=i.name.split("-");return i.isDirectory()&&3===e.length&&s.find(i=>i.pluginId===e[0]&&i.pluginVersion===e[1])}).map(i=>({dir:path_1.default.join(p,i.name),pluginId:i.name.split("-")[0]}));if(s.length!=a.length)throw new Error("多端插件下载列表失败,请重新构建");return a}}const getMiniappPluginManager=i=>new MiniappPluginManager(i);exports.getMiniappPluginManager=getMiniappPluginManager;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.getMiniappPluginManager=exports.OS_TYPE_ENUM=void 0;const tslib_1=require("tslib"),miniappJson_1=require("../../utils/miniappJson"),urlConfig=tslib_1.__importStar(require("../../config/url.config")),ciRequest_1=require("../utils/ciRequest"),log=tslib_1.__importStar(require("../../utils/log")),fs_extra_1=tslib_1.__importDefault(require("fs-extra")),path_1=tslib_1.__importDefault(require("path")),unpack_1=tslib_1.__importDefault(require("../utils/unpack")),sign_1=require("../../utils/sign"),jsonParse_1=require("../../utils/jsonParse"),request=require("request");var OS_TYPE_ENUM;!function(i){i.IOS="1",i.ANDROID="2"}(OS_TYPE_ENUM||(exports.OS_TYPE_ENUM=OS_TYPE_ENUM={}));class MiniappPluginManager{constructor(i){this.WeappMiniApp="",this.project=i.project,this.ciOpts=i,this.WeappMiniApp=i.resourceDir}async getUsedPluginVersionInfo(i){const{osType:e,pluginList:n}=i;return await(0,ciRequest_1.ciSimpleRequest)({privateKey:this.project.privateKey,appid:this.project.appid,robot:this.ciOpts.robot,cgi:`${urlConfig.getUsedPluginVersionInfo}?os_type=${e}`},{plugin_list:n})}async downloadMiniAppPlugin(i){const{pluginList:e,osType:n}=i,t=this.project.appid,r=this.project.privateKey,s=await(0,sign_1.getSignature)(r,t),o=`${urlConfig.downloadMiniAppPlugin}?os_type=${n}`;return new Promise(((i,n)=>{request({url:o,method:"post",body:JSON.stringify({appid:t,signature:s,robot:this.ciOpts.robot,plugin_list:e}),headers:{"content-type":"application/json"}},(i=>{i&&n(i)})).on("response",(e=>{var t;const r=null===(t=e.headers["content-type"])||void 0===t?void 0:t.toLocaleLowerCase();if((null==r?void 0:r.includes("text/plain"))||(null==r?void 0:r.includes("application/json"))){let t="";e.on("data",(i=>{t+=i})),e.on("end",(()=>{try{t=(0,jsonParse_1.jsonRespParse)(t,o),i(t.data)}catch(i){n(`${i.message||i} at downloadMiniAppPlugin`)}}))}else{const n=[];e.setEncoding("binary"),e.on("data",(i=>{n.push(Buffer.from(i,"binary"))})),e.on("end",(()=>{const e=Buffer.concat(n);i(e)}))}e.on("error",(i=>{n(`${i.message||i} at downloadMiniAppPlugin`)}))}))}))}async removePluginDir(i,e){var n;const t=path_1.default.join(this.WeappMiniApp,"miniapp-plugin/"+(i===OS_TYPE_ENUM.ANDROID?"android":"ios")),r=null===(n=fs_extra_1.default.readdirSync(t,{withFileTypes:!0}).find((i=>i.name.startsWith(e))))||void 0===n?void 0:n.name;r&&fs_extra_1.default.removeSync(path_1.default.join(t,r))}async downloadPlugin(i){var e;const n=this.project,t=(0,miniappJson_1.tryGetPluginMiniappJson)(n.projectPath),r=(null===(e=null==t?void 0:t[i===OS_TYPE_ENUM.ANDROID?"android":"ios"])||void 0===e?void 0:e.filter((i=>i.open&&i.pluginId&&i.pluginVersion&&!i.isFromLocal)))||[];if(!r.length)return;const{baseresponse:s,info_list:o}=await this.getUsedPluginVersionInfo({pluginList:r.map((i=>({plugin_id:i.pluginId,version:i.pluginVersion}))),osType:i});if(0!==s.errcode)throw new Error(`获取插件信息失败 ${s.errmsg}`);const p=[],a=path_1.default.join(this.ciOpts.resourceDir,"miniapp-plugin/"+(i===OS_TYPE_ENUM.ANDROID?"android":"ios"));fs_extra_1.default.ensureDirSync(a);const l=fs_extra_1.default.readdirSync(a,{withFileTypes:!0});if(o.forEach((e=>{e.is_released||log.info(`使用的多端插件 ${e.plugin_id} 为开发版本,上线前请替换为发布版本`);const n=`${e.plugin_id}-${e.user_version}-`,t=l.find((i=>i.name.startsWith(n)));t?e.is_released?t.name!==n+e.release_time&&(this.removePluginDir(i,e.plugin_id),p.push({plugin_id:e.plugin_id,version:e.user_version})):t.name!==n+e.commit_time&&(this.removePluginDir(i,e.plugin_id),p.push({plugin_id:e.plugin_id,version:e.user_version})):p.push({plugin_id:e.plugin_id,version:e.user_version})})),!p.length)return;log.info("多端插件下载中...");const u=await this.downloadMiniAppPlugin({pluginList:p,osType:i});if(u.baseresponse)throw new Error(`多端插件下载失败,错误代码:${u.baseresponse.errcode}, 错误描述: ${u.baseresponse.errmsg}`);log.info("多端插件下载完成");const d=(0,unpack_1.default)(u),g=Object.keys(d);for(const i of g)(0,unpack_1.default)(d[i],path_1.default.join(a,i.replace(".wxapkg","")))}async getPluginDirList(i){var e;const n=this.project,t=(0,miniappJson_1.tryGetPluginMiniappJson)(n.projectPath),r=(null===(e=null==t?void 0:t[i===OS_TYPE_ENUM.ANDROID?"android":"ios"])||void 0===e?void 0:e.filter((i=>i.open)))||[];if(!r.length)return[];const s=r.filter((i=>!i.isFromLocal&&i.pluginId&&i.pluginVersion)),o=r.filter((i=>i.isFromLocal));if(o.length>0){const i=o.map((i=>i.pluginId)).join(",");throw new Error(`CI 构建下,多端插件 ${i} 不支持使用本地插件`)}const p=path_1.default.join(this.WeappMiniApp,"miniapp-plugin/"+(i===OS_TYPE_ENUM.ANDROID?"android":"ios"));fs_extra_1.default.ensureDirSync(p);const a=fs_extra_1.default.readdirSync(p,{withFileTypes:!0}).filter((i=>{const e=i.name.split("-");return i.isDirectory()&&3===e.length&&s.find((i=>i.pluginId===e[0]&&i.pluginVersion===e[1]))})).map((i=>({dir:path_1.default.join(p,i.name),pluginId:i.name.split("-")[0]})));if(s.length!=a.length)throw new Error("多端插件下载列表失败,请重新构建");return a}}const getMiniappPluginManager=i=>new MiniappPluginManager(i);exports.getMiniappPluginManager=getMiniappPluginManager;
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.generateMiniappIOSResources=generateMiniappIOSResources;const tslib_1=require("tslib"),zip_1=require("../../utils/zip"),request_1=require("../../utils/request"),tools_1=require("../../utils/tools"),log=tslib_1.__importStar(require("../../utils/log")),tools_2=require("../utils/tools"),fse=require("fs-extra"),path=require("path"),CDN_PREFIX="https://dldir1.qq.com/WechatWebDev/";class SDKVersionManager{constructor(e){this.project=e,this.iosBaseDir=(0,tools_2.getMiniappIOSCacheDir)(),this.downloadBigFile=async(e,i)=>{const o=fse.createWriteStream(i,{mode:511});return new Promise((i,s)=>{(0,request_1.simpleRequest)({url:""+e,method:"get"},e=>{e&&s(e)}).pipe(o),o.on("error",e=>{s(e)}),o.on("close",()=>{i({})})})},this.downloadMiniappIOSResources=async(e,i=!1)=>{log.info("Download ios resources...");const o=path.join(this.iosBaseDir,"v2-ipa",e);fse.existsSync(o)||(fse.emptyDirSync(path.dirname(o)),fse.ensureDirSync(o));const s=["x86.zip","arm64.zip",`WeAppSDK-${e}.zip`];i&&(s.push("x86_ipad.zip"),s.push("arm64_ipad.zip"));try{const i=[];s.forEach(s=>{const t=`${CDN_PREFIX}donut/ios/${e}/${s}`,r=path.join(o,s);fse.existsSync(r)||i.push(this.downloadBigFile(t,r))}),await Promise.all(i),log.info("Download ios resources successfully")}catch(e){throw fse.removeSync(o),new Error(`download ios resources resources failed: ${e.message}. Network issue or SDK Version may not suitable for IPad beta`)}return o},this.generateMiniappIOSResources=async(e,i,o=!1,s=!1)=>{try{log.info((o?"is":"not")+" using iPad Beta");const s=await this.downloadMiniappIOSResources(e,o);log.info("Archive ios resources..."),await this.downloadSwiftSupport(e);let t="";t=o?path.join(s,"arm64"===i?"arm64_ipad.zip":"x86_ipad.zip"):path.join(s,"arm64"===i?"arm64.zip":"x86.zip");const r=path.join(s,`WeAppSDK-${e}.zip`),a=path.join(this.iosBaseDir,"v2-ipa",e,`ipa-${i}${o?"-iPad":""}-${(0,tools_1.generateMD5)(this.project.projectPath)}/Payload`);fse.existsSync(a)||await(0,zip_1.unzip)(t,a);const n=path.join(this.iosBaseDir,"v2-ipa",e,"sdk-"+(0,tools_1.generateMD5)(this.project.projectPath));return fse.existsSync(n)||await(0,zip_1.unzip)(r,n),log.info("Archive ios resources successfully"),{demoIpaPath:path.join(a,"demo.app"),sdkPath:n}}catch(t){const r=path.join(this.iosBaseDir,"v2-ipa",e);if(fse.existsSync(r)&&fse.removeSync(r),s){log.info(`Start retry, Process resources failed: ${t.message}.`);return await this.generateMiniappIOSResources(e,i,o,!1)}throw log.error("Archive ios resources failed, please retry and check whether your network is running smoothly..."),new Error("Download and unzip the ios resources failed: "+t.message)}},this.project=e}async downloadSwiftSupport(e){if((0,tools_1.compareVersion)(e,"1.6.0")>=0){log.info("Downloading SwiftSupport...");const e="1",i="libswift_Concurrency.dylib",o=path.join(this.iosBaseDir,"v2-ipa","SwiftSupport"),s=path.join(o,i),t=`${CDN_PREFIX}donut/ios/SwiftSupport/${e}/${i}`;if(fse.ensureDirSync(o),log.info(`SwiftSupport remote: ${t}, local: ${s}`),await this.downloadBigFile(t,s),!fse.existsSync(s))throw log.info("cant find localFile: "+s),new Error("cant find localFile: "+s);log.info("download SwiftSupport done: "+s)}}}async function generateMiniappIOSResources(e,i,o,s=!1){return await new SDKVersionManager(e).generateMiniappIOSResources(i,o,s,!0)}
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.generateMiniappIOSResources=generateMiniappIOSResources;const tslib_1=require("tslib"),zip_1=require("../../utils/zip"),request_1=require("../../utils/request"),tools_1=require("../../utils/tools"),log=tslib_1.__importStar(require("../../utils/log")),tools_2=require("../utils/tools"),fse=require("fs-extra"),path=require("path"),CDN_PREFIX="https://devtools.wxqcloud.qq.com.cn/WechatWebDev/";class SDKVersionManager{constructor(e){this.project=e,this.iosBaseDir=(0,tools_2.getMiniappIOSCacheDir)(),this.downloadBigFile=async(e,i)=>{const o=fse.createWriteStream(i,{mode:511});return new Promise(((i,s)=>{(0,request_1.simpleRequest)({url:`${e}`,method:"get"},(e=>{e&&s(e)})).pipe(o),o.on("error",(e=>{s(e)})),o.on("close",(()=>{i({})}))}))},this.downloadMiniappIOSResources=async(e,i=!1)=>{log.info("Download ios resources...");const o=path.join(this.iosBaseDir,"v2-ipa",e);fse.existsSync(o)||(fse.emptyDirSync(path.dirname(o)),fse.ensureDirSync(o));const s=["x86.zip","arm64.zip",`WeAppSDK-${e}.zip`];i&&(s.push("x86_ipad.zip"),s.push("arm64_ipad.zip"));try{const i=[];s.forEach((s=>{const t=`${CDN_PREFIX}donut/ios/${e}/${s}`,r=path.join(o,s);fse.existsSync(r)||i.push(this.downloadBigFile(t,r))})),await Promise.all(i),log.info("Download ios resources successfully")}catch(e){throw fse.removeSync(o),new Error(`download ios resources resources failed: ${e.message}. Network issue or SDK Version may not suitable for IPad beta`)}return o},this.generateMiniappIOSResources=async(e,i,o=!1,s=!1)=>{try{log.info((o?"is":"not")+" using iPad Beta");const s=await this.downloadMiniappIOSResources(e,o);log.info("Archive ios resources..."),await this.downloadSwiftSupport(e);let t="";t=o?path.join(s,"arm64"===i?"arm64_ipad.zip":"x86_ipad.zip"):path.join(s,"arm64"===i?"arm64.zip":"x86.zip");const r=path.join(s,`WeAppSDK-${e}.zip`),a=path.join(this.iosBaseDir,"v2-ipa",e,`ipa-${i}${o?"-iPad":""}-${(0,tools_1.generateMD5)(this.project.projectPath)}/Payload`);fse.existsSync(a)||await(0,zip_1.unzip)(t,a);const n=path.join(this.iosBaseDir,"v2-ipa",e,`sdk-${(0,tools_1.generateMD5)(this.project.projectPath)}`);return fse.existsSync(n)||await(0,zip_1.unzip)(r,n),log.info("Archive ios resources successfully"),{demoIpaPath:path.join(a,"demo.app"),sdkPath:n}}catch(t){const r=path.join(this.iosBaseDir,"v2-ipa",e);if(fse.existsSync(r)&&fse.removeSync(r),s){log.info(`Start retry, Process resources failed: ${t.message}.`);return await this.generateMiniappIOSResources(e,i,o,!1)}throw log.error("Archive ios resources failed, please retry and check whether your network is running smoothly..."),new Error(`Download and unzip the ios resources failed: ${t.message}`)}},this.project=e}async downloadSwiftSupport(e){if((0,tools_1.compareVersion)(e,"1.6.0")>=0){log.info("Downloading SwiftSupport...");const e="1",i="libswift_Concurrency.dylib",o=path.join(this.iosBaseDir,"v2-ipa","SwiftSupport"),s=path.join(o,i),t=`${CDN_PREFIX}donut/ios/SwiftSupport/${e}/${i}`;if(fse.ensureDirSync(o),log.info(`SwiftSupport remote: ${t}, local: ${s}`),await this.downloadBigFile(t,s),!fse.existsSync(s))throw log.info(`cant find localFile: ${s}`),new Error(`cant find localFile: ${s}`);log.info(`download SwiftSupport done: ${s}`)}}}async function generateMiniappIOSResources(e,i,o,s=!1){return await new SDKVersionManager(e).generateMiniappIOSResources(i,o,s,!0)}
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.upload=upload;const tslib_1=require("tslib"),cache_1=require("../../utils/cache"),locales_1=tslib_1.__importDefault(require("../../utils/locales/locales")),config_1=require("../../config/config"),getcompiler_1=require("../getcompiler"),tools_1=require("../utils/tools"),moment_1=tslib_1.__importDefault(require("moment")),url_config_1=require("../../config/url.config"),sign_1=require("../../utils/sign"),taskstatus_1=require("../../utils/taskstatus"),pack_1=require("../utils/pack"),log=tslib_1.__importStar(require("../../utils/log")),querystring_1=tslib_1.__importDefault(require("querystring")),zlib_1=tslib_1.__importDefault(require("zlib")),request_1=require("../../utils/request"),jsonParse_1=require("../../utils/jsonParse"),progressupdate_1=require("../utils/progressupdate"),asyncTask_1=require("../../utils/asyncTask");function getMiniappBuildQuery(e){var i,t,r,o,s,n;const a=(0,moment_1.default)(new Date).format("YYYY-MM-DD-HH-mm-ss"),p={gzip:1,cross_platform_app:1,"user-version":encodeURIComponent(e.version||"miniapp-release-d-"+a),"user-desc":encodeURIComponent(e.desc||"miniapp-release-d-"+a),os_type:"mini-android"===e.targetPlatform?2:1,debug_extra_info:"miniappPkgType-"+(null===(i=e.miniappOptions)||void 0===i?void 0:i.miniappPkgType)};return(null===(t=e.miniappOptions)||void 0===t?void 0:t.uploadId)&&(p.upload_id=null===(r=e.miniappOptions)||void 0===r?void 0:r.uploadId),(null===(o=e.miniappOptions)||void 0===o?void 0:o.useCloudSync)&&(p.use_cloud_sync=1),(null===(s=e.miniappOptions)||void 0===s?void 0:s.archVersion)&&(p.arch_version=null===(n=e.miniappOptions)||void 0===n?void 0:n.archVersion),p}async function upload(e){const{project:i,setting:t={useProjectConfig:!1},robot:r="1",threads:o=0,onProgressUpdate:s=(()=>{})}=e,n=(0,progressupdate_1.transProgressUpdate)(s);process.env.COMPILE_THREADS=o.toString(),cache_1.cacheManager.clean();const a=(0,tools_1.formatCISetting)(i,t);i.setting=a;const p=e.targetPlatform;i.setting.targetPlatform=p;const u=await(0,getcompiler_1.getBuilder)(i,{targetPlatform:p}),l=await u.getCompiler(),c=await l.compile({setting:a,onProgressUpdate:n,resultType:"prod",disableSpreadingUsingComponents:!0});u.destroy();const d=config_1.CI_VERSION,_=encodeURIComponent(JSON.stringify(getMiniappBuildQuery(e))),g={appid:i.appid,robot:r,miniapparchivequery:_};try{const e=new taskstatus_1.TaskStatus(locales_1.default.config.UPLOAD.toString());n(e);const t=`${url_config_1.miniappUpload}?${querystring_1.default.stringify(g)}`,r=await(0,sign_1.getSignature)(i.privateKey,i.appid);c[asyncTask_1.SIGNATURE_FILE_NAME]=JSON.stringify({signature:r,version:d});const o=(0,pack_1.pack)(c),s=zlib_1.default.gzipSync(o.buffer);log.info("request url:",t);const a=(await(0,request_1.request)({url:t,method:"post",body:s})).body.toString(),p=(0,jsonParse_1.jsonRespParse)(a,t);if(0!==p.errCode)throw new Error(a);e.done(),n(e);const u={respBody:p.body};if(Array.isArray(p.body.subpackage_info)){const e=p.body.subpackage_info;u.subPackageInfo=e,u.useSubPkg=e.length>1}if(Array.isArray(p.body.ext_plugin_info)){const e=p.body.ext_plugin_info;u.pluginInfo=e.map(e=>({pluginProviderAppid:e.provider,version:e.version,size:e.size}))}return u}catch(e){throw e}}
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.upload=upload;const tslib_1=require("tslib"),cache_1=require("../../utils/cache"),locales_1=tslib_1.__importDefault(require("../../utils/locales/locales")),config_1=require("../../config/config"),getcompiler_1=require("../getcompiler"),tools_1=require("../utils/tools"),moment_1=tslib_1.__importDefault(require("moment")),url_config_1=require("../../config/url.config"),sign_1=require("../../utils/sign"),taskstatus_1=require("../../utils/taskstatus"),pack_1=require("../utils/pack"),log=tslib_1.__importStar(require("../../utils/log")),querystring_1=tslib_1.__importDefault(require("querystring")),zlib_1=tslib_1.__importDefault(require("zlib")),request_1=require("../../utils/request"),jsonParse_1=require("../../utils/jsonParse"),progressupdate_1=require("../utils/progressupdate"),asyncTask_1=require("../../utils/asyncTask");function getMiniappBuildQuery(e){var i,t,r,o,s,n;const a=(0,moment_1.default)(new Date).format("YYYY-MM-DD-HH-mm-ss"),p={gzip:1,cross_platform_app:1,"user-version":encodeURIComponent(e.version||`miniapp-release-d-${a}`),"user-desc":encodeURIComponent(e.desc||`miniapp-release-d-${a}`),os_type:"mini-android"===e.targetPlatform?2:1,debug_extra_info:`miniappPkgType-${null===(i=e.miniappOptions)||void 0===i?void 0:i.miniappPkgType}`};return(null===(t=e.miniappOptions)||void 0===t?void 0:t.uploadId)&&(p.upload_id=null===(r=e.miniappOptions)||void 0===r?void 0:r.uploadId),(null===(o=e.miniappOptions)||void 0===o?void 0:o.useCloudSync)&&(p.use_cloud_sync=1),(null===(s=e.miniappOptions)||void 0===s?void 0:s.archVersion)&&(p.arch_version=null===(n=e.miniappOptions)||void 0===n?void 0:n.archVersion),p}async function upload(e){const{project:i,setting:t={useProjectConfig:!1},robot:r="1",threads:o=0,onProgressUpdate:s=(()=>{})}=e,n=(0,progressupdate_1.transProgressUpdate)(s);process.env.COMPILE_THREADS=o.toString(),cache_1.cacheManager.clean();const a=(0,tools_1.formatCISetting)(i,t);i.setting=a;const p=e.targetPlatform;i.setting.targetPlatform=p;const u=await(0,getcompiler_1.getBuilder)(i,{targetPlatform:p}),l=await u.getCompiler(),c=await l.compile({setting:a,onProgressUpdate:n,resultType:"prod",disableSpreadingUsingComponents:!0});u.destroy();const d=config_1.CI_VERSION,_=encodeURIComponent(JSON.stringify(getMiniappBuildQuery(e))),g={appid:i.appid,robot:r,miniapparchivequery:_};try{const e=new taskstatus_1.TaskStatus(locales_1.default.config.UPLOAD.toString());n(e);const t=`${url_config_1.miniappUpload}?${querystring_1.default.stringify(g)}`,r=await(0,sign_1.getSignature)(i.privateKey,i.appid);c[asyncTask_1.SIGNATURE_FILE_NAME]=JSON.stringify({signature:r,version:d});const o=(0,pack_1.pack)(c),s=zlib_1.default.gzipSync(o.buffer);log.info("request url:",t);const a=(await(0,request_1.request)({url:t,method:"post",body:s})).body.toString(),p=(0,jsonParse_1.jsonRespParse)(a,t);if(0!==p.errCode)throw new Error(a);e.done(),n(e);const u={respBody:p.body};if(Array.isArray(p.body.subpackage_info)){const e=p.body.subpackage_info;u.subPackageInfo=e,u.useSubPkg=e.length>1}if(Array.isArray(p.body.ext_plugin_info)){const e=p.body.ext_plugin_info;u.pluginInfo=e.map((e=>({pluginProviderAppid:e.provider,version:e.version,size:e.size})))}return u}catch(e){throw e}}
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.miniappCloudUpload=miniappCloudUpload;const tslib_1=require("tslib"),log=tslib_1.__importStar(require("../utils/log")),upload_1=require("./miniapp/upload"),archive_1=require("./miniapp/archive"),checkBuildArgument_1=require("./miniapp/checkBuildArgument"),moment_1=tslib_1.__importDefault(require("moment")),getcompiler_1=require("./getcompiler"),report_1=require("../utils/report"),crypto=require("crypto");function generateUint64(){const e=crypto.randomBytes(4).readUInt32BE(0),r=crypto.randomBytes(4).readUInt32BE(0);return((BigInt(e)<<BigInt(32))+BigInt(r)).toString()}async function miniappCloudUpload(e){var r,t,o;let i;const n=Date.now();try{if(!e.version)throw new Error("缺少参数 version");if(!e.project)throw new Error("缺少参数 project");const n=null===(r=e.iOSPlatform)||void 0===r||r,a=null===(t=e.androidPlatform)||void 0===t||t;if(!n&&!a)throw new Error("至少选择一个平台上传资源包");const{project:s}=e,p=await s.miniappAttr();if(!(null!==(o=null==p?void 0:p.cpa_info.use_cloud_sync)&&void 0!==o&&o))throw new Error("暂未开通使用此功能,请先在多端控制台开通使用");const c={version:e.version,desc:e.desc||`CI robot ${e.robot||1} 在 ${(0,moment_1.default)().format("LLL")} 提交上传`,targetPlatform:"mini-android",miniappOptions:{miniappPkgType:checkBuildArgument_1.IMiniappPkgType.Release,useCloudSync:!0,remoteDebugEnable:!1,archVersion:1},outputDir:""};n&&a&&(c.miniappOptions.uploadId=generateUint64()),a&&(c.targetPlatform="mini-android",await(0,upload_1.upload)(Object.assign(Object.assign(Object.assign({},e),c),(0,archive_1.getUploadOptions)())),log.success("上传 Android 资源包成功")),n&&(c.targetPlatform="mini-ios",await(0,upload_1.upload)(Object.assign(Object.assign(Object.assign({},e),c),(0,archive_1.getUploadOptions)())),log.success("上传 iOS 资源包成功"));(await(0,getcompiler_1.getCompiler)(e.project,e.setting||{useProjectConfig:!1})).destroy(),i={success:!0,errmsg:"上传资源包成功"}}catch(e){log.error("上传资源包失败:",e.message),i={success:!1,errmsg:"上传资源包失败:"+e.message}}const a=Date.now()-n;return e.project&&(0,report_1.reportAction)("miniappCloudUpload",i.success?0:-1,i.errmsg,a,e.project),i}
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.miniappCloudUpload=miniappCloudUpload;const tslib_1=require("tslib"),log=tslib_1.__importStar(require("../utils/log")),upload_1=require("./miniapp/upload"),archive_1=require("./miniapp/archive"),checkBuildArgument_1=require("./miniapp/checkBuildArgument"),moment_1=tslib_1.__importDefault(require("moment")),getcompiler_1=require("./getcompiler"),report_1=require("../utils/report"),crypto=require("crypto");function generateUint64(){const e=crypto.randomBytes(4).readUInt32BE(0),r=crypto.randomBytes(4).readUInt32BE(0);return((BigInt(e)<<BigInt(32))+BigInt(r)).toString()}async function miniappCloudUpload(e){var r,t,o;let i;const n=Date.now();try{if(!e.version)throw new Error("缺少参数 version");if(!e.project)throw new Error("缺少参数 project");const n=null===(r=e.iOSPlatform)||void 0===r||r,a=null===(t=e.androidPlatform)||void 0===t||t;if(!n&&!a)throw new Error("至少选择一个平台上传资源包");const{project:s}=e,p=await s.miniappAttr();if(!(null!==(o=null==p?void 0:p.cpa_info.use_cloud_sync)&&void 0!==o&&o))throw new Error("暂未开通使用此功能,请先在多端控制台开通使用");const c={version:e.version,desc:e.desc||`CI robot ${e.robot||1} 在 ${(0,moment_1.default)().format("LLL")} 提交上传`,targetPlatform:"mini-android",miniappOptions:{miniappPkgType:checkBuildArgument_1.IMiniappPkgType.Release,useCloudSync:!0,remoteDebugEnable:!1,archVersion:1},outputDir:""};n&&a&&(c.miniappOptions.uploadId=generateUint64()),a&&(c.targetPlatform="mini-android",await(0,upload_1.upload)(Object.assign(Object.assign(Object.assign({},e),c),(0,archive_1.getUploadOptions)())),log.success("上传 Android 资源包成功")),n&&(c.targetPlatform="mini-ios",await(0,upload_1.upload)(Object.assign(Object.assign(Object.assign({},e),c),(0,archive_1.getUploadOptions)())),log.success("上传 iOS 资源包成功"));(await(0,getcompiler_1.getCompiler)(e.project,e.setting||{useProjectConfig:!1})).destroy(),i={success:!0,errmsg:"上传资源包成功"}}catch(e){log.error("上传资源包失败:",e.message),i={success:!1,errmsg:`上传资源包失败:${e.message}`}}const a=Date.now()-n;return e.project&&(0,report_1.reportAction)("miniappCloudUpload",i.success?0:-1,i.errmsg,a,e.project),i}
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.preview=preview;const tslib_1=require("tslib"),upload_1=require("./upload"),terminalQrcode_1=require("./utils/terminalQrcode"),fs_1=tslib_1.__importDefault(require("fs")),config_1=require("../config/config"),error_1=require("../utils/error"),locales_1=tslib_1.__importDefault(require("../utils/locales/locales")),log=tslib_1.__importStar(require("../utils/log"));async function preview(e){const r=Object.assign({},e);if(r.test=!0,r.version="0.0.1",r.qrcodeFormat||(r.qrcodeFormat="terminal"),!["base64","image","terminal"].includes(r.qrcodeFormat))throw new error_1.CodeError(locales_1.default.config.INVALID.format("qrcodeFormat"),config_1.PARAM_ERROR);if(["base64","image"].includes(r.qrcodeFormat)&&("string"!=typeof r.qrcodeOutputDest||"."===r.qrcodeOutputDest.trim()))throw new error_1.CodeError(locales_1.default.config.INVALID.format("qrcodeOutputDest"),config_1.PARAM_ERROR);const o=await(0,upload_1.innerUpload)(r);if(!o.respBody.qrcode_img)throw new Error("No `qrcode_img` in response.");if("terminal"===r.qrcodeFormat)try{const e=await(0,terminalQrcode_1.generateTerminalQrcode)(o.respBody.qrcode_img);log.log(e),log.log("terminal qrcode shown above")}catch(e){log.error("Termianl qrcode generate failed, but you can still visit the dev version on your cell phone.")}else if(r.qrcodeOutputDest)if("image"===r.qrcodeFormat)try{fs_1.default.writeFileSync(r.qrcodeOutputDest,Buffer.from(o.respBody.qrcode_img,"base64")),log.info(`Qrcode image saved, file path: '${r.qrcodeOutputDest}'`)}catch(e){throw new Error("write qrcode image error: "+JSON.stringify(e))}else if("base64"===r.qrcodeFormat)try{fs_1.default.writeFileSync(r.qrcodeOutputDest,"data:image/jpeg;base64,"+o.respBody.qrcode_img,"utf8"),log.info(`Qrcode base64 file saved, file path: '${r.qrcodeOutputDest}'`)}catch(e){throw new Error("write qrcode base64 error: "+JSON.stringify(e))}return{subPackageInfo:o.subPackageInfo,pluginInfo:o.pluginInfo}}
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.preview=preview;const tslib_1=require("tslib"),upload_1=require("./upload"),terminalQrcode_1=require("./utils/terminalQrcode"),fs_1=tslib_1.__importDefault(require("fs")),config_1=require("../config/config"),error_1=require("../utils/error"),locales_1=tslib_1.__importDefault(require("../utils/locales/locales")),log=tslib_1.__importStar(require("../utils/log"));async function preview(e){const r=Object.assign({},e);if(r.test=!0,r.version="0.0.1",r.qrcodeFormat||(r.qrcodeFormat="terminal"),!["base64","image","terminal"].includes(r.qrcodeFormat))throw new error_1.CodeError(locales_1.default.config.INVALID.format("qrcodeFormat"),config_1.PARAM_ERROR);if(["base64","image"].includes(r.qrcodeFormat)&&("string"!=typeof r.qrcodeOutputDest||"."===r.qrcodeOutputDest.trim()))throw new error_1.CodeError(locales_1.default.config.INVALID.format("qrcodeOutputDest"),config_1.PARAM_ERROR);const o=await(0,upload_1.innerUpload)(r);if(!o.respBody.qrcode_img)throw new Error("No `qrcode_img` in response.");if("terminal"===r.qrcodeFormat)try{const e=await(0,terminalQrcode_1.generateTerminalQrcode)(o.respBody.qrcode_img);log.log(e),log.log("terminal qrcode shown above")}catch(e){log.error("Termianl qrcode generate failed, but you can still visit the dev version on your cell phone.")}else if(r.qrcodeOutputDest)if("image"===r.qrcodeFormat)try{fs_1.default.writeFileSync(r.qrcodeOutputDest,Buffer.from(o.respBody.qrcode_img,"base64")),log.info(`Qrcode image saved, file path: '${r.qrcodeOutputDest}'`)}catch(e){throw new Error(`write qrcode image error: ${JSON.stringify(e)}`)}else if("base64"===r.qrcodeFormat)try{fs_1.default.writeFileSync(r.qrcodeOutputDest,`data:image/jpeg;base64,${o.respBody.qrcode_img}`,"utf8"),log.info(`Qrcode base64 file saved, file path: '${r.qrcodeOutputDest}'`)}catch(e){throw new Error(`write qrcode base64 error: ${JSON.stringify(e)}`)}return{subPackageInfo:o.subPackageInfo,pluginInfo:o.pluginInfo}}