UNPKG

unmock-core

Version:

[![npm](https://img.shields.io/npm/v/unmock-core.svg)][npmjs] [![CircleCI](https://circleci.com/gh/unmock/unmock-js.svg?style=svg)](https://circleci.com/gh/unmock/unmock-js) [![codecov](https://codecov.io/gh/unmock/unmock-js/branch/dev/graph/badge.svg)](h

55 lines 2.21 kB
"use strict"; 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