@dooboostore/simple-web-component 1.0.37 → 1.0.39
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 +280 -791
- package/dist/cjs/SwcAppEngine.js +3 -0
- package/dist/cjs/SwcAppEngine.js.map +2 -2
- package/dist/cjs/decorators/addEventListener.js +20 -4
- package/dist/cjs/decorators/addEventListener.js.map +2 -2
- package/dist/cjs/decorators/applyAttribute.js.map +1 -1
- package/dist/cjs/decorators/applyClass.js.map +1 -1
- package/dist/cjs/decorators/applyNode.js +104 -35
- package/dist/cjs/decorators/applyNode.js.map +2 -2
- package/dist/cjs/decorators/applySlot.js +69 -57
- package/dist/cjs/decorators/applySlot.js.map +3 -3
- package/dist/cjs/decorators/applyStyle.js.map +2 -2
- package/dist/cjs/decorators/attribute.js.map +1 -1
- package/dist/cjs/decorators/elementDefine.js +65 -42
- package/dist/cjs/decorators/elementDefine.js.map +2 -2
- package/dist/cjs/decorators/emitCustomEvent.js.map +1 -1
- package/dist/cjs/decorators/index.js +1 -0
- package/dist/cjs/decorators/index.js.map +2 -2
- package/dist/cjs/decorators/lifecycles.js +47 -31
- package/dist/cjs/decorators/lifecycles.js.map +3 -3
- package/dist/cjs/decorators/publishSwcAppMessage.js.map +2 -2
- package/dist/cjs/decorators/query.js +1 -1
- package/dist/cjs/decorators/query.js.map +2 -2
- package/dist/cjs/decorators/queryAll.js.map +1 -1
- package/dist/cjs/decorators/setProperty.js.map +1 -1
- package/dist/cjs/decorators/state.js +83 -0
- package/dist/cjs/decorators/state.js.map +7 -0
- package/dist/cjs/decorators/subscribeSwcAppMessageWhileConnected.js.map +1 -1
- package/dist/cjs/decorators/subscribeSwcAppRouteChangeWhileConnected.js.map +2 -2
- package/dist/cjs/elements/SwcApp.js +193 -305
- package/dist/cjs/elements/SwcApp.js.map +3 -3
- package/dist/cjs/elements/SwcAppMixin.js +291 -0
- package/dist/cjs/elements/SwcAppMixin.js.map +7 -0
- package/dist/cjs/elements/index.js +3 -21
- package/dist/cjs/elements/index.js.map +3 -3
- package/dist/cjs/index.js +1 -3
- package/dist/cjs/index.js.map +2 -2
- package/dist/cjs/{types.js → types/index.js} +1 -1
- package/dist/cjs/types/index.js.map +7 -0
- package/dist/cjs/types/window.d.js.map +1 -1
- package/dist/cjs/utils/Utils.js +159 -20
- package/dist/cjs/utils/Utils.js.map +3 -3
- package/dist/esm/SwcAppEngine.js +3 -0
- package/dist/esm/SwcAppEngine.js.map +2 -2
- package/dist/esm/decorators/addEventListener.js +20 -4
- package/dist/esm/decorators/addEventListener.js.map +2 -2
- package/dist/esm/decorators/applyAttribute.js.map +1 -1
- package/dist/esm/decorators/applyClass.js.map +1 -1
- package/dist/esm/decorators/applyNode.js +104 -35
- package/dist/esm/decorators/applyNode.js.map +2 -2
- package/dist/esm/decorators/applySlot.js +69 -57
- package/dist/esm/decorators/applySlot.js.map +3 -3
- package/dist/esm/decorators/applyStyle.js.map +2 -2
- package/dist/esm/decorators/attribute.js.map +1 -1
- package/dist/esm/decorators/elementDefine.js +69 -46
- package/dist/esm/decorators/elementDefine.js.map +2 -2
- package/dist/esm/decorators/emitCustomEvent.js.map +1 -1
- package/dist/esm/decorators/index.js +1 -0
- package/dist/esm/decorators/index.js.map +2 -2
- package/dist/esm/decorators/lifecycles.js +47 -31
- package/dist/esm/decorators/lifecycles.js.map +3 -3
- package/dist/esm/decorators/publishSwcAppMessage.js.map +2 -2
- package/dist/esm/decorators/query.js +1 -1
- package/dist/esm/decorators/query.js.map +2 -2
- package/dist/esm/decorators/queryAll.js.map +1 -1
- package/dist/esm/decorators/setProperty.js.map +1 -1
- package/dist/esm/decorators/state.js +64 -0
- package/dist/esm/decorators/state.js.map +7 -0
- package/dist/esm/decorators/subscribeSwcAppMessageWhileConnected.js.map +1 -1
- package/dist/esm/decorators/subscribeSwcAppRouteChangeWhileConnected.js.map +2 -2
- package/dist/esm/elements/SwcApp.js +195 -307
- package/dist/esm/elements/SwcApp.js.map +3 -3
- package/dist/esm/elements/SwcAppMixin.js +273 -0
- package/dist/esm/elements/SwcAppMixin.js.map +7 -0
- package/dist/esm/elements/index.js +2 -7
- package/dist/esm/elements/index.js.map +2 -2
- package/dist/esm/index.js +2 -4
- package/dist/esm/index.js.map +2 -2
- package/dist/esm/{types.js → types/index.js} +1 -1
- package/dist/esm/types/index.js.map +7 -0
- package/dist/esm/utils/Utils.js +159 -20
- package/dist/esm/utils/Utils.js.map +3 -3
- package/dist/esm-bundle/dooboostore-simple-web-component.esm.js +3448 -2584
- package/dist/esm-bundle/dooboostore-simple-web-component.esm.js.map +4 -4
- package/dist/types/SwcAppEngine.d.ts +1 -1
- package/dist/types/SwcAppEngine.d.ts.map +1 -1
- package/dist/types/decorators/addEventListener.d.ts +5 -2
- package/dist/types/decorators/addEventListener.d.ts.map +1 -1
- package/dist/types/decorators/applyAttribute.d.ts.map +1 -1
- package/dist/types/decorators/applyClass.d.ts.map +1 -1
- package/dist/types/decorators/applyNode.d.ts +23 -7
- package/dist/types/decorators/applyNode.d.ts.map +1 -1
- package/dist/types/decorators/applySlot.d.ts +14 -12
- package/dist/types/decorators/applySlot.d.ts.map +1 -1
- package/dist/types/decorators/applyStyle.d.ts.map +1 -1
- package/dist/types/decorators/attribute.d.ts.map +1 -1
- package/dist/types/decorators/elementDefine.d.ts.map +1 -1
- package/dist/types/decorators/emitCustomEvent.d.ts.map +1 -1
- package/dist/types/decorators/index.d.ts +1 -0
- package/dist/types/decorators/index.d.ts.map +1 -1
- package/dist/types/decorators/lifecycles.d.ts +10 -14
- package/dist/types/decorators/lifecycles.d.ts.map +1 -1
- package/dist/types/decorators/publishSwcAppMessage.d.ts.map +1 -1
- package/dist/types/decorators/query.d.ts +1 -1
- package/dist/types/decorators/query.d.ts.map +1 -1
- package/dist/types/decorators/queryAll.d.ts.map +1 -1
- package/dist/types/decorators/setProperty.d.ts +1 -1
- package/dist/types/decorators/setProperty.d.ts.map +1 -1
- package/dist/types/decorators/state.d.ts +9 -0
- package/dist/types/decorators/state.d.ts.map +1 -0
- package/dist/types/decorators/subscribeSwcAppMessageWhileConnected.d.ts.map +1 -1
- package/dist/types/decorators/subscribeSwcAppRouteChangeWhileConnected.d.ts +5 -1
- package/dist/types/decorators/subscribeSwcAppRouteChangeWhileConnected.d.ts.map +1 -1
- package/dist/types/elements/SwcApp.d.ts +35 -6
- package/dist/types/elements/SwcApp.d.ts.map +1 -1
- package/dist/types/elements/SwcAppMixin.d.ts +405 -0
- package/dist/types/elements/SwcAppMixin.d.ts.map +1 -0
- package/dist/types/elements/index.d.ts +2 -2
- 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 → types/index.d.ts} +11 -11
- package/dist/types/types/index.d.ts.map +1 -0
- package/dist/types/utils/Utils.d.ts +14 -2
- package/dist/types/utils/Utils.d.ts.map +1 -1
- package/dist/umd-bundle/dooboostore-simple-web-component.umd.js +3431 -2567
- package/dist/umd-bundle/dooboostore-simple-web-component.umd.js.map +4 -4
- package/package.json +4 -4
- package/src/SwcAppEngine.ts +6 -2
- package/src/decorators/addEventListener.ts +21 -5
- package/src/decorators/applyAttribute.ts +1 -1
- package/src/decorators/applyClass.ts +1 -1
- package/src/decorators/applyNode.ts +183 -73
- package/src/decorators/applySlot.ts +99 -128
- package/src/decorators/applyStyle.ts +4 -4
- package/src/decorators/attribute.ts +1 -1
- package/src/decorators/elementDefine.ts +112 -60
- package/src/decorators/emitCustomEvent.ts +1 -1
- package/src/decorators/index.ts +2 -0
- package/src/decorators/lifecycles.ts +50 -26
- package/src/decorators/publishSwcAppMessage.ts +2 -3
- package/src/decorators/query.ts +4 -4
- package/src/decorators/queryAll.ts +1 -1
- package/src/decorators/setProperty.ts +1 -1
- package/src/decorators/state.ts +83 -0
- package/src/decorators/subscribeSwcAppMessageWhileConnected.ts +1 -1
- package/src/decorators/subscribeSwcAppRouteChangeWhileConnected.ts +4 -3
- package/src/elements/SwcApp.ts +239 -441
- package/src/elements/SwcAppMixin.ts +328 -0
- package/src/elements/index.ts +2 -9
- package/src/index.ts +2 -4
- package/src/{types.ts → types/index.ts} +13 -10
- package/src/types/window.d.ts +3 -0
- package/src/utils/Utils.ts +205 -20
- package/dist/cjs/types.js.map +0 -7
- package/dist/esm/types.js.map +0 -7
- package/dist/types/types.d.ts.map +0 -1
package/src/utils/Utils.ts
CHANGED
|
@@ -1,16 +1,26 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {SwcAppInterface, HostSet, HelperSet, HelperHostSet} from '../types';
|
|
2
2
|
import {getElementConfig} from "../decorators";
|
|
3
|
-
import {
|
|
4
|
-
import {Router} from "@dooboostore/core-web";
|
|
3
|
+
import {getExpression, ExpressionResult, GetExpressionConfig, GetExpressionResult, ActionExpression} from '@dooboostore/core';
|
|
4
|
+
import {ElementApply, NodeSlot, Router} from "@dooboostore/core-web";
|
|
5
5
|
|
|
6
6
|
export const SWC_NOT_FOUND = Symbol.for('simple-web-component:not-found');
|
|
7
7
|
|
|
8
|
+
|
|
9
|
+
export const html = (str: string, document: Document) => {
|
|
10
|
+
return [...document.createRange().createContextualFragment(str).childNodes];
|
|
11
|
+
}
|
|
8
12
|
// DOM Creation Utilities
|
|
9
|
-
export const htmlFragment = (html: string, doc
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
13
|
+
export const htmlFragment = (html: string | Node | Node[], doc: Document): DocumentFragment => {
|
|
14
|
+
if (!doc) throw new Error('Document is not available');
|
|
15
|
+
const template = doc.createElement('template');
|
|
16
|
+
if (typeof html === 'string') {
|
|
17
|
+
template.innerHTML = html.trim();
|
|
18
|
+
} else if (html instanceof Node) {
|
|
19
|
+
template.appendChild(html);
|
|
20
|
+
} else if (Array.isArray(html)) {
|
|
21
|
+
template.append(...html);
|
|
22
|
+
}
|
|
23
|
+
// template.innerHTML = html.trim();
|
|
14
24
|
return template.content;
|
|
15
25
|
};
|
|
16
26
|
|
|
@@ -26,7 +36,7 @@ export const commentNode = (comment: string | any, doc?: Document): Comment => {
|
|
|
26
36
|
return d.createComment(comment !== undefined && comment !== null ? String(comment) : '');
|
|
27
37
|
};
|
|
28
38
|
|
|
29
|
-
export type CreateElementConfig = { innerHtml?: string; property?: Record<string, any>, attrs?: Record<string,
|
|
39
|
+
export type CreateElementConfig = { innerHtml?: string; property?: Record<string, any>, attrs?: Record<string, any>; };
|
|
30
40
|
export const createElement = <T extends HTMLElement>(
|
|
31
41
|
documentOrWindow: Document | Window,
|
|
32
42
|
tagName: string,
|
|
@@ -37,10 +47,10 @@ export const createElement = <T extends HTMLElement>(
|
|
|
37
47
|
const el = doc.createElement(tagName) as T;
|
|
38
48
|
if (options?.innerHtml) el.innerHTML = options.innerHtml;
|
|
39
49
|
if (options?.attrs) {
|
|
40
|
-
Object.entries(options.attrs).forEach(([k, v]) => el.setAttribute(k, String(v)));
|
|
50
|
+
Object.entries(options.attrs).filter(([k,v])=>v).forEach(([k, v]) => el.setAttribute(k, String(v)));
|
|
41
51
|
}
|
|
42
52
|
if (options?.property) {
|
|
43
|
-
Object.entries(options.property).forEach(([k, v]) => el[k] =v);
|
|
53
|
+
Object.entries(options.property).forEach(([k, v]) => el[k] = v);
|
|
44
54
|
}
|
|
45
55
|
return el;
|
|
46
56
|
};
|
|
@@ -175,7 +185,7 @@ export namespace SwcUtils {
|
|
|
175
185
|
const qs = p.split('?')[1];
|
|
176
186
|
qs?.split('&').forEach(it => {
|
|
177
187
|
const [k, v] = it.split('=');
|
|
178
|
-
searchParams.set(k,v);
|
|
188
|
+
searchParams.set(k, v);
|
|
179
189
|
})
|
|
180
190
|
return {
|
|
181
191
|
path: p,
|
|
@@ -270,6 +280,180 @@ export namespace SwcUtils {
|
|
|
270
280
|
return findNearestSwcHostIncludingSelf(el);
|
|
271
281
|
};
|
|
272
282
|
|
|
283
|
+
|
|
284
|
+
export function projectProcessHtml(id: string, htmlOrNode: string, document: Document): string;
|
|
285
|
+
export function projectProcessHtml(id: string, htmlOrNode: ((Node)[]) | Node, document: Document): (Node)[];
|
|
286
|
+
export function projectProcessHtml(id: string, htmlOrNode: string | ((Node)[]) | Node, document: Document): string | (Node)[] {
|
|
287
|
+
if (typeof htmlOrNode === 'string') {
|
|
288
|
+
// slot
|
|
289
|
+
let t = htmlOrNode;
|
|
290
|
+
// if (!config?.excludeSlot) {
|
|
291
|
+
t = SwcUtils.processHtml(id, t, {document: document, replaceWrap: {start: '<!--[[', end: ']]-->'}, replacer: (id, script) => NodeSlot.slot(id, script)});
|
|
292
|
+
// }
|
|
293
|
+
// if (!config?.excludeHtml) {
|
|
294
|
+
// Ea html
|
|
295
|
+
t = SwcUtils.processHtml(id, t, {document: document, replaceWrap: {start: '<!--[html', end: ']-->'}, replacer: (id, script) => ElementApply.html(id, script)});
|
|
296
|
+
// }
|
|
297
|
+
|
|
298
|
+
// if (!config?.excludeText) {
|
|
299
|
+
// Ea text
|
|
300
|
+
t = SwcUtils.processHtml(id, t, {document: document, replaceWrap: {start: '<!--[text', end: ']-->'}, replacer: (id, script) => ElementApply.text(id, script)});
|
|
301
|
+
// }
|
|
302
|
+
|
|
303
|
+
// if (!config.excludeAttribute) {
|
|
304
|
+
// Ea attribute
|
|
305
|
+
t = SwcUtils.processHtml(id, t, {
|
|
306
|
+
document: document,
|
|
307
|
+
replaceWrap: {start: /a::\w+=\s*"/, end: /"\s/}, replacer: (id, script, er) => {
|
|
308
|
+
console.log('start: /a-->', er)
|
|
309
|
+
const match = er.expressionStart.match(/^\w+::(\w+)="/)
|
|
310
|
+
const name = match?.[1];
|
|
311
|
+
return ElementApply.attribute(id, name, script)
|
|
312
|
+
}
|
|
313
|
+
});
|
|
314
|
+
// }
|
|
315
|
+
|
|
316
|
+
// if (!config.excludeEvent) {
|
|
317
|
+
t = SwcUtils.processHtml(id, t, {
|
|
318
|
+
document: document,
|
|
319
|
+
replaceWrap: {start: /e::\w+=\s*"/, end: /"\s/}, replacer: (id, script, er) => {
|
|
320
|
+
console.log('start: /e-->', er)
|
|
321
|
+
const match = er.expressionStart.match(/^\w+::(\w+)="/)
|
|
322
|
+
const name = match?.[1];
|
|
323
|
+
return ElementApply.event(id, name, script)
|
|
324
|
+
}
|
|
325
|
+
});
|
|
326
|
+
// }
|
|
327
|
+
|
|
328
|
+
|
|
329
|
+
// if (!config.excludeProperty) {
|
|
330
|
+
t = SwcUtils.processHtml(id, t, {
|
|
331
|
+
document: document,
|
|
332
|
+
replaceWrap: {start: /p:\w+=\s*"/, end: /"\s/}, replacer: (id, script, er) => {
|
|
333
|
+
console.log('start: /p-->', er)
|
|
334
|
+
const match = er.expressionStart.match(/^\w+:(\w+)="/)
|
|
335
|
+
const name = match?.[1];
|
|
336
|
+
return ElementApply.property(id, name, script)
|
|
337
|
+
}
|
|
338
|
+
});
|
|
339
|
+
return t;
|
|
340
|
+
} else if (htmlOrNode) {
|
|
341
|
+
|
|
342
|
+
// 아래 node일떄도 처리하도록 만듬 아직테스트는 안해봄 테스트후 주석지울것.
|
|
343
|
+
const nodes = Array.isArray(htmlOrNode) ? htmlOrNode : [htmlOrNode];
|
|
344
|
+
const window = document.defaultView;
|
|
345
|
+
nodes.forEach(node => {
|
|
346
|
+
// TextNode 합치기
|
|
347
|
+
node.normalize();
|
|
348
|
+
const nodes = document.createTreeWalker(node, window.NodeFilter.SHOW_ELEMENT | window.NodeFilter.SHOW_COMMENT)
|
|
349
|
+
|
|
350
|
+
const getSlotData = (s: string) => {
|
|
351
|
+
return s.match(/^\[\[([\s\S]+)\]\]$/)?.[1]?.trim();
|
|
352
|
+
}
|
|
353
|
+
const getHtmlData = (s: string) => {
|
|
354
|
+
return s.match(/^\[html([\s\S]+)\]$/)?.[1]?.trim();
|
|
355
|
+
// return s.startsWith('[html') && s.endsWith(']');
|
|
356
|
+
}
|
|
357
|
+
const getTextData = (s: string) => {
|
|
358
|
+
return s.match(/^\[text([\s\S]+)\]$/)?.[1]?.trim();
|
|
359
|
+
// return s.startsWith('[text') && s.endsWith(']');
|
|
360
|
+
}
|
|
361
|
+
while (nodes.nextNode()) {
|
|
362
|
+
const currentNode = nodes.currentNode;
|
|
363
|
+
if (currentNode.nodeType === window.Node.COMMENT_NODE) {
|
|
364
|
+
const targetNode = currentNode as Comment;
|
|
365
|
+
const v = targetNode.data.trim();
|
|
366
|
+
const slotData = getSlotData(v);
|
|
367
|
+
const htmlData = getHtmlData(v);
|
|
368
|
+
const textData = getTextData(v);
|
|
369
|
+
if (v && slotData) {
|
|
370
|
+
const res = NodeSlot.slotIds(id, slotData)
|
|
371
|
+
targetNode.data = res.start;
|
|
372
|
+
const end = document.createComment(res.end)
|
|
373
|
+
targetNode.parentNode?.insertBefore(end, targetNode.nextSibling);
|
|
374
|
+
// document.createTe
|
|
375
|
+
|
|
376
|
+
} else if (v && htmlData) {
|
|
377
|
+
const s = ElementApply.htmlDataSet(id, htmlData);
|
|
378
|
+
targetNode.data = s.start;
|
|
379
|
+
const end = document.createComment(s.end)
|
|
380
|
+
targetNode.parentNode?.insertBefore(end, targetNode.nextSibling);
|
|
381
|
+
} else if (v && textData) {
|
|
382
|
+
const s = ElementApply.textDataSet(id, textData);
|
|
383
|
+
const end = document.createComment(s.end)
|
|
384
|
+
targetNode.data = s.start;
|
|
385
|
+
targetNode.parentNode?.insertBefore(end, targetNode.nextSibling);
|
|
386
|
+
}
|
|
387
|
+
|
|
388
|
+
} else if (currentNode.nodeType === window.Node.ELEMENT_NODE) {
|
|
389
|
+
const targetNode = currentNode as Element;
|
|
390
|
+
targetNode.getAttributeNames().forEach(it => {
|
|
391
|
+
const e = it.match(/e::(\w+)$/);
|
|
392
|
+
const eventName = e?.[1];
|
|
393
|
+
const p = it.match(/p::(\w+)$/);
|
|
394
|
+
const propertyName = p?.[1];
|
|
395
|
+
const a = it.match(/a::(\w+)$/);
|
|
396
|
+
const attributeName = a?.[1];
|
|
397
|
+
|
|
398
|
+
const value = targetNode.getAttribute(it);
|
|
399
|
+
if (eventName) {
|
|
400
|
+
targetNode.setAttribute(ElementApply.eventName(id, eventName), value);
|
|
401
|
+
targetNode.removeAttribute(it);
|
|
402
|
+
} else if (propertyName) {
|
|
403
|
+
targetNode.setAttribute(ElementApply.propertyName(id, propertyName), value);
|
|
404
|
+
targetNode.removeAttribute(it);
|
|
405
|
+
} else if (attributeName) {
|
|
406
|
+
targetNode.setAttribute(ElementApply.attributeName(id, attributeName), value);
|
|
407
|
+
targetNode.removeAttribute(it);
|
|
408
|
+
}
|
|
409
|
+
})
|
|
410
|
+
}
|
|
411
|
+
}
|
|
412
|
+
|
|
413
|
+
})
|
|
414
|
+
|
|
415
|
+
return nodes;
|
|
416
|
+
}
|
|
417
|
+
// }
|
|
418
|
+
|
|
419
|
+
|
|
420
|
+
}
|
|
421
|
+
|
|
422
|
+
// export function processHtml(id: string, htmlOrNode: string, config: { document: Document, replaceWrap: { start: string | RegExp, end: string | RegExp }, replacer: (id: string, script: string, er: ExpressionResult) => string }): string;
|
|
423
|
+
// export function processHtml(id: string, htmlOrNode: (Node | string)[], config: { document: Document, replaceWrap: { start: string | RegExp, end: string | RegExp }, replacer: (id: string, script: string, er: ExpressionResult) => string }): (Node | string)[] ;
|
|
424
|
+
export function processHtml(
|
|
425
|
+
id: string,
|
|
426
|
+
html: string,
|
|
427
|
+
config: { document: Document, replaceWrap: { start: string | RegExp, end: string | RegExp }, replacer: (id: string, script: string, er: ExpressionResult) => string }
|
|
428
|
+
): string {
|
|
429
|
+
const replaceStart = config.replaceWrap.start;
|
|
430
|
+
const replaceEnd = config.replaceWrap.end;
|
|
431
|
+
const callReturnStart = `${config.replaceWrap.start}=`;
|
|
432
|
+
const callReturnEnd = `${config.replaceWrap.end}`;
|
|
433
|
+
const callStart = `${config.replaceWrap.start}@`;
|
|
434
|
+
const callEnd = `${config.replaceWrap.end}`;
|
|
435
|
+
const hasPattern = (text: string | null | undefined, start: string, end: string) => {
|
|
436
|
+
if (!text) return false;
|
|
437
|
+
const s = text.indexOf(start);
|
|
438
|
+
const e = text.indexOf(end, s + start.length);
|
|
439
|
+
return s !== -1 && e !== -1 && s < e;
|
|
440
|
+
};
|
|
441
|
+
|
|
442
|
+
const actionConfig: GetExpressionConfig = {expression: {replace: {start: replaceStart, end: replaceEnd}, callReturn: {start: callReturnStart, end: callReturnEnd}, call: {start: callStart, end: callEnd}}};
|
|
443
|
+
const runActionExpression = (source: string) => {
|
|
444
|
+
const actionExpression = new ActionExpression(source, actionConfig);
|
|
445
|
+
actionExpression.getExpressions().filter(it => it.type === 'replace').forEach(it => {
|
|
446
|
+
actionExpression.replace(it, config.replacer(id, it.script?.trim(), it));
|
|
447
|
+
});
|
|
448
|
+
return actionExpression.toResult();
|
|
449
|
+
};
|
|
450
|
+
|
|
451
|
+
return runActionExpression(html);
|
|
452
|
+
// if (typeof html === 'string') {
|
|
453
|
+
// } else {
|
|
454
|
+
// }
|
|
455
|
+
}
|
|
456
|
+
|
|
273
457
|
export const getAppHosts = (el: HTMLElement): SwcAppInterface[] => {
|
|
274
458
|
// const hosts = getHosts(el);
|
|
275
459
|
// return hosts.filter(host => host.tagName.toLowerCase() === 'swc-app' || host.getAttribute('is')?.startsWith('swc-app-')) as SwcAppInterface[];
|
|
@@ -342,7 +526,7 @@ export namespace SwcUtils {
|
|
|
342
526
|
|
|
343
527
|
export const getHostSet = (el: HTMLElement): HostSet => {
|
|
344
528
|
const ancestors = findAllSwcHostsIncludingSelf(el); // [root, ..., parent]
|
|
345
|
-
|
|
529
|
+
|
|
346
530
|
const $host = ancestors.length > 0 ? ancestors[ancestors.length - 1] : null;
|
|
347
531
|
const $parentHost = ancestors.length > 1 ? ancestors[ancestors.length - 2] : null;
|
|
348
532
|
const $hosts = ancestors;
|
|
@@ -381,11 +565,11 @@ export namespace SwcUtils {
|
|
|
381
565
|
export const parsePathPattern = (pattern: string | undefined, currentPath: string): { [key: string]: string } | null => {
|
|
382
566
|
// pattern이 null/undefined면 와일드카드 (모든 경로 매칭)
|
|
383
567
|
if (pattern === null || pattern === undefined) return {};
|
|
384
|
-
|
|
568
|
+
|
|
385
569
|
// 공백만 있는 패턴도 와일드카드
|
|
386
570
|
const trimmedPattern = pattern.trim();
|
|
387
571
|
if (trimmedPattern === '' && pattern !== '') return {}; // 공백 문자만 있는 경우
|
|
388
|
-
|
|
572
|
+
|
|
389
573
|
// 패턴을 정규식으로 변환
|
|
390
574
|
// 지원 형식:
|
|
391
575
|
// {id} → ([^/]+) 기본 (/ 제외한 모든 문자)
|
|
@@ -397,19 +581,20 @@ export namespace SwcUtils {
|
|
|
397
581
|
// customRegex가 있으면 사용, 없으면 기본값 ([^/]+)
|
|
398
582
|
return `(${customRegex || '[^/]+'})`;
|
|
399
583
|
});
|
|
400
|
-
|
|
584
|
+
|
|
401
585
|
const regex = new RegExp(`^${regexPattern}$`);
|
|
402
586
|
const match = currentPath.match(regex);
|
|
403
|
-
|
|
587
|
+
|
|
404
588
|
if (!match) return null;
|
|
405
|
-
|
|
589
|
+
|
|
406
590
|
const result: { [key: string]: string } = {};
|
|
407
591
|
paramNames.forEach((name, index) => {
|
|
408
592
|
result[name] = match[index + 1];
|
|
409
593
|
});
|
|
410
|
-
|
|
594
|
+
|
|
411
595
|
return result;
|
|
412
596
|
};
|
|
413
597
|
|
|
414
598
|
|
|
415
|
-
}
|
|
599
|
+
}
|
|
600
|
+
;
|
package/dist/cjs/types.js.map
DELETED
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../src/types.ts"],
|
|
4
|
-
"sourcesContent": ["import { SimpleApplication } from '@dooboostore/simple-boot/SimpleApplication';\nimport { Router } from '@dooboostore/core-web';\nimport {SwcAttributeConfigType, SwcConfigType} from \"./SwcAppEngine\";\n\nexport enum InjectSituationType {\n HOST_SET = 'SIMPLE_WEB_COMPONENT://HOSTSET',\n APP_HOST = 'SIMPLE_WEB_COMPONENT://APPHOST',\n APP_HOSTS = 'SIMPLE_WEB_COMPONENT://APPHOSTS',\n HOST = 'SIMPLE_WEB_COMPONENT://HOST',\n PARENT_HOST = 'SIMPLE_WEB_COMPONENT://PARENTHOST',\n HOSTS = 'SIMPLE_WEB_COMPONENT://HOSTS',\n FIRST_HOST = 'SIMPLE_WEB_COMPONENT://FIRSTHOST',\n LAST_HOST = 'SIMPLE_WEB_COMPONENT://LASTHOST',\n FIRST_APP_HOST = 'SIMPLE_WEB_COMPONENT://FIRSTAPPHOST',\n LAST_APP_HOST = 'SIMPLE_WEB_COMPONENT://LASTAPPHOST'\n}\n\nexport type SwcRootType = 'light' | 'shadow' | 'all' | 'auto';\n\nexport type SpecialSelector = '$this' | '$window' | '$document' | '$host' | '$appHost' | '$firstHost' | '$lastHost' | '$firstAppHost' | '$lastAppHost' | '$hosts' | '$appHosts';\n\nexport type SwcQueryOptions = { root?: SwcRootType };\n\nexport type HelperSet = {\n $d: Document;\n $w: Window;\n $q: (selector: string, root?: Element | Document | ShadowRoot) => HTMLElement | null;\n $qa: (selector: string, root?: Element | Document | ShadowRoot) => HTMLElement[];\n $qi: (id: string, root?: Document | ShadowRoot) => HTMLElement | null;\n};\n\nexport type HostSet = {\n $host: HTMLElement | null; // Nearest parent SWC component\n $parentHost: HTMLElement | null; // Grandparent SWC ancestor\n $hosts: HTMLElement[]; // All SWC ancestors [root, ..., parent]\n $firstHost: HTMLElement | null; // Top-most SWC ancestor\n $lastHost: HTMLElement | null; // Same as $host\n // $templateHost: HTMLTemplateElement | null | undefined;\n $appHost: SwcAppInterface | null;\n $appHosts: SwcAppInterface[];\n $firstAppHost: SwcAppInterface | null;\n $lastAppHost: SwcAppInterface | null;\n};\n\nexport type HelperHostSet = HelperSet & HostSet & {$this: any};\n\nexport type SwcAppMessage<T = any> = {\n publisher?: any;\n data?: T;\n type?: string;\n};\n\nexport interface SwcChooseInterface extends HTMLTemplateElement {\n value: any;\n refresh(a: any): void;\n}\nexport interface SwcIfInterface extends HTMLTemplateElement {\n value: any;\n refresh(): void;\n}\nexport interface SwcAppInterface extends HTMLElement {\n simpleApplication?: SimpleApplication;\n config?: SwcConfigType;\n router?: Router;\n connect(config?: SwcAttributeConfigType): Promise<void>;\n routing(path: string): Promise<void>;\n reload(): void;\n back(): void;\n forward(): void;\n publishMessage(message: SwcAppMessage): void;\n}\n"],
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAIO,IAAK,sBAAL,kBAAKA,yBAAL;AACL,EAAAA,qBAAA,cAAW;AACX,EAAAA,qBAAA,cAAW;AACX,EAAAA,qBAAA,eAAY;AACZ,EAAAA,qBAAA,UAAO;AACP,EAAAA,qBAAA,iBAAc;AACd,EAAAA,qBAAA,WAAQ;AACR,EAAAA,qBAAA,gBAAa;AACb,EAAAA,qBAAA,eAAY;AACZ,EAAAA,qBAAA,oBAAiB;AACjB,EAAAA,qBAAA,mBAAgB;AAVN,SAAAA;AAAA,GAAA;",
|
|
6
|
-
"names": ["InjectSituationType"]
|
|
7
|
-
}
|
package/dist/esm/types.js.map
DELETED
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../src/types.ts"],
|
|
4
|
-
"sourcesContent": ["import { SimpleApplication } from '@dooboostore/simple-boot/SimpleApplication';\nimport { Router } from '@dooboostore/core-web';\nimport {SwcAttributeConfigType, SwcConfigType} from \"./SwcAppEngine\";\n\nexport enum InjectSituationType {\n HOST_SET = 'SIMPLE_WEB_COMPONENT://HOSTSET',\n APP_HOST = 'SIMPLE_WEB_COMPONENT://APPHOST',\n APP_HOSTS = 'SIMPLE_WEB_COMPONENT://APPHOSTS',\n HOST = 'SIMPLE_WEB_COMPONENT://HOST',\n PARENT_HOST = 'SIMPLE_WEB_COMPONENT://PARENTHOST',\n HOSTS = 'SIMPLE_WEB_COMPONENT://HOSTS',\n FIRST_HOST = 'SIMPLE_WEB_COMPONENT://FIRSTHOST',\n LAST_HOST = 'SIMPLE_WEB_COMPONENT://LASTHOST',\n FIRST_APP_HOST = 'SIMPLE_WEB_COMPONENT://FIRSTAPPHOST',\n LAST_APP_HOST = 'SIMPLE_WEB_COMPONENT://LASTAPPHOST'\n}\n\nexport type SwcRootType = 'light' | 'shadow' | 'all' | 'auto';\n\nexport type SpecialSelector = '$this' | '$window' | '$document' | '$host' | '$appHost' | '$firstHost' | '$lastHost' | '$firstAppHost' | '$lastAppHost' | '$hosts' | '$appHosts';\n\nexport type SwcQueryOptions = { root?: SwcRootType };\n\nexport type HelperSet = {\n $d: Document;\n $w: Window;\n $q: (selector: string, root?: Element | Document | ShadowRoot) => HTMLElement | null;\n $qa: (selector: string, root?: Element | Document | ShadowRoot) => HTMLElement[];\n $qi: (id: string, root?: Document | ShadowRoot) => HTMLElement | null;\n};\n\nexport type HostSet = {\n $host: HTMLElement | null; // Nearest parent SWC component\n $parentHost: HTMLElement | null; // Grandparent SWC ancestor\n $hosts: HTMLElement[]; // All SWC ancestors [root, ..., parent]\n $firstHost: HTMLElement | null; // Top-most SWC ancestor\n $lastHost: HTMLElement | null; // Same as $host\n // $templateHost: HTMLTemplateElement | null | undefined;\n $appHost: SwcAppInterface | null;\n $appHosts: SwcAppInterface[];\n $firstAppHost: SwcAppInterface | null;\n $lastAppHost: SwcAppInterface | null;\n};\n\nexport type HelperHostSet = HelperSet & HostSet & {$this: any};\n\nexport type SwcAppMessage<T = any> = {\n publisher?: any;\n data?: T;\n type?: string;\n};\n\nexport interface SwcChooseInterface extends HTMLTemplateElement {\n value: any;\n refresh(a: any): void;\n}\nexport interface SwcIfInterface extends HTMLTemplateElement {\n value: any;\n refresh(): void;\n}\nexport interface SwcAppInterface extends HTMLElement {\n simpleApplication?: SimpleApplication;\n config?: SwcConfigType;\n router?: Router;\n connect(config?: SwcAttributeConfigType): Promise<void>;\n routing(path: string): Promise<void>;\n reload(): void;\n back(): void;\n forward(): void;\n publishMessage(message: SwcAppMessage): void;\n}\n"],
|
|
5
|
-
"mappings": "AAIO,IAAK,sBAAL,kBAAKA,yBAAL;AACL,EAAAA,qBAAA,cAAW;AACX,EAAAA,qBAAA,cAAW;AACX,EAAAA,qBAAA,eAAY;AACZ,EAAAA,qBAAA,UAAO;AACP,EAAAA,qBAAA,iBAAc;AACd,EAAAA,qBAAA,WAAQ;AACR,EAAAA,qBAAA,gBAAa;AACb,EAAAA,qBAAA,eAAY;AACZ,EAAAA,qBAAA,oBAAiB;AACjB,EAAAA,qBAAA,mBAAgB;AAVN,SAAAA;AAAA,GAAA;",
|
|
6
|
-
"names": ["InjectSituationType"]
|
|
7
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"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"}
|