UNPKG

@stuntman/server

Version:

Stuntman - HTTP proxy / mock server with API

52 lines 2.67 kB
import serializeJavascript from 'serialize-javascript'; import { logger } from '@stuntman/shared'; import { validateSerializedRuleProperties } from './validators.js'; // TODO export const deserializeRule = (serializedRule) => { logger.debug(serializedRule, 'attempt to deserialize rule'); validateSerializedRuleProperties(serializedRule); const rule = { id: serializedRule.id, matches: (req) => new Function('____arg0', serializedRule.matches.remoteFn)(req), ttlSeconds: serializedRule.ttlSeconds, actions: { mockResponse: { status: 200 } }, ...(serializedRule.disableAfterUse !== undefined && { disableAfterUse: serializedRule.disableAfterUse }), ...(serializedRule.removeAfterUse !== undefined && { removeAfterUse: serializedRule.removeAfterUse }), ...(serializedRule.labels !== undefined && { labels: serializedRule.labels }), ...(serializedRule.priority !== undefined && { priority: serializedRule.priority }), ...(serializedRule.isEnabled !== undefined && { isEnabled: serializedRule.isEnabled }), ...(serializedRule.storeTraffic !== undefined && { storeTraffic: serializedRule.storeTraffic }), }; // TODO store the original localFn and variables sent from client for web UI editing maybe if (serializedRule.actions.mockResponse) { rule.actions = { mockResponse: 'remoteFn' in serializedRule.actions.mockResponse ? (req) => new Function('____arg0', serializedRule.actions.mockResponse.remoteFn)(req) : serializedRule.actions.mockResponse, }; } else { rule.actions = { ...(serializedRule.actions.modifyRequest && { modifyRequest: ((req) => new Function('____arg0', serializedRule.actions.modifyRequest.remoteFn)(req)), }), ...(serializedRule.actions.modifyResponse && { modifyResponse: ((req, res) => new Function('____arg0', '____arg1', serializedRule.actions.modifyResponse.remoteFn)(req, res)), }), }; } logger.debug(rule, 'deserialized rule'); return rule; }; export const escapedSerialize = (obj) => serializeJavascript(obj).replace(/\\/g, '\\\\').replace(/'/g, "\\'").replace(/\n/g, "\\n'\n+ '"); export const liveRuleToRule = (liveRule) => { const ruleClone = { ...liveRule }; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore delete ruleClone.counter; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore delete ruleClone.createdTimestamp; return ruleClone; }; //# sourceMappingURL=utils.js.map