@stuntman/server
Version:
Stuntman - HTTP proxy / mock server with API
52 lines • 2.67 kB
JavaScript
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