@dooboostore/simple-web-component 1.0.50 → 1.0.52

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 (241) hide show
  1. package/README.md +735 -354
  2. package/dist/cjs/SwcAppEngine.js.map +2 -2
  3. package/dist/cjs/decorators/addEventListener.js +64 -146
  4. package/dist/cjs/decorators/addEventListener.js.map +2 -2
  5. package/dist/cjs/decorators/applyAttribute.js +36 -48
  6. package/dist/cjs/decorators/applyAttribute.js.map +2 -2
  7. package/dist/cjs/decorators/applyClass.js +9 -12
  8. package/dist/cjs/decorators/applyClass.js.map +2 -2
  9. package/dist/cjs/decorators/applyNode.js +14 -22
  10. package/dist/cjs/decorators/applyNode.js.map +2 -2
  11. package/dist/cjs/decorators/applyProperty.js +12 -42
  12. package/dist/cjs/decorators/applyProperty.js.map +2 -2
  13. package/dist/cjs/decorators/applySlot.js +3 -3
  14. package/dist/cjs/decorators/applySlot.js.map +2 -2
  15. package/dist/cjs/decorators/applyStyle.js +9 -12
  16. package/dist/cjs/decorators/applyStyle.js.map +2 -2
  17. package/dist/cjs/decorators/around.js +124 -0
  18. package/dist/cjs/decorators/around.js.map +7 -0
  19. package/dist/cjs/decorators/changedAttribute.js +40 -12
  20. package/dist/cjs/decorators/changedAttribute.js.map +2 -2
  21. package/dist/cjs/decorators/elementDefine.js +224 -195
  22. package/dist/cjs/decorators/elementDefine.js.map +3 -3
  23. package/dist/cjs/decorators/emitCustomEvent.js +14 -12
  24. package/dist/cjs/decorators/emitCustomEvent.js.map +2 -2
  25. package/dist/cjs/decorators/eventMedia.js +36 -8
  26. package/dist/cjs/decorators/eventMedia.js.map +2 -2
  27. package/dist/cjs/decorators/fetch.js +278 -0
  28. package/dist/cjs/decorators/fetch.js.map +7 -0
  29. package/dist/cjs/decorators/index.js +5 -2
  30. package/dist/cjs/decorators/index.js.map +2 -2
  31. package/dist/cjs/decorators/intersectionObserver.js +33 -13
  32. package/dist/cjs/decorators/intersectionObserver.js.map +2 -2
  33. package/dist/cjs/decorators/lifecycles.js +11 -11
  34. package/dist/cjs/decorators/lifecycles.js.map +2 -2
  35. package/dist/cjs/decorators/mutationObserver.js +55 -39
  36. package/dist/cjs/decorators/mutationObserver.js.map +3 -3
  37. package/dist/cjs/decorators/parameter.js +92 -9
  38. package/dist/cjs/decorators/parameter.js.map +2 -2
  39. package/dist/cjs/decorators/publishSwcAppMessage.js +2 -2
  40. package/dist/cjs/decorators/publishSwcAppMessage.js.map +2 -2
  41. package/dist/cjs/decorators/query.js +11 -5
  42. package/dist/cjs/decorators/query.js.map +2 -2
  43. package/dist/cjs/decorators/requestAnimationFrame.js +7 -16
  44. package/dist/cjs/decorators/requestAnimationFrame.js.map +2 -2
  45. package/dist/cjs/decorators/resizeObserver.js +41 -17
  46. package/dist/cjs/decorators/resizeObserver.js.map +3 -3
  47. package/dist/cjs/decorators/setInterval.js +36 -25
  48. package/dist/cjs/decorators/setInterval.js.map +2 -2
  49. package/dist/cjs/decorators/setTimeout.js +36 -25
  50. package/dist/cjs/decorators/setTimeout.js.map +2 -2
  51. package/dist/cjs/decorators/state.js +13 -10
  52. package/dist/cjs/decorators/state.js.map +2 -2
  53. package/dist/cjs/decorators/{subscribeSwcAppMessageWhileConnected.js → subscribeSwcAppMessage.js} +20 -21
  54. package/dist/cjs/decorators/subscribeSwcAppMessage.js.map +7 -0
  55. package/dist/cjs/decorators/{subscribeSwcAppRouteChangeWhileConnected.js → subscribeSwcAppRouteChange.js} +23 -19
  56. package/dist/cjs/decorators/subscribeSwcAppRouteChange.js.map +7 -0
  57. package/dist/cjs/decorators/swcAppRoute.js +149 -0
  58. package/dist/cjs/decorators/swcAppRoute.js.map +7 -0
  59. package/dist/cjs/elements/SwcApp.js +70 -0
  60. package/dist/cjs/elements/SwcApp.js.map +2 -2
  61. package/dist/cjs/elements/SwcAppMixin.js +262 -83
  62. package/dist/cjs/elements/SwcAppMixin.js.map +3 -3
  63. package/dist/cjs/types/index.js +5 -1
  64. package/dist/cjs/types/index.js.map +2 -2
  65. package/dist/cjs/utils/Utils.js +36 -15
  66. package/dist/cjs/utils/Utils.js.map +2 -2
  67. package/dist/esm/SwcAppEngine.js.map +2 -2
  68. package/dist/esm/decorators/addEventListener.js +64 -146
  69. package/dist/esm/decorators/addEventListener.js.map +2 -2
  70. package/dist/esm/decorators/applyAttribute.js +36 -48
  71. package/dist/esm/decorators/applyAttribute.js.map +2 -2
  72. package/dist/esm/decorators/applyClass.js +9 -12
  73. package/dist/esm/decorators/applyClass.js.map +2 -2
  74. package/dist/esm/decorators/applyNode.js +15 -23
  75. package/dist/esm/decorators/applyNode.js.map +2 -2
  76. package/dist/esm/decorators/applyProperty.js +12 -42
  77. package/dist/esm/decorators/applyProperty.js.map +2 -2
  78. package/dist/esm/decorators/applySlot.js +3 -3
  79. package/dist/esm/decorators/applySlot.js.map +2 -2
  80. package/dist/esm/decorators/applyStyle.js +9 -12
  81. package/dist/esm/decorators/applyStyle.js.map +2 -2
  82. package/dist/esm/decorators/around.js +105 -0
  83. package/dist/esm/decorators/around.js.map +7 -0
  84. package/dist/esm/decorators/changedAttribute.js +40 -12
  85. package/dist/esm/decorators/changedAttribute.js.map +2 -2
  86. package/dist/esm/decorators/elementDefine.js +222 -193
  87. package/dist/esm/decorators/elementDefine.js.map +3 -3
  88. package/dist/esm/decorators/emitCustomEvent.js +15 -13
  89. package/dist/esm/decorators/emitCustomEvent.js.map +2 -2
  90. package/dist/esm/decorators/eventMedia.js +36 -8
  91. package/dist/esm/decorators/eventMedia.js.map +2 -2
  92. package/dist/esm/decorators/fetch.js +259 -0
  93. package/dist/esm/decorators/fetch.js.map +7 -0
  94. package/dist/esm/decorators/index.js +5 -2
  95. package/dist/esm/decorators/index.js.map +2 -2
  96. package/dist/esm/decorators/intersectionObserver.js +33 -13
  97. package/dist/esm/decorators/intersectionObserver.js.map +2 -2
  98. package/dist/esm/decorators/lifecycles.js +11 -11
  99. package/dist/esm/decorators/lifecycles.js.map +2 -2
  100. package/dist/esm/decorators/mutationObserver.js +55 -39
  101. package/dist/esm/decorators/mutationObserver.js.map +3 -3
  102. package/dist/esm/decorators/parameter.js +92 -9
  103. package/dist/esm/decorators/parameter.js.map +2 -2
  104. package/dist/esm/decorators/publishSwcAppMessage.js +2 -2
  105. package/dist/esm/decorators/publishSwcAppMessage.js.map +2 -2
  106. package/dist/esm/decorators/query.js +11 -5
  107. package/dist/esm/decorators/query.js.map +2 -2
  108. package/dist/esm/decorators/requestAnimationFrame.js +8 -17
  109. package/dist/esm/decorators/requestAnimationFrame.js.map +2 -2
  110. package/dist/esm/decorators/resizeObserver.js +41 -17
  111. package/dist/esm/decorators/resizeObserver.js.map +2 -2
  112. package/dist/esm/decorators/setInterval.js +37 -26
  113. package/dist/esm/decorators/setInterval.js.map +2 -2
  114. package/dist/esm/decorators/setTimeout.js +37 -26
  115. package/dist/esm/decorators/setTimeout.js.map +2 -2
  116. package/dist/esm/decorators/state.js +13 -10
  117. package/dist/esm/decorators/state.js.map +2 -2
  118. package/dist/esm/decorators/subscribeSwcAppMessage.js +53 -0
  119. package/dist/esm/decorators/subscribeSwcAppMessage.js.map +7 -0
  120. package/dist/esm/decorators/{subscribeSwcAppRouteChangeWhileConnected.js → subscribeSwcAppRouteChange.js} +20 -16
  121. package/dist/esm/decorators/subscribeSwcAppRouteChange.js.map +7 -0
  122. package/dist/esm/decorators/swcAppRoute.js +130 -0
  123. package/dist/esm/decorators/swcAppRoute.js.map +7 -0
  124. package/dist/esm/elements/SwcApp.js +70 -0
  125. package/dist/esm/elements/SwcApp.js.map +2 -2
  126. package/dist/esm/elements/SwcAppMixin.js +264 -85
  127. package/dist/esm/elements/SwcAppMixin.js.map +3 -3
  128. package/dist/esm/types/index.js +5 -1
  129. package/dist/esm/types/index.js.map +2 -2
  130. package/dist/esm/utils/Utils.js +36 -15
  131. package/dist/esm/utils/Utils.js.map +2 -2
  132. package/dist/esm-bundle/dooboostore-simple-web-component.esm.js +1893 -1000
  133. package/dist/esm-bundle/dooboostore-simple-web-component.esm.js.map +4 -4
  134. package/dist/types/SwcAppEngine.d.ts +1 -0
  135. package/dist/types/SwcAppEngine.d.ts.map +1 -1
  136. package/dist/types/decorators/addEventListener.d.ts +923 -960
  137. package/dist/types/decorators/addEventListener.d.ts.map +1 -1
  138. package/dist/types/decorators/applyAttribute.d.ts +26 -38
  139. package/dist/types/decorators/applyAttribute.d.ts.map +1 -1
  140. package/dist/types/decorators/applyClass.d.ts +1 -3
  141. package/dist/types/decorators/applyClass.d.ts.map +1 -1
  142. package/dist/types/decorators/applyNode.d.ts +15 -17
  143. package/dist/types/decorators/applyNode.d.ts.map +1 -1
  144. package/dist/types/decorators/applyProperty.d.ts +25 -45
  145. package/dist/types/decorators/applyProperty.d.ts.map +1 -1
  146. package/dist/types/decorators/applyStyle.d.ts +1 -3
  147. package/dist/types/decorators/applyStyle.d.ts.map +1 -1
  148. package/dist/types/decorators/around.d.ts +87 -0
  149. package/dist/types/decorators/around.d.ts.map +1 -0
  150. package/dist/types/decorators/changedAttribute.d.ts +21 -1
  151. package/dist/types/decorators/changedAttribute.d.ts.map +1 -1
  152. package/dist/types/decorators/elementDefine.d.ts.map +1 -1
  153. package/dist/types/decorators/emitCustomEvent.d.ts +0 -1
  154. package/dist/types/decorators/emitCustomEvent.d.ts.map +1 -1
  155. package/dist/types/decorators/eventMedia.d.ts +24 -1
  156. package/dist/types/decorators/eventMedia.d.ts.map +1 -1
  157. package/dist/types/decorators/fetch.d.ts +139 -0
  158. package/dist/types/decorators/fetch.d.ts.map +1 -0
  159. package/dist/types/decorators/index.d.ts +5 -2
  160. package/dist/types/decorators/index.d.ts.map +1 -1
  161. package/dist/types/decorators/intersectionObserver.d.ts +24 -11
  162. package/dist/types/decorators/intersectionObserver.d.ts.map +1 -1
  163. package/dist/types/decorators/lifecycles.d.ts +8 -7
  164. package/dist/types/decorators/lifecycles.d.ts.map +1 -1
  165. package/dist/types/decorators/mutationObserver.d.ts +26 -13
  166. package/dist/types/decorators/mutationObserver.d.ts.map +1 -1
  167. package/dist/types/decorators/parameter.d.ts +84 -6
  168. package/dist/types/decorators/parameter.d.ts.map +1 -1
  169. package/dist/types/decorators/publishSwcAppMessage.d.ts +0 -1
  170. package/dist/types/decorators/publishSwcAppMessage.d.ts.map +1 -1
  171. package/dist/types/decorators/query.d.ts +7 -7
  172. package/dist/types/decorators/query.d.ts.map +1 -1
  173. package/dist/types/decorators/requestAnimationFrame.d.ts +1 -1
  174. package/dist/types/decorators/requestAnimationFrame.d.ts.map +1 -1
  175. package/dist/types/decorators/resizeObserver.d.ts +26 -13
  176. package/dist/types/decorators/resizeObserver.d.ts.map +1 -1
  177. package/dist/types/decorators/setInterval.d.ts +10 -0
  178. package/dist/types/decorators/setInterval.d.ts.map +1 -1
  179. package/dist/types/decorators/setTimeout.d.ts +10 -0
  180. package/dist/types/decorators/setTimeout.d.ts.map +1 -1
  181. package/dist/types/decorators/state.d.ts.map +1 -1
  182. package/dist/types/decorators/subscribeSwcAppMessage.d.ts +44 -0
  183. package/dist/types/decorators/subscribeSwcAppMessage.d.ts.map +1 -0
  184. package/dist/types/decorators/subscribeSwcAppRouteChange.d.ts +60 -0
  185. package/dist/types/decorators/subscribeSwcAppRouteChange.d.ts.map +1 -0
  186. package/dist/types/decorators/swcAppRoute.d.ts +94 -0
  187. package/dist/types/decorators/swcAppRoute.d.ts.map +1 -0
  188. package/dist/types/elements/SwcApp.d.ts.map +1 -1
  189. package/dist/types/elements/SwcAppMixin.d.ts +423 -388
  190. package/dist/types/elements/SwcAppMixin.d.ts.map +1 -1
  191. package/dist/types/types/index.d.ts +43 -4
  192. package/dist/types/types/index.d.ts.map +1 -1
  193. package/dist/types/utils/Utils.d.ts +15 -5
  194. package/dist/types/utils/Utils.d.ts.map +1 -1
  195. package/dist/umd-bundle/dooboostore-simple-web-component.umd.js +1893 -1000
  196. package/dist/umd-bundle/dooboostore-simple-web-component.umd.js.map +4 -4
  197. package/package.json +8 -6
  198. package/src/SwcAppEngine.ts +1 -0
  199. package/src/decorators/addEventListener.ts +102 -96
  200. package/src/decorators/applyAttribute.ts +76 -138
  201. package/src/decorators/applyClass.ts +8 -14
  202. package/src/decorators/applyNode.ts +33 -41
  203. package/src/decorators/applyProperty.ts +51 -99
  204. package/src/decorators/applySlot.ts +3 -3
  205. package/src/decorators/applyStyle.ts +8 -14
  206. package/src/decorators/around.ts +196 -0
  207. package/src/decorators/changedAttribute.ts +39 -15
  208. package/src/decorators/elementDefine.ts +270 -219
  209. package/src/decorators/emitCustomEvent.ts +17 -13
  210. package/src/decorators/eventMedia.ts +50 -9
  211. package/src/decorators/fetch.ts +454 -0
  212. package/src/decorators/index.ts +5 -2
  213. package/src/decorators/intersectionObserver.ts +38 -24
  214. package/src/decorators/lifecycles.ts +24 -22
  215. package/src/decorators/mutationObserver.ts +71 -52
  216. package/src/decorators/parameter.ts +145 -14
  217. package/src/decorators/publishSwcAppMessage.ts +3 -4
  218. package/src/decorators/query.ts +22 -14
  219. package/src/decorators/requestAnimationFrame.ts +10 -19
  220. package/src/decorators/resizeObserver.ts +50 -29
  221. package/src/decorators/setInterval.ts +37 -26
  222. package/src/decorators/setTimeout.ts +37 -26
  223. package/src/decorators/state.ts +19 -13
  224. package/src/decorators/subscribeSwcAppMessage.ts +106 -0
  225. package/src/decorators/subscribeSwcAppRouteChange.ts +131 -0
  226. package/src/decorators/swcAppRoute.ts +231 -0
  227. package/src/elements/SwcApp.ts +40 -10
  228. package/src/elements/SwcAppMixin.ts +340 -101
  229. package/src/types/index.ts +38 -5
  230. package/src/utils/Utils.ts +50 -18
  231. package/dist/cjs/decorators/subscribeSwcAppMessageWhileConnected.js.map +0 -7
  232. package/dist/cjs/decorators/subscribeSwcAppRouteChangeWhileConnected.js.map +0 -7
  233. package/dist/esm/decorators/subscribeSwcAppMessageWhileConnected.js +0 -54
  234. package/dist/esm/decorators/subscribeSwcAppMessageWhileConnected.js.map +0 -7
  235. package/dist/esm/decorators/subscribeSwcAppRouteChangeWhileConnected.js.map +0 -7
  236. package/dist/types/decorators/subscribeSwcAppMessageWhileConnected.d.ts +0 -23
  237. package/dist/types/decorators/subscribeSwcAppMessageWhileConnected.d.ts.map +0 -1
  238. package/dist/types/decorators/subscribeSwcAppRouteChangeWhileConnected.d.ts +0 -31
  239. package/dist/types/decorators/subscribeSwcAppRouteChangeWhileConnected.d.ts.map +0 -1
  240. package/src/decorators/subscribeSwcAppMessageWhileConnected.ts +0 -91
  241. package/src/decorators/subscribeSwcAppRouteChangeWhileConnected.ts +0 -107
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/decorators/eventMedia.ts"],
4
- "sourcesContent": ["import { ReflectUtils } from '@dooboostore/core';\nimport { ElementDefineLifeCycler, HelperHostSet } from '../types';\nimport { SwcUtils } from '../utils/Utils';\n\nexport const EVENT_MEDIA_METADATA_KEY = Symbol.for('simple-web-component:event-media');\n\nexport interface EventMediaMetadata {\n propertyKey: string | symbol;\n query: string;\n eventType: string;\n}\n\n/**\n * CSS \uBBF8\uB514\uC5B4\uCFFC\uB9AC(`window.matchMedia`) \uC0C1\uD0DC \uBCC0\uD654\uB97C \uAC10\uC9C0\uD55C\uB2E4.\n * connect \uC2DC \uC790\uB3D9\uC73C\uB85C \uAD6C\uB3C5\uD558\uACE0, disconnect \uC2DC \uC790\uB3D9\uC73C\uB85C \uD574\uC81C\uD55C\uB2E4.\n *\n * MediaQueryList\uB294 \uC2A4\uD399\uC0C1 'change' \uC774\uBCA4\uD2B8 \uD558\uB098\uB9CC \uC815\uC758\uB3FC\uC788\uB2E4 \u2014 eventType\uC740 \uADF8\uB798\uB3C4 \uBA85\uC2DC\uC801\uC73C\uB85C \uBC1B\uB294\uB2E4\n * (\uB2E4\uB978 @event* \uACC4\uC5F4\uCC98\uB7FC \uBCA0\uC774\uC2A4\uB294 \uBA85\uC2DC\uC801, \uD3B8\uC758 \uBCC4\uCE6D\uC774 \uAC12\uC744 \uACE0\uC815\uD558\uB294 \uCEE8\uBCA4\uC158\uC744 \uB530\uB984). 'change' \uACE0\uC815 \uBC84\uC804\uC740\n * eventMediaChange\uB97C \uC0AC\uC6A9\uD55C\uB2E4.\n */\nexport function eventMedia(query: string, eventType: string): MethodDecorator {\n return (target: Object, propertyKey: string | symbol) => {\n const constructor = target.constructor;\n let metaList = ReflectUtils.getOwnMetadata(EVENT_MEDIA_METADATA_KEY, constructor) as EventMediaMetadata[];\n if (!metaList) {\n metaList = [];\n ReflectUtils.defineMetadata(EVENT_MEDIA_METADATA_KEY, metaList, constructor);\n }\n metaList.push({ propertyKey, query, eventType });\n };\n}\n\n/** eventMedia(query, 'change')\uC758 \uBCC4\uCE6D - MediaQueryList\uAC00 \uC2E4\uC81C\uB85C \uBC1C\uC0DD\uC2DC\uD0A4\uB294 \uC720\uC77C\uD55C \uC774\uBCA4\uD2B8. */\nexport function eventMediaChange(query: string): MethodDecorator {\n return eventMedia(query, 'change');\n}\n\nexport const findAllEventMediaMetadata = (target: any): EventMediaMetadata[] => {\n const constructor = target instanceof Function ? target : target.constructor;\n return (ReflectUtils.findAllMetadata<EventMediaMetadata[]>(EVENT_MEDIA_METADATA_KEY, constructor) || []).flat();\n};\n\nexport class EventMediaLifeCycler implements ElementDefineLifeCycler {\n private readonly entriesMap = new WeakMap<any, Array<{ mql: MediaQueryList; eventType: string; handler: (e: Event) => void }>>();\n\n onConnected(helperHostSet: HelperHostSet): void {\n const inst = helperHostSet.$this;\n const metaList = findAllEventMediaMetadata(inst);\n if (metaList.length === 0) return;\n\n const entries: Array<{ mql: MediaQueryList; eventType: string; handler: (e: Event) => void }> = [];\n for (const meta of metaList) {\n const mql = helperHostSet.$w.matchMedia(meta.query);\n const handler = (e: Event) => {\n try {\n inst[meta.propertyKey](e, helperHostSet);\n } catch (err) {\n console.error('[SWC] eventMedia handler error:', err);\n }\n };\n mql.addEventListener(meta.eventType, handler);\n entries.push({ mql, eventType: meta.eventType, handler });\n }\n this.entriesMap.set(inst, entries);\n }\n\n onDisconnected(helperHostSet: HelperHostSet): void {\n const inst = helperHostSet.$this;\n for (const { mql, eventType, handler } of this.entriesMap.get(inst) ?? []) {\n try {\n mql.removeEventListener(eventType, handler);\n } catch (e) {\n console.error('[SWC] eventMedia cleanup error:', e);\n }\n }\n this.entriesMap.delete(inst);\n }\n}\n"],
5
- "mappings": ";;;AAAA,SAAS,oBAAoB;AAItB,MAAM,2BAA2B,OAAO,IAAI,kCAAkC;AAgB9E,SAAS,WAAW,OAAe,WAAoC;AAC5E,SAAO,CAAC,QAAgB,gBAAiC;AACvD,UAAM,cAAc,OAAO;AAC3B,QAAI,WAAW,aAAa,eAAe,0BAA0B,WAAW;AAChF,QAAI,CAAC,UAAU;AACb,iBAAW,CAAC;AACZ,mBAAa,eAAe,0BAA0B,UAAU,WAAW;AAAA,IAC7E;AACA,aAAS,KAAK,EAAE,aAAa,OAAO,UAAU,CAAC;AAAA,EACjD;AACF;AAGO,SAAS,iBAAiB,OAAgC;AAC/D,SAAO,WAAW,OAAO,QAAQ;AACnC;AAEO,MAAM,4BAA4B,CAAC,WAAsC;AAC9E,QAAM,cAAc,kBAAkB,WAAW,SAAS,OAAO;AACjE,UAAQ,aAAa,gBAAsC,0BAA0B,WAAW,KAAK,CAAC,GAAG,KAAK;AAChH;AAEO,MAAM,qBAAwD;AAAA,EAA9D;AACL,wBAAiB,cAAa,oBAAI,QAA6F;AAAA;AAAA,EAE/H,YAAY,eAAoC;AAC9C,UAAM,OAAO,cAAc;AAC3B,UAAM,WAAW,0BAA0B,IAAI;AAC/C,QAAI,SAAS,WAAW,EAAG;AAE3B,UAAM,UAA0F,CAAC;AACjG,eAAW,QAAQ,UAAU;AAC3B,YAAM,MAAM,cAAc,GAAG,WAAW,KAAK,KAAK;AAClD,YAAM,UAAU,CAAC,MAAa;AAC5B,YAAI;AACF,eAAK,KAAK,WAAW,EAAE,GAAG,aAAa;AAAA,QACzC,SAAS,KAAK;AACZ,kBAAQ,MAAM,mCAAmC,GAAG;AAAA,QACtD;AAAA,MACF;AACA,UAAI,iBAAiB,KAAK,WAAW,OAAO;AAC5C,cAAQ,KAAK,EAAE,KAAK,WAAW,KAAK,WAAW,QAAQ,CAAC;AAAA,IAC1D;AACA,SAAK,WAAW,IAAI,MAAM,OAAO;AAAA,EACnC;AAAA,EAEA,eAAe,eAAoC;AACjD,UAAM,OAAO,cAAc;AAC3B,eAAW,EAAE,KAAK,WAAW,QAAQ,KAAK,KAAK,WAAW,IAAI,IAAI,KAAK,CAAC,GAAG;AACzE,UAAI;AACF,YAAI,oBAAoB,WAAW,OAAO;AAAA,MAC5C,SAAS,GAAG;AACV,gBAAQ,MAAM,mCAAmC,CAAC;AAAA,MACpD;AAAA,IACF;AACA,SAAK,WAAW,OAAO,IAAI;AAAA,EAC7B;AACF;",
4
+ "sourcesContent": ["import { ReflectUtils } from '@dooboostore/core';\nimport { ElementDefineLifeCycler, HelperHostSet } from '../types';\nimport { SwcUtils } from '../utils/Utils';\nimport { buildSwcParameterArgs } from './parameter';\n\nexport const EVENT_MEDIA_METADATA_KEY = Symbol.for('simple-web-component:event-media');\n\nexport interface EventMediaOptions<Return = any> {\n /** \uBBF8\uB514\uC5B4\uCFFC\uB9AC \uBCC0\uD654 \uC2DC \uD578\uB4E4\uB7EC \uC2E4\uD589 \uC5EC\uBD80 \uAC8C\uC774\uD2B8. Promise<boolean>\uB3C4 \uB418\uC5B4 async \uD310\uC815 \uAC00\uB2A5. false\uBA74 \uC2A4\uD0B5. */\n filter?: (e: MediaQueryListEvent, meta: { currentThis: any; helper: HelperHostSet }) => boolean | Promise<boolean>;\n /** filter \uD1B5\uACFC \uD6C4 \uD578\uB4E4\uB7EC \uC9C1\uC804 \uD6C5. await\uB418\uACE0, \uB9AC\uD134\uAC12\uC740 @eventMediaBeforeReturn \uC73C\uB85C \uD578\uB4E4\uB7EC\uC5D0 \uC8FC\uC785\uB41C\uB2E4. */\n before?: (e: MediaQueryListEvent, meta: { currentThis: any; helper: HelperHostSet }, args: any[]) => any | Promise<any>;\n /** \uD578\uB4E4\uB7EC\uAC00 \uC131\uACF5/\uC2E4\uD328\uD574\uB3C4 \uD56D\uC0C1 \uC2E4\uD589\uB418\uB294 \uC815\uB9AC \uD6C5. ctx\uB85C \uD578\uB4E4\uB7EC \uC778\uC790/\uACB0\uACFC/\uC5D0\uB7EC\uB97C \uBC1B\uB294\uB2E4. \uC5D0\uB7EC\uB294 \uC0BC\uD0A4\uC9C0 \uC54A\uACE0(\uB85C\uAE45\uB428). */\n finally?: (e: MediaQueryListEvent, meta: { currentThis: any; helper: HelperHostSet }, ctx: { args: any[]; result?: Return; error?: any }) => any | Promise<any>;\n}\n\nexport interface EventMediaMetadata extends EventMediaOptions {\n propertyKey: string | symbol;\n query: string;\n eventType: string;\n}\n\n/**\n * CSS \uBBF8\uB514\uC5B4\uCFFC\uB9AC(`window.matchMedia`) \uC0C1\uD0DC \uBCC0\uD654\uB97C \uAC10\uC9C0\uD55C\uB2E4.\n * connect \uC2DC \uC790\uB3D9\uC73C\uB85C \uAD6C\uB3C5\uD558\uACE0, disconnect \uC2DC \uC790\uB3D9\uC73C\uB85C \uD574\uC81C\uD55C\uB2E4.\n *\n * MediaQueryList\uB294 \uC2A4\uD399\uC0C1 'change' \uC774\uBCA4\uD2B8 \uD558\uB098\uB9CC \uC815\uC758\uB3FC\uC788\uB2E4 \u2014 eventType\uC740 \uADF8\uB798\uB3C4 \uBA85\uC2DC\uC801\uC73C\uB85C \uBC1B\uB294\uB2E4\n * (\uB2E4\uB978 @event* \uACC4\uC5F4\uCC98\uB7FC \uBCA0\uC774\uC2A4\uB294 \uBA85\uC2DC\uC801, \uD3B8\uC758 \uBCC4\uCE6D\uC774 \uAC12\uC744 \uACE0\uC815\uD558\uB294 \uCEE8\uBCA4\uC158\uC744 \uB530\uB984). 'change' \uACE0\uC815 \uBC84\uC804\uC740\n * eventMediaChange\uB97C \uC0AC\uC6A9\uD55C\uB2E4.\n */\nexport function eventMedia(query: string, eventType: string): MethodDecorator;\nexport function eventMedia<Return = any>(query: string, eventType: string, options: EventMediaOptions<NoInfer<Return>>): MethodDecorator;\nexport function eventMedia(query: string, eventType: string, options?: EventMediaOptions): MethodDecorator {\n return (target: Object, propertyKey: string | symbol) => {\n const constructor = target.constructor;\n let metaList = ReflectUtils.getOwnMetadata(EVENT_MEDIA_METADATA_KEY, constructor) as EventMediaMetadata[];\n if (!metaList) {\n metaList = [];\n ReflectUtils.defineMetadata(EVENT_MEDIA_METADATA_KEY, metaList, constructor);\n }\n metaList.push({ propertyKey, query, eventType, filter: options?.filter, before: options?.before, finally: options?.finally });\n };\n}\n\n/** eventMedia(query, 'change')\uC758 \uBCC4\uCE6D - MediaQueryList\uAC00 \uC2E4\uC81C\uB85C \uBC1C\uC0DD\uC2DC\uD0A4\uB294 \uC720\uC77C\uD55C \uC774\uBCA4\uD2B8. */\nexport function eventMediaChange(query: string): MethodDecorator;\nexport function eventMediaChange<Return = any>(query: string, options: EventMediaOptions<NoInfer<Return>>): MethodDecorator;\nexport function eventMediaChange(query: string, options?: EventMediaOptions): MethodDecorator {\n return eventMedia(query, 'change', options as any);\n}\n\nexport const findAllEventMediaMetadata = (target: any): EventMediaMetadata[] => {\n const constructor = typeof target === 'function' ? target : target.constructor;\n return (ReflectUtils.findAllMetadata<EventMediaMetadata[]>(EVENT_MEDIA_METADATA_KEY, constructor) || []).flat();\n};\n\nexport class EventMediaLifeCycler implements ElementDefineLifeCycler {\n private readonly entriesMap = new WeakMap<any, Array<{ mql: MediaQueryList; eventType: string; handler: (e: Event) => void }>>();\n\n onConnected(helperHostSet: HelperHostSet): void {\n const inst = helperHostSet.$this;\n const metaList = findAllEventMediaMetadata(inst);\n if (metaList.length === 0) return;\n\n const win = helperHostSet.$w;\n const entries: Array<{ mql: MediaQueryList; eventType: string; handler: (e: Event) => void }> = [];\n for (const meta of metaList) {\n const mql = win.matchMedia(meta.query);\n const handler = async (e: Event) => {\n try {\n const helper = SwcUtils.getHelperAndHostSet(inst);\n if (meta.filter && !(await meta.filter(e as MediaQueryListEvent, { currentThis: inst, helper }))) return;\n const hostSet = SwcUtils.getHostSet(inst);\n const helperSet = SwcUtils.getHelperSet(win);\n const legacyArgs = [e, helperHostSet];\n const buildArgs = (beforeReturn: any) => buildSwcParameterArgs(inst, meta.propertyKey, {\n eventObject: e,\n hostSet,\n helperHostSet: helper,\n helperSet,\n eventMediaBeforeReturn: beforeReturn\n }, legacyArgs);\n // before\uB97C \uBA3C\uC800 \uB3CC\uB824 \uADF8 \uB9AC\uD134\uAC12\uC744 @eventMediaBeforeReturn \uC73C\uB85C \uC8FC\uC785.\n let args = buildArgs(undefined);\n if (meta.before) {\n const beforeReturn = await meta.before(e as MediaQueryListEvent, { currentThis: inst, helper }, args);\n args = buildArgs(beforeReturn);\n }\n let result: any, error: any;\n try {\n result = await inst[meta.propertyKey](...args);\n } catch (err) {\n error = err;\n } finally {\n if (meta.finally) await meta.finally(e as MediaQueryListEvent, { currentThis: inst, helper }, { args, result, error });\n }\n if (error) throw error;\n } catch (err) {\n console.error('[SWC] eventMedia handler error:', err);\n }\n };\n mql.addEventListener(meta.eventType, handler);\n entries.push({ mql, eventType: meta.eventType, handler });\n }\n this.entriesMap.set(inst, entries);\n }\n\n onDisconnected(helperHostSet: HelperHostSet): void {\n const inst = helperHostSet.$this;\n for (const { mql, eventType, handler } of this.entriesMap.get(inst) ?? []) {\n try {\n mql.removeEventListener(eventType, handler);\n } catch (e) {\n console.error('[SWC] eventMedia cleanup error:', e);\n }\n }\n this.entriesMap.delete(inst);\n }\n}\n"],
5
+ "mappings": ";;;AAAA,SAAS,oBAAoB;AAE7B,SAAS,gBAAgB;AACzB,SAAS,6BAA6B;AAE/B,MAAM,2BAA2B,OAAO,IAAI,kCAAkC;AA2B9E,SAAS,WAAW,OAAe,WAAmB,SAA8C;AACzG,SAAO,CAAC,QAAgB,gBAAiC;AACvD,UAAM,cAAc,OAAO;AAC3B,QAAI,WAAW,aAAa,eAAe,0BAA0B,WAAW;AAChF,QAAI,CAAC,UAAU;AACb,iBAAW,CAAC;AACZ,mBAAa,eAAe,0BAA0B,UAAU,WAAW;AAAA,IAC7E;AACA,aAAS,KAAK,EAAE,aAAa,OAAO,WAAW,QAAQ,SAAS,QAAQ,QAAQ,SAAS,QAAQ,SAAS,SAAS,QAAQ,CAAC;AAAA,EAC9H;AACF;AAKO,SAAS,iBAAiB,OAAe,SAA8C;AAC5F,SAAO,WAAW,OAAO,UAAU,OAAc;AACnD;AAEO,MAAM,4BAA4B,CAAC,WAAsC;AAC9E,QAAM,cAAc,OAAO,WAAW,aAAa,SAAS,OAAO;AACnE,UAAQ,aAAa,gBAAsC,0BAA0B,WAAW,KAAK,CAAC,GAAG,KAAK;AAChH;AAEO,MAAM,qBAAwD;AAAA,EAA9D;AACL,wBAAiB,cAAa,oBAAI,QAA6F;AAAA;AAAA,EAE/H,YAAY,eAAoC;AAC9C,UAAM,OAAO,cAAc;AAC3B,UAAM,WAAW,0BAA0B,IAAI;AAC/C,QAAI,SAAS,WAAW,EAAG;AAE3B,UAAM,MAAM,cAAc;AAC1B,UAAM,UAA0F,CAAC;AACjG,eAAW,QAAQ,UAAU;AAC3B,YAAM,MAAM,IAAI,WAAW,KAAK,KAAK;AACrC,YAAM,UAAU,OAAO,MAAa;AAClC,YAAI;AACF,gBAAM,SAAS,SAAS,oBAAoB,IAAI;AAChD,cAAI,KAAK,UAAU,CAAE,MAAM,KAAK,OAAO,GAA0B,EAAE,aAAa,MAAM,OAAO,CAAC,EAAI;AAClG,gBAAM,UAAU,SAAS,WAAW,IAAI;AACxC,gBAAM,YAAY,SAAS,aAAa,GAAG;AAC3C,gBAAM,aAAa,CAAC,GAAG,aAAa;AACpC,gBAAM,YAAY,CAAC,iBAAsB,sBAAsB,MAAM,KAAK,aAAa;AAAA,YACrF,aAAa;AAAA,YACb;AAAA,YACA,eAAe;AAAA,YACf;AAAA,YACA,wBAAwB;AAAA,UAC1B,GAAG,UAAU;AAEb,cAAI,OAAO,UAAU,MAAS;AAC9B,cAAI,KAAK,QAAQ;AACf,kBAAM,eAAe,MAAM,KAAK,OAAO,GAA0B,EAAE,aAAa,MAAM,OAAO,GAAG,IAAI;AACpG,mBAAO,UAAU,YAAY;AAAA,UAC/B;AACA,cAAI,QAAa;AACjB,cAAI;AACF,qBAAS,MAAM,KAAK,KAAK,WAAW,EAAE,GAAG,IAAI;AAAA,UAC/C,SAAS,KAAK;AACZ,oBAAQ;AAAA,UACV,UAAE;AACA,gBAAI,KAAK,QAAS,OAAM,KAAK,QAAQ,GAA0B,EAAE,aAAa,MAAM,OAAO,GAAG,EAAE,MAAM,QAAQ,MAAM,CAAC;AAAA,UACvH;AACA,cAAI,MAAO,OAAM;AAAA,QACnB,SAAS,KAAK;AACZ,kBAAQ,MAAM,mCAAmC,GAAG;AAAA,QACtD;AAAA,MACF;AACA,UAAI,iBAAiB,KAAK,WAAW,OAAO;AAC5C,cAAQ,KAAK,EAAE,KAAK,WAAW,KAAK,WAAW,QAAQ,CAAC;AAAA,IAC1D;AACA,SAAK,WAAW,IAAI,MAAM,OAAO;AAAA,EACnC;AAAA,EAEA,eAAe,eAAoC;AACjD,UAAM,OAAO,cAAc;AAC3B,eAAW,EAAE,KAAK,WAAW,QAAQ,KAAK,KAAK,WAAW,IAAI,IAAI,KAAK,CAAC,GAAG;AACzE,UAAI;AACF,YAAI,oBAAoB,WAAW,OAAO;AAAA,MAC5C,SAAS,GAAG;AACV,gBAAQ,MAAM,mCAAmC,CAAC;AAAA,MACpD;AAAA,IACF;AACA,SAAK,WAAW,OAAO,IAAI;AAAA,EAC7B;AACF;",
6
6
  "names": []
