@dooboostore/simple-web-component 1.0.33 → 1.0.35
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 +23 -30
- package/dist/cjs/decorators/addEventListener.js.map +1 -1
- package/dist/cjs/decorators/applyAttribute.js +67 -57
- package/dist/cjs/decorators/applyAttribute.js.map +2 -2
- package/dist/cjs/decorators/applyClass.js +80 -70
- package/dist/cjs/decorators/applyClass.js.map +2 -2
- package/dist/cjs/decorators/applyNode.js +5 -8
- package/dist/cjs/decorators/applyNode.js.map +2 -2
- package/dist/cjs/decorators/applyStyle.js +66 -56
- package/dist/cjs/decorators/applyStyle.js.map +2 -2
- package/dist/cjs/decorators/attribute.js +35 -29
- package/dist/cjs/decorators/attribute.js.map +2 -2
- package/dist/cjs/decorators/changedAttributeHost.js +32 -12
- package/dist/cjs/decorators/changedAttributeHost.js.map +2 -2
- package/dist/cjs/decorators/elementDefine.js +238 -180
- package/dist/cjs/decorators/elementDefine.js.map +2 -2
- package/dist/cjs/decorators/emitCustomEvent.js +67 -48
- package/dist/cjs/decorators/emitCustomEvent.js.map +2 -2
- package/dist/cjs/decorators/lifecycles.js +15 -17
- package/dist/cjs/decorators/lifecycles.js.map +2 -2
- package/dist/cjs/decorators/setProperty.js +50 -39
- package/dist/cjs/decorators/setProperty.js.map +2 -2
- package/dist/cjs/decorators/subscribeSwcAppMessageWhileConnected.js.map +1 -1
- package/dist/cjs/decorators/subscribeSwcAppRouteChangeWhileConnected.js +2 -2
- package/dist/cjs/decorators/subscribeSwcAppRouteChangeWhileConnected.js.map +2 -2
- package/dist/cjs/elements/SwcAppEngine.js +14 -8
- package/dist/cjs/elements/SwcAppEngine.js.map +3 -3
- package/dist/cjs/elements/SwcAppMixin.js +154 -81
- package/dist/cjs/elements/SwcAppMixin.js.map +2 -2
- package/dist/cjs/elements/SwcAsync.js +28 -18
- package/dist/cjs/elements/SwcAsync.js.map +2 -2
- package/dist/cjs/elements/SwcChoose.js +68 -45
- package/dist/cjs/elements/SwcChoose.js.map +2 -2
- package/dist/cjs/elements/SwcIf.js +52 -30
- package/dist/cjs/elements/SwcIf.js.map +2 -2
- package/dist/cjs/elements/SwcLoop.js +109 -35
- package/dist/cjs/elements/SwcLoop.js.map +2 -2
- package/dist/cjs/elements/register.js +263 -131
- package/dist/cjs/elements/register.js.map +2 -2
- package/dist/cjs/router/ElementRouter.js +4 -2
- package/dist/cjs/router/ElementRouter.js.map +1 -1
- package/dist/cjs/types.js.map +1 -1
- package/dist/cjs/utils/Utils.js +25 -7
- package/dist/cjs/utils/Utils.js.map +2 -2
- package/dist/esm/decorators/addEventListener.js.map +1 -1
- package/dist/esm/decorators/applyAttribute.js +67 -57
- package/dist/esm/decorators/applyAttribute.js.map +2 -2
- package/dist/esm/decorators/applyClass.js +80 -70
- package/dist/esm/decorators/applyClass.js.map +2 -2
- package/dist/esm/decorators/applyNode.js +5 -8
- package/dist/esm/decorators/applyNode.js.map +2 -2
- package/dist/esm/decorators/applyStyle.js +66 -56
- package/dist/esm/decorators/applyStyle.js.map +2 -2
- package/dist/esm/decorators/attribute.js +35 -29
- package/dist/esm/decorators/attribute.js.map +2 -2
- package/dist/esm/decorators/changedAttributeHost.js +32 -12
- package/dist/esm/decorators/changedAttributeHost.js.map +2 -2
- package/dist/esm/decorators/elementDefine.js +240 -182
- package/dist/esm/decorators/elementDefine.js.map +2 -2
- package/dist/esm/decorators/emitCustomEvent.js +67 -48
- package/dist/esm/decorators/emitCustomEvent.js.map +2 -2
- package/dist/esm/decorators/lifecycles.js +15 -17
- package/dist/esm/decorators/lifecycles.js.map +2 -2
- package/dist/esm/decorators/setProperty.js +50 -39
- package/dist/esm/decorators/setProperty.js.map +2 -2
- package/dist/esm/decorators/subscribeSwcAppMessageWhileConnected.js.map +1 -1
- package/dist/esm/decorators/subscribeSwcAppRouteChangeWhileConnected.js +2 -2
- package/dist/esm/decorators/subscribeSwcAppRouteChangeWhileConnected.js.map +2 -2
- package/dist/esm/elements/SwcAppEngine.js +14 -7
- package/dist/esm/elements/SwcAppEngine.js.map +2 -2
- package/dist/esm/elements/SwcAppMixin.js +156 -82
- package/dist/esm/elements/SwcAppMixin.js.map +2 -2
- package/dist/esm/elements/SwcAsync.js +28 -18
- package/dist/esm/elements/SwcAsync.js.map +2 -2
- package/dist/esm/elements/SwcChoose.js +69 -46
- package/dist/esm/elements/SwcChoose.js.map +2 -2
- package/dist/esm/elements/SwcIf.js +53 -31
- package/dist/esm/elements/SwcIf.js.map +2 -2
- package/dist/esm/elements/SwcLoop.js +110 -36
- package/dist/esm/elements/SwcLoop.js.map +2 -2
- package/dist/esm/elements/register.js +264 -132
- package/dist/esm/elements/register.js.map +2 -2
- package/dist/esm/router/ElementRouter.js +5 -2
- package/dist/esm/router/ElementRouter.js.map +1 -1
- package/dist/esm/types.js.map +1 -1
- package/dist/esm/utils/Utils.js +25 -7
- package/dist/esm/utils/Utils.js.map +2 -2
- package/dist/esm-bundle/dooboostore-simple-web-component.esm.js +728 -595
- package/dist/esm-bundle/dooboostore-simple-web-component.esm.js.map +4 -4
- package/dist/types/decorators/addEventListener.d.ts +4 -1
- package/dist/types/decorators/addEventListener.d.ts.map +1 -1
- package/dist/types/decorators/applyAttribute.d.ts +5 -1
- package/dist/types/decorators/applyAttribute.d.ts.map +1 -1
- package/dist/types/decorators/applyClass.d.ts +4 -0
- package/dist/types/decorators/applyClass.d.ts.map +1 -1
- package/dist/types/decorators/applyNode.d.ts +5 -1
- package/dist/types/decorators/applyNode.d.ts.map +1 -1
- package/dist/types/decorators/applyStyle.d.ts +5 -1
- package/dist/types/decorators/applyStyle.d.ts.map +1 -1
- package/dist/types/decorators/attribute.d.ts +5 -0
- package/dist/types/decorators/attribute.d.ts.map +1 -1
- package/dist/types/decorators/changedAttributeHost.d.ts +14 -3
- package/dist/types/decorators/changedAttributeHost.d.ts.map +1 -1
- package/dist/types/decorators/elementDefine.d.ts +1 -1
- package/dist/types/decorators/elementDefine.d.ts.map +1 -1
- package/dist/types/decorators/emitCustomEvent.d.ts +15 -7
- package/dist/types/decorators/emitCustomEvent.d.ts.map +1 -1
- package/dist/types/decorators/lifecycles.d.ts +10 -7
- package/dist/types/decorators/lifecycles.d.ts.map +1 -1
- package/dist/types/decorators/setProperty.d.ts +5 -1
- package/dist/types/decorators/setProperty.d.ts.map +1 -1
- package/dist/types/decorators/subscribeSwcAppMessageWhileConnected.d.ts +2 -2
- package/dist/types/decorators/subscribeSwcAppMessageWhileConnected.d.ts.map +1 -1
- package/dist/types/decorators/subscribeSwcAppRouteChangeWhileConnected.d.ts +5 -6
- package/dist/types/decorators/subscribeSwcAppRouteChangeWhileConnected.d.ts.map +1 -1
- package/dist/types/elements/SwcAppEngine.d.ts +9 -3
- package/dist/types/elements/SwcAppEngine.d.ts.map +1 -1
- package/dist/types/elements/SwcAppMixin.d.ts +12 -7
- package/dist/types/elements/SwcAppMixin.d.ts.map +1 -1
- package/dist/types/elements/register.d.ts.map +1 -1
- package/dist/types/types.d.ts +1 -0
- package/dist/types/types.d.ts.map +1 -1
- package/dist/types/utils/Utils.d.ts +4 -1
- package/dist/types/utils/Utils.d.ts.map +1 -1
- package/dist/umd-bundle/dooboostore-simple-web-component.umd.js +728 -595
- package/dist/umd-bundle/dooboostore-simple-web-component.umd.js.map +4 -4
- package/package.json +5 -5
- package/src/decorators/addEventListener.ts +1 -1
- package/src/decorators/applyAttribute.ts +74 -61
- package/src/decorators/applyClass.ts +91 -77
- package/src/decorators/applyNode.ts +16 -13
- package/src/decorators/applyStyle.ts +75 -61
- package/src/decorators/attribute.ts +55 -43
- package/src/decorators/changedAttributeHost.ts +49 -15
- package/src/decorators/elementDefine.ts +401 -340
- package/src/decorators/emitCustomEvent.ts +92 -62
- package/src/decorators/lifecycles.ts +11 -10
- package/src/decorators/setProperty.ts +58 -44
- package/src/decorators/subscribeSwcAppMessageWhileConnected.ts +2 -2
- package/src/decorators/subscribeSwcAppRouteChangeWhileConnected.ts +11 -11
- package/src/elements/SwcAppEngine.ts +19 -13
- package/src/elements/SwcAppMixin.ts +214 -102
- package/src/elements/SwcAsync.ts +28 -17
- package/src/elements/SwcChoose.ts +94 -36
- package/src/elements/SwcIf.ts +59 -22
- package/src/elements/SwcLoop.ts +140 -27
- package/src/elements/register.ts +319 -100
- package/src/types.ts +1 -0
- package/src/utils/Utils.ts +38 -10
- package/tsconfig.json +2 -2
|
@@ -2,6 +2,7 @@ var __defProp = Object.defineProperty;
|
|
|
2
2
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
3
3
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
4
4
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
5
|
+
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
5
6
|
var __export = (target, all) => {
|
|
6
7
|
for (var name in all)
|
|
7
8
|
__defProp(target, name, { get: all[name], enumerable: true });
|
|
@@ -15,6 +16,7 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
15
16
|
return to;
|
|
16
17
|
};
|
|
17
18
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
18
20
|
var SwcAppMixin_exports = {};
|
|
19
21
|
__export(SwcAppMixin_exports, {
|
|
20
22
|
SwcAppMixin: () => SwcAppMixin
|
|
@@ -23,133 +25,205 @@ module.exports = __toCommonJS(SwcAppMixin_exports);
|
|
|
23
25
|
var import_SwcAppEngine = require("./SwcAppEngine");
|
|
24
26
|
var import_Utils = require("../utils/Utils");
|
|
25
27
|
var import_core = require("@dooboostore/core");
|
|
26
|
-
var import_lifecycles = require("../decorators/lifecycles");
|
|
27
28
|
var import_subscribeSwcAppRouteChangeWhileConnected = require("../decorators/subscribeSwcAppRouteChangeWhileConnected");
|
|
28
29
|
var import_subscribeSwcAppMessageWhileConnected = require("../decorators/subscribeSwcAppMessageWhileConnected");
|
|
29
30
|
function SwcAppMixin(Base) {
|
|
30
31
|
return class extends Base {
|
|
31
32
|
constructor() {
|
|
32
33
|
super(...arguments);
|
|
33
|
-
this
|
|
34
|
-
this
|
|
35
|
-
|
|
34
|
+
__publicField(this, "__swc_engine", new import_SwcAppEngine.SwcAppEngine(this));
|
|
35
|
+
__publicField(this, "_swc_connected_instance", /* @__PURE__ */ new Set());
|
|
36
|
+
// _swc_notified_routes = new WeakMap<any, RouterEventType>();
|
|
37
|
+
__publicField(this, "_routerSubscription");
|
|
38
|
+
__publicField(this, "_lastRouterEvent");
|
|
39
|
+
__publicField(this, "_routeChangeInvocations", 0);
|
|
40
|
+
__publicField(this, "_connectedInvocations", 0);
|
|
41
|
+
__publicField(this, "_childrenRouteChangedInterval");
|
|
42
|
+
__publicField(this, "_childrenConnectedDoneInterval");
|
|
43
|
+
/*
|
|
44
|
+
사파리 is 일경우
|
|
45
|
+
<script src="https://unpkg.com/@ungap/custom-elements"><\/script>
|
|
46
|
+
이걸사용하는데 is 대응하는거다 그런데 이때 처리되는 순서가 크롬이나 표준에서는 부모부터 만들어지고 자식들이 만들어지는데
|
|
47
|
+
저 polyfill에서는 자식부터 만들어지고 부모가 만들어진다 is일때 아 .. 이문제때문에 자식이 _connected_safari 에 강제로 자기자식넣어준다
|
|
48
|
+
*/
|
|
49
|
+
__publicField(this, "_connected_safari", []);
|
|
36
50
|
}
|
|
37
51
|
get simpleApplication() {
|
|
38
52
|
return this.__swc_engine.simpleApplication;
|
|
39
53
|
}
|
|
54
|
+
get config() {
|
|
55
|
+
return this.__swc_engine?.config;
|
|
56
|
+
}
|
|
40
57
|
get router() {
|
|
41
|
-
return this.__swc_engine
|
|
42
|
-
}
|
|
43
|
-
_invokeRouteChangeSubscribers(instance, re) {
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
58
|
+
return this.__swc_engine?.router;
|
|
59
|
+
}
|
|
60
|
+
async _invokeRouteChangeSubscribers(instance, re) {
|
|
61
|
+
if (instance.isConnected === false) return;
|
|
62
|
+
this._routeChangeInvocations++;
|
|
63
|
+
if (this._childrenRouteChangedInterval) {
|
|
64
|
+
clearInterval(this._childrenRouteChangedInterval);
|
|
65
|
+
}
|
|
66
|
+
this._childrenRouteChangedInterval = (0, import_core.debounceTimeIntervalLock)(
|
|
67
|
+
() => this._routeChangeInvocations === 0,
|
|
68
|
+
() => {
|
|
69
|
+
this._childrenRouteChangedInterval = null;
|
|
70
|
+
this.config.onChildrenRouteChanged(re, this);
|
|
71
|
+
},
|
|
72
|
+
this.config?.childrenConnectedDoneCheckIntervalTime ?? 30,
|
|
73
|
+
{ setInterval: window.setInterval, clearInterval: window.clearInterval }
|
|
74
|
+
// {setInterval: window.setInterval, clearInterval: window.clearInterval}
|
|
75
|
+
);
|
|
76
|
+
try {
|
|
77
|
+
const routeChangeSubscribers = (0, import_subscribeSwcAppRouteChangeWhileConnected.getSubscribeSwcAppRouteChangeWhileConnectedMetadata)(instance);
|
|
78
|
+
if (routeChangeSubscribers && Array.isArray(routeChangeSubscribers)) {
|
|
79
|
+
const ps = routeChangeSubscribers.map(async (metadata) => {
|
|
80
|
+
const methodName = metadata.propertyKey;
|
|
81
|
+
let pathPattern = metadata.options?.path;
|
|
82
|
+
const filter = metadata.options?.filter;
|
|
83
|
+
if (typeof pathPattern === "function") {
|
|
84
|
+
pathPattern = pathPattern(instance);
|
|
85
|
+
}
|
|
86
|
+
let pathMatched = false;
|
|
87
|
+
let pathData = null;
|
|
88
|
+
if (!pathPattern) {
|
|
89
|
+
pathMatched = true;
|
|
90
|
+
pathData = {};
|
|
91
|
+
} else if (Array.isArray(pathPattern)) {
|
|
92
|
+
for (const pattern of pathPattern) {
|
|
93
|
+
const data = import_Utils.SwcUtils.parsePathPattern(pattern, re.path || "/");
|
|
94
|
+
if (data !== null) {
|
|
95
|
+
pathMatched = true;
|
|
96
|
+
pathData = data;
|
|
97
|
+
break;
|
|
98
|
+
}
|
|
62
99
|
}
|
|
100
|
+
} else {
|
|
101
|
+
pathData = import_Utils.SwcUtils.parsePathPattern(pathPattern, re.path || "/");
|
|
102
|
+
pathMatched = pathData !== null;
|
|
63
103
|
}
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
104
|
+
const filterPassed = !filter || filter(this.router, instance);
|
|
105
|
+
if (pathMatched && filterPassed && instance[methodName]) {
|
|
106
|
+
await instance[methodName]({ ...re, pathData });
|
|
107
|
+
}
|
|
108
|
+
});
|
|
109
|
+
await Promise.allSettled(ps);
|
|
110
|
+
}
|
|
111
|
+
} finally {
|
|
112
|
+
this._routeChangeInvocations--;
|
|
73
113
|
}
|
|
74
114
|
}
|
|
75
|
-
_connected(instance) {
|
|
115
|
+
async _connected(instance) {
|
|
76
116
|
if (instance) {
|
|
117
|
+
this._connectedInvocations++;
|
|
77
118
|
this._swc_connected_instance.add(instance);
|
|
119
|
+
if (this._childrenConnectedDoneInterval) {
|
|
120
|
+
clearInterval(this._childrenConnectedDoneInterval);
|
|
121
|
+
}
|
|
122
|
+
this._childrenConnectedDoneInterval = (0, import_core.debounceTimeIntervalLock)(
|
|
123
|
+
() => this._connectedInvocations === 0,
|
|
124
|
+
() => {
|
|
125
|
+
this._childrenConnectedDoneInterval = null;
|
|
126
|
+
this.config.onChildrenConnectedDone(this);
|
|
127
|
+
},
|
|
128
|
+
this.config?.childrenConnectedDoneCheckIntervalTime ?? 30,
|
|
129
|
+
{ setInterval: window.setInterval, clearInterval: window.clearInterval }
|
|
130
|
+
);
|
|
78
131
|
if (this.simpleApplication) {
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
132
|
+
try {
|
|
133
|
+
if (this.router && this._lastRouterEvent) {
|
|
134
|
+
await this._invokeRouteChangeSubscribers(instance, this._lastRouterEvent);
|
|
135
|
+
}
|
|
136
|
+
} catch (e) {
|
|
137
|
+
throw e;
|
|
82
138
|
}
|
|
83
139
|
}
|
|
84
140
|
}
|
|
85
141
|
}
|
|
142
|
+
async _connectedDone(instance) {
|
|
143
|
+
try {
|
|
144
|
+
} finally {
|
|
145
|
+
this._connectedInvocations--;
|
|
146
|
+
}
|
|
147
|
+
}
|
|
86
148
|
_disconnected(instance) {
|
|
87
149
|
if (instance) {
|
|
88
150
|
this._swc_connected_instance.delete(instance);
|
|
89
151
|
}
|
|
90
152
|
}
|
|
91
|
-
_handleRouteChange(route) {
|
|
92
|
-
if (route.triggerPoint === "end") {
|
|
93
|
-
this._swc_connected_instance.forEach((instance) => {
|
|
94
|
-
this._invokeRouteChangeSubscribers(instance, route);
|
|
95
|
-
});
|
|
96
|
-
}
|
|
153
|
+
async _handleRouteChange(route) {
|
|
97
154
|
this._lastRouterEvent = route;
|
|
155
|
+
const swcConnectedInstance = Array.from(this._swc_connected_instance);
|
|
156
|
+
const ps = swcConnectedInstance.map((instance) => this._invokeRouteChangeSubscribers(instance, route));
|
|
157
|
+
await Promise.allSettled(ps);
|
|
98
158
|
}
|
|
99
159
|
async connect(config) {
|
|
100
160
|
const swcConfig = {
|
|
101
161
|
routeType: "element",
|
|
102
|
-
window: config
|
|
162
|
+
window: config?.window,
|
|
103
163
|
...config
|
|
104
164
|
};
|
|
105
165
|
const mode = config?.connectMode || "direct";
|
|
106
166
|
if (mode === "direct") {
|
|
107
167
|
await this.__swc_engine.connect(swcConfig);
|
|
108
168
|
this.setAttribute("swc-connect-mode", "direct");
|
|
109
|
-
} else if (mode === "swap"
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
169
|
+
} else if (mode === "swap" || mode === "clear-swap") {
|
|
170
|
+
if (!this.parentNode) {
|
|
171
|
+
await this.__swc_engine.connect(swcConfig);
|
|
172
|
+
this.setAttribute("swc-connect-mode", "direct");
|
|
173
|
+
} else {
|
|
174
|
+
const clonedApp = this.cloneNode(mode === "swap");
|
|
175
|
+
clonedApp.style.display = "none";
|
|
176
|
+
this.parentNode.insertBefore(clonedApp, this.nextSibling);
|
|
177
|
+
try {
|
|
178
|
+
await clonedApp.connect({ ...config || {}, connectMode: "direct" });
|
|
179
|
+
if (this.parentNode) {
|
|
180
|
+
this.parentNode.removeChild(this);
|
|
181
|
+
}
|
|
182
|
+
clonedApp.style.display = "";
|
|
183
|
+
clonedApp.setAttribute("swc-connect-mode", mode);
|
|
184
|
+
return;
|
|
185
|
+
} catch (e) {
|
|
186
|
+
if (clonedApp.parentNode) {
|
|
187
|
+
clonedApp.parentNode.removeChild(clonedApp);
|
|
188
|
+
}
|
|
189
|
+
await this.__swc_engine.connect(swcConfig);
|
|
190
|
+
this.setAttribute("swc-connect-mode", "direct");
|
|
125
191
|
}
|
|
126
|
-
throw e;
|
|
127
192
|
}
|
|
128
193
|
}
|
|
129
194
|
this._connected_safari.forEach((instance) => {
|
|
130
|
-
this.
|
|
131
|
-
});
|
|
132
|
-
this._swc_connected_instance.forEach((instance) => {
|
|
133
|
-
this._invokeOnConnectedSwcAppStarted(instance);
|
|
195
|
+
this._connected(instance);
|
|
134
196
|
});
|
|
135
197
|
if (!this._routerSubscription && this.router) {
|
|
136
|
-
this._routerSubscription = this.router.observable.subscribe((route) => {
|
|
137
|
-
this._handleRouteChange(route);
|
|
138
|
-
});
|
|
139
198
|
const config2 = this.__swc_engine.config;
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
199
|
+
this._routerSubscription = this.router.observable.subscribe(async (route) => {
|
|
200
|
+
if (route.triggerPoint === "end") {
|
|
201
|
+
await this._handleRouteChange(route);
|
|
202
|
+
}
|
|
203
|
+
});
|
|
204
|
+
if (config2?.path) {
|
|
205
|
+
this.router.go(config2.path);
|
|
147
206
|
}
|
|
148
207
|
}
|
|
149
208
|
}
|
|
209
|
+
// async _invokeOnConnectedSwcAppStarted(instance: any) {
|
|
210
|
+
// this._swcAppStartedInvocations++;
|
|
211
|
+
// try {
|
|
212
|
+
// // 이미 시작된 인스턴스라면 스킵 (비동기 병렬 중복 호출 방지)
|
|
213
|
+
// if (this._swc_started_instances.has(instance)) return;
|
|
214
|
+
// this._swc_started_instances.add(instance);
|
|
215
|
+
//
|
|
216
|
+
// const startedMethods = findAllLifecycleMetadata(instance, ON_CONNECTED_SWC_APP_METADATA_KEY);
|
|
217
|
+
// if (startedMethods) {
|
|
218
|
+
// const ps = startedMethods.map(m => instance._invokeLifecycleMethod(m));
|
|
219
|
+
// await Promise.allSettled(ps);
|
|
220
|
+
// }
|
|
221
|
+
// } finally {
|
|
222
|
+
// this._swcAppStartedInvocations--;
|
|
223
|
+
// }
|
|
224
|
+
// }
|
|
150
225
|
connectedCallback() {
|
|
151
|
-
if (super.connectedCallback)
|
|
152
|
-
super.connectedCallback();
|
|
226
|
+
if (super.connectedCallback) super.connectedCallback();
|
|
153
227
|
const configStr = this.getAttribute("swc-get-application-config");
|
|
154
228
|
const win = this.ownerDocument?.defaultView || window;
|
|
155
229
|
if (configStr && win) {
|
|
@@ -167,8 +241,7 @@ function SwcAppMixin(Base) {
|
|
|
167
241
|
this.__swc_engine?.config?.onConnected?.(this);
|
|
168
242
|
}
|
|
169
243
|
disconnectedCallback() {
|
|
170
|
-
if (super.disconnectedCallback)
|
|
171
|
-
super.disconnectedCallback();
|
|
244
|
+
if (super.disconnectedCallback) super.disconnectedCallback();
|
|
172
245
|
this._routerSubscription?.unsubscribe();
|
|
173
246
|
this._routerSubscription = void 0;
|
|
174
247
|
this._lastRouterEvent = void 0;
|
|
@@ -207,7 +280,7 @@ function SwcAppMixin(Base) {
|
|
|
207
280
|
}
|
|
208
281
|
let filterMatched = true;
|
|
209
282
|
if (filter && typeMatched) {
|
|
210
|
-
filterMatched = filter(message);
|
|
283
|
+
filterMatched = filter(message, instance);
|
|
211
284
|
}
|
|
212
285
|
if (typeMatched && filterMatched && typeof instance[methodName] === "function") {
|
|
213
286
|
instance[methodName](message);
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/elements/SwcAppMixin.ts"],
|
|
4
|
-
"sourcesContent": ["import { SwcAppEngine, SwcAttributeConfigType, SwcConfigType } from './SwcAppEngine';\nimport { SwcAppInterface, SwcAppMessage } from '../types';\nimport { SwcUtils } from '../utils/Utils';\nimport { FunctionUtils, Subscription } from '@dooboostore/core';\nimport { Router, RouterEventType } from '@dooboostore/core-web';\nimport { ON_CONNECTED_SWC_APP_METADATA_KEY, findAllLifecycleMetadata } from '../decorators/lifecycles';\nimport { getSubscribeSwcAppRouteChangeWhileConnectedMetadata } from '../decorators/subscribeSwcAppRouteChangeWhileConnected';\nimport { getSubscribeSwcAppMessageWhileConnectedMetadata } from '../decorators/subscribeSwcAppMessageWhileConnected';\n\nexport function SwcAppMixin<T extends { new (...args: any[]): HTMLElement }>(Base: T) {\n //@ts-ignore\n return class 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\n /*\n 사파리 is 일경우\n <script src=\"https://unpkg.com/@ungap/custom-elements\"></script>\n 이걸사용하는데 is 대응하는거다 그런데 이때 처리되는 순서가 크롬이나 표준에서는 부모부터 만들어지고 자식들이 만들어지는데\n 저 polyfill에서는 자식부터 만들어지고 부모가 만들어진다 is일때 아 .. 이문제때문에 자식이 _connected_safari 에 강제로 자기자식넣어준다\n */\n _connected_safari = [];\n get simpleApplication() {\n return this.__swc_engine.simpleApplication;\n }\n get router() {\n return this.__swc_engine.router;\n }\n\n _invokeRouteChangeSubscribers(instance: any, re: RouterEventType) {\n const routeChangeSubscribers = getSubscribeSwcAppRouteChangeWhileConnectedMetadata(instance);\n if (routeChangeSubscribers && Array.isArray(routeChangeSubscribers)) {\n routeChangeSubscribers.forEach((metadata: any) => {\n const methodName = metadata.propertyKey || metadata;\n const pathPattern = metadata.pathPattern;\n const filter = metadata.filter;\n\n // Path pattern matching (support both string and array)\n let pathMatched = false;\n let pathData: any = null;\n\n if (!pathPattern) {\n // pathPattern이 없으면 모든 경로 매칭 (와일드카드)\n pathMatched = true;\n pathData = {};\n } else if (Array.isArray(pathPattern)) {\n // 배열: 하나라도 매칭되면 OK\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 // 문자열\n pathData = SwcUtils.parsePathPattern(pathPattern, re.path || '/');\n pathMatched = pathData !== null;\n }\n\n // Filter validation\n const filterPassed = !filter || filter(this.router!);\n\n // Invoke method if conditions pass\n if (pathMatched && filterPassed) {\n instance[methodName]?.({...re, pathData: pathData});\n }\n });\n }\n }\n\n _connected(instance: any) {\n // console.log('appmixin--> connected', this, instance);\n if (instance) {\n this._swc_connected_instance.add(instance);\n if (this.simpleApplication) {\n this._invokeOnConnectedSwcAppStarted(instance);\n // Notify current route subscribers immediately after connection\n if (this.router && this._lastRouterEvent) {\n this._invokeRouteChangeSubscribers(instance, this._lastRouterEvent);\n }\n }\n }\n }\n\n _disconnected(instance: any) {\n if (instance) {\n this._swc_connected_instance.delete(instance);\n }\n }\n\n _handleRouteChange(route: RouterEventType) {\n if (route.triggerPoint === 'end') {\n // Iterate through all connected component instances\n this._swc_connected_instance.forEach((instance: any) => {\n this._invokeRouteChangeSubscribers(instance, route);\n });\n }\n\n // Save last router event\n this._lastRouterEvent = route;\n }\n\n async connect(config?: SwcAttributeConfigType) {\n const swcConfig = {\n routeType: 'element',\n window: config.window,\n ...config\n } as SwcConfigType;\n\n const mode = config?.connectMode || 'direct';\n\n if (mode === 'direct') {\n await this.__swc_engine.connect(swcConfig);\n this.setAttribute('swc-connect-mode', 'direct');\n } else if (mode === 'swap' && !this.parentNode) {\n await this.__swc_engine.connect(swcConfig);\n this.setAttribute('swc-connect-mode', 'direct');\n\n const clonedApp = this.cloneNode(true) as any;\n clonedApp.style.display = 'none';\n this.parentNode.insertBefore(clonedApp, this.nextSibling);\n\n try {\n await clonedApp.connect({ ...(config || {}), connectMode: 'direct' });\n if (this.parentNode) {\n this.parentNode.removeChild(this);\n }\n clonedApp.setAttribute('swc-connect-mode', 'swap');\n clonedApp.style.display = '';\n } catch (e) {\n if (clonedApp.parentNode) {\n clonedApp.parentNode.removeChild(clonedApp);\n }\n throw e;\n }\n }\n\n // 사파리일떄 예외이다 is 일때 polyfill되는데 이떄 부모부터 만들어지는게 아니라 자식부터 만들어진다 그래서 부모가 만들어질때 자식들이 이미 만들어져있어서 부모가 자식들을 등록해주는 형태로 강제로 등록해준다\n this._connected_safari.forEach((instance: any) => {\n this._swc_connected_instance.add(instance);\n });\n // Invoke @onConnectedSwcApp lifecycle methods on all connected component instances\n // const hostSet = SwcUtils.getHostSet(this as any);\n this._swc_connected_instance.forEach((instance: any) => {\n this._invokeOnConnectedSwcAppStarted(instance);\n });\n\n\n // Subscribe to router changes after connect\n if (!this._routerSubscription && this.router) {\n this._routerSubscription = this.router.observable.subscribe((route: RouterEventType) => {\n //@ts-ignore\n // console.log('Route changed:', route, this._swcId);\n this._handleRouteChange(route);\n });\n // Navigate to initial path if specified\n const config = this.__swc_engine.config;\n // if (config?.path) {\n // this.router.go(config.path);\n // }\n }\n }\n\n _invokeOnConnectedSwcAppStarted(instance: any) {\n const startedMethods = findAllLifecycleMetadata(instance, ON_CONNECTED_SWC_APP_METADATA_KEY);\n if (startedMethods) {\n for (const m of startedMethods) {\n instance._invokeLifecycleMethod(m);\n }\n }\n }\n\n connectedCallback() {\n // @ts-ignore\n if (super.connectedCallback) 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 // console.log('vvvvvvvvvvvvvvvv->>>>', SwcUtils.findNearestSwcHost(this.host), SwcUtils.getHostSet(this.host))\n const userConfig = FunctionUtils.executeReturn({\n script: configStr,\n context: this,\n args: SwcUtils.getHelperAndHostSet(win, this)\n });\n this.connect(userConfig);\n } catch (e) {\n console.error('[SWC-APP-ENGINE] Script execution failed:', e);\n }\n }\n\n this.__swc_engine?.config?.onConnected?.(this);\n }\n\n disconnectedCallback() {\n // @ts-ignore\n if (super.disconnectedCallback) super.disconnectedCallback();\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 }\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 // 메시지를 모든 connected component instances로 분배\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: any) => {\n const methodName = metadata.propertyKey;\n const messageType = metadata.messageType;\n const filter = metadata.filter;\n\n // 메시지 타입 확인\n let typeMatched = false;\n if (!messageType) {\n // messageType이 없으면 모든 메시지 매칭 (와일드카드)\n typeMatched = true;\n } else if (message.type === messageType) {\n typeMatched = true;\n }\n\n // 필터 적용\n let filterMatched = true;\n if (filter && typeMatched) {\n filterMatched = filter(message);\n }\n\n // 조건을 만족하면 메서드 호출\n if (typeMatched && filterMatched && typeof instance[methodName] === 'function') {\n instance[methodName](message);\n }\n });\n }\n }\n };\n}\n"],
|
|
5
|
-
"mappings": "
|
|
4
|
+
"sourcesContent": ["import {SwcAppEngine, SwcAttributeConfigType, SwcConfigType} from './SwcAppEngine';\nimport {SwcAppInterface, SwcAppMessage} from '../types';\nimport {SwcUtils} from '../utils/Utils';\nimport {debounceTimeIntervalLock, FunctionUtils, Subscription} from '@dooboostore/core';\nimport {RouterEventType} from '@dooboostore/core-web';\nimport {getSubscribeSwcAppRouteChangeWhileConnectedMetadata} from '../decorators/subscribeSwcAppRouteChangeWhileConnected';\nimport {getSubscribeSwcAppMessageWhileConnectedMetadata} from '../decorators/subscribeSwcAppMessageWhileConnected';\n\nexport function SwcAppMixin<T extends { new(...args: any[]): HTMLElement }>(Base: T) {\n //@ts-ignore\n return class extends Base implements SwcAppInterface {\n __swc_engine = new SwcAppEngine(this as any);\n _swc_connected_instance = new Set<any>();\n // _swc_notified_routes = new WeakMap<any, RouterEventType>();\n _routerSubscription?: Subscription;\n _lastRouterEvent?: RouterEventType;\n _routeChangeInvocations = 0;\n _connectedInvocations = 0;\n\n _childrenRouteChangedInterval: any;\n _childrenConnectedDoneInterval: any;\n\n /*\n \uC0AC\uD30C\uB9AC is \uC77C\uACBD\uC6B0\n <script src=\"https://unpkg.com/@ungap/custom-elements\"></script>\n \uC774\uAC78\uC0AC\uC6A9\uD558\uB294\uB370 is \uB300\uC751\uD558\uB294\uAC70\uB2E4 \uADF8\uB7F0\uB370 \uC774\uB54C \uCC98\uB9AC\uB418\uB294 \uC21C\uC11C\uAC00 \uD06C\uB86C\uC774\uB098 \uD45C\uC900\uC5D0\uC11C\uB294 \uBD80\uBAA8\uBD80\uD130 \uB9CC\uB4E4\uC5B4\uC9C0\uACE0 \uC790\uC2DD\uB4E4\uC774 \uB9CC\uB4E4\uC5B4\uC9C0\uB294\uB370\n \uC800 polyfill\uC5D0\uC11C\uB294 \uC790\uC2DD\uBD80\uD130 \uB9CC\uB4E4\uC5B4\uC9C0\uACE0 \uBD80\uBAA8\uAC00 \uB9CC\uB4E4\uC5B4\uC9C4\uB2E4 is\uC77C\uB54C \uC544 .. \uC774\uBB38\uC81C\uB54C\uBB38\uC5D0 \uC790\uC2DD\uC774 _connected_safari \uC5D0 \uAC15\uC81C\uB85C \uC790\uAE30\uC790\uC2DD\uB123\uC5B4\uC900\uB2E4\n */\n _connected_safari = [];\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: any, re: RouterEventType) {\n if (instance.isConnected === false) return;\n\n this._routeChangeInvocations++;\n\n if (this._childrenRouteChangedInterval) {\n clearInterval(this._childrenRouteChangedInterval);\n }\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 {setInterval: window.setInterval, clearInterval: window.clearInterval}\n // {setInterval: window.setInterval, clearInterval: window.clearInterval}\n );\n\n\n // debounceTimeIntervalLock({\n // unlockChecker: () => this._routeChangeInvocations === 0,\n // unlocked: () => this.config.onChildrenRouteChanged(re, this)\n // }, {\n // intervalId: this._childrenRouteChangedInterval,\n // setIntervalId: (id) => this._childrenRouteChangedInterval = id,\n // intervalTime: this.config?.childrenRouteChangedCheckIntervalTime ?? 30\n // }, {\n // setInterval: window.setInterval,\n // clearInterval: window.clearInterval\n // });\n\n try {\n // if (this._swc_notified_routes.get(instance) === re) {\n // return;\n // }\n // this._swc_notified_routes.set(instance, re);\n\n const routeChangeSubscribers = getSubscribeSwcAppRouteChangeWhileConnectedMetadata(instance);\n if (routeChangeSubscribers && Array.isArray(routeChangeSubscribers)) {\n const ps = routeChangeSubscribers.map(async metadata => {\n const methodName = metadata.propertyKey;\n let pathPattern = metadata.options?.path as any;\n const filter = metadata.options?.filter;\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 filterPassed = !filter || filter(this.router!, instance);\n\n if (pathMatched && filterPassed && instance[methodName]) {\n await instance[methodName]({...re, pathData: pathData});\n }\n });\n await Promise.allSettled(ps);\n }\n } finally {\n this._routeChangeInvocations--;\n }\n }\n\n async _connected(instance: any) {\n if (instance) {\n this._connectedInvocations++;\n this._swc_connected_instance.add(instance);\n\n if (this._childrenConnectedDoneInterval) {\n clearInterval(this._childrenConnectedDoneInterval);\n }\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 {setInterval: window.setInterval, clearInterval: window.clearInterval}\n );\n\n\n if (this.simpleApplication) {\n try {\n // await this._invokeOnConnectedSwcAppStarted(instance);\n\n if (this.router && this._lastRouterEvent) {\n await this._invokeRouteChangeSubscribers(instance, this._lastRouterEvent!);\n }\n } catch (e) {\n throw e;\n }\n }\n }\n }\n\n async _connectedDone(instance: any) {\n try {\n // \uB0B4\uBD80 \uC5F0\uACB0 \uCC98\uB9AC \uB85C\uC9C1\uC774 \uC788\uB2E4\uBA74 \uC5EC\uAE30\uC5D0 \uCD94\uAC00\n } finally {\n this._connectedInvocations--;\n }\n }\n\n _disconnected(instance: any) {\n // console.log('_disconnected', instance);\n if (instance) {\n this._swc_connected_instance.delete(instance);\n // this._swc_notified_routes.delete(instance);\n }\n }\n\n async _handleRouteChange(route: RouterEventType) {\n // Save last router event\n this._lastRouterEvent = route;\n // if (route.triggerPoint === 'end') {\n // Iterate through all connected component instances\n const swcConnectedInstance = Array.from(this._swc_connected_instance);\n // console.log('routing handle-->', swcConnectedInstance)\n const ps = swcConnectedInstance.map((instance: any) => this._invokeRouteChangeSubscribers(instance, route));\n await Promise.allSettled(ps);\n // }\n }\n\n async connect(config?: SwcAttributeConfigType) {\n const swcConfig = {\n routeType: 'element',\n window: config?.window,\n ...config\n } as SwcConfigType;\n\n const mode = config?.connectMode || 'direct';\n\n if (mode === 'direct') {\n await this.__swc_engine.connect(swcConfig);\n this.setAttribute('swc-connect-mode', 'direct');\n } else if (mode === 'swap' || mode === 'clear-swap') {\n if (!this.parentNode) {\n // \uBD80\uBAA8\uAC00 \uC5C6\uC73C\uBA74 swap\uC744 \uD560 \uC218 \uC5C6\uC73C\uBBC0\uB85C direct\uB85C \uD3F4\uBC31\uD569\uB2C8\uB2E4.\n await this.__swc_engine.connect(swcConfig);\n this.setAttribute('swc-connect-mode', 'direct');\n } else {\n // 1. \uD604\uC7AC SSR \uC0C1\uD0DC(\uD654\uBA74)\uB97C \uADF8\uB300\uB85C \uC720\uC9C0\uD55C \uCC44\uB85C, \uBC31\uADF8\uB77C\uC6B4\uB4DC\uC6A9 \uD074\uB860\uC744 \uB9CC\uB4ED\uB2C8\uB2E4.\n const clonedApp = this.cloneNode(mode === 'swap') as any; // clear-swap \uBAA8\uB4DC\uBA74 \uC790\uC2DD \uB178\uB4DC\uB97C \uD074\uB860\uD558\uC9C0 \uC54A\uC74C(false)\n clonedApp.style.display = 'none';\n\n // 2. DOM\uC5D0 \uD074\uB860\uC744 \uBAB0\uB798 \uBD99\uC785\uB2C8\uB2E4.\n this.parentNode.insertBefore(clonedApp, this.nextSibling);\n\n try {\n // 3. \uD074\uB860\uC744 direct \uBAA8\uB4DC\uB85C \uC5F0\uACB0(\uCD08\uAE30\uD654/\uB80C\uB354\uB9C1) \uC2DC\uD0B5\uB2C8\uB2E4.\n await clonedApp.connect({...(config || {}), connectMode: 'direct'});\n\n // 4. \uD074\uB860\uC758 \uB80C\uB354\uB9C1\uC774 \uC644\uC804\uD788 \uB05D\uB098\uBA74, \uAE30\uC874 SSR \uD654\uBA74(this)\uC744 \uC9C0\uC6B0\uACE0 \uD074\uB860\uC744 \uBCF4\uC5EC\uC90D\uB2C8\uB2E4.\n if (this.parentNode) {\n this.parentNode.removeChild(this);\n }\n clonedApp.style.display = '';\n clonedApp.setAttribute('swc-connect-mode', mode);\n\n // \u2605 \uB9E4\uC6B0 \uC911\uC694: \uAD50\uCCB4\uAC00 \uC644\uB8CC\uB418\uC5C8\uC73C\uBBC0\uB85C \uAE30\uC874 \uC571(this)\uC740 \uC5EC\uAE30\uC11C \uC989\uC2DC \uC885\uB8CC\uD558\uC5EC \uBD88\uD544\uC694\uD55C \uB77C\uC6B0\uD130/\uC774\uBCA4\uD2B8 \uAD6C\uB3C5\uC744 \uB9C9\uC544\uC57C \uD569\uB2C8\uB2E4!\n return;\n } catch (e) {\n // \uC2E4\uD328 \uC2DC \uD074\uB860\uC744 \uC9C0\uC6B0\uACE0 \uC6D0\uBCF8\uC744 direct\uB85C \uAC15\uC81C \uC5F0\uACB0\uD569\uB2C8\uB2E4.\n if (clonedApp.parentNode) {\n clonedApp.parentNode.removeChild(clonedApp);\n }\n await this.__swc_engine.connect(swcConfig);\n this.setAttribute('swc-connect-mode', 'direct');\n }\n }\n }\n\n // \uC0AC\uD30C\uB9AC\uC77C\uB584 \uC608\uC678\uC774\uB2E4 is \uC77C\uB54C polyfill\uB418\uB294\uB370 \uC774\uB584 \uBD80\uBAA8\uBD80\uD130 \uB9CC\uB4E4\uC5B4\uC9C0\uB294\uAC8C \uC544\uB2C8\uB77C \uC790\uC2DD\uBD80\uD130 \uB9CC\uB4E4\uC5B4\uC9C4\uB2E4 \uADF8\uB798\uC11C \uBD80\uBAA8\uAC00 \uB9CC\uB4E4\uC5B4\uC9C8\uB54C \uC790\uC2DD\uB4E4\uC774 \uC774\uBBF8 \uB9CC\uB4E4\uC5B4\uC838\uC788\uC5B4\uC11C \uBD80\uBAA8\uAC00 \uC790\uC2DD\uB4E4\uC744 \uB4F1\uB85D\uD574\uC8FC\uB294 \uD615\uD0DC\uB85C \uAC15\uC81C\uB85C \uB4F1\uB85D\uD574\uC900\uB2E4\n this._connected_safari.forEach((instance: any) => {\n // console.log('safari!!!!!!!!!!', instance)\n this._connected(instance);\n // this._swc_connected_instance.add(instance);\n });\n // Invoke @onConnectedSwcApp lifecycle methods on all connected component instances\n // const hostSet = SwcUtils.getHostSet(this as any);\n\n // const scis = Array.from(this._swc_connected_instance);\n // await Promise.allSettled(scis.map(instance => this._invokeOnConnectedSwcAppStarted(instance)));\n\n // this._swc_connected_instance.forEach((instance: any) => {\n // this._invokeOnConnectedSwcAppStarted(instance);\n // });\n\n // Subscribe to router changes after connect\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] Router event received:', route.triggerPoint);\n if (route.triggerPoint === 'end') {\n // 1. \uBAA8\uB4E0 \uAE30\uC874 \uC5F0\uACB0\uB41C \uC790\uC2DD\uB4E4\uC5D0\uAC8C \uB77C\uC6B0\uD2B8 \uC774\uBCA4\uD2B8 \uC54C\uB9BC\n await this._handleRouteChange(route);\n }\n });\n\n // Navigate to initial path if specified\n if (config?.path) {\n // console.log('[DEBUG] Navigating to initial path:', config.path);\n this.router.go(config.path);\n }\n }\n }\n\n // async _invokeOnConnectedSwcAppStarted(instance: any) {\n // this._swcAppStartedInvocations++;\n // try {\n // // \uC774\uBBF8 \uC2DC\uC791\uB41C \uC778\uC2A4\uD134\uC2A4\uB77C\uBA74 \uC2A4\uD0B5 (\uBE44\uB3D9\uAE30 \uBCD1\uB82C \uC911\uBCF5 \uD638\uCD9C \uBC29\uC9C0)\n // if (this._swc_started_instances.has(instance)) return;\n // this._swc_started_instances.add(instance);\n //\n // const startedMethods = findAllLifecycleMetadata(instance, ON_CONNECTED_SWC_APP_METADATA_KEY);\n // if (startedMethods) {\n // const ps = startedMethods.map(m => instance._invokeLifecycleMethod(m));\n // await Promise.allSettled(ps);\n // }\n // } finally {\n // this._swcAppStartedInvocations--;\n // }\n // }\n\n connectedCallback() {\n // this.innerHTML='';\n // @ts-ignore\n if (super.connectedCallback) 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 // console.log('vvvvvvvvvvvvvvvv->>>>', SwcUtils.findNearestSwcHost(this.host), SwcUtils.getHostSet(this.host))\n const userConfig = FunctionUtils.executeReturn({\n script: configStr,\n context: this,\n args: SwcUtils.getHelperAndHostSet(win, this)\n });\n this.connect(userConfig);\n } catch (e) {\n console.error('[SWC-APP-ENGINE] Script execution failed:', e);\n }\n }\n\n this.__swc_engine?.config?.onConnected?.(this);\n }\n\n disconnectedCallback() {\n // @ts-ignore\n if (super.disconnectedCallback) super.disconnectedCallback();\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 }\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 // \uBA54\uC2DC\uC9C0\uB97C \uBAA8\uB4E0 connected component instances\uB85C \uBD84\uBC30\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 // \uBA54\uC2DC\uC9C0 \uD0C0\uC785 \uD655\uC778\n let typeMatched = false;\n if (!messageType) {\n // messageType\uC774 \uC5C6\uC73C\uBA74 \uBAA8\uB4E0 \uBA54\uC2DC\uC9C0 \uB9E4\uCE6D (\uC640\uC77C\uB4DC\uCE74\uB4DC)\n typeMatched = true;\n } else if (message.type === messageType) {\n typeMatched = true;\n }\n\n // \uD544\uD130 \uC801\uC6A9\n let filterMatched = true;\n if (filter && typeMatched) {\n filterMatched = filter(message, instance);\n }\n\n // \uC870\uAC74\uC744 \uB9CC\uC871\uD558\uBA74 \uBA54\uC11C\uB4DC \uD638\uCD9C\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
6
|
"names": ["config"]
|
|
7
7
|
}
|
|
@@ -26,9 +26,10 @@ class SwcAsync extends HTMLTemplateElement {
|
|
|
26
26
|
setValue(valueAttr) {
|
|
27
27
|
this.executeAsync(this._value);
|
|
28
28
|
}
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
29
|
+
// @changedAttributeHost('replace-wrap')
|
|
30
|
+
// private setReplaceWrap() {
|
|
31
|
+
// this.executeAsync(this._value);
|
|
32
|
+
// }
|
|
32
33
|
executeAsync(result = this._value) {
|
|
33
34
|
if (result === void 0 || result === null) {
|
|
34
35
|
this.refresh("default");
|
|
@@ -50,11 +51,19 @@ class SwcAsync extends HTMLTemplateElement {
|
|
|
50
51
|
}
|
|
51
52
|
}
|
|
52
53
|
replaceExpressions(html, groupArgs, context, wrap) {
|
|
53
|
-
|
|
54
|
+
let config = void 0;
|
|
55
|
+
if (wrap) {
|
|
56
|
+
config = {
|
|
57
|
+
expression: {
|
|
58
|
+
replace: { start: `${wrap.start}`, end: `${wrap.end}` },
|
|
59
|
+
callReturn: { start: `${wrap.start}=`, end: `${wrap.end}` },
|
|
60
|
+
call: { start: `${wrap.start}@`, end: `${wrap.end}` }
|
|
61
|
+
}
|
|
62
|
+
};
|
|
63
|
+
}
|
|
54
64
|
const ae = new import_core.ActionExpression(html, config);
|
|
55
|
-
const filterOptions = wrap ? { type: "replace", wrap } : "replace";
|
|
56
65
|
const win = this.ownerDocument?.defaultView || window;
|
|
57
|
-
for (const expr of ae.getExpressions(
|
|
66
|
+
for (const expr of ae.getExpressions("replace")) {
|
|
58
67
|
try {
|
|
59
68
|
const value = import_core.FunctionUtils.executeReturn({
|
|
60
69
|
script: import_core_web.ConvertUtils.decodeHtmlEntity(expr.script, win.document),
|
|
@@ -69,9 +78,8 @@ class SwcAsync extends HTMLTemplateElement {
|
|
|
69
78
|
return ae.getUnprocessedTemplate();
|
|
70
79
|
}
|
|
71
80
|
refresh(state = "default") {
|
|
72
|
-
console.log("rrrrrrrrrrrrrrrrr", state);
|
|
73
81
|
this.cleanup();
|
|
74
|
-
const portal = this
|
|
82
|
+
const portal = import_Utils.SwcUtils.getParentContainer(this);
|
|
75
83
|
if (!portal)
|
|
76
84
|
return;
|
|
77
85
|
const win = this.ownerDocument?.defaultView || window;
|
|
@@ -79,12 +87,16 @@ class SwcAsync extends HTMLTemplateElement {
|
|
|
79
87
|
const t = this.content.querySelector(`template[is="swc-${state}"]`);
|
|
80
88
|
if (t) {
|
|
81
89
|
let htmlString = t.innerHTML;
|
|
82
|
-
const groupArgs = { ...helperSet, $value: this._value, $state: state };
|
|
83
|
-
htmlString = this.replaceExpressions(htmlString, groupArgs, this, this.
|
|
90
|
+
const groupArgs = { ...helperSet, $value: this._value, $state: state, $templateHost: this };
|
|
91
|
+
htmlString = this.replaceExpressions(htmlString, groupArgs, this, { start: this._replaceWrapStart ?? "{#{", end: this._replaceWrapEnd ?? "}#}" });
|
|
84
92
|
const temp = this.ownerDocument?.createElement("template") || document.createElement("template");
|
|
85
93
|
temp.innerHTML = htmlString;
|
|
86
94
|
const content = temp.content;
|
|
87
95
|
this._nodes = Array.from(content.childNodes);
|
|
96
|
+
this._nodes.forEach((node) => {
|
|
97
|
+
if (node instanceof HTMLElement)
|
|
98
|
+
node.__template_swc_host = this;
|
|
99
|
+
});
|
|
88
100
|
portal.insertBefore(content, this.nextSibling);
|
|
89
101
|
}
|
|
90
102
|
}
|
|
@@ -101,19 +113,17 @@ __decorate([
|
|
|
101
113
|
__metadata("design:type", Object)
|
|
102
114
|
], SwcAsync.prototype, "_value", void 0);
|
|
103
115
|
__decorate([
|
|
104
|
-
(0, import_decorators.attributeHost)("replace-wrap"),
|
|
116
|
+
(0, import_decorators.attributeHost)("replace-wrap-start"),
|
|
105
117
|
__metadata("design:type", String)
|
|
106
|
-
], SwcAsync.prototype, "
|
|
118
|
+
], SwcAsync.prototype, "_replaceWrapStart", void 0);
|
|
119
|
+
__decorate([
|
|
120
|
+
(0, import_decorators.attributeHost)("replace-wrap-end"),
|
|
121
|
+
__metadata("design:type", String)
|
|
122
|
+
], SwcAsync.prototype, "_replaceWrapEnd", void 0);
|
|
107
123
|
__decorate([
|
|
108
124
|
(0, import_changedAttributeHost.changedAttributeHost)("value"),
|
|
109
125
|
__metadata("design:type", Function),
|
|
110
126
|
__metadata("design:paramtypes", [String]),
|
|
111
127
|
__metadata("design:returntype", void 0)
|
|
112
128
|
], SwcAsync.prototype, "setValue", null);
|
|
113
|
-
__decorate([
|
|
114
|
-
(0, import_changedAttributeHost.changedAttributeHost)("replace-wrap"),
|
|
115
|
-
__metadata("design:type", Function),
|
|
116
|
-
__metadata("design:paramtypes", []),
|
|
117
|
-
__metadata("design:returntype", void 0)
|
|
118
|
-
], SwcAsync.prototype, "setReplaceWrap", null);
|
|
119
129
|
//# sourceMappingURL=SwcAsync.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/elements/SwcAsync.ts"],
|
|
4
|
-
"sourcesContent": ["import { changedAttributeHost } from '../decorators/changedAttributeHost';\nimport { SwcUtils } from '../utils/Utils';\nimport { FunctionUtils, ActionExpression } from '@dooboostore/core';\nimport { ConvertUtils } from '@dooboostore/core-web';\nimport { attributeHost } from '../decorators';\n\nclass SwcAsync extends HTMLTemplateElement {\n @attributeHost('value')\n _value: any;\n
|
|
5
|
-
"mappings": "AAAA,kCAAqC;AACrC,mBAAyB;AACzB,kBAAgD;AAChD,sBAA6B;AAC7B,wBAA8B;;;;;;;;;;AAE9B,MAAM,iBAAiB,oBAAmB;EAA1C,cAAA;;
|
|
4
|
+
"sourcesContent": ["import { changedAttributeHost } from '../decorators/changedAttributeHost';\nimport { SwcUtils } from '../utils/Utils';\nimport { FunctionUtils, ActionExpression } from '@dooboostore/core';\nimport { ConvertUtils } from '@dooboostore/core-web';\nimport { attributeHost } from '../decorators';\n\nclass SwcAsync extends HTMLTemplateElement {\n @attributeHost('value')\n _value: any;\n @attributeHost('replace-wrap-start')\n _replaceWrapStart: string | null;\n @attributeHost('replace-wrap-end')\n _replaceWrapEnd: string | null; resultValue?: any;\n\n get value(): boolean {\n return this._value;\n }\n\n set value(nv: any) {\n this.executeAsync(nv);\n }\n\n private _nodes: Node[] = [];\n\n @changedAttributeHost('value')\n private setValue(valueAttr?: string | null) {\n this.executeAsync(this._value);\n }\n\n // @changedAttributeHost('replace-wrap')\n // private setReplaceWrap() {\n // this.executeAsync(this._value);\n // }\n\n private executeAsync(result: any = this._value) {\n if (result === undefined || result === null) {\n this.refresh('default');\n return;\n }\n\n if (result instanceof Promise) {\n this.refresh('loading');\n result\n .then(v => {\n this.resultValue = v;\n this.refresh('success');\n })\n .catch(e => {\n console.error('[SWC-ASYNC] Promise rejected:', e);\n this.resultValue = e;\n this.refresh('error');\n });\n } else {\n this.resultValue = result;\n this.refresh('success');\n }\n }\n\n private replaceExpressions(html: string, groupArgs: any, context: any, wrap: {start: string, end: string}): string {\n let config: any = undefined;\n if (wrap) {\n config = {\n expression: {\n replace: { start: `${wrap.start}`, end: `${wrap.end}` },\n callReturn: { start: `${wrap.start}=`, end: `${wrap.end}` },\n call: { start: `${wrap.start}@`, end: `${wrap.end}` }\n }\n };\n }\n const ae = new ActionExpression(html, config);\n const win = this.ownerDocument?.defaultView || window;\n\n // @ts-ignore\n for (const expr of ae.getExpressions('replace')) {\n try {\n const value = FunctionUtils.executeReturn({\n script: ConvertUtils.decodeHtmlEntity(expr.script, win.document),\n context,\n args: groupArgs\n });\n ae.replace(expr, String(value));\n } catch (e) {\n console.error(`[SWC] Failed to execute ${expr.original}:`, e);\n }\n }\n return ae.getUnprocessedTemplate();\n }\n\n refresh(state: string = 'default') {\n // console.log('rrrrrrrrrrrrrrrrr', state);\n this.cleanup();\n const portal = SwcUtils.getParentContainer(this);\n if (!portal) return;\n\n const win = this.ownerDocument?.defaultView || window;\n const helperSet = SwcUtils.getHelperAndHostSet(win, this);\n\n const t = this.content.querySelector(`template[is=\"swc-${state}\"]`) as HTMLTemplateElement;\n if (t) {\n let htmlString = t.innerHTML;\n const groupArgs = { ...helperSet, $value: this._value, $state: state, $templateHost: this };\n\n htmlString = this.replaceExpressions(htmlString, groupArgs, this, {start:this._replaceWrapStart ?? '{#{', end: this._replaceWrapEnd ?? '}#}'});\n\n const temp = this.ownerDocument?.createElement('template') || document.createElement('template');\n temp.innerHTML = htmlString;\n const content = temp.content;\n\n this._nodes = Array.from(content.childNodes);\n this._nodes.forEach((node: any) => {\n if (node instanceof HTMLElement) (node as any).__template_swc_host = this;\n });\n\n portal.insertBefore(content, this.nextSibling);\n }\n }\n\n private cleanup() {\n this._nodes.forEach(n => n.parentElement?.removeChild(n));\n this._nodes = [];\n }\n\n disconnectedCallback() {\n this.cleanup();\n }\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|