@poppinss/utils
Advanced tools
Comparing version 4.0.4 to 5.0.0
declare type Constructor = new (...args: any[]) => any; | ||
/** | ||
* Converting unions to intersection | ||
*/ | ||
declare type UnionToIntersection<T> = (T extends any ? (x: T) => any : never) extends (x: infer R) => any ? R : never; | ||
/** | ||
* Normalizes constructor to work with mixins. There is an open bug for mixins | ||
@@ -15,2 +11,5 @@ * to allow constructors other than `...args: any[]` | ||
} & Omit<T, 'constructor'>; | ||
export interface UnaryFunction<T, R> { | ||
(source: T): R; | ||
} | ||
/** | ||
@@ -21,3 +20,11 @@ * Compose a class by applying mixins to it. | ||
*/ | ||
export declare const compose: <SuperClass extends Constructor, M extends ((superclass: SuperClass) => Constructor)[]>(superclass: SuperClass, ...mixins: M) => SuperClass & UnionToIntersection<ReturnType<M[number]>>; | ||
export declare function compose<T extends Constructor, A>(superclass: T, mixin: UnaryFunction<T, A>): A; | ||
export declare function compose<T extends Constructor, A, B>(superclass: T, mixin: UnaryFunction<T, A>, mixinB: UnaryFunction<A, B>): B; | ||
export declare function compose<T extends Constructor, A, B, C>(superclass: T, mixin: UnaryFunction<T, A>, mixinB: UnaryFunction<A, B>, mixinC: UnaryFunction<B, C>): C; | ||
export declare function compose<T extends Constructor, A, B, C, D>(superclass: T, mixin: UnaryFunction<T, A>, mixinB: UnaryFunction<A, B>, mixinC: UnaryFunction<B, C>, mixinD: UnaryFunction<C, D>): D; | ||
export declare function compose<T extends Constructor, A, B, C, D, E>(superclass: T, mixin: UnaryFunction<T, A>, mixinB: UnaryFunction<A, B>, mixinC: UnaryFunction<B, C>, mixinD: UnaryFunction<C, D>, mixinE: UnaryFunction<D, E>): E; | ||
export declare function compose<T extends Constructor, A, B, C, D, E, F>(superclass: T, mixin: UnaryFunction<T, A>, mixinB: UnaryFunction<A, B>, mixinC: UnaryFunction<B, C>, mixinD: UnaryFunction<C, D>, mixinF: UnaryFunction<E, F>): F; | ||
export declare function compose<T extends Constructor, A, B, C, D, E, F, G>(superclass: T, mixin: UnaryFunction<T, A>, mixinB: UnaryFunction<A, B>, mixinC: UnaryFunction<B, C>, mixinD: UnaryFunction<C, D>, mixinF: UnaryFunction<E, F>, mixinG: UnaryFunction<F, G>): G; | ||
export declare function compose<T extends Constructor, A, B, C, D, E, F, G, H>(superclass: T, mixin: UnaryFunction<T, A>, mixinB: UnaryFunction<A, B>, mixinC: UnaryFunction<B, C>, mixinD: UnaryFunction<C, D>, mixinF: UnaryFunction<E, F>, mixinG: UnaryFunction<F, G>, mixinH: UnaryFunction<G, H>): H; | ||
export declare function compose<T extends Constructor, A, B, C, D, E, F, G, H, I>(superclass: T, mixin: UnaryFunction<T, A>, mixinB: UnaryFunction<A, B>, mixinC: UnaryFunction<B, C>, mixinD: UnaryFunction<C, D>, mixinF: UnaryFunction<E, F>, mixinG: UnaryFunction<F, G>, mixinH: UnaryFunction<G, H>, mixinI: UnaryFunction<H, I>): I; | ||
export {}; |
@@ -12,10 +12,5 @@ "use strict"; | ||
exports.compose = void 0; | ||
/** | ||
* Compose a class by applying mixins to it. | ||
* The code is inspired by https://justinfagnani.com/2015/12/21/real-mixins-with-javascript-classes/, its | ||
* just that I have added the support for static types too. | ||
*/ | ||
const compose = (superclass, ...mixins) => { | ||
function compose(superclass, ...mixins) { | ||
return mixins.reduce((c, mixin) => mixin(c), superclass); | ||
}; | ||
} | ||
exports.compose = compose; |
{ | ||
"name": "@poppinss/utils", | ||
"version": "4.0.4", | ||
"version": "5.0.0", | ||
"description": "Handy utilities for repetitive work", | ||
@@ -5,0 +5,0 @@ "main": "build/index.js", |
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
112704
2171