0.1.2 #3

Merged
Thilawyn merged 28 commits from next into master 2025-07-23 21:28:25 +02:00
Showing only changes of commit 77abffc8ff - Show all commits

View File

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