UNPKG

@luban-cli/cli-plugin-service

Version:
102 lines 4.27 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); __setModuleDefault(result, mod); return result; }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.setupMockServer = void 0; const url_1 = __importDefault(require("url")); const PathRegexp = __importStar(require("path-to-regexp")); const body_parser_1 = __importDefault(require("body-parser")); function pathMatch(options) { options = options || {}; return (path) => { // `PathRegexp.pathToRegexp` will modify `keys` const keys = []; const reg = PathRegexp.pathToRegexp(path, keys, options); return (pathname) => { const m = reg.exec(pathname); const params = {}; if (!m) { return params; } let key; let param; let i = 0; for (i = 0; i < keys.length; i++) { key = keys[i]; param = m[i + 1]; if (!param) continue; params[key.name] = decodeURIComponent(param); if (key.repeat) { params[key.name] = params[key.name].split(key.delimiter); } } return params; }; }; } function setupMockServer(app, config) { app.all("/*", (req, res, next) => { const matchedMockKey = Object.keys(config).find((k) => { return !!PathRegexp.pathToRegexp(k.replace(new RegExp("^" + req.method + " "), "")).exec(req.path); }); res.setHeader("Access-Control-Allow-Origin", req.get("Origin") || "*"); res.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, PUT, DELETE"); res.setHeader("Access-Control-Allow-Headers", "Content-Type, X-Requested-With"); res.setHeader("Access-Control-Allow-Credentials", "true"); if (matchedMockKey === undefined && req.method.toLocaleUpperCase() === "OPTIONS") { return res.sendStatus(200); } else if (typeof matchedMockKey === "string") { const mockValue = config[matchedMockKey]; const contentType = req.get("Content-Type"); let bodyParser = body_parser_1.default.json(); switch (contentType) { case "text/plain": bodyParser = body_parser_1.default.raw(); break; case "text/html": bodyParser = body_parser_1.default.text(); break; case "application/x-www-form-urlencoded": bodyParser = body_parser_1.default.urlencoded({ extended: false }); break; } bodyParser(req, res, function () { if (typeof mockValue === "function") { const rgxStr = ~matchedMockKey.indexOf(" ") ? " " : ""; req.params = pathMatch({ sensitive: false, strict: false, end: false })(matchedMockKey.split(new RegExp(rgxStr))[1])(url_1.default.parse(req.url).pathname || ""); mockValue(req, res, next); } else { res.json(mockValue); } }); } else { next(); } }); } exports.setupMockServer = setupMockServer; //# sourceMappingURL=setupMockServer.js.map