@dooboostore/simple-web-component 1.0.36 → 1.0.38
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 +396 -68
- package/dist/cjs/{elements/SwcAppEngine.js → SwcAppEngine.js} +9 -6
- package/dist/cjs/SwcAppEngine.js.map +7 -0
- package/dist/cjs/decorators/addEventListener.js +20 -4
- package/dist/cjs/decorators/addEventListener.js.map +2 -2
- package/dist/cjs/decorators/applyAttribute.js.map +1 -1
- package/dist/cjs/decorators/applyClass.js.map +1 -1
- package/dist/cjs/decorators/applyNode.js +109 -26
- package/dist/cjs/decorators/applyNode.js.map +2 -2
- package/dist/cjs/decorators/applySlot.js +129 -0
- package/dist/cjs/decorators/applySlot.js.map +7 -0
- package/dist/cjs/decorators/applyStyle.js.map +2 -2
- package/dist/cjs/decorators/attribute.js.map +1 -1
- package/dist/cjs/decorators/elementDefine.js +90 -52
- package/dist/cjs/decorators/elementDefine.js.map +2 -2
- package/dist/cjs/decorators/emitCustomEvent.js.map +1 -1
- package/dist/cjs/decorators/index.js +2 -0
- package/dist/cjs/decorators/index.js.map +2 -2
- package/dist/cjs/decorators/lifecycles.js +88 -24
- package/dist/cjs/decorators/lifecycles.js.map +3 -3
- package/dist/cjs/decorators/publishSwcAppMessage.js.map +2 -2
- package/dist/cjs/decorators/query.js +1 -1
- package/dist/cjs/decorators/query.js.map +2 -2
- package/dist/cjs/decorators/queryAll.js.map +1 -1
- package/dist/cjs/decorators/setProperty.js.map +1 -1
- package/dist/cjs/decorators/state.js +84 -0
- package/dist/cjs/decorators/state.js.map +7 -0
- package/dist/cjs/decorators/subscribeSwcAppMessageWhileConnected.js.map +1 -1
- package/dist/cjs/decorators/subscribeSwcAppRouteChangeWhileConnected.js.map +2 -2
- package/dist/cjs/elements/SwcApp.js +231 -0
- package/dist/cjs/elements/SwcApp.js.map +7 -0
- package/dist/cjs/elements/SwcAppMixin.js +78 -80
- package/dist/cjs/elements/SwcAppMixin.js.map +2 -2
- package/dist/cjs/elements/index.js +2 -1
- package/dist/cjs/elements/index.js.map +2 -2
- package/dist/cjs/elements/tt/SwcAppMixin.js +1 -0
- package/dist/cjs/elements/tt/SwcAppMixin.js.map +7 -0
- package/dist/cjs/elements/tt/SwcAsync.js +1 -0
- package/dist/cjs/elements/tt/SwcAsync.js.map +7 -0
- package/dist/cjs/elements/tt/SwcAsyncTemplate.js +1 -0
- package/dist/cjs/elements/tt/SwcAsyncTemplate.js.map +7 -0
- package/dist/cjs/elements/tt/SwcChoose.js +1 -0
- package/dist/cjs/elements/tt/SwcChoose.js.map +7 -0
- package/dist/cjs/elements/tt/SwcChooseTemplate.js +1 -0
- package/dist/cjs/elements/tt/SwcChooseTemplate.js.map +7 -0
- package/dist/cjs/elements/tt/SwcIf.js +1 -0
- package/dist/cjs/elements/tt/SwcIf.js.map +7 -0
- package/dist/cjs/elements/tt/SwcIfTemplate.js +1 -0
- package/dist/cjs/elements/tt/SwcIfTemplate.js.map +7 -0
- package/dist/cjs/elements/tt/SwcLoop.js +1 -0
- package/dist/cjs/elements/tt/SwcLoop.js.map +7 -0
- package/dist/cjs/elements/tt/SwcLoopTemplate.js +1 -0
- package/dist/cjs/elements/tt/SwcLoopTemplate.js.map +7 -0
- package/dist/cjs/elements/tt/SwcSubTemplates.js +1 -0
- package/dist/cjs/elements/tt/SwcSubTemplates.js.map +7 -0
- package/dist/cjs/elements/tt/register.js +1 -0
- package/dist/cjs/elements/tt/register.js.map +7 -0
- package/dist/cjs/index.js +10 -8
- package/dist/cjs/index.js.map +2 -2
- package/dist/cjs/{types.js → types/index.js} +1 -1
- package/dist/cjs/types/index.js.map +7 -0
- package/dist/cjs/types/window.d.js +16 -0
- package/dist/cjs/types/window.d.js.map +7 -0
- package/dist/cjs/utils/Utils.js +168 -26
- package/dist/cjs/utils/Utils.js.map +3 -3
- package/dist/esm/{elements/SwcAppEngine.js → SwcAppEngine.js} +7 -4
- package/dist/esm/SwcAppEngine.js.map +7 -0
- package/dist/esm/decorators/addEventListener.js +20 -4
- package/dist/esm/decorators/addEventListener.js.map +2 -2
- package/dist/esm/decorators/applyAttribute.js.map +1 -1
- package/dist/esm/decorators/applyClass.js.map +1 -1
- package/dist/esm/decorators/applyNode.js +109 -26
- package/dist/esm/decorators/applyNode.js.map +2 -2
- package/dist/esm/decorators/applySlot.js +110 -0
- package/dist/esm/decorators/applySlot.js.map +7 -0
- package/dist/esm/decorators/applyStyle.js.map +2 -2
- package/dist/esm/decorators/attribute.js.map +1 -1
- package/dist/esm/decorators/elementDefine.js +96 -58
- package/dist/esm/decorators/elementDefine.js.map +2 -2
- package/dist/esm/decorators/emitCustomEvent.js.map +1 -1
- package/dist/esm/decorators/index.js +2 -0
- package/dist/esm/decorators/index.js.map +2 -2
- package/dist/esm/decorators/lifecycles.js +88 -24
- package/dist/esm/decorators/lifecycles.js.map +3 -3
- package/dist/esm/decorators/publishSwcAppMessage.js.map +2 -2
- package/dist/esm/decorators/query.js +1 -1
- package/dist/esm/decorators/query.js.map +2 -2
- package/dist/esm/decorators/queryAll.js.map +1 -1
- package/dist/esm/decorators/setProperty.js.map +1 -1
- package/dist/esm/decorators/state.js +65 -0
- package/dist/esm/decorators/state.js.map +7 -0
- package/dist/esm/decorators/subscribeSwcAppMessageWhileConnected.js.map +1 -1
- package/dist/esm/decorators/subscribeSwcAppRouteChangeWhileConnected.js.map +2 -2
- package/dist/esm/elements/SwcApp.js +212 -0
- package/dist/esm/elements/SwcApp.js.map +7 -0
- package/dist/esm/elements/SwcAppMixin.js +76 -78
- package/dist/esm/elements/SwcAppMixin.js.map +2 -2
- package/dist/esm/elements/index.js +2 -1
- package/dist/esm/elements/index.js.map +2 -2
- package/dist/esm/elements/tt/SwcAppMixin.js +1 -0
- package/dist/esm/elements/tt/SwcAppMixin.js.map +7 -0
- package/dist/esm/elements/tt/SwcAsync.js +1 -0
- package/dist/esm/elements/tt/SwcAsync.js.map +7 -0
- package/dist/esm/elements/tt/SwcAsyncTemplate.js +1 -0
- package/dist/esm/elements/tt/SwcAsyncTemplate.js.map +7 -0
- package/dist/esm/elements/tt/SwcChoose.js +1 -0
- package/dist/esm/elements/tt/SwcChoose.js.map +7 -0
- package/dist/esm/elements/tt/SwcChooseTemplate.js +1 -0
- package/dist/esm/elements/tt/SwcChooseTemplate.js.map +7 -0
- package/dist/esm/elements/tt/SwcIf.js +1 -0
- package/dist/esm/elements/tt/SwcIf.js.map +7 -0
- package/dist/esm/elements/tt/SwcIfTemplate.js +1 -0
- package/dist/esm/elements/tt/SwcIfTemplate.js.map +7 -0
- package/dist/esm/elements/tt/SwcLoop.js +1 -0
- package/dist/esm/elements/tt/SwcLoop.js.map +7 -0
- package/dist/esm/elements/tt/SwcLoopTemplate.js +1 -0
- package/dist/esm/elements/tt/SwcLoopTemplate.js.map +7 -0
- package/dist/esm/elements/tt/SwcSubTemplates.js +1 -0
- package/dist/esm/elements/tt/SwcSubTemplates.js.map +7 -0
- package/dist/esm/elements/tt/register.js +1 -0
- package/dist/esm/elements/tt/register.js.map +7 -0
- package/dist/esm/index.js +11 -9
- package/dist/esm/index.js.map +2 -2
- package/dist/esm/{types.js → types/index.js} +1 -1
- package/dist/esm/types/index.js.map +7 -0
- package/dist/esm/types/window.d.js +1 -0
- package/dist/esm/types/window.d.js.map +7 -0
- package/dist/esm/utils/Utils.js +168 -26
- package/dist/esm/utils/Utils.js.map +3 -3
- package/dist/esm-bundle/dooboostore-simple-web-component.esm.js +7477 -2828
- package/dist/esm-bundle/dooboostore-simple-web-component.esm.js.map +4 -4
- package/dist/types/{elements/SwcAppEngine.d.ts → SwcAppEngine.d.ts} +9 -4
- package/dist/types/SwcAppEngine.d.ts.map +1 -0
- package/dist/types/decorators/addEventListener.d.ts +5 -2
- package/dist/types/decorators/addEventListener.d.ts.map +1 -1
- package/dist/types/decorators/applyAttribute.d.ts.map +1 -1
- package/dist/types/decorators/applyClass.d.ts.map +1 -1
- package/dist/types/decorators/applyNode.d.ts +24 -8
- package/dist/types/decorators/applyNode.d.ts.map +1 -1
- package/dist/types/decorators/applySlot.d.ts +27 -0
- package/dist/types/decorators/applySlot.d.ts.map +1 -0
- package/dist/types/decorators/applyStyle.d.ts.map +1 -1
- package/dist/types/decorators/attribute.d.ts.map +1 -1
- package/dist/types/decorators/elementDefine.d.ts.map +1 -1
- package/dist/types/decorators/emitCustomEvent.d.ts.map +1 -1
- package/dist/types/decorators/index.d.ts +2 -0
- package/dist/types/decorators/index.d.ts.map +1 -1
- package/dist/types/decorators/lifecycles.d.ts +26 -15
- package/dist/types/decorators/lifecycles.d.ts.map +1 -1
- package/dist/types/decorators/publishSwcAppMessage.d.ts.map +1 -1
- package/dist/types/decorators/query.d.ts +1 -1
- package/dist/types/decorators/query.d.ts.map +1 -1
- 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/state.d.ts +9 -0
- package/dist/types/decorators/state.d.ts.map +1 -0
- package/dist/types/decorators/subscribeSwcAppMessageWhileConnected.d.ts.map +1 -1
- package/dist/types/decorators/subscribeSwcAppRouteChangeWhileConnected.d.ts +5 -1
- package/dist/types/decorators/subscribeSwcAppRouteChangeWhileConnected.d.ts.map +1 -1
- package/dist/types/elements/SwcApp.d.ts +36 -0
- package/dist/types/elements/SwcApp.d.ts.map +1 -0
- package/dist/types/elements/SwcAppMixin.d.ts +26 -7
- package/dist/types/elements/SwcAppMixin.d.ts.map +1 -1
- package/dist/types/elements/index.d.ts +2 -1
- package/dist/types/elements/index.d.ts.map +1 -1
- package/dist/types/elements/tt/SwcAppMixin.d.ts +1 -0
- package/dist/types/elements/tt/SwcAppMixin.d.ts.map +1 -0
- package/dist/types/elements/tt/SwcAsync.d.ts +1 -0
- package/dist/types/elements/tt/SwcAsync.d.ts.map +1 -0
- package/dist/types/elements/tt/SwcAsyncTemplate.d.ts +1 -0
- package/dist/types/elements/tt/SwcAsyncTemplate.d.ts.map +1 -0
- package/dist/types/elements/tt/SwcChoose.d.ts +1 -0
- package/dist/types/elements/tt/SwcChoose.d.ts.map +1 -0
- package/dist/types/elements/tt/SwcChooseTemplate.d.ts +1 -0
- package/dist/types/elements/tt/SwcChooseTemplate.d.ts.map +1 -0
- package/dist/types/elements/tt/SwcIf.d.ts +1 -0
- package/dist/types/elements/{SwcIf.d.ts.map → tt/SwcIf.d.ts.map} +1 -1
- package/dist/types/elements/tt/SwcIfTemplate.d.ts +1 -0
- package/dist/types/elements/tt/SwcIfTemplate.d.ts.map +1 -0
- package/dist/types/elements/tt/SwcLoop.d.ts +1 -0
- package/dist/types/elements/tt/SwcLoop.d.ts.map +1 -0
- package/dist/types/elements/tt/SwcLoopTemplate.d.ts +1 -0
- package/dist/types/elements/tt/SwcLoopTemplate.d.ts.map +1 -0
- package/dist/types/elements/tt/SwcSubTemplates.d.ts +1 -0
- package/dist/types/elements/tt/SwcSubTemplates.d.ts.map +1 -0
- package/dist/types/elements/tt/register.d.ts +1 -0
- package/dist/types/elements/tt/register.d.ts.map +1 -0
- package/dist/types/index.d.ts +2 -2
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/{types.d.ts → types/index.d.ts} +12 -12
- package/dist/types/types/index.d.ts.map +1 -0
- package/dist/types/utils/Utils.d.ts +18 -5
- package/dist/types/utils/Utils.d.ts.map +1 -1
- package/dist/umd-bundle/dooboostore-simple-web-component.umd.js +7478 -2829
- package/dist/umd-bundle/dooboostore-simple-web-component.umd.js.map +4 -4
- package/package.json +4 -4
- package/src/{elements/SwcAppEngine.ts → SwcAppEngine.ts} +17 -8
- package/src/decorators/addEventListener.ts +21 -5
- package/src/decorators/applyAttribute.ts +1 -1
- package/src/decorators/applyClass.ts +1 -1
- package/src/decorators/applyNode.ts +186 -66
- package/src/decorators/applySlot.ts +188 -0
- package/src/decorators/applyStyle.ts +4 -4
- package/src/decorators/attribute.ts +1 -1
- package/src/decorators/elementDefine.ts +142 -68
- package/src/decorators/emitCustomEvent.ts +1 -1
- package/src/decorators/index.ts +3 -0
- package/src/decorators/lifecycles.ts +119 -30
- package/src/decorators/publishSwcAppMessage.ts +2 -3
- package/src/decorators/query.ts +4 -4
- package/src/decorators/queryAll.ts +1 -1
- package/src/decorators/setProperty.ts +1 -1
- package/src/decorators/state.ts +84 -0
- package/src/decorators/subscribeSwcAppMessageWhileConnected.ts +1 -1
- package/src/decorators/subscribeSwcAppRouteChangeWhileConnected.ts +4 -3
- package/src/elements/SwcApp.ts +241 -0
- package/src/elements/SwcAppMixin.ts +98 -146
- package/src/elements/index.ts +4 -1
- package/src/elements/tt/SwcAppMixin.ts +13 -0
- package/src/elements/tt/SwcAsync.ts +139 -0
- package/src/elements/tt/SwcAsyncTemplate.ts +126 -0
- package/src/elements/tt/SwcChoose.ts +182 -0
- package/src/elements/tt/SwcChooseTemplate.ts +229 -0
- package/src/elements/tt/SwcIf.ts +145 -0
- package/src/elements/tt/SwcIfTemplate.ts +158 -0
- package/src/elements/tt/SwcLoop.ts +222 -0
- package/src/elements/tt/SwcLoopTemplate.ts +255 -0
- package/src/elements/tt/SwcSubTemplates.ts +6 -0
- package/src/elements/tt/register.ts +720 -0
- package/src/index.ts +11 -9
- package/src/{types.ts → types/index.ts} +15 -11
- package/src/types/window.d.ts +46 -0
- package/src/utils/Utils.ts +214 -24
- package/dist/cjs/elements/SwcAppEngine.js.map +0 -7
- package/dist/cjs/elements/SwcAsync.js +0 -129
- package/dist/cjs/elements/SwcAsync.js.map +0 -7
- package/dist/cjs/elements/SwcChoose.js +0 -155
- package/dist/cjs/elements/SwcChoose.js.map +0 -7
- package/dist/cjs/elements/SwcIf.js +0 -117
- package/dist/cjs/elements/SwcIf.js.map +0 -7
- package/dist/cjs/elements/SwcLoop.js +0 -176
- package/dist/cjs/elements/SwcLoop.js.map +0 -7
- package/dist/cjs/elements/SwcSubTemplates.js +0 -13
- package/dist/cjs/elements/SwcSubTemplates.js.map +0 -7
- package/dist/cjs/elements/register.js +0 -1026
- package/dist/cjs/elements/register.js.map +0 -7
- package/dist/cjs/types.js.map +0 -7
- package/dist/esm/elements/SwcAppEngine.js.map +0 -7
- package/dist/esm/elements/SwcAsync.js +0 -129
- package/dist/esm/elements/SwcAsync.js.map +0 -7
- package/dist/esm/elements/SwcChoose.js +0 -155
- package/dist/esm/elements/SwcChoose.js.map +0 -7
- package/dist/esm/elements/SwcIf.js +0 -117
- package/dist/esm/elements/SwcIf.js.map +0 -7
- package/dist/esm/elements/SwcLoop.js +0 -176
- package/dist/esm/elements/SwcLoop.js.map +0 -7
- package/dist/esm/elements/SwcSubTemplates.js +0 -13
- package/dist/esm/elements/SwcSubTemplates.js.map +0 -7
- package/dist/esm/elements/register.js +0 -1007
- package/dist/esm/elements/register.js.map +0 -7
- package/dist/esm/types.js.map +0 -7
- package/dist/types/elements/SwcAppEngine.d.ts.map +0 -1
- package/dist/types/elements/SwcAsync.d.ts +0 -2
- package/dist/types/elements/SwcAsync.d.ts.map +0 -1
- package/dist/types/elements/SwcChoose.d.ts +0 -2
- package/dist/types/elements/SwcChoose.d.ts.map +0 -1
- package/dist/types/elements/SwcIf.d.ts +0 -2
- package/dist/types/elements/SwcLoop.d.ts +0 -2
- package/dist/types/elements/SwcLoop.d.ts.map +0 -1
- package/dist/types/elements/SwcSubTemplates.d.ts +0 -13
- package/dist/types/elements/SwcSubTemplates.d.ts.map +0 -1
- package/dist/types/elements/register.d.ts +0 -4
- package/dist/types/elements/register.d.ts.map +0 -1
- package/dist/types/types.d.ts.map +0 -1
- package/src/elements/SwcAsync.ts +0 -126
- package/src/elements/SwcChoose.ts +0 -190
- package/src/elements/SwcIf.ts +0 -124
- package/src/elements/SwcLoop.ts +0 -205
- package/src/elements/SwcSubTemplates.ts +0 -6
- package/src/elements/register.ts +0 -1022
package/src/index.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import 'reflect-metadata';
|
|
2
|
-
|
|
2
|
+
export * from './elements'
|
|
3
|
+
import { defineSwcAppAll } from './elements';
|
|
3
4
|
import {ConstructorType} from "@dooboostore/core";
|
|
4
5
|
|
|
5
6
|
// Decorators
|
|
@@ -15,15 +16,16 @@ export * from './utils/Utils';
|
|
|
15
16
|
export * from './config/config';
|
|
16
17
|
|
|
17
18
|
// Registration Factory
|
|
18
|
-
export default (w: Window, other?: (((w: Window) =>
|
|
19
|
-
const cr =
|
|
20
|
-
const
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
19
|
+
export default async (w: Window, other?: (((w: Window) => Promise<CustomElementConstructor> | CustomElementConstructor) | any) []) => {
|
|
20
|
+
const cr = await defineSwcAppAll(w);
|
|
21
|
+
// const cr = await elementFactories(w);
|
|
22
|
+
if (other) {
|
|
23
|
+
for (const fn of other) {
|
|
24
|
+
if (typeof fn === 'function') {
|
|
25
|
+
await fn(w);
|
|
26
|
+
}
|
|
24
27
|
}
|
|
25
|
-
}
|
|
28
|
+
}
|
|
26
29
|
|
|
27
30
|
return cr;
|
|
28
|
-
// return r??[];
|
|
29
31
|
};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { SimpleApplication } from '@dooboostore/simple-boot
|
|
1
|
+
import { SimpleApplication } from '@dooboostore/simple-boot';
|
|
2
2
|
import { Router } from '@dooboostore/core-web';
|
|
3
|
-
import {SwcAttributeConfigType} from "
|
|
3
|
+
import {SwcAttributeConfigType, SwcConfigType} from "../SwcAppEngine";
|
|
4
4
|
|
|
5
5
|
export enum InjectSituationType {
|
|
6
6
|
HOST_SET = 'SIMPLE_WEB_COMPONENT://HOSTSET',
|
|
@@ -35,7 +35,7 @@ export type HostSet = {
|
|
|
35
35
|
$hosts: HTMLElement[]; // All SWC ancestors [root, ..., parent]
|
|
36
36
|
$firstHost: HTMLElement | null; // Top-most SWC ancestor
|
|
37
37
|
$lastHost: HTMLElement | null; // Same as $host
|
|
38
|
-
$templateHost: HTMLTemplateElement | null | undefined;
|
|
38
|
+
// $templateHost: HTMLTemplateElement | null | undefined;
|
|
39
39
|
$appHost: SwcAppInterface | null;
|
|
40
40
|
$appHosts: SwcAppInterface[];
|
|
41
41
|
$firstAppHost: SwcAppInterface | null;
|
|
@@ -50,16 +50,10 @@ export type SwcAppMessage<T = any> = {
|
|
|
50
50
|
type?: string;
|
|
51
51
|
};
|
|
52
52
|
|
|
53
|
-
|
|
54
|
-
value: any;
|
|
55
|
-
refresh(): void;
|
|
56
|
-
}
|
|
57
|
-
export interface SwcIfInterface extends HTMLTemplateElement {
|
|
58
|
-
value: any;
|
|
59
|
-
refresh(): void;
|
|
60
|
-
}
|
|
53
|
+
|
|
61
54
|
export interface SwcAppInterface extends HTMLElement {
|
|
62
55
|
simpleApplication?: SimpleApplication;
|
|
56
|
+
config?: SwcConfigType;
|
|
63
57
|
router?: Router;
|
|
64
58
|
connect(config?: SwcAttributeConfigType): Promise<void>;
|
|
65
59
|
routing(path: string): Promise<void>;
|
|
@@ -68,3 +62,13 @@ export interface SwcAppInterface extends HTMLElement {
|
|
|
68
62
|
forward(): void;
|
|
69
63
|
publishMessage(message: SwcAppMessage): void;
|
|
70
64
|
}
|
|
65
|
+
|
|
66
|
+
export interface SwcElement {
|
|
67
|
+
// _swcId: string;
|
|
68
|
+
createSlotString(id: string): string
|
|
69
|
+
createEaHtml(id: string, script: string): string
|
|
70
|
+
createEaText(id: string, script: string): string
|
|
71
|
+
createEaAttribute(id: string, attributeName: string): string
|
|
72
|
+
createEaEvent(id: string, eventName: string): string
|
|
73
|
+
createEaProperty(id: string, propertyName: string): string
|
|
74
|
+
}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import {HTMLDialogElement} from "@dooboostore/dom-parser";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Global type augmentation for @dooboostore showcase
|
|
5
|
+
*/
|
|
6
|
+
declare global {
|
|
7
|
+
interface Window {
|
|
8
|
+
HTMLElement: typeof HTMLElement;
|
|
9
|
+
HTMLDivElement: typeof HTMLDivElement;
|
|
10
|
+
HTMLButtonElement: typeof HTMLButtonElement;
|
|
11
|
+
HTMLTemplateElement: typeof HTMLTemplateElement;
|
|
12
|
+
HTMLAnchorElement: typeof HTMLAnchorElement;
|
|
13
|
+
HTMLDialogElement: typeof HTMLDialogElement;
|
|
14
|
+
HTMLBodyElement: typeof HTMLBodyElement;
|
|
15
|
+
HTMLSectionElement: typeof HTMLSectionElement;
|
|
16
|
+
HTMLMainElement: typeof HTMLMainElement;
|
|
17
|
+
ShadowRoot: typeof ShadowRoot;
|
|
18
|
+
location: Location;
|
|
19
|
+
document: Document;
|
|
20
|
+
history: History;
|
|
21
|
+
console: Console;
|
|
22
|
+
IntersectionObserver: typeof IntersectionObserver;
|
|
23
|
+
SwaggerUIBundle: any;
|
|
24
|
+
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
namespace Dooboostore {
|
|
28
|
+
interface PackageInfo {
|
|
29
|
+
id: string;
|
|
30
|
+
name: string;
|
|
31
|
+
description: string;
|
|
32
|
+
longDescription: string;
|
|
33
|
+
icon: string;
|
|
34
|
+
color: string;
|
|
35
|
+
features: PackageFeature[];
|
|
36
|
+
example: string;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
interface PackageFeature {
|
|
40
|
+
title: string;
|
|
41
|
+
desc: string;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
export {};
|
package/src/utils/Utils.ts
CHANGED
|
@@ -1,16 +1,26 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {SwcAppInterface, HostSet, HelperSet, HelperHostSet} from '../types';
|
|
2
2
|
import {getElementConfig} from "../decorators";
|
|
3
|
-
import {
|
|
4
|
-
import {Router} from "@dooboostore/core-web";
|
|
3
|
+
import {getExpression, ExpressionResult, GetExpressionConfig, GetExpressionResult, ActionExpression} from '@dooboostore/core';
|
|
4
|
+
import {ElementApply, NodeSlot, Router} from "@dooboostore/core-web";
|
|
5
5
|
|
|
6
6
|
export const SWC_NOT_FOUND = Symbol.for('simple-web-component:not-found');
|
|
7
7
|
|
|
8
|
+
|
|
9
|
+
export const html = (str: string, document: Document) => {
|
|
10
|
+
return [...document.createRange().createContextualFragment(str).childNodes];
|
|
11
|
+
}
|
|
8
12
|
// DOM Creation Utilities
|
|
9
|
-
export const htmlFragment = (html: string, doc
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
13
|
+
export const htmlFragment = (html: string | Node | Node[], doc: Document): DocumentFragment => {
|
|
14
|
+
if (!doc) throw new Error('Document is not available');
|
|
15
|
+
const template = doc.createElement('template');
|
|
16
|
+
if (typeof html === 'string') {
|
|
17
|
+
template.innerHTML = html.trim();
|
|
18
|
+
} else if (html instanceof Node) {
|
|
19
|
+
template.appendChild(html);
|
|
20
|
+
} else if (Array.isArray(html)) {
|
|
21
|
+
template.append(...html);
|
|
22
|
+
}
|
|
23
|
+
// template.innerHTML = html.trim();
|
|
14
24
|
return template.content;
|
|
15
25
|
};
|
|
16
26
|
|
|
@@ -26,16 +36,21 @@ export const commentNode = (comment: string | any, doc?: Document): Comment => {
|
|
|
26
36
|
return d.createComment(comment !== undefined && comment !== null ? String(comment) : '');
|
|
27
37
|
};
|
|
28
38
|
|
|
39
|
+
export type CreateElementConfig = { innerHtml?: string; property?: Record<string, any>, attrs?: Record<string, any>; };
|
|
29
40
|
export const createElement = <T extends HTMLElement>(
|
|
41
|
+
documentOrWindow: Document | Window,
|
|
30
42
|
tagName: string,
|
|
31
|
-
options?:
|
|
43
|
+
options?: CreateElementConfig
|
|
32
44
|
): T => {
|
|
33
|
-
const
|
|
34
|
-
if (!
|
|
35
|
-
const el =
|
|
36
|
-
if (options?.
|
|
45
|
+
const doc = 'document' in documentOrWindow ? documentOrWindow.document : documentOrWindow;
|
|
46
|
+
if (!doc) throw new Error('Document is not available');
|
|
47
|
+
const el = doc.createElement(tagName) as T;
|
|
48
|
+
if (options?.innerHtml) el.innerHTML = options.innerHtml;
|
|
37
49
|
if (options?.attrs) {
|
|
38
|
-
Object.entries(options.attrs).forEach(([k, v]) => el.setAttribute(k, String(v)));
|
|
50
|
+
Object.entries(options.attrs).filter(([k,v])=>v).forEach(([k, v]) => el.setAttribute(k, String(v)));
|
|
51
|
+
}
|
|
52
|
+
if (options?.property) {
|
|
53
|
+
Object.entries(options.property).forEach(([k, v]) => el[k] = v);
|
|
39
54
|
}
|
|
40
55
|
return el;
|
|
41
56
|
};
|
|
@@ -170,7 +185,7 @@ export namespace SwcUtils {
|
|
|
170
185
|
const qs = p.split('?')[1];
|
|
171
186
|
qs?.split('&').forEach(it => {
|
|
172
187
|
const [k, v] = it.split('=');
|
|
173
|
-
searchParams.set(k,v);
|
|
188
|
+
searchParams.set(k, v);
|
|
174
189
|
})
|
|
175
190
|
return {
|
|
176
191
|
path: p,
|
|
@@ -265,6 +280,180 @@ export namespace SwcUtils {
|
|
|
265
280
|
return findNearestSwcHostIncludingSelf(el);
|
|
266
281
|
};
|
|
267
282
|
|
|
283
|
+
|
|
284
|
+
export function projectProcessHtml(id: string, htmlOrNode: string, document: Document): string;
|
|
285
|
+
export function projectProcessHtml(id: string, htmlOrNode: ((Node)[]) | Node, document: Document): (Node)[];
|
|
286
|
+
export function projectProcessHtml(id: string, htmlOrNode: string | ((Node)[]) | Node, document: Document): string | (Node)[] {
|
|
287
|
+
if (typeof htmlOrNode === 'string') {
|
|
288
|
+
// slot
|
|
289
|
+
let t = htmlOrNode;
|
|
290
|
+
// if (!config?.excludeSlot) {
|
|
291
|
+
t = SwcUtils.processHtml(id, t, {document: document, replaceWrap: {start: '<!--[[', end: ']]-->'}, replacer: (id, script) => NodeSlot.slot(id, script)});
|
|
292
|
+
// }
|
|
293
|
+
// if (!config?.excludeHtml) {
|
|
294
|
+
// Ea html
|
|
295
|
+
t = SwcUtils.processHtml(id, t, {document: document, replaceWrap: {start: '<!--[html', end: ']-->'}, replacer: (id, script) => ElementApply.html(id, script)});
|
|
296
|
+
// }
|
|
297
|
+
|
|
298
|
+
// if (!config?.excludeText) {
|
|
299
|
+
// Ea text
|
|
300
|
+
t = SwcUtils.processHtml(id, t, {document: document, replaceWrap: {start: '<!--[text', end: ']-->'}, replacer: (id, script) => ElementApply.text(id, script)});
|
|
301
|
+
// }
|
|
302
|
+
|
|
303
|
+
// if (!config.excludeAttribute) {
|
|
304
|
+
// Ea attribute
|
|
305
|
+
t = SwcUtils.processHtml(id, t, {
|
|
306
|
+
document: document,
|
|
307
|
+
replaceWrap: {start: /a::\w+=\s*"/, end: /"\s/}, replacer: (id, script, er) => {
|
|
308
|
+
console.log('start: /a-->', er)
|
|
309
|
+
const match = er.expressionStart.match(/^\w+::(\w+)="/)
|
|
310
|
+
const name = match?.[1];
|
|
311
|
+
return ElementApply.attribute(id, name, script)
|
|
312
|
+
}
|
|
313
|
+
});
|
|
314
|
+
// }
|
|
315
|
+
|
|
316
|
+
// if (!config.excludeEvent) {
|
|
317
|
+
t = SwcUtils.processHtml(id, t, {
|
|
318
|
+
document: document,
|
|
319
|
+
replaceWrap: {start: /e::\w+=\s*"/, end: /"\s/}, replacer: (id, script, er) => {
|
|
320
|
+
console.log('start: /e-->', er)
|
|
321
|
+
const match = er.expressionStart.match(/^\w+::(\w+)="/)
|
|
322
|
+
const name = match?.[1];
|
|
323
|
+
return ElementApply.event(id, name, script)
|
|
324
|
+
}
|
|
325
|
+
});
|
|
326
|
+
// }
|
|
327
|
+
|
|
328
|
+
|
|
329
|
+
// if (!config.excludeProperty) {
|
|
330
|
+
t = SwcUtils.processHtml(id, t, {
|
|
331
|
+
document: document,
|
|
332
|
+
replaceWrap: {start: /p:\w+=\s*"/, end: /"\s/}, replacer: (id, script, er) => {
|
|
333
|
+
console.log('start: /p-->', er)
|
|
334
|
+
const match = er.expressionStart.match(/^\w+:(\w+)="/)
|
|
335
|
+
const name = match?.[1];
|
|
336
|
+
return ElementApply.property(id, name, script)
|
|
337
|
+
}
|
|
338
|
+
});
|
|
339
|
+
return t;
|
|
340
|
+
} else if (htmlOrNode) {
|
|
341
|
+
|
|
342
|
+
// 아래 node일떄도 처리하도록 만듬 아직테스트는 안해봄 테스트후 주석지울것.
|
|
343
|
+
const nodes = Array.isArray(htmlOrNode) ? htmlOrNode : [htmlOrNode];
|
|
344
|
+
const window = document.defaultView;
|
|
345
|
+
nodes.forEach(node => {
|
|
346
|
+
// TextNode 합치기
|
|
347
|
+
node.normalize();
|
|
348
|
+
const nodes = document.createTreeWalker(node, window.NodeFilter.SHOW_ELEMENT | window.NodeFilter.SHOW_COMMENT)
|
|
349
|
+
|
|
350
|
+
const getSlotData = (s: string) => {
|
|
351
|
+
return s.match(/^\[\[([\s\S]+)\]\]$/)?.[1]?.trim();
|
|
352
|
+
}
|
|
353
|
+
const getHtmlData = (s: string) => {
|
|
354
|
+
return s.match(/^\[html([\s\S]+)\]$/)?.[1]?.trim();
|
|
355
|
+
// return s.startsWith('[html') && s.endsWith(']');
|
|
356
|
+
}
|
|
357
|
+
const getTextData = (s: string) => {
|
|
358
|
+
return s.match(/^\[text([\s\S]+)\]$/)?.[1]?.trim();
|
|
359
|
+
// return s.startsWith('[text') && s.endsWith(']');
|
|
360
|
+
}
|
|
361
|
+
while (nodes.nextNode()) {
|
|
362
|
+
const currentNode = nodes.currentNode;
|
|
363
|
+
if (currentNode.nodeType === window.Node.COMMENT_NODE) {
|
|
364
|
+
const targetNode = currentNode as Comment;
|
|
365
|
+
const v = targetNode.data.trim();
|
|
366
|
+
const slotData = getSlotData(v);
|
|
367
|
+
const htmlData = getHtmlData(v);
|
|
368
|
+
const textData = getTextData(v);
|
|
369
|
+
if (v && slotData) {
|
|
370
|
+
const res = NodeSlot.slotIds(id, slotData)
|
|
371
|
+
targetNode.data = res.start;
|
|
372
|
+
const end = document.createComment(res.end)
|
|
373
|
+
targetNode.parentNode?.insertBefore(end, targetNode.nextSibling);
|
|
374
|
+
// document.createTe
|
|
375
|
+
|
|
376
|
+
} else if (v && htmlData) {
|
|
377
|
+
const s = ElementApply.htmlDataSet(id, htmlData);
|
|
378
|
+
targetNode.data = s.start;
|
|
379
|
+
const end = document.createComment(s.end)
|
|
380
|
+
targetNode.parentNode?.insertBefore(end, targetNode.nextSibling);
|
|
381
|
+
} else if (v && textData) {
|
|
382
|
+
const s = ElementApply.textDataSet(id, textData);
|
|
383
|
+
const end = document.createComment(s.end)
|
|
384
|
+
targetNode.data = s.start;
|
|
385
|
+
targetNode.parentNode?.insertBefore(end, targetNode.nextSibling);
|
|
386
|
+
}
|
|
387
|
+
|
|
388
|
+
} else if (currentNode.nodeType === window.Node.ELEMENT_NODE) {
|
|
389
|
+
const targetNode = currentNode as Element;
|
|
390
|
+
targetNode.getAttributeNames().forEach(it => {
|
|
391
|
+
const e = it.match(/e::(\w+)$/);
|
|
392
|
+
const eventName = e?.[1];
|
|
393
|
+
const p = it.match(/p::(\w+)$/);
|
|
394
|
+
const propertyName = p?.[1];
|
|
395
|
+
const a = it.match(/a::(\w+)$/);
|
|
396
|
+
const attributeName = a?.[1];
|
|
397
|
+
|
|
398
|
+
const value = targetNode.getAttribute(it);
|
|
399
|
+
if (eventName) {
|
|
400
|
+
targetNode.setAttribute(ElementApply.eventName(id, eventName), value);
|
|
401
|
+
targetNode.removeAttribute(it);
|
|
402
|
+
} else if (propertyName) {
|
|
403
|
+
targetNode.setAttribute(ElementApply.propertyName(id, propertyName), value);
|
|
404
|
+
targetNode.removeAttribute(it);
|
|
405
|
+
} else if (attributeName) {
|
|
406
|
+
targetNode.setAttribute(ElementApply.attributeName(id, attributeName), value);
|
|
407
|
+
targetNode.removeAttribute(it);
|
|
408
|
+
}
|
|
409
|
+
})
|
|
410
|
+
}
|
|
411
|
+
}
|
|
412
|
+
|
|
413
|
+
})
|
|
414
|
+
|
|
415
|
+
return nodes;
|
|
416
|
+
}
|
|
417
|
+
// }
|
|
418
|
+
|
|
419
|
+
|
|
420
|
+
}
|
|
421
|
+
|
|
422
|
+
// export function processHtml(id: string, htmlOrNode: string, config: { document: Document, replaceWrap: { start: string | RegExp, end: string | RegExp }, replacer: (id: string, script: string, er: ExpressionResult) => string }): string;
|
|
423
|
+
// export function processHtml(id: string, htmlOrNode: (Node | string)[], config: { document: Document, replaceWrap: { start: string | RegExp, end: string | RegExp }, replacer: (id: string, script: string, er: ExpressionResult) => string }): (Node | string)[] ;
|
|
424
|
+
export function processHtml(
|
|
425
|
+
id: string,
|
|
426
|
+
html: string,
|
|
427
|
+
config: { document: Document, replaceWrap: { start: string | RegExp, end: string | RegExp }, replacer: (id: string, script: string, er: ExpressionResult) => string }
|
|
428
|
+
): string {
|
|
429
|
+
const replaceStart = config.replaceWrap.start;
|
|
430
|
+
const replaceEnd = config.replaceWrap.end;
|
|
431
|
+
const callReturnStart = `${config.replaceWrap.start}=`;
|
|
432
|
+
const callReturnEnd = `${config.replaceWrap.end}`;
|
|
433
|
+
const callStart = `${config.replaceWrap.start}@`;
|
|
434
|
+
const callEnd = `${config.replaceWrap.end}`;
|
|
435
|
+
const hasPattern = (text: string | null | undefined, start: string, end: string) => {
|
|
436
|
+
if (!text) return false;
|
|
437
|
+
const s = text.indexOf(start);
|
|
438
|
+
const e = text.indexOf(end, s + start.length);
|
|
439
|
+
return s !== -1 && e !== -1 && s < e;
|
|
440
|
+
};
|
|
441
|
+
|
|
442
|
+
const actionConfig: GetExpressionConfig = {expression: {replace: {start: replaceStart, end: replaceEnd}, callReturn: {start: callReturnStart, end: callReturnEnd}, call: {start: callStart, end: callEnd}}};
|
|
443
|
+
const runActionExpression = (source: string) => {
|
|
444
|
+
const actionExpression = new ActionExpression(source, actionConfig);
|
|
445
|
+
actionExpression.getExpressions().filter(it => it.type === 'replace').forEach(it => {
|
|
446
|
+
actionExpression.replace(it, config.replacer(id, it.script?.trim(), it));
|
|
447
|
+
});
|
|
448
|
+
return actionExpression.toResult();
|
|
449
|
+
};
|
|
450
|
+
|
|
451
|
+
return runActionExpression(html);
|
|
452
|
+
// if (typeof html === 'string') {
|
|
453
|
+
// } else {
|
|
454
|
+
// }
|
|
455
|
+
}
|
|
456
|
+
|
|
268
457
|
export const getAppHosts = (el: HTMLElement): SwcAppInterface[] => {
|
|
269
458
|
// const hosts = getHosts(el);
|
|
270
459
|
// return hosts.filter(host => host.tagName.toLowerCase() === 'swc-app' || host.getAttribute('is')?.startsWith('swc-app-')) as SwcAppInterface[];
|
|
@@ -337,7 +526,7 @@ export namespace SwcUtils {
|
|
|
337
526
|
|
|
338
527
|
export const getHostSet = (el: HTMLElement): HostSet => {
|
|
339
528
|
const ancestors = findAllSwcHostsIncludingSelf(el); // [root, ..., parent]
|
|
340
|
-
|
|
529
|
+
|
|
341
530
|
const $host = ancestors.length > 0 ? ancestors[ancestors.length - 1] : null;
|
|
342
531
|
const $parentHost = ancestors.length > 1 ? ancestors[ancestors.length - 2] : null;
|
|
343
532
|
const $hosts = ancestors;
|
|
@@ -364,7 +553,7 @@ export namespace SwcUtils {
|
|
|
364
553
|
$hosts,
|
|
365
554
|
$firstHost,
|
|
366
555
|
$lastHost: $host,
|
|
367
|
-
$templateHost: (el as any).__swc_template_host,
|
|
556
|
+
// $templateHost: (el as any).__swc_template_host,
|
|
368
557
|
$appHost,
|
|
369
558
|
$appHosts,
|
|
370
559
|
$firstAppHost,
|
|
@@ -376,11 +565,11 @@ export namespace SwcUtils {
|
|
|
376
565
|
export const parsePathPattern = (pattern: string | undefined, currentPath: string): { [key: string]: string } | null => {
|
|
377
566
|
// pattern이 null/undefined면 와일드카드 (모든 경로 매칭)
|
|
378
567
|
if (pattern === null || pattern === undefined) return {};
|
|
379
|
-
|
|
568
|
+
|
|
380
569
|
// 공백만 있는 패턴도 와일드카드
|
|
381
570
|
const trimmedPattern = pattern.trim();
|
|
382
571
|
if (trimmedPattern === '' && pattern !== '') return {}; // 공백 문자만 있는 경우
|
|
383
|
-
|
|
572
|
+
|
|
384
573
|
// 패턴을 정규식으로 변환
|
|
385
574
|
// 지원 형식:
|
|
386
575
|
// {id} → ([^/]+) 기본 (/ 제외한 모든 문자)
|
|
@@ -392,19 +581,20 @@ export namespace SwcUtils {
|
|
|
392
581
|
// customRegex가 있으면 사용, 없으면 기본값 ([^/]+)
|
|
393
582
|
return `(${customRegex || '[^/]+'})`;
|
|
394
583
|
});
|
|
395
|
-
|
|
584
|
+
|
|
396
585
|
const regex = new RegExp(`^${regexPattern}$`);
|
|
397
586
|
const match = currentPath.match(regex);
|
|
398
|
-
|
|
587
|
+
|
|
399
588
|
if (!match) return null;
|
|
400
|
-
|
|
589
|
+
|
|
401
590
|
const result: { [key: string]: string } = {};
|
|
402
591
|
paramNames.forEach((name, index) => {
|
|
403
592
|
result[name] = match[index + 1];
|
|
404
593
|
});
|
|
405
|
-
|
|
594
|
+
|
|
406
595
|
return result;
|
|
407
596
|
};
|
|
408
597
|
|
|
409
598
|
|
|
410
|
-
}
|
|
599
|
+
}
|
|
600
|
+
;
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 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\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;AAAA;AAAA;AAAA;AAAA;AAAA,+BAAkC;AAClC,sBAAgE;AAChE,2BAA8B;AAC9B,uBAA0B;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,2BAAW,EAAE,QAAQ,KAAK,QAAQ,QAAQ,UAAU,KAAK,QAAQ,KAAK,CAAC;AAAA,MAC3F,WAAW,KAAK,QAAQ,cAAc,QAAQ;AAC5C,aAAK,SAAS,IAAI,2BAAW,EAAE,QAAQ,KAAK,QAAQ,QAAQ,UAAU,KAAK,QAAQ,KAAK,CAAC;AAAA,MAC3F,WAAW,KAAK,QAAQ,cAAc,WAAW;AAC/C,aAAK,SAAS,IAAI,mCAAc,EAAE,QAAQ,KAAK,QAAQ,QAAQ,UAAU,KAAK,QAAQ,KAAK,CAAC;AAAA,MAC9F;AAKA,WAAK,oBAAoB,IAAI;AAAA,QAC3B,IAAI,2BAAU;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,wBAAQ,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
|
-
"names": []
|
|
7
|
-
}
|
|
@@ -1,129 +0,0 @@
|
|
|
1
|
-
var import_changedAttributeThis = require("../decorators/changedAttributeThis");
|
|
2
|
-
var import_Utils = require("../utils/Utils");
|
|
3
|
-
var import_core = require("@dooboostore/core");
|
|
4
|
-
var import_core_web = require("@dooboostore/core-web");
|
|
5
|
-
var import_decorators = require("../decorators");
|
|
6
|
-
var __decorate = function(decorators, target, key, desc) {
|
|
7
|
-
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
8
|
-
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
9
|
-
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
10
|
-
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
11
|
-
};
|
|
12
|
-
var __metadata = function(k, v) {
|
|
13
|
-
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
14
|
-
};
|
|
15
|
-
class SwcAsync extends HTMLTemplateElement {
|
|
16
|
-
constructor() {
|
|
17
|
-
super(...arguments);
|
|
18
|
-
this._nodes = [];
|
|
19
|
-
}
|
|
20
|
-
get value() {
|
|
21
|
-
return this._value;
|
|
22
|
-
}
|
|
23
|
-
set value(nv) {
|
|
24
|
-
this.executeAsync(nv);
|
|
25
|
-
}
|
|
26
|
-
setValue(valueAttr) {
|
|
27
|
-
this.executeAsync(this._value);
|
|
28
|
-
}
|
|
29
|
-
// @changedAttributeThis('replace-wrap')
|
|
30
|
-
// private setReplaceWrap() {
|
|
31
|
-
// this.executeAsync(this._value);
|
|
32
|
-
// }
|
|
33
|
-
executeAsync(result = this._value) {
|
|
34
|
-
if (result === void 0 || result === null) {
|
|
35
|
-
this.refresh("default");
|
|
36
|
-
return;
|
|
37
|
-
}
|
|
38
|
-
if (result instanceof Promise) {
|
|
39
|
-
this.refresh("loading");
|
|
40
|
-
result.then((v) => {
|
|
41
|
-
this.resultValue = v;
|
|
42
|
-
this.refresh("success");
|
|
43
|
-
}).catch((e) => {
|
|
44
|
-
console.error("[SWC-ASYNC] Promise rejected:", e);
|
|
45
|
-
this.resultValue = e;
|
|
46
|
-
this.refresh("error");
|
|
47
|
-
});
|
|
48
|
-
} else {
|
|
49
|
-
this.resultValue = result;
|
|
50
|
-
this.refresh("success");
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
replaceExpressions(html, groupArgs, context, wrap) {
|
|
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
|
-
}
|
|
64
|
-
const ae = new import_core.ActionExpression(html, config);
|
|
65
|
-
const win = this.ownerDocument?.defaultView || window;
|
|
66
|
-
for (const expr of ae.getExpressions("replace")) {
|
|
67
|
-
try {
|
|
68
|
-
const value = import_core.FunctionUtils.executeReturn({
|
|
69
|
-
script: import_core_web.ConvertUtils.decodeHtmlEntity(expr.script, win.document),
|
|
70
|
-
context,
|
|
71
|
-
args: groupArgs
|
|
72
|
-
});
|
|
73
|
-
ae.replace(expr, String(value));
|
|
74
|
-
} catch (e) {
|
|
75
|
-
console.error(`[SWC] Failed to execute ${expr.original}:`, e);
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
return ae.getUnprocessedTemplate();
|
|
79
|
-
}
|
|
80
|
-
refresh(state = "default") {
|
|
81
|
-
this.cleanup();
|
|
82
|
-
const portal = import_Utils.SwcUtils.getParentContainer(this);
|
|
83
|
-
if (!portal)
|
|
84
|
-
return;
|
|
85
|
-
const win = this.ownerDocument?.defaultView || window;
|
|
86
|
-
const helperSet = import_Utils.SwcUtils.getHelperAndHostSet(win, this);
|
|
87
|
-
const t = this.content.querySelector(`template[is="swc-${state}"]`);
|
|
88
|
-
if (t) {
|
|
89
|
-
let htmlString = t.innerHTML;
|
|
90
|
-
const groupArgs = { ...helperSet, $value: this._value, $state: state, $templateHost: this };
|
|
91
|
-
htmlString = this.replaceExpressions(htmlString, groupArgs, this, { start: this._replaceWrapStart ?? "{#{", end: this._replaceWrapEnd ?? "}#}" });
|
|
92
|
-
const temp = this.ownerDocument?.createElement("template") || document.createElement("template");
|
|
93
|
-
temp.innerHTML = htmlString;
|
|
94
|
-
const content = temp.content;
|
|
95
|
-
this._nodes = Array.from(content.childNodes);
|
|
96
|
-
this._nodes.forEach((node) => {
|
|
97
|
-
if (node instanceof HTMLElement)
|
|
98
|
-
node.__template_swc_host = this;
|
|
99
|
-
});
|
|
100
|
-
portal.insertBefore(content, this.nextSibling);
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
|
-
cleanup() {
|
|
104
|
-
this._nodes.forEach((n) => n.parentElement?.removeChild(n));
|
|
105
|
-
this._nodes = [];
|
|
106
|
-
}
|
|
107
|
-
disconnectedCallback() {
|
|
108
|
-
this.cleanup();
|
|
109
|
-
}
|
|
110
|
-
}
|
|
111
|
-
__decorate([
|
|
112
|
-
(0, import_decorators.attributeThis)("value"),
|
|
113
|
-
__metadata("design:type", Object)
|
|
114
|
-
], SwcAsync.prototype, "_value", void 0);
|
|
115
|
-
__decorate([
|
|
116
|
-
(0, import_decorators.attributeThis)("replace-wrap-start"),
|
|
117
|
-
__metadata("design:type", String)
|
|
118
|
-
], SwcAsync.prototype, "_replaceWrapStart", void 0);
|
|
119
|
-
__decorate([
|
|
120
|
-
(0, import_decorators.attributeThis)("replace-wrap-end"),
|
|
121
|
-
__metadata("design:type", String)
|
|
122
|
-
], SwcAsync.prototype, "_replaceWrapEnd", void 0);
|
|
123
|
-
__decorate([
|
|
124
|
-
(0, import_changedAttributeThis.changedAttributeThis)("value"),
|
|
125
|
-
__metadata("design:type", Function),
|
|
126
|
-
__metadata("design:paramtypes", [String]),
|
|
127
|
-
__metadata("design:returntype", void 0)
|
|
128
|
-
], SwcAsync.prototype, "setValue", null);
|
|
129
|
-
//# sourceMappingURL=SwcAsync.js.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../src/elements/SwcAsync.ts"],
|
|
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
|
-
"names": []
|
|
7
|
-
}
|