@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
|
@@ -23,6 +23,7 @@ __export(elementDefine_exports, {
|
|
|
23
23
|
});
|
|
24
24
|
module.exports = __toCommonJS(elementDefine_exports);
|
|
25
25
|
var import_ReflectUtils = require("@dooboostore/core/reflect/ReflectUtils");
|
|
26
|
+
var import_FunctionUtils = require("@dooboostore/core/function/FunctionUtils");
|
|
26
27
|
var import_innerHtml = require("./innerHtml");
|
|
27
28
|
var import_addEventListener = require("./addEventListener");
|
|
28
29
|
var import_lifecycles = require("./lifecycles");
|
|
@@ -34,6 +35,7 @@ var import_config = require("../config/config");
|
|
|
34
35
|
var import_Inject = require("@dooboostore/simple-boot/decorators/inject/Inject");
|
|
35
36
|
var import_types = require("../types");
|
|
36
37
|
const ELEMENT_CONFIG_KEY = Symbol("simple-web-component:element-config");
|
|
38
|
+
const globalDelegatedRoots = /* @__PURE__ */ new WeakSet();
|
|
37
39
|
function buildEnv(configWindow) {
|
|
38
40
|
const win = configWindow || (typeof window !== "undefined" ? window : void 0);
|
|
39
41
|
const doc = win?.document;
|
|
@@ -42,13 +44,7 @@ function buildEnv(configWindow) {
|
|
|
42
44
|
if (win?.[cls])
|
|
43
45
|
builtInTagMap.set(win[cls], tag);
|
|
44
46
|
}
|
|
45
|
-
const domHelpers =
|
|
46
|
-
$d: doc,
|
|
47
|
-
$w: win,
|
|
48
|
-
$q: (sel, root) => (root ?? doc).querySelector(sel),
|
|
49
|
-
$qa: (sel, root) => Array.from((root ?? doc).querySelectorAll(sel)),
|
|
50
|
-
$qi: (id, root) => (root ?? doc).getElementById(id)
|
|
51
|
-
};
|
|
47
|
+
const domHelpers = import_Utils.SwcUtils.getHelperSet(win);
|
|
52
48
|
return { win, doc, builtInTagMap, domHelpers };
|
|
53
49
|
}
|
|
54
50
|
const getHandlers = (inst) => {
|
|
@@ -60,8 +56,6 @@ const elementDefine = (inConfig) => (constructor) => {
|
|
|
60
56
|
const config = typeof inConfig === "string" ? { name: inConfig } : inConfig;
|
|
61
57
|
const { win, doc, builtInTagMap: BUILT_IN_TAG_MAP, domHelpers: SWC_DOM_HELPERS } = buildEnv(config.window);
|
|
62
58
|
config.window = win;
|
|
63
|
-
const SWC_DOM_HELPER_KEYS = Object.keys(SWC_DOM_HELPERS);
|
|
64
|
-
const SWC_DOM_HELPER_VALS = () => SWC_DOM_HELPER_KEYS.map((k) => SWC_DOM_HELPERS[k]);
|
|
65
59
|
let extendsTagName = config.extends;
|
|
66
60
|
if (!extendsTagName) {
|
|
67
61
|
let proto = constructor;
|
|
@@ -87,9 +81,7 @@ const elementDefine = (inConfig) => (constructor) => {
|
|
|
87
81
|
if (script) {
|
|
88
82
|
try {
|
|
89
83
|
const args = { ...hostSet, ...SWC_DOM_HELPERS, ...extraArgs };
|
|
90
|
-
|
|
91
|
-
const argValues = Object.values(args);
|
|
92
|
-
new Function(...argNames, script).apply(this, argValues);
|
|
84
|
+
import_FunctionUtils.FunctionUtils.execute({ script, context: this, args });
|
|
93
85
|
} catch (e) {
|
|
94
86
|
console.error(`[SWC] Failed to execute ${attrName}:`, e);
|
|
95
87
|
}
|
|
@@ -112,10 +104,12 @@ const elementDefine = (inConfig) => (constructor) => {
|
|
|
112
104
|
return this[methodName](...extraArgs);
|
|
113
105
|
}
|
|
114
106
|
}
|
|
115
|
-
_bindAttributeEvent(el, attrName, script) {
|
|
116
|
-
if (!
|
|
117
|
-
|
|
118
|
-
|
|
107
|
+
_bindAttributeEvent(el, attrName, script, eventName) {
|
|
108
|
+
if (!eventName) {
|
|
109
|
+
if (!attrName.startsWith("swc-on-"))
|
|
110
|
+
return;
|
|
111
|
+
eventName = attrName.substring(7);
|
|
112
|
+
}
|
|
119
113
|
if (swcLifecycleAttributes.includes(attrName))
|
|
120
114
|
return;
|
|
121
115
|
const elHandlers = getHandlers(this);
|
|
@@ -129,9 +123,13 @@ const elementDefine = (inConfig) => (constructor) => {
|
|
|
129
123
|
el.removeEventListener(eventName, oldHandler);
|
|
130
124
|
const handler = (event) => {
|
|
131
125
|
const hostSet = import_Utils.SwcUtils.getHostSet(el);
|
|
132
|
-
const
|
|
133
|
-
|
|
134
|
-
|
|
126
|
+
const args = {
|
|
127
|
+
event,
|
|
128
|
+
$data: event.detail,
|
|
129
|
+
...hostSet,
|
|
130
|
+
...SWC_DOM_HELPERS
|
|
131
|
+
};
|
|
132
|
+
import_FunctionUtils.FunctionUtils.execute({ script, context: el, args });
|
|
135
133
|
};
|
|
136
134
|
el.addEventListener(eventName, handler);
|
|
137
135
|
handlers.set(attrName, handler);
|
|
@@ -140,6 +138,7 @@ const elementDefine = (inConfig) => (constructor) => {
|
|
|
140
138
|
super(...args);
|
|
141
139
|
this._swcId = Math.random().toString(36).substring(2, 11);
|
|
142
140
|
this._emitHandlers = /* @__PURE__ */ new Map();
|
|
141
|
+
this._boundListeners = [];
|
|
143
142
|
const hostSet = import_Utils.SwcUtils.getHostSet(this);
|
|
144
143
|
this._executeSwcScript("swc-on-constructor", hostSet);
|
|
145
144
|
if (innerHtmlList.some((it) => it.options.useShadow === true) && !this.shadowRoot) {
|
|
@@ -150,6 +149,9 @@ const elementDefine = (inConfig) => (constructor) => {
|
|
|
150
149
|
return mergedObservedAttributes;
|
|
151
150
|
}
|
|
152
151
|
async connectedCallback() {
|
|
152
|
+
const conf = getElementConfig(this);
|
|
153
|
+
const currentWin = conf?.window || window;
|
|
154
|
+
const currentDoc = currentWin.document;
|
|
153
155
|
const hostSet = import_Utils.SwcUtils.getHostSet(this);
|
|
154
156
|
this._executeSwcScript("swc-on-before-connected", hostSet);
|
|
155
157
|
const bMethods = (0, import_lifecycles.findAllLifecycleMetadata)(this, import_lifecycles.ON_BEFORE_CONNECTED_METADATA_KEY);
|
|
@@ -175,19 +177,122 @@ const elementDefine = (inConfig) => (constructor) => {
|
|
|
175
177
|
if (lContent)
|
|
176
178
|
this.innerHTML = lContent;
|
|
177
179
|
}
|
|
180
|
+
const createDelegationHandler = (delegateHost) => (event) => {
|
|
181
|
+
if (event.__swc_handled)
|
|
182
|
+
return;
|
|
183
|
+
const path = event.composedPath();
|
|
184
|
+
const type = event.type;
|
|
185
|
+
const attrName = `swc-on-${type}`;
|
|
186
|
+
for (const node of path) {
|
|
187
|
+
if (node === delegateHost)
|
|
188
|
+
break;
|
|
189
|
+
if (!(node instanceof HTMLElement))
|
|
190
|
+
continue;
|
|
191
|
+
const script = node.getAttribute?.(attrName);
|
|
192
|
+
if (script && !getElementConfig(node)) {
|
|
193
|
+
const host = import_Utils.SwcUtils.findNearestSwcHost(node);
|
|
194
|
+
if (host) {
|
|
195
|
+
const childHostSet = import_Utils.SwcUtils.getHostSet(node);
|
|
196
|
+
const args = {
|
|
197
|
+
event,
|
|
198
|
+
$data: event.detail,
|
|
199
|
+
...childHostSet,
|
|
200
|
+
...SWC_DOM_HELPERS
|
|
201
|
+
};
|
|
202
|
+
import_FunctionUtils.FunctionUtils.execute({ script, context: node, args });
|
|
203
|
+
event.__swc_handled = true;
|
|
204
|
+
break;
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
};
|
|
209
|
+
import_config.DOM_EVENT_NAMES.forEach((type) => {
|
|
210
|
+
this.addEventListener(type, createDelegationHandler(this));
|
|
211
|
+
this._boundListeners.push({ target: this, type, handler: createDelegationHandler(this) });
|
|
212
|
+
});
|
|
213
|
+
const hasParentHost = import_Utils.SwcUtils.findAllSwcHosts(this).length > 0;
|
|
214
|
+
if (!hasParentHost) {
|
|
215
|
+
const root = this.getRootNode();
|
|
216
|
+
if (!globalDelegatedRoots.has(root)) {
|
|
217
|
+
import_config.DOM_EVENT_NAMES.forEach((type) => {
|
|
218
|
+
const handler = createDelegationHandler(root);
|
|
219
|
+
root.addEventListener(type, handler);
|
|
220
|
+
});
|
|
221
|
+
globalDelegatedRoots.add(root);
|
|
222
|
+
}
|
|
223
|
+
}
|
|
178
224
|
addEventListenerList.forEach((meta) => {
|
|
179
|
-
const {
|
|
180
|
-
const
|
|
181
|
-
|
|
182
|
-
|
|
225
|
+
const { selector, type, options } = meta;
|
|
226
|
+
const { root, capture, once, passive, stopPropagation, stopImmediatePropagation, preventDefault, delegate, removeOnDisconnected } = options;
|
|
227
|
+
const opts = { capture, once, passive };
|
|
228
|
+
const bindTargets = [];
|
|
229
|
+
if (selector === ":window") {
|
|
230
|
+
bindTargets.push(currentWin);
|
|
231
|
+
} else if (selector === ":document") {
|
|
232
|
+
bindTargets.push(currentDoc);
|
|
233
|
+
} else if (selector === ":parentHost") {
|
|
234
|
+
if (hostSet.$parentHost)
|
|
235
|
+
bindTargets.push(hostSet.$parentHost);
|
|
236
|
+
} else if (selector === ":appHost") {
|
|
237
|
+
if (hostSet.$appHost)
|
|
238
|
+
bindTargets.push(hostSet.$appHost);
|
|
239
|
+
} else if (selector === ":firstHost") {
|
|
240
|
+
if (hostSet.$firstHost)
|
|
241
|
+
bindTargets.push(hostSet.$firstHost);
|
|
242
|
+
} else if (selector === ":lastHost") {
|
|
243
|
+
if (hostSet.$lastHost)
|
|
244
|
+
bindTargets.push(hostSet.$lastHost);
|
|
245
|
+
} else if (selector === ":firstAppHost") {
|
|
246
|
+
if (hostSet.$firstAppHost)
|
|
247
|
+
bindTargets.push(hostSet.$firstAppHost);
|
|
248
|
+
} else if (selector === ":lastAppHost") {
|
|
249
|
+
if (hostSet.$lastAppHost)
|
|
250
|
+
bindTargets.push(hostSet.$lastAppHost);
|
|
251
|
+
} else if (!selector || selector === ":host") {
|
|
252
|
+
bindTargets.push(this);
|
|
253
|
+
} else if (delegate) {
|
|
254
|
+
const bindRoots = [];
|
|
255
|
+
const r = root || "auto";
|
|
256
|
+
if (r === "auto")
|
|
257
|
+
bindRoots.push(this.shadowRoot || this);
|
|
258
|
+
else if (r === "light")
|
|
259
|
+
bindRoots.push(this);
|
|
260
|
+
else if (r === "shadow") {
|
|
261
|
+
if (this.shadowRoot)
|
|
262
|
+
bindRoots.push(this.shadowRoot);
|
|
263
|
+
} else if (r === "all") {
|
|
264
|
+
bindRoots.push(this);
|
|
265
|
+
if (this.shadowRoot)
|
|
266
|
+
bindRoots.push(this.shadowRoot);
|
|
267
|
+
}
|
|
268
|
+
bindRoots.forEach((br) => {
|
|
269
|
+
const handler = (event) => {
|
|
270
|
+
const matchedEl = event.target.closest(selector);
|
|
271
|
+
if (matchedEl && br.contains(matchedEl)) {
|
|
272
|
+
if (stopPropagation)
|
|
273
|
+
event.stopPropagation();
|
|
274
|
+
if (stopImmediatePropagation)
|
|
275
|
+
event.stopImmediatePropagation();
|
|
276
|
+
if (preventDefault)
|
|
277
|
+
event.preventDefault();
|
|
278
|
+
const currentHostSet = import_Utils.SwcUtils.getHostSet(this);
|
|
279
|
+
this._invokeLifecycleMethod(meta.propertyKey, currentHostSet, [event, currentHostSet, matchedEl]);
|
|
280
|
+
}
|
|
281
|
+
};
|
|
282
|
+
br.addEventListener(type, handler, opts);
|
|
283
|
+
const self = this;
|
|
284
|
+
if (removeOnDisconnected === true || br !== self && br !== self.shadowRoot) {
|
|
285
|
+
this._boundListeners.push({ target: br, type, handler, options: opts });
|
|
286
|
+
}
|
|
287
|
+
});
|
|
183
288
|
} else {
|
|
184
289
|
const searchRoots = [];
|
|
185
290
|
const r = root || "auto";
|
|
186
|
-
if (r === "auto")
|
|
291
|
+
if (r === "auto")
|
|
187
292
|
searchRoots.push(this.shadowRoot || this);
|
|
188
|
-
|
|
293
|
+
else if (r === "light")
|
|
189
294
|
searchRoots.push(this);
|
|
190
|
-
|
|
295
|
+
else if (r === "shadow") {
|
|
191
296
|
if (this.shadowRoot)
|
|
192
297
|
searchRoots.push(this.shadowRoot);
|
|
193
298
|
} else if (r === "all") {
|
|
@@ -196,11 +301,10 @@ const elementDefine = (inConfig) => (constructor) => {
|
|
|
196
301
|
searchRoots.push(this.shadowRoot);
|
|
197
302
|
}
|
|
198
303
|
searchRoots.forEach((sr) => {
|
|
199
|
-
|
|
200
|
-
found.forEach((el) => targetEls.push(el));
|
|
304
|
+
sr.querySelectorAll(selector).forEach((el) => bindTargets.push(el));
|
|
201
305
|
});
|
|
202
306
|
}
|
|
203
|
-
|
|
307
|
+
bindTargets.forEach((target) => {
|
|
204
308
|
const handler = (event) => {
|
|
205
309
|
if (stopPropagation)
|
|
206
310
|
event.stopPropagation();
|
|
@@ -208,11 +312,13 @@ const elementDefine = (inConfig) => (constructor) => {
|
|
|
208
312
|
event.stopImmediatePropagation();
|
|
209
313
|
if (preventDefault)
|
|
210
314
|
event.preventDefault();
|
|
211
|
-
const
|
|
212
|
-
this._invokeLifecycleMethod(meta.propertyKey,
|
|
315
|
+
const currentHostSet = import_Utils.SwcUtils.getHostSet(this);
|
|
316
|
+
this._invokeLifecycleMethod(meta.propertyKey, currentHostSet, [event, currentHostSet]);
|
|
213
317
|
};
|
|
214
|
-
|
|
215
|
-
|
|
318
|
+
target.addEventListener(type, handler, opts);
|
|
319
|
+
if (removeOnDisconnected === true || target === currentWin || target === currentDoc) {
|
|
320
|
+
this._boundListeners.push({ target, type, handler, options: opts });
|
|
321
|
+
}
|
|
216
322
|
});
|
|
217
323
|
});
|
|
218
324
|
if (super.connectedCallback)
|
|
@@ -231,6 +337,8 @@ const elementDefine = (inConfig) => (constructor) => {
|
|
|
231
337
|
const bMethods = (0, import_lifecycles.findAllLifecycleMetadata)(this, import_lifecycles.ON_BEFORE_DISCONNECTED_METADATA_KEY);
|
|
232
338
|
if (bMethods)
|
|
233
339
|
bMethods.forEach((m) => this._invokeLifecycleMethod(m, hostSet));
|
|
340
|
+
this._boundListeners.forEach((l) => l.target.removeEventListener(l.type, l.handler, l.options));
|
|
341
|
+
this._boundListeners = [];
|
|
234
342
|
if (super.disconnectedCallback)
|
|
235
343
|
super.disconnectedCallback();
|
|
236
344
|
const aMethods = (0, import_lifecycles.findAllLifecycleMetadata)(this, import_lifecycles.ON_AFTER_DISCONNECTED_METADATA_KEY);
|
|
@@ -258,7 +366,9 @@ const elementDefine = (inConfig) => (constructor) => {
|
|
|
258
366
|
super.attributeChangedCallback(name, old, newVal);
|
|
259
367
|
if (name.startsWith("swc-on-") && !swcLifecycleAttributes.includes(name)) {
|
|
260
368
|
if (newVal !== null) {
|
|
261
|
-
|
|
369
|
+
const customEventMeta = emitCustomEventList.find((it) => it.options.attributeName === name);
|
|
370
|
+
const eventName = customEventMeta ? customEventMeta.options.type : name.substring(7);
|
|
371
|
+
this._bindAttributeEvent(this, name, newVal, eventName);
|
|
262
372
|
}
|
|
263
373
|
}
|
|
264
374
|
const mKeys = attrChangeMap.get(name);
|
|
@@ -283,6 +393,23 @@ const elementDefine = (inConfig) => (constructor) => {
|
|
|
283
393
|
};
|
|
284
394
|
}
|
|
285
395
|
});
|
|
396
|
+
emitCustomEventList.forEach((meta) => {
|
|
397
|
+
const { propertyKey, options } = meta;
|
|
398
|
+
const original = NewClass.prototype[propertyKey];
|
|
399
|
+
if (typeof original === "function") {
|
|
400
|
+
NewClass.prototype[propertyKey] = function(...args) {
|
|
401
|
+
const detail = original.apply(this, args);
|
|
402
|
+
const event = new CustomEvent(options.type, {
|
|
403
|
+
detail,
|
|
404
|
+
bubbles: options.bubbles,
|
|
405
|
+
composed: options.composed,
|
|
406
|
+
cancelable: options.cancelable
|
|
407
|
+
});
|
|
408
|
+
this.dispatchEvent(event);
|
|
409
|
+
return detail;
|
|
410
|
+
};
|
|
411
|
+
}
|
|
412
|
+
});
|
|
286
413
|
const originalProto = constructor.prototype;
|
|
287
414
|
const newProto = NewClass.prototype;
|
|
288
415
|
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
|
}
|
|
@@ -25,11 +25,11 @@ module.exports = __toCommonJS(emitCustomEvent_exports);
|
|
|
25
25
|
var import_ReflectUtils = require("@dooboostore/core/reflect/ReflectUtils");
|
|
26
26
|
const EMIT_CUSTOM_EVENT_METADATA_KEY = Symbol("simple-web-component:emit-custom-event");
|
|
27
27
|
function emitCustomEvent(typeOrOptions) {
|
|
28
|
-
return (target, propertyKey
|
|
28
|
+
return (target, propertyKey) => {
|
|
29
29
|
const constructor = target.constructor;
|
|
30
30
|
const options = typeof typeOrOptions === "string" ? { type: typeOrOptions } : typeOrOptions;
|
|
31
31
|
if (!options.attributeName) {
|
|
32
|
-
options.attributeName = `on
|
|
32
|
+
options.attributeName = `swc-on-${options.type}`;
|
|
33
33
|
}
|
|
34
34
|
if (options.bubbles === void 0) options.bubbles = true;
|
|
35
35
|
if (options.composed === void 0) options.composed = true;
|
|
@@ -39,18 +39,6 @@ function emitCustomEvent(typeOrOptions) {
|
|
|
39
39
|
import_ReflectUtils.ReflectUtils.defineMetadata(EMIT_CUSTOM_EVENT_METADATA_KEY, list, constructor);
|
|
40
40
|
}
|
|
41
41
|
list.push({ propertyKey, options });
|
|
42
|
-
const originalMethod = descriptor.value;
|
|
43
|
-
descriptor.value = function(...args) {
|
|
44
|
-
const detail = originalMethod.apply(this, args);
|
|
45
|
-
const event = new CustomEvent(options.type, {
|
|
46
|
-
detail,
|
|
47
|
-
bubbles: options.bubbles,
|
|
48
|
-
composed: options.composed,
|
|
49
|
-
cancelable: options.cancelable
|
|
50
|
-
});
|
|
51
|
-
this.dispatchEvent(event);
|
|
52
|
-
return detail;
|
|
53
|
-
};
|
|
54
42
|
};
|
|
55
43
|
}
|
|
56
44
|
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;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,0BAA6B;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;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,0BAA6B;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,iCAAa,YAAuC,gCAAgC,WAAW;AAC1G,QAAI,CAAC,MAAM;AACT,aAAO,CAAC;AACR,uCAAa,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,iCAAa,YAAY,gCAAgC,WAAW;AAC7E;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -23,49 +23,60 @@ __export(query_exports, {
|
|
|
23
23
|
});
|
|
24
24
|
module.exports = __toCommonJS(query_exports);
|
|
25
25
|
var import_ReflectUtils = require("@dooboostore/core/reflect/ReflectUtils");
|
|
26
|
+
var import_elementDefine = require("./elementDefine");
|
|
27
|
+
var import_Utils = require("../utils/Utils");
|
|
26
28
|
const QUERY_METADATA_KEY = Symbol("simple-web-component:query");
|
|
27
|
-
function query(
|
|
28
|
-
|
|
29
|
-
|
|
29
|
+
function query(selector, options = {}) {
|
|
30
|
+
return (target, propertyKey, descriptor) => {
|
|
31
|
+
if (descriptor !== void 0) {
|
|
32
|
+
throw new Error(`@query decorator cannot be used on methods. (Method: ${String(propertyKey)})`);
|
|
33
|
+
}
|
|
30
34
|
const constructor = target.constructor;
|
|
31
35
|
let queries = import_ReflectUtils.ReflectUtils.getMetadata(QUERY_METADATA_KEY, constructor);
|
|
32
36
|
if (!queries) {
|
|
33
37
|
queries = [];
|
|
34
38
|
import_ReflectUtils.ReflectUtils.defineMetadata(QUERY_METADATA_KEY, queries, constructor);
|
|
35
39
|
}
|
|
36
|
-
queries.push({ selector, options, propertyKey
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
return
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
40
|
+
queries.push({ selector, options, propertyKey });
|
|
41
|
+
Object.defineProperty(target, propertyKey, {
|
|
42
|
+
get() {
|
|
43
|
+
const hostSet = import_Utils.SwcUtils.getHostSet(this);
|
|
44
|
+
if (selector === ":parentHost")
|
|
45
|
+
return hostSet.$parentHost;
|
|
46
|
+
if (selector === ":appHost")
|
|
47
|
+
return hostSet.$appHost;
|
|
48
|
+
if (selector === ":firstHost")
|
|
49
|
+
return hostSet.$firstHost;
|
|
50
|
+
if (selector === ":lastHost")
|
|
51
|
+
return hostSet.$lastHost;
|
|
52
|
+
if (selector === ":firstAppHost")
|
|
53
|
+
return hostSet.$firstAppHost;
|
|
54
|
+
if (selector === ":lastAppHost")
|
|
55
|
+
return hostSet.$lastAppHost;
|
|
56
|
+
const config = (0, import_elementDefine.getElementConfig)(this);
|
|
57
|
+
const win = config?.window || window;
|
|
58
|
+
const doc = win.document;
|
|
59
|
+
if (selector === ":window")
|
|
60
|
+
return win;
|
|
61
|
+
if (selector === ":document")
|
|
62
|
+
return doc;
|
|
63
|
+
if (!selector || selector === ":host")
|
|
64
|
+
return this;
|
|
65
|
+
const r = options.root || "auto";
|
|
66
|
+
if (r === "shadow") {
|
|
67
|
+
return this.shadowRoot ? this.shadowRoot.querySelector(selector) : null;
|
|
68
|
+
}
|
|
69
|
+
if (r === "light") {
|
|
70
|
+
return this.querySelector(selector);
|
|
71
|
+
}
|
|
72
|
+
if (r === "all") {
|
|
73
|
+
return this.shadowRoot?.querySelector(selector) || this.querySelector(selector);
|
|
74
|
+
}
|
|
75
|
+
return (this.shadowRoot || this).querySelector(selector);
|
|
76
|
+
},
|
|
77
|
+
enumerable: true,
|
|
78
|
+
configurable: true
|
|
79
|
+
});
|
|
69
80
|
};
|
|
70
81
|
}
|
|
71
82
|
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;;;;;;;0BAA6B;
|
|
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;;;;;;;0BAA6B;AAC7B,2BAAiC;AACjC,mBAAyB;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,iCAAa,YAA6B,oBAAoB,WAAW;AACvF,QAAI,CAAC,SAAS;AACZ,gBAAU,CAAA;AACV,uCAAa,eAAe,oBAAoB,SAAS,WAAW;IACtE;AACA,YAAQ,KAAK,EAAE,UAAU,SAAS,YAAW,CAAE;AAE/C,WAAO,eAAe,QAAQ,aAAa;MACzC,MAAG;AAED,cAAM,UAAU,sBAAS,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,aAAS,uCAAiB,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,iCAAa,YAAY,oBAAoB,WAAW;AACjE;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|