@dooboostore/simple-web-component 1.0.15 → 1.0.17
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 +275 -91
- package/dist/cjs/decorators/addEventListener.js +2 -3
- package/dist/cjs/decorators/addEventListener.js.map +2 -2
- package/dist/cjs/decorators/elementDefine.js +161 -34
- package/dist/cjs/decorators/elementDefine.js.map +3 -3
- package/dist/cjs/decorators/emitCustomEvent.js +2 -14
- package/dist/cjs/decorators/emitCustomEvent.js.map +2 -2
- package/dist/cjs/decorators/query.js +47 -36
- package/dist/cjs/decorators/query.js.map +2 -2
- package/dist/cjs/decorators/queryAll.js +42 -36
- package/dist/cjs/decorators/queryAll.js.map +2 -2
- package/dist/cjs/elements/SwcAppEngine.js +2 -1
- package/dist/cjs/elements/SwcAppEngine.js.map +2 -2
- package/dist/cjs/elements/SwcAsync.js +188 -0
- package/dist/cjs/elements/SwcAsync.js.map +7 -0
- package/dist/cjs/elements/SwcChoose.js +155 -0
- package/dist/cjs/elements/SwcChoose.js.map +7 -0
- package/dist/cjs/elements/SwcIf.js +167 -0
- package/dist/cjs/elements/SwcIf.js.map +7 -0
- package/dist/cjs/elements/SwcLoop.js +246 -0
- package/dist/cjs/elements/SwcLoop.js.map +7 -0
- package/dist/cjs/elements/SwcSubTemplates.js +65 -0
- package/dist/cjs/elements/SwcSubTemplates.js.map +7 -0
- package/dist/cjs/elements/index.js +7 -0
- package/dist/cjs/elements/index.js.map +2 -2
- package/dist/cjs/index.js +1 -1
- package/dist/cjs/index.js.map +2 -2
- package/dist/cjs/types.js +1 -0
- package/dist/cjs/types.js.map +2 -2
- package/dist/cjs/utils/Utils.js +92 -162
- package/dist/cjs/utils/Utils.js.map +3 -3
- package/dist/esm/decorators/addEventListener.js +2 -3
- package/dist/esm/decorators/addEventListener.js.map +2 -2
- package/dist/esm/decorators/elementDefine.js +161 -34
- package/dist/esm/decorators/elementDefine.js.map +3 -3
- package/dist/esm/decorators/emitCustomEvent.js +2 -14
- package/dist/esm/decorators/emitCustomEvent.js.map +2 -2
- package/dist/esm/decorators/query.js +47 -36
- package/dist/esm/decorators/query.js.map +2 -2
- package/dist/esm/decorators/queryAll.js +42 -36
- package/dist/esm/decorators/queryAll.js.map +2 -2
- package/dist/esm/elements/SwcAppEngine.js +2 -1
- package/dist/esm/elements/SwcAppEngine.js.map +2 -2
- package/dist/esm/elements/SwcAsync.js +169 -0
- package/dist/esm/elements/SwcAsync.js.map +7 -0
- package/dist/esm/elements/SwcChoose.js +136 -0
- package/dist/esm/elements/SwcChoose.js.map +7 -0
- package/dist/esm/elements/SwcIf.js +148 -0
- package/dist/esm/elements/SwcIf.js.map +7 -0
- package/dist/esm/elements/SwcLoop.js +227 -0
- package/dist/esm/elements/SwcLoop.js.map +7 -0
- package/dist/esm/elements/SwcSubTemplates.js +46 -0
- package/dist/esm/elements/SwcSubTemplates.js.map +7 -0
- package/dist/esm/elements/index.js +7 -0
- package/dist/esm/elements/index.js.map +2 -2
- package/dist/esm/index.js +1 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/types.js +1 -0
- package/dist/esm/types.js.map +2 -2
- package/dist/esm/utils/Utils.js +92 -162
- package/dist/esm/utils/Utils.js.map +3 -3
- package/dist/esm-bundle/dooboostore-simple-web-component.esm.js +1150 -326
- package/dist/esm-bundle/dooboostore-simple-web-component.esm.js.map +4 -4
- package/dist/types/decorators/addEventListener.d.ts +10 -4
- package/dist/types/decorators/addEventListener.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/query.d.ts +4 -5
- package/dist/types/decorators/query.d.ts.map +1 -1
- package/dist/types/decorators/queryAll.d.ts +4 -5
- package/dist/types/decorators/queryAll.d.ts.map +1 -1
- package/dist/types/elements/SwcAppEngine.d.ts.map +1 -1
- package/dist/types/elements/SwcAsync.d.ts +16 -0
- package/dist/types/elements/SwcAsync.d.ts.map +1 -0
- package/dist/types/elements/SwcChoose.d.ts +13 -0
- package/dist/types/elements/SwcChoose.d.ts.map +1 -0
- package/dist/types/elements/SwcIf.d.ts +15 -0
- package/dist/types/elements/SwcIf.d.ts.map +1 -0
- package/dist/types/elements/SwcLoop.d.ts +20 -0
- package/dist/types/elements/SwcLoop.d.ts.map +1 -0
- package/dist/types/elements/SwcSubTemplates.d.ts +13 -0
- package/dist/types/elements/SwcSubTemplates.d.ts.map +1 -0
- package/dist/types/elements/index.d.ts +7 -0
- package/dist/types/elements/index.d.ts.map +1 -1
- package/dist/types/index.d.ts +1 -1
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/types.d.ts +11 -1
- package/dist/types/types.d.ts.map +1 -1
- package/dist/types/utils/Utils.d.ts +19 -21
- package/dist/types/utils/Utils.d.ts.map +1 -1
- package/dist/umd-bundle/dooboostore-simple-web-component.umd.js +1150 -326
- package/dist/umd-bundle/dooboostore-simple-web-component.umd.js.map +4 -4
- package/package.json +10 -3
- package/src/decorators/addEventListener.ts +11 -7
- package/src/decorators/elementDefine.ts +165 -39
- package/src/decorators/emitCustomEvent.ts +5 -21
- package/src/decorators/query.ts +46 -41
- package/src/decorators/queryAll.ts +45 -41
- package/src/elements/SwcAppEngine.ts +2 -1
- package/src/elements/SwcAsync.ts +163 -0
- package/src/elements/SwcChoose.ts +127 -0
- package/src/elements/SwcIf.ts +134 -0
- package/src/elements/SwcLoop.ts +215 -0
- package/src/elements/SwcSubTemplates.ts +19 -0
- package/src/elements/index.ts +8 -3
- package/src/index.ts +1 -1
- package/src/types.ts +15 -5
- package/src/utils/Utils.ts +111 -197
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { ReflectUtils } from "@dooboostore/core/reflect/ReflectUtils";
|
|
2
|
+
import { FunctionUtils } from "@dooboostore/core/function/FunctionUtils";
|
|
2
3
|
import { getInnerHtmlMetadataList } from "./innerHtml.js";
|
|
3
4
|
import { getAddEventListenerMetadata } from "./addEventListener.js";
|
|
4
5
|
import { ON_BEFORE_CONNECTED_METADATA_KEY, ON_AFTER_CONNECTED_METADATA_KEY, ON_BEFORE_DISCONNECTED_METADATA_KEY, ON_AFTER_DISCONNECTED_METADATA_KEY, ON_BEFORE_ADOPTED_METADATA_KEY, ON_AFTER_ADOPTED_METADATA_KEY, findAllLifecycleMetadata } from "./lifecycles.js";
|
|
@@ -10,6 +11,7 @@ import { HTML_TAG_ENTRIES, DOM_EVENT_NAMES } from "../config/config.js";
|
|
|
10
11
|
import { SituationTypeContainer, SituationTypeContainers } from "@dooboostore/simple-boot/decorators/inject/Inject";
|
|
11
12
|
import { InjectSituationType } from "../types.js";
|
|
12
13
|
const ELEMENT_CONFIG_KEY = Symbol("simple-web-component:element-config");
|
|
14
|
+
const globalDelegatedRoots = /* @__PURE__ */ new WeakSet();
|
|
13
15
|
function buildEnv(configWindow) {
|
|
14
16
|
const win = configWindow || (typeof window !== "undefined" ? window : void 0);
|
|
15
17
|
const doc = win?.document;
|
|
@@ -18,13 +20,7 @@ function buildEnv(configWindow) {
|
|
|
18
20
|
if (win?.[cls])
|
|
19
21
|
builtInTagMap.set(win[cls], tag);
|
|
20
22
|
}
|
|
21
|
-
const domHelpers =
|
|
22
|
-
$d: doc,
|
|
23
|
-
$w: win,
|
|
24
|
-
$q: (sel, root) => (root ?? doc).querySelector(sel),
|
|
25
|
-
$qa: (sel, root) => Array.from((root ?? doc).querySelectorAll(sel)),
|
|
26
|
-
$qi: (id, root) => (root ?? doc).getElementById(id)
|
|
27
|
-
};
|
|
23
|
+
const domHelpers = SwcUtils.getHelperSet(win);
|
|
28
24
|
return { win, doc, builtInTagMap, domHelpers };
|
|
29
25
|
}
|
|
30
26
|
const getHandlers = (inst) => {
|
|
@@ -36,8 +32,6 @@ const elementDefine = (inConfig) => (constructor) => {
|
|
|
36
32
|
const config = typeof inConfig === "string" ? { name: inConfig } : inConfig;
|
|
37
33
|
const { win, doc, builtInTagMap: BUILT_IN_TAG_MAP, domHelpers: SWC_DOM_HELPERS } = buildEnv(config.window);
|
|
38
34
|
config.window = win;
|
|
39
|
-
const SWC_DOM_HELPER_KEYS = Object.keys(SWC_DOM_HELPERS);
|
|
40
|
-
const SWC_DOM_HELPER_VALS = () => SWC_DOM_HELPER_KEYS.map((k) => SWC_DOM_HELPERS[k]);
|
|
41
35
|
let extendsTagName = config.extends;
|
|
42
36
|
if (!extendsTagName) {
|
|
43
37
|
let proto = constructor;
|
|
@@ -63,9 +57,7 @@ const elementDefine = (inConfig) => (constructor) => {
|
|
|
63
57
|
if (script) {
|
|
64
58
|
try {
|
|
65
59
|
const args = { ...hostSet, ...SWC_DOM_HELPERS, ...extraArgs };
|
|
66
|
-
|
|
67
|
-
const argValues = Object.values(args);
|
|
68
|
-
new Function(...argNames, script).apply(this, argValues);
|
|
60
|
+
FunctionUtils.execute({ script, context: this, args });
|
|
69
61
|
} catch (e) {
|
|
70
62
|
console.error(`[SWC] Failed to execute ${attrName}:`, e);
|
|
71
63
|
}
|
|
@@ -88,10 +80,12 @@ const elementDefine = (inConfig) => (constructor) => {
|
|
|
88
80
|
return this[methodName](...extraArgs);
|
|
89
81
|
}
|
|
90
82
|
}
|
|
91
|
-
_bindAttributeEvent(el, attrName, script) {
|
|
92
|
-
if (!
|
|
93
|
-
|
|
94
|
-
|
|
83
|
+
_bindAttributeEvent(el, attrName, script, eventName) {
|
|
84
|
+
if (!eventName) {
|
|
85
|
+
if (!attrName.startsWith("swc-on-"))
|
|
86
|
+
return;
|
|
87
|
+
eventName = attrName.substring(7);
|
|
88
|
+
}
|
|
95
89
|
if (swcLifecycleAttributes.includes(attrName))
|
|
96
90
|
return;
|
|
97
91
|
const elHandlers = getHandlers(this);
|
|
@@ -105,9 +99,13 @@ const elementDefine = (inConfig) => (constructor) => {
|
|
|
105
99
|
el.removeEventListener(eventName, oldHandler);
|
|
106
100
|
const handler = (event) => {
|
|
107
101
|
const hostSet = SwcUtils.getHostSet(el);
|
|
108
|
-
const
|
|
109
|
-
|
|
110
|
-
|
|
102
|
+
const args = {
|
|
103
|
+
event,
|
|
104
|
+
$data: event.detail,
|
|
105
|
+
...hostSet,
|
|
106
|
+
...SWC_DOM_HELPERS
|
|
107
|
+
};
|
|
108
|
+
FunctionUtils.execute({ script, context: el, args });
|
|
111
109
|
};
|
|
112
110
|
el.addEventListener(eventName, handler);
|
|
113
111
|
handlers.set(attrName, handler);
|
|
@@ -116,6 +114,7 @@ const elementDefine = (inConfig) => (constructor) => {
|
|
|
116
114
|
super(...args);
|
|
117
115
|
this._swcId = Math.random().toString(36).substring(2, 11);
|
|
118
116
|
this._emitHandlers = /* @__PURE__ */ new Map();
|
|
117
|
+
this._boundListeners = [];
|
|
119
118
|
const hostSet = SwcUtils.getHostSet(this);
|
|
120
119
|
this._executeSwcScript("swc-on-constructor", hostSet);
|
|
121
120
|
if (innerHtmlList.some((it) => it.options.useShadow === true) && !this.shadowRoot) {
|
|
@@ -126,6 +125,9 @@ const elementDefine = (inConfig) => (constructor) => {
|
|
|
126
125
|
return mergedObservedAttributes;
|
|
127
126
|
}
|
|
128
127
|
async connectedCallback() {
|
|
128
|
+
const conf = getElementConfig(this);
|
|
129
|
+
const currentWin = conf?.window || window;
|
|
130
|
+
const currentDoc = currentWin.document;
|
|
129
131
|
const hostSet = SwcUtils.getHostSet(this);
|
|
130
132
|
this._executeSwcScript("swc-on-before-connected", hostSet);
|
|
131
133
|
const bMethods = findAllLifecycleMetadata(this, ON_BEFORE_CONNECTED_METADATA_KEY);
|
|
@@ -151,19 +153,122 @@ const elementDefine = (inConfig) => (constructor) => {
|
|
|
151
153
|
if (lContent)
|
|
152
154
|
this.innerHTML = lContent;
|
|
153
155
|
}
|
|
156
|
+
const createDelegationHandler = (delegateHost) => (event) => {
|
|
157
|
+
if (event.__swc_handled)
|
|
158
|
+
return;
|
|
159
|
+
const path = event.composedPath();
|
|
160
|
+
const type = event.type;
|
|
161
|
+
const attrName = `swc-on-${type}`;
|
|
162
|
+
for (const node of path) {
|
|
163
|
+
if (node === delegateHost)
|
|
164
|
+
break;
|
|
165
|
+
if (!(node instanceof HTMLElement))
|
|
166
|
+
continue;
|
|
167
|
+
const script = node.getAttribute?.(attrName);
|
|
168
|
+
if (script && !getElementConfig(node)) {
|
|
169
|
+
const host = SwcUtils.findNearestSwcHost(node);
|
|
170
|
+
if (host) {
|
|
171
|
+
const childHostSet = SwcUtils.getHostSet(node);
|
|
172
|
+
const args = {
|
|
173
|
+
event,
|
|
174
|
+
$data: event.detail,
|
|
175
|
+
...childHostSet,
|
|
176
|
+
...SWC_DOM_HELPERS
|
|
177
|
+
};
|
|
178
|
+
FunctionUtils.execute({ script, context: node, args });
|
|
179
|
+
event.__swc_handled = true;
|
|
180
|
+
break;
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
};
|
|
185
|
+
DOM_EVENT_NAMES.forEach((type) => {
|
|
186
|
+
this.addEventListener(type, createDelegationHandler(this));
|
|
187
|
+
this._boundListeners.push({ target: this, type, handler: createDelegationHandler(this) });
|
|
188
|
+
});
|
|
189
|
+
const hasParentHost = SwcUtils.findAllSwcHosts(this).length > 0;
|
|
190
|
+
if (!hasParentHost) {
|
|
191
|
+
const root = this.getRootNode();
|
|
192
|
+
if (!globalDelegatedRoots.has(root)) {
|
|
193
|
+
DOM_EVENT_NAMES.forEach((type) => {
|
|
194
|
+
const handler = createDelegationHandler(root);
|
|
195
|
+
root.addEventListener(type, handler);
|
|
196
|
+
});
|
|
197
|
+
globalDelegatedRoots.add(root);
|
|
198
|
+
}
|
|
199
|
+
}
|
|
154
200
|
addEventListenerList.forEach((meta) => {
|
|
155
|
-
const {
|
|
156
|
-
const
|
|
157
|
-
|
|
158
|
-
|
|
201
|
+
const { selector, type, options } = meta;
|
|
202
|
+
const { root, capture, once, passive, stopPropagation, stopImmediatePropagation, preventDefault, delegate, removeOnDisconnected } = options;
|
|
203
|
+
const opts = { capture, once, passive };
|
|
204
|
+
const bindTargets = [];
|
|
205
|
+
if (selector === ":window") {
|
|
206
|
+
bindTargets.push(currentWin);
|
|
207
|
+
} else if (selector === ":document") {
|
|
208
|
+
bindTargets.push(currentDoc);
|
|
209
|
+
} else if (selector === ":parentHost") {
|
|
210
|
+
if (hostSet.$parentHost)
|
|
211
|
+
bindTargets.push(hostSet.$parentHost);
|
|
212
|
+
} else if (selector === ":appHost") {
|
|
213
|
+
if (hostSet.$appHost)
|
|
214
|
+
bindTargets.push(hostSet.$appHost);
|
|
215
|
+
} else if (selector === ":firstHost") {
|
|
216
|
+
if (hostSet.$firstHost)
|
|
217
|
+
bindTargets.push(hostSet.$firstHost);
|
|
218
|
+
} else if (selector === ":lastHost") {
|
|
219
|
+
if (hostSet.$lastHost)
|
|
220
|
+
bindTargets.push(hostSet.$lastHost);
|
|
221
|
+
} else if (selector === ":firstAppHost") {
|
|
222
|
+
if (hostSet.$firstAppHost)
|
|
223
|
+
bindTargets.push(hostSet.$firstAppHost);
|
|
224
|
+
} else if (selector === ":lastAppHost") {
|
|
225
|
+
if (hostSet.$lastAppHost)
|
|
226
|
+
bindTargets.push(hostSet.$lastAppHost);
|
|
227
|
+
} else if (!selector || selector === ":host") {
|
|
228
|
+
bindTargets.push(this);
|
|
229
|
+
} else if (delegate) {
|
|
230
|
+
const bindRoots = [];
|
|
231
|
+
const r = root || "auto";
|
|
232
|
+
if (r === "auto")
|
|
233
|
+
bindRoots.push(this.shadowRoot || this);
|
|
234
|
+
else if (r === "light")
|
|
235
|
+
bindRoots.push(this);
|
|
236
|
+
else if (r === "shadow") {
|
|
237
|
+
if (this.shadowRoot)
|
|
238
|
+
bindRoots.push(this.shadowRoot);
|
|
239
|
+
} else if (r === "all") {
|
|
240
|
+
bindRoots.push(this);
|
|
241
|
+
if (this.shadowRoot)
|
|
242
|
+
bindRoots.push(this.shadowRoot);
|
|
243
|
+
}
|
|
244
|
+
bindRoots.forEach((br) => {
|
|
245
|
+
const handler = (event) => {
|
|
246
|
+
const matchedEl = event.target.closest(selector);
|
|
247
|
+
if (matchedEl && br.contains(matchedEl)) {
|
|
248
|
+
if (stopPropagation)
|
|
249
|
+
event.stopPropagation();
|
|
250
|
+
if (stopImmediatePropagation)
|
|
251
|
+
event.stopImmediatePropagation();
|
|
252
|
+
if (preventDefault)
|
|
253
|
+
event.preventDefault();
|
|
254
|
+
const currentHostSet = SwcUtils.getHostSet(this);
|
|
255
|
+
this._invokeLifecycleMethod(meta.propertyKey, currentHostSet, [event, currentHostSet, matchedEl]);
|
|
256
|
+
}
|
|
257
|
+
};
|
|
258
|
+
br.addEventListener(type, handler, opts);
|
|
259
|
+
const self = this;
|
|
260
|
+
if (removeOnDisconnected === true || br !== self && br !== self.shadowRoot) {
|
|
261
|
+
this._boundListeners.push({ target: br, type, handler, options: opts });
|
|
262
|
+
}
|
|
263
|
+
});
|
|
159
264
|
} else {
|
|
160
265
|
const searchRoots = [];
|
|
161
266
|
const r = root || "auto";
|
|
162
|
-
if (r === "auto")
|
|
267
|
+
if (r === "auto")
|
|
163
268
|
searchRoots.push(this.shadowRoot || this);
|
|
164
|
-
|
|
269
|
+
else if (r === "light")
|
|
165
270
|
searchRoots.push(this);
|
|
166
|
-
|
|
271
|
+
else if (r === "shadow") {
|
|
167
272
|
if (this.shadowRoot)
|
|
168
273
|
searchRoots.push(this.shadowRoot);
|
|
169
274
|
} else if (r === "all") {
|
|
@@ -172,11 +277,10 @@ const elementDefine = (inConfig) => (constructor) => {
|
|
|
172
277
|
searchRoots.push(this.shadowRoot);
|
|
173
278
|
}
|
|
174
279
|
searchRoots.forEach((sr) => {
|
|
175
|
-
|
|
176
|
-
found.forEach((el) => targetEls.push(el));
|
|
280
|
+
sr.querySelectorAll(selector).forEach((el) => bindTargets.push(el));
|
|
177
281
|
});
|
|
178
282
|
}
|
|
179
|
-
|
|
283
|
+
bindTargets.forEach((target) => {
|
|
180
284
|
const handler = (event) => {
|
|
181
285
|
if (stopPropagation)
|
|
182
286
|
event.stopPropagation();
|
|
@@ -184,11 +288,13 @@ const elementDefine = (inConfig) => (constructor) => {
|
|
|
184
288
|
event.stopImmediatePropagation();
|
|
185
289
|
if (preventDefault)
|
|
186
290
|
event.preventDefault();
|
|
187
|
-
const
|
|
188
|
-
this._invokeLifecycleMethod(meta.propertyKey,
|
|
291
|
+
const currentHostSet = SwcUtils.getHostSet(this);
|
|
292
|
+
this._invokeLifecycleMethod(meta.propertyKey, currentHostSet, [event, currentHostSet]);
|
|
189
293
|
};
|
|
190
|
-
|
|
191
|
-
|
|
294
|
+
target.addEventListener(type, handler, opts);
|
|
295
|
+
if (removeOnDisconnected === true || target === currentWin || target === currentDoc) {
|
|
296
|
+
this._boundListeners.push({ target, type, handler, options: opts });
|
|
297
|
+
}
|
|
192
298
|
});
|
|
193
299
|
});
|
|
194
300
|
if (super.connectedCallback)
|
|
@@ -207,6 +313,8 @@ const elementDefine = (inConfig) => (constructor) => {
|
|
|
207
313
|
const bMethods = findAllLifecycleMetadata(this, ON_BEFORE_DISCONNECTED_METADATA_KEY);
|
|
208
314
|
if (bMethods)
|
|
209
315
|
bMethods.forEach((m) => this._invokeLifecycleMethod(m, hostSet));
|
|
316
|
+
this._boundListeners.forEach((l) => l.target.removeEventListener(l.type, l.handler, l.options));
|
|
317
|
+
this._boundListeners = [];
|
|
210
318
|
if (super.disconnectedCallback)
|
|
211
319
|
super.disconnectedCallback();
|
|
212
320
|
const aMethods = findAllLifecycleMetadata(this, ON_AFTER_DISCONNECTED_METADATA_KEY);
|
|
@@ -234,7 +342,9 @@ const elementDefine = (inConfig) => (constructor) => {
|
|
|
234
342
|
super.attributeChangedCallback(name, old, newVal);
|
|
235
343
|
if (name.startsWith("swc-on-") && !swcLifecycleAttributes.includes(name)) {
|
|
236
344
|
if (newVal !== null) {
|
|
237
|
-
|
|
345
|
+
const customEventMeta = emitCustomEventList.find((it) => it.options.attributeName === name);
|
|
346
|
+
const eventName = customEventMeta ? customEventMeta.options.type : name.substring(7);
|
|
347
|
+
this._bindAttributeEvent(this, name, newVal, eventName);
|
|
238
348
|
}
|
|
239
349
|
}
|
|
240
350
|
const mKeys = attrChangeMap.get(name);
|
|
@@ -259,6 +369,23 @@ const elementDefine = (inConfig) => (constructor) => {
|
|
|
259
369
|
};
|
|
260
370
|
}
|
|
261
371
|
});
|
|
372
|
+
emitCustomEventList.forEach((meta) => {
|
|
373
|
+
const { propertyKey, options } = meta;
|
|
374
|
+
const original = NewClass.prototype[propertyKey];
|
|
375
|
+
if (typeof original === "function") {
|
|
376
|
+
NewClass.prototype[propertyKey] = function(...args) {
|
|
377
|
+
const detail = original.apply(this, args);
|
|
378
|
+
const event = new CustomEvent(options.type, {
|
|
379
|
+
detail,
|
|
380
|
+
bubbles: options.bubbles,
|
|
381
|
+
composed: options.composed,
|
|
382
|
+
cancelable: options.cancelable
|
|
383
|
+
});
|
|
384
|
+
this.dispatchEvent(event);
|
|
385
|
+
return detail;
|
|
386
|
+
};
|
|
387
|
+
}
|
|
388
|
+
});
|
|
262
389
|
const originalProto = constructor.prototype;
|
|
263
390
|
const newProto = NewClass.prototype;
|
|
264
391
|
Object.getOwnPropertyNames(originalProto).forEach((name) => {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/decorators/elementDefine.ts"],
|
|
4
|
-
"sourcesContent": ["import { ReflectUtils } from '@dooboostore/core/reflect/ReflectUtils';\nimport { getInnerHtmlMetadataList } from './innerHtml';\nimport { getQueryMetadata } from './query';\nimport { getQueryAllMetadata } from './queryAll';\nimport { getAddEventListenerMetadata } from './addEventListener';\nimport { ON_BEFORE_CONNECTED_METADATA_KEY, ON_AFTER_CONNECTED_METADATA_KEY, ON_BEFORE_DISCONNECTED_METADATA_KEY, ON_AFTER_DISCONNECTED_METADATA_KEY, ON_BEFORE_ADOPTED_METADATA_KEY, ON_AFTER_ADOPTED_METADATA_KEY, ON_ADD_EVENT_LISTENER_METADATA_KEY, ATTRIBUTE_CHANGED_WILDCARD, findAllLifecycleMetadata } from './lifecycles';\nimport { getEmitCustomEventMetadataList } from './emitCustomEvent';\nimport { changedAttribute, findAllAttributeChangedMetadata } from './changedAttribute';\nimport { setAttribute, findAllSetAttributeMetadata } from './setAttribute';\nimport { SwcUtils } from '../utils/Utils';\nimport { HTML_TAG_ENTRIES, DOM_EVENT_NAMES } from '../config/config';\nimport { SituationType, SituationTypeContainer, SituationTypeContainers } from '@dooboostore/simple-boot/decorators/inject/Inject';\nimport { ConstructorType } from '@dooboostore/core/types';\nimport { InjectSituationType, HostSet, SwcAppInterface } from '../types';\n\n// --- Core Interfaces & Types (Integrated) ---\n\nexport interface ElementConfig {\n name: string;\n extends?: string;\n observedAttributes?: string[];\n customElementRegistry?: CustomElementRegistry;\n window?: Window;\n}\n\nexport const ELEMENT_CONFIG_KEY = Symbol('simple-web-component:element-config');\n\n// --- Environment Initialization Helper ---\n\nfunction buildEnv(configWindow?: Window) {\n const win: any = configWindow || (typeof window !== 'undefined' ? window : undefined);\n const doc: Document = win?.document;\n\n const builtInTagMap = new Map<any, string>();\n for (const [cls, tag] of HTML_TAG_ENTRIES) {\n if (win?.[cls]) builtInTagMap.set(win[cls], tag);\n }\n\n const domHelpers = {\n $d: doc,\n $w: win,\n $q: (sel: string, root?: Element | Document | ShadowRoot) => (root ?? doc).querySelector(sel),\n $qa: (sel: string, root?: Element | Document | ShadowRoot) => Array.from((root ?? doc).querySelectorAll(sel)),\n $qi: (id: string, root?: Document | ShadowRoot) => (root ?? doc).getElementById(id)\n } as const;\n\n return { win, doc, builtInTagMap, domHelpers };\n}\n\nconst getHandlers = (inst: any) => {\n if (!inst.__swc_attributeEventHandlers) inst.__swc_attributeEventHandlers = new Map();\n return inst.__swc_attributeEventHandlers;\n};\n\nexport const elementDefine =\n (inConfig: ElementConfig | string): ClassDecorator =>\n (constructor: any) => {\n const config: ElementConfig = typeof inConfig === 'string' ? { name: inConfig } : inConfig;\n const { win, doc, builtInTagMap: BUILT_IN_TAG_MAP, domHelpers: SWC_DOM_HELPERS } = buildEnv(config.window);\n config.window = win;\n const SWC_DOM_HELPER_KEYS = Object.keys(SWC_DOM_HELPERS) as (keyof typeof SWC_DOM_HELPERS)[];\n const SWC_DOM_HELPER_VALS = () => SWC_DOM_HELPER_KEYS.map(k => (SWC_DOM_HELPERS as any)[k]);\n\n let extendsTagName = config.extends;\n if (!extendsTagName) {\n let proto = constructor;\n while (proto && proto !== HTMLElement && proto !== Function.prototype) {\n extendsTagName = BUILT_IN_TAG_MAP.get(proto);\n if (extendsTagName) break;\n proto = Object.getPrototypeOf(proto);\n }\n config.extends = extendsTagName;\n }\n\n const emitCustomEventList = getEmitCustomEventMetadataList(constructor) || [];\n const addEventListenerList = getAddEventListenerMetadata(constructor) || [];\n const attrChangeMap = findAllAttributeChangedMetadata(constructor);\n const setAttrMap = findAllSetAttributeMetadata(constructor);\n\n const swcLifecycleAttributes = ['swc-on-constructor', 'swc-on-connected', 'swc-on-disconnected', 'swc-on-before-connected', 'swc-on-after-connected', 'swc-on-before-disconnected', 'swc-on-after-disconnected', 'swc-on-before-adopted', 'swc-on-after-adopted', 'swc-on-attribute-changed'];\n const swcOnEvents = DOM_EVENT_NAMES.map(e => `swc-on-${e}`);\n\n const mergedObservedAttributes = [...new Set([...(config.observedAttributes ?? []), ...attrChangeMap.keys(), ...setAttrMap.keys(), ...emitCustomEventList.map(it => it.options.attributeName!), ...swcLifecycleAttributes, ...swcOnEvents])];\n const innerHtmlList = getInnerHtmlMetadataList(constructor) || [];\n\n const NewClass = class extends (constructor as any) {\n private _swcId = Math.random().toString(36).substring(2, 11);\n private _emitHandlers = new Map<string, EventListener>();\n\n private _executeSwcScript(attrName: string, hostSet: HostSet, extraArgs: Record<string, any> = {}) {\n const script = this.getAttribute(attrName);\n if (script) {\n try {\n const args = { ...hostSet, ...SWC_DOM_HELPERS, ...extraArgs };\n const argNames = Object.keys(args);\n const argValues = Object.values(args);\n new Function(...argNames, script).apply(this, argValues);\n } catch (e) {\n console.error(`[SWC] Failed to execute ${attrName}:`, e);\n }\n }\n }\n\n private async _invokeLifecycleMethod(methodName: string | symbol, hostSet: HostSet, extraArgs: any[] = []) {\n if (typeof (this as any)[methodName] !== 'function') return;\n const app = hostSet.$appHost?.simpleApplication;\n\n if (app) {\n const otherStorage = new Map<any, any>();\n const situations = new SituationTypeContainers([new SituationTypeContainer({ situationType: InjectSituationType.HOST_SET, data: hostSet }), new SituationTypeContainer({ situationType: InjectSituationType.APP_HOST, data: hostSet.$appHost }), new SituationTypeContainer({ situationType: InjectSituationType.APP_HOSTS, data: hostSet.$appHosts }), new SituationTypeContainer({ situationType: InjectSituationType.HOST, data: hostSet.$host }), new SituationTypeContainer({ situationType: InjectSituationType.HOSTS, data: hostSet.$hosts }), new SituationTypeContainer({ situationType: InjectSituationType.FIRST_HOST, data: hostSet.$firstHost }), new SituationTypeContainer({ situationType: InjectSituationType.LAST_HOST, data: hostSet.$lastHost }), new SituationTypeContainer({ situationType: InjectSituationType.FIRST_APP_HOST, data: hostSet.$firstAppHost }), new SituationTypeContainer({ situationType: InjectSituationType.LAST_APP_HOST, data: hostSet.$lastAppHost })]);\n otherStorage.set(SituationTypeContainers, situations);\n\n return app.simstanceManager.executeBindParameterSimPromise(\n {\n target: this,\n targetKey: methodName,\n inputParameters: extraArgs\n },\n otherStorage\n );\n } else {\n return (this as any)[methodName](...extraArgs);\n }\n }\n\n private _bindAttributeEvent(el: HTMLElement, attrName: string, script: string) {\n if (!attrName.startsWith('swc-on-')) return;\n const eventName = attrName.substring(7);\n if (swcLifecycleAttributes.includes(attrName)) return;\n\n const elHandlers = getHandlers(this);\n let handlers = elHandlers.get(el);\n if (!handlers) {\n handlers = new Map();\n elHandlers.set(el, handlers);\n }\n\n const oldHandler = handlers.get(attrName);\n if (oldHandler) el.removeEventListener(eventName, oldHandler);\n\n const handler = (event: any) => {\n const hostSet = SwcUtils.getHostSet(el);\n const argNames = Object.keys(hostSet);\n const argValues = Object.values(hostSet);\n new Function('event', '$data', ...argNames, ...SWC_DOM_HELPER_KEYS, script).call(el, event, (event as CustomEvent).detail, ...argValues, ...SWC_DOM_HELPER_VALS());\n };\n\n el.addEventListener(eventName, handler);\n handlers.set(attrName, handler);\n }\n\n constructor(...args: any[]) {\n super(...args);\n const hostSet = SwcUtils.getHostSet(this as any);\n this._executeSwcScript('swc-on-constructor', hostSet);\n\n if (innerHtmlList.some(it => it.options.useShadow === true) && !this.shadowRoot) {\n this.attachShadow({ mode: 'open' });\n }\n }\n\n static get observedAttributes() {\n return mergedObservedAttributes;\n }\n\n async connectedCallback() {\n const hostSet = SwcUtils.getHostSet(this as any);\n\n this._executeSwcScript('swc-on-before-connected', hostSet);\n const bMethods = findAllLifecycleMetadata(this, ON_BEFORE_CONNECTED_METADATA_KEY);\n if (bMethods) {\n for (const m of bMethods) await this._invokeLifecycleMethod(m, hostSet);\n }\n\n if (typeof (this as any).initCore === 'function') (this as any).initCore();\n\n if (innerHtmlList.length > 0) {\n let sContent = '',\n lContent = '';\n for (const meta of innerHtmlList) {\n const res = await (this as any)[meta.propertyKey]();\n if (res !== undefined) {\n if (meta.options.useShadow) sContent += res;\n else lContent += res;\n }\n }\n if (this.shadowRoot) this.shadowRoot.innerHTML = sContent;\n if (lContent) this.innerHTML = lContent;\n }\n\n // --- @addEventListener binding ---\n addEventListenerList.forEach(meta => {\n const { type, query, root, capture, once, passive, stopPropagation, stopImmediatePropagation, preventDefault } = meta.options;\n const targetEls: (HTMLElement | Element | Document | ShadowRoot | Window)[] = [];\n\n if (!query) {\n targetEls.push(this as any);\n } else {\n const searchRoots: (HTMLElement | ShadowRoot)[] = [];\n const r = root || 'auto';\n if (r === 'auto') {\n searchRoots.push((this.shadowRoot || (this as any)) as any);\n } else if (r === 'light') {\n searchRoots.push(this as any);\n } else if (r === 'shadow') {\n if (this.shadowRoot) searchRoots.push(this.shadowRoot as any);\n } else if (r === 'all') {\n searchRoots.push(this as any);\n if (this.shadowRoot) searchRoots.push(this.shadowRoot as any);\n }\n\n searchRoots.forEach(sr => {\n const found = sr.querySelectorAll(query);\n found.forEach(el => targetEls.push(el as any));\n });\n }\n\n targetEls.forEach(el => {\n const handler = (event: Event) => {\n if (stopPropagation) event.stopPropagation();\n if (stopImmediatePropagation) event.stopImmediatePropagation();\n if (preventDefault) event.preventDefault();\n\n const hostSet = SwcUtils.getHostSet(this as any);\n this._invokeLifecycleMethod(meta.propertyKey, hostSet, [event, hostSet]);\n };\n const options = { capture, once, passive };\n el.addEventListener(type, handler, options);\n });\n });\n\n if (super.connectedCallback) await super.connectedCallback();\n const aMethods = findAllLifecycleMetadata(this, ON_AFTER_CONNECTED_METADATA_KEY);\n if (aMethods) {\n for (const m of aMethods) await this._invokeLifecycleMethod(m, hostSet);\n }\n\n this._executeSwcScript('swc-on-connected', hostSet);\n this._executeSwcScript('swc-on-after-connected', hostSet);\n }\n\n disconnectedCallback() {\n const hostSet = SwcUtils.getHostSet(this as any);\n this._executeSwcScript('swc-on-before-disconnected', hostSet);\n const bMethods = findAllLifecycleMetadata(this, ON_BEFORE_DISCONNECTED_METADATA_KEY);\n if (bMethods) bMethods.forEach(m => this._invokeLifecycleMethod(m, hostSet));\n\n if (super.disconnectedCallback) super.disconnectedCallback();\n\n const aMethods = findAllLifecycleMetadata(this, ON_AFTER_DISCONNECTED_METADATA_KEY);\n if (aMethods) aMethods.forEach(m => this._invokeLifecycleMethod(m, hostSet));\n this._executeSwcScript('swc-on-disconnected', hostSet);\n this._executeSwcScript('swc-on-after-disconnected', hostSet);\n }\n\n adoptedCallback() {\n const hostSet = SwcUtils.getHostSet(this as any);\n this._executeSwcScript('swc-on-before-adopted', hostSet);\n const bMethods = findAllLifecycleMetadata(this, ON_BEFORE_ADOPTED_METADATA_KEY);\n if (bMethods) bMethods.forEach(m => this._invokeLifecycleMethod(m, hostSet));\n\n if (super.adoptedCallback) super.adoptedCallback();\n\n const aMethods = findAllLifecycleMetadata(this, ON_AFTER_ADOPTED_METADATA_KEY);\n if (aMethods) aMethods.forEach(m => this._invokeLifecycleMethod(m, hostSet));\n this._executeSwcScript('swc-on-adopted', hostSet);\n this._executeSwcScript('swc-on-after-adopted', hostSet);\n }\n\n attributeChangedCallback(name: string, old: string | null, newVal: string | null) {\n if (super.attributeChangedCallback) super.attributeChangedCallback(name, old, newVal);\n\n if (name.startsWith('swc-on-') && !swcLifecycleAttributes.includes(name)) {\n if (newVal !== null) {\n this._bindAttributeEvent(this as any, name, newVal);\n }\n }\n\n const mKeys = attrChangeMap.get(name);\n if (mKeys && Array.isArray(mKeys)) {\n const hSet = SwcUtils.getHostSet(this as any);\n mKeys.forEach(key => this._invokeLifecycleMethod(key, hSet, [newVal, old, name]));\n }\n }\n };\n\n // --- @setAttribute wrapping logic ---\n setAttrMap.forEach((methodName, attrName) => {\n const original = NewClass.prototype[methodName as any];\n if (typeof original === 'function') {\n NewClass.prototype[methodName as any] = function (...args: any[]) {\n const res = original.apply(this, args);\n if (res !== undefined) {\n if (res === null) this.removeAttribute(attrName);\n else this.setAttribute(attrName, String(res));\n }\n return res;\n };\n }\n });\n\n const originalProto = constructor.prototype;\n const newProto = NewClass.prototype;\n Object.getOwnPropertyNames(originalProto).forEach(name => {\n if (name === 'constructor') return;\n const keys = Reflect.getMetadataKeys(originalProto, name);\n keys.forEach(key => Reflect.defineMetadata(key, Reflect.getMetadata(key, originalProto, name), newProto, name));\n });\n\n ReflectUtils.defineMetadata(ELEMENT_CONFIG_KEY, config, NewClass);\n ReflectUtils.defineMetadata(ELEMENT_CONFIG_KEY, config, constructor);\n const registry = config.customElementRegistry || (win as any)?.customElements;\n if (registry && !registry.get(config.name)) {\n registry.define(config.name, NewClass as any, config.extends ? { extends: config.extends } : undefined);\n }\n return NewClass as any;\n };\n\nexport const getElementConfig = (target: any): ElementConfig | undefined => {\n const constructor = target instanceof Function ? target : target.constructor;\n return ReflectUtils.getMetadata(ELEMENT_CONFIG_KEY, constructor);\n};\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": [
|
|
4
|
+
"sourcesContent": ["import { ReflectUtils } from '@dooboostore/core/reflect/ReflectUtils';\nimport { FunctionUtils } from '@dooboostore/core/function/FunctionUtils';\nimport { getInnerHtmlMetadataList } from './innerHtml';\nimport { getQueryMetadata } from './query';\nimport { getQueryAllMetadata } from './queryAll';\nimport { getAddEventListenerMetadata } from './addEventListener';\nimport { ON_BEFORE_CONNECTED_METADATA_KEY, ON_AFTER_CONNECTED_METADATA_KEY, ON_BEFORE_DISCONNECTED_METADATA_KEY, ON_AFTER_DISCONNECTED_METADATA_KEY, ON_BEFORE_ADOPTED_METADATA_KEY, ON_AFTER_ADOPTED_METADATA_KEY, ON_ADD_EVENT_LISTENER_METADATA_KEY, ATTRIBUTE_CHANGED_WILDCARD, findAllLifecycleMetadata } from './lifecycles';\nimport { getEmitCustomEventMetadataList } from './emitCustomEvent';\nimport { changedAttribute, findAllAttributeChangedMetadata } from './changedAttribute';\nimport { setAttribute, findAllSetAttributeMetadata } from './setAttribute';\nimport { SwcUtils } from '../utils/Utils';\nimport { HTML_TAG_ENTRIES, DOM_EVENT_NAMES } from '../config/config';\nimport { SituationType, SituationTypeContainer, SituationTypeContainers } from '@dooboostore/simple-boot/decorators/inject/Inject';\nimport { ConstructorType } from '@dooboostore/core/types';\nimport { SimpleApplication } from '@dooboostore/simple-boot/SimpleApplication';\nimport { Router } from '@dooboostore/core-web/routers/Router';\nimport { InjectSituationType, HostSet, SwcAppInterface } from '../types';\n\n// --- Core Interfaces & Types ---\n\nexport interface ElementConfig {\n name: string;\n extends?: string;\n observedAttributes?: string[];\n customElementRegistry?: CustomElementRegistry;\n window?: Window;\n}\n\nexport const ELEMENT_CONFIG_KEY = Symbol('simple-web-component:element-config');\n\n// Shared state for global delegation to prevent multiple listeners on the same root\nconst globalDelegatedRoots = new WeakSet<Node>();\n\n// --- Environment Initialization Helper ---\n\nfunction buildEnv(configWindow?: Window) {\n const win: any = configWindow || (typeof window !== 'undefined' ? window : undefined);\n const doc: Document = win?.document;\n\n const builtInTagMap = new Map<any, string>();\n for (const [cls, tag] of HTML_TAG_ENTRIES) {\n if (win?.[cls]) builtInTagMap.set(win[cls], tag);\n }\n\n const domHelpers = SwcUtils.getHelperSet(win);\n return { win, doc, builtInTagMap, domHelpers };\n}\n\nconst getHandlers = (inst: any) => {\n if (!inst.__swc_attributeEventHandlers) inst.__swc_attributeEventHandlers = new Map();\n return inst.__swc_attributeEventHandlers;\n};\n\nexport const elementDefine =\n (inConfig: ElementConfig | string): ClassDecorator =>\n (constructor: any) => {\n const config: ElementConfig = typeof inConfig === 'string' ? { name: inConfig } : inConfig;\n const { win, doc, builtInTagMap: BUILT_IN_TAG_MAP, domHelpers: SWC_DOM_HELPERS } = buildEnv(config.window);\n config.window = win;\n\n let extendsTagName = config.extends;\n if (!extendsTagName) {\n let proto = constructor;\n while (proto && proto !== HTMLElement && proto !== Function.prototype) {\n extendsTagName = BUILT_IN_TAG_MAP.get(proto);\n if (extendsTagName) break;\n proto = Object.getPrototypeOf(proto);\n }\n config.extends = extendsTagName;\n }\n\n const emitCustomEventList = getEmitCustomEventMetadataList(constructor) || [];\n const addEventListenerList = getAddEventListenerMetadata(constructor) || [];\n const attrChangeMap = findAllAttributeChangedMetadata(constructor);\n const setAttrMap = findAllSetAttributeMetadata(constructor);\n\n const swcLifecycleAttributes = ['swc-on-constructor', 'swc-on-connected', 'swc-on-disconnected', 'swc-on-before-connected', 'swc-on-after-connected', 'swc-on-before-disconnected', 'swc-on-after-disconnected', 'swc-on-before-adopted', 'swc-on-after-adopted', 'swc-on-attribute-changed'];\n const swcOnEvents = DOM_EVENT_NAMES.map(e => `swc-on-${e}`);\n\n const mergedObservedAttributes = [...new Set([...(config.observedAttributes ?? []), ...attrChangeMap.keys(), ...setAttrMap.keys(), ...emitCustomEventList.map(it => it.options.attributeName!), ...swcLifecycleAttributes, ...swcOnEvents])];\n const innerHtmlList = getInnerHtmlMetadataList(constructor) || [];\n\n const NewClass = class extends (constructor as any) {\n private _swcId = Math.random().toString(36).substring(2, 11);\n private _emitHandlers = new Map<string, EventListener>();\n private _boundListeners: Array<{ target: EventTarget; type: string; handler: EventListener; options?: any }> = [];\n\n private _executeSwcScript(attrName: string, hostSet: HostSet, extraArgs: Record<string, any> = {}) {\n const script = this.getAttribute(attrName);\n if (script) {\n try {\n const args = { ...hostSet, ...SWC_DOM_HELPERS, ...extraArgs };\n FunctionUtils.execute({ script, context: this, args });\n } catch (e) {\n console.error(`[SWC] Failed to execute ${attrName}:`, e);\n }\n }\n }\n\n private async _invokeLifecycleMethod(methodName: string | symbol, hostSet: HostSet, extraArgs: any[] = []) {\n if (typeof (this as any)[methodName] !== 'function') return;\n const app = hostSet.$appHost?.simpleApplication;\n\n if (app) {\n const otherStorage = new Map<any, any>();\n const situations = new SituationTypeContainers([new SituationTypeContainer({ situationType: InjectSituationType.HOST_SET, data: hostSet }), new SituationTypeContainer({ situationType: InjectSituationType.APP_HOST, data: hostSet.$appHost }), new SituationTypeContainer({ situationType: InjectSituationType.APP_HOSTS, data: hostSet.$appHosts }), new SituationTypeContainer({ situationType: InjectSituationType.HOST, data: hostSet.$host }), new SituationTypeContainer({ situationType: InjectSituationType.HOSTS, data: hostSet.$hosts }), new SituationTypeContainer({ situationType: InjectSituationType.FIRST_HOST, data: hostSet.$firstHost }), new SituationTypeContainer({ situationType: InjectSituationType.LAST_HOST, data: hostSet.$lastHost }), new SituationTypeContainer({ situationType: InjectSituationType.FIRST_APP_HOST, data: hostSet.$firstAppHost }), new SituationTypeContainer({ situationType: InjectSituationType.LAST_APP_HOST, data: hostSet.$lastAppHost })]);\n otherStorage.set(SituationTypeContainers, situations);\n\n return app.simstanceManager.executeBindParameterSimPromise(\n {\n target: this,\n targetKey: methodName,\n inputParameters: extraArgs\n },\n otherStorage\n );\n } else {\n return (this as any)[methodName](...extraArgs);\n }\n }\n\n private _bindAttributeEvent(el: HTMLElement, attrName: string, script: string, eventName?: string) {\n if (!eventName) {\n if (!attrName.startsWith('swc-on-')) return;\n eventName = attrName.substring(7);\n }\n if (swcLifecycleAttributes.includes(attrName)) return;\n\n const elHandlers = getHandlers(this);\n let handlers = elHandlers.get(el);\n if (!handlers) {\n handlers = new Map();\n elHandlers.set(el, handlers);\n }\n\n const oldHandler = handlers.get(attrName);\n if (oldHandler) el.removeEventListener(eventName, oldHandler);\n\n const handler = (event: any) => {\n const hostSet = SwcUtils.getHostSet(el);\n const args = {\n event,\n $data: (event as CustomEvent).detail,\n ...hostSet,\n ...SWC_DOM_HELPERS\n };\n FunctionUtils.execute({ script, context: el, args });\n };\n\n el.addEventListener(eventName, handler);\n handlers.set(attrName, handler);\n }\n\n constructor(...args: any[]) {\n super(...args);\n const hostSet = SwcUtils.getHostSet(this as any);\n this._executeSwcScript('swc-on-constructor', hostSet);\n\n if (innerHtmlList.some(it => it.options.useShadow === true) && !this.shadowRoot) {\n this.attachShadow({ mode: 'open' });\n }\n }\n\n static get observedAttributes() {\n return mergedObservedAttributes;\n }\n\n async connectedCallback() {\n const conf = getElementConfig(this);\n const currentWin = conf?.window || window;\n const currentDoc = currentWin.document;\n\n const hostSet = SwcUtils.getHostSet(this as any);\n\n this._executeSwcScript('swc-on-before-connected', hostSet);\n const bMethods = findAllLifecycleMetadata(this, ON_BEFORE_CONNECTED_METADATA_KEY);\n if (bMethods) {\n for (const m of bMethods) await this._invokeLifecycleMethod(m, hostSet);\n }\n\n if (typeof (this as any).initCore === 'function') (this as any).initCore();\n\n if (innerHtmlList.length > 0) {\n let sContent = '',\n lContent = '';\n for (const meta of innerHtmlList) {\n const res = await (this as any)[meta.propertyKey]();\n if (res !== undefined) {\n if (meta.options.useShadow) sContent += res;\n else lContent += res;\n }\n }\n if (this.shadowRoot) this.shadowRoot.innerHTML = sContent;\n if (lContent) this.innerHTML = lContent;\n }\n\n // --- Optimized Host Delegation ---\n const createDelegationHandler = (delegateHost: any) => (event: Event) => {\n if ((event as any).__swc_handled) return;\n\n const path = event.composedPath();\n const type = event.type;\n const attrName = `swc-on-${type}`;\n\n for (const node of path) {\n if (node === delegateHost) break;\n if (!(node instanceof HTMLElement)) continue;\n\n const script = node.getAttribute?.(attrName);\n if (script && !getElementConfig(node)) {\n const host = SwcUtils.findNearestSwcHost(node);\n if (host) {\n const childHostSet = SwcUtils.getHostSet(node);\n const args = {\n event,\n $data: (event as CustomEvent).detail,\n ...childHostSet,\n ...SWC_DOM_HELPERS\n };\n FunctionUtils.execute({ script, context: node, args });\n (event as any).__swc_handled = true;\n break;\n }\n }\n }\n };\n\n // 1. Local Delegation (To itself)\n DOM_EVENT_NAMES.forEach(type => {\n this.addEventListener(type, createDelegationHandler(this));\n this._boundListeners.push({ target: this as any, type, handler: createDelegationHandler(this) });\n });\n\n // 2. Structural/Global Delegation (If no parent host exists)\n const hasParentHost = SwcUtils.findAllSwcHosts(this as any).length > 0;\n if (!hasParentHost) {\n const root = this.getRootNode();\n if (!globalDelegatedRoots.has(root)) {\n DOM_EVENT_NAMES.forEach(type => {\n const handler = createDelegationHandler(root);\n root.addEventListener(type, handler);\n });\n globalDelegatedRoots.add(root);\n }\n }\n\n // --- @addEventListener binding (Direct/Delegate/Global) ---\n addEventListenerList.forEach(meta => {\n const { selector, type, options } = meta;\n const { root, capture, once, passive, stopPropagation, stopImmediatePropagation, preventDefault, delegate, removeOnDisconnected } = options;\n const opts = { capture, once, passive };\n\n const bindTargets: EventTarget[] = [];\n\n if (selector === ':window') {\n bindTargets.push(currentWin);\n } else if (selector === ':document') {\n bindTargets.push(currentDoc);\n } else if (selector === ':parentHost') {\n if (hostSet.$parentHost) bindTargets.push(hostSet.$parentHost);\n } else if (selector === ':appHost') {\n if (hostSet.$appHost) bindTargets.push(hostSet.$appHost);\n } else if (selector === ':firstHost') {\n if (hostSet.$firstHost) bindTargets.push(hostSet.$firstHost);\n } else if (selector === ':lastHost') {\n if (hostSet.$lastHost) bindTargets.push(hostSet.$lastHost);\n } else if (selector === ':firstAppHost') {\n if (hostSet.$firstAppHost) bindTargets.push(hostSet.$firstAppHost);\n } else if (selector === ':lastAppHost') {\n if (hostSet.$lastAppHost) bindTargets.push(hostSet.$lastAppHost);\n } else if (!selector || selector === ':host') {\n bindTargets.push(this as any);\n } else if (delegate) {\n const bindRoots: (HTMLElement | ShadowRoot)[] = [];\n const r = root || 'auto';\n if (r === 'auto') bindRoots.push(this.shadowRoot || (this as any));\n else if (r === 'light') bindRoots.push(this as any);\n else if (r === 'shadow') {\n if (this.shadowRoot) bindRoots.push(this.shadowRoot as any);\n } else if (r === 'all') {\n bindRoots.push(this as any);\n if (this.shadowRoot) bindRoots.push(this.shadowRoot as any);\n }\n\n bindRoots.forEach(br => {\n const handler = (event: Event) => {\n const matchedEl = (event.target as HTMLElement).closest(selector);\n if (matchedEl && (br as any).contains(matchedEl)) {\n if (stopPropagation) event.stopPropagation();\n if (stopImmediatePropagation) event.stopImmediatePropagation();\n if (preventDefault) event.preventDefault();\n const currentHostSet = SwcUtils.getHostSet(this as any);\n this._invokeLifecycleMethod(meta.propertyKey, currentHostSet, [event, currentHostSet, matchedEl]);\n }\n };\n br.addEventListener(type, handler, opts);\n const self: any = this;\n if (removeOnDisconnected === true || (br !== self && br !== self.shadowRoot)) {\n this._boundListeners.push({ target: br, type, handler, options: opts });\n }\n });\n } else {\n const searchRoots: (HTMLElement | ShadowRoot)[] = [];\n const r = root || 'auto';\n if (r === 'auto') searchRoots.push((this.shadowRoot || (this as any)) as any);\n else if (r === 'light') searchRoots.push(this as any);\n else if (r === 'shadow') {\n if (this.shadowRoot) searchRoots.push(this.shadowRoot as any);\n } else if (r === 'all') {\n searchRoots.push(this as any);\n if (this.shadowRoot) searchRoots.push(this.shadowRoot as any);\n }\n\n searchRoots.forEach(sr => {\n sr.querySelectorAll(selector).forEach(el => bindTargets.push(el));\n });\n }\n\n bindTargets.forEach(target => {\n const handler = (event: Event) => {\n if (stopPropagation) event.stopPropagation();\n if (stopImmediatePropagation) event.stopImmediatePropagation();\n if (preventDefault) event.preventDefault();\n const currentHostSet = SwcUtils.getHostSet(this as any);\n this._invokeLifecycleMethod(meta.propertyKey, currentHostSet, [event, currentHostSet]);\n };\n target.addEventListener(type, handler, opts);\n if (removeOnDisconnected === true || target === currentWin || target === currentDoc) {\n this._boundListeners.push({ target, type, handler, options: opts });\n }\n });\n });\n\n if (super.connectedCallback) await super.connectedCallback();\n const aMethods = findAllLifecycleMetadata(this, ON_AFTER_CONNECTED_METADATA_KEY);\n if (aMethods) {\n for (const m of aMethods) await this._invokeLifecycleMethod(m, hostSet);\n }\n\n this._executeSwcScript('swc-on-connected', hostSet);\n this._executeSwcScript('swc-on-after-connected', hostSet);\n }\n\n disconnectedCallback() {\n const hostSet = SwcUtils.getHostSet(this as any);\n this._executeSwcScript('swc-on-before-disconnected', hostSet);\n const bMethods = findAllLifecycleMetadata(this, ON_BEFORE_DISCONNECTED_METADATA_KEY);\n if (bMethods) bMethods.forEach(m => this._invokeLifecycleMethod(m, hostSet));\n\n this._boundListeners.forEach(l => l.target.removeEventListener(l.type, l.handler, l.options));\n this._boundListeners = [];\n\n if (super.disconnectedCallback) super.disconnectedCallback();\n\n const aMethods = findAllLifecycleMetadata(this, ON_AFTER_DISCONNECTED_METADATA_KEY);\n if (aMethods) aMethods.forEach(m => this._invokeLifecycleMethod(m, hostSet));\n this._executeSwcScript('swc-on-disconnected', hostSet);\n this._executeSwcScript('swc-on-after-disconnected', hostSet);\n }\n\n adoptedCallback() {\n const hostSet = SwcUtils.getHostSet(this as any);\n this._executeSwcScript('swc-on-before-adopted', hostSet);\n const bMethods = findAllLifecycleMetadata(this, ON_BEFORE_ADOPTED_METADATA_KEY);\n if (bMethods) bMethods.forEach(m => this._invokeLifecycleMethod(m, hostSet));\n\n if (super.adoptedCallback) super.adoptedCallback();\n\n const aMethods = findAllLifecycleMetadata(this, ON_AFTER_ADOPTED_METADATA_KEY);\n if (aMethods) aMethods.forEach(m => this._invokeLifecycleMethod(m, hostSet));\n this._executeSwcScript('swc-on-adopted', hostSet);\n this._executeSwcScript('swc-on-after-adopted', hostSet);\n }\n\n attributeChangedCallback(name: string, old: string | null, newVal: string | null) {\n if (super.attributeChangedCallback) super.attributeChangedCallback(name, old, newVal);\n\n if (name.startsWith('swc-on-') && !swcLifecycleAttributes.includes(name)) {\n if (newVal !== null) {\n const customEventMeta = emitCustomEventList.find(it => it.options.attributeName === name);\n const eventName = customEventMeta ? customEventMeta.options.type : name.substring(7);\n this._bindAttributeEvent(this as any, name, newVal, eventName);\n }\n }\n\n const mKeys = attrChangeMap.get(name);\n if (mKeys && Array.isArray(mKeys)) {\n const hSet = SwcUtils.getHostSet(this as any);\n mKeys.forEach(key => this._invokeLifecycleMethod(key, hSet, [newVal, old, name]));\n }\n }\n };\n\n // --- @setAttribute wrapping logic ---\n setAttrMap.forEach((methodName, attrName) => {\n const original = NewClass.prototype[methodName as any];\n if (typeof original === 'function') {\n NewClass.prototype[methodName as any] = function (...args: any[]) {\n const res = original.apply(this, args);\n if (res !== undefined) {\n if (res === null) this.removeAttribute(attrName);\n else this.setAttribute(attrName, String(res));\n }\n return res;\n };\n }\n });\n\n // --- @emitCustomEvent wrapping logic ---\n emitCustomEventList.forEach(meta => {\n const { propertyKey, options } = meta;\n const original = NewClass.prototype[propertyKey as any];\n if (typeof original === 'function') {\n NewClass.prototype[propertyKey as any] = function (...args: any[]) {\n const detail = original.apply(this, args);\n const event = new CustomEvent(options.type, {\n detail,\n bubbles: options.bubbles,\n composed: options.composed,\n cancelable: options.cancelable\n });\n this.dispatchEvent(event);\n return detail;\n };\n }\n });\n\n const originalProto = constructor.prototype;\n const newProto = NewClass.prototype;\n Object.getOwnPropertyNames(originalProto).forEach(name => {\n if (name === 'constructor') return;\n const keys = Reflect.getMetadataKeys(originalProto, name);\n keys.forEach(key => Reflect.defineMetadata(key, Reflect.getMetadata(key, originalProto, name), newProto, name));\n });\n\n ReflectUtils.defineMetadata(ELEMENT_CONFIG_KEY, config, NewClass);\n ReflectUtils.defineMetadata(ELEMENT_CONFIG_KEY, config, constructor);\n const registry = config.customElementRegistry || (win as any)?.customElements;\n if (registry && !registry.get(config.name)) {\n registry.define(config.name, NewClass as any, config.extends ? { extends: config.extends } : undefined);\n }\n return NewClass as any;\n };\n\nexport const getElementConfig = (target: any): ElementConfig | undefined => {\n const constructor = target instanceof Function ? target : target.constructor;\n return ReflectUtils.getMetadata(ELEMENT_CONFIG_KEY, constructor);\n};\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": []
|
|
7
7
|
}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { ReflectUtils } from "@dooboostore/core/reflect/ReflectUtils";
|
|
2
2
|
const EMIT_CUSTOM_EVENT_METADATA_KEY = Symbol("simple-web-component:emit-custom-event");
|
|
3
3
|
function emitCustomEvent(typeOrOptions) {
|
|
4
|
-
return (target, propertyKey
|
|
4
|
+
return (target, propertyKey) => {
|
|
5
5
|
const constructor = target.constructor;
|
|
6
6
|
const options = typeof typeOrOptions === "string" ? { type: typeOrOptions } : typeOrOptions;
|
|
7
7
|
if (!options.attributeName) {
|
|
8
|
-
options.attributeName = `on
|
|
8
|
+
options.attributeName = `swc-on-${options.type}`;
|
|
9
9
|
}
|
|
10
10
|
if (options.bubbles === void 0) options.bubbles = true;
|
|
11
11
|
if (options.composed === void 0) options.composed = true;
|
|
@@ -15,18 +15,6 @@ function emitCustomEvent(typeOrOptions) {
|
|
|
15
15
|
ReflectUtils.defineMetadata(EMIT_CUSTOM_EVENT_METADATA_KEY, list, constructor);
|
|
16
16
|
}
|
|
17
17
|
list.push({ propertyKey, options });
|
|
18
|
-
const originalMethod = descriptor.value;
|
|
19
|
-
descriptor.value = function(...args) {
|
|
20
|
-
const detail = originalMethod.apply(this, args);
|
|
21
|
-
const event = new CustomEvent(options.type, {
|
|
22
|
-
detail,
|
|
23
|
-
bubbles: options.bubbles,
|
|
24
|
-
composed: options.composed,
|
|
25
|
-
cancelable: options.cancelable
|
|
26
|
-
});
|
|
27
|
-
this.dispatchEvent(event);
|
|
28
|
-
return detail;
|
|
29
|
-
};
|
|
30
18
|
};
|
|
31
19
|
}
|
|
32
20
|
const getEmitCustomEventMetadataList = (target) => {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/decorators/emitCustomEvent.ts"],
|
|
4
|
-
"sourcesContent": ["import { ReflectUtils } from '@dooboostore/core/reflect/ReflectUtils';\n\nexport interface EmitCustomEventOptions {\n type: string;\n attributeName?: string
|
|
5
|
-
"mappings": "AAAA,SAAS,oBAAoB;AAetB,MAAM,iCAAiC,OAAO,wCAAwC;AAEtF,SAAS,gBAAgB,eAAiE;AAC/F,SAAO,CAAC,QAAgB,
|
|
4
|
+
"sourcesContent": ["import { ReflectUtils } from '@dooboostore/core/reflect/ReflectUtils';\n\nexport interface EmitCustomEventOptions {\n type: string;\n attributeName?: string;\n bubbles?: boolean;\n composed?: boolean;\n cancelable?: boolean;\n}\n\nexport interface EmitCustomEventMetadata {\n propertyKey: string | symbol;\n options: EmitCustomEventOptions;\n}\n\nexport const EMIT_CUSTOM_EVENT_METADATA_KEY = Symbol('simple-web-component:emit-custom-event');\n\nexport function emitCustomEvent(typeOrOptions: string | EmitCustomEventOptions): MethodDecorator {\n return (target: Object, propertyKey: string | symbol) => {\n const constructor = target.constructor;\n const options: EmitCustomEventOptions = typeof typeOrOptions === 'string' ? { type: typeOrOptions } : typeOrOptions;\n\n if (!options.attributeName) {\n options.attributeName = `swc-on-${options.type}`;\n }\n if (options.bubbles === undefined) options.bubbles = true;\n if (options.composed === undefined) options.composed = true;\n\n let list = ReflectUtils.getMetadata<EmitCustomEventMetadata[]>(EMIT_CUSTOM_EVENT_METADATA_KEY, constructor);\n if (!list) {\n list = [];\n ReflectUtils.defineMetadata(EMIT_CUSTOM_EVENT_METADATA_KEY, list, constructor);\n }\n list.push({ propertyKey, options });\n };\n}\n\nexport const getEmitCustomEventMetadataList = (target: any): EmitCustomEventMetadata[] | undefined => {\n const constructor = target instanceof Function ? target : target.constructor;\n return ReflectUtils.getMetadata(EMIT_CUSTOM_EVENT_METADATA_KEY, constructor);\n};\n"],
|
|
5
|
+
"mappings": "AAAA,SAAS,oBAAoB;AAetB,MAAM,iCAAiC,OAAO,wCAAwC;AAEtF,SAAS,gBAAgB,eAAiE;AAC/F,SAAO,CAAC,QAAgB,gBAAiC;AACvD,UAAM,cAAc,OAAO;AAC3B,UAAM,UAAkC,OAAO,kBAAkB,WAAW,EAAE,MAAM,cAAc,IAAI;AAEtG,QAAI,CAAC,QAAQ,eAAe;AAC1B,cAAQ,gBAAgB,UAAU,QAAQ,IAAI;AAAA,IAChD;AACA,QAAI,QAAQ,YAAY,OAAW,SAAQ,UAAU;AACrD,QAAI,QAAQ,aAAa,OAAW,SAAQ,WAAW;AAEvD,QAAI,OAAO,aAAa,YAAuC,gCAAgC,WAAW;AAC1G,QAAI,CAAC,MAAM;AACT,aAAO,CAAC;AACR,mBAAa,eAAe,gCAAgC,MAAM,WAAW;AAAA,IAC/E;AACA,SAAK,KAAK,EAAE,aAAa,QAAQ,CAAC;AAAA,EACpC;AACF;AAEO,MAAM,iCAAiC,CAAC,WAAuD;AACpG,QAAM,cAAc,kBAAkB,WAAW,SAAS,OAAO;AACjE,SAAO,aAAa,YAAY,gCAAgC,WAAW;AAC7E;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -1,47 +1,58 @@
|
|
|
1
1
|
import { ReflectUtils } from "@dooboostore/core/reflect/ReflectUtils";
|
|
2
|
+
import { getElementConfig } from "./elementDefine.js";
|
|
3
|
+
import { SwcUtils } from "../utils/Utils.js";
|
|
2
4
|
const QUERY_METADATA_KEY = Symbol("simple-web-component:query");
|
|
3
|
-
function query(
|
|
4
|
-
|
|
5
|
-
|
|
5
|
+
function query(selector, options = {}) {
|
|
6
|
+
return (target, propertyKey, descriptor) => {
|
|
7
|
+
if (descriptor !== void 0) {
|
|
8
|
+
throw new Error(`@query decorator cannot be used on methods. (Method: ${String(propertyKey)})`);
|
|
9
|
+
}
|
|
6
10
|
const constructor = target.constructor;
|
|
7
11
|
let queries = ReflectUtils.getMetadata(QUERY_METADATA_KEY, constructor);
|
|
8
12
|
if (!queries) {
|
|
9
13
|
queries = [];
|
|
10
14
|
ReflectUtils.defineMetadata(QUERY_METADATA_KEY, queries, constructor);
|
|
11
15
|
}
|
|
12
|
-
queries.push({ selector, options, propertyKey
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
return
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
16
|
+
queries.push({ selector, options, propertyKey });
|
|
17
|
+
Object.defineProperty(target, propertyKey, {
|
|
18
|
+
get() {
|
|
19
|
+
const hostSet = SwcUtils.getHostSet(this);
|
|
20
|
+
if (selector === ":parentHost")
|
|
21
|
+
return hostSet.$parentHost;
|
|
22
|
+
if (selector === ":appHost")
|
|
23
|
+
return hostSet.$appHost;
|
|
24
|
+
if (selector === ":firstHost")
|
|
25
|
+
return hostSet.$firstHost;
|
|
26
|
+
if (selector === ":lastHost")
|
|
27
|
+
return hostSet.$lastHost;
|
|
28
|
+
if (selector === ":firstAppHost")
|
|
29
|
+
return hostSet.$firstAppHost;
|
|
30
|
+
if (selector === ":lastAppHost")
|
|
31
|
+
return hostSet.$lastAppHost;
|
|
32
|
+
const config = getElementConfig(this);
|
|
33
|
+
const win = config?.window || window;
|
|
34
|
+
const doc = win.document;
|
|
35
|
+
if (selector === ":window")
|
|
36
|
+
return win;
|
|
37
|
+
if (selector === ":document")
|
|
38
|
+
return doc;
|
|
39
|
+
if (!selector || selector === ":host")
|
|
40
|
+
return this;
|
|
41
|
+
const r = options.root || "auto";
|
|
42
|
+
if (r === "shadow") {
|
|
43
|
+
return this.shadowRoot ? this.shadowRoot.querySelector(selector) : null;
|
|
44
|
+
}
|
|
45
|
+
if (r === "light") {
|
|
46
|
+
return this.querySelector(selector);
|
|
47
|
+
}
|
|
48
|
+
if (r === "all") {
|
|
49
|
+
return this.shadowRoot?.querySelector(selector) || this.querySelector(selector);
|
|
50
|
+
}
|
|
51
|
+
return (this.shadowRoot || this).querySelector(selector);
|
|
52
|
+
},
|
|
53
|
+
enumerable: true,
|
|
54
|
+
configurable: true
|
|
55
|
+
});
|
|
45
56
|
};
|
|
46
57
|
}
|
|
47
58
|
const getQueryMetadata = (target) => {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/decorators/query.ts"],
|
|
4
|
-
"sourcesContent": ["import { ReflectUtils } from '@dooboostore/core/reflect/ReflectUtils';\n\nexport interface QueryOptions {\n
|
|
5
|
-
"mappings": "AAAA,SAAS,oBAAoB;
|
|
4
|
+
"sourcesContent": ["import { ReflectUtils } from '@dooboostore/core/reflect/ReflectUtils';\nimport { getElementConfig } from './elementDefine';\nimport { SwcUtils } from '../utils/Utils';\n\nexport interface QueryOptions {\n root?: 'light' | 'shadow' | 'all' | 'auto';\n}\n\nexport interface QueryMetadata {\n selector: string;\n options: QueryOptions;\n propertyKey: string | symbol;\n}\n\nexport const QUERY_METADATA_KEY = Symbol('simple-web-component:query');\n\n/**\n * @query decorator to inject a single element into a class property.\n */\nexport function query(selector: string, options: QueryOptions = {}): PropertyDecorator {\n return (target: Object, propertyKey: string | symbol, descriptor?: never): void => {\n if (descriptor !== undefined) {\n throw new Error(`@query decorator cannot be used on methods. (Method: ${String(propertyKey)})`);\n }\n\n const constructor = target.constructor;\n let queries = ReflectUtils.getMetadata<QueryMetadata[]>(QUERY_METADATA_KEY, constructor);\n if (!queries) {\n queries = [];\n ReflectUtils.defineMetadata(QUERY_METADATA_KEY, queries, constructor);\n }\n queries.push({ selector, options, propertyKey });\n\n Object.defineProperty(target, propertyKey, {\n get(this: HTMLElement) {\n // --- Special Selectors: HostSet ---\n const hostSet = SwcUtils.getHostSet(this);\n if (selector === ':parentHost') return hostSet.$parentHost;\n if (selector === ':appHost') return hostSet.$appHost;\n if (selector === ':firstHost') return hostSet.$firstHost;\n if (selector === ':lastHost') return hostSet.$lastHost;\n if (selector === ':firstAppHost') return hostSet.$firstAppHost;\n if (selector === ':lastAppHost') return hostSet.$lastAppHost;\n\n // --- Special Selectors: Env ---\n const config = getElementConfig(this);\n const win = config?.window || window;\n const doc = win.document;\n\n if (selector === ':window') return win;\n if (selector === ':document') return doc;\n if (!selector || selector === ':host') return this;\n\n // --- Standard Selectors ---\n const r = options.root || 'auto';\n\n if (r === 'shadow') {\n return this.shadowRoot ? this.shadowRoot.querySelector(selector) : null;\n }\n if (r === 'light') {\n return this.querySelector(selector);\n }\n if (r === 'all') {\n return this.shadowRoot?.querySelector(selector) || this.querySelector(selector);\n }\n // auto\n return (this.shadowRoot || this).querySelector(selector);\n },\n enumerable: true,\n configurable: true\n });\n };\n}\n\nexport const getQueryMetadata = (target: any): QueryMetadata[] | undefined => {\n const constructor = target instanceof Function ? target : target.constructor;\n return ReflectUtils.getMetadata(QUERY_METADATA_KEY, constructor);\n};\n"],
|
|
5
|
+
"mappings": "AAAA,SAAS,oBAAoB;AAC7B,SAAS,wBAAwB;AACjC,SAAS,gBAAgB;AAYlB,MAAM,qBAAqB,OAAO,4BAA4B;AAK/D,SAAU,MAAM,UAAkB,UAAwB,CAAA,GAAE;AAChE,SAAO,CAAC,QAAgB,aAA8B,eAA4B;AAChF,QAAI,eAAe,QAAW;AAC5B,YAAM,IAAI,MAAM,wDAAwD,OAAO,WAAW,CAAC,GAAG;IAChG;AAEA,UAAM,cAAc,OAAO;AAC3B,QAAI,UAAU,aAAa,YAA6B,oBAAoB,WAAW;AACvF,QAAI,CAAC,SAAS;AACZ,gBAAU,CAAA;AACV,mBAAa,eAAe,oBAAoB,SAAS,WAAW;IACtE;AACA,YAAQ,KAAK,EAAE,UAAU,SAAS,YAAW,CAAE;AAE/C,WAAO,eAAe,QAAQ,aAAa;MACzC,MAAG;AAED,cAAM,UAAU,SAAS,WAAW,IAAI;AACxC,YAAI,aAAa;AAAe,iBAAO,QAAQ;AAC/C,YAAI,aAAa;AAAY,iBAAO,QAAQ;AAC5C,YAAI,aAAa;AAAc,iBAAO,QAAQ;AAC9C,YAAI,aAAa;AAAa,iBAAO,QAAQ;AAC7C,YAAI,aAAa;AAAiB,iBAAO,QAAQ;AACjD,YAAI,aAAa;AAAgB,iBAAO,QAAQ;AAGhD,cAAM,SAAS,iBAAiB,IAAI;AACpC,cAAM,MAAM,QAAQ,UAAU;AAC9B,cAAM,MAAM,IAAI;AAEhB,YAAI,aAAa;AAAW,iBAAO;AACnC,YAAI,aAAa;AAAa,iBAAO;AACrC,YAAI,CAAC,YAAY,aAAa;AAAS,iBAAO;AAG9C,cAAM,IAAI,QAAQ,QAAQ;AAE1B,YAAI,MAAM,UAAU;AAClB,iBAAO,KAAK,aAAa,KAAK,WAAW,cAAc,QAAQ,IAAI;QACrE;AACA,YAAI,MAAM,SAAS;AACjB,iBAAO,KAAK,cAAc,QAAQ;QACpC;AACA,YAAI,MAAM,OAAO;AACf,iBAAO,KAAK,YAAY,cAAc,QAAQ,KAAK,KAAK,cAAc,QAAQ;QAChF;AAEA,gBAAQ,KAAK,cAAc,MAAM,cAAc,QAAQ;MACzD;MACA,YAAY;MACZ,cAAc;KACf;EACH;AACF;AAEO,MAAM,mBAAmB,CAAC,WAA4C;AAC3E,QAAM,cAAc,kBAAkB,WAAW,SAAS,OAAO;AACjE,SAAO,aAAa,YAAY,oBAAoB,WAAW;AACjE;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|