unmock-core
Version:
[][npmjs] [](https://circleci.com/gh/unmock/unmock-js) [](h
55 lines • 2.21 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const constants_1 = require("./constants");
const interfaces_1 = require("./interfaces");
var parser_1 = require("./parser");
exports.ServiceParser = parser_1.ServiceParser;
const saveStateProxy = (store, serviceName) => (method = constants_1.DEFAULT_STATE_HTTP_METHOD) => (endpoint = constants_1.DEFAULT_STATE_ENDPOINT, state) => {
if (typeof endpoint !== "string") {
state = endpoint;
endpoint = constants_1.DEFAULT_STATE_ENDPOINT;
}
store.saveState({ endpoint, method, serviceName, state });
return new Proxy(store, StateHandler(serviceName));
};
const MethodHandler = {
get: (obj, method) => obj(method),
apply: (obj, _, args) => obj()(...args),
};
const StateHandler = (prevServiceName) => {
const createAndReturnProxy = (store, serviceName) => {
const proxy = new Proxy(saveStateProxy(store, serviceName), MethodHandler);
prevServiceName = serviceName;
return proxy;
};
if (prevServiceName === undefined) {
return {
get: (store, serviceName) => {
if (serviceName === "reset") {
return () => {
store.resetState(undefined);
};
}
return createAndReturnProxy(store, serviceName);
},
};
}
return {
get: (store, methodOrServiceName) => {
if (prevServiceName === undefined) {
throw new Error("Weird proxy handling; contact maintainers");
}
if (!interfaces_1.isRESTMethod(methodOrServiceName)) {
if (methodOrServiceName === "reset") {
store.resetState(prevServiceName);
return createAndReturnProxy(store, prevServiceName);
}
return createAndReturnProxy(store, methodOrServiceName);
}
const proxy = saveStateProxy(store, prevServiceName);
return proxy(methodOrServiceName);
},
};
};
exports.stateStoreFactory = (serviceStore) => new Proxy(serviceStore, StateHandler());
//# sourceMappingURL=index.js.map