@actdim/dynstruct 1.0.7 → 1.1.0

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.
@@ -1,4 +1,4 @@
1
- import { ComponentParams, ComponentStruct } from './componentModel';
1
+ import { Component, ComponentParams, ComponentStruct } from './componentModel';
2
2
  import { default as React } from 'react';
3
3
  import { MsgStruct } from '@actdim/msgmesh/msgBusCore';
4
4
  export type DynamicContentStruct<TData = any, TMsgStruct extends MsgStruct = MsgStruct> = ComponentStruct<TMsgStruct, {
@@ -6,9 +6,6 @@ export type DynamicContentStruct<TData = any, TMsgStruct extends MsgStruct = Msg
6
6
  data: TData;
7
7
  render: () => React.ReactNode;
8
8
  };
9
- actions: {};
10
- children: {};
11
- msgScope: {};
12
9
  }>;
13
- export declare function useDynamicContent<TData = any>(params: ComponentParams<DynamicContentStruct<TData>>): any;
10
+ export declare function useDynamicContent<TData = any>(params: ComponentParams<DynamicContentStruct<TData>>): Component<DynamicContentStruct<TData, MsgStruct>>;
14
11
  //# sourceMappingURL=DynamicContent.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"DynamicContent.d.ts","sourceRoot":"","sources":["../../src/componentModel/DynamicContent.tsx"],"names":[],"mappings":"AAAA,OAAO,EAEH,eAAe,EACf,eAAe,EAElB,MAAM,iCAAiC,CAAC;AACzC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAEvD,MAAM,MAAM,oBAAoB,CAC5B,KAAK,GAAG,GAAG,EACX,UAAU,SAAS,SAAS,GAAG,SAAS,IACxC,eAAe,CACf,UAAU,EACV;IACI,KAAK,EAAE;QACH,IAAI,EAAE,KAAK,CAAC;QACZ,MAAM,EAAE,MAAM,KAAK,CAAC,SAAS,CAAC;KACjC,CAAC;IACF,OAAO,EAAE,EAAE,CAAC;IACZ,QAAQ,EAAE,EAAE,CAAC;IACb,QAAQ,EAAE,EAAE,CAAC;CAChB,CACJ,CAAC;AAEF,wBAAgB,iBAAiB,CAAC,KAAK,GAAG,GAAG,EACzC,MAAM,EAAE,eAAe,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC,OAcvD"}
