@dooboostore/simple-web-component 1.0.47 → 1.0.49
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +223 -27
- package/dist/cjs/config/config.js +1 -1
- package/dist/cjs/config/config.js.map +2 -2
- package/dist/cjs/decorators/addEventListener.js +412 -16
- package/dist/cjs/decorators/addEventListener.js.map +3 -3
- package/dist/cjs/decorators/applyAttribute.js +25 -0
- package/dist/cjs/decorators/applyAttribute.js.map +2 -2
- package/dist/cjs/decorators/applyClass.js +49 -18
- package/dist/cjs/decorators/applyClass.js.map +3 -3
- package/dist/cjs/decorators/applyNode.js +67 -1
- package/dist/cjs/decorators/applyNode.js.map +3 -3
- package/dist/cjs/decorators/applyProperty.js +101 -3
- package/dist/cjs/decorators/applyProperty.js.map +2 -2
- package/dist/cjs/decorators/applyStyle.js +36 -5
- package/dist/cjs/decorators/applyStyle.js.map +2 -2
- package/dist/cjs/decorators/changedAttribute.js +39 -0
- package/dist/cjs/decorators/changedAttribute.js.map +2 -2
- package/dist/cjs/decorators/elementDefine.js +244 -225
- package/dist/cjs/decorators/elementDefine.js.map +3 -3
- package/dist/cjs/decorators/emitCustomEvent.js +55 -0
- package/dist/cjs/decorators/emitCustomEvent.js.map +2 -2
- package/dist/cjs/decorators/index.js +5 -1
- package/dist/cjs/decorators/index.js.map +2 -2
- package/dist/cjs/decorators/intersectionObserver.js +209 -0
- package/dist/cjs/decorators/intersectionObserver.js.map +7 -0
- package/dist/cjs/decorators/mutationObserver.js +244 -0
- package/dist/cjs/decorators/mutationObserver.js.map +7 -0
- package/dist/cjs/decorators/query.js +129 -102
- package/dist/cjs/decorators/query.js.map +2 -2
- package/dist/cjs/decorators/resizeObserver.js +191 -0
- package/dist/cjs/decorators/resizeObserver.js.map +7 -0
- package/dist/cjs/decorators/setInterval.js +82 -0
- package/dist/cjs/decorators/setInterval.js.map +7 -0
- package/dist/cjs/decorators/setTimeout.js +82 -0
- package/dist/cjs/decorators/setTimeout.js.map +7 -0
- package/dist/cjs/decorators/subscribeSwcAppMessageWhileConnected.js +9 -0
- package/dist/cjs/decorators/subscribeSwcAppMessageWhileConnected.js.map +2 -2
- package/dist/cjs/decorators/subscribeSwcAppRouteChangeWhileConnected.js +9 -0
- package/dist/cjs/decorators/subscribeSwcAppRouteChangeWhileConnected.js.map +2 -2
- package/dist/cjs/examples/RxJSOperatorsExample.js +285 -0
- package/dist/cjs/examples/RxJSOperatorsExample.js.map +7 -0
- package/dist/cjs/types/index.js.map +1 -1
- package/dist/esm/config/config.js +1 -1
- package/dist/esm/config/config.js.map +2 -2
- package/dist/esm/decorators/addEventListener.js +413 -16
- package/dist/esm/decorators/addEventListener.js.map +3 -3
- package/dist/esm/decorators/applyAttribute.js +25 -0
- package/dist/esm/decorators/applyAttribute.js.map +2 -2
- package/dist/esm/decorators/applyClass.js +49 -18
- package/dist/esm/decorators/applyClass.js.map +3 -3
- package/dist/esm/decorators/applyNode.js +67 -1
- package/dist/esm/decorators/applyNode.js.map +3 -3
- package/dist/esm/decorators/applyProperty.js +101 -3
- package/dist/esm/decorators/applyProperty.js.map +2 -2
- package/dist/esm/decorators/applyStyle.js +36 -5
- package/dist/esm/decorators/applyStyle.js.map +2 -2
- package/dist/esm/decorators/changedAttribute.js +40 -0
- package/dist/esm/decorators/changedAttribute.js.map +2 -2
- package/dist/esm/decorators/elementDefine.js +249 -230
- package/dist/esm/decorators/elementDefine.js.map +3 -3
- package/dist/esm/decorators/emitCustomEvent.js +55 -0
- package/dist/esm/decorators/emitCustomEvent.js.map +2 -2
- package/dist/esm/decorators/index.js +5 -1
- package/dist/esm/decorators/index.js.map +2 -2
- package/dist/esm/decorators/intersectionObserver.js +191 -0
- package/dist/esm/decorators/intersectionObserver.js.map +7 -0
- package/dist/esm/decorators/mutationObserver.js +226 -0
- package/dist/esm/decorators/mutationObserver.js.map +7 -0
- package/dist/esm/decorators/query.js +129 -102
- package/dist/esm/decorators/query.js.map +2 -2
- package/dist/esm/decorators/resizeObserver.js +173 -0
- package/dist/esm/decorators/resizeObserver.js.map +7 -0
- package/dist/esm/decorators/setInterval.js +64 -0
- package/dist/esm/decorators/setInterval.js.map +7 -0
- package/dist/esm/decorators/setTimeout.js +64 -0
- package/dist/esm/decorators/setTimeout.js.map +7 -0
- package/dist/esm/decorators/subscribeSwcAppMessageWhileConnected.js +9 -0
- package/dist/esm/decorators/subscribeSwcAppMessageWhileConnected.js.map +2 -2
- package/dist/esm/decorators/subscribeSwcAppRouteChangeWhileConnected.js +9 -0
- package/dist/esm/decorators/subscribeSwcAppRouteChangeWhileConnected.js.map +2 -2
- package/dist/esm/examples/RxJSOperatorsExample.js +266 -0
- package/dist/esm/examples/RxJSOperatorsExample.js.map +7 -0
- package/dist/esm/types/index.js.map +1 -1
- package/dist/esm-bundle/dooboostore-simple-web-component.esm.js +2413 -889
- package/dist/esm-bundle/dooboostore-simple-web-component.esm.js.map +4 -4
- package/dist/types/config/config.d.ts.map +1 -1
- package/dist/types/decorators/addEventListener.d.ts +93 -23
- package/dist/types/decorators/addEventListener.d.ts.map +1 -1
- package/dist/types/decorators/applyAttribute.d.ts +22 -34
- package/dist/types/decorators/applyAttribute.d.ts.map +1 -1
- package/dist/types/decorators/applyClass.d.ts +34 -34
- package/dist/types/decorators/applyClass.d.ts.map +1 -1
- package/dist/types/decorators/applyNode.d.ts +30 -20
- package/dist/types/decorators/applyNode.d.ts.map +1 -1
- package/dist/types/decorators/applyProperty.d.ts +57 -34
- package/dist/types/decorators/applyProperty.d.ts.map +1 -1
- package/dist/types/decorators/applyStyle.d.ts +25 -12
- package/dist/types/decorators/applyStyle.d.ts.map +1 -1
- package/dist/types/decorators/changedAttribute.d.ts +11 -0
- package/dist/types/decorators/changedAttribute.d.ts.map +1 -1
- package/dist/types/decorators/elementDefine.d.ts.map +1 -1
- package/dist/types/decorators/emitCustomEvent.d.ts +28 -4
- package/dist/types/decorators/emitCustomEvent.d.ts.map +1 -1
- package/dist/types/decorators/index.d.ts +5 -1
- package/dist/types/decorators/index.d.ts.map +1 -1
- package/dist/types/decorators/intersectionObserver.d.ts +49 -0
- package/dist/types/decorators/intersectionObserver.d.ts.map +1 -0
- package/dist/types/decorators/mutationObserver.d.ts +46 -0
- package/dist/types/decorators/mutationObserver.d.ts.map +1 -0
- package/dist/types/decorators/query.d.ts +63 -8
- package/dist/types/decorators/query.d.ts.map +1 -1
- package/dist/types/decorators/resizeObserver.d.ts +48 -0
- package/dist/types/decorators/resizeObserver.d.ts.map +1 -0
- package/dist/types/decorators/setInterval.d.ts +29 -0
- package/dist/types/decorators/setInterval.d.ts.map +1 -0
- package/dist/types/decorators/setTimeout.d.ts +29 -0
- package/dist/types/decorators/setTimeout.d.ts.map +1 -0
- package/dist/types/decorators/subscribeSwcAppMessageWhileConnected.d.ts +7 -1
- package/dist/types/decorators/subscribeSwcAppMessageWhileConnected.d.ts.map +1 -1
- package/dist/types/decorators/subscribeSwcAppRouteChangeWhileConnected.d.ts +6 -0
- package/dist/types/decorators/subscribeSwcAppRouteChangeWhileConnected.d.ts.map +1 -1
- package/dist/types/examples/RxJSOperatorsExample.d.ts +94 -0
- package/dist/types/examples/RxJSOperatorsExample.d.ts.map +1 -0
- package/dist/types/types/index.d.ts +104 -0
- package/dist/types/types/index.d.ts.map +1 -1
- package/dist/umd-bundle/dooboostore-simple-web-component.umd.js +2413 -889
- package/dist/umd-bundle/dooboostore-simple-web-component.umd.js.map +4 -4
- package/package.json +8 -6
- package/src/config/config.ts +1 -1
- package/src/decorators/addEventListener.ts +426 -23
- package/src/decorators/applyAttribute.ts +50 -36
- package/src/decorators/applyClass.ts +76 -26
- package/src/decorators/applyNode.ts +114 -36
- package/src/decorators/applyProperty.ts +152 -40
- package/src/decorators/applyStyle.ts +64 -17
- package/src/decorators/changedAttribute.ts +46 -0
- package/src/decorators/elementDefine.ts +301 -317
- package/src/decorators/emitCustomEvent.ts +73 -5
- package/src/decorators/index.ts +5 -1
- package/src/decorators/intersectionObserver.ts +259 -0
- package/src/decorators/mutationObserver.ts +304 -0
- package/src/decorators/query.ts +182 -117
- package/src/decorators/resizeObserver.ts +235 -0
- package/src/decorators/setInterval.ts +80 -0
- package/src/decorators/setTimeout.ts +80 -0
- package/src/decorators/subscribeSwcAppMessageWhileConnected.ts +17 -0
- package/src/decorators/subscribeSwcAppRouteChangeWhileConnected.ts +19 -0
- package/src/examples/RxJSOperatorsExample.ts +279 -0
- package/src/types/index.ts +141 -0
- package/dist/cjs/decorators/queryAll.js +0 -181
- package/dist/cjs/decorators/queryAll.js.map +0 -7
- package/dist/cjs/elements/tt/SwcAppMixin.js +0 -1
- package/dist/cjs/elements/tt/SwcAppMixin.js.map +0 -7
- package/dist/cjs/elements/tt/SwcAsync.js +0 -1
- package/dist/cjs/elements/tt/SwcAsync.js.map +0 -7
- package/dist/cjs/elements/tt/SwcAsyncTemplate.js +0 -1
- package/dist/cjs/elements/tt/SwcAsyncTemplate.js.map +0 -7
- package/dist/cjs/elements/tt/SwcChoose.js +0 -1
- package/dist/cjs/elements/tt/SwcChoose.js.map +0 -7
- package/dist/cjs/elements/tt/SwcChooseTemplate.js +0 -1
- package/dist/cjs/elements/tt/SwcChooseTemplate.js.map +0 -7
- package/dist/cjs/elements/tt/SwcIf.js +0 -1
- package/dist/cjs/elements/tt/SwcIf.js.map +0 -7
- package/dist/cjs/elements/tt/SwcIfTemplate.js +0 -1
- package/dist/cjs/elements/tt/SwcIfTemplate.js.map +0 -7
- package/dist/cjs/elements/tt/SwcLoop.js +0 -1
- package/dist/cjs/elements/tt/SwcLoop.js.map +0 -7
- package/dist/cjs/elements/tt/SwcLoopTemplate.js +0 -1
- package/dist/cjs/elements/tt/SwcLoopTemplate.js.map +0 -7
- package/dist/cjs/elements/tt/SwcSubTemplates.js +0 -1
- package/dist/cjs/elements/tt/SwcSubTemplates.js.map +0 -7
- package/dist/cjs/elements/tt/register.js +0 -1
- package/dist/cjs/elements/tt/register.js.map +0 -7
- package/dist/esm/decorators/queryAll.js +0 -162
- package/dist/esm/decorators/queryAll.js.map +0 -7
- package/dist/esm/elements/tt/SwcAppMixin.js +0 -1
- package/dist/esm/elements/tt/SwcAppMixin.js.map +0 -7
- package/dist/esm/elements/tt/SwcAsync.js +0 -1
- package/dist/esm/elements/tt/SwcAsync.js.map +0 -7
- package/dist/esm/elements/tt/SwcAsyncTemplate.js +0 -1
- package/dist/esm/elements/tt/SwcAsyncTemplate.js.map +0 -7
- package/dist/esm/elements/tt/SwcChoose.js +0 -1
- package/dist/esm/elements/tt/SwcChoose.js.map +0 -7
- package/dist/esm/elements/tt/SwcChooseTemplate.js +0 -1
- package/dist/esm/elements/tt/SwcChooseTemplate.js.map +0 -7
- package/dist/esm/elements/tt/SwcIf.js +0 -1
- package/dist/esm/elements/tt/SwcIf.js.map +0 -7
- package/dist/esm/elements/tt/SwcIfTemplate.js +0 -1
- package/dist/esm/elements/tt/SwcIfTemplate.js.map +0 -7
- package/dist/esm/elements/tt/SwcLoop.js +0 -1
- package/dist/esm/elements/tt/SwcLoop.js.map +0 -7
- package/dist/esm/elements/tt/SwcLoopTemplate.js +0 -1
- package/dist/esm/elements/tt/SwcLoopTemplate.js.map +0 -7
- package/dist/esm/elements/tt/SwcSubTemplates.js +0 -1
- package/dist/esm/elements/tt/SwcSubTemplates.js.map +0 -7
- package/dist/esm/elements/tt/register.js +0 -1
- package/dist/esm/elements/tt/register.js.map +0 -7
- package/dist/types/decorators/queryAll.d.ts +0 -22
- package/dist/types/decorators/queryAll.d.ts.map +0 -1
- package/dist/types/elements/tt/SwcAppMixin.d.ts +0 -1
- package/dist/types/elements/tt/SwcAppMixin.d.ts.map +0 -1
- package/dist/types/elements/tt/SwcAsync.d.ts +0 -1
- package/dist/types/elements/tt/SwcAsync.d.ts.map +0 -1
- package/dist/types/elements/tt/SwcAsyncTemplate.d.ts +0 -1
- package/dist/types/elements/tt/SwcAsyncTemplate.d.ts.map +0 -1
- package/dist/types/elements/tt/SwcChoose.d.ts +0 -1
- package/dist/types/elements/tt/SwcChoose.d.ts.map +0 -1
- package/dist/types/elements/tt/SwcChooseTemplate.d.ts +0 -1
- package/dist/types/elements/tt/SwcChooseTemplate.d.ts.map +0 -1
- package/dist/types/elements/tt/SwcIf.d.ts +0 -1
- package/dist/types/elements/tt/SwcIf.d.ts.map +0 -1
- package/dist/types/elements/tt/SwcIfTemplate.d.ts +0 -1
- package/dist/types/elements/tt/SwcIfTemplate.d.ts.map +0 -1
- package/dist/types/elements/tt/SwcLoop.d.ts +0 -1
- package/dist/types/elements/tt/SwcLoop.d.ts.map +0 -1
- package/dist/types/elements/tt/SwcLoopTemplate.d.ts +0 -1
- package/dist/types/elements/tt/SwcLoopTemplate.d.ts.map +0 -1
- package/dist/types/elements/tt/SwcSubTemplates.d.ts +0 -1
- package/dist/types/elements/tt/SwcSubTemplates.d.ts.map +0 -1
- package/dist/types/elements/tt/register.d.ts +0 -1
- package/dist/types/elements/tt/register.d.ts.map +0 -1
- package/src/decorators/queryAll.ts +0 -186
- package/src/elements/tt/SwcAppMixin.ts +0 -13
- package/src/elements/tt/SwcAsync.ts +0 -139
- package/src/elements/tt/SwcAsyncTemplate.ts +0 -126
- package/src/elements/tt/SwcChoose.ts +0 -182
- package/src/elements/tt/SwcChooseTemplate.ts +0 -229
- package/src/elements/tt/SwcIf.ts +0 -145
- package/src/elements/tt/SwcIfTemplate.ts +0 -158
- package/src/elements/tt/SwcLoop.ts +0 -222
- package/src/elements/tt/SwcLoopTemplate.ts +0 -255
- package/src/elements/tt/SwcSubTemplates.ts +0 -6
- package/src/elements/tt/register.ts +0 -720
|
@@ -0,0 +1,235 @@
|
|
|
1
|
+
import { ReflectUtils } from '@dooboostore/core';
|
|
2
|
+
import { SpecialSelector, SwcQueryOptions, SwcFnSelector, SwcSelector, HelperHostSet } from '../types';
|
|
3
|
+
|
|
4
|
+
// 공통 옵션 — root·delegate 없음
|
|
5
|
+
export interface ResizeObserverBaseOptions {
|
|
6
|
+
box?: 'content-box' | 'border-box' | 'device-pixel-content-box';
|
|
7
|
+
filter?: (matchedEls: HTMLElement[], meta: { currentThis: any, helper: HelperHostSet }) => boolean;
|
|
8
|
+
removeObserver?: (target: Element, optionValue: ResizeObserverOptions) => void;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
// 문자열 셀렉터 전용 — root·delegate 허용
|
|
12
|
+
export type ResizeObserverQueryOptions = ResizeObserverBaseOptions & SwcQueryOptions & { delegate?: boolean };
|
|
13
|
+
// 함수 셀렉터 전용 — root·delegate 금지
|
|
14
|
+
export type ResizeObserverNonQueryOptions = ResizeObserverBaseOptions;
|
|
15
|
+
// 내부 저장/해석용
|
|
16
|
+
export type ResizeObserverOptions = ResizeObserverQueryOptions;
|
|
17
|
+
|
|
18
|
+
// 셀렉터 종류에 따라 옵션 타입 분기
|
|
19
|
+
export type ResizeObserverOptionsOf<S extends SwcSelector> = S extends string ? ResizeObserverQueryOptions : ResizeObserverNonQueryOptions;
|
|
20
|
+
|
|
21
|
+
export interface ResizeObserverMetadata {
|
|
22
|
+
propertyKey: string | symbol;
|
|
23
|
+
selector: SwcSelector;
|
|
24
|
+
options: ResizeObserverOptions;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
export const RESIZE_OBSERVER_METADATA_KEY = Symbol.for('simple-web-component:resize-observer');
|
|
28
|
+
|
|
29
|
+
export function resizeObserver(target: SpecialSelector, options?: ResizeObserverQueryOptions): MethodDecorator;
|
|
30
|
+
export function resizeObserver(selector: string, options?: ResizeObserverQueryOptions): MethodDecorator;
|
|
31
|
+
export function resizeObserver(selector: SwcFnSelector, options?: ResizeObserverNonQueryOptions): MethodDecorator;
|
|
32
|
+
export function resizeObserver(options?: ResizeObserverQueryOptions): MethodDecorator;
|
|
33
|
+
/**
|
|
34
|
+
* @resizeObserver decorator to observe element size changes.
|
|
35
|
+
*/
|
|
36
|
+
export function resizeObserver(selectorOrOptions?: SwcSelector | ResizeObserverOptions, maybeOptions?: ResizeObserverOptions): MethodDecorator {
|
|
37
|
+
return (targetObj: Object, propertyKey: string | symbol, descriptor: PropertyDescriptor) => {
|
|
38
|
+
let selector: SwcSelector = '$this';
|
|
39
|
+
let options: ResizeObserverOptions = {};
|
|
40
|
+
|
|
41
|
+
if (typeof selectorOrOptions === 'string' || typeof selectorOrOptions === 'function') {
|
|
42
|
+
selector = selectorOrOptions;
|
|
43
|
+
options = maybeOptions ?? {};
|
|
44
|
+
} else {
|
|
45
|
+
selector = '$this';
|
|
46
|
+
options = selectorOrOptions ?? {};
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
const constructor = targetObj.constructor;
|
|
50
|
+
|
|
51
|
+
let observers = ReflectUtils.getMetadata<ResizeObserverMetadata[]>(RESIZE_OBSERVER_METADATA_KEY, constructor);
|
|
52
|
+
if (!observers) {
|
|
53
|
+
observers = [];
|
|
54
|
+
ReflectUtils.defineMetadata(RESIZE_OBSERVER_METADATA_KEY, observers, constructor);
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
observers.push({ propertyKey, selector, options });
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
export function resizeObserverThis(options?: ResizeObserverQueryOptions): MethodDecorator {
|
|
62
|
+
return resizeObserver('$this', options);
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
// ─── root별 delegate 헬퍼 (root 주입 → 문자열 셀렉터 전용) ───
|
|
66
|
+
|
|
67
|
+
export function resizeObserverDelegateLight(selector: string, options?: Omit<ResizeObserverQueryOptions, 'delegate'>): MethodDecorator;
|
|
68
|
+
export function resizeObserverDelegateLight(options?: Omit<ResizeObserverQueryOptions, 'delegate'>): MethodDecorator;
|
|
69
|
+
export function resizeObserverDelegateLight(selectorOrOptions?: string | Omit<ResizeObserverQueryOptions, 'delegate'>, maybeOptions?: Omit<ResizeObserverQueryOptions, 'delegate'>): MethodDecorator {
|
|
70
|
+
if (typeof selectorOrOptions === 'string' || typeof selectorOrOptions === 'function') {
|
|
71
|
+
return resizeObserver(selectorOrOptions as any, {...maybeOptions ?? {}, root: 'light', delegate: true});
|
|
72
|
+
}
|
|
73
|
+
return resizeObserver({...selectorOrOptions ?? {}, root: 'light', delegate: true});
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
export function resizeObserverDelegateShadow(selector: string, options?: Omit<ResizeObserverQueryOptions, 'delegate'>): MethodDecorator;
|
|
77
|
+
export function resizeObserverDelegateShadow(options?: Omit<ResizeObserverQueryOptions, 'delegate'>): MethodDecorator;
|
|
78
|
+
export function resizeObserverDelegateShadow(selectorOrOptions?: string | Omit<ResizeObserverQueryOptions, 'delegate'>, maybeOptions?: Omit<ResizeObserverQueryOptions, 'delegate'>): MethodDecorator {
|
|
79
|
+
if (typeof selectorOrOptions === 'string' || typeof selectorOrOptions === 'function') {
|
|
80
|
+
return resizeObserver(selectorOrOptions as any, {...maybeOptions ?? {}, root: 'shadow', delegate: true});
|
|
81
|
+
}
|
|
82
|
+
return resizeObserver({...selectorOrOptions ?? {}, root: 'shadow', delegate: true});
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
export function resizeObserverDelegateAll(selector: string, options?: Omit<ResizeObserverQueryOptions, 'delegate'>): MethodDecorator;
|
|
86
|
+
export function resizeObserverDelegateAll(options?: Omit<ResizeObserverQueryOptions, 'delegate'>): MethodDecorator;
|
|
87
|
+
export function resizeObserverDelegateAll(selectorOrOptions?: string | Omit<ResizeObserverQueryOptions, 'delegate'>, maybeOptions?: Omit<ResizeObserverQueryOptions, 'delegate'>): MethodDecorator {
|
|
88
|
+
if (typeof selectorOrOptions === 'string' || typeof selectorOrOptions === 'function') {
|
|
89
|
+
return resizeObserver(selectorOrOptions as any, {...maybeOptions ?? {}, root: 'all', delegate: true});
|
|
90
|
+
}
|
|
91
|
+
return resizeObserver({...selectorOrOptions ?? {}, root: 'all', delegate: true});
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
export function resizeObserverDelegate(selector: string, options?: Omit<ResizeObserverQueryOptions, 'delegate'>): MethodDecorator;
|
|
95
|
+
export function resizeObserverDelegate(options?: Omit<ResizeObserverQueryOptions, 'delegate'>): MethodDecorator;
|
|
96
|
+
export function resizeObserverDelegate(selectorOrOptions?: string | Omit<ResizeObserverQueryOptions, 'delegate'>, maybeOptions?: Omit<ResizeObserverQueryOptions, 'delegate'>): MethodDecorator {
|
|
97
|
+
if (typeof selectorOrOptions === 'string' || typeof selectorOrOptions === 'function') {
|
|
98
|
+
return resizeObserver(selectorOrOptions as any, {...maybeOptions ?? {}, root: 'auto', delegate: true});
|
|
99
|
+
}
|
|
100
|
+
return resizeObserver({...selectorOrOptions ?? {}, root: 'auto', delegate: true});
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
// ─── root별 일반 헬퍼 (delegate 없이, 셀렉터 생략 시 $this) ───
|
|
104
|
+
|
|
105
|
+
export function resizeObserverLight(selector: string, options?: ResizeObserverQueryOptions): MethodDecorator;
|
|
106
|
+
export function resizeObserverLight(options?: ResizeObserverQueryOptions): MethodDecorator;
|
|
107
|
+
export function resizeObserverLight(selectorOrOptions?: string | ResizeObserverQueryOptions, maybeOptions?: ResizeObserverQueryOptions): MethodDecorator {
|
|
108
|
+
if (typeof selectorOrOptions === 'string' || typeof selectorOrOptions === 'function') {
|
|
109
|
+
return resizeObserver(selectorOrOptions as any, {...maybeOptions ?? {}, root: 'light'});
|
|
110
|
+
}
|
|
111
|
+
return resizeObserver({...selectorOrOptions ?? {}, root: 'light'});
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
export function resizeObserverShadow(selector: string, options?: ResizeObserverQueryOptions): MethodDecorator;
|
|
115
|
+
export function resizeObserverShadow(options?: ResizeObserverQueryOptions): MethodDecorator;
|
|
116
|
+
export function resizeObserverShadow(selectorOrOptions?: string | ResizeObserverQueryOptions, maybeOptions?: ResizeObserverQueryOptions): MethodDecorator {
|
|
117
|
+
if (typeof selectorOrOptions === 'string' || typeof selectorOrOptions === 'function') {
|
|
118
|
+
return resizeObserver(selectorOrOptions as any, {...maybeOptions ?? {}, root: 'shadow'});
|
|
119
|
+
}
|
|
120
|
+
return resizeObserver({...selectorOrOptions ?? {}, root: 'shadow'});
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
export function resizeObserverAll(selector: string, options?: ResizeObserverQueryOptions): MethodDecorator;
|
|
124
|
+
export function resizeObserverAll(options?: ResizeObserverQueryOptions): MethodDecorator;
|
|
125
|
+
export function resizeObserverAll(selectorOrOptions?: string | ResizeObserverQueryOptions, maybeOptions?: ResizeObserverQueryOptions): MethodDecorator {
|
|
126
|
+
if (typeof selectorOrOptions === 'string' || typeof selectorOrOptions === 'function') {
|
|
127
|
+
return resizeObserver(selectorOrOptions as any, {...maybeOptions ?? {}, root: 'all'});
|
|
128
|
+
}
|
|
129
|
+
return resizeObserver({...selectorOrOptions ?? {}, root: 'all'});
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
export function getResizeObserverMetadata(target: any): ResizeObserverMetadata[] | undefined {
|
|
133
|
+
const constructor = target instanceof Function ? target : target.constructor;
|
|
134
|
+
return ReflectUtils.getMetadata(RESIZE_OBSERVER_METADATA_KEY, constructor);
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
138
|
+
// ResizeObserverLifeCycler
|
|
139
|
+
// observer 를 직접 생성하지 않고 OnConnectedResult 를 반환한다.
|
|
140
|
+
// elementDefine 이 수집된 ResizeObserverSet 으로 observer 를 생성하고,
|
|
141
|
+
// observe/unobserve 함수를 주입해 MutationObserver delegate 추적이 사용할 수 있게 한다.
|
|
142
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
143
|
+
import { ElementDefineLifeCycler, OnConnectedResult, ResizeObserverSet, ResizeObserverSetEntry } from '../types';
|
|
144
|
+
import { SwcUtils } from '../utils/Utils';
|
|
145
|
+
|
|
146
|
+
export class ResizeObserverLifeCycler implements ElementDefineLifeCycler {
|
|
147
|
+
private readonly removeObserverCallbacksMap = new WeakMap<Element, Array<{ fn: (target: Element, opts: unknown) => void; target: any; opts: unknown }>>();
|
|
148
|
+
|
|
149
|
+
onConnected(helperHostSet: HelperHostSet): OnConnectedResult | void {
|
|
150
|
+
const inst = helperHostSet.$this;
|
|
151
|
+
const currentWin = helperHostSet.$w;
|
|
152
|
+
|
|
153
|
+
const removeObserverCallbacks: Array<{ fn: (target: Element, opts: unknown) => void; target: any; opts: unknown }> = [];
|
|
154
|
+
this.removeObserverCallbacksMap.set(inst, removeObserverCallbacks);
|
|
155
|
+
|
|
156
|
+
const allMeta = getResizeObserverMetadata(inst) ?? [];
|
|
157
|
+
if (allMeta.length === 0) return;
|
|
158
|
+
|
|
159
|
+
const root: HTMLElement | ShadowRoot = inst.shadowRoot || inst;
|
|
160
|
+
|
|
161
|
+
// removeObserver 콜백 수집
|
|
162
|
+
for (const m of allMeta) {
|
|
163
|
+
if (m.options.removeObserver) removeObserverCallbacks.push({ fn: m.options.removeObserver, target: root, opts: m.options });
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
// ── ResizeObserver 콜백 ──
|
|
167
|
+
const callback: ResizeObserverSetEntry['callback'] = (entries, obs) => {
|
|
168
|
+
for (const m of allMeta) {
|
|
169
|
+
let matchedEls: HTMLElement[];
|
|
170
|
+
if (m.options.delegate && typeof m.selector === 'string') {
|
|
171
|
+
const isThis = m.selector === '$this' || m.selector === '';
|
|
172
|
+
matchedEls = entries.map(e => e.target as HTMLElement).filter(el => {
|
|
173
|
+
if (!el || el.nodeType !== 1) return false;
|
|
174
|
+
if (isThis) return true;
|
|
175
|
+
return el.matches?.(m.selector as string) || !!el.closest?.(m.selector as string);
|
|
176
|
+
});
|
|
177
|
+
} else {
|
|
178
|
+
matchedEls = entries.map(e => e.target as HTMLElement).filter(t => t && t.nodeType === 1);
|
|
179
|
+
}
|
|
180
|
+
if (matchedEls.length === 0) continue;
|
|
181
|
+
if (m.options.filter) {
|
|
182
|
+
if (!m.options.filter(matchedEls, { currentThis: inst, helper: helperHostSet })) continue;
|
|
183
|
+
}
|
|
184
|
+
const hostSet = SwcUtils.getHostSet(inst);
|
|
185
|
+
inst[m.propertyKey](matchedEls, entries, obs, { ...hostSet, $root: root });
|
|
186
|
+
}
|
|
187
|
+
};
|
|
188
|
+
|
|
189
|
+
// ── observe 대상 목록 구성 ──
|
|
190
|
+
// - non-delegate: 실제 요소를 초기 observe
|
|
191
|
+
// - delegate: 동적 추적용 셀렉터 문자열로 선언 (elementDefine 의 MutationObserver 콜백이 observe/unobserve)
|
|
192
|
+
// 모든 대상은 이 루트의 callback 을 공유한다.
|
|
193
|
+
const resizeObserverSet: ResizeObserverSet = [];
|
|
194
|
+
for (const m of allMeta) {
|
|
195
|
+
if (m.options.delegate && typeof m.selector === 'string') {
|
|
196
|
+
resizeObserverSet.push({ target: m.selector, delegate: true, delegateRoot: m.options.root, options: m.options.box ? { box: m.options.box } : undefined, callback });
|
|
197
|
+
continue;
|
|
198
|
+
}
|
|
199
|
+
let targets: HTMLElement[] = [];
|
|
200
|
+
|
|
201
|
+
if (typeof m.selector === 'function') {
|
|
202
|
+
const res = (m.selector as any)(inst, helperHostSet);
|
|
203
|
+
if (res instanceof currentWin.HTMLElement) targets = [res as HTMLElement];
|
|
204
|
+
else if (res instanceof currentWin.NodeList) targets = Array.from(res as NodeList).filter((e: any) => e instanceof currentWin.HTMLElement) as HTMLElement[];
|
|
205
|
+
else if (Array.isArray(res)) targets = res.filter((e: any) => e instanceof currentWin.HTMLElement) as HTMLElement[];
|
|
206
|
+
} else if (typeof m.selector === 'string') {
|
|
207
|
+
if (m.selector === '$this' || m.selector === '') {
|
|
208
|
+
targets = [inst as HTMLElement];
|
|
209
|
+
} else {
|
|
210
|
+
const r: any = m.options.root || 'auto';
|
|
211
|
+
const scopes: any[] = [];
|
|
212
|
+
if (r === 'auto') scopes.push(inst.shadowRoot || inst);
|
|
213
|
+
else if (r === 'light') scopes.push(inst);
|
|
214
|
+
else if (r === 'shadow' && inst.shadowRoot) scopes.push(inst.shadowRoot);
|
|
215
|
+
else if (r === 'all') { scopes.push(inst); if (inst.shadowRoot) scopes.push(inst.shadowRoot); }
|
|
216
|
+
for (const s of scopes) {
|
|
217
|
+
const found = s?.querySelectorAll?.(m.selector as string) as NodeListOf<HTMLElement> | undefined;
|
|
218
|
+
if (found?.length) targets.push(...Array.from(found));
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
for (const el of targets) resizeObserverSet.push({ target: el, options: m.options.box ? { box: m.options.box } : undefined, callback });
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
return { resizeObserverSet };
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
onDisconnected(helperHostSet: HelperHostSet): void {
|
|
229
|
+
const inst = helperHostSet.$this;
|
|
230
|
+
for (const cb of this.removeObserverCallbacksMap.get(inst) ?? []) {
|
|
231
|
+
try { cb.fn(cb.target, cb.opts); } catch (e) { console.error('[SWC] removeObserver error:', e); }
|
|
232
|
+
}
|
|
233
|
+
this.removeObserverCallbacksMap.delete(inst);
|
|
234
|
+
}
|
|
235
|
+
}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import { ReflectUtils } from '@dooboostore/core';
|
|
2
|
+
import { ElementDefineLifeCycler, HelperHostSet } from '../types';
|
|
3
|
+
|
|
4
|
+
export const SET_INTERVAL_METADATA_KEY = Symbol.for('simple-web-component:set-interval');
|
|
5
|
+
|
|
6
|
+
export interface SetIntervalOptions {
|
|
7
|
+
/** 매 tick마다 데코레이트된 메서드에 넘길 인자를 계산. 없으면 인자 없이 호출. */
|
|
8
|
+
parameter?: (set: HelperHostSet) => any[];
|
|
9
|
+
/** 타이머 등록 직후 1회 호출 (디버깅/로깅용). id는 실제 setInterval 반환값 - cleanup은 자동으로 처리되므로 직접 clear할 필요 없음. */
|
|
10
|
+
created?: (set: HelperHostSet, id: number) => void;
|
|
11
|
+
/**
|
|
12
|
+
* 매 tick마다 데코레이트된 메서드의 리턴값이 객체이고 이 키의 값이 함수이면 (id: number)로 호출한다.
|
|
13
|
+
* applyAttribute.ts의 valueKey와 동일한 컨벤션 - 리턴 객체에서 이 데코레이터 몫만 뽑아 쓴다.
|
|
14
|
+
*/
|
|
15
|
+
valueKey?: symbol | string;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export interface SetIntervalMetadata {
|
|
19
|
+
propertyKey: string | symbol;
|
|
20
|
+
interval: number;
|
|
21
|
+
options: SetIntervalOptions;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* connect 시 자동으로 setInterval을 걸고, disconnect 시 자동으로 clearInterval 한다.
|
|
26
|
+
*/
|
|
27
|
+
export function setInterval(interval: number, options: SetIntervalOptions = {}): MethodDecorator {
|
|
28
|
+
return (target: Object, propertyKey: string | symbol) => {
|
|
29
|
+
const constructor = target.constructor;
|
|
30
|
+
let metaList = ReflectUtils.getOwnMetadata(SET_INTERVAL_METADATA_KEY, constructor) as SetIntervalMetadata[];
|
|
31
|
+
if (!metaList) {
|
|
32
|
+
metaList = [];
|
|
33
|
+
ReflectUtils.defineMetadata(SET_INTERVAL_METADATA_KEY, metaList, constructor);
|
|
34
|
+
}
|
|
35
|
+
metaList.push({ propertyKey, interval, options });
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
export const findAllSetIntervalMetadata = (target: any): SetIntervalMetadata[] => {
|
|
40
|
+
const constructor = target instanceof Function ? target : target.constructor;
|
|
41
|
+
return (ReflectUtils.findAllMetadata<SetIntervalMetadata[]>(SET_INTERVAL_METADATA_KEY, constructor) || []).flat();
|
|
42
|
+
};
|
|
43
|
+
|
|
44
|
+
export class SetIntervalLifeCycler implements ElementDefineLifeCycler {
|
|
45
|
+
private readonly activeMap = new WeakMap<any, number[]>();
|
|
46
|
+
|
|
47
|
+
onConnected(helperHostSet: HelperHostSet): void {
|
|
48
|
+
const inst = helperHostSet.$this;
|
|
49
|
+
const ids: number[] = [];
|
|
50
|
+
for (const meta of findAllSetIntervalMetadata(inst)) {
|
|
51
|
+
const id = helperHostSet.$w.setInterval(() => {
|
|
52
|
+
const args = meta.options.parameter?.(helperHostSet) ?? [];
|
|
53
|
+
try {
|
|
54
|
+
const res = inst[meta.propertyKey](...args);
|
|
55
|
+
const vk = meta.options.valueKey;
|
|
56
|
+
if (vk && res && typeof res === 'object' && typeof res[vk] === 'function') {
|
|
57
|
+
res[vk](id);
|
|
58
|
+
}
|
|
59
|
+
} catch (e) {
|
|
60
|
+
console.error('[SWC] setInterval tick error:', e);
|
|
61
|
+
}
|
|
62
|
+
}, meta.interval);
|
|
63
|
+
meta.options.created?.(helperHostSet, id);
|
|
64
|
+
ids.push(id);
|
|
65
|
+
}
|
|
66
|
+
this.activeMap.set(inst, ids);
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
onDisconnected(helperHostSet: HelperHostSet): void {
|
|
70
|
+
const inst = helperHostSet.$this;
|
|
71
|
+
for (const id of this.activeMap.get(inst) ?? []) {
|
|
72
|
+
try {
|
|
73
|
+
helperHostSet.$w.clearInterval(id);
|
|
74
|
+
} catch (e) {
|
|
75
|
+
console.error('[SWC] clearInterval error:', e);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
this.activeMap.delete(inst);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import { ReflectUtils } from '@dooboostore/core';
|
|
2
|
+
import { ElementDefineLifeCycler, HelperHostSet } from '../types';
|
|
3
|
+
|
|
4
|
+
export const SET_TIMEOUT_METADATA_KEY = Symbol.for('simple-web-component:set-timeout');
|
|
5
|
+
|
|
6
|
+
export interface SetTimeoutOptions {
|
|
7
|
+
/** 실행 시 데코레이트된 메서드에 넘길 인자를 계산. 없으면 인자 없이 호출. */
|
|
8
|
+
parameter?: (set: HelperHostSet) => any[];
|
|
9
|
+
/** 타이머 등록 직후 1회 호출 (디버깅/로깅용). id는 실제 setTimeout 반환값 - cleanup은 자동으로 처리되므로 직접 clear할 필요 없음. */
|
|
10
|
+
created?: (set: HelperHostSet, id: number) => void;
|
|
11
|
+
/**
|
|
12
|
+
* fire 시 데코레이트된 메서드의 리턴값이 객체이고 이 키의 값이 함수이면 (id: number)로 호출한다.
|
|
13
|
+
* applyAttribute.ts의 valueKey와 동일한 컨벤션 - 리턴 객체에서 이 데코레이터 몫만 뽑아 쓴다.
|
|
14
|
+
*/
|
|
15
|
+
valueKey?: symbol | string;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export interface SetTimeoutMetadata {
|
|
19
|
+
propertyKey: string | symbol;
|
|
20
|
+
delay: number;
|
|
21
|
+
options: SetTimeoutOptions;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* connect 시 자동으로 setTimeout을 걸고, disconnect 시 (아직 실행 전이라면) 자동으로 clearTimeout 한다.
|
|
26
|
+
*/
|
|
27
|
+
export function setTimeout(delay: number, options: SetTimeoutOptions = {}): MethodDecorator {
|
|
28
|
+
return (target: Object, propertyKey: string | symbol) => {
|
|
29
|
+
const constructor = target.constructor;
|
|
30
|
+
let metaList = ReflectUtils.getOwnMetadata(SET_TIMEOUT_METADATA_KEY, constructor) as SetTimeoutMetadata[];
|
|
31
|
+
if (!metaList) {
|
|
32
|
+
metaList = [];
|
|
33
|
+
ReflectUtils.defineMetadata(SET_TIMEOUT_METADATA_KEY, metaList, constructor);
|
|
34
|
+
}
|
|
35
|
+
metaList.push({ propertyKey, delay, options });
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
export const findAllSetTimeoutMetadata = (target: any): SetTimeoutMetadata[] => {
|
|
40
|
+
const constructor = target instanceof Function ? target : target.constructor;
|
|
41
|
+
return (ReflectUtils.findAllMetadata<SetTimeoutMetadata[]>(SET_TIMEOUT_METADATA_KEY, constructor) || []).flat();
|
|
42
|
+
};
|
|
43
|
+
|
|
44
|
+
export class SetTimeoutLifeCycler implements ElementDefineLifeCycler {
|
|
45
|
+
private readonly activeMap = new WeakMap<any, number[]>();
|
|
46
|
+
|
|
47
|
+
onConnected(helperHostSet: HelperHostSet): void {
|
|
48
|
+
const inst = helperHostSet.$this;
|
|
49
|
+
const ids: number[] = [];
|
|
50
|
+
for (const meta of findAllSetTimeoutMetadata(inst)) {
|
|
51
|
+
const id = helperHostSet.$w.setTimeout(() => {
|
|
52
|
+
const args = meta.options.parameter?.(helperHostSet) ?? [];
|
|
53
|
+
try {
|
|
54
|
+
const res = inst[meta.propertyKey](...args);
|
|
55
|
+
const vk = meta.options.valueKey;
|
|
56
|
+
if (vk && res && typeof res === 'object' && typeof res[vk] === 'function') {
|
|
57
|
+
res[vk](id);
|
|
58
|
+
}
|
|
59
|
+
} catch (e) {
|
|
60
|
+
console.error('[SWC] setTimeout fire error:', e);
|
|
61
|
+
}
|
|
62
|
+
}, meta.delay);
|
|
63
|
+
meta.options.created?.(helperHostSet, id);
|
|
64
|
+
ids.push(id);
|
|
65
|
+
}
|
|
66
|
+
this.activeMap.set(inst, ids);
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
onDisconnected(helperHostSet: HelperHostSet): void {
|
|
70
|
+
const inst = helperHostSet.$this;
|
|
71
|
+
for (const id of this.activeMap.get(inst) ?? []) {
|
|
72
|
+
try {
|
|
73
|
+
helperHostSet.$w.clearTimeout(id);
|
|
74
|
+
} catch (e) {
|
|
75
|
+
console.error('[SWC] clearTimeout error:', e);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
this.activeMap.delete(inst);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
@@ -72,3 +72,20 @@ export const getSubscribeSwcAppMessageWhileConnectedMetadata = (target: any): Sw
|
|
|
72
72
|
const constructor = target instanceof Function ? target : target.constructor;
|
|
73
73
|
return ReflectUtils.getOwnMetadata(SUBSCRIBE_SWC_APP_MESSAGE_WHILE_CONNECTED_METADATA_KEY, constructor);
|
|
74
74
|
};
|
|
75
|
+
|
|
76
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
77
|
+
// MessageSubscribeLifeCycler
|
|
78
|
+
// NOTE: 실제 구독 로직은 SwcAppMixin._connected 에서 처리된다.
|
|
79
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
80
|
+
import { ElementDefineLifeCycler } from '../types';
|
|
81
|
+
|
|
82
|
+
export class MessageSubscribeLifeCycler implements ElementDefineLifeCycler {
|
|
83
|
+
onConnected(_helperHostSet: HelperHostSet): void {
|
|
84
|
+
// 실제 구독은 SwcAppMixin._connected 에서 처리
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
/** SwcAppMixin 이 구독 대상 메타를 꺼낼 때 사용 */
|
|
88
|
+
getMetadata(helperHostSet: HelperHostSet): SwcAppMessageSubscriberMetadata[] | undefined {
|
|
89
|
+
return getSubscribeSwcAppMessageWhileConnectedMetadata(helperHostSet.$this);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
@@ -86,3 +86,22 @@ export const getSubscribeSwcAppRouteChangeWhileConnectedMetadata = (target: any)
|
|
|
86
86
|
// Sort by order (default 0 if not specified)
|
|
87
87
|
return [...results].sort((a, b) => (a.options?.order ?? 0) - (b.options?.order ?? 0));
|
|
88
88
|
};
|
|
89
|
+
|
|
90
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
91
|
+
// RouteSubscribeLifeCycler
|
|
92
|
+
// NOTE: 실제 구독 로직은 SwcAppMixin._connected 에서 처리된다.
|
|
93
|
+
// 이 cycler 는 메타데이터 접근 진입점 역할만 하며,
|
|
94
|
+
// 향후 SwcAppMixin 에서 로직을 분리할 때 이 클래스로 이전한다.
|
|
95
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
96
|
+
import { ElementDefineLifeCycler } from '../types';
|
|
97
|
+
|
|
98
|
+
export class RouteSubscribeLifeCycler implements ElementDefineLifeCycler {
|
|
99
|
+
onConnected(_helperHostSet: HelperHostSet): void {
|
|
100
|
+
// 실제 구독은 SwcAppMixin._connected 에서 처리
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
/** SwcAppMixin 이 구독 대상 메타를 꺼낼 때 사용 */
|
|
104
|
+
getMetadata(helperHostSet: HelperHostSet): SwcAppRouteChangeSubscriberMetadata[] {
|
|
105
|
+
return getSubscribeSwcAppRouteChangeWhileConnectedMetadata(helperHostSet.$this);
|
|
106
|
+
}
|
|
107
|
+
}
|