User:Thundercraft5/sw.js

// Add any test code here. // DO NOT SUBMIT TO JSRT! /* global self, Request */ /* jshint undef:true, esversion: 6 */ const map = { "test": "User:Thundercraft5/sw.js/module.js", };

self.addEventListener('fetch', event => { // ignore:line	let { request: { url }, request } = event;	url = new URL(url);	console.log(event.clientId, url, Object.fromEntries(request.headers));	if (url.pathname.match(/^\/@(?!.*\/wiki\/).*(\.[mc]?js$)?/)) {		let normalized = url.pathname.replace(/^\/@/g, "");		console.log(normalized);		const isSpecifier = ![".", "/"].some(s => normalized.includes(s));		if (map[normalized] && isSpecifier) normalized = map[normalized];		else if (isSpecifier) 			return console.warn(`Module specifier "${normalized}" not found!`), 				event.respondWith(Promise.reject(new Error(`Module specifier "${normalized}" could not be resolved`)));		normalized = new URL(normalized, url);		url.searchParams.append("action", "raw");		url.searchParams.append("ctype", "text/javascript");		url.searchParams.set("title", normalized);		url.pathname = "/index.php";		event.respondWith(fetch(new Request(url, { ...request })) .then(async response => {				const headers = Object.fromEntries(response.headers);				if (headers?.["content-type"]?.split(";").shift !== "text/javascript") 					throw new Error(`Server responded with a MIME type of "${headers["content-type"].split(";").shift}", expected "text/javascript" instead`);				return [					{ ...response, url }, 					headers,					await response.text,				];			}) .then(([response, headers, text]) => new Response(new Blob([text], { type: headers["content-type"] }), { ...response }))); 	} });

self.addEventListener('activate', event => {	console.log(event); });

self.addEventListener('install', event => {	console.log(event);	});