@dooboostore/simple-web-component 1.0.34 → 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.
Files changed (107) hide show
  1. package/README.md +23 -30
  2. package/dist/cjs/decorators/applyNode.js +4 -0
  3. package/dist/cjs/decorators/applyNode.js.map +2 -2
  4. package/dist/cjs/decorators/attribute.js +1 -1
  5. package/dist/cjs/decorators/attribute.js.map +2 -2
  6. package/dist/cjs/decorators/changedAttributeHost.js.map +2 -2
  7. package/dist/cjs/decorators/elementDefine.js +225 -180
  8. package/dist/cjs/decorators/elementDefine.js.map +2 -2
  9. package/dist/cjs/decorators/emitCustomEvent.js +10 -4
  10. package/dist/cjs/decorators/emitCustomEvent.js.map +2 -2
  11. package/dist/cjs/decorators/lifecycles.js +15 -17
  12. package/dist/cjs/decorators/lifecycles.js.map +2 -2
  13. package/dist/cjs/decorators/subscribeSwcAppRouteChangeWhileConnected.js +2 -2
  14. package/dist/cjs/decorators/subscribeSwcAppRouteChangeWhileConnected.js.map +2 -2
  15. package/dist/cjs/elements/SwcAppEngine.js +8 -2
  16. package/dist/cjs/elements/SwcAppEngine.js.map +2 -2
  17. package/dist/cjs/elements/SwcAppMixin.js +120 -65
  18. package/dist/cjs/elements/SwcAppMixin.js.map +2 -2
  19. package/dist/cjs/elements/SwcAsync.js +28 -18
  20. package/dist/cjs/elements/SwcAsync.js.map +2 -2
  21. package/dist/cjs/elements/SwcChoose.js +51 -32
  22. package/dist/cjs/elements/SwcChoose.js.map +2 -2
  23. package/dist/cjs/elements/SwcIf.js +52 -30
  24. package/dist/cjs/elements/SwcIf.js.map +2 -2
  25. package/dist/cjs/elements/SwcLoop.js +109 -35
  26. package/dist/cjs/elements/SwcLoop.js.map +2 -2
  27. package/dist/cjs/elements/register.js +244 -117
  28. package/dist/cjs/elements/register.js.map +2 -2
  29. package/dist/cjs/router/ElementRouter.js +4 -2
  30. package/dist/cjs/router/ElementRouter.js.map +1 -1
  31. package/dist/cjs/types.js.map +1 -1
  32. package/dist/cjs/utils/Utils.js +18 -4
  33. package/dist/cjs/utils/Utils.js.map +2 -2
  34. package/dist/esm/decorators/applyNode.js +4 -0
  35. package/dist/esm/decorators/applyNode.js.map +2 -2
  36. package/dist/esm/decorators/attribute.js +1 -1
  37. package/dist/esm/decorators/attribute.js.map +2 -2
  38. package/dist/esm/decorators/changedAttributeHost.js.map +2 -2
  39. package/dist/esm/decorators/elementDefine.js +226 -181
  40. package/dist/esm/decorators/elementDefine.js.map +2 -2
  41. package/dist/esm/decorators/emitCustomEvent.js +10 -4
  42. package/dist/esm/decorators/emitCustomEvent.js.map +2 -2
  43. package/dist/esm/decorators/lifecycles.js +15 -17
  44. package/dist/esm/decorators/lifecycles.js.map +2 -2
  45. package/dist/esm/decorators/subscribeSwcAppRouteChangeWhileConnected.js +2 -2
  46. package/dist/esm/decorators/subscribeSwcAppRouteChangeWhileConnected.js.map +2 -2
  47. package/dist/esm/elements/SwcAppEngine.js +9 -2
  48. package/dist/esm/elements/SwcAppEngine.js.map +2 -2
  49. package/dist/esm/elements/SwcAppMixin.js +122 -66
  50. package/dist/esm/elements/SwcAppMixin.js.map +2 -2
  51. package/dist/esm/elements/SwcAsync.js +28 -18
  52. package/dist/esm/elements/SwcAsync.js.map +2 -2
  53. package/dist/esm/elements/SwcChoose.js +51 -32
  54. package/dist/esm/elements/SwcChoose.js.map +2 -2
  55. package/dist/esm/elements/SwcIf.js +53 -31
  56. package/dist/esm/elements/SwcIf.js.map +2 -2
  57. package/dist/esm/elements/SwcLoop.js +110 -36
  58. package/dist/esm/elements/SwcLoop.js.map +2 -2
  59. package/dist/esm/elements/register.js +244 -117
  60. package/dist/esm/elements/register.js.map +2 -2
  61. package/dist/esm/router/ElementRouter.js +5 -2
  62. package/dist/esm/router/ElementRouter.js.map +1 -1
  63. package/dist/esm/types.js.map +1 -1
  64. package/dist/esm/utils/Utils.js +18 -4
  65. package/dist/esm/utils/Utils.js.map +2 -2
  66. package/dist/esm-bundle/dooboostore-simple-web-component.esm.js +319 -276
  67. package/dist/esm-bundle/dooboostore-simple-web-component.esm.js.map +4 -4
  68. package/dist/types/decorators/applyNode.d.ts +1 -0
  69. package/dist/types/decorators/applyNode.d.ts.map +1 -1
  70. package/dist/types/decorators/changedAttributeHost.d.ts +1 -0
  71. package/dist/types/decorators/changedAttributeHost.d.ts.map +1 -1
  72. package/dist/types/decorators/elementDefine.d.ts.map +1 -1
  73. package/dist/types/decorators/emitCustomEvent.d.ts +10 -6
  74. package/dist/types/decorators/emitCustomEvent.d.ts.map +1 -1
  75. package/dist/types/decorators/lifecycles.d.ts +10 -7
  76. package/dist/types/decorators/lifecycles.d.ts.map +1 -1
  77. package/dist/types/decorators/subscribeSwcAppRouteChangeWhileConnected.d.ts +4 -5
  78. package/dist/types/decorators/subscribeSwcAppRouteChangeWhileConnected.d.ts.map +1 -1
  79. package/dist/types/elements/SwcAppEngine.d.ts +4 -1
  80. package/dist/types/elements/SwcAppEngine.d.ts.map +1 -1
  81. package/dist/types/elements/SwcAppMixin.d.ts +11 -8
  82. package/dist/types/elements/SwcAppMixin.d.ts.map +1 -1
  83. package/dist/types/elements/register.d.ts.map +1 -1
  84. package/dist/types/types.d.ts +1 -0
  85. package/dist/types/types.d.ts.map +1 -1
  86. package/dist/types/utils/Utils.d.ts +4 -1
  87. package/dist/types/utils/Utils.d.ts.map +1 -1
  88. package/dist/umd-bundle/dooboostore-simple-web-component.umd.js +319 -276
  89. package/dist/umd-bundle/dooboostore-simple-web-component.umd.js.map +4 -4
  90. package/package.json +4 -4
  91. package/src/decorators/applyNode.ts +13 -1
  92. package/src/decorators/attribute.ts +1 -1
  93. package/src/decorators/changedAttributeHost.ts +3 -2
  94. package/src/decorators/elementDefine.ts +397 -354
  95. package/src/decorators/emitCustomEvent.ts +29 -15
  96. package/src/decorators/lifecycles.ts +11 -10
  97. package/src/decorators/subscribeSwcAppRouteChangeWhileConnected.ts +10 -10
  98. package/src/elements/SwcAppEngine.ts +10 -3
  99. package/src/elements/SwcAppMixin.ts +177 -97
  100. package/src/elements/SwcAsync.ts +28 -17
  101. package/src/elements/SwcChoose.ts +71 -34
  102. package/src/elements/SwcIf.ts +59 -22
  103. package/src/elements/SwcLoop.ts +140 -27
  104. package/src/elements/register.ts +296 -98
  105. package/src/types.ts +1 -0
  106. package/src/utils/Utils.ts +23 -5
  107. 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,96 +25,141 @@ 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.__swc_engine = new import_SwcAppEngine.SwcAppEngine(this);