1
+ {"version":3,"file":"DynamicContent.d.ts","sourceRoot":"","sources":["../../src/componentModel/DynamicContent.tsx"],"names":[],"mappings":"AAAA,OAAO,EACH,SAAS,EAGT,eAAe,EACf,eAAe,EAElB,MAAM,iCAAiC,CAAC;AACzC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAEvD,MAAM,MAAM,oBAAoB,CAC5B,KAAK,GAAG,GAAG,EACX,UAAU,SAAS,SAAS,GAAG,SAAS,IACxC,eAAe,CACf,UAAU,EACV;IACI,KAAK,EAAE;QACH,IAAI,EAAE,KAAK,CAAC;QACZ,MAAM,EAAE,MAAM,KAAK,CAAC,SAAS,CAAC;KACjC,CAAC;CACL,CACJ,CAAC;AAEF,wBAAgB,iBAAiB,CAAC,KAAK,GAAG,GAAG,EACzC,MAAM,EAAE,eAAe,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC,qDAiBvD"}
@@ -1,14 +1,15 @@
1
- import { useComponent as e } from "./componentModel.es.js";
2
- function c(n) {
3
- return e({
1
+ import { useComponent as t } from "./componentModel.es.js";
2
+ function d(o) {
3
+ let e, n;
4
+ return e = t({
4
5
  props: {
5
6
  render: void 0,
6
7
  data: void 0
7
8
  },
8
- view: (m, o) => o.model.render()
9
- }, n);
9
+ view: (m, c) => n.render()
10
+ }, o), n = e.model, e;
10
11
  }
11
12
  export {
12
- c as useDynamicContent
13
+ d as useDynamicContent
13
14
  };
14
15
  //# sourceMappingURL=DynamicContent.es.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"DynamicContent.es.js","sources":["../../src/componentModel/DynamicContent.tsx"],"sourcesContent":["import {\n ComponentDef,\n ComponentParams,\n ComponentStruct,\n useComponent,\n} from '@/componentModel/componentModel';\nimport React from 'react';\nimport { MsgStruct } from '@actdim/msgmesh/msgBusCore';\n\nexport type DynamicContentStruct<\n TData = any,\n TMsgStruct extends MsgStruct = MsgStruct,\n> = ComponentStruct<\n TMsgStruct,\n {\n props: {\n data: TData;\n render: () => React.ReactNode;\n };\n actions: {};\n children: {};\n msgScope: {};\n }\n>;\n\nexport function useDynamicContent<TData = any>(\n params: ComponentParams<DynamicContentStruct<TData>>,\n) {\n const componentDef: ComponentDef<DynamicContentStruct<TData>> = {\n props: {\n render: undefined,\n data: undefined,\n },\n view: (_, c) => {\n return c.model.render();\n },\n };\n\n const component = useComponent(componentDef, params);\n return component;\n}\n"],"names":["useDynamicContent","params","useComponent","_","c"],"mappings":";AAyBO,SAASA,EACZC,GACF;AAYE,SADkBC,EAV8C;AAAA,IAC5D,OAAO;AAAA,MACH,QAAQ;AAAA,MACR,MAAM;AAAA,IAAA;AAAA,IAEV,MAAM,CAACC,GAAGC,MACCA,EAAE,MAAM,OAAA;AAAA,EACnB,GAGyCH,CAAM;AAEvD;"}
1
+ {"version":3,"file":"DynamicContent.es.js","sources":["../../src/componentModel/DynamicContent.tsx"],"sourcesContent":["import {\n Component,\n ComponentDef,\n ComponentModel,\n ComponentParams,\n ComponentStruct,\n useComponent,\n} from '@/componentModel/componentModel';\nimport React from 'react';\nimport { MsgStruct } from '@actdim/msgmesh/msgBusCore';\n\nexport type DynamicContentStruct<\n TData = any,\n TMsgStruct extends MsgStruct = MsgStruct,\n> = ComponentStruct<\n TMsgStruct,\n {\n props: {\n data: TData;\n render: () => React.ReactNode;\n };\n }\n>;\n\nexport function useDynamicContent<TData = any>(\n params: ComponentParams<DynamicContentStruct<TData>>,\n) {\n let c: Component<DynamicContentStruct<TData>>;\n let m: ComponentModel<DynamicContentStruct<TData>>;\n const componentDef: ComponentDef<DynamicContentStruct<TData>> = {\n props: {\n render: undefined,\n data: undefined,\n },\n view: (_, c) => {\n return m.render();\n },\n };\n\n c = useComponent(componentDef, params);\n m = c.model;\n return c;\n}\n"],"names":["useDynamicContent","params","c","m","useComponent","_"],"mappings":";AAwBO,SAASA,EACZC,GACF;AACE,MAAIC,GACAC;AAWJ,SAAAD,IAAIE,EAV4D;AAAA,IAC5D,OAAO;AAAA,MACH,QAAQ;AAAA,MACR,MAAM;AAAA,IAAA;AAAA,IAEV,MAAM,CAACC,GAAGH,MACCC,EAAE,OAAA;AAAA,EACb,GAG2BF,CAAM,GACrCE,IAAID,EAAE,OACCA;AACX;"}
@@ -1,6 +1,6 @@
1
1
  import { PropsWithChildren, FC, ReactNode } from 'react';
2
2
  import { $CG_IN, $CG_OUT, Msg, MsgBus, MsgProviderParams, MsgStruct, MsgSubscriberParams, OutStruct } from '@actdim/msgmesh/msgBusCore';
3
- import { MaybePromise, SafeKey, Skip } from '@actdim/utico/typeCore';
3
+ import { HasKeys, MaybeKeyOf, MaybePromise, Require, Skip } from '@actdim/utico/typeCore';
4
4
  import { ComponentMsgHeaders, TreeNode } from './contracts';
5
5
  export declare enum ComponentMsgFilter {
6
6
  None = 0,
@@ -30,25 +30,26 @@ export type ComponentRefStruct = {
30
30
  export type ComponentStructBase<TMsgStruct extends MsgStruct = MsgStruct, TPropStruct extends ComponentPropStruct = ComponentPropStruct, TMsgScope extends MsgBrokerScope<TMsgStruct> = MsgBrokerScope<TMsgStruct>> = {
31
31
  props?: TPropStruct;
32
32
  actions?: ComponentMethodStruct;
33
+ effects?: string[] | string | undefined;
33
34
  children?: ComponentRefStruct;
34
35
  msgScope?: TMsgScope;
35
36
  };
36
37
  export type ComponentStruct<TMsgStruct extends MsgStruct = MsgStruct, T extends ComponentStructBase<TMsgStruct> = ComponentStructBase<TMsgStruct>> = T & {
37
38
  msg: TMsgStruct;
38
39
  };
39
- export type MsgBroker<TStructToProvide extends MsgStruct = MsgStruct, TStructToSubscribe extends MsgStruct = MsgStruct, TMsgHeaders extends ComponentMsgHeaders = ComponentMsgHeaders, TScope = any> = {
40
- provide?: {
40
+ export type MsgBroker<TStructToProvide extends MsgStruct = MsgStruct, TStructToSubscribe extends MsgStruct = MsgStruct, TMsgHeaders extends ComponentMsgHeaders = ComponentMsgHeaders, TScope = any> = Require<{
41
+ provide?: Require<{
41
42
  [TChannel in keyof TStructToProvide]: {
42
43
  [TGroup in keyof Skip<TStructToProvide[TChannel], typeof $CG_OUT>]?: MsgChannelGroupProviderParams<TStructToProvide, TChannel, TGroup, TMsgHeaders, TScope>;
43
44
  };
44
- };
45
- subscribe?: {
45
+ }, HasKeys<TStructToProvide>>;
46
+ subscribe?: Require<{
46
47
  [TChannel in keyof TStructToSubscribe]: {
47
48
  [TGroup in keyof TStructToSubscribe[TChannel]]?: MsgChannelGroupSubscriberParams<TStructToSubscribe, TChannel, TGroup, TMsgHeaders, TScope>;
48
49
  };
49
- };
50
+ }, HasKeys<TStructToSubscribe>>;
50
51
  abortController?: AbortController;
51
- };
52
+ }, HasKeys<TStructToProvide & TStructToSubscribe>>;
52
53
  type ValueConverter<TTo, TFrom> = {
53
54
  convert(value: TFrom): TTo;
54
55
  convertBack(value: TTo): TFrom;
@@ -83,19 +84,19 @@ export type ComponentPropParams<TPropStruct extends ComponentPropStruct> = {
83
84
  declare const $ON_GET = "onGet";
84
85
  declare const $ON_CHANGING = "onChanging";
85
86
  declare const $ON_CHANGE = "onChange";
86
- type PropValueChangingHandler<TProp = PropKey> = (prop: TProp, oldValue: any, newValue: any) => boolean;
87
- type PropValueChangeHandler<TProp = PropKey> = (prop: TProp, value: any) => void;
87
+ type PropValueChangingHandler<TProp = PropertyKey> = (prop: TProp, oldValue: any, newValue: any) => boolean;
88
+ type PropValueChangeHandler<TProp = PropertyKey> = (prop: TProp, value: any) => void;
88
89
  type ValueChangingHandler<T = any> = (oldValue: T, newValue: T) => boolean;
89
90
  type ValueChangeHandler<T = any> = (value: T) => void;
90
91
  type ComponentEvents<TStruct extends ComponentStruct = ComponentStruct> = {
91
92
  onPropChanging?: PropValueChangingHandler<keyof TStruct['props']>;
92
93
  onPropChange?: PropValueChangeHandler<keyof TStruct['props']>;
93
- onInit?: (model: Component<TStruct>) => void;
94
- onLayout?: (model: Component<TStruct>) => void;
95
- onReady?: (model: Component<TStruct>) => void;
96
- onLayoutDestroy?: (model: Component<TStruct>) => void;
97
- onDestroy?: (model: Component<TStruct>) => void;
98
- onError?: (model: Component<TStruct>, error: any) => void;
94
+ onInit?: (component: Component<TStruct>) => void;
95
+ onLayout?: (component: Component<TStruct>) => void;
96
+ onReady?: (component: Component<TStruct>) => void;
97
+ onLayoutDestroy?: (component: Component<TStruct>) => void;
98
+ onDestroy?: (component: Component<TStruct>) => void;
99
+ onError?: (component: Component<TStruct>, error: any) => void;
99
100
  } & {
100
101
  [P in keyof TStruct['props'] as `${typeof $ON_GET}${Capitalize<P & string>}`]?: () => TStruct['props'][P];
101
102
  } & {
@@ -106,26 +107,28 @@ type ComponentEvents<TStruct extends ComponentStruct = ComponentStruct> = {
106
107
  type ComponentViewProps = {
107
108
  render?: boolean;
108
109
  } & PropsWithChildren;
109
- type ComponentViewImplFn<TStruct extends ComponentStruct, TMsgHeaders extends ComponentMsgHeaders = ComponentMsgHeaders> = (props: ComponentViewProps, model?: Component<TStruct, TMsgHeaders>) => ReactNode;
110
+ type ComponentViewImplFn<TStruct extends ComponentStruct, TMsgHeaders extends ComponentMsgHeaders = ComponentMsgHeaders> = (props: ComponentViewProps, component?: Component<TStruct, TMsgHeaders>) => ReactNode;
110
111
  type ComponentViewFn = (props: ComponentViewProps) => ReactNode;
111
- export type ComponentMsgBroker<TStruct extends ComponentStruct, TMsgHeaders extends ComponentMsgHeaders = ComponentMsgHeaders> = MsgBroker<Pick<TStruct['msg'], SafeKey<TStruct['msg'], TStruct['msgScope']['provide']>>, Pick<TStruct['msg'], SafeKey<TStruct['msg'], TStruct['msgScope']['subscribe']>>, TMsgHeaders, Component<TStruct, TMsgHeaders>>;
112
+ export type ComponentMsgBroker<TStruct extends ComponentStruct, TMsgHeaders extends ComponentMsgHeaders = ComponentMsgHeaders> = MsgBroker<Pick<TStruct['msg'], TStruct['msgScope']['provide']>, Pick<TStruct['msg'], TStruct['msgScope']['subscribe']>, TMsgHeaders, Component<TStruct, TMsgHeaders>>;
113
+ export type EffectFn<TStruct extends ComponentStruct, TMsgHeaders extends ComponentMsgHeaders = ComponentMsgHeaders> = (component: Component<TStruct, TMsgHeaders>) => void | (() => void);
112
114
  export type ComponentDef<TStruct extends ComponentStruct, TMsgHeaders extends ComponentMsgHeaders = ComponentMsgHeaders> = {
113
115
  name?: string;
114
- props?: TStruct['props'];
115
- actions?: TStruct['actions'];
116
+ props?: Require<TStruct['props'], HasKeys<TStruct['props']>>;
117
+ actions?: Require<TStruct['actions'], HasKeys<TStruct['actions']>>;
118
+ effects?: keyof TStruct['effects'] extends never ? never : Record<TStruct['effects'] extends string ? TStruct['effects'] : TStruct['effects'][number], EffectFn<TStruct, TMsgHeaders>>;
116
119
  children?: ComponentDefChildren<TStruct['children']>;
117
120
  events?: ComponentEvents<TStruct>;
118
121
  msgBroker?: ComponentMsgBroker<TStruct, TMsgHeaders>;
119
122
  msgBus?: MsgBus<TStruct['msg'], TMsgHeaders>;
120
123
  view?: ComponentViewImplFn<TStruct, TMsgHeaders>;
121
124
  };
122
- type ComponentDefChildren<TRefStruct extends ComponentRefStruct> = {
125
+ type ComponentDefChildren<TRefStruct extends ComponentRefStruct> = Require<{
123
126
  [P in keyof TRefStruct]: TRefStruct[P] extends (params: infer TParams) => infer T ? T extends ComponentStruct ? (params: TParams) => Component<T> : never : TRefStruct[P] extends ComponentStruct ? Component<TRefStruct[P]> : never;
124
- };
127
+ }, HasKeys<TRefStruct>>;
125
128
  type ComponentChildren<TRefStruct extends ComponentRefStruct> = {
126
129
  [P in keyof TRefStruct as TRefStruct[P] extends Function ? `${Capitalize<P & string>}` : P]: TRefStruct[P] extends (params: infer TParams) => infer T ? T extends ComponentStruct ? FC<ComponentParams<T> & TParams> : never : TRefStruct[P] extends ComponentStruct ? Component<TRefStruct[P]> : never;
127
130
  };
128
- export type ComponentMsgStruct<TStruct extends ComponentStruct = ComponentStruct> = Pick<TStruct['msg'], SafeKey<TStruct['msg'], TStruct['msgScope']['provide']> | SafeKey<TStruct['msg'], TStruct['msgScope']['subscribe']> | SafeKey<TStruct['msg'], TStruct['msgScope']['publish']>>;
131
+ export type ComponentMsgStruct<TStruct extends ComponentStruct = ComponentStruct> = Pick<TStruct['msg'], MaybeKeyOf<TStruct['msg'], TStruct['msgScope']['provide']> | MaybeKeyOf<TStruct['msg'], TStruct['msgScope']['subscribe']> | MaybeKeyOf<TStruct['msg'], TStruct['msgScope']['publish']>>;
129
132
  export type ComponentBase<TStruct extends ComponentStruct = ComponentStruct, TMsgHeaders extends ComponentMsgHeaders = ComponentMsgHeaders> = {
130
133
  id: string;
131
134
  parentId: string;
@@ -135,9 +138,10 @@ export type ComponentBase<TStruct extends ComponentStruct = ComponentStruct, TMs
135
138
  getChainUp(): string[];
136
139
  getChainDown(): string[];
137
140
  getNodeMap(): Map<string, TreeNode>;
138
- bindings: Map<PropKey, Binding>;
141
+ bindings: Map<PropertyKey, Binding>;
139
142
  msgBus: MsgBus<ComponentMsgStruct<TStruct>, TMsgHeaders>;
140
143
  msgBroker: ComponentMsgBroker<TStruct>;
144
+ effects: Record<string, EffectController>;
141
145
  View: ComponentViewFn;
142
146
  };
143
147
  export type ComponentModel<TStruct extends ComponentStruct = ComponentStruct> = TStruct['props'] & Readonly<TStruct['actions']>;
@@ -145,9 +149,16 @@ export type Component<TStruct extends ComponentStruct = ComponentStruct, TMsgHea
145
149
  readonly model: ComponentModel<TStruct>;
146
150
  readonly children: Readonly<ComponentChildren<TStruct['children']>>;
147
151
  } & Readonly<ComponentBase<TStruct, TMsgHeaders>>;
148
- type PropKey = string | symbol;
149
152
  export type ComponentParams<TStruct extends ComponentStruct = ComponentStruct> = ComponentPropParams<TStruct['props']> & ComponentEvents<TStruct>;
150
153
  export declare function toHtmlId(url: string, segmentsCount?: number): string;
154
+ export type EffectController = {
155
+ start: () => void;
156
+ pause: () => void;
157
+ resume: () => void;
158
+ stop: () => void;
159
+ restart: () => void;
160
+ };
161
+ export declare function createEffect<TStruct extends ComponentStruct, TMsgHeaders extends ComponentMsgHeaders = ComponentMsgHeaders>(component: Component<TStruct, TMsgHeaders>, name: string, fn: EffectFn<TStruct, TMsgHeaders>): EffectController;
151
162
  export declare function useComponent<TStruct extends ComponentStruct = ComponentStruct, TMsgHeaders extends ComponentMsgHeaders = ComponentMsgHeaders>(componentDef: ComponentDef<TStruct, TMsgHeaders>, params: ComponentParams<TStruct>): any;
152
163
  export declare function getFC<TStruct extends ComponentStruct>(factory: (params: ComponentParams<TStruct>) => Component<TStruct>): FC<ComponentParams<TStruct>>;
153
164
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"componentModel.d.ts","sourceRoot":"","sources":["../../src/componentModel/componentModel.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"componentModel.d.ts","sourceRoot":"","sources":["../../src/componentModel/componentModel.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAA8B,EAAE,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACrF,OAAO,EACH,MAAM,EACN,OAAO,EAGP,GAAG,EACH,MAAM,EACN,iBAAiB,EACjB,SAAS,EACT,mBAAmB,EACnB,SAAS,EACZ,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAEH,OAAO,EAGP,UAAU,EACV,YAAY,EAEZ,OAAO,EACP,IAAI,EACP,MAAM,wBAAwB,CAAC;AAchC,OAAO,EAAE,mBAAmB,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAI5D,oBAAY,kBAAkB;IAC1B,IAAI,IAAI;IAER,aAAa,IAAS;IACtB,eAAe,IAAS;CAC3B;AAED,MAAM,MAAM,6BAA6B,CACrC,OAAO,SAAS,SAAS,GAAG,SAAS,EACrC,QAAQ,SAAS,MAAM,OAAO,GAAG,MAAM,OAAO,EAC9C,MAAM,SAAS,MAAM,OAAO,CAAC,QAAQ,CAAC,GAAG,OAAO,MAAM,EACtD,WAAW,SAAS,mBAAmB,GAAG,mBAAmB,EAC7D,MAAM,GAAG,GAAG,IACZ,IAAI,CACJ,iBAAiB,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,EAC5C,SAAS,GAAG,OAAO,GAAG,UAAU,GAAG,QAAQ,CAC9C,GAAG;IAEA,QAAQ,CAAC,EAAE,CACP,KAAK,EAAE,GAAG,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,WAAW,CAAC,EAClD,OAAO,EAAE,WAAW,EACpB,KAAK,EAAE,MAAM,KACZ,YAAY,CAAC,SAAS,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC;IAChD,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC;IACtF,eAAe,CAAC,EAAE,kBAAkB,CAAC;CACxC,CAAC;AAEF,MAAM,MAAM,+BAA+B,CACvC,OAAO,SAAS,SAAS,GAAG,SAAS,EACrC,QAAQ,SAAS,MAAM,OAAO,GAAG,MAAM,OAAO,EAC9C,MAAM,SAAS,MAAM,OAAO,CAAC,QAAQ,CAAC,GAAG,OAAO,MAAM,EACtD,WAAW,SAAS,mBAAmB,GAAG,mBAAmB,EAC7D,MAAM,GAAG,GAAG,IACZ,IAAI,CACJ,mBAAmB,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,EAC9C,SAAS,GAAG,OAAO,GAAG,UAAU,GAAG,QAAQ,CAC9C,GAAG;IACA,QAAQ,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACrF,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC;IACtF,eAAe,CAAC,EAAE,kBAAkB,CAAC;CACxC,CAAC;AAGF,MAAM,MAAM,cAAc,CACtB,OAAO,SAAS,SAAS,EACzB,cAAc,SAAS,MAAM,OAAO,GAAG,MAAM,OAAO,EACpD,gBAAgB,SAAS,MAAM,OAAO,GAAG,MAAM,OAAO,EACtD,cAAc,SAAS,MAAM,OAAO,GAAG,MAAM,OAAO,IACpD;IACA,OAAO,CAAC,EAAE,cAAc,CAAC;IAEzB,SAAS,CAAC,EAAE,gBAAgB,CAAC;IAE7B,OAAO,CAAC,EAAE,cAAc,CAAC;CAC5B,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AAKtD,MAAM,MAAM,qBAAqB,GAAG,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;AAM7D,MAAM,MAAM,kBAAkB,GAAG;IAC7B,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe,GAAG,CAAC,CAAC,MAAM,EAAE,GAAG,KAAK,eAAe,CAAC,CAAC;CACxE,CAAC;AAEF,MAAM,MAAM,mBAAmB,CAC3B,UAAU,SAAS,SAAS,GAAG,SAAS,EACxC,WAAW,SAAS,mBAAmB,GAAG,mBAAmB,EAC7D,SAAS,SAAS,cAAc,CAAC,UAAU,CAAC,GAAG,cAAc,CAAC,UAAU,CAAC,IACzE;IACA,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,OAAO,CAAC,EAAE,qBAAqB,CAAC;IAChC,OAAO,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,GAAG,SAAS,CAAC;IACxC,QAAQ,CAAC,EAAE,kBAAkB,CAAC;IAE9B,QAAQ,CAAC,EAAE,SAAS,CAAC;CACxB,CAAC;AAGF,MAAM,MAAM,eAAe,CACvB,UAAU,SAAS,SAAS,GAAG,SAAS,EACxC,CAAC,SAAS,mBAAmB,CAAC,UAAU,CAAC,GAAG,mBAAmB,CAAC,UAAU,CAAC,IAC3E,CAAC,GAAG;IACJ,GAAG,EAAE,UAAU,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,SAAS,CACjB,gBAAgB,SAAS,SAAS,GAAG,SAAS,EAC9C,kBAAkB,SAAS,SAAS,GAAG,SAAS,EAChD,WAAW,SAAS,mBAAmB,GAAG,mBAAmB,EAC7D,MAAM,GAAG,GAAG,IACZ,OAAO,CACP;IAEI,OAAO,CAAC,EAAE,OAAO,CACb;SACK,QAAQ,IAAI,MAAM,gBAAgB,GAAG;aACjC,MAAM,IAAI,MAAM,IAAI,CACjB,gBAAgB,CAAC,QAAQ,CAAC,EAC1B,OAAO,OAAO,CACjB,CAAC,CAAC,EAAE,6BAA6B,CAC9B,gBAAgB,EAChB,QAAQ,EACR,MAAM,EACN,WAAW,EACX,MAAM,CACT;SACJ;KACJ,EACD,OAAO,CAAC,gBAAgB,CAAC,CAC5B,CAAC;IAEF,SAAS,CAAC,EAAE,OAAO,CACf;SACK,QAAQ,IAAI,MAAM,kBAAkB,GAAG;aACnC,MAAM,IAAI,MAAM,kBAAkB,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,+BAA+B,CAC5E,kBAAkB,EAClB,QAAQ,EACR,MAAM,EACN,WAAW,EACX,MAAM,CACT;SACJ;KACJ,EACD,OAAO,CAAC,kBAAkB,CAAC,CAC9B,CAAC;IACF,eAAe,CAAC,EAAE,eAAe,CAAC;CACrC,EACD,OAAO,CAAC,gBAAgB,GAAG,kBAAkB,CAAC,CACjD,CAAC;AAEF,KAAK,cAAc,CAAC,GAAG,EAAE,KAAK,IAAI;IAE9B,OAAO,CAAC,KAAK,EAAE,KAAK,GAAG,GAAG,CAAC;IAE3B,WAAW,CAAC,KAAK,EAAE,GAAG,GAAG,KAAK,CAAC;CAClC,CAAC;AAEF,KAAK,gBAAgB,GAAG;IACpB,KAAK,EAAE,OAAO,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,KAAK,SAAS,CAAC,CAAC,IAAI;IAChB,OAAO,EAAE;QACL,IAAI,EAAE,OAAO,CAAC;KACjB,CAAC;IACF,QAAQ,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,YAAY,CAAC,gBAAgB,CAAC,CAAC;CAC1D,CAAC;AAEF,QAAA,MAAM,UAAU,eAAuB,CAAC;AAExC,cAAM,OAAO,CAAC,CAAC,GAAG,GAAG,EAAE,KAAK,GAAG,GAAG;IAE9B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IAEtB,QAAQ,CAAC,GAAG,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,CAAC;IACjC,QAAQ,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;IAC7C,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC;IACjC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;gBAEvB,GAAG,EAAE,MAAM,CAAC,EACZ,GAAG,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,EACxB,SAAS,CAAC,EAAE,cAAc,CAAC,CAAC,EAAE,KAAK,CAAC,EACpC,SAAS,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC;IAS5B,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC;CACzB;AAED,wBAAgB,SAAS,CAAC,GAAG,EAAE,GAAG,GAAG,GAAG,IAAI,OAAO,CAElD;AAED,wBAAgB,IAAI,CAAC,CAAC,EAAE,KAAK,GAAG,GAAG,EAC/B,GAAG,EAAE,MAAM,CAAC,EACZ,GAAG,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,EACxB,SAAS,CAAC,EAAE,cAAc,CAAC,CAAC,EAAE,KAAK,CAAC,EACpC,SAAS,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,qBAG3B;AAED,wBAAgB,QAAQ,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,SAAS,MAAM,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,sBAOrF;AAED,MAAM,MAAM,mBAAmB,CAAC,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;AAEpD,MAAM,MAAM,mBAAmB,CAAC,WAAW,SAAS,mBAAmB,IAAI;KACtE,CAAC,IAAI,MAAM,WAAW,CAAC,CAAC,EAAE,mBAAmB,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;CACjE,CAAC;AAKF,QAAA,MAAM,OAAO,UAAU,CAAC;AAExB,QAAA,MAAM,YAAY,eAAe,CAAC;AAClC,QAAA,MAAM,UAAU,aAAa,CAAC;AAG9B,KAAK,wBAAwB,CAAC,KAAK,GAAG,WAAW,IAAI,CACjD,IAAI,EAAE,KAAK,EACX,QAAQ,EAAE,GAAG,EACb,QAAQ,EAAE,GAAG,KACZ,OAAO,CAAC;AACb,KAAK,sBAAsB,CAAC,KAAK,GAAG,WAAW,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,KAAK,IAAI,CAAC;AAGrF,KAAK,oBAAoB,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,KAAK,OAAO,CAAC;AAE3E,KAAK,kBAAkB,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,CAAC;AAEtD,KAAK,eAAe,CAAC,OAAO,SAAS,eAAe,GAAG,eAAe,IAAI;IACtE,cAAc,CAAC,EAAE,wBAAwB,CAAC,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;IAClE,YAAY,CAAC,EAAE,sBAAsB,CAAC,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;IAC9D,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC;IACjD,QAAQ,CAAC,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC;IACnD,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC;IAClD,eAAe,CAAC,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC;IAC1D,SAAS,CAAC,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC;IACpD,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,GAAG,KAAK,IAAI,CAAC;CACjE,GAAG;KACC,CAAC,IAAI,MAAM,OAAO,CAAC,OAAO,CAAC,IAAI,GAAG,OAAO,OAAO,GAAG,UAAU,CAAC,CAAC,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;CAC5G,GAAG;KACC,CAAC,IAAI,MAAM,OAAO,CAAC,OAAO,CAAC,IAAI,GAAG,OAAO,YAAY,GAAG,UAAU,CAAC,CAAC,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,oBAAoB,CACrG,OAAO,CAAC,OAAO,CAAC,CACnB;CACJ,GAAG;KACC,CAAC,IAAI,MAAM,OAAO,CAAC,OAAO,CAAC,IAAI,GAAG,OAAO,UAAU,GAAG,UAAU,CAAC,CAAC,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,kBAAkB,CACjG,OAAO,CAAC,OAAO,CAAC,CACnB;CACJ,CAAC;AAIF,KAAK,kBAAkB,GAAG;IACtB,MAAM,CAAC,EAAE,OAAO,CAAC;CACpB,GAAG,iBAAiB,CAAC;AAGtB,KAAK,mBAAmB,CACpB,OAAO,SAAS,eAAe,EAC/B,WAAW,SAAS,mBAAmB,GAAG,mBAAmB,IAC7D,CAAC,KAAK,EAAE,kBAAkB,EAAE,SAAS,CAAC,EAAE,SAAS,CAAC,OAAO,EAAE,WAAW,CAAC,KAAK,SAAS,CAAC;AAG1F,KAAK,eAAe,GAAG,CAAC,KAAK,EAAE,kBAAkB,KAAK,SAAS,CAAC;AAMhE,MAAM,MAAM,kBAAkB,CAC1B,OAAO,SAAS,eAAe,EAC/B,WAAW,SAAS,mBAAmB,GAAG,mBAAmB,IAC7D,SAAS,CAET,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC,SAAS,CAAC,CAAC,EAEpD,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC,WAAW,CAAC,CAAC,EACtD,WAAW,EACX,SAAS,CAAC,OAAO,EAAE,WAAW,CAAC,CAClC,CAAC;AAEF,MAAM,MAAM,QAAQ,CAChB,OAAO,SAAS,eAAe,EAC/B,WAAW,SAAS,mBAAmB,GAAG,mBAAmB,IAC7D,CAAC,SAAS,EAAE,SAAS,CAAC,OAAO,EAAE,WAAW,CAAC,KAAK,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC,CAAC;AAExE,MAAM,MAAM,YAAY,CACpB,OAAO,SAAS,eAAe,EAC/B,WAAW,SAAS,mBAAmB,GAAG,mBAAmB,IAC7D;IACA,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAC7D,OAAO,CAAC,EAAE,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;IACnE,OAAO,CAAC,EAAE,MAAM,OAAO,CAAC,SAAS,CAAC,SAAS,KAAK,GAC1C,KAAK,GACL,MAAM,CACF,OAAO,CAAC,SAAS,CAAC,SAAS,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,EACnF,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC,CACjC,CAAC;IACR,QAAQ,CAAC,EAAE,oBAAoB,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC;IACrD,MAAM,CAAC,EAAE,eAAe,CAAC,OAAO,CAAC,CAAC;IAElC,SAAS,CAAC,EAAE,kBAAkB,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;IACrD,MAAM,CAAC,EAAE,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,WAAW,CAAC,CAAC;IAC7C,IAAI,CAAC,EAAE,mBAAmB,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;CACpD,CAAC;AAEF,KAAK,oBAAoB,CAAC,UAAU,SAAS,kBAAkB,IAAI,OAAO,CACtE;KACK,CAAC,IAAI,MAAM,UAAU,GAAG,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,OAAO,KAAK,MAAM,CAAC,GAC3E,CAAC,SAAS,eAAe,GACrB,CAAC,MAAM,EAAE,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,GACjC,KAAK,GACT,UAAU,CAAC,CAAC,CAAC,SAAS,eAAe,GACnC,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,GACxB,KAAK;CAChB,EACD,OAAO,CAAC,UAAU,CAAC,CACtB,CAAC;AAEF,KAAK,iBAAiB,CAAC,UAAU,SAAS,kBAAkB,IAAI;KAC3D,CAAC,IAAI,MAAM,UAAU,IAAI,UAAU,CAAC,CAAC,CAAC,SAAS,QAAQ,GAClD,GAAG,UAAU,CAAC,CAAC,GAAG,MAAM,CAAC,EAAE,GAC3B,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,OAAO,KAAK,MAAM,CAAC,GAC5D,CAAC,SAAS,eAAe,GACrB,EAAE,CAAC,eAAe,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,GAChC,KAAK,GACT,UAAU,CAAC,CAAC,CAAC,SAAS,eAAe,GACnC,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,GACxB,KAAK;CAChB,CAAC;AAEF,MAAM,MAAM,kBAAkB,CAAC,OAAO,SAAS,eAAe,GAAG,eAAe,IAAI,IAAI,CACpF,OAAO,CAAC,KAAK,CAAC,EACZ,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC,SAAS,CAAC,CAAC,GAC1D,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC,WAAW,CAAC,CAAC,GAC5D,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC,SAAS,CAAC,CAAC,CAC/D,CAAC;AAEF,MAAM,MAAM,aAAa,CACrB,OAAO,SAAS,eAAe,GAAG,eAAe,EACjD,WAAW,SAAS,mBAAmB,GAAG,mBAAmB,IAC7D;IACA,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IAEjB,cAAc,IAAI,MAAM,CAAC;IACzB,SAAS,IAAI,MAAM,GAAG,SAAS,CAAC;IAChC,WAAW,IAAI,MAAM,EAAE,CAAC;IACxB,UAAU,IAAI,MAAM,EAAE,CAAC;IACvB,YAAY,IAAI,MAAM,EAAE,CAAC;IACzB,UAAU,IAAI,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IACpC,QAAQ,EAAE,GAAG,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IACpC,MAAM,EAAE,MAAM,CAAC,kBAAkB,CAAC,OAAO,CAAC,EAAE,WAAW,CAAC,CAAC;IACzD,SAAS,EAAE,kBAAkB,CAAC,OAAO,CAAC,CAAC;IACvC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;IAC1C,IAAI,EAAE,eAAe,CAAC;CACzB,CAAC;AAEF,MAAM,MAAM,cAAc,CAAC,OAAO,SAAS,eAAe,GAAG,eAAe,IAAI,OAAO,CAAC,OAAO,CAAC,GAC5F,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC;AAEjC,MAAM,MAAM,SAAS,CACjB,OAAO,SAAS,eAAe,GAAG,eAAe,EACjD,WAAW,SAAS,mBAAmB,GAAG,mBAAmB,IAC7D;IACA,QAAQ,CAAC,KAAK,EAAE,cAAc,CAAC,OAAO,CAAC,CAAC;IACxC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,iBAAiB,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;CACvE,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC,CAAC;AAgBlD,MAAM,MAAM,eAAe,CAAC,OAAO,SAAS,eAAe,GAAG,eAAe,IACzE,mBAAmB,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC;AAsGrE,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,aAAa,GAAE,MAAU,GAAG,MAAM,CAgBvE;AA4ID,MAAM,MAAM,gBAAgB,GAAG;IAC3B,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,IAAI,EAAE,MAAM,IAAI,CAAC;IACjB,OAAO,EAAE,MAAM,IAAI,CAAC;CACvB,CAAC;AAEF,wBAAgB,YAAY,CACxB,OAAO,SAAS,eAAe,EAC/B,WAAW,SAAS,mBAAmB,GAAG,mBAAmB,EAE7D,SAAS,EAAE,SAAS,CAAC,OAAO,EAAE,WAAW,CAAC,EAC1C,IAAI,EAAE,MAAM,EACZ,EAAE,EAAE,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC,GACnC,gBAAgB,CAiDlB;AAoVD,wBAAgB,YAAY,CACxB,OAAO,SAAS,eAAe,GAAG,eAAe,EACjD,WAAW,SAAS,mBAAmB,GAAG,mBAAmB,EAC/D,YAAY,EAAE,YAAY,CAAC,OAAO,EAAE,WAAW,CAAC,EAAE,MAAM,EAAE,eAAe,CAAC,OAAO,CAAC,OAQnF;AAGD,wBAAgB,KAAK,CAAC,OAAO,SAAS,eAAe,EACjD,OAAO,EAAE,CAAC,MAAM,EAAE,eAAe,CAAC,OAAO,CAAC,KAAK,SAAS,CAAC,OAAO,CAAC,GAClE,EAAE,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,CAS9B"}
@@ -1,13 +1,13 @@
1
- import O, { useLayoutEffect as R, useMemo as z, useEffect as L } from "react";
2
- import { observer as M } from "mobx-react-lite";
3
- import { observable as H, runInAction as _ } from "mobx";
4
- import { useLazyRef as V } from "../reactHooks.es.js";
5
- import { getGlobalFlags as w } from "../globals.es.js";
6
- import { useComponentContext as Z, ReactComponentContext as J } from "./componentContext.es.js";
7
- import { lazy as K } from "@actdim/utico/utils";
8
- var T = /* @__PURE__ */ ((e) => (e[e.None = 0] = "None", e[e.FromAncestors = 1] = "FromAncestors", e[e.FromDescendants = 2] = "FromDescendants", e))(T || {});
9
- const F = Symbol("$isBinding");
10
- class j {
1
+ import O, { useLayoutEffect as S, useMemo as p, useEffect as J } from "react";
2
+ import { observer as V } from "mobx-react-lite";
3
+ import { autorun as Z, observable as G, isObservable as R, runInAction as K, toJS as T } from "mobx";
4
+ import { useLazyRef as W } from "../reactHooks.es.js";
5
+ import { getGlobalFlags as P } from "../globals.es.js";
6
+ import { useComponentContext as q, ReactComponentContext as Q } from "./componentContext.es.js";
7
+ import { lazy as X } from "@actdim/utico/utils";
8
+ var Y = /* @__PURE__ */ ((e) => (e[e.None = 0] = "None", e[e.FromAncestors = 1] = "FromAncestors", e[e.FromDescendants = 2] = "FromDescendants", e))(Y || {});
9
+ const x = Symbol("$isBinding");
10
+ class U {
11
11
  // getter
12
12
  get;
13
13
  // setter
@@ -15,83 +15,83 @@ class j {
15
15
  converter;
16
16
  validator;
17
17
  readOnly;
18
- constructor(r, t, n, b) {
19
- this.get = r, this.set = t, this.converter = n, this.validator = b, this.readOnly = !!t, this[F] = !0;
18
+ constructor(n, t, r, a) {
19
+ this.get = n, this.set = t, this.converter = r, this.validator = a, this.readOnly = !!t, this[x] = !0;
20
20
  }
21
- [F];
21
+ [x];
22
22
  }
23
- function q(e) {
24
- return e[F] === !0;
23
+ function D(e) {
24
+ return e[x] === !0;
25
25
  }
26
- function le(e, r, t, n) {
27
- return new j(e, r, t, n);
26
+ function ye(e, n, t, r) {
27
+ return new U(e, n, t, r);
28
28
  }
29
- function ae(e, r) {
30
- return new j(
31
- () => e()[r],
29
+ function be(e, n) {
30
+ return new U(
31
+ () => e()[n],
32
32
  (t) => {
33
- e()[r] = t;
33
+ e()[n] = t;
34
34
  }
35
35
  );
36
36
  }
37
- const Q = "onGet", W = "onChanging", X = "onChange";
38
- function Y(e, r, t) {
39
- const n = t.onPropChanging, b = t.onPropChange;
40
- return new Proxy(e, {
41
- get(C, u, c) {
42
- const g = t[u]?.onGet;
43
- if (g)
44
- return g();
45
- const y = r.get(String(u));
46
- if (y) {
47
- let d;
48
- return d = y.get(), d;
49
- }
50
- return Reflect.get(C, u, c);
37
+ const m = "onGet", ee = "onChanging", te = "onChange", H = /* @__PURE__ */ new WeakMap();
38
+ function z(e, n, t) {
39
+ if (typeof e != "object" || e === null || !R(e))
40
+ return e;
41
+ if (H.has(e))
42
+ return H.get(e);
43
+ const r = new Proxy(e, {
44
+ get(a, s, u) {
45
+ const l = t[s]?.onGet;
46
+ if (l) return l();
47
+ const d = n.get(s);
48
+ if (d?.get)
49
+ return d.get();
50
+ const f = Reflect.get(a, s, u);
51
+ return typeof f == "object" && f !== null && R(f) ? z(f, n, t) : f;
51
52
  },
52
- set(C, u, c, g) {
53
- const y = C[u], d = t[u]?.onChanging;
54
- if (d && !d(y, c) || n && !n(u, y, c))
53
+ set(a, s, u, l) {
54
+ const d = a[s], f = t[s]?.onChanging;
55
+ if (f && f(d, u) === !1 || t.onPropChanging && t.onPropChanging(s, d, u) === !1)
55
56
  return !0;
56
- const k = _(() => Reflect.set(C, u, c, g)), a = r.get(u);
57
- a?.set && a.set(c);
58
- const l = t[u]?.onChange;
59
- return l && l(c), b && b(u, c), k;
57
+ const h = K(() => Reflect.set(a, s, u, l));
58
+ return n.get(s)?.set?.(u), t[s]?.onChange?.(u), t.onPropChange?.(s, u), h;
60
59
  }
61
60
  });
61
+ return H.set(e, r), r;
62
62
  }
63
63
  function $(e) {
64
64
  return e.replace(/^./, e[0].toUpperCase());
65
65
  }
66
- const E = {
66
+ const j = {
67
67
  sources: /* @__PURE__ */ new Map(),
68
68
  count: 0
69
69
  };
70
- function p(e, r = 1) {
71
- return e.split(/[?#]/)[0].split("/").filter(Boolean).map((c) => decodeURIComponent(c)).slice(-r).join("-").normalize("NFKD").replace(/[^a-zA-Z0-9\-_:.+#]/g, "-").replace(/-+/g, "-").replace(/^[^a-zA-Z]+/, "-").replace(/[+#]$/, "-");
70
+ function re(e, n = 1) {
71
+ return e.split(/[?#]/)[0].split("/").filter(Boolean).map((l) => decodeURIComponent(l)).slice(-n).join("-").normalize("NFKD").replace(/[^a-zA-Z0-9\-_:.+#]/g, "-").replace(/-+/g, "-").replace(/^[^a-zA-Z]+/, "-").replace(/[+#]$/, "-");
72
72
  }
73
- function m(e = 2) {
73
+ function ne(e = 2) {
74
74
  const t = new Error().stack?.split(`
75
75
  `);
76
76
  if (!t || t.length <= e) return null;
77
- const n = t[e].match(/\((.*):\d+:\d+\)/);
78
- return n ? n[1] : null;
77
+ const r = t[e].match(/\((.*):\d+:\d+\)/);
78
+ return r ? r[1] : null;
79
79
  }
80
- function D(e) {
81
- const r = e?.msgBroker.provide;
82
- if (r)
83
- for (const [n, b] of Object.entries(r))
84
- for (const [C, u] of Object.entries(b)) {
85
- const c = u, g = c.callback;
86
- g && (c.callback = (a, l) => g(a, l, e));
87
- const y = c.filter, d = c.componentFilter || 0, k = (a) => {
88
- let l = !0;
89
- return d & 1 && (l = e.getChainUp().indexOf(a.headers?.sourceId) >= 0), l && d & 2 && (l = e.getChainDown().indexOf(a.headers?.sourceId) >= 0), l && y && (l = y(a, e)), l;
80
+ function oe(e) {
81
+ const n = e?.msgBroker.provide;
82
+ if (n)
83
+ for (const [r, a] of Object.entries(n))
84
+ for (const [s, u] of Object.entries(a)) {
85
+ const l = u, d = l.callback;
86
+ d && (l.callback = (y, g) => d(y, g, e));
87
+ const f = l.filter, h = l.componentFilter || 0, v = (y) => {
88
+ let g = !0;
89
+ return h & 1 && (g = e.getChainUp().indexOf(y.headers?.sourceId) >= 0), g && h & 2 && (g = e.getChainDown().indexOf(y.headers?.sourceId) >= 0), g && f && (g = f(y, e)), g;
90
90
  };
91
- c.filter = k, e.msgBus.provide({
91
+ l.filter = v, e.msgBus.provide({
92
92
  ...u,
93
- channel: n,
94
- group: C,
93
+ channel: r,
94
+ group: s,
95
95
  config: {
96
96
  abortSignal: e.msgBroker.abortController.signal
97
97
  }
@@ -99,170 +99,193 @@ function D(e) {
99
99
  }
100
100
  const t = e?.msgBroker?.subscribe;
101
101
  if (t)
102
- for (const [n, b] of Object.entries(t))
103
- for (const [C, u] of Object.entries(b)) {
104
- const c = u, g = c.callback;
105
- g && (c.callback = (a) => g(a, e));
106
- const y = c.filter, d = c.componentFilter || 0, k = (a) => {
107
- let l = !0;
108
- return d & 1 && (l = e.getChainUp().indexOf(a.headers?.sourceId) >= 0), l && d & 2 && (l = e.getChainDown().indexOf(a.headers?.sourceId) >= 0), l && y && (l = y(a, e)), l;
102
+ for (const [r, a] of Object.entries(t))
103
+ for (const [s, u] of Object.entries(a)) {
104
+ const l = u, d = l.callback;
105
+ d && (l.callback = (y) => d(y, e));
106
+ const f = l.filter, h = l.componentFilter || 0, v = (y) => {
107
+ let g = !0;
108
+ return h & 1 && (g = e.getChainUp().indexOf(y.headers?.sourceId) >= 0), g && h & 2 && (g = e.getChainDown().indexOf(y.headers?.sourceId) >= 0), g && f && (g = f(y, e)), g;
109
109
  };
110
- c.filter = k, e.msgBus.on({
110
+ l.filter = v, e.msgBus.on({
111
111
  ...u,
112
- channel: n,
113
- group: C,
112
+ channel: r,
113
+ group: s,
114
114
  config: {
115
115
  abortSignal: e.msgBroker.abortController.signal
116
116
  }
117
117
  });
118
118
  }
119
119
  }
120
- function ee(e, r) {
121
- const t = (n) => {
122
- n.headers || (n.headers = {}), r?.(n.headers);
120
+ function ie(e, n) {
121
+ const t = (r) => {
122
+ r.payload != null && (r.payload = structuredClone(T(r.payload))), r.headers || (r.headers = {}), n?.(r.headers);
123
123
  };
124
124
  return {
125
125
  config: e.config,
126
- on: (n) => e.on(n),
127
- onceAsync: (n) => e.onceAsync(n),
128
- stream: (n) => e.stream(n),
129
- provide: (n) => (t(n), e.provide(n)),
130
- dispatch: (n) => (t(n), e.dispatch(n)),
131
- dispatchAsync: (n) => (t(n), e.dispatchAsync(n))
126
+ on: (r) => e.on(r),
127
+ onceAsync: (r) => e.onceAsync(r),
128
+ stream: (r) => e.stream(r),
129
+ provide: (r) => (t(r), e.provide(r)),
130
+ dispatch: (r) => (t(r), e.dispatch(r)),
131
+ dispatchAsync: (r) => (t(r), e.dispatchAsync(r))
132
+ };
133
+ }
134
+ function se(e, n, t) {
135
+ let r = null, a = !1, s;
136
+ const u = () => {
137
+ r || (r = Z(
138
+ () => {
139
+ if (!a) {
140
+ const v = t(e);
141
+ typeof v == "function" && (v(), s = v);
142
+ }
143
+ },
144
+ { name: `effect:${n}` }
145
+ ));
146
+ }, l = () => {
147
+ r?.(), r = null, s && (s(), s = void 0);
148
+ }, d = () => {
149
+ a = !0;
150
+ }, f = () => {
151
+ a = !1;
152
+ }, h = () => {
153
+ l(), u();
132
154
  };
155
+ return u(), { start: u, pause: d, resume: f, stop: l, restart: h };
133
156
  }
134
- function te(e, r) {
135
- let t, n;
136
- const b = e.view;
137
- let C = e.msgBus;
138
- const u = /* @__PURE__ */ new Map(), c = K(() => ee(C, (o) => {
157
+ function ce(e, n) {
158
+ let t, r;
159
+ e || (e = {}), n || (n = {});
160
+ const a = e.view;
161
+ let s = e.msgBus;
162
+ const u = /* @__PURE__ */ new Map(), l = X(() => ie(s, (o) => {
139
163
  o?.sourceId == null && (o.sourceId = t.id);
140
164
  }));
141
- let g = {
165
+ let d = {
142
166
  ...e.msgBroker
143
167
  };
144
- g.abortController || (g.abortController = new AbortController());
145
- const y = M((o) => {
146
- const i = t.id, s = Z(), v = s.currentId;
147
- t.parentId = v, C || (C = s.msgBus);
148
- const f = z(
149
- () => ({ ...s, currentId: i }),
150
- [e, r, s]
168
+ d.abortController || (d.abortController = new AbortController());
169
+ const f = V((o) => {
170
+ const i = t.id, c = q(), I = c.currentId;
171
+ t.parentId = I, s || (s = c.msgBus);
172
+ const C = p(
173
+ () => ({ ...c, currentId: i }),
174
+ [e, n, c]
151
175
  );
152
- R(() => {
176
+ S(() => {
153
177
  try {
154
- if (w().debug) {
155
- const h = t.getHierarchyId();
156
- console.debug(`${h}>layout`);
178
+ if (P().debug) {
179
+ const b = t.getHierarchyId();
180
+ console.debug(`${b}>layout`);
157
181
  }
158
- s.register(i, v), t.getHierarchyId = () => s.getHierarchyPath(i), t.getChainDown = () => s.getChainDown(i), t.getChainUp = () => s.getChainUp(i), t.getChildren = () => s.getChildren(i), t.getParent = () => s.getParent(i), t.getNodeMap = () => s.getNodeMap(), D(t), e.events?.onLayout?.(t), r?.onLayout?.(t);
159
- } catch (h) {
160
- e.events?.onError?.(t, h), r?.onError?.(t, h);
182
+ c.register(i, I), t.getHierarchyId = () => c.getHierarchyPath(i), t.getChainDown = () => c.getChainDown(i), t.getChainUp = () => c.getChainUp(i), t.getChildren = () => c.getChildren(i), t.getParent = () => c.getParent(i), t.getNodeMap = () => c.getNodeMap(), oe(t), e.events?.onLayout?.(t), n.onLayout?.(t);
183
+ } catch (b) {
184
+ e.events?.onError?.(t, b), n.onError?.(t, b);
161
185
  }
162
186
  return () => {
163
- if (w().debug) {
164
- const h = t.getHierarchyId();
165
- console.debug(`${h}>layout-destroy`);
187
+ if (P().debug) {
188
+ const b = t.getHierarchyId();
189
+ console.debug(`${b}>layout-destroy`);
166
190
  }
167
- s.unregister(i), g.abortController?.abort(), e.events?.onLayoutDestroy?.(t), r?.onLayoutDestroy?.(t);
191
+ c.unregister(i), d.abortController?.abort(), e.events?.onLayoutDestroy?.(t), n.onLayoutDestroy?.(t);
168
192
  };
169
- }, [e, r, s]), L(() => {
193
+ }, [e, n, c]), J(() => {
170
194
  try {
171
- if (w().debug) {
172
- const h = t.getHierarchyId();
173
- console.debug(`${h}>ready`);
195
+ if (P().debug) {
196
+ const b = t.getHierarchyId();
197
+ console.debug(`${b}>ready`);
174
198
  }
175
- e.events?.onReady?.(t), r?.onReady?.(t);
176
- } catch (h) {
177
- if (w().debug) {
178
- const B = t.getHierarchyId();
179
- console.debug(`${B}>destroy`);
199
+ e.events?.onReady?.(t), n.onReady?.(t);
200
+ } catch (b) {
201
+ if (P().debug) {
202
+ const N = t.getHierarchyId();
203
+ console.debug(`${N}>destroy`);
180
204
  }
181
- e.events?.onError?.(t, h), r?.onError?.(t, h);
205
+ e.events?.onError?.(t, b), n.onError?.(t, b);
182
206
  }
183
207
  return () => {
184
- e.events?.onDestroy?.(t), r?.onDestroy?.(t);
208
+ e.events?.onDestroy?.(t), n.onDestroy?.(t);
185
209
  };
186
- }, [e, r, s]);
187
- let I;
210
+ }, [e, n, c]);
211
+ let k;
188
212
  try {
189
- if (w().debug) {
190
- const h = t.getHierarchyId();
191
- console.debug(`${h}>view`);
213
+ if (P().debug) {
214
+ const b = t.getHierarchyId();
215
+ console.debug(`${b}>view`);
192
216
  }
193
- typeof b == "function" ? I = b(o, t) : I = /* @__PURE__ */ O.createElement(O.Fragment, null, o.children);
194
- } catch (h) {
195
- const B = JSON.stringify(h);
196
- I = /* @__PURE__ */ O.createElement(O.Fragment, null, B);
217
+ typeof a == "function" ? k = a(o, t) : k = /* @__PURE__ */ O.createElement(O.Fragment, null, o.children);
218
+ } catch (b) {
219
+ const N = JSON.stringify(b);
220
+ k = /* @__PURE__ */ O.createElement(O.Fragment, null, N);
197
221
  }
198
- return /* @__PURE__ */ O.createElement(J.Provider, { value: f }, I);
222
+ return /* @__PURE__ */ O.createElement(Q.Provider, { value: C }, k);
199
223
  });
200
- let d;
201
- const k = E.sources, a = m(6), l = p(a, 2);
202
- k.has(a) ? (d = k.get(a), d.count++) : (d = {
203
- structId: e.name || l || `Component_${E.count}`,
224
+ let h;
225
+ const v = j.sources, y = ne(6), g = re(y, 2);
226
+ v.has(y) ? (h = v.get(y), h.count++) : (h = {
227
+ structId: e.name || g || `Component_${j.count}`,
204
228
  count: 0
205
- }, k.set(a, d), E.count++);
206
- const P = `${d.structId}#${d.count}`, N = {};
207
- if (n = {
208
- ...e.props,
209
- ...e.actions
210
- }, e.children)
229
+ }, v.set(y, h), j.count++);
230
+ const w = `${h.structId}#${h.count}`, E = {};
231
+ if (r = {}, e.props && Object.assign(r, e.props), e.actions && Object.assign(r, e.actions), e.children)
211
232
  for (const [o, i] of Object.entries(e.children))
212
233
  if (typeof i == "function") {
213
- const s = i, v = (f) => {
214
- const I = s(f);
215
- return /* @__PURE__ */ O.createElement(I.View, null);
234
+ const c = i, I = (C) => {
235
+ const k = c(C);
236
+ return /* @__PURE__ */ O.createElement(k.View, null);
216
237
  };
217
- Reflect.set(N, $(o), v);
238
+ Reflect.set(E, $(o), I);
218
239
  } else
219
- Reflect.set(N, o, i);
220
- for (const [o, i] of Object.entries(r))
221
- o in n && (q(i) ? u.set(o, i) : Reflect.set(n, o, i));
222
- const A = {
223
- onPropChanging: r?.onPropChanging || e.events?.onPropChanging ? (o, i, s) => {
224
- let v = !0, f = r.onPropChanging;
225
- return f && (v = f(String(o), i, s)), v && (f = e.events?.onPropChanging, f && (v = f(String(o), i, s))), v;
240
+ Reflect.set(E, o, i);
241
+ for (const [o, i] of Object.entries(n))
242
+ o in r && (D(i) ? u.set(o, i) : Reflect.set(r, o, i));
243
+ const B = {
244
+ onPropChanging: n.onPropChanging || e.events?.onPropChanging ? (o, i, c) => {
245
+ let I = !0, C = n.onPropChanging;
246
+ return C && (I = C(String(o), i, c)), I && (C = e.events?.onPropChanging, C && (I = C(String(o), i, c))), I;
226
247
  } : void 0,
227
- onPropChange: r?.onPropChange || e.events?.onPropChange ? (o, i) => {
228
- r.onPropChange?.(String(o), i), e.events.onPropChange?.(String(o), i);
248
+ onPropChange: n.onPropChange || e.events?.onPropChange ? (o, i) => {
249
+ n.onPropChange?.(String(o), i), e.events?.onPropChange?.(String(o), i);
229
250
  } : void 0
230
251
  };
231
- function S(o) {
232
- const i = `${Q}${$(o)}`;
233
- return r?.[i] || e.events?.[i];
252
+ function L(o) {
253
+ const i = `${m}${$(o)}`;
254
+ return n[i] || e.events?.[i];
234
255
  }
235
- function x(o) {
236
- const i = `${W}${$(o)}`;
237
- return ((s, v) => {
238
- let f = !0, I = r?.[i];
239
- return I && (f = I(s, v)), f && (I = e.events[i], I && (f = I(s, v))), f;
256
+ function M(o) {
257
+ const i = `${ee}${$(o)}`;
258
+ return ((c, I) => {
259
+ let C = !0, k = n[i];
260
+ return k && (C = k(c, I)), C && (k = e.events?.[i], k && (C = k(c, I))), C;
240
261
  });
241
262
  }
242
- function U(o) {
243
- const i = `${X}${$(o)}`;
244
- return ((s) => {
245
- r[i]?.(s), e.events[i]?.(s);
263
+ function _(o) {
264
+ const i = `${te}${$(o)}`;
265
+ return ((c) => {
266
+ n[i]?.(c), e.events?.[i]?.(c);
246
267
  });
247
268
  }
248
- let G = {};
269
+ let F = {};
249
270
  if (e.props) {
250
271
  for (const o of Object.keys(e.props))
251
- A[o] = {
252
- onGet: S(o),
253
- onChanging: x(o),
254
- onChange: U(o)
272
+ B[o] = {
273
+ onGet: L(o),
274
+ onChanging: M(o),
275
+ onChange: _(o)
255
276
  };
256
277
  for (const o of Object.keys(e.props))
257
- G[o] = H.ref;
278
+ F[o] = G.deep;
258
279
  }
259
280
  if (e.actions)
260
281
  for (const o of Object.keys(e.actions))
261
282
  ;
262
- return n = H(n, G, {
283
+ r = G(r, F, {
263
284
  deep: !0
264
- }), n = Y(n, u, A), t = {
265
- id: P,
285
+ }), r = z(r, u, B);
286
+ let A = {};
287
+ if (t = {
288
+ id: w,
266
289
  parentId: void 0,
267
290
  getHierarchyId: () => {
268
291
  },
@@ -278,34 +301,43 @@ function te(e, r) {
278
301
  },
279
302
  bindings: u,
280
303
  get msgBus() {
281
- return c();
304
+ return l();
282
305
  },
283
- msgBroker: g,
306
+ msgBroker: d,
307
+ effects: A,
284
308
  // view: componentDef.view,
285
- View: y,
286
- children: N,
287
- model: n
288
- }, e.events?.onInit && e.events.onInit(t), r?.onInit && r.onInit(t), t;
309
+ View: f,
310
+ children: E,
311
+ model: r
312
+ }, e.effects)
313
+ for (const [o, i] of Object.entries(e.effects))
314
+ A[o] = se(
315
+ t,
316
+ o,
317
+ i
318
+ );
319
+ return e.events?.onInit && e.events.onInit(t), n.onInit && n.onInit(t), t;
289
320
  }
290
- function de(e, r) {
291
- const t = V(() => te(e, r));
292
- return R(() => () => {
321
+ function Ce(e, n) {
322
+ const t = W(() => ce(e, n));
323
+ return S(() => () => {
293
324
  t.current = null;
294
- }, [e, r]), t.current;
325
+ }, [e, n]), t.current;
295
326
  }
296
- function ge(e) {
327
+ function ve(e) {
297
328
  return (t) => {
298
- const n = e(t);
299
- return /* @__PURE__ */ O.createElement(n.View, { ...t });
329
+ const r = e(t);
330
+ return /* @__PURE__ */ O.createElement(r.View, { ...t });
300
331
  };
301
332
  }
302
333
  export {
303
- T as ComponentMsgFilter,
304
- le as bind,
305
- ae as bindProp,
306
- ge as getFC,
307
- q as isBinding,
308
- p as toHtmlId,
309
- de as useComponent
334
+ Y as ComponentMsgFilter,
335
+ ye as bind,
336
+ be as bindProp,
337
+ se as createEffect,
338
+ ve as getFC,
339
+ D as isBinding,
340
+ re as toHtmlId,
341
+ Ce as useComponent
310
342
  };
311
343
  //# sourceMappingURL=componentModel.es.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"componentModel.es.js","sources":["../../src/componentModel/componentModel.tsx"],"sourcesContent":["import React, { useMemo } from 'react';\r\nimport { PropsWithChildren, useEffect, useLayoutEffect, FC, ReactNode } from 'react';\r\nimport {\r\n $CG_IN,\r\n $CG_OUT,\r\n $TypeArgHeaders,\r\n $TypeArgStruct,\r\n Msg,\r\n MsgBus,\r\n MsgProviderParams,\r\n MsgStruct,\r\n MsgSubscriberParams,\r\n OutStruct,\r\n} from '@actdim/msgmesh/msgBusCore';\r\nimport { MaybePromise, Mutable, SafeKey, Skip } from '@actdim/utico/typeCore';\r\nimport { observer } from 'mobx-react-lite';\r\nimport { action, observable, runInAction } from 'mobx';\r\nimport { useLazyRef } from '@/reactHooks';\r\nimport { getGlobalFlags } from '@/globals';\r\nimport { ReactComponentContext, useComponentContext } from './componentContext';\r\nimport { ComponentMsgHeaders, TreeNode } from './contracts';\r\nimport { lazy } from '@actdim/utico/utils';\r\n\r\nexport enum ComponentMsgFilter {\r\n None = 0,\r\n // AcceptFrom...\r\n FromAncestors = 1 << 0,\r\n FromDescendants = 1 << 1,\r\n}\r\n\r\nexport type MsgChannelGroupProviderParams<\r\n TStruct extends MsgStruct = MsgStruct,\r\n TChannel extends keyof TStruct = keyof TStruct,\r\n TGroup extends keyof TStruct[TChannel] = typeof $CG_IN, // keyof TStruct[TChannel]\r\n TMsgHeaders extends ComponentMsgHeaders = ComponentMsgHeaders,\r\n TScope = any,\r\n> = Skip<\r\n MsgProviderParams<TStruct, TChannel, TGroup>,\r\n 'channel' | 'group' | 'callback' | 'filter'\r\n> & {\r\n // resolve\r\n callback?: (\r\n msgIn: Msg<TStruct, TChannel, TGroup, TMsgHeaders>,\r\n headers: TMsgHeaders,\r\n scope: TScope,\r\n ) => MaybePromise<OutStruct<TStruct, TChannel>>;\r\n filter?: (msg: Msg<TStruct, TChannel, TGroup, TMsgHeaders>, scope: TScope) => boolean;\r\n componentFilter?: ComponentMsgFilter;\r\n};\r\n\r\nexport type MsgChannelGroupSubscriberParams<\r\n TStruct extends MsgStruct = MsgStruct,\r\n TChannel extends keyof TStruct = keyof TStruct,\r\n TGroup extends keyof TStruct[TChannel] = typeof $CG_IN, // keyof TStruct[TChannel]\r\n TMsgHeaders extends ComponentMsgHeaders = ComponentMsgHeaders,\r\n TScope = any,\r\n> = Skip<\r\n MsgSubscriberParams<TStruct, TChannel, TGroup>,\r\n 'channel' | 'group' | 'callback' | 'filter'\r\n> & {\r\n callback?: (msg: Msg<TStruct, TChannel, TGroup, TMsgHeaders>, scope: TScope) => void;\r\n filter?: (msg: Msg<TStruct, TChannel, TGroup, TMsgHeaders>, scope: TScope) => boolean;\r\n componentFilter?: ComponentMsgFilter;\r\n};\r\n\r\n// MsgScope\r\nexport type MsgBrokerScope<\r\n TStruct extends MsgStruct /*= MsgStruct*/,\r\n TKeysToProvide extends keyof TStruct = keyof TStruct,\r\n TKeysToSubscribe extends keyof TStruct = keyof TStruct,\r\n TKeysToPublish extends keyof TStruct = keyof TStruct,\r\n> = {\r\n provide?: TKeysToProvide;\r\n // consume\r\n subscribe?: TKeysToSubscribe;\r\n // produce\r\n publish?: TKeysToPublish;\r\n};\r\n\r\nexport type ComponentPropStruct = Record<string, any>;\r\n// export type ComponentPropStruct = {\r\n// [prop: string]: any;\r\n// };\r\n\r\nexport type ComponentMethodStruct = Record<string, Function>;\r\n// export type ComponentMethodStruct = {\r\n// [action: string]: Function;\r\n// };\r\n\r\n// export type ComponentRefStruct = Record<string, ComponentStruct<TMsgStruct, T>>;\r\nexport type ComponentRefStruct = {\r\n [name: string]: ComponentStruct | ((params: any) => ComponentStruct);\r\n};\r\n\r\nexport type ComponentStructBase<\r\n TMsgStruct extends MsgStruct = MsgStruct,\r\n TPropStruct extends ComponentPropStruct = ComponentPropStruct,\r\n TMsgScope extends MsgBrokerScope<TMsgStruct> = MsgBrokerScope<TMsgStruct>,\r\n> = {\r\n props?: TPropStruct;\r\n actions?: ComponentMethodStruct;\r\n children?: ComponentRefStruct;\r\n // msgs?\r\n msgScope?: TMsgScope;\r\n};\r\n\r\n// ComponentShape\r\nexport type ComponentStruct<\r\n TMsgStruct extends MsgStruct = MsgStruct,\r\n T extends ComponentStructBase<TMsgStruct> = ComponentStructBase<TMsgStruct>,\r\n // TMsgBus extends MsgBus<MsgStruct> = MsgBus<MsgStruct>,\r\n // T extends ComponentStructBase<TMsgBus[typeof $TypeArgStruct]> = ComponentStructBase<\r\n // TMsgBus[typeof $TypeArgStruct]\r\n // >,\r\n> = T & {\r\n msg: TMsgStruct;\r\n};\r\n\r\nexport type MsgBroker<\r\n TStructToProvide extends MsgStruct = MsgStruct,\r\n TStructToSubscribe extends MsgStruct = MsgStruct,\r\n TMsgHeaders extends ComponentMsgHeaders = ComponentMsgHeaders,\r\n TScope = any,\r\n> = {\r\n // providers\r\n provide?: {\r\n [TChannel in keyof TStructToProvide]: {\r\n [TGroup in keyof Skip<\r\n TStructToProvide[TChannel],\r\n typeof $CG_OUT\r\n >]?: MsgChannelGroupProviderParams<\r\n TStructToProvide,\r\n TChannel,\r\n TGroup,\r\n TMsgHeaders,\r\n TScope\r\n >;\r\n };\r\n };\r\n // subscribers\r\n subscribe?: {\r\n [TChannel in keyof TStructToSubscribe]: {\r\n [TGroup in keyof TStructToSubscribe[TChannel]]?: MsgChannelGroupSubscriberParams<\r\n TStructToSubscribe,\r\n TChannel,\r\n TGroup,\r\n TMsgHeaders,\r\n TScope\r\n >;\r\n };\r\n };\r\n abortController?: AbortController;\r\n};\r\n\r\ntype ValueConverter<TTo, TFrom> = {\r\n // ConvertFrom\r\n convert(value: TFrom): TTo;\r\n // ConvertTo\r\n convertBack(value: TTo): TFrom;\r\n};\r\n\r\ntype ValidationResult = {\r\n valid: boolean;\r\n message: string;\r\n};\r\n\r\ntype Validator<T> = {\r\n options: {\r\n blur: boolean;\r\n };\r\n validate: (value: T) => MaybePromise<ValidationResult>;\r\n};\r\n\r\nconst $isBinding = Symbol('$isBinding'); // brand\r\n\r\nclass Binding<T = any, TFrom = any> {\r\n // getter\r\n readonly get: () => T;\r\n // setter\r\n readonly set: (value: T) => void;\r\n readonly converter: ValueConverter<T, TFrom>;\r\n readonly validator: Validator<T>;\r\n readonly readOnly: boolean;\r\n constructor(\r\n get: () => T,\r\n set?: (value: T) => void,\r\n converter?: ValueConverter<T, TFrom>,\r\n validator?: Validator<T>,\r\n ) {\r\n this.get = get;\r\n this.set = set;\r\n this.converter = converter;\r\n this.validator = validator;\r\n this.readOnly = !!set;\r\n this[$isBinding] = true;\r\n }\r\n [$isBinding]: boolean;\r\n}\r\n\r\nexport function isBinding(obj: any): obj is Binding {\r\n return obj[$isBinding] === true;\r\n}\r\n\r\nexport function bind<T, TFrom = any>(\r\n get: () => T,\r\n set?: (value: T) => void,\r\n converter?: ValueConverter<T, TFrom>,\r\n validator?: Validator<T>,\r\n) {\r\n return new Binding(get, set, converter, validator);\r\n}\r\n\r\nexport function bindProp<T extends object, P extends keyof T>(target: () => T, prop: P) {\r\n return new Binding(\r\n () => target()[prop],\r\n (value: T[P]) => {\r\n target()[prop] = value;\r\n },\r\n );\r\n}\r\n\r\nexport type ComponentPropSource<T> = T | Binding<T>;\r\n\r\nexport type ComponentPropParams<TPropStruct extends ComponentPropStruct> = {\r\n [P in keyof TPropStruct]?: ComponentPropSource<TPropStruct[P]>;\r\n};\r\n\r\n// const $ON_PROP_CHANGING = \"onPropChanging\";\r\n// const $ON_PROP_CHANGE = \"onPropChange\";\r\n\r\nconst $ON_GET = 'onGet';\r\n// const $ON_BEFORE_SET = \"onBeforeSet\";\r\nconst $ON_CHANGING = 'onChanging';\r\nconst $ON_CHANGE = 'onChange';\r\n// const $ON_SET = \"onSet\";\r\n\r\ntype PropValueChangingHandler<TProp = PropKey> = (\r\n prop: TProp,\r\n oldValue: any,\r\n newValue: any,\r\n) => boolean;\r\ntype PropValueChangeHandler<TProp = PropKey> = (prop: TProp, value: any) => void;\r\n\r\n// BeforeValueSetHandler\r\ntype ValueChangingHandler<T = any> = (oldValue: T, newValue: T) => boolean;\r\n// ValueSetHandler\r\ntype ValueChangeHandler<T = any> = (value: T) => void;\r\n\r\ntype ComponentEvents<TStruct extends ComponentStruct = ComponentStruct> = {\r\n onPropChanging?: PropValueChangingHandler<keyof TStruct['props']>;\r\n onPropChange?: PropValueChangeHandler<keyof TStruct['props']>;\r\n onInit?: (model: Component<TStruct>) => void;\r\n onLayout?: (model: Component<TStruct>) => void;\r\n onReady?: (model: Component<TStruct>) => void;\r\n onLayoutDestroy?: (model: Component<TStruct>) => void; // onLayoutCleanup\r\n onDestroy?: (model: Component<TStruct>) => void; // onDispose/onCleanup\r\n onError?: (model: Component<TStruct>, error: any) => void;\r\n} & {\r\n [P in keyof TStruct['props'] as `${typeof $ON_GET}${Capitalize<P & string>}`]?: () => TStruct['props'][P];\r\n} & {\r\n [P in keyof TStruct['props'] as `${typeof $ON_CHANGING}${Capitalize<P & string>}`]?: ValueChangingHandler<\r\n TStruct['props']\r\n >;\r\n} & {\r\n [P in keyof TStruct['props'] as `${typeof $ON_CHANGE}${Capitalize<P & string>}`]?: ValueChangeHandler<\r\n TStruct['props']\r\n >;\r\n};\r\n\r\n// AllHTMLAttributes<JSX.Element>\r\n\r\ntype ComponentViewProps = {\r\n render?: boolean;\r\n} & PropsWithChildren;\r\n\r\n// ComponentRenderImplFn\r\ntype ComponentViewImplFn<\r\n TStruct extends ComponentStruct,\r\n TMsgHeaders extends ComponentMsgHeaders = ComponentMsgHeaders,\r\n> = (props: ComponentViewProps, model?: Component<TStruct, TMsgHeaders>) => ReactNode; // JSX.Element\r\n\r\n// ComponentRenderFn\r\ntype ComponentViewFn = (props: ComponentViewProps) => ReactNode; // JSX.Element\r\n\r\ntype PublicKeys<T> = {\r\n [K in keyof T]: K extends `_${string}` ? never : K;\r\n}[keyof T];\r\n\r\nexport type ComponentMsgBroker<\r\n TStruct extends ComponentStruct,\r\n TMsgHeaders extends ComponentMsgHeaders = ComponentMsgHeaders,\r\n> = MsgBroker<\r\n Pick<TStruct['msg'], SafeKey<TStruct['msg'], TStruct['msgScope']['provide']>>,\r\n Pick<TStruct['msg'], SafeKey<TStruct['msg'], TStruct['msgScope']['subscribe']>>,\r\n TMsgHeaders,\r\n Component<TStruct, TMsgHeaders>\r\n>;\r\n\r\nexport type ComponentDef<\r\n TStruct extends ComponentStruct,\r\n TMsgHeaders extends ComponentMsgHeaders = ComponentMsgHeaders,\r\n> = {\r\n name?: string;\r\n props?: TStruct['props'];\r\n actions?: TStruct['actions'];\r\n children?: ComponentDefChildren<TStruct['children']>;\r\n events?: ComponentEvents<TStruct>;\r\n // msgs?\r\n msgBroker?: ComponentMsgBroker<TStruct, TMsgHeaders>;\r\n msgBus?: MsgBus<TStruct['msg'], TMsgHeaders>;\r\n view?: ComponentViewImplFn<TStruct, TMsgHeaders>;\r\n};\r\n\r\ntype ComponentDefChildren<TRefStruct extends ComponentRefStruct> = {\r\n [P in keyof TRefStruct]: TRefStruct[P] extends (params: infer TParams) => infer T\r\n ? T extends ComponentStruct\r\n ? (params: TParams) => Component<T>\r\n : never\r\n : TRefStruct[P] extends ComponentStruct\r\n ? Component<TRefStruct[P]>\r\n : never;\r\n};\r\n\r\ntype ComponentChildren<TRefStruct extends ComponentRefStruct> = {\r\n [P in keyof TRefStruct as TRefStruct[P] extends Function\r\n ? `${Capitalize<P & string>}`\r\n : P]: TRefStruct[P] extends (params: infer TParams) => infer T\r\n ? T extends ComponentStruct\r\n ? FC<ComponentParams<T> & TParams>\r\n : never\r\n : TRefStruct[P] extends ComponentStruct\r\n ? Component<TRefStruct[P]>\r\n : never;\r\n};\r\n\r\nexport type ComponentMsgStruct<TStruct extends ComponentStruct = ComponentStruct> = Pick<\r\n TStruct['msg'],\r\n | SafeKey<TStruct['msg'], TStruct['msgScope']['provide']>\r\n | SafeKey<TStruct['msg'], TStruct['msgScope']['subscribe']>\r\n | SafeKey<TStruct['msg'], TStruct['msgScope']['publish']>\r\n>;\r\n\r\nexport type ComponentBase<\r\n TStruct extends ComponentStruct = ComponentStruct,\r\n TMsgHeaders extends ComponentMsgHeaders = ComponentMsgHeaders,\r\n> = {\r\n id: string;\r\n parentId: string;\r\n // getHierarchyPath?\r\n getHierarchyId(): string;\r\n getParent(): string | undefined;\r\n getChildren(): string[];\r\n getChainUp(): string[];\r\n getChainDown(): string[];\r\n getNodeMap(): Map<string, TreeNode>;\r\n bindings: Map<PropKey, Binding>;\r\n msgBus: MsgBus<ComponentMsgStruct<TStruct>, TMsgHeaders>;\r\n msgBroker: ComponentMsgBroker<TStruct>;\r\n View: ComponentViewFn;\r\n};\r\n\r\nexport type ComponentModel<TStruct extends ComponentStruct = ComponentStruct> = TStruct['props'] &\r\n Readonly<TStruct['actions']>;\r\n\r\nexport type Component<\r\n TStruct extends ComponentStruct = ComponentStruct,\r\n TMsgHeaders extends ComponentMsgHeaders = ComponentMsgHeaders,\r\n> = {\r\n readonly model: ComponentModel<TStruct>;\r\n readonly children: Readonly<ComponentChildren<TStruct['children']>>;\r\n} & Readonly<ComponentBase<TStruct, TMsgHeaders>>;\r\n\r\n// style: CSSProperties;\r\n\r\ntype PropEventHandlers = {\r\n onGet?: () => any;\r\n onChanging?: (oldValue: any, newValue: any) => boolean;\r\n onChange?: (value: any) => void;\r\n};\r\n\r\ntype PropKey = string | symbol;\r\ntype ProxyEventHandlers = {\r\n onPropChanging?: PropValueChangingHandler<PropKey>;\r\n onPropChange?: PropValueChangeHandler<PropKey>;\r\n} & Record<PropKey, PropEventHandlers>;\r\n\r\n// ComponentConfig\r\nexport type ComponentParams<TStruct extends ComponentStruct = ComponentStruct> =\r\n ComponentPropParams<TStruct['props']> & ComponentEvents<TStruct>; // & PropsWithChildren\r\n\r\nconst blankView = () => null;\r\n\r\nfunction createProxy(\r\n state: any,\r\n bindings: Map<PropKey, Binding>,\r\n proxyEventHandlers: ProxyEventHandlers,\r\n) {\r\n const onPropChanging = proxyEventHandlers.onPropChanging;\r\n const onPropChange = proxyEventHandlers.onPropChange;\r\n return new Proxy(state, {\r\n get(obj, prop, receiver) {\r\n const onGet = proxyEventHandlers[prop]?.onGet;\r\n if (onGet) {\r\n return onGet();\r\n }\r\n const binding = bindings.get(String(prop));\r\n if (binding) {\r\n let value: any = undefined;\r\n value = binding.get();\r\n return value;\r\n }\r\n return Reflect.get(obj, prop, receiver);\r\n },\r\n set(obj, prop, value, receiver) {\r\n const oldValue = obj[prop];\r\n\r\n const onChanging = proxyEventHandlers[prop]?.onChanging;\r\n if (onChanging) {\r\n const shouldChange = onChanging(oldValue, value);\r\n if (!shouldChange) {\r\n return true;\r\n }\r\n }\r\n\r\n if (onPropChanging) {\r\n const shouldChange = onPropChanging(prop, oldValue, value);\r\n if (!shouldChange) {\r\n return true;\r\n }\r\n }\r\n\r\n const result = runInAction(() => {\r\n return Reflect.set(obj, prop, value, receiver);\r\n });\r\n\r\n const binding = bindings.get(prop);\r\n if (binding?.set) {\r\n binding.set(value);\r\n }\r\n\r\n const onChange = proxyEventHandlers[prop]?.onChange;\r\n if (onChange) {\r\n onChange(value);\r\n }\r\n\r\n if (onPropChange) {\r\n onPropChange(prop, value);\r\n }\r\n\r\n return result;\r\n },\r\n });\r\n}\r\n\r\nfunction capitalize(name: string) {\r\n return name.replace(/^./, name[0].toUpperCase());\r\n}\r\n\r\nfunction asyncToGeneratorFlow(asyncFn: (...args: any[]) => Promise<any>) {\r\n return function* (...args: any[]) {\r\n const result = yield asyncFn(...args);\r\n return result;\r\n };\r\n}\r\n\r\ntype ComponentSourceInfo = {\r\n // classId\r\n structId: string;\r\n count: 0;\r\n};\r\n\r\nconst componentData = {\r\n sources: new Map<string, ComponentSourceInfo>(),\r\n count: 0,\r\n};\r\n\r\nexport function toHtmlId(url: string, segmentsCount: number = 1): string {\r\n const clean = url.split(/[?#]/)[0];\r\n const parts = clean\r\n .split('/')\r\n .filter(Boolean)\r\n .map((segment) => decodeURIComponent(segment));\r\n\r\n const last = parts.slice(-segmentsCount);\r\n const raw = last.join('-');\r\n let id = raw\r\n .normalize('NFKD')\r\n .replace(/[^a-zA-Z0-9\\-_:.+#]/g, '-')\r\n .replace(/-+/g, '-')\r\n .replace(/^[^a-zA-Z]+/, '-')\r\n .replace(/[+#]$/, '-');\r\n return id;\r\n}\r\n\r\nfunction getCallerFileName(depth = 2): string | null {\r\n const err = new Error();\r\n const stack = err.stack?.split('\\n');\r\n if (!stack || stack.length <= depth) return null;\r\n\r\n const match = stack[depth].match(/\\((.*):\\d+:\\d+\\)/);\r\n if (match) {\r\n return match[1];\r\n }\r\n return null;\r\n}\r\n\r\nfunction registerMsgBroker<TStruct extends ComponentStruct = ComponentStruct>(\r\n component: Component<TStruct>,\r\n) {\r\n const providers = component?.msgBroker.provide;\r\n if (providers) {\r\n for (const [channel, providerGroups] of Object.entries(providers)) {\r\n for (const [g, p] of Object.entries(providerGroups)) {\r\n const provider = p as MsgChannelGroupProviderParams;\r\n const callback = provider.callback;\r\n if (callback) {\r\n provider.callback = (msg, headers) => {\r\n return callback(msg, headers, component);\r\n };\r\n }\r\n const filter = provider.filter;\r\n const componentFilter = provider.componentFilter || ComponentMsgFilter.None;\r\n const msgFilter = (msg) => {\r\n let result = true;\r\n if (componentFilter & ComponentMsgFilter.FromAncestors) {\r\n const ancestorIds = component.getChainUp();\r\n result = ancestorIds.indexOf(msg.headers?.sourceId) >= 0;\r\n }\r\n if (result && componentFilter & ComponentMsgFilter.FromDescendants) {\r\n const ancestorIds = component.getChainDown();\r\n result = ancestorIds.indexOf(msg.headers?.sourceId) >= 0;\r\n }\r\n if (result && filter) {\r\n result = filter(msg, component);\r\n }\r\n return result;\r\n };\r\n provider.filter = msgFilter;\r\n\r\n component.msgBus.provide({\r\n ...p,\r\n channel: channel,\r\n group: g,\r\n config: {\r\n abortSignal: component.msgBroker.abortController.signal,\r\n },\r\n });\r\n }\r\n }\r\n }\r\n const subscribers = component?.msgBroker?.subscribe;\r\n if (subscribers) {\r\n for (const [channel, subscriberGroups] of Object.entries(subscribers)) {\r\n for (const [g, s] of Object.entries(subscriberGroups)) {\r\n const subscriber = s as MsgChannelGroupSubscriberParams;\r\n const callback = subscriber.callback;\r\n if (callback) {\r\n subscriber.callback = (msg) => {\r\n return callback(msg, component);\r\n };\r\n }\r\n const filter = subscriber.filter;\r\n const componentFilter = subscriber.componentFilter || ComponentMsgFilter.None;\r\n const msgFilter = (msg) => {\r\n let result = true;\r\n if (componentFilter & ComponentMsgFilter.FromAncestors) {\r\n const ancestorIds = component.getChainUp();\r\n result = ancestorIds.indexOf(msg.headers?.sourceId) >= 0;\r\n }\r\n if (result && componentFilter & ComponentMsgFilter.FromDescendants) {\r\n const ancestorIds = component.getChainDown();\r\n result = ancestorIds.indexOf(msg.headers?.sourceId) >= 0;\r\n }\r\n if (result && filter) {\r\n result = filter(msg, component);\r\n }\r\n return result;\r\n };\r\n subscriber.filter = msgFilter;\r\n\r\n component.msgBus.on({\r\n ...s,\r\n channel: channel,\r\n group: g,\r\n config: {\r\n abortSignal: component.msgBroker.abortController.signal,\r\n },\r\n });\r\n }\r\n }\r\n }\r\n}\r\n\r\nfunction getComponentMsgBus<TStruct extends ComponentStruct = ComponentStruct>(\r\n msgBus: MsgBus<TStruct['msg']>,\r\n headerSetter: (headers?: ComponentMsgHeaders) => void,\r\n) {\r\n const updateParams = (params: { headers?: ComponentMsgHeaders }) => {\r\n if (!params.headers) {\r\n params.headers = {};\r\n }\r\n headerSetter?.(params.headers);\r\n };\r\n return {\r\n config: msgBus.config,\r\n on: (params) => {\r\n return msgBus.on(params);\r\n },\r\n onceAsync: (params) => {\r\n return msgBus.onceAsync(params);\r\n },\r\n stream: (params) => {\r\n return msgBus.stream(params);\r\n },\r\n provide: (params) => {\r\n updateParams(params);\r\n return msgBus.provide(params);\r\n },\r\n dispatch: (params) => {\r\n updateParams(params);\r\n return msgBus.dispatch(params);\r\n },\r\n dispatchAsync: (params) => {\r\n updateParams(params);\r\n return msgBus.dispatchAsync(params);\r\n },\r\n } as MsgBus<TStruct['msg']>;\r\n}\r\n\r\nfunction createComponent<TStruct extends ComponentStruct = ComponentStruct>(\r\n componentDef: ComponentDef<TStruct>,\r\n params: ComponentParams<TStruct>,\r\n): Component<TStruct> {\r\n // result\r\n let component: Mutable<Component<TStruct>>;\r\n let model: Mutable<ComponentModel<TStruct>>;\r\n\r\n const view = componentDef.view;\r\n let msgBus = componentDef.msgBus;\r\n\r\n const bindings = new Map<PropKey, Binding>();\r\n\r\n const componentMsgBus = lazy(() => {\r\n return getComponentMsgBus(msgBus, (headers) => {\r\n if (headers?.sourceId == undefined) {\r\n headers.sourceId = component.id;\r\n }\r\n }); // as ComponentModel<TStruct>['msgBus']\r\n });\r\n\r\n let msgBroker = {\r\n ...componentDef.msgBroker,\r\n };\r\n\r\n if (!msgBroker.abortController) {\r\n msgBroker.abortController = new AbortController();\r\n }\r\n\r\n const ViewFC = observer((props: ComponentViewProps) => {\r\n const id = component.id;\r\n const context = useComponentContext();\r\n const parentId = context.currentId;\r\n\r\n component.parentId = parentId;\r\n\r\n if (!msgBus) {\r\n msgBus = context.msgBus;\r\n }\r\n\r\n const scopeContext = useMemo(\r\n () => ({ ...context, currentId: id }),\r\n [componentDef, params, context],\r\n );\r\n\r\n useLayoutEffect(() => {\r\n try {\r\n if (getGlobalFlags().debug) {\r\n const hierarchyId = component.getHierarchyId();\r\n console.debug(`${hierarchyId}>layout`);\r\n }\r\n\r\n context.register(id, parentId);\r\n\r\n component.getHierarchyId = () => context.getHierarchyPath(id);\r\n component.getChainDown = () => context.getChainDown(id);\r\n component.getChainUp = () => context.getChainUp(id);\r\n component.getChildren = () => context.getChildren(id);\r\n component.getParent = () => context.getParent(id);\r\n component.getNodeMap = () => context.getNodeMap();\r\n\r\n registerMsgBroker(component);\r\n\r\n componentDef.events?.onLayout?.(component);\r\n params?.onLayout?.(component);\r\n } catch (err) {\r\n componentDef.events?.onError?.(component, err);\r\n params?.onError?.(component, err);\r\n }\r\n\r\n return () => {\r\n if (getGlobalFlags().debug) {\r\n const hierarchyId = component.getHierarchyId();\r\n console.debug(`${hierarchyId}>layout-destroy`);\r\n }\r\n context.unregister(id);\r\n\r\n msgBroker.abortController?.abort();\r\n\r\n componentDef.events?.onLayoutDestroy?.(component);\r\n params?.onLayoutDestroy?.(component);\r\n };\r\n }, [componentDef, params, context]);\r\n\r\n useEffect(() => {\r\n try {\r\n if (getGlobalFlags().debug) {\r\n // mount\r\n const hierarchyId = component.getHierarchyId();\r\n console.debug(`${hierarchyId}>ready`);\r\n }\r\n componentDef.events?.onReady?.(component);\r\n params?.onReady?.(component);\r\n } catch (err) {\r\n if (getGlobalFlags().debug) {\r\n // unmount\r\n const hierarchyId = component.getHierarchyId();\r\n console.debug(`${hierarchyId}>destroy`);\r\n }\r\n componentDef.events?.onError?.(component, err);\r\n params?.onError?.(component, err);\r\n }\r\n return () => {\r\n componentDef.events?.onDestroy?.(component);\r\n params?.onDestroy?.(component);\r\n };\r\n }, [componentDef, params, context]);\r\n\r\n let content: React.ReactNode;\r\n // let content: any;\r\n try {\r\n if (getGlobalFlags().debug) {\r\n // render\r\n const hierarchyId = component.getHierarchyId();\r\n console.debug(`${hierarchyId}>view`);\r\n }\r\n if (typeof view === 'function') {\r\n content = view(props, component);\r\n } else {\r\n // content = props.children;\r\n content = <>{props.children}</>;\r\n }\r\n } catch (err) {\r\n // throw err;\r\n const errDetails = JSON.stringify(err);\r\n // msgBus.dispatch\r\n content = <>{errDetails}</>;\r\n }\r\n return (\r\n <ReactComponentContext.Provider value={scopeContext}>\r\n {content}\r\n </ReactComponentContext.Provider>\r\n );\r\n });\r\n\r\n let srcInfo: ComponentSourceInfo;\r\n const sources = componentData.sources;\r\n\r\n const fileName = getCallerFileName(6);\r\n const srcName = toHtmlId(fileName, 2);\r\n\r\n if (sources.has(fileName)) {\r\n srcInfo = sources.get(fileName);\r\n srcInfo.count++;\r\n } else {\r\n const structId = componentDef.name || srcName || `Component_${componentData.count}`;\r\n srcInfo = {\r\n structId: structId,\r\n count: 0,\r\n };\r\n sources.set(fileName, srcInfo);\r\n componentData.count++;\r\n }\r\n\r\n const id = `${srcInfo.structId}#${srcInfo.count}`;\r\n\r\n const children = {} as ComponentChildren<TStruct['children']>;\r\n\r\n model = {\r\n ...componentDef.props,\r\n ...componentDef.actions,\r\n };\r\n\r\n if (componentDef.children) {\r\n for (const [key, value] of Object.entries(componentDef.children)) {\r\n if (typeof value == 'function') {\r\n const view = value as (params: any) => Component;\r\n // observer\r\n const ChildViewFC: ComponentViewImplFn<TStruct> = (props) => {\r\n const c = view(props);\r\n return <c.View />;\r\n // if (typeof c.view === \"function\") {\r\n // return c.view(props);\r\n // }\r\n // return <>{props.children}</>;\r\n };\r\n Reflect.set(children, capitalize(key), ChildViewFC);\r\n } else {\r\n Reflect.set(children, key, value);\r\n }\r\n }\r\n }\r\n\r\n // Reflect.ownKeys/Object.keys\r\n for (const [key, value] of Object.entries(params)) {\r\n // model.hasOwnProperty(key)\r\n if (key in model) {\r\n if (isBinding(value)) {\r\n bindings.set(key, value);\r\n } else {\r\n Reflect.set(model, key, value);\r\n }\r\n }\r\n }\r\n\r\n const proxyEventHandlers: Pick<ProxyEventHandlers, 'onPropChanging' | 'onPropChange'> = {\r\n onPropChanging:\r\n params?.onPropChanging || componentDef.events?.onPropChanging\r\n ? (prop, oldValue, newValue) => {\r\n let result = true;\r\n let handler = params.onPropChanging;\r\n if (handler) {\r\n result = handler(String(prop), oldValue, newValue);\r\n }\r\n if (result) {\r\n handler = componentDef.events?.onPropChanging;\r\n if (handler) {\r\n result = handler(String(prop), oldValue, newValue);\r\n }\r\n }\r\n return result;\r\n }\r\n : undefined,\r\n onPropChange:\r\n params?.onPropChange || componentDef.events?.onPropChange\r\n ? (prop, value) => {\r\n params.onPropChange?.(String(prop), value);\r\n componentDef.events.onPropChange?.(String(prop), value);\r\n }\r\n : undefined,\r\n };\r\n\r\n function resolveOnGetEventHandler(prop: string) {\r\n const key = `${$ON_GET}${capitalize(prop)}`;\r\n return params?.[key] || componentDef.events?.[key];\r\n }\r\n\r\n function resolveOnChangingEventHandler(prop: string) {\r\n const key = `${$ON_CHANGING}${capitalize(prop)}`;\r\n return ((oldValue: any, newValue: any) => {\r\n let result = true;\r\n let handler = params?.[key] as ValueChangingHandler<any>;\r\n if (handler) {\r\n result = handler(oldValue, newValue);\r\n }\r\n if (result) {\r\n handler = componentDef.events[key] as ValueChangingHandler<any>;\r\n if (handler) {\r\n result = handler(oldValue, newValue);\r\n }\r\n }\r\n return result;\r\n }) as ValueChangingHandler;\r\n }\r\n\r\n function resolveOnChangeEventHandler(prop: string) {\r\n const key = `${$ON_CHANGE}${capitalize(prop)}`;\r\n return ((value: any) => {\r\n (params[key] as ValueChangeHandler<any>)?.(value);\r\n (componentDef.events[key] as ValueChangeHandler<any>)?.(value);\r\n }) as ValueChangeHandler;\r\n }\r\n\r\n let annotationMap: Record<string, any> = {};\r\n\r\n if (componentDef.props) {\r\n for (const prop of Object.keys(componentDef.props)) {\r\n proxyEventHandlers[prop] = {\r\n onGet: resolveOnGetEventHandler(prop),\r\n onChanging: resolveOnChangingEventHandler(prop),\r\n onChange: resolveOnChangeEventHandler(prop),\r\n };\r\n }\r\n\r\n for (const key of Object.keys(componentDef.props)) {\r\n annotationMap[key] = observable.ref;\r\n }\r\n }\r\n\r\n if (componentDef.actions) {\r\n const annotationMap: Record<string, any> = {};\r\n for (const key of Object.keys(componentDef.actions)) {\r\n annotationMap[key] = action;\r\n }\r\n }\r\n\r\n model = observable(model, annotationMap, {\r\n deep: true,\r\n });\r\n\r\n model = createProxy(model, bindings, proxyEventHandlers);\r\n\r\n component = {\r\n id: id,\r\n parentId: undefined,\r\n getHierarchyId: () => undefined,\r\n getChainDown: () => undefined,\r\n getChainUp: () => undefined,\r\n getChildren: () => undefined,\r\n getParent: () => undefined,\r\n getNodeMap: () => undefined,\r\n bindings: bindings,\r\n get msgBus() {\r\n return componentMsgBus();\r\n },\r\n msgBroker: msgBroker,\r\n // view: componentDef.view,\r\n View: ViewFC,\r\n children: children,\r\n model: model,\r\n };\r\n\r\n if (componentDef.events?.onInit) {\r\n componentDef.events.onInit(component);\r\n }\r\n\r\n if (params?.onInit) {\r\n params.onInit(component);\r\n }\r\n\r\n return component;\r\n}\r\n\r\nexport function useComponent<\r\n TStruct extends ComponentStruct = ComponentStruct,\r\n TMsgHeaders extends ComponentMsgHeaders = ComponentMsgHeaders,\r\n>(componentDef: ComponentDef<TStruct, TMsgHeaders>, params: ComponentParams<TStruct>) {\r\n const ref = useLazyRef(() => createComponent(componentDef, params));\r\n useLayoutEffect(() => {\r\n return () => {\r\n ref.current = null;\r\n };\r\n }, [componentDef, params]);\r\n return ref.current;\r\n}\r\n\r\n// asFC/toFC\r\nexport function getFC<TStruct extends ComponentStruct>(\r\n factory: (params: ComponentParams<TStruct>) => Component<TStruct>,\r\n): FC<ComponentParams<TStruct>> {\r\n // observer\r\n const fc = (params: ComponentParams<TStruct> & PropsWithChildren) => {\r\n // componentHook\r\n const c = factory(params); // without useRef!\r\n // return c.view();\r\n return <c.View {...params} />;\r\n };\r\n return fc;\r\n}\r\n"],"names":["ComponentMsgFilter","$isBinding","Binding","get","set","converter","validator","isBinding","obj","bind","bindProp","target","prop","value","$ON_GET","$ON_CHANGING","$ON_CHANGE","createProxy","state","bindings","proxyEventHandlers","onPropChanging","onPropChange","receiver","onGet","binding","oldValue","onChanging","result","runInAction","onChange","capitalize","name","componentData","toHtmlId","url","segmentsCount","segment","getCallerFileName","depth","stack","match","registerMsgBroker","component","providers","channel","providerGroups","g","p","provider","callback","msg","headers","filter","componentFilter","msgFilter","subscribers","subscriberGroups","s","subscriber","getComponentMsgBus","msgBus","headerSetter","updateParams","params","createComponent","componentDef","model","view","componentMsgBus","lazy","msgBroker","ViewFC","observer","props","id","context","useComponentContext","parentId","scopeContext","useMemo","useLayoutEffect","getGlobalFlags","hierarchyId","err","useEffect","content","React","errDetails","ReactComponentContext","srcInfo","sources","fileName","srcName","children","key","ChildViewFC","c","newValue","handler","resolveOnGetEventHandler","resolveOnChangingEventHandler","resolveOnChangeEventHandler","annotationMap","observable","useComponent","ref","useLazyRef","getFC","factory"],"mappings":"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"}
1
+ {"version":3,"file":"componentModel.es.js","sources":["../../src/componentModel/componentModel.tsx"],"sourcesContent":["import React, { useMemo } from 'react';\r\nimport { PropsWithChildren, useEffect, useLayoutEffect, FC, ReactNode } from 'react';\r\nimport {\r\n $CG_IN,\r\n $CG_OUT,\r\n $TypeArgHeaders,\r\n $TypeArgStruct,\r\n Msg,\r\n MsgBus,\r\n MsgProviderParams,\r\n MsgStruct,\r\n MsgSubscriberParams,\r\n OutStruct,\r\n} from '@actdim/msgmesh/msgBusCore';\r\nimport {\r\n Extends,\r\n HasKeys,\r\n IF,\r\n IsEmpty,\r\n MaybeKeyOf,\r\n MaybePromise,\r\n Mutable,\r\n Require,\r\n Skip,\r\n} from '@actdim/utico/typeCore';\r\nimport { observer } from 'mobx-react-lite';\r\nimport {\r\n action,\r\n isObservable,\r\n observable,\r\n runInAction,\r\n toJS,\r\n autorun,\r\n IReactionDisposer,\r\n} from 'mobx';\r\nimport { useLazyRef } from '@/reactHooks';\r\nimport { getGlobalFlags } from '@/globals';\r\nimport { ReactComponentContext, useComponentContext } from './componentContext';\r\nimport { ComponentMsgHeaders, TreeNode } from './contracts';\r\nimport { lazy } from '@actdim/utico/utils';\r\nimport { isPlainObject } from 'mobx/dist/internal';\r\n\r\nexport enum ComponentMsgFilter {\r\n None = 0,\r\n // AcceptFrom...\r\n FromAncestors = 1 << 0,\r\n FromDescendants = 1 << 1,\r\n}\r\n\r\nexport type MsgChannelGroupProviderParams<\r\n TStruct extends MsgStruct = MsgStruct,\r\n TChannel extends keyof TStruct = keyof TStruct,\r\n TGroup extends keyof TStruct[TChannel] = typeof $CG_IN, // keyof TStruct[TChannel]\r\n TMsgHeaders extends ComponentMsgHeaders = ComponentMsgHeaders,\r\n TScope = any,\r\n> = Skip<\r\n MsgProviderParams<TStruct, TChannel, TGroup>,\r\n 'channel' | 'group' | 'callback' | 'filter'\r\n> & {\r\n // resolve\r\n callback?: (\r\n msgIn: Msg<TStruct, TChannel, TGroup, TMsgHeaders>,\r\n headers: TMsgHeaders,\r\n scope: TScope,\r\n ) => MaybePromise<OutStruct<TStruct, TChannel>>;\r\n filter?: (msg: Msg<TStruct, TChannel, TGroup, TMsgHeaders>, scope: TScope) => boolean;\r\n componentFilter?: ComponentMsgFilter;\r\n};\r\n\r\nexport type MsgChannelGroupSubscriberParams<\r\n TStruct extends MsgStruct = MsgStruct,\r\n TChannel extends keyof TStruct = keyof TStruct,\r\n TGroup extends keyof TStruct[TChannel] = typeof $CG_IN, // keyof TStruct[TChannel]\r\n TMsgHeaders extends ComponentMsgHeaders = ComponentMsgHeaders,\r\n TScope = any,\r\n> = Skip<\r\n MsgSubscriberParams<TStruct, TChannel, TGroup>,\r\n 'channel' | 'group' | 'callback' | 'filter'\r\n> & {\r\n callback?: (msg: Msg<TStruct, TChannel, TGroup, TMsgHeaders>, scope: TScope) => void;\r\n filter?: (msg: Msg<TStruct, TChannel, TGroup, TMsgHeaders>, scope: TScope) => boolean;\r\n componentFilter?: ComponentMsgFilter;\r\n};\r\n\r\n// MsgScope\r\nexport type MsgBrokerScope<\r\n TStruct extends MsgStruct /*= MsgStruct*/,\r\n TKeysToProvide extends keyof TStruct = keyof TStruct,\r\n TKeysToSubscribe extends keyof TStruct = keyof TStruct,\r\n TKeysToPublish extends keyof TStruct = keyof TStruct,\r\n> = {\r\n provide?: TKeysToProvide;\r\n // consume\r\n subscribe?: TKeysToSubscribe;\r\n // produce\r\n publish?: TKeysToPublish;\r\n};\r\n\r\nexport type ComponentPropStruct = Record<string, any>;\r\n// export type ComponentPropStruct = {\r\n// [prop: string]: any;\r\n// };\r\n\r\nexport type ComponentMethodStruct = Record<string, Function>;\r\n// export type ComponentMethodStruct = {\r\n// [action: string]: Function;\r\n// };\r\n\r\n// export type ComponentRefStruct = Record<string, ComponentStruct<TMsgStruct, T>>;\r\nexport type ComponentRefStruct = {\r\n [name: string]: ComponentStruct | ((params: any) => ComponentStruct);\r\n};\r\n\r\nexport type ComponentStructBase<\r\n TMsgStruct extends MsgStruct = MsgStruct,\r\n TPropStruct extends ComponentPropStruct = ComponentPropStruct,\r\n TMsgScope extends MsgBrokerScope<TMsgStruct> = MsgBrokerScope<TMsgStruct>,\r\n> = {\r\n props?: TPropStruct;\r\n actions?: ComponentMethodStruct;\r\n effects?: string[] | string | undefined;\r\n children?: ComponentRefStruct;\r\n // msgs?\r\n msgScope?: TMsgScope;\r\n};\r\n\r\n// ComponentShape\r\nexport type ComponentStruct<\r\n TMsgStruct extends MsgStruct = MsgStruct,\r\n T extends ComponentStructBase<TMsgStruct> = ComponentStructBase<TMsgStruct>,\r\n> = T & {\r\n msg: TMsgStruct;\r\n};\r\n\r\nexport type MsgBroker<\r\n TStructToProvide extends MsgStruct = MsgStruct,\r\n TStructToSubscribe extends MsgStruct = MsgStruct,\r\n TMsgHeaders extends ComponentMsgHeaders = ComponentMsgHeaders,\r\n TScope = any,\r\n> = Require<\r\n {\r\n // providers\r\n provide?: Require<\r\n {\r\n [TChannel in keyof TStructToProvide]: {\r\n [TGroup in keyof Skip<\r\n TStructToProvide[TChannel],\r\n typeof $CG_OUT\r\n >]?: MsgChannelGroupProviderParams<\r\n TStructToProvide,\r\n TChannel,\r\n TGroup,\r\n TMsgHeaders,\r\n TScope\r\n >;\r\n };\r\n },\r\n HasKeys<TStructToProvide>\r\n >;\r\n // subscribers\r\n subscribe?: Require<\r\n {\r\n [TChannel in keyof TStructToSubscribe]: {\r\n [TGroup in keyof TStructToSubscribe[TChannel]]?: MsgChannelGroupSubscriberParams<\r\n TStructToSubscribe,\r\n TChannel,\r\n TGroup,\r\n TMsgHeaders,\r\n TScope\r\n >;\r\n };\r\n },\r\n HasKeys<TStructToSubscribe>\r\n >;\r\n abortController?: AbortController;\r\n },\r\n HasKeys<TStructToProvide & TStructToSubscribe>\r\n>;\r\n\r\ntype ValueConverter<TTo, TFrom> = {\r\n // ConvertFrom\r\n convert(value: TFrom): TTo;\r\n // ConvertTo\r\n convertBack(value: TTo): TFrom;\r\n};\r\n\r\ntype ValidationResult = {\r\n valid: boolean;\r\n message: string;\r\n};\r\n\r\ntype Validator<T> = {\r\n options: {\r\n blur: boolean;\r\n };\r\n validate: (value: T) => MaybePromise<ValidationResult>;\r\n};\r\n\r\nconst $isBinding = Symbol('$isBinding'); // brand\r\n\r\nclass Binding<T = any, TFrom = any> {\r\n // getter\r\n readonly get: () => T;\r\n // setter\r\n readonly set: (value: T) => void;\r\n readonly converter: ValueConverter<T, TFrom>;\r\n readonly validator: Validator<T>;\r\n readonly readOnly: boolean;\r\n constructor(\r\n get: () => T,\r\n set?: (value: T) => void,\r\n converter?: ValueConverter<T, TFrom>,\r\n validator?: Validator<T>,\r\n ) {\r\n this.get = get;\r\n this.set = set;\r\n this.converter = converter;\r\n this.validator = validator;\r\n this.readOnly = !!set;\r\n this[$isBinding] = true;\r\n }\r\n [$isBinding]: boolean;\r\n}\r\n\r\nexport function isBinding(obj: any): obj is Binding {\r\n return obj[$isBinding] === true;\r\n}\r\n\r\nexport function bind<T, TFrom = any>(\r\n get: () => T,\r\n set?: (value: T) => void,\r\n converter?: ValueConverter<T, TFrom>,\r\n validator?: Validator<T>,\r\n) {\r\n return new Binding(get, set, converter, validator);\r\n}\r\n\r\nexport function bindProp<T extends object, P extends keyof T>(target: () => T, prop: P) {\r\n return new Binding(\r\n () => target()[prop],\r\n (value: T[P]) => {\r\n target()[prop] = value;\r\n },\r\n );\r\n}\r\n\r\nexport type ComponentPropSource<T> = T | Binding<T>;\r\n\r\nexport type ComponentPropParams<TPropStruct extends ComponentPropStruct> = {\r\n [P in keyof TPropStruct]?: ComponentPropSource<TPropStruct[P]>;\r\n};\r\n\r\n// const $ON_PROP_CHANGING = \"onPropChanging\";\r\n// const $ON_PROP_CHANGE = \"onPropChange\";\r\n\r\nconst $ON_GET = 'onGet';\r\n// const $ON_BEFORE_SET = \"onBeforeSet\";\r\nconst $ON_CHANGING = 'onChanging';\r\nconst $ON_CHANGE = 'onChange';\r\n// const $ON_SET = \"onSet\";\r\n\r\ntype PropValueChangingHandler<TProp = PropertyKey> = (\r\n prop: TProp,\r\n oldValue: any,\r\n newValue: any,\r\n) => boolean;\r\ntype PropValueChangeHandler<TProp = PropertyKey> = (prop: TProp, value: any) => void;\r\n\r\n// BeforeValueSetHandler\r\ntype ValueChangingHandler<T = any> = (oldValue: T, newValue: T) => boolean;\r\n// ValueSetHandler\r\ntype ValueChangeHandler<T = any> = (value: T) => void;\r\n\r\ntype ComponentEvents<TStruct extends ComponentStruct = ComponentStruct> = {\r\n onPropChanging?: PropValueChangingHandler<keyof TStruct['props']>;\r\n onPropChange?: PropValueChangeHandler<keyof TStruct['props']>;\r\n onInit?: (component: Component<TStruct>) => void;\r\n onLayout?: (component: Component<TStruct>) => void;\r\n onReady?: (component: Component<TStruct>) => void;\r\n onLayoutDestroy?: (component: Component<TStruct>) => void; // onLayoutCleanup\r\n onDestroy?: (component: Component<TStruct>) => void; // onDispose/onCleanup\r\n onError?: (component: Component<TStruct>, error: any) => void;\r\n} & {\r\n [P in keyof TStruct['props'] as `${typeof $ON_GET}${Capitalize<P & string>}`]?: () => TStruct['props'][P];\r\n} & {\r\n [P in keyof TStruct['props'] as `${typeof $ON_CHANGING}${Capitalize<P & string>}`]?: ValueChangingHandler<\r\n TStruct['props']\r\n >;\r\n} & {\r\n [P in keyof TStruct['props'] as `${typeof $ON_CHANGE}${Capitalize<P & string>}`]?: ValueChangeHandler<\r\n TStruct['props']\r\n >;\r\n};\r\n\r\n// AllHTMLAttributes<JSX.Element>\r\n\r\ntype ComponentViewProps = {\r\n render?: boolean;\r\n} & PropsWithChildren;\r\n\r\n// ComponentRenderImplFn\r\ntype ComponentViewImplFn<\r\n TStruct extends ComponentStruct,\r\n TMsgHeaders extends ComponentMsgHeaders = ComponentMsgHeaders,\r\n> = (props: ComponentViewProps, component?: Component<TStruct, TMsgHeaders>) => ReactNode; // JSX.Element\r\n\r\n// ComponentRenderFn\r\ntype ComponentViewFn = (props: ComponentViewProps) => ReactNode; // JSX.Element\r\n\r\ntype PublicKeys<T> = {\r\n [K in keyof T]: K extends `_${string}` ? never : K;\r\n}[keyof T];\r\n\r\nexport type ComponentMsgBroker<\r\n TStruct extends ComponentStruct,\r\n TMsgHeaders extends ComponentMsgHeaders = ComponentMsgHeaders,\r\n> = MsgBroker<\r\n // Pick<TStruct['msg'], MaybeKeyOf<TStruct['msg'], TStruct['msgScope']['provide']>>,\r\n Pick<TStruct['msg'], TStruct['msgScope']['provide']>,\r\n // Pick<TStruct['msg'], MaybeKeyOf<TStruct['msg'], TStruct['msgScope']['subscribe']>>,\r\n Pick<TStruct['msg'], TStruct['msgScope']['subscribe']>,\r\n TMsgHeaders,\r\n Component<TStruct, TMsgHeaders>\r\n>;\r\n\r\nexport type EffectFn<\r\n TStruct extends ComponentStruct,\r\n TMsgHeaders extends ComponentMsgHeaders = ComponentMsgHeaders,\r\n> = (component: Component<TStruct, TMsgHeaders>) => void | (() => void);\r\n\r\nexport type ComponentDef<\r\n TStruct extends ComponentStruct,\r\n TMsgHeaders extends ComponentMsgHeaders = ComponentMsgHeaders,\r\n> = {\r\n name?: string;\r\n props?: Require<TStruct['props'], HasKeys<TStruct['props']>>;\r\n actions?: Require<TStruct['actions'], HasKeys<TStruct['actions']>>;\r\n effects?: keyof TStruct['effects'] extends never\r\n ? never\r\n : Record<\r\n TStruct['effects'] extends string ? TStruct['effects'] : TStruct['effects'][number],\r\n EffectFn<TStruct, TMsgHeaders>\r\n >;\r\n children?: ComponentDefChildren<TStruct['children']>;\r\n events?: ComponentEvents<TStruct>;\r\n // msgs?\r\n msgBroker?: ComponentMsgBroker<TStruct, TMsgHeaders>;\r\n msgBus?: MsgBus<TStruct['msg'], TMsgHeaders>;\r\n view?: ComponentViewImplFn<TStruct, TMsgHeaders>;\r\n};\r\n\r\ntype ComponentDefChildren<TRefStruct extends ComponentRefStruct> = Require<\r\n {\r\n [P in keyof TRefStruct]: TRefStruct[P] extends (params: infer TParams) => infer T\r\n ? T extends ComponentStruct\r\n ? (params: TParams) => Component<T>\r\n : never\r\n : TRefStruct[P] extends ComponentStruct\r\n ? Component<TRefStruct[P]>\r\n : never;\r\n },\r\n HasKeys<TRefStruct>\r\n>;\r\n\r\ntype ComponentChildren<TRefStruct extends ComponentRefStruct> = {\r\n [P in keyof TRefStruct as TRefStruct[P] extends Function\r\n ? `${Capitalize<P & string>}`\r\n : P]: TRefStruct[P] extends (params: infer TParams) => infer T\r\n ? T extends ComponentStruct\r\n ? FC<ComponentParams<T> & TParams>\r\n : never\r\n : TRefStruct[P] extends ComponentStruct\r\n ? Component<TRefStruct[P]>\r\n : never;\r\n};\r\n\r\nexport type ComponentMsgStruct<TStruct extends ComponentStruct = ComponentStruct> = Pick<\r\n TStruct['msg'],\r\n | MaybeKeyOf<TStruct['msg'], TStruct['msgScope']['provide']>\r\n | MaybeKeyOf<TStruct['msg'], TStruct['msgScope']['subscribe']>\r\n | MaybeKeyOf<TStruct['msg'], TStruct['msgScope']['publish']>\r\n>;\r\n\r\nexport type ComponentBase<\r\n TStruct extends ComponentStruct = ComponentStruct,\r\n TMsgHeaders extends ComponentMsgHeaders = ComponentMsgHeaders,\r\n> = {\r\n id: string;\r\n parentId: string;\r\n // getHierarchyPath?\r\n getHierarchyId(): string;\r\n getParent(): string | undefined;\r\n getChildren(): string[];\r\n getChainUp(): string[];\r\n getChainDown(): string[];\r\n getNodeMap(): Map<string, TreeNode>;\r\n bindings: Map<PropertyKey, Binding>;\r\n msgBus: MsgBus<ComponentMsgStruct<TStruct>, TMsgHeaders>;\r\n msgBroker: ComponentMsgBroker<TStruct>;\r\n effects: Record<string, EffectController>;\r\n View: ComponentViewFn;\r\n};\r\n\r\nexport type ComponentModel<TStruct extends ComponentStruct = ComponentStruct> = TStruct['props'] &\r\n Readonly<TStruct['actions']>;\r\n\r\nexport type Component<\r\n TStruct extends ComponentStruct = ComponentStruct,\r\n TMsgHeaders extends ComponentMsgHeaders = ComponentMsgHeaders,\r\n> = {\r\n readonly model: ComponentModel<TStruct>;\r\n readonly children: Readonly<ComponentChildren<TStruct['children']>>;\r\n} & Readonly<ComponentBase<TStruct, TMsgHeaders>>;\r\n\r\n// style: CSSProperties;\r\n\r\ntype PropEventHandlers = {\r\n onGet?: () => any;\r\n onChanging?: (oldValue: any, newValue: any) => boolean;\r\n onChange?: (value: any) => void;\r\n};\r\n\r\ntype ProxyEventHandlers = {\r\n onPropChanging?: PropValueChangingHandler<PropertyKey>;\r\n onPropChange?: PropValueChangeHandler<PropertyKey>;\r\n} & Record<PropertyKey, PropEventHandlers>;\r\n\r\n// ComponentConfig\r\nexport type ComponentParams<TStruct extends ComponentStruct = ComponentStruct> =\r\n ComponentPropParams<TStruct['props']> & ComponentEvents<TStruct>; // & PropsWithChildren\r\n\r\nconst blankView = () => null;\r\n\r\nconst proxyCache = new WeakMap<object, any>();\r\nfunction createRecursiveProxy(\r\n target: any,\r\n bindings: Map<PropertyKey, Binding>,\r\n handlers: ProxyEventHandlers,\r\n) {\r\n if (typeof target !== 'object' || target === null) {\r\n return target;\r\n }\r\n\r\n // isPlainObject\r\n if (!isObservable(target)) {\r\n return target;\r\n }\r\n\r\n if (proxyCache.has(target)) {\r\n return proxyCache.get(target);\r\n }\r\n\r\n const proxy = new Proxy(target, {\r\n get(obj, prop, receiver) {\r\n // 1. custom handlers\r\n const onGet = handlers[prop]?.onGet;\r\n if (onGet) return onGet();\r\n\r\n // 2. bindings\r\n const binding = bindings.get(prop);\r\n if (binding?.get) {\r\n return binding.get();\r\n }\r\n\r\n const value = Reflect.get(obj, prop, receiver);\r\n\r\n if (typeof value === 'object' && value !== null && isObservable(value)) {\r\n return createRecursiveProxy(value, bindings, handlers);\r\n }\r\n\r\n return value;\r\n },\r\n\r\n set(obj, prop, value, receiver) {\r\n const oldValue = obj[prop];\r\n\r\n // before-change hooks\r\n const onChanging = handlers[prop]?.onChanging;\r\n if (onChanging && onChanging(oldValue, value) === false) {\r\n return true;\r\n }\r\n\r\n if (\r\n handlers.onPropChanging &&\r\n handlers.onPropChanging(prop, oldValue, value) === false\r\n ) {\r\n return true;\r\n }\r\n\r\n const result = runInAction(() => {\r\n return Reflect.set(obj, prop, value, receiver);\r\n });\r\n\r\n // bindings\r\n const binding = bindings.get(prop);\r\n binding?.set?.(value);\r\n\r\n // after-change hooks\r\n handlers[prop]?.onChange?.(value);\r\n handlers.onPropChange?.(prop, value);\r\n\r\n return result;\r\n },\r\n });\r\n\r\n proxyCache.set(target, proxy);\r\n return proxy;\r\n}\r\n\r\nfunction capitalize(name: string) {\r\n return name.replace(/^./, name[0].toUpperCase());\r\n}\r\n\r\nfunction asyncToGeneratorFlow(asyncFn: (...args: any[]) => Promise<any>) {\r\n return function* (...args: any[]) {\r\n const result = yield asyncFn(...args);\r\n return result;\r\n };\r\n}\r\n\r\ntype ComponentSourceInfo = {\r\n // classId\r\n structId: string;\r\n count: 0;\r\n};\r\n\r\nconst componentData = {\r\n sources: new Map<string, ComponentSourceInfo>(),\r\n count: 0,\r\n};\r\n\r\nexport function toHtmlId(url: string, segmentsCount: number = 1): string {\r\n const clean = url.split(/[?#]/)[0];\r\n const parts = clean\r\n .split('/')\r\n .filter(Boolean)\r\n .map((segment) => decodeURIComponent(segment));\r\n\r\n const last = parts.slice(-segmentsCount);\r\n const raw = last.join('-');\r\n let id = raw\r\n .normalize('NFKD')\r\n .replace(/[^a-zA-Z0-9\\-_:.+#]/g, '-')\r\n .replace(/-+/g, '-')\r\n .replace(/^[^a-zA-Z]+/, '-')\r\n .replace(/[+#]$/, '-');\r\n return id;\r\n}\r\n\r\nfunction getCallerFileName(depth = 2): string | null {\r\n const err = new Error();\r\n const stack = err.stack?.split('\\n');\r\n if (!stack || stack.length <= depth) return null;\r\n\r\n const match = stack[depth].match(/\\((.*):\\d+:\\d+\\)/);\r\n if (match) {\r\n return match[1];\r\n }\r\n return null;\r\n}\r\n\r\nfunction registerMsgBroker<TStruct extends ComponentStruct = ComponentStruct>(\r\n component: Component<TStruct>,\r\n) {\r\n const providers = component?.msgBroker.provide;\r\n if (providers) {\r\n for (const [channel, providerGroups] of Object.entries(providers)) {\r\n for (const [g, p] of Object.entries(providerGroups)) {\r\n const provider = p as MsgChannelGroupProviderParams;\r\n const callback = provider.callback;\r\n if (callback) {\r\n provider.callback = (msg, headers) => {\r\n return callback(msg, headers, component);\r\n };\r\n }\r\n const filter = provider.filter;\r\n const componentFilter = provider.componentFilter || ComponentMsgFilter.None;\r\n const msgFilter = (msg) => {\r\n let result = true;\r\n if (componentFilter & ComponentMsgFilter.FromAncestors) {\r\n const ancestorIds = component.getChainUp();\r\n result = ancestorIds.indexOf(msg.headers?.sourceId) >= 0;\r\n }\r\n if (result && componentFilter & ComponentMsgFilter.FromDescendants) {\r\n const ancestorIds = component.getChainDown();\r\n result = ancestorIds.indexOf(msg.headers?.sourceId) >= 0;\r\n }\r\n if (result && filter) {\r\n result = filter(msg, component);\r\n }\r\n return result;\r\n };\r\n provider.filter = msgFilter;\r\n\r\n component.msgBus.provide({\r\n ...p,\r\n channel: channel,\r\n group: g,\r\n config: {\r\n abortSignal: component.msgBroker.abortController.signal,\r\n },\r\n });\r\n }\r\n }\r\n }\r\n const subscribers = component?.msgBroker?.subscribe;\r\n if (subscribers) {\r\n for (const [channel, subscriberGroups] of Object.entries(subscribers)) {\r\n for (const [g, s] of Object.entries(subscriberGroups)) {\r\n const subscriber = s as MsgChannelGroupSubscriberParams;\r\n const callback = subscriber.callback;\r\n if (callback) {\r\n subscriber.callback = (msg) => {\r\n return callback(msg, component);\r\n };\r\n }\r\n const filter = subscriber.filter;\r\n const componentFilter = subscriber.componentFilter || ComponentMsgFilter.None;\r\n const msgFilter = (msg) => {\r\n let result = true;\r\n if (componentFilter & ComponentMsgFilter.FromAncestors) {\r\n const ancestorIds = component.getChainUp();\r\n result = ancestorIds.indexOf(msg.headers?.sourceId) >= 0;\r\n }\r\n if (result && componentFilter & ComponentMsgFilter.FromDescendants) {\r\n const ancestorIds = component.getChainDown();\r\n result = ancestorIds.indexOf(msg.headers?.sourceId) >= 0;\r\n }\r\n if (result && filter) {\r\n result = filter(msg, component);\r\n }\r\n return result;\r\n };\r\n subscriber.filter = msgFilter;\r\n\r\n component.msgBus.on({\r\n ...s,\r\n channel: channel,\r\n group: g,\r\n config: {\r\n abortSignal: component.msgBroker.abortController.signal,\r\n },\r\n });\r\n }\r\n }\r\n }\r\n}\r\n\r\nfunction getComponentMsgBus<TStruct extends ComponentStruct = ComponentStruct>(\r\n msgBus: MsgBus<TStruct['msg']>,\r\n headerSetter: (headers?: ComponentMsgHeaders) => void,\r\n) {\r\n const updateParams = (params: { payload?: any; headers?: ComponentMsgHeaders }) => {\r\n if (params.payload != undefined) {\r\n params.payload = structuredClone(toJS(params.payload)); // always?\r\n }\r\n if (!params.headers) {\r\n params.headers = {};\r\n }\r\n headerSetter?.(params.headers);\r\n };\r\n return {\r\n config: msgBus.config,\r\n on: (params) => {\r\n return msgBus.on(params);\r\n },\r\n onceAsync: (params) => {\r\n return msgBus.onceAsync(params);\r\n },\r\n stream: (params) => {\r\n return msgBus.stream(params);\r\n },\r\n provide: (params) => {\r\n updateParams(params);\r\n return msgBus.provide(params);\r\n },\r\n dispatch: (params) => {\r\n updateParams(params);\r\n return msgBus.dispatch(params);\r\n },\r\n dispatchAsync: (params) => {\r\n updateParams(params);\r\n return msgBus.dispatchAsync(params);\r\n },\r\n } as MsgBus<TStruct['msg']>;\r\n}\r\n\r\nexport type EffectController = {\r\n start: () => void;\r\n pause: () => void;\r\n resume: () => void;\r\n stop: () => void;\r\n restart: () => void;\r\n};\r\n\r\nexport function createEffect<\r\n TStruct extends ComponentStruct,\r\n TMsgHeaders extends ComponentMsgHeaders = ComponentMsgHeaders,\r\n>(\r\n component: Component<TStruct, TMsgHeaders>,\r\n name: string,\r\n fn: EffectFn<TStruct, TMsgHeaders>,\r\n): EffectController {\r\n let disposer: IReactionDisposer | null = null;\r\n let paused = false;\r\n let effectCleanup: () => void = undefined;\r\n\r\n const start = () => {\r\n if (disposer) {\r\n return;\r\n }\r\n\r\n disposer = autorun(\r\n () => {\r\n if (!paused) {\r\n const cleanup = fn(component);\r\n if (typeof cleanup === 'function') {\r\n cleanup();\r\n effectCleanup = cleanup;\r\n }\r\n }\r\n },\r\n { name: `effect:${name}` },\r\n );\r\n };\r\n\r\n const stop = () => {\r\n disposer?.();\r\n disposer = null;\r\n if (effectCleanup) {\r\n effectCleanup();\r\n effectCleanup = undefined;\r\n }\r\n };\r\n\r\n const pause = () => {\r\n paused = true;\r\n };\r\n\r\n const resume = () => {\r\n paused = false;\r\n };\r\n\r\n const restart = () => {\r\n stop();\r\n start();\r\n };\r\n\r\n start();\r\n\r\n return { start, pause, resume, stop, restart };\r\n}\r\n\r\nfunction createComponent<TStruct extends ComponentStruct = ComponentStruct>(\r\n componentDef: ComponentDef<TStruct>,\r\n params?: ComponentParams<TStruct>,\r\n): Component<TStruct> {\r\n // result\r\n let component: Mutable<Component<TStruct>>;\r\n let model: Mutable<ComponentModel<TStruct>>;\r\n\r\n if (!componentDef) {\r\n componentDef = {};\r\n }\r\n\r\n if (!params) {\r\n params = {};\r\n }\r\n\r\n const view = componentDef.view;\r\n let msgBus = componentDef.msgBus;\r\n\r\n const bindings = new Map<PropertyKey, Binding>();\r\n\r\n const componentMsgBus = lazy(() => {\r\n return getComponentMsgBus(msgBus, (headers) => {\r\n if (headers?.sourceId == undefined) {\r\n headers.sourceId = component.id;\r\n }\r\n }); // as ComponentModel<TStruct>['msgBus']\r\n });\r\n\r\n let msgBroker = {\r\n ...componentDef.msgBroker,\r\n };\r\n\r\n if (!msgBroker.abortController) {\r\n msgBroker.abortController = new AbortController();\r\n }\r\n\r\n const ViewFC = observer((props: ComponentViewProps) => {\r\n const id = component.id;\r\n const context = useComponentContext();\r\n const parentId = context.currentId;\r\n\r\n component.parentId = parentId;\r\n\r\n if (!msgBus) {\r\n msgBus = context.msgBus;\r\n }\r\n\r\n const scopeContext = useMemo(\r\n () => ({ ...context, currentId: id }),\r\n [componentDef, params, context],\r\n );\r\n\r\n useLayoutEffect(() => {\r\n try {\r\n if (getGlobalFlags().debug) {\r\n const hierarchyId = component.getHierarchyId();\r\n console.debug(`${hierarchyId}>layout`);\r\n }\r\n\r\n context.register(id, parentId);\r\n\r\n component.getHierarchyId = () => context.getHierarchyPath(id);\r\n component.getChainDown = () => context.getChainDown(id);\r\n component.getChainUp = () => context.getChainUp(id);\r\n component.getChildren = () => context.getChildren(id);\r\n component.getParent = () => context.getParent(id);\r\n component.getNodeMap = () => context.getNodeMap();\r\n\r\n registerMsgBroker(component);\r\n\r\n componentDef.events?.onLayout?.(component);\r\n params.onLayout?.(component);\r\n } catch (err) {\r\n componentDef.events?.onError?.(component, err);\r\n params.onError?.(component, err);\r\n }\r\n\r\n return () => {\r\n if (getGlobalFlags().debug) {\r\n const hierarchyId = component.getHierarchyId();\r\n console.debug(`${hierarchyId}>layout-destroy`);\r\n }\r\n context.unregister(id);\r\n\r\n msgBroker.abortController?.abort();\r\n\r\n componentDef.events?.onLayoutDestroy?.(component);\r\n params.onLayoutDestroy?.(component);\r\n };\r\n }, [componentDef, params, context]);\r\n\r\n useEffect(() => {\r\n try {\r\n if (getGlobalFlags().debug) {\r\n // mount\r\n const hierarchyId = component.getHierarchyId();\r\n console.debug(`${hierarchyId}>ready`);\r\n }\r\n componentDef.events?.onReady?.(component);\r\n params.onReady?.(component);\r\n } catch (err) {\r\n if (getGlobalFlags().debug) {\r\n // unmount\r\n const hierarchyId = component.getHierarchyId();\r\n console.debug(`${hierarchyId}>destroy`);\r\n }\r\n componentDef.events?.onError?.(component, err);\r\n params.onError?.(component, err);\r\n }\r\n return () => {\r\n componentDef.events?.onDestroy?.(component);\r\n params.onDestroy?.(component);\r\n };\r\n }, [componentDef, params, context]);\r\n\r\n let content: React.ReactNode;\r\n // let content: any;\r\n try {\r\n if (getGlobalFlags().debug) {\r\n // render\r\n const hierarchyId = component.getHierarchyId();\r\n console.debug(`${hierarchyId}>view`);\r\n }\r\n if (typeof view === 'function') {\r\n content = view(props, component);\r\n } else {\r\n // content = props.children;\r\n content = <>{props.children}</>;\r\n }\r\n } catch (err) {\r\n // throw err;\r\n const errDetails = JSON.stringify(err);\r\n // msgBus.dispatch\r\n content = <>{errDetails}</>;\r\n }\r\n return (\r\n <ReactComponentContext.Provider value={scopeContext}>\r\n {content}\r\n </ReactComponentContext.Provider>\r\n );\r\n });\r\n\r\n let srcInfo: ComponentSourceInfo;\r\n const sources = componentData.sources;\r\n\r\n const fileName = getCallerFileName(6);\r\n const srcName = toHtmlId(fileName, 2);\r\n\r\n if (sources.has(fileName)) {\r\n srcInfo = sources.get(fileName);\r\n srcInfo.count++;\r\n } else {\r\n const structId = componentDef.name || srcName || `Component_${componentData.count}`;\r\n srcInfo = {\r\n structId: structId,\r\n count: 0,\r\n };\r\n sources.set(fileName, srcInfo);\r\n componentData.count++;\r\n }\r\n\r\n const id = `${srcInfo.structId}#${srcInfo.count}`;\r\n\r\n const children = {} as ComponentChildren<TStruct['children']>;\r\n\r\n model = {} as Mutable<ComponentModel<TStruct>>;\r\n\r\n if (componentDef.props) {\r\n Object.assign(model, componentDef.props);\r\n }\r\n\r\n if (componentDef.actions) {\r\n Object.assign(model, componentDef.actions);\r\n }\r\n\r\n if (componentDef.children) {\r\n for (const [key, value] of Object.entries(componentDef.children)) {\r\n if (typeof value == 'function') {\r\n const view = value as (params: any) => Component;\r\n // observer\r\n const ChildViewFC: ComponentViewImplFn<TStruct> = (props) => {\r\n const c = view(props);\r\n return <c.View />;\r\n // if (typeof c.view === \"function\") {\r\n // return c.view(props);\r\n // }\r\n // return <>{props.children}</>;\r\n };\r\n Reflect.set(children, capitalize(key), ChildViewFC);\r\n } else {\r\n Reflect.set(children, key, value);\r\n }\r\n }\r\n }\r\n\r\n // Reflect.ownKeys/Object.keys\r\n for (const [key, value] of Object.entries(params)) {\r\n // model.hasOwnProperty(key)\r\n if (key in model) {\r\n if (isBinding(value)) {\r\n bindings.set(key, value);\r\n } else {\r\n Reflect.set(model, key, value);\r\n }\r\n }\r\n }\r\n\r\n const proxyEventHandlers: Pick<ProxyEventHandlers, 'onPropChanging' | 'onPropChange'> = {\r\n onPropChanging:\r\n params.onPropChanging || componentDef.events?.onPropChanging\r\n ? (prop, oldValue, newValue) => {\r\n let result = true;\r\n let handler = params.onPropChanging;\r\n if (handler) {\r\n result = handler(String(prop), oldValue, newValue);\r\n }\r\n if (result) {\r\n handler = componentDef.events?.onPropChanging;\r\n if (handler) {\r\n result = handler(String(prop), oldValue, newValue);\r\n }\r\n }\r\n return result;\r\n }\r\n : undefined,\r\n onPropChange:\r\n params.onPropChange || componentDef.events?.onPropChange\r\n ? (prop, value) => {\r\n params.onPropChange?.(String(prop), value);\r\n componentDef.events?.onPropChange?.(String(prop), value);\r\n }\r\n : undefined,\r\n };\r\n\r\n function resolveOnGetEventHandler(prop: string) {\r\n const key = `${$ON_GET}${capitalize(prop)}`;\r\n return params[key] || componentDef.events?.[key];\r\n }\r\n\r\n function resolveOnChangingEventHandler(prop: string) {\r\n const key = `${$ON_CHANGING}${capitalize(prop)}`;\r\n return ((oldValue: any, newValue: any) => {\r\n let result = true;\r\n let handler = params[key] as ValueChangingHandler<any>;\r\n if (handler) {\r\n result = handler(oldValue, newValue);\r\n }\r\n if (result) {\r\n handler = componentDef.events?.[key] as ValueChangingHandler<any>;\r\n if (handler) {\r\n result = handler(oldValue, newValue);\r\n }\r\n }\r\n return result;\r\n }) as ValueChangingHandler;\r\n }\r\n\r\n function resolveOnChangeEventHandler(prop: string) {\r\n const key = `${$ON_CHANGE}${capitalize(prop)}`;\r\n return ((value: any) => {\r\n (params[key] as ValueChangeHandler<any>)?.(value);\r\n (componentDef.events?.[key] as ValueChangeHandler<any>)?.(value);\r\n }) as ValueChangeHandler;\r\n }\r\n\r\n let annotationMap: Record<string, any> = {};\r\n\r\n if (componentDef.props) {\r\n for (const prop of Object.keys(componentDef.props)) {\r\n proxyEventHandlers[prop] = {\r\n onGet: resolveOnGetEventHandler(prop),\r\n onChanging: resolveOnChangingEventHandler(prop),\r\n onChange: resolveOnChangeEventHandler(prop),\r\n };\r\n }\r\n\r\n for (const key of Object.keys(componentDef.props)) {\r\n annotationMap[key] = observable.deep;\r\n }\r\n }\r\n\r\n if (componentDef.actions) {\r\n const annotationMap: Record<string, any> = {};\r\n for (const key of Object.keys(componentDef.actions)) {\r\n annotationMap[key] = action;\r\n }\r\n }\r\n\r\n model = observable(model, annotationMap, {\r\n deep: true,\r\n });\r\n\r\n model = createRecursiveProxy(model, bindings, proxyEventHandlers);\r\n\r\n let effects: Record<string, EffectController> = {};\r\n component = {\r\n id: id,\r\n parentId: undefined,\r\n getHierarchyId: () => undefined,\r\n getChainDown: () => undefined,\r\n getChainUp: () => undefined,\r\n getChildren: () => undefined,\r\n getParent: () => undefined,\r\n getNodeMap: () => undefined,\r\n bindings: bindings,\r\n get msgBus() {\r\n return componentMsgBus();\r\n },\r\n msgBroker: msgBroker,\r\n effects: effects,\r\n // view: componentDef.view,\r\n View: ViewFC,\r\n children: children,\r\n model: model,\r\n };\r\n\r\n if (componentDef.effects) {\r\n for (const [name, fn] of Object.entries(componentDef.effects)) {\r\n effects[name] = createEffect(\r\n component,\r\n name,\r\n fn as EffectFn<TStruct, ComponentMsgHeaders>,\r\n );\r\n }\r\n }\r\n\r\n if (componentDef.events?.onInit) {\r\n componentDef.events.onInit(component);\r\n }\r\n\r\n if (params.onInit) {\r\n params.onInit(component);\r\n }\r\n\r\n return component;\r\n}\r\n\r\nexport function useComponent<\r\n TStruct extends ComponentStruct = ComponentStruct,\r\n TMsgHeaders extends ComponentMsgHeaders = ComponentMsgHeaders,\r\n>(componentDef: ComponentDef<TStruct, TMsgHeaders>, params: ComponentParams<TStruct>) {\r\n const ref = useLazyRef(() => createComponent(componentDef, params));\r\n useLayoutEffect(() => {\r\n return () => {\r\n ref.current = null;\r\n };\r\n }, [componentDef, params]);\r\n return ref.current;\r\n}\r\n\r\n// asFC/toFC\r\nexport function getFC<TStruct extends ComponentStruct>(\r\n factory: (params: ComponentParams<TStruct>) => Component<TStruct>,\r\n): FC<ComponentParams<TStruct>> {\r\n // observer\r\n const fc = (params: ComponentParams<TStruct> & PropsWithChildren) => {\r\n // componentHook\r\n const c = factory(params); // without useRef!\r\n // return c.view();\r\n return <c.View {...params} />;\r\n };\r\n return fc;\r\n}\r\n"],"names":["ComponentMsgFilter","$isBinding","Binding","get","set","converter","validator","isBinding","obj","bind","bindProp","target","prop","value","$ON_GET","$ON_CHANGING","$ON_CHANGE","proxyCache","createRecursiveProxy","bindings","handlers","isObservable","proxy","receiver","onGet","binding","oldValue","onChanging","result","runInAction","capitalize","name","componentData","toHtmlId","url","segmentsCount","segment","getCallerFileName","depth","stack","match","registerMsgBroker","component","providers","channel","providerGroups","g","p","provider","callback","msg","headers","filter","componentFilter","msgFilter","subscribers","subscriberGroups","s","subscriber","getComponentMsgBus","msgBus","headerSetter","updateParams","params","toJS","createEffect","fn","disposer","paused","effectCleanup","start","autorun","cleanup","stop","pause","resume","restart","createComponent","componentDef","model","view","componentMsgBus","lazy","msgBroker","ViewFC","observer","props","id","context","useComponentContext","parentId","scopeContext","useMemo","useLayoutEffect","getGlobalFlags","hierarchyId","err","useEffect","content","React","errDetails","ReactComponentContext","srcInfo","sources","fileName","srcName","children","key","ChildViewFC","c","proxyEventHandlers","newValue","handler","resolveOnGetEventHandler","resolveOnChangingEventHandler","resolveOnChangeEventHandler","annotationMap","observable","effects","useComponent","ref","useLazyRef","getFC","factory"],"mappings":"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"}
@@ -1,9 +1,9 @@
1
- import { AsyncFunc, AwaitedReturnType, MaybeExtends } from '@actdim/utico/typeCore';
1
+ import { AwaitedReturnType, Func } from '@actdim/utico/typeCore';
2
2
  export type IFetcher = {
3
3
  fetch(url: RequestInfo | URL, init?: RequestInit): Promise<Response>;
4
4
  };
5
5
  export type IResolvedBody = {
6
- [K in keyof Body as Body[K] extends AsyncFunc ? K : never]?: AwaitedReturnType<MaybeExtends<Body[K], AsyncFunc>>;
6
+ [K in keyof Body]?: Body[K] extends Func ? AwaitedReturnType<Body[K]> : Body[K];
7
7
  };
8
8
  export type MimeType = "application/atom+xml" | "application/json" | "application/javascript" | "application/octet-stream" | "application/pdf" | "application/postscript" | "application/soap+xml" | "application/font-woff" | "application/xhtml+xml" | "application/zip" | "application/gzip" | "application/x-tex" | "application/xml" | "application/msword" | "text/cmd" | "text/css" | "text/csv" | "text/html" | "text/plain" | "text/xml" | "text/markdown" | "image/png" | "image/jpeg" | "image/tiff";
9
9
  export type RequestStatus = "" | "queued" | "executing" | "succeeded" | "failed" | "canceled";
@@ -1 +1 @@
1
- {"version":3,"file":"request.d.ts","sourceRoot":"","sources":["../../src/net/request.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,SAAS,EAAE,iBAAiB,EAAQ,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAG1F,MAAM,MAAM,QAAQ,GAAG;IACnB,KAAK,CAAC,GAAG,EAAE,WAAW,GAAG,GAAG,EAAE,IAAI,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;CACxE,CAAC;AAGF,MAAM,MAAM,aAAa,GAAG;KACvB,CAAC,IAAI,MAAM,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC,SAAS,SAAS,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,EAAE,iBAAiB,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;CACnH,CAAC;AAGF,MAAM,MAAM,QAAQ,GAEd,sBAAsB,GACtB,kBAAkB,GAClB,wBAAwB,GACxB,0BAA0B,GAC1B,iBAAiB,GACjB,wBAAwB,GACxB,sBAAsB,GACtB,uBAAuB,GACvB,uBAAuB,GACvB,iBAAiB,GACjB,kBAAkB,GAClB,mBAAmB,GACnB,iBAAiB,GACjB,oBAAoB,GAEpB,UAAU,GACV,UAAU,GACV,UAAU,GACV,WAAW,GAEX,YAAY,GACZ,UAAU,GACV,eAAe,GAEf,WAAW,GACX,YAAY,GACZ,YAAY,CAAC;AAGnB,MAAM,MAAM,aAAa,GAEnB,EAAE,GAEF,QAAQ,GAER,WAAW,GAGX,WAAW,GAEX,QAAQ,GAER,UAAU,CAAC;AAEjB,MAAM,MAAM,cAAc,GAAG,QAAQ,GAAG;IAEpC,QAAQ,CAAC,EAAE,aAAa,CAAC;CAC5B,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG,cAAc,GAAG;IACzC,MAAM,EAAE,aAAa,CAAC;IACtB,MAAM,CAAC,EAAE,GAAG,CAAC;CAChB,CAAC;AAEF,eAAO,MAAM,eAAe,GAAI,UAAU,QAAQ,kBAAoB,CAAC;AAEvE,eAAO,MAAM,eAAe,GAAI,UAAU,QAAQ,iBAAoB,CAAC;AAEvE,eAAO,MAAM,eAAe,GAAI,UAAU,QAAQ,oBAAoB,CAAC;AAEvE,eAAO,MAAM,sBAAsB,GAAI,UAAU,QAAQ,yBAA2B,CAAC;AAGrF,wBAAsB,iBAAiB,CAAC,QAAQ,EAAE,cAAc,EAAE,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,GAAG,CAAC,CAmDtG;AAED,MAAM,WAAW,iBAAiB,CAAC,OAAO,GAAG,GAAG;IAE5C,mBAAmB,CAAC,EAAE,CAAC,KAAK,EAAE;QAC1B,OAAO,EAAE,cAAc,CAAC;QAExB,MAAM,EAAE,OAAO,CAAC;QAChB,OAAO,EAAE,OAAO,CAAC;QACjB,MAAM,CAAC,EAAE,OAAO,CAAC;KACpB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACpB,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE;QAAE,QAAQ,EAAE,QAAQ,CAAC;QAAC,MAAM,EAAE,OAAO,CAAA;KAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACtF;AAGD,MAAM,WAAW,cAAc,CAAC,OAAO,GAAG,GAAG,CAAE,SAAQ,WAAW;IAE9D,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IAEZ,OAAO,CAAC,EAAE,OAAO,CAAC;IAKlB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,WAAW,CAAC,EAAE,QAAQ,CAAC;IACvB,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB,SAAS,CAAC,EAAE,iBAAiB,CAAC,OAAO,CAAC,CAAC;CAC1C"}
1
+ {"version":3,"file":"request.d.ts","sourceRoot":"","sources":["../../src/net/request.ts"],"names":[],"mappings":"AAGA,OAAO,EAAa,iBAAiB,EAAE,IAAI,EAAE,MAAM,wBAAwB,CAAC;AAG5E,MAAM,MAAM,QAAQ,GAAG;IACnB,KAAK,CAAC,GAAG,EAAE,WAAW,GAAG,GAAG,EAAE,IAAI,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;CACxE,CAAC;AAGF,MAAM,MAAM,aAAa,GAAG;KACvB,CAAC,IAAI,MAAM,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,SAAS,IAAI,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;CAClF,CAAC;AAGF,MAAM,MAAM,QAAQ,GAEd,sBAAsB,GACtB,kBAAkB,GAClB,wBAAwB,GACxB,0BAA0B,GAC1B,iBAAiB,GACjB,wBAAwB,GACxB,sBAAsB,GACtB,uBAAuB,GACvB,uBAAuB,GACvB,iBAAiB,GACjB,kBAAkB,GAClB,mBAAmB,GACnB,iBAAiB,GACjB,oBAAoB,GAEpB,UAAU,GACV,UAAU,GACV,UAAU,GACV,WAAW,GAEX,YAAY,GACZ,UAAU,GACV,eAAe,GAEf,WAAW,GACX,YAAY,GACZ,YAAY,CAAC;AAGnB,MAAM,MAAM,aAAa,GAEnB,EAAE,GAEF,QAAQ,GAER,WAAW,GAGX,WAAW,GAEX,QAAQ,GAER,UAAU,CAAC;AAEjB,MAAM,MAAM,cAAc,GAAG,QAAQ,GAAG;IAEpC,QAAQ,CAAC,EAAE,aAAa,CAAC;CAC5B,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG,cAAc,GAAG;IACzC,MAAM,EAAE,aAAa,CAAC;IACtB,MAAM,CAAC,EAAE,GAAG,CAAC;CAChB,CAAC;AAEF,eAAO,MAAM,eAAe,GAAI,UAAU,QAAQ,kBAAoB,CAAC;AAEvE,eAAO,MAAM,eAAe,GAAI,UAAU,QAAQ,iBAAoB,CAAC;AAEvE,eAAO,MAAM,eAAe,GAAI,UAAU,QAAQ,oBAAoB,CAAC;AAEvE,eAAO,MAAM,sBAAsB,GAAI,UAAU,QAAQ,yBAA2B,CAAC;AAGrF,wBAAsB,iBAAiB,CAAC,QAAQ,EAAE,cAAc,EAAE,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,GAAG,CAAC,CAmDtG;AAED,MAAM,WAAW,iBAAiB,CAAC,OAAO,GAAG,GAAG;IAE5C,mBAAmB,CAAC,EAAE,CAAC,KAAK,EAAE;QAC1B,OAAO,EAAE,cAAc,CAAC;QAExB,MAAM,EAAE,OAAO,CAAC;QAChB,OAAO,EAAE,OAAO,CAAC;QACjB,MAAM,CAAC,EAAE,OAAO,CAAC;KACpB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACpB,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE;QAAE,QAAQ,EAAE,QAAQ,CAAC;QAAC,MAAM,EAAE,OAAO,CAAA;KAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACtF;AAGD,MAAM,WAAW,cAAc,CAAC,OAAO,GAAG,GAAG,CAAE,SAAQ,WAAW;IAE9D,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IAEZ,OAAO,CAAC,EAAE,OAAO,CAAC;IAKlB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,WAAW,CAAC,EAAE,QAAQ,CAAC;IACvB,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB,SAAS,CAAC,EAAE,iBAAiB,CAAC,OAAO,CAAC,CAAC;CAC1C"}
@@ -1 +1 @@
1
- {"version":3,"file":"request.es.js","sources":["../../src/net/request.ts"],"sourcesContent":["// Transport\r\n\r\nimport httpStatus from \"http-status\";\r\nimport { AsyncFunc, AwaitedReturnType, Func, MaybeExtends } from \"@actdim/utico/typeCore\";\r\nimport { ApiError } from \"./apiError\";\r\n\r\nexport type IFetcher = {\r\n fetch(url: RequestInfo | URL, init?: RequestInit): Promise<Response>;\r\n};\r\n\r\n// IParsedBody\r\nexport type IResolvedBody = {\r\n [K in keyof Body as Body[K] extends AsyncFunc ? K : never]?: AwaitedReturnType<MaybeExtends<Body[K], AsyncFunc>>;\r\n};\r\n\r\n// https://www.iana.org/assignments/media-types/media-types.xhtml\r\nexport type MimeType =\r\n // application\r\n | \"application/atom+xml\"\r\n | \"application/json\"\r\n | \"application/javascript\"\r\n | \"application/octet-stream\"\r\n | \"application/pdf\"\r\n | \"application/postscript\"\r\n | \"application/soap+xml\"\r\n | \"application/font-woff\"\r\n | \"application/xhtml+xml\"\r\n | \"application/zip\"\r\n | \"application/gzip\"\r\n | \"application/x-tex\"\r\n | \"application/xml\"\r\n | \"application/msword\"\r\n // text\r\n | \"text/cmd\"\r\n | \"text/css\"\r\n | \"text/csv\"\r\n | \"text/html\"\r\n // \"text/javascript\" |\r\n | \"text/plain\"\r\n | \"text/xml\"\r\n | \"text/markdown\"\r\n // image\r\n | \"image/png\"\r\n | \"image/jpeg\"\r\n | \"image/tiff\";\r\n\r\n// RequestExecutionStatus\r\nexport type RequestStatus =\r\n // Created\r\n | \"\" // none/created/new/unsent\r\n // Queued\r\n | \"queued\" // scheduled\r\n // Executing\r\n | \"executing\" // sent/pending/processing/in-progress\r\n // \"suspended\" | // on-hold\r\n // Successful\r\n | \"succeeded\" // successful/resolved/done/completed/finished/fulfilled/complete\r\n // Unsuccessful\r\n | \"failed\" // unsuccessful/rejected\r\n // Aborted\r\n | \"canceled\"; // aborted/terminated\r\n\r\nexport type IResponseState = Response & {\r\n // parsed?\r\n resolved?: IResolvedBody;\r\n};\r\n\r\nexport type IRequestState = IRequestParams & {\r\n status: RequestStatus;\r\n result?: any;\r\n};\r\n\r\nexport const getResponseBlob = (response: Response) => response.blob();\r\n\r\nexport const getResponseJson = (response: Response) => response.json();\r\n\r\nexport const getResponseText = (response: Response) => response.text();\r\n\r\nexport const getResponseArrayBuffer = (response: Response) => response.arrayBuffer();\r\n\r\n// https://stackoverflow.com/questions/64781995/how-to-get-mime-type-of-an-array-buffer-object\r\nexport async function getResponseResult(response: IResponseState, request: IRequestState): Promise<any> {\r\n // const headers: { [key: string]: string } = {};\r\n let contentType =\r\n request.contentType ||\r\n (request.headers && request.headers instanceof Headers ? request.headers.get(\"content-type\") : request.headers[\"Content-Type\"]);\r\n if (response.headers) {\r\n // for (const k in response.headers.keys()) {\r\n // headers[k] = response.headers.get[k];\r\n // }\r\n // if (response.headers.forEach) {\r\n // response.headers.forEach((v, k) => headers[k] = v);\r\n // }\r\n contentType = response.headers instanceof Headers ? response.headers.get(\"content-type\") : response.headers[\"content-type\"];\r\n }\r\n let result: any = undefined;\r\n if (!response.resolved) {\r\n response.resolved = {};\r\n }\r\n const resolved = response.resolved;\r\n contentType = (contentType || \"\").toLowerCase();\r\n if (contentType.startsWith(\"text/\")) {\r\n result = await response.text();\r\n } else if (contentType.startsWith(\"image/\")) {\r\n result = await response.blob();\r\n } else {\r\n if (contentType.startsWith(\"application/json\")) {\r\n result = await response.json();\r\n resolved.json = result;\r\n } else if (contentType.startsWith(\"octet-stream\")) {\r\n result = await response.blob();\r\n resolved.blob = result;\r\n } else {\r\n try {\r\n resolved.json = await response.clone().json();\r\n } catch {\r\n try {\r\n resolved.text = await response.text();\r\n } catch {\r\n }\r\n }\r\n // unexpected response\r\n // throw new Error(`Unsupported content type: ${contentType}`);\r\n }\r\n }\r\n if (!(response.status === httpStatus.OK || response.status === httpStatus.NO_CONTENT)) {\r\n // JSON.stringify(resolved)\r\n throw ApiError.create(response, request);\r\n }\r\n\r\n request.result = result;\r\n return result;\r\n}\r\n\r\nexport interface IRequestCallbacks<TResult = any> {\r\n // onBeforeExecuteRequest\r\n onBeforeSendRequest?: (event: {\r\n request: IRequestParams;\r\n // interrupt\r\n cancel: boolean;\r\n handled: boolean;\r\n result?: TResult;\r\n }) => Promise<void>;\r\n onResponseRead?: (event: { response: Response; result: TResult }) => Promise<void>;\r\n}\r\n\r\n// IRequestOptions\r\nexport interface IRequestParams<TResult = any> extends RequestInit {\r\n // TODO: support WebSocket transport\r\n id?: string;\r\n tag?: string;\r\n url: string;\r\n // authType?: ...;\r\n useAuth?: boolean;\r\n // authToken?: string; // bearerToken\r\n // TODO: support\r\n // accepts: string[]; // https://developer.mozilla.org/ru/docs/Web/HTTP/Headers/Accept\r\n // TODO: support\r\n crossDomain?: boolean;\r\n contentType?: MimeType; // dataType\r\n httpOnly?: boolean;\r\n // transportType: ...;\r\n callbacks?: IRequestCallbacks<TResult>;\r\n}\r\n"],"names":["getResponseBlob","response","getResponseJson","getResponseText","getResponseArrayBuffer","getResponseResult","request","contentType","result","resolved","httpStatus","ApiError"],"mappings":";;AAwEO,MAAMA,IAAkB,CAACC,MAAuBA,EAAS,KAAA,GAEnDC,IAAkB,CAACD,MAAuBA,EAAS,KAAA,GAEnDE,IAAkB,CAACF,MAAuBA,EAAS,KAAA,GAEnDG,IAAyB,CAACH,MAAuBA,EAAS,YAAA;AAGvE,eAAsBI,EAAkBJ,GAA0BK,GAAsC;AAEpG,MAAIC,IACAD,EAAQ,gBACPA,EAAQ,WAAWA,EAAQ,mBAAmB,UAAUA,EAAQ,QAAQ,IAAI,cAAc,IAAIA,EAAQ,QAAQ,cAAc;AACjI,EAAIL,EAAS,YAOTM,IAAcN,EAAS,mBAAmB,UAAUA,EAAS,QAAQ,IAAI,cAAc,IAAIA,EAAS,QAAQ,cAAc;AAE9H,MAAIO;AACJ,EAAKP,EAAS,aACVA,EAAS,WAAW,CAAA;AAExB,QAAMQ,IAAWR,EAAS;AAE1B,MADAM,KAAeA,KAAe,IAAI,YAAA,GAC9BA,EAAY,WAAW,OAAO;AAC9B,IAAAC,IAAS,MAAMP,EAAS,KAAA;AAAA,WACjBM,EAAY,WAAW,QAAQ;AACtC,IAAAC,IAAS,MAAMP,EAAS,KAAA;AAAA,WAEpBM,EAAY,WAAW,kBAAkB;AACzC,IAAAC,IAAS,MAAMP,EAAS,KAAA,GACxBQ,EAAS,OAAOD;AAAA,WACTD,EAAY,WAAW,cAAc;AAC5C,IAAAC,IAAS,MAAMP,EAAS,KAAA,GACxBQ,EAAS,OAAOD;AAAA;AAEhB,QAAI;AACA,MAAAC,EAAS,OAAO,MAAMR,EAAS,MAAA,EAAQ,KAAA;AAAA,IAC3C,QAAQ;AACJ,UAAI;AACA,QAAAQ,EAAS,OAAO,MAAMR,EAAS,KAAA;AAAA,MACnC,QAAQ;AAAA,MACR;AAAA,IACJ;AAKR,MAAI,EAAEA,EAAS,WAAWS,EAAW,MAAMT,EAAS,WAAWS,EAAW;AAEtE,UAAMC,EAAS,OAAOV,GAAUK,CAAO;AAG3C,SAAAA,EAAQ,SAASE,GACVA;AACX;"}
1
+ {"version":3,"file":"request.es.js","sources":["../../src/net/request.ts"],"sourcesContent":["// Transport\r\n\r\nimport httpStatus from \"http-status\";\r\nimport { AsyncFunc, AwaitedReturnType, Func } from \"@actdim/utico/typeCore\";\r\nimport { ApiError } from \"./apiError\";\r\n\r\nexport type IFetcher = {\r\n fetch(url: RequestInfo | URL, init?: RequestInit): Promise<Response>;\r\n};\r\n\r\n// IParsedBody\r\nexport type IResolvedBody = {\r\n [K in keyof Body]?: Body[K] extends Func ? AwaitedReturnType<Body[K]> : Body[K];\r\n};\r\n\r\n// https://www.iana.org/assignments/media-types/media-types.xhtml\r\nexport type MimeType =\r\n // application\r\n | \"application/atom+xml\"\r\n | \"application/json\"\r\n | \"application/javascript\"\r\n | \"application/octet-stream\"\r\n | \"application/pdf\"\r\n | \"application/postscript\"\r\n | \"application/soap+xml\"\r\n | \"application/font-woff\"\r\n | \"application/xhtml+xml\"\r\n | \"application/zip\"\r\n | \"application/gzip\"\r\n | \"application/x-tex\"\r\n | \"application/xml\"\r\n | \"application/msword\"\r\n // text\r\n | \"text/cmd\"\r\n | \"text/css\"\r\n | \"text/csv\"\r\n | \"text/html\"\r\n // \"text/javascript\" |\r\n | \"text/plain\"\r\n | \"text/xml\"\r\n | \"text/markdown\"\r\n // image\r\n | \"image/png\"\r\n | \"image/jpeg\"\r\n | \"image/tiff\";\r\n\r\n// RequestExecutionStatus\r\nexport type RequestStatus =\r\n // Created\r\n | \"\" // none/created/new/unsent\r\n // Queued\r\n | \"queued\" // scheduled\r\n // Executing\r\n | \"executing\" // sent/pending/processing/in-progress\r\n // \"suspended\" | // on-hold\r\n // Successful\r\n | \"succeeded\" // successful/resolved/done/completed/finished/fulfilled/complete\r\n // Unsuccessful\r\n | \"failed\" // unsuccessful/rejected\r\n // Aborted\r\n | \"canceled\"; // aborted/terminated\r\n\r\nexport type IResponseState = Response & {\r\n // parsed?\r\n resolved?: IResolvedBody;\r\n};\r\n\r\nexport type IRequestState = IRequestParams & {\r\n status: RequestStatus;\r\n result?: any;\r\n};\r\n\r\nexport const getResponseBlob = (response: Response) => response.blob();\r\n\r\nexport const getResponseJson = (response: Response) => response.json();\r\n\r\nexport const getResponseText = (response: Response) => response.text();\r\n\r\nexport const getResponseArrayBuffer = (response: Response) => response.arrayBuffer();\r\n\r\n// https://stackoverflow.com/questions/64781995/how-to-get-mime-type-of-an-array-buffer-object\r\nexport async function getResponseResult(response: IResponseState, request: IRequestState): Promise<any> {\r\n // const headers: { [key: string]: string } = {};\r\n let contentType =\r\n request.contentType ||\r\n (request.headers && request.headers instanceof Headers ? request.headers.get(\"content-type\") : request.headers[\"Content-Type\"]);\r\n if (response.headers) {\r\n // for (const k in response.headers.keys()) {\r\n // headers[k] = response.headers.get[k];\r\n // }\r\n // if (response.headers.forEach) {\r\n // response.headers.forEach((v, k) => headers[k] = v);\r\n // }\r\n contentType = response.headers instanceof Headers ? response.headers.get(\"content-type\") : response.headers[\"content-type\"];\r\n }\r\n let result: any = undefined;\r\n if (!response.resolved) {\r\n response.resolved = {};\r\n }\r\n const resolved = response.resolved;\r\n contentType = (contentType || \"\").toLowerCase();\r\n if (contentType.startsWith(\"text/\")) {\r\n result = await response.text();\r\n } else if (contentType.startsWith(\"image/\")) {\r\n result = await response.blob();\r\n } else {\r\n if (contentType.startsWith(\"application/json\")) {\r\n result = await response.json();\r\n resolved.json = result;\r\n } else if (contentType.startsWith(\"octet-stream\")) {\r\n result = await response.blob();\r\n resolved.blob = result;\r\n } else {\r\n try {\r\n resolved.json = await response.clone().json();\r\n } catch {\r\n try {\r\n resolved.text = await response.text();\r\n } catch {\r\n }\r\n }\r\n // unexpected response\r\n // throw new Error(`Unsupported content type: ${contentType}`);\r\n }\r\n }\r\n if (!(response.status === httpStatus.OK || response.status === httpStatus.NO_CONTENT)) {\r\n // JSON.stringify(resolved)\r\n throw ApiError.create(response, request);\r\n }\r\n\r\n request.result = result;\r\n return result;\r\n}\r\n\r\nexport interface IRequestCallbacks<TResult = any> {\r\n // onBeforeExecuteRequest\r\n onBeforeSendRequest?: (event: {\r\n request: IRequestParams;\r\n // interrupt\r\n cancel: boolean;\r\n handled: boolean;\r\n result?: TResult;\r\n }) => Promise<void>;\r\n onResponseRead?: (event: { response: Response; result: TResult }) => Promise<void>;\r\n}\r\n\r\n// IRequestOptions\r\nexport interface IRequestParams<TResult = any> extends RequestInit {\r\n // TODO: support WebSocket transport\r\n id?: string;\r\n tag?: string;\r\n url: string;\r\n // authType?: ...;\r\n useAuth?: boolean;\r\n // authToken?: string; // bearerToken\r\n // TODO: support\r\n // accepts: string[]; // https://developer.mozilla.org/ru/docs/Web/HTTP/Headers/Accept\r\n // TODO: support\r\n crossDomain?: boolean;\r\n contentType?: MimeType; // dataType\r\n httpOnly?: boolean;\r\n // transportType: ...;\r\n callbacks?: IRequestCallbacks<TResult>;\r\n}\r\n"],"names":["getResponseBlob","response","getResponseJson","getResponseText","getResponseArrayBuffer","getResponseResult","request","contentType","result","resolved","httpStatus","ApiError"],"mappings":";;AAwEO,MAAMA,IAAkB,CAACC,MAAuBA,EAAS,KAAA,GAEnDC,IAAkB,CAACD,MAAuBA,EAAS,KAAA,GAEnDE,IAAkB,CAACF,MAAuBA,EAAS,KAAA,GAEnDG,IAAyB,CAACH,MAAuBA,EAAS,YAAA;AAGvE,eAAsBI,EAAkBJ,GAA0BK,GAAsC;AAEpG,MAAIC,IACAD,EAAQ,gBACPA,EAAQ,WAAWA,EAAQ,mBAAmB,UAAUA,EAAQ,QAAQ,IAAI,cAAc,IAAIA,EAAQ,QAAQ,cAAc;AACjI,EAAIL,EAAS,YAOTM,IAAcN,EAAS,mBAAmB,UAAUA,EAAS,QAAQ,IAAI,cAAc,IAAIA,EAAS,QAAQ,cAAc;AAE9H,MAAIO;AACJ,EAAKP,EAAS,aACVA,EAAS,WAAW,CAAA;AAExB,QAAMQ,IAAWR,EAAS;AAE1B,MADAM,KAAeA,KAAe,IAAI,YAAA,GAC9BA,EAAY,WAAW,OAAO;AAC9B,IAAAC,IAAS,MAAMP,EAAS,KAAA;AAAA,WACjBM,EAAY,WAAW,QAAQ;AACtC,IAAAC,IAAS,MAAMP,EAAS,KAAA;AAAA,WAEpBM,EAAY,WAAW,kBAAkB;AACzC,IAAAC,IAAS,MAAMP,EAAS,KAAA,GACxBQ,EAAS,OAAOD;AAAA,WACTD,EAAY,WAAW,cAAc;AAC5C,IAAAC,IAAS,MAAMP,EAAS,KAAA,GACxBQ,EAAS,OAAOD;AAAA;AAEhB,QAAI;AACA,MAAAC,EAAS,OAAO,MAAMR,EAAS,MAAA,EAAQ,KAAA;AAAA,IAC3C,QAAQ;AACJ,UAAI;AACA,QAAAQ,EAAS,OAAO,MAAMR,EAAS,KAAA;AAAA,MACnC,QAAQ;AAAA,MACR;AAAA,IACJ;AAKR,MAAI,EAAEA,EAAS,WAAWS,EAAW,MAAMT,EAAS,WAAWS,EAAW;AAEtE,UAAMC,EAAS,OAAOV,GAAUK,CAAO;AAG3C,SAAAA,EAAQ,SAASE,GACVA;AACX;"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@actdim/dynstruct",
3
- "version": "1.0.7",
3
+ "version": "1.1.0",
4
4
  "description": "A type-safe component system for large-scale apps: explicit dependencies, message bus communication, and structure-first, declarative design",
5
5
  "author": "Pavel Borodaev",
6
6
  "license": "Proprietary",
@@ -70,8 +70,8 @@
70
70
  "build-storybook": "storybook build"
71
71
  },
72
72
  "peerDependencies": {
73
- "@actdim/msgmesh": "^1.1.7",
74
- "@actdim/utico": "^1.0.6",
73
+ "@actdim/msgmesh": "^1.2.1",
74
+ "@actdim/utico": "^1.1.0",
75
75
  "http-status": "^2.1.0",
76
76
  "jwt-decode": "^4.0.0",
77
77
  "mobx": "^6.15.0",