UNPKG

5.39 kBJavaScriptView Raw
1"use strict";
2Object.defineProperty(exports, "__esModule", { value: true });
3const API_IMPLEMENTATION_METHOD_RE = /^_(\S+)\$(getter|setter)?$/;
4function getDelegatedAPIList(src) {
5 return Object
6 .getOwnPropertyNames(src)
7 .map(prop => {
8 const match = prop.match(API_IMPLEMENTATION_METHOD_RE);
9 if (match) {
10 return {
11 srcProp: prop,
12 apiProp: match[1],
13 accessor: match[2]
14 };
15 }
16 return null;
17 })
18 .filter(item => !!item);
19}
20exports.getDelegatedAPIList = getDelegatedAPIList;
21function delegateAPI(dest, apiList, opts) {
22 apiList.forEach(({ srcProp, apiProp, accessor }) => {
23 const fn = function (...args) {
24 if (opts.proxyMethod)
25 opts.proxyMethod();
26 let handler = null;
27 if (opts.useCurrentCtxAsHandler)
28 handler = this;
29 else if (opts.getHandler)
30 handler = opts.getHandler(apiProp, accessor);
31 else
32 handler = opts.handler;
33 return handler[srcProp](...args);
34 };
35 if (accessor === 'getter')
36 Object.defineProperty(dest, apiProp, { get: fn, configurable: true });
37 else if (accessor === 'setter')
38 Object.defineProperty(dest, apiProp, { set: fn, configurable: true });
39 else
40 dest[apiProp] = fn;
41 });
42}
43exports.delegateAPI = delegateAPI;
44//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVsZWdhdGVkLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9kZWxlZ2F0ZWQtYXBpLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsTUFBTSw0QkFBNEIsR0FBRyw0QkFBNEIsQ0FBQztBQUVsRSxTQUFnQixtQkFBbUIsQ0FBRSxHQUFHO0lBQ3BDLE9BQU8sTUFBTTtTQUNSLG1CQUFtQixDQUFDLEdBQUcsQ0FBQztTQUN4QixHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUU7UUFDUixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLDRCQUE0QixDQUFDLENBQUM7UUFFdkQsSUFBSSxLQUFLLEVBQUU7WUFDUCxPQUFPO2dCQUNILE9BQU8sRUFBRyxJQUFJO2dCQUNkLE9BQU8sRUFBRyxLQUFLLENBQUMsQ0FBQyxDQUFDO2dCQUNsQixRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQzthQUNyQixDQUFDO1NBQ0w7UUFFRCxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDLENBQUM7U0FDRCxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDaEMsQ0FBQztBQWpCRCxrREFpQkM7QUFFRCxTQUFnQixXQUFXLENBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxJQUFJO0lBQzVDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRTtRQUMvQyxNQUFNLEVBQUUsR0FBRyxVQUFVLEdBQUcsSUFBSTtZQUN4QixJQUFJLElBQUksQ0FBQyxXQUFXO2dCQUNoQixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFFdkIsSUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDO1lBRW5CLElBQUksSUFBSSxDQUFDLHNCQUFzQjtnQkFDM0IsT0FBTyxHQUFHLElBQUksQ0FBQztpQkFFZCxJQUFJLElBQUksQ0FBQyxVQUFVO2dCQUNwQixPQUFPLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDLENBQUM7O2dCQUc3QyxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQztZQUUzQixPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDO1FBQ3JDLENBQUMsQ0FBQztRQUVGLElBQUksUUFBUSxLQUFLLFFBQVE7WUFDckIsTUFBTSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxZQUFZLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQzthQUVyRSxJQUFJLFFBQVEsS0FBSyxRQUFRO1lBQzFCLE1BQU0sQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7O1lBR3RFLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUM7SUFDM0IsQ0FBQyxDQUFDLENBQUM7QUFDUCxDQUFDO0FBN0JELGtDQTZCQyIsInNvdXJjZXNDb250ZW50IjpbImNvbnN0IEFQSV9JTVBMRU1FTlRBVElPTl9NRVRIT0RfUkUgPSAvXl8oXFxTKylcXCQoZ2V0dGVyfHNldHRlcik/JC87XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXREZWxlZ2F0ZWRBUElMaXN0IChzcmMpIHtcbiAgICByZXR1cm4gT2JqZWN0XG4gICAgICAgIC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHNyYylcbiAgICAgICAgLm1hcChwcm9wID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG1hdGNoID0gcHJvcC5tYXRjaChBUElfSU1QTEVNRU5UQVRJT05fTUVUSE9EX1JFKTtcblxuICAgICAgICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgc3JjUHJvcDogIHByb3AsXG4gICAgICAgICAgICAgICAgICAgIGFwaVByb3A6ICBtYXRjaFsxXSxcbiAgICAgICAgICAgICAgICAgICAgYWNjZXNzb3I6IG1hdGNoWzJdXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH0pXG4gICAgICAgIC5maWx0ZXIoaXRlbSA9PiAhIWl0ZW0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVsZWdhdGVBUEkgKGRlc3QsIGFwaUxpc3QsIG9wdHMpIHtcbiAgICBhcGlMaXN0LmZvckVhY2goKHsgc3JjUHJvcCwgYXBpUHJvcCwgYWNjZXNzb3IgfSkgPT4ge1xuICAgICAgICBjb25zdCBmbiA9IGZ1bmN0aW9uICguLi5hcmdzKSB7XG4gICAgICAgICAgICBpZiAob3B0cy5wcm94eU1ldGhvZClcbiAgICAgICAgICAgICAgICBvcHRzLnByb3h5TWV0aG9kKCk7XG5cbiAgICAgICAgICAgIGxldCBoYW5kbGVyID0gbnVsbDtcblxuICAgICAgICAgICAgaWYgKG9wdHMudXNlQ3VycmVudEN0eEFzSGFuZGxlcilcbiAgICAgICAgICAgICAgICBoYW5kbGVyID0gdGhpcztcblxuICAgICAgICAgICAgZWxzZSBpZiAob3B0cy5nZXRIYW5kbGVyKVxuICAgICAgICAgICAgICAgIGhhbmRsZXIgPSBvcHRzLmdldEhhbmRsZXIoYXBpUHJvcCwgYWNjZXNzb3IpO1xuXG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgaGFuZGxlciA9IG9wdHMuaGFuZGxlcjtcblxuICAgICAgICAgICAgcmV0dXJuIGhhbmRsZXJbc3JjUHJvcF0oLi4uYXJncyk7XG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKGFjY2Vzc29yID09PSAnZ2V0dGVyJylcbiAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShkZXN0LCBhcGlQcm9wLCB7IGdldDogZm4sIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9KTtcblxuICAgICAgICBlbHNlIGlmIChhY2Nlc3NvciA9PT0gJ3NldHRlcicpXG4gICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZGVzdCwgYXBpUHJvcCwgeyBzZXQ6IGZuLCBjb25maWd1cmFibGU6IHRydWUgfSk7XG5cbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgZGVzdFthcGlQcm9wXSA9IGZuO1xuICAgIH0pO1xufVxuIl19
\No newline at end of file