framework-utils
Advanced tools
Comparing version
@@ -6,21 +6,27 @@ export declare function prefixNames(prefix: string, ...classNames: string[]): string; | ||
export declare function Properties(properties: any[], action: (prototype: any, property: string) => any): (component: any) => void; | ||
export declare function withMethods(methods: string[], duplicate?: { | ||
export declare function withMethods(methods: readonly string[], duplicate?: { | ||
[name: string]: string; | ||
}): (prototype: any, propertyName: string) => void; | ||
export declare type ParametersType<T, R> = T extends (...params: infer U) => any ? (...params: U) => R : never; | ||
export declare type ExcludeInterface<T, U> = { | ||
[key in (Exclude<keyof T, keyof U>)]: T[key]; | ||
export declare type ParametersType<Func, Return> = Func extends (...params: infer Params) => any ? (...params: Params) => Return : never; | ||
export declare type ExcludeInterface<Obj1, Obj2> = { | ||
[key in Exclude<keyof Obj1, keyof Obj2>]: Obj1[key]; | ||
}; | ||
export declare type Entries<T extends { | ||
export declare type Entries<Obj extends { | ||
[key: string]: any; | ||
}, U = keyof T> = U extends string ? [U, T[U]] : never; | ||
export declare type ReverseKey<T extends string, U extends { | ||
}, Key = keyof Obj> = Key extends string ? [Key, Obj[Key]] : never; | ||
export declare type ReverseKey<Key extends string, Obj extends { | ||
[key: string]: any; | ||
}, E = Entries<U>> = E extends [infer K, T] ? K : never; | ||
export declare type MethodInterface<T, U extends T, R extends any, Duplicate extends { | ||
}, E = Entries<Obj>> = E extends [infer Value, Key] ? Value : never; | ||
export declare type UniqueMethodInterface<Methods, Target extends Methods, ReturnTarget extends any, Duplicate extends { | ||
[key: string]: any; | ||
} = {}> = { | ||
[key in keyof ExcludeInterface<T, Duplicate>]: T[key] extends (...params: any[]) => U ? ParametersType<T[key], R> : T[key]; | ||
} & { | ||
[key in Duplicate[keyof Duplicate]]: T[ReverseKey<key, Duplicate> & keyof T] extends (...params: any[]) => U ? ParametersType<T[ReverseKey<key, Duplicate> & keyof T], R> : T[ReverseKey<key, Duplicate> & keyof T]; | ||
}> = { | ||
[key in keyof ExcludeInterface<Methods, Duplicate>]: Methods[key] extends (...params: any[]) => Target ? ParametersType<Methods[key], ReturnTarget> : Methods[key]; | ||
}; | ||
export declare type ChangedMethodInterface<Methods, Target extends Methods, ReturnTarget extends any, Duplicate extends { | ||
[key: string]: any; | ||
}> = { | ||
[key in Duplicate[keyof Duplicate]]: Methods[ReverseKey<key, Duplicate> & keyof Methods] extends (...params: any[]) => Target ? ParametersType<Methods[ReverseKey<key, Duplicate> & keyof Methods], ReturnTarget> : Methods[ReverseKey<key, Duplicate> & keyof Methods]; | ||
}; | ||
export declare type MethodInterface<Methods, Target extends Methods, ReturnTarget extends any, Duplicate extends { | ||
[key: string]: any; | ||
} = {}> = UniqueMethodInterface<Methods, Target, ReturnTarget, Duplicate> & ChangedMethodInterface<Methods, Target, ReturnTarget, Duplicate>; |
@@ -7,3 +7,3 @@ /* | ||
repository: git+https://github.com/daybrush/framework-utils.git | ||
version: 0.3.4 | ||
version: 1.0.0 | ||
*/ | ||
@@ -26,3 +26,3 @@ 'use strict'; | ||
function prefixCSS(prefix, css) { | ||
return css.replace(/([^}{]*){/mg, function (_, selector) { | ||
return css.replace(/([^}{]*){/gm, function (_, selector) { | ||
return selector.replace(/\.([^{,\s\d.]+)/g, "." + prefix + "$1") + "{"; | ||
@@ -64,3 +64,3 @@ }); | ||
if (prototype[methodName]) { | ||
if (methodName in prototype) { | ||
return; | ||
@@ -67,0 +67,0 @@ } |
@@ -7,3 +7,3 @@ /* | ||
repository: git+https://github.com/daybrush/framework-utils.git | ||
version: 0.3.4 | ||
version: 1.0.0 | ||
*/ | ||
@@ -24,3 +24,3 @@ function prefixNames(prefix) { | ||
function prefixCSS(prefix, css) { | ||
return css.replace(/([^}{]*){/mg, function (_, selector) { | ||
return css.replace(/([^}{]*){/gm, function (_, selector) { | ||
return selector.replace(/\.([^{,\s\d.]+)/g, "." + prefix + "$1") + "{"; | ||
@@ -62,3 +62,3 @@ }); | ||
if (prototype[methodName]) { | ||
if (methodName in prototype) { | ||
return; | ||
@@ -65,0 +65,0 @@ } |
{ | ||
"name": "framework-utils", | ||
"version": "0.3.4", | ||
"version": "1.0.0", | ||
"description": "utils for framework", | ||
@@ -5,0 +5,0 @@ "main": "./dist/utils.cjs.js", |
export function prefixNames(prefix: string, ...classNames: string[]) { | ||
return classNames.map( | ||
className => className.split(" ").map(name => name ? `${prefix}${name}` : "").join(" "), | ||
).join(" "); | ||
return classNames | ||
.map((className) => | ||
className | ||
.split(" ") | ||
.map((name) => (name ? `${prefix}${name}` : "")) | ||
.join(" ") | ||
) | ||
.join(" "); | ||
} | ||
export function prefixCSS(prefix: string, css: string) { | ||
return css.replace(/([^}{]*){/mg, (_, selector) => { | ||
return css.replace(/([^}{]*){/gm, (_, selector) => { | ||
return `${selector.replace(/\.([^{,\s\d.]+)/g, `.${prefix}$1`)}{`; | ||
@@ -26,7 +31,10 @@ }); | ||
/* Class Decorator */ | ||
export function Properties(properties: any[], action: (prototype: any, property: string) => any) { | ||
export function Properties( | ||
properties: any[], | ||
action: (prototype: any, property: string) => any | ||
) { | ||
return (component: any) => { | ||
const prototype = component.prototype; | ||
properties.forEach(property => { | ||
properties.forEach((property) => { | ||
action(prototype, property); | ||
@@ -38,11 +46,14 @@ }); | ||
/* Property Decorator */ | ||
export function withMethods(methods: string[], duplicate: { [name: string]: string } = {}) { | ||
export function withMethods( | ||
methods: readonly string[], | ||
duplicate: { [name: string]: string } = {} | ||
) { | ||
return (prototype: any, propertyName: string) => { | ||
methods.forEach(name => { | ||
methods.forEach((name) => { | ||
const methodName = duplicate[name] || name; | ||
if (prototype[methodName]) { | ||
if (methodName in prototype) { | ||
return; | ||
} | ||
prototype[methodName] = function(...args) { | ||
prototype[methodName] = function (...args) { | ||
const result = this[propertyName][name](...args); | ||
@@ -60,18 +71,57 @@ | ||
export type ParametersType<T, R> = T extends (...params: infer U) => any ? (...params: U) => R : never; | ||
export type ExcludeInterface<T, U> = { | ||
[key in (Exclude<keyof T, keyof U>)]: T[key]; | ||
export type ParametersType<Func, Return> = Func extends ( | ||
...params: infer Params | ||
) => any | ||
? (...params: Params) => Return | ||
: never; | ||
export type ExcludeInterface<Obj1, Obj2> = { | ||
[key in Exclude<keyof Obj1, keyof Obj2>]: Obj1[key]; | ||
}; | ||
export type Entries<T extends { [key: string]: any }, U = keyof T> = U extends string ? [U, T[U]] : never; | ||
export type ReverseKey<T extends string, U extends { [key: string]: any }, E = Entries<U>> | ||
= E extends [infer K, T] ? K : never; | ||
export type MethodInterface<T, U extends T, R extends any, Duplicate extends { [key: string]: any } = {}> = { | ||
[key in keyof ExcludeInterface<T, Duplicate>]: | ||
T[key] extends (...params: any[]) => U ? ParametersType<T[key], R> : T[key]; | ||
} & { | ||
[key in Duplicate[keyof Duplicate]]: | ||
T[ReverseKey<key, Duplicate> & keyof T] extends (...params: any[]) => U | ||
? ParametersType<T[ReverseKey<key, Duplicate> & keyof T], R> | ||
: T[ReverseKey<key, Duplicate> & keyof T]; | ||
export type Entries< | ||
Obj extends { [key: string]: any }, | ||
Key = keyof Obj | ||
> = Key extends string ? [Key, Obj[Key]] : never; | ||
export type ReverseKey< | ||
Key extends string, | ||
Obj extends { [key: string]: any }, | ||
E = Entries<Obj> | ||
> = E extends [infer Value, Key] ? Value : never; | ||
export type UniqueMethodInterface< | ||
Methods, | ||
Target extends Methods, | ||
ReturnTarget extends any, | ||
Duplicate extends { [key: string]: any } | ||
> = { | ||
[key in keyof ExcludeInterface<Methods, Duplicate>]: Methods[key] extends ( | ||
...params: any[] | ||
) => Target | ||
? ParametersType<Methods[key], ReturnTarget> | ||
: Methods[key]; | ||
}; | ||
export type ChangedMethodInterface< | ||
Methods, | ||
Target extends Methods, | ||
ReturnTarget extends any, | ||
Duplicate extends { [key: string]: any } | ||
> = { | ||
[key in Duplicate[keyof Duplicate]]: Methods[ReverseKey<key, Duplicate> & | ||
keyof Methods] extends (...params: any[]) => Target | ||
? ParametersType< | ||
Methods[ReverseKey<key, Duplicate> & keyof Methods], | ||
ReturnTarget | ||
> | ||
: Methods[ReverseKey<key, Duplicate> & keyof Methods]; | ||
}; | ||
export type MethodInterface< | ||
Methods, | ||
Target extends Methods, | ||
ReturnTarget extends any, | ||
Duplicate extends { [key: string]: any } = {} | ||
> = UniqueMethodInterface<Methods, Target, ReturnTarget, Duplicate> & | ||
ChangedMethodInterface<Methods, Target, ReturnTarget, Duplicate>; |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
No v1
QualityPackage is not semver >=1. This means it is not stable and does not support ^ ranges.
Found 1 instance in 1 package
28159
13.22%426
13.6%0
-100%