@webiny/react-composition 6.0.0-beta.0 → 6.0.0-rc.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Compose.d.ts +4 -3
- package/Compose.js +63 -21
- package/Compose.js.map +1 -1
- package/CompositionScope.d.ts +9 -3
- package/CompositionScope.js +18 -19
- package/CompositionScope.js.map +1 -1
- package/Context.d.ts +17 -31
- package/Context.js +66 -104
- package/Context.js.map +1 -1
- package/README.md +9 -6
- package/createDecorator.d.ts +6 -6
- package/createDecorator.js +9 -19
- package/createDecorator.js.map +1 -1
- package/decorators.d.ts +7 -14
- package/decorators.js +22 -33
- package/decorators.js.map +1 -1
- package/domain/CompositionStore.d.ts +15 -0
- package/domain/CompositionStore.js +102 -0
- package/domain/CompositionStore.js.map +1 -0
- package/index.d.ts +9 -8
- package/index.js +8 -93
- package/index.js.map +1 -1
- package/makeComposable.d.ts +30 -14
- package/makeComposable.js +6 -14
- package/makeComposable.js.map +1 -1
- package/makeDecoratable.d.ts +10 -15
- package/makeDecoratable.js +29 -44
- package/makeDecoratable.js.map +1 -1
- package/package.json +6 -15
- package/types.d.ts +18 -12
- package/types.js +1 -5
- package/types.js.map +1 -1
package/createDecorator.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["
|
|
1
|
+
{"version":3,"names":["React","Compose","createComponentPlugin","Base","hoc","createDecorator","isDecoratableComponent","decoratable","DecoratorPlugin","createElement","component","with","displayName"],"sources":["createDecorator.tsx"],"sourcesContent":["import React from \"react\";\nimport type {\n CanReturnNullOrElement,\n Decoratable,\n DecoratableComponent,\n DecoratableHook,\n Decorator\n} from \"~/types.js\";\nimport { Compose } from \"~/Compose.js\";\n\ntype GetBaseFunction<T> = T extends DecoratableComponent<infer F> ? F : never;\n\n/**\n * Creates a component which, when mounted, registers a Higher Order Component for the given base component.\n * This is particularly useful for decorating (wrapping) existing composable components.\n * For more information, visit https://www.webiny.com/docs/admin-area/basics/framework.\n */\nexport function createComponentPlugin<T extends Decoratable>(\n Base: T,\n hoc: T extends DecoratableComponent\n ? Decorator<CanReturnNullOrElement<GetBaseFunction<T>>>\n : Decorator<GetBaseFunction<T>>\n) {\n return createDecorator(Base, hoc);\n}\n\n// Maybe there's a better way to mark params as non-existent, but for now I left it as `any`.\n// TODO: revisit this type; not sure if `?` can be handled in one clause\nexport type GetDecorateeParams<T> = T extends (params?: infer P1) => any\n ? P1\n : T extends (params: infer P2) => any\n ? P2\n : any;\n\nexport type GetDecoratee<T> =\n T extends DecoratableHook<infer F> ? F : T extends DecoratableComponent<infer F> ? F : never;\n\nconst isDecoratableComponent = (\n decoratable: DecoratableComponent | DecoratableHook\n): decoratable is DecoratableComponent => {\n return \"displayName\" in decoratable;\n};\n\nexport function createDecorator<T extends Decoratable>(\n Base: T,\n hoc: T extends DecoratableComponent\n ? Decorator<CanReturnNullOrElement<GetBaseFunction<T>>>\n : Decorator<GetBaseFunction<T>>\n) {\n const DecoratorPlugin = () => <Compose component={Base} with={hoc as any} />;\n if (isDecoratableComponent(Base)) {\n DecoratorPlugin.displayName = Base.displayName;\n }\n return DecoratorPlugin;\n}\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AAQzB,SAASC,OAAO;AAIhB;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,qBAAqBA,CACjCC,IAAO,EACPC,GAEmC,EACrC;EACE,OAAOC,eAAe,CAACF,IAAI,EAAEC,GAAG,CAAC;AACrC;;AAEA;AACA;;AAUA,MAAME,sBAAsB,GACxBC,WAAmD,IACb;EACtC,OAAO,aAAa,IAAIA,WAAW;AACvC,CAAC;AAED,OAAO,SAASF,eAAeA,CAC3BF,IAAO,EACPC,GAEmC,EACrC;EACE,MAAMI,eAAe,GAAGA,CAAA,kBAAMR,KAAA,CAAAS,aAAA,CAACR,OAAO;IAACS,SAAS,EAAEP,IAAK;IAACQ,IAAI,EAAEP;EAAW,CAAE,CAAC;EAC5E,IAAIE,sBAAsB,CAACH,IAAI,CAAC,EAAE;IAC9BK,eAAe,CAACI,WAAW,GAAGT,IAAI,CAACS,WAAW;EAClD;EACA,OAAOJ,eAAe;AAC1B","ignoreList":[]}
|
package/decorators.d.ts
CHANGED
|
@@ -1,22 +1,15 @@
|
|
|
1
1
|
import React from "react";
|
|
2
|
-
import { GetDecoratee, GetDecorateeParams } from "./createDecorator";
|
|
3
|
-
import { DecoratableComponent, GenericComponent, Decorator,
|
|
2
|
+
import type { GetDecoratee, GetDecorateeParams } from "./createDecorator.js";
|
|
3
|
+
import type { DecoratableComponent, GenericComponent, Decorator, GenericHook, DecoratableHook, ComponentDecorator } from "./types.js";
|
|
4
4
|
export interface ShouldDecorate<TDecorator = any, TComponent = any> {
|
|
5
5
|
(decoratorProps: TDecorator, componentProps: TComponent): boolean;
|
|
6
6
|
}
|
|
7
7
|
export declare function createConditionalDecorator<TDecoratee extends GenericComponent>(shouldDecorate: ShouldDecorate, decorator: Decorator<TDecoratee>, decoratorProps: unknown): Decorator<TDecoratee>;
|
|
8
|
-
export declare function createDecoratorFactory<TDecorator>(): <TDecoratable extends DecoratableComponent
|
|
9
|
-
export declare function createHookDecoratorFactory(): <TDecoratable extends DecoratableHook
|
|
10
|
-
export declare function withDecoratorFactory<TDecorator>(): <TDecoratable extends DecoratableComponent
|
|
11
|
-
|
|
12
|
-
originalName: string;
|
|
13
|
-
displayName: string;
|
|
14
|
-
} & {
|
|
15
|
-
createDecorator: (decorator: Decorator<CanReturnNull<GetDecoratee<TDecoratable>>>) => (props: TDecorator) => React.JSX.Element;
|
|
8
|
+
export declare function createDecoratorFactory<TDecorator>(): <TDecoratable extends DecoratableComponent>(decoratable: TDecoratable, shouldDecorate?: ShouldDecorate<TDecorator, GetDecorateeParams<GetDecoratee<TDecoratable>>>) => (decorator: ComponentDecorator<GetDecoratee<TDecoratable>>) => (props: TDecorator) => React.JSX.Element;
|
|
9
|
+
export declare function createHookDecoratorFactory(): <TDecoratable extends DecoratableHook>(decoratable: TDecoratable) => (decorator: Decorator<GetDecoratee<TDecoratable>>) => () => React.JSX.Element;
|
|
10
|
+
export declare function withDecoratorFactory<TDecorator>(): <TDecoratable extends DecoratableComponent>(Component: TDecoratable, shouldDecorate?: ShouldDecorate<TDecorator, GetDecorateeParams<GetDecoratee<TDecoratable>>>) => TDecoratable & {
|
|
11
|
+
createDecorator: (decorator: ComponentDecorator<GetDecoratee<TDecoratable>>) => (props: TDecorator) => React.JSX.Element;
|
|
16
12
|
};
|
|
17
|
-
export declare function withHookDecoratorFactory(): <TDecoratable extends DecoratableHook
|
|
18
|
-
original: GenericHook<GetDecorateeParams<GetDecoratee<TDecoratable>>, ReturnType<GetDecoratee<TDecoratable>>>;
|
|
19
|
-
originalName: string;
|
|
20
|
-
} & {
|
|
13
|
+
export declare function withHookDecoratorFactory(): <TDecoratable extends DecoratableHook>(hook: TDecoratable) => DecoratableHook<GenericHook<GetDecorateeParams<GetDecoratee<TDecoratable>>, ReturnType<GetDecoratee<TDecoratable>>>> & {
|
|
21
14
|
createDecorator: (decorator: Decorator<GetDecoratee<TDecoratable>>) => () => React.JSX.Element;
|
|
22
15
|
};
|
package/decorators.js
CHANGED
|
@@ -1,48 +1,37 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
});
|
|
7
|
-
exports.createConditionalDecorator = createConditionalDecorator;
|
|
8
|
-
exports.createDecoratorFactory = createDecoratorFactory;
|
|
9
|
-
exports.createHookDecoratorFactory = createHookDecoratorFactory;
|
|
10
|
-
exports.withDecoratorFactory = withDecoratorFactory;
|
|
11
|
-
exports.withHookDecoratorFactory = withHookDecoratorFactory;
|
|
12
|
-
var _react = _interopRequireDefault(require("react"));
|
|
13
|
-
var _Compose = require("./Compose");
|
|
14
|
-
function createConditionalDecorator(shouldDecorate, decorator, decoratorProps) {
|
|
15
|
-
return function (Original) {
|
|
16
|
-
var DecoratedComponent = /*#__PURE__*/_react.default.memo(decorator(Original));
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { Compose } from "./Compose.js";
|
|
3
|
+
export function createConditionalDecorator(shouldDecorate, decorator, decoratorProps) {
|
|
4
|
+
return Original => {
|
|
5
|
+
const DecoratedComponent = /*#__PURE__*/React.memo(decorator(Original));
|
|
17
6
|
DecoratedComponent.displayName = Original.displayName;
|
|
18
7
|
return function ShouldDecorate(props) {
|
|
19
8
|
if (shouldDecorate(decoratorProps, props)) {
|
|
20
9
|
// @ts-expect-error
|
|
21
|
-
return /*#__PURE__*/
|
|
10
|
+
return /*#__PURE__*/React.createElement(DecoratedComponent, props);
|
|
22
11
|
}
|
|
23
12
|
|
|
24
13
|
// @ts-expect-error
|
|
25
|
-
return /*#__PURE__*/
|
|
14
|
+
return /*#__PURE__*/React.createElement(Original, props);
|
|
26
15
|
};
|
|
27
16
|
};
|
|
28
17
|
}
|
|
29
|
-
|
|
30
|
-
return
|
|
31
|
-
return /*#__PURE__*/
|
|
18
|
+
const memoizedComponent = decorator => {
|
|
19
|
+
return decoratee => {
|
|
20
|
+
return /*#__PURE__*/React.memo(decorator(decoratee));
|
|
32
21
|
};
|
|
33
22
|
};
|
|
34
|
-
function createDecoratorFactory() {
|
|
23
|
+
export function createDecoratorFactory() {
|
|
35
24
|
return function from(decoratable, shouldDecorate) {
|
|
36
25
|
return function createDecorator(decorator) {
|
|
37
26
|
return function DecoratorPlugin(props) {
|
|
38
27
|
if (shouldDecorate) {
|
|
39
|
-
|
|
40
|
-
return /*#__PURE__*/
|
|
28
|
+
const componentDecorator = createConditionalDecorator(shouldDecorate, decorator, props);
|
|
29
|
+
return /*#__PURE__*/React.createElement(Compose, {
|
|
41
30
|
function: decoratable,
|
|
42
31
|
with: componentDecorator
|
|
43
32
|
});
|
|
44
33
|
}
|
|
45
|
-
return /*#__PURE__*/
|
|
34
|
+
return /*#__PURE__*/React.createElement(Compose, {
|
|
46
35
|
function: decoratable,
|
|
47
36
|
with: memoizedComponent(decorator)
|
|
48
37
|
});
|
|
@@ -50,11 +39,11 @@ function createDecoratorFactory() {
|
|
|
50
39
|
};
|
|
51
40
|
};
|
|
52
41
|
}
|
|
53
|
-
function createHookDecoratorFactory() {
|
|
42
|
+
export function createHookDecoratorFactory() {
|
|
54
43
|
return function from(decoratable) {
|
|
55
44
|
return function createDecorator(decorator) {
|
|
56
45
|
return function DecoratorPlugin() {
|
|
57
|
-
return /*#__PURE__*/
|
|
46
|
+
return /*#__PURE__*/React.createElement(Compose, {
|
|
58
47
|
function: decoratable,
|
|
59
48
|
with: decorator
|
|
60
49
|
});
|
|
@@ -62,19 +51,19 @@ function createHookDecoratorFactory() {
|
|
|
62
51
|
};
|
|
63
52
|
};
|
|
64
53
|
}
|
|
65
|
-
function withDecoratorFactory() {
|
|
54
|
+
export function withDecoratorFactory() {
|
|
66
55
|
return function WithDecorator(Component, shouldDecorate) {
|
|
67
|
-
|
|
56
|
+
const createDecorator = createDecoratorFactory()(Component, shouldDecorate);
|
|
68
57
|
return Object.assign(Component, {
|
|
69
|
-
createDecorator
|
|
58
|
+
createDecorator
|
|
70
59
|
});
|
|
71
60
|
};
|
|
72
61
|
}
|
|
73
|
-
function withHookDecoratorFactory() {
|
|
62
|
+
export function withHookDecoratorFactory() {
|
|
74
63
|
return function WithHookDecorator(hook) {
|
|
75
|
-
|
|
64
|
+
const createDecorator = createHookDecoratorFactory()(hook);
|
|
76
65
|
return Object.assign(hook, {
|
|
77
|
-
createDecorator
|
|
66
|
+
createDecorator
|
|
78
67
|
});
|
|
79
68
|
};
|
|
80
69
|
}
|
package/decorators.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["
|
|
1
|
+
{"version":3,"names":["React","Compose","createConditionalDecorator","shouldDecorate","decorator","decoratorProps","Original","DecoratedComponent","memo","displayName","ShouldDecorate","props","createElement","memoizedComponent","decoratee","createDecoratorFactory","from","decoratable","createDecorator","DecoratorPlugin","componentDecorator","function","with","createHookDecoratorFactory","withDecoratorFactory","WithDecorator","Component","Object","assign","withHookDecoratorFactory","WithHookDecorator","hook"],"sources":["decorators.tsx"],"sourcesContent":["import React from \"react\";\nimport { Compose } from \"~/Compose.js\";\nimport type { GetDecoratee, GetDecorateeParams } from \"~/createDecorator.js\";\nimport type {\n DecoratableComponent,\n GenericComponent,\n Decorator,\n GenericHook,\n DecoratableHook,\n ComponentDecorator\n} from \"~/types.js\";\n\nexport interface ShouldDecorate<TDecorator = any, TComponent = any> {\n (decoratorProps: TDecorator, componentProps: TComponent): boolean;\n}\n\nexport function createConditionalDecorator<TDecoratee extends GenericComponent>(\n shouldDecorate: ShouldDecorate,\n decorator: Decorator<TDecoratee>,\n decoratorProps: unknown\n): Decorator<TDecoratee> {\n return (Original => {\n const DecoratedComponent = React.memo(decorator(Original));\n DecoratedComponent.displayName = Original.displayName;\n\n return function ShouldDecorate(props: unknown) {\n if (shouldDecorate(decoratorProps, props)) {\n // @ts-expect-error\n return <DecoratedComponent {...props} />;\n }\n\n // @ts-expect-error\n return <Original {...props} />;\n };\n }) as Decorator<TDecoratee>;\n}\n\nconst memoizedComponent = <T extends GenericComponent>(decorator: Decorator<T>) => {\n return (decoratee: T) => {\n return React.memo(decorator(decoratee));\n };\n};\n\nexport function createDecoratorFactory<TDecorator>() {\n return function from<TDecoratable extends DecoratableComponent>(\n decoratable: TDecoratable,\n shouldDecorate?: ShouldDecorate<TDecorator, GetDecorateeParams<GetDecoratee<TDecoratable>>>\n ) {\n return function createDecorator(decorator: ComponentDecorator<GetDecoratee<TDecoratable>>) {\n return function DecoratorPlugin(props: TDecorator) {\n if (shouldDecorate) {\n const componentDecorator = createConditionalDecorator<GenericComponent>(\n shouldDecorate,\n decorator as unknown as Decorator<GenericComponent>,\n props\n );\n\n return <Compose function={decoratable} with={componentDecorator} />;\n }\n\n return (\n <Compose\n function={decoratable}\n with={memoizedComponent(\n decorator as unknown as Decorator<GenericComponent>\n )}\n />\n );\n };\n };\n };\n}\n\nexport function createHookDecoratorFactory() {\n return function from<TDecoratable extends DecoratableHook>(decoratable: TDecoratable) {\n return function createDecorator(decorator: Decorator<GetDecoratee<TDecoratable>>) {\n return function DecoratorPlugin() {\n return (\n <Compose\n function={decoratable}\n with={decorator as unknown as Decorator<GenericHook>}\n />\n );\n };\n };\n };\n}\n\nexport function withDecoratorFactory<TDecorator>() {\n return function WithDecorator<TDecoratable extends DecoratableComponent>(\n Component: TDecoratable,\n shouldDecorate?: ShouldDecorate<TDecorator, GetDecorateeParams<GetDecoratee<TDecoratable>>>\n ) {\n const createDecorator = createDecoratorFactory<TDecorator>()(Component, shouldDecorate);\n\n return Object.assign(Component, { createDecorator }) as TDecoratable & {\n createDecorator: typeof createDecorator;\n };\n };\n}\n\nexport function withHookDecoratorFactory() {\n return function WithHookDecorator<TDecoratable extends DecoratableHook>(hook: TDecoratable) {\n const createDecorator = createHookDecoratorFactory()(hook);\n\n return Object.assign(hook, { createDecorator }) as unknown as DecoratableHook<\n GenericHook<\n GetDecorateeParams<GetDecoratee<TDecoratable>>,\n ReturnType<GetDecoratee<TDecoratable>>\n >\n > & { createDecorator: typeof createDecorator };\n };\n}\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAASC,OAAO;AAehB,OAAO,SAASC,0BAA0BA,CACtCC,cAA8B,EAC9BC,SAAgC,EAChCC,cAAuB,EACF;EACrB,OAAQC,QAAQ,IAAI;IAChB,MAAMC,kBAAkB,gBAAGP,KAAK,CAACQ,IAAI,CAACJ,SAAS,CAACE,QAAQ,CAAC,CAAC;IAC1DC,kBAAkB,CAACE,WAAW,GAAGH,QAAQ,CAACG,WAAW;IAErD,OAAO,SAASC,cAAcA,CAACC,KAAc,EAAE;MAC3C,IAAIR,cAAc,CAACE,cAAc,EAAEM,KAAK,CAAC,EAAE;QACvC;QACA,oBAAOX,KAAA,CAAAY,aAAA,CAACL,kBAAkB,EAAKI,KAAQ,CAAC;MAC5C;;MAEA;MACA,oBAAOX,KAAA,CAAAY,aAAA,CAACN,QAAQ,EAAKK,KAAQ,CAAC;IAClC,CAAC;EACL,CAAC;AACL;AAEA,MAAME,iBAAiB,GAAgCT,SAAuB,IAAK;EAC/E,OAAQU,SAAY,IAAK;IACrB,oBAAOd,KAAK,CAACQ,IAAI,CAACJ,SAAS,CAACU,SAAS,CAAC,CAAC;EAC3C,CAAC;AACL,CAAC;AAED,OAAO,SAASC,sBAAsBA,CAAA,EAAe;EACjD,OAAO,SAASC,IAAIA,CAChBC,WAAyB,EACzBd,cAA2F,EAC7F;IACE,OAAO,SAASe,eAAeA,CAACd,SAAyD,EAAE;MACvF,OAAO,SAASe,eAAeA,CAACR,KAAiB,EAAE;QAC/C,IAAIR,cAAc,EAAE;UAChB,MAAMiB,kBAAkB,GAAGlB,0BAA0B,CACjDC,cAAc,EACdC,SAAS,EACTO,KACJ,CAAC;UAED,oBAAOX,KAAA,CAAAY,aAAA,CAACX,OAAO;YAACoB,QAAQ,EAAEJ,WAAY;YAACK,IAAI,EAAEF;UAAmB,CAAE,CAAC;QACvE;QAEA,oBACIpB,KAAA,CAAAY,aAAA,CAACX,OAAO;UACJoB,QAAQ,EAAEJ,WAAY;UACtBK,IAAI,EAAET,iBAAiB,CACnBT,SACJ;QAAE,CACL,CAAC;MAEV,CAAC;IACL,CAAC;EACL,CAAC;AACL;AAEA,OAAO,SAASmB,0BAA0BA,CAAA,EAAG;EACzC,OAAO,SAASP,IAAIA,CAAuCC,WAAyB,EAAE;IAClF,OAAO,SAASC,eAAeA,CAACd,SAAgD,EAAE;MAC9E,OAAO,SAASe,eAAeA,CAAA,EAAG;QAC9B,oBACInB,KAAA,CAAAY,aAAA,CAACX,OAAO;UACJoB,QAAQ,EAAEJ,WAAY;UACtBK,IAAI,EAAElB;QAA+C,CACxD,CAAC;MAEV,CAAC;IACL,CAAC;EACL,CAAC;AACL;AAEA,OAAO,SAASoB,oBAAoBA,CAAA,EAAe;EAC/C,OAAO,SAASC,aAAaA,CACzBC,SAAuB,EACvBvB,cAA2F,EAC7F;IACE,MAAMe,eAAe,GAAGH,sBAAsB,CAAa,CAAC,CAACW,SAAS,EAAEvB,cAAc,CAAC;IAEvF,OAAOwB,MAAM,CAACC,MAAM,CAACF,SAAS,EAAE;MAAER;IAAgB,CAAC,CAAC;EAGxD,CAAC;AACL;AAEA,OAAO,SAASW,wBAAwBA,CAAA,EAAG;EACvC,OAAO,SAASC,iBAAiBA,CAAuCC,IAAkB,EAAE;IACxF,MAAMb,eAAe,GAAGK,0BAA0B,CAAC,CAAC,CAACQ,IAAI,CAAC;IAE1D,OAAOJ,MAAM,CAACC,MAAM,CAACG,IAAI,EAAE;MAAEb;IAAgB,CAAC,CAAC;EAMnD,CAAC;AACL","ignoreList":[]}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { ComponentType } from "react";
|
|
2
|
+
import type { Decorator, GenericComponent, GenericHook } from "../types.js";
|
|
3
|
+
type Listener = () => void;
|
|
4
|
+
export declare class CompositionStore {
|
|
5
|
+
private scopes;
|
|
6
|
+
private version;
|
|
7
|
+
private listeners;
|
|
8
|
+
register(component: ComponentType<unknown>, hocs: Decorator<GenericComponent | GenericHook>[], scope?: string, inherit?: boolean, silent?: boolean): () => void;
|
|
9
|
+
unregister(component: ComponentType<unknown>, hocs: Decorator<GenericComponent | GenericHook>[], scope?: string): void;
|
|
10
|
+
getComponent(component: ComponentType<unknown>, scope?: string[]): GenericComponent | GenericHook | undefined;
|
|
11
|
+
subscribe: (listener: Listener) => (() => void);
|
|
12
|
+
getSnapshot: () => number;
|
|
13
|
+
private notifyListeners;
|
|
14
|
+
}
|
|
15
|
+
export {};
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import { compose } from "../Context.js";
|
|
2
|
+
export class CompositionStore {
|
|
3
|
+
scopes = new Map();
|
|
4
|
+
version = 0;
|
|
5
|
+
listeners = new Set();
|
|
6
|
+
register(component, hocs, scope = "*", inherit = false, silent = false) {
|
|
7
|
+
const scopeMap = this.scopes.get(scope) || new Map();
|
|
8
|
+
const recipe = scopeMap.get(component) || {
|
|
9
|
+
component: component,
|
|
10
|
+
hocs: []
|
|
11
|
+
};
|
|
12
|
+
|
|
13
|
+
// Idempotent: skip if all HOCs are already registered (handles StrictMode double-render).
|
|
14
|
+
const newHocs = hocs.filter(hoc => !recipe.hocs.includes(hoc));
|
|
15
|
+
if (newHocs.length === 0) {
|
|
16
|
+
return () => this.unregister(component, hocs, scope);
|
|
17
|
+
}
|
|
18
|
+
const existingHocs = [...recipe.hocs];
|
|
19
|
+
if (inherit && scope !== "*") {
|
|
20
|
+
const globalScope = this.scopes.get("*") || new Map();
|
|
21
|
+
const globalRecipe = globalScope.get(component) || {
|
|
22
|
+
component: component,
|
|
23
|
+
hocs: []
|
|
24
|
+
};
|
|
25
|
+
// Only prepend global HOCs that aren't already present.
|
|
26
|
+
const globalHocsToAdd = globalRecipe.hocs.filter(hoc => !existingHocs.includes(hoc));
|
|
27
|
+
existingHocs.unshift(...globalHocsToAdd);
|
|
28
|
+
}
|
|
29
|
+
const finalHocs = [...existingHocs, ...newHocs];
|
|
30
|
+
scopeMap.set(component, {
|
|
31
|
+
component: compose(...[...finalHocs].reverse())(component),
|
|
32
|
+
hocs: finalHocs
|
|
33
|
+
});
|
|
34
|
+
this.scopes.set(scope, scopeMap);
|
|
35
|
+
|
|
36
|
+
// Bump the version so useSyncExternalStore sees a new snapshot.
|
|
37
|
+
this.version++;
|
|
38
|
+
|
|
39
|
+
// When called during render (silent=true), don't notify listeners —
|
|
40
|
+
// that would trigger setState in other components mid-render.
|
|
41
|
+
// Components that render after this point will see the updated snapshot.
|
|
42
|
+
if (!silent) {
|
|
43
|
+
this.notifyListeners();
|
|
44
|
+
}
|
|
45
|
+
return () => this.unregister(component, hocs, scope);
|
|
46
|
+
}
|
|
47
|
+
unregister(component, hocs, scope = "*") {
|
|
48
|
+
const scopeMap = this.scopes.get(scope);
|
|
49
|
+
if (!scopeMap) {
|
|
50
|
+
return;
|
|
51
|
+
}
|
|
52
|
+
const recipe = scopeMap.get(component);
|
|
53
|
+
if (!recipe) {
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
const newHocs = recipe.hocs.filter(hoc => !hocs.includes(hoc));
|
|
57
|
+
if (newHocs.length === recipe.hocs.length) {
|
|
58
|
+
// Nothing was removed.
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
if (newHocs.length === 0) {
|
|
62
|
+
scopeMap.delete(component);
|
|
63
|
+
} else {
|
|
64
|
+
scopeMap.set(component, {
|
|
65
|
+
component: compose(...[...newHocs].reverse())(component),
|
|
66
|
+
hocs: newHocs
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
this.version++;
|
|
70
|
+
this.notifyListeners();
|
|
71
|
+
}
|
|
72
|
+
getComponent(component, scope = []) {
|
|
73
|
+
const scopesToResolve = ["*", ...scope].reverse();
|
|
74
|
+
for (const s of scopesToResolve) {
|
|
75
|
+
const scopeMap = this.scopes.get(s);
|
|
76
|
+
if (!scopeMap) {
|
|
77
|
+
continue;
|
|
78
|
+
}
|
|
79
|
+
const composed = scopeMap.get(component);
|
|
80
|
+
if (composed) {
|
|
81
|
+
return composed.component;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
return undefined;
|
|
85
|
+
}
|
|
86
|
+
subscribe = listener => {
|
|
87
|
+
this.listeners.add(listener);
|
|
88
|
+
return () => {
|
|
89
|
+
this.listeners.delete(listener);
|
|
90
|
+
};
|
|
91
|
+
};
|
|
92
|
+
getSnapshot = () => {
|
|
93
|
+
return this.version;
|
|
94
|
+
};
|
|
95
|
+
notifyListeners() {
|
|
96
|
+
for (const listener of this.listeners) {
|
|
97
|
+
listener();
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
//# sourceMappingURL=CompositionStore.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["compose","CompositionStore","scopes","Map","version","listeners","Set","register","component","hocs","scope","inherit","silent","scopeMap","get","recipe","newHocs","filter","hoc","includes","length","unregister","existingHocs","globalScope","globalRecipe","globalHocsToAdd","unshift","finalHocs","set","reverse","notifyListeners","delete","getComponent","scopesToResolve","s","composed","undefined","subscribe","listener","add","getSnapshot"],"sources":["CompositionStore.ts"],"sourcesContent":["import type { ComponentType } from \"react\";\nimport { compose } from \"~/Context.js\";\nimport type { Decorator, GenericComponent, GenericHook } from \"~/types.js\";\n\ninterface ComposedComponent {\n component: GenericHook | GenericComponent;\n hocs: Decorator<GenericComponent | GenericHook>[];\n}\n\ntype ComposedComponents = Map<ComponentType<unknown>, ComposedComponent>;\ntype ComponentScopes = Map<string, ComposedComponents>;\n\ntype Listener = () => void;\n\nexport class CompositionStore {\n private scopes: ComponentScopes = new Map();\n private version = 0;\n private listeners = new Set<Listener>();\n\n register(\n component: ComponentType<unknown>,\n hocs: Decorator<GenericComponent | GenericHook>[],\n scope = \"*\",\n inherit = false,\n silent = false\n ): () => void {\n const scopeMap: ComposedComponents = this.scopes.get(scope) || new Map();\n const recipe = scopeMap.get(component) || {\n component: component as any,\n hocs: [] as Decorator<GenericComponent | GenericHook>[]\n };\n\n // Idempotent: skip if all HOCs are already registered (handles StrictMode double-render).\n const newHocs = hocs.filter(hoc => !recipe.hocs.includes(hoc));\n if (newHocs.length === 0) {\n return () => this.unregister(component, hocs, scope);\n }\n\n const existingHocs = [...recipe.hocs];\n if (inherit && scope !== \"*\") {\n const globalScope = this.scopes.get(\"*\") || new Map();\n const globalRecipe = globalScope.get(component) || {\n component: component as any,\n hocs: [] as Decorator<GenericComponent | GenericHook>[]\n };\n // Only prepend global HOCs that aren't already present.\n const globalHocsToAdd = globalRecipe.hocs.filter(\n (hoc: Decorator<GenericComponent | GenericHook>) => !existingHocs.includes(hoc)\n );\n existingHocs.unshift(...globalHocsToAdd);\n }\n\n const finalHocs = [...existingHocs, ...newHocs];\n\n scopeMap.set(component, {\n component: compose(...[...finalHocs].reverse())(component as any),\n hocs: finalHocs\n });\n\n this.scopes.set(scope, scopeMap);\n\n // Bump the version so useSyncExternalStore sees a new snapshot.\n this.version++;\n\n // When called during render (silent=true), don't notify listeners —\n // that would trigger setState in other components mid-render.\n // Components that render after this point will see the updated snapshot.\n if (!silent) {\n this.notifyListeners();\n }\n\n return () => this.unregister(component, hocs, scope);\n }\n\n unregister(\n component: ComponentType<unknown>,\n hocs: Decorator<GenericComponent | GenericHook>[],\n scope = \"*\"\n ): void {\n const scopeMap = this.scopes.get(scope);\n if (!scopeMap) {\n return;\n }\n\n const recipe = scopeMap.get(component);\n if (!recipe) {\n return;\n }\n\n const newHocs = recipe.hocs.filter(hoc => !hocs.includes(hoc));\n if (newHocs.length === recipe.hocs.length) {\n // Nothing was removed.\n return;\n }\n\n if (newHocs.length === 0) {\n scopeMap.delete(component);\n } else {\n scopeMap.set(component, {\n component: compose(...[...newHocs].reverse())(component as any),\n hocs: newHocs\n });\n }\n\n this.version++;\n this.notifyListeners();\n }\n\n getComponent(\n component: ComponentType<unknown>,\n scope: string[] = []\n ): GenericComponent | GenericHook | undefined {\n const scopesToResolve = [\"*\", ...scope].reverse();\n for (const s of scopesToResolve) {\n const scopeMap = this.scopes.get(s);\n if (!scopeMap) {\n continue;\n }\n const composed = scopeMap.get(component);\n if (composed) {\n return composed.component;\n }\n }\n return undefined;\n }\n\n subscribe = (listener: Listener): (() => void) => {\n this.listeners.add(listener);\n return () => {\n this.listeners.delete(listener);\n };\n };\n\n getSnapshot = (): number => {\n return this.version;\n };\n\n private notifyListeners(): void {\n for (const listener of this.listeners) {\n listener();\n }\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
package/index.d.ts
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
export * from "./Context";
|
|
2
|
-
export * from "./Compose";
|
|
3
|
-
export * from "./makeComposable";
|
|
4
|
-
export * from "./makeDecoratable";
|
|
5
|
-
export * from "./createDecorator";
|
|
6
|
-
export * from "./decorators";
|
|
7
|
-
export * from "./CompositionScope";
|
|
8
|
-
export
|
|
1
|
+
export * from "./Context.js";
|
|
2
|
+
export * from "./Compose.js";
|
|
3
|
+
export * from "./makeComposable.js";
|
|
4
|
+
export * from "./makeDecoratable.js";
|
|
5
|
+
export * from "./createDecorator.js";
|
|
6
|
+
export * from "./decorators.js";
|
|
7
|
+
export * from "./CompositionScope.js";
|
|
8
|
+
export { CompositionStore } from "./domain/CompositionStore.js";
|
|
9
|
+
export type * from "./types.js";
|
package/index.js
CHANGED
|
@@ -1,95 +1,10 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
if (key in exports && exports[key] === _Context[key]) return;
|
|
10
|
-
Object.defineProperty(exports, key, {
|
|
11
|
-
enumerable: true,
|
|
12
|
-
get: function get() {
|
|
13
|
-
return _Context[key];
|
|
14
|
-
}
|
|
15
|
-
});
|
|
16
|
-
});
|
|
17
|
-
var _Compose = require("./Compose");
|
|
18
|
-
Object.keys(_Compose).forEach(function (key) {
|
|
19
|
-
if (key === "default" || key === "__esModule") return;
|
|
20
|
-
if (key in exports && exports[key] === _Compose[key]) return;
|
|
21
|
-
Object.defineProperty(exports, key, {
|
|
22
|
-
enumerable: true,
|
|
23
|
-
get: function get() {
|
|
24
|
-
return _Compose[key];
|
|
25
|
-
}
|
|
26
|
-
});
|
|
27
|
-
});
|
|
28
|
-
var _makeComposable = require("./makeComposable");
|
|
29
|
-
Object.keys(_makeComposable).forEach(function (key) {
|
|
30
|
-
if (key === "default" || key === "__esModule") return;
|
|
31
|
-
if (key in exports && exports[key] === _makeComposable[key]) return;
|
|
32
|
-
Object.defineProperty(exports, key, {
|
|
33
|
-
enumerable: true,
|
|
34
|
-
get: function get() {
|
|
35
|
-
return _makeComposable[key];
|
|
36
|
-
}
|
|
37
|
-
});
|
|
38
|
-
});
|
|
39
|
-
var _makeDecoratable = require("./makeDecoratable");
|
|
40
|
-
Object.keys(_makeDecoratable).forEach(function (key) {
|
|
41
|
-
if (key === "default" || key === "__esModule") return;
|
|
42
|
-
if (key in exports && exports[key] === _makeDecoratable[key]) return;
|
|
43
|
-
Object.defineProperty(exports, key, {
|
|
44
|
-
enumerable: true,
|
|
45
|
-
get: function get() {
|
|
46
|
-
return _makeDecoratable[key];
|
|
47
|
-
}
|
|
48
|
-
});
|
|
49
|
-
});
|
|
50
|
-
var _createDecorator = require("./createDecorator");
|
|
51
|
-
Object.keys(_createDecorator).forEach(function (key) {
|
|
52
|
-
if (key === "default" || key === "__esModule") return;
|
|
53
|
-
if (key in exports && exports[key] === _createDecorator[key]) return;
|
|
54
|
-
Object.defineProperty(exports, key, {
|
|
55
|
-
enumerable: true,
|
|
56
|
-
get: function get() {
|
|
57
|
-
return _createDecorator[key];
|
|
58
|
-
}
|
|
59
|
-
});
|
|
60
|
-
});
|
|
61
|
-
var _decorators = require("./decorators");
|
|
62
|
-
Object.keys(_decorators).forEach(function (key) {
|
|
63
|
-
if (key === "default" || key === "__esModule") return;
|
|
64
|
-
if (key in exports && exports[key] === _decorators[key]) return;
|
|
65
|
-
Object.defineProperty(exports, key, {
|
|
66
|
-
enumerable: true,
|
|
67
|
-
get: function get() {
|
|
68
|
-
return _decorators[key];
|
|
69
|
-
}
|
|
70
|
-
});
|
|
71
|
-
});
|
|
72
|
-
var _CompositionScope = require("./CompositionScope");
|
|
73
|
-
Object.keys(_CompositionScope).forEach(function (key) {
|
|
74
|
-
if (key === "default" || key === "__esModule") return;
|
|
75
|
-
if (key in exports && exports[key] === _CompositionScope[key]) return;
|
|
76
|
-
Object.defineProperty(exports, key, {
|
|
77
|
-
enumerable: true,
|
|
78
|
-
get: function get() {
|
|
79
|
-
return _CompositionScope[key];
|
|
80
|
-
}
|
|
81
|
-
});
|
|
82
|
-
});
|
|
83
|
-
var _types = require("./types");
|
|
84
|
-
Object.keys(_types).forEach(function (key) {
|
|
85
|
-
if (key === "default" || key === "__esModule") return;
|
|
86
|
-
if (key in exports && exports[key] === _types[key]) return;
|
|
87
|
-
Object.defineProperty(exports, key, {
|
|
88
|
-
enumerable: true,
|
|
89
|
-
get: function get() {
|
|
90
|
-
return _types[key];
|
|
91
|
-
}
|
|
92
|
-
});
|
|
93
|
-
});
|
|
1
|
+
export * from "./Context.js";
|
|
2
|
+
export * from "./Compose.js";
|
|
3
|
+
export * from "./makeComposable.js";
|
|
4
|
+
export * from "./makeDecoratable.js";
|
|
5
|
+
export * from "./createDecorator.js";
|
|
6
|
+
export * from "./decorators.js";
|
|
7
|
+
export * from "./CompositionScope.js";
|
|
8
|
+
export { CompositionStore } from "./domain/CompositionStore.js";
|
|
94
9
|
|
|
95
10
|
//# sourceMappingURL=index.js.map
|
package/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["
|
|
1
|
+
{"version":3,"names":["CompositionStore"],"sources":["index.ts"],"sourcesContent":["export * from \"./Context.js\";\nexport * from \"./Compose.js\";\nexport * from \"./makeComposable.js\";\nexport * from \"./makeDecoratable.js\";\nexport * from \"./createDecorator.js\";\nexport * from \"./decorators.js\";\nexport * from \"./CompositionScope.js\";\nexport { CompositionStore } from \"./domain/CompositionStore.js\";\nexport type * from \"./types.js\";\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAASA,gBAAgB","ignoreList":[]}
|
package/makeComposable.d.ts
CHANGED
|
@@ -1,27 +1,43 @@
|
|
|
1
|
-
|
|
2
|
-
import { GenericComponent } from "./types";
|
|
1
|
+
import type { GenericComponent } from "./types.js";
|
|
3
2
|
/**
|
|
4
3
|
* @deprecated Use `makeDecoratable` instead.
|
|
5
4
|
*/
|
|
6
|
-
export declare function makeComposable<T extends GenericComponent>(name: string, Component?: T):
|
|
7
|
-
|
|
8
|
-
original: (() => null) | NonNullable<T>;
|
|
5
|
+
export declare function makeComposable<T extends GenericComponent>(name: string, Component?: T): (((() => null) | T) & {
|
|
6
|
+
original: (() => null) | T;
|
|
9
7
|
originalName: string;
|
|
10
8
|
displayName: string;
|
|
11
|
-
}
|
|
12
|
-
original:
|
|
13
|
-
|
|
14
|
-
original: (() => null) | NonNullable<T>;
|
|
9
|
+
}) & {
|
|
10
|
+
original: ((() => null) | T) & {
|
|
11
|
+
original: (() => null) | T;
|
|
15
12
|
originalName: string;
|
|
16
13
|
displayName: string;
|
|
17
|
-
}
|
|
14
|
+
};
|
|
18
15
|
originalName: string;
|
|
19
16
|
displayName: string;
|
|
20
17
|
} & {
|
|
21
|
-
createDecorator: (decorator: import("
|
|
22
|
-
|
|
23
|
-
original: (() => null) | NonNullable<T>;
|
|
18
|
+
createDecorator: (decorator: import("~/types.js").ComponentDecorator<import("./createDecorator").GetDecoratee<(() => null) & {
|
|
19
|
+
original: (() => null) | T;
|
|
24
20
|
originalName: string;
|
|
25
21
|
displayName: string;
|
|
26
|
-
}
|
|
22
|
+
} & {
|
|
23
|
+
original: ((() => null) | T) & {
|
|
24
|
+
original: (() => null) | T;
|
|
25
|
+
originalName: string;
|
|
26
|
+
displayName: string;
|
|
27
|
+
};
|
|
28
|
+
originalName: string;
|
|
29
|
+
displayName: string;
|
|
30
|
+
}> | import("./createDecorator").GetDecoratee<T & {
|
|
31
|
+
original: (() => null) | T;
|
|
32
|
+
originalName: string;
|
|
33
|
+
displayName: string;
|
|
34
|
+
} & {
|
|
35
|
+
original: ((() => null) | T) & {
|
|
36
|
+
original: (() => null) | T;
|
|
37
|
+
originalName: string;
|
|
38
|
+
displayName: string;
|
|
39
|
+
};
|
|
40
|
+
originalName: string;
|
|
41
|
+
displayName: string;
|
|
42
|
+
}>>) => (props: unknown) => import("react").JSX.Element;
|
|
27
43
|
};
|
package/makeComposable.js
CHANGED
|
@@ -1,22 +1,14 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.makeComposable = makeComposable;
|
|
7
|
-
var _react = require("react");
|
|
8
|
-
var _makeDecoratable = require("./makeDecoratable");
|
|
9
|
-
var ComposableContext = /*#__PURE__*/(0, _react.createContext)([]);
|
|
1
|
+
import { createContext } from "react";
|
|
2
|
+
import { makeDecoratable } from "./makeDecoratable.js";
|
|
3
|
+
const ComposableContext = /*#__PURE__*/createContext([]);
|
|
10
4
|
ComposableContext.displayName = "ComposableContext";
|
|
11
|
-
|
|
12
|
-
return null;
|
|
13
|
-
};
|
|
5
|
+
const nullRenderer = () => null;
|
|
14
6
|
|
|
15
7
|
/**
|
|
16
8
|
* @deprecated Use `makeDecoratable` instead.
|
|
17
9
|
*/
|
|
18
|
-
function makeComposable(name, Component) {
|
|
19
|
-
return
|
|
10
|
+
export function makeComposable(name, Component) {
|
|
11
|
+
return makeDecoratable(name, Component ?? nullRenderer);
|
|
20
12
|
}
|
|
21
13
|
|
|
22
14
|
//# sourceMappingURL=makeComposable.js.map
|
package/makeComposable.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["
|
|
1
|
+
{"version":3,"names":["createContext","makeDecoratable","ComposableContext","displayName","nullRenderer","makeComposable","name","Component"],"sources":["makeComposable.tsx"],"sourcesContent":["import { createContext } from \"react\";\nimport type { GenericComponent } from \"~/types.js\";\nimport { makeDecoratable } from \"~/makeDecoratable.js\";\n\nconst ComposableContext = createContext<string[]>([]);\nComposableContext.displayName = \"ComposableContext\";\n\nconst nullRenderer = () => null;\n\n/**\n * @deprecated Use `makeDecoratable` instead.\n */\nexport function makeComposable<T extends GenericComponent>(name: string, Component?: T) {\n return makeDecoratable(name, Component ?? nullRenderer);\n}\n"],"mappings":"AAAA,SAASA,aAAa,QAAQ,OAAO;AAErC,SAASC,eAAe;AAExB,MAAMC,iBAAiB,gBAAGF,aAAa,CAAW,EAAE,CAAC;AACrDE,iBAAiB,CAACC,WAAW,GAAG,mBAAmB;AAEnD,MAAMC,YAAY,GAAGA,CAAA,KAAM,IAAI;;AAE/B;AACA;AACA;AACA,OAAO,SAASC,cAAcA,CAA6BC,IAAY,EAAEC,SAAa,EAAE;EACpF,OAAON,eAAe,CAACK,IAAI,EAAEC,SAAS,IAAIH,YAAY,CAAC;AAC3D","ignoreList":[]}
|
package/makeDecoratable.d.ts
CHANGED
|
@@ -1,34 +1,29 @@
|
|
|
1
1
|
import React from "react";
|
|
2
|
-
import { DecoratableComponent, DecoratableHook, GenericComponent, GenericHook } from "./types";
|
|
3
|
-
declare
|
|
4
|
-
declare type GetProps<T extends (...args: any) => any> = Parameters<T> extends [infer First] ? undefined extends First ? NoProps : First : NoProps;
|
|
5
|
-
declare function makeDecoratableComponent<T extends GenericComponent>(name: string, Component?: T): GenericComponent<import("./createDecorator").GetDecorateeParams<import("./createDecorator").GetDecoratee<DecoratableComponent<{
|
|
6
|
-
(props: GetProps<T>): JSX.Element | null;
|
|
2
|
+
import type { DecoratableComponent, DecoratableHook, GenericComponent, GenericHook } from "./types.js";
|
|
3
|
+
declare function makeDecoratableComponent<T extends GenericComponent>(name: string, Component?: T): T & {
|
|
7
4
|
original: T;
|
|
8
5
|
originalName: string;
|
|
9
6
|
displayName: string;
|
|
10
|
-
}
|
|
11
|
-
original:
|
|
12
|
-
(props: GetProps<T>): JSX.Element | null;
|
|
7
|
+
} & {
|
|
8
|
+
original: T & {
|
|
13
9
|
original: T;
|
|
14
10
|
originalName: string;
|
|
15
11
|
displayName: string;
|
|
16
|
-
}
|
|
12
|
+
};
|
|
17
13
|
originalName: string;
|
|
18
14
|
displayName: string;
|
|
19
15
|
} & {
|
|
20
|
-
createDecorator: (decorator: import("
|
|
21
|
-
(props: GetProps<T>): JSX.Element | null;
|
|
16
|
+
createDecorator: (decorator: import("~/types.js").ComponentDecorator<import("./createDecorator.js").GetDecoratee<DecoratableComponent<T & {
|
|
22
17
|
original: T;
|
|
23
18
|
originalName: string;
|
|
24
19
|
displayName: string;
|
|
25
|
-
}
|
|
20
|
+
}>>>) => (props: unknown) => React.JSX.Element;
|
|
26
21
|
};
|
|
27
|
-
export declare function makeDecoratableHook<T extends GenericHook>(hook: T): GenericHook<import("./createDecorator").GetDecorateeParams<import("./createDecorator").GetDecoratee<DecoratableHook<T>>>, ReturnType<import("./createDecorator").GetDecoratee<DecoratableHook<T>>>> & {
|
|
28
|
-
original: GenericHook<import("./createDecorator").GetDecorateeParams<import("./createDecorator").GetDecoratee<DecoratableHook<T>>>, ReturnType<import("./createDecorator").GetDecoratee<DecoratableHook<T>>>>;
|
|
22
|
+
export declare function makeDecoratableHook<T extends GenericHook>(hook: T): GenericHook<import("./createDecorator.js").GetDecorateeParams<import("./createDecorator.js").GetDecoratee<DecoratableHook<T>>>, ReturnType<import("./createDecorator.js").GetDecoratee<DecoratableHook<T>>>> & {
|
|
23
|
+
original: GenericHook<import("./createDecorator.js").GetDecorateeParams<import("./createDecorator.js").GetDecoratee<DecoratableHook<T>>>, ReturnType<import("./createDecorator.js").GetDecoratee<DecoratableHook<T>>>>;
|
|
29
24
|
originalName: string;
|
|
30
25
|
} & {
|
|
31
|
-
createDecorator: (decorator: import("
|
|
26
|
+
createDecorator: (decorator: import("~/types.js").Decorator<import("./createDecorator.js").GetDecoratee<DecoratableHook<T>>>) => () => React.JSX.Element;
|
|
32
27
|
};
|
|
33
28
|
export declare function createVoidComponent<T>(): (props: T) => JSX.Element | null;
|
|
34
29
|
export declare function makeDecoratable<T extends GenericHook>(hook: T): ReturnType<typeof makeDecoratableHook<T>>;
|