@dooboostore/simple-web-component 1.0.37 → 1.0.38

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (156) hide show
  1. package/README.md +384 -93
  2. package/dist/cjs/SwcAppEngine.js +3 -0
  3. package/dist/cjs/SwcAppEngine.js.map +2 -2
  4. package/dist/cjs/decorators/addEventListener.js +20 -4
  5. package/dist/cjs/decorators/addEventListener.js.map +2 -2
  6. package/dist/cjs/decorators/applyAttribute.js.map +1 -1
  7. package/dist/cjs/decorators/applyClass.js.map +1 -1
  8. package/dist/cjs/decorators/applyNode.js +97 -15
  9. package/dist/cjs/decorators/applyNode.js.map +2 -2
  10. package/dist/cjs/decorators/applySlot.js +16 -9
  11. package/dist/cjs/decorators/applySlot.js.map +2 -2
  12. package/dist/cjs/decorators/applyStyle.js.map +2 -2
  13. package/dist/cjs/decorators/attribute.js.map +1 -1
  14. package/dist/cjs/decorators/elementDefine.js +68 -38
  15. package/dist/cjs/decorators/elementDefine.js.map +2 -2
  16. package/dist/cjs/decorators/emitCustomEvent.js.map +1 -1
  17. package/dist/cjs/decorators/index.js +1 -0
  18. package/dist/cjs/decorators/index.js.map +2 -2
  19. package/dist/cjs/decorators/lifecycles.js +47 -31
  20. package/dist/cjs/decorators/lifecycles.js.map +3 -3
  21. package/dist/cjs/decorators/publishSwcAppMessage.js.map +2 -2
  22. package/dist/cjs/decorators/query.js +1 -1
  23. package/dist/cjs/decorators/query.js.map +2 -2
  24. package/dist/cjs/decorators/queryAll.js.map +1 -1
  25. package/dist/cjs/decorators/setProperty.js.map +1 -1
  26. package/dist/cjs/decorators/state.js +84 -0
  27. package/dist/cjs/decorators/state.js.map +7 -0
  28. package/dist/cjs/decorators/subscribeSwcAppMessageWhileConnected.js.map +1 -1
  29. package/dist/cjs/decorators/subscribeSwcAppRouteChangeWhileConnected.js.map +2 -2
  30. package/dist/cjs/elements/SwcApp.js +193 -305
  31. package/dist/cjs/elements/SwcApp.js.map +3 -3
  32. package/dist/cjs/elements/SwcAppMixin.js +291 -0
  33. package/dist/cjs/elements/SwcAppMixin.js.map +7 -0
  34. package/dist/cjs/elements/index.js +3 -21
  35. package/dist/cjs/elements/index.js.map +3 -3
  36. package/dist/cjs/index.js +1 -3
  37. package/dist/cjs/index.js.map +2 -2
  38. package/dist/cjs/{types.js → types/index.js} +1 -1
  39. package/dist/cjs/types/index.js.map +7 -0
  40. package/dist/cjs/types/window.d.js.map +1 -1
  41. package/dist/cjs/utils/Utils.js +159 -20
  42. package/dist/cjs/utils/Utils.js.map +3 -3
  43. package/dist/esm/SwcAppEngine.js +3 -0
  44. package/dist/esm/SwcAppEngine.js.map +2 -2
  45. package/dist/esm/decorators/addEventListener.js +20 -4
  46. package/dist/esm/decorators/addEventListener.js.map +2 -2
  47. package/dist/esm/decorators/applyAttribute.js.map +1 -1
  48. package/dist/esm/decorators/applyClass.js.map +1 -1
  49. package/dist/esm/decorators/applyNode.js +97 -15
  50. package/dist/esm/decorators/applyNode.js.map +2 -2
  51. package/dist/esm/decorators/applySlot.js +16 -9
  52. package/dist/esm/decorators/applySlot.js.map +2 -2
  53. package/dist/esm/decorators/applyStyle.js.map +2 -2
  54. package/dist/esm/decorators/attribute.js.map +1 -1
  55. package/dist/esm/decorators/elementDefine.js +72 -42
  56. package/dist/esm/decorators/elementDefine.js.map +2 -2
  57. package/dist/esm/decorators/emitCustomEvent.js.map +1 -1
  58. package/dist/esm/decorators/index.js +1 -0
  59. package/dist/esm/decorators/index.js.map +2 -2
  60. package/dist/esm/decorators/lifecycles.js +47 -31
  61. package/dist/esm/decorators/lifecycles.js.map +3 -3
  62. package/dist/esm/decorators/publishSwcAppMessage.js.map +2 -2
  63. package/dist/esm/decorators/query.js +1 -1
  64. package/dist/esm/decorators/query.js.map +2 -2
  65. package/dist/esm/decorators/queryAll.js.map +1 -1
  66. package/dist/esm/decorators/setProperty.js.map +1 -1
  67. package/dist/esm/decorators/state.js +65 -0
  68. package/dist/esm/decorators/state.js.map +7 -0
  69. package/dist/esm/decorators/subscribeSwcAppMessageWhileConnected.js.map +1 -1
  70. package/dist/esm/decorators/subscribeSwcAppRouteChangeWhileConnected.js.map +2 -2
  71. package/dist/esm/elements/SwcApp.js +195 -307
  72. package/dist/esm/elements/SwcApp.js.map +3 -3
  73. package/dist/esm/elements/SwcAppMixin.js +273 -0
  74. package/dist/esm/elements/SwcAppMixin.js.map +7 -0
  75. package/dist/esm/elements/index.js +2 -7
  76. package/dist/esm/elements/index.js.map +2 -2
  77. package/dist/esm/index.js +2 -4
  78. package/dist/esm/index.js.map +2 -2
  79. package/dist/esm/{types.js → types/index.js} +1 -1
  80. package/dist/esm/types/index.js.map +7 -0
  81. package/dist/esm/utils/Utils.js +159 -20
  82. package/dist/esm/utils/Utils.js.map +3 -3
  83. package/dist/esm-bundle/dooboostore-simple-web-component.esm.js +3356 -2477
  84. package/dist/esm-bundle/dooboostore-simple-web-component.esm.js.map +4 -4
  85. package/dist/types/SwcAppEngine.d.ts +1 -1
  86. package/dist/types/SwcAppEngine.d.ts.map +1 -1
  87. package/dist/types/decorators/addEventListener.d.ts +5 -2
  88. package/dist/types/decorators/addEventListener.d.ts.map +1 -1
  89. package/dist/types/decorators/applyAttribute.d.ts.map +1 -1
  90. package/dist/types/decorators/applyClass.d.ts.map +1 -1
  91. package/dist/types/decorators/applyNode.d.ts +22 -6
  92. package/dist/types/decorators/applyNode.d.ts.map +1 -1
  93. package/dist/types/decorators/applySlot.d.ts.map +1 -1
  94. package/dist/types/decorators/applyStyle.d.ts.map +1 -1
  95. package/dist/types/decorators/attribute.d.ts.map +1 -1
  96. package/dist/types/decorators/elementDefine.d.ts.map +1 -1
  97. package/dist/types/decorators/emitCustomEvent.d.ts.map +1 -1
  98. package/dist/types/decorators/index.d.ts +1 -0
  99. package/dist/types/decorators/index.d.ts.map +1 -1
  100. package/dist/types/decorators/lifecycles.d.ts +10 -14
  101. package/dist/types/decorators/lifecycles.d.ts.map +1 -1
  102. package/dist/types/decorators/publishSwcAppMessage.d.ts.map +1 -1
  103. package/dist/types/decorators/query.d.ts +1 -1
  104. package/dist/types/decorators/query.d.ts.map +1 -1
  105. package/dist/types/decorators/queryAll.d.ts.map +1 -1
  106. package/dist/types/decorators/setProperty.d.ts +1 -1
  107. package/dist/types/decorators/setProperty.d.ts.map +1 -1
  108. package/dist/types/decorators/state.d.ts +9 -0
  109. package/dist/types/decorators/state.d.ts.map +1 -0
  110. package/dist/types/decorators/subscribeSwcAppMessageWhileConnected.d.ts.map +1 -1
  111. package/dist/types/decorators/subscribeSwcAppRouteChangeWhileConnected.d.ts +5 -1
  112. package/dist/types/decorators/subscribeSwcAppRouteChangeWhileConnected.d.ts.map +1 -1
  113. package/dist/types/elements/SwcApp.d.ts +35 -6
  114. package/dist/types/elements/SwcApp.d.ts.map +1 -1
  115. package/dist/types/elements/SwcAppMixin.d.ts +405 -0
  116. package/dist/types/elements/SwcAppMixin.d.ts.map +1 -0
  117. package/dist/types/elements/index.d.ts +2 -2
  118. package/dist/types/elements/index.d.ts.map +1 -1
  119. package/dist/types/index.d.ts +1 -1
  120. package/dist/types/index.d.ts.map +1 -1
  121. package/dist/types/{types.d.ts → types/index.d.ts} +11 -11
  122. package/dist/types/types/index.d.ts.map +1 -0
  123. package/dist/types/utils/Utils.d.ts +14 -2
  124. package/dist/types/utils/Utils.d.ts.map +1 -1
  125. package/dist/umd-bundle/dooboostore-simple-web-component.umd.js +3358 -2479
  126. package/dist/umd-bundle/dooboostore-simple-web-component.umd.js.map +4 -4
  127. package/package.json +4 -4
  128. package/src/SwcAppEngine.ts +6 -2
  129. package/src/decorators/addEventListener.ts +21 -5
  130. package/src/decorators/applyAttribute.ts +1 -1
  131. package/src/decorators/applyClass.ts +1 -1
  132. package/src/decorators/applyNode.ts +180 -62
  133. package/src/decorators/applySlot.ts +27 -67
  134. package/src/decorators/applyStyle.ts +4 -4
  135. package/src/decorators/attribute.ts +1 -1
  136. package/src/decorators/elementDefine.ts +110 -58
  137. package/src/decorators/emitCustomEvent.ts +1 -1
  138. package/src/decorators/index.ts +2 -0
  139. package/src/decorators/lifecycles.ts +50 -26
  140. package/src/decorators/publishSwcAppMessage.ts +2 -3
  141. package/src/decorators/query.ts +4 -4
  142. package/src/decorators/queryAll.ts +1 -1
  143. package/src/decorators/setProperty.ts +1 -1
  144. package/src/decorators/state.ts +84 -0
  145. package/src/decorators/subscribeSwcAppMessageWhileConnected.ts +1 -1
  146. package/src/decorators/subscribeSwcAppRouteChangeWhileConnected.ts +4 -3
  147. package/src/elements/SwcApp.ts +239 -441
  148. package/src/elements/SwcAppMixin.ts +328 -0
  149. package/src/elements/index.ts +2 -9
  150. package/src/index.ts +2 -4
  151. package/src/{types.ts → types/index.ts} +13 -10
  152. package/src/types/window.d.ts +3 -0
  153. package/src/utils/Utils.ts +205 -20
  154. package/dist/cjs/types.js.map +0 -7
  155. package/dist/esm/types.js.map +0 -7
  156. package/dist/types/types.d.ts.map +0 -1
