61 lines
2.0 KiB
TypeScript
61 lines
2.0 KiB
TypeScript
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.js*', serviceworkerHandler);
|
|
|
|
// the typed stuff
|
|
const typedrouter = new plugins.typedrequest.TypedRouter();
|
|
|
|
typedrouter.addTypedHandler(
|
|
new plugins.typedrequest.TypedHandler<interfaces.serviceworker.IRequest_Serviceworker_Backend_VersionInfo>(
|
|
'serviceworker_versionInfo',
|
|
async (req) => {
|
|
const versionInfoResponse = swDataFunc();
|
|
return versionInfoResponse;
|
|
}
|
|
)
|
|
);
|
|
|
|
typedserverInstance.server.addRoute(
|
|
'/sw-typedrequest',
|
|
new HandlerTypedRouter(typedrouter)
|
|
);
|
|
};
|