fix(servertools): Fix wildcard path extraction for static/proxy handlers, correct serviceworker route, add local settings and test typo fix

This commit is contained in:
2025-09-03 12:33:04 +00:00
parent 0f22c91499
commit 776d6fb95d
7 changed files with 62 additions and 5 deletions

View File

@@ -3,6 +3,6 @@
*/
export const commitinfo = {
name: '@api.global/typedserver',
version: '3.0.77',
version: '3.0.78',
description: 'A TypeScript-based project for easy serving of static files with support for live reloading, compression, and typed requests.'
}

View File

@@ -16,7 +16,31 @@ export class HandlerProxy extends Handler {
}
) {
super('ALL', async (req, res) => {
const relativeRequestPath = req.path.slice(req.route.path.length - 1);
// Extract the path using Express 5's params or fallback methods
let relativeRequestPath: string;
if (req.params && req.params.splat !== undefined) {
// Express 5 wildcard route (/*splat)
// Handle array values - join them if array, otherwise use as-is
relativeRequestPath = Array.isArray(req.params.splat) ? req.params.splat.join('/') : String(req.params.splat || '');
} else if (req.params && req.params[0] !== undefined) {
// Numbered parameter fallback
relativeRequestPath = Array.isArray(req.params[0]) ? req.params[0].join('/') : String(req.params[0] || '');
} else if (req.baseUrl) {
// If there's a baseUrl, remove it from the path
relativeRequestPath = req.path.slice(req.baseUrl.length);
} else if (req.route && req.route.path === '/') {
// Root route - use full path minus leading slash
relativeRequestPath = req.path.slice(1);
} else {
// Fallback to the original slicing logic for compatibility
relativeRequestPath = req.path.slice(req.route.path.length - 1);
}
// Ensure relativeRequestPath is a string and has no leading slash
relativeRequestPath = String(relativeRequestPath || '');
if (relativeRequestPath.startsWith('/')) {
relativeRequestPath = relativeRequestPath.slice(1);
}
const proxyRequestUrl = remoteMountPointArg + relativeRequestPath;
console.log(`proxy ${req.path} to ${proxyRequestUrl}`);
let proxiedResponse: plugins.smartrequest.ICoreResponse;

View File

@@ -36,7 +36,31 @@ export class HandlerStatic extends Handler {
}
// lets compute some paths
let filePath: string = requestPath.slice(req.route.path.length - 1); // lets slice of the root
// Extract the path using Express 5's params or fallback methods
let filePath: string;
if (req.params && req.params.splat !== undefined) {
// Express 5 wildcard route (/*splat)
// Handle array values - join them if array, otherwise use as-is
filePath = Array.isArray(req.params.splat) ? req.params.splat.join('/') : String(req.params.splat || '');
} else if (req.params && req.params[0] !== undefined) {
// Numbered parameter fallback
filePath = Array.isArray(req.params[0]) ? req.params[0].join('/') : String(req.params[0] || '');
} else if (req.baseUrl) {
// If there's a baseUrl, remove it from the path
filePath = requestPath.slice(req.baseUrl.length);
} else if (req.route && req.route.path === '/') {
// Root route - use full path minus leading slash
filePath = requestPath.slice(1);
} else {
// Fallback to the original slicing logic for compatibility
filePath = requestPath.slice(req.route.path.length - 1);
}
// Ensure filePath is a string and has no leading slash
filePath = String(filePath || '');
if (filePath.startsWith('/')) {
filePath = filePath.slice(1);
}
if (requestPath === '') {
console.log('replaced root with index.html');
filePath = 'index.html';

View File

@@ -38,7 +38,7 @@ export const addServiceWorkerRoute = (
swVersionInfo = swDataFunc();
// the basic stuff
typedserverInstance.server.addRoute('/serviceworker{.*}', serviceworkerHandler);
typedserverInstance.server.addRoute('/serviceworker/*splat', serviceworkerHandler);
// the typed stuff
const typedrouter = new plugins.typedrequest.TypedRouter();