7
7
  }
@@ -0,0 +1,259 @@
1
+ import { ReflectUtils, HttpResponseError } from "@dooboostore/core";
2
+ import { SwcUtils } from "../utils/Utils.js";
3
+ import { getParameterMetadata } from "./parameter.js";
4
+ const FETCH_METADATA_KEY = Symbol.for("simple-web-component:fetch");
5
+ const getActiveControllers = (inst) => inst.__swc_fetchControllers ?? (inst.__swc_fetchControllers = /* @__PURE__ */ new Set());
6
+ const getLatestControllers = (inst) => inst.__swc_fetchLatest ?? (inst.__swc_fetchLatest = /* @__PURE__ */ new Map());
7
+ const abortError = (message) => new DOMException(message, "AbortError");
8
+ const combineSignals = (user, own) => {
9
+ if (!user) return own;
10
+ if (typeof AbortSignal.any === "function") return AbortSignal.any([user, own]);
11
+ const merged = new AbortController();
12
+ for (const s of [user, own]) {
13
+ if (s.aborted) {
14
+ merged.abort(s.reason);
15
+ break;
16
+ }
17
+ s.addEventListener("abort", () => merged.abort(s.reason), { once: true });
18
+ }
19
+ return merged.signal;
20
+ };
21
+ function createFetch(optionsOrUrl) {
22
+ const options = typeof optionsOrUrl === "string" ? { url: optionsOrUrl } : optionsOrUrl;
23
+ return (target, propertyKey, descriptor) => {
24
+ const constructor = target.constructor;
25
+ const list = ReflectUtils.getOwnMetadata(FETCH_METADATA_KEY, constructor) ?? [];
26
+ list.push({ propertyKey, options });
27
+ ReflectUtils.defineMetadata(FETCH_METADATA_KEY, list, constructor);
28
+ if (!descriptor) return descriptor;
29
+ const originalMethod = descriptor.value;
30
+ const extractBody = (v) => {
31
+ const keyToUse = options.valueKey ?? FETCH_METADATA_KEY;
32
+ if (v && typeof v === "object" && keyToUse in v) {
33
+ return v[keyToUse];
34
+ }
35
+ return v;
36
+ };
37
+ const resolveUrl = (inst, helper, args) => {
38
+ const u = options.url;
39
+ return typeof u === "function" ? u(inst, helper, args) : u;
40
+ };
41
+ const isBodyInit = (v) => {
42
+ if (typeof v === "string") return true;
43
+ const is = (name) => typeof globalThis[name] === "function" && v instanceof globalThis[name];
44
+ return ArrayBuffer.isView(v) || v instanceof ArrayBuffer || is("Blob") || is("FormData") || is("URLSearchParams") || is("ReadableStream");
45
+ };
46
+ const readBody = async (res) => {
47
+ const text = await res.text();
48
+ if (!text) return void 0;
49
+ return (res.headers.get("Content-Type") ?? "").includes("json") ? JSON.parse(text) : text;
50
+ };
51
+ const bodyProcess = options.process;
52
+ const defaultFetching = async (helper, url, init) => {
53
+ const rawBody = init?.body;
54
+ let body = rawBody;
55
+ let contentType;
56
+ if (rawBody !== void 0 && rawBody !== null && !isBodyInit(rawBody)) {
57
+ if (bodyProcess === "json") {
58
+ body = JSON.stringify(rawBody);
59
+ contentType = "application/json";
60
+ } else if (bodyProcess === "form") {
61
+ const fd = new FormData();
62
+ for (const [k, v] of Object.entries(rawBody)) {
63
+ if (v !== void 0 && v !== null) fd.append(k, v);
64
+ }
65
+ body = fd;
66
+ } else if (bodyProcess === "urlencoded") {
67
+ body = new URLSearchParams(rawBody).toString();
68
+ contentType = "application/x-www-form-urlencoded";
69
+ } else if (bodyProcess === "text") {
70
+ body = String(rawBody);
71
+ contentType = "text/plain";
72
+ }
73
+ }
74
+ const headers = new Headers(init?.headers);
75
+ if (contentType && !headers.has("Content-Type")) headers.set("Content-Type", contentType);
76
+ const w = helper?.$w;
77
+ const fetchFn = typeof w?.fetch === "function" ? w.fetch.bind(w) : globalThis.fetch;
78
+ const res = await fetchFn(url, {
79
+ ...init,
80
+ method: init?.method ?? (body !== void 0 ? "POST" : "GET"),
81
+ headers,
82
+ body
83
+ });
84
+ if (!res.ok) {
85
+ const error = new HttpResponseError(`fetch failed: ${res.status} ${String(url)}`);
86
+ error.response = res;
87
+ error.body = await readBody(res).catch(() => void 0);
88
+ throw error;
89
+ }
90
+ return readBody(res);
91
+ };
92
+ const injectSettled = (inst, methodName, args, settled) => {
93
+ const saves = getParameterMetadata(inst, methodName);
94
+ if (!saves.length) return args;
95
+ const out = [...args];
96
+ for (const s of saves) {
97
+ if (s.kind === "fetchSettled") out[s.index] = settled;
98
+ }
99
+ return out;
100
+ };
101
+ descriptor.value = async function(...args) {
102
+ const inst = this;
103
+ let helper;
104
+ try {
105
+ helper = SwcUtils.getHelperAndHostSet(inst);
106
+ } catch {
107
+ helper = void 0;
108
+ }
109
+ if (inst?.__swc_fetchDetached && inst.isConnected === false) return void 0;
110
+ if (options.filter && !await options.filter(inst, helper, args)) return void 0;
111
+ if (options.before) await options.before(inst, helper, args);
112
+ const manual = options.manual;
113
+ const controller = new AbortController();
114
+ const active = getActiveControllers(inst);
115
+ active.add(controller);
116
+ if (options.abortPrevious) {
117
+ const latest = getLatestControllers(inst);
118
+ latest.get(propertyKey)?.abort(abortError("superseded by a newer call"));
119
+ latest.set(propertyKey, controller);
120
+ }
121
+ const frameworkAborted = () => controller.signal.aborted;
122
+ const aborted = new Promise((_, reject) => {
123
+ if (controller.signal.aborted) reject(controller.signal.reason);
124
+ else controller.signal.addEventListener("abort", () => reject(controller.signal.reason), { once: true });
125
+ });
126
+ aborted.catch(() => {
127
+ });
128
+ const runFetch = async (init, returnValue) => {
129
+ let settled;
130
+ try {
131
+ const pending = Promise.resolve(manual ? manual(inst, helper, args, controller.signal, returnValue) : defaultFetching(helper, resolveUrl(inst, helper, args), { ...init, signal: combineSignals(init?.signal, controller.signal) }));
132
+ pending.catch(() => {
133
+ });
134
+ settled = { status: "fulfilled", value: await Promise.race([pending, aborted]) };
135
+ } catch (reason) {
136
+ settled = { status: "rejected", reason };
137
+ }
138
+ if (options.after && !frameworkAborted()) await options.after(inst, helper, args, settled);
139
+ return settled;
140
+ };
141
+ let callArgs = args;
142
+ let result;
143
+ let error;
144
+ try {
145
+ const trigger = options.trigger;
146
+ const isAfter = trigger === "after" || trigger !== "before" && "valueKey" in options;
147
+ if (isAfter) {
148
+ const returned = await originalMethod.apply(inst, callArgs);
149
+ const body = extractBody(returned);
150
+ let settled;
151
+ if (manual) {
152
+ settled = await runFetch(void 0, body);
153
+ } else {
154
+ const reqOpt = options.request;
155
+ const reqInit = typeof reqOpt === "string" ? { method: reqOpt } : typeof reqOpt === "function" ? await reqOpt(inst, helper, args, returned) : void 0;
156
+ settled = await runFetch({ ...reqInit, body: reqInit?.body ?? body });
157
+ }
158
+ if (frameworkAborted()) {
159
+ error = controller.signal.reason;
160
+ return void 0;
161
+ }
162
+ if (settled.status === "rejected") throw settled.reason;
163
+ result = settled.value;
164
+ } else {
165
+ const reqOpt = manual ? void 0 : options.request;
166
+ const init = typeof reqOpt === "string" ? { method: reqOpt } : typeof reqOpt === "function" ? await reqOpt(inst, helper, args) : void 0;
167
+ const settled = await runFetch(init);
168
+ if (frameworkAborted()) {
169
+ error = controller.signal.reason;
170
+ return void 0;
171
+ }
172
+ callArgs = injectSettled(inst, propertyKey, args, settled);
173
+ result = await originalMethod.apply(inst, callArgs);
174
+ }
175
+ return result;
176
+ } catch (e) {
177
+ error = e;
178
+ throw e;
179
+ } finally {
180
+ active.delete(controller);
181
+ if (options.abortPrevious && getLatestControllers(inst).get(propertyKey) === controller) getLatestControllers(inst).delete(propertyKey);
182
+ if (options.finally) await options.finally(inst, helper, args, { args: callArgs, result, error });
183
+ }
184
+ };
185
+ return descriptor;
186
+ };
187
+ }
188
+ function fetch(optionsOrUrl) {
189
+ return createFetch(optionsOrUrl);
190
+ }
191
+ function fetchManual(manual, options) {
192
+ return createFetch({ ...options ?? {}, manual });
193
+ }
194
+ const beforeMethod = (method) => (url, options) => {
195
+ const { request, ...rest } = options ?? {};
196
+ return createFetch({
197
+ ...rest,
198
+ url,
199
+ trigger: "before",
200
+ request: (c, h, p) => ({ ...request?.(c, h, p) ?? {}, method })
201
+ });
202
+ };
203
+ const afterMethod = (method) => (url, options) => {
204
+ const { request, ...rest } = options ?? {};
205
+ return createFetch({
206
+ ...rest,
207
+ url,
208
+ trigger: "after",
209
+ request: (c, h, p, returnValue) => ({ ...request?.(c, h, p, returnValue) ?? {}, method })
210
+ });
211
+ };
212
+ const fetchGet = beforeMethod("GET");
213
+ const fetchDelete = beforeMethod("DELETE");
214
+ const fetchPost = afterMethod("POST");
215
+ const fetchPut = afterMethod("PUT");
216
+ const fetchPatch = afterMethod("PATCH");
217
+ function fetchLatest(optionsOrUrl) {
218
+ const options = typeof optionsOrUrl === "string" ? { url: optionsOrUrl } : optionsOrUrl;
219
+ return createFetch({ ...options, abortPrevious: true });
220
+ }
221
+ function fetchBefore(options) {
222
+ return createFetch({ ...options, trigger: "before" });
223
+ }
224
+ function fetchAfter(options) {
225
+ return createFetch({ ...options, trigger: "after" });
226
+ }
227
+ const getFetchMetadata = (target) => {
228
+ const constructor = typeof target === "function" ? target : target.constructor;
229
+ return ReflectUtils.findAllMetadata(FETCH_METADATA_KEY, constructor).flat();
230
+ };
231
+ class FetchLifeCycler {
232
+ onConnected(helperHostSet) {
233
+ helperHostSet.$this.__swc_fetchDetached = false;
234
+ }
235
+ onDisconnected(helperHostSet) {
236
+ const inst = helperHostSet.$this;
237
+ inst.__swc_fetchDetached = true;
238
+ const active = inst.__swc_fetchControllers;
239
+ if (!active?.size) return;
240
+ for (const c of active) c.abort(abortError("element disconnected"));
241
+ active.clear();
242
+ }
243
+ }
244
+ export {
245
+ FETCH_METADATA_KEY,
246
+ FetchLifeCycler,
247
+ fetch,
248
+ fetchAfter,
249
+ fetchBefore,
250
+ fetchDelete,
251
+ fetchGet,
252
+ fetchLatest,
253
+ fetchManual,
254
+ fetchPatch,
255
+ fetchPost,
256
+ fetchPut,
257
+ getFetchMetadata
258
+ };
259
+ //# sourceMappingURL=fetch.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/decorators/fetch.ts"],
4
+ "sourcesContent": ["import { ReflectUtils, HttpResponseError } from '@dooboostore/core';\nimport { SwcUtils } from '../utils/Utils';\nimport { getParameterMetadata } from './parameter';\nimport type { ElementDefineLifeCycler, HelperHostSet } from '../types';\n\nexport const FETCH_METADATA_KEY = Symbol.for('simple-web-component:fetch');\n\nexport type FetchUrlFactory = (\n currentThis: any,\n helper: HelperHostSet,\n parameter: any[]\n) => RequestInfo | URL;\n\n/**\n * \uC218\uB3D9 fetch. \uC694\uCCAD\uC744 \uC9C1\uC811 \uB9CC\uB4E4\uACE0 \uBCF4\uB0B8\uB2E4 (\uC11C\uBE44\uC2A4 \uD638\uCD9C, \uC9C1\uC811 \uC4F4 fetch \uB4F1). \uB9AC\uD134\uAC12\uC774 fetch \uACB0\uACFC\uAC00 \uB41C\uB2E4.\n * - signal: \uC694\uC18C disconnect / abortPrevious \uB54C abort \uB41C\uB2E4. \uC9C1\uC811 \uC4F0\uB294 fetch/\uD074\uB77C\uC774\uC5B8\uD2B8\uC5D0 \uB118\uAE30\uBA74 \uB124\uD2B8\uC6CC\uD06C\uAE4C\uC9C0 \uB04A\uAE34\uB2E4\n * (\uC548 \uB118\uACA8\uB3C4 abort \uC989\uC2DC \uD638\uCD9C\uC740 \uB05D\uB098\uACE0 \uACB0\uACFC\uB294 \uBC84\uB824\uC9C4\uB2E4)\n * - returnValue: after \uBAA8\uB4DC\uC5D0\uC11C \uBA54\uC11C\uB4DC \uB9AC\uD134\uAC12 (valueKey \uAC00 \uC788\uC73C\uBA74 \uCD94\uCD9C\uD55C \uAC12). before \uBAA8\uB4DC\uC5D0\uC120 undefined\n */\nexport type FetchManualFn = (\n currentThis: any,\n helper: HelperHostSet,\n parameter: any[],\n signal: AbortSignal,\n returnValue?: any\n) => any | Promise<any>;\n\n/** \uBAA8\uB4DC(\uC120\uC5B8\uD615/\uC218\uB3D9\uD615, before/after)\uC640 \uBB34\uAD00\uD55C \uACF5\uD1B5 \uC635\uC158 */\nexport type FetchType = {\n /**\n * \uAC19\uC740 \uBA54\uC11C\uB4DC\uB97C \uB2E4\uC2DC \uBD80\uB974\uBA74 \uC9C4\uD589 \uC911\uC778 \uC774\uC804 \uC694\uCCAD\uC744 abort \uD55C\uB2E4 (\uAC80\uC0C9 \uC790\uB3D9\uC644\uC131 \uB4F1 \uB9C8\uC9C0\uB9C9 \uC694\uCCAD\uB9CC \uC0B4\uB9BC).\n * \uB04A\uAE34 \uC774\uC804 \uD638\uCD9C\uC740 \uC870\uC6A9\uD788 undefined \uB85C \uB05D\uB09C\uB2E4.\n */\n abortPrevious?: boolean;\n /** false \uB97C \uB9AC\uD134\uD558\uBA74 \uC774\uBC88 \uD638\uCD9C\uC744 \uD1B5\uC9F8\uB85C \uAC74\uB108\uB6F4\uB2E4 (\uBA54\uC11C\uB4DC\uB3C4 fetch \uB3C4 \uC2E4\uD589 \uC548 \uD568, undefined \uB9AC\uD134). */\n filter?: (\n currentThis: any,\n helper: HelperHostSet,\n parameter: any[]\n ) => boolean | Promise<boolean>;\n /** filter \uD1B5\uACFC \uD6C4 \uAC00\uC7A5 \uBA3C\uC800 \uC2E4\uD589 (await). \uB9AC\uD134\uAC12\uC740 \uBB34\uC2DC. init \uC870\uB9BD\uC740 request \uD329\uD1A0\uB9AC \uB2F4\uB2F9. */\n before?: (\n currentThis: any,\n helper: HelperHostSet,\n parameter: any[]\n ) => void | Promise<void>;\n /**\n * fetch settled \uD6C4 \uD638\uCD9C (fulfilled/rejected \uBAA8\uB450). \uD638\uCD9C\uB9CC \uD558\uACE0 \uB9AC\uD134\uAC12\uC740 \uBB34\uC2DC.\n * \uBCC0\uD658\u00B7\uBCF5\uAD6C\uAC00 \uD544\uC694\uD558\uBA74 manual \uB85C \uC9C1\uC811 \uAD6C\uD604\uD560 \uAC83.\n */\n after?: (\n currentThis: any,\n helper: HelperHostSet,\n parameter: any[],\n settled: PromiseSettledResult<any>\n ) => void | Promise<void>;\n /**\n * \uC131\uACF5/\uC2E4\uD328 \uBB34\uAD00 \uD56D\uC0C1 \uC2E4\uD589 (\uB2E4\uB978 \uB370\uCF54\uB808\uC774\uD130\uC758 finally \uC640 \uAC19\uC740 \uADDC\uCE59). \uC5D0\uB7EC\uB294 \uC0BC\uD0A4\uC9C0 \uC54A\uACE0 \uC804\uD30C.\n * args: \uBA54\uC11C\uB4DC\uC5D0 \uB118\uAE34 \uC778\uC790, result: \uC774\uBC88 \uD638\uCD9C\uC758 \uB9AC\uD134\uAC12(before \uBAA8\uB4DC = \uBA54\uC11C\uB4DC \uB9AC\uD134, after \uBAA8\uB4DC = fetch \uACB0\uACFC)\n */\n finally?: (\n currentThis: any,\n helper: HelperHostSet,\n parameter: any[],\n ctx: { args: any[]; result?: any; error?: any }\n ) => any | Promise<any>;\n};\n\n/** before: \uC778\uC790 \uAE30\uBC18 RequestInit \uC870\uB9BD. \uC5C6\uC73C\uBA74 GET. */\nexport type RequestFactory = (\n currentThis: any,\n helper: HelperHostSet,\n parameter: any[]\n) => RequestInit | undefined;\n\n/** after: \uC778\uC790 + \uBA54\uC11C\uB4DC \uB9AC\uD134\uAC12 \uAE30\uBC18 RequestInit \uC870\uB9BD. \uC5C6\uC73C\uBA74 body \uC720\uBB34\uB85C GET/POST. */\nexport type ReturnRequestFactory = (\n currentThis: any,\n helper: HelperHostSet,\n parameter: any[],\n returnValue: any\n) => RequestInit | undefined;\n\nexport interface FetchMetadata {\n propertyKey: string | symbol;\n options: FetchOptions;\n}\n\n/** \uC120\uC5B8\uD615: url/request/process \uB85C \uAE30\uC220\uD558\uBA74 \uD504\uB808\uC784\uC6CC\uD06C\uAC00 fetch \uD55C\uB2E4 */\nexport type FetchDeclarative<R> = {\n url: RequestInfo | URL | FetchUrlFactory;\n request?: R | string;\n /**\n * 'json': \uAC1D\uCCB4 \u2192 JSON.stringify + Content-Type: application/json\n * 'form': \uAC1D\uCCB4 \u2192 FormData (Content-Type\uC740 \uBE0C\uB77C\uC6B0\uC800\uAC00 boundary \uBD99\uC774\uBBC0\uB85C \uAC74\uB4DC\uB9AC\uC9C0 \uC54A\uC74C)\n * 'urlencoded': \uAC1D\uCCB4 \u2192 URLSearchParams + Content-Type: application/x-www-form-urlencoded\n * 'text': String(value) + Content-Type: text/plain\n * \uBBF8\uC9C0\uC815: \uADF8\uB300\uB85C \uD1B5\uACFC (\uAC00\uACF5 \uC5C6\uC74C). \uC774\uBBF8 BodyInit \uC778 \uAC12\uC740 \uAC00\uACF5\uD558\uC9C0 \uC54A\uB294\uB2E4.\n */\n process?: 'json' | 'form' | 'urlencoded' | 'text';\n manual?: never;\n};\n\n/** \uC218\uB3D9\uD615: manual \uC774 \uC694\uCCAD\uC744 \uC804\uBD80 \uB2F4\uB2F9. url/request/process \uB294 \uC4F0\uC774\uC9C0 \uC54A\uC73C\uBBC0\uB85C \uAE08\uC9C0 */\nexport type FetchManual = {\n manual: FetchManualFn;\n url?: never;\n request?: never;\n process?: never;\n};\n\nexport type FetchOptions =\n // before(\uAE30\uBCF8): (\uC120\uC5B8\uD615 fetch | manual) \u2192 settled\uB97C @fetchSettled \uC790\uB9AC\uC5D0\n // \uC8FC\uC785\uD574 \uBA54\uC11C\uB4DC \uC2E4\uD589. \uBA54\uC11C\uB4DC \uACB0\uACFC \uB9AC\uD134. request \uC5C6\uC73C\uBA74 GET. valueKey \uB294 after \uC804\uC6A9\uC774\uB77C \uAE08\uC9C0.\n | (FetchType & { trigger?: 'before'; valueKey?: never } & (FetchDeclarative<RequestFactory> | FetchManual))\n // after: \uBA54\uC11C\uB4DC \uC2E4\uD589 \u2192 \uB9AC\uD134\uAC12(valueKey \uAC00 \uC788\uC73C\uBA74 returnValue[valueKey])\uC744 body(\uC218\uB3D9\uD615\uC774\uBA74 returnValue)\uB85C \u2192 fetch. fetch \uACB0\uACFC \uB9AC\uD134.\n // (valueKey \uAE30\uBCF8\uAC12 = FETCH_METADATA_KEY: Symbol \uD0A4 \uC6B0\uC120 \uC870\uD68C, \uC5C6\uC73C\uBA74 \uD1B5\uC9F8 \uAC12)\n | (FetchType & { trigger: 'after'; valueKey?: string } & (FetchDeclarative<ReturnRequestFactory> | FetchManual))\n // after \uCD95\uC57D: trigger \uC5C6\uC774 valueKey \uB9CC \uC918\uB3C4 after\n | (FetchType & { trigger?: never; valueKey: string } & (FetchDeclarative<ReturnRequestFactory> | FetchManual));\n\n// \uC778\uC2A4\uD134\uC2A4\uBCC4 \uC9C4\uD589 \uC911\uC778 \uC694\uCCAD\uC758 \uCEE8\uD2B8\uB864\uB7EC (disconnect \uC2DC FetchLifeCycler \uAC00 \uC804\uBD80 abort)\nconst getActiveControllers = (inst: any): Set<AbortController> => (inst.__swc_fetchControllers ??= new Set());\n// abortPrevious: \uBA54\uC11C\uB4DC\uBCC4 \uB9C8\uC9C0\uB9C9 \uD638\uCD9C\uC758 \uCEE8\uD2B8\uB864\uB7EC\nconst getLatestControllers = (inst: any): Map<string | symbol, AbortController> => (inst.__swc_fetchLatest ??= new Map());\n\nconst abortError = (message: string) => new DOMException(message, 'AbortError');\n\n// \uC0AC\uC6A9\uC790\uAC00 request \uB85C \uC900 signal \uACFC \uD504\uB808\uC784\uC6CC\uD06C signal \uC744 \uD569\uCE5C\uB2E4 (AbortSignal.any \uBBF8\uC9C0\uC6D0 \uBE0C\uB77C\uC6B0\uC800 \uB300\uBE44)\nconst combineSignals = (user: AbortSignal | null | undefined, own: AbortSignal): AbortSignal => {\n if (!user) return own;\n if (typeof (AbortSignal as any).any === 'function') return (AbortSignal as any).any([user, own]);\n const merged = new AbortController();\n for (const s of [user, own]) {\n if (s.aborted) {\n merged.abort(s.reason);\n break;\n }\n s.addEventListener('abort', () => merged.abort(s.reason), { once: true });\n }\n return merged.signal;\n};\n\nfunction createFetch(optionsOrUrl: FetchOptions | string): MethodDecorator {\n const options: FetchOptions = typeof optionsOrUrl === 'string' ? { url: optionsOrUrl } : optionsOrUrl;\n return (target: Object, propertyKey: string | symbol, descriptor?: PropertyDescriptor) => {\n const constructor = target.constructor;\n const list = (ReflectUtils.getOwnMetadata(FETCH_METADATA_KEY, constructor) as FetchMetadata[] | undefined) ?? [];\n list.push({ propertyKey, options });\n ReflectUtils.defineMetadata(FETCH_METADATA_KEY, list, constructor);\n\n if (!descriptor) return descriptor;\n const originalMethod = descriptor.value;\n\n const extractBody = (v: any) => {\n const keyToUse = (options as { valueKey?: symbol | string }).valueKey ?? FETCH_METADATA_KEY;\n if (v && typeof v === 'object' && keyToUse in v) {\n return v[keyToUse];\n }\n return v;\n };\n\n const resolveUrl = (inst: any, helper: HelperHostSet, args: any[]): RequestInfo | URL => {\n const u = (options as FetchDeclarative<unknown>).url;\n return typeof u === 'function' ? (u as FetchUrlFactory)(inst, helper, args) : u;\n };\n\n // \uC774\uBBF8 BodyInit \uC778 \uAC12\uC740 process \uB85C \uAC00\uACF5\uD558\uC9C0 \uC54A\uACE0 \uADF8\uB300\uB85C \uBCF4\uB0B8\uB2E4 (Blob \uC744 JSON.stringify \uD558\uBA74 '{}' \uAC00 \uB428)\n const isBodyInit = (v: any): boolean => {\n if (typeof v === 'string') return true;\n const is = (name: string) => typeof (globalThis as any)[name] === 'function' && v instanceof (globalThis as any)[name];\n return ArrayBuffer.isView(v) || v instanceof ArrayBuffer || is('Blob') || is('FormData') || is('URLSearchParams') || is('ReadableStream');\n };\n\n // 204/\uBE48 body \uB294 undefined, JSON \uACC4\uC5F4(application/json, +json)\uC740 \uD30C\uC2F1, \uB098\uBA38\uC9C0\uB294 text\n const readBody = async (res: Response): Promise<any> => {\n const text = await res.text();\n if (!text) return undefined;\n return (res.headers.get('Content-Type') ?? '').includes('json') ? JSON.parse(text) : text;\n };\n\n const bodyProcess = (options as FetchDeclarative<unknown>).process;\n const defaultFetching = async (helper: HelperHostSet | undefined, url: RequestInfo | URL, init?: RequestInit): Promise<any> => {\n const rawBody: any = init?.body;\n let body: BodyInit | undefined = rawBody;\n let contentType: string | undefined;\n if (rawBody !== undefined && rawBody !== null && !isBodyInit(rawBody)) {\n if (bodyProcess === 'json') {\n body = JSON.stringify(rawBody);\n contentType = 'application/json';\n } else if (bodyProcess === 'form') {\n const fd = new FormData();\n for (const [k, v] of Object.entries(rawBody)) {\n if (v !== undefined && v !== null) fd.append(k, v as any);\n }\n body = fd;\n } else if (bodyProcess === 'urlencoded') {\n body = new URLSearchParams(rawBody as Record<string, string>).toString();\n contentType = 'application/x-www-form-urlencoded';\n } else if (bodyProcess === 'text') {\n body = String(rawBody);\n contentType = 'text/plain';\n }\n }\n // Headers \uC778\uC2A4\uD134\uC2A4/\uBC30\uC5F4/\uAC1D\uCCB4 \uBAA8\uB450 \uBC1B\uB294\uB2E4 (\uAC1D\uCCB4 spread \uB294 Headers \uC778\uC2A4\uD134\uC2A4\uB97C {} \uB85C \uB0A0\uB9BC). \uC0AC\uC6A9\uC790\uAC00 \uC900 Content-Type \uC6B0\uC120.\n const headers = new Headers(init?.headers);\n if (contentType && !headers.has('Content-Type')) headers.set('Content-Type', contentType);\n // \uC694\uC18C\uAC00 \uC18D\uD55C window \uC758 fetch (SSR \uC774\uBA74 \uC694\uCCAD\uBCC4 window). \uC5C6\uC73C\uBA74 globalThis.fetch\n const w = helper?.$w as any;\n const fetchFn: typeof globalThis.fetch = typeof w?.fetch === 'function' ? w.fetch.bind(w) : globalThis.fetch;\n const res: Response = await fetchFn(url, {\n ...init,\n method: init?.method ?? (body !== undefined ? 'POST' : 'GET'),\n headers,\n body\n });\n if (!res.ok) {\n // status/\uC751\uB2F5 body \uB97C \uCF54\uB4DC\uC5D0\uC11C \uAEBC\uB0BC \uC218 \uC788\uAC8C core \uC758 HttpResponseError \uB85C \uB358\uC9C4\uB2E4\n const error = new HttpResponseError(`fetch failed: ${res.status} ${String(url)}`);\n error.response = res;\n error.body = await readBody(res).catch(() => undefined);\n throw error;\n }\n return readBody(res);\n };\n\n // \uD638\uCD9C \uC778\uC790\uB294 \uC720\uC9C0\uD55C \uCC44, @fetchSettled \uC790\uB9AC\uB9CC \uCC44\uC6B4\uB2E4\n const injectSettled = (inst: any, methodName: string | symbol, args: any[], settled: PromiseSettledResult<any>): any[] => {\n const saves = getParameterMetadata(inst, methodName);\n if (!saves.length) return args;\n const out = [...args];\n for (const s of saves) {\n if (s.kind === 'fetchSettled') out[s.index] = settled;\n }\n return out;\n };\n\n descriptor.value = async function (...args: any[]) {\n const inst = this as any;\n let helper: HelperHostSet | undefined;\n try {\n helper = SwcUtils.getHelperAndHostSet(inst);\n } catch {\n helper = undefined;\n }\n\n // disconnect \uB41C \uB4A4\uC5D0 \uC0C8\uB85C \uC2DC\uC791\uD558\uB294 \uD638\uCD9C(\uC608: \uB5A0\uB098\uAE30 \uC9C1\uC804 \uAC78\uC5B4\uB454 setTimeout)\uB3C4 \uC870\uC6A9\uD788 \uAC74\uB108\uB6F4\uB2E4.\n // \uD55C \uBC88\uB3C4 connect \uC548 \uB41C \uC694\uC18C\uB294 \uD574\uB2F9 \uC5C6\uC74C (FetchLifeCycler \uAC00 disconnect \uB54C\uB9CC \uD45C\uC2DC)\n if (inst?.__swc_fetchDetached && inst.isConnected === false) return undefined;\n\n // filter \u2192 before \u2192 (before \uBAA8\uB4DC: fetch \u2192 \uBA54\uC11C\uB4DC / after \uBAA8\uB4DC: \uBA54\uC11C\uB4DC \u2192 fetch) \u2192 finally\n if (options.filter && !(await options.filter(inst, helper!, args))) return undefined;\n if (options.before) await options.before(inst, helper!, args);\n\n const manual = (options as FetchManual).manual;\n\n // \uD504\uB808\uC784\uC6CC\uD06C\uAC00 \uB04A\uB294 \uACBD\uC6B0(disconnect / abortPrevious)\uB294 \uC5D0\uB7EC\uAC00 \uC544\uB2C8\uB77C \"\uD560 \uC77C \uC5C6\uC74C\" \u2192 \uC870\uC6A9\uD788 undefined\n const controller = new AbortController();\n const active = getActiveControllers(inst);\n active.add(controller);\n if (options.abortPrevious) {\n const latest = getLatestControllers(inst);\n latest.get(propertyKey)?.abort(abortError('superseded by a newer call'));\n latest.set(propertyKey, controller);\n }\n const frameworkAborted = () => controller.signal.aborted;\n\n // \uC0AC\uC6A9\uC790 manual \uC774 signal \uC744 \uBB34\uC2DC\uD574\uB3C4 abort \uC989\uC2DC \uD638\uCD9C\uC774 \uB05D\uB098\uB3C4\uB85D abort \uC640 \uACBD\uC7C1\uC2DC\uD0A8\uB2E4\n const aborted = new Promise<never>((_, reject) => {\n if (controller.signal.aborted) reject(controller.signal.reason);\n else controller.signal.addEventListener('abort', () => reject(controller.signal.reason), { once: true });\n });\n aborted.catch(() => {}); // race \uC5D0 \uC548 \uC4F0\uC774\uACE0 \uB05D\uB098\uB3C4 unhandled rejection \uC774 \uC548 \uB098\uAC8C\n\n // \uC218\uB3D9\uD615\uC774\uBA74 manual(\u2026, signal, returnValue), \uC120\uC5B8\uD615\uC774\uBA74 url/init \uC73C\uB85C \uAE30\uBCF8 fetch\n const runFetch = async (init?: RequestInit, returnValue?: any): Promise<PromiseSettledResult<any>> => {\n let settled: PromiseSettledResult<any>;\n try {\n const pending = Promise.resolve(manual\n ? manual(inst, helper!, args, controller.signal, returnValue)\n : defaultFetching(helper, resolveUrl(inst, helper!, args), { ...init, signal: combineSignals(init?.signal, controller.signal) }));\n pending.catch(() => {}); // abort \uB85C race \uC5D0\uC11C \uC9C4 \uB4A4 \uB2A6\uAC8C reject \uB3FC\uB3C4 unhandled rejection \uC774 \uC548 \uB098\uAC8C\n settled = { status: 'fulfilled', value: await Promise.race([pending, aborted]) };\n } catch (reason) {\n settled = { status: 'rejected', reason };\n }\n // \uB5A8\uC5B4\uC9C4 \uC694\uC18C\uC758 DOM \uC744 \uAC74\uB4DC\uB9AC\uC9C0 \uC54A\uAC8C, \uD504\uB808\uC784\uC6CC\uD06C abort \uBA74 after \uD6C5\uC740 \uAC74\uB108\uB6F4\uB2E4\n if (options.after && !frameworkAborted()) await options.after(inst, helper!, args, settled);\n return settled;\n };\n\n let callArgs = args;\n let result: any;\n let error: any;\n try {\n const trigger = (options as { trigger?: string }).trigger;\n const isAfter = trigger === 'after' || (trigger !== 'before' && 'valueKey' in options);\n if (isAfter) {\n // after: \uBA54\uC11C\uB4DC \uC2E4\uD589 \u2192 body \uCD94\uCD9C \u2192 request \uC640 \uD569\uCCD0 fetch \u2192 fetch \uACB0\uACFC \uB9AC\uD134.\n const returned = await originalMethod.apply(inst, callArgs);\n const body = extractBody(returned);\n let settled: PromiseSettledResult<any>;\n if (manual) {\n settled = await runFetch(undefined, body);\n } else {\n const reqOpt = (options as FetchDeclarative<ReturnRequestFactory>).request;\n const reqInit: RequestInit | undefined = typeof reqOpt === 'string'\n ? { method: reqOpt }\n : typeof reqOpt === 'function' ? await reqOpt(inst, helper!, args, returned) : undefined;\n settled = await runFetch({ ...reqInit, body: reqInit?.body ?? body });\n }\n if (frameworkAborted()) {\n error = controller.signal.reason;\n return undefined;\n }\n if (settled.status === 'rejected') throw settled.reason;\n result = settled.value;\n } else {\n // before: request \uC870\uB9BD \u2192 fetch \u2192 settled \uB97C \uC8FC\uC785\uD574 \uBA54\uC11C\uB4DC \uC2E4\uD589. \uBA54\uC11C\uB4DC \uACB0\uACFC \uB9AC\uD134.\n const reqOpt = manual ? undefined : (options as FetchDeclarative<RequestFactory>).request;\n const init: RequestInit | undefined = typeof reqOpt === 'string' ? { method: reqOpt } : typeof reqOpt === 'function' ? await reqOpt(inst, helper!, args) : undefined;\n const settled = await runFetch(init);\n if (frameworkAborted()) {\n // \uB5A8\uC5B4\uC9C4 \uC694\uC18C\uC5D0 \uADF8\uB9AC\uC9C0 \uC54A\uAC8C \uBA54\uC11C\uB4DC\uB3C4 \uC2E4\uD589\uD558\uC9C0 \uC54A\uB294\uB2E4\n error = controller.signal.reason;\n return undefined;\n }\n callArgs = injectSettled(inst, propertyKey, args, settled);\n result = await originalMethod.apply(inst, callArgs);\n }\n return result;\n } catch (e) {\n error = e;\n throw e;\n } finally {\n active.delete(controller);\n if (options.abortPrevious && getLatestControllers(inst).get(propertyKey) === controller) getLatestControllers(inst).delete(propertyKey);\n // finally \uB294 \uC815\uB9AC\uC6A9\uC774\uB77C \uD504\uB808\uC784\uC6CC\uD06C abort \uC5EC\uB3C4 \uC2E4\uD589 (ctx.error \uC5D0 AbortError)\n if (options.finally) await options.finally(inst, helper!, args, { args: callArgs, result, error });\n }\n };\n\n return descriptor;\n };\n}\n\nexport function fetch(url: string): MethodDecorator;\nexport function fetch(options: FetchOptions): MethodDecorator;\nexport function fetch(optionsOrUrl: FetchOptions | string): MethodDecorator {\n return createFetch(optionsOrUrl);\n}\n\n// \u2500\u2500\u2500 Aliases \u2500\u2500\u2500\n\n/** trigger/valueKey \uC870\uD569 (before \uC5D0\uB294 valueKey \uAE08\uC9C0) */\ntype FetchTriggerOptions =\n | { trigger?: 'before'; valueKey?: never }\n | { trigger: 'after'; valueKey?: string }\n | { trigger?: never; valueKey: string };\n\n/** fetchManual \uC758 \uB098\uBA38\uC9C0 \uC635\uC158 (\uACF5\uD1B5 \uD6C5 + trigger/valueKey) */\nexport type FetchManualOptions = FetchType & FetchTriggerOptions;\n\n/**\n * @fetchManual(fn, options?) = @fetch({ manual: fn, ...options })\n * \uC11C\uBE44\uC2A4 \uD638\uCD9C \uB4F1 \uC694\uCCAD\uC744 \uC9C1\uC811 \uB9CC\uB4E4 \uB54C. \uC608: @fetchManual((self) => self.myService.getProfile({}))\n */\nexport function fetchManual(manual: FetchManualFn, options?: FetchManualOptions): MethodDecorator {\n return createFetch({ ...(options ?? {}), manual } as FetchOptions);\n}\n\n/** GET/DELETE(before \uBAA8\uB4DC) \uBCC4\uCE6D\uC758 \uC635\uC158 \u2014 \uBA54\uC11C\uB4DC\uB294 \uACE0\uC815\uC774\uB77C request \uB294 \uD329\uD1A0\uB9AC\uB9CC (method \uB294 \uB36E\uC5B4\uC500) */\nexport type FetchBeforeMethodOptions = FetchType & Omit<FetchDeclarative<RequestFactory>, 'url' | 'request' | 'manual'> & { request?: RequestFactory };\n/** POST/PUT/PATCH(after \uBAA8\uB4DC) \uBCC4\uCE6D\uC758 \uC635\uC158 \u2014 \uBA54\uC11C\uB4DC \uB9AC\uD134\uAC12(\uB610\uB294 returnValue[valueKey])\uC774 body */\nexport type FetchAfterMethodOptions = FetchType & Omit<FetchDeclarative<ReturnRequestFactory>, 'url' | 'request' | 'manual'> & { request?: ReturnRequestFactory; valueKey?: string };\n\ntype FetchUrl = RequestInfo | URL | FetchUrlFactory;\n\nconst beforeMethod = (method: string) => (url: FetchUrl, options?: FetchBeforeMethodOptions): MethodDecorator => {\n const { request, ...rest } = options ?? {};\n return createFetch({\n ...rest,\n url,\n trigger: 'before',\n request: (c, h, p) => ({ ...(request?.(c, h, p) ?? {}), method })\n } as FetchOptions);\n};\n\nconst afterMethod = (method: string) => (url: FetchUrl, options?: FetchAfterMethodOptions): MethodDecorator => {\n const { request, ...rest } = options ?? {};\n return createFetch({\n ...rest,\n url,\n trigger: 'after',\n request: (c, h, p, returnValue) => ({ ...(request?.(c, h, p, returnValue) ?? {}), method })\n } as FetchOptions);\n};\n\n/** @fetchGet(url, options?) \u2014 before \uBAA8\uB4DC GET. \uACB0\uACFC\uB294 @fetchSettled \uC73C\uB85C */\nexport const fetchGet = beforeMethod('GET');\n/** @fetchDelete(url, options?) \u2014 before \uBAA8\uB4DC DELETE (body \uC5C6\uC74C) */\nexport const fetchDelete = beforeMethod('DELETE');\n/** @fetchPost(url, options?) \u2014 after \uBAA8\uB4DC POST. \uBA54\uC11C\uB4DC \uB9AC\uD134\uAC12\uC774 body, fetch \uACB0\uACFC\uB97C \uB9AC\uD134 */\nexport const fetchPost = afterMethod('POST');\n/** @fetchPut(url, options?) \u2014 after \uBAA8\uB4DC PUT */\nexport const fetchPut = afterMethod('PUT');\n/** @fetchPatch(url, options?) \u2014 after \uBAA8\uB4DC PATCH */\nexport const fetchPatch = afterMethod('PATCH');\n\n/**\n * @fetchLatest(url | options) = @fetch({ ...options, abortPrevious: true })\n * \uC5F0\uB2EC\uC544 \uBD80\uB974\uBA74 \uC774\uC804 \uC694\uCCAD\uC744 \uB04A\uACE0 \uB9C8\uC9C0\uB9C9 \uAC83\uB9CC \uC0B4\uB9B0\uB2E4 (\uAC80\uC0C9 \uC790\uB3D9\uC644\uC131 \uB4F1)\n */\nexport function fetchLatest(url: string): MethodDecorator;\nexport function fetchLatest(options: FetchOptions): MethodDecorator;\nexport function fetchLatest(optionsOrUrl: FetchOptions | string): MethodDecorator {\n const options: FetchOptions = typeof optionsOrUrl === 'string' ? { url: optionsOrUrl } : optionsOrUrl;\n return createFetch({ ...options, abortPrevious: true } as FetchOptions);\n}\n\n/** @fetchBefore(options) = @fetch({ ...options, trigger: 'before' }) */\nexport function fetchBefore(options: FetchType & (FetchDeclarative<RequestFactory> | FetchManual)): MethodDecorator {\n return createFetch({ ...options, trigger: 'before' } as FetchOptions);\n}\n\n/** @fetchAfter(options) = @fetch({ ...options, trigger: 'after' }) */\nexport function fetchAfter(options: FetchType & { valueKey?: string } & (FetchDeclarative<ReturnRequestFactory> | FetchManual)): MethodDecorator {\n return createFetch({ ...options, trigger: 'after' } as FetchOptions);\n}\n\n/** @fetch \uAC00 \uBD99\uC740 \uBA54\uC11C\uB4DC \uBAA9\uB85D \uC870\uD68C */\nexport const getFetchMetadata = (target: any): FetchMetadata[] | undefined => {\n const constructor = typeof target === 'function' ? target : target.constructor;\n return ReflectUtils.findAllMetadata<any[]>(FETCH_METADATA_KEY, constructor).flat();\n};\n\n/**\n * disconnect \uC2DC \uC9C4\uD589 \uC911\uC778 @fetch \uC694\uCCAD\uC744 \uC804\uBD80 abort (\uBA54\uC11C\uB4DC/after \uB294 \uC2E4\uD589\uB418\uC9C0 \uC54A\uACE0 \uC870\uC6A9\uD788 \uB05D\uB09C\uB2E4).\n * \uB5A8\uC5B4\uC9C4 \uB3D9\uC548 \uC0C8\uB85C \uC2DC\uC791\uD558\uB294 \uD638\uCD9C\uB3C4 \uAC74\uB108\uB6F0\uB3C4\uB85D \uD45C\uC2DC\uD558\uACE0, \uB2E4\uC2DC connect \uB418\uBA74 \uD45C\uC2DC\uB97C \uC9C0\uC6B4\uB2E4.\n */\nexport class FetchLifeCycler implements ElementDefineLifeCycler {\n onConnected(helperHostSet: HelperHostSet): void {\n helperHostSet.$this.__swc_fetchDetached = false;\n }\n\n onDisconnected(helperHostSet: HelperHostSet): void {\n const inst = helperHostSet.$this;\n inst.__swc_fetchDetached = true;\n const active: Set<AbortController> | undefined = inst.__swc_fetchControllers;\n if (!active?.size) return;\n for (const c of active) c.abort(abortError('element disconnected'));\n active.clear();\n }\n}\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -13,8 +13,9 @@ export * from "./applyClass.js";
13
13
  export * from "./applyStyle.js";
14
14
  export * from "./applyAttribute.js";
15
15
  export * from "./applyProperty.js";
16
- export * from "./subscribeSwcAppRouteChangeWhileConnected.js";
17
- export * from "./subscribeSwcAppMessageWhileConnected.js";
16
+ export * from "./subscribeSwcAppRouteChange.js";
17
+ export * from "./swcAppRoute.js";
18
+ export * from "./subscribeSwcAppMessage.js";
18
19
  export * from "./publishSwcAppMessage.js";
19
20
  export * from "./applySlot.js";
20
21
  export * from "./state.js";
@@ -23,4 +24,6 @@ export * from "./setTimeout.js";
23
24
  export * from "./requestAnimationFrame.js";
24
25
  export * from "./eventMedia.js";
25
26
  export * from "./parameter.js";
27
+ export * from "./fetch.js";
28
+ export * from "./around.js";
26
29
  //# sourceMappingURL=index.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/decorators/index.ts"],
4
- "sourcesContent": ["export * from './addEventListener';\nexport * from './mutationObserver';\nexport * from './resizeObserver';\nexport * from './intersectionObserver';\nexport * from './applyAttribute';\nexport * from './elementDefine';\nexport * from './changedAttribute';\nexport * from './emitCustomEvent';\nexport * from './applyNode';\nexport * from './lifecycles';\nexport * from './query';\nexport * from './applyClass';\nexport * from './applyStyle';\nexport * from './applyAttribute';\nexport * from './applyProperty';\nexport * from './subscribeSwcAppRouteChangeWhileConnected';\nexport * from './subscribeSwcAppMessageWhileConnected';\nexport * from './publishSwcAppMessage';\nexport * from './applySlot';\nexport * from './state';\nexport * from './setInterval';\nexport * from './setTimeout';\nexport * from './requestAnimationFrame';\nexport * from './eventMedia';\nexport * from './parameter';\n"],
5
- "mappings": "AAAA,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;",
4
+ "sourcesContent": ["export * from './addEventListener';\nexport * from './mutationObserver';\nexport * from './resizeObserver';\nexport * from './intersectionObserver';\nexport * from './applyAttribute';\nexport * from './elementDefine';\nexport * from './changedAttribute';\nexport * from './emitCustomEvent';\nexport * from './applyNode';\nexport * from './lifecycles';\nexport * from './query';\nexport * from './applyClass';\nexport * from './applyStyle';\nexport * from './applyAttribute';\nexport * from './applyProperty';\nexport * from './subscribeSwcAppRouteChange';\nexport * from './swcAppRoute';\nexport * from './subscribeSwcAppMessage';\nexport * from './publishSwcAppMessage';\nexport * from './applySlot';\nexport * from './state';\nexport * from './setInterval';\nexport * from './setTimeout';\nexport * from './requestAnimationFrame';\nexport * from './eventMedia';\nexport * from './parameter';\nexport * from './fetch';\nexport * from './around';\n"],
5
+ "mappings": "AAAA,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;",
6
6
  "names": []
7
7
  }