34
- this._swc_connected_instance = /* @__PURE__ */ new Set();
35
- this._swc_started_instances = /* @__PURE__ */ new WeakSet();
36
- this._swc_notified_routes = /* @__PURE__ */ new WeakMap();
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");
37
43
  /*
38
44
  사파리 is 일경우
39
45
  <script src="https://unpkg.com/@ungap/custom-elements"><\/script>
40
46
  이걸사용하는데 is 대응하는거다 그런데 이때 처리되는 순서가 크롬이나 표준에서는 부모부터 만들어지고 자식들이 만들어지는데
41
47
  저 polyfill에서는 자식부터 만들어지고 부모가 만들어진다 is일때 아 .. 이문제때문에 자식이 _connected_safari 에 강제로 자기자식넣어준다
42
48
  */
43
- this._connected_safari = [];
49
+ __publicField(this, "_connected_safari", []);
44
50
  }
45
51
  get simpleApplication() {
46
52
  return this.__swc_engine.simpleApplication;
47
53
  }
54
+ get config() {
55
+ return this.__swc_engine?.config;
56
+ }
48
57
  get router() {
49
- return this.__swc_engine.router;
58
+ return this.__swc_engine?.router;
50
59
  }
51
60
  async _invokeRouteChangeSubscribers(instance, re) {
52
- if (this._swc_notified_routes.get(instance) === re) return;
53
- this._swc_notified_routes.set(instance, re);
54
- const routeChangeSubscribers = (0, import_subscribeSwcAppRouteChangeWhileConnected.getSubscribeSwcAppRouteChangeWhileConnectedMetadata)(instance);
55
- if (routeChangeSubscribers && Array.isArray(routeChangeSubscribers)) {
56
- const ps = routeChangeSubscribers.map(async (metadata) => {
57
- const methodName = metadata.propertyKey;
58
- const pathPattern = metadata.pathPattern;
59
- const filter = metadata.filter;
60
- let pathMatched = false;
61
- let pathData = null;
62
- if (!pathPattern) {
63
- pathMatched = true;
64
- pathData = {};
65
- } else if (Array.isArray(pathPattern)) {
66
- for (const pattern of pathPattern) {
67
- const data = import_Utils.SwcUtils.parsePathPattern(pattern, re.path || "/");
68
- if (data !== null) {
69
- pathMatched = true;
70
- pathData = data;
71
- break;
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
+ }
72
99
  }
100
+ } else {
101
+ pathData = import_Utils.SwcUtils.parsePathPattern(pathPattern, re.path || "/");
102
+ pathMatched = pathData !== null;
73
103
  }
74
- } else {
75
- pathData = import_Utils.SwcUtils.parsePathPattern(pathPattern, re.path || "/");
76
- pathMatched = pathData !== null;
77
- }
78
- const filterPassed = !filter || filter(this.router, instance);
79
- if (pathMatched && filterPassed && instance[methodName]) {
80
- await instance[methodName]({ ...re, pathData });
81
- }
82
- });
83
- return await Promise.allSettled(ps);
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--;
84
113
  }
