webpack-run-chrome-extension
Version:
Run your extension on Google Chrome with auto-reload support
53 lines (47 loc) • 2.94 kB
JavaScript
"use strict";var f=Object.create;var a=Object.defineProperty;var g=Object.getOwnPropertyDescriptor;var p=Object.getOwnPropertyNames;var b=Object.getPrototypeOf,k=Object.prototype.hasOwnProperty;var v=(e,t)=>{for(var r in t)a(e,r,{get:t[r],enumerable:!0})},m=(e,t,r,s)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of p(t))!k.call(e,n)&&n!==r&&a(e,n,{get:()=>t[n],enumerable:!(s=g(t,n))||s.enumerable});return e};var q=(e,t,r)=>(r=e!=null?f(b(e)):{},m(t||!e||!e.__esModule?a(r,"default",{value:e,enumerable:!0}):r,e)),x=e=>m(a({},"__esModule",{value:!0}),e);var y={};v(y,{default:()=>R});module.exports=x(y);var o=q(require("path")),u=require("loader-utils"),l=require("schema-utils"),w={type:"object",properties:{test:{type:"string"},manifestPath:{type:"string"}}};function R(e){let t=this.getOptions(),r=t.manifestPath,s=o.default.dirname(r),n=require(r);(0,l.validate)(w,t,{name:"Inject Reload (background.scripts and background.service_worker) Script",baseDataPath:"options"});let c=(0,u.urlToRequest)(this.resourcePath),d=`
;chrome.runtime.onMessageExternal.addListener(
async (request, _sender, sendResponse) => {
const managementInfo = await new Promise((resolve) => {
chrome.management.getSelf(resolve);
});
// Ping-pong between the user extension background page(this)
// and the middleware socket client (reloadService.ts),
// which will then send a message to the server
// (startServer.ts) so it can display the extension info.
if (request.initialLoadData) {
sendResponse({
id: chrome.runtime.id,
manifest: chrome.runtime.getManifest(),
management: managementInfo,
})
return true
}
// Reload the extension runtime if the manifest or
// service worker changes.
if (
request.changedFile === 'manifest.json' ||
request.changedFile === 'service_worker' ||
request.changedFile === '_locales'
) {
setTimeout(() => {
sendResponse({reloaded: true})
chrome.runtime.reload()
}, 750)
}
// Reload all tabs if the contextMenus code changes.
if (request.changedFile === 'contextMenus') {
sendResponse({reloaded: true})
chrome.tabs.query({}, (tabs) => {
if (!tabs) return
tabs.forEach((tab) => chrome.tabs.reload(tab.id))
})
}
// Reload all tabs if the declarative_net_request code changes.
if (request.changedFile === 'declarative_net_request') {
sendResponse({reloaded: true})
chrome.runtime.reload()
}
return true
}
);
`;if(n.background){if(n.background.scripts)for(let i of[n.background.scripts[0]]){let h=o.default.resolve(s,i);if(c.includes(h))return`${d}${e}`}if(n.background.service_worker){let i=o.default.resolve(s,n.background.service_worker);if(c.includes(i))return`${d}${e}`}}return e}