@@ -2,10 +2,11 @@ var __defProp = Object.defineProperty;
2
2
  var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
3
3
  var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
4
4
  import { ReflectUtils } from "@dooboostore/core";
5
+ import { buildSwcParameterArgs } from "./parameter.js";
5
6
  const INTERSECTION_OBSERVER_METADATA_KEY = Symbol.for("simple-web-component:intersection-observer");
6
7
  const applyIntersectionObserver = (selector, options, targetObj, propertyKey) => {
7
8
  const constructor = targetObj.constructor;
8
- let observers = ReflectUtils.getMetadata(INTERSECTION_OBSERVER_METADATA_KEY, constructor);
9
+ let observers = ReflectUtils.getOwnMetadata(INTERSECTION_OBSERVER_METADATA_KEY, constructor);
9
10
  if (!observers) {
10
11
  observers = [];
11
12
  ReflectUtils.defineMetadata(INTERSECTION_OBSERVER_METADATA_KEY, observers, constructor);
@@ -35,9 +36,6 @@ const dispatchIntersectionObserver = (selectorOrOptionsOrTarget, maybeOptionsOrP
35
36
  function intersectionObserver(selectorOrOptionsOrTarget, maybeOptionsOrPropertyKey, descriptor) {
36
37
  return dispatchIntersectionObserver(selectorOrOptionsOrTarget, maybeOptionsOrPropertyKey, descriptor, {});
37
38
  }
38
- function intersectionObserverThis(optionsOrTarget, propertyKey, descriptor) {
39
- return dispatchIntersectionObserver(optionsOrTarget, propertyKey, descriptor, {});
40
- }
41
39
  function intersectionObserverDelegateLight(selectorOrOptionsOrTarget, maybeOptionsOrPropertyKey, descriptor) {
42
40
  return dispatchIntersectionObserver(selectorOrOptionsOrTarget, maybeOptionsOrPropertyKey, descriptor, { root: "light", delegate: true });
43
41
  }
@@ -60,8 +58,8 @@ function intersectionObserverAll(selectorOrOptionsOrTarget, maybeOptionsOrProper
60
58
  return dispatchIntersectionObserver(selectorOrOptionsOrTarget, maybeOptionsOrPropertyKey, descriptor, { root: "all" });
61
59
  }
62
60
  function getIntersectionObserverMetadata(target) {
63
- const constructor = target instanceof Function ? target : target.constructor;
64
- return ReflectUtils.getMetadata(INTERSECTION_OBSERVER_METADATA_KEY, constructor);
61
+ const constructor = typeof target === "function" ? target : target.constructor;
62
+ return ReflectUtils.findAllMetadata(INTERSECTION_OBSERVER_METADATA_KEY, constructor).flat();
65
63
  }
66
64
  import { SwcUtils } from "../utils/Utils.js";
67
65
  class IntersectionObserverLifeCycler {
@@ -94,11 +92,34 @@ class IntersectionObserverLifeCycler {
94
92
  matchedEls = entries.map((e) => e.target).filter((t) => t && t.nodeType === 1);
95
93
  }
96
94
  if (matchedEls.length === 0) continue;
97
- if (m.options.filter) {
98
- if (!m.options.filter(matchedEls, { currentThis: inst, helper: helperHostSet })) continue;
99
- }
100
- const hostSet = SwcUtils.getHostSet(inst);
101
- inst[m.propertyKey](matchedEls, entries, obs, { ...hostSet, $root: root });
95
+ const opts = m.options;
96
+ void (async () => {
97
+ const helper = SwcUtils.getHelperAndHostSet(inst);
98
+ if (opts.filter && !await opts.filter(matchedEls, { currentThis: inst, helper })) return;
99
+ const hostSet = SwcUtils.getHostSet(inst);
100
+ const helperSet = SwcUtils.getHelperSet(helperHostSet.$w);
101
+ const legacyArgs = [matchedEls, entries, obs, { ...hostSet, $root: root }];
102
+ const buildArgs = (beforeReturn) => buildSwcParameterArgs(inst, m.propertyKey, {
103
+ hostSet,
104
+ helperHostSet: helper,
105
+ helperSet,
106
+ intersectionObserverBeforeReturn: beforeReturn
107
+ }, [...legacyArgs, beforeReturn]);
108
+ let args = buildArgs(void 0);
109
+ if (opts.before) {
110
+ const br = await opts.before(matchedEls, { currentThis: inst, helper });
111
+ args = buildArgs(br);
112
+ }
113
+ let result, error;
114
+ try {
115
+ result = await inst[m.propertyKey](...args);
116
+ } catch (e) {
117
+ error = e;
118
+ } finally {
119
+ if (opts.finally) await opts.finally(matchedEls, { currentThis: inst, helper }, { args, result, error });
120
+ }
121
+ if (error) throw error;
122
+ })().catch((e) => console.error("[SWC] intersectionObserver handler error:", e));
102
123
  }
103
124
  };
104
125
  };
@@ -176,7 +197,6 @@ export {
176
197
  intersectionObserverDelegateLight,
177
198
  intersectionObserverDelegateShadow,
178
199
  intersectionObserverLight,
179
- intersectionObserverShadow,
180
- intersectionObserverThis
200
+ intersectionObserverShadow
181
201
  };
182
202
  //# sourceMappingURL=intersectionObserver.js.map