85
114
  }
86
- _connected(instance) {
115
+ async _connected(instance) {
87
116
  if (instance) {
117
+ this._connectedInvocations++;
88
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
+ );
89
131
  if (this.simpleApplication) {
90
- this._invokeOnConnectedSwcAppStarted(instance);
91
- if (this.router && this._lastRouterEvent) {
92
- this._invokeRouteChangeSubscribers(instance, this._lastRouterEvent);
132
+ try {
133
+ if (this.router && this._lastRouterEvent) {
134
+ await this._invokeRouteChangeSubscribers(instance, this._lastRouterEvent);
135
+ }
136
+ } catch (e) {
137
+ throw e;
93
138
  }
94
139
  }
95
140
  }
96
141
  }
142
+ async _connectedDone(instance) {
143
+ try {
144
+ } finally {
145
+ this._connectedInvocations--;
146
+ }
147
+ }
97
148
  _disconnected(instance) {
98
149
  if (instance) {
99
150
  this._swc_connected_instance.delete(instance);
100
- this._swc_started_instances.delete(instance);
101
- this._swc_notified_routes.delete(instance);
102
151
  }
103
152
  }
104
153
  async _handleRouteChange(route) {
105
154
  this._lastRouterEvent = route;
106
- if (route.triggerPoint === "end") {
107
- const swcConnectedInstance = Array.from(this._swc_connected_instance);
108
- const ps = swcConnectedInstance.map((instance) => this._invokeRouteChangeSubscribers(instance, route));
109
- await Promise.allSettled(ps);
110
- }
155
+ const swcConnectedInstance = Array.from(this._swc_connected_instance);
156
+ const ps = swcConnectedInstance.map((instance) => this._invokeRouteChangeSubscribers(instance, route));
157
+ await Promise.allSettled(ps);
111
158
  }
112
159
  async connect(config) {
113
160
  const swcConfig = {
114
161
  routeType: "element",
115
- window: config.window,
162
+ window: config?.window,
116
163
  ...config
117
164
  };
118
165
  const mode = config?.connectMode || "direct";
@@ -145,28 +192,36 @@ function SwcAppMixin(Base) {
145
192
  }
146
193
  }
147
194
  this._connected_safari.forEach((instance) => {
148
- this._swc_connected_instance.add(instance);
195
+ this._connected(instance);
149
196
  });
150
- const scis = Array.from(this._swc_connected_instance);
151
- await Promise.allSettled(scis.map((instance) => this._invokeOnConnectedSwcAppStarted(instance)));
152
197
  if (!this._routerSubscription && this.router) {
153
198
  const config2 = this.__swc_engine.config;
154
- this._routerSubscription = this.router.observable.subscribe((route) => {
155
- this._handleRouteChange(route).then((it) => {
156
- config2?.onRouteChanged?.(route, this);
157
- });
199
+ this._routerSubscription = this.router.observable.subscribe(async (route) => {
200
+ if (route.triggerPoint === "end") {
201
+ await this._handleRouteChange(route);
202
+ }
158
203
  });
204
+ if (config2?.path) {
205
+ this.router.go(config2.path);
206
+ }
159
207
  }
160
208
  }
161
- async _invokeOnConnectedSwcAppStarted(instance) {
162
- if (this._swc_started_instances.has(instance)) return;
163
- this._swc_started_instances.add(instance);
164
- const startedMethods = (0, import_lifecycles.findAllLifecycleMetadata)(instance, import_lifecycles.ON_CONNECTED_SWC_APP_METADATA_KEY);
165
- if (startedMethods) {
166
- const ps = startedMethods.map((m) => instance._invokeLifecycleMethod(m));
167
- return await Promise.allSettled(ps);
168
- }
169
- }
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
+ // }
170
225
  connectedCallback() {
171
226
  if (super.connectedCallback) super.connectedCallback();
172
227
  const configStr = this.getAttribute("swc-get-application-config");
@@ -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 _swc_started_instances = new WeakSet<any>();\n _swc_notified_routes = new WeakMap<any, RouterEventType>();\n _routerSubscription?: Subscription;\n _lastRouterEvent?: RouterEventType;\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 get simpleApplication() {\n return this.__swc_engine.simpleApplication;\n }\n get router() {\n return this.__swc_engine.router;\n }\n\n async _invokeRouteChangeSubscribers(instance: any, re: RouterEventType) {\n // \uC774\uBBF8 \uC774 \uB77C\uC6B0\uD2B8 \uC774\uBCA4\uD2B8\uC5D0 \uB300\uD574 \uCC98\uB9AC\uB41C \uC778\uC2A4\uD134\uC2A4\uB77C\uBA74 \uC2A4\uD0B5 (\uB3D9\uC2DC\uC131/\uC911\uBCF5 \uBC29\uC9C0)\n if (this._swc_notified_routes.get(instance) === re) return;\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 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\uC774 \uC5C6\uC73C\uBA74 \uBAA8\uB4E0 \uACBD\uB85C \uB9E4\uCE6D (\uC640\uC77C\uB4DC\uCE74\uB4DC)\n pathMatched = true;\n pathData = {};\n } else if (Array.isArray(pathPattern)) {\n // \uBC30\uC5F4: \uD558\uB098\uB77C\uB3C4 \uB9E4\uCE6D\uB418\uBA74 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 // \uBB38\uC790\uC5F4\n pathData = SwcUtils.parsePathPattern(pathPattern, re.path || '/');\n pathMatched = pathData !== null;\n }\n\n // Filter validation\n const filterPassed = !filter || filter(this.router!, instance);\n\n // Invoke method if conditions pass\n if (pathMatched && filterPassed && instance[methodName]) {\n await instance[methodName]({ ...re, pathData: pathData });\n }\n });\n return await Promise.allSettled(ps);\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 this._swc_started_instances.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 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 // console.log('-------mode', mode);\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 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 const scis = Array.from(this._swc_connected_instance);\n await Promise.allSettled(scis.map(instance => this._invokeOnConnectedSwcAppStarted(instance)));\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 this._routerSubscription = this.router.observable.subscribe((route: RouterEventType) => {\n //@ts-ignore\n // console.log('Route changed:', route, this._swcId);\n this._handleRouteChange(route).then(it => {\n config?.onRouteChanged?.(route, this);\n });\n });\n // Navigate to initial path if specified\n // if (config?.path) {\n // this.router.go(config.path);\n // }\n }\n }\n\n async _invokeOnConnectedSwcAppStarted(instance: any) {\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 return await Promise.allSettled(ps)\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 // \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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",
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
- setReplaceWrap() {
30
- this.executeAsync(this._value);
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
- const config = wrap ? { wrapExpression: wrap } : void 0;
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(filterOptions)) {
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.parentElement;
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._replaceWrap);
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, "_replaceWrap", void 0);
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\n @attributeHost('replace-wrap')\n _replaceWrap: string | null;\n\n 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?: string | null): string {\n const config = wrap ? { wrapExpression: wrap } : undefined;\n const ae = new ActionExpression(html, config);\n const filterOptions = wrap ? { type: 'replace' as const, wrap } : 'replace';\n const win = this.ownerDocument?.defaultView || window;\n\n // @ts-ignore\n for (const expr of ae.getExpressions(filterOptions)) {\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 = this.parentElement;\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 };\n\n htmlString = this.replaceExpressions(htmlString, groupArgs, this, this._replaceWrap);\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 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": "AAAA,kCAAqC;AACrC,mBAAyB;AACzB,kBAAgD;AAChD,sBAA6B;AAC7B,wBAA8B;;;;;;;;;;AAE9B,MAAM,iBAAiB,oBAAmB;EAA1C,cAAA;;AAiBU,SAAA,SAAiB,CAAA;EA2F3B;EAnGE,IAAI,QAAK;AACP,WAAO,KAAK;EACd;EAEA,IAAI,MAAM,IAAO;AACf,SAAK,aAAa,EAAE;EACtB;EAKQ,SAAS,WAAyB;AACxC,SAAK,aAAa,KAAK,MAAM;EAC/B;EAGQ,iBAAc;AACpB,SAAK,aAAa,KAAK,MAAM;EAC/B;EAEQ,aAAa,SAAc,KAAK,QAAM;AAC5C,QAAI,WAAW,UAAa,WAAW,MAAM;AAC3C,WAAK,QAAQ,SAAS;AACtB;IACF;AAEA,QAAI,kBAAkB,SAAS;AAC7B,WAAK,QAAQ,SAAS;AACtB,aACG,KAAK,OAAI;AACR,aAAK,cAAc;AACnB,aAAK,QAAQ,SAAS;MACxB,CAAC,EACA,MAAM,OAAI;AACT,gBAAQ,MAAM,iCAAiC,CAAC;AAChD,aAAK,cAAc;AACnB,aAAK,QAAQ,OAAO;MACtB,CAAC;IACL,OAAO;AACL,WAAK,cAAc;AACnB,WAAK,QAAQ,SAAS;IACxB;EACF;EAEQ,mBAAmB,MAAc,WAAgB,SAAc,MAAoB;AACzF,UAAM,SAAS,OAAO,EAAE,gBAAgB,KAAI,IAAK;AACjD,UAAM,KAAK,IAAI,6BAAiB,MAAM,MAAM;AAC5C,UAAM,gBAAgB,OAAO,EAAE,MAAM,WAAoB,KAAI,IAAK;AAClE,UAAM,MAAM,KAAK,eAAe,eAAe;AAG/C,eAAW,QAAQ,GAAG,eAAe,aAAa,GAAG;AACnD,UAAI;AACF,cAAM,QAAQ,0BAAc,cAAc;UACxC,QAAQ,6BAAa,iBAAiB,KAAK,QAAQ,IAAI,QAAQ;UAC/D;UACA,MAAM;SACP;AACD,WAAG,QAAQ,MAAM,OAAO,KAAK,CAAC;MAChC,SAAS,GAAG;AACV,gBAAQ,MAAM,2BAA2B,KAAK,QAAQ,KAAK,CAAC;MAC9D;IACF;AACA,WAAO,GAAG,uBAAsB;EAClC;EAEA,QAAQ,QAAgB,WAAS;AAC/B,YAAQ,IAAI,qBAAqB,KAAK;AACtC,SAAK,QAAO;AACZ,UAAM,SAAS,KAAK;AACpB,QAAI,CAAC;AAAQ;AAEb,UAAM,MAAM,KAAK,eAAe,eAAe;AAC/C,UAAM,YAAY,sBAAS,oBAAoB,KAAK,IAAI;AAExD,UAAM,IAAI,KAAK,QAAQ,cAAc,oBAAoB,KAAK,IAAI;AAClE,QAAI,GAAG;AACL,UAAI,aAAa,EAAE;AACnB,YAAM,YAAY,EAAE,GAAG,WAAW,QAAQ,KAAK,QAAQ,QAAQ,MAAK;AAEpE,mBAAa,KAAK,mBAAmB,YAAY,WAAW,MAAM,KAAK,YAAY;AAEnF,YAAM,OAAO,KAAK,eAAe,cAAc,UAAU,KAAK,SAAS,cAAc,UAAU;AAC/F,WAAK,YAAY;AACjB,YAAM,UAAU,KAAK;AAErB,WAAK,SAAS,MAAM,KAAK,QAAQ,UAAU;AAC3C,aAAO,aAAa,SAAS,KAAK,WAAW;IAC/C;EACF;EAEQ,UAAO;AACb,SAAK,OAAO,QAAQ,OAAK,EAAE,eAAe,YAAY,CAAC,CAAC;AACxD,SAAK,SAAS,CAAA;EAChB;EAEA,uBAAoB;AAClB,SAAK,QAAO;EACd;;AAzGA,WAAA;MADC,iCAAc,OAAO;;;AAItB,WAAA;MADC,iCAAc,cAAc;;;AAgBrB,WAAA;MADP,kDAAqB,OAAO;;;;;AAMrB,WAAA;MADP,kDAAqB,cAAc;;;;;",
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
  }
@@ -31,18 +31,28 @@ class SwcChoose extends HTMLTemplateElement {
31
31
  attributeChangedCallback(na, o, n) {
32
32
  }
33
33
  setValue(value, o, n) {
34
+ console.log("chooooooose value", value);
34
35
  this._value = value;
35
36
  this.refresh(this._value);
36
37
  }
37
- setReplaceWrap(replaceWrapAttr) {
38
- this.refresh();
39
- }
38
+ // @changedAttributeHost('replace-wrap')
39
+ // private setReplaceWrap(replaceWrapAttr?: string | null) {
40
+ // this.refresh();
41
+ // }
40
42
  replaceExpressions(html, groupArgs, context, wrap) {
41
- const config = wrap ? { wrapExpression: wrap } : void 0;
43
+ let config = void 0;
44
+ if (wrap) {
45
+ config = {
46
+ expression: {
47
+ replace: { start: `${wrap.start}`, end: `${wrap.end}` },
48
+ callReturn: { start: `${wrap.start}=`, end: `${wrap.end}` },
49
+ call: { start: `${wrap.start}@`, end: `${wrap.end}` }
50
+ }
51
+ };
52
+ }
42
53
  const ae = new import_core.ActionExpression(html, config);
43
- const filterOptions = wrap ? { type: "replace", wrap } : "replace";
44
54
  const win = this.ownerDocument?.defaultView || window;
45
- for (const expr of ae.getExpressions(filterOptions)) {
55
+ for (const expr of ae.getExpressions("replace")) {
46
56
  try {
47
57
  const value = import_core.FunctionUtils.executeReturn({
48
58
  script: import_core_web.ConvertUtils.decodeHtmlEntity(expr.script, win.document),
@@ -58,31 +68,27 @@ class SwcChoose extends HTMLTemplateElement {
58
68
  }
59
69
  refresh(value) {
60
70
  value = (0, import_decorators.getAttributeValue)(this, "value") ?? this._value;
61
- const portal = this.parentElement;
62
- if (!portal)
71
+ console.log("[DEBUG] SwcChoose.refresh called, value:", value);
72
+ const portal = import_Utils.SwcUtils.getParentContainer(this);
73
+ if (!portal) {
74
+ console.log("[DEBUG] SwcChoose portal is null!");
63
75
  return;
76
+ }
64
77
  const win = ((0, import_decorators.getElementConfig)(this).window ?? this.ownerDocument?.defaultView) || window;
65
78
  const helperSet = import_Utils.SwcUtils.getHelperAndHostSet(win, this);
66
- const groupArgs = { ...helperSet, $value: value };
79
+ const groupArgs = { ...helperSet, $value: value, $templateHost: this };
67
80
  const templates = Array.from(this.content.querySelectorAll("template"));
68
81
  let selected = null;
69
82
  for (const t of templates) {
70
83
  if (t.getAttribute("is") === "swc-when") {
71
- const attrVal = t.getAttribute("value") || "";
84
+ const attrVal = t.getAttribute("test") || "";
72
85
  let matches = false;
73
- const ae = new import_core.ActionExpression(attrVal);
74
- const expr = ae.getFirstExpression("replace");
75
- if (expr) {
76
- const decodedScript = import_core_web.ConvertUtils.decodeHtmlEntity(expr.script, win.document);
77
- const result = import_core.FunctionUtils.executeReturn({
78
- script: decodedScript,
79
- context: t,
80
- args: groupArgs
81
- });
82
- matches = !!result;
83
- } else {
84
- matches = String(attrVal) === String(value);
85
- }
86
+ const result = import_core.FunctionUtils.executeReturn({
87
+ script: attrVal,
88
+ context: t,
89
+ args: groupArgs
90
+ });
91
+ matches = !!result;
86
92
  if (matches) {
87
93
  selected = t;
88
94
  break;
@@ -101,12 +107,27 @@ class SwcChoose extends HTMLTemplateElement {
101
107
  this._previousTemplate = target;
102
108
  if (target) {
103
109
  let htmlString = target.innerHTML;
104
- htmlString = this.replaceExpressions(htmlString, groupArgs, this, this._replaceWrap);
110
+ htmlString = this.replaceExpressions(htmlString, groupArgs, this, { start: this._replaceWrapStart ?? "{#{", end: this._replaceWrapEnd ?? "}#}" });
105
111
  const result = this.ownerDocument?.createElement("template") || document.createElement("template");
106
112
  result.innerHTML = htmlString;
107
113
  const processedFragment = result.content;
108
114
  this._nodes = Array.from(processedFragment.childNodes);
115
+ const setTemplateHost = (element) => {
116
+ element.__swc_template_host = this;
117
+ Array.from(element.children).forEach((child) => {
118
+ if (child instanceof HTMLElement) {
119
+ setTemplateHost(child);
120
+ }
121
+ });
122
+ };
123
+ this._nodes.forEach((node) => {
124
+ if (node instanceof HTMLElement) {
125
+ setTemplateHost(node);
126
+ }
127
+ });
128
+ console.log(`[DEBUG] SwcChoose before insertBefore, portal: ${portal?.tagName}, isConnected: ${portal?.isConnected}`);
109
129
  portal.insertBefore(processedFragment, this.nextSibling);
130
+ console.log("[DEBUG] SwcChoose after insertBefore");
110
131
  }
111
132
  }
112
133
  cleanup() {
@@ -118,19 +139,17 @@ class SwcChoose extends HTMLTemplateElement {
118
139
  }
119
140
  }
120
141
  __decorate([
121
- (0, import_decorators.attributeHost)("replace-wrap"),
142
+ (0, import_decorators.attributeHost)("replace-wrap-start"),
143
+ __metadata("design:type", String)
144
+ ], SwcChoose.prototype, "_replaceWrapStart", void 0);
145
+ __decorate([
146
+ (0, import_decorators.attributeHost)("replace-wrap-end"),
122
147
  __metadata("design:type", String)
123
- ], SwcChoose.prototype, "_replaceWrap", void 0);
148
+ ], SwcChoose.prototype, "_replaceWrapEnd", void 0);
124
149
  __decorate([
125
150
  (0, import_changedAttributeHost.changedAttributeHost)("value"),
126
151
  __metadata("design:type", Function),
127
152
  __metadata("design:paramtypes", [Object, String, String]),
128
153
  __metadata("design:returntype", void 0)
129
154
  ], SwcChoose.prototype, "setValue", null);
130
- __decorate([
131
- (0, import_changedAttributeHost.changedAttributeHost)("replace-wrap"),
132
- __metadata("design:type", Function),
133
- __metadata("design:paramtypes", [String]),
134
- __metadata("design:returntype", void 0)
135
- ], SwcChoose.prototype, "setReplaceWrap", null);
136
155
  //# sourceMappingURL=SwcChoose.js.map