@dooboostore/simple-web-component 1.0.34 → 1.0.36
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 +44 -51
- package/dist/cjs/decorators/addEventListener.js +12 -4
- package/dist/cjs/decorators/addEventListener.js.map +2 -2
- package/dist/cjs/decorators/applyAttribute.js +19 -18
- package/dist/cjs/decorators/applyAttribute.js.map +2 -2
- package/dist/cjs/decorators/applyClass.js +23 -22
- package/dist/cjs/decorators/applyClass.js.map +2 -2
- package/dist/cjs/decorators/applyNode.js +22 -17
- package/dist/cjs/decorators/applyNode.js.map +2 -2
- package/dist/cjs/decorators/applyStyle.js +20 -19
- package/dist/cjs/decorators/applyStyle.js.map +2 -2
- package/dist/cjs/decorators/attribute.js +17 -16
- package/dist/cjs/decorators/attribute.js.map +2 -2
- package/dist/cjs/decorators/{changedAttributeHost.js → changedAttributeThis.js} +6 -6
- package/dist/cjs/decorators/changedAttributeThis.js.map +7 -0
- package/dist/cjs/decorators/elementDefine.js +234 -188
- package/dist/cjs/decorators/elementDefine.js.map +2 -2
- package/dist/cjs/decorators/emitCustomEvent.js +24 -16
- package/dist/cjs/decorators/emitCustomEvent.js.map +2 -2
- package/dist/cjs/decorators/index.js +1 -1
- package/dist/cjs/decorators/index.js.map +1 -1
- package/dist/cjs/decorators/lifecycles.js +15 -17
- package/dist/cjs/decorators/lifecycles.js.map +2 -2
- package/dist/cjs/decorators/query.js +38 -60
- package/dist/cjs/decorators/query.js.map +2 -2
- package/dist/cjs/decorators/queryAll.js +31 -63
- package/dist/cjs/decorators/queryAll.js.map +2 -2
- package/dist/cjs/decorators/setProperty.js +13 -12
- package/dist/cjs/decorators/setProperty.js.map +2 -2
- package/dist/cjs/decorators/subscribeSwcAppRouteChangeWhileConnected.js +2 -2
- package/dist/cjs/decorators/subscribeSwcAppRouteChangeWhileConnected.js.map +2 -2
- package/dist/cjs/elements/SwcAppEngine.js +8 -2
- package/dist/cjs/elements/SwcAppEngine.js.map +2 -2
- package/dist/cjs/elements/SwcAppMixin.js +120 -65
- package/dist/cjs/elements/SwcAppMixin.js.map +2 -2
- package/dist/cjs/elements/SwcAsync.js +31 -21
- package/dist/cjs/elements/SwcAsync.js.map +2 -2
- package/dist/cjs/elements/SwcChoose.js +53 -34
- package/dist/cjs/elements/SwcChoose.js.map +2 -2
- package/dist/cjs/elements/SwcIf.js +54 -32
- package/dist/cjs/elements/SwcIf.js.map +2 -2
- package/dist/cjs/elements/SwcLoop.js +111 -37
- package/dist/cjs/elements/SwcLoop.js.map +2 -2
- package/dist/cjs/elements/register.js +249 -122
- 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 +31 -17
- package/dist/cjs/utils/Utils.js.map +2 -2
- package/dist/esm/decorators/addEventListener.js +12 -4
- package/dist/esm/decorators/addEventListener.js.map +2 -2
- package/dist/esm/decorators/applyAttribute.js +19 -18
- package/dist/esm/decorators/applyAttribute.js.map +2 -2
- package/dist/esm/decorators/applyClass.js +23 -22
- package/dist/esm/decorators/applyClass.js.map +2 -2
- package/dist/esm/decorators/applyNode.js +22 -17
- package/dist/esm/decorators/applyNode.js.map +2 -2
- package/dist/esm/decorators/applyStyle.js +20 -19
- package/dist/esm/decorators/applyStyle.js.map +2 -2
- package/dist/esm/decorators/attribute.js +17 -16
- package/dist/esm/decorators/attribute.js.map +2 -2
- package/dist/esm/decorators/{changedAttributeHost.js → changedAttributeThis.js} +3 -3
- package/dist/esm/decorators/changedAttributeThis.js.map +7 -0
- package/dist/esm/decorators/elementDefine.js +233 -187
- package/dist/esm/decorators/elementDefine.js.map +2 -2
- package/dist/esm/decorators/emitCustomEvent.js +24 -16
- package/dist/esm/decorators/emitCustomEvent.js.map +2 -2
- package/dist/esm/decorators/index.js +1 -1
- package/dist/esm/decorators/index.js.map +1 -1
- package/dist/esm/decorators/lifecycles.js +15 -17
- package/dist/esm/decorators/lifecycles.js.map +2 -2
- package/dist/esm/decorators/query.js +38 -60
- package/dist/esm/decorators/query.js.map +2 -2
- package/dist/esm/decorators/queryAll.js +31 -63
- package/dist/esm/decorators/queryAll.js.map +2 -2
- package/dist/esm/decorators/setProperty.js +13 -12
- package/dist/esm/decorators/setProperty.js.map +2 -2
- package/dist/esm/decorators/subscribeSwcAppRouteChangeWhileConnected.js +2 -2
- package/dist/esm/decorators/subscribeSwcAppRouteChangeWhileConnected.js.map +2 -2
- package/dist/esm/elements/SwcAppEngine.js +9 -2
- package/dist/esm/elements/SwcAppEngine.js.map +2 -2
- package/dist/esm/elements/SwcAppMixin.js +122 -66
- package/dist/esm/elements/SwcAppMixin.js.map +2 -2
- package/dist/esm/elements/SwcAsync.js +32 -22
- package/dist/esm/elements/SwcAsync.js.map +2 -2
- package/dist/esm/elements/SwcChoose.js +54 -35
- package/dist/esm/elements/SwcChoose.js.map +2 -2
- package/dist/esm/elements/SwcIf.js +55 -33
- package/dist/esm/elements/SwcIf.js.map +2 -2
- package/dist/esm/elements/SwcLoop.js +112 -38
- package/dist/esm/elements/SwcLoop.js.map +2 -2
- package/dist/esm/elements/register.js +250 -123
- 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 +31 -17
- package/dist/esm/utils/Utils.js.map +2 -2
- package/dist/esm-bundle/dooboostore-simple-web-component.esm.js +563 -557
- package/dist/esm-bundle/dooboostore-simple-web-component.esm.js.map +4 -4
- package/dist/types/decorators/addEventListener.d.ts +5 -7
- package/dist/types/decorators/addEventListener.d.ts.map +1 -1
- package/dist/types/decorators/applyAttribute.d.ts +4 -4
- package/dist/types/decorators/applyAttribute.d.ts.map +1 -1
- package/dist/types/decorators/applyClass.d.ts +6 -6
- package/dist/types/decorators/applyClass.d.ts.map +1 -1
- package/dist/types/decorators/applyNode.d.ts +7 -6
- package/dist/types/decorators/applyNode.d.ts.map +1 -1
- package/dist/types/decorators/applyStyle.d.ts +4 -4
- package/dist/types/decorators/applyStyle.d.ts.map +1 -1
- package/dist/types/decorators/attribute.d.ts +5 -5
- package/dist/types/decorators/attribute.d.ts.map +1 -1
- package/dist/types/decorators/changedAttributeThis.d.ts +18 -0
- package/dist/types/decorators/changedAttributeThis.d.ts.map +1 -0
- package/dist/types/decorators/elementDefine.d.ts.map +1 -1
- package/dist/types/decorators/emitCustomEvent.d.ts +11 -12
- package/dist/types/decorators/emitCustomEvent.d.ts.map +1 -1
- package/dist/types/decorators/index.d.ts +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/query.d.ts +17 -63
- package/dist/types/decorators/query.d.ts.map +1 -1
- package/dist/types/decorators/queryAll.d.ts +6 -63
- package/dist/types/decorators/queryAll.d.ts.map +1 -1
- package/dist/types/decorators/setProperty.d.ts +1 -1
- package/dist/types/decorators/setProperty.d.ts.map +1 -1
- package/dist/types/decorators/subscribeSwcAppRouteChangeWhileConnected.d.ts +4 -5
- package/dist/types/decorators/subscribeSwcAppRouteChangeWhileConnected.d.ts.map +1 -1
- package/dist/types/elements/SwcAppEngine.d.ts +4 -1
- package/dist/types/elements/SwcAppEngine.d.ts.map +1 -1
- package/dist/types/elements/SwcAppMixin.d.ts +11 -8
- 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 +3 -2
- package/dist/types/types.d.ts.map +1 -1
- package/dist/types/utils/Utils.d.ts +11 -8
- package/dist/types/utils/Utils.d.ts.map +1 -1
- package/dist/umd-bundle/dooboostore-simple-web-component.umd.js +563 -557
- package/dist/umd-bundle/dooboostore-simple-web-component.umd.js.map +4 -4
- package/package.json +3 -3
- package/src/decorators/addEventListener.ts +11 -9
- package/src/decorators/applyAttribute.ts +16 -15
- package/src/decorators/applyClass.ts +18 -17
- package/src/decorators/applyNode.ts +34 -21
- package/src/decorators/applyStyle.ts +17 -16
- package/src/decorators/attribute.ts +21 -20
- package/src/decorators/{changedAttributeHost.ts → changedAttributeThis.ts} +13 -14
- package/src/decorators/elementDefine.ts +402 -358
- package/src/decorators/emitCustomEvent.ts +40 -31
- package/src/decorators/index.ts +1 -1
- package/src/decorators/lifecycles.ts +11 -10
- package/src/decorators/query.ts +51 -124
- package/src/decorators/queryAll.ts +30 -127
- package/src/decorators/setProperty.ts +12 -11
- package/src/decorators/subscribeSwcAppRouteChangeWhileConnected.ts +10 -10
- package/src/elements/SwcAppEngine.ts +10 -3
- package/src/elements/SwcAppMixin.ts +177 -97
- package/src/elements/SwcAsync.ts +32 -21
- package/src/elements/SwcChoose.ts +74 -37
- package/src/elements/SwcIf.ts +60 -23
- package/src/elements/SwcLoop.ts +141 -28
- package/src/elements/register.ts +300 -102
- package/src/types.ts +6 -5
- package/src/utils/Utils.ts +40 -23
- package/tsconfig.json +2 -2
- package/dist/cjs/decorators/changedAttributeHost.js.map +0 -7
- package/dist/esm/decorators/changedAttributeHost.js.map +0 -7
- package/dist/types/decorators/changedAttributeHost.d.ts +0 -19
- package/dist/types/decorators/changedAttributeHost.d.ts.map +0 -1
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
3
|
+
var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
1
4
|
import { SimpleApplication } from "@dooboostore/simple-boot/SimpleApplication";
|
|
2
5
|
import { HashRouter, PathRouter, Router } from "@dooboostore/core-web";
|
|
3
6
|
import { ElementRouter } from "../router/ElementRouter.js";
|
|
@@ -5,6 +8,10 @@ import { SimOption } from "@dooboostore/simple-boot/SimOption";
|
|
|
5
8
|
class SwcAppEngine {
|
|
6
9
|
constructor(host) {
|
|
7
10
|
this.host = host;
|
|
11
|
+
__publicField(this, "simpleApplication");
|
|
12
|
+
__publicField(this, "router");
|
|
13
|
+
__publicField(this, "routerSubscription");
|
|
14
|
+
__publicField(this, "_config");
|
|
8
15
|
}
|
|
9
16
|
get config() {
|
|
10
17
|
return this._config;
|
|
@@ -21,12 +28,12 @@ class SwcAppEngine {
|
|
|
21
28
|
}
|
|
22
29
|
this.simpleApplication = new SimpleApplication(
|
|
23
30
|
new SimOption({
|
|
24
|
-
excludeProxys: [Node],
|
|
31
|
+
excludeProxys: [this._config.window.Node],
|
|
25
32
|
container: this._config.container
|
|
26
33
|
})
|
|
27
34
|
);
|
|
28
35
|
const otherInstanceSim = /* @__PURE__ */ new Map();
|
|
29
|
-
this.config
|
|
36
|
+
this.config?.otherInstanceSim?.forEach((v, k) => {
|
|
30
37
|
otherInstanceSim.set(k, v);
|
|
31
38
|
});
|
|
32
39
|
if (this.router) otherInstanceSim.set(Router, this.router);
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/elements/SwcAppEngine.ts"],
|
|
4
|
-
"sourcesContent": ["import { SimpleApplication } from '@dooboostore/simple-boot/SimpleApplication';\nimport { HashRouter, PathRouter, Router, RouterEventType } from '@dooboostore/core-web';\nimport { ElementRouter } from '../router/ElementRouter';\nimport { SimOption } from '@dooboostore/simple-boot/SimOption';\nimport { ConstructorType, OptionalType, Subscription } from '@dooboostore/core';\n\nimport { SwcAppInterface } from '../types';\nimport { SimConfig } from '@dooboostore/simple-boot';\n\nexport type SwcConfigType = {\n routeType: 'path' | 'hash' | 'element';\n connectMode?: 'direct' | 'swap' | 'clear-swap';\n container?: symbol;\n otherInstanceSim?: Map<ConstructorType<any> | Function | SimConfig | symbol, any>;\n path?: string;\n window: Window;\n onEngineStarted?: (sp: SimpleApplication, app: SwcAppInterface) => void;\n onConnected?: (app: SwcAppInterface) => void;\n onDisconnected?: (app: SwcAppInterface) => void;\n
|
|
5
|
-
"mappings": "AAAA,SAAS,yBAAyB;AAClC,SAAS,YAAY,YAAY,cAA+B;AAChE,SAAS,qBAAqB;AAC9B,SAAS,iBAAiB;
|
|
4
|
+
"sourcesContent": ["import { SimpleApplication } from '@dooboostore/simple-boot/SimpleApplication';\nimport { HashRouter, PathRouter, Router, RouterEventType } from '@dooboostore/core-web';\nimport { ElementRouter } from '../router/ElementRouter';\nimport { SimOption } from '@dooboostore/simple-boot/SimOption';\nimport { ConstructorType, OptionalType, Subscription } from '@dooboostore/core';\n\nimport { SwcAppInterface } from '../types';\nimport { SimConfig } from '@dooboostore/simple-boot';\n\nexport type SwcConfigType = {\n routeType: 'path' | 'hash' | 'element';\n connectMode?: 'direct' | 'swap' | 'clear-swap';\n container?: symbol;\n otherInstanceSim?: Map<ConstructorType<any> | Function | SimConfig | symbol, any>;\n path?: string;\n window: Window;\n onEngineStarted?: (sp: SimpleApplication, app: SwcAppInterface) => void;\n onConnected?: (app: SwcAppInterface) => void;\n onDisconnected?: (app: SwcAppInterface) => void;\n\n onChildrenConnectedDone?: (app: SwcAppInterface) => void;\n // onChildrenSwcAppStartedDone?: (app: SwcAppInterface) => void;\n // childrenSwcAppStartedDoneCheckIntervalTime?: number;\n onChildrenRouteChanged?: (event: RouterEventType, app: SwcAppInterface) => void;\n childrenRouteChangedCheckIntervalTime?: number; // \uC790\uC2DD \uC5F0\uACB0 \uC644\uB8CC \uC774\uBCA4\uD2B8 \uB514\uBC14\uC6B4\uC2A4 \uD0C0\uC784 (ms)\n childrenConnectedDoneCheckIntervalTime?: number;\n};\n\nexport type SwcAttributeConfigType = OptionalType<SwcConfigType, 'routeType' | 'window'>;\n\nexport class SwcAppEngine {\n public simpleApplication?: SimpleApplication;\n public router?: Router;\n private routerSubscription?: Subscription;\n private _config?: SwcConfigType;\n\n constructor(private host: HTMLElement) {}\n\n get config() {\n return this._config;\n }\n\n async connect(config: SwcConfigType) {\n try {\n this._config = config;\n\n // Router Selection\n if (this._config.routeType === 'path') {\n this.router = new PathRouter({ window: this._config.window, firstUrl: this._config.path });\n } else if (this._config.routeType === 'hash') {\n this.router = new HashRouter({ window: this._config.window, firstUrl: this._config.path });\n } else if (this._config.routeType === 'element') {\n this.router = new ElementRouter({ window: this._config.window, firstUrl: this._config.path });\n }\n\n // console.log('vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv', this.router)\n\n // App start\n this.simpleApplication = new SimpleApplication(\n new SimOption({\n excludeProxys: [(this._config.window as any).Node],\n container: this._config.container\n })\n );\n\n const otherInstanceSim = new Map<any, any>();\n this.config?.otherInstanceSim?.forEach((v, k) => {\n otherInstanceSim.set(k, v);\n });\n if (this.router) otherInstanceSim.set(Router, this.router);\n this.simpleApplication.run(otherInstanceSim);\n\n if (this._config.onEngineStarted) {\n this._config.onEngineStarted(this.simpleApplication, this.host as unknown as SwcAppInterface);\n }\n } catch (e) {\n console.error('[SWC-APP-ENGINE] Init failed:', e, this._config);\n }\n }\n\n disconnect() {\n this.routerSubscription?.unsubscribe();\n }\n}\n"],
|
|
5
|
+
"mappings": ";;;AAAA,SAAS,yBAAyB;AAClC,SAAS,YAAY,YAAY,cAA+B;AAChE,SAAS,qBAAqB;AAC9B,SAAS,iBAAiB;AA2BnB,MAAM,aAAa;AAAA,EAMxB,YAAoB,MAAmB;AAAnB;AALpB,wBAAO;AACP,wBAAO;AACP,wBAAQ;AACR,wBAAQ;AAAA,EAEgC;AAAA,EAExC,IAAI,SAAS;AACX,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,MAAM,QAAQ,QAAuB;AACnC,QAAI;AACF,WAAK,UAAU;AAGf,UAAI,KAAK,QAAQ,cAAc,QAAQ;AACrC,aAAK,SAAS,IAAI,WAAW,EAAE,QAAQ,KAAK,QAAQ,QAAQ,UAAU,KAAK,QAAQ,KAAK,CAAC;AAAA,MAC3F,WAAW,KAAK,QAAQ,cAAc,QAAQ;AAC5C,aAAK,SAAS,IAAI,WAAW,EAAE,QAAQ,KAAK,QAAQ,QAAQ,UAAU,KAAK,QAAQ,KAAK,CAAC;AAAA,MAC3F,WAAW,KAAK,QAAQ,cAAc,WAAW;AAC/C,aAAK,SAAS,IAAI,cAAc,EAAE,QAAQ,KAAK,QAAQ,QAAQ,UAAU,KAAK,QAAQ,KAAK,CAAC;AAAA,MAC9F;AAKA,WAAK,oBAAoB,IAAI;AAAA,QAC3B,IAAI,UAAU;AAAA,UACZ,eAAe,CAAE,KAAK,QAAQ,OAAe,IAAI;AAAA,UACjD,WAAW,KAAK,QAAQ;AAAA,QAC1B,CAAC;AAAA,MACH;AAEA,YAAM,mBAAmB,oBAAI,IAAc;AAC3C,WAAK,QAAQ,kBAAkB,QAAQ,CAAC,GAAG,MAAM;AAC/C,yBAAiB,IAAI,GAAG,CAAC;AAAA,MAC3B,CAAC;AACD,UAAI,KAAK,OAAQ,kBAAiB,IAAI,QAAQ,KAAK,MAAM;AACzD,WAAK,kBAAkB,IAAI,gBAAgB;AAE3C,UAAI,KAAK,QAAQ,iBAAiB;AAChC,aAAK,QAAQ,gBAAgB,KAAK,mBAAmB,KAAK,IAAkC;AAAA,MAC9F;AAAA,IACF,SAAS,GAAG;AACV,cAAQ,MAAM,iCAAiC,GAAG,KAAK,OAAO;AAAA,IAChE;AAAA,EACF;AAAA,EAEA,aAAa;AACX,SAAK,oBAAoB,YAAY;AAAA,EACvC;AACF;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -1,96 +1,144 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
3
|
+
var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
1
4
|
import { SwcAppEngine } from "./SwcAppEngine.js";
|
|
2
5
|
import { SwcUtils } from "../utils/Utils.js";
|
|
3
|
-
import { FunctionUtils } from "@dooboostore/core";
|
|
4
|
-
import { ON_CONNECTED_SWC_APP_METADATA_KEY, findAllLifecycleMetadata } from "../decorators/lifecycles.js";
|
|
6
|
+
import { debounceTimeIntervalLock, FunctionUtils } from "@dooboostore/core";
|
|
5
7
|
import { getSubscribeSwcAppRouteChangeWhileConnectedMetadata } from "../decorators/subscribeSwcAppRouteChangeWhileConnected.js";
|
|
6
8
|
import { getSubscribeSwcAppMessageWhileConnectedMetadata } from "../decorators/subscribeSwcAppMessageWhileConnected.js";
|
|
7
9
|
function SwcAppMixin(Base) {
|
|
8
10
|
return class extends Base {
|
|
9
11
|
constructor() {
|
|
10
12
|
super(...arguments);
|
|
11
|
-
this
|
|
12
|
-
this
|
|
13
|
-
|
|
14
|
-
this
|
|
13
|
+
__publicField(this, "__swc_engine", new SwcAppEngine(this));
|
|
14
|
+
__publicField(this, "_swc_connected_instance", /* @__PURE__ */ new Set());
|
|
15
|
+
// _swc_notified_routes = new WeakMap<any, RouterEventType>();
|
|
16
|
+
__publicField(this, "_routerSubscription");
|
|
17
|
+
__publicField(this, "_lastRouterEvent");
|
|
18
|
+
__publicField(this, "_routeChangeInvocations", 0);
|
|
19
|
+
__publicField(this, "_connectedInvocations", 0);
|
|
20
|
+
__publicField(this, "_childrenRouteChangedInterval");
|
|
21
|
+
__publicField(this, "_childrenConnectedDoneInterval");
|
|
15
22
|
/*
|
|
16
23
|
사파리 is 일경우
|
|
17
24
|
<script src="https://unpkg.com/@ungap/custom-elements"><\/script>
|
|
18
25
|
이걸사용하는데 is 대응하는거다 그런데 이때 처리되는 순서가 크롬이나 표준에서는 부모부터 만들어지고 자식들이 만들어지는데
|
|
19
26
|
저 polyfill에서는 자식부터 만들어지고 부모가 만들어진다 is일때 아 .. 이문제때문에 자식이 _connected_safari 에 강제로 자기자식넣어준다
|
|
20
27
|
*/
|
|
21
|
-
this
|
|
28
|
+
__publicField(this, "_connected_safari", []);
|
|
22
29
|
}
|
|
23
30
|
get simpleApplication() {
|
|
24
31
|
return this.__swc_engine.simpleApplication;
|
|
25
32
|
}
|
|
33
|
+
get config() {
|
|
34
|
+
return this.__swc_engine?.config;
|
|
35
|
+
}
|
|
26
36
|
get router() {
|
|
27
|
-
return this.__swc_engine
|
|
37
|
+
return this.__swc_engine?.router;
|
|
28
38
|
}
|
|
29
39
|
async _invokeRouteChangeSubscribers(instance, re) {
|
|
30
|
-
if (
|
|
31
|
-
this.
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
40
|
+
if (instance.isConnected === false) return;
|
|
41
|
+
this._routeChangeInvocations++;
|
|
42
|
+
if (this._childrenRouteChangedInterval) {
|
|
43
|
+
clearInterval(this._childrenRouteChangedInterval);
|
|
44
|
+
}
|
|
45
|
+
this._childrenRouteChangedInterval = debounceTimeIntervalLock(
|
|
46
|
+
() => this._routeChangeInvocations === 0,
|
|
47
|
+
() => {
|
|
48
|
+
this._childrenRouteChangedInterval = null;
|
|
49
|
+
this.config.onChildrenRouteChanged(re, this);
|
|
50
|
+
},
|
|
51
|
+
this.config?.childrenConnectedDoneCheckIntervalTime ?? 30,
|
|
52
|
+
{ setInterval: window.setInterval, clearInterval: window.clearInterval }
|
|
53
|
+
// {setInterval: window.setInterval, clearInterval: window.clearInterval}
|
|
54
|
+
);
|
|
55
|
+
try {
|
|
56
|
+
const routeChangeSubscribers = getSubscribeSwcAppRouteChangeWhileConnectedMetadata(instance);
|
|
57
|
+
if (routeChangeSubscribers && Array.isArray(routeChangeSubscribers)) {
|
|
58
|
+
const ps = routeChangeSubscribers.map(async (metadata) => {
|
|
59
|
+
const methodName = metadata.propertyKey;
|
|
60
|
+
let pathPattern = metadata.options?.path;
|
|
61
|
+
const filter = metadata.options?.filter;
|
|
62
|
+
if (typeof pathPattern === "function") {
|
|
63
|
+
pathPattern = pathPattern(instance);
|
|
64
|
+
}
|
|
65
|
+
let pathMatched = false;
|
|
66
|
+
let pathData = null;
|
|
67
|
+
if (!pathPattern) {
|
|
68
|
+
pathMatched = true;
|
|
69
|
+
pathData = {};
|
|
70
|
+
} else if (Array.isArray(pathPattern)) {
|
|
71
|
+
for (const pattern of pathPattern) {
|
|
72
|
+
const data = SwcUtils.parsePathPattern(pattern, re.path || "/");
|
|
73
|
+
if (data !== null) {
|
|
74
|
+
pathMatched = true;
|
|
75
|
+
pathData = data;
|
|
76
|
+
break;
|
|
77
|
+
}
|
|
50
78
|
}
|
|
79
|
+
} else {
|
|
80
|
+
pathData = SwcUtils.parsePathPattern(pathPattern, re.path || "/");
|
|
81
|
+
pathMatched = pathData !== null;
|
|
51
82
|
}
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
return await Promise.allSettled(ps);
|
|
83
|
+
const filterPassed = !filter || filter(this.router, instance);
|
|
84
|
+
if (pathMatched && filterPassed && instance[methodName]) {
|
|
85
|
+
await instance[methodName]({ ...re, pathData });
|
|
86
|
+
}
|
|
87
|
+
});
|
|
88
|
+
await Promise.allSettled(ps);
|
|
89
|
+
}
|
|
90
|
+
} finally {
|
|
91
|
+
this._routeChangeInvocations--;
|
|
62
92
|
}
|
|
63
93
|
}
|
|
64
|
-
_connected(instance) {
|
|
94
|
+
async _connected(instance) {
|
|
65
95
|
if (instance) {
|
|
96
|
+
this._connectedInvocations++;
|
|
66
97
|
this._swc_connected_instance.add(instance);
|
|
98
|
+
if (this._childrenConnectedDoneInterval) {
|
|
99
|
+
clearInterval(this._childrenConnectedDoneInterval);
|
|
100
|
+
}
|
|
101
|
+
this._childrenConnectedDoneInterval = debounceTimeIntervalLock(
|
|
102
|
+
() => this._connectedInvocations === 0,
|
|
103
|
+
() => {
|
|
104
|
+
this._childrenConnectedDoneInterval = null;
|
|
105
|
+
this.config.onChildrenConnectedDone(this);
|
|
106
|
+
},
|
|
107
|
+
this.config?.childrenConnectedDoneCheckIntervalTime ?? 30,
|
|
108
|
+
{ setInterval: window.setInterval, clearInterval: window.clearInterval }
|
|
109
|
+
);
|
|
67
110
|
if (this.simpleApplication) {
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
111
|
+
try {
|
|
112
|
+
if (this.router && this._lastRouterEvent) {
|
|
113
|
+
await this._invokeRouteChangeSubscribers(instance, this._lastRouterEvent);
|
|
114
|
+
}
|
|
115
|
+
} catch (e) {
|
|
116
|
+
throw e;
|
|
71
117
|
}
|
|
72
118
|
}
|
|
73
119
|
}
|
|
74
120
|
}
|
|
121
|
+
async _connectedDone(instance) {
|
|
122
|
+
try {
|
|
123
|
+
} finally {
|
|
124
|
+
this._connectedInvocations--;
|
|
125
|
+
}
|
|
126
|
+
}
|
|
75
127
|
_disconnected(instance) {
|
|
76
128
|
if (instance) {
|
|
77
129
|
this._swc_connected_instance.delete(instance);
|
|
78
|
-
this._swc_started_instances.delete(instance);
|
|
79
|
-
this._swc_notified_routes.delete(instance);
|
|
80
130
|
}
|
|
81
131
|
}
|
|
82
132
|
async _handleRouteChange(route) {
|
|
83
133
|
this._lastRouterEvent = route;
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
await Promise.allSettled(ps);
|
|
88
|
-
}
|
|
134
|
+
const swcConnectedInstance = Array.from(this._swc_connected_instance);
|
|
135
|
+
const ps = swcConnectedInstance.map((instance) => this._invokeRouteChangeSubscribers(instance, route));
|
|
136
|
+
await Promise.allSettled(ps);
|
|
89
137
|
}
|
|
90
138
|
async connect(config) {
|
|
91
139
|
const swcConfig = {
|
|
92
140
|
routeType: "element",
|
|
93
|
-
window: config
|
|
141
|
+
window: config?.window,
|
|
94
142
|
...config
|
|
95
143
|
};
|
|
96
144
|
const mode = config?.connectMode || "direct";
|
|
@@ -123,28 +171,36 @@ function SwcAppMixin(Base) {
|
|
|
123
171
|
}
|
|
124
172
|
}
|
|
125
173
|
this._connected_safari.forEach((instance) => {
|
|
126
|
-
this.
|
|
174
|
+
this._connected(instance);
|
|
127
175
|
});
|
|
128
|
-
const scis = Array.from(this._swc_connected_instance);
|
|
129
|
-
await Promise.allSettled(scis.map((instance) => this._invokeOnConnectedSwcAppStarted(instance)));
|
|
130
176
|
if (!this._routerSubscription && this.router) {
|
|
131
177
|
const config2 = this.__swc_engine.config;
|
|
132
|
-
this._routerSubscription = this.router.observable.subscribe((route) => {
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
}
|
|
178
|
+
this._routerSubscription = this.router.observable.subscribe(async (route) => {
|
|
179
|
+
if (route.triggerPoint === "end") {
|
|
180
|
+
await this._handleRouteChange(route);
|
|
181
|
+
}
|
|
136
182
|
});
|
|
183
|
+
if (config2?.path) {
|
|
184
|
+
this.router.go(config2.path);
|
|
185
|
+
}
|
|
137
186
|
}
|
|
138
187
|
}
|
|
139
|
-
async _invokeOnConnectedSwcAppStarted(instance) {
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
188
|
+
// async _invokeOnConnectedSwcAppStarted(instance: any) {
|
|
189
|
+
// this._swcAppStartedInvocations++;
|
|
190
|
+
// try {
|
|
191
|
+
// // 이미 시작된 인스턴스라면 스킵 (비동기 병렬 중복 호출 방지)
|
|
192
|
+
// if (this._swc_started_instances.has(instance)) return;
|
|
193
|
+
// this._swc_started_instances.add(instance);
|
|
194
|
+
//
|
|
195
|
+
// const startedMethods = findAllLifecycleMetadata(instance, ON_CONNECTED_SWC_APP_METADATA_KEY);
|
|
196
|
+
// if (startedMethods) {
|
|
197
|
+
// const ps = startedMethods.map(m => instance._invokeLifecycleMethod(m));
|
|
198
|
+
// await Promise.allSettled(ps);
|
|
199
|
+
// }
|
|
200
|
+
// } finally {
|
|
201
|
+
// this._swcAppStartedInvocations--;
|
|
202
|
+
// }
|
|
203
|
+
// }
|
|
148
204
|
connectedCallback() {
|
|
149
205
|
if (super.connectedCallback) super.connectedCallback();
|
|
150
206
|
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": "AAAA,
|
|
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
|
}
|
|
@@ -7,11 +7,11 @@ var __decorate = function(decorators, target, key, desc) {
|
|
|
7
7
|
var __metadata = function(k, v) {
|
|
8
8
|
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
9
9
|
};
|
|
10
|
-
import {
|
|
10
|
+
import { changedAttributeThis } from "../decorators/changedAttributeThis.js";
|
|
11
11
|
import { SwcUtils } from "../utils/Utils.js";
|
|
12
12
|
import { FunctionUtils, ActionExpression } from "@dooboostore/core";
|
|
13
13
|
import { ConvertUtils } from "@dooboostore/core-web";
|
|
14
|
-
import {
|
|
14
|
+
import { attributeThis } from "../decorators/index.js";
|
|
15
15
|
class SwcAsync extends HTMLTemplateElement {
|
|
16
16
|
constructor() {
|
|
17
17
|
super(...arguments);
|
|
@@ -26,9 +26,10 @@ class SwcAsync extends HTMLTemplateElement {
|
|
|
26
26
|
setValue(valueAttr) {
|
|
27
27
|
this.executeAsync(this._value);
|
|
28
28
|
}
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
29
|
+
// @changedAttributeThis('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 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 = FunctionUtils.executeReturn({
|
|
60
69
|
script: 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 = 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
|
}
|
|
@@ -97,23 +109,21 @@ class SwcAsync extends HTMLTemplateElement {
|
|
|
97
109
|
}
|
|
98
110
|
}
|
|
99
111
|
__decorate([
|
|
100
|
-
|
|
112
|
+
attributeThis("value"),
|
|
101
113
|
__metadata("design:type", Object)
|
|
102
114
|
], SwcAsync.prototype, "_value", void 0);
|
|
103
115
|
__decorate([
|
|
104
|
-
|
|
116
|
+
attributeThis("replace-wrap-start"),
|
|
105
117
|
__metadata("design:type", String)
|
|
106
|
-
], SwcAsync.prototype, "
|
|
118
|
+
], SwcAsync.prototype, "_replaceWrapStart", void 0);
|
|
107
119
|
__decorate([
|
|
108
|
-
|
|
120
|
+
attributeThis("replace-wrap-end"),
|
|
121
|
+
__metadata("design:type", String)
|
|
122
|
+
], SwcAsync.prototype, "_replaceWrapEnd", void 0);
|
|
123
|
+
__decorate([
|
|
124
|
+
changedAttributeThis("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
|
-
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 {
|
|
5
|
-
"mappings": ";;;;;;;;;AAAA,SAAS,4BAA4B;AACrC,SAAS,gBAAgB;AACzB,SAAS,eAAe,wBAAwB;AAChD,SAAS,oBAAoB;AAC7B,SAAS,qBAAqB;AAE9B,MAAM,iBAAiB,oBAAmB;EAA1C,cAAA;;
|
|
4
|
+
"sourcesContent": ["import { changedAttributeThis } from '../decorators/changedAttributeThis';\nimport { SwcUtils } from '../utils/Utils';\nimport { FunctionUtils, ActionExpression } from '@dooboostore/core';\nimport { ConvertUtils } from '@dooboostore/core-web';\nimport { attributeThis } from '../decorators';\n\nclass SwcAsync extends HTMLTemplateElement {\n @attributeThis('value')\n _value: any;\n @attributeThis('replace-wrap-start')\n _replaceWrapStart: string | null;\n @attributeThis('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 @changedAttributeThis('value')\n private setValue(valueAttr?: string | null) {\n this.executeAsync(this._value);\n }\n\n // @changedAttributeThis('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
|
}
|