UNPKG

proxify-method

Version:

Project for flexible extension of the existing functionality

82 lines 3.61 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.chainProxify = exports.proxify = void 0; const async_proxify_1 = require("./async.proxify"); const sync_proxify_1 = require("./sync.proxify"); const utils_1 = require("./utils"); function proxify(result, chainMehod, fromResult = false) { if ((typeof result).includes('function')) { result = result(); } if ((typeof result) === 'object' && result.then) { return async_proxify_1.proxifyAsync(result, chainMehod, fromResult); } return sync_proxify_1.proxifySync(result, chainMehod, fromResult); } exports.proxify = proxify; function initChainModel(ctx, proxityPattern, chainMehod, resultFromChain, base) { const baseObj = ctx[base]; const ownProps = Object.getOwnPropertyNames(baseObj); let onlyMethods = ownProps .filter((p) => (typeof baseObj[p]) === 'function' && !(p === 'constructor')); if (proxityPattern) { onlyMethods = onlyMethods.filter((m) => m.match(proxityPattern)); } onlyMethods.forEach((m) => { const currentMethod = baseObj[m]; baseObj[m] = function (...args) { return proxify(currentMethod.call(this, ...args), chainMehod, resultFromChain); }; }); } function initContextChainModel(ctx, proxityPattern, chainMehod, resultFromChain) { initChainModel(ctx, proxityPattern, chainMehod, resultFromChain, '__proto__'); } function initPrototyeChainModel(ctx, proxityPattern, chainMehod, resultFromChain) { initChainModel(ctx, proxityPattern, chainMehod, resultFromChain, 'prototype'); } function setUpChain(name, asserter, _chainMehod = {}) { if ((typeof name).includes('function') && name.name) { asserter = name; name = name.name; } if (!(typeof asserter).includes('function')) { throw new Error('asserter should be a function'); } _chainMehod[name] = asserter; return { chainProxify: (name, asserter) => setUpChain(name, asserter, _chainMehod), initContextChainModel: (ctx, proxityPattern = null) => { if (utils_1.isString(proxityPattern)) { proxityPattern = new RegExp(proxityPattern); } const resultFromChain = setUpChain.resultFromChain; // back to default condition, should be disabled = false setUpChain.resultFromChain = false; initContextChainModel(ctx, proxityPattern, _chainMehod, resultFromChain); }, initPrototyeChainModel: (ctx, proxityPattern = null) => { if (utils_1.isString(proxityPattern)) { proxityPattern = new RegExp(proxityPattern); } const resultFromChain = setUpChain.resultFromChain; // back to default condition, should be disabled = false setUpChain.resultFromChain = false; initPrototyeChainModel(ctx, proxityPattern, _chainMehod, resultFromChain); }, // TODO backward compatibility initChainModel: (ctx, proxityPattern = null) => { if (utils_1.isString(proxityPattern)) { proxityPattern = new RegExp(proxityPattern); } const resultFromChain = setUpChain.resultFromChain; // back to default condition, should be disabled = false setUpChain.resultFromChain = false; initContextChainModel(ctx, proxityPattern, _chainMehod, resultFromChain); }, }; } setUpChain.resultFromChain = false; const chainProxify = setUpChain; exports.chainProxify = chainProxify; //# sourceMappingURL=index.js.map