"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.pushParams = pushParams; exports.popParams = popParams; exports.withParams = withParams; exports._setTarget = exports.target = void 0; function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; var ownKeys = Object.keys(source); if (typeof Object.getOwnPropertySymbols === 'function') { ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { return Object.getOwnPropertyDescriptor(source, sym).enumerable; })); } ownKeys.forEach(function (key) { _defineProperty(target, key, source[key]); }); } return target; } function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } var stack = []; var target = null; exports.target = target; var _setTarget = function _setTarget(x) { exports.target = target = x; }; exports._setTarget = _setTarget; function pushParams() { if (target !== null) { stack.push(target); } exports.target = target = {}; } function popParams() { var lastTarget = target; var newTarget = exports.target = target = stack.pop() || null; if (newTarget) { if (!Array.isArray(newTarget.$sub)) { newTarget.$sub = []; } newTarget.$sub.push(lastTarget); } return lastTarget; } function addParams(params) { if (_typeof(params) === 'object' && !Array.isArray(params)) { exports.target = target = _objectSpread({}, target, params); } else { throw new Error('params must be an object'); } } function withParamsDirect(params, validator) { return withParamsClosure(function (add) { return function () { add(params); for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } return validator.apply(this, args); }; }); } function withParamsClosure(closure) { var validator = closure(addParams); return function () { pushParams(); try { for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { args[_key2] = arguments[_key2]; } return validator.apply(this, args); } finally { popParams(); } }; } function withParams(paramsOrClosure, maybeValidator) { if (_typeof(paramsOrClosure) === 'object' && maybeValidator !== undefined) { return withParamsDirect(paramsOrClosure, maybeValidator); } return withParamsClosure(paramsOrClosure); }