@aiot-toolkit/packager
Version:
@aiot-toolkit/packager
3 lines (2 loc) • 8.07 kB
JavaScript
;var _fsExtra=_interopRequireDefault(require("fs-extra")),_path=_interopRequireDefault(require("path")),_sharedUtils=require("@aiot-toolkit/shared-utils"),_config=_interopRequireDefault(require("@aiot-toolkit/shared-utils/config")),_utils=require("../common/utils"),_info=require("../common/info"),_compilationConfig=require("@aiot-toolkit/shared-utils/compilation-config"),_constant=require("../common/constant"),_index=require("../process/index"),_signature=require("../signature"),_del=_interopRequireDefault(require("del"));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}function resolveFiles(e,i){let t=(0,_utils.lsdirdeep)(e).filter((e=>!e.startsWith(_constant.DIGEST_ZIP_DIR)));return t=(0,_utils.sortFilesBy)(t,i),t}function getProjectSignConfig(e){const i=e.cwd||_config.default.projectPath,t=e.pathSignFolder||"sign",a={debug:{privatekey:_path.default.join(i,t,"debug/private.pem"),certificate:_path.default.join(i,t,"debug/certificate.pem")},builtinDebug:{privatekey:_path.default.join(_signature.builtinSignFolder,"private.pem"),certificate:_path.default.join(_signature.builtinSignFolder,"certificate.pem")},release:{privatekey:_path.default.join(i,t,"private.pem"),certificate:_path.default.join(i,t,"certificate.pem")},OldRelease:{privatekey:_path.default.join(i,t,"release/private.pem"),certificate:_path.default.join(i,t,"release/certificate.pem")}};let o;switch(e.signMode){case _compilationConfig.compileOptionsMeta.signModeEnum.NULL:_sharedUtils.colorconsole.log("### App Loader ### Signature feature is disabled by project build"),o=!1;break;case _compilationConfig.compileOptionsMeta.signModeEnum.BUILD:{let{privatekey:e,certificate:i}=a.debug;_fsExtra.default.existsSync(e)&&_fsExtra.default.existsSync(i)?_sharedUtils.colorconsole.log("### App Loader ### User debug signature is enabled by project build"):(e=a.builtinDebug.privatekey,i=a.builtinDebug.certificate,_sharedUtils.colorconsole.log("### App Loader ### Built-in debug signature is enabled by project build")),o={privatekey:_fsExtra.default.readFileSync(e),certificate:_fsExtra.default.readFileSync(i)};break}case _compilationConfig.compileOptionsMeta.signModeEnum.RELEASE:{_sharedUtils.colorconsole.log("### App Loader ### Release signature is enabled by project build");let{privatekey:e,certificate:i}=a.release;if(!_fsExtra.default.existsSync(e)){if(e=a.OldRelease.privatekey,!_fsExtra.default.existsSync(e))throw new Error(`### App Loader ### Compilation error, missing release signature private key file:${e}`);_sharedUtils.colorconsole.warn('### App Loader ### The new release private key file address "sign/privatekey" will be used later,please pay attention to update')}if(!_fsExtra.default.existsSync(i)){if(i=a.OldRelease.certificate,!_fsExtra.default.existsSync(e))throw new Error(`### App Loader ### Compilation error, missing release signature certificate file:${i}`);_sharedUtils.colorconsole.warn('### App Loader ### The new release certificate file address "sign/certificate" will be used later,please pay attention to update')}o={privatekey:_fsExtra.default.readFileSync(e),certificate:_fsExtra.default.readFileSync(i)};break}default:throw new Error(`### App Loader ### Compilation error, please contact the official developer:signMode error:${e.signMode}`)}return o}function getDistFilename(e,i){let t,a;switch(e.signMode===_compilationConfig.compileOptionsMeta.signModeEnum.NULL&&_sharedUtils.colorconsole.log("### App Loader ### Signature ability is disabled by project build"),e.signMode){case _compilationConfig.compileOptionsMeta.signModeEnum.NULL:t="nosign";break;case _compilationConfig.compileOptionsMeta.signModeEnum.BUILD:t="debug";break;case _compilationConfig.compileOptionsMeta.signModeEnum.RELEASE:t="release";break;default:throw new Error(`### App Loader ### Compilation error, please contact the official developer:signMode error:${e.signMode}`)}return a=e.buildNameFormat===_compilationConfig.compileOptionsMeta.buildNameFormat.ORIGINAL?`${e.name}.${t}.${i}`:`${e.name}.${t}.${e.versionName}.${i}`,a}async function generateDistFile(e,i,t,a){let{enableMirtos:o}=_compilationConfig.compileOptionsObject;const r=getDistFilename(i,a),n=_path.default.join(i.output,r);_fsExtra.default.writeFileSync(n,e),o&&await(0,_utils.createMetaForBuild)(e,i.pathBuild),_sharedUtils.colorconsole.log(`### App Loader ### Project build and generate files:${r}`)}const buildRemotePreviewPkg={cachePkgNameOriginAndPath:[],changeOnMultiDevice(){var e=_fsExtra.default.readdirSync(this.options.pathBuild);for(let i=0;i<e.length;i++){const t=e[i];/manifest(-\w+)?.json/g.test(t)&&this._changePkgName(t)}},_changePkgName(e){const i=this.options.pathBuild+`/${e}`,t=JSON.parse(_fsExtra.default.readFileSync(i).toString());if(!t.package)return;const a=t.package;t.package+=".__preview__",_fsExtra.default.writeFileSync(i,JSON.stringify(t)),this.cachePkgNameOriginAndPath.push({package:a,filePath:i})},changePkgName(e){this.options=e;try{this.changeOnMultiDevice()}catch(e){console.error(`Failed to modify the package name in the build directory:${e}`)}},resetPkgName(){if(0!==this.cachePkgNameOriginAndPath.length){for(let e=0;e<this.cachePkgNameOriginAndPath.length;e++){const i=this.cachePkgNameOriginAndPath[e].filePath,t=JSON.parse(_fsExtra.default.readFileSync(i).toString());t.package=this.cachePkgNameOriginAndPath[e].package,_fsExtra.default.writeFileSync(i,JSON.stringify(t))}this.cachePkgNameOriginAndPath=[]}}};function ZipPlugin(e){this.options=Object.assign({priorities:["manifest.json","app.js"]},e),this.manifestFile=_path.default.resolve(this.options.pathSrc,"manifest.json")}async function requireModule(e){const i=_path.default.resolve(_config.default.projectPath,`./node_modules/${e}`);if(!_fsExtra.default.existsSync(i))return Promise.reject(new Error(`${e} is missing, run 'npm i ${e}' to install it`));try{const e=require(i);return Promise.resolve(e)}catch(e){return Promise.reject(e)}}async function jsc(e){const{enableMirtos:i,enableJsc:t}=_compilationConfig.compileOptionsObject;if(i&&t)return requireModule("@aiot-toolkit/jsc").then((i=>i.default(e))).then((()=>(0,_del.default)(`${e}/**/*.js`))).catch((e=>{_sharedUtils.colorconsole.error(e.message),process.exit()}))}ZipPlugin.prototype.apply=function(e){const i=this.options;let t;!i.disableSubpackages&&i.subpackages&&i.subpackages.length>0&&(t=i.subpackages),e.hooks.done.tapAsync("ZipPlugin",(async(a,o)=>{try{this.signConfig=getProjectSignConfig(i)}catch(e){return a.compilation.errors.push(e),void o()}if(_compilationConfig.compileOptionsObject.splitChunksMode===_compilationConfig.compileOptionsMeta.splitChunksModeEnum.SMART){const e=i.priorities.findIndex((e=>"app.js"===e));i.priorities.splice(e,0,_compilationConfig.compileOptionsMeta.splitChunksNameEnum.APP),i.priorities.splice(e+2,0,_compilationConfig.compileOptionsMeta.splitChunksNameEnum.PAGE)}await jsc(i.pathBuild);let r=resolveFiles(i.pathBuild,i.priorities);if("release"===i.sign&&(r=r.filter((e=>!/\.map$/.test(e)))),!1===r||!r.length)return _sharedUtils.colorconsole.error("### App Loader ### The build file is missing, stop generating the application package, please check carefully"),void o();const{fullPackage:n,subPackages:s}=(0,_index.createPackagesDefinition)(i.name,t,i.icon,i.comment,i.banner);i.setPreviewPkgPath&&buildRemotePreviewPkg.changePkgName(i),(0,_index.allocateResourceToPackages)(r,i.pathBuild,n,s,i.comment),i.setPreviewPkgPath&&buildRemotePreviewPkg.resetPkgName();const{rpksBuffer:l,rpkBuffer:c}=await(0,_index.buildProjectAndOutput)(n,s,this.signConfig,i.disableStreamPack);_fsExtra.default.ensureDirSync(i.output),await generateDistFile(c,i,e.watchMode,"rpk"),l&&await generateDistFile(l,i,e.watchMode,"rpks"),o()})),e.hooks.watchRun.tapAsync("watch",((e,t)=>{const a=e.modifiedFiles;if(a&&a.has(this.manifestFile))try{const e=(0,_sharedUtils.readJson)(this.manifestFile),t=(0,_info.getSkeletonConfig)(i.pathSrc),a=(0,_utils.genPriorities)(e,t);this.options.priorities=a}catch(e){}t()}))},module.exports=ZipPlugin;
//# sourceMappingURL=zip-plugin.js.map