@@ -1,16 +1,26 @@
1
- import { SwcAppInterface, HostSet, HelperSet, HelperHostSet } from '../types';
1
+ import {SwcAppInterface, HostSet, HelperSet, HelperHostSet} from '../types';
2
2
  import {getElementConfig} from "../decorators";
3
- import { getExpression, ExpressionResult, GetExpressionConfig, GetExpressionResult } from '@dooboostore/core';
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?: Document): DocumentFragment => {
10
- const d = doc || (typeof document !== 'undefined' ? document : undefined);
11
- if (!d) throw new Error('Document is not available');
12
- const template = d.createElement('template');
13
- template.innerHTML = html.trim();
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, 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
+ ;
@@ -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
- }
@@ -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":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,4CAA4C,CAAC;AAC/E,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAC/C,OAAO,EAAC,sBAAsB,EAAE,aAAa,EAAC,MAAM,gBAAgB,CAAC;AAErE,oBAAY,mBAAmB;IAC7B,QAAQ,mCAAmC;IAC3C,QAAQ,mCAAmC;IAC3C,SAAS,oCAAoC;IAC7C,IAAI,gCAAgC;IACpC,WAAW,sCAAsC;IACjD,KAAK,iCAAiC;IACtC,UAAU,qCAAqC;IAC/C,SAAS,oCAAoC;IAC7C,cAAc,wCAAwC;IACtD,aAAa,uCAAuC;CACrD;AAED,MAAM,MAAM,WAAW,GAAG,OAAO,GAAG,QAAQ,GAAG,KAAK,GAAG,MAAM,CAAC;AAE9D,MAAM,MAAM,eAAe,GAAG,OAAO,GAAG,SAAS,GAAG,WAAW,GAAG,OAAO,GAAG,UAAU,GAAG,YAAY,GAAG,WAAW,GAAG,eAAe,GAAG,cAAc,GAAG,QAAQ,GAAG,WAAW,CAAC;AAEhL,MAAM,MAAM,eAAe,GAAG;IAAE,IAAI,CAAC,EAAE,WAAW,CAAA;CAAE,CAAC;AAErD,MAAM,MAAM,SAAS,GAAG;IACtB,EAAE,EAAE,QAAQ,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,UAAU,KAAK,WAAW,GAAG,IAAI,CAAC;IACrF,GAAG,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,UAAU,KAAK,WAAW,EAAE,CAAC;IACjF,GAAG,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,QAAQ,GAAG,UAAU,KAAK,WAAW,GAAG,IAAI,CAAC;CACvE,CAAC;AAEF,MAAM,MAAM,OAAO,GAAG;IACpB,KAAK,EAAE,WAAW,GAAG,IAAI,CAAC;IAC1B,WAAW,EAAE,WAAW,GAAG,IAAI,CAAC;IAChC,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB,UAAU,EAAE,WAAW,GAAG,IAAI,CAAC;IAC/B,SAAS,EAAE,WAAW,GAAG,IAAI,CAAC;IAE9B,QAAQ,EAAE,eAAe,GAAG,IAAI,CAAC;IACjC,SAAS,EAAE,eAAe,EAAE,CAAC;IAC7B,aAAa,EAAE,eAAe,GAAG,IAAI,CAAC;IACtC,YAAY,EAAE,eAAe,GAAG,IAAI,CAAC;CACtC,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG,SAAS,GAAG,OAAO,GAAG;IAAC,KAAK,EAAE,GAAG,CAAA;CAAC,CAAC;AAE/D,MAAM,MAAM,aAAa,CAAC,CAAC,GAAG,GAAG,IAAI;IACnC,SAAS,CAAC,EAAE,GAAG,CAAC;IAChB,IAAI,CAAC,EAAE,CAAC,CAAC;IACT,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,MAAM,WAAW,kBAAmB,SAAQ,mBAAmB;IAC7D,KAAK,EAAE,GAAG,CAAC;IACX,OAAO,CAAC,CAAC,EAAE,GAAG,GAAG,IAAI,CAAC;CACvB;AACD,MAAM,WAAW,cAAe,SAAQ,mBAAmB;IACzD,KAAK,EAAE,GAAG,CAAC;IACX,OAAO,IAAI,IAAI,CAAC;CACjB;AACD,MAAM,WAAW,eAAgB,SAAQ,WAAW;IAClD,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;IACtC,MAAM,CAAC,EAAG,aAAa,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,MAAM,CAAC,EAAE,sBAAsB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACxD,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACrC,MAAM,IAAI,IAAI,CAAC;IACf,IAAI,IAAI,IAAI,CAAC;IACb,OAAO,IAAI,IAAI,CAAC;IAChB,cAAc,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI,CAAC;CAC9C"}