@feathersjs/hooks
Advanced tools
Comparing version 0.6.3 to 0.6.4
@@ -6,2 +6,14 @@ # Change Log | ||
## [0.6.4](https://github.com/feathersjs/hooks/compare/v0.6.3...v0.6.4) (2021-04-11) | ||
### Bug Fixes | ||
* allow to hooks a function without middleware ([#77](https://github.com/feathersjs/hooks/issues/77)) ([38b44c3](https://github.com/feathersjs/hooks/commit/38b44c3ba1bd7753cdb81492b517e4fd3a6af50e)) | ||
* conserve fn.length and fn.name ([#79](https://github.com/feathersjs/hooks/issues/79)) ([d9bc9af](https://github.com/feathersjs/hooks/commit/d9bc9af689f15398168ce4493fcfb23af0f3ef05)) | ||
## [0.6.3](https://github.com/feathersjs/hooks/compare/v0.6.2...v0.6.3) (2021-03-31) | ||
@@ -8,0 +20,0 @@ |
@@ -1,1 +0,1 @@ | ||
!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.hooks=e():t.hooks=e()}(this,(function(){return(()=>{"use strict";var t={150:(t,e,o)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.setMiddleware=e.getMiddleware=e.setManager=e.getManager=e.convertOptions=e.HookManager=e.HookContext=e.HOOKS=void 0;const r=o(930);e.HOOKS=Symbol("@feathersjs/hooks");class n{constructor(t={}){Object.assign(this,t)}}e.HookContext=n;class s{constructor(){this._parent=null,this._params=null,this._middleware=null,this._props=null}parent(t){return this._parent=t,this}middleware(t){return this._middleware=(null==t?void 0:t.length)?t:null,this}getMiddleware(){var t;const e=null===(t=this._parent)||void 0===t?void 0:t.getMiddleware();return e&&this._middleware?e.concat(this._middleware):e||this._middleware}collectMiddleware(t,e){const o=c(t),r=this.getMiddleware();return o&&r?o.concat(r):o||r}props(t){return this._props||(this._props={}),r.copyProperties(this._props,t),this}getProps(){var t;const e=null===(t=this._parent)||void 0===t?void 0:t.getProps();return e&&this._props?r.copyProperties({},e,this._props):e||this._props}params(...t){return this._params=t,this}getParams(){var t;const e=null===(t=this._parent)||void 0===t?void 0:t.getParams();return e&&this._params?e.concat(this._params):e||this._params}defaults(t){return this._defaults=t,this}getDefaults(t,e,o){var r;const n="function"==typeof this._defaults?this._defaults(t,e,o):null,s=null===(r=this._parent)||void 0===r?void 0:r.getDefaults(t,e,o);return s&&n?Object.assign({},s,n):s||n}getContextClass(t=n){const e=class extends t{constructor(t){super(t),r.copyToSelf(this)}},o=this.getParams(),s=this.getProps();return o&&o.forEach(((t,o)=>{if(void 0!==(null==s?void 0:s[t]))throw new Error(`Hooks can not have a property and param named '${t}'. Use .defaults instead.`);Object.defineProperty(e.prototype,t,{enumerable:!0,get(){return null==this?void 0:this.arguments[o]},set(t){this.arguments[o]=t}})})),s&&r.copyProperties(e.prototype,s),e}initializeContext(t,e,o){const r=this._parent?this._parent.initializeContext(t,e,o):o,n=this.getDefaults(t,e,r);if(t&&(r.self=t),r.arguments=e,n)for(const t of Object.keys(n))void 0===r[t]&&(r[t]=n[t]);return r}}function i(t){return t&&t[e.HOOKS]||null}function a(t,o){const r=i(t);return t[e.HOOKS]=o.parent(r),t}function c(t){const e=i(t);return e?e.getMiddleware():null}e.HookManager=s,e.convertOptions=function(t=null){return t?Array.isArray(t)?(new s).middleware(t):t:new s},e.getManager=i,e.setManager=a,e.getMiddleware=c,e.setMiddleware=function(t,e){return a(t,(new s).middleware(e))}},85:(t,e)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.compose=void 0,e.compose=function(t){if(!Array.isArray(t))throw new TypeError("Middleware stack must be an array!");for(const e of t)if("function"!=typeof e)throw new TypeError("Middleware must be composed of functions!");return function(e,o){let r=-1;return function n(s){if(s<=r)return Promise.reject(new Error("next() called multiple times"));r=s;let i=t[s];if(s===t.length&&(i=o),!i)return Promise.resolve();try{return Promise.resolve(i.call(this,e,n.bind(this,s+1)))}catch(t){return Promise.reject(t)}}.call(this,0)}}},460:(t,e,o)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.hookDecorator=e.objectHooks=e.functionHooks=e.getOriginal=void 0;const r=o(85),n=o(150),s=o(930);function i(t){return"function"==typeof t.original?i(t.original):t}function a(t,e){if("function"!=typeof t)throw new Error("Can not apply hooks to non-function");const o=n.convertOptions(e),a=function(...t){const{Context:e,original:n}=a,s=t[t.length-1]instanceof e,i=s?t.pop():new e,c=o.initializeContext(this,t,i),p=[(t,e)=>e().then((()=>s?t:t.result))],u=o.collectMiddleware(this,t);return u&&Array.prototype.push.apply(p,u),p.push(((t,e)=>Object.prototype.hasOwnProperty.call(c,"result")?e():Promise.resolve(n.apply(this,t.arguments)).then((o=>(t.result=o,e()))))),r.compose(p).call(this,c)};return s.copyProperties(a,t),n.setManager(a,o),Object.assign(a,{original:i(t),Context:o.getContextClass(),createContext:(t={})=>new a.Context(t)})}e.getOriginal=i,e.functionHooks=a,e.objectHooks=function(t,e){const o="function"==typeof t?t.prototype:t;return Array.isArray(e)?n.setMiddleware(o,e):Object.keys(e).reduce(((t,r)=>{const s=o[r];if("function"!=typeof s)throw new Error(`Can not apply hooks. '${r}' is not a function`);const i=n.convertOptions(e[r]);return t[r]=a(s,i.props({method:r})),t}),o)},e.hookDecorator=t=>(e,o,r)=>{const s=n.convertOptions(t);if(!r)return n.setManager(e.prototype,s),e;const i=r.value;if("function"!=typeof i)throw new Error(`Can not apply hooks. '${o}' is not a function`);return r.value=a(i,s.props({method:o})),r}},920:function(t,e,o){var r=this&&this.__createBinding||(Object.create?function(t,e,o,r){void 0===r&&(r=o),Object.defineProperty(t,r,{enumerable:!0,get:function(){return e[o]}})}:function(t,e,o,r){void 0===r&&(r=o),t[r]=e[o]}),n=this&&this.__exportStar||function(t,e){for(var o in t)"default"===o||Object.prototype.hasOwnProperty.call(e,o)||r(e,t,o)};Object.defineProperty(e,"__esModule",{value:!0}),e.hooks=e.middleware=void 0;const s=o(150),i=o(460);n(o(460),e),n(o(85),e),n(o(150),e),e.middleware=function(t,e){const o=(new s.HookManager).middleware(t);return e&&(e.params&&o.params(...e.params),e.defaults&&o.defaults(e.defaults),e.props&&o.props(e.props)),o},e.hooks=function(...t){const[e,o]=t;return"function"==typeof e&&(o instanceof s.HookManager||Array.isArray(o))?i.functionHooks(e,o):2===t.length?i.objectHooks(e,o):i.hookDecorator(e)}},930:(t,e)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.copyProperties=e.copyToSelf=void 0;const o=Object.prototype,r="function"==typeof o.__lookupGetter__&&"function"==typeof o.__defineGetter__&&"function"==typeof o.__defineSetter__;e.copyToSelf=function(t){for(const e in t)if(!t.hasOwnProperty(e)){const o=r?t.constructor.prototype.__lookupGetter__(e):Object.getOwnPropertyDescriptor(t,e);if(r&&o){t.__defineGetter__(e,o);const r=t.constructor.prototype.__lookupSetter__(e);r&&t.__defineSetter__(e,r)}else o?Object.defineProperty(t,e,o):t[e]=t[e]}},e.copyProperties=function(t,...e){for(const o of e){const e=Object.keys(o).concat(Object.getOwnPropertySymbols(o));for(const r of e){const e=Object.getOwnPropertyDescriptor(o,r);t.hasOwnProperty(r)||Object.defineProperty(t,r,e)}}return t}}},e={};return function o(r){if(e[r])return e[r].exports;var n=e[r]={exports:{}};return t[r].call(n.exports,n,n.exports,o),n.exports}(920)})()})); | ||
!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.hooks=e():t.hooks=e()}(this,(function(){return(()=>{"use strict";var t={150:(t,e,o)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.setMiddleware=e.getMiddleware=e.setManager=e.getManager=e.convertOptions=e.HookManager=e.HookContext=e.HOOKS=void 0;const r=o(930);e.HOOKS=Symbol("@feathersjs/hooks");class n{constructor(t={}){Object.assign(this,t)}}e.HookContext=n;class s{constructor(){this._parent=null,this._params=null,this._middleware=null,this._props=null}parent(t){return this._parent=t,this}middleware(t){return this._middleware=(null==t?void 0:t.length)?t:null,this}getMiddleware(){var t;const e=null===(t=this._parent)||void 0===t?void 0:t.getMiddleware();return e&&this._middleware?e.concat(this._middleware):e||this._middleware}collectMiddleware(t,e){const o=c(t),r=this.getMiddleware();return o&&r?o.concat(r):o||r}props(t){return this._props||(this._props={}),r.copyProperties(this._props,t),this}getProps(){var t;const e=null===(t=this._parent)||void 0===t?void 0:t.getProps();return e&&this._props?r.copyProperties({},e,this._props):e||this._props}params(...t){return this._params=t,this}getParams(){var t;const e=null===(t=this._parent)||void 0===t?void 0:t.getParams();return e&&this._params?e.concat(this._params):e||this._params}defaults(t){return this._defaults=t,this}getDefaults(t,e,o){var r;const n="function"==typeof this._defaults?this._defaults(t,e,o):null,s=null===(r=this._parent)||void 0===r?void 0:r.getDefaults(t,e,o);return s&&n?Object.assign({},s,n):s||n}getContextClass(t=n){const e=class extends t{constructor(t){super(t),r.copyToSelf(this)}},o=this.getParams(),s=this.getProps();return o&&o.forEach(((t,o)=>{if(void 0!==(null==s?void 0:s[t]))throw new Error(`Hooks can not have a property and param named '${t}'. Use .defaults instead.`);Object.defineProperty(e.prototype,t,{enumerable:!0,get(){return null==this?void 0:this.arguments[o]},set(t){this.arguments[o]=t}})})),s&&r.copyProperties(e.prototype,s),e}initializeContext(t,e,o){const r=this._parent?this._parent.initializeContext(t,e,o):o,n=this.getDefaults(t,e,r);if(t&&(r.self=t),r.arguments=e,n)for(const t of Object.keys(n))void 0===r[t]&&(r[t]=n[t]);return r}}function i(t){return t&&t[e.HOOKS]||null}function a(t,o){const r=i(t);return t[e.HOOKS]=o.parent(r),t}function c(t){const e=i(t);return e?e.getMiddleware():null}e.HookManager=s,e.convertOptions=function(t=null){return t?Array.isArray(t)?(new s).middleware(t):t:new s},e.getManager=i,e.setManager=a,e.getMiddleware=c,e.setMiddleware=function(t,e){return a(t,(new s).middleware(e))}},85:(t,e)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.compose=void 0,e.compose=function(t){if(!Array.isArray(t))throw new TypeError("Middleware stack must be an array!");for(const e of t)if("function"!=typeof e)throw new TypeError("Middleware must be composed of functions!");return function(e,o){let r=-1;return function n(s){if(s<=r)return Promise.reject(new Error("next() called multiple times"));r=s;let i=t[s];if(s===t.length&&(i=o),!i)return Promise.resolve();try{return Promise.resolve(i.call(this,e,n.bind(this,s+1)))}catch(t){return Promise.reject(t)}}.call(this,0)}}},460:(t,e,o)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.hookDecorator=e.objectHooks=e.functionHooks=e.getOriginal=void 0;const r=o(85),n=o(150),s=o(930);function i(t){return"function"==typeof t.original?i(t.original):t}function a(t,e){if("function"!=typeof t)throw new Error("Can not apply hooks to non-function");const o=n.convertOptions(e),a=function(...t){const{Context:e,original:n}=a,s=t[t.length-1]instanceof e,i=s?t.pop():new e,c=o.initializeContext(this,t,i),p=[(t,e)=>e().then((()=>s?t:t.result))],u=o.collectMiddleware(this,t);return u&&Array.prototype.push.apply(p,u),p.push(((t,e)=>Object.prototype.hasOwnProperty.call(c,"result")?e():Promise.resolve(n.apply(this,t.arguments)).then((o=>(t.result=o,e()))))),r.compose(p).call(this,c)};return s.copyFnProperties(a,t),s.copyProperties(a,t),n.setManager(a,o),Object.assign(a,{original:i(t),Context:o.getContextClass(),createContext:(t={})=>new a.Context(t)})}e.getOriginal=i,e.functionHooks=a,e.objectHooks=function(t,e){const o="function"==typeof t?t.prototype:t;return Array.isArray(e)?n.setMiddleware(o,e):Object.keys(e).reduce(((t,r)=>{const s=o[r];if("function"!=typeof s)throw new Error(`Can not apply hooks. '${r}' is not a function`);const i=n.convertOptions(e[r]);return t[r]=a(s,i.props({method:r})),t}),o)},e.hookDecorator=t=>(e,o,r)=>{const s=n.convertOptions(t);if(!r)return n.setManager(e.prototype,s),e;const i=r.value;if("function"!=typeof i)throw new Error(`Can not apply hooks. '${o}' is not a function`);return r.value=a(i,s.props({method:o})),r}},920:function(t,e,o){var r=this&&this.__createBinding||(Object.create?function(t,e,o,r){void 0===r&&(r=o),Object.defineProperty(t,r,{enumerable:!0,get:function(){return e[o]}})}:function(t,e,o,r){void 0===r&&(r=o),t[r]=e[o]}),n=this&&this.__exportStar||function(t,e){for(var o in t)"default"===o||Object.prototype.hasOwnProperty.call(e,o)||r(e,t,o)};Object.defineProperty(e,"__esModule",{value:!0}),e.hooks=e.middleware=void 0;const s=o(150),i=o(460);n(o(460),e),n(o(85),e),n(o(150),e),e.middleware=function(t,e){const o=(new s.HookManager).middleware(t);return e&&(e.params&&o.params(...e.params),e.defaults&&o.defaults(e.defaults),e.props&&o.props(e.props)),o},e.hooks=function(...t){const[e,o]=t;return"function"==typeof e&&(o instanceof s.HookManager||Array.isArray(o)||1===t.length)?i.functionHooks(e,o):2===t.length?i.objectHooks(e,o):i.hookDecorator(e)}},930:(t,e)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.copyFnProperties=e.copyProperties=e.copyToSelf=void 0;const o=Object.prototype,r="function"==typeof o.__lookupGetter__&&"function"==typeof o.__defineGetter__&&"function"==typeof o.__defineSetter__;e.copyToSelf=function(t){for(const e in t)if(!t.hasOwnProperty(e)){const o=r?t.constructor.prototype.__lookupGetter__(e):Object.getOwnPropertyDescriptor(t,e);if(r&&o){t.__defineGetter__(e,o);const r=t.constructor.prototype.__lookupSetter__(e);r&&t.__defineSetter__(e,r)}else o?Object.defineProperty(t,e,o):t[e]=t[e]}},e.copyProperties=function(t,...e){for(const o of e){const e=Object.keys(o).concat(Object.getOwnPropertySymbols(o));for(const r of e){const e=Object.getOwnPropertyDescriptor(o,r);t.hasOwnProperty(r)||Object.defineProperty(t,r,e)}}return t},e.copyFnProperties=function(t,e){const o=["name","length"];try{for(const r of o){const o=e[r];Object.defineProperty(t,r,{value:o})}}catch(t){}return t}}},e={};return function o(r){if(e[r])return e[r].exports;var n=e[r]={exports:{}};return t[r].call(n.exports,n,n.exports,o),n.exports}(920)})()})); |
@@ -46,2 +46,3 @@ "use strict"; | ||
}; | ||
utils_1.copyFnProperties(wrapper, fn); | ||
utils_1.copyProperties(wrapper, fn); | ||
@@ -48,0 +49,0 @@ base_1.setManager(wrapper, manager); |
@@ -21,2 +21,3 @@ import { Middleware } from './compose'; | ||
* @param mw The list of middleware | ||
* @param options Middleware options (params, default, props) | ||
*/ | ||
@@ -32,3 +33,3 @@ export declare function middleware(mw?: Middleware[], options?: MiddlewareOptions): HookManager; | ||
*/ | ||
export declare function hooks<F, T = any>(fn: F, manager: HookManager): WrappedFunction<F, T>; | ||
export declare function hooks<F, T = any>(fn: F & (() => void), manager?: HookManager): WrappedFunction<F, T>; | ||
/** | ||
@@ -43,4 +44,4 @@ * Add hooks to one or more methods on an object or class. | ||
* Decorate a class method with hooks. | ||
* @param _manager The hooks settings | ||
* @param manager The hooks settings | ||
*/ | ||
export declare function hooks<T = any>(_manager?: HookOptions): any; | ||
export declare function hooks<T = any>(manager?: HookOptions): any; |
@@ -22,2 +22,3 @@ "use strict"; | ||
* @param mw The list of middleware | ||
* @param options Middleware options (params, default, props) | ||
*/ | ||
@@ -43,3 +44,3 @@ function middleware(mw, options) { | ||
const [target, _hooks] = args; | ||
if (typeof target === 'function' && (_hooks instanceof base_1.HookManager || Array.isArray(_hooks))) { | ||
if (typeof target === 'function' && (_hooks instanceof base_1.HookManager || Array.isArray(_hooks) || args.length === 1)) { | ||
return hooks_1.functionHooks(target, _hooks); | ||
@@ -46,0 +47,0 @@ } |
export declare function copyToSelf(target: any): void; | ||
export declare function copyProperties<F>(target: F, ...originals: any[]): F; | ||
export declare function copyFnProperties<F>(target: F, original: any): F; |
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.copyProperties = exports.copyToSelf = void 0; | ||
exports.copyFnProperties = exports.copyProperties = exports.copyToSelf = void 0; | ||
const proto = Object.prototype; | ||
@@ -47,2 +47,16 @@ // These are non-standard but offer a more reliable prototype based | ||
exports.copyProperties = copyProperties; | ||
function copyFnProperties(target, original) { | ||
const internalProps = ['name', 'length']; | ||
try { | ||
for (const prop of internalProps) { | ||
const value = original[prop]; | ||
Object.defineProperty(target, prop, { value }); | ||
} | ||
} | ||
catch (e) { | ||
// Avoid IE error | ||
} | ||
return target; | ||
} | ||
exports.copyFnProperties = copyFnProperties; | ||
//# sourceMappingURL=utils.js.map |
{ | ||
"name": "@feathersjs/hooks", | ||
"version": "0.6.3", | ||
"version": "0.6.4", | ||
"description": "Async middleware for JavaScript and TypeScript", | ||
@@ -69,3 +69,3 @@ "homepage": "https://feathersjs.com", | ||
}, | ||
"gitHead": "9ec49e295bce9a2ba135ef4a0d78f2ffab492adc" | ||
"gitHead": "6c63cbe628aa878d87e5ed4722d84910b6144623" | ||
} |
@@ -5,3 +5,3 @@ import { compose, Middleware } from './compose'; | ||
} from './base'; | ||
import { copyProperties } from './utils'; | ||
import { copyFnProperties, copyProperties } from './utils'; | ||
@@ -55,2 +55,3 @@ export function getOriginal (fn: any): any { | ||
copyFnProperties(wrapper, fn); | ||
copyProperties(wrapper, fn); | ||
@@ -57,0 +58,0 @@ setManager(wrapper, manager); |
@@ -28,2 +28,3 @@ import { Middleware } from './compose'; | ||
* @param mw The list of middleware | ||
* @param options Middleware options (params, default, props) | ||
*/ | ||
@@ -59,3 +60,4 @@ export function middleware (mw?: Middleware[], options?: MiddlewareOptions) { | ||
export function hooks<F, T = any> ( | ||
fn: F, manager: HookManager | ||
fn: F&(() => void), | ||
manager?: HookManager | ||
): WrappedFunction<F, T>; | ||
@@ -73,6 +75,6 @@ | ||
* Decorate a class method with hooks. | ||
* @param _manager The hooks settings | ||
* @param manager The hooks settings | ||
*/ | ||
export function hooks<T = any> ( | ||
_manager?: HookOptions | ||
manager?: HookOptions | ||
): any; | ||
@@ -84,3 +86,3 @@ | ||
if (typeof target === 'function' && (_hooks instanceof HookManager || Array.isArray(_hooks))) { | ||
if (typeof target === 'function' && (_hooks instanceof HookManager || Array.isArray(_hooks) || args.length === 1)) { | ||
return functionHooks(target, _hooks); | ||
@@ -87,0 +89,0 @@ } |
@@ -48,1 +48,17 @@ const proto = Object.prototype as any; | ||
} | ||
export function copyFnProperties <F> (target: F, original : any) { | ||
const internalProps = ['name', 'length']; | ||
try { | ||
for (const prop of internalProps) { | ||
const value = original[prop]; | ||
Object.defineProperty(target, prop, { value }); | ||
} | ||
} catch (e) { | ||
// Avoid IE error | ||
} | ||
return target; | ||
} |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
75362
1301