@dooboostore/simple-web-component 1.0.49 → 1.0.51
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 +790 -337
- package/dist/cjs/SwcAppEngine.js.map +2 -2
- package/dist/cjs/decorators/addEventListener.js +1925 -22
- package/dist/cjs/decorators/addEventListener.js.map +2 -2
- package/dist/cjs/decorators/applyAttribute.js +41 -47
- package/dist/cjs/decorators/applyAttribute.js.map +2 -2
- package/dist/cjs/decorators/applyClass.js +14 -11
- package/dist/cjs/decorators/applyClass.js.map +2 -2
- package/dist/cjs/decorators/applyNode.js +19 -21
- package/dist/cjs/decorators/applyNode.js.map +2 -2
- package/dist/cjs/decorators/applyProperty.js +24 -48
- package/dist/cjs/decorators/applyProperty.js.map +2 -2
- package/dist/cjs/decorators/applySlot.js +9 -8
- package/dist/cjs/decorators/applySlot.js.map +2 -2
- package/dist/cjs/decorators/applyStyle.js +14 -11
- package/dist/cjs/decorators/applyStyle.js.map +2 -2
- package/dist/cjs/decorators/around.js +124 -0
- package/dist/cjs/decorators/around.js.map +7 -0
- package/dist/cjs/decorators/changedAttribute.js +61 -24
- package/dist/cjs/decorators/changedAttribute.js.map +2 -2
- package/dist/cjs/decorators/elementDefine.js +240 -196
- package/dist/cjs/decorators/elementDefine.js.map +3 -3
- package/dist/cjs/decorators/emitCustomEvent.js +14 -12
- package/dist/cjs/decorators/emitCustomEvent.js.map +2 -2
- package/dist/cjs/decorators/eventMedia.js +112 -0
- package/dist/cjs/decorators/eventMedia.js.map +7 -0
- package/dist/cjs/decorators/fetch.js +278 -0
- package/dist/cjs/decorators/fetch.js.map +7 -0
- package/dist/cjs/decorators/index.js +8 -2
- package/dist/cjs/decorators/index.js.map +2 -2
- package/dist/cjs/decorators/intersectionObserver.js +76 -65
- package/dist/cjs/decorators/intersectionObserver.js.map +2 -2
- package/dist/cjs/decorators/lifecycles.js +11 -11
- package/dist/cjs/decorators/lifecycles.js.map +2 -2
- package/dist/cjs/decorators/mutationObserver.js +97 -90
- package/dist/cjs/decorators/mutationObserver.js.map +3 -3
- package/dist/cjs/decorators/parameter.js +156 -0
- package/dist/cjs/decorators/parameter.js.map +7 -0
- package/dist/cjs/decorators/publishSwcAppMessage.js +2 -2
- package/dist/cjs/decorators/publishSwcAppMessage.js.map +2 -2
- package/dist/cjs/decorators/query.js +11 -5
- package/dist/cjs/decorators/query.js.map +2 -2
- package/dist/cjs/decorators/requestAnimationFrame.js +115 -0
- package/dist/cjs/decorators/requestAnimationFrame.js.map +7 -0
- package/dist/cjs/decorators/resizeObserver.js +84 -69
- package/dist/cjs/decorators/resizeObserver.js.map +3 -3
- package/dist/cjs/decorators/setInterval.js +65 -22
- package/dist/cjs/decorators/setInterval.js.map +2 -2
- package/dist/cjs/decorators/setTimeout.js +68 -22
- package/dist/cjs/decorators/setTimeout.js.map +2 -2
- package/dist/cjs/decorators/state.js +13 -10
- package/dist/cjs/decorators/state.js.map +2 -2
- package/dist/cjs/decorators/{subscribeSwcAppMessageWhileConnected.js → subscribeSwcAppMessage.js} +20 -21
- package/dist/cjs/decorators/subscribeSwcAppMessage.js.map +7 -0
- package/dist/cjs/decorators/{subscribeSwcAppRouteChangeWhileConnected.js → subscribeSwcAppRouteChange.js} +23 -19
- package/dist/cjs/decorators/subscribeSwcAppRouteChange.js.map +7 -0
- package/dist/cjs/decorators/swcAppRoute.js +149 -0
- package/dist/cjs/decorators/swcAppRoute.js.map +7 -0
- package/dist/cjs/elements/SwcApp.js +70 -0
- package/dist/cjs/elements/SwcApp.js.map +2 -2
- package/dist/cjs/elements/SwcAppMixin.js +256 -67
- package/dist/cjs/elements/SwcAppMixin.js.map +3 -3
- package/dist/cjs/types/index.js +5 -1
- package/dist/cjs/types/index.js.map +2 -2
- package/dist/cjs/types/window.d.js.map +1 -1
- package/dist/cjs/utils/Utils.js +36 -15
- package/dist/cjs/utils/Utils.js.map +2 -2
- package/dist/esm/SwcAppEngine.js.map +2 -2
- package/dist/esm/decorators/addEventListener.js +1925 -22
- package/dist/esm/decorators/addEventListener.js.map +2 -2
- package/dist/esm/decorators/applyAttribute.js +41 -47
- package/dist/esm/decorators/applyAttribute.js.map +2 -2
- package/dist/esm/decorators/applyClass.js +14 -11
- package/dist/esm/decorators/applyClass.js.map +2 -2
- package/dist/esm/decorators/applyNode.js +20 -22
- package/dist/esm/decorators/applyNode.js.map +2 -2
- package/dist/esm/decorators/applyProperty.js +24 -48
- package/dist/esm/decorators/applyProperty.js.map +2 -2
- package/dist/esm/decorators/applySlot.js +9 -8
- package/dist/esm/decorators/applySlot.js.map +2 -2
- package/dist/esm/decorators/applyStyle.js +14 -11
- package/dist/esm/decorators/applyStyle.js.map +2 -2
- package/dist/esm/decorators/around.js +105 -0
- package/dist/esm/decorators/around.js.map +7 -0
- package/dist/esm/decorators/changedAttribute.js +61 -24
- package/dist/esm/decorators/changedAttribute.js.map +2 -2
- package/dist/esm/decorators/elementDefine.js +238 -194
- package/dist/esm/decorators/elementDefine.js.map +3 -3
- package/dist/esm/decorators/emitCustomEvent.js +15 -13
- package/dist/esm/decorators/emitCustomEvent.js.map +2 -2
- package/dist/esm/decorators/eventMedia.js +94 -0
- package/dist/esm/decorators/eventMedia.js.map +7 -0
- package/dist/esm/decorators/fetch.js +259 -0
- package/dist/esm/decorators/fetch.js.map +7 -0
- package/dist/esm/decorators/index.js +8 -2
- package/dist/esm/decorators/index.js.map +2 -2
- package/dist/esm/decorators/intersectionObserver.js +76 -65
- package/dist/esm/decorators/intersectionObserver.js.map +2 -2
- package/dist/esm/decorators/lifecycles.js +11 -11
- package/dist/esm/decorators/lifecycles.js.map +2 -2
- package/dist/esm/decorators/mutationObserver.js +97 -90
- package/dist/esm/decorators/mutationObserver.js.map +3 -3
- package/dist/esm/decorators/parameter.js +137 -0
- package/dist/esm/decorators/parameter.js.map +7 -0
- package/dist/esm/decorators/publishSwcAppMessage.js +2 -2
- package/dist/esm/decorators/publishSwcAppMessage.js.map +2 -2
- package/dist/esm/decorators/query.js +11 -5
- package/dist/esm/decorators/query.js.map +2 -2
- package/dist/esm/decorators/requestAnimationFrame.js +96 -0
- package/dist/esm/decorators/requestAnimationFrame.js.map +7 -0
- package/dist/esm/decorators/resizeObserver.js +84 -69
- package/dist/esm/decorators/resizeObserver.js.map +2 -2
- package/dist/esm/decorators/setInterval.js +65 -23
- package/dist/esm/decorators/setInterval.js.map +2 -2
- package/dist/esm/decorators/setTimeout.js +68 -23
- package/dist/esm/decorators/setTimeout.js.map +2 -2
- package/dist/esm/decorators/state.js +13 -10
- package/dist/esm/decorators/state.js.map +2 -2
- package/dist/esm/decorators/subscribeSwcAppMessage.js +53 -0
- package/dist/esm/decorators/subscribeSwcAppMessage.js.map +7 -0
- package/dist/esm/decorators/{subscribeSwcAppRouteChangeWhileConnected.js → subscribeSwcAppRouteChange.js} +20 -16
- package/dist/esm/decorators/subscribeSwcAppRouteChange.js.map +7 -0
- package/dist/esm/decorators/swcAppRoute.js +130 -0
- package/dist/esm/decorators/swcAppRoute.js.map +7 -0
- package/dist/esm/elements/SwcApp.js +70 -0
- package/dist/esm/elements/SwcApp.js.map +2 -2
- package/dist/esm/elements/SwcAppMixin.js +258 -69
- package/dist/esm/elements/SwcAppMixin.js.map +3 -3
- package/dist/esm/types/index.js +5 -1
- package/dist/esm/types/index.js.map +2 -2
- package/dist/esm/utils/Utils.js +36 -15
- package/dist/esm/utils/Utils.js.map +2 -2
- package/dist/esm-bundle/dooboostore-simple-web-component.esm.js +4395 -1266
- package/dist/esm-bundle/dooboostore-simple-web-component.esm.js.map +4 -4
- package/dist/types/SwcAppEngine.d.ts +1 -0
- package/dist/types/SwcAppEngine.d.ts.map +1 -1
- package/dist/types/decorators/addEventListener.d.ts +936 -11
- package/dist/types/decorators/addEventListener.d.ts.map +1 -1
- package/dist/types/decorators/applyAttribute.d.ts +27 -37
- package/dist/types/decorators/applyAttribute.d.ts.map +1 -1
- package/dist/types/decorators/applyClass.d.ts +2 -2
- package/dist/types/decorators/applyClass.d.ts.map +1 -1
- package/dist/types/decorators/applyNode.d.ts +16 -16
- package/dist/types/decorators/applyNode.d.ts.map +1 -1
- package/dist/types/decorators/applyProperty.d.ts +28 -44
- package/dist/types/decorators/applyProperty.d.ts.map +1 -1
- package/dist/types/decorators/applySlot.d.ts.map +1 -1
- package/dist/types/decorators/applyStyle.d.ts +2 -2
- package/dist/types/decorators/applyStyle.d.ts.map +1 -1
- package/dist/types/decorators/around.d.ts +87 -0
- package/dist/types/decorators/around.d.ts.map +1 -0
- package/dist/types/decorators/changedAttribute.d.ts +22 -4
- 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 +0 -1
- package/dist/types/decorators/emitCustomEvent.d.ts.map +1 -1
- package/dist/types/decorators/eventMedia.d.ts +48 -0
- package/dist/types/decorators/eventMedia.d.ts.map +1 -0
- package/dist/types/decorators/fetch.d.ts +139 -0
- package/dist/types/decorators/fetch.d.ts.map +1 -0
- package/dist/types/decorators/index.d.ts +8 -2
- package/dist/types/decorators/index.d.ts.map +1 -1
- package/dist/types/decorators/intersectionObserver.d.ts +32 -10
- package/dist/types/decorators/intersectionObserver.d.ts.map +1 -1
- package/dist/types/decorators/lifecycles.d.ts +8 -7
- package/dist/types/decorators/lifecycles.d.ts.map +1 -1
- package/dist/types/decorators/mutationObserver.d.ts +34 -12
- package/dist/types/decorators/mutationObserver.d.ts.map +1 -1
- package/dist/types/decorators/parameter.d.ts +113 -0
- package/dist/types/decorators/parameter.d.ts.map +1 -0
- package/dist/types/decorators/publishSwcAppMessage.d.ts +0 -1
- package/dist/types/decorators/publishSwcAppMessage.d.ts.map +1 -1
- package/dist/types/decorators/query.d.ts +7 -7
- package/dist/types/decorators/query.d.ts.map +1 -1
- package/dist/types/decorators/requestAnimationFrame.d.ts +47 -0
- package/dist/types/decorators/requestAnimationFrame.d.ts.map +1 -0
- package/dist/types/decorators/resizeObserver.d.ts +34 -12
- package/dist/types/decorators/resizeObserver.d.ts.map +1 -1
- package/dist/types/decorators/setInterval.d.ts +27 -5
- package/dist/types/decorators/setInterval.d.ts.map +1 -1
- package/dist/types/decorators/setTimeout.d.ts +27 -5
- package/dist/types/decorators/setTimeout.d.ts.map +1 -1
- package/dist/types/decorators/state.d.ts.map +1 -1
- package/dist/types/decorators/subscribeSwcAppMessage.d.ts +44 -0
- package/dist/types/decorators/subscribeSwcAppMessage.d.ts.map +1 -0
- package/dist/types/decorators/subscribeSwcAppRouteChange.d.ts +60 -0
- package/dist/types/decorators/subscribeSwcAppRouteChange.d.ts.map +1 -0
- package/dist/types/decorators/swcAppRoute.d.ts +94 -0
- package/dist/types/decorators/swcAppRoute.d.ts.map +1 -0
- package/dist/types/elements/SwcApp.d.ts.map +1 -1
- package/dist/types/elements/SwcAppMixin.d.ts +423 -388
- package/dist/types/elements/SwcAppMixin.d.ts.map +1 -1
- package/dist/types/types/index.d.ts +43 -4
- package/dist/types/types/index.d.ts.map +1 -1
- package/dist/types/utils/Utils.d.ts +15 -5
- package/dist/types/utils/Utils.d.ts.map +1 -1
- package/dist/umd-bundle/dooboostore-simple-web-component.umd.js +4395 -1266
- package/dist/umd-bundle/dooboostore-simple-web-component.umd.js.map +4 -4
- package/package.json +8 -6
- package/src/SwcAppEngine.ts +1 -0
- package/src/decorators/addEventListener.ts +1086 -28
- package/src/decorators/applyAttribute.ts +82 -134
- package/src/decorators/applyClass.ts +14 -10
- package/src/decorators/applyNode.ts +39 -37
- package/src/decorators/applyProperty.ts +72 -100
- package/src/decorators/applySlot.ts +9 -8
- package/src/decorators/applyStyle.ts +14 -10
- package/src/decorators/around.ts +196 -0
- package/src/decorators/changedAttribute.ts +65 -26
- package/src/decorators/elementDefine.ts +298 -220
- package/src/decorators/emitCustomEvent.ts +17 -13
- package/src/decorators/eventMedia.ts +119 -0
- package/src/decorators/fetch.ts +454 -0
- package/src/decorators/index.ts +8 -2
- package/src/decorators/intersectionObserver.ts +108 -78
- package/src/decorators/lifecycles.ts +24 -22
- package/src/decorators/mutationObserver.ts +140 -104
- package/src/decorators/parameter.ts +212 -0
- package/src/decorators/publishSwcAppMessage.ts +3 -4
- package/src/decorators/query.ts +22 -14
- package/src/decorators/requestAnimationFrame.ts +149 -0
- package/src/decorators/resizeObserver.ts +119 -82
- package/src/decorators/setInterval.ts +90 -23
- package/src/decorators/setTimeout.ts +93 -23
- package/src/decorators/state.ts +19 -13
- package/src/decorators/subscribeSwcAppMessage.ts +106 -0
- package/src/decorators/subscribeSwcAppRouteChange.ts +131 -0
- package/src/decorators/swcAppRoute.ts +231 -0
- package/src/elements/SwcApp.ts +40 -10
- package/src/elements/SwcAppMixin.ts +329 -85
- package/src/types/index.ts +38 -5
- package/src/types/window.d.ts +2 -18
- package/src/utils/Utils.ts +50 -18
- package/dist/cjs/decorators/subscribeSwcAppMessageWhileConnected.js.map +0 -7
- package/dist/cjs/decorators/subscribeSwcAppRouteChangeWhileConnected.js.map +0 -7
- package/dist/cjs/examples/RxJSOperatorsExample.js +0 -285
- package/dist/cjs/examples/RxJSOperatorsExample.js.map +0 -7
- package/dist/esm/decorators/subscribeSwcAppMessageWhileConnected.js +0 -54
- package/dist/esm/decorators/subscribeSwcAppMessageWhileConnected.js.map +0 -7
- package/dist/esm/decorators/subscribeSwcAppRouteChangeWhileConnected.js.map +0 -7
- package/dist/esm/examples/RxJSOperatorsExample.js +0 -266
- package/dist/esm/examples/RxJSOperatorsExample.js.map +0 -7
- package/dist/types/decorators/subscribeSwcAppMessageWhileConnected.d.ts +0 -23
- package/dist/types/decorators/subscribeSwcAppMessageWhileConnected.d.ts.map +0 -1
- package/dist/types/decorators/subscribeSwcAppRouteChangeWhileConnected.d.ts +0 -31
- package/dist/types/decorators/subscribeSwcAppRouteChangeWhileConnected.d.ts.map +0 -1
- package/dist/types/examples/RxJSOperatorsExample.d.ts +0 -94
- package/dist/types/examples/RxJSOperatorsExample.d.ts.map +0 -1
- package/src/decorators/subscribeSwcAppMessageWhileConnected.ts +0 -91
- package/src/decorators/subscribeSwcAppRouteChangeWhileConnected.ts +0 -107
- package/src/examples/RxJSOperatorsExample.ts +0 -279
|
@@ -1,11 +1,48 @@
|
|
|
1
1
|
var __defProp = Object.defineProperty;
|
|
2
2
|
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
3
3
|
var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
4
|
-
import { findAllLifecycleMetadata,
|
|
4
|
+
import { findAllLifecycleMetadata, getSubscribeSwcAppMessageMetadata, getSubscribeSwcAppRouteChangeMetadata, ON_CONNECTED_SWC_APP_METADATA_KEY, SUBSCRIBE_SWC_APP_ROUTE_CHANGE_METADATA_KEY, buildSwcParameterArgs } from "../decorators/index.js";
|
|
5
5
|
import { SwcAppEngine } from "../SwcAppEngine.js";
|
|
6
|
-
import { debounceTimeIntervalLock, FunctionUtils } from "@dooboostore/core";
|
|
6
|
+
import { debounceTimeIntervalLock, FunctionUtils, Subject, Observable } from "@dooboostore/core";
|
|
7
7
|
import { ValidUtils } from "@dooboostore/core-web";
|
|
8
8
|
import { SwcUtils } from "../utils/Utils.js";
|
|
9
|
+
const routeStateOf = (instance) => instance.__swc_routeState ?? (instance.__swc_routeState = /* @__PURE__ */ new Map());
|
|
10
|
+
const routeParamValues = (sp, pathDataAll) => {
|
|
11
|
+
const queryAll = Object.fromEntries([...new Set(sp.keys())].map((k) => [k, sp.getAll(k)]));
|
|
12
|
+
const pick = (all, at) => Object.fromEntries(Object.entries(all).map(([k, v]) => [k, at === "first" ? v[0] : v[v.length - 1]]));
|
|
13
|
+
const lastOf = (v) => v && v.length ? v[v.length - 1] : void 0;
|
|
14
|
+
const firstQuery = (k) => sp.get(k);
|
|
15
|
+
const firstPath = (k) => pathDataAll[k]?.[0];
|
|
16
|
+
return {
|
|
17
|
+
swcAppRouteQueryParam: firstQuery,
|
|
18
|
+
swcAppRouteFirstQueryParam: firstQuery,
|
|
19
|
+
swcAppRouteLastQueryParam: (k) => lastOf(sp.getAll(k)) ?? null,
|
|
20
|
+
swcAppRouteQueryParams: (k) => sp.getAll(k),
|
|
21
|
+
swcAppRouteQueryParamObject: pick(queryAll, "first"),
|
|
22
|
+
swcAppRouteFirstQueryParamObject: pick(queryAll, "first"),
|
|
23
|
+
swcAppRouteLastQueryParamObject: pick(queryAll, "last"),
|
|
24
|
+
swcAppRouteQueryParamsObject: queryAll,
|
|
25
|
+
swcAppRouteURLSearchParams: sp,
|
|
26
|
+
swcAppRoutePathVariable: firstPath,
|
|
27
|
+
swcAppRouteFirstPathVariable: firstPath,
|
|
28
|
+
swcAppRouteLastPathVariable: (k) => lastOf(pathDataAll[k]),
|
|
29
|
+
swcAppRoutePathVariables: (k) => pathDataAll[k] ?? [],
|
|
30
|
+
swcAppRoutePathVariableObject: pick(pathDataAll, "first"),
|
|
31
|
+
swcAppRouteFirstPathVariableObject: pick(pathDataAll, "first"),
|
|
32
|
+
swcAppRouteLastPathVariableObject: pick(pathDataAll, "last"),
|
|
33
|
+
swcAppRoutePathVariablesObject: pathDataAll
|
|
34
|
+
};
|
|
35
|
+
};
|
|
36
|
+
const matchRoute = (pathOption, instance, re) => {
|
|
37
|
+
let pattern = typeof pathOption === "function" ? pathOption(instance) : pathOption;
|
|
38
|
+
if (!pattern) return { pathData: {}, pathDataAll: {} };
|
|
39
|
+
const path = re.path || "/";
|
|
40
|
+
for (const p of Array.isArray(pattern) ? pattern : [pattern]) {
|
|
41
|
+
const pathData = SwcUtils.parsePathPattern(p, path);
|
|
42
|
+
if (pathData !== null) return { pathData, pathDataAll: SwcUtils.parsePathPatternAll(p, path) ?? {} };
|
|
43
|
+
}
|
|
44
|
+
return null;
|
|
45
|
+
};
|
|
9
46
|
const isSSR = (i) => {
|
|
10
47
|
return i.hasAttribute("swc-use-ssr");
|
|
11
48
|
};
|
|
@@ -16,13 +53,18 @@ const removeSSRAttribute = (i) => {
|
|
|
16
53
|
i.removeAttribute("swc-use-ssr");
|
|
17
54
|
};
|
|
18
55
|
function SwcAppMixin(Base) {
|
|
19
|
-
|
|
20
|
-
constructor(
|
|
21
|
-
super(...
|
|
56
|
+
class SwcAppMixinClass extends Base {
|
|
57
|
+
constructor() {
|
|
58
|
+
super(...arguments);
|
|
22
59
|
__publicField(this, "__swc_engine", new SwcAppEngine(this));
|
|
60
|
+
__publicField(this, "_swcId");
|
|
23
61
|
__publicField(this, "_swc_connected_instance", /* @__PURE__ */ new Set());
|
|
24
62
|
__publicField(this, "_routerSubscription");
|
|
25
63
|
__publicField(this, "_lastRouterEvent");
|
|
64
|
+
// replay 옵션으로 발행된 타입별 마지막 메시지 1개 보관
|
|
65
|
+
__publicField(this, "_replayedMessages", /* @__PURE__ */ new Map());
|
|
66
|
+
// 코드 구독(observeMessage)용 live 스트림. 데코레이터 구독과 같은 publishMessage에서 흘러나옴.
|
|
67
|
+
__publicField(this, "_messageSubject", new Subject());
|
|
26
68
|
__publicField(this, "_routeChangeInvocations", 0);
|
|
27
69
|
__publicField(this, "_connectedInvocations", 0);
|
|
28
70
|
__publicField(this, "_childrenRouteChangedInterval");
|
|
@@ -33,7 +75,8 @@ function SwcAppMixin(Base) {
|
|
|
33
75
|
* 부모가 자식들을 강제로 등록해주는 형태로 처리
|
|
34
76
|
*/
|
|
35
77
|
__publicField(this, "_connected_safari_and_standby", []);
|
|
36
|
-
|
|
78
|
+
// connect() 전에 붙은 자식들이 기다리는 곳 — connect() 가 엔진을 띄운 뒤 깨운다
|
|
79
|
+
__publicField(this, "_appReadyWaiters", []);
|
|
37
80
|
}
|
|
38
81
|
get simpleApplication() {
|
|
39
82
|
return this.__swc_engine.simpleApplication;
|
|
@@ -44,7 +87,8 @@ function SwcAppMixin(Base) {
|
|
|
44
87
|
get router() {
|
|
45
88
|
return this.__swc_engine?.router;
|
|
46
89
|
}
|
|
47
|
-
|
|
90
|
+
// phase: 'live'(기본, 전체 방송) | 'connected' | 'connectedDone' (replay, 해당 trigger만)
|
|
91
|
+
async _invokeRouteChangeSubscribers(instance, re, phase = "live") {
|
|
48
92
|
if (instance.isConnected === false) return;
|
|
49
93
|
this._routeChangeInvocations++;
|
|
50
94
|
if (this._childrenRouteChangedInterval) {
|
|
@@ -61,48 +105,51 @@ function SwcAppMixin(Base) {
|
|
|
61
105
|
intervalConfig
|
|
62
106
|
);
|
|
63
107
|
try {
|
|
64
|
-
const routeChangeSubscribers =
|
|
108
|
+
const routeChangeSubscribers = getSubscribeSwcAppRouteChangeMetadata(instance);
|
|
65
109
|
if (routeChangeSubscribers.length > 0) {
|
|
66
|
-
|
|
110
|
+
const state = routeStateOf(instance);
|
|
111
|
+
let stopped = false;
|
|
67
112
|
for (const metadata of routeChangeSubscribers) {
|
|
113
|
+
if (phase !== "live" && (metadata.options?.trigger ?? "connected") !== phase) continue;
|
|
114
|
+
const on = metadata.options?.on ?? "match";
|
|
115
|
+
if (on === "beforeLeave") continue;
|
|
68
116
|
const methodName = metadata.propertyKey;
|
|
69
|
-
let pathPattern = metadata.options?.path;
|
|
70
|
-
const filter = metadata.options?.filter;
|
|
71
117
|
const extractValue = (v) => {
|
|
72
|
-
const keyToUse = metadata.options?.valueKey ??
|
|
118
|
+
const keyToUse = metadata.options?.valueKey ?? SUBSCRIBE_SWC_APP_ROUTE_CHANGE_METADATA_KEY;
|
|
73
119
|
if (v && typeof v === "object" && keyToUse in v) {
|
|
74
120
|
return v[keyToUse];
|
|
75
121
|
}
|
|
76
122
|
return v;
|
|
77
123
|
};
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
if (!
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
124
|
+
const match = matchRoute(metadata.options?.path, instance, re);
|
|
125
|
+
const prev = state.get(methodName);
|
|
126
|
+
const signature = match ? JSON.stringify([re.path ?? "", re.search ?? ""]) : "";
|
|
127
|
+
state.set(methodName, match ? { matched: true, signature, pathData: match.pathData, pathDataAll: match.pathDataAll } : { matched: false, signature: "" });
|
|
128
|
+
const shouldRun = on === "match" ? !!match : on === "enter" ? !!match && !prev?.matched : on === "update" ? !!match && !!prev?.matched && prev.signature !== signature : on === "leave" ? !match && !!prev?.matched : false;
|
|
129
|
+
if (stopped || !shouldRun || !instance[methodName]) continue;
|
|
130
|
+
const pathData = match ? match.pathData : prev?.pathData ?? {};
|
|
131
|
+
const pathDataAll = match ? match.pathDataAll : prev?.pathDataAll ?? {};
|
|
132
|
+
const filter = metadata.options?.filter;
|
|
133
|
+
const instanceHelperHostSet = SwcUtils.getHelperAndHostSet(instance, this.config.window);
|
|
134
|
+
const filterPassed = !filter || await filter(this.router, { helper: instanceHelperHostSet, currentThis: instance });
|
|
135
|
+
if (!filterPassed) continue;
|
|
136
|
+
const before = metadata.options?.before;
|
|
137
|
+
const finaly = metadata.options?.finally;
|
|
138
|
+
const beforeReturn = before ? await before(this.router, { helper: instanceHelperHostSet, currentThis: instance }) : void 0;
|
|
139
|
+
const routeEventValue = { ...re, pathData };
|
|
140
|
+
const args = this._buildRouteArgs(instance, methodName, routeEventValue, pathDataAll, beforeReturn);
|
|
141
|
+
let rawResult, error;
|
|
142
|
+
try {
|
|
143
|
+
rawResult = await instance[methodName](...args);
|
|
144
|
+
} catch (e) {
|
|
145
|
+
error = e;
|
|
146
|
+
} finally {
|
|
147
|
+
if (finaly) await finaly(this.router, { helper: instanceHelperHostSet, currentThis: instance }, { args, result: rawResult, error });
|
|
98
148
|
}
|
|
99
|
-
|
|
100
|
-
const
|
|
101
|
-
if (
|
|
102
|
-
|
|
103
|
-
if (result !== void 0 && result !== null) {
|
|
104
|
-
break;
|
|
105
|
-
}
|
|
149
|
+
if (error) throw error;
|
|
150
|
+
const result = extractValue(rawResult);
|
|
151
|
+
if (result !== void 0 && result !== null) {
|
|
152
|
+
stopped = true;
|
|
106
153
|
}
|
|
107
154
|
}
|
|
108
155
|
}
|
|
@@ -116,20 +163,75 @@ function SwcAppMixin(Base) {
|
|
|
116
163
|
this._routeChangeInvocations = Math.max(0, this._routeChangeInvocations - 1);
|
|
117
164
|
}
|
|
118
165
|
}
|
|
166
|
+
/** 라우트 핸들러 인자: @swcAppRouterEvent / host 계열 / @routeChangeBeforeReturn / 라우트 파라미터(query·path 변수) */
|
|
167
|
+
_buildRouteArgs(instance, methodName, routeEventValue, pathDataAll, beforeReturn) {
|
|
168
|
+
const instanceHelperHostSet = SwcUtils.getHelperAndHostSet(instance, this.config.window);
|
|
169
|
+
const sp = routeEventValue.searchParams ?? new URLSearchParams(routeEventValue.search ?? "");
|
|
170
|
+
return buildSwcParameterArgs(
|
|
171
|
+
instance,
|
|
172
|
+
methodName,
|
|
173
|
+
{
|
|
174
|
+
swcAppRouterEvent: routeEventValue,
|
|
175
|
+
hostSet: instanceHelperHostSet,
|
|
176
|
+
helperHostSet: instanceHelperHostSet,
|
|
177
|
+
helperSet: SwcUtils.getHelperSet(this.config.window),
|
|
178
|
+
routeChangeBeforeReturn: beforeReturn,
|
|
179
|
+
...routeParamValues(sp, pathDataAll)
|
|
180
|
+
},
|
|
181
|
+
[routeEventValue]
|
|
182
|
+
);
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* on: 'beforeLeave' 구독을 라우터 가드로 등록. 지금 경로는 맞고 다음 경로는 안 맞을 때 핸들러를 부르고,
|
|
186
|
+
* false 를 리턴하면 이동을 취소한다. 요소가 떨어지면 _disconnected 에서 해제.
|
|
187
|
+
*/
|
|
188
|
+
_registerLeaveGuards(instance) {
|
|
189
|
+
if (!this.router?.addLeaveGuard) return;
|
|
190
|
+
instance.__swc_leaveGuardOffs?.forEach((off) => off());
|
|
191
|
+
instance.__swc_leaveGuardOffs = getSubscribeSwcAppRouteChangeMetadata(instance).filter((m) => m.options?.on === "beforeLeave").map(
|
|
192
|
+
(metadata) => this.router.addLeaveGuard(async (to, from) => {
|
|
193
|
+
if (instance.isConnected === false || !instance[metadata.propertyKey]) return true;
|
|
194
|
+
const fromMatch = matchRoute(metadata.options?.path, instance, from);
|
|
195
|
+
if (!fromMatch || matchRoute(metadata.options?.path, instance, to)) return true;
|
|
196
|
+
const filter = metadata.options?.filter;
|
|
197
|
+
const helper = SwcUtils.getHelperAndHostSet(instance, this.config.window);
|
|
198
|
+
if (filter && !await filter(this.router, { helper, currentThis: instance })) return true;
|
|
199
|
+
const beforeReturn = metadata.options?.before ? await metadata.options.before(this.router, { helper, currentThis: instance }) : void 0;
|
|
200
|
+
const routeEventValue = { ...from, pathData: fromMatch.pathData, to };
|
|
201
|
+
const args = this._buildRouteArgs(instance, metadata.propertyKey, routeEventValue, fromMatch.pathDataAll, beforeReturn);
|
|
202
|
+
let result, error;
|
|
203
|
+
try {
|
|
204
|
+
result = await instance[metadata.propertyKey](...args);
|
|
205
|
+
} catch (e) {
|
|
206
|
+
error = e;
|
|
207
|
+
} finally {
|
|
208
|
+
if (metadata.options?.finally) await metadata.options.finally(this.router, { helper, currentThis: instance }, { args, result, error });
|
|
209
|
+
}
|
|
210
|
+
if (error) throw error;
|
|
211
|
+
return result !== false;
|
|
212
|
+
})
|
|
213
|
+
);
|
|
214
|
+
}
|
|
119
215
|
async _connected(instance, option) {
|
|
120
216
|
if (instance) {
|
|
121
217
|
if (!this.simpleApplication && !this.config) {
|
|
122
|
-
|
|
123
|
-
|
|
218
|
+
if (instance === this) {
|
|
219
|
+
this._connected_safari_and_standby.push(instance);
|
|
220
|
+
return;
|
|
221
|
+
}
|
|
222
|
+
await new Promise((resolve) => this._appReadyWaiters.push(resolve));
|
|
124
223
|
}
|
|
125
224
|
this.config.onConnectedChildBefore?.(instance);
|
|
126
225
|
if (!option?.noIncrements) {
|
|
127
226
|
this._connectedInvocations++;
|
|
128
227
|
}
|
|
129
228
|
this._swc_connected_instance.add(instance);
|
|
229
|
+
const gen = instance.__swc_connectGen;
|
|
230
|
+
const stale = () => instance.__swc_connectGen !== gen;
|
|
130
231
|
const connectedSwcAppCallBacks = findAllLifecycleMetadata(instance, ON_CONNECTED_SWC_APP_METADATA_KEY);
|
|
131
232
|
for (let connectedSwcAppCallBack of connectedSwcAppCallBacks) {
|
|
132
233
|
await instance?._invokeLifecycleMethod?.(connectedSwcAppCallBack.propertyKey);
|
|
234
|
+
if (stale()) return this;
|
|
133
235
|
}
|
|
134
236
|
if (this._childrenConnectedDoneInterval) {
|
|
135
237
|
this.config.window.clearInterval(this._childrenConnectedDoneInterval);
|
|
@@ -147,14 +249,16 @@ function SwcAppMixin(Base) {
|
|
|
147
249
|
if (this.simpleApplication) {
|
|
148
250
|
try {
|
|
149
251
|
if (this.router && this._lastRouterEvent) {
|
|
150
|
-
await this._invokeRouteChangeSubscribers(instance, this._lastRouterEvent);
|
|
252
|
+
await this._invokeRouteChangeSubscribers(instance, this._lastRouterEvent, "connected");
|
|
151
253
|
}
|
|
152
254
|
} catch (e) {
|
|
153
255
|
throw e;
|
|
154
256
|
}
|
|
155
257
|
}
|
|
258
|
+
if (stale()) return this;
|
|
259
|
+
if (this.simpleApplication) this._registerLeaveGuards(instance);
|
|
260
|
+
this._replayMessagesTo(instance);
|
|
156
261
|
const isBrowser = ValidUtils.isBrowser();
|
|
157
|
-
console.log("------>", isBrowser, this.config?.ssr);
|
|
158
262
|
if (!isBrowser && this.config?.ssr) {
|
|
159
263
|
setSSRAttribute(instance);
|
|
160
264
|
} else {
|
|
@@ -164,8 +268,19 @@ function SwcAppMixin(Base) {
|
|
|
164
268
|
this.config.onConnectedChildAfter?.(instance);
|
|
165
269
|
return this;
|
|
166
270
|
}
|
|
167
|
-
async _connectedDone(instance) {
|
|
271
|
+
async _connectedDone(instance, option) {
|
|
168
272
|
try {
|
|
273
|
+
if (option?.aborted) return;
|
|
274
|
+
this._replayMessagesTo(instance, "connectedDone");
|
|
275
|
+
if (this.simpleApplication) {
|
|
276
|
+
try {
|
|
277
|
+
if (this.router && this._lastRouterEvent) {
|
|
278
|
+
await this._invokeRouteChangeSubscribers(instance, this._lastRouterEvent, "connectedDone");
|
|
279
|
+
}
|
|
280
|
+
} catch (e) {
|
|
281
|
+
throw e;
|
|
282
|
+
}
|
|
283
|
+
}
|
|
169
284
|
} finally {
|
|
170
285
|
this._connectedInvocations = Math.max(0, this._connectedInvocations - 1);
|
|
171
286
|
}
|
|
@@ -173,6 +288,9 @@ function SwcAppMixin(Base) {
|
|
|
173
288
|
_disconnected(instance) {
|
|
174
289
|
if (instance) {
|
|
175
290
|
this._swc_connected_instance.delete(instance);
|
|
291
|
+
instance.__swc_leaveGuardOffs?.forEach((off) => off());
|
|
292
|
+
instance.__swc_leaveGuardOffs = void 0;
|
|
293
|
+
instance.__swc_routeState = void 0;
|
|
176
294
|
this.config?.onDisconnectedChildAfter?.(instance);
|
|
177
295
|
}
|
|
178
296
|
}
|
|
@@ -183,28 +301,24 @@ function SwcAppMixin(Base) {
|
|
|
183
301
|
await Promise.allSettled(ps);
|
|
184
302
|
}
|
|
185
303
|
async connect(config) {
|
|
186
|
-
console.log("[SWC-MIXIN] connect");
|
|
187
304
|
const swcConfig = {
|
|
188
305
|
routeType: "element",
|
|
189
306
|
window: config?.window,
|
|
190
307
|
...config
|
|
191
308
|
};
|
|
192
309
|
await this.__swc_engine.connect(swcConfig);
|
|
310
|
+
this._appReadyWaiters.splice(0).forEach((resolve) => resolve());
|
|
193
311
|
this._connected_safari_and_standby.forEach((instance) => {
|
|
194
312
|
this._connected(instance, { noIncrements: true });
|
|
195
313
|
});
|
|
196
314
|
if (!this._routerSubscription && this.router) {
|
|
197
|
-
const config2 = this.__swc_engine.config;
|
|
198
315
|
this._routerSubscription = this.router.observable.subscribe(async (route) => {
|
|
199
|
-
console.log("[SWC-MIXIN] Router event received:", route.triggerPoint);
|
|
200
316
|
if (route.triggerPoint === "end") {
|
|
201
317
|
await this._handleRouteChange(route);
|
|
202
318
|
}
|
|
203
319
|
});
|
|
204
|
-
if (config2?.path) {
|
|
205
|
-
console.log("[DEBUG] Navigating to initial path:", config2.path);
|
|
206
|
-
}
|
|
207
320
|
}
|
|
321
|
+
await this._invokeHook("onSwcAppConnected");
|
|
208
322
|
}
|
|
209
323
|
connectedCallback() {
|
|
210
324
|
super.connectedCallback?.();
|
|
@@ -215,7 +329,7 @@ function SwcAppMixin(Base) {
|
|
|
215
329
|
const userConfig = FunctionUtils.executeReturn({
|
|
216
330
|
script: configStr,
|
|
217
331
|
context: this,
|
|
218
|
-
args: SwcUtils.getHelperAndHostSet(
|
|
332
|
+
args: SwcUtils.getHelperAndHostSet(this, win)
|
|
219
333
|
});
|
|
220
334
|
if (userConfig instanceof Promise) {
|
|
221
335
|
userConfig.then((resolvedConfig) => {
|
|
@@ -233,6 +347,7 @@ function SwcAppMixin(Base) {
|
|
|
233
347
|
this._connected(this);
|
|
234
348
|
this.__swc_engine?.config?.onConnected?.(this);
|
|
235
349
|
this._connectedDone(this);
|
|
350
|
+
void this._invokeHook("onConnected").catch((e) => console.error("[SWC-MIXIN] onConnected error:", e));
|
|
236
351
|
}
|
|
237
352
|
disconnectedCallback() {
|
|
238
353
|
super.disconnectedCallback?.();
|
|
@@ -242,6 +357,7 @@ function SwcAppMixin(Base) {
|
|
|
242
357
|
this.__swc_engine.disconnect();
|
|
243
358
|
this.__swc_engine?.config?.onDisconnected?.(this);
|
|
244
359
|
this._disconnected(this);
|
|
360
|
+
void this._invokeHook("onDisconnected").catch((e) => console.error("[SWC-MIXIN] onDisconnected error:", e));
|
|
245
361
|
}
|
|
246
362
|
async routing(path) {
|
|
247
363
|
await this.router?.go(path);
|
|
@@ -256,34 +372,107 @@ function SwcAppMixin(Base) {
|
|
|
256
372
|
this.router?.reload();
|
|
257
373
|
}
|
|
258
374
|
publishMessage(message) {
|
|
375
|
+
if (message.type) {
|
|
376
|
+
const buf = [...this._replayedMessages.get(message.type) ?? [], message];
|
|
377
|
+
this._replayedMessages.set(message.type, buf.slice(-Math.max(1, this.config?.messageReplayBufferSize ?? 10)));
|
|
378
|
+
}
|
|
259
379
|
this._swc_connected_instance.forEach((instance) => {
|
|
260
380
|
this._invokeMessageSubscribers(instance, message);
|
|
261
381
|
});
|
|
382
|
+
this._messageSubject.next(message);
|
|
383
|
+
}
|
|
384
|
+
connectedElements() {
|
|
385
|
+
return Array.from(this._swc_connected_instance);
|
|
386
|
+
}
|
|
387
|
+
observeMessage(typeOrOptions, options) {
|
|
388
|
+
const { type, subject } = typeof typeOrOptions === "string" ? { ...options, type: typeOrOptions } : { ...typeOrOptions };
|
|
389
|
+
return new Observable((subscriber) => {
|
|
390
|
+
if (type && (subject === "behavior" || subject === "replay")) {
|
|
391
|
+
const buf = this._replayedMessages.get(type) ?? [];
|
|
392
|
+
(subject === "behavior" ? buf.slice(-1) : buf).forEach((m) => subscriber.next(m));
|
|
393
|
+
}
|
|
394
|
+
const sub = this._messageSubject.subscribe((m) => {
|
|
395
|
+
if (!type || m.type === type) subscriber.next(m);
|
|
396
|
+
});
|
|
397
|
+
return () => sub.unsubscribe();
|
|
398
|
+
});
|
|
399
|
+
}
|
|
400
|
+
// hook 실행 + @inject 파라미터 DI 해결 (host 본체 포함.
|
|
401
|
+
// _invokeLifecycleMethod는 host/hostSet 상황 분기가 달라 호스트 본체에서 주입이 안 됨)
|
|
402
|
+
async _invokeHook(methodName) {
|
|
403
|
+
const fn = this[methodName];
|
|
404
|
+
if (typeof fn !== "function") return;
|
|
405
|
+
const manager = this.simpleApplication?.simstanceManager;
|
|
406
|
+
if (!manager) {
|
|
407
|
+
return fn.call(this);
|
|
408
|
+
}
|
|
409
|
+
return manager.executeBindParameterSimPromise({ target: this, targetKey: methodName });
|
|
410
|
+
}
|
|
411
|
+
// 신규 연결 인스턴스 1곳에만 버퍼 재생. 구독자별 subject 선언 기준:
|
|
412
|
+
// - 'behavior': 마지막 1개 / 'replay': 버퍼 전체 시간순 / 미지정·'subject': live만 (재생 안 함)
|
|
413
|
+
// - trigger 'connectedDone'인 구독은 _connectedDone(render 완료 후)에서 재생. phase로 구분.
|
|
414
|
+
// 이미 연결된 인스턴스는 publishMessage 때 live로 받으므로 여기 오지 않음.
|
|
415
|
+
_replayMessagesTo(instance, phase = "connected") {
|
|
416
|
+
const subs = getSubscribeSwcAppMessageMetadata(instance);
|
|
417
|
+
if (!subs || !Array.isArray(subs)) return;
|
|
418
|
+
const seen = /* @__PURE__ */ new Set();
|
|
419
|
+
subs.forEach((meta) => {
|
|
420
|
+
const type = meta.messageType;
|
|
421
|
+
if (!type || seen.has(type)) return;
|
|
422
|
+
seen.add(type);
|
|
423
|
+
if ((meta.trigger ?? "connected") !== phase) return;
|
|
424
|
+
const buf = this._replayedMessages.get(type) ?? [];
|
|
425
|
+
if (meta.subject === "behavior") {
|
|
426
|
+
const last = buf[buf.length - 1];
|
|
427
|
+
if (last) this._invokeMessageSubscribers(instance, last);
|
|
428
|
+
} else if (meta.subject === "replay") {
|
|
429
|
+
buf.forEach((msg) => this._invokeMessageSubscribers(instance, msg));
|
|
430
|
+
}
|
|
431
|
+
});
|
|
262
432
|
}
|
|
263
433
|
_invokeMessageSubscribers(instance, message) {
|
|
264
|
-
const messageSubscribers =
|
|
434
|
+
const messageSubscribers = getSubscribeSwcAppMessageMetadata(instance);
|
|
265
435
|
if (messageSubscribers && Array.isArray(messageSubscribers)) {
|
|
266
436
|
messageSubscribers.forEach((metadata) => {
|
|
267
|
-
|
|
268
|
-
const messageType = metadata.messageType;
|
|
269
|
-
const filter = metadata.filter;
|
|
270
|
-
let typeMatched = false;
|
|
271
|
-
if (!messageType) {
|
|
272
|
-
typeMatched = true;
|
|
273
|
-
} else if (message.type === messageType) {
|
|
274
|
-
typeMatched = true;
|
|
275
|
-
}
|
|
276
|
-
let filterMatched = true;
|
|
277
|
-
if (filter && typeMatched) {
|
|
278
|
-
filterMatched = filter(message, instance);
|
|
279
|
-
}
|
|
280
|
-
if (typeMatched && filterMatched && typeof instance[methodName] === "function") {
|
|
281
|
-
instance[methodName](message);
|
|
282
|
-
}
|
|
437
|
+
void this._runMessageSubscriber(instance, message, metadata).catch((e) => console.error("[SWC] subscribeSwcAppMessage error:", e));
|
|
283
438
|
});
|
|
284
439
|
}
|
|
285
440
|
}
|
|
286
|
-
|
|
441
|
+
async _runMessageSubscriber(instance, message, metadata) {
|
|
442
|
+
const methodName = metadata.propertyKey;
|
|
443
|
+
const messageType = metadata.messageType;
|
|
444
|
+
const { filter, before, finally: finaly } = metadata;
|
|
445
|
+
const typeMatched = !messageType || message.type === messageType;
|
|
446
|
+
if (!typeMatched) return;
|
|
447
|
+
if (filter && !await filter(message, instance)) return;
|
|
448
|
+
if (typeof instance[methodName] !== "function") return;
|
|
449
|
+
const instanceHelperHostSet = SwcUtils.getHelperAndHostSet(instance, this.config.window);
|
|
450
|
+
const instanceHelperSet = SwcUtils.getHelperSet(this.config.window);
|
|
451
|
+
const beforeReturn = before ? await before(message, instance) : void 0;
|
|
452
|
+
const args = buildSwcParameterArgs(
|
|
453
|
+
instance,
|
|
454
|
+
methodName,
|
|
455
|
+
{
|
|
456
|
+
appMessage: message,
|
|
457
|
+
hostSet: instanceHelperHostSet,
|
|
458
|
+
helperHostSet: instanceHelperHostSet,
|
|
459
|
+
helperSet: instanceHelperSet,
|
|
460
|
+
appMessageBeforeReturn: beforeReturn
|
|
461
|
+
},
|
|
462
|
+
[message]
|
|
463
|
+
);
|
|
464
|
+
let result, error;
|
|
465
|
+
try {
|
|
466
|
+
result = await instance[methodName](...args);
|
|
467
|
+
} catch (e) {
|
|
468
|
+
error = e;
|
|
469
|
+
} finally {
|
|
470
|
+
if (finaly) await finaly(message, instance, { args, result, error });
|
|
471
|
+
}
|
|
472
|
+
if (error) throw error;
|
|
473
|
+
}
|
|
474
|
+
}
|
|
475
|
+
return SwcAppMixinClass;
|
|
287
476
|
}
|
|
288
477
|
export {
|
|
289
478
|
SwcAppMixin,
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/elements/SwcAppMixin.ts"],
|
|
4
|
-
"sourcesContent": ["import { SwcAppInterface, SwcAppMessage } from '../types';\nimport { APPLY_NODE_METADATA_KEY, findAllLifecycleMetadata, getSubscribeSwcAppMessageWhileConnectedMetadata, getSubscribeSwcAppRouteChangeWhileConnectedMetadata, ON_CONNECTED_SWC_APP_METADATA_KEY, SUBSCRIBE_SWC_APP_ROUTE_CHANGE_WHILE_CONNECTED_METADATA_KEY } from '../decorators';\nimport { SwcAppEngine, SwcAttributeConfigType, SwcConfigType } from '../SwcAppEngine';\nimport { debounceTimeIntervalLock, FunctionUtils, Subscription } from '@dooboostore/core';\nimport {RouterEventType, ValidUtils} from '@dooboostore/core-web';\nimport { SwcUtils } from '../utils/Utils';\n\nexport const isSSR = (i: HTMLElement) => {\n return i.hasAttribute('swc-use-ssr');\n};\nexport const setSSRAttribute = (i: HTMLElement) => {\n i.setAttribute('swc-use-ssr', (i as any)._swcId ?? '');\n};\nexport const removeSSRAttribute = (i: HTMLElement) => {\n i.removeAttribute('swc-use-ssr');\n};\n\n/**\n * SwcAppMixin: SwcApp \uAE30\uB2A5\uC744 \uBAA8\uB4E0 HTMLElement\uC5D0 \uCD94\uAC00\uD560 \uC218 \uC788\uB294 Mixin\n *\n * \uC0AC\uC6A9 \uC608:\n * @elementDefine('custom-app', { window: w })\n * class CustomApp extends SwcAppMixin(w.HTMLElement) implements SwcAppInterface {\n * // \uCD94\uAC00 \uAE30\uB2A5 \uAD6C\uD604\n * }\n */\nexport function SwcAppMixin<T extends { new (...args: any[]): HTMLElement }>(Base: T) {\n return class SwcAppMixinClass extends Base implements SwcAppInterface {\n __swc_engine = new SwcAppEngine(this as any);\n _swc_connected_instance = new Set<any>();\n _routerSubscription?: Subscription;\n _lastRouterEvent?: RouterEventType;\n _routeChangeInvocations = 0;\n _connectedInvocations = 0;\n\n _childrenRouteChangedInterval: any;\n _childrenConnectedDoneInterval: any;\n\n /**\n * Safari is \uC18D\uC131 \uCC98\uB9AC\n * Safari polyfill\uC5D0\uC11C\uB294 \uC790\uC2DD\uBD80\uD130 \uB9CC\uB4E4\uC5B4\uC9C0\uACE0 \uBD80\uBAA8\uAC00 \uB9CC\uB4E4\uC5B4\uC9C0\uBBC0\uB85C\n * \uBD80\uBAA8\uAC00 \uC790\uC2DD\uB4E4\uC744 \uAC15\uC81C\uB85C \uB4F1\uB85D\uD574\uC8FC\uB294 \uD615\uD0DC\uB85C \uCC98\uB9AC\n */\n _connected_safari_and_standby = [];\n\n constructor(...args: any[]) {\n super(...args);\n console.log('[SWC-APP-MIXIN] constructor');\n }\n\n get simpleApplication() {\n return this.__swc_engine.simpleApplication;\n }\n\n get config() {\n return this.__swc_engine?.config;\n }\n\n get router() {\n return this.__swc_engine?.router;\n }\n\n async _invokeRouteChangeSubscribers(instance: HTMLElement, re: RouterEventType) {\n if (instance.isConnected === false) return;\n\n this._routeChangeInvocations++;\n\n if (this._childrenRouteChangedInterval) {\n this.config.window.clearInterval(this._childrenRouteChangedInterval);\n }\n const intervalConfig = { setInterval: this.config.window.setInterval.bind(this.config.window), clearInterval: this.config.window.clearInterval.bind(this.config.window) };\n this._childrenRouteChangedInterval = debounceTimeIntervalLock(\n () => this._routeChangeInvocations === 0,\n () => {\n this._childrenRouteChangedInterval = null;\n this.config.onChildrenRouteChanged?.(re, this);\n },\n this.config?.childrenConnectedDoneCheckIntervalTime ?? 30,\n intervalConfig\n );\n\n try {\n const routeChangeSubscribers = getSubscribeSwcAppRouteChangeWhileConnectedMetadata(instance);\n\n if (routeChangeSubscribers.length > 0) {\n console.log('[SWC-MIXIN] Route change subscribers found');\n\n // Subscribers are already sorted by order from getSubscribeSwcAppRouteChangeWhileConnectedMetadata\n // Execute subscribers in order, stop if one returns a value\n for (const metadata of routeChangeSubscribers) {\n const methodName = metadata.propertyKey;\n let pathPattern = metadata.options?.path as any;\n const filter = metadata.options?.filter;\n const extractValue = (v: any) => {\n const keyToUse = metadata.options?.valueKey ?? SUBSCRIBE_SWC_APP_ROUTE_CHANGE_WHILE_CONNECTED_METADATA_KEY;\n if (v && typeof v === 'object' && keyToUse in v) {\n return v[keyToUse];\n }\n return v;\n };\n\n if (typeof pathPattern === 'function') {\n pathPattern = (pathPattern as Function)(instance);\n }\n\n let pathMatched = false;\n let pathData: any = null;\n\n if (!pathPattern) {\n pathMatched = true;\n pathData = {};\n } else if (Array.isArray(pathPattern)) {\n for (const pattern of pathPattern) {\n const data = SwcUtils.parsePathPattern(pattern, re.path || '/');\n if (data !== null) {\n pathMatched = true;\n pathData = data;\n break;\n }\n }\n } else {\n pathData = SwcUtils.parsePathPattern(pathPattern, re.path || '/');\n pathMatched = pathData !== null;\n }\n\n const hostSet = SwcUtils.getHelperAndHostSet(this.config.window, this);\n const filterPassed = !filter || filter(this.router!, { helper: hostSet, currentThis: instance });\n\n if (pathMatched && filterPassed && instance[methodName]) {\n const result = extractValue(await instance[methodName]({ ...re, pathData: pathData }));\n // if (typeof result === 'object'\n // If handler returns a value, stop propagation to next handlers\n if (result !== undefined && result !== null) {\n break;\n }\n }\n }\n }\n } finally {\n // this.config?.window\n const isBrowser = ValidUtils.isBrowser();\n if (!isBrowser && this.config?.ssr) {\n setSSRAttribute(instance);\n } else {\n removeSSRAttribute(instance);\n }\n this._routeChangeInvocations = Math.max(0, this._routeChangeInvocations - 1);\n }\n }\n\n async _connected(instance: HTMLElement, option?: { noIncrements: boolean }) {\n if (instance) {\n if (!this.simpleApplication && !this.config) {\n this._connected_safari_and_standby.push(instance);\n return;\n }\n\n this.config.onConnectedChildBefore?.(instance);\n if (!option?.noIncrements) {\n this._connectedInvocations++;\n }\n this._swc_connected_instance.add(instance);\n\n const connectedSwcAppCallBacks = findAllLifecycleMetadata(instance, ON_CONNECTED_SWC_APP_METADATA_KEY);\n for (let connectedSwcAppCallBack of connectedSwcAppCallBacks) {\n await (instance as any)?._invokeLifecycleMethod?.(connectedSwcAppCallBack.propertyKey);\n }\n\n if (this._childrenConnectedDoneInterval) {\n this.config.window.clearInterval(this._childrenConnectedDoneInterval);\n }\n const intervalConfig = { setInterval: this.config.window.setInterval.bind(this.config.window), clearInterval: this.config.window.clearInterval.bind(this.config.window) };\n this._childrenConnectedDoneInterval = debounceTimeIntervalLock(\n () => this._connectedInvocations === 0,\n () => {\n this._childrenConnectedDoneInterval = null;\n this.config.onChildrenConnectedDone?.(this);\n },\n this.config?.childrenConnectedDoneCheckIntervalTime ?? 30,\n intervalConfig\n );\n\n if (this.simpleApplication) {\n try {\n if (this.router && this._lastRouterEvent) {\n await this._invokeRouteChangeSubscribers(instance, this._lastRouterEvent!);\n }\n } catch (e) {\n throw e;\n }\n }\n\n const isBrowser = ValidUtils.isBrowser();\n console.log('------>', isBrowser, this.config?.ssr)\n if (!isBrowser && this.config?.ssr) {\n setSSRAttribute(instance);\n } else {\n removeSSRAttribute(instance);\n }\n }\n\n this.config.onConnectedChildAfter?.(instance);\n return this;\n }\n\n async _connectedDone(instance: any) {\n try {\n // \uB0B4\uBD80 \uC5F0\uACB0 \uCC98\uB9AC \uB85C\uC9C1\n } finally {\n this._connectedInvocations = Math.max(0, this._connectedInvocations - 1);\n }\n }\n\n _disconnected(instance: any) {\n if (instance) {\n this._swc_connected_instance.delete(instance);\n this.config?.onDisconnectedChildAfter?.(instance);\n }\n }\n\n async _handleRouteChange(route: RouterEventType) {\n this._lastRouterEvent = route;\n const swcConnectedInstance = Array.from(this._swc_connected_instance);\n const ps = swcConnectedInstance.map((instance: any) => this._invokeRouteChangeSubscribers(instance, route));\n await Promise.allSettled(ps);\n }\n\n async connect(config?: SwcAttributeConfigType) {\n console.log('[SWC-MIXIN] connect');\n const swcConfig = {\n routeType: 'element',\n window: config?.window,\n ...config\n } as SwcConfigType;\n\n await this.__swc_engine.connect(swcConfig);\n\n // Safari is \uC18D\uC131 \uCC98\uB9AC\n this._connected_safari_and_standby.forEach((instance: any) => {\n this._connected(instance, { noIncrements: true });\n });\n\n // \uB77C\uC6B0\uD130 \uBCC0\uACBD \uAD6C\uB3C5\n if (!this._routerSubscription && this.router) {\n const config = this.__swc_engine.config;\n\n this._routerSubscription = this.router.observable.subscribe(async (route: RouterEventType) => {\n console.log('[SWC-MIXIN] Router event received:', route.triggerPoint);\n if (route.triggerPoint === 'end') {\n await this._handleRouteChange(route);\n }\n });\n\n if (config?.path) {\n console.log('[DEBUG] Navigating to initial path:', config.path);\n }\n }\n }\n\n connectedCallback() {\n // \uBD80\uBAA8 \uD074\uB798\uC2A4\uC758 connectedCallback \uD638\uCD9C\n // @ts-ignore\n super.connectedCallback?.();\n\n const configStr = this.getAttribute('swc-get-application-config');\n const win = this.ownerDocument?.defaultView || window;\n if (configStr && win) {\n try {\n const userConfig = FunctionUtils.executeReturn({\n script: configStr,\n context: this,\n args: SwcUtils.getHelperAndHostSet(win, this)\n });\n if (userConfig instanceof Promise) {\n userConfig\n .then(resolvedConfig => {\n this.connect(resolvedConfig);\n })\n .catch(e => {\n console.error('[SWC-MIXIN] Script execution failed:', e);\n });\n } else {\n this.connect(userConfig);\n }\n } catch (e) {\n console.error('[SWC-MIXIN] Script execution failed:', e);\n }\n }\n\n this._connected(this);\n this.__swc_engine?.config?.onConnected?.(this);\n this._connectedDone(this);\n }\n\n disconnectedCallback() {\n // \uBD80\uBAA8 \uD074\uB798\uC2A4\uC758 disconnectedCallback \uD638\uCD9C\n // @ts-ignore\n super.disconnectedCallback?.();\n\n this._routerSubscription?.unsubscribe();\n this._routerSubscription = undefined;\n this._lastRouterEvent = undefined;\n this.__swc_engine.disconnect();\n this.__swc_engine?.config?.onDisconnected?.(this);\n this._disconnected(this);\n }\n\n async routing(path: string) {\n await this.router?.go(path);\n }\n\n back(): void {\n this.router?.back();\n }\n\n forward(): void {\n this.router?.forward();\n }\n\n reload(): void {\n this.router?.reload();\n }\n\n publishMessage(message: SwcAppMessage): void {\n this._swc_connected_instance.forEach((instance: any) => {\n this._invokeMessageSubscribers(instance, message);\n });\n }\n\n _invokeMessageSubscribers(instance: any, message: SwcAppMessage) {\n const messageSubscribers = getSubscribeSwcAppMessageWhileConnectedMetadata(instance);\n if (messageSubscribers && Array.isArray(messageSubscribers)) {\n messageSubscribers.forEach(metadata => {\n const methodName = metadata.propertyKey;\n const messageType = metadata.messageType;\n const filter = metadata.filter;\n\n let typeMatched = false;\n if (!messageType) {\n typeMatched = true;\n } else if (message.type === messageType) {\n typeMatched = true;\n }\n\n let filterMatched = true;\n if (filter && typeMatched) {\n filterMatched = filter(message, instance);\n }\n\n if (typeMatched && filterMatched && typeof instance[methodName] === 'function') {\n instance[methodName](message);\n }\n });\n }\n }\n };\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": [
|
|
4
|
+
"sourcesContent": ["import { SwcAppInterface, SwcAppMessage, SwcAppMessageObserveOptions, SwcElement } from '../types';\nimport { APPLY_NODE_METADATA_KEY, findAllLifecycleMetadata, getSubscribeSwcAppMessageMetadata, getSubscribeSwcAppRouteChangeMetadata, ON_CONNECTED_SWC_APP_METADATA_KEY, SUBSCRIBE_SWC_APP_ROUTE_CHANGE_METADATA_KEY, buildSwcParameterArgs } from '../decorators';\nimport { SwcAppEngine, SwcAttributeConfigType, SwcConfigType } from '../SwcAppEngine';\nimport { debounceTimeIntervalLock, FunctionUtils, Subscription, Subject, Observable } from '@dooboostore/core';\nimport {RouterEventType, ValidUtils} from '@dooboostore/core-web';\nimport { SwcUtils } from '../utils/Utils';\n\ntype RouteSubscriberState = { matched: boolean; signature: string; pathData?: { [k: string]: string }; pathDataAll?: { [k: string]: string[] } };\nconst routeStateOf = (instance: any): Map<string | symbol, RouteSubscriberState> => (instance.__swc_routeState ??= new Map());\n\n/** \uB77C\uC6B0\uD2B8 \uD30C\uB77C\uBBF8\uD130 \uB370\uCF54\uB808\uC774\uD130 \uAC12 (kind \uC774\uB984 = \uB370\uCF54\uB808\uC774\uD130 \uC774\uB984). \uD0A4\uB97C \uBC1B\uB294 \uAC83\uC740 (key) => \uAC12 */\nconst routeParamValues = (sp: URLSearchParams, pathDataAll: { [k: string]: string[] }) => {\n const queryAll: { [k: string]: string[] } = Object.fromEntries([...new Set(sp.keys())].map(k => [k, sp.getAll(k)]));\n const pick = (all: { [k: string]: string[] }, at: 'first' | 'last') =>\n Object.fromEntries(Object.entries(all).map(([k, v]) => [k, at === 'first' ? v[0] : v[v.length - 1]]));\n const lastOf = (v: string[] | undefined) => (v && v.length ? v[v.length - 1] : undefined);\n const firstQuery = (k: string) => sp.get(k);\n const firstPath = (k: string) => pathDataAll[k]?.[0];\n return {\n swcAppRouteQueryParam: firstQuery,\n swcAppRouteFirstQueryParam: firstQuery,\n swcAppRouteLastQueryParam: (k: string) => lastOf(sp.getAll(k)) ?? null,\n swcAppRouteQueryParams: (k: string) => sp.getAll(k),\n swcAppRouteQueryParamObject: pick(queryAll, 'first'),\n swcAppRouteFirstQueryParamObject: pick(queryAll, 'first'),\n swcAppRouteLastQueryParamObject: pick(queryAll, 'last'),\n swcAppRouteQueryParamsObject: queryAll,\n swcAppRouteURLSearchParams: sp,\n swcAppRoutePathVariable: firstPath,\n swcAppRouteFirstPathVariable: firstPath,\n swcAppRouteLastPathVariable: (k: string) => lastOf(pathDataAll[k]),\n swcAppRoutePathVariables: (k: string) => pathDataAll[k] ?? [],\n swcAppRoutePathVariableObject: pick(pathDataAll, 'first'),\n swcAppRouteFirstPathVariableObject: pick(pathDataAll, 'first'),\n swcAppRouteLastPathVariableObject: pick(pathDataAll, 'last'),\n swcAppRoutePathVariablesObject: pathDataAll\n };\n};\n\n/** \uAD6C\uB3C5\uC790\uC758 path(\uBB38\uC790\uC5F4/\uBC30\uC5F4/\uD568\uC218/\uC5C6\uC74C)\uB97C route \uC5D0 \uB9E4\uCE6D. \uC548 \uB9DE\uC73C\uBA74 null */\nconst matchRoute = (pathOption: any, instance: any, re: { path?: string }): { pathData: { [k: string]: string }; pathDataAll: { [k: string]: string[] } } | null => {\n let pattern = typeof pathOption === 'function' ? pathOption(instance) : pathOption;\n if (!pattern) return { pathData: {}, pathDataAll: {} };\n const path = re.path || '/';\n for (const p of Array.isArray(pattern) ? pattern : [pattern]) {\n const pathData = SwcUtils.parsePathPattern(p, path);\n if (pathData !== null) return { pathData, pathDataAll: SwcUtils.parsePathPatternAll(p, path) ?? {} };\n }\n return null;\n};\n\nexport const isSSR = (i: HTMLElement) => {\n return i.hasAttribute('swc-use-ssr');\n};\nexport const setSSRAttribute = (i: HTMLElement) => {\n i.setAttribute('swc-use-ssr', (i as any)._swcId ?? '');\n};\nexport const removeSSRAttribute = (i: HTMLElement) => {\n i.removeAttribute('swc-use-ssr');\n};\n\n/**\n * SwcAppMixin: SwcApp \uAE30\uB2A5\uC744 \uBAA8\uB4E0 HTMLElement\uC5D0 \uCD94\uAC00\uD560 \uC218 \uC788\uB294 Mixin\n *\n * \uC0AC\uC6A9 \uC608:\n * @elementDefine('custom-app', { window: w })\n * class CustomApp extends SwcAppMixin(w.HTMLElement) implements SwcAppInterface {\n * // \uCD94\uAC00 \uAE30\uB2A5 \uAD6C\uD604\n * }\n */\nexport function SwcAppMixin<T extends { new (...args: any[]): HTMLElement }>(Base: T) {\n abstract class SwcAppMixinClass extends Base implements SwcAppInterface {\n __swc_engine = new SwcAppEngine(this as any);\n _swcId!: string;\n _swc_connected_instance = new Set<any>();\n _routerSubscription?: Subscription;\n _lastRouterEvent?: RouterEventType;\n // replay \uC635\uC158\uC73C\uB85C \uBC1C\uD589\uB41C \uD0C0\uC785\uBCC4 \uB9C8\uC9C0\uB9C9 \uBA54\uC2DC\uC9C0 1\uAC1C \uBCF4\uAD00\n _replayedMessages = new Map<string, SwcAppMessage[]>();\n // \uCF54\uB4DC \uAD6C\uB3C5(observeMessage)\uC6A9 live \uC2A4\uD2B8\uB9BC. \uB370\uCF54\uB808\uC774\uD130 \uAD6C\uB3C5\uACFC \uAC19\uC740 publishMessage\uC5D0\uC11C \uD758\uB7EC\uB098\uC634.\n _messageSubject = new Subject<SwcAppMessage>();\n // \u2500\u2500 \uD638\uC2A4\uD2B8 \uB77C\uC774\uD504\uC0AC\uC774\uD074 \uD6C5 (abstract): \uC0C1\uC18D\uD55C \uD074\uB798\uC2A4\uAC00 \uBC18\uB4DC\uC2DC \uAD6C\uD604. @inject \uD30C\uB77C\uBBF8\uD130\uAC00 \uC788\uC73C\uBA74 DI\uB85C \uC790\uB3D9 \uD574\uACB0\uB428 \u2500\u2500\n // connectedCallback \uC2DC\uC810 (DOM\uC5D0 \uBD99\uC744 \uB54C\uB9C8\uB2E4). connect() \uC804\uC774\uB77C DI \uCEE8\uD14C\uC774\uB108\uAC00 \uC544\uC9C1 \uC5C6\uC744 \uC218 \uC788\uC74C.\n abstract onConnected(...args: any[]): void | Promise<void>;\n // disconnectedCallback \uC2DC\uC810 (DOM\uC5D0\uC11C \uB5A8\uC5B4\uC9C8 \uB54C\uB9C8\uB2E4). onConnected\uC5D0\uC11C \uB9CC\uB4E0 \uAD6C\uB3C5 \uB4F1\uC744 \uC5EC\uAE30\uC11C \uD574\uC81C.\n abstract onDisconnected(...args: any[]): void | Promise<void>;\n // connect() \uC644\uB8CC \uD6C4 (DI \uCEE8\uD14C\uC774\uB108\u00B7\uB77C\uC6B0\uD130 \uC900\uBE44\uB428). \uC11C\uBE44\uC2A4 \uD638\uCD9C\uC740 \uC5EC\uAE30\uC11C.\n abstract onSwcAppConnected(...args: any[]): void | Promise<void>;\n _routeChangeInvocations = 0;\n _connectedInvocations = 0;\n\n _childrenRouteChangedInterval: any;\n _childrenConnectedDoneInterval: any;\n\n /**\n * Safari is \uC18D\uC131 \uCC98\uB9AC\n * Safari polyfill\uC5D0\uC11C\uB294 \uC790\uC2DD\uBD80\uD130 \uB9CC\uB4E4\uC5B4\uC9C0\uACE0 \uBD80\uBAA8\uAC00 \uB9CC\uB4E4\uC5B4\uC9C0\uBBC0\uB85C\n * \uBD80\uBAA8\uAC00 \uC790\uC2DD\uB4E4\uC744 \uAC15\uC81C\uB85C \uB4F1\uB85D\uD574\uC8FC\uB294 \uD615\uD0DC\uB85C \uCC98\uB9AC\n */\n _connected_safari_and_standby = [];\n // connect() \uC804\uC5D0 \uBD99\uC740 \uC790\uC2DD\uB4E4\uC774 \uAE30\uB2E4\uB9AC\uB294 \uACF3 \u2014 connect() \uAC00 \uC5D4\uC9C4\uC744 \uB744\uC6B4 \uB4A4 \uAE68\uC6B4\uB2E4\n _appReadyWaiters: Array<() => void> = [];\n\n get simpleApplication() {\n return this.__swc_engine.simpleApplication;\n }\n\n get config() {\n return this.__swc_engine?.config;\n }\n\n get router() {\n return this.__swc_engine?.router;\n }\n\n // phase: 'live'(\uAE30\uBCF8, \uC804\uCCB4 \uBC29\uC1A1) | 'connected' | 'connectedDone' (replay, \uD574\uB2F9 trigger\uB9CC)\n async _invokeRouteChangeSubscribers(instance: HTMLElement, re: RouterEventType, phase: 'live' | 'connected' | 'connectedDone' = 'live') {\n if (instance.isConnected === false) return;\n\n this._routeChangeInvocations++;\n\n if (this._childrenRouteChangedInterval) {\n this.config.window.clearInterval(this._childrenRouteChangedInterval);\n }\n const intervalConfig = { setInterval: this.config.window.setInterval.bind(this.config.window), clearInterval: this.config.window.clearInterval.bind(this.config.window) };\n this._childrenRouteChangedInterval = debounceTimeIntervalLock(\n () => this._routeChangeInvocations === 0,\n () => {\n this._childrenRouteChangedInterval = null;\n this.config.onChildrenRouteChanged?.(re, this);\n },\n this.config?.childrenConnectedDoneCheckIntervalTime ?? 30,\n intervalConfig\n );\n\n try {\n const routeChangeSubscribers = getSubscribeSwcAppRouteChangeMetadata(instance);\n\n if (routeChangeSubscribers.length > 0) {\n // Subscribers are already sorted by order from getSubscribeSwcAppRouteChangeMetadata\n // Execute subscribers in order, stop if one returns a value.\n // live\uB294 \uC804\uBD80 \uC2E4\uD589, replay\uB294 \uD574\uB2F9 trigger \uAD6C\uB3C5\uC790\uB9CC \uC2E4\uD589.\n // on(enter/update/leave) \uD310\uC815\uC744 \uC704\uD574 \uAD6C\uB3C5\uC790\uBCC4 \uC9C1\uC804 \uB9E4\uCE6D \uC0C1\uD0DC\uB97C \uAE30\uC5B5\uD55C\uB2E4 (\uBA48\uCD98 \uB4A4\uC5D0\uB3C4 \uC0C1\uD0DC\uB294 \uACC4\uC18D \uAC31\uC2E0).\n const state = routeStateOf(instance);\n let stopped = false;\n for (const metadata of routeChangeSubscribers) {\n if (phase !== 'live' && (metadata.options?.trigger ?? 'connected') !== phase) continue;\n const on = metadata.options?.on ?? 'match';\n if (on === 'beforeLeave') continue; // \uB77C\uC6B0\uD130 \uAC00\uB4DC\uB85C \uCC98\uB9AC (_registerLeaveGuards)\n const methodName = metadata.propertyKey;\n const extractValue = (v: any) => {\n const keyToUse = metadata.options?.valueKey ?? SUBSCRIBE_SWC_APP_ROUTE_CHANGE_METADATA_KEY;\n if (v && typeof v === 'object' && keyToUse in v) {\n return v[keyToUse];\n }\n return v;\n };\n\n const match = matchRoute(metadata.options?.path, instance, re);\n const prev = state.get(methodName);\n // update \uD310\uC815 \uAE30\uC900: \uACBD\uB85C + query (path \uBCC0\uC218\uB294 \uACBD\uB85C\uC5D0\uC11C \uB098\uC624\uBBC0\uB85C \uD3EC\uD568\uB428. \uD328\uD134 \uC5C6\uB294 bare \uAD6C\uB3C5\uB3C4 \uACBD\uB85C \uBCC0\uACBD\uC744 \uAC10\uC9C0)\n const signature = match ? JSON.stringify([re.path ?? '', re.search ?? '']) : '';\n state.set(methodName, match ? { matched: true, signature, pathData: match.pathData, pathDataAll: match.pathDataAll } : { matched: false, signature: '' });\n\n const shouldRun =\n on === 'match' ? !!match\n : on === 'enter' ? !!match && !prev?.matched\n : on === 'update' ? !!match && !!prev?.matched && prev.signature !== signature\n : on === 'leave' ? !match && !!prev?.matched\n : false;\n if (stopped || !shouldRun || !instance[methodName]) continue;\n\n // leave \uB294 \uC9C0\uAE08 \uACBD\uB85C\uAC00 \uC548 \uB9DE\uC73C\uBBC0\uB85C \uC9C1\uC804 \uB9E4\uCE6D\uC758 pathData \uB85C \uC900\uB2E4\n const pathData = match ? match.pathData : prev?.pathData ?? {};\n const pathDataAll = match ? match.pathDataAll : prev?.pathDataAll ?? {};\n\n const filter = metadata.options?.filter;\n const instanceHelperHostSet = SwcUtils.getHelperAndHostSet(instance, this.config.window);\n const filterPassed = !filter || (await filter(this.router!, { helper: instanceHelperHostSet, currentThis: instance }));\n if (!filterPassed) continue;\n\n const before = metadata.options?.before;\n const finaly = metadata.options?.finally;\n // before\uB97C \uBA3C\uC800 \uB3CC\uB824 \uB9AC\uD134\uAC12\uC744 @routeChangeBeforeReturn \uC73C\uB85C \uC8FC\uC785\uD560 \uC218 \uC788\uAC8C \uCEA1\uCC98.\n const beforeReturn = before ? await before(this.router!, { helper: instanceHelperHostSet, currentThis: instance }) : undefined;\n const routeEventValue = { ...re, pathData };\n const args = this._buildRouteArgs(instance, methodName, routeEventValue, pathDataAll, beforeReturn);\n let rawResult: any, error: any;\n try {\n rawResult = await instance[methodName](...args);\n } catch (e) {\n error = e;\n } finally {\n if (finaly) await finaly(this.router!, { helper: instanceHelperHostSet, currentThis: instance }, { args, result: rawResult, error });\n }\n if (error) throw error;\n const result = extractValue(rawResult);\n // If handler returns a value, stop propagation to next handlers\n if (result !== undefined && result !== null) {\n stopped = true;\n }\n }\n }\n } finally {\n // this.config?.window\n const isBrowser = ValidUtils.isBrowser();\n if (!isBrowser && this.config?.ssr) {\n setSSRAttribute(instance);\n } else {\n removeSSRAttribute(instance);\n }\n this._routeChangeInvocations = Math.max(0, this._routeChangeInvocations - 1);\n }\n }\n\n /** \uB77C\uC6B0\uD2B8 \uD578\uB4E4\uB7EC \uC778\uC790: @swcAppRouterEvent / host \uACC4\uC5F4 / @routeChangeBeforeReturn / \uB77C\uC6B0\uD2B8 \uD30C\uB77C\uBBF8\uD130(query\u00B7path \uBCC0\uC218) */\n _buildRouteArgs(instance: any, methodName: string | symbol, routeEventValue: any, pathDataAll: { [k: string]: string[] }, beforeReturn: any) {\n const instanceHelperHostSet = SwcUtils.getHelperAndHostSet(instance, this.config.window);\n const sp: URLSearchParams = routeEventValue.searchParams ?? new URLSearchParams(routeEventValue.search ?? '');\n return buildSwcParameterArgs(\n instance,\n methodName,\n {\n swcAppRouterEvent: routeEventValue,\n hostSet: instanceHelperHostSet,\n helperHostSet: instanceHelperHostSet,\n helperSet: SwcUtils.getHelperSet(this.config.window),\n routeChangeBeforeReturn: beforeReturn,\n ...routeParamValues(sp, pathDataAll)\n },\n [routeEventValue]\n );\n }\n\n /**\n * on: 'beforeLeave' \uAD6C\uB3C5\uC744 \uB77C\uC6B0\uD130 \uAC00\uB4DC\uB85C \uB4F1\uB85D. \uC9C0\uAE08 \uACBD\uB85C\uB294 \uB9DE\uACE0 \uB2E4\uC74C \uACBD\uB85C\uB294 \uC548 \uB9DE\uC744 \uB54C \uD578\uB4E4\uB7EC\uB97C \uBD80\uB974\uACE0,\n * false \uB97C \uB9AC\uD134\uD558\uBA74 \uC774\uB3D9\uC744 \uCDE8\uC18C\uD55C\uB2E4. \uC694\uC18C\uAC00 \uB5A8\uC5B4\uC9C0\uBA74 _disconnected \uC5D0\uC11C \uD574\uC81C.\n */\n _registerLeaveGuards(instance: any) {\n if (!this.router?.addLeaveGuard) return;\n instance.__swc_leaveGuardOffs?.forEach((off: () => void) => off());\n instance.__swc_leaveGuardOffs = getSubscribeSwcAppRouteChangeMetadata(instance)\n .filter(m => m.options?.on === 'beforeLeave')\n .map(metadata =>\n this.router!.addLeaveGuard(async (to, from) => {\n if (instance.isConnected === false || !instance[metadata.propertyKey]) return true;\n const fromMatch = matchRoute(metadata.options?.path, instance, from);\n if (!fromMatch || matchRoute(metadata.options?.path, instance, to)) return true; // \uC774 \uB77C\uC6B0\uD2B8\uB97C \uB5A0\uB098\uB294 \uACBD\uC6B0\uB9CC\n const filter = metadata.options?.filter;\n const helper = SwcUtils.getHelperAndHostSet(instance, this.config.window);\n if (filter && !(await filter(this.router!, { helper, currentThis: instance }))) return true;\n const beforeReturn = metadata.options?.before ? await metadata.options.before(this.router!, { helper, currentThis: instance }) : undefined;\n const routeEventValue = { ...from, pathData: fromMatch.pathData, to };\n const args = this._buildRouteArgs(instance, metadata.propertyKey, routeEventValue, fromMatch.pathDataAll, beforeReturn);\n let result: any, error: any;\n try {\n result = await instance[metadata.propertyKey](...args);\n } catch (e) {\n error = e;\n } finally {\n if (metadata.options?.finally) await metadata.options.finally(this.router!, { helper, currentThis: instance }, { args, result, error });\n }\n if (error) throw error;\n return result !== false;\n })\n );\n }\n\n async _connected(instance: HTMLElement, option?: { noIncrements: boolean }) {\n if (instance) {\n if (!this.simpleApplication && !this.config) {\n // \uC790\uAE30 \uC790\uC2E0\uC740 connect() \uAC00 \uB098\uC911\uC5D0 \uC7AC\uC0DD\uD55C\uB2E4\n if (instance === (this as any)) {\n this._connected_safari_and_standby.push(instance);\n return;\n }\n // \uC571\uC774 \uC544\uC9C1 connect \uC804: \uC900\uBE44\uB420 \uB54C\uAE4C\uC9C0 \uAE30\uB2E4\uB9B0\uB2E4. \uC548 \uAE30\uB2E4\uB9AC\uBA74 \uC774\uBBF8 \uC815\uC758\uB41C \uC790\uC2DD\uC774 DI\u00B7\uB77C\uC6B0\uD130 \uC5C6\uC774\n // \uB77C\uC774\uD504\uC0AC\uC774\uD074(@inject \uB4F1)\uC744 \uBA3C\uC800 \uB3CC\uB824 undefined \uB97C \uBC1B\uB294\uB2E4 (elementDefine \uC774 \uC774 await \uB4A4\uC5D0 \uB80C\uB354\uD55C\uB2E4).\n await new Promise<void>(resolve => this._appReadyWaiters.push(resolve));\n }\n\n this.config.onConnectedChildBefore?.(instance);\n if (!option?.noIncrements) {\n this._connectedInvocations++;\n }\n this._swc_connected_instance.add(instance);\n // await \uC0AC\uC774\uC5D0 \uC694\uC18C\uAC00 \uB5A8\uC5B4\uC9C0\uAC70\uB098 \uB2E4\uC2DC \uBD99\uC73C\uBA74(elementDefine \uC758 \uCC28\uB840 \uBC88\uD638\uAC00 \uBC14\uB00C\uBA74) \uB098\uBA38\uC9C0(\uAC00\uB4DC \uB4F1\uB85D\u00B7\uC7AC\uC0DD)\uB294 \uAC74\uB108\uB6F4\uB2E4\n const gen = (instance as any).__swc_connectGen;\n const stale = () => (instance as any).__swc_connectGen !== gen;\n\n const connectedSwcAppCallBacks = findAllLifecycleMetadata(instance, ON_CONNECTED_SWC_APP_METADATA_KEY);\n for (let connectedSwcAppCallBack of connectedSwcAppCallBacks) {\n await (instance as any)?._invokeLifecycleMethod?.(connectedSwcAppCallBack.propertyKey);\n if (stale()) return this;\n }\n\n if (this._childrenConnectedDoneInterval) {\n this.config.window.clearInterval(this._childrenConnectedDoneInterval);\n }\n const intervalConfig = { setInterval: this.config.window.setInterval.bind(this.config.window), clearInterval: this.config.window.clearInterval.bind(this.config.window) };\n this._childrenConnectedDoneInterval = debounceTimeIntervalLock(\n () => this._connectedInvocations === 0,\n () => {\n this._childrenConnectedDoneInterval = null;\n this.config.onChildrenConnectedDone?.(this);\n },\n this.config?.childrenConnectedDoneCheckIntervalTime ?? 30,\n intervalConfig\n );\n\n if (this.simpleApplication) {\n try {\n if (this.router && this._lastRouterEvent) {\n await this._invokeRouteChangeSubscribers(instance, this._lastRouterEvent!, 'connected');\n }\n } catch (e) {\n throw e;\n }\n }\n if (stale()) return this;\n\n if (this.simpleApplication) this._registerLeaveGuards(instance);\n\n // replay \uBC84\uD37C\uAC00 \uC788\uC73C\uBA74 \uC2E0\uADDC \uC778\uC2A4\uD134\uC2A4\uC5D0\uB9CC \uC7AC\uC0DD (fire-and-forget, \uC5F0\uACB0 \uBE14\uB85C\uD0B9 \uC548 \uD568)\n this._replayMessagesTo(instance);\n\n const isBrowser = ValidUtils.isBrowser();\n if (!isBrowser && this.config?.ssr) {\n setSSRAttribute(instance);\n } else {\n removeSSRAttribute(instance);\n }\n }\n\n this.config.onConnectedChildAfter?.(instance);\n return this;\n }\n\n async _connectedDone(instance: any, option?: { aborted?: boolean }) {\n try {\n if (option?.aborted) return; // \uC911\uAC04\uC5D0 \uBA48\uCD98 \uC5F0\uACB0: \uC7AC\uC0DD \uC5C6\uC774 \uC5F0\uACB0 \uC218\uB9CC \uB9DE\uCD98\uB2E4\n // trigger 'connectedDone' \uAD6C\uB3C5\uC5D0\uB9CC \uBC84\uD37C \uC7AC\uC0DD (render \uC644\uB8CC \uD6C4\uB77C DOM \uD0C0\uAC9F \uC548\uC804)\n this._replayMessagesTo(instance, 'connectedDone');\n if (this.simpleApplication) {\n try {\n if (this.router && this._lastRouterEvent) {\n await this._invokeRouteChangeSubscribers(instance, this._lastRouterEvent!, 'connectedDone');\n }\n } catch (e) {\n throw e;\n }\n }\n } finally {\n this._connectedInvocations = Math.max(0, this._connectedInvocations - 1);\n }\n }\n\n _disconnected(instance: any) {\n if (instance) {\n this._swc_connected_instance.delete(instance);\n // beforeLeave \uAC00\uB4DC \uD574\uC81C + on \uD310\uC815 \uC0C1\uD0DC \uCD08\uAE30\uD654 (\uB2E4\uC2DC \uBD99\uC73C\uBA74 enter \uBD80\uD130)\n instance.__swc_leaveGuardOffs?.forEach((off: () => void) => off());\n instance.__swc_leaveGuardOffs = undefined;\n instance.__swc_routeState = undefined;\n this.config?.onDisconnectedChildAfter?.(instance);\n }\n }\n\n async _handleRouteChange(route: RouterEventType) {\n this._lastRouterEvent = route;\n const swcConnectedInstance = Array.from(this._swc_connected_instance);\n const ps = swcConnectedInstance.map((instance: any) => this._invokeRouteChangeSubscribers(instance, route));\n await Promise.allSettled(ps);\n }\n\n async connect(config?: SwcAttributeConfigType) {\n const swcConfig = {\n routeType: 'element',\n window: config?.window,\n ...config\n } as SwcConfigType;\n\n await this.__swc_engine.connect(swcConfig);\n this._appReadyWaiters.splice(0).forEach(resolve => resolve());\n\n // Safari is \uC18D\uC131 \uCC98\uB9AC\n this._connected_safari_and_standby.forEach((instance: any) => {\n this._connected(instance, { noIncrements: true });\n });\n\n // \uB77C\uC6B0\uD130 \uBCC0\uACBD \uAD6C\uB3C5\n if (!this._routerSubscription && this.router) {\n this._routerSubscription = this.router.observable.subscribe(async (route: RouterEventType) => {\n if (route.triggerPoint === 'end') {\n await this._handleRouteChange(route);\n }\n });\n }\n\n // onSwcAppConnected \uD6C5 (@inject \uD30C\uB77C\uBBF8\uD130 \uC788\uC73C\uBA74 DI \uD574\uACB0 \u2014 _invokeLifecycleMethod \uACBD\uB85C)\n await this._invokeHook('onSwcAppConnected');\n }\n\n connectedCallback() {\n // \uBD80\uBAA8 \uD074\uB798\uC2A4\uC758 connectedCallback \uD638\uCD9C\n // @ts-ignore\n super.connectedCallback?.();\n\n const configStr = this.getAttribute('swc-get-application-config');\n const win = this.ownerDocument?.defaultView || window;\n if (configStr && win) {\n try {\n const userConfig = FunctionUtils.executeReturn({\n script: configStr,\n context: this,\n args: SwcUtils.getHelperAndHostSet(this, win)\n });\n if (userConfig instanceof Promise) {\n userConfig\n .then(resolvedConfig => {\n this.connect(resolvedConfig);\n })\n .catch(e => {\n console.error('[SWC-MIXIN] Script execution failed:', e);\n });\n } else {\n this.connect(userConfig);\n }\n } catch (e) {\n console.error('[SWC-MIXIN] Script execution failed:', e);\n }\n }\n\n this._connected(this);\n this.__swc_engine?.config?.onConnected?.(this);\n this._connectedDone(this);\n void this._invokeHook('onConnected').catch(e => console.error('[SWC-MIXIN] onConnected error:', e));\n }\n\n disconnectedCallback() {\n // \uBD80\uBAA8 \uD074\uB798\uC2A4\uC758 disconnectedCallback \uD638\uCD9C\n // @ts-ignore\n super.disconnectedCallback?.();\n\n this._routerSubscription?.unsubscribe();\n this._routerSubscription = undefined;\n this._lastRouterEvent = undefined;\n this.__swc_engine.disconnect();\n this.__swc_engine?.config?.onDisconnected?.(this);\n this._disconnected(this);\n void this._invokeHook('onDisconnected').catch(e => console.error('[SWC-MIXIN] onDisconnected error:', e));\n }\n\n async routing(path: string) {\n await this.router?.go(path);\n }\n\n back(): void {\n this.router?.back();\n }\n\n forward(): void {\n this.router?.forward();\n }\n\n reload(): void {\n this.router?.reload();\n }\n\n publishMessage(message: SwcAppMessage): void { // \uBC84\uD37C \uBA3C\uC800 (\uD578\uB4E4\uB7EC\uAC00 \uB3D9\uAE30 \uC7AC\uBC1C\uD589\uD574\uB3C4 \uC21C\uC11C \uBCF4\uC7A5)\n // \uC804 \uD0C0\uC785 \uACFC\uAC70 \uBA54\uC2DC\uC9C0 \uBCF4\uAD00 (\uB2A6\uAC8C \uC5F0\uACB0\uB420 \uC778\uC2A4\uD134\uC2A4\uC5D0 \uC7AC\uC0DD). \uAC1C\uC218\uB294 \uC571 \uC124\uC815 1\uACF3.\n if (message.type) {\n const buf = [...(this._replayedMessages.get(message.type) ?? []), message];\n this._replayedMessages.set(message.type, buf.slice(-Math.max(1, this.config?.messageReplayBufferSize ?? 10)));\n }\n this._swc_connected_instance.forEach((instance: any) => {\n this._invokeMessageSubscribers(instance, message);\n });\n this._messageSubject.next(message);\n }\n\n connectedElements(): Array<HTMLElement & SwcElement> {\n return Array.from(this._swc_connected_instance);\n }\n\n /**\n * \uB370\uCF54\uB808\uC774\uD130 \uC5C6\uC774 \uCF54\uB4DC\uB85C \uBA54\uC2DC\uC9C0\uB97C \uAD6C\uB3C5\uD55C\uB2E4 (RxJS \uC2A4\uD0C0\uC77C). \uC11C\uBE44\uC2A4\u00B7\uB3D9\uC801 \uAD6C\uB3C5 \uB4F1 \uB370\uCF54\uB808\uC774\uD130\uB97C \uBABB \uBD99\uC774\uB294 \uACF3\uC6A9.\n * host.observeMessage<Me>(AUTH_CHANGED).subscribe(msg => ...) \u2192 Subscription (unsubscribe \uD544\uC218)\n * type \uC0DD\uB7B5 \uC2DC \uC804 \uD0C0\uC785 live. subject \uC635\uC158\uC740 @subscribeSwcAppMessage \uC640 \uAC19\uC740 \uADDC\uCE59(type \uC9C0\uC815 \uC2DC\uC5D0\uB9CC \uC7AC\uC0DD):\n * 'behavior' = \uBC84\uD37C \uB9C8\uC9C0\uB9C9 1\uAC1C \uBA3C\uC800 / 'replay' = \uBC84\uD37C \uC804\uCCB4 \uC2DC\uAC04\uC21C \uBA3C\uC800 / \uBBF8\uC9C0\uC815\u00B7'subject' = live\uB9CC.\n * \uD638\uCD9C \uD615\uD0DC:\n * observeMessage() \uC804 \uD0C0\uC785 live\n * observeMessage('auth') auth live\n * observeMessage('auth', { subject: 'behavior' }) auth \uB9C8\uC9C0\uB9C9 1\uAC1C + live\n * observeMessage({ type: 'auth', subject: 'replay' }) \uC635\uC158 \uAC1D\uCCB4 \uD558\uB098\uB85C\n */\n observeMessage<T = any>(): Observable<SwcAppMessage<T>>;\n observeMessage<T = any>(type: string): Observable<SwcAppMessage<T>>;\n observeMessage<T = any>(type: string, options: Omit<SwcAppMessageObserveOptions, 'type'>): Observable<SwcAppMessage<T>>;\n observeMessage<T = any>(options: SwcAppMessageObserveOptions): Observable<SwcAppMessage<T>>;\n observeMessage<T = any>(typeOrOptions?: string | SwcAppMessageObserveOptions, options?: Omit<SwcAppMessageObserveOptions, 'type'>): Observable<SwcAppMessage<T>> {\n const { type, subject } = typeof typeOrOptions === 'string' ? { ...options, type: typeOrOptions } : { ...typeOrOptions };\n return new Observable<SwcAppMessage<T>>(subscriber => {\n if (type && (subject === 'behavior' || subject === 'replay')) {\n const buf = this._replayedMessages.get(type) ?? [];\n (subject === 'behavior' ? buf.slice(-1) : buf).forEach(m => subscriber.next(m as SwcAppMessage<T>));\n }\n const sub = this._messageSubject.subscribe(m => {\n if (!type || m.type === type) subscriber.next(m as SwcAppMessage<T>);\n });\n return () => sub.unsubscribe();\n });\n }\n\n // hook \uC2E4\uD589 + @inject \uD30C\uB77C\uBBF8\uD130 DI \uD574\uACB0 (host \uBCF8\uCCB4 \uD3EC\uD568.\n // _invokeLifecycleMethod\uB294 host/hostSet \uC0C1\uD669 \uBD84\uAE30\uAC00 \uB2EC\uB77C \uD638\uC2A4\uD2B8 \uBCF8\uCCB4\uC5D0\uC11C \uC8FC\uC785\uC774 \uC548 \uB428)\n async _invokeHook(methodName: string | symbol) {\n const fn = (this as any)[methodName];\n if (typeof fn !== 'function') return;\n const manager = (this as any).simpleApplication?.simstanceManager;\n if (!manager) {\n return fn.call(this);\n }\n return manager.executeBindParameterSimPromise({ target: this, targetKey: methodName });\n }\n\n // \uC2E0\uADDC \uC5F0\uACB0 \uC778\uC2A4\uD134\uC2A4 1\uACF3\uC5D0\uB9CC \uBC84\uD37C \uC7AC\uC0DD. \uAD6C\uB3C5\uC790\uBCC4 subject \uC120\uC5B8 \uAE30\uC900:\n // - 'behavior': \uB9C8\uC9C0\uB9C9 1\uAC1C / 'replay': \uBC84\uD37C \uC804\uCCB4 \uC2DC\uAC04\uC21C / \uBBF8\uC9C0\uC815\u00B7'subject': live\uB9CC (\uC7AC\uC0DD \uC548 \uD568)\n // - trigger 'connectedDone'\uC778 \uAD6C\uB3C5\uC740 _connectedDone(render \uC644\uB8CC \uD6C4)\uC5D0\uC11C \uC7AC\uC0DD. phase\uB85C \uAD6C\uBD84.\n // \uC774\uBBF8 \uC5F0\uACB0\uB41C \uC778\uC2A4\uD134\uC2A4\uB294 publishMessage \uB54C live\uB85C \uBC1B\uC73C\uBBC0\uB85C \uC5EC\uAE30 \uC624\uC9C0 \uC54A\uC74C.\n _replayMessagesTo(instance: any, phase: 'connected' | 'connectedDone' = 'connected') {\n const subs = getSubscribeSwcAppMessageMetadata(instance);\n if (!subs || !Array.isArray(subs)) return;\n const seen = new Set<string>();\n subs.forEach(meta => {\n const type = meta.messageType as string | undefined;\n if (!type || seen.has(type)) return;\n seen.add(type);\n if ((meta.trigger ?? 'connected') !== phase) return;\n const buf = this._replayedMessages.get(type) ?? [];\n if (meta.subject === 'behavior') {\n const last = buf[buf.length - 1];\n if (last) this._invokeMessageSubscribers(instance, last);\n } else if (meta.subject === 'replay') {\n buf.forEach(msg => this._invokeMessageSubscribers(instance, msg));\n }\n });\n }\n\n _invokeMessageSubscribers(instance: any, message: SwcAppMessage) {\n const messageSubscribers = getSubscribeSwcAppMessageMetadata(instance);\n if (messageSubscribers && Array.isArray(messageSubscribers)) {\n // \uBA54\uC2DC\uC9C0 \uAD6C\uB3C5\uC740 fire-and-forget \u2014 async filter/before/finally\uB97C \uC704\uD574 \uAD6C\uB3C5\uC790\uB9C8\uB2E4 \uBE44\uB3D9\uAE30 \uB7EC\uB108\uB85C \uB3CC\uB9AC\uB418\n // \uD638\uCD9C\uCE21(publishMessage)\uC740 \uB17C\uBE14\uB85C\uD0B9 \uC720\uC9C0. \uBBF8\uCC98\uB9AC rejection\uC740 \uB85C\uAE45\uB9CC.\n messageSubscribers.forEach(metadata => {\n void this._runMessageSubscriber(instance, message, metadata).catch(e => console.error('[SWC] subscribeSwcAppMessage error:', e));\n });\n }\n }\n\n async _runMessageSubscriber(instance: any, message: SwcAppMessage, metadata: any) {\n const methodName = metadata.propertyKey;\n const messageType = metadata.messageType;\n const { filter, before, finally: finaly } = metadata;\n\n const typeMatched = !messageType || message.type === messageType;\n if (!typeMatched) return;\n if (filter && !(await filter(message, instance))) return;\n if (typeof instance[methodName] !== 'function') return;\n\n const instanceHelperHostSet = SwcUtils.getHelperAndHostSet(instance, this.config.window);\n const instanceHelperSet = SwcUtils.getHelperSet(this.config.window);\n // before\uB97C \uBA3C\uC800 \uB3CC\uB824 \uB9AC\uD134\uAC12\uC744 @appMessageBeforeReturn \uC73C\uB85C \uC8FC\uC785\uD560 \uC218 \uC788\uAC8C \uCEA1\uCC98.\n const beforeReturn = before ? await before(message, instance) : undefined;\n const args = buildSwcParameterArgs(\n instance,\n methodName,\n {\n appMessage: message,\n hostSet: instanceHelperHostSet,\n helperHostSet: instanceHelperHostSet,\n helperSet: instanceHelperSet,\n appMessageBeforeReturn: beforeReturn\n },\n [message]\n );\n\n let result: any, error: any;\n try {\n result = await instance[methodName](...args);\n } catch (e) {\n error = e;\n } finally {\n if (finaly) await finaly(message, instance, { args, result, error });\n }\n if (error) throw error;\n }\n }\n\n return SwcAppMixinClass;\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": []
|
|
7
7
|
}
|