@expo/cli
Version:
78 lines (77 loc) • 2.65 kB
JavaScript
Object.defineProperty(exports, "__esModule", {
value: true
});
function _export(target, all) {
for(var name in all)Object.defineProperty(target, name, {
enumerable: true,
get: all[name]
});
}
_export(exports, {
DevToolsPluginEndpoint: function() {
return _DevToolsPluginManager.DevToolsPluginEndpoint;
},
DevToolsPluginMiddleware: function() {
return DevToolsPluginMiddleware;
}
});
function _assert() {
const data = /*#__PURE__*/ _interop_require_default(require("assert"));
_assert = function() {
return data;
};
return data;
}
function _send() {
const data = /*#__PURE__*/ _interop_require_default(require("send"));
_send = function() {
return data;
};
return data;
}
const _ExpoMiddleware = require("./ExpoMiddleware");
const _DevToolsPluginManager = require("../DevToolsPluginManager");
function _interop_require_default(obj) {
return obj && obj.__esModule ? obj : {
default: obj
};
}
class DevToolsPluginMiddleware extends _ExpoMiddleware.ExpoMiddleware {
constructor(projectRoot, pluginManager){
super(projectRoot, [
_DevToolsPluginManager.DevToolsPluginEndpoint
]), this.pluginManager = pluginManager;
}
shouldHandleRequest(req) {
var _req_url;
if (!((_req_url = req.url) == null ? void 0 : _req_url.startsWith(_DevToolsPluginManager.DevToolsPluginEndpoint))) {
return false;
}
return true;
}
async handleRequestAsync(req, res) {
(0, _assert().default)(req.headers.host, 'Request headers must include host');
const { pathname } = new URL(req.url ?? '/', `http://${req.headers.host}`);
const pluginName = this.queryPossiblePluginName(pathname.substring(_DevToolsPluginManager.DevToolsPluginEndpoint.length + 1));
const webpageRoot = await this.pluginManager.queryPluginWebpageRootAsync(pluginName);
if (!webpageRoot) {
res.statusCode = 404;
res.end();
return;
}
const pathInPluginRoot = pathname.substring(_DevToolsPluginManager.DevToolsPluginEndpoint.length + pluginName.length + 1) || '/';
(0, _send().default)(req, pathInPluginRoot, {
root: webpageRoot
}).pipe(res);
}
queryPossiblePluginName(pathname) {
const parts = pathname.split('/');
if (parts[0][0] === '@' && parts.length > 1) {
// Scoped package name
return `${parts[0]}/${parts[1]}`;
}
return parts[0];
}
}
//# sourceMappingURL=DevToolsPluginMiddleware.js.map
;