1*2e1e108bSEvan Baconimport { ServerRequest, ServerResponse } from './server.types'; 2*2e1e108bSEvan Bacon 3*2e1e108bSEvan Baconconst debug = require('debug')( 4*2e1e108bSEvan Bacon 'expo:start:server:middleware:metro-context-modules' 5*2e1e108bSEvan Bacon) as typeof console.log; 6*2e1e108bSEvan Bacon 7*2e1e108bSEvan Bacon/** 8*2e1e108bSEvan Bacon * Source maps for `require.context` modules aren't supported in the Metro dev server 9*2e1e108bSEvan Bacon * we should intercept the request and return a noop response to prevent Chrome/Metro 10*2e1e108bSEvan Bacon * from erroring out. 11*2e1e108bSEvan Bacon */ 12*2e1e108bSEvan Baconexport class ContextModuleSourceMapsMiddleware { 13*2e1e108bSEvan Bacon getHandler() { 14*2e1e108bSEvan Bacon return (req: ServerRequest, res: ServerResponse, next: any) => { 15*2e1e108bSEvan Bacon if (!req?.url || (req.method !== 'GET' && req.method !== 'HEAD')) { 16*2e1e108bSEvan Bacon return next(); 17*2e1e108bSEvan Bacon } 18*2e1e108bSEvan Bacon 19*2e1e108bSEvan Bacon if (req.url.match(/%3Fctx=[\d\w\W]+\.map\?/)) { 20*2e1e108bSEvan Bacon debug('Skipping sourcemap request for context module %s', req.url); 21*2e1e108bSEvan Bacon // Return a noop response for the sourcemap 22*2e1e108bSEvan Bacon res.writeHead(200, { 23*2e1e108bSEvan Bacon 'Content-Type': 'application/json', 24*2e1e108bSEvan Bacon }); 25*2e1e108bSEvan Bacon res.end('{}'); 26*2e1e108bSEvan Bacon return; 27*2e1e108bSEvan Bacon } 28*2e1e108bSEvan Bacon 29*2e1e108bSEvan Bacon next(); 30*2e1e108bSEvan Bacon }; 31*2e1e108bSEvan Bacon } 32*2e1e108bSEvan Bacon} 33