UNPKG

webpack-browser-extension-html

Version:
12 lines (8 loc) 14.4 kB
"use strict";var Ce=Object.create;var J=Object.defineProperty;var ve=Object.getOwnPropertyDescriptor;var Me=Object.getOwnPropertyNames;var Fe=Object.getPrototypeOf,He=Object.prototype.hasOwnProperty;var Ne=(r,e)=>{for(var t in e)J(r,t,{get:e[t],enumerable:!0})},oe=(r,e,t,s)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of Me(e))!He.call(r,i)&&i!==t&&J(r,i,{get:()=>e[i],enumerable:!(s=ve(e,i))||s.enumerable});return r};var l=(r,e,t)=>(t=r!=null?Ce(Fe(r)):{},oe(e||!r||!r.__esModule?J(t,"default",{value:r,enumerable:!0}):t,r)),$e=r=>oe(J({},"__esModule",{value:!0}),r);var Je={};Ne(Je,{default:()=>Y});module.exports=$e(Je);var ie=l(require("path"));var K=l(require("fs")),he=require("webpack"),ge=l(require("browser-extension-manifest-fields"));var ae=l(require("path")),Re=l(require("fs"));function y(r,e){return e.some(t=>r.includes(t))}function G(r,e){return Object.values(r).some(t=>t?.html===e)}function ce(r,e,t){let s=Object.keys(r).find(n=>r[n]?.html===e||r[n]?.js.includes(e)||r[n]?.css.includes(e))||"",i=Z(e);return s?`/${s.replace(i,"")}${t}`:`${e.replace(i,"")}${t}`}function Z(r){switch(ae.default.extname(r)){case".js":case".mjs":case".ts":case".tsx":return".js";case".css":case".scss":case".sass":case".less":return".css";case".html":return".html";default:return".js"}}function k(r,e){if(r.getAsset("manifest.json")||r.assets["manifest.json"]){let t=r.assets["manifest.json"].source().toString();return JSON.parse(t||"{}")}return require(e)}var pe=l(require("fs")),j=l(require("webpack"));var A=l(require("path"));function ee(r,e,t){if(!e)throw new Error("This operation is impossible. Please report a bug.");let s=A.default.dirname(r);switch(A.default.extname(t)){case".js":case".ts":case".jsx":case".tsx":return De(s,e,t);case".css":case".scss":case".sass":case".less":return Ue(s,e,t);default:return Oe(s,e,t)}}function le(r,e){return`[${A.default.relative(r,e)}] Entry Point Modification Found Changing <script> or <link rel="stylesheet"> source paths after compilation requires a server restart. Restart the program and try again.`}function me(){return"[manifest.json]: File `manifest.json` not found. A manifest file is required for this plugin to run."}function B(r,e){let t=`Check the ${r} field in your manifest.json file.`,s="Check the `pages` folder in your project root directory.",i=r.startsWith("pages");return`[manifest.json]: ${`File path \`${e}\` not found. ${i?s:t}`}`}function De(r,e,t){let s=A.default.relative(r,e),i=`Check your <script> tags in \`${e}\`.`;return`[${s}] File not found - \`${t}\` (not found) ${i}`}function Ue(r,e,t){let s=A.default.relative(r,e),i=`Check your <link> tags in \`${e}\`.`;return`[${s}] File not found - \`${t}\` (not found) ${i}`}function Oe(r,e,t){let s=A.default.extname(t),i=A.default.relative(r,e),n=`Check your *${s} assets in \`${e}\`.`;return`[${i}] File not found - \`${t}\` (not found) ${n}`}var de=l(require("browser-extension-manifest-fields"));var fe=l(require("fs")),H=l(require("path")),ue=l(require("parse5-utils"));var L=l(require("parse5-utils"));function V(r){try{return new URL(r),!0}catch{return!1}}function I(r,e){let{childNodes:t=[]}=r;for(let s of t)if(s.nodeName==="script"){let i=L.default.getAttribute(s,"src");if(!i||V(i))continue;e({filePath:i,childNode:s,assetType:"script"})}else if(s.nodeName==="link"){let i=L.default.getAttribute(s,"href"),n=L.default.getAttribute(s,"rel");if(!i||V(i))continue;e(n==="dns-prefetch"||n==="icon"||n==="manifest"||n==="modulepreload"||n==="preconnect"||n==="prefetch"||n==="preload"||n==="prerender"?{filePath:i,childNode:s,assetType:"staticHref"}:{filePath:i,childNode:s,assetType:"css"})}else if(s.nodeName==="a"||s.nodeName==="area"){let i=L.default.getAttribute(s,"href");if(!i||V(i))continue;e({filePath:i,childNode:s,assetType:"staticHref"})}else if(s.nodeName==="audio"||s.nodeName==="embed"||s.nodeName==="iframe"||s.nodeName==="img"||s.nodeName==="input"||s.nodeName==="source"||s.nodeName==="track"||s.nodeName==="video"){let i=L.default.getAttribute(s,"src");if(!i||V(i))continue;e({filePath:i,childNode:s,assetType:"staticSrc"})}else I(s,e)}function d(r,e){let t=e||fe.default.readFileSync(r,{encoding:"utf8"}),s=ue.default.parse(t),i={css:[],js:[],static:[]},n=(f,a)=>H.default.join(H.default.dirname(f),a.startsWith("/")?H.default.relative(H.default.dirname(f),a):a);for(let f of s.childNodes)if(f.nodeName==="html"){for(let a of f.childNodes)(a.nodeName==="head"||a.nodeName==="body")&&I(a,({filePath:o,assetType:m})=>{let c=n(r,o);switch(m){case"script":i.js?.push(c);break;case"css":i.css?.push(c);break;case"staticSrc":case"staticHref":if(o.startsWith("#"))break;i.static?.push(c);break;default:break}});return{css:i.css,js:i.js,static:i.static}}}function Te(r){let e=me();r.errors.push(new j.default.WebpackError(e))}function We(r,e,t){let s=B(e,t);r.warnings.push(new j.default.WebpackError(s))}function _e(r,e,t,s){let i=ee(e,t,s);r.warnings.push(new j.default.WebpackError(i))}function qe(r,e,t){let s=le(e,t);r.errors.push(new j.default.WebpackError(s))}function ze(r,e,t){let s="Module not found: Error: Can't resolve ",n=t.message.replace(s,"").split("'")[1];if(t.message.includes(s)){let f={...(0,de.default)(r).html,...e};for(let a of Object.entries(f)){let[,o]=a;if(o?.html){if(!pe.default.existsSync(o?.html))return null;let m=d(o?.html),c=m?.js||[],u=m?.css||[];if(c.includes(n)||u.includes(n)){let g=ee(r,o?.html,n);return new j.default.WebpackError(g)}}}}return null}var b={manifestNotFoundError:Te,entryNotFoundWarn:We,fileNotFoundWarn:_e,serverStartRequiredError:qe,handleCantResolveError:ze};function x(r,e,t){return t?`/${r}${e}`:`${r}${e}`}var N=class{manifestPath;includeList;exclude;constructor(e){this.manifestPath=e.manifestPath,this.includeList=e.includeList,this.exclude=e.exclude}apply(e){e.hooks.thisCompilation.tap("HtmlPlugin (EmitHtmlFile)",t=>{t.hooks.seal.tap("HtmlPlugin (EmitHtmlFile)",()=>{if(!K.default.existsSync(this.manifestPath)){b.manifestNotFoundError(t);return}if(t.errors.length>0)return;let s=k(t,this.manifestPath),i={...(0,ge.default)(this.manifestPath,s).html,...this.includeList};for(let n of Object.entries(i)){let[f,a]=n,o=a?.html;if(o){if(!K.default.existsSync(o)){b.entryNotFoundWarn(t,f,o);return}let m=K.default.readFileSync(o,"utf8");if(!y(o,this.exclude)){let c=new he.sources.RawSource(m),u=x(f,".html");t.emitAsset(u,c)}}}})})}};var Q=l(require("fs")),C=l(require("path")),$=require("webpack"),ye=l(require("browser-extension-manifest-fields"));var R=class{manifestPath;includeList;exclude;constructor(e){this.manifestPath=e.manifestPath,this.includeList=e.includeList,this.exclude=e.exclude}apply(e){e.hooks.thisCompilation.tap("HtmlPlugin (AddAssetsToCompilation)",t=>{t.hooks.processAssets.tap({name:"AddAssetsToCompilationPlugin",stage:$.Compilation.PROCESS_ASSETS_STAGE_ADDITIONAL},()=>{if(t.errors.length>0)return;let s=k(t,this.manifestPath),i={...(0,ye.default)(this.manifestPath,s).html,...this.includeList};for(let n of Object.entries(i)){let[f,a]=n,o=f+".html";if(a?.html){let m=t.getAsset(o);if(m){let c=m.source.source().toString(),u=d(a?.html,c)?.static,g=[...new Set(u)];for(let p of g)if(!y(p,this.exclude)){if(!Q.default.existsSync(p)&&!G(this.includeList,p)&&!C.default.basename(p).startsWith("#")){b.fileNotFoundWarn(t,this.manifestPath,a?.html,p);return}let q=Q.default.readFileSync(p),P=new $.sources.RawSource(q),E=C.default.join("assets",C.default.basename(p));if(!t.getAsset(E))if(p.endsWith(".html")){let S=d(p),v=[...S?.js||[],...S?.css||[],...S?.static||[]];t.emitAsset(E,P),v.forEach(z=>{let M=Q.default.readFileSync(z),je=new $.sources.RawSource(M),ne=C.default.join("assets",C.default.basename(z));t.getAsset(ne)||t.emitAsset(ne,je)})}else t.emitAsset(E,P)}}}}})})}};var be=l(require("path")),te=l(require("fs")),xe=l(require("browser-extension-manifest-fields"));var D=class{manifestPath;includeList;exclude;constructor(e){this.manifestPath=e.manifestPath,this.includeList=e.includeList,this.exclude=e.exclude}apply(e){let t={...(0,xe.default)(this.manifestPath).html,...this.includeList};for(let s of Object.entries(t)){let[i,n]=s;if(n?.html){if(!te.default.existsSync(n?.html))return;let f=d(n?.html),a=f?.js||[],o=f?.css||[],m=[...a,...o].filter(c=>!y(c,this.exclude));if(e.options.mode==="development"){let c=be.default.resolve(__dirname,"minimum-script-file.mjs");m.push(c)}te.default.existsSync(n?.html)&&(y(n?.html,this.exclude)||(e.options.entry={...e.options.entry,[i]:{import:m}}))}}}};var X=require("webpack"),Pe=l(require("browser-extension-manifest-fields"));var se=l(require("fs")),w=l(require("path")),h=l(require("parse5-utils"));function re(r,e,t,s,i){let n=se.default.readFileSync(t,{encoding:"utf8"}),f=h.default.parse(n),a=!!r.getAsset(e+".css"),o=!1;for(let m of f.childNodes)if(m.nodeName==="html"){for(let c of m.childNodes){if((c.nodeName==="head"||c.nodeName==="body")&&I(c,({filePath:u,childNode:g,assetType:p})=>{let q=w.default.dirname(t),P=w.default.resolve(q,u),E=Z(P),S=y(w.default.resolve(q,u),i),v=w.default.join("/",w.default.normalize(u)),z=G(s,P);switch(p){case"script":{S?m=h.default.setAttribute(g,"src",v):(m=h.default.remove(g),o=!0);break}case"css":{S?m=h.default.setAttribute(g,"href",v):(m=h.default.remove(g),a=!0);break}case"staticHref":case"staticSrc":{if(S)m=h.default.setAttribute(g,p==="staticSrc"?"src":"href",v);else if(z){let M=ce(s,P,E);m=h.default.setAttribute(g,p==="staticSrc"?"src":"href",M)}else{let M=w.default.join("assets",w.default.basename(P,E));se.default.existsSync(P)&&(m=h.default.setAttribute(g,p==="staticSrc"?"src":"href",x(M,"",!0)))}break}default:break}}),c.nodeName==="head"&&a&&r.options.mode==="production"){let u=h.default.createNode("link");u.attrs=[{name:"rel",value:"stylesheet"},{name:"href",value:x(e,".css",!0)}],h.default.append(c,u)}if(c.nodeName==="body"&&(o||r.options.mode!=="production")){let u=h.default.createNode("script");u.attrs=[{name:"src",value:x(e,".js",!0)}],h.default.append(c,u)}}return h.default.serialize(f)}}var U=class{manifestPath;includeList;exclude;constructor(e){this.manifestPath=e.manifestPath,this.includeList=e.includeList,this.exclude=e.exclude}apply(e){e.hooks.thisCompilation.tap("HtmlPlugin (UpdateHtmlFile)",t=>{t.hooks.processAssets.tap({name:"HtmlPlugin (UpdateHtmlFile)",stage:X.Compilation.PROCESS_ASSETS_STAGE_DERIVED},()=>{if(t.errors.length>0)return;let s=k(t,this.manifestPath),i={...(0,Pe.default)(this.manifestPath,s).html,...this.includeList};for(let n of Object.entries(i)){let[f,a]=n,o=a?.html;if(o){let m=re(t,f,o,i,this.exclude);if(!y(o,this.exclude)){let c=new X.sources.RawSource(m),u=x(f,".html");t.updateAsset(u,c)}}}})})}};var Se=l(require("path")),O=class{manifestPath;includeList;exclude;constructor(e){this.manifestPath=e.manifestPath,this.includeList=e.includeList,this.exclude=e.exclude||[]}apply(e){e.options.module.rules.push({test:/\.(t|j)sx?$/,use:[{loader:Se.default.resolve(__dirname,"./loaders/InjectHmrAcceptLoader"),options:{manifestPath:this.manifestPath,exclude:this.exclude,includeList:this.includeList}}]})}};var ke=l(require("fs")),Ae=require("webpack"),we=l(require("browser-extension-manifest-fields"));var T=class{manifestPath;includeList;exclude;constructor(e){this.manifestPath=e.manifestPath,this.includeList=e.includeList,this.exclude=e.exclude}apply(e){e.hooks.thisCompilation.tap("HtmlPlugin (AddToFileDependencies)",t=>{t.hooks.processAssets.tap({name:"HtmlPlugin (AddToFileDependencies)",stage:Ae.Compilation.PROCESS_ASSETS_STAGE_ADDITIONS},s=>{if(t.errors?.length)return;let i=k(t,this.manifestPath),n={...(0,we.default)(this.manifestPath,i).html,...this.includeList};for(let f of Object.entries(n)){let[,a]=f;if(a?.html){let o=new Set(t.fileDependencies);if(ke.default.existsSync(a?.html)){let m=[a?.html,...a?.static];for(let c of m)o.has(c)||(o.add(c),c===a?.html&&t.fileDependencies.add(c))}}}})})}};var Ee=l(require("path")),Le=l(require("fs")),Ie=l(require("browser-extension-manifest-fields"));var W=class{manifestPath;includeList;exclude;initialHtmlAssets={};constructor(e){this.manifestPath=e.manifestPath,this.includeList=e.includeList,this.exclude=e.exclude}hasEntriesChanged(e,t){if(!t||!e||e.length!==t.length)return!0;for(let s=0;s<e.length;s++)if(e[s]!==t[s])return!0;return!1}storeInitialHtmlAssets(e){Object.entries(e).forEach(([t,s])=>{let i=s?.html;i&&(Le.default.existsSync(i)||(console.error(B(t,i)),process.exit(1)),this.initialHtmlAssets[i]={js:d(i)?.js||[],css:d(i)?.css||[]})})}apply(e){let t=require(this.manifestPath),i={...(0,Ie.default)(this.manifestPath,t).html,...this.includeList};this.storeInitialHtmlAssets(i),e.hooks.make.tapAsync("HtmlPlugin (RunChromeExtensionPlugin)",(n,f)=>{let a=e.modifiedFiles||new Set,o=Array.from(a)[0];if(o&&this.initialHtmlAssets[o]){let m=d(o)?.js||[],c=d(o)?.css||[],{js:u,css:g}=this.initialHtmlAssets[o];if(this.hasEntriesChanged(c,g)||this.hasEntriesChanged(m,u)){let p=Ee.default.dirname(this.manifestPath);b.serverStartRequiredError(n,p,o)}}f()})}};var _=class{manifestPath;includeList;constructor(e){this.manifestPath=e.manifestPath,this.includeList=e.includeList}apply(e){e.hooks.compilation.tap("HtmlPlugin (HandleCommonErrors)",t=>{t.hooks.afterSeal.tapPromise("HtmlPlugin (HandleCommonErrors)",async()=>{t.errors.forEach((s,i)=>{let n=b.handleCantResolveError(this.manifestPath,this.includeList,s);n&&(t.errors[i]=n)})})})}};var Y=class{manifestPath;include;exclude;constructor(e){this.manifestPath=e.manifestPath,this.include=e.include||[],this.exclude=e.exclude||[]}parseIncludes(e){return e.length?e.reduce((t,s)=>{let i=ie.default.extname(s),n=ie.default.basename(s,i);return{...t,[`pages/${n}`]:{html:s,...d(s)}}},{}):{}}apply(e){let t=this.parseIncludes(this.include||[]);new N({manifestPath:this.manifestPath,includeList:t,exclude:this.exclude||[]}).apply(e),new R({manifestPath:this.manifestPath,includeList:t,exclude:this.exclude||[]}).apply(e),new D({manifestPath:this.manifestPath,includeList:t,exclude:this.exclude||[]}).apply(e),new U({manifestPath:this.manifestPath,includeList:t,exclude:this.exclude||[]}).apply(e),new O({manifestPath:this.manifestPath,includeList:t,exclude:this.exclude||[]}).apply(e),new T({manifestPath:this.manifestPath,includeList:t,exclude:this.exclude||[]}).apply(e),new W({manifestPath:this.manifestPath,includeList:t,exclude:this.exclude||[]}).apply(e),new _({manifestPath:this.manifestPath,includeList:t,exclude:this.exclude||[]}).apply(e)}};