"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.delegateAPI = exports.getDelegatedAPIList = void 0; const API_IMPLEMENTATION_METHOD_RE = /^_(\S+)\$(getter|setter)?$/; function isTestController(obj) { var _a; return ((_a = obj === null || obj === void 0 ? void 0 : obj.constructor) === null || _a === void 0 ? void 0 : _a.name) === 'TestController'; } function getTestController(obj) { if (isTestController(obj)) return obj; else if (isTestController(obj._testController)) return obj._testController; return null; } function getDelegatedAPIList(src) { return Object .getOwnPropertyNames(src) .map(prop => { const match = prop.match(API_IMPLEMENTATION_METHOD_RE); if (match) { return { srcProp: prop, apiProp: match[1], accessor: match[2], }; } return null; }) .filter(item => !!item); } exports.getDelegatedAPIList = getDelegatedAPIList; function delegateAPI(dest, apiList, opts) { apiList.forEach(({ srcProp, apiProp, accessor }) => { let fn = function (...args) { if (opts.proxyMethod) opts.proxyMethod(); let handler = null; if (opts.useCurrentCtxAsHandler) handler = this; else if (opts.getHandler) handler = opts.getHandler(apiProp, accessor); else handler = opts.handler; return handler[srcProp](...args); }; // NOTE: need to create named function to process possible err.stack correctly const createNamedFunction = new Function('srcProp', 'apiProp', 'accessor', 'opts', ` return ${fn.toString().replace('function', 'function ' + apiProp)} `); fn = createNamedFunction(srcProp, apiProp, accessor, opts); if (accessor === 'getter') Object.defineProperty(dest, apiProp, { get: fn, configurable: true }); else if (accessor === 'setter') Object.defineProperty(dest, apiProp, { set: fn, configurable: true }); else { // NOTE: need to create `property` but not a `function` to stop on `debugger` // before the action is called Object.defineProperty(dest, apiProp, { get() { const testController = getTestController(this); if (testController && testController.shouldStop(apiProp)) { // eslint-disable-next-line no-debugger debugger; } return fn; }, configurable: true, }); } }); } exports.delegateAPI = delegateAPI; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVsZWdhdGVkLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9kZWxlZ2F0ZWQtYXBpLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLE1BQU0sNEJBQTRCLEdBQUcsNEJBQTRCLENBQUM7QUFFbEUsU0FBUyxnQkFBZ0IsQ0FBRSxHQUFHOztJQUMxQixPQUFPLENBQUEsTUFBQSxHQUFHLGFBQUgsR0FBRyx1QkFBSCxHQUFHLENBQUUsV0FBVywwQ0FBRSxJQUFJLE1BQUssZ0JBQWdCLENBQUM7QUFDdkQsQ0FBQztBQUVELFNBQVMsaUJBQWlCLENBQUUsR0FBRztJQUMzQixJQUFJLGdCQUFnQixDQUFDLEdBQUcsQ0FBQztRQUNyQixPQUFPLEdBQUcsQ0FBQztTQUVWLElBQUksZ0JBQWdCLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQztRQUMxQyxPQUFPLEdBQUcsQ0FBQyxlQUFlLENBQUM7SUFFL0IsT0FBTyxJQUFJLENBQUM7QUFDaEIsQ0FBQztBQUVELFNBQWdCLG1CQUFtQixDQUFFLEdBQUc7SUFDcEMsT0FBTyxNQUFNO1NBQ1IsbUJBQW1CLENBQUMsR0FBRyxDQUFDO1NBQ3hCLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRTtRQUNSLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsNEJBQTRCLENBQUMsQ0FBQztRQUV2RCxJQUFJLEtBQUssRUFBRTtZQUNQLE9BQU87Z0JBQ0gsT0FBTyxFQUFHLElBQUk7Z0JBQ2QsT0FBTyxFQUFHLEtBQUssQ0FBQyxDQUFDLENBQUM7Z0JBQ2xCLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO2FBQ3JCLENBQUM7U0FDTDtRQUVELE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUMsQ0FBQztTQUNELE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNoQyxDQUFDO0FBakJELGtEQWlCQztBQUVELFNBQWdCLFdBQVcsQ0FBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLElBQUk7SUFDNUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFO1FBQy9DLElBQUksRUFBRSxHQUFHLFVBQVUsR0FBRyxJQUFJO1lBQ3RCLElBQUksSUFBSSxDQUFDLFdBQVc7Z0JBQ2hCLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUV2QixJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUM7WUFFbkIsSUFBSSxJQUFJLENBQUMsc0JBQXNCO2dCQUMzQixPQUFPLEdBQUcsSUFBSSxDQUFDO2lCQUVkLElBQUksSUFBSSxDQUFDLFVBQVU7Z0JBQ3BCLE9BQU8sR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUMsQ0FBQzs7Z0JBRzdDLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDO1lBRTNCLE9BQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUM7UUFDckMsQ0FBQyxDQUFDO1FBRUYsOEVBQThFO1FBQzlFLE1BQU0sbUJBQW1CLEdBQUcsSUFBSSxRQUFRLENBQUMsU0FBUyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFO3FCQUN0RSxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxXQUFXLEdBQUcsT0FBTyxDQUFDO1NBQ3BFLENBQUMsQ0FBQztRQUVILEVBQUUsR0FBRyxtQkFBbUIsQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUUzRCxJQUFJLFFBQVEsS0FBSyxRQUFRO1lBQ3JCLE1BQU0sQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7YUFFckUsSUFBSSxRQUFRLEtBQUssUUFBUTtZQUMxQixNQUFNLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO2FBRXJFO1lBQ0QsNkVBQTZFO1lBQzdFLDhCQUE4QjtZQUM5QixNQUFNLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUU7Z0JBQ2pDLEdBQUc7b0JBQ0MsTUFBTSxjQUFjLEdBQUcsaUJBQWlCLENBQUMsSUFBSSxDQUFDLENBQUM7b0JBRS9DLElBQUksY0FBYyxJQUFJLGNBQWMsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLEVBQUU7d0JBQ3RELHVDQUF1Qzt3QkFDdkMsUUFBUSxDQUFDO3FCQUNaO29CQUVELE9BQU8sRUFBRSxDQUFDO2dCQUNkLENBQUM7Z0JBQ0QsWUFBWSxFQUFFLElBQUk7YUFDckIsQ0FBQyxDQUFDO1NBQ047SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNQLENBQUM7QUFuREQsa0NBbURDIiwic291cmNlc0NvbnRlbnQiOlsiY29uc3QgQVBJX0lNUExFTUVOVEFUSU9OX01FVEhPRF9SRSA9IC9eXyhcXFMrKVxcJChnZXR0ZXJ8c2V0dGVyKT8kLztcblxuZnVuY3Rpb24gaXNUZXN0Q29udHJvbGxlciAob2JqKSB7XG4gICAgcmV0dXJuIG9iaj8uY29uc3RydWN0b3I/Lm5hbWUgPT09ICdUZXN0Q29udHJvbGxlcic7XG59XG5cbmZ1bmN0aW9uIGdldFRlc3RDb250cm9sbGVyIChvYmopIHtcbiAgICBpZiAoaXNUZXN0Q29udHJvbGxlcihvYmopKVxuICAgICAgICByZXR1cm4gb2JqO1xuXG4gICAgZWxzZSBpZiAoaXNUZXN0Q29udHJvbGxlcihvYmouX3Rlc3RDb250cm9sbGVyKSlcbiAgICAgICAgcmV0dXJuIG9iai5fdGVzdENvbnRyb2xsZXI7XG5cbiAgICByZXR1cm4gbnVsbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldERlbGVnYXRlZEFQSUxpc3QgKHNyYykge1xuICAgIHJldHVybiBPYmplY3RcbiAgICAgICAgLmdldE93blByb3BlcnR5TmFtZXMoc3JjKVxuICAgICAgICAubWFwKHByb3AgPT4ge1xuICAgICAgICAgICAgY29uc3QgbWF0Y2ggPSBwcm9wLm1hdGNoKEFQSV9JTVBMRU1FTlRBVElPTl9NRVRIT0RfUkUpO1xuXG4gICAgICAgICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICBzcmNQcm9wOiAgcHJvcCxcbiAgICAgICAgICAgICAgICAgICAgYXBpUHJvcDogIG1hdGNoWzFdLFxuICAgICAgICAgICAgICAgICAgICBhY2Nlc3NvcjogbWF0Y2hbMl0sXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH0pXG4gICAgICAgIC5maWx0ZXIoaXRlbSA9PiAhIWl0ZW0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVsZWdhdGVBUEkgKGRlc3QsIGFwaUxpc3QsIG9wdHMpIHtcbiAgICBhcGlMaXN0LmZvckVhY2goKHsgc3JjUHJvcCwgYXBpUHJvcCwgYWNjZXNzb3IgfSkgPT4ge1xuICAgICAgICBsZXQgZm4gPSBmdW5jdGlvbiAoLi4uYXJncykge1xuICAgICAgICAgICAgaWYgKG9wdHMucHJveHlNZXRob2QpXG4gICAgICAgICAgICAgICAgb3B0cy5wcm94eU1ldGhvZCgpO1xuXG4gICAgICAgICAgICBsZXQgaGFuZGxlciA9IG51bGw7XG5cbiAgICAgICAgICAgIGlmIChvcHRzLnVzZUN1cnJlbnRDdHhBc0hhbmRsZXIpXG4gICAgICAgICAgICAgICAgaGFuZGxlciA9IHRoaXM7XG5cbiAgICAgICAgICAgIGVsc2UgaWYgKG9wdHMuZ2V0SGFuZGxlcilcbiAgICAgICAgICAgICAgICBoYW5kbGVyID0gb3B0cy5nZXRIYW5kbGVyKGFwaVByb3AsIGFjY2Vzc29yKTtcblxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIGhhbmRsZXIgPSBvcHRzLmhhbmRsZXI7XG5cbiAgICAgICAgICAgIHJldHVybiBoYW5kbGVyW3NyY1Byb3BdKC4uLmFyZ3MpO1xuICAgICAgICB9O1xuXG4gICAgICAgIC8vIE5PVEU6IG5lZWQgdG8gY3JlYXRlIG5hbWVkIGZ1bmN0aW9uIHRvIHByb2Nlc3MgcG9zc2libGUgZXJyLnN0YWNrIGNvcnJlY3RseVxuICAgICAgICBjb25zdCBjcmVhdGVOYW1lZEZ1bmN0aW9uID0gbmV3IEZ1bmN0aW9uKCdzcmNQcm9wJywgJ2FwaVByb3AnLCAnYWNjZXNzb3InLCAnb3B0cycsIGBcbiAgICAgICAgICAgIHJldHVybiAke2ZuLnRvU3RyaW5nKCkucmVwbGFjZSgnZnVuY3Rpb24nLCAnZnVuY3Rpb24gJyArIGFwaVByb3ApfVxuICAgICAgICBgKTtcblxuICAgICAgICBmbiA9IGNyZWF0ZU5hbWVkRnVuY3Rpb24oc3JjUHJvcCwgYXBpUHJvcCwgYWNjZXNzb3IsIG9wdHMpO1xuXG4gICAgICAgIGlmIChhY2Nlc3NvciA9PT0gJ2dldHRlcicpXG4gICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZGVzdCwgYXBpUHJvcCwgeyBnZXQ6IGZuLCBjb25maWd1cmFibGU6IHRydWUgfSk7XG5cbiAgICAgICAgZWxzZSBpZiAoYWNjZXNzb3IgPT09ICdzZXR0ZXInKVxuICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGRlc3QsIGFwaVByb3AsIHsgc2V0OiBmbiwgY29uZmlndXJhYmxlOiB0cnVlIH0pO1xuXG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy8gTk9URTogbmVlZCB0byBjcmVhdGUgYHByb3BlcnR5YCBidXQgbm90IGEgYGZ1bmN0aW9uYCB0byBzdG9wIG9uIGBkZWJ1Z2dlcmBcbiAgICAgICAgICAgIC8vIGJlZm9yZSB0aGUgYWN0aW9uIGlzIGNhbGxlZFxuICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGRlc3QsIGFwaVByb3AsIHtcbiAgICAgICAgICAgICAgICBnZXQgKCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB0ZXN0Q29udHJvbGxlciA9IGdldFRlc3RDb250cm9sbGVyKHRoaXMpO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmICh0ZXN0Q29udHJvbGxlciAmJiB0ZXN0Q29udHJvbGxlci5zaG91bGRTdG9wKGFwaVByb3ApKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZGVidWdnZXJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnZ2VyO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZuO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9KTtcbn1cbiJdfQ==