import * as plugins from '../plugins.js'; import * as paths from '../paths.js'; import * as interfaces from '../../dist_ts_interfaces/index.js' import { Handler } from './classes.handler.js'; import type { TypedServer } from '../classes.typedserver.js'; import { HandlerTypedRouter } from './classes.handlertypedrouter.js'; const swBundleJs: string = plugins.smartfile.fs.toStringSync( plugins.path.join(paths.serviceworkerBundleDir, './serviceworker.bundle.js') ); const swBundleJsMap: string = plugins.smartfile.fs.toStringSync( plugins.path.join(paths.serviceworkerBundleDir, './serviceworker.bundle.js.map') ); let swVersionInfo: interfaces.serviceworker.IRequest_Serviceworker_Backend_VersionInfo['response'] = null; const serviceworkerHandler = new Handler( 'GET', async (req, res) => { if (req.path === '/serviceworker.bundle.js') { res.status(200); res.set('Content-Type', 'text/javascript'); res.write(swBundleJs + '\n' + `/** appSemVer: ${swVersionInfo?.appSemVer || 'not set'} */`); } else if (req.path === '/serviceworker.bundle.js.map') { res.status(200); res.set('Content-Type', 'application/json'); res.write(swBundleJsMap); } res.end(); } ); export const addServiceWorkerRoute = ( typedserverInstance: TypedServer, swDataFunc: () => interfaces.serviceworker.IRequest_Serviceworker_Backend_VersionInfo['response'] ) => { // lets the version info as unique string; swVersionInfo = swDataFunc(); // the basic stuff typedserverInstance.server.addRoute('/serviceworker.*', serviceworkerHandler); // the typed stuff const typedrouter = new plugins.typedrequest.TypedRouter(); typedrouter.addTypedHandler( new plugins.typedrequest.TypedHandler( 'serviceworker_versionInfo', async (req) => { const versionInfoResponse = swDataFunc(); return versionInfoResponse; } ) ); typedserverInstance.server.addRoute( '/sw-typedrequest', new HandlerTypedRouter(typedrouter) ); };