New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

@rest-hooks/endpoint

Package Overview
Dependencies
Maintainers
1
Versions
120
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@rest-hooks/endpoint - npm Package Compare versions

Comparing version 0.5.3 to 0.6.0

9

CHANGELOG.md

@@ -6,2 +6,11 @@ # Change Log

## 0.6.0 (2020-08-08)
* internal: Test using endpoints directly (#389) ([bb0e8fd](https://github.com/coinbase/rest-hooks/commit/bb0e8fd)), closes [#389](https://github.com/coinbase/rest-hooks/issues/389)
* feat: Support extra endpoint members and inheritance (#387) ([6ad5486](https://github.com/coinbase/rest-hooks/commit/6ad5486)), closes [#387](https://github.com/coinbase/rest-hooks/issues/387)
## <small>0.5.3 (2020-08-04)</small>

@@ -8,0 +17,0 @@

69

dist/index.cjs.js

@@ -105,2 +105,19 @@ 'use strict';

function runCompat(endpoint, options) {
endpoint.type = endpoint.sideEffect ? 'mutate' : 'read';
endpoint.options = Object.assign({}, options);
delete endpoint.options.key;
delete endpoint.options.schema;
delete endpoint.options.sideEffect;
delete endpoint.options.fetch;
delete endpoint.options.getFetchKey;
delete endpoint.options.options;
if (Object.keys(endpoint.options).length === 0) {
delete endpoint.options;
}
if (endpoint.schema === undefined) endpoint.schema = null;
}
var Endpoint = /*#__PURE__*/function (_Function) {

@@ -113,3 +130,2 @@ _inheritsLoose(Endpoint, _Function);

_this = _Function.call(this, 'return arguments.callee.fetch.apply(arguments.callee, arguments)') || this;
_this.schema = null;

@@ -120,16 +136,7 @@ _this.getFetchKey = function (params) {

_this.fetch = fetchFunction;
if (fetchFunction) _this.fetch = fetchFunction;
Object.assign(_assertThisInitialized(_this), options);
/** The following is for compatibility with FetchShape */
_this.type = _this.sideEffect ? 'mutate' : 'read';
_this.options = Object.assign({}, options);
delete _this.options.key;
delete _this.options.schema;
delete _this.options.sideEffect;
if (Object.keys(_this.options).length === 0) {
delete _this.options;
}
runCompat(_assertThisInitialized(_this), options);
return _this;

@@ -145,16 +152,20 @@ }

_proto.extend = function extend(options) {
var _options$fetch;
// make a constructor/prototype based off this
// extend from it and init with options sent
var E = /*#__PURE__*/function (_this$constructor) {
_inheritsLoose(E, _this$constructor);
function E() {
return _this$constructor.apply(this, arguments) || this;
}
return E;
}(this.constructor);
Object.assign(E.prototype, this);
var instance = new E(options.fetch, options);
/** The following is for compatibility with FetchShape */
var optionsCopy = Object.assign({}, options);
delete optionsCopy.key;
delete optionsCopy.schema;
delete optionsCopy.sideEffect;
var optionsToPass = Object.assign({}, this, options, {
/** The following is for compatibility with FetchShape */
options: Object.assign({}, this.options, {
optionsCopy: optionsCopy
})
});
return new this.constructor((_options$fetch = options.fetch) != null ? _options$fetch : this.fetch, optionsToPass);
runCompat(instance, Object.assign({}, this, options));
return instance;
}

@@ -169,2 +180,8 @@ /** The following is for compatibility with FetchShape */

function Index(schema, key) {
var _this = this;
this.getFetchKey = function (params) {
return _this.key(params);
};
this.schema = schema;

@@ -178,3 +195,5 @@ if (key) this.key = key;

return JSON.stringify(params);
};
}
/** The following is for compatibility with FetchShape */
;

@@ -181,0 +200,0 @@ return Index;

@@ -1,1 +0,1 @@

!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("@rest-hooks/normalizr")):"function"==typeof define&&define.amd?define(["exports","@rest-hooks/normalizr"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).restHookCore={},e.normalizr)}(this,(function(e,t){"use strict";function n(e){return(n=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function r(e,t){return(r=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}function o(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(e){return!1}}function i(e,t,n){return(i=o()?Reflect.construct:function(e,t,n){var o=[null];o.push.apply(o,t);var i=new(Function.bind.apply(e,o));return n&&r(i,n.prototype),i}).apply(null,arguments)}function c(e){var t="function"==typeof Map?new Map:void 0;return(c=function(e){if(null===e||(o=e,-1===Function.toString.call(o).indexOf("[native code]")))return e;var o;if("function"!=typeof e)throw new TypeError("Super expression must either be null or a function");if(void 0!==t){if(t.has(e))return t.get(e);t.set(e,c)}function c(){return i(e,arguments,n(this).constructor)}return c.prototype=Object.create(e.prototype,{constructor:{value:c,enumerable:!1,writable:!0,configurable:!0}}),r(c,e)})(e)}var u=function(e){var t,n;function r(t,n){var r;return(r=e.call(this,"return arguments.callee.fetch.apply(arguments.callee, arguments)")||this).schema=null,r.getFetchKey=function(e){return r.key(e)},r.fetch=t,Object.assign(function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(r),n),r.type=r.sideEffect?"mutate":"read",r.options=Object.assign({},n),delete r.options.key,delete r.options.schema,delete r.options.sideEffect,0===Object.keys(r.options).length&&delete r.options,r}n=e,(t=r).prototype=Object.create(n.prototype),t.prototype.constructor=t,t.__proto__=n;var o=r.prototype;return o.key=function(e){return this.fetch.name+" "+JSON.stringify(e)},o.extend=function(e){var t,n=Object.assign({},e);delete n.key,delete n.schema,delete n.sideEffect;var r=Object.assign({},this,e,{options:Object.assign({},this.options,{optionsCopy:n})});return new this.constructor(null!=(t=e.fetch)?t:this.fetch,r)},r}(c(Function)),f=function(){function e(e,t){this.schema=e,t&&(this.key=t)}return e.prototype.key=function(e){return JSON.stringify(e)},e}();Object.defineProperty(e,"AbstractInstanceType",{enumerable:!0,get:function(){return t.AbstractInstanceType}}),Object.defineProperty(e,"DELETED",{enumerable:!0,get:function(){return t.DELETED}}),Object.defineProperty(e,"Entity",{enumerable:!0,get:function(){return t.Entity}}),Object.defineProperty(e,"Schema",{enumerable:!0,get:function(){return t.Schema}}),Object.defineProperty(e,"SimpleRecord",{enumerable:!0,get:function(){return t.SimpleRecord}}),Object.defineProperty(e,"denormalize",{enumerable:!0,get:function(){return t.denormalize}}),Object.defineProperty(e,"isEntity",{enumerable:!0,get:function(){return t.isEntity}}),Object.defineProperty(e,"normalize",{enumerable:!0,get:function(){return t.normalize}}),Object.defineProperty(e,"schema",{enumerable:!0,get:function(){return t.schema}}),e.Endpoint=u,e.Index=f,Object.defineProperty(e,"__esModule",{value:!0})}));
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("@rest-hooks/normalizr")):"function"==typeof define&&define.amd?define(["exports","@rest-hooks/normalizr"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).restHookCore={},e.normalizr)}(this,(function(e,t){"use strict";function n(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function r(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,e.__proto__=t}function o(e){return(o=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function i(e,t){return(i=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}function c(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(e){return!1}}function u(e,t,n){return(u=c()?Reflect.construct:function(e,t,n){var r=[null];r.push.apply(r,t);var o=new(Function.bind.apply(e,r));return n&&i(o,n.prototype),o}).apply(null,arguments)}function f(e){var t="function"==typeof Map?new Map:void 0;return(f=function(e){if(null===e||(n=e,-1===Function.toString.call(n).indexOf("[native code]")))return e;var n;if("function"!=typeof e)throw new TypeError("Super expression must either be null or a function");if(void 0!==t){if(t.has(e))return t.get(e);t.set(e,r)}function r(){return u(e,arguments,o(this).constructor)}return r.prototype=Object.create(e.prototype,{constructor:{value:r,enumerable:!1,writable:!0,configurable:!0}}),i(r,e)})(e)}function s(e,t){e.type=e.sideEffect?"mutate":"read",e.options=Object.assign({},t),delete e.options.key,delete e.options.schema,delete e.options.sideEffect,delete e.options.fetch,delete e.options.getFetchKey,delete e.options.options,0===Object.keys(e.options).length&&delete e.options,void 0===e.schema&&(e.schema=null)}var a=function(e){function t(t,r){var o;return(o=e.call(this,"return arguments.callee.fetch.apply(arguments.callee, arguments)")||this).getFetchKey=function(e){return o.key(e)},t&&(o.fetch=t),Object.assign(n(o),r),s(n(o),r),o}r(t,e);var o=t.prototype;return o.key=function(e){return this.fetch.name+" "+JSON.stringify(e)},o.extend=function(e){var t=function(e){function t(){return e.apply(this,arguments)||this}return r(t,e),t}(this.constructor);Object.assign(t.prototype,this);var n=new t(e.fetch,e);return s(n,Object.assign({},this,e)),n},t}(f(Function)),p=function(){function e(e,t){var n=this;this.getFetchKey=function(e){return n.key(e)},this.schema=e,t&&(this.key=t)}return e.prototype.key=function(e){return JSON.stringify(e)},e}();Object.defineProperty(e,"AbstractInstanceType",{enumerable:!0,get:function(){return t.AbstractInstanceType}}),Object.defineProperty(e,"DELETED",{enumerable:!0,get:function(){return t.DELETED}}),Object.defineProperty(e,"Entity",{enumerable:!0,get:function(){return t.Entity}}),Object.defineProperty(e,"Schema",{enumerable:!0,get:function(){return t.Schema}}),Object.defineProperty(e,"SimpleRecord",{enumerable:!0,get:function(){return t.SimpleRecord}}),Object.defineProperty(e,"denormalize",{enumerable:!0,get:function(){return t.denormalize}}),Object.defineProperty(e,"isEntity",{enumerable:!0,get:function(){return t.isEntity}}),Object.defineProperty(e,"normalize",{enumerable:!0,get:function(){return t.normalize}}),Object.defineProperty(e,"schema",{enumerable:!0,get:function(){return t.schema}}),e.Endpoint=a,e.Index=p,Object.defineProperty(e,"__esModule",{value:!0})}));

@@ -9,4 +9,4 @@ /* eslint-disable @typescript-eslint/ban-types */

export interface EndpointOptions<
K extends (...args: any) => string,
S extends Schema | undefined = Schema | undefined,
K extends ((...args: any) => string) | undefined = undefined,
S extends Schema | undefined = undefined,
M extends true | undefined = undefined

@@ -17,8 +17,11 @@ > extends EndpointExtraOptions {

schema?: S;
[k: string]: any;
}
export interface EndpointExtendOptions<
K extends (...args: any) => string,
K extends ((...args: any) => string) | undefined =
| ((...args: any) => string)
| undefined,
S extends Schema | undefined = Schema | undefined,
M extends true | undefined = undefined
M extends true | undefined = true | undefined
> extends EndpointOptions<K, S, M> {

@@ -37,2 +40,4 @@ fetch?: FetchFunction;

export function Make(...args: any[]): EndpointInstance<FetchFunction>;
/**

@@ -42,3 +47,3 @@ * Creates a new function.

export interface EndpointInstance<
F extends FetchFunction,
F extends FetchFunction = FetchFunction,
S extends Schema | undefined = undefined,

@@ -88,3 +93,3 @@ M extends true | undefined = undefined

readonly sideEffect?: M;
readonly sideEffect: M;

@@ -97,29 +102,28 @@ readonly schema: S extends undefined ? schema.SchemaClass<ResolveType<F>> : S;

extend<
E extends EndpointInstance<any, S, any>,
O extends EndpointExtendOptions<K, any, any> &
Partial<ThisParameterType<E['fetch']>>,
K extends (
this: ThisParameterType<
'fetch' extends keyof O ? O['fetch'] : E['fetch']
>,
params: ParamFromFetch<'fetch' extends keyof O ? O['fetch'] : E['fetch']>,
) => string,
S
E extends EndpointInstance<
FetchFunction,
Schema | undefined,
true | undefined
>,
O extends EndpointExtendOptions<EndpointInstance<F>['key']> &
Partial<Omit<E, keyof EndpointInstance<FetchFunction>>>
>(
this: E,
options: O,
): EndpointInstance<
'fetch' extends keyof typeof options
? Exclude<typeof options['fetch'], undefined>
: E['fetch'],
'schema' extends keyof typeof options
? typeof options['schema']
: E['_schema'],
'sideEffect' extends keyof typeof options
? typeof options['sideEffect']
: E['sideEffect']
>;
): Omit<O, keyof EndpointInstance<FetchFunction>> &
Omit<E, keyof EndpointInstance<FetchFunction>> &
EndpointInstance<
'fetch' extends keyof typeof options
? Exclude<typeof options['fetch'], undefined>
: E['fetch'],
'schema' extends keyof typeof options
? typeof options['schema']
: E['_schema'],
'sideEffect' extends keyof typeof options
? typeof options['sideEffect']
: E['sideEffect']
>;
/** The following is for compatibility with FetchShape */
readonly type: M extends undefined ? 'read' : 'mutate';
readonly type: M extends true ? 'mutate' : 'read';
getFetchKey(params: Parameters<F>[0]): string;

@@ -131,19 +135,18 @@ options?: EndpointExtraOptions;

new <
F extends (params?: any, body?: any) => Promise<any>,
F extends (
this: EndpointInstance<FetchFunction> & E,
params?: any,
body?: any,
) => Promise<any>,
S extends Schema | undefined = undefined,
M extends true | undefined = undefined
M extends true | undefined = undefined,
E extends Record<string, any> = {}
>(
fetchFunction: F,
options?: EndpointOptions<
(this: ThisParameterType<F>, ...args: Parameters<F>) => string,
S,
M
> &
ThisParameterType<F>,
): EndpointInstance<F, S, M>;
options?: EndpointOptions<EndpointInstance<F>['key'], S, M> & E,
): EndpointInstance<F, S, M> & E;
readonly prototype: Function;
}
declare let Endpoint: EndpointConstructor;
export default Endpoint;

@@ -0,5 +1,21 @@

function runCompat(endpoint, options) {
endpoint.type = endpoint.sideEffect ? 'mutate' : 'read';
endpoint.options = Object.assign({}, options);
delete endpoint.options.key;
delete endpoint.options.schema;
delete endpoint.options.sideEffect;
delete endpoint.options.fetch;
delete endpoint.options.getFetchKey;
delete endpoint.options.options;
if (Object.keys(endpoint.options).length === 0) {
delete endpoint.options;
}
if (endpoint.schema === undefined) endpoint.schema = null;
}
export default class Endpoint extends Function {
constructor(fetchFunction, options) {
super('return arguments.callee.fetch.apply(arguments.callee, arguments)');
this.schema = null;

@@ -10,15 +26,7 @@ this.getFetchKey = params => {

this.fetch = fetchFunction;
if (fetchFunction) this.fetch = fetchFunction;
Object.assign(this, options);
/** The following is for compatibility with FetchShape */
this.type = this.sideEffect ? 'mutate' : 'read';
this.options = Object.assign({}, options);
delete this.options.key;
delete this.options.schema;
delete this.options.sideEffect;
if (Object.keys(this.options).length === 0) {
delete this.options;
}
runCompat(this, options);
}

@@ -31,16 +39,12 @@

extend(options) {
var _options$fetch;
// 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);
const instance = new E(options.fetch, options);
/** The following is for compatibility with FetchShape */
const optionsCopy = Object.assign({}, options);
delete optionsCopy.key;
delete optionsCopy.schema;
delete optionsCopy.sideEffect;
const optionsToPass = Object.assign({}, this, options, {
/** The following is for compatibility with FetchShape */
options: Object.assign({}, this.options, {
optionsCopy
})
});
return new this.constructor((_options$fetch = options.fetch) != null ? _options$fetch : this.fetch, optionsToPass);
runCompat(instance, Object.assign({}, this, options));
return instance;
}

@@ -51,2 +55,2 @@ /** The following is for compatibility with FetchShape */

}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9lbmRwb2ludC5qcyJdLCJuYW1lcyI6WyJFbmRwb2ludCIsIkZ1bmN0aW9uIiwiY29uc3RydWN0b3IiLCJmZXRjaEZ1bmN0aW9uIiwib3B0aW9ucyIsInNjaGVtYSIsImdldEZldGNoS2V5IiwicGFyYW1zIiwia2V5IiwiZmV0Y2giLCJPYmplY3QiLCJhc3NpZ24iLCJ0eXBlIiwic2lkZUVmZmVjdCIsImtleXMiLCJsZW5ndGgiLCJuYW1lIiwiSlNPTiIsInN0cmluZ2lmeSIsImV4dGVuZCIsIm9wdGlvbnNDb3B5Iiwib3B0aW9uc1RvUGFzcyJdLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxNQUFNQSxRQUFOLFNBQXVCQyxRQUF2QixDQUFnQztBQUM3Q0MsRUFBQUEsV0FBVyxDQUFDQyxhQUFELEVBQWdCQyxPQUFoQixFQUF5QjtBQUNsQyxVQUFNLGtFQUFOO0FBRGtDLFNBdUNwQ0MsTUF2Q29DLEdBdUMzQixJQXZDMkI7O0FBQUEsU0F3Q3BDQyxXQXhDb0MsR0F3Q3RCQyxNQUFNLElBQUk7QUFDdEIsYUFBTyxLQUFLQyxHQUFMLENBQVNELE1BQVQsQ0FBUDtBQUNELEtBMUNtQzs7QUFFbEMsU0FBS0UsS0FBTCxHQUFhTixhQUFiO0FBQ0FPLElBQUFBLE1BQU0sQ0FBQ0MsTUFBUCxDQUFjLElBQWQsRUFBb0JQLE9BQXBCO0FBQ0E7O0FBQ0EsU0FBS1EsSUFBTCxHQUFZLEtBQUtDLFVBQUwsR0FBa0IsUUFBbEIsR0FBNkIsTUFBekM7QUFDQSxTQUFLVCxPQUFMLHFCQUFvQkEsT0FBcEI7QUFDQSxXQUFPLEtBQUtBLE9BQUwsQ0FBYUksR0FBcEI7QUFDQSxXQUFPLEtBQUtKLE9BQUwsQ0FBYUMsTUFBcEI7QUFDQSxXQUFPLEtBQUtELE9BQUwsQ0FBYVMsVUFBcEI7O0FBQ0EsUUFBSUgsTUFBTSxDQUFDSSxJQUFQLENBQVksS0FBS1YsT0FBakIsRUFBMEJXLE1BQTFCLEtBQXFDLENBQXpDLEVBQTRDO0FBQzFDLGFBQU8sS0FBS1gsT0FBWjtBQUNEO0FBQ0Y7O0FBRURJLEVBQUFBLEdBQUcsQ0FBQ0QsTUFBRCxFQUFTO0FBQ1YsV0FBUSxHQUFFLEtBQUtFLEtBQUwsQ0FBV08sSUFBSyxJQUFHQyxJQUFJLENBQUNDLFNBQUwsQ0FBZVgsTUFBZixDQUF1QixFQUFwRDtBQUNEOztBQUVEWSxFQUFBQSxNQUFNLENBQUNmLE9BQUQsRUFBVTtBQUFBOztBQUNkO0FBQ0EsVUFBTWdCLFdBQVcscUJBQVFoQixPQUFSLENBQWpCO0FBQ0EsV0FBT2dCLFdBQVcsQ0FBQ1osR0FBbkI7QUFDQSxXQUFPWSxXQUFXLENBQUNmLE1BQW5CO0FBQ0EsV0FBT2UsV0FBVyxDQUFDUCxVQUFuQjtBQUVBLFVBQU1RLGFBQWEscUJBQ2QsSUFEYyxFQUVkakIsT0FGYztBQUdqQjtBQUNBQSxNQUFBQSxPQUFPLG9CQUNGLEtBQUtBLE9BREg7QUFFTGdCLFFBQUFBO0FBRks7QUFKVSxNQUFuQjtBQVNBLFdBQU8sSUFBSSxLQUFLbEIsV0FBVCxtQkFBcUJFLE9BQU8sQ0FBQ0ssS0FBN0IsNkJBQXNDLEtBQUtBLEtBQTNDLEVBQWtEWSxhQUFsRCxDQUFQO0FBQ0Q7QUFFRDs7O0FBdkM2QyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IGNsYXNzIEVuZHBvaW50IGV4dGVuZHMgRnVuY3Rpb24ge1xuICBjb25zdHJ1Y3RvcihmZXRjaEZ1bmN0aW9uLCBvcHRpb25zKSB7XG4gICAgc3VwZXIoJ3JldHVybiBhcmd1bWVudHMuY2FsbGVlLmZldGNoLmFwcGx5KGFyZ3VtZW50cy5jYWxsZWUsIGFyZ3VtZW50cyknKTtcbiAgICB0aGlzLmZldGNoID0gZmV0Y2hGdW5jdGlvbjtcbiAgICBPYmplY3QuYXNzaWduKHRoaXMsIG9wdGlvbnMpO1xuICAgIC8qKiBUaGUgZm9sbG93aW5nIGlzIGZvciBjb21wYXRpYmlsaXR5IHdpdGggRmV0Y2hTaGFwZSAqL1xuICAgIHRoaXMudHlwZSA9IHRoaXMuc2lkZUVmZmVjdCA/ICdtdXRhdGUnIDogJ3JlYWQnO1xuICAgIHRoaXMub3B0aW9ucyA9IHsgLi4ub3B0aW9ucyB9O1xuICAgIGRlbGV0ZSB0aGlzLm9wdGlvbnMua2V5O1xuICAgIGRlbGV0ZSB0aGlzLm9wdGlvbnMuc2NoZW1hO1xuICAgIGRlbGV0ZSB0aGlzLm9wdGlvbnMuc2lkZUVmZmVjdDtcbiAgICBpZiAoT2JqZWN0LmtleXModGhpcy5vcHRpb25zKS5sZW5ndGggPT09IDApIHtcbiAgICAgIGRlbGV0ZSB0aGlzLm9wdGlvbnM7XG4gICAgfVxuICB9XG5cbiAga2V5KHBhcmFtcykge1xuICAgIHJldHVybiBgJHt0aGlzLmZldGNoLm5hbWV9ICR7SlNPTi5zdHJpbmdpZnkocGFyYW1zKX1gO1xuICB9XG5cbiAgZXh0ZW5kKG9wdGlvbnMpIHtcbiAgICAvKiogVGhlIGZvbGxvd2luZyBpcyBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIEZldGNoU2hhcGUgKi9cbiAgICBjb25zdCBvcHRpb25zQ29weSA9IHsgLi4ub3B0aW9ucyB9O1xuICAgIGRlbGV0ZSBvcHRpb25zQ29weS5rZXk7XG4gICAgZGVsZXRlIG9wdGlvbnNDb3B5LnNjaGVtYTtcbiAgICBkZWxldGUgb3B0aW9uc0NvcHkuc2lkZUVmZmVjdDtcblxuICAgIGNvbnN0IG9wdGlvbnNUb1Bhc3MgPSB7XG4gICAgICAuLi50aGlzLFxuICAgICAgLi4ub3B0aW9ucyxcbiAgICAgIC8qKiBUaGUgZm9sbG93aW5nIGlzIGZvciBjb21wYXRpYmlsaXR5IHdpdGggRmV0Y2hTaGFwZSAqL1xuICAgICAgb3B0aW9uczoge1xuICAgICAgICAuLi50aGlzLm9wdGlvbnMsXG4gICAgICAgIG9wdGlvbnNDb3B5LFxuICAgICAgfSxcbiAgICB9O1xuICAgIHJldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3RvcihvcHRpb25zLmZldGNoID8/IHRoaXMuZmV0Y2gsIG9wdGlvbnNUb1Bhc3MpO1xuICB9XG5cbiAgLyoqIFRoZSBmb2xsb3dpbmcgaXMgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBGZXRjaFNoYXBlICovXG4gIHNjaGVtYSA9IG51bGw7XG4gIGdldEZldGNoS2V5ID0gcGFyYW1zID0+IHtcbiAgICByZXR1cm4gdGhpcy5rZXkocGFyYW1zKTtcbiAgfTtcbn1cbiJdfQ==
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9lbmRwb2ludC5qcyJdLCJuYW1lcyI6WyJydW5Db21wYXQiLCJlbmRwb2ludCIsIm9wdGlvbnMiLCJ0eXBlIiwic2lkZUVmZmVjdCIsImtleSIsInNjaGVtYSIsImZldGNoIiwiZ2V0RmV0Y2hLZXkiLCJPYmplY3QiLCJrZXlzIiwibGVuZ3RoIiwidW5kZWZpbmVkIiwiRW5kcG9pbnQiLCJGdW5jdGlvbiIsImNvbnN0cnVjdG9yIiwiZmV0Y2hGdW5jdGlvbiIsInBhcmFtcyIsImFzc2lnbiIsIm5hbWUiLCJKU09OIiwic3RyaW5naWZ5IiwiZXh0ZW5kIiwiRSIsInByb3RvdHlwZSIsImluc3RhbmNlIl0sIm1hcHBpbmdzIjoiQUFBQSxTQUFTQSxTQUFULENBQW1CQyxRQUFuQixFQUE2QkMsT0FBN0IsRUFBc0M7QUFDcENELEVBQUFBLFFBQVEsQ0FBQ0UsSUFBVCxHQUFnQkYsUUFBUSxDQUFDRyxVQUFULEdBQXNCLFFBQXRCLEdBQWlDLE1BQWpEO0FBQ0FILEVBQUFBLFFBQVEsQ0FBQ0MsT0FBVCxxQkFBd0JBLE9BQXhCO0FBQ0EsU0FBT0QsUUFBUSxDQUFDQyxPQUFULENBQWlCRyxHQUF4QjtBQUNBLFNBQU9KLFFBQVEsQ0FBQ0MsT0FBVCxDQUFpQkksTUFBeEI7QUFDQSxTQUFPTCxRQUFRLENBQUNDLE9BQVQsQ0FBaUJFLFVBQXhCO0FBQ0EsU0FBT0gsUUFBUSxDQUFDQyxPQUFULENBQWlCSyxLQUF4QjtBQUNBLFNBQU9OLFFBQVEsQ0FBQ0MsT0FBVCxDQUFpQk0sV0FBeEI7QUFDQSxTQUFPUCxRQUFRLENBQUNDLE9BQVQsQ0FBaUJBLE9BQXhCOztBQUNBLE1BQUlPLE1BQU0sQ0FBQ0MsSUFBUCxDQUFZVCxRQUFRLENBQUNDLE9BQXJCLEVBQThCUyxNQUE5QixLQUF5QyxDQUE3QyxFQUFnRDtBQUM5QyxXQUFPVixRQUFRLENBQUNDLE9BQWhCO0FBQ0Q7O0FBQ0QsTUFBSUQsUUFBUSxDQUFDSyxNQUFULEtBQW9CTSxTQUF4QixFQUFtQ1gsUUFBUSxDQUFDSyxNQUFULEdBQWtCLElBQWxCO0FBQ3BDOztBQUVELGVBQWUsTUFBTU8sUUFBTixTQUF1QkMsUUFBdkIsQ0FBZ0M7QUFDN0NDLEVBQUFBLFdBQVcsQ0FBQ0MsYUFBRCxFQUFnQmQsT0FBaEIsRUFBeUI7QUFDbEMsVUFBTSxrRUFBTjs7QUFEa0MsU0EwQnBDTSxXQTFCb0MsR0EwQnRCUyxNQUFNLElBQUk7QUFDdEIsYUFBTyxLQUFLWixHQUFMLENBQVNZLE1BQVQsQ0FBUDtBQUNELEtBNUJtQzs7QUFFbEMsUUFBSUQsYUFBSixFQUFtQixLQUFLVCxLQUFMLEdBQWFTLGFBQWI7QUFDbkJQLElBQUFBLE1BQU0sQ0FBQ1MsTUFBUCxDQUFjLElBQWQsRUFBb0JoQixPQUFwQjtBQUNBOztBQUNBRixJQUFBQSxTQUFTLENBQUMsSUFBRCxFQUFPRSxPQUFQLENBQVQ7QUFDRDs7QUFFREcsRUFBQUEsR0FBRyxDQUFDWSxNQUFELEVBQVM7QUFDVixXQUFRLEdBQUUsS0FBS1YsS0FBTCxDQUFXWSxJQUFLLElBQUdDLElBQUksQ0FBQ0MsU0FBTCxDQUFlSixNQUFmLENBQXVCLEVBQXBEO0FBQ0Q7O0FBRURLLEVBQUFBLE1BQU0sQ0FBQ3BCLE9BQUQsRUFBVTtBQUNkO0FBQ0E7QUFDQSxVQUFNcUIsQ0FBTixTQUFnQixLQUFLUixXQUFyQixDQUFpQzs7QUFDakNOLElBQUFBLE1BQU0sQ0FBQ1MsTUFBUCxDQUFjSyxDQUFDLENBQUNDLFNBQWhCLEVBQTJCLElBQTNCO0FBQ0EsVUFBTUMsUUFBUSxHQUFHLElBQUlGLENBQUosQ0FBTXJCLE9BQU8sQ0FBQ0ssS0FBZCxFQUFxQkwsT0FBckIsQ0FBakI7QUFFQTs7QUFDQUYsSUFBQUEsU0FBUyxDQUFDeUIsUUFBRCxvQkFBZ0IsSUFBaEIsRUFBeUJ2QixPQUF6QixFQUFUO0FBRUEsV0FBT3VCLFFBQVA7QUFDRDtBQUVEOzs7QUExQjZDIiwic291cmNlc0NvbnRlbnQiOlsiZnVuY3Rpb24gcnVuQ29tcGF0KGVuZHBvaW50LCBvcHRpb25zKSB7XG4gIGVuZHBvaW50LnR5cGUgPSBlbmRwb2ludC5zaWRlRWZmZWN0ID8gJ211dGF0ZScgOiAncmVhZCc7XG4gIGVuZHBvaW50Lm9wdGlvbnMgPSB7IC4uLm9wdGlvbnMgfTtcbiAgZGVsZXRlIGVuZHBvaW50Lm9wdGlvbnMua2V5O1xuICBkZWxldGUgZW5kcG9pbnQub3B0aW9ucy5zY2hlbWE7XG4gIGRlbGV0ZSBlbmRwb2ludC5vcHRpb25zLnNpZGVFZmZlY3Q7XG4gIGRlbGV0ZSBlbmRwb2ludC5vcHRpb25zLmZldGNoO1xuICBkZWxldGUgZW5kcG9pbnQub3B0aW9ucy5nZXRGZXRjaEtleTtcbiAgZGVsZXRlIGVuZHBvaW50Lm9wdGlvbnMub3B0aW9ucztcbiAgaWYgKE9iamVjdC5rZXlzKGVuZHBvaW50Lm9wdGlvbnMpLmxlbmd0aCA9PT0gMCkge1xuICAgIGRlbGV0ZSBlbmRwb2ludC5vcHRpb25zO1xuICB9XG4gIGlmIChlbmRwb2ludC5zY2hlbWEgPT09IHVuZGVmaW5lZCkgZW5kcG9pbnQuc2NoZW1hID0gbnVsbDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRW5kcG9pbnQgZXh0ZW5kcyBGdW5jdGlvbiB7XG4gIGNvbnN0cnVjdG9yKGZldGNoRnVuY3Rpb24sIG9wdGlvbnMpIHtcbiAgICBzdXBlcigncmV0dXJuIGFyZ3VtZW50cy5jYWxsZWUuZmV0Y2guYXBwbHkoYXJndW1lbnRzLmNhbGxlZSwgYXJndW1lbnRzKScpO1xuICAgIGlmIChmZXRjaEZ1bmN0aW9uKSB0aGlzLmZldGNoID0gZmV0Y2hGdW5jdGlvbjtcbiAgICBPYmplY3QuYXNzaWduKHRoaXMsIG9wdGlvbnMpO1xuICAgIC8qKiBUaGUgZm9sbG93aW5nIGlzIGZvciBjb21wYXRpYmlsaXR5IHdpdGggRmV0Y2hTaGFwZSAqL1xuICAgIHJ1bkNvbXBhdCh0aGlzLCBvcHRpb25zKTtcbiAgfVxuXG4gIGtleShwYXJhbXMpIHtcbiAgICByZXR1cm4gYCR7dGhpcy5mZXRjaC5uYW1lfSAke0pTT04uc3RyaW5naWZ5KHBhcmFtcyl9YDtcbiAgfVxuXG4gIGV4dGVuZChvcHRpb25zKSB7XG4gICAgLy8gbWFrZSBhIGNvbnN0cnVjdG9yL3Byb3RvdHlwZSBiYXNlZCBvZmYgdGhpc1xuICAgIC8vIGV4dGVuZCBmcm9tIGl0IGFuZCBpbml0IHdpdGggb3B0aW9ucyBzZW50XG4gICAgY2xhc3MgRSBleHRlbmRzIHRoaXMuY29uc3RydWN0b3Ige31cbiAgICBPYmplY3QuYXNzaWduKEUucHJvdG90eXBlLCB0aGlzKTtcbiAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBFKG9wdGlvbnMuZmV0Y2gsIG9wdGlvbnMpO1xuXG4gICAgLyoqIFRoZSBmb2xsb3dpbmcgaXMgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBGZXRjaFNoYXBlICovXG4gICAgcnVuQ29tcGF0KGluc3RhbmNlLCB7IC4uLnRoaXMsIC4uLm9wdGlvbnMgfSk7XG5cbiAgICByZXR1cm4gaW5zdGFuY2U7XG4gIH1cblxuICAvKiogVGhlIGZvbGxvd2luZyBpcyBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIEZldGNoU2hhcGUgKi9cbiAgZ2V0RmV0Y2hLZXkgPSBwYXJhbXMgPT4ge1xuICAgIHJldHVybiB0aGlzLmtleShwYXJhbXMpO1xuICB9O1xufVxuIl19

@@ -7,3 +7,5 @@ import { Schema } from '@rest-hooks/normalizr';

key(params?: P): string;
/** The following is for compatibility with FetchShape */
getFetchKey: (params: P) => string;
}
//# sourceMappingURL=indexEndpoint.d.ts.map
export default class Index {
constructor(schema, key) {
this.getFetchKey = params => {
return this.key(params);
};
this.schema = schema;

@@ -10,4 +14,6 @@ if (key) this.key = key;

}
/** The following is for compatibility with FetchShape */
}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9pbmRleEVuZHBvaW50LnRzIl0sIm5hbWVzIjpbIkluZGV4IiwiY29uc3RydWN0b3IiLCJzY2hlbWEiLCJrZXkiLCJwYXJhbXMiLCJKU09OIiwic3RyaW5naWZ5Il0sIm1hcHBpbmdzIjoiQUFJQSxlQUFlLE1BQU1BLEtBQU4sQ0FDbUI7QUFFaENDLEVBQUFBLFdBQVcsQ0FBQ0MsTUFBRCxFQUFZQyxHQUFaLEVBQXlDO0FBQ2xELFNBQUtELE1BQUwsR0FBY0EsTUFBZDtBQUNBLFFBQUlDLEdBQUosRUFBUyxLQUFLQSxHQUFMLEdBQVdBLEdBQVg7QUFDVjs7QUFFREEsRUFBQUEsR0FBRyxDQUFDQyxNQUFELEVBQWE7QUFDZCxXQUFPQyxJQUFJLENBQUNDLFNBQUwsQ0FBZUYsTUFBZixDQUFQO0FBQ0Q7O0FBVCtCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU2NoZW1hIH0gZnJvbSAnQHJlc3QtaG9va3Mvbm9ybWFsaXpyJztcblxuaW1wb3J0IHR5cGUgeyBJbmRleEludGVyZmFjZSwgSW5kZXhQYXJhbXMgfSBmcm9tICcuL2ludGVyZmFjZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEluZGV4PFMgZXh0ZW5kcyBTY2hlbWEsIFAgPSBSZWFkb25seTxJbmRleFBhcmFtczxTPj4+XG4gIGltcGxlbWVudHMgSW5kZXhJbnRlcmZhY2U8UywgUD4ge1xuICBkZWNsYXJlIHNjaGVtYTogUztcbiAgY29uc3RydWN0b3Ioc2NoZW1hOiBTLCBrZXk/OiAocGFyYW1zOiBQKSA9PiBzdHJpbmcpIHtcbiAgICB0aGlzLnNjaGVtYSA9IHNjaGVtYTtcbiAgICBpZiAoa2V5KSB0aGlzLmtleSA9IGtleTtcbiAgfVxuXG4gIGtleShwYXJhbXM/OiBQKSB7XG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHBhcmFtcyk7XG4gIH1cbn1cbiJdfQ==
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9pbmRleEVuZHBvaW50LnRzIl0sIm5hbWVzIjpbIkluZGV4IiwiY29uc3RydWN0b3IiLCJzY2hlbWEiLCJrZXkiLCJnZXRGZXRjaEtleSIsInBhcmFtcyIsIkpTT04iLCJzdHJpbmdpZnkiXSwibWFwcGluZ3MiOiJBQUlBLGVBQWUsTUFBTUEsS0FBTixDQUNtQjtBQUVoQ0MsRUFBQUEsV0FBVyxDQUFDQyxNQUFELEVBQVlDLEdBQVosRUFBeUM7QUFBQSxTQVVwREMsV0FWb0QsR0FVckNDLE1BQUQsSUFBZTtBQUMzQixhQUFPLEtBQUtGLEdBQUwsQ0FBU0UsTUFBVCxDQUFQO0FBQ0QsS0FabUQ7O0FBQ2xELFNBQUtILE1BQUwsR0FBY0EsTUFBZDtBQUNBLFFBQUlDLEdBQUosRUFBUyxLQUFLQSxHQUFMLEdBQVdBLEdBQVg7QUFDVjs7QUFFREEsRUFBQUEsR0FBRyxDQUFDRSxNQUFELEVBQWE7QUFDZCxXQUFPQyxJQUFJLENBQUNDLFNBQUwsQ0FBZUYsTUFBZixDQUFQO0FBQ0Q7QUFFRDs7O0FBWGdDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU2NoZW1hIH0gZnJvbSAnQHJlc3QtaG9va3Mvbm9ybWFsaXpyJztcblxuaW1wb3J0IHR5cGUgeyBJbmRleEludGVyZmFjZSwgSW5kZXhQYXJhbXMgfSBmcm9tICcuL2ludGVyZmFjZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEluZGV4PFMgZXh0ZW5kcyBTY2hlbWEsIFAgPSBSZWFkb25seTxJbmRleFBhcmFtczxTPj4+XG4gIGltcGxlbWVudHMgSW5kZXhJbnRlcmZhY2U8UywgUD4ge1xuICBkZWNsYXJlIHNjaGVtYTogUztcbiAgY29uc3RydWN0b3Ioc2NoZW1hOiBTLCBrZXk/OiAocGFyYW1zOiBQKSA9PiBzdHJpbmcpIHtcbiAgICB0aGlzLnNjaGVtYSA9IHNjaGVtYTtcbiAgICBpZiAoa2V5KSB0aGlzLmtleSA9IGtleTtcbiAgfVxuXG4gIGtleShwYXJhbXM/OiBQKSB7XG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHBhcmFtcyk7XG4gIH1cblxuICAvKiogVGhlIGZvbGxvd2luZyBpcyBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIEZldGNoU2hhcGUgKi9cbiAgZ2V0RmV0Y2hLZXkgPSAocGFyYW1zOiBQKSA9PiB7XG4gICAgcmV0dXJuIHRoaXMua2V5KHBhcmFtcyk7XG4gIH07XG59XG4iXX0=
{
"name": "@rest-hooks/endpoint",
"version": "0.5.3",
"version": "0.6.0",
"description": "Declarative Network Interface Definitions",

@@ -57,3 +57,3 @@ "sideEffects": false,

},
"gitHead": "5b160b1c404e64b56a2d31b368a53af0b1bc8a4f"
"gitHead": "529b34f1f4913a4266abb2eddf345332e063ca1a"
}

@@ -5,3 +5,3 @@ import nock from 'nock';

import Endpoint from '../endpoint';
import Endpoint, { EndpointOptions, Make } from '../endpoint';
import { EndpointInterface } from '../interface';

@@ -92,2 +92,5 @@

const BaseFetch = new Endpoint(fetchUsers);
// @ts-expect-error
const aa: true = BaseFetch.sideEffect;
const bb: undefined = BaseFetch.sideEffect;
const UserDetail = new Endpoint(fetchUsers).extend({

@@ -99,4 +102,9 @@ sideEffect: true,

const a: undefined = UserDetail.sideEffect;
const b: true = UserDetail.sideEffect;
function t(a: EndpointInterface<typeof fetchUsers>) {}
// ts-expect-error
//const c: undefined = UserDetail.extend({ dataExpiryLength: 5 }).sideEffect;
//const d: true = UserDetail.extend({ dataExpiryLength: 5 }).sideEffect;
function t(a: EndpointInterface<typeof fetchUsers, any, undefined>) {}
// @ts-expect-error

@@ -127,3 +135,3 @@ t(UserDetail);

fetch: fetchAsset,
// @ts-expect-error
// TODO: ts-expect-error
key: ({ id }: { id: string }) => `fetch my user ${id}`,

@@ -167,3 +175,5 @@ });

// extends
const Extended = UserDetail.extend({ schema: User2 });
const Extended = UserDetail.extend({
schema: User2,
});
const user2 = await Extended({ id: payload.id });

@@ -185,2 +195,18 @@ expect(user2).toEqual(payload);

it('makes', async () => {
const UserCurrent = new Endpoint(fetchAuthd, { token: 'password', key });
const response = await UserCurrent();
expect(response).toEqual(payload);
expect(response.username).toBe(payload.username);
expect(UserCurrent.key()).toMatchInlineSnapshot(
`"current user password"`,
);
UserCurrent.key = function () {
return Object.getPrototypeOf(UserCurrent).key.call(this) + 'never';
};
});
it('should use provided context in fetch and key', async () => {

@@ -218,4 +244,3 @@ const UserCurrent = new Endpoint(fetchAuthd, { token: 'password', key });

it('should not allow mismatched key', () => {
// @ts-expect-error
new Endpoint(fetchAuthd, { token: 'hi', key2 });
// TODO: ts-expect-error new Endpoint(fetchAuthd, { token: 'hi', key: key2 });

@@ -231,4 +256,3 @@ // @ts-expect-error

// @ts-expect-error
UserCurrent.extend({ key: key2 });
// TODO: ts-expect-error UserCurrent.extend({ key: key2 });

@@ -274,10 +298,61 @@ // @ts-expect-error

// @ts-expect-error
new Endpoint(fetchUsers, { url: '' });
new Endpoint(fetchUsers, { url: '', random: 5 });
// @ts-expect-error
new Endpoint(fetchUsers, { url }).extend({ url: 'hi' });
const UserDetail = new Endpoint(fetchUsers, { url }).extend({ url });
const UserDetail = new Endpoint(
function ({ id }: { id: string }) {
this.random;
// @ts-expect-error
this.notexistant;
return fetch(this.url({ id })).then(res => res.json()) as Promise<
typeof payload
>;
},
{
url,
random: 599,
dataExpiryLength: 5000,
},
);
const a: undefined = UserDetail.sideEffect;
// @ts-expect-error
const b: true = UserDetail.sideEffect;
UserDetail.schema;
UserDetail.random;
// @ts-expect-error
UserDetail.nonexistant;
UserDetail.key({ id: 'hi' });
// @ts-expect-error
() => UserDetail.key({ nonexistant: 5 });
// @ts-expect-error
() => UserDetail.key({ id: 5 });
let res = await UserDetail({ id: payload.id });
expect(res).toEqual(payload);
expect(res.username).toBe(payload.username);
// @ts-expect-error
expect(res.notexist).toBeUndefined();
// test extending parts that aren't used in this
const Extended = UserDetail.extend({ random: 100 });
res = await Extended({ id: payload.id });
expect(res).toEqual(payload);
expect(res.username).toBe(payload.username);
// @ts-expect-error
expect(res.notexist).toBeUndefined();
UserDetail.extend({
url: function (params: { id: string }) {
return this.constructor.prototype.url(params) + '/more';
},
// @ts-expect-error
random: '600',
});
const Test = UserDetail.extend({
random: 600,
});
// check return type and call params
const response = await UserDetail({ id: payload.id });
const response = await Test({ id: payload.id });
expect(response).toEqual(payload);

@@ -288,6 +363,96 @@ expect(response.username).toBe(payload.username);

});
it('should work with key', () => {
const url = ({ id }: { id: string }) => `/users/${id}`;
class User extends Entity {
readonly id: string = '';
pk() {
return this.id;
}
}
const UserDetail = new Endpoint(
function ({ id }: { id: string }) {
this.schema;
this.random;
// @ts-expect-error
this.notexistant;
return fetch(this.url({ id })).then(res => res.json()) as Promise<
typeof payload
>;
},
{
url,
random: 599,
schema: [User],
key: function (this: any, { id }: { id: string }) {
this.random;
this.schema;
return id + 'hi';
},
},
);
const sch: typeof User[] = UserDetail.schema;
const s: undefined = UserDetail.sideEffect;
UserDetail.random;
// @ts-expect-error
UserDetail.nonexistant;
UserDetail.key({ id: 'hi' });
// @ts-expect-error
() => UserDetail.key({ nonexistant: 5 });
// @ts-expect-error
() => UserDetail.key({ id: 5 });
});
});
/*describe('class', () => {
describe('auth patterns', () => {
describe('class', () => {
/*class ResourceEndpoint<
F extends (params?: any, body?: any) => Promise<any>,
S extends Schema | undefined = undefined,
M extends true | undefined = undefined
> extends Endpoint<F, S, M> {
constructor(
fetchFunction: F,
options?: EndpointOptions<
(this: ThisParameterType<F>, ...args: Parameters<F>) => string,
S,
M
> &
ThisParameterType<F>,
) {
super(fetchFunction, options);
}
fetch(...args: Parameters<F>) {
return fetch(this.url(args[0]), this.init).then(res => res.json());
}
init: RequestInit = { method: 'GET' };
key(params: { id: string }) {
return `${this.init.method} ${this.url(params)}`;
}
}
const init = this.getFetchInit({ method: 'GET' });
const fetch = this.fetch.bind(this);
return new Endpoint(
function (
this: { url: (p: any) => string; init: RequestInit },
params: Readonly<object>,
) {
return fetch(this.url(params), this.init);
},
{
...this.getEndpointExtra(),
key: function (
this: { url: (p: any) => string; init: RequestInit },
params: Readonly<object>,
) {
return `${this.init.method} ${this.url(params)}`;
},
url: this.url.bind(this),
init,
},
);*/
/* describe('auth patterns', () => {
class AuthEndpoint<

@@ -353,4 +518,3 @@ F extends (

});*/
/*describe('custom fetch for snakeCase', () => {
/*describe('custom fetch for snakeCase', () => {
function deeplyApplyKeyTransform(

@@ -386,4 +550,4 @@ obj: any,

BaseEndpoint.extend({ fetch: })
})
});*/
})*/
});
});

