@dooboostore/simple-web-component 1.0.33 → 1.0.35
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +23 -30
- package/dist/cjs/decorators/addEventListener.js.map +1 -1
- package/dist/cjs/decorators/applyAttribute.js +67 -57
- package/dist/cjs/decorators/applyAttribute.js.map +2 -2
- package/dist/cjs/decorators/applyClass.js +80 -70
- package/dist/cjs/decorators/applyClass.js.map +2 -2
- package/dist/cjs/decorators/applyNode.js +5 -8
- package/dist/cjs/decorators/applyNode.js.map +2 -2
- package/dist/cjs/decorators/applyStyle.js +66 -56
- package/dist/cjs/decorators/applyStyle.js.map +2 -2
- package/dist/cjs/decorators/attribute.js +35 -29
- package/dist/cjs/decorators/attribute.js.map +2 -2
- package/dist/cjs/decorators/changedAttributeHost.js +32 -12
- package/dist/cjs/decorators/changedAttributeHost.js.map +2 -2
- package/dist/cjs/decorators/elementDefine.js +238 -180
- package/dist/cjs/decorators/elementDefine.js.map +2 -2
- package/dist/cjs/decorators/emitCustomEvent.js +67 -48
- package/dist/cjs/decorators/emitCustomEvent.js.map +2 -2
- package/dist/cjs/decorators/lifecycles.js +15 -17
- package/dist/cjs/decorators/lifecycles.js.map +2 -2
- package/dist/cjs/decorators/setProperty.js +50 -39
- package/dist/cjs/decorators/setProperty.js.map +2 -2
- package/dist/cjs/decorators/subscribeSwcAppMessageWhileConnected.js.map +1 -1
- package/dist/cjs/decorators/subscribeSwcAppRouteChangeWhileConnected.js +2 -2
- package/dist/cjs/decorators/subscribeSwcAppRouteChangeWhileConnected.js.map +2 -2
- package/dist/cjs/elements/SwcAppEngine.js +14 -8
- package/dist/cjs/elements/SwcAppEngine.js.map +3 -3
- package/dist/cjs/elements/SwcAppMixin.js +154 -81
- package/dist/cjs/elements/SwcAppMixin.js.map +2 -2
- package/dist/cjs/elements/SwcAsync.js +28 -18
- package/dist/cjs/elements/SwcAsync.js.map +2 -2
- package/dist/cjs/elements/SwcChoose.js +68 -45
- package/dist/cjs/elements/SwcChoose.js.map +2 -2
- package/dist/cjs/elements/SwcIf.js +52 -30
- package/dist/cjs/elements/SwcIf.js.map +2 -2
- package/dist/cjs/elements/SwcLoop.js +109 -35
- package/dist/cjs/elements/SwcLoop.js.map +2 -2
- package/dist/cjs/elements/register.js +263 -131
- package/dist/cjs/elements/register.js.map +2 -2
- package/dist/cjs/router/ElementRouter.js +4 -2
- package/dist/cjs/router/ElementRouter.js.map +1 -1
- package/dist/cjs/types.js.map +1 -1
- package/dist/cjs/utils/Utils.js +25 -7
- package/dist/cjs/utils/Utils.js.map +2 -2
- package/dist/esm/decorators/addEventListener.js.map +1 -1
- package/dist/esm/decorators/applyAttribute.js +67 -57
- package/dist/esm/decorators/applyAttribute.js.map +2 -2
- package/dist/esm/decorators/applyClass.js +80 -70
- package/dist/esm/decorators/applyClass.js.map +2 -2
- package/dist/esm/decorators/applyNode.js +5 -8
- package/dist/esm/decorators/applyNode.js.map +2 -2
- package/dist/esm/decorators/applyStyle.js +66 -56
- package/dist/esm/decorators/applyStyle.js.map +2 -2
- package/dist/esm/decorators/attribute.js +35 -29
- package/dist/esm/decorators/attribute.js.map +2 -2
- package/dist/esm/decorators/changedAttributeHost.js +32 -12
- package/dist/esm/decorators/changedAttributeHost.js.map +2 -2
- package/dist/esm/decorators/elementDefine.js +240 -182
- package/dist/esm/decorators/elementDefine.js.map +2 -2
- package/dist/esm/decorators/emitCustomEvent.js +67 -48
- package/dist/esm/decorators/emitCustomEvent.js.map +2 -2
- package/dist/esm/decorators/lifecycles.js +15 -17
- package/dist/esm/decorators/lifecycles.js.map +2 -2
- package/dist/esm/decorators/setProperty.js +50 -39
- package/dist/esm/decorators/setProperty.js.map +2 -2
- package/dist/esm/decorators/subscribeSwcAppMessageWhileConnected.js.map +1 -1
- package/dist/esm/decorators/subscribeSwcAppRouteChangeWhileConnected.js +2 -2
- package/dist/esm/decorators/subscribeSwcAppRouteChangeWhileConnected.js.map +2 -2
- package/dist/esm/elements/SwcAppEngine.js +14 -7
- package/dist/esm/elements/SwcAppEngine.js.map +2 -2
- package/dist/esm/elements/SwcAppMixin.js +156 -82
- package/dist/esm/elements/SwcAppMixin.js.map +2 -2
- package/dist/esm/elements/SwcAsync.js +28 -18
- package/dist/esm/elements/SwcAsync.js.map +2 -2
- package/dist/esm/elements/SwcChoose.js +69 -46
- package/dist/esm/elements/SwcChoose.js.map +2 -2
- package/dist/esm/elements/SwcIf.js +53 -31
- package/dist/esm/elements/SwcIf.js.map +2 -2
- package/dist/esm/elements/SwcLoop.js +110 -36
- package/dist/esm/elements/SwcLoop.js.map +2 -2
- package/dist/esm/elements/register.js +264 -132
- package/dist/esm/elements/register.js.map +2 -2
- package/dist/esm/router/ElementRouter.js +5 -2
- package/dist/esm/router/ElementRouter.js.map +1 -1
- package/dist/esm/types.js.map +1 -1
- package/dist/esm/utils/Utils.js +25 -7
- package/dist/esm/utils/Utils.js.map +2 -2
- package/dist/esm-bundle/dooboostore-simple-web-component.esm.js +728 -595
- package/dist/esm-bundle/dooboostore-simple-web-component.esm.js.map +4 -4
- package/dist/types/decorators/addEventListener.d.ts +4 -1
- package/dist/types/decorators/addEventListener.d.ts.map +1 -1
- package/dist/types/decorators/applyAttribute.d.ts +5 -1
- package/dist/types/decorators/applyAttribute.d.ts.map +1 -1
- package/dist/types/decorators/applyClass.d.ts +4 -0
- package/dist/types/decorators/applyClass.d.ts.map +1 -1
- package/dist/types/decorators/applyNode.d.ts +5 -1
- package/dist/types/decorators/applyNode.d.ts.map +1 -1
- package/dist/types/decorators/applyStyle.d.ts +5 -1
- package/dist/types/decorators/applyStyle.d.ts.map +1 -1
- package/dist/types/decorators/attribute.d.ts +5 -0
- package/dist/types/decorators/attribute.d.ts.map +1 -1
- package/dist/types/decorators/changedAttributeHost.d.ts +14 -3
- package/dist/types/decorators/changedAttributeHost.d.ts.map +1 -1
- package/dist/types/decorators/elementDefine.d.ts +1 -1
- package/dist/types/decorators/elementDefine.d.ts.map +1 -1
- package/dist/types/decorators/emitCustomEvent.d.ts +15 -7
- package/dist/types/decorators/emitCustomEvent.d.ts.map +1 -1
- package/dist/types/decorators/lifecycles.d.ts +10 -7
- package/dist/types/decorators/lifecycles.d.ts.map +1 -1
- package/dist/types/decorators/setProperty.d.ts +5 -1
- package/dist/types/decorators/setProperty.d.ts.map +1 -1
- package/dist/types/decorators/subscribeSwcAppMessageWhileConnected.d.ts +2 -2
- package/dist/types/decorators/subscribeSwcAppMessageWhileConnected.d.ts.map +1 -1
- package/dist/types/decorators/subscribeSwcAppRouteChangeWhileConnected.d.ts +5 -6
- package/dist/types/decorators/subscribeSwcAppRouteChangeWhileConnected.d.ts.map +1 -1
- package/dist/types/elements/SwcAppEngine.d.ts +9 -3
- package/dist/types/elements/SwcAppEngine.d.ts.map +1 -1
- package/dist/types/elements/SwcAppMixin.d.ts +12 -7
- package/dist/types/elements/SwcAppMixin.d.ts.map +1 -1
- package/dist/types/elements/register.d.ts.map +1 -1
- package/dist/types/types.d.ts +1 -0
- package/dist/types/types.d.ts.map +1 -1
- package/dist/types/utils/Utils.d.ts +4 -1
- package/dist/types/utils/Utils.d.ts.map +1 -1
- package/dist/umd-bundle/dooboostore-simple-web-component.umd.js +728 -595
- package/dist/umd-bundle/dooboostore-simple-web-component.umd.js.map +4 -4
- package/package.json +5 -5
- package/src/decorators/addEventListener.ts +1 -1
- package/src/decorators/applyAttribute.ts +74 -61
- package/src/decorators/applyClass.ts +91 -77
- package/src/decorators/applyNode.ts +16 -13
- package/src/decorators/applyStyle.ts +75 -61
- package/src/decorators/attribute.ts +55 -43
- package/src/decorators/changedAttributeHost.ts +49 -15
- package/src/decorators/elementDefine.ts +401 -340
- package/src/decorators/emitCustomEvent.ts +92 -62
- package/src/decorators/lifecycles.ts +11 -10
- package/src/decorators/setProperty.ts +58 -44
- package/src/decorators/subscribeSwcAppMessageWhileConnected.ts +2 -2
- package/src/decorators/subscribeSwcAppRouteChangeWhileConnected.ts +11 -11
- package/src/elements/SwcAppEngine.ts +19 -13
- package/src/elements/SwcAppMixin.ts +214 -102
- package/src/elements/SwcAsync.ts +28 -17
- package/src/elements/SwcChoose.ts +94 -36
- package/src/elements/SwcIf.ts +59 -22
- package/src/elements/SwcLoop.ts +140 -27
- package/src/elements/register.ts +319 -100
- package/src/types.ts +1 -0
- package/src/utils/Utils.ts +38 -10
- package/tsconfig.json +2 -2
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import {ReflectUtils, FunctionUtils, ActionExpression} from '@dooboostore/core';
|
|
2
|
-
import {ensureInit, getElementConfig} from './elementDefine';
|
|
3
|
-
import {SwcUtils} from '../utils/Utils';
|
|
4
|
-
import {SpecialSelector, SwcQueryOptions} from '../types';
|
|
1
|
+
import { ReflectUtils, FunctionUtils, ActionExpression } from '@dooboostore/core';
|
|
2
|
+
import { ensureInit, getElementConfig } from './elementDefine';
|
|
3
|
+
import { SwcUtils } from '../utils/Utils';
|
|
4
|
+
import { SpecialSelector, SwcQueryOptions } from '../types';
|
|
5
5
|
import { ConvertUtils } from '@dooboostore/core-web';
|
|
6
6
|
export interface AttributeFieldOptions extends SwcQueryOptions {
|
|
7
7
|
name?: string;
|
|
@@ -25,6 +25,44 @@ const convertValue = (val: string | null, type: any): any => {
|
|
|
25
25
|
return val;
|
|
26
26
|
};
|
|
27
27
|
|
|
28
|
+
export { convertValue };
|
|
29
|
+
|
|
30
|
+
export const getAttributeValue = (inst: any, attrName: string, options?: AttributeFieldOptions & { selector?: string }): any => {
|
|
31
|
+
const conf = getElementConfig(inst);
|
|
32
|
+
const currentWin = inst._resolveWindow?.(conf) || ((typeof window !== 'undefined' ? window : undefined) as any);
|
|
33
|
+
|
|
34
|
+
// If selector is not provided, use inst itself
|
|
35
|
+
const targets = options?.selector ? resolveTargetEls(inst, options.selector, options, currentWin) : [inst];
|
|
36
|
+
|
|
37
|
+
const primaryTarget = targets[0];
|
|
38
|
+
|
|
39
|
+
if (primaryTarget && typeof (primaryTarget as any).hasAttribute === 'function' && (primaryTarget as any).hasAttribute(attrName)) {
|
|
40
|
+
let domVal = (primaryTarget as any).getAttribute(attrName);
|
|
41
|
+
|
|
42
|
+
// 표현식 체크
|
|
43
|
+
const ae = new ActionExpression(domVal);
|
|
44
|
+
const expr = ae.getFirstExpression('callReturn');
|
|
45
|
+
if (expr) {
|
|
46
|
+
try {
|
|
47
|
+
const result = FunctionUtils.executeReturn({
|
|
48
|
+
script: ConvertUtils.decodeHtmlEntity(expr.script, currentWin.document),
|
|
49
|
+
context: inst,
|
|
50
|
+
args: SwcUtils.getHelperAndHostSet(currentWin, inst)
|
|
51
|
+
});
|
|
52
|
+
return convertValue(result, options?.type);
|
|
53
|
+
} catch (e) {
|
|
54
|
+
console.error(`[SWC] Failed to execute directive {{= ${expr.script} }}:`, e);
|
|
55
|
+
return convertValue(domVal, options?.type);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
return convertValue(domVal, options?.type);
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
// If no target found, return null
|
|
63
|
+
return null;
|
|
64
|
+
};
|
|
65
|
+
|
|
28
66
|
export const resolveTargetEls = (inst: any, selector: string, options: AttributeFieldOptions, currentWin: any): HTMLElement[] => {
|
|
29
67
|
const r = options.root || 'auto';
|
|
30
68
|
const results: HTMLElement[] = [];
|
|
@@ -89,7 +127,7 @@ export function attribute(selector: string, options: AttributeFieldOptions = {})
|
|
|
89
127
|
metaList = [];
|
|
90
128
|
ReflectUtils.defineMetadata(ATTRIBUTE_FIELD_METADATA_KEY, metaList, constructor);
|
|
91
129
|
}
|
|
92
|
-
metaList.push({propertyKey, selector, options, privateKey});
|
|
130
|
+
metaList.push({ propertyKey, selector, options, privateKey });
|
|
93
131
|
|
|
94
132
|
const applySetAttribute = (inst: any, targets: HTMLElement[], attrName: string, nv: any) => {
|
|
95
133
|
targets.forEach(it => {
|
|
@@ -111,45 +149,20 @@ export function attribute(selector: string, options: AttributeFieldOptions = {})
|
|
|
111
149
|
// delete target[propertyKey];
|
|
112
150
|
|
|
113
151
|
// const defineTarget = target instanceof Function ? target : (target as any).constructor;
|
|
114
|
-
|
|
152
|
+
|
|
115
153
|
Object.defineProperty(target, propertyKey, {
|
|
116
154
|
get(this: any) {
|
|
117
155
|
const attrName = options.name || String(propertyKey);
|
|
118
|
-
const conf = getElementConfig(this);
|
|
119
|
-
const currentWin = this._resolveWindow?.(conf) || ((typeof window !== 'undefined' ? window : undefined) as any);
|
|
120
|
-
const targetType = options.type || designType;
|
|
121
156
|
|
|
122
|
-
|
|
123
|
-
const
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
// 표현식 체크
|
|
130
|
-
const ae = new ActionExpression(domVal);
|
|
131
|
-
const expr = ae.getFirstExpression('call-return');
|
|
132
|
-
if (expr) {
|
|
133
|
-
try {
|
|
134
|
-
const result = FunctionUtils.executeReturn({
|
|
135
|
-
script: ConvertUtils.decodeHtmlEntity(expr.script, currentWin.document),
|
|
136
|
-
context: this,
|
|
137
|
-
args: SwcUtils.getHelperAndHostSet(currentWin, this)
|
|
138
|
-
});
|
|
139
|
-
return convertValue(result, targetType);
|
|
140
|
-
} catch (e) {
|
|
141
|
-
console.error(`[SWC] Failed to execute directive {{= ${expr.script} }}:`, e);
|
|
142
|
-
return convertValue(domVal, targetType);
|
|
143
|
-
}
|
|
144
|
-
}
|
|
145
|
-
|
|
146
|
-
return convertValue(domVal, targetType);
|
|
147
|
-
}
|
|
148
|
-
return null;
|
|
149
|
-
}
|
|
157
|
+
// Merge designType fallback into options once
|
|
158
|
+
const mergedOptions = {
|
|
159
|
+
...options,
|
|
160
|
+
selector,
|
|
161
|
+
type: options.type || designType
|
|
162
|
+
};
|
|
150
163
|
|
|
151
|
-
const
|
|
152
|
-
return
|
|
164
|
+
const result = getAttributeValue(this, attrName, mergedOptions);
|
|
165
|
+
return result !== null ? result : this[privateKey];
|
|
153
166
|
},
|
|
154
167
|
set(this: any, nv: any) {
|
|
155
168
|
// this[propertyKey] = nv;
|
|
@@ -158,7 +171,6 @@ export function attribute(selector: string, options: AttributeFieldOptions = {})
|
|
|
158
171
|
const conf = getElementConfig(this);
|
|
159
172
|
const currentWin = this._resolveWindow?.(conf) || ((typeof window !== 'undefined' ? window : undefined) as any);
|
|
160
173
|
|
|
161
|
-
|
|
162
174
|
// if (!this.__swc_connected) {
|
|
163
175
|
// this[privateKey] = nv;
|
|
164
176
|
// return;
|
|
@@ -170,9 +182,9 @@ export function attribute(selector: string, options: AttributeFieldOptions = {})
|
|
|
170
182
|
enumerable: true,
|
|
171
183
|
configurable: true
|
|
172
184
|
});
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
185
|
+
} catch (err) {
|
|
186
|
+
console.error('[SWC] defineProperty error:', err);
|
|
187
|
+
}
|
|
176
188
|
};
|
|
177
189
|
}
|
|
178
190
|
|
|
@@ -1,35 +1,69 @@
|
|
|
1
|
-
import {ReflectUtils} from '@dooboostore/core';
|
|
1
|
+
import { ReflectUtils } from '@dooboostore/core';
|
|
2
2
|
|
|
3
3
|
export const ON_ATTRIBUTE_CHANGED_METADATA_KEY = Symbol.for('simple-web-component:on-attribute-changed');
|
|
4
4
|
|
|
5
|
+
export interface ChangedAttributeHostOptions {
|
|
6
|
+
type?: typeof Number | typeof Boolean | typeof String;
|
|
7
|
+
while?: 'connected';
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
export interface ChangedAttributeHostMetadata {
|
|
11
|
+
attributeName: string;
|
|
12
|
+
propertyKey: string | symbol;
|
|
13
|
+
options: ChangedAttributeHostOptions;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
const convertValue = (val: any, type: any): any => {
|
|
17
|
+
if (val === null || val === undefined) return val;
|
|
18
|
+
if (type === Number) return Number(val);
|
|
19
|
+
if (type === Boolean) return val === 'false' || val === '0' ? false : true;
|
|
20
|
+
return val;
|
|
21
|
+
};
|
|
22
|
+
|
|
5
23
|
/**
|
|
6
24
|
* @changedAttributeHost decorator - fires when any attribute on :host changes
|
|
7
25
|
* Usage: @changedAttributeHost('data-product-id')
|
|
26
|
+
* @changedAttributeHost('count', { type: Number })
|
|
8
27
|
*/
|
|
9
|
-
export function changedAttributeHost(attributeName?: string): MethodDecorator {
|
|
28
|
+
export function changedAttributeHost(attributeName?: string, options: ChangedAttributeHostOptions = {}): MethodDecorator {
|
|
10
29
|
return (target: Object, propertyKey: string | symbol) => {
|
|
11
30
|
const constructor = target.constructor;
|
|
12
|
-
let
|
|
13
|
-
if (!
|
|
14
|
-
|
|
15
|
-
ReflectUtils.defineMetadata(ON_ATTRIBUTE_CHANGED_METADATA_KEY,
|
|
31
|
+
let metaList = ReflectUtils.getOwnMetadata(ON_ATTRIBUTE_CHANGED_METADATA_KEY, constructor) as ChangedAttributeHostMetadata[];
|
|
32
|
+
if (!metaList) {
|
|
33
|
+
metaList = [];
|
|
34
|
+
ReflectUtils.defineMetadata(ON_ATTRIBUTE_CHANGED_METADATA_KEY, metaList, constructor);
|
|
16
35
|
}
|
|
17
36
|
|
|
18
37
|
const name = attributeName || String(propertyKey);
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
}
|
|
24
|
-
if (!methods.includes(propertyKey)) methods.push(propertyKey);
|
|
38
|
+
metaList.push({
|
|
39
|
+
attributeName: name,
|
|
40
|
+
propertyKey,
|
|
41
|
+
options
|
|
42
|
+
});
|
|
25
43
|
};
|
|
26
44
|
}
|
|
27
45
|
|
|
28
|
-
export const getChangedAttributeMetadata = (target: any):
|
|
46
|
+
export const getChangedAttributeMetadata = (target: any): ChangedAttributeHostMetadata[] | undefined => {
|
|
29
47
|
const constructor = target instanceof Function ? target : target.constructor;
|
|
30
48
|
return ReflectUtils.getMetadata(ON_ATTRIBUTE_CHANGED_METADATA_KEY, constructor);
|
|
31
49
|
};
|
|
32
50
|
|
|
33
|
-
export const findAllAttributeChangedMetadata = (target: any): Map<string,
|
|
34
|
-
|
|
51
|
+
export const findAllAttributeChangedMetadata = (target: any): Map<string, ChangedAttributeHostMetadata[]> => {
|
|
52
|
+
const constructor = target instanceof Function ? target : target.constructor;
|
|
53
|
+
const metaList = ReflectUtils.findAllMetadata<ChangedAttributeHostMetadata[]>(ON_ATTRIBUTE_CHANGED_METADATA_KEY, constructor) || [];
|
|
54
|
+
|
|
55
|
+
const result = new Map<string, ChangedAttributeHostMetadata[]>();
|
|
56
|
+
metaList.forEach(meta => {
|
|
57
|
+
meta.forEach(item => {
|
|
58
|
+
if (!result.has(item.attributeName)) {
|
|
59
|
+
result.set(item.attributeName, []);
|
|
60
|
+
}
|
|
61
|
+
result.get(item.attributeName)!.push(item);
|
|
62
|
+
});
|
|
63
|
+
});
|
|
64
|
+
return result;
|
|
65
|
+
};
|
|
66
|
+
|
|
67
|
+
export const convertAttributeValue = (val: any, type?: typeof Number | typeof Boolean | typeof String): any => {
|
|
68
|
+
return convertValue(val, type);
|
|
35
69
|
};
|