taro-ci 1.3.13 → 1.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,3 +1,11 @@
1
+ # 1.4.0 (2022-04-22)
2
+
3
+ # 1.4.0 (2022-04-22)
4
+
5
+ ## [1.3.15](https://new.github.com/yymzy/taro-ci/compare/v1.3.14...v1.3.15) (2022-03-03)
6
+
7
+ ## [1.3.14](https://new.github.com/yymzy/taro-ci/compare/v1.3.13...v1.3.14) (2021-12-24)
8
+
1
9
  ## [1.3.13](https://new.github.com/yymzy/taro-ci/compare/v1.3.12...v1.3.13) (2021-12-22)
2
10
 
3
11
  ## [1.3.12](https://new.github.com/yymzy/taro-ci/compare/v1.3.11...v1.3.12) (2021-11-16)
File without changes
package/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # taro-ci
2
2
 
3
- 基于[微信:miniprogram-ci](https://developers.weixin.qq.com/miniprogram/dev/devtools/ci.html)、[支付宝:miniu](https://opendocs.alipay.com/mini/miniu/command-intro)开发,用于同时打包 weapp、alipay、weapp.third 多版本发布管理;第一个横线后半部分会作为环境变量注入到 Taro 框架小程序中【process.env.MODE_ENV=third】;执行 taro build 时置入的环境变量还包括 process.env.ROOT_PATH=当前文件包输出路径,例:dist/weapp.dev;process.env.PLATFORM_ENV=weapp|alipay;
3
+ 基于[微信:miniprogram-ci](https://developers.weixin.qq.com/miniprogram/dev/devtools/ci.html)、[支付宝:miniu](https://opendocs.alipay.com/mini/miniu/command-intro)开发,使用swan-toolkit支持百度小程序自动上传,用于同时打包 weapp、alipay、swan、weapp.third 多版本发布管理;第一个横线后半部分会作为环境变量注入到 Taro 框架小程序中【process.env.MODE_ENV=third】;执行 taro build 时置入的环境变量还包括 process.env.ROOT_PATH=当前文件包输出路径,例:dist/weapp.dev;process.env.PLATFORM_ENV=weapp|alipay|swan
4
4
 
5
5
  扩展编译平台使用 [taro-plugin-build](https://www.npmjs.com/package/taro-plugin-build),并在 taro-ci.config 中配置 useTaroPluginBuildBy="",插件编译时自动注册对应的编译平台,可实现多版本公用框架并针对特殊版本处理,具体可参考:[Taro 跨平台开发](https://taro-docs.jd.com/taro/docs/2.x/envs)
6
6
 
@@ -24,9 +24,9 @@
24
24
  > "script": {
25
25
  > "dev": "taro-ci --watch", // 开发模式
26
26
  > "build": "taro-ci", // 打包
27
- > "ci:beta": "taro-ci --robot 1 --ci=toolId,privateKey --dd=accessToken,secret", // 发布 - 体验版
28
- > "ci:rc": "taro-ci --robot 2 --ci=toolId,privateKey --dd=accessToken,secret", // 发布 - 候选版
29
- > "ci:release": "taro-ci --robot 3 --ci=toolId,privateKey --dd=accessToken,secret" // 发布 - 正式版
27
+ > "ci:beta": "taro-ci --robot 1 --ci=toolId,privateKey,token --dd=accessToken,secret", // 发布 - 体验版
28
+ > "ci:rc": "taro-ci --robot 2 --ci=toolId,privateKey,token --dd=accessToken,secret", // 发布 - 候选版
29
+ > "ci:release": "taro-ci --robot 3 --ci=toolId,privateKey,token --dd=accessToken,secret" // 发布 - 正式版
30
30
  > }
31
31
  > }
32
32
  > ```
@@ -57,12 +57,14 @@ module.exports = {
57
57
  appId: "支付宝的APPID",
58
58
  },
59
59
  },
60
+ minSwanVersion: "", // 最低基础库版本
60
61
  useTaroPluginBuildBy: "normal", // type|mode|normal 自定义编译模式:mode - 按照MODE_ENV对应编译,type - 按照传入的全指令编译
61
62
  git: "", // 当前项目对应的git地址
62
- // 支付宝工具id与私钥
63
+ // 支付宝工具id与私钥;百度上传token
63
64
  // ci: {
64
65
  // toolId: "",
65
- // privateKey: ""
66
+ // privateKey: "",
67
+ // token: ""
66
68
  // },
67
69
  // 钉钉通知(可配置到git项目的CI/CD变量配置中)
68
70
  // dd: {
@@ -0,0 +1,3 @@
1
+ import { UploadResponse } from "types";
2
+ declare function swan(item: string): Promise<UploadResponse>;
3
+ export default swan;
package/dist/taro-ci.js CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";var chalk=require("chalk"),child_process=require("child_process"),ora=require("ora"),path=require("path"),fs=require("fs"),minimist=require("minimist"),moment=require("moment"),ci=require("miniprogram-ci"),miniu=require("miniu"),semver=require("semver"),Robot=require("dingtalk-robot-sdk");function _interopDefaultLegacy(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var TaroEnv,TaroConfig,chalk__default=_interopDefaultLegacy(chalk),ora__default=_interopDefaultLegacy(ora),path__default=_interopDefaultLegacy(path),fs__default=_interopDefaultLegacy(fs),minimist__default=_interopDefaultLegacy(minimist),moment__default=_interopDefaultLegacy(moment),ci__default=_interopDefaultLegacy(ci),miniu__default=_interopDefaultLegacy(miniu),semver__default=_interopDefaultLegacy(semver),Robot__default=_interopDefaultLegacy(Robot),__assign=function(){return(__assign=Object.assign||function(e){for(var t,r=1,n=arguments.length;r<n;r++)for(var o in t=arguments[r])Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o]);return e}).apply(this,arguments)};function __rest(e,t){var r={};for(o in e)Object.prototype.hasOwnProperty.call(e,o)&&t.indexOf(o)<0&&(r[o]=e[o]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols)for(var n=0,o=Object.getOwnPropertySymbols(e);n<o.length;n++)t.indexOf(o[n])<0&&Object.prototype.propertyIsEnumerable.call(e,o[n])&&(r[o[n]]=e[o[n]]);return r}function __awaiter(a,i,u,s){return new(u=u||Promise)(function(e,t){function r(e){try{o(s.next(e))}catch(e){t(e)}}function n(e){try{o(s.throw(e))}catch(e){t(e)}}function o(t){t.done?e(t.value):new u(function(e){e(t.value)}).then(r,n)}o((s=s.apply(a,i||[])).next())})}function __generator(r,n){var o,a,i,u={label:0,sent:function(){if(1&i[0])throw i[1];return i[1]},trys:[],ops:[]},e={next:t(0),throw:t(1),return:t(2)};return"function"==typeof Symbol&&(e[Symbol.iterator]=function(){return this}),e;function t(t){return function(e){return function(t){if(o)throw new TypeError("Generator is already executing.");for(;u;)try{if(o=1,a&&(i=2&t[0]?a.return:t[0]?a.throw||((i=a.return)&&i.call(a),0):a.next)&&!(i=i.call(a,t[1])).done)return i;switch(a=0,(t=i?[2&t[0],i.value]:t)[0]){case 0:case 1:i=t;break;case 4:return u.label++,{value:t[1],done:!1};case 5:u.label++,a=t[1],t=[0];continue;case 7:t=u.ops.pop(),u.trys.pop();continue;default:if(!(i=0<(i=u.trys).length&&i[i.length-1])&&(6===t[0]||2===t[0])){u=0;continue}if(3===t[0]&&(!i||t[1]>i[0]&&t[1]<i[3])){u.label=t[1];break}if(6===t[0]&&u.label<i[1]){u.label=i[1],i=t;break}if(i&&u.label<i[2]){u.label=i[2],u.ops.push(t);break}i[2]&&u.ops.pop(),u.trys.pop();continue}t=n.call(r,u)}catch(e){t=[6,e],a=0}finally{o=i=0}if(5&t[0])throw t[1];return{value:t[0]?t[1]:void 0,done:!0}}([t,e])}}}!function(e){e.WEAPP="weapp",e.ALIPAY="alipay",e.SWAN="swan",e.QUICK="quickapp",e.H5="h5",e.RN="rn"}(TaroEnv=TaroEnv||{}),function(e){e.WEAPP="project.config.json",e.ALIPAY="mini.project.json",e.SWAN="project.swan.json",e.QUICK="quickapp.config.json"}(TaroConfig=TaroConfig||{});var TS_REG=/^[0-9]{8}$/;function keywordTheme(e,t,r,n){void 0===n&&(n=!1);var o=new RegExp("^"+t);return(n?e.includes(t):o.test(e))?n?chalk__default.default.hex(r)(e):e.replace(o,chalk__default.default.hex(r)(t)):""}function CreateProgress(e,t){var r=this;this.text="项目["+t+"]"+{build:"构建",upload:"上传"}[e],this.start=function(){r.spinner=ora__default.default().start(chalk__default.default.yellow(r.text+"中... \n"))},this.fail=function(e){r.spinner||(r.spinner=ora__default.default()),r.spinner.fail(chalk__default.default.red(r.text+"失败:"+e+" \n"))},this.succeed=function(){r.spinner||(r.spinner=ora__default.default()),r.spinner.succeed(chalk__default.default.green(r.text+"成功! \n"))},this.stop=function(){r.spinner&&r.spinner.stop()}}function consoleBufferByTheme(e){e=e.toString().replace(/\n$/g,"");return e?(e=keywordTheme(e,"Tips:","#f5faa4",!0)||keywordTheme(e,"生成","#b278ff")||keywordTheme(e,"编译","#00ee76")||keywordTheme(e,"编译成功","#00ee76",!0)||keywordTheme(e,"监听文件","#6c6f7d",!0)||keywordTheme(e,"创建","#00aad1")||keywordTheme(e,"修改","#e3eb00")||keywordTheme(e,"Listening","#00aad1",!0)||keywordTheme(e,"Compiled","#00ee76",!0)||e,console.log(e),e):""}var pkgMap={1:{label:"体验",key:"Beta"},2:{label:"候选",key:"Rc"},3:{label:"正式",key:""}};function commandTrigger(o,a,i,u){return new Promise(function(t){var e=o.split(/\s/g),r=e[0],e=e.slice(1),e=child_process.spawn(r,e,{env:__assign(__assign({},process.env),u)}),n=new CreateProgress("build",i);a?(e.stdout.on("data",consoleBufferByTheme),e.stderr.on("data",function(e){consoleBufferByTheme(e),e.toString().trim().endsWith("编译成功")&&t({code:0})})):(e.stdout.on("data",function(){}),e.stderr.on("data",function(){}),n.start()),e.on("exit",function(){a||(t({code:0}),n.succeed())}),e.on("error",function(e){console.error(e),n.fail(e)})})}function readConfig(e){void 0===e&&(e="taro-ci");var t,r,n,o,a,i,u=require(path__default.default.resolve("./"+e+".config.js")),s=process.env.PLATFORM_ENV,u="function"==typeof u?u(merge):u;try{!s||(r=(t=path__default.default.resolve("./"+e+".release.json"))?require(t):null)&&0<r.length&&(o=(n=r[0].split("-")).splice(0,1)[0],a=n.splice(-1,1)[0],i=n.join("-"),TS_REG.test(a)||(a&&(n.push(a),i=n.join("-")),a=moment__default.default().format("YYYYMMDD")),u=__assign(__assign({},u),{ts:a,version:o,description:i}))}catch(e){}return u}function getArgs(){var e=minimist__default.default(process.argv.slice(2),{boolean:["watch","debug"]}),t=e.ci,r=void 0===t?"":t,n=e.dd,o=void 0===n?"":n,a=e.robot,i=void 0===a?1:a,u=e.watch,s=e.debug,c=__rest(e,["ci","dd","robot","watch","debug"]),t=r.split(","),n=t[0],a=t[1],e=o.split(","),t=e[0],e=e[1];return __assign({ci:r?{toolId:n,privateKey:a}:void 0,dd:o?{accessToken:t,secret:e}:void 0,watch:u,debug:s,robot:i,isWatch:Boolean(u),isDebug:Boolean(s),isCi:Boolean(i)},c)}function getTARO_ENV(){return process.env.PLATFORM_ENV}function createOutPath(e,t,r){return e+"."+(t?"dev":"build")+(r?".debug":"")}function getProjectConfigPath(){var e=getTARO_ENV();return path__default.default.resolve("./",TaroConfig[e.toLocaleUpperCase()]||TaroConfig.WEAPP)}function readProjectConfig(){return __awaiter(this,void 0,void 0,function(){var t;return __generator(this,function(e){return t=getProjectConfigPath(),t=fs__default.default.readFileSync(t),[2,JSON.parse(t.toString())]})})}function rewriteProjectConfig(a){return __awaiter(this,void 0,void 0,function(){var t,r,n,o;return __generator(this,function(e){switch(e.label){case 0:return r=readConfig().info,t=getArgs(),n=t.isWatch,o=t.isDebug,t=(r[a]||{}).appId,r="dist/"+createOutPath(a,n,o),n=getProjectConfigPath(),[4,readProjectConfig()];case 1:return o=e.sent(),"swan"===process.env.PLATFORM_ENV?o.smartProgramRoot=r:o.miniprogramRoot=r,o.appid=t,fs__default.default.writeFileSync(n,JSON.stringify(o,null,4)),process.env.ROOT_PATH=r,[2,a]}})})}function formatStrWithLine(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];return e.filter(function(e){return!!e}).join("-")}function getAndFormatConfigInfo(e){var t=getArgs().robot,r=readConfig(),n=r.version,o=r.description,a=r.info[e]||{},i=a.version,u=void 0===i?n:i,r=a.description,e=void 0===r?o:r,n=a.tag,i=void 0===n?"":n,o=a.label,r=a.robot,n=void 0===r?1:r,a=pkgMap[t+""],r=a.label,a=a.key,o=formatStrWithLine(r,void 0===o?"":o);return{robot:t+2*(n-1),versionPure:u,version:formatStrWithLine(a,i+u),description:"【"+o+"版-"+moment__default.default().format("YYYYMMDDHHmmss")+"】:"+e,label:o}}function formateCommand(e){var t=new RegExp("("+TaroEnv.WEAPP+"|"+TaroEnv.ALIPAY+"|"+TaroEnv.QUICK+"|"+TaroEnv.SWAN+"|"+TaroEnv.H5+"|"+TaroEnv.RN+")([.|-]{1})?(.+)?"),e=e.match(t)||[],t=e[1],e=e[3];return[t,void 0===e?"":e]}function isObject(e){return"[object Object]"===Object.prototype.toString.call(e)}function isArray(e){return Array.isArray(e)}function merge(e){for(var t=[],r=1;r<arguments.length;r++)t[r-1]=arguments[r];return t.reduce(function(e,t){return Object.keys(t).reduce(function(n,o){var e=t[o];return isObject(e)?n[o]=merge(n[o]||{},e):isArray(e)?n[o]=e.map(function(e,t){if(isObject(e)){var r=n[o]||[];return merge(r[t]||{},e)}return e}):n[o]=e,n},e)},e)}function build(a){return __awaiter(this,void 0,void 0,function(){var t,r,n,o;return __generator(this,function(e){switch(e.label){case 0:return t=getArgs().isWatch,o=readConfig().useTaroPluginBuildBy,n=process.env,r=n.MODE_ENV,n=n.PLATFORM_ENV,o="taro build --type "+("type"===o?a:"mode"===o&&r?r:n),t&&(o+=" --watch"),console.log(chalk__default.default.grey("编译平台:"),chalk__default.default.red(n),chalk__default.default.grey("版本模式:"),chalk__default.default.red(r||"默认")),[4,commandTrigger(o,t,a)];case 1:return e.sent(),[2,a]}})})}function weapp(u){return __awaiter(this,void 0,void 0,function(){var t,r,n,o,a,i;return __generator(this,function(e){switch(e.label){case 0:return[4,readConfig()];case 1:return r=e.sent().info,a=(void 0===r?{}:r)[u].appId,n=getAndFormatConfigInfo(u),t=n.version,r=n.description,n=n.robot,[4,readProjectConfig()];case 2:if(i=e.sent().setting,i=void 0===i?{}:i,o=null,!a)throw new Error("缺少taro-ci.config.info配置项,或缺少info[type].appId,无法上传到微信平台");return a=new ci__default.default.Project({appid:a,type:"miniProgram",projectPath:path__default.default.resolve("./"),privateKeyPath:path__default.default.resolve("./","private."+a+".key"),ignores:["node_modules/**/*"]}),[4,ci__default.default.upload({robot:n,project:a,version:t,desc:r,setting:i,onProgressUpdate:function(){}}).catch(function(e){return o=e})];case 3:return i=e.sent(),[2,{item:u,error:o,result:i}]}})})}function alipay(i){return __awaiter(this,void 0,void 0,function(){var t,r,n,o,a;return __generator(this,function(e){switch(e.label){case 0:return t=getArgs().ci,[4,readConfig()];case 1:if(a=e.sent(),o=a.info,r=void 0===o?{}:o,o=a.ci,a=void 0===o?t:o,o=r[i].appId,r=getAndFormatConfigInfo(i).versionPure,n=null,!o)throw new Error("缺少taro-ci.config.info配置项,或缺少info[type].appId,无法上传到支付宝平台");if(!a)throw new Error("缺少taro-ci.config.ci配置项,或缺少ci.alipay,无法上传到支付宝平台");return miniu__default.default.setConfig(a),a={project:path__default.default.resolve("./"),appId:o,clientType:"alipay",experience:!0,onProgressUpdate:function(){}},r&&"-1"!==r?[4,miniu__default.default.getUploadVersion({appId:o,clientType:"alipay"})]:[3,3];case 2:o=e.sent(),semver__default.default.gt(r,o)||(r=semver__default.default.inc(o,"patch")),a.packageVersion=r,e.label=3;case 3:return[4,miniu__default.default.miniUpload(a).catch(function(e){var t=e.code,e=e.msg;return n=new Error(t+":"+e)})];case 4:return a=e.sent(),[2,{item:i,result:a,error:n}]}})})}function upload(a){return __awaiter(this,void 0,void 0,function(){var t,r,n,o;return __generator(this,function(e){switch(e.label){case 0:if(r=getArgs(),t=r.isCi,n=r.isWatch,r=r.isDebug,n||!t)throw new Error(a+",未传入robot或者开发模式无法上传");if(r)throw new Error(a+",DEBUG模式无法上传");n=getTARO_ENV(),t={},(r=new CreateProgress("upload",a)).start(),e.label=1;case 1:switch(e.trys.push([1,8,,9]),n){case TaroEnv.WEAPP:return[3,2];case TaroEnv.ALIPAY:return[3,4]}return[3,6];case 2:return[4,weapp(a)];case 3:return t=e.sent(),[3,7];case 4:return[4,alipay(a)];case 5:return t=e.sent(),[3,7];case 6:throw n=new Error("不支持上传该平台,目前支持:"+TaroEnv.WEAPP+"、"+TaroEnv.ALIPAY),r.fail(n),n;case 7:return(o=t.error)?r.fail(o):r.succeed(),[3,9];case 8:return o=e.sent(),r.fail(o),[3,9];case 9:return[2,t]}})})}function notice(f){return __awaiter(this,void 0,void 0,function(){var t,r,n,o,a,i,u,s,c,l;return __generator(this,function(e){if(u=f.result,t=f.error,r=f.item,i=getArgs().dd,a=readConfig(),o=a.dd,s=void 0===o?i:o,n=a.name,c=a.git,l=void 0===c?"":c,i=getAndFormatConfigInfo(r),o=i.version,a=i.description,c=i.label,i=getTARO_ENV(),u=(u||{}).qrCodeUrl,!s)throw new Error("缺少taro-ci.config.notice配置项,无法发送钉钉通知");return s=new Robot__default.default(s),c=("["+r+"]"+n).toUpperCase()+":"+c,l=(new Robot__default.default.Markdown).setTitle(c).add("["+c+"]("+l+")\n"),t?l.add('**上传结果:上传失败**<font color="red">('+t.message+")</font>"):l.add("**上传结果:上传成功**"+(i===TaroEnv.ALIPAY?"【发布后合并到master】":"")).add("1. version:"+o).add("2. description:"+a).add(u?"\n![二维码]("+u+")":""),s.send(l),chalk__default.default.green("通知已发!"),[2]})})}function run(o){return __awaiter(this,void 0,void 0,function(){var t,r,n;return __generator(this,function(e){switch(e.label){case 0:return e.trys.push([0,5,,6]),n=formateCommand(o),t=n[0],r=n[1],process.env.PLATFORM_ENV=t,process.env.MODE_ENV=r,n=notice,t=upload,r=build,[4,rewriteProjectConfig(o)];case 1:return[4,r.apply(void 0,[e.sent()])];case 2:return[4,t.apply(void 0,[e.sent()])];case 3:return[4,n.apply(void 0,[e.sent()])];case 4:return e.sent(),[3,6];case 5:return n=e.sent(),ora__default.default().fail(chalk__default.default.gray(n.message)),[3,6];case 6:return[2]}})})}function init(){return __awaiter(this,void 0,void 0,function(){var t,r,n;return __generator(this,function(e){switch(e.label){case 0:return[4,readConfig()];case 1:if(t=e.sent(),n=getArgs(),r=n.type,r=void 0===r?t.type:r,n=n.isDebug,process.env.DEBUG_ENV=n?"OPEN":"CLOSE",!(n=r?Array.isArray(r)?r:[r]:null))return[2];r=0,n=n,e.label=2;case 2:return r<n.length?[4,run(n[r])]:[3,5];case 3:e.sent(),e.label=4;case 4:return r++,[3,2];case 5:return[2]}})})}init();
1
+ "use strict";var chalk=require("chalk"),child_process=require("child_process"),ora=require("ora"),path=require("path"),fs=require("fs"),minimist=require("minimist"),moment=require("moment"),ci=require("miniprogram-ci"),miniu=require("miniu"),semver=require("semver"),Robot=require("dingtalk-robot-sdk");function _interopDefaultLegacy(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var TaroEnv,TaroConfig,chalk__default=_interopDefaultLegacy(chalk),ora__default=_interopDefaultLegacy(ora),path__default=_interopDefaultLegacy(path),fs__default=_interopDefaultLegacy(fs),minimist__default=_interopDefaultLegacy(minimist),moment__default=_interopDefaultLegacy(moment),ci__default=_interopDefaultLegacy(ci),miniu__default=_interopDefaultLegacy(miniu),semver__default=_interopDefaultLegacy(semver),Robot__default=_interopDefaultLegacy(Robot),__assign=function(){return(__assign=Object.assign||function(e){for(var t,r=1,n=arguments.length;r<n;r++)for(var a in t=arguments[r])Object.prototype.hasOwnProperty.call(t,a)&&(e[a]=t[a]);return e}).apply(this,arguments)};function __rest(e,t){var r={};for(a in e)Object.prototype.hasOwnProperty.call(e,a)&&t.indexOf(a)<0&&(r[a]=e[a]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols)for(var n=0,a=Object.getOwnPropertySymbols(e);n<a.length;n++)t.indexOf(a[n])<0&&Object.prototype.propertyIsEnumerable.call(e,a[n])&&(r[a[n]]=e[a[n]]);return r}function __awaiter(o,i,s,u){return new(s=s||Promise)(function(e,t){function r(e){try{a(u.next(e))}catch(e){t(e)}}function n(e){try{a(u.throw(e))}catch(e){t(e)}}function a(t){t.done?e(t.value):new s(function(e){e(t.value)}).then(r,n)}a((u=u.apply(o,i||[])).next())})}function __generator(r,n){var a,o,i,s={label:0,sent:function(){if(1&i[0])throw i[1];return i[1]},trys:[],ops:[]},e={next:t(0),throw:t(1),return:t(2)};return"function"==typeof Symbol&&(e[Symbol.iterator]=function(){return this}),e;function t(t){return function(e){return function(t){if(a)throw new TypeError("Generator is already executing.");for(;s;)try{if(a=1,o&&(i=2&t[0]?o.return:t[0]?o.throw||((i=o.return)&&i.call(o),0):o.next)&&!(i=i.call(o,t[1])).done)return i;switch(o=0,(t=i?[2&t[0],i.value]:t)[0]){case 0:case 1:i=t;break;case 4:return s.label++,{value:t[1],done:!1};case 5:s.label++,o=t[1],t=[0];continue;case 7:t=s.ops.pop(),s.trys.pop();continue;default:if(!(i=0<(i=s.trys).length&&i[i.length-1])&&(6===t[0]||2===t[0])){s=0;continue}if(3===t[0]&&(!i||t[1]>i[0]&&t[1]<i[3])){s.label=t[1];break}if(6===t[0]&&s.label<i[1]){s.label=i[1],i=t;break}if(i&&s.label<i[2]){s.label=i[2],s.ops.push(t);break}i[2]&&s.ops.pop(),s.trys.pop();continue}t=n.call(r,s)}catch(e){t=[6,e],o=0}finally{a=i=0}if(5&t[0])throw t[1];return{value:t[0]?t[1]:void 0,done:!0}}([t,e])}}}!function(e){e.WEAPP="weapp",e.ALIPAY="alipay",e.SWAN="swan",e.QUICKAPP="quickapp",e.H5="h5",e.RN="rn"}(TaroEnv=TaroEnv||{}),function(e){e.WEAPP="project.config.json",e.ALIPAY="mini.project.json",e.SWAN="project.swan.json",e.QUICKAPP="quickapp.config.json"}(TaroConfig=TaroConfig||{});var TS_REG=/^[0-9]{8}$/;function keywordTheme(e,t,r,n){void 0===n&&(n=!1);var a=new RegExp("^"+t);return(n?e.includes(t):a.test(e))?n?chalk__default.default.hex(r)(e):e.replace(a,chalk__default.default.hex(r)(t)):""}function CreateProgress(e,t){var r=this;this.text="项目["+t+"]"+{build:"构建",upload:"上传"}[e],this.start=function(){r.spinner=ora__default.default().start(chalk__default.default.yellow(r.text+"中... \n"))},this.fail=function(e){r.spinner||(r.spinner=ora__default.default()),r.spinner.fail(chalk__default.default.red(r.text+"失败:"+e+" \n"))},this.succeed=function(){r.spinner||(r.spinner=ora__default.default()),r.spinner.succeed(chalk__default.default.green(r.text+"成功! \n"))},this.stop=function(){r.spinner&&r.spinner.stop()}}function consoleBufferByTheme(e){e=e.toString().replace(/\n$/g,"");return e?(e=keywordTheme(e,"Tips:","#f5faa4",!0)||keywordTheme(e,"生成","#b278ff")||keywordTheme(e,"编译","#00ee76")||keywordTheme(e,"编译成功","#00ee76",!0)||keywordTheme(e,"监听文件","#6c6f7d",!0)||keywordTheme(e,"创建","#00aad1")||keywordTheme(e,"修改","#e3eb00")||keywordTheme(e,"Listening","#00aad1",!0)||keywordTheme(e,"Compiled","#00ee76",!0)||e,console.log(e),e):""}var pkgMap={1:{label:"体验",key:"Beta"},2:{label:"候选",key:"Rc"},3:{label:"正式",key:""}};function commandTrigger(a,o,i,s,u){return new Promise(function(t){var e=a.split(/\s/g),r=e[0],e=e.slice(1),e=child_process.spawn(r,e,{env:__assign(__assign({},process.env),u)}),n=new CreateProgress("build",s);o||i?(e.stdout.on("data",consoleBufferByTheme),e.stderr.on("data",function(e){consoleBufferByTheme(e),o&&e.toString().trim().endsWith("编译成功")&&t({code:0})})):(e.stdout.on("data",function(){}),e.stderr.on("data",function(){}),n.start()),e.on("exit",function(){o||(t({code:0}),n.succeed())}),e.on("error",function(e){console.error(e),n.fail(e)})})}function readConfig(e){void 0===e&&(e="taro-ci");var t,r,n,a,o,i,s=require(path__default.default.resolve("./"+e+".config.js")),u=process.env.PLATFORM_ENV,s="function"==typeof s?s(merge):s;s.minSwanVersion||(s.minSwanVersion="3.310.35");try{!u||(r=(t=resolvePath(path__default.default.resolve("./"+e+".release"),".json"))?require(t):null)&&0<r.length&&(a=(n=r[0].split("-")).splice(0,1)[0],o=n.splice(-1,1)[0],i=n.join("-"),TS_REG.test(o)||(o&&(n.push(o),i=n.join("-")),o=moment__default.default().format("YYYYMMDD")),s=__assign(__assign({},s),{ts:o,version:a,description:i}))}catch(e){}return s}function getArgs(){var e=minimist__default.default(process.argv.slice(2),{boolean:["watch","debug"]}),t=e.ci,r=void 0===t?"":t,n=e.dd,a=void 0===n?"":n,o=e.robot,i=void 0===o?1:o,s=e.watch,u=e.debug,c=__rest(e,["ci","dd","robot","watch","debug"]),l=r.split(","),t=l[0],n=l[1],o=l[2],e=a.split(","),l=e[0],e=e[1];return __assign({ci:r?{toolId:t,privateKey:n,token:o}:void 0,dd:a?{accessToken:l,secret:e}:void 0,watch:s,debug:u,robot:i,isWatch:Boolean(s),isDebug:Boolean(u),isCi:Boolean(i)},c)}function getTARO_ENV(){return process.env.PLATFORM_ENV}function createOutPath(e,t,r){return e+"."+(t?"dev":"build")+(r?".debug":"")}function getProjectConfigPath(){var e=getTARO_ENV();return path__default.default.resolve("./",TaroConfig[e.toLocaleUpperCase()]||TaroConfig.WEAPP)}function readProjectConfig(){return __awaiter(this,void 0,void 0,function(){var t;return __generator(this,function(e){return t=getProjectConfigPath(),t=fs__default.default.readFileSync(t),[2,JSON.parse(t.toString())]})})}function rewriteExt(s){return __awaiter(this,void 0,void 0,function(){var t,r,n,a,o,i;return __generator(this,function(e){try{t=getArgs(),r=t.isWatch,n=t.isDebug,a="dist/"+createOutPath(s,r,n),o=path__default.default.resolve(a+"/ext.json"),(i=require(o)).extEnable=!1,fs__default.default.writeFileSync(o,JSON.stringify(i,null,4))}catch(e){console.log("ext-extEnable",e)}return[2,s]})})}function rewriteProjectConfig(o){return __awaiter(this,void 0,void 0,function(){var t,r,n,a;return __generator(this,function(e){switch(e.label){case 0:return(t=readConfig().info,a=getArgs(),r=a.isWatch,a=a.isDebug,t=(t[o]||{}).appId,r="dist/"+createOutPath(o,r,a),process.env.ROOT_PATH=r,process.env.FIX_ENV===TaroEnv.QUICKAPP)?[2,o]:(n=getProjectConfigPath(),[4,readProjectConfig()]);case 1:return a=e.sent(),"swan"===process.env.PLATFORM_ENV?a.smartProgramRoot=r:a.miniprogramRoot=r,a.appid=t,fs__default.default.writeFileSync(n,JSON.stringify(a,null,4)),[2,o]}})})}function formatStrWithLine(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];return e.filter(function(e){return!!e}).join("-")}function getAndFormatConfigInfo(e){var t=getArgs().robot,r=readConfig(),n=r.version,a=r.description,o=r.info,i=r.minSwanVersion,s=o[e]||{},u=s.version,r=void 0===u?n:u,o=s.description,e=void 0===o?a:o,n=s.tag,u=void 0===n?"":n,a=s.label,o=s.robot,n=void 0===o?1:o,s=pkgMap[t+""],o=s.label,s=s.key,a=formatStrWithLine(o,void 0===a?"":a);return{minSwanVersion:i,robot:t+2*(n-1),versionPure:r,version:formatStrWithLine(s,u+r),description:"【"+a+"版-"+moment__default.default().format("YYYYMMDDHHmmss")+"】:"+e,label:a}}function formateCommand(e){var t=new RegExp("("+TaroEnv.WEAPP+"|"+TaroEnv.ALIPAY+"|"+TaroEnv.QUICKAPP+"|"+TaroEnv.SWAN+"|"+TaroEnv.H5+"|"+TaroEnv.RN+")([.|-]{1})?(.+)?"),r=e.match(t)||[],e=r[1],t=r[3],r="";return e===TaroEnv.QUICKAPP&&(r=e,e=TaroEnv.WEAPP),[e,void 0===t?"":t,r]}function isObject(e){return"[object Object]"===Object.prototype.toString.call(e)}function isArray(e){return Array.isArray(e)}function merge(e){for(var t=[],r=1;r<arguments.length;r++)t[r-1]=arguments[r];return t.reduce(function(e,t){return Object.keys(t).reduce(function(n,a){var e=t[a];return isObject(e)?n[a]=merge(n[a]||{},e):isArray(e)?n[a]=e.map(function(e,t){if(isObject(e)){var r=n[a]||[];return merge(r[t]||{},e)}return e}):n[a]=e,n},e)},e)}function resolvePath(e,t){var r=process.env.PLATFORM_ENV,n=process.env.MODE_ENV,a=[r],o="";n&&a.unshift(r+"."+n,n);for(var i=0,s=a.length;i<s;i++){var u=a[i];if(fs__default.default.existsSync(o=e+"."+u+t))return o;if(fs__default.default.existsSync(o=""+e+path__default.default.sep+"index."+u+t))return o;var c=/\/index$/;if(c.test(e)&&fs__default.default.existsSync(o=""+e.replace(c,"."+u+"/index")+t))return o}return fs__default.default.existsSync(o=""+e+t)||fs__default.default.existsSync(o=""+e+path__default.default.sep+"index"+t)?o:""}function installCommand(e){return new Promise(function(t){console.log(chalk__default.default.red("缺少指令:"),chalk__default.default.gray(e)),child_process.spawn("npm",["install",e,"-g"],{shell:!0}).on("close",function(e){0===e?console.log(chalk__default.default.green("指令安装成功")):console.log(chalk__default.default.red("指令安装失败")),t(e)})})}function build(s){return __awaiter(this,void 0,void 0,function(){var t,r,n,a,o,i;return __generator(this,function(e){switch(e.label){case 0:return a=getArgs(),t=a.isWatch,r=a.isDebug,i=readConfig().useTaroPluginBuildBy,o=process.env,n=o.MODE_ENV,a=o.PLATFORM_ENV,o=o.FIX_ENV,i="taro build --type "+("type"===i?s:"mode"===i&&n?n:a),t&&(i+=" --watch"),console.log(chalk__default.default.grey("编译平台:"),chalk__default.default.red(o||a),chalk__default.default.grey("版本模式:"),chalk__default.default.red(n||"默认")),[4,commandTrigger(i,t,r,s)];case 1:return e.sent(),[2,s]}})})}function weapp(u){return __awaiter(this,void 0,void 0,function(){var t,r,n,a,o,i,s;return __generator(this,function(e){switch(e.label){case 0:return[4,readConfig()];case 1:return r=e.sent().info,n=(void 0===r?{}:r)[u],i=n.appId,t=n.template,a=getAndFormatConfigInfo(u),r=a.version,n=a.description,a=a.robot,[4,readProjectConfig()];case 2:if(s=e.sent().setting,s=void 0===s?{}:s,o=null,!i)throw new Error("缺少taro-ci.config.info配置项,或缺少info[type].appId,无法上传到微信平台");return 1!==t?[3,4]:[4,rewriteExt(u)];case 3:e.sent(),e.label=4;case 4:return i=new ci__default.default.Project({appid:i,type:"miniProgram",projectPath:path__default.default.resolve("./"),privateKeyPath:path__default.default.resolve("./","private."+i+".key"),ignores:["node_modules/**/*"]}),[4,ci__default.default.upload({robot:a,project:i,version:r,desc:n,setting:s,onProgressUpdate:function(){}}).catch(function(e){return o=e})];case 5:return s=e.sent(),[2,{item:u,error:o,result:s}]}})})}function alipay(i){return __awaiter(this,void 0,void 0,function(){var t,r,n,a,o;return __generator(this,function(e){switch(e.label){case 0:return t=getArgs().ci,[4,readConfig()];case 1:if(a=e.sent(),o=a.info,r=void 0===o?{}:o,o=a.ci,a=r[i].appId,r=__assign(__assign({},o),t),t=r.toolId,o=r.privateKey,r=getAndFormatConfigInfo(i).versionPure,n=null,!a)throw new Error("缺少taro-ci.config.info配置项,或缺少info[type].appId,无法上传到支付宝平台");if(!t)throw new Error("缺少taro-ci.config.ci配置项,或缺少ci.alipay,无法上传到支付宝平台");return miniu__default.default.setConfig({toolId:t,privateKey:o}),o={project:path__default.default.resolve("./"),appId:a,clientType:"alipay",experience:!0,onProgressUpdate:function(){}},r&&"-1"!==r?[4,miniu__default.default.getUploadVersion({appId:a,clientType:"alipay"})]:[3,3];case 2:a=e.sent(),semver__default.default.gt(r,a)||(r=semver__default.default.inc(a,"patch")),o.packageVersion=r,e.label=3;case 3:return[4,miniu__default.default.miniUpload(o).catch(function(e){return n=new Error(""+e.message)})];case 4:return o=e.sent(),[2,{item:i,result:o,error:n}]}})})}function createUploadFailMessage(e){return"上传失败"+((e=void 0===e?!0:e)?",缺少swan-toolkit包":"")}function upload$1(a,o){return void 0===o&&(o=!1),new Promise(function(t){var e=a.token,r=a.version,n=a.desc,r=("swan upload -p ./ --token "+e+" --min-swan-version "+a.minSwanVersion+" --release-version "+r+" -d "+n.replace(/\s/,"")).split(/\s/g),n=r[0],r=r.slice(1);child_process.spawn(n,r,{shell:!0}).on("close",function(e){0===e?t({}):127===e?installCommand("swan-toolkit").then(function(){o?t({error:createUploadFailMessage()}):upload$1(a,!0).then(t).catch(t)}).catch(function(){t({error:createUploadFailMessage()})}):t({error:createUploadFailMessage(!1)})})})}function swan(i){return __awaiter(this,void 0,void 0,function(){var t,r,n,a,o;return __generator(this,function(e){switch(e.label){case 0:return n=getArgs().ci,[4,readConfig()];case 1:if(a=e.sent().ci,o=getAndFormatConfigInfo(i),t=o.versionPure,r=o.description,o=o.minSwanVersion,n=__assign(__assign({},a),n).token,a=null,!(n=void 0===n?"":n))throw new Error("缺少taro-ci.config.ci配置项,或缺少ci.swan,无法上传到百度平台");return[4,upload$1({token:n,version:t,desc:r,minSwanVersion:o})];case 2:return o=e.sent(),[2,{item:i,result:o,error:a}]}})})}function upload(o){return __awaiter(this,void 0,void 0,function(){var t,r,n,a;return __generator(this,function(e){switch(e.label){case 0:if(r=getArgs(),t=r.isCi,n=r.isWatch,r=r.isDebug,process.env.FIX_ENV)throw new Error("暂不支持快应用上传");if(n||!t)throw new Error(o+",未传入robot或者开发模式无法上传");if(r)throw new Error(o+",DEBUG模式无法上传");n=getTARO_ENV(),t={},(r=new CreateProgress("upload",o)).start(),e.label=1;case 1:switch(e.trys.push([1,10,,11]),n){case TaroEnv.WEAPP:return[3,2];case TaroEnv.ALIPAY:return[3,4];case TaroEnv.SWAN:return[3,6]}return[3,8];case 2:return[4,weapp(o)];case 3:return t=e.sent(),[3,9];case 4:return[4,alipay(o)];case 5:return t=e.sent(),[3,9];case 6:return[4,swan(o)];case 7:return t=e.sent(),[3,9];case 8:throw n=new Error("不支持上传该平台,目前支持:"+TaroEnv.WEAPP+"、"+TaroEnv.ALIPAY),r.fail(n),n;case 9:return(a=t.error)?r.fail(a):r.succeed(),[3,11];case 10:return a=e.sent(),r.fail(a),[3,11];case 11:return[2,t]}})})}function notice(f){return __awaiter(this,void 0,void 0,function(){var t,r,n,a,o,i,s,u,c,l;return __generator(this,function(e){if(s=f.result,t=f.error,r=f.item,i=getArgs().dd,o=readConfig(),a=o.dd,u=void 0===a?i:a,n=o.name,c=o.git,l=void 0===c?"":c,i=getAndFormatConfigInfo(r),a=i.version,o=i.description,c=i.label,i=getTARO_ENV(),s=(s||{}).qrCodeUrl,!u)throw new Error("缺少taro-ci.config.notice配置项,无法发送钉钉通知");return u=new Robot__default.default(u),c=("["+r+"]"+n).toUpperCase()+":"+c,l=(new Robot__default.default.Markdown).setTitle(c).add("["+c+"]("+l+")\n"),t?l.add('**上传结果:上传失败**<font color="red">('+t.message+")</font>"):l.add("**上传结果:上传成功**"+(i===TaroEnv.ALIPAY?"【发布后合并到master】":"")).add("1. version:"+a).add("2. description:"+o).add(s?"\n![二维码]("+s+")":""),u.send(l),chalk__default.default.green("通知已发!"),[2]})})}function run(a){return __awaiter(this,void 0,void 0,function(){var t,r,n;return __generator(this,function(e){switch(e.label){case 0:return e.trys.push([0,5,,6]),r=formateCommand(a),n=r[0],t=r[1],r=r[2],process.env.PLATFORM_ENV=n,process.env.MODE_ENV=t,process.env.FIX_ENV=r,n=notice,t=upload,r=build,[4,rewriteProjectConfig(a)];case 1:return[4,r.apply(void 0,[e.sent()])];case 2:return[4,t.apply(void 0,[e.sent()])];case 3:return[4,n.apply(void 0,[e.sent()])];case 4:return e.sent(),[3,6];case 5:return n=e.sent(),ora__default.default().fail(chalk__default.default.gray(n.message)),[3,6];case 6:return[2]}})})}function init(){return __awaiter(this,void 0,void 0,function(){var t,r,n;return __generator(this,function(e){switch(e.label){case 0:return[4,readConfig()];case 1:if(t=e.sent(),n=getArgs(),r=n.type,r=void 0===r?t.type:r,n=n.isDebug,process.env.DEBUG_ENV=n?"OPEN":"CLOSE",!(n=r?Array.isArray(r)?r:[r]:null))return[2];r=0,n=n,e.label=2;case 2:return r<n.length?[4,run(n[r])]:[3,5];case 3:e.sent(),e.label=4;case 4:return r++,[3,2];case 5:return[2]}})})}init();
2
2
  //# sourceMappingURL=taro-ci.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"taro-ci.js","sources":["../src/types/index.ts","../node_modules/tslib/tslib.es6.js","../src/utils/index.ts","../src/core/command/build.ts","../src/core/command/upload/weapp.ts","../src/core/command/upload/alipay.ts","../src/core/command/upload/index.ts","../src/core/command/notice.ts","../src/core/index.ts","../src/index.ts"],"sourcesContent":["import minimist from \"minimist\";\n// 命令返回\nexport type CommandPromiseRes = {\n code: number,\n err?: string\n}\n\n// 自定义环境变量\nexport type EnvCustom = {\n MODE_ENV?: string,\n PLATFORM_ENV?: string,\n ROOT_PATH?: string,\n}\n\n// 打包配置项\nexport type BuildOptions = {\n appId?: string,\n isWatch?: boolean,\n isCi?: boolean\n};\n\nexport type Ci = { privateKey: string, toolId: string }\nexport type Dd = { accessToken: string, secret: string }\n// 携带参数\nexport interface ArgsResponse extends minimist.ParsedArgs {\n robot: Robot,\n watch: boolean,\n ci?: Ci,\n dd?: Dd,\n isCi?: boolean,\n isWatch?: boolean\n}\n\n// info组内选项\nexport type InfoOptions = {\n appId: string,\n version?: string,\n description?: string,\n label?: string,\n tag?: string,\n robot?: number\n}\n\n// ci配置项\nexport type ConfigOptions = {\n name: string,\n version?: string,\n description?: string,\n type: string | Array<string>,\n info: {\n [propertys: string]: InfoOptions\n },\n useTaroPluginBuildBy?: \"normal\" | \"mode\" | \"type\",\n git?: string,\n ci?: Ci,\n dd?: Dd,\n}\n\nexport type UploadResponse = {\n item: string,\n result?: {\n qrCodeUrl?: string,\n [propertys: string]: any\n },\n error: Error\n}\n\nexport type ProgressType = \"build\" | \"upload\";\n\nexport type Robot =\n | 1\n | 2\n | 3\n | 4\n | 5\n | 6\n | 7\n | 8\n | 9\n | 10\n | 11\n | 12\n | 13\n | 14\n | 15\n | 16\n | 17\n | 18\n | 19\n | 20\n | 21\n | 22\n | 23\n | 24\n | 25\n | 26\n | 27\n | 28\n | 29\n | 30;\n\nexport type ConfigInfoResponse = {\n version: string,\n description: string,\n label: string,\n robot?: Robot,\n versionPure?: string\n}\n\nexport type ProjectConfig = {\n miniprogramRoot: string,\n smartProgramRoot?: string,\n appid: string,\n setting: {\n [propertys: string]: any\n }\n}\n\nexport type PkgMap = { [propertys: string]: { label: string, key: string } };\n\nexport enum TaroEnv {\n \"WEAPP\" = \"weapp\",\n \"ALIPAY\" = \"alipay\",\n \"SWAN\" = \"swan\",\n \"QUICK\" = \"quickapp\",\n \"H5\" = \"h5\",\n \"RN\" = \"rn\"\n}\n\nexport enum TaroConfig {\n \"WEAPP\" = \"project.config.json\",\n \"ALIPAY\" = \"mini.project.json\",\n \"SWAN\" = \"project.swan.json\",\n \"QUICK\" = \"quickapp.config.json\"\n}\n\nexport type Platform = \"weapp\" | \"alipay\" | \"swan\" | \"quickapp\" | \"h5\" | \"rn\"","/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation. All rights reserved.\r\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\r\nthis file except in compliance with the License. You may obtain a copy of the\r\nLicense at http://www.apache.org/licenses/LICENSE-2.0\r\n\r\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\r\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\r\nMERCHANTABLITY OR NON-INFRINGEMENT.\r\n\r\nSee the Apache Version 2.0 License for specific language governing permissions\r\nand limitations under the License.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport function __exportStar(m, exports) {\r\n for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\n\r\nexport function __values(o) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator], i = 0;\r\n if (m) return m.call(o);\r\n return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n};\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\r\n result.default = mod;\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n","import { spawn } from \"child_process\";\nimport ora from \"ora\";\nimport chalk from \"chalk\";\nimport path from \"path\";\nimport fs from \"fs\";\nimport minimist from \"minimist\";\nimport moment from \"moment\";\nimport { CommandPromiseRes, EnvCustom, TaroEnv, ConfigOptions, PkgMap, ConfigInfoResponse, Robot, ArgsResponse, ProjectConfig, Platform, ProgressType, TaroConfig } from \"types\";\n\nconst TS_REG = /^[0-9]{8}$/;\n/**\n * \n * @description 输出配色,替换关键词\n * @param str \n * @param tag \n * @param color \n * @param isAll\n * @returns \n */\nfunction keywordTheme(str: string, keyword: string, color: string, isAll: boolean = false): string {\n const rule = new RegExp(`^${keyword}`);\n const isMatch = isAll ? str.includes(keyword) : rule.test(str);\n return isMatch ? isAll ? chalk.hex(color)(str) : str.replace(rule, chalk.hex(color)(keyword)) : \"\"\n}\n\n/**\n * \n * @description 进度描述信息\n * @param type \n * @param status \n * @returns \n */\nexport function CreateProgress(type: ProgressType, item: string) {\n const typeMap = {\n build: \"构建\",\n upload: \"上传\"\n };\n this.text = `项目[${item}]${typeMap[type]}`;\n this.start = () => {\n this.spinner = ora().start(chalk.yellow(`${this.text}中... \\n`))\n }\n this.fail = (err: Error) => {\n if (!this.spinner) {\n this.spinner = ora();\n }\n this.spinner.fail(chalk.red(`${this.text}失败:${err} \\n`));\n }\n this.succeed = () => {\n if (!this.spinner) {\n this.spinner = ora()\n }\n this.spinner.succeed(chalk.green(`${this.text}成功! \\n`));\n }\n this.stop = () => {\n if (!this.spinner) return;\n this.spinner.stop();\n }\n}\n\n/**\n * \n * @description 风格化并打印结果\n */\nfunction consoleBufferByTheme(data: ArrayBuffer): string {\n let str = data.toString().replace(/\\n$/g, \"\");\n if (!str) return \"\"\n str = keywordTheme(str, \"Tips:\", \"#f5faa4\", true)\n || keywordTheme(str, \"生成\", \"#b278ff\")\n || keywordTheme(str, \"编译\", \"#00ee76\")\n || keywordTheme(str, \"编译成功\", \"#00ee76\", true)\n || keywordTheme(str, \"监听文件\", \"#6c6f7d\", true)\n || keywordTheme(str, \"创建\", \"#00aad1\")\n || keywordTheme(str, \"修改\", \"#e3eb00\")\n || keywordTheme(str, \"Listening\", \"#00aad1\", true)\n || keywordTheme(str, \"Compiled\", \"#00ee76\", true)\n || str;\n console.log(str);\n return str;\n}\n\n// 发布包对应版本\nexport const pkgMap: PkgMap = {\n \"1\": {\n label: \"体验\",\n key: \"Beta\"\n },\n \"2\": {\n label: \"候选\",\n key: \"Rc\"\n },\n \"3\": {\n label: \"正式\",\n key: \"\"\n }\n};\n\n/**\n * \n * @description 命令触发器:执行系统指令\n * @param commandStr 命令行字符串\n * @returns \n */\nexport function commandTrigger(commandStr: string, isWatch: boolean, item: string, env?: EnvCustom): Promise<CommandPromiseRes> {\n return new Promise((resolve) => {\n const [command, ...arg] = commandStr.split(/\\s/g);\n const subprocess = spawn(command, arg, {\n env: {\n ...process.env,\n ...env\n }\n });\n\n const progressIns = new CreateProgress(\"build\", item);\n if (isWatch) {\n // 打印数据输出\n subprocess.stdout.on(\"data\", consoleBufferByTheme);\n // 打印错误输出\n subprocess.stderr.on(\"data\", data => {\n consoleBufferByTheme(data);\n if (data.toString().trim().endsWith(\"编译成功\")) {\n resolve({ code: 0 });\n }\n });\n } else {\n subprocess.stdout.on(\"data\", () => { });\n subprocess.stderr.on(\"data\", () => { });\n progressIns.start();\n }\n\n subprocess.on(\"exit\", () => {\n if (!isWatch) {\n resolve({ code: 0 });\n progressIns.succeed();\n }\n });\n\n // 监听报错信息\n subprocess.on(\"error\", (err) => {\n console.error(err);\n progressIns.fail(err);\n });\n })\n}\n\n/**\n * \n * @description 读取ci配置\n * @param name \n * @returns \n */\nexport function readConfig(name: string = \"taro-ci\"): ConfigOptions {\n const config = require(path.resolve(`./${name}.config.js`));\n const { PLATFORM_ENV } = process.env;\n let opts = typeof config === 'function' ? config(merge) : config;\n try {\n // 使用发布配置项\n if (PLATFORM_ENV) {\n const releaseJson = path.resolve(`./${name}.release.json`);\n const list = releaseJson ? require(releaseJson) : null;\n if (list && list.length > 0) {\n const topList = list[0].split(\"-\");\n const version = topList.splice(0, 1)[0];\n let ts = topList.splice(-1, 1)[0];\n let description = topList.join(\"-\");\n if (!TS_REG.test(ts)) {\n if (ts) {\n topList.push(ts);\n description = topList.join(\"-\");\n }\n ts = moment().format(\"YYYYMMDD\");\n }\n opts = {\n ...opts,\n ts,\n version,\n description,\n };\n }\n }\n } catch (error) { }\n return opts;\n}\n\n/**\n * \n * @description 获取命令行参数\n * @returns \n */\nexport function getArgs(): ArgsResponse {\n const { ci = \"\", dd = \"\", robot = 1, watch, debug, ...rest } = minimist(process.argv.slice(2), { boolean: [\"watch\", \"debug\"] });\n const [toolId, privateKey] = ci.split(\",\");\n const [accessToken, secret] = dd.split(\",\");\n return {\n ci: ci ? { toolId, privateKey } : void (0),\n dd: dd ? { accessToken, secret } : void (0),\n watch,\n debug,\n robot,\n isWatch: Boolean(watch),\n isDebug: Boolean(debug),\n isCi: Boolean(robot),\n ...rest\n } as ArgsResponse;\n}\n\n/**\n * \n * @description 获取类似Taro的环境变量,包含aliapp,weapp\n * @param item \n * @returns \n */\nexport function getTARO_ENV(): Platform {\n return process.env.PLATFORM_ENV as Platform;\n}\n\n/**\n * \n * @description 输出路径\n * @param item \n * @param isWatch \n * @returns \n */\nfunction createOutPath(item: string, isWatch: boolean, isDebug: boolean): string {\n return item + `.${isWatch ? \"dev\" : \"build\"}` + (isDebug ? \".debug\" : \"\");\n}\n\n/**\n * \n * @param item \n * @returns \n */\nexport function getProjectConfigPath() {\n const TARO_ENV = getTARO_ENV()\n return path.resolve(\"./\", TaroConfig[TARO_ENV.toLocaleUpperCase()] || TaroConfig.WEAPP)\n}\n\n/**\n * \n * @description 读取项目配置信息\n * @param item \n * @returns \n */\nexport async function readProjectConfig(): Promise<ProjectConfig> {\n const projectConfigPath = getProjectConfigPath();\n const data = fs.readFileSync(projectConfigPath);\n return JSON.parse(data.toString());\n}\n\n/**\n * \n * @description 重写小程序配置文件 project.config.json\n */\nexport async function rewriteProjectConfig(item: string): Promise<string> {\n const { info } = readConfig();\n const { isWatch, isDebug } = getArgs();\n const { appId } = info[item] || {};\n const outPath = `dist/${createOutPath(item, isWatch, isDebug)}`;\n const projectConfigPath = getProjectConfigPath();\n const projectConfig = await readProjectConfig();\n if (process.env.PLATFORM_ENV === 'swan') {\n projectConfig.smartProgramRoot = outPath;\n } else {\n projectConfig.miniprogramRoot = outPath;\n }\n projectConfig.appid = appId;\n fs.writeFileSync(projectConfigPath, JSON.stringify(projectConfig, null, 4));\n process.env.ROOT_PATH = outPath;\n\n return item;\n}\n\n/**\n * \n * @description 将参数组合通过 \"-\" 连线 \n * @param arg \n * @returns \n */\nfunction formatStrWithLine(...arg: Array<string>): string {\n return arg.filter(item => !!item).join(\"-\")\n}\n\n/**\n * \n * @description 获取taro-ci.config.info 并根据一定规则格式化\n * @param item \n * @param robot \n */\nexport function getAndFormatConfigInfo(item: string): ConfigInfoResponse {\n const { robot } = getArgs();\n const { version: rV, description: rD, info } = readConfig();\n const { version = rV, description = rD, tag = \"\", label: iLabel = \"\", robot: iRobot = 1 } = info[item] || {};\n const { label: pkgLabel, key: pkgKey } = pkgMap[robot + \"\"]; // [体验版、正式版、临时版]\n const label = formatStrWithLine(pkgLabel, iLabel);\n return {\n robot: robot + (iRobot - 1) * 2 as Robot,\n versionPure: version,\n version: formatStrWithLine(pkgKey, tag + (version)),\n description: `【${label}版-${moment().format(\n \"YYYYMMDDHHmmss\"\n )}】:${description}`,\n label\n }\n}\n\n/**\n * \n * @description 格式化指令,首位为平台信息\n * @param item \n * @returns \n */\nexport function formateCommand(item: string): [Platform, string] {\n const reg = new RegExp(`(${TaroEnv.WEAPP}|${TaroEnv.ALIPAY}|${TaroEnv.QUICK}|${TaroEnv.SWAN}|${TaroEnv.H5}|${TaroEnv.RN})([\\.|\\-]{1})?(.+)?`)\n const [, platform, , mode = \"\"] = item.match(reg) || []\n return [platform as Platform, mode]\n}\n\nexport function isObject(obj) {\n return Object.prototype.toString.call(obj) === '[object Object]'\n}\nexport function isArray(arr) {\n return Array.isArray(arr)\n}\n\n/**\n * @description 合并数据\n * @param target \n * @param arg \n * @returns \n */\nexport function merge(target, ...arg) {\n return arg.reduce((acc, cur) => {\n return Object.keys(cur).reduce((subAcc, key) => {\n const srcVal = cur[key]\n if (isObject(srcVal)) {\n subAcc[key] = merge(subAcc[key] ? subAcc[key] : {}, srcVal)\n } else if (isArray(srcVal)) {\n subAcc[key] = srcVal.map((item, idx) => {\n if (isObject(item)) {\n const curAccVal = subAcc[key] ? subAcc[key] : []\n return merge(curAccVal[idx] ? curAccVal[idx] : {}, item)\n } else {\n return item\n }\n })\n } else {\n subAcc[key] = srcVal\n }\n return subAcc\n }, acc)\n }, target)\n}\n\n/**\n * \n * @description 处理路径\n * @param p \n * @param suffix \n * @returns \n */\nexport function resolvePath(p: string, suffix: string): string {\n const platformEnv = process.env.PLATFORM_ENV;\n const modeEnv = process.env.MODE_ENV;\n const types = [platformEnv];\n let realpath = \"\";\n if (modeEnv) {\n types.unshift(`${platformEnv}.${modeEnv}`, modeEnv);\n }\n for (let i = 0, len = types.length; i < len; i++) {\n const type = types[i];\n if (fs.existsSync(realpath = `${p}.${type}${suffix}`)) {\n return realpath;\n }\n if (fs.existsSync(realpath = `${p}${path.sep}index.${type}${suffix}`)) {\n return realpath;\n }\n const pathReg = /\\/index$/;\n if (pathReg.test(p) && fs.existsSync(realpath = `${p.replace(pathReg, `.${type}/index`)}${suffix}`)) {\n return realpath;\n }\n }\n if (fs.existsSync(realpath = `${p}${suffix}`)) {\n return realpath;\n }\n if (fs.existsSync(realpath = `${p}${path.sep}index${suffix}`)) {\n return realpath;\n }\n return \"\"\n}","import chalk from \"chalk\";\nimport { commandTrigger, getArgs, readConfig } from \"utils\";\n\nasync function build(item: string): Promise<string> {\n const { isWatch } = getArgs();\n const { useTaroPluginBuildBy } = readConfig()\n const { MODE_ENV, PLATFORM_ENV } = process.env\n // 生成打印指令\n // useTaroPluginBuild 使用taro-plugin-build插件会自定义编译平台\n // useTaroPluginBuildBy 编译平台模式 [mode,type,normal]\n let commandStr = `taro build --type ${useTaroPluginBuildBy === \"type\" ? item : (useTaroPluginBuildBy === \"mode\" && MODE_ENV) ? MODE_ENV : PLATFORM_ENV}`;\n\n if (isWatch) {\n // 开发模式,开启监听\n commandStr += \" --watch\";\n }\n\n // 打印当前执行的指令\n console.log(chalk.grey(\"编译平台:\"), chalk.red(PLATFORM_ENV), chalk.grey(\"版本模式:\"), chalk.red(MODE_ENV || \"默认\"));\n // 执行命令\n await commandTrigger(commandStr, isWatch, item);\n return item;\n}\n\nexport default build;\n","import { getAndFormatConfigInfo, readConfig, readProjectConfig } from \"utils\";\nimport path from \"path\";\nimport ci from \"miniprogram-ci\"; // 微信sdk\nimport { UploadResponse } from \"types\";\n\nasync function weapp(item: string): Promise<UploadResponse> {\n const { info = {} } = await readConfig();\n const { appId } = info[item];\n const { version, description: desc, robot } = getAndFormatConfigInfo(item);\n const { setting = {} } = await readProjectConfig();\n let error = null;\n\n if (!appId) {\n throw new Error(\"缺少taro-ci.config.info配置项,或缺少info[type].appId,无法上传到微信平台\");\n }\n\n const project = new ci.Project({\n appid: appId,\n type: 'miniProgram',\n projectPath: path.resolve(\"./\"),\n privateKeyPath: path.resolve(\"./\", `private.${appId}.key`),\n ignores: ['node_modules/**/*'],\n });\n\n const result = await ci.upload({\n robot,\n project,\n version,\n desc,\n setting,\n onProgressUpdate: () => { }\n }).catch(err => error = err);\n\n return {\n item,\n error,\n result\n }\n}\n\nexport default weapp;\n","import { getAndFormatConfigInfo, getArgs, readConfig } from \"utils\";\nimport { UploadResponse } from \"types\";\nimport path from \"path\";\nimport miniu, { MiniUploadOptions } from \"miniu\";\nimport semver from \"semver\";\n\nasync function alipay(item: string): Promise<UploadResponse> {\n const { ci: argsCI } = getArgs();\n const { info = {}, ci = argsCI } = await readConfig();\n const { appId } = info[item];\n let { versionPure: packageVersion } = getAndFormatConfigInfo(item);\n let error = null;\n\n if (!appId) {\n throw new Error(\"缺少taro-ci.config.info配置项,或缺少info[type].appId,无法上传到支付宝平台\");\n }\n\n if (!ci) {\n throw new Error(\"缺少taro-ci.config.ci配置项,或缺少ci.alipay,无法上传到支付宝平台\");\n }\n\n // 初始化配置\n miniu.setConfig(ci);\n\n const clientType = \"alipay\";\n const uploadConfig = {\n project: path.resolve(\"./\"),\n appId,\n clientType,\n experience: true,\n onProgressUpdate: () => { },\n } as MiniUploadOptions;\n\n if (packageVersion && packageVersion !== \"-1\") {\n // 上传版本字符串\n const uploadLastVersion = await miniu.getUploadVersion({\n appId,\n clientType,\n });\n if (!semver.gt(packageVersion, uploadLastVersion)) {\n // 传入的版本比最新版本号小,则最新版本号自增1\n packageVersion = semver.inc(uploadLastVersion, \"patch\");\n }\n uploadConfig.packageVersion = packageVersion;\n }\n\n const result = await miniu.miniUpload(uploadConfig).catch(({ code, msg }) => error = new Error(`${code}:${msg}`));\n\n return {\n item,\n result,\n error\n }\n}\n\nexport default alipay;\n","import { TaroEnv, UploadResponse } from \"types\";\nimport { CreateProgress, getArgs, getTARO_ENV } from \"utils\";\nimport weapp from \"./weapp\";\nimport alipay from \"./alipay\";\n\nasync function upload(item: string): Promise<UploadResponse> {\n const { isCi, isWatch, isDebug } = getArgs()\n if (isWatch || !isCi) {\n throw new Error(`${item},未传入robot或者开发模式无法上传`);\n }\n if (isDebug) {\n throw new Error(`${item},DEBUG模式无法上传`);\n }\n const TARO_ENV = getTARO_ENV();\n\n let result = {} as UploadResponse;\n const progressIns = new CreateProgress(\"upload\", item);\n progressIns.start();\n try {\n switch (TARO_ENV) {\n case TaroEnv.WEAPP: // 开发环境 - 微信\n result = await weapp(item);\n break;\n\n case TaroEnv.ALIPAY: // 开发环境 - 支付宝\n result = await alipay(item);\n break;\n\n default:\n const err = new Error(`不支持上传该平台,目前支持:${TaroEnv.WEAPP}、${TaroEnv.ALIPAY}`);\n progressIns.fail(err);\n throw err;\n }\n const { error } = result;\n error\n ? progressIns.fail(error)\n : progressIns.succeed();\n } catch (err) {\n progressIns.fail(err)\n }\n\n return result\n}\n\n\nexport default upload;\n","import Robot from \"dingtalk-robot-sdk\";\nimport { TaroEnv, UploadResponse } from \"types\";\nimport { getAndFormatConfigInfo, getArgs, getTARO_ENV, readConfig } from \"utils\";\nimport chalk from \"chalk\";\n\n/**\n * \n * @description 通过钉钉群发送上传结果通知\n */\nasync function notice(uploadResponse: UploadResponse) {\n const { result, error, item } = uploadResponse;\n const { dd: argsDD } = getArgs();\n const { dd = argsDD, name, git = `` } = readConfig();\n const { version, description, label } = getAndFormatConfigInfo(item);\n const TARO_ENV = getTARO_ENV();\n const { qrCodeUrl } = result || {};\n if (!dd) {\n throw new Error(\"缺少taro-ci.config.notice配置项,无法发送钉钉通知\");\n }\n const ddIns = new Robot(dd);\n\n const markdownTitle = `[${item}]${name}`.toUpperCase() + \":\" + label;\n const content = new Robot.Markdown()\n .setTitle(markdownTitle)\n .add(`[${markdownTitle}](${git})\\n`)\n\n if (error) {\n content.add(`**上传结果:上传失败**<font color=\"red\">(${error.message})</font>`);\n } else {\n content.add(`**上传结果:上传成功**${TARO_ENV === TaroEnv.ALIPAY ? \"【发布后合并到master】\" : \"\"}`)\n .add(`1. version:${version}`)\n .add(`2. description:${description}`)\n .add(qrCodeUrl ? `\\n![二维码](${qrCodeUrl})` : \"\");\n }\n\n ddIns.send(content);\n chalk.green(`通知已发!`)\n}\n\nexport default notice;","import build from \"./command/build\";\nimport upload from \"./command/upload\";\nimport notice from \"./command/notice\";\nimport ora from \"ora\";\nimport chalk from \"chalk\";\nimport { rewriteProjectConfig, formateCommand, getArgs, readConfig } from \"utils\";\n\nasync function run(item: string) {\n try {\n const [platform, mode] = formateCommand(item);\n process.env.PLATFORM_ENV = platform;\n process.env.MODE_ENV = mode;\n await notice(await upload(await build(await rewriteProjectConfig(item))));\n } catch (err) {\n ora().fail(chalk.gray(err.message));\n }\n}\n\nasync function init() {\n // 读取ci配置项\n const config = await readConfig();\n const { type = config.type, isDebug } = getArgs();\n process.env.DEBUG_ENV = isDebug ? \"OPEN\" : \"CLOSE\";\n const list = type ? Array.isArray(type) ? type : [type] : null;\n if (!list) return;\n\n for (let item of list) {\n await run(item)\n }\n}\n\nexport default init;\n","import init from \"./core\";\n\ninit();\n"],"names":["TaroEnv","TaroConfig","__assign","Object","assign","t","s","i","n","arguments","length","p","prototype","hasOwnProperty","call","apply","this","__rest","e","indexOf","getOwnPropertySymbols","propertyIsEnumerable","__awaiter","thisArg","_arguments","P","generator","Promise","resolve","reject","fulfilled","value","step","next","rejected","result","done","then","__generator","body","f","y","_","label","sent","trys","ops","g","verb","throw","return","Symbol","iterator","v","op","TypeError","pop","push","TS_REG","keywordTheme","str","keyword","color","isAll","rule","RegExp","includes","test","chalk","hex","replace","CreateProgress","type","item","text","build","upload","start","_this","spinner","ora","yellow","fail","err","red","succeed","green","stop","consoleBufferByTheme","data","toString","console","log","pkgMap","1","key","2","3","commandTrigger","commandStr","isWatch","env","_a","split","command","arg","subprocess","spawn","process","progressIns","stdout","on","stderr","trim","endsWith","code","error","readConfig","name","releaseJson","list","topList","version","ts","description","config","require","path","PLATFORM_ENV","opts","merge","splice","join","moment","format","getArgs","minimist","argv","slice","boolean","_b","ci","_c","dd","_d","robot","watch","debug","rest","_e","toolId","privateKey","_f","accessToken","secret","Boolean","isDebug","isCi","getTARO_ENV","createOutPath","getProjectConfigPath","TARO_ENV","toLocaleUpperCase","WEAPP","readProjectConfig","projectConfigPath","fs","readFileSync","JSON","parse","rewriteProjectConfig","info","appId","outPath","projectConfig","smartProgramRoot","miniprogramRoot","appid","writeFileSync","stringify","ROOT_PATH","formatStrWithLine","_i","filter","getAndFormatConfigInfo","rV","rD","tag","_g","iRobot","_h","pkgLabel","pkgKey","versionPure","formateCommand","reg","ALIPAY","QUICK","SWAN","H5","RN","match","platform","isObject","obj","isArray","arr","Array","target","reduce","acc","cur","keys","subAcc","srcVal","map","idx","curAccVal","useTaroPluginBuildBy","MODE_ENV","grey","weapp","desc","setting","Error","project","Project","projectPath","privateKeyPath","ignores","onProgressUpdate","catch","alipay","argsCI","packageVersion","miniu","setConfig","uploadConfig","clientType","experience","getUploadVersion","uploadLastVersion","semver","gt","inc","miniUpload","msg","err_1","notice","uploadResponse","argsDD","git","qrCodeUrl","ddIns","Robot","markdownTitle","toUpperCase","content","Markdown","setTitle","add","message","send","run","mode","gray","init","DEBUG_ENV","list_1"],"mappings":"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"}
1
+ {"version":3,"file":"taro-ci.js","sources":["../src/types/index.ts","../node_modules/tslib/tslib.es6.js","../src/utils/index.ts","../src/core/command/build.ts","../src/core/command/upload/weapp.ts","../src/core/command/upload/alipay.ts","../src/core/command/upload/swan.ts","../src/core/command/upload/index.ts","../src/core/command/notice.ts","../src/core/index.ts","../src/index.ts"],"sourcesContent":["import minimist from \"minimist\";\n// 命令返回\nexport type CommandPromiseRes = {\n code: number,\n err?: string\n}\n\n// 自定义环境变量\nexport type EnvCustom = {\n MODE_ENV?: string,\n PLATFORM_ENV?: string,\n ROOT_PATH?: string,\n}\n\n// 打包配置项\nexport type BuildOptions = {\n appId?: string,\n isWatch?: boolean,\n isCi?: boolean\n};\n\nexport type Ci = { privateKey: string, toolId: string }\nexport type Dd = { accessToken: string, secret: string }\n// 携带参数\nexport interface ArgsResponse extends minimist.ParsedArgs {\n robot: Robot,\n watch: boolean,\n ci?: Ci,\n dd?: Dd,\n isCi?: boolean,\n isWatch?: boolean,\n isDebug?: boolean\n}\n\n// info组内选项\nexport type InfoOptions = {\n appId: string,\n version?: string,\n description?: string,\n label?: string,\n tag?: string,\n robot?: number,\n template?: number,\n}\n\n// ci配置项\nexport type ConfigOptions = {\n name: string,\n version?: string,\n description?: string,\n type: string | Array<string>,\n info: {\n [propertys: string]: InfoOptions\n },\n minSwanVersion: string,\n useTaroPluginBuildBy?: \"normal\" | \"mode\" | \"type\",\n git?: string,\n ci?: Ci,\n dd?: Dd,\n}\n\nexport type UploadResponse = {\n item: string,\n result?: {\n qrCodeUrl?: string,\n [propertys: string]: any\n },\n error: Error\n}\n\nexport type ProgressType = \"build\" | \"upload\";\n\nexport type Robot =\n | 1\n | 2\n | 3\n | 4\n | 5\n | 6\n | 7\n | 8\n | 9\n | 10\n | 11\n | 12\n | 13\n | 14\n | 15\n | 16\n | 17\n | 18\n | 19\n | 20\n | 21\n | 22\n | 23\n | 24\n | 25\n | 26\n | 27\n | 28\n | 29\n | 30;\n\nexport type ConfigInfoResponse = {\n version: string,\n description: string,\n label: string,\n robot?: Robot,\n versionPure?: string,\n minSwanVersion?: string\n}\n\nexport type ProjectConfig = {\n miniprogramRoot: string,\n smartProgramRoot?: string,\n appid: string,\n setting: {\n [propertys: string]: any\n }\n}\n\nexport type PkgMap = { [propertys: string]: { label: string, key: string } };\n\nexport enum TaroEnv {\n \"WEAPP\" = \"weapp\",\n \"ALIPAY\" = \"alipay\",\n \"SWAN\" = \"swan\",\n \"QUICKAPP\" = \"quickapp\",\n \"H5\" = \"h5\",\n \"RN\" = \"rn\"\n}\n\nexport enum TaroConfig {\n \"WEAPP\" = \"project.config.json\",\n \"ALIPAY\" = \"mini.project.json\",\n \"SWAN\" = \"project.swan.json\",\n \"QUICKAPP\" = \"quickapp.config.json\"\n}\n\nexport type Platform = \"weapp\" | \"alipay\" | \"swan\" | \"quickapp\" | \"h5\" | \"rn\"","/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation. All rights reserved.\r\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\r\nthis file except in compliance with the License. You may obtain a copy of the\r\nLicense at http://www.apache.org/licenses/LICENSE-2.0\r\n\r\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\r\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\r\nMERCHANTABLITY OR NON-INFRINGEMENT.\r\n\r\nSee the Apache Version 2.0 License for specific language governing permissions\r\nand limitations under the License.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport function __exportStar(m, exports) {\r\n for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\n\r\nexport function __values(o) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator], i = 0;\r\n if (m) return m.call(o);\r\n return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n};\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\r\n result.default = mod;\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n","import { spawn } from \"child_process\";\nimport ora from \"ora\";\nimport chalk from \"chalk\";\nimport path from \"path\";\nimport fs from \"fs\";\nimport minimist from \"minimist\";\nimport moment from \"moment\";\nimport { CommandPromiseRes, EnvCustom, TaroEnv, ConfigOptions, PkgMap, ConfigInfoResponse, Robot, ArgsResponse, ProjectConfig, Platform, ProgressType, TaroConfig } from \"types\";\n\nconst TS_REG = /^[0-9]{8}$/;\n/**\n * \n * @description 输出配色,替换关键词\n * @param str \n * @param tag \n * @param color \n * @param isAll\n * @returns \n */\nfunction keywordTheme(str: string, keyword: string, color: string, isAll: boolean = false): string {\n const rule = new RegExp(`^${keyword}`);\n const isMatch = isAll ? str.includes(keyword) : rule.test(str);\n return isMatch ? isAll ? chalk.hex(color)(str) : str.replace(rule, chalk.hex(color)(keyword)) : \"\"\n}\n\n/**\n * \n * @description 进度描述信息\n * @param type \n * @param status \n * @returns \n */\nexport function CreateProgress(type: ProgressType, item: string) {\n const typeMap = {\n build: \"构建\",\n upload: \"上传\"\n };\n this.text = `项目[${item}]${typeMap[type]}`;\n this.start = () => {\n this.spinner = ora().start(chalk.yellow(`${this.text}中... \\n`))\n }\n this.fail = (err: Error) => {\n if (!this.spinner) {\n this.spinner = ora();\n }\n this.spinner.fail(chalk.red(`${this.text}失败:${err} \\n`));\n }\n this.succeed = () => {\n if (!this.spinner) {\n this.spinner = ora()\n }\n this.spinner.succeed(chalk.green(`${this.text}成功! \\n`));\n }\n this.stop = () => {\n if (!this.spinner) return;\n this.spinner.stop();\n }\n}\n\n/**\n * \n * @description 风格化并打印结果\n */\nfunction consoleBufferByTheme(data: ArrayBuffer): string {\n let str = data.toString().replace(/\\n$/g, \"\");\n if (!str) return \"\"\n str = keywordTheme(str, \"Tips:\", \"#f5faa4\", true)\n || keywordTheme(str, \"生成\", \"#b278ff\")\n || keywordTheme(str, \"编译\", \"#00ee76\")\n || keywordTheme(str, \"编译成功\", \"#00ee76\", true)\n || keywordTheme(str, \"监听文件\", \"#6c6f7d\", true)\n || keywordTheme(str, \"创建\", \"#00aad1\")\n || keywordTheme(str, \"修改\", \"#e3eb00\")\n || keywordTheme(str, \"Listening\", \"#00aad1\", true)\n || keywordTheme(str, \"Compiled\", \"#00ee76\", true)\n || str;\n console.log(str);\n return str;\n}\n\n// 发布包对应版本\nexport const pkgMap: PkgMap = {\n \"1\": {\n label: \"体验\",\n key: \"Beta\"\n },\n \"2\": {\n label: \"候选\",\n key: \"Rc\"\n },\n \"3\": {\n label: \"正式\",\n key: \"\"\n }\n};\n\n/**\n * \n * @description 命令触发器:执行系统指令\n * @param commandStr 命令行字符串\n * @returns \n */\nexport function commandTrigger(commandStr: string, isWatch: boolean, isDebug: boolean, item: string, env?: EnvCustom): Promise<CommandPromiseRes> {\n return new Promise((resolve) => {\n const [command, ...arg] = commandStr.split(/\\s/g);\n const subprocess = spawn(command, arg, {\n env: {\n ...process.env,\n ...env\n }\n });\n\n const progressIns = new CreateProgress(\"build\", item);\n if (isWatch || isDebug) {\n // 打印数据输出\n subprocess.stdout.on(\"data\", consoleBufferByTheme);\n // 打印错误输出\n subprocess.stderr.on(\"data\", data => {\n consoleBufferByTheme(data);\n if (isWatch && data.toString().trim().endsWith(\"编译成功\")) {\n resolve({ code: 0 });\n }\n });\n } else {\n subprocess.stdout.on(\"data\", () => { });\n subprocess.stderr.on(\"data\", () => { });\n progressIns.start();\n }\n\n subprocess.on(\"exit\", () => {\n if (!isWatch) {\n resolve({ code: 0 });\n progressIns.succeed();\n }\n });\n\n // 监听报错信息\n subprocess.on(\"error\", (err) => {\n console.error(err);\n progressIns.fail(err);\n });\n })\n}\n\n/**\n * \n * @description 读取ci配置\n * @param name \n * @returns \n */\nexport function readConfig(name: string = \"taro-ci\"): ConfigOptions {\n const config = require(path.resolve(`./${name}.config.js`));\n const { PLATFORM_ENV } = process.env;\n let opts = typeof config === 'function' ? config(merge) : config;\n // 百度最低基础库版本\n if (!opts.minSwanVersion) {\n opts.minSwanVersion = \"3.310.35\";\n }\n try {\n // 使用发布配置项\n if (PLATFORM_ENV) {\n const releaseJson = resolvePath(path.resolve(`./${name}.release`), \".json\");\n const list = releaseJson ? require(releaseJson) : null;\n if (list && list.length > 0) {\n const topList = list[0].split(\"-\");\n const version = topList.splice(0, 1)[0];\n let ts = topList.splice(-1, 1)[0];\n let description = topList.join(\"-\");\n if (!TS_REG.test(ts)) {\n if (ts) {\n topList.push(ts);\n description = topList.join(\"-\");\n }\n ts = moment().format(\"YYYYMMDD\");\n }\n opts = {\n ...opts,\n ts,\n version,\n description,\n };\n }\n }\n } catch (error) { }\n return opts;\n}\n\n/**\n * \n * @description 获取命令行参数\n * @returns \n */\nexport function getArgs(): ArgsResponse {\n const { ci = \"\", dd = \"\", robot = 1, watch, debug, ...rest } = minimist(process.argv.slice(2), { boolean: [\"watch\", \"debug\"] });\n const [toolId, privateKey, token] = ci.split(\",\");\n const [accessToken, secret] = dd.split(\",\");\n return {\n ci: ci ? { toolId, privateKey, token } : void (0),\n dd: dd ? { accessToken, secret } : void (0),\n watch,\n debug,\n robot,\n isWatch: Boolean(watch),\n isDebug: Boolean(debug),\n isCi: Boolean(robot),\n ...rest\n } as ArgsResponse;\n}\n\n/**\n * \n * @description 获取类似Taro的环境变量,包含aliapp,weapp\n * @param item \n * @returns \n */\nexport function getTARO_ENV(): Platform {\n return process.env.PLATFORM_ENV as Platform;\n}\n\n/**\n * \n * @description 输出路径\n * @param item \n * @param isWatch \n * @returns \n */\nfunction createOutPath(item: string, isWatch: boolean, isDebug: boolean): string {\n return item + `.${isWatch ? \"dev\" : \"build\"}` + (isDebug ? \".debug\" : \"\");\n}\n\n/**\n * \n * @param item \n * @returns \n */\nexport function getProjectConfigPath() {\n const TARO_ENV = getTARO_ENV()\n return path.resolve(\"./\", TaroConfig[TARO_ENV.toLocaleUpperCase()] || TaroConfig.WEAPP)\n}\n\n/**\n * \n * @description 读取项目配置信息\n * @param item \n * @returns \n */\nexport async function readProjectConfig(): Promise<ProjectConfig> {\n const projectConfigPath = getProjectConfigPath();\n const data = fs.readFileSync(projectConfigPath);\n return JSON.parse(data.toString());\n}\n\n/**\n * \n * @description 重新微信小程序模板ext文件\n * @param item \n */\nexport async function rewriteExt(item: string): Promise<string> {\n try {\n const { isWatch, isDebug } = getArgs();\n const outPath = `dist/${createOutPath(item, isWatch, isDebug)}`;\n const extPath = path.resolve(`${outPath}/ext.json`)\n const extData = require(extPath);\n extData.extEnable = false;\n fs.writeFileSync(extPath, JSON.stringify(extData, null, 4));\n } catch (error) {\n console.log('ext-extEnable', error);\n }\n return item;\n}\n\n/**\n * \n * @description 重写小程序配置文件 project.config.json\n */\nexport async function rewriteProjectConfig(item: string): Promise<string> {\n const { info } = readConfig();\n const { isWatch, isDebug } = getArgs();\n const { appId } = info[item] || {};\n const outPath = `dist/${createOutPath(item, isWatch, isDebug)}`;\n process.env.ROOT_PATH = outPath;\n if (process.env.FIX_ENV === TaroEnv.QUICKAPP) {\n // 快应用,跳过修改配置\n return item;\n }\n const projectConfigPath = getProjectConfigPath();\n const projectConfig = await readProjectConfig();\n if (process.env.PLATFORM_ENV === 'swan') {\n projectConfig.smartProgramRoot = outPath;\n } else {\n projectConfig.miniprogramRoot = outPath;\n }\n projectConfig.appid = appId;\n fs.writeFileSync(projectConfigPath, JSON.stringify(projectConfig, null, 4));\n return item;\n}\n\n/**\n * \n * @description 将参数组合通过 \"-\" 连线 \n * @param arg \n * @returns \n */\nfunction formatStrWithLine(...arg: Array<string>): string {\n return arg.filter(item => !!item).join(\"-\")\n}\n\n/**\n * \n * @description 获取taro-ci.config.info 并根据一定规则格式化\n * @param item \n * @param robot \n */\nexport function getAndFormatConfigInfo(item: string): ConfigInfoResponse {\n const { robot } = getArgs();\n const { version: rV, description: rD, info, minSwanVersion } = readConfig();\n const { version = rV, description = rD, tag = \"\", label: iLabel = \"\", robot: iRobot = 1 } = info[item] || {};\n const { label: pkgLabel, key: pkgKey } = pkgMap[robot + \"\"]; // [体验版、正式版、临时版]\n const label = formatStrWithLine(pkgLabel, iLabel);\n return {\n minSwanVersion,\n robot: robot + (iRobot - 1) * 2 as Robot,\n versionPure: version,\n version: formatStrWithLine(pkgKey, tag + (version)),\n description: `【${label}版-${moment().format(\n \"YYYYMMDDHHmmss\"\n )}】:${description}`,\n label\n }\n}\n\n/**\n * \n * @description 格式化指令,首位为平台信息\n * @param item \n * @returns \n */\nexport function formateCommand(item: string): [Platform, string, string] {\n const reg = new RegExp(`(${TaroEnv.WEAPP}|${TaroEnv.ALIPAY}|${TaroEnv.QUICKAPP}|${TaroEnv.SWAN}|${TaroEnv.H5}|${TaroEnv.RN})([\\.|\\-]{1})?(.+)?`)\n let [, platform, , mode = \"\"] = item.match(reg) || [];\n let fix = \"\";\n if (platform === TaroEnv.QUICKAPP) {\n fix = platform;\n platform = TaroEnv.WEAPP;\n }\n return [platform as Platform, mode, fix]\n}\n\nexport function isObject(obj) {\n return Object.prototype.toString.call(obj) === '[object Object]'\n}\nexport function isArray(arr) {\n return Array.isArray(arr)\n}\n\n/**\n * @description 合并数据\n * @param target \n * @param arg \n * @returns \n */\nexport function merge(target, ...arg) {\n return arg.reduce((acc, cur) => {\n return Object.keys(cur).reduce((subAcc, key) => {\n const srcVal = cur[key]\n if (isObject(srcVal)) {\n subAcc[key] = merge(subAcc[key] ? subAcc[key] : {}, srcVal)\n } else if (isArray(srcVal)) {\n subAcc[key] = srcVal.map((item, idx) => {\n if (isObject(item)) {\n const curAccVal = subAcc[key] ? subAcc[key] : []\n return merge(curAccVal[idx] ? curAccVal[idx] : {}, item)\n } else {\n return item\n }\n })\n } else {\n subAcc[key] = srcVal\n }\n return subAcc\n }, acc)\n }, target)\n}\n\n/**\n * \n * @description 处理路径\n * @param p \n * @param suffix \n * @returns \n */\nexport function resolvePath(p: string, suffix: string): string {\n const platformEnv = process.env.PLATFORM_ENV;\n const modeEnv = process.env.MODE_ENV;\n const types = [platformEnv];\n let realpath = \"\";\n if (modeEnv) {\n types.unshift(`${platformEnv}.${modeEnv}`, modeEnv);\n }\n for (let i = 0, len = types.length; i < len; i++) {\n const type = types[i];\n if (fs.existsSync(realpath = `${p}.${type}${suffix}`)) {\n return realpath;\n }\n if (fs.existsSync(realpath = `${p}${path.sep}index.${type}${suffix}`)) {\n return realpath;\n }\n const pathReg = /\\/index$/;\n if (pathReg.test(p) && fs.existsSync(realpath = `${p.replace(pathReg, `.${type}/index`)}${suffix}`)) {\n return realpath;\n }\n }\n if (fs.existsSync(realpath = `${p}${suffix}`)) {\n return realpath;\n }\n if (fs.existsSync(realpath = `${p}${path.sep}index${suffix}`)) {\n return realpath;\n }\n return \"\"\n}\n\n/**\n * \n * @description 安装指令\n * @param name \n * @returns \n */\nexport function installCommand(name) {\n return new Promise((resolve) => {\n console.log(chalk.red(\"缺少指令:\"), chalk.gray(name));\n const ls = spawn(\"npm\", [\"install\", name, \"-g\"], { shell: true });\n ls.on(\"close\", code => {\n if (code === 0) {\n console.log(chalk.green(\"指令安装成功\"));\n } else {\n console.log(chalk.red(\"指令安装失败\"));\n }\n resolve(code);\n });\n });\n}","import chalk from \"chalk\";\nimport { commandTrigger, getArgs, readConfig } from \"utils\";\n\nasync function build(item: string): Promise<string> {\n const { isWatch, isDebug } = getArgs();\n const { useTaroPluginBuildBy } = readConfig()\n const { MODE_ENV, PLATFORM_ENV, FIX_ENV } = process.env\n // 生成打印指令\n // useTaroPluginBuild 使用taro-plugin-build插件会自定义编译平台\n // useTaroPluginBuildBy 编译平台模式 [mode,type,normal]\n let commandStr = `taro build --type ${useTaroPluginBuildBy === \"type\" ? item : (useTaroPluginBuildBy === \"mode\" && MODE_ENV) ? MODE_ENV : PLATFORM_ENV}`;\n\n if (isWatch) {\n // 开发模式,开启监听\n commandStr += \" --watch\";\n }\n\n // 打印当前执行的指令\n console.log(chalk.grey(\"编译平台:\"), chalk.red(FIX_ENV || PLATFORM_ENV), chalk.grey(\"版本模式:\"), chalk.red(MODE_ENV || \"默认\"));\n // 执行命令\n await commandTrigger(commandStr, isWatch, isDebug, item);\n return item;\n}\n\nexport default build;\n","import { getAndFormatConfigInfo, readConfig, readProjectConfig, rewriteExt } from \"utils\";\nimport path from \"path\";\nimport ci from \"miniprogram-ci\"; // 微信sdk\nimport { UploadResponse } from \"types\";\n\nasync function weapp(item: string): Promise<UploadResponse> {\n const { info = {} } = await readConfig();\n const { appId, template } = info[item];\n const { version, description: desc, robot } = getAndFormatConfigInfo(item);\n const { setting = {} } = await readProjectConfig();\n let error = null;\n\n if (!appId) {\n throw new Error(\"缺少taro-ci.config.info配置项,或缺少info[type].appId,无法上传到微信平台\");\n }\n\n if (template === 1) {\n // 微信模板\n await rewriteExt(item);\n }\n\n const project = new ci.Project({\n appid: appId,\n type: 'miniProgram',\n projectPath: path.resolve(\"./\"),\n privateKeyPath: path.resolve(\"./\", `private.${appId}.key`),\n ignores: ['node_modules/**/*'],\n });\n\n const result = await ci.upload({\n robot,\n project,\n version,\n desc,\n setting,\n onProgressUpdate: () => { }\n }).catch(err => error = err);\n\n return {\n item,\n error,\n result\n }\n}\n\nexport default weapp;\n","import { getAndFormatConfigInfo, getArgs, readConfig } from \"utils\";\nimport { UploadResponse } from \"types\";\nimport path from \"path\";\nimport miniu, { MiniUploadOptions } from \"miniu\";\nimport semver from \"semver\";\n\nasync function alipay(item: string): Promise<UploadResponse> {\n const { ci: argsCI } = getArgs();\n const { info = {}, ci } = await readConfig();\n const { appId } = info[item];\n const { toolId, privateKey } = { ...ci, ...argsCI };\n let { versionPure: packageVersion } = getAndFormatConfigInfo(item);\n let error = null;\n\n if (!appId) {\n throw new Error(\"缺少taro-ci.config.info配置项,或缺少info[type].appId,无法上传到支付宝平台\");\n }\n\n if (!toolId) {\n throw new Error(\"缺少taro-ci.config.ci配置项,或缺少ci.alipay,无法上传到支付宝平台\");\n }\n\n // 初始化配置\n miniu.setConfig({ toolId, privateKey });\n\n const clientType = \"alipay\";\n const uploadConfig = {\n project: path.resolve(\"./\"),\n appId,\n clientType,\n experience: true,\n onProgressUpdate: () => { },\n } as MiniUploadOptions;\n\n if (packageVersion && packageVersion !== \"-1\") {\n // 上传版本字符串\n const uploadLastVersion = await miniu.getUploadVersion({\n appId,\n clientType,\n });\n if (!semver.gt(packageVersion, uploadLastVersion)) {\n // 传入的版本比最新版本号小,则最新版本号自增1\n packageVersion = semver.inc(uploadLastVersion, \"patch\");\n }\n uploadConfig.packageVersion = packageVersion;\n }\n\n const result = await miniu.miniUpload(uploadConfig).catch((err) => (error = new Error(`${err.message}`)));\n\n return {\n item,\n result,\n error\n }\n}\n\nexport default alipay;\n","import { getAndFormatConfigInfo, getArgs, installCommand, readConfig } from \"utils\";\nimport { UploadResponse } from \"types\";\nimport { spawn } from \"child_process\";\n\nfunction createUploadFailMessage(noNpm = true) {\n return `上传失败${noNpm ? \",缺少swan-toolkit包\" : \"\"}`\n}\n\nfunction upload(opts, reUpload = false) {\n return new Promise((resolve) => {\n const { token, version, desc, minSwanVersion } = opts;\n const [command, ...arg] = `swan upload -p ./ --token ${token} --min-swan-version ${minSwanVersion} --release-version ${version} -d ${desc.replace(/\\s/, \"\")}`.split(/\\s/g);\n const ls = spawn(command, arg, { shell: true });\n ls.on(\"close\", code => {\n if (code === 0) {\n resolve({});\n } else if (code === 127) {\n installCommand(\"swan-toolkit\").then(() => {\n if (!reUpload) {\n upload(opts, true).then(resolve).catch(resolve);\n } else {\n resolve({ error: createUploadFailMessage() });\n }\n }).catch(() => {\n resolve({ error: createUploadFailMessage() });\n });\n } else {\n resolve({ error: createUploadFailMessage(false) });\n }\n });\n })\n}\n\nasync function swan(item: string): Promise<UploadResponse> {\n const { ci: argsCI } = getArgs();\n const { ci } = await readConfig();\n const { versionPure: version, description: desc, minSwanVersion } = getAndFormatConfigInfo(item);\n const { token = \"\" } = { ...ci, ...argsCI };\n let error = null;\n\n if (!token) {\n throw new Error(\"缺少taro-ci.config.ci配置项,或缺少ci.swan,无法上传到百度平台\");\n }\n\n const result = await upload({ token, version, desc, minSwanVersion });\n\n return {\n item,\n result,\n error\n }\n}\n\nexport default swan;\n","import { TaroEnv, UploadResponse } from \"types\";\nimport { CreateProgress, getArgs, getTARO_ENV } from \"utils\";\nimport weapp from \"./weapp\";\nimport alipay from \"./alipay\";\nimport swan from \"./swan\";\n\nasync function upload(item: string): Promise<UploadResponse> {\n const { isCi, isWatch, isDebug } = getArgs();\n const { FIX_ENV } = process.env;\n if (FIX_ENV) {\n throw new Error('暂不支持快应用上传');\n }\n if (isWatch || !isCi) {\n throw new Error(`${item},未传入robot或者开发模式无法上传`);\n }\n if (isDebug) {\n throw new Error(`${item},DEBUG模式无法上传`);\n }\n const TARO_ENV = getTARO_ENV();\n\n let result = {} as UploadResponse;\n const progressIns = new CreateProgress(\"upload\", item);\n progressIns.start();\n try {\n switch (TARO_ENV) {\n case TaroEnv.WEAPP: // 开发环境 - 微信\n result = await weapp(item);\n break;\n\n case TaroEnv.ALIPAY: // 开发环境 - 支付宝\n result = await alipay(item);\n break;\n\n case TaroEnv.SWAN: // 开发环境 - 百度\n result = await swan(item);\n break;\n\n default:\n const err = new Error(`不支持上传该平台,目前支持:${TaroEnv.WEAPP}、${TaroEnv.ALIPAY}`);\n progressIns.fail(err);\n throw err;\n }\n const { error } = result;\n error\n ? progressIns.fail(error)\n : progressIns.succeed();\n } catch (err) {\n progressIns.fail(err)\n }\n\n return result\n}\n\n\nexport default upload;\n","import Robot from \"dingtalk-robot-sdk\";\nimport { TaroEnv, UploadResponse } from \"types\";\nimport { getAndFormatConfigInfo, getArgs, getTARO_ENV, readConfig } from \"utils\";\nimport chalk from \"chalk\";\n\n/**\n * \n * @description 通过钉钉群发送上传结果通知\n */\nasync function notice(uploadResponse: UploadResponse) {\n const { result, error, item } = uploadResponse;\n const { dd: argsDD } = getArgs();\n const { dd = argsDD, name, git = `` } = readConfig();\n const { version, description, label } = getAndFormatConfigInfo(item);\n const TARO_ENV = getTARO_ENV();\n const { qrCodeUrl } = result || {};\n if (!dd) {\n throw new Error(\"缺少taro-ci.config.notice配置项,无法发送钉钉通知\");\n }\n const ddIns = new Robot(dd);\n\n const markdownTitle = `[${item}]${name}`.toUpperCase() + \":\" + label;\n const content = new Robot.Markdown()\n .setTitle(markdownTitle)\n .add(`[${markdownTitle}](${git})\\n`)\n\n if (error) {\n content.add(`**上传结果:上传失败**<font color=\"red\">(${error.message})</font>`);\n } else {\n content.add(`**上传结果:上传成功**${TARO_ENV === TaroEnv.ALIPAY ? \"【发布后合并到master】\" : \"\"}`)\n .add(`1. version:${version}`)\n .add(`2. description:${description}`)\n .add(qrCodeUrl ? `\\n![二维码](${qrCodeUrl})` : \"\");\n }\n\n ddIns.send(content);\n chalk.green(`通知已发!`)\n}\n\nexport default notice;","import build from \"./command/build\";\nimport upload from \"./command/upload\";\nimport notice from \"./command/notice\";\nimport ora from \"ora\";\nimport chalk from \"chalk\";\nimport { rewriteProjectConfig, formateCommand, getArgs, readConfig } from \"utils\";\n\nasync function run(item: string) {\n try {\n const [platform, mode, fix] = formateCommand(item);\n process.env.PLATFORM_ENV = platform;\n process.env.MODE_ENV = mode;\n process.env.FIX_ENV = fix;\n await notice(await upload(await build(await rewriteProjectConfig(item))));\n } catch (err) {\n ora().fail(chalk.gray(err.message));\n }\n}\n\nasync function init() {\n // 读取ci配置项\n const config = await readConfig();\n const { type = config.type, isDebug } = getArgs();\n process.env.DEBUG_ENV = isDebug ? \"OPEN\" : \"CLOSE\";\n const list = type ? Array.isArray(type) ? type : [type] : null;\n if (!list) return;\n\n for (let item of list) {\n await run(item)\n }\n}\n\nexport default init;\n","import init from \"./core\";\n\ninit();\n"],"names":["TaroEnv","TaroConfig","__assign","Object","assign","t","s","i","n","arguments","length","p","prototype","hasOwnProperty","call","apply","this","__rest","e","indexOf","getOwnPropertySymbols","propertyIsEnumerable","__awaiter","thisArg","_arguments","P","generator","Promise","resolve","reject","fulfilled","value","step","next","rejected","result","done","then","__generator","body","f","y","_","label","sent","trys","ops","g","verb","throw","return","Symbol","iterator","v","op","TypeError","pop","push","TS_REG","keywordTheme","str","keyword","color","isAll","rule","RegExp","includes","test","chalk","hex","replace","CreateProgress","type","item","text","build","upload","start","_this","spinner","ora","yellow","fail","err","red","succeed","green","stop","consoleBufferByTheme","data","toString","console","log","pkgMap","1","key","2","3","commandTrigger","commandStr","isWatch","isDebug","env","_a","split","command","arg","subprocess","spawn","process","progressIns","stdout","on","stderr","trim","endsWith","code","error","readConfig","name","releaseJson","list","topList","version","ts","description","config","require","path","PLATFORM_ENV","opts","merge","minSwanVersion","resolvePath","splice","join","moment","format","getArgs","minimist","argv","slice","boolean","_b","ci","_c","dd","_d","robot","watch","debug","rest","_e","toolId","privateKey","token","_f","accessToken","secret","Boolean","isCi","getTARO_ENV","createOutPath","getProjectConfigPath","TARO_ENV","toLocaleUpperCase","WEAPP","readProjectConfig","projectConfigPath","fs","readFileSync","JSON","parse","rewriteExt","outPath","extPath","extData","extEnable","writeFileSync","stringify","rewriteProjectConfig","info","appId","ROOT_PATH","FIX_ENV","QUICKAPP","projectConfig","smartProgramRoot","miniprogramRoot","appid","formatStrWithLine","_i","filter","getAndFormatConfigInfo","rV","rD","tag","_g","iRobot","_h","pkgLabel","pkgKey","versionPure","formateCommand","reg","ALIPAY","SWAN","H5","RN","match","platform","fix","isObject","obj","isArray","arr","Array","target","reduce","acc","cur","keys","subAcc","srcVal","map","idx","curAccVal","suffix","platformEnv","modeEnv","MODE_ENV","types","realpath","unshift","len","existsSync","sep","pathReg","installCommand","gray","shell","useTaroPluginBuildBy","grey","weapp","template","desc","setting","Error","project","Project","projectPath","privateKeyPath","ignores","onProgressUpdate","catch","alipay","argsCI","packageVersion","miniu","setConfig","uploadConfig","clientType","experience","getUploadVersion","uploadLastVersion","semver","gt","inc","miniUpload","message","createUploadFailMessage","noNpm","reUpload","swan","err_1","notice","uploadResponse","argsDD","git","qrCodeUrl","ddIns","Robot","markdownTitle","toUpperCase","content","Markdown","setTitle","add","send","run","mode","init","DEBUG_ENV","list_1"],"mappings":"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"}
@@ -28,6 +28,7 @@ export interface ArgsResponse extends minimist.ParsedArgs {
28
28
  dd?: Dd;
29
29
  isCi?: boolean;
30
30
  isWatch?: boolean;
31
+ isDebug?: boolean;
31
32
  }
32
33
  export declare type InfoOptions = {
33
34
  appId: string;
@@ -36,6 +37,7 @@ export declare type InfoOptions = {
36
37
  label?: string;
37
38
  tag?: string;
38
39
  robot?: number;
40
+ template?: number;
39
41
  };
40
42
  export declare type ConfigOptions = {
41
43
  name: string;
@@ -45,6 +47,7 @@ export declare type ConfigOptions = {
45
47
  info: {
46
48
  [propertys: string]: InfoOptions;
47
49
  };
50
+ minSwanVersion: string;
48
51
  useTaroPluginBuildBy?: "normal" | "mode" | "type";
49
52
  git?: string;
50
53
  ci?: Ci;
@@ -66,6 +69,7 @@ export declare type ConfigInfoResponse = {
66
69
  label: string;
67
70
  robot?: Robot;
68
71
  versionPure?: string;
72
+ minSwanVersion?: string;
69
73
  };
70
74
  export declare type ProjectConfig = {
71
75
  miniprogramRoot: string;
@@ -85,7 +89,7 @@ export declare enum TaroEnv {
85
89
  "WEAPP" = "weapp",
86
90
  "ALIPAY" = "alipay",
87
91
  "SWAN" = "swan",
88
- "QUICK" = "quickapp",
92
+ "QUICKAPP" = "quickapp",
89
93
  "H5" = "h5",
90
94
  "RN" = "rn"
91
95
  }
@@ -93,6 +97,6 @@ export declare enum TaroConfig {
93
97
  "WEAPP" = "project.config.json",
94
98
  "ALIPAY" = "mini.project.json",
95
99
  "SWAN" = "project.swan.json",
96
- "QUICK" = "quickapp.config.json"
100
+ "QUICKAPP" = "quickapp.config.json"
97
101
  }
98
102
  export declare type Platform = "weapp" | "alipay" | "swan" | "quickapp" | "h5" | "rn";
@@ -14,7 +14,7 @@ export declare const pkgMap: PkgMap;
14
14
  * @param commandStr 命令行字符串
15
15
  * @returns
16
16
  */
17
- export declare function commandTrigger(commandStr: string, isWatch: boolean, item: string, env?: EnvCustom): Promise<CommandPromiseRes>;
17
+ export declare function commandTrigger(commandStr: string, isWatch: boolean, isDebug: boolean, item: string, env?: EnvCustom): Promise<CommandPromiseRes>;
18
18
  /**
19
19
  *
20
20
  * @description 读取ci配置
@@ -48,6 +48,12 @@ export declare function getProjectConfigPath(): string;
48
48
  * @returns
49
49
  */
50
50
  export declare function readProjectConfig(): Promise<ProjectConfig>;
51
+ /**
52
+ *
53
+ * @description 重新微信小程序模板ext文件
54
+ * @param item
55
+ */
56
+ export declare function rewriteExt(item: string): Promise<string>;
51
57
  /**
52
58
  *
53
59
  * @description 重写小程序配置文件 project.config.json
@@ -66,7 +72,7 @@ export declare function getAndFormatConfigInfo(item: string): ConfigInfoResponse
66
72
  * @param item
67
73
  * @returns
68
74
  */
69
- export declare function formateCommand(item: string): [Platform, string];
75
+ export declare function formateCommand(item: string): [Platform, string, string];
70
76
  export declare function isObject(obj: any): boolean;
71
77
  export declare function isArray(arr: any): boolean;
72
78
  /**
@@ -84,3 +90,10 @@ export declare function merge(target: any, ...arg: any[]): any;
84
90
  * @returns
85
91
  */
86
92
  export declare function resolvePath(p: string, suffix: string): string;
93
+ /**
94
+ *
95
+ * @description 安装指令
96
+ * @param name
97
+ * @returns
98
+ */
99
+ export declare function installCommand(name: any): Promise<unknown>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "taro-ci",
3
- "version": "1.3.13",
3
+ "version": "1.4.0",
4
4
  "main": "dist/taro-ci.js",
5
5
  "types": "dist/types/index.d.ts",
6
6
  "bin": {