@@ -9,4 +9,4 @@ /* eslint-disable @typescript-eslint/ban-types */

export interface EndpointOptions<
K extends (...args: any) => string,
S extends Schema | undefined = Schema | undefined,
K extends ((...args: any) => string) | undefined = undefined,
S extends Schema | undefined = undefined,
M extends true | undefined = undefined

@@ -17,8 +17,11 @@ > extends EndpointExtraOptions {

schema?: S;
[k: string]: any;
}
export interface EndpointExtendOptions<
K extends (...args: any) => string,
K extends ((...args: any) => string) | undefined =
| ((...args: any) => string)
| undefined,
S extends Schema | undefined = Schema | undefined,
M extends true | undefined = undefined
M extends true | undefined = true | undefined
> extends EndpointOptions<K, S, M> {

@@ -37,2 +40,4 @@ fetch?: FetchFunction;

export function Make(...args: any[]): EndpointInstance<FetchFunction>;
/**

@@ -42,3 +47,3 @@ * Creates a new function.

export interface EndpointInstance<
F extends FetchFunction,
F extends FetchFunction = FetchFunction,
S extends Schema | undefined = undefined,

@@ -88,3 +93,3 @@ M extends true | undefined = undefined

readonly sideEffect?: M;
readonly sideEffect: M;

@@ -97,29 +102,28 @@ readonly schema: S extends undefined ? schema.SchemaClass<ResolveType<F>> : S;

extend<
E extends EndpointInstance<any, S, any>,
O extends EndpointExtendOptions<K, any, any> &
Partial<ThisParameterType<E['fetch']>>,
K extends (
this: ThisParameterType<
'fetch' extends keyof O ? O['fetch'] : E['fetch']
>,
params: ParamFromFetch<'fetch' extends keyof O ? O['fetch'] : E['fetch']>,
) => string,
S
E extends EndpointInstance<
FetchFunction,
Schema | undefined,
true | undefined
>,
O extends EndpointExtendOptions<EndpointInstance<F>['key']> &
Partial<Omit<E, keyof EndpointInstance<FetchFunction>>>
>(
this: E,
options: O,
): EndpointInstance<
'fetch' extends keyof typeof options
? Exclude<typeof options['fetch'], undefined>
: E['fetch'],
'schema' extends keyof typeof options
? typeof options['schema']
: E['_schema'],
'sideEffect' extends keyof typeof options
? typeof options['sideEffect']
: E['sideEffect']
>;
): Omit<O, keyof EndpointInstance<FetchFunction>> &
Omit<E, keyof EndpointInstance<FetchFunction>> &
EndpointInstance<
'fetch' extends keyof typeof options
? Exclude<typeof options['fetch'], undefined>
: E['fetch'],
'schema' extends keyof typeof options
? typeof options['schema']
: E['_schema'],
'sideEffect' extends keyof typeof options
? typeof options['sideEffect']
: E['sideEffect']
>;
/** The following is for compatibility with FetchShape */
readonly type: M extends undefined ? 'read' : 'mutate';
readonly type: M extends true ? 'mutate' : 'read';
getFetchKey(params: Parameters<F>[0]): string;

@@ -131,19 +135,18 @@ options?: EndpointExtraOptions;

new <
F extends (params?: any, body?: any) => Promise<any>,
F extends (
this: EndpointInstance<FetchFunction> & E,
params?: any,
body?: any,
) => Promise<any>,
S extends Schema | undefined = undefined,
M extends true | undefined = undefined
M extends true | undefined = undefined,
E extends Record<string, any> = {}
>(
fetchFunction: F,
options?: EndpointOptions<
(this: ThisParameterType<F>, ...args: Parameters<F>) => string,
S,
M
> &
ThisParameterType<F>,
): EndpointInstance<F, S, M>;
options?: EndpointOptions<EndpointInstance<F>['key'], S, M> & E,
): EndpointInstance<F, S, M> & E;
readonly prototype: Function;
}
declare let Endpoint: EndpointConstructor;
export default Endpoint;

