react-fast-hoc
Advanced tools
Comparing version
# react-fast-hoc | ||
## 0.2.0 | ||
### Minor Changes | ||
- 309bcff: Add oportunity to transform component directly, not only props | ||
## 0.1.7 | ||
@@ -4,0 +10,0 @@ |
@@ -1,2 +0,2 @@ | ||
import { Objects, Booleans, Fn, Pipe } from 'hotscript'; | ||
import { ComposeLeft, Objects, Booleans, Fn, Call, Identity } from 'hotscript'; | ||
import * as React$1 from 'react'; | ||
@@ -8,6 +8,3 @@ import React__default, { ComponentPropsWithRef, ComponentType, MemoExoticComponent, ForwardRefExoticComponent, FunctionComponent, ElementType, ReactNode } from 'react'; | ||
*/ | ||
type TransformPropsReturn<TComponent extends React.ComponentType<any>, TNewProps extends PropsBase> = WrappedComponent<[ | ||
Objects.OmitBy<Booleans.Not<never>>, | ||
Objects.Assign<TNewProps> | ||
], any, TComponent>; | ||
type TransformPropsReturn<TComponent extends React.ComponentType<any>, TNewProps extends PropsBase> = WrappedComponent<ComposeLeft<[Objects.OmitBy<Booleans.Not<never>>, Objects.Assign<TNewProps>]>, any, TComponent>; | ||
type TransformProps = <TComponent extends React.ComponentType<any>, TNewProps extends PropsBase = ComponentPropsWithRef<TComponent>, TPreviousProps extends ComponentPropsWithRef<TComponent> = ComponentPropsWithRef<TComponent>>(Component: TComponent, transformer: (props: TNewProps) => TPreviousProps, options?: CreateHocComponentOptions) => TransformPropsReturn<TComponent, TNewProps>; | ||
@@ -22,3 +19,7 @@ type PropsBase = Record<string | number | symbol, any>; | ||
*/ | ||
type WrappedComponent<TPipeTransform extends Fn[], TComponentPropsExtends extends object, TComponent extends ComponentType<any>, TComputedProps extends TComponentPropsExtends = TComponent extends ElementType<any> ? ComponentPropsWithRef<TComponent> : never> = ChangeComponentProps<TComponent, Pipe<TComputedProps, TPipeTransform>>; | ||
type WrappedComponent<TPipeTransform extends Fn, TComponentPropsExtends extends object, TComponent extends ComponentType<any>, TComputedProps extends TComponentPropsExtends = TComponent extends ElementType<any> ? ComponentPropsWithRef<TComponent> : never> = ChangeComponentProps<TComponent, Call<TPipeTransform, TComputedProps>>; | ||
type HocTypeTransform<TType extends "props" | "component", T extends Fn> = { | ||
type: TType; | ||
fn: T; | ||
}; | ||
/** | ||
@@ -28,4 +29,4 @@ * Higher-order component that wraps the input component | ||
*/ | ||
type WrappedComponentCreator<TPipeTransform extends Fn[], TComponentPropsExtends extends object> = <TComponent extends ComponentType<any> = React.FC<any>>(component: TComponent) => WrappedComponent<TPipeTransform, TComponentPropsExtends, TComponent>; | ||
type CreateHocReturn<TPipeTransform extends Fn[], TComponentPropsExtends extends PropsBase = PropsBase> = WrappedComponentCreator<TPipeTransform, TComponentPropsExtends>; | ||
type WrappedComponentCreator<TPipeTransform extends HocTypeTransform<any, any>, TComponentPropsExtends extends object> = <TComponent extends ComponentType<any> = React.FC<any>>(component: TComponent) => TPipeTransform extends HocTypeTransform<"props", infer TPropsTransform> ? WrappedComponent<TPropsTransform, TComponentPropsExtends, TComponent> : TPipeTransform extends HocTypeTransform<"component", infer TComponentTransform> ? Call<TComponentTransform, TComponent> : never; | ||
type CreateHocReturn<TPipeTransform extends HocTypeTransform<any, any>, TComponentPropsExtends extends PropsBase = PropsBase> = WrappedComponentCreator<TPipeTransform, TComponentPropsExtends>; | ||
type PropsTransformer = (props: Record<string | symbol | number, unknown>) => Record<string | symbol | number, unknown>; | ||
@@ -61,3 +62,3 @@ type CreateHocComponentOptions = ({ | ||
*/ | ||
declare const createHoc: <TPipeTransform extends Fn[], ComponentPropsExtends extends PropsBase = PropsBase>(params: CreateHocOptions) => CreateHocReturn<TPipeTransform, ComponentPropsExtends>; | ||
declare const createHoc: <TPipeTransform extends Fn[] | HocTypeTransform<any, any>, ComponentPropsExtends extends PropsBase = PropsBase, TActualTransform extends HocTypeTransform<any, any> = TPipeTransform extends Fn[] ? HocTypeTransform<"props", ComposeLeft<TPipeTransform>> : TPipeTransform>(params: CreateHocOptions) => CreateHocReturn<TActualTransform, ComponentPropsExtends>; | ||
@@ -78,3 +79,3 @@ /** | ||
*/ | ||
declare const createTransformProps: <TPipeTransform extends Fn[] = [], ComponentPropsExtends extends PropsBase = PropsBase>(propsTransformer: PropsTransformer, options?: CreateHocComponentOptions) => CreateHocReturn<TPipeTransform, ComponentPropsExtends>; | ||
declare const createTransformProps: <TPipeTransform extends Fn[] | HocTypeTransform<any, any> = HocTypeTransform<"props", Identity>, ComponentPropsExtends extends PropsBase = PropsBase, TActualTransform extends HocTypeTransform<any, any> = TPipeTransform extends Fn[] ? HocTypeTransform<"props", ComposeLeft<TPipeTransform>> : TPipeTransform>(propsTransformer: PropsTransformer, options?: CreateHocComponentOptions) => CreateHocReturn<TActualTransform extends Fn[] ? HocTypeTransform<"props", ComposeLeft<TActualTransform>> : TActualTransform, ComponentPropsExtends>; | ||
@@ -125,4 +126,4 @@ declare class HocTransformer implements ProxyHandler<Function> { | ||
*/ | ||
declare const wrapIntoProxy: (proxy: ProxyHandler<Function>) => <T extends React$1.ComponentType<{}>>(Component: T) => WrappedComponent<[], PropsBase, T>; | ||
declare const wrapIntoProxy: (proxy: ProxyHandler<Function>) => <T extends React$1.ComponentType<{}>>(Component: T) => WrappedComponent<Identity, PropsBase, T>; | ||
export { ChangeComponentProps, CreateHocComponentOptions, CreateHocOptions, CreateHocReturn, HocTransformer, MimicToNewComponentHandler, PropsBase, PropsTransformer, RewriteCall, TransformProps, TransformPropsReturn, WrappedComponent, WrappedComponentCreator, createHoc, createTransformProps, transformProps, wrapIntoProxy }; | ||
export { ChangeComponentProps, CreateHocComponentOptions, CreateHocOptions, CreateHocReturn, HocTransformer, HocTypeTransform, MimicToNewComponentHandler, PropsBase, PropsTransformer, RewriteCall, TransformProps, TransformPropsReturn, WrappedComponent, WrappedComponentCreator, createHoc, createTransformProps, transformProps, wrapIntoProxy }; |
{ | ||
"name": "react-fast-hoc", | ||
"license": "MIT", | ||
"version": "0.1.7", | ||
"version": "0.2.0", | ||
"sideEffects": false, | ||
@@ -6,0 +6,0 @@ "type": "module", |
@@ -1,7 +0,14 @@ | ||
import type { Fn } from "hotscript"; | ||
import type { ComposeLeft, Fn } from "hotscript"; | ||
import type { ComponentType } from "react"; | ||
import { HocTransformer, MimicToNewComponentHandler } from "./handlers"; | ||
import { wrapComponentIntoHoc, wrapPropsTransformer } from "./internals"; | ||
import type { CreateHocOptions, CreateHocReturn, PropsBase } from "./type"; | ||
import type { | ||
CreateHocOptions, | ||
CreateHocReturn, | ||
HocTypeTransform, | ||
PropsBase, | ||
} from "./type"; | ||
type PropsTransformPipe = Fn[]; | ||
/** | ||
@@ -14,4 +21,7 @@ * @description *Transformations is not typesafe, you should [hotscript](https://github.com/gvergnaud/HOTScript) for type transformation* | ||
export const createHoc = < | ||
TPipeTransform extends Fn[], | ||
ComponentPropsExtends extends PropsBase = PropsBase | ||
TPipeTransform extends Fn[] | HocTypeTransform<any, any>, | ||
ComponentPropsExtends extends PropsBase = PropsBase, | ||
TActualTransform extends HocTypeTransform<any, any> = TPipeTransform extends Fn[] | ||
? HocTypeTransform<"props", ComposeLeft<TPipeTransform>> | ||
: TPipeTransform | ||
>( | ||
@@ -38,3 +48,3 @@ params: CreateHocOptions | ||
mimicToHandler | ||
)) as CreateHocReturn<TPipeTransform, ComponentPropsExtends>; | ||
)) as CreateHocReturn<TActualTransform, ComponentPropsExtends>; | ||
}; |
@@ -1,5 +0,6 @@ | ||
import type { Fn } from "hotscript"; | ||
import type { ComposeLeft, Fn, Identity } from "hotscript"; | ||
import { createHoc } from "./createHoc"; | ||
import type { | ||
CreateHocComponentOptions, | ||
HocTypeTransform, | ||
PropsBase, | ||
@@ -25,4 +26,10 @@ PropsTransformer, | ||
export const createTransformProps = < | ||
TPipeTransform extends Fn[] = [], | ||
ComponentPropsExtends extends PropsBase = PropsBase | ||
TPipeTransform extends Fn[] | HocTypeTransform<any, any> = HocTypeTransform< | ||
"props", | ||
Identity | ||
>, | ||
ComponentPropsExtends extends PropsBase = PropsBase, | ||
TActualTransform extends HocTypeTransform<any, any> = TPipeTransform extends Fn[] | ||
? HocTypeTransform<"props", ComposeLeft<TPipeTransform>> | ||
: TPipeTransform | ||
>( | ||
@@ -32,3 +39,3 @@ propsTransformer: PropsTransformer, | ||
) => | ||
createHoc<TPipeTransform, ComponentPropsExtends>({ | ||
createHoc<TActualTransform, ComponentPropsExtends>({ | ||
propsTransformer, | ||
@@ -35,0 +42,0 @@ resultTransformer: null, |
@@ -1,2 +0,2 @@ | ||
import type { Booleans, Fn, Objects, Pipe } from "hotscript"; | ||
import type { Booleans, Call, ComposeLeft, Fn, Objects } from "hotscript"; | ||
import type { | ||
@@ -19,3 +19,3 @@ ComponentPropsWithRef, | ||
> = WrappedComponent< | ||
[Objects.OmitBy<Booleans.Not<never>>, Objects.Assign<TNewProps>], | ||
ComposeLeft<[Objects.OmitBy<Booleans.Not<never>>, Objects.Assign<TNewProps>]>, | ||
any, | ||
@@ -60,3 +60,3 @@ TComponent | ||
export type WrappedComponent< | ||
TPipeTransform extends Fn[], | ||
TPipeTransform extends Fn, | ||
TComponentPropsExtends extends object, | ||
@@ -67,4 +67,12 @@ TComponent extends ComponentType<any>, | ||
: never | ||
> = ChangeComponentProps<TComponent, Pipe<TComputedProps, TPipeTransform>>; | ||
> = ChangeComponentProps<TComponent, Call<TPipeTransform, TComputedProps>>; | ||
export type HocTypeTransform< | ||
TType extends "props" | "component", | ||
T extends Fn | ||
> = { | ||
type: TType; | ||
fn: T; | ||
}; | ||
/** | ||
@@ -75,10 +83,17 @@ * Higher-order component that wraps the input component | ||
export type WrappedComponentCreator< | ||
TPipeTransform extends Fn[], | ||
TPipeTransform extends HocTypeTransform<any, any>, | ||
TComponentPropsExtends extends object | ||
> = <TComponent extends ComponentType<any> = React.FC<any>>( | ||
component: TComponent | ||
) => WrappedComponent<TPipeTransform, TComponentPropsExtends, TComponent>; | ||
) => TPipeTransform extends HocTypeTransform<"props", infer TPropsTransform> | ||
? WrappedComponent<TPropsTransform, TComponentPropsExtends, TComponent> | ||
: TPipeTransform extends HocTypeTransform< | ||
"component", | ||
infer TComponentTransform | ||
> | ||
? Call<TComponentTransform, TComponent> | ||
: never; | ||
export type CreateHocReturn< | ||
TPipeTransform extends Fn[], | ||
TPipeTransform extends HocTypeTransform<any, any>, | ||
TComponentPropsExtends extends PropsBase = PropsBase | ||
@@ -85,0 +100,0 @@ > = WrappedComponentCreator<TPipeTransform, TComponentPropsExtends>; |
@@ -0,1 +1,2 @@ | ||
import { Identity } from "hotscript"; | ||
import type { HocTransformer } from "./handlers"; | ||
@@ -15,2 +16,2 @@ import { wrapComponentIntoHoc } from "./internals"; | ||
null | ||
) as WrappedComponent<[], PropsBase, T>; | ||
) as WrappedComponent<Identity, PropsBase, T>; |
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
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
108954
3.11%1456
2.54%