UNPKG

@hap-toolkit/packager

Version:

@hap-toolkit/packager

3 lines (2 loc) 6.28 kB
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.CardScriptHandlePlugin=void 0;var _path=_interopRequireDefault(require("path")),_Compilation=_interopRequireDefault(require("webpack/lib/Compilation")),_sharedUtils=require("@hap-toolkit/shared-utils"),_loaderUtils=_interopRequireDefault(require("loader-utils")),_parser=require("@babel/parser"),_traverse=_interopRequireDefault(require("@babel/traverse")),_generator=_interopRequireDefault(require("@babel/generator")),t=_interopRequireWildcard(require("@babel/types"));function _getRequireWildcardCache(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,r=new WeakMap;return(_getRequireWildcardCache=function(e){return e?r:t})(e)}function _interopRequireWildcard(e,t){if(!t&&e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var r=_getRequireWildcardCache(t);if(r&&r.has(e))return r.get(e);var l={},a=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var i in e)if("default"!==i&&Object.prototype.hasOwnProperty.call(e,i)){var n=a?Object.getOwnPropertyDescriptor(e,i):null;n&&(n.get||n.set)?Object.defineProperty(l,i,n):l[i]=e[i]}return l.default=e,r&&r.set(e,l),l}function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}const PLUGIN_NAME="CardScriptHandlePlugin",SUFFIX_UX=".ux",CARD_ENTRY="#entry";class CardScriptHandlePlugin{constructor(e={}){this.options=e||{}}apply(e){let t=e.webpack.sources.ConcatSource;e.hooks.compilation.tap(PLUGIN_NAME,(e=>{e.hooks.processAssets.tap({name:PLUGIN_NAME,stage:_Compilation.default.PROCESS_ASSETS_STAGE_SUMMARIZE},(()=>{let{pathSrc:r}=this.options;r=r.replace(/\\/g,"/");for(const l of e.chunks){const a=this.getEntryModule(e,l);if(!a)continue;const{rawRequest:i,request:n}=a;if(this.isNewJsCard(i)){const{templateFileName:l,cssFileName:a}=this.getCardBuildPath(n,r),i=this.getJsAssetsName(n,r),s=e.assets[i].source();let o=s;o="development"===_sharedUtils.globalConfig.mode?this.getDevNewSource(s,a,l,r):this.getProdNewSource(s,a,l,r),e.assets[i]=new t(o)}}}))}))}getEntryModule(e,t){const r=e.chunkGraph.getChunkModules(t);for(let l=0;l<r.length;l++){const a=r[l];if(e.chunkGraph.isEntryModuleInChunk(a,t))return a}return null}getCardBuildPath(e,t){if(!e||!t)throw new Error(`Invalid request path or src path:\n${e}\n${t}`);const r=(e=e.replace(/\\/g,"/")).split("!");let l=r[r.length-1];l.indexOf("?")>0&&(l=l.substring(0,l.indexOf("?")));const a=_path.default.relative(t,l);if(!a.endsWith(".ux"))throw new Error(`Invalid relative path for ux:\n${a}`);const i=`${a.substring(0,a.length-3)}`;return{bundleFilePath:i.replace(/\\/g,"/"),templateFileName:`${i}.template.json`.replace(/\\/g,"/"),cssFileName:`${i}.css.json`.replace(/\\/g,"/")}}isNewJsCard(e){if(e&&e.lastIndexOf("?")>0){const t=e.lastIndexOf("?"),r=e.substring(t+1).split("&");return r&&r.indexOf("newJSCard=1")>=0&&r.indexOf("uxType=card")>=0}return!1}getJsAssetsName(e,t){if(!e||!t)throw new Error(`Invalid request path or src path:\n${e}\n${t}`);const r=(e=e.replace(/\\/g,"/")).split("!");let l=r[r.length-1];l.indexOf("?")>0&&(l=l.substring(0,l.indexOf("?")));const a=_path.default.relative(t,l);if(!a.endsWith(".ux"))throw new Error(`Invalid relative path for ux:\n${a}`);return`${`${a.substring(0,a.length-3)}`}.js`}getDevNewSource(e,t,r,l){const a=e.split("\n");let i="";for(let e=a.length-1;e>=0;e--){const i=a[e];devUtils.isStyleStr(i)&&a.splice(e,1,devUtils.getStyleExportsString(i,t,l)),devUtils.isTemplateStr(i)&&a.splice(e,1,devUtils.getTemplateExportsString(i,r,l))}return i+=a.join("\n"),i}getProdNewSource(e,t,r,l){let a="";const i=(0,_parser.parse)(e,{sourceType:"module"}),n={CallExpression(e){const a=e.node.arguments[0];prodUtils.isTemplateStr(a)?prodUtils.replaceTemplateStr(e,a.value,r,l):prodUtils.isStyleStr(a)&&prodUtils.replaceStyleStr(e,a.value,t,l)}};return(0,_traverse.default)(i,n),a=(0,_generator.default)(i,{compact:!0},e).code,prodUtils.replacePlaceHolder(a)}}exports.CardScriptHandlePlugin=CardScriptHandlePlugin;const prodUtils={isTemplateStr:e=>!!e&&(t.isStringLiteral(e)&&e.value.includes("type=template")),isStyleStr:e=>!!e&&(t.isStringLiteral(e)&&e.value.includes("type=style")),replaceTemplateStr(e,r,l,a){const i=this.getCompPath(r,a);let n=i;l===`${i}.template.json`&&(n="#entry");const s=`_START_PLACE_HOLDER_TEMPLATE_${l}_${n}_END_`;e.replaceWith(t.stringLiteral(s))},replaceStyleStr(e,r,l,a){const i=this.getCompPath(r,a),n=`_START_PLACE_HOLDER_CSS_${l}_${(0,_sharedUtils.getStyleObjectId)(i)}_END_`;e.replaceWith(t.stringLiteral(n))},replacePlaceHolder:e=>e=(e=e.replace(/["'`]_START_PLACE_HOLDER_TEMPLATE_([^\s]+?)_([^\s]+?)_END_["'`]/g,(function(e,t,r){return`$json_require$("${t}",{"componentPath":"${r}"})`}))).replace(/["'`]_START_PLACE_HOLDER_CSS_([^\s]+?)_([^\s]+?)_END_["'`]/g,(function(e,t,r){return JSON.stringify({"@info":{styleObjectId:r},extracted:!0,jsonPath:t})})),getRelativeCompPath(e,t){let r=_path.default.relative(e,t);return r=r.replace(/\\/g,"/"),r&&r.endsWith(".ux")?r.substring(0,r.length-3):r},getCompPath(e,t){const r=e.split("!"),l=r[r.length-1].split("?"),a=l[l.length-1],i=_loaderUtils.default.parseQuery(a?`?${a}`:"?").uxPath;return this.getRelativeCompPath(t,i)}},devUtils={isTemplateStr:e=>e.indexOf("type=template")>=0&&e.indexOf("__webpack_require__")>=0,isStyleStr:e=>e.indexOf("type=style")>=0&&e.indexOf("__webpack_require__")>=0,getTemplateExportsString(e,t,r){const l=this.getCompPath(e,r);let a=l;return t===`${l}.template.json`&&(a="#entry"),`$app_module$.exports.template = $json_require$("${t}", { "componentPath": "${a}" })`},getStyleExportsString(e,t,r){const l=this.getCompPath(e,r);return`$app_module$.exports.style = { "@info": { "styleObjectId": "${(0,_sharedUtils.getStyleObjectId)(l)}" }, "extracted": true, "jsonPath": "${t}" }`},getRelativeCompPath(e,t){let r=_path.default.relative(e,t);return r=r.replace(/\\/g,"/"),r&&r.endsWith(".ux")?r.substring(0,r.length-3):r},getCompPath:function(e,t){const r=e.match(/__webpack_require__\("([^"]+)"\)/);if(r&&r[1]){const e=r[1].split("!"),l=e[e.length-1].split("?"),a=l[l.length-1],i=_loaderUtils.default.parseQuery(a?`?${a}`:"?"),n=decodeURIComponent(i.uxPath);return this.getRelativeCompPath(t,n)}return""}}; //# sourceMappingURL=card-script-handle-plugin.js.map