@@ -0,15 +1,23 @@

function runCompat(endpoint, options) {
endpoint.type = endpoint.sideEffect ? 'mutate' : 'read';
endpoint.options = { ...options };
delete endpoint.options.key;
delete endpoint.options.schema;
delete endpoint.options.sideEffect;
delete endpoint.options.fetch;
delete endpoint.options.getFetchKey;
delete endpoint.options.options;
if (Object.keys(endpoint.options).length === 0) {
delete endpoint.options;
}
if (endpoint.schema === undefined) endpoint.schema = null;
}
export default class Endpoint extends Function {
constructor(fetchFunction, options) {
super('return arguments.callee.fetch.apply(arguments.callee, arguments)');
this.fetch = fetchFunction;
if (fetchFunction) this.fetch = fetchFunction;
Object.assign(this, options);
/** The following is for compatibility with FetchShape */
this.type = this.sideEffect ? 'mutate' : 'read';
this.options = { ...options };
delete this.options.key;
delete this.options.schema;
delete this.options.sideEffect;
if (Object.keys(this.options).length === 0) {
delete this.options;
}
runCompat(this, options);
}

@@ -22,22 +30,15 @@

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);
const instance = new E(options.fetch, options);
/** The following is for compatibility with FetchShape */
const optionsCopy = { ...options };
delete optionsCopy.key;
delete optionsCopy.schema;
delete optionsCopy.sideEffect;
runCompat(instance, { ...this, ...options });
const optionsToPass = {
...this,
...options,
/** The following is for compatibility with FetchShape */
options: {
...this.options,
optionsCopy,
},
};
return new this.constructor(options.fetch ?? this.fetch, optionsToPass);
return instance;
}
/** The following is for compatibility with FetchShape */
schema = null;
getFetchKey = params => {

@@ -44,0 +45,0 @@ return this.key(params);

@@ -16,2 +16,7 @@ import { Schema } from '@rest-hooks/normalizr';

}
/** The following is for compatibility with FetchShape */
getFetchKey = (params: P) => {
return this.key(params);
};
}

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc