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:
		| @@ -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.' | ||||
| } | ||||
|   | ||||
| @@ -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; | ||||
|   | ||||
| @@ -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'; | ||||
|   | ||||
| @@ -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(); | ||||
|   | ||||
		Reference in New Issue
	
	Block a user