Memo refactoring
All checks were successful
Lint / lint (push) Successful in 12s

This commit is contained in:
Julien Valverdé
2025-07-21 21:55:19 +02:00
parent b5f081044e
commit 77abffc8ff

View File

@@ -340,28 +340,27 @@ export namespace Memoized {
} }
} }
export const memo = <T extends Component<any, any, any>>( export const memo = <T extends Component<any, any, any> | Component<any, any, any> & Memoized<any>>(
self: ExcludeKeys<T, keyof Memoized<Component.Props<T>>> self: T
): T & Memoized<Component.Props<T>> => Object.setPrototypeOf( ): T & Memoized<Component.Props<T>> => Object.setPrototypeOf({
{ ...self, memo: true, memoOptions: {} }, ...self,
Object.getPrototypeOf(self), memo: true,
) memoOptions: Predicate.hasProperty(self, "memo") ? { ...self.memoOptions } : {},
}, Object.getPrototypeOf(self))
export const memoWithOptions: { export const withMemoOptions: {
<T extends Component<any, any, any>>( <T extends Component<any, any, any> & Memoized<any>>(
memoOptions: Partial<Memoized.Options<Component.Props<T>>> memoOptions: Partial<Memoized.Options<Component.Props<T>>>
): ( ): (self: T) => T
self: ExcludeKeys<T, keyof Memoized<Component.Props<T>>> <T extends Component<any, any, any> & Memoized<any>>(
) => T & Memoized<Component.Props<T>> self: T,
<T extends Component<any, any, any>>(
self: ExcludeKeys<T, keyof Memoized<Component.Props<T>>>,
memoOptions: Partial<Memoized.Options<Component.Props<T>>>, memoOptions: Partial<Memoized.Options<Component.Props<T>>>,
): T & Memoized<Component.Props<T>> ): T
} = Function.dual(2, <T extends Component<any, any, any>>( } = Function.dual(2, <T extends Component<any, any, any> & Memoized<any>>(
self: ExcludeKeys<T, keyof Memoized<Component.Props<T>>>, self: T,
memoOptions: Partial<Memoized.Options<Component.Props<T>>>, memoOptions: Partial<Memoized.Options<Component.Props<T>>>,
): T & Memoized<Component.Props<T>> => Object.setPrototypeOf( ): T => Object.setPrototypeOf(
{ ...self, memo: true, memoOptions }, { ...self, memoOptions: { ...self.memoOptions, ...memoOptions } },
Object.getPrototypeOf(self), Object.getPrototypeOf(self),
)) ))