UNPKG

@data-client/endpoint

Version:

Declarative Network Interface Definitions

92 lines (88 loc) 11.1 kB
var _Endpoint; import { CSP } from './CSP.js'; /** * Defines an async data source. * @see https://dataclient.io/docs/api/Endpoint */ export default class Endpoint extends Function { constructor(fetchFunction, options) { let self; if (CSP) { self = (...args) => self.fetch(...args); Object.setPrototypeOf(self, new.target.prototype); } else { super('return arguments.callee.fetch.apply(arguments.callee, arguments)'); self = this; } if (fetchFunction) self.fetch = fetchFunction; /** Name propery block * * To make things callable, we force every instance to be constructed as a function * Because of this the name property will be autoset * To create a usable naming inheritance pattern, we use __name as a proxy. * Every instance then overrides the name property. * * For protocol specific extensions that wish to customize default naming * behavior, be sure to add your own `Object.defineProperty(self, 'name'` * in your constructor to override this one. */ let autoName; if (!(options && 'name' in options) && fetchFunction && fetchFunction.name && fetchFunction.name !== 'anonymous') { autoName = fetchFunction.name; } Object.defineProperty(self, 'name', { get() { if (/* istanbul ignore else */process.env.NODE_ENV !== 'production' && self.key === Endpoint.prototype.key && !(autoName || this.__name)) { console.error('Endpoint: Autonaming failure.\n\nEndpoint initialized with anonymous function.\nPlease add `name` option or hoist the function definition. https://dataclient.io/rest/api/Endpoint#name'); } return autoName || this.__name; }, set(v) { this.__name = v; } }); /** End name property block */ Object.assign(self, options); return self; } key(...args) { return `${this.name} ${JSON.stringify(args)}`; } testKey(key) { return key.startsWith(this.name); } bind(thisArg, ...args) { const fetchFunc = this.fetch; const keyFunc = this.key; return this.extend({ fetch() { return fetchFunc.apply(thisArg != null ? thisArg : this, args); }, key() { return keyFunc.apply(this, args); } }); } extend(options) { // make a constructor/prototype based off this // extend from it and init with options sent class E extends this.constructor {} Object.assign(E.prototype, this); return new E(options.fetch, options); } /* istanbul ignore next */ } _Endpoint = Endpoint; (() => { /* istanbul ignore if */ if (typeof document !== 'undefined' && document.FUNC_MANGLE) { const baseKey = _Endpoint.prototype.key; _Endpoint.prototype.key = function (...args) { document.FUNC_MANGLE == null || document.FUNC_MANGLE(this); this.prototype.key = baseKey; return baseKey.call(this, ...args); }; } })(); export const ExtendableEndpoint = Endpoint; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJDU1AiLCJFbmRwb2ludCIsIkZ1bmN0aW9uIiwiY29uc3RydWN0b3IiLCJmZXRjaEZ1bmN0aW9uIiwib3B0aW9ucyIsInNlbGYiLCJhcmdzIiwiZmV0Y2giLCJPYmplY3QiLCJzZXRQcm90b3R5cGVPZiIsIm5ldyIsInRhcmdldCIsInByb3RvdHlwZSIsImF1dG9OYW1lIiwibmFtZSIsImRlZmluZVByb3BlcnR5IiwiZ2V0IiwicHJvY2VzcyIsImVudiIsIk5PREVfRU5WIiwia2V5IiwiX19uYW1lIiwiY29uc29sZSIsImVycm9yIiwic2V0IiwidiIsImFzc2lnbiIsIkpTT04iLCJzdHJpbmdpZnkiLCJ0ZXN0S2V5Iiwic3RhcnRzV2l0aCIsImJpbmQiLCJ0aGlzQXJnIiwiZmV0Y2hGdW5jIiwia2V5RnVuYyIsImV4dGVuZCIsImFwcGx5IiwiRSIsIl9FbmRwb2ludCIsImRvY3VtZW50IiwiRlVOQ19NQU5HTEUiLCJiYXNlS2V5IiwiY2FsbCIsIkV4dGVuZGFibGVFbmRwb2ludCJdLCJzb3VyY2VzIjpbIi4uL3NyYy9lbmRwb2ludC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDU1AgfSBmcm9tICcuL0NTUC5qcyc7XG5cbi8qKlxuICogRGVmaW5lcyBhbiBhc3luYyBkYXRhIHNvdXJjZS5cbiAqIEBzZWUgaHR0cHM6Ly9kYXRhY2xpZW50LmlvL2RvY3MvYXBpL0VuZHBvaW50XG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVuZHBvaW50IGV4dGVuZHMgRnVuY3Rpb24ge1xuICBjb25zdHJ1Y3RvcihmZXRjaEZ1bmN0aW9uLCBvcHRpb25zKSB7XG4gICAgbGV0IHNlbGY7XG4gICAgaWYgKENTUCkge1xuICAgICAgc2VsZiA9ICguLi5hcmdzKSA9PiBzZWxmLmZldGNoKC4uLmFyZ3MpO1xuICAgICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKHNlbGYsIG5ldy50YXJnZXQucHJvdG90eXBlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3VwZXIoJ3JldHVybiBhcmd1bWVudHMuY2FsbGVlLmZldGNoLmFwcGx5KGFyZ3VtZW50cy5jYWxsZWUsIGFyZ3VtZW50cyknKTtcbiAgICAgIHNlbGYgPSB0aGlzO1xuICAgIH1cblxuICAgIGlmIChmZXRjaEZ1bmN0aW9uKSBzZWxmLmZldGNoID0gZmV0Y2hGdW5jdGlvbjtcblxuICAgIC8qKiBOYW1lIHByb3BlcnkgYmxvY2tcbiAgICAgKlxuICAgICAqIFRvIG1ha2UgdGhpbmdzIGNhbGxhYmxlLCB3ZSBmb3JjZSBldmVyeSBpbnN0YW5jZSB0byBiZSBjb25zdHJ1Y3RlZCBhcyBhIGZ1bmN0aW9uXG4gICAgICogQmVjYXVzZSBvZiB0aGlzIHRoZSBuYW1lIHByb3BlcnR5IHdpbGwgYmUgYXV0b3NldFxuICAgICAqIFRvIGNyZWF0ZSBhIHVzYWJsZSBuYW1pbmcgaW5oZXJpdGFuY2UgcGF0dGVybiwgd2UgdXNlIF9fbmFtZSBhcyBhIHByb3h5LlxuICAgICAqIEV2ZXJ5IGluc3RhbmNlIHRoZW4gb3ZlcnJpZGVzIHRoZSBuYW1lIHByb3BlcnR5LlxuICAgICAqXG4gICAgICogRm9yIHByb3RvY29sIHNwZWNpZmljIGV4dGVuc2lvbnMgdGhhdCB3aXNoIHRvIGN1c3RvbWl6ZSBkZWZhdWx0IG5hbWluZ1xuICAgICAqIGJlaGF2aW9yLCBiZSBzdXJlIHRvIGFkZCB5b3VyIG93biBgT2JqZWN0LmRlZmluZVByb3BlcnR5KHNlbGYsICduYW1lJ2BcbiAgICAgKiBpbiB5b3VyIGNvbnN0cnVjdG9yIHRvIG92ZXJyaWRlIHRoaXMgb25lLlxuICAgICAqL1xuICAgIGxldCBhdXRvTmFtZTtcbiAgICBpZiAoXG4gICAgICAhKG9wdGlvbnMgJiYgJ25hbWUnIGluIG9wdGlvbnMpICYmXG4gICAgICBmZXRjaEZ1bmN0aW9uICYmXG4gICAgICBmZXRjaEZ1bmN0aW9uLm5hbWUgJiZcbiAgICAgIGZldGNoRnVuY3Rpb24ubmFtZSAhPT0gJ2Fub255bW91cydcbiAgICApIHtcbiAgICAgIGF1dG9OYW1lID0gZmV0Y2hGdW5jdGlvbi5uYW1lO1xuICAgIH1cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoc2VsZiwgJ25hbWUnLCB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqLyBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmXG4gICAgICAgICAgc2VsZi5rZXkgPT09IEVuZHBvaW50LnByb3RvdHlwZS5rZXkgJiZcbiAgICAgICAgICAhKGF1dG9OYW1lIHx8IHRoaXMuX19uYW1lKVxuICAgICAgICApIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgJ0VuZHBvaW50OiBBdXRvbmFtaW5nIGZhaWx1cmUuXFxuXFxuRW5kcG9pbnQgaW5pdGlhbGl6ZWQgd2l0aCBhbm9ueW1vdXMgZnVuY3Rpb24uXFxuUGxlYXNlIGFkZCBgbmFtZWAgb3B0aW9uIG9yIGhvaXN0IHRoZSBmdW5jdGlvbiBkZWZpbml0aW9uLiBodHRwczovL2RhdGFjbGllbnQuaW8vcmVzdC9hcGkvRW5kcG9pbnQjbmFtZScsXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXV0b05hbWUgfHwgdGhpcy5fX25hbWU7XG4gICAgICB9LFxuICAgICAgc2V0KHYpIHtcbiAgICAgICAgdGhpcy5fX25hbWUgPSB2O1xuICAgICAgfSxcbiAgICB9KTtcbiAgICAvKiogRW5kIG5hbWUgcHJvcGVydHkgYmxvY2sgKi9cblxuICAgIE9iamVjdC5hc3NpZ24oc2VsZiwgb3B0aW9ucyk7XG4gICAgcmV0dXJuIHNlbGY7XG4gIH1cblxuICBrZXkoLi4uYXJncykge1xuICAgIHJldHVybiBgJHt0aGlzLm5hbWV9ICR7SlNPTi5zdHJpbmdpZnkoYXJncyl9YDtcbiAgfVxuXG4gIHRlc3RLZXkoa2V5KSB7XG4gICAgcmV0dXJuIGtleS5zdGFydHNXaXRoKHRoaXMubmFtZSk7XG4gIH1cblxuICBiaW5kKHRoaXNBcmcsIC4uLmFyZ3MpIHtcbiAgICBjb25zdCBmZXRjaEZ1bmMgPSB0aGlzLmZldGNoO1xuICAgIGNvbnN0IGtleUZ1bmMgPSB0aGlzLmtleTtcbiAgICByZXR1cm4gdGhpcy5leHRlbmQoe1xuICAgICAgZmV0Y2goKSB7XG4gICAgICAgIHJldHVybiBmZXRjaEZ1bmMuYXBwbHkodGhpc0FyZyA/PyB0aGlzLCBhcmdzKTtcbiAgICAgIH0sXG4gICAgICBrZXkoKSB7XG4gICAgICAgIHJldHVybiBrZXlGdW5jLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIGV4dGVuZChvcHRpb25zKSB7XG4gICAgLy8gbWFrZSBhIGNvbnN0cnVjdG9yL3Byb3RvdHlwZSBiYXNlZCBvZmYgdGhpc1xuICAgIC8vIGV4dGVuZCBmcm9tIGl0IGFuZCBpbml0IHdpdGggb3B0aW9ucyBzZW50XG4gICAgY2xhc3MgRSBleHRlbmRzIHRoaXMuY29uc3RydWN0b3Ige31cblxuICAgIE9iamVjdC5hc3NpZ24oRS5wcm90b3R5cGUsIHRoaXMpO1xuXG4gICAgcmV0dXJuIG5ldyBFKG9wdGlvbnMuZmV0Y2gsIG9wdGlvbnMpO1xuICB9XG5cbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgc3RhdGljIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICBpZiAodHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJyAmJiBkb2N1bWVudC5GVU5DX01BTkdMRSkge1xuICAgICAgY29uc3QgYmFzZUtleSA9IHRoaXMucHJvdG90eXBlLmtleTtcbiAgICAgIHRoaXMucHJvdG90eXBlLmtleSA9IGZ1bmN0aW9uICguLi5hcmdzKSB7XG4gICAgICAgIGRvY3VtZW50LkZVTkNfTUFOR0xFPy4odGhpcyk7XG4gICAgICAgIHRoaXMucHJvdG90eXBlLmtleSA9IGJhc2VLZXk7XG4gICAgICAgIHJldHVybiBiYXNlS2V5LmNhbGwodGhpcywgLi4uYXJncyk7XG4gICAgICB9O1xuICAgIH1cbiAgfVxufVxuZXhw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