@meekojs/meeko 0.0.3 → 0.0.4

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 (144) hide show
  1. package/README.md +18 -1
  2. package/dist/autoimports-ts.d.ts +26 -0
  3. package/dist/autoimports-ts.js +127 -0
  4. package/dist/autoimports-ts.js.map +1 -0
  5. package/dist/autoimports.d.ts +21 -0
  6. package/dist/autoimports.js +285 -0
  7. package/dist/autoimports.js.map +1 -0
  8. package/dist/check.js +35 -23
  9. package/dist/check.js.map +1 -0
  10. package/dist/cli.js +33 -4
  11. package/dist/cli.js.map +1 -0
  12. package/dist/compiler/import-graph.d.ts +8 -0
  13. package/dist/compiler/import-graph.js +33 -0
  14. package/dist/compiler/import-graph.js.map +1 -0
  15. package/dist/compiler/mapping.js +1 -0
  16. package/dist/compiler/mapping.js.map +1 -0
  17. package/dist/compiler/project-root.d.ts +2 -0
  18. package/dist/compiler/project-root.js +18 -0
  19. package/dist/compiler/project-root.js.map +1 -0
  20. package/dist/compiler/sfc.js +1 -0
  21. package/dist/compiler/sfc.js.map +1 -0
  22. package/dist/compiler/sourcemap.d.ts +3 -0
  23. package/dist/compiler/sourcemap.js +75 -0
  24. package/dist/compiler/sourcemap.js.map +1 -0
  25. package/dist/compiler/template.js +1 -0
  26. package/dist/compiler/template.js.map +1 -0
  27. package/dist/compiler.js +11 -5
  28. package/dist/compiler.js.map +1 -0
  29. package/dist/devtools-ui/index.js +1 -0
  30. package/dist/devtools-ui/index.js.map +1 -0
  31. package/dist/devtools.js +1 -0
  32. package/dist/devtools.js.map +1 -0
  33. package/dist/dom.d.ts +8 -1
  34. package/dist/dom.js +10 -5
  35. package/dist/dom.js.map +1 -0
  36. package/dist/framework/check-app.d.ts +5 -0
  37. package/dist/framework/check-app.js +59 -0
  38. package/dist/framework/check-app.js.map +1 -0
  39. package/dist/framework/client.d.ts +45 -0
  40. package/dist/framework/client.js +146 -0
  41. package/dist/framework/client.js.map +1 -0
  42. package/dist/framework/clients.d.ts +82 -0
  43. package/dist/framework/clients.js +182 -0
  44. package/dist/framework/clients.js.map +1 -0
  45. package/dist/framework/config-type.d.ts +10 -0
  46. package/dist/framework/config-type.js +4 -0
  47. package/dist/framework/config-type.js.map +1 -0
  48. package/dist/framework/config.d.ts +15 -0
  49. package/dist/framework/config.js +138 -0
  50. package/dist/framework/config.js.map +1 -0
  51. package/dist/framework/contracts-generate.d.ts +8 -0
  52. package/dist/framework/contracts-generate.js +227 -0
  53. package/dist/framework/contracts-generate.js.map +1 -0
  54. package/dist/framework/generate.d.ts +7 -0
  55. package/dist/framework/generate.js +67 -0
  56. package/dist/framework/generate.js.map +1 -0
  57. package/dist/framework/init.d.ts +2 -0
  58. package/dist/framework/init.js +362 -0
  59. package/dist/framework/init.js.map +1 -0
  60. package/dist/framework/modules.d.ts +22 -0
  61. package/dist/framework/modules.js +29 -0
  62. package/dist/framework/modules.js.map +1 -0
  63. package/dist/framework/page.d.ts +60 -0
  64. package/dist/framework/page.js +42 -0
  65. package/dist/framework/page.js.map +1 -0
  66. package/dist/framework/prerender.d.ts +14 -0
  67. package/dist/framework/prerender.js +104 -0
  68. package/dist/framework/prerender.js.map +1 -0
  69. package/dist/framework/router.d.ts +39 -0
  70. package/dist/framework/router.js +173 -0
  71. package/dist/framework/router.js.map +1 -0
  72. package/dist/framework/server.d.ts +51 -0
  73. package/dist/framework/server.js +192 -0
  74. package/dist/framework/server.js.map +1 -0
  75. package/dist/framework/socket-contracts-generate.d.ts +5 -0
  76. package/dist/framework/socket-contracts-generate.js +159 -0
  77. package/dist/framework/socket-contracts-generate.js.map +1 -0
  78. package/dist/framework/socket.d.ts +70 -0
  79. package/dist/framework/socket.js +150 -0
  80. package/dist/framework/socket.js.map +1 -0
  81. package/dist/framework/state.d.ts +15 -0
  82. package/dist/framework/state.js +72 -0
  83. package/dist/framework/state.js.map +1 -0
  84. package/dist/framework-server/auto-clients.d.ts +3 -0
  85. package/dist/framework-server/auto-clients.js +27 -0
  86. package/dist/framework-server/auto-clients.js.map +1 -0
  87. package/dist/framework-server/context.d.ts +21 -0
  88. package/dist/framework-server/context.js +22 -0
  89. package/dist/framework-server/context.js.map +1 -0
  90. package/dist/framework-server/contracts.d.ts +64 -0
  91. package/dist/framework-server/contracts.js +129 -0
  92. package/dist/framework-server/contracts.js.map +1 -0
  93. package/dist/framework-server/discovery.d.ts +40 -0
  94. package/dist/framework-server/discovery.js +252 -0
  95. package/dist/framework-server/discovery.js.map +1 -0
  96. package/dist/framework-server/local.d.ts +19 -0
  97. package/dist/framework-server/local.js +98 -0
  98. package/dist/framework-server/local.js.map +1 -0
  99. package/dist/framework-server/node-upgrade.d.ts +23 -0
  100. package/dist/framework-server/node-upgrade.js +78 -0
  101. package/dist/framework-server/node-upgrade.js.map +1 -0
  102. package/dist/framework-server/node-websocket.d.ts +16 -0
  103. package/dist/framework-server/node-websocket.js +125 -0
  104. package/dist/framework-server/node-websocket.js.map +1 -0
  105. package/dist/framework-server/openapi.d.ts +17 -0
  106. package/dist/framework-server/openapi.js +118 -0
  107. package/dist/framework-server/openapi.js.map +1 -0
  108. package/dist/framework-server/session-stores.d.ts +66 -0
  109. package/dist/framework-server/session-stores.js +96 -0
  110. package/dist/framework-server/session-stores.js.map +1 -0
  111. package/dist/framework-server/sessions.d.ts +64 -0
  112. package/dist/framework-server/sessions.js +136 -0
  113. package/dist/framework-server/sessions.js.map +1 -0
  114. package/dist/framework-server/socket.d.ts +83 -0
  115. package/dist/framework-server/socket.js +161 -0
  116. package/dist/framework-server/socket.js.map +1 -0
  117. package/dist/framework-server.d.ts +21 -0
  118. package/dist/framework-server.js +12 -0
  119. package/dist/framework-server.js.map +1 -0
  120. package/dist/framework.d.ts +29 -0
  121. package/dist/framework.js +13 -0
  122. package/dist/framework.js.map +1 -0
  123. package/dist/hmr.js +1 -0
  124. package/dist/hmr.js.map +1 -0
  125. package/dist/index.d.ts +3 -3
  126. package/dist/index.js +2 -1
  127. package/dist/index.js.map +1 -0
  128. package/dist/init.js +4 -2
  129. package/dist/init.js.map +1 -0
  130. package/dist/internal.js +1 -0
  131. package/dist/internal.js.map +1 -0
  132. package/dist/node.d.ts +12 -0
  133. package/dist/node.js +52 -0
  134. package/dist/node.js.map +1 -0
  135. package/dist/reactivity.d.ts +12 -0
  136. package/dist/reactivity.js +40 -3
  137. package/dist/reactivity.js.map +1 -0
  138. package/dist/server.js +1 -0
  139. package/dist/server.js.map +1 -0
  140. package/dist/types.js +23 -8
  141. package/dist/types.js.map +1 -0
  142. package/dist/vite.js +91 -6
  143. package/dist/vite.js.map +1 -0
  144. package/package.json +14 -3
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compiler.js","sourceRoot":"","sources":["../src/compiler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,EAAE,MAAM,yBAAyB,CAAC;AACzC,OAAO,OAAO,MAAM,SAAS,CAAC;AAC9B,OAAO,cAAc,MAAM,yBAAyB,CAAC;AACrD,OAAO,EAAE,qBAAqB,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAE1E,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAEnE,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAwEvD,SAAS,aAAa;IACpB,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;AAChF,CAAC;AAcD,SAAS,KAAK,CAAC,KAAa;IAC1B,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;AAC/B,CAAC;AAED,SAAS,kBAAkB,CAAC,UAAkB,EAAE,MAAc,EAAE,QAAgB,EAAE,MAAc;IAC9F,MAAM,MAAM,GAAG,mBAAmB,CAAC;IACnC,MAAM,MAAM,GAAG,EAAE,CAAC,gBAAgB,CAAC,QAAQ,EAAE,GAAG,MAAM,GAAG,UAAU,IAAI,EAAE,EAAE,CAAC,YAAY,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC,UAAU,CAAC,EAAE,CAA+E,CAAC;IACvM,MAAM,KAAK,GAAG,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;IACzC,IAAI,KAAK,EAAE,CAAC;QACV,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,KAAK,IAAI,MAAM,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;QAC1G,MAAM,YAAY,CAAC,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,CAAC,4BAA4B,CAAC,KAAK,CAAC,WAAW,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,QAAQ,CAAC,CAAC;IAC/H,CAAC;AACH,CAAC;AAED,SAAS,oBAAoB,CAAC,IAAkB,EAAE,IAAY,EAAE,OAAwB;IACtF,MAAM,QAAQ,GAAG,IAAI,CAAC,kBAAkB,EAAE,KAAK,EAAE,CAAC,IAAI,CAAC,CAAC;IACxD,IAAI,CAAC,QAAQ;QAAE,OAAO,OAAO,CAAC,cAAc,GAAG,CAAC,IAAI,CAAC,kBAAkB,EAAE,WAAW,IAAI,CAAC,CAAC,CAAC;IAC3F,MAAM,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,cAAc,GAAG,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC,cAAc,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC;IAC7H,MAAM,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAChC,IAAI,MAAM,GAAG,CAAC;QAAE,OAAO,OAAO,CAAC,cAAc,GAAG,QAAQ,CAAC,WAAW,CAAC;IACrE,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACpC,MAAM,UAAU,GAAG,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,SAAS,EAAE,CAAC,MAAM,CAAC;IAC3D,MAAM,UAAU,GAAG,MAAM,GAAG,CAAC,GAAG,UAAU,CAAC;IAC3C,MAAM,MAAM,GAAG,GAAG,CAAC,UAAU,CAAC,KAAK,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,KAAK,GAAG,CAAC;IAClE,OAAO,OAAO,CAAC,cAAc,GAAG,QAAQ,CAAC,WAAW,GAAG,UAAU,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACvF,CAAC;AAED,SAAS,aAAa,CAAC,UAAkB,EAAE,MAAmC;IAC5E,IAAI,MAAM,CAAC,IAAI,KAAK,CAAC;QAAE,OAAO,UAAU,CAAC;IACzC,MAAM,MAAM,GAAG,mBAAmB,CAAC;IACnC,MAAM,IAAI,GAAG,EAAE,CAAC,gBAAgB,CAAC,wBAAwB,EAAE,GAAG,MAAM,GAAG,UAAU,IAAI,EAAE,EAAE,CAAC,YAAY,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;IACvI,MAAM,OAAO,GAAwD,EAAE,CAAC;IACxE,SAAS,UAAU,CAAC,IAAmB;QACrC,KAAK,IAAI,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;YAC9D,IAAI,CAAC,EAAE,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC,IAAI,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,EAAE,CAAC,YAAY,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,SAAS,CAAC,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,CAAC;gBAAE,OAAO,IAAI,CAAC;YAChM,IAAI,EAAE,CAAC,YAAY,CAAC,MAAM,CAAC;gBAAE,MAAM;QACrC,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IACD,SAAS,KAAK,CAAC,IAAa;QAC1B,IAAI,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC;YAC1B,MAAM,WAAW,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC1C,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;YAC3B,IAAI,WAAW,IAAI,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;mBACzC,CAAC,CAAC,EAAE,CAAC,0BAA0B,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,IAAI,KAAK,IAAI,CAAC;mBAChE,CAAC,CAAC,EAAE,CAAC,oBAAoB,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,IAAI,KAAK,IAAI,CAAC;mBAC1D,CAAC,CAAC,EAAE,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,IAAI,KAAK,IAAI,CAAC;mBACjD,CAAC,CAAC,EAAE,CAAC,qBAAqB,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC;gBACjE,MAAM,SAAS,GAAG,EAAE,CAAC,6BAA6B,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,IAAI,KAAK,IAAI,CAAC;gBACnF,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,EAAE,IAAI,CAAC,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,MAAM,WAAW,GAAG,CAAC,CAAC,CAAC,IAAI,WAAW,GAAG,EAAE,CAAC,CAAC;YAC5K,CAAC;QACH,CAAC;QACD,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAC/B,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,CAAC;IACZ,IAAI,MAAM,GAAG,UAAU,CAAC;IACxB,KAAK,MAAM,MAAM,IAAI,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC;QACvC,IAAI,MAAM,CAAC,KAAK,IAAI,CAAC,IAAI,MAAM,CAAC,GAAG,IAAI,UAAU,CAAC,MAAM;YAAE,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAC5I,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,SAAS,CAAC,KAAa,EAAE,QAA0B,EAAE,OAAwB,EAAE,MAAc;IACpG,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,MAAM,OAAO,GAAG,eAAe,CAAC;IAChC,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QAC5C,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;QAC1B,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QAC9C,IAAI,UAAU;YAAE,KAAK,CAAC,IAAI,CAAC,sBAAsB,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;QACvE,MAAM,aAAa,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QACrC,MAAM,UAAU,GAAG,aAAa,CAAC,IAAI,EAAE,CAAC;QACxC,IAAI,CAAC,UAAU;YAAE,MAAM,YAAY,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,QAAQ,EAAE,SAAS,EAAE,2BAA2B,EAAE,MAAM,GAAG,KAAK,CAAC,CAAC;QAC9H,kBAAkB,CAAC,UAAU,EAAE,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,QAAQ,EAAE,MAAM,GAAG,KAAK,GAAG,CAAC,GAAG,aAAa,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC;QACzH,MAAM,EAAE,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;QAC9B,MAAM,gBAAgB,GAAG,MAAM,GAAG,KAAK,GAAG,CAAC,GAAG,aAAa,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QAChF,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE,gBAAgB,EAAE,CAAC,CAAC;QAClE,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,kBAAkB,EAAE,KAAK,CAAC,yBAAyB,UAAU,CAAC,UAAU,EAAE,gBAAgB,CAAC,OAAO,KAAK,CAAC,mBAAmB,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC;QAC3J,MAAM,GAAG,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;IACnC,CAAC;IACD,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IACjC,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC;QAAE,MAAM,YAAY,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,QAAQ,EAAE,SAAS,EAAE,8BAA8B,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;IAC7J,IAAI,IAAI;QAAE,KAAK,CAAC,IAAI,CAAC,sBAAsB,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC3D,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,UAAU,CAAC,IAAkB,EAAE,QAA0B,EAAE,OAAwB;IAC1F,IAAI,IAAI,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;QAC9B,OAAO,SAAS,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,cAAc,GAAG,CAAC,IAAI,CAAC,kBAAkB,EAAE,WAAW,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC,CAAC;IACvJ,CAAC;IACD,IAAI,IAAI,CAAC,QAAQ,KAAK,UAAU;QAAE,OAAO,KAAK,CAAC,OAAO,IAAI,CAAC,KAAK,IAAI,EAAE,KAAK,CAAC,CAAC;IAC7E,IAAI,CAAC,IAAI,CAAC,OAAO;QAAE,OAAO,CAAC,IAAI,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC,CAAC;IAEhI,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;IACnC,MAAM,QAAQ,GAAG,OAAO,CAAC,cAAc,GAAG,CAAC,IAAI,CAAC,kBAAkB,EAAE,WAAW,IAAI,CAAC,CAAC,CAAC;IACtF,MAAM,SAAS,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC;IAC9E,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC;IACzE,IAAI,SAAS,IAAI,IAAI;QAAE,MAAM,YAAY,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,QAAQ,EAAE,SAAS,EAAE,6CAA6C,EAAE,QAAQ,CAAC,CAAC;IAChJ,IAAI,SAAS,IAAI,IAAI,EAAE,CAAC;QACtB,MAAM,KAAK,GAAG,aAAa,EAAE,CAAC;QAC9B,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE,YAAY,CAAC,CAAC,CAAC;QACrG,MAAM,KAAK,GAAiB,EAAE,GAAG,IAAI,EAAE,KAAK,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;QAC/G,MAAM,IAAI,GAAG,iBAAiB,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;QACtD,MAAM,EAAE,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;QAChC,IAAI,SAAS,EAAE,CAAC;YACd,MAAM,MAAM,GAAG,oBAAoB,CAAC,IAAI,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;YAC9D,kBAAkB,CAAC,SAAS,CAAC,KAAK,EAAE,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;YAC9E,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,EAAE,EAAE,UAAU,EAAE,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;YACrH,OAAO,oBAAoB,EAAE,KAAK,UAAU,CAAC,SAAS,CAAC,KAAK,EAAE,MAAM,CAAC,WAAW,IAAI,GAAG,CAAC;QAC1F,CAAC;QACD,MAAM,QAAQ,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,KAAK,SAAS,CAAC,EAAE,KAAK,CAAC;QACpF,MAAM,GAAG,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,KAAK,UAAU,CAAC,EAAE,KAAK,CAAC;QAChF,MAAM,SAAS,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,KAAK,YAAY,CAAC,EAAE,KAAK,IAAI,OAAO,CAAC;QACnG,IAAI,CAAC,QAAQ,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;YACpL,MAAM,YAAY,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,QAAQ,EAAE,SAAS,EAAE,iEAAiE,EAAE,QAAQ,CAAC,CAAC;QAC/I,CAAC;QACD,IAAI,CAAC,GAAG;YAAE,MAAM,YAAY,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,QAAQ,EAAE,SAAS,EAAE,0BAA0B,EAAE,QAAQ,CAAC,CAAC;QAChH,MAAM,MAAM,GAAG,oBAAoB,CAAC,IAAI,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;QAC9D,MAAM,SAAS,GAAG,oBAAoB,CAAC,IAAI,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;QAClE,kBAAkB,CAAC,IAAK,CAAC,KAAK,EAAE,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAC1E,kBAAkB,CAAC,GAAG,EAAE,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QACrE,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,UAAU,EAAE,IAAK,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;QACjJ,OAAO,qBAAqB,EAAE,KAAK,UAAU,CAAC,IAAK,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,QAAQ,KAAK,SAAS,QAAQ,UAAU,CAAC,GAAG,EAAE,SAAS,CAAC,MAAM,QAAQ,KAAK,SAAS,QAAQ,IAAI,GAAG,CAAC;IAC9K,CAAC;IACD,IAAI,SAAS,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;QAC1G,MAAM,YAAY,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,QAAQ,EAAE,SAAS,EAAE,+BAA+B,EAAE,QAAQ,CAAC,CAAC;IAC7G,CAAC;IACD,OAAO,iBAAiB,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;AACpD,CAAC;AAED,SAAS,iBAAiB,CAAC,IAAkB,EAAE,QAA0B,EAAE,OAAwB;IACjG,IAAI,IAAI,CAAC,OAAO,KAAK,UAAU,EAAE,CAAC;QAChC,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,UAAU,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC,CAAC;IACxH,CAAC;IACD,IAAI,IAAI,CAAC,OAAO,KAAK,WAAW,EAAE,CAAC;QACjC,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC;QAC5B,MAAM,kBAAkB,GAAG,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;QACpF,MAAM,SAAS,GAAG,kBAAkB,EAAE,KAAK,IAAI,EAAE,CAAC;QAClD,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE;YAAE,MAAM,YAAY,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,QAAQ,EAAE,SAAS,EAAE,wCAAwC,EAAE,QAAQ,CAAC,CAAC;QAC3I,MAAM,eAAe,GAAG,oBAAoB,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;QAClE,kBAAkB,CAAC,SAAS,EAAE,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,QAAQ,EAAE,eAAe,CAAC,CAAC;QACjF,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,KAAK,OAAO,IAAI,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;YACxG,MAAM,YAAY,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,QAAQ,EAAE,SAAS,EAAE,qEAAqE,EAAE,QAAQ,CAAC,CAAC;QACnJ,CAAC;QACD,MAAM,KAAK,GAA8B,EAAE,CAAC;QAC5C,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,KAAK,IAAI,EAAE,EAAE,CAAC;YACzC,IAAI,SAAS,CAAC,IAAI,KAAK,IAAI;gBAAE,SAAS;YACtC,MAAM,OAAO,GAAG,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,EAAE,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC,IAAI,CAAC;YAC7G,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBACjF,MAAM,YAAY,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,QAAQ,EAAE,SAAS,EAAE,mDAAmD,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC;YACxI,CAAC;YACD,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAC9B,MAAM,MAAM,GAAG,oBAAoB,CAAC,IAAI,EAAE,SAAS,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;YACnE,kBAAkB,CAAC,SAAS,CAAC,KAAK,EAAE,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;YAC9E,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,SAAS,CAAC,KAAK,GAAG,CAAC,EAAE,UAAU,EAAE,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;QAC7F,CAAC;QACD,MAAM,EAAE,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;QAChC,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,eAAe,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;QACtF,MAAM,WAAW,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,UAAU,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAC3J,MAAM,MAAM,GAAG,UAAU,CAAC,KAAK,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,GAAG,GAAG,QAAQ,CAAC,CAAC;QAC1F,OAAO,2BAA2B,EAAE,KAAK,UAAU,CAAC,SAAS,EAAE,eAAe,CAAC,KAAK,MAAM,qBAAqB,CAAC;IAClH,CAAC;IACD,MAAM,GAAG,GAAG,IAAI,CAAC,OAAQ,CAAC;IAE1B,MAAM,KAAK,GAAuF,EAAE,CAAC;IACrG,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,IAAI,EAAE,EAAE,CAAC;QACpC,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;YAChC,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAChC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;gBAAE,MAAM,YAAY,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,QAAQ,EAAE,SAAS,EAAE,uBAAuB,IAAI,EAAE,EAAE,OAAO,CAAC,cAAc,GAAG,CAAC,IAAI,CAAC,kBAAkB,EAAE,WAAW,IAAI,CAAC,CAAC,CAAC,CAAC;YACjM,MAAM,EAAE,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;YAC/B,MAAM,MAAM,GAAG,oBAAoB,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;YAC9D,kBAAkB,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;YACzE,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;YACnE,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,iBAAiB,EAAE,KAAK,EAAE,CAAC,CAAC;QAClE,CAAC;aAAM,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YACzC,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAChC,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC/D,MAAM,YAAY,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,QAAQ,EAAE,SAAS,EAAE,8BAA8B,IAAI,EAAE,EAAE,OAAO,CAAC,cAAc,GAAG,CAAC,IAAI,CAAC,kBAAkB,EAAE,WAAW,IAAI,CAAC,CAAC,CAAC,CAAC;YAC9K,CAAC;YACD,MAAM,MAAM,GAAG,oBAAoB,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;YAC9D,kBAAkB,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;YACzE,MAAM,EAAE,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;YACnC,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;YACvE,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,iBAAiB,EAAE,KAAK,EAAE,CAAC,CAAC;YAChE,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,UAAU,EAAE,2BAA2B,KAAK,CAAC,IAAI,CAAC,KAAK,UAAU,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC;QAC5H,CAAC;aAAM,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACrC,MAAM,YAAY,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,QAAQ,EAAE,SAAS,EAAE,mCAAmC,IAAI,CAAC,IAAI,EAAE,EAAE,OAAO,CAAC,cAAc,GAAG,CAAC,IAAI,CAAC,kBAAkB,EAAE,WAAW,IAAI,CAAC,CAAC,CAAC,CAAC;QACxL,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,IAAI,CAAC,IAAI,KAAK,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC;QAC1F,CAAC;IACH,CAAC;IACD,IAAI,OAAO,CAAC,cAAc;QAAE,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,OAAO,CAAC,cAAc,KAAK,EAAE,CAAC,CAAC;IACnG,MAAM,YAAY,GAAa,CAAC,KAAK,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC;IAClD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS;YAAE,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;;YAC3D,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IAC5C,CAAC;IACD,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;IAC9B,MAAM,OAAO,GAAG,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACzC,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;IAC9I,IAAI,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC;QAAE,OAAO,OAAO,CAAC;IAC1C,MAAM,QAAQ,GAAG,CAAC,IAAI,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC;IAC9F,OAAO,CAAC,OAAO,EAAE,GAAG,QAAQ,EAAE,KAAK,CAAC,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAChE,CAAC;AAED,SAAS,eAAe,CAAC,KAAa;IACpC,OAAO,KAAK,CAAC,UAAU,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,UAAU,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC,UAAU,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;AAC1F,CAAC;AAED,SAAS,QAAQ,CAAC,GAAW,EAAE,cAAsB;IACnD,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAChC,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,EAAE;QACtB,IAAI,MAAM,GAA6B,IAAI,CAAC,MAAM,CAAC;QACnD,OAAO,MAAM,EAAE,CAAC;YACd,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ,IAAI,aAAa,CAAC,IAAI,CAAE,MAAyB,CAAC,IAAI,CAAC;gBAAE,OAAO;YAC5F,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;QACzB,CAAC;QACD,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC;YAAE,MAAM,IAAI,CAAC,KAAK,CAAC,+CAA+C,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;QACtJ,IAAI,CAAC,QAAQ,GAAG,cAAc,CAAC,CAAC,SAAS,EAAE,EAAE;YAC3C,SAAS,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE;gBAC1B,MAAM,aAAa,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;gBAC3G,MAAM,SAAS,GAAG,cAAc,CAAC,SAAS,CAAC,EAAE,SAAS,EAAE,cAAc,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;gBACtG,IAAI,aAAa;oBAAE,QAAQ,CAAC,YAAY,CAAC,aAAa,EAAE,SAAS,CAAC,CAAC;;oBAC9D,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;YAClC,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAChC,CAAC,CAAC,CAAC;IACH,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC;AACzB,CAAC;AAED,SAAS,aAAa,CAAC,OAAmB,EAAE,MAAc,EAAE,QAAgB;IAC1E,MAAM,IAAI,GAAG,EAAE,CAAC,gBAAgB,CAAC,QAAQ,EAAE,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,YAAY,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC,UAAU,CAAC,EAAE,CAA+E,CAAC;IAC1L,MAAM,WAAW,GAAG,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;IAC7C,IAAI,WAAW,EAAE,CAAC;QAChB,MAAM,OAAO,GAAG,EAAE,CAAC,4BAA4B,CAAC,WAAW,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;QAC/E,MAAM,YAAY,CAAC,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,CAAC,YAAY,GAAG,CAAC,WAAW,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC;IAC5G,CAAC;IACD,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,IAAI,SAA6B,CAAC;IAClC,IAAI,eAAmC,CAAC;IACxC,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;QACxC,IAAI,EAAE,CAAC,mBAAmB,CAAC,SAAS,CAAC,EAAE,CAAC;YACtC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,YAAY,GAAG,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACnG,SAAS;QACX,CAAC;QACD,IAAI,EAAE,CAAC,sBAAsB,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,sBAAsB,CAAC,SAAS,CAAC,EAAE,CAAC;YACjF,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,YAAY,GAAG,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACjG,SAAS;QACX,CAAC;QACD,IAAI,EAAE,CAAC,mBAAmB,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,UAAU;YAC5D,CAAC,SAAS,CAAC,YAAY,IAAI,EAAE,CAAC,cAAc,CAAC,SAAS,CAAC,YAAY,CAAC,IAAI,SAAS,CAAC,YAAY,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;YACnJ,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,YAAY,GAAG,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACjG,SAAS;QACX,CAAC;QACD,IAAI,EAAE,CAAC,mBAAmB,CAAC,SAAS,CAAC,EAAE,CAAC;YACtC,IAAI,SAAS,CAAC,eAAe,CAAC,YAAY,CAAC,MAAM,KAAK,CAAC;gBAAE,MAAM,YAAY,CAAC,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,sDAAsD,EAAE,OAAO,CAAC,YAAY,GAAG,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;YAClN,KAAK,MAAM,WAAW,IAAI,SAAS,CAAC,eAAe,CAAC,YAAY,EAAE,CAAC;gBACjE,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,WAAW,CAAC,IAAI,CAAC;oBAAE,MAAM,YAAY,CAAC,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,mEAAmE,EAAE,OAAO,CAAC,YAAY,GAAG,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;gBAChN,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;gBACnC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACjB,IAAI,WAAW,CAAC,WAAW,IAAI,EAAE,CAAC,gBAAgB,CAAC,WAAW,CAAC,WAAW,CAAC,IAAI,WAAW,CAAC,WAAW,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,aAAa,EAAE,CAAC;oBAClJ,IAAI,SAAS;wBAAE,MAAM,YAAY,CAAC,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,qDAAqD,EAAE,OAAO,CAAC,YAAY,GAAG,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;oBACzK,MAAM,YAAY,GAAG,WAAW,CAAC,WAAW,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,CAAC;oBAChE,SAAS,GAAG,YAAY,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;oBACxC,IAAI,CAAC,SAAS;wBAAE,MAAM,YAAY,CAAC,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,sCAAsC,EAAE,OAAO,CAAC,YAAY,GAAG,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;oBAC3J,eAAe,GAAG,OAAO,CAAC,YAAY,GAAG,YAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;oBACtE,KAAK,CAAC,IAAI,CAAC,SAAS,IAAI,KAAK,UAAU,CAAC,SAAS,EAAE,eAAe,CAAC,aAAa,CAAC,CAAC;gBACpF,CAAC;qBAAM,CAAC;oBACN,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,YAAY,GAAG,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBACnG,CAAC;YACH,CAAC;YACD,SAAS;QACX,CAAC;QACD,IAAI,EAAE,CAAC,qBAAqB,CAAC,SAAS,CAAC,IAAI,SAAS,CAAC,IAAI,EAAE,CAAC;YAC1D,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAChC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,YAAY,GAAG,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACjG,SAAS;QACX,CAAC;QACD,MAAM,YAAY,CAAC,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,2CAA2C,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,EAAE,OAAO,CAAC,YAAY,GAAG,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;IAC/K,CAAC;IACD,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,IAAI,uBAAuB,EAAE,eAAe,EAAE,CAAC;AAC5G,CAAC;AAED,SAAS,aAAa,CAAC,QAA0B,EAAE,OAAwB,EAAE,GAAY,EAAE,MAAM,GAAgC,IAAI,GAAG,EAAE;IACxI,MAAM,UAAU,GAAa,EAAE,CAAC;IAChC,MAAM,gBAAgB,GAAG,CAAC,UAAkB,EAAE,MAAc,EAAE,gBAAgB,GAAG,MAAM,EAAU,EAAE,CACjG,UAAU,CAAC,aAAa,CAAC,UAAU,EAAE,gBAAgB,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC;IACrF,KAAK,MAAM,EAAE,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE,IAAI,QAAQ,CAAC,KAAK,EAAE,CAAC;QACxD,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC7C,MAAM,QAAQ,GAAG,GAAG,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,MAAM,UAAU,EAAE,GAAG,CAAC;QAC5F,MAAM,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,aAAa,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,WAAW,KAAK,CAAC,IAAI,aAAa,KAAK,CAAC,MAAM,iBAAiB,KAAK,CAAC,UAAU,CAAC,kBAAkB,CAAC,CAAC,CAAC,EAAE,CAAC;QACjK,UAAU,CAAC,IAAI,CAAC,2CAA2C,EAAE,WAAW,gBAAgB,CAAC,UAAU,EAAE,MAAM,CAAC,KAAK,KAAK,CAAC,QAAQ,CAAC,GAAG,MAAM,KAAK,CAAC,CAAC;IAClJ,CAAC;IACD,KAAK,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,IAAI,QAAQ,CAAC,UAAU,EAAE,CAAC;QACnE,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC7C,MAAM,QAAQ,GAAG,GAAG,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,MAAM,eAAe,IAAI,GAAG,CAAC;QACnG,MAAM,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,aAAa,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,WAAW,KAAK,CAAC,IAAI,aAAa,KAAK,CAAC,MAAM,iBAAiB,KAAK,CAAC,UAAU,CAAC,uBAAuB,CAAC,CAAC,CAAC,EAAE,CAAC;QACtK,UAAU,CAAC,IAAI,CAAC,gDAAgD,EAAE,KAAK,KAAK,CAAC,IAAI,CAAC,WAAW,gBAAgB,CAAC,UAAU,EAAE,MAAM,CAAC,KAAK,KAAK,CAAC,QAAQ,CAAC,GAAG,MAAM,KAAK,CAAC,CAAC;IACvK,CAAC;IACD,KAAK,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,IAAI,QAAQ,CAAC,MAAM,EAAE,CAAC;QAC/D,MAAM,SAAS,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC;YAC1G,CAAC,CAAC,+BAA+B,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC;QAC5D,MAAM,OAAO,GAAG,UAAU,CAAC,8BAA8B,SAAS,0CAA0C,SAAS,MAAM,gBAAgB,CAAC,UAAU,EAAE,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC;QAChM,UAAU,CAAC,IAAI,CAAC;iDAC6B,EAAE,KAAK,KAAK,CAAC,IAAI,CAAC;UACzD,OAAO;;MAEX,CAAC,CAAC;IACN,CAAC;IACD,MAAM,mBAAmB,GAAa,EAAE,CAAC;IACzC,KAAK,MAAM,KAAK,IAAI,QAAQ,CAAC,UAAU,EAAE,CAAC;QACxC,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;QACnD,MAAM,QAAQ,GAAG,GAAG,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,MAAM,eAAe,KAAK,CAAC,SAAS,GAAG,CAAC;QAC9G,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,gBAAgB,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACjK,MAAM,MAAM,GAAG,UAAU,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QACtE,mBAAmB,CAAC,IAAI,CAAC,gDAAgD,KAAK,CAAC,EAAE,WAAW,gBAAgB,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,eAAe,CAAC,YAAY,MAAM,MAAM,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IACpM,CAAC;IACD,UAAU,CAAC,OAAO,CAAC,GAAG,mBAAmB,CAAC,CAAC;IAC3C,KAAK,MAAM,KAAK,IAAI,QAAQ,CAAC,OAAO,EAAE,CAAC;QACrC,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;YAC/B,UAAU,CAAC,IAAI,CAAC,yCAAyC,KAAK,CAAC,EAAE,WAAW,gBAAgB,CAAC,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,MAAM,CAAC,WAAW,aAAa,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,oBAAoB,aAAa,CAAC,KAAK,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;QAC5P,CAAC;aAAM,CAAC;YACN,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC;YACpC,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;YACnC,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;YACpC,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC;YACpC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,EAAE,oBAAoB,CAAC,CAAC;YACtD,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,EAAE,qBAAqB,CAAC,CAAC;YACxD,MAAM,cAAc,GAAG,aAAa,CAAC,KAAK,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,EAAE,WAAW,CAAC,CAAC;YAChF,iFAAiF;YACjF,MAAM,UAAU,GAAG,cAAc,CAAC,QAAQ,CAAC,qBAAqB,CAAC,CAAC;YAClE,UAAU,CAAC,IAAI,CAAC,0CAA0C,KAAK,CAAC,EAAE,WAAW,gBAAgB,CAAC,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,QAAQ,KAAK,KAAK,CAAC,SAAS,QAAQ,gBAAgB,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,SAAS,EAAE,WAAW,CAAC,MAAM,KAAK,CAAC,QAAQ,KAAK,KAAK,CAAC,SAAS,QAAQ,aAAa,CAAC,KAAK,CAAC,MAAM,EAAE,WAAW,CAAC,iDAAiD,cAAc,OAAO,UAAU,KAAK,CAAC,CAAC;QACvZ,CAAC;IACH,CAAC;IACD,OAAO;;MAEH,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;;wFAE6D,CAAC;AACzF,CAAC;AAED,oFAAoF;AACpF,MAAM,UAAU,OAAO,CAAC,MAAc,EAAE,QAAQ,GAAG,iBAAiB,EAAE,OAAO,GAAmB,EAAE;IAChG,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IAC/D,MAAM,WAAW,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACrF,MAAM,cAAc,GAAG,KAAK,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,KAAK,QAAQ,CAAC;QACvF,CAAC,CAAC,gBAAgB,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE;QACnF,CAAC,CAAC,SAAS,CAAC;IACd,IAAI,GAAW,CAAC;IAChB,IAAI,CAAC;QACH,GAAG,GAAG,cAAc,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,IAAI,EAAE,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,OAAO,IAAI,EAAE,CAAC;IAC/F,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,OAAO,CAAC,cAAc,IAAI,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YAC/G,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;YAChD,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;YACjG,MAAM,YAAY,CAAC,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,YAAY,GAAG,KAAK,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAC/G,CAAC;QACD,MAAM,KAAK,CAAC;IACd,CAAC;IACD,MAAM,MAAM,GAAG,aAAa,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;IACzD,MAAM,mBAAmB,GAAG,aAAa,EAAE,CAAC;IAC5C,MAAM,OAAO,GAAoB,EAAE,MAAM,EAAE,QAAQ,EAAE,cAAc,EAAE,QAAQ,CAAC,YAAY,EAAE,cAAc,EAAE,QAAQ,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,CAAC;IACzK,MAAM,IAAI,GAAG,UAAU,CAAC,MAAM,EAAE,mBAAmB,EAAE,OAAO,CAAC,CAAC;IAC9D,MAAM,WAAW,GAAG,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;IAC5D,MAAM,QAAQ,GAAG,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC9C,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,KAAK,IAAI,CAAC;IACjC,MAAM,SAAS,GAAG,oGAAoG,QAAQ,kBAAkB,CAAC;IACjJ,MAAM,WAAW,GAAG,GAAG;QACrB,CAAC,CAAC,mRAAmR,KAAK,CAAC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,WAAW,KAAK,CAAC,QAAQ,CAAC,mcAAmc;QACrxB,CAAC,CAAC,iHAAiH,CAAC;IACtH,MAAM,WAAW,GAAG,GAAG,CAAC,CAAC,CAAC,0BAA0B,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;IACjF,MAAM,UAAU,GAAG,8BAA8B,CAAC;IAClD,MAAM,iBAAiB,GAAG,GAAG,CAAC,CAAC,CAAC,uBAAuB,CAAC,CAAC,CAAC,EAAE,CAAC;IAC7D,MAAM,YAAY,GAAG,GAAG,CAAC,CAAC,CAAC,sCAAsC,CAAC,CAAC,CAAC,gCAAgC,CAAC;IACrG,MAAM,SAAS,GAAG,WAAW,CAAC,eAAe,KAAK,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,WAAW,CAAC,SAAS,EAAE,WAAW,CAAC,eAAe,CAAC,CAAC;IACrJ,MAAM,UAAU,GAAG,gHAAgH,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,+BAA+B,SAAS,QAAQ,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,QAAQ,wCAAwC,SAAS,yBAAyB,KAAK,CAAC,GAAG,CAAC,MAAM,WAAW,4OAA4O,QAAQ,yCAAyC,IAAI,+MAA+M,UAAU,2FAA2F,SAAS,kBAAkB,IAAI,0GAA0G,UAAU,qFAAqF,YAAY,8FAA8F,UAAU,GAAG,iBAAiB,+FAA+F,SAAS,gCAAgC,aAAa,CAAC,mBAAmB,EAAE,OAAO,EAAE,GAAG,CAAC,WAAW,WAAW,YAAY,CAAC;IACziD,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,qBAAqB,CAAC,UAAU,CAAC,CAAC;IAC7D,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC;AACjC,CAAC","sourcesContent":["import { createHash } from \"node:crypto\";\nimport { basename } from \"node:path\";\nimport ts from \"@typescript/typescript6\";\nimport postcss from \"postcss\";\nimport selectorParser from \"postcss-selector-parser\";\nimport { extractSourceMappings, markSource } from \"./compiler/mapping.js\";\nimport type { SourceMapping } from \"./compiler/mapping.js\";\nimport { compileError, locate, parseSfc } from \"./compiler/sfc.js\";\nimport type { SfcSection } from \"./compiler/sfc.js\";\nimport { parseTemplate } from \"./compiler/template.js\";\nimport type { TemplateNode } from \"./compiler/template.js\";\n\ninterface DynamicText {\n id: number;\n expression: string;\n offset: number;\n}\n\ninterface EventBinding {\n id: number;\n name: string;\n expression: string;\n offset: number;\n}\n\ninterface AttributeBinding {\n id: number;\n name: string;\n expression: string;\n offset: number;\n}\n\ninterface ConditionBinding {\n kind: \"condition\";\n id: number;\n expression: string;\n offset: number;\n render: string;\n bindings: TemplateBindings;\n}\n\ninterface ListBinding {\n kind: \"list\";\n id: number;\n expression: string;\n offset: number;\n key: string;\n keyOffset: number;\n itemName: string;\n indexName: string;\n render: string;\n bindings: TemplateBindings;\n}\n\ninterface ComponentBinding {\n id: number;\n reference: string;\n referenceOffset: number;\n props: Array<{ name: string; nameOffset: number; expression: string; offset: number }>;\n offset: number;\n}\n\ninterface TemplateBindings {\n texts: DynamicText[];\n events: EventBinding[];\n attributes: AttributeBinding[];\n components: ComponentBinding[];\n regions: Array<ConditionBinding | ListBinding>;\n}\n\ninterface TemplateContext {\n source: string;\n filename: string;\n templateOffset: number;\n scopeAttribute: string | undefined;\n nextText: number;\n nextEvent: number;\n nextAttribute: number;\n nextRegion: number;\n}\n\nfunction emptyBindings(): TemplateBindings {\n return { texts: [], events: [], attributes: [], components: [], regions: [] };\n}\n\n/** Resultado del compilador de un componente .meeko. */\nexport interface CompileResult {\n code: string;\n css: string;\n mappings: readonly SourceMapping[];\n}\n\n/** Opciones de generación; HMR se incluye solo en módulos de desarrollo. */\nexport interface CompileOptions {\n hot?: boolean;\n}\n\nfunction quote(value: string): string {\n return JSON.stringify(value);\n}\n\nfunction validateExpression(expression: string, source: string, filename: string, offset: number): void {\n const prefix = \"const __check = (\";\n const parsed = ts.createSourceFile(filename, `${prefix}${expression});`, ts.ScriptTarget.Latest, true, ts.ScriptKind.TS) as ts.SourceFile & { parseDiagnostics: readonly ts.DiagnosticWithLocation[] };\n const error = parsed.parseDiagnostics[0];\n if (error) {\n const position = Math.max(0, Math.min(expression.length, (error.start ?? prefix.length) - prefix.length));\n throw compileError(source, filename, \"MEEK020\", ts.flattenDiagnosticMessageText(error.messageText, \"\\n\"), offset + position);\n }\n}\n\nfunction attributeValueOffset(node: TemplateNode, name: string, context: TemplateContext): number {\n const position = node.sourceCodeLocation?.attrs?.[name];\n if (!position) return context.templateOffset + (node.sourceCodeLocation?.startOffset ?? 0);\n const raw = context.source.slice(context.templateOffset + position.startOffset, context.templateOffset + position.endOffset);\n const equals = raw.indexOf(\"=\");\n if (equals < 0) return context.templateOffset + position.startOffset;\n const after = raw.slice(equals + 1);\n const whitespace = after.length - after.trimStart().length;\n const quoteStart = equals + 1 + whitespace;\n const quoted = raw[quoteStart] === '\"' || raw[quoteStart] === \"'\";\n return context.templateOffset + position.startOffset + quoteStart + (quoted ? 1 : 0);\n}\n\nfunction rewriteLocals(expression: string, locals: ReadonlyMap<string, string>): string {\n if (locals.size === 0) return expression;\n const prefix = \"const __value = (\";\n const file = ts.createSourceFile(\"template-expression.ts\", `${prefix}${expression});`, ts.ScriptTarget.Latest, true, ts.ScriptKind.TS);\n const changes: Array<{ start: number; end: number; text: string }> = [];\n function isShadowed(node: ts.Identifier): boolean {\n for (let parent = node.parent; parent; parent = parent.parent) {\n if ((ts.isArrowFunction(parent) || ts.isFunctionExpression(parent)) && parent.parameters.some((parameter) => ts.isIdentifier(parameter.name) && parameter.name.text === node.text)) return true;\n if (ts.isSourceFile(parent)) break;\n }\n return false;\n }\n function visit(node: ts.Node): void {\n if (ts.isIdentifier(node)) {\n const replacement = locals.get(node.text);\n const parent = node.parent;\n if (replacement && parent && !isShadowed(node)\n && !(ts.isPropertyAccessExpression(parent) && parent.name === node)\n && !(ts.isPropertyAssignment(parent) && parent.name === node)\n && !(ts.isParameter(parent) && parent.name === node)\n && !(ts.isVariableDeclaration(parent) && parent.name === node)) {\n const shorthand = ts.isShorthandPropertyAssignment(parent) && parent.name === node;\n changes.push({ start: node.getStart(file) - prefix.length, end: node.getEnd() - prefix.length, text: shorthand ? `${node.text}: (${replacement})` : `(${replacement})` });\n }\n }\n ts.forEachChild(node, visit);\n }\n visit(file);\n let result = expression;\n for (const change of changes.reverse()) {\n if (change.start >= 0 && change.end <= expression.length) result = result.slice(0, change.start) + change.text + result.slice(change.end);\n }\n return result;\n}\n\nfunction textParts(value: string, bindings: TemplateBindings, context: TemplateContext, offset: number): string[] {\n const parts: string[] = [];\n const pattern = /\\{([^{}]+)\\}/g;\n let cursor = 0;\n for (const match of value.matchAll(pattern)) {\n const index = match.index;\n const staticPart = value.slice(cursor, index);\n if (staticPart) parts.push(`__meeko.escapeHtml(${quote(staticPart)})`);\n const rawExpression = match[1] ?? \"\";\n const expression = rawExpression.trim();\n if (!expression) throw compileError(context.source, context.filename, \"MEEK009\", \"Empty template expression\", offset + index);\n validateExpression(expression, context.source, context.filename, offset + index + 1 + rawExpression.indexOf(expression));\n const id = context.nextText++;\n const expressionOffset = offset + index + 1 + rawExpression.indexOf(expression);\n bindings.texts.push({ id, expression, offset: expressionOffset });\n parts.push(`${quote(`<!--meeko:text:${id}-->`)} + __meeko.escapeHtml(${markSource(expression, expressionOffset)}) + ${quote(`<!--/meeko:text:${id}-->`)}`);\n cursor = index + match[0].length;\n }\n const tail = value.slice(cursor);\n if (tail.includes(\"{\")) throw compileError(context.source, context.filename, \"MEEK010\", \"Unclosed template expression\", offset + cursor + tail.indexOf(\"{\"));\n if (tail) parts.push(`__meeko.escapeHtml(${quote(tail)})`);\n return parts;\n}\n\nfunction renderNode(node: TemplateNode, bindings: TemplateBindings, context: TemplateContext): string {\n if (node.nodeName === \"#text\") {\n return textParts(node.value ?? \"\", bindings, context, context.templateOffset + (node.sourceCodeLocation?.startOffset ?? 0)).join(\" + \") || quote(\"\");\n }\n if (node.nodeName === \"#comment\") return quote(`<!--${node.value ?? \"\"}-->`);\n if (!node.tagName) return (node.childNodes ?? []).map((child) => renderNode(child, bindings, context)).join(\" + \") || quote(\"\");\n\n const attrsList = node.attrs ?? [];\n const position = context.templateOffset + (node.sourceCodeLocation?.startOffset ?? 0);\n const condition = attrsList.find((attribute) => attribute.name === \"if:when\");\n const list = attrsList.find((attribute) => attribute.name === \"each:of\");\n if (condition && list) throw compileError(context.source, context.filename, \"MEEK021\", \"A node cannot have both if:when and each:of\", position);\n if (condition || list) {\n const inner = emptyBindings();\n const excluded = new Set(condition ? [\"if:when\"] : [\"each:of\", \"each:as\", \"each:key\", \"each:index\"]);\n const clone: TemplateNode = { ...node, attrs: attrsList.filter((attribute) => !excluded.has(attribute.name)) };\n const html = renderNodeContent(clone, inner, context);\n const id = context.nextRegion++;\n if (condition) {\n const offset = attributeValueOffset(node, \"if:when\", context);\n validateExpression(condition.value, context.source, context.filename, offset);\n bindings.regions.push({ kind: \"condition\", id, expression: condition.value, offset, render: html, bindings: inner });\n return `__meeko.renderIf(${id}, ${markSource(condition.value, offset)}, () => ${html})`;\n }\n const itemName = attrsList.find((attribute) => attribute.name === \"each:as\")?.value;\n const key = attrsList.find((attribute) => attribute.name === \"each:key\")?.value;\n const indexName = attrsList.find((attribute) => attribute.name === \"each:index\")?.value ?? \"index\";\n if (!itemName || !/^[a-zA-Z_$][\\w$]*$/.test(itemName) || itemName.startsWith(\"__\") || !/^[a-zA-Z_$][\\w$]*$/.test(indexName) || indexName.startsWith(\"__\") || itemName === indexName) {\n throw compileError(context.source, context.filename, \"MEEK022\", \"A list needs valid, distinct each:as and each:index identifiers\", position);\n }\n if (!key) throw compileError(context.source, context.filename, \"MEEK023\", \"A list requires each:key\", position);\n const offset = attributeValueOffset(node, \"each:of\", context);\n const keyOffset = attributeValueOffset(node, \"each:key\", context);\n validateExpression(list!.value, context.source, context.filename, offset);\n validateExpression(key, context.source, context.filename, keyOffset);\n bindings.regions.push({ kind: \"list\", id, expression: list!.value, offset, key, keyOffset, itemName, indexName, render: html, bindings: inner });\n return `__meeko.renderFor(${id}, ${markSource(list!.value, offset)}, (${itemName}, ${indexName}) => ${markSource(key, keyOffset)}, (${itemName}, ${indexName}) => ${html})`;\n }\n if (attrsList.some((attribute) => attribute.name.startsWith(\"each:\") || attribute.name.startsWith(\"if:\"))) {\n throw compileError(context.source, context.filename, \"MEEK024\", \"Incomplete template directive\", position);\n }\n return renderNodeContent(node, bindings, context);\n}\n\nfunction renderNodeContent(node: TemplateNode, bindings: TemplateBindings, context: TemplateContext): string {\n if (node.tagName === \"template\") {\n return (node.content?.childNodes ?? []).map((child) => renderNode(child, bindings, context)).join(\" + \") || quote(\"\");\n }\n if (node.tagName === \"component\") {\n const position = node.start;\n const referenceAttribute = node.attrs?.find((attribute) => attribute.name === \"is\");\n const reference = referenceAttribute?.value ?? \"\";\n if (!reference.trim()) throw compileError(context.source, context.filename, \"MEEK030\", \"A component requires is=\\\"expression\\\"\", position);\n const referenceOffset = attributeValueOffset(node, \"is\", context);\n validateExpression(reference, context.source, context.filename, referenceOffset);\n if ((node.childNodes ?? []).some((child) => child.nodeName !== \"#text\" || Boolean(child.value?.trim()))) {\n throw compileError(context.source, context.filename, \"MEEK031\", \"Component children are not supported; close the tag without content\", position);\n }\n const props: ComponentBinding[\"props\"] = [];\n for (const attribute of node.attrs ?? []) {\n if (attribute.name === \"is\") continue;\n const rawName = /^[^\\s=]+/.exec(context.source.slice(attribute.start, attribute.end))?.[0] ?? attribute.name;\n if (!rawName.startsWith(\"bind:\") || !/^[a-zA-Z_$][\\w$]*$/.test(rawName.slice(5))) {\n throw compileError(context.source, context.filename, \"MEEK032\", \"Component props must use bind:prop=\\\"expression\\\"\", attribute.start);\n }\n const name = rawName.slice(5);\n const offset = attributeValueOffset(node, attribute.name, context);\n validateExpression(attribute.value, context.source, context.filename, offset);\n props.push({ name, nameOffset: attribute.start + 5, expression: attribute.value, offset });\n }\n const id = context.nextRegion++;\n bindings.components.push({ id, reference, referenceOffset, props, offset: position });\n const mappedProps = props.map((prop) => `${markSource(quote(prop.name), prop.nameOffset, prop.name.length)}: ${markSource(prop.expression, prop.offset)}`);\n const object = markSource(`{ ${mappedProps.join(\", \")} }`, position, node.end - position);\n return `__meeko.renderComponent(${id}, ${markSource(reference, referenceOffset)}, ${object}, __meeko_transfer)`;\n }\n const tag = node.tagName!;\n\n const attrs: Array<{ kind: \"static\"; value: string } | { kind: \"dynamic\"; expression: string }> = [];\n for (const attr of node.attrs ?? []) {\n if (attr.name.startsWith(\"on:\")) {\n const name = attr.name.slice(3);\n if (!/^[a-z]+$/.test(name)) throw compileError(context.source, context.filename, \"MEEK011\", `Invalid event name: ${name}`, context.templateOffset + (node.sourceCodeLocation?.startOffset ?? 0));\n const id = context.nextEvent++;\n const offset = attributeValueOffset(node, attr.name, context);\n validateExpression(attr.value, context.source, context.filename, offset);\n bindings.events.push({ id, name, expression: attr.value, offset });\n attrs.push({ kind: \"static\", value: ` data-meeko-e-${id}=\"\"` });\n } else if (attr.name.startsWith(\"bind:\")) {\n const name = attr.name.slice(5);\n if (!/^[a-z][a-z0-9:.-]*$/.test(name) || name.startsWith(\"on\")) {\n throw compileError(context.source, context.filename, \"MEEK012\", `Invalid dynamic attribute: ${name}`, context.templateOffset + (node.sourceCodeLocation?.startOffset ?? 0));\n }\n const offset = attributeValueOffset(node, attr.name, context);\n validateExpression(attr.value, context.source, context.filename, offset);\n const id = context.nextAttribute++;\n bindings.attributes.push({ id, name, expression: attr.value, offset });\n attrs.push({ kind: \"static\", value: ` data-meeko-a-${id}=\"\"` });\n attrs.push({ kind: \"dynamic\", expression: `__meeko.renderAttribute(${quote(name)}, ${markSource(attr.value, offset)})` });\n } else if (attr.name.startsWith(\":\")) {\n throw compileError(context.source, context.filename, \"MEEK012\", `Unsupported template directive: ${attr.name}`, context.templateOffset + (node.sourceCodeLocation?.startOffset ?? 0));\n } else {\n attrs.push({ kind: \"static\", value: ` ${attr.name}=\"${escapeAttribute(attr.value)}\"` });\n }\n }\n if (context.scopeAttribute) attrs.push({ kind: \"static\", value: ` ${context.scopeAttribute}=\"\"` });\n const openingParts: string[] = [quote(`<${tag}`)];\n for (const attr of attrs) {\n if (attr.kind === \"dynamic\") openingParts.push(attr.expression);\n else openingParts.push(quote(attr.value));\n }\n openingParts.push(quote(\">\"));\n const opening = openingParts.join(\" + \");\n const voidElements = new Set([\"area\", \"base\", \"br\", \"col\", \"embed\", \"hr\", \"img\", \"input\", \"link\", \"meta\", \"param\", \"source\", \"track\", \"wbr\"]);\n if (voidElements.has(tag)) return opening;\n const children = (node.childNodes ?? []).map((child) => renderNode(child, bindings, context));\n return [opening, ...children, quote(`</${tag}>`)].join(\" + \");\n}\n\nfunction escapeAttribute(value: string): string {\n return value.replaceAll(\"&\", \"&amp;\").replaceAll('\"', \"&quot;\").replaceAll(\"<\", \"&lt;\");\n}\n\nfunction scopeCss(css: string, scopeAttribute: string): string {\n const root = postcss.parse(css);\n root.walkRules((rule) => {\n let parent: postcss.Node | undefined = rule.parent;\n while (parent) {\n if (parent.type === \"atrule\" && /keyframes$/i.test((parent as postcss.AtRule).name)) return;\n parent = parent.parent;\n }\n if (rule.selector.includes(\":global\")) throw rule.error(\":global is not supported in scoped styles yet\", { index: rule.selector.indexOf(\":global\") });\n rule.selector = selectorParser((selectors) => {\n selectors.each((selector) => {\n const pseudoElement = selector.nodes.find((node) => node.type === \"pseudo\" && node.value.startsWith(\"::\"));\n const attribute = selectorParser.attribute({ attribute: scopeAttribute, value: undefined, raws: {} });\n if (pseudoElement) selector.insertBefore(pseudoElement, attribute);\n else selector.append(attribute);\n });\n }).processSync(rule.selector);\n });\n return root.toString();\n}\n\nfunction compileScript(section: SfcSection, source: string, filename: string): { imports: string[]; types: string[]; setup: string[]; names: string[]; propsType: string; propsTypeOffset: number | undefined } {\n const file = ts.createSourceFile(filename, section.content, ts.ScriptTarget.Latest, true, ts.ScriptKind.TS) as ts.SourceFile & { parseDiagnostics: readonly ts.DiagnosticWithLocation[] };\n const syntaxError = file.parseDiagnostics[0];\n if (syntaxError) {\n const message = ts.flattenDiagnosticMessageText(syntaxError.messageText, \"\\n\");\n throw compileError(source, filename, \"MEEK013\", message, section.contentStart + (syntaxError.start ?? 0));\n }\n const imports: string[] = [];\n const types: string[] = [];\n const setup: string[] = [];\n const names: string[] = [];\n let propsType: string | undefined;\n let propsTypeOffset: number | undefined;\n for (const statement of file.statements) {\n if (ts.isImportDeclaration(statement)) {\n imports.push(markSource(statement.getText(file), section.contentStart + statement.getStart(file)));\n continue;\n }\n if (ts.isInterfaceDeclaration(statement) || ts.isTypeAliasDeclaration(statement)) {\n types.push(markSource(statement.getText(file), section.contentStart + statement.getStart(file)));\n continue;\n }\n if (ts.isExportDeclaration(statement) && (statement.isTypeOnly ||\n (statement.exportClause && ts.isNamedExports(statement.exportClause) && statement.exportClause.elements.every((element) => element.isTypeOnly)))) {\n types.push(markSource(statement.getText(file), section.contentStart + statement.getStart(file)));\n continue;\n }\n if (ts.isVariableStatement(statement)) {\n if (statement.declarationList.declarations.length !== 1) throw compileError(source, filename, \"MEEK014\", \"Declare one variable per statement in .meeko scripts\", section.contentStart + statement.getStart(file));\n for (const declaration of statement.declarationList.declarations) {\n if (!ts.isIdentifier(declaration.name)) throw compileError(source, filename, \"MEEK015\", \"Only simple variable declarations are supported in .meeko scripts\", section.contentStart + declaration.getStart(file));\n const name = declaration.name.text;\n names.push(name);\n if (declaration.initializer && ts.isCallExpression(declaration.initializer) && declaration.initializer.expression.getText(file) === \"defineProps\") {\n if (propsType) throw compileError(source, filename, \"MEEK016\", \"defineProps must appear once in its own declaration\", section.contentStart + declaration.getStart(file));\n const typeArgument = declaration.initializer.typeArguments?.[0];\n propsType = typeArgument?.getText(file);\n if (!propsType) throw compileError(source, filename, \"MEEK017\", \"defineProps requires a type argument\", section.contentStart + declaration.getStart(file));\n propsTypeOffset = section.contentStart + typeArgument!.getStart(file);\n setup.push(`const ${name}: ${markSource(propsType, propsTypeOffset)} = __props;`);\n } else {\n setup.push(markSource(statement.getText(file), section.contentStart + statement.getStart(file)));\n }\n }\n continue;\n }\n if (ts.isFunctionDeclaration(statement) && statement.name) {\n names.push(statement.name.text);\n setup.push(markSource(statement.getText(file), section.contentStart + statement.getStart(file)));\n continue;\n }\n throw compileError(source, filename, \"MEEK018\", `Unsupported top-level script statement: ${ts.SyntaxKind[statement.kind]}`, section.contentStart + statement.getStart(file));\n }\n return { imports, types, setup, names, propsType: propsType ?? \"Record<string, never>\", propsTypeOffset };\n}\n\nfunction hydrationBody(bindings: TemplateBindings, context: TemplateContext, hot: boolean, locals: ReadonlyMap<string, string> = new Map()): string {\n const statements: string[] = [];\n const mappedExpression = (expression: string, offset: number, expressionLocals = locals): string =>\n markSource(rewriteLocals(expression, expressionLocals), offset, expression.length);\n for (const { id, expression, offset } of bindings.texts) {\n const point = locate(context.source, offset);\n const location = `${basename(context.filename)}:${point.line}:${point.column} (text ${id})`;\n const source = hot ? `, { file: ${quote(context.filename)}, line: ${point.line}, column: ${point.column}, expression: ${quote(expression)}, kind: \"text\" }` : \"\";\n statements.push(`cleanups.push(__meeko.bindText(__scope, ${id}, () => ${mappedExpression(expression, offset)}, ${quote(location)}${source}));`);\n }\n for (const { id, name, expression, offset } of bindings.attributes) {\n const point = locate(context.source, offset);\n const location = `${basename(context.filename)}:${point.line}:${point.column} (attribute ${name})`;\n const source = hot ? `, { file: ${quote(context.filename)}, line: ${point.line}, column: ${point.column}, expression: ${quote(expression)}, kind: \"attribute\" }` : \"\";\n statements.push(`cleanups.push(__meeko.bindAttribute(__scope, ${id}, ${quote(name)}, () => ${mappedExpression(expression, offset)}, ${quote(location)}${source}));`);\n }\n for (const { id, name, expression, offset } of bindings.events) {\n const eventType = [\"click\", \"input\", \"change\", \"submit\", \"keydown\", \"keyup\", \"focus\", \"blur\"].includes(name)\n ? `GlobalEventHandlersEventMap[${quote(name)}]` : \"Event\";\n const handler = markSource(`((__meeko_handler: (event: ${eventType}) => void) => __meeko_handler(event as ${eventType}))(${mappedExpression(expression, offset)});`, offset, expression.length);\n statements.push(`{\n cleanups.push(__meeko.bindEvent(__scope, ${id}, ${quote(name)}, (event: Event) => {\n ${handler}\n }));\n }`);\n }\n const componentStatements: string[] = [];\n for (const entry of bindings.components) {\n const point = locate(context.source, entry.offset);\n const location = `${basename(context.filename)}:${point.line}:${point.column} (component ${entry.reference})`;\n const props = entry.props.map((prop) => `${markSource(quote(prop.name), prop.nameOffset, prop.name.length)}: ${mappedExpression(prop.expression, prop.offset)}`);\n const object = markSource(`{ ${props.join(\", \")} }`, entry.offset, 1);\n componentStatements.push(`cleanups.push(__meeko.bindComponent(__scope, ${entry.id}, () => ${mappedExpression(entry.reference, entry.referenceOffset)}, () => (${object}), ${quote(location)}));`);\n }\n statements.unshift(...componentStatements);\n for (const entry of bindings.regions) {\n if (entry.kind === \"condition\") {\n statements.push(`cleanups.push(__meeko.bindIf(__scope, ${entry.id}, () => ${mappedExpression(entry.expression, entry.offset)}, () => ${rewriteLocals(entry.render, locals)}, (__scope) => { ${hydrationBody(entry.bindings, context, hot, locals)} }));`);\n } else {\n const outerLocals = new Map(locals);\n outerLocals.delete(entry.itemName);\n outerLocals.delete(entry.indexName);\n const innerLocals = new Map(locals);\n innerLocals.set(entry.itemName, \"__meeko_item.value\");\n innerLocals.set(entry.indexName, \"__meeko_index.value\");\n const innerHydration = hydrationBody(entry.bindings, context, hot, innerLocals);\n // El callback generado sólo usa la señal de índice si aparece en su hidratación.\n const trackIndex = innerHydration.includes(\"__meeko_index.value\");\n statements.push(`cleanups.push(__meeko.bindFor(__scope, ${entry.id}, () => ${mappedExpression(entry.expression, entry.offset)}, (${entry.itemName}, ${entry.indexName}) => ${mappedExpression(entry.key, entry.keyOffset, outerLocals)}, (${entry.itemName}, ${entry.indexName}) => ${rewriteLocals(entry.render, outerLocals)}, (__meeko_item, __meeko_index, __scope) => { ${innerHydration} }, ${trackIndex}));`);\n }\n }\n return `const cleanups: Array<() => void> = [];\n try {\n ${statements.join(\"\\n\")}\n return () => { for (const cleanup of cleanups.reverse()) cleanup(); };\n } catch (error) { for (const cleanup of cleanups.reverse()) cleanup(); throw error; }`;\n}\n\n/** Compila una parte tipada de .meeko para SSR e hidratación del HTML existente. */\nexport function compile(source: string, filename = \"anonymous.meeko\", options: CompileOptions = {}): CompileResult {\n const { script, template, style } = parseSfc(source, filename);\n const componentId = createHash(\"sha256\").update(filename).digest(\"hex\").slice(0, 12);\n const scopeAttribute = style?.attributes.some((attribute) => attribute.name === \"scoped\")\n ? `data-meeko-s-${createHash(\"sha256\").update(filename).digest(\"hex\").slice(0, 8)}`\n : undefined;\n let css: string;\n try {\n css = scopeAttribute ? scopeCss(style?.content ?? \"\", scopeAttribute) : style?.content ?? \"\";\n } catch (error) {\n if (error instanceof postcss.CssSyntaxError && style && error.line !== undefined && error.column !== undefined) {\n const lines = style.content.split(/\\r\\n|\\r|\\n/);\n const prior = lines.slice(0, error.line - 1).reduce((total, line) => total + line.length + 1, 0);\n throw compileError(source, filename, \"MEEK019\", error.reason, style.contentStart + prior + error.column - 1);\n }\n throw error;\n }\n const parsed = parseTemplate(source, template, filename);\n const bindingsForTemplate = emptyBindings();\n const context: TemplateContext = { source, filename, templateOffset: template.contentStart, scopeAttribute, nextText: 0, nextEvent: 0, nextAttribute: 0, nextRegion: 0 };\n const html = renderNode(parsed, bindingsForTemplate, context);\n const scriptParts = compileScript(script, source, filename);\n const bindings = scriptParts.names.join(\", \");\n const hot = options.hot === true;\n const setupCode = `const __bindings = __setup(__inputProps);\\n__meeko.restoreSignals(__bindings, __state);\\nconst { ${bindings} } = __bindings;`;\n const releaseCode = hot\n ? `const __cleanup = () => { __release(); dispose(); };\\nconst __component = { renderToString, hydrate, hydrateScope, css };\\nconst __snapshot = () => __meeko.snapshotSignals(__bindings);\\nconst __devtoolsStop = __meeko.registerDevtoolsInstance({ componentId: __hotId, name: ${quote(basename(filename, \".meeko\"))}, file: ${quote(filename)}, scope: __scope, props: __inputProps, bindings: __bindings });\\nconst __dispose = () => { try { __cleanup(); } finally { __devtoolsStop(); } };\\nconst __stop = __hotRoot ? __meeko.registerHotInstance(__hotId, __hotRoot, __inputProps, __component, __snapshot, __dispose) : __scope.start ? __meeko.registerHotScope(__hotId, __scope, __inputProps, __component, __snapshot, __dispose) : __dispose;\\nreturn __meeko.withStateSnapshot(__stop, __snapshot);`\n : `return __meeko.withStateSnapshot(() => { __release(); dispose(); }, () => __meeko.snapshotSignals(__bindings));`;\n const hotIdExport = hot ? `export const __hotId = ${quote(componentId)};\\n` : \"\";\n const stateParam = \", __state?: __meeko.HotState\";\n const scopeHotRootParam = hot ? \", __hotRoot?: Element\" : \"\";\n const scopeForward = hot ? \"__scope, __inputProps, __state, root\" : \"__scope, __inputProps, __state\";\n const propsType = scriptParts.propsTypeOffset === undefined ? scriptParts.propsType : markSource(scriptParts.propsType, scriptParts.propsTypeOffset);\n const markedCode = `// Generated by Meeko. Edit the .meeko source instead.\\nimport * as __meeko from \"@meekojs/meeko/internal\";\\n${scriptParts.imports.join(\"\\n\")}\\n${scriptParts.types.join(\"\\n\")}\\nfunction __setup(__props: ${propsType}) {\\n${scriptParts.setup.join(\"\\n\")}\\nreturn { ${bindings} };\\n}\\nexport type ComponentProps = ${propsType};\\nexport const css = ${quote(css)};\\n${hotIdExport}export function renderWithState(__inputProps: ComponentProps): { html: string; state: __meeko.HotState } {\\nreturn __meeko.createRoot((dispose) => {\\nconst __meeko_transfer = true;\\nconst __bindings = __setup(__inputProps);\\nconst { ${bindings} } = __bindings;\\ntry {\\nconst html = ${html};\\nconst state = __meeko.snapshotSignals(__bindings);\\n__meeko.serializeJson(state);\\nreturn { html, state };\\n} finally { dispose(); }\\n});\\n}\\nexport function renderToString(__inputProps: ComponentProps${stateParam}): string {\\nreturn __meeko.createRoot((dispose) => {\\nconst __meeko_transfer = false;\\n${setupCode}\\ntry { return ${html}; } finally { dispose(); }\\n});\\n}\\nexport function hydrate(root: Element, __inputProps: ComponentProps${stateParam}): () => void {\\nconst __scope: __meeko.DomScope = { root };\\nreturn hydrateScope(${scopeForward});\\n}\\nexport function hydrateScope(__scope: __meeko.DomScope, __inputProps: ComponentProps${stateParam}${scopeHotRootParam}): () => void {\\nreturn __meeko.createRoot((dispose) => {\\nconst __meeko_transfer = false;\\n${setupCode}\\nconst __release = (() => { ${hydrationBody(bindingsForTemplate, context, hot)} })();\\n${releaseCode}\\n});\\n}\\n`;\n const { code, mappings } = extractSourceMappings(markedCode);\n return { code, css, mappings };\n}\n"]}
@@ -349,3 +349,4 @@ export function mountDevtoolsPanel(options = {}) {
349
349
  connect();
350
350
  return { refresh: connect, unmount };
351
351
  }
352
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/devtools-ui/index.ts"],"names":[],"mappings":"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","sourcesContent":["import type { DevtoolsEvent, DevtoolsHook, DevtoolsInstance } from \"../devtools.js\";\n\n/** Opciones de montaje del panel integrado de desarrollo. */\nexport interface DevtoolsPanelOptions {\n /** Elemento que recibirá el host del Shadow DOM. El valor predeterminado es `document.body`. */\n container?: Element;\n}\n\n/** Control del ciclo de vida del panel. */\nexport interface DevtoolsPanel {\n /** Reintenta encontrar el hook y actualiza los datos visibles. */\n refresh(): void;\n /** Quita la interfaz y libera las suscripciones y eventos instalados. */\n unmount(): void;\n}\n\nconst styles = `\n:host { all: initial; position: fixed; z-index: 2147483647; right: 16px; bottom: 16px; width: min(680px, calc(100vw - 32px)); color: #e8ecf5; font: 13px/1.45 system-ui, sans-serif; color-scheme: dark; }\n* { box-sizing: border-box; }\n.panel { display: flex; flex-direction: column; max-height: min(560px, calc(100vh - 32px)); overflow: hidden; border: 1px solid #475569; border-radius: 12px; background: #101827; box-shadow: 0 16px 48px #0009; }\nheader { display: flex; align-items: center; gap: 8px; padding: 10px 12px; border-bottom: 1px solid #334155; }\nheader strong { font-size: 14px; margin-right: auto; }\n.mobile-switch { display: none; gap: 6px; padding: 8px 12px; border-bottom: 1px solid #334155; }\n.mobile-switch button { flex: 1; }\n.content { display: grid; grid-template-columns: minmax(170px, 0.9fr) minmax(0, 1.6fr); min-height: 220px; overflow: auto; }\nsection { min-width: 0; padding: 12px; }\nsection + section { border-left: 1px solid #334155; }\nh2, h3 { margin: 0 0 8px; font-size: 13px; }\nh3 { margin-top: 12px; }\np { margin: 0 0 8px; color: #aab7ca; }\nul, ol { margin: 0; padding: 0; list-style: none; }\nli + li { margin-top: 6px; }\nbutton { appearance: none; border: 1px solid #52657d; border-radius: 6px; background: #202d40; color: inherit; padding: 5px 8px; font: inherit; cursor: pointer; }\nbutton:hover { background: #30425d; }\nbutton:focus-visible { outline: 2px solid #79b8ff; outline-offset: 2px; }\nbutton[aria-pressed=\"true\"] { border-color: #79b8ff; background: #25476c; }\n.tree-node { margin: 3px 0; }\n.tree-node > button { width: 100%; text-align: left; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }\n.tree-children { margin: 4px 0 6px 8px; padding-left: 12px; border-left: 1px solid #52657d; }\n.actions { display: flex; flex-wrap: wrap; gap: 6px; margin: 8px 0; }\n.muted { color: #aab7ca; }\n.path { overflow-wrap: anywhere; }\npre { margin: 4px 0 0; padding: 8px; max-height: 130px; overflow: auto; border-radius: 6px; background: #0a111e; color: #dbeafe; font: 12px/1.45 ui-monospace, SFMono-Regular, Consolas, monospace; white-space: pre-wrap; overflow-wrap: anywhere; }\n.events { border-top: 1px solid #334155; padding: 10px 12px; max-height: 160px; overflow: auto; }\n.events-head { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 6px; }\n.events-head label { color: #aab7ca; }\n.event-button { width: 100%; text-align: left; }\n.event-reads { margin: 4px 0 8px; color: #aab7ca; }\n.event-reads summary { cursor: pointer; }\n.event-reads li { overflow-wrap: anywhere; }\n.event-reads code { color: #dbeafe; }\n.events li { overflow-wrap: anywhere; }\n.status { padding: 7px 12px; border-top: 1px solid #334155; color: #aab7ca; }\n@media (max-width: 540px) {\n .mobile-switch { display: flex; }\n .content { display: block; min-height: 0; }\n .content[data-view=\"instances\"] .detail { display: none; }\n .content[data-view=\"detail\"] .instances { display: none; }\n section + section { border-left: 0; }\n}\n`;\n\n/** Formatea datos arbitrarios sin insertar HTML procedente de la aplicación. */\nfunction formatValue(value: unknown): string {\n const seen = new WeakSet<object>();\n try {\n const result = JSON.stringify(value, (_key, current: unknown) => {\n if (typeof current === \"bigint\") return `${current}n`;\n if (typeof current === \"function\") return \"[función]\";\n if (typeof current === \"symbol\") return String(current);\n if (typeof current === \"object\" && current !== null) {\n if (seen.has(current)) return \"[circular]\";\n seen.add(current);\n }\n return current;\n }, 2);\n return (result ?? String(value)).slice(0, 8000);\n } catch {\n return \"[valor no representable]\";\n }\n}\n\n/** Crea un elemento con texto seguro y una clase opcional. */\nfunction element<K extends keyof HTMLElementTagNameMap>(document: Document, tag: K, text?: string, className?: string): HTMLElementTagNameMap[K] {\n const node = document.createElement(tag);\n if (text !== undefined) node.textContent = text;\n if (className) node.className = className;\n return node;\n}\n\n/** Muestra el momento relativo comunicado por el runtime. */\nfunction eventLabel(event: DevtoolsEvent): string {\n const kinds: Record<DevtoolsEvent[\"kind\"], string> = {\n mount: \"Montaje\",\n unmount: \"Desmontaje\",\n signal: \"Señal\",\n breakpoint: \"Punto de parada\",\n select: \"Selección\",\n hmr: \"HMR\",\n };\n const time = Number.isFinite(event.at) ? new Date(event.at).toLocaleTimeString(\"es\", { hour12: false }) : \"hora desconocida\";\n const detail = event.detail ? ` · ${event.detail}` : \"\";\n const source = event.componentName ? ` · ${event.componentName}` : \"\";\n const file = event.file ? ` · ${event.file}` : \"\";\n const value = event.kind === \"signal\" && \"value\" in event ? ` → ${formatValue(event.value).replace(/\\s+/g, \" \").slice(0, 240)}` : \"\";\n return `${time} · ${kinds[event.kind]} · ${event.instanceId}${source}${file}${detail}${value}`;\n}\n\n/** Exige un documento conectado a una ventana para registrar eventos del hook. */\nfunction requireView(document: Document): Window {\n const view = document.defaultView;\n if (!view) throw new Error(\"Meeko DevTools requires a browser document\");\n return view;\n}\n\n/** Monta una interfaz aislada en Shadow DOM para inspeccionar instancias Meeko. */\nexport function mountDevtoolsPanel(options: DevtoolsPanelOptions = {}): DevtoolsPanel {\n const container = options.container ?? document.body;\n const ownerDocument = container.ownerDocument;\n const view = requireView(ownerDocument);\n\n const host = element(ownerDocument, \"div\");\n host.setAttribute(\"data-meeko-devtools-panel\", \"\");\n const shadow = host.attachShadow({ mode: \"open\" });\n const style = element(ownerDocument, \"style\", styles);\n const panel = element(ownerDocument, \"div\", undefined, \"panel\");\n const header = element(ownerDocument, \"header\");\n const title = element(ownerDocument, \"strong\", \"Meeko DevTools\");\n const refreshButton = element(ownerDocument, \"button\", \"Actualizar\");\n refreshButton.type = \"button\";\n refreshButton.setAttribute(\"aria-label\", \"Actualizar instancias de Meeko\");\n const closeButton = element(ownerDocument, \"button\", \"Cerrar\");\n closeButton.type = \"button\";\n closeButton.setAttribute(\"aria-label\", \"Cerrar Meeko DevTools\");\n header.append(title, refreshButton, closeButton);\n\n const mobileSwitch = element(ownerDocument, \"nav\", undefined, \"mobile-switch\");\n mobileSwitch.setAttribute(\"aria-label\", \"Vistas de Meeko DevTools\");\n const instancesButton = element(ownerDocument, \"button\", \"Instancias\");\n instancesButton.type = \"button\";\n instancesButton.setAttribute(\"aria-controls\", \"meeko-devtools-instances\");\n const detailButton = element(ownerDocument, \"button\", \"Detalle\");\n detailButton.type = \"button\";\n detailButton.setAttribute(\"aria-controls\", \"meeko-devtools-detail\");\n mobileSwitch.append(instancesButton, detailButton);\n\n const main = element(ownerDocument, \"div\", undefined, \"content\");\n const instancesSection = element(ownerDocument, \"section\", undefined, \"instances\");\n instancesSection.id = \"meeko-devtools-instances\";\n const instancesTitle = element(ownerDocument, \"h2\", \"Instancias\");\n const instancesList = element(ownerDocument, \"ul\");\n instancesList.setAttribute(\"aria-label\", \"Instancias de Meeko\");\n instancesSection.append(instancesTitle, instancesList);\n const detailSection = element(ownerDocument, \"section\", undefined, \"detail\");\n detailSection.id = \"meeko-devtools-detail\";\n detailSection.setAttribute(\"aria-label\", \"Detalle de instancia\");\n main.append(instancesSection, detailSection);\n\n const eventsSection = element(ownerDocument, \"section\", undefined, \"events\");\n const eventsTitle = element(ownerDocument, \"h2\", \"Eventos recientes\");\n const eventsHead = element(ownerDocument, \"div\", undefined, \"events-head\");\n const signalFilterLabel = element(ownerDocument, \"label\", \" Sólo señales\");\n const signalFilter = element(ownerDocument, \"input\");\n signalFilter.type = \"checkbox\";\n signalFilter.setAttribute(\"aria-label\", \"Mostrar sólo eventos de señales\");\n signalFilterLabel.prepend(signalFilter);\n eventsHead.append(eventsTitle, signalFilterLabel);\n const eventsList = element(ownerDocument, \"ol\");\n eventsList.setAttribute(\"aria-label\", \"Eventos recientes de Meeko\");\n eventsSection.append(eventsHead, eventsList);\n const status = element(ownerDocument, \"div\", undefined, \"status\");\n status.setAttribute(\"role\", \"status\");\n status.setAttribute(\"aria-live\", \"polite\");\n panel.append(header, mobileSwitch, main, eventsSection, status);\n shadow.append(style, panel);\n container.appendChild(host);\n\n let hook: DevtoolsHook | undefined;\n let unsubscribe: (() => void) | undefined;\n let highlightedId: string | null = null;\n let mounted = true;\n let mobileView: \"instances\" | \"detail\" = \"instances\";\n\n /** Cambia la vista móvil y comunica el botón activo a tecnologías de asistencia. */\n function showMobileView(next: \"instances\" | \"detail\"): void {\n mobileView = next;\n main.dataset.view = mobileView;\n instancesButton.setAttribute(\"aria-pressed\", String(mobileView === \"instances\"));\n detailButton.setAttribute(\"aria-pressed\", String(mobileView === \"detail\"));\n }\n\n showMobileView(mobileView);\n instancesButton.addEventListener(\"click\", () => showMobileView(\"instances\"));\n detailButton.addEventListener(\"click\", () => showMobileView(\"detail\"));\n\n /** Conserva el foco al reconstruir una fila después de recibir una notificación. */\n function restoreFocus(id: string | undefined, action: string | undefined): void {\n if (!id || !action) return;\n for (const button of shadow.querySelectorAll<HTMLButtonElement>(\"button[data-instance-id]\")) {\n if (button.dataset.instanceId === id && button.dataset.action === action) {\n button.focus();\n break;\n }\n }\n }\n\n /** Reconstruye sólo el contenido variable usando nodos de texto seguros. */\n function render(): void {\n if (!mounted) return;\n const active = shadow.activeElement as HTMLButtonElement | null;\n const focusId = active?.dataset.instanceId;\n const focusAction = active?.dataset.action;\n instancesList.replaceChildren();\n detailSection.replaceChildren();\n eventsList.replaceChildren();\n if (!hook) {\n status.textContent = \"Hook no disponible. Abre una página Meeko con Vite en desarrollo y pulsa Actualizar.\";\n instancesList.append(element(ownerDocument, \"li\", \"No hay instancias disponibles.\", \"muted\"));\n detailSection.append(element(ownerDocument, \"p\", \"El runtime de desarrollo aún no está conectado.\"));\n eventsList.append(element(ownerDocument, \"li\", \"Sin eventos.\", \"muted\"));\n return;\n }\n\n let snapshot: ReturnType<DevtoolsHook[\"snapshot\"]>;\n try {\n snapshot = hook.snapshot();\n } catch (error) {\n status.textContent = `No se pudo leer el hook: ${error instanceof Error ? error.message : String(error)}`;\n return;\n }\n status.textContent = `${snapshot.instances.length} instancia(s) · ${snapshot.events.length} evento(s)`;\n if (snapshot.instances.length === 0) instancesList.append(element(ownerDocument, \"li\", \"No hay componentes hidratados.\", \"muted\"));\n const byId = new Map(snapshot.instances.map((instance) => [instance.id, instance]));\n const rendered = new Set<string>();\n function appendInstance(instance: DevtoolsInstance, list: HTMLUListElement): void {\n if (rendered.has(instance.id)) return;\n rendered.add(instance.id);\n const row = element(ownerDocument, \"li\", undefined, \"tree-node\");\n const selectButton = element(ownerDocument, \"button\", instance.name || instance.componentId);\n selectButton.type = \"button\";\n selectButton.title = `${instance.name} · ${instance.file}`;\n selectButton.setAttribute(\"aria-label\", `Seleccionar ${instance.name || instance.componentId}`);\n selectButton.dataset.instanceId = instance.id;\n selectButton.dataset.action = \"select\";\n selectButton.setAttribute(\"aria-pressed\", String(snapshot.selectedId === instance.id));\n selectButton.addEventListener(\"click\", () => {\n hook?.select(instance.id);\n showMobileView(\"detail\");\n render();\n if (view.matchMedia(\"(max-width: 540px)\").matches) detailButton.focus();\n });\n row.append(selectButton);\n list.append(row);\n const children = instance.childIds.map((id) => byId.get(id)).filter((child): child is DevtoolsInstance => child !== undefined);\n if (children.length > 0) {\n const nested = element(ownerDocument, \"ul\", undefined, \"tree-children\");\n for (const child of children) appendInstance(child, nested);\n if (nested.childElementCount > 0) row.append(nested);\n }\n }\n for (const instance of snapshot.instances) if (!instance.parentId || !byId.has(instance.parentId)) appendInstance(instance, instancesList);\n for (const instance of snapshot.instances) appendInstance(instance, instancesList);\n\n const selected = snapshot.instances.find((instance: DevtoolsInstance) => instance.id === snapshot.selectedId);\n if (selected) {\n detailSection.append(element(ownerDocument, \"h2\", selected.name || selected.componentId));\n detailSection.append(element(ownerDocument, \"p\", selected.file, \"path\"));\n detailSection.append(element(ownerDocument, \"p\", `ID: ${selected.id} · Estado: ${selected.status === \"hydrated\" ? \"Hidratado\" : selected.status} · Padre: ${selected.parentId ?? \"ninguno\"} · Hijos: ${selected.childIds.length}`));\n const actions = element(ownerDocument, \"div\", undefined, \"actions\");\n const highlightButton = element(ownerDocument, \"button\", highlightedId === selected.id ? \"Quitar resaltado\" : \"Resaltar en página\");\n highlightButton.type = \"button\";\n highlightButton.setAttribute(\"aria-pressed\", String(highlightedId === selected.id));\n highlightButton.dataset.instanceId = selected.id;\n highlightButton.dataset.action = \"highlight\";\n highlightButton.addEventListener(\"click\", () => {\n highlightedId = highlightedId === selected.id ? null : selected.id;\n hook?.highlight(highlightedId);\n render();\n });\n const breakpointButton = element(ownerDocument, \"button\", selected.breakpoint ? \"Desactivar punto de parada\" : \"Activar punto de parada\");\n breakpointButton.type = \"button\";\n breakpointButton.setAttribute(\"aria-pressed\", String(selected.breakpoint));\n breakpointButton.dataset.instanceId = selected.id;\n breakpointButton.dataset.action = \"breakpoint\";\n breakpointButton.addEventListener(\"click\", () => {\n hook?.setBreakpoint(selected.id, !selected.breakpoint);\n render();\n });\n actions.append(highlightButton, breakpointButton);\n detailSection.append(actions, element(ownerDocument, \"h3\", \"Props\"), element(ownerDocument, \"pre\", formatValue(selected.props)), element(ownerDocument, \"h3\", \"Señales\"), element(ownerDocument, \"pre\", formatValue(selected.signals)));\n } else {\n detailSection.append(element(ownerDocument, \"p\", \"Selecciona una instancia para ver props y señales.\"));\n }\n\n const recent = snapshot.events.filter((event) => !signalFilter.checked || event.kind === \"signal\").slice(-30).reverse();\n if (recent.length === 0) eventsList.append(element(ownerDocument, \"li\", \"Sin eventos.\", \"muted\"));\n for (const event of recent) {\n const row = element(ownerDocument, \"li\");\n const instance = byId.get(event.instanceId);\n const label = eventLabel(event);\n if (instance) {\n const button = element(ownerDocument, \"button\", label, \"event-button\");\n button.type = \"button\";\n button.dataset.instanceId = instance.id;\n button.dataset.action = \"event\";\n button.addEventListener(\"click\", () => {\n hook?.select(instance.id);\n showMobileView(\"detail\");\n render();\n });\n row.append(button);\n } else {\n row.textContent = label;\n }\n if (event.kind === \"signal\" && event.reads?.length) {\n const sites = element(ownerDocument, \"details\", undefined, \"event-reads\");\n sites.append(element(ownerDocument, \"summary\", `${event.reads.length} expresión(es) que dependen de la señal`));\n const list = element(ownerDocument, \"ul\");\n for (const read of event.reads) {\n const usage = element(ownerDocument, \"li\");\n usage.append(element(ownerDocument, \"code\", `${read.file}:${read.line}:${read.column}`), element(ownerDocument, \"span\", ` ${read.kind}: `), element(ownerDocument, \"code\", read.expression));\n list.append(usage);\n }\n sites.append(list);\n row.append(sites);\n }\n eventsList.append(row);\n }\n restoreFocus(focusId, focusAction);\n }\n\n /** Descubre el hook al inicio, al recibir el evento de disponibilidad o al pulsar Actualizar. */\n function connect(): void {\n if (!mounted) return;\n const next = (view as Window & { __MEEKO_DEVTOOLS__?: DevtoolsHook }).__MEEKO_DEVTOOLS__;\n if (next !== hook) {\n unsubscribe?.();\n hook = next;\n unsubscribe = hook?.subscribe(render);\n }\n render();\n }\n\n function unmount(): void {\n if (!mounted) return;\n mounted = false;\n unsubscribe?.();\n view.removeEventListener(\"meeko:devtools-ready\", connect);\n refreshButton.removeEventListener(\"click\", connect);\n closeButton.removeEventListener(\"click\", unmount);\n if (highlightedId) hook?.highlight(null);\n host.remove();\n hook = undefined;\n }\n\n view.addEventListener(\"meeko:devtools-ready\", connect);\n signalFilter.addEventListener(\"change\", render);\n refreshButton.addEventListener(\"click\", connect);\n closeButton.addEventListener(\"click\", unmount);\n connect();\n return { refresh: connect, unmount };\n}\n"]}
package/dist/devtools.js CHANGED
@@ -294,3 +294,4 @@ export function registerDevtoolsInstance(input) {
294
294
  record(previous ? "hmr" : "mount", entry.id);
295
295
  return () => { unregister(entry); };
296
296
  }
297
+ //# sourceMappingURL=devtools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"devtools.js","sourceRoot":"","sources":["../src/devtools.ts"],"names":[],"mappings":"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","sourcesContent":["import type { DomScope } from \"./dom.js\";\nimport { currentEffectOwner, effect, isWritableSignal, signalReadSites, untrack } from \"./reactivity.js\";\nimport type { EffectSource, Signal } from \"./reactivity.js\";\n\n/** Valores seguros para transportar una captura al panel de desarrollo. */\nexport type DevtoolsValue = null | boolean | number | string | DevtoolsValue[] | { [key: string]: DevtoolsValue };\n\n/** Estado serializable de una instancia hidratada. */\nexport interface DevtoolsInstance {\n id: string;\n componentId: string;\n name: string;\n file: string;\n props: DevtoolsValue;\n signals: Record<string, DevtoolsValue>;\n parentId: string | null;\n childIds: string[];\n status: \"hydrated\";\n breakpoint: boolean;\n}\n\n/** Cambio reciente del árbol de componentes o de una señal. */\nexport interface DevtoolsEvent {\n id: number;\n at: number;\n kind: \"mount\" | \"unmount\" | \"signal\" | \"breakpoint\" | \"select\" | \"hmr\";\n instanceId: string;\n detail?: string;\n /** Identidad del componente conservada incluso después del desmontaje. */\n componentName?: string;\n /** Archivo fuente `.meeko` proporcionado por la compilación de desarrollo. */\n file?: string;\n /** Valor posterior de una señal, copiado con los mismos límites que una captura. */\n value?: DevtoolsValue;\n /** Expresiones de plantilla que dependían de la señal en esta instancia. No son el origen de la escritura. */\n reads?: EffectSource[];\n}\n\n/** Captura independiente de referencias DOM y de valores no serializables. */\nexport interface DevtoolsSnapshot {\n instances: DevtoolsInstance[];\n events: DevtoolsEvent[];\n selectedId: string | null;\n}\n\n/** Interfaz pública que consume una extensión o un panel de desarrollo. */\nexport interface DevtoolsHook {\n snapshot(): DevtoolsSnapshot;\n subscribe(listener: () => void): () => void;\n select(id: string | null): void;\n highlight(id: string | null): void;\n setBreakpoint(id: string, enabled: boolean): void;\n}\n\n/** Datos que entrega un componente compilado cuando se hidrata en desarrollo. */\nexport interface DevtoolsRegistration {\n componentId: string;\n name: string;\n file: string;\n scope: DomScope;\n props: unknown;\n bindings: Record<string, unknown>;\n}\n\ndeclare global {\n interface Window {\n __MEEKO_DEVTOOLS__?: DevtoolsHook;\n }\n}\n\ninterface ActiveInstance extends DevtoolsRegistration {\n id: string;\n key: Node;\n owner: object | undefined;\n breakpoint: boolean;\n stopSignals: Array<() => void>;\n}\n\nconst active = new Map<string, ActiveInstance>();\nconst identities = new WeakMap<Node, { id: string; breakpoint: boolean }>();\nconst listeners = new Set<() => void>();\nconst recent: DevtoolsEvent[] = [];\nlet nextInstance = 1;\nlet nextEvent = 1;\nlet selectedId: string | null = null;\nlet highlightedId: string | null = null;\nlet overlay: HTMLElement | undefined;\nlet highlightObserver: MutationObserver | undefined;\nlet highlightFrame: number | undefined;\n\n/** Copia datos arbitrarios con profundidad y tamaño acotados sin invocar getters. */\nfunction safeValue(value: unknown, depth = 0, seen = new WeakSet<object>()): DevtoolsValue {\n if (value === null || typeof value === \"boolean\") return value;\n if (typeof value === \"string\") return value.length > 500 ? `${value.slice(0, 500)}…` : value;\n if (typeof value === \"number\") return Number.isFinite(value) ? value : String(value);\n if (typeof value === \"undefined\") return \"[undefined]\";\n if (typeof value === \"bigint\") return `${value}n`;\n if (typeof value === \"symbol\") return \"[symbol]\";\n if (typeof value === \"function\") return \"[function]\";\n if (typeof value !== \"object\") return \"[unknown]\";\n if (typeof Node !== \"undefined\" && value instanceof Node) return \"[DOM node]\";\n try {\n if (typeof Reflect.get(value, \"nodeType\") === \"number\" && typeof Reflect.get(value, \"nodeName\") === \"string\") return \"[DOM node]\";\n } catch {\n return \"[uninspectable]\";\n }\n if (seen.has(value)) return \"[circular]\";\n if (depth >= 4) return \"[max depth]\";\n if (value instanceof Date) return Number.isNaN(value.getTime()) ? \"[invalid date]\" : value.toISOString();\n if (value instanceof Error) return safeValue(`[${value.name}: ${value.message}]`);\n seen.add(value);\n try {\n if (Array.isArray(value)) {\n const items: DevtoolsValue[] = [];\n for (let index = 0; index < Math.min(value.length, 50); index++) {\n const descriptor = Object.getOwnPropertyDescriptor(value, String(index));\n items.push(descriptor && \"value\" in descriptor ? safeValue(descriptor.value, depth + 1, seen) : descriptor ? \"[accessor]\" : \"[empty]\");\n }\n if (value.length > 50) items.push(`[${value.length - 50} more]`);\n return items;\n }\n const result: Record<string, DevtoolsValue> = Object.create(null) as Record<string, DevtoolsValue>;\n const keys = Object.keys(value);\n for (const key of keys.slice(0, 50)) {\n const descriptor = Object.getOwnPropertyDescriptor(value, key);\n result[key] = descriptor && \"value\" in descriptor ? safeValue(descriptor.value, depth + 1, seen) : \"[accessor]\";\n }\n if (keys.length > 50) result[\"…\"] = `[${keys.length - 50} more]`;\n return result;\n } catch {\n return \"[uninspectable]\";\n } finally {\n seen.delete(value);\n }\n}\n\nfunction notify(): void {\n for (const listener of [...listeners]) {\n try { untrack(listener); } catch { /* Un panel externo no debe romper la aplicación. */ }\n }\n}\n\nfunction record(kind: DevtoolsEvent[\"kind\"], instanceId: string, detail?: string, value?: DevtoolsValue, source?: ActiveInstance, reads?: EffectSource[]): void {\n const event: DevtoolsEvent = { id: nextEvent++, at: Date.now(), kind, instanceId };\n if (detail !== undefined) event.detail = detail;\n const entry = source ?? active.get(instanceId);\n if (entry) {\n event.componentName = entry.name;\n event.file = entry.file;\n }\n if (value !== undefined) event.value = value;\n if (reads?.length) event.reads = reads;\n recent.push(event);\n if (recent.length > 100) recent.shift();\n notify();\n}\n\nfunction keyOf(scope: DomScope): Node {\n return scope.start ?? scope.root;\n}\n\nfunction isInside(parent: ActiveInstance, child: ActiveInstance): boolean {\n if (parent.id === child.id || parent.key === child.key) return false;\n const node = child.key;\n if (!parent.scope.start || !parent.scope.end) return parent.scope.root.contains(node);\n const { start, end } = parent.scope;\n return Boolean(start.compareDocumentPosition(node) & Node.DOCUMENT_POSITION_FOLLOWING)\n && Boolean(end.compareDocumentPosition(node) & Node.DOCUMENT_POSITION_PRECEDING);\n}\n\nfunction parentOf(child: ActiveInstance): ActiveInstance | undefined {\n let parent: ActiveInstance | undefined;\n for (const candidate of active.values()) {\n if (!isInside(candidate, child)) continue;\n if (!parent || isInside(parent, candidate)) parent = candidate;\n }\n return parent;\n}\n\nfunction bounds(instance: ActiveInstance): DOMRect {\n if (!instance.scope.start || !instance.scope.end) return instance.scope.root.getBoundingClientRect();\n const range = instance.scope.start.ownerDocument.createRange();\n range.setStartAfter(instance.scope.start);\n range.setEndBefore(instance.scope.end);\n return range.getBoundingClientRect();\n}\n\nfunction positionHighlight(): void {\n const entry = highlightedId ? active.get(highlightedId) : undefined;\n if (!entry || !overlay) return;\n try {\n const rect = bounds(entry);\n Object.assign(overlay.style, {\n left: `${rect.left}px`, top: `${rect.top}px`,\n width: `${rect.width}px`, height: `${rect.height}px`,\n });\n } catch {\n removeHighlight();\n }\n}\n\nfunction scheduleHighlight(): void {\n if (highlightFrame !== undefined) return;\n highlightFrame = window.requestAnimationFrame(() => {\n highlightFrame = undefined;\n positionHighlight();\n });\n}\n\nfunction removeHighlight(): void {\n window.removeEventListener(\"scroll\", scheduleHighlight, true);\n window.removeEventListener(\"resize\", scheduleHighlight);\n highlightObserver?.disconnect();\n highlightObserver = undefined;\n if (highlightFrame !== undefined) window.cancelAnimationFrame(highlightFrame);\n highlightFrame = undefined;\n overlay?.remove();\n overlay = undefined;\n highlightedId = null;\n}\n\nconst hook: DevtoolsHook = {\n snapshot() {\n return untrack(() => {\n const instances: DevtoolsInstance[] = [];\n for (const entry of active.values()) {\n const signals: Record<string, DevtoolsValue> = Object.create(null) as Record<string, DevtoolsValue>;\n for (const [name, value] of Object.entries(entry.bindings)) {\n if (isWritableSignal(value)) signals[name] = safeValue(value.value);\n }\n instances.push({\n id: entry.id,\n componentId: entry.componentId,\n name: entry.name,\n file: entry.file,\n props: safeValue(entry.props),\n signals,\n parentId: parentOf(entry)?.id ?? null,\n childIds: [],\n status: \"hydrated\",\n breakpoint: entry.breakpoint,\n });\n }\n const byId = new Map(instances.map((instance) => [instance.id, instance]));\n for (const instance of instances) {\n if (instance.parentId) byId.get(instance.parentId)?.childIds.push(instance.id);\n }\n return { instances, events: recent.map((event) => ({ ...event })), selectedId };\n });\n },\n subscribe(listener) {\n listeners.add(listener);\n return () => { listeners.delete(listener); };\n },\n select(id) {\n if (id !== null && !active.has(id)) return;\n selectedId = id;\n record(\"select\", id ?? \"\");\n },\n highlight(id) {\n removeHighlight();\n if (id === null) return;\n const entry = active.get(id);\n if (!entry) return;\n const document = entry.key.ownerDocument ?? window.document;\n const element = document.createElement(\"div\");\n element.setAttribute(\"data-meeko-devtools-highlight\", \"\");\n Object.assign(element.style, {\n position: \"fixed\",\n outline: \"2px solid #7c3aed\", background: \"rgba(124, 58, 237, 0.12)\",\n pointerEvents: \"none\", zIndex: \"2147483647\",\n });\n document.body.appendChild(element);\n overlay = element;\n highlightedId = id;\n positionHighlight();\n window.addEventListener(\"scroll\", scheduleHighlight, true);\n window.addEventListener(\"resize\", scheduleHighlight);\n highlightObserver = new window.MutationObserver((mutations) => {\n if (mutations.some((mutation) => mutation.target !== overlay && !overlay?.contains(mutation.target))) scheduleHighlight();\n });\n highlightObserver.observe(entry.scope.root, { attributes: true, characterData: true, childList: true, subtree: true });\n },\n setBreakpoint(id, enabled) {\n const entry = active.get(id);\n if (!entry) return;\n entry.breakpoint = enabled;\n const identity = identities.get(entry.key);\n if (identity) identity.breakpoint = enabled;\n record(\"breakpoint\", id, enabled ? \"enabled\" : \"disabled\");\n },\n};\n\nfunction unregister(entry: ActiveInstance): void {\n if (active.get(entry.id) !== entry) return;\n for (const stop of entry.stopSignals) stop();\n active.delete(entry.id);\n if (selectedId === entry.id) selectedId = null;\n if (highlightedId === entry.id) removeHighlight();\n record(\"unmount\", entry.id, undefined, undefined, entry);\n}\n\n/** Registra señales y ámbito de una instancia hidratada en Vite desarrollo. */\nexport function registerDevtoolsInstance(input: DevtoolsRegistration): () => void {\n if (typeof window === \"undefined\" || typeof Node === \"undefined\") return () => {};\n if (!window.__MEEKO_DEVTOOLS__) {\n window.__MEEKO_DEVTOOLS__ = hook;\n window.dispatchEvent(new window.Event(\"meeko:devtools-ready\"));\n }\n const key = keyOf(input.scope);\n const previous = identities.get(key);\n const identity = previous ?? { id: `meeko-${nextInstance++}`, breakpoint: false };\n identities.set(key, identity);\n const existing = active.get(identity.id);\n if (existing) unregister(existing);\n const entry: ActiveInstance = { ...input, id: identity.id, key, owner: currentEffectOwner(), breakpoint: identity.breakpoint, stopSignals: [] };\n active.set(entry.id, entry);\n for (const [name, value] of Object.entries(input.bindings)) {\n if (!isWritableSignal(value)) continue;\n const signal = value as Signal<unknown>;\n let initial = true;\n entry.stopSignals.push(effect(() => {\n const current = signal.value;\n if (initial) { initial = false; return; }\n record(\"signal\", entry.id, name, safeValue(current), entry, signalReadSites(signal, entry.owner));\n if (entry.breakpoint) {\n debugger;\n }\n }));\n }\n record(previous ? \"hmr\" : \"mount\", entry.id);\n return () => { unregister(entry); };\n}\n"]}
package/dist/dom.d.ts CHANGED
@@ -14,6 +14,13 @@ export interface ComponentModule<Props extends object> {
14
14
  };
15
15
  hydrateScope(scope: DomScope, props: Props, state?: Record<string, unknown>): ComponentRelease;
16
16
  }
17
+ /** Componente compilado que puede transferir su estado durante SSR. */
18
+ export type Component<Props extends object> = ComponentModule<Props> & {
19
+ renderWithState(props: Props): {
20
+ html: string;
21
+ state: Record<string, unknown>;
22
+ };
23
+ };
17
24
  /** Función de limpieza que puede exponer el estado editable de su instancia. */
18
25
  export interface ComponentRelease {
19
26
  (): void;
@@ -24,7 +31,7 @@ export declare function withStateSnapshot(release: () => void, snapshot: () => R
24
31
  /** Renderiza un hijo entre comentarios de ámbito sin añadir un elemento visual. */
25
32
  export declare function renderComponent<Props extends object>(id: number, component: ComponentModule<Props>, props: Props, transferState?: boolean): string;
26
33
  /** Hidrata un hijo dentro de su rango y actualiza props reactivas con limpieza previa. */
27
- export declare function bindComponent<Props extends object>(scope: DomScope, id: number, component: ComponentModule<Props>, read: () => Props, location: string): () => void;
34
+ export declare function bindComponent<Props extends object>(scope: DomScope, id: number, input: ComponentModule<Props> | (() => ComponentModule<Props>), read: () => Props, location: string): () => void;
28
35
  /** Conecta un texto reactivo al marcador SSR y comprueba su valor inicial. */
29
36
  export declare function bindText(scope: DomScope, id: number, read: () => unknown, location: string, source?: EffectSource): () => void;
30
37
  /** Conecta un atributo dinámico al elemento SSR y comprueba su valor inicial. */
package/dist/dom.js CHANGED
@@ -107,7 +107,7 @@ function componentRegion(scope, id) {
107
107
  return { inner: { root: scope.root, start, end }, state: parsed };
108
108
  }
109
109
  /** Hidrata un hijo dentro de su rango y actualiza props reactivas con limpieza previa. */
110
- export function bindComponent(scope, id, component, read, location) {
110
+ export function bindComponent(scope, id, input, read, location) {
111
111
  let inner;
112
112
  let state;
113
113
  try {
@@ -116,18 +116,22 @@ export function bindComponent(scope, id, component, read, location) {
116
116
  catch (error) {
117
117
  throw new Error(`Hydration mismatch in ${location}: ${error instanceof Error ? error.message : String(error)}`, { cause: error });
118
118
  }
119
+ const resolveComponent = () => typeof input === "function" ? input() : input;
120
+ let component = resolveComponent();
119
121
  let props = read();
120
122
  let release = component.hydrateScope(inner, props, state);
121
123
  const stop = effect(() => {
124
+ const nextComponent = resolveComponent();
122
125
  const next = read();
123
- if (sameProps(props, next))
126
+ if (nextComponent === component && sameProps(props, next))
124
127
  return;
125
- const state = release.snapshot?.();
126
- const html = component.renderToString(next, state);
128
+ const state = nextComponent === component ? release.snapshot?.() : undefined;
129
+ const html = nextComponent.renderToString(next, state);
127
130
  release();
128
131
  clearRegion(inner);
129
132
  insertHtml(inner.end, html);
130
- release = component.hydrateScope(inner, next, state);
133
+ release = nextComponent.hydrateScope(inner, next, state);
134
+ component = nextComponent;
131
135
  props = next;
132
136
  });
133
137
  return () => { stop(); release(); };
@@ -375,3 +379,4 @@ export function bindFor(scope, id, read, keyOf, render, hydrate, trackIndex = tr
375
379
  return () => { stop(); for (const entry of entries.values())
376
380
  entry.release(); entries.clear(); };
377
381
  }
382
+ //# sourceMappingURL=dom.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dom.js","sourceRoot":"","sources":["../src/dom.ts"],"names":[],"mappings":"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","sourcesContent":["import { createRoot, effect, signal } from \"./reactivity.js\";\nimport type { EffectSource, Signal } from \"./reactivity.js\";\nimport { attributeValue, serializeJson } from \"./server.js\";\n\n/** Fragmento de DOM que pertenece a una instancia o a una región dinámica. */\nexport interface DomScope {\n root: Element;\n start?: Comment;\n end?: Comment;\n}\n\n/** Contrato de un módulo de componente compilado para composición sin wrapper. */\nexport interface ComponentModule<Props extends object> {\n renderToString(props: Props, state?: Record<string, unknown>): string;\n renderWithState?(props: Props): { html: string; state: Record<string, unknown> };\n hydrateScope(scope: DomScope, props: Props, state?: Record<string, unknown>): ComponentRelease;\n}\n\n/** Componente compilado que puede transferir su estado durante SSR. */\nexport type Component<Props extends object> = ComponentModule<Props> & {\n renderWithState(props: Props): { html: string; state: Record<string, unknown> };\n};\n\n/** Función de limpieza que puede exponer el estado editable de su instancia. */\nexport interface ComponentRelease {\n (): void;\n snapshot?: () => Record<string, unknown>;\n}\n\n/** Añade una lectura de estado a la limpieza de un componente compilado. */\nexport function withStateSnapshot(release: () => void, snapshot: () => Record<string, unknown>): ComponentRelease {\n return Object.assign(release, { snapshot });\n}\n\nconst componentStart = /^meeko:component:\\d+(?::.*)?$/;\n\nfunction componentEnd(start: Node): Node {\n let depth = 0;\n for (let node: Node | null = start; node; node = node.nextSibling) {\n if (node.nodeType !== 8) continue;\n const data = (node as Comment).data;\n if (componentStart.test(data)) depth++;\n else if (/^\\/meeko:component:\\d+$/.test(data) && --depth === 0) return node;\n }\n throw new Error(`Missing end marker for ${(start as Comment).data}`);\n}\n\nfunction visit(scope: DomScope, callback: (node: Node) => boolean): Node | undefined {\n function siblings(first: Node | null, stop: Node | null = null): Node | undefined {\n for (let node = first; node && node !== stop;) {\n if (callback(node)) return node;\n if (node.nodeType === 8 && componentStart.test((node as Comment).data)) {\n const end = componentEnd(node);\n if (callback(end)) return end;\n node = end.nextSibling;\n continue;\n }\n const found = siblings(node.firstChild);\n if (found) return found;\n node = node.nextSibling;\n }\n return undefined;\n }\n return siblings(scope.start?.nextSibling ?? scope.root.firstChild, scope.end ?? null);\n}\n\nfunction findComment(scope: DomScope, data: string): Comment {\n const node = visit(scope, (candidate) => candidate.nodeType === 8 && (candidate as Comment).data === data);\n if (!node) throw new Error(`Missing Meeko marker ${data}`);\n return node as Comment;\n}\n\nfunction findElement(scope: DomScope, name: string): Element {\n const node = visit(scope, (candidate) => candidate.nodeType === 1 && (candidate as Element).hasAttribute(name));\n if (!node) throw new Error(`Missing Meeko target ${name}`);\n return node as Element;\n}\n\nfunction region(scope: DomScope, kind: string, id: number): DomScope {\n const start = findComment(scope, `meeko:${kind}:${id}`);\n const end = findComment(scope, `/meeko:${kind}:${id}`);\n if (start.parentNode !== end.parentNode) throw new Error(`Invalid Meeko region ${kind}:${id}`);\n return { root: scope.root, start, end };\n}\n\nfunction clearRegion(scope: DomScope): void {\n if (!scope.start || !scope.end) throw new Error(\"Expected a bounded Meeko region\");\n for (let node = scope.start.nextSibling; node && node !== scope.end;) {\n const next = node.nextSibling;\n node.parentNode?.removeChild(node);\n node = next;\n }\n}\n\nfunction insertHtml(end: Comment, html: string): void {\n const parent = end.parentNode;\n if (!parent) throw new Error(\"Detached Meeko region\");\n const range = end.ownerDocument.createRange();\n range.selectNodeContents(parent);\n parent.insertBefore(range.createContextualFragment(html), end);\n}\n\nfunction sameProps<Props extends object>(first: Props, second: Props): boolean {\n const firstKeys = Object.keys(first);\n const secondKeys = Object.keys(second);\n return firstKeys.length === secondKeys.length && firstKeys.every((key) => Object.hasOwn(second, key) && Object.is(first[key as keyof Props], second[key as keyof Props]));\n}\n\n/** Renderiza un hijo entre comentarios de ámbito sin añadir un elemento visual. */\nexport function renderComponent<Props extends object>(id: number, component: ComponentModule<Props>, props: Props, transferState = false): string {\n if (transferState) {\n if (!component.renderWithState) throw new TypeError(`Component ${id} cannot transfer SSR state`);\n const rendered = component.renderWithState(props);\n return `<!--meeko:component:${id}:${encodeURIComponent(serializeJson(rendered.state))}-->${rendered.html}<!--/meeko:component:${id}-->`;\n }\n return `<!--meeko:component:${id}-->${component.renderToString(props)}<!--/meeko:component:${id}-->`;\n}\n\nfunction componentRegion(scope: DomScope, id: number): { inner: DomScope; state?: Record<string, unknown> } {\n const prefix = `meeko:component:${id}`;\n const start = visit(scope, (candidate) => candidate.nodeType === 8 && ((candidate as Comment).data === prefix || (candidate as Comment).data.startsWith(`${prefix}:`))) as Comment | undefined;\n if (!start) throw new Error(`Missing Meeko marker ${prefix}`);\n const end = findComment(scope, `/meeko:component:${id}`);\n if (start.parentNode !== end.parentNode) throw new Error(`Invalid Meeko region component:${id}`);\n const encoded = start.data.slice(prefix.length);\n if (!encoded) return { inner: { root: scope.root, start, end } };\n const parsed: unknown = JSON.parse(decodeURIComponent(encoded.slice(1)));\n if (typeof parsed !== \"object\" || parsed === null || Array.isArray(parsed)) throw new TypeError(`Invalid Meeko state for component:${id}`);\n return { inner: { root: scope.root, start, end }, state: parsed as Record<string, unknown> };\n}\n\n/** Hidrata un hijo dentro de su rango y actualiza props reactivas con limpieza previa. */\nexport function bindComponent<Props extends object>(scope: DomScope, id: number, input: ComponentModule<Props> | (() => ComponentModule<Props>), read: () => Props, location: string): () => void {\n let inner: DomScope;\n let state: Record<string, unknown> | undefined;\n try {\n ({ inner, state } = componentRegion(scope, id));\n } catch (error) {\n throw new Error(`Hydration mismatch in ${location}: ${error instanceof Error ? error.message : String(error)}`, { cause: error });\n }\n const resolveComponent = (): ComponentModule<Props> => typeof input === \"function\" ? input() : input;\n let component = resolveComponent();\n let props = read();\n let release = component.hydrateScope(inner, props, state);\n const stop = effect(() => {\n const nextComponent = resolveComponent();\n const next = read();\n if (nextComponent === component && sameProps(props, next)) return;\n const state = nextComponent === component ? release.snapshot?.() : undefined;\n const html = nextComponent.renderToString(next, state);\n release();\n clearRegion(inner);\n insertHtml(inner.end!, html);\n release = nextComponent.hydrateScope(inner, next, state);\n component = nextComponent;\n props = next;\n });\n return () => { stop(); release(); };\n}\n\n/** Conecta un texto reactivo al marcador SSR y comprueba su valor inicial. */\nexport function bindText(scope: DomScope, id: number, read: () => unknown, location: string, source?: EffectSource): () => void {\n const marker = findComment(scope, `meeko:text:${id}`);\n const text = marker.nextSibling;\n if (!text || text.nodeType !== 3) throw new Error(`Missing text node in ${location}`);\n const initial = String(read());\n if (text.textContent !== initial) throw new Error(`Hydration mismatch in ${location}`);\n let first = true;\n return effect(() => {\n const next = String(read());\n if (first) {\n first = false;\n if (text.textContent === next) return;\n }\n text.textContent = next;\n }, source);\n}\n\n/** Conecta un atributo dinámico al elemento SSR y comprueba su valor inicial. */\nexport function bindAttribute(scope: DomScope, id: number, name: string, read: () => unknown, location: string, source?: EffectSource): () => void {\n const target = findElement(scope, `data-meeko-a-${id}`);\n const initial = attributeValue(name, read());\n if (target.getAttribute(name) !== initial) throw new Error(`Hydration mismatch in ${location}`);\n let first = true;\n return effect(() => {\n const next = attributeValue(name, read());\n if (first) {\n first = false;\n if (target.getAttribute(name) === next) return;\n }\n if (next === null) target.removeAttribute(name);\n else target.setAttribute(name, next);\n }, source);\n}\n\n/** Conecta un evento al elemento SSR y entrega su función de limpieza. */\nexport function bindEvent(scope: DomScope, id: number, name: string, handler: (event: Event) => void): () => void {\n const target = findElement(scope, `data-meeko-e-${id}`);\n target.addEventListener(name, handler);\n return () => target.removeEventListener(name, handler);\n}\n\n/** Genera los límites estables de una condición en SSR. */\nexport function renderIf(id: number, condition: unknown, render: () => string): string {\n return `<!--meeko:if:${id}-->${condition ? render() : \"\"}<!--/meeko:if:${id}-->`;\n}\n\n/** Hidrata una condición y conserva los nodos mientras sigue siendo verdadera. */\nexport function bindIf(scope: DomScope, id: number, read: () => unknown, render: () => string, hydrate: (inner: DomScope) => () => void): () => void {\n const inner = region(scope, \"if\", id);\n let active = Boolean(read());\n if (!active && inner.start?.nextSibling !== inner.end) throw new Error(`Hydration mismatch in condition ${id}`);\n let release = active ? hydrate(inner) : undefined;\n const stop = effect(() => {\n const next = Boolean(read());\n if (next === active) return;\n release?.();\n release = undefined;\n clearRegion(inner);\n if (next) {\n insertHtml(inner.end!, render());\n release = hydrate(inner);\n }\n active = next;\n });\n return () => { stop(); release?.(); };\n}\n\n/** Convierte una clave de lista en un token seguro para comentarios HTML. */\nexport function keyToken(key: unknown): string {\n if (typeof key === \"number\" && Number.isFinite(key)) return `n${encodeURIComponent(String(key)).replaceAll(\"-\", \"%2D\")}`;\n if (typeof key === \"string\") return `s${encodeURIComponent(key).replaceAll(\"-\", \"%2D\")}`;\n throw new TypeError(\"Meeko list keys must be strings or finite numbers\");\n}\n\n/** Renderiza una lista con límites identificados por claves únicas. */\nexport function renderFor<T>(id: number, items: Iterable<T>, keyOf: (item: T, index: number) => string | number, render: (item: T, index: number) => string): string {\n const seen = new Set<string>();\n let html = `<!--meeko:for:${id}-->`;\n let index = 0;\n for (const item of items) {\n const key = keyToken(keyOf(item, index));\n if (seen.has(key)) throw new Error(`Duplicate Meeko list key ${key}`);\n seen.add(key);\n html += `<!--meeko:item:${id}:${key}-->${render(item, index)}<!--/meeko:item:${id}:${key}-->`;\n index++;\n }\n return `${html}<!--/meeko:for:${id}-->`;\n}\n\ninterface ListEntry<T> {\n key: string;\n start: Comment;\n end: Comment;\n value: Signal<T>;\n index: Signal<number> | undefined;\n release: () => void;\n}\n\nfunction moveRange(start: Comment, end: Comment, before: Node): void {\n const parent = before.parentNode;\n if (!parent) throw new Error(\"Detached Meeko list\");\n const document = before.ownerDocument;\n if (!document) throw new Error(\"Missing document for Meeko list\");\n const fragment = document.createDocumentFragment();\n for (let node: Node | null = start; node;) {\n const next: Node | null = node.nextSibling;\n fragment.appendChild(node);\n if (node === end) break;\n node = next;\n }\n parent.insertBefore(fragment, before);\n}\n\n/** Encuentra las posiciones que ya mantienen el orden relativo de la lista anterior. */\nfunction stableListPositions(indices: readonly number[]): Set<number> {\n const tails: number[] = [];\n const previous = new Int32Array(indices.length).fill(-1);\n for (let index = 0; index < indices.length; index++) {\n const oldIndex = indices[index]!;\n if (oldIndex < 0) continue;\n let low = 0;\n let high = tails.length;\n while (low < high) {\n const middle = (low + high) >>> 1;\n if (indices[tails[middle]!]! < oldIndex) low = middle + 1;\n else high = middle;\n }\n if (low > 0) previous[index] = tails[low - 1]!;\n tails[low] = index;\n }\n const stable = new Set<number>();\n for (let index = tails.at(-1) ?? -1; index >= 0; index = previous[index]!) stable.add(index);\n return stable;\n}\n\n/**\n * Hidrata una lista y reordena regiones por clave sin reemplazar nodos conservados.\n * El compilador desactiva `trackIndex` sólo cuando el cuerpo de hidratación no lee\n * la señal de índice; las llamadas directas conservan la señal por defecto.\n */\nexport function bindFor<T>(scope: DomScope, id: number, read: () => Iterable<T>, keyOf: (item: T, index: number) => string | number, render: (item: T, index: number) => string, hydrate: (item: Signal<T>, index: Signal<number>, inner: DomScope) => () => void, trackIndex = true): () => void {\n const outer = region(scope, \"for\", id);\n const entries = new Map<string, ListEntry<T>>();\n const initial = [...read()];\n let currentKeys: string[] = [];\n let cursor = outer.start!.nextSibling;\n for (let index = 0; index < initial.length; index++) {\n const item = initial[index]!;\n const key = keyToken(keyOf(item, index));\n if (entries.has(key)) throw new Error(`Duplicate Meeko list key ${key}`);\n const startData = `meeko:item:${id}:${key}`;\n const endData = `/meeko:item:${id}:${key}`;\n if (!cursor || cursor.nodeType !== 8 || (cursor as Comment).data !== startData) throw new Error(`Hydration mismatch in list ${id} at key ${key}`);\n const start = cursor as Comment;\n let end = start.nextSibling;\n while (end && (end.nodeType !== 8 || (end as Comment).data !== endData)) end = end.nextSibling;\n if (!end) throw new Error(`Missing end marker for list key ${key}`);\n const value = signal(item);\n const position = trackIndex ? signal(index) : undefined;\n const release = createRoot((dispose) => {\n const cleanup = hydrate(value, position as Signal<number>, { root: scope.root, start, end: end as Comment });\n return () => { cleanup(); dispose(); };\n });\n entries.set(key, { key, start, end: end as Comment, value, index: position, release });\n currentKeys.push(key);\n cursor = end.nextSibling;\n }\n if (cursor !== outer.end) throw new Error(`Hydration mismatch in list ${id}: extra nodes`);\n let initialItems: T[] | undefined = initial;\n const stop = effect(() => {\n const items = [...read()];\n if (initialItems) {\n const previous = initialItems;\n initialItems = undefined;\n if (items.length === previous.length && items.every((item, index) =>\n Object.is(item, previous[index]) && keyToken(keyOf(item, index)) === currentKeys[index])) return;\n }\n const nextKeys = items.map((item, index) => keyToken(keyOf(item, index)));\n const nextKeySet = new Set(nextKeys);\n if (nextKeySet.size !== nextKeys.length) throw new Error(`Duplicate Meeko list key in region ${id}`);\n const oldPositions = new Map(currentKeys.map((key, index) => [key, index]));\n const oldIndices = nextKeys.map((key) => oldPositions.get(key) ?? -1);\n const stable = stableListPositions(oldIndices);\n for (const [key, entry] of entries) {\n if (nextKeySet.has(key)) continue;\n entry.release();\n let node: Node | null = entry.start;\n while (node) {\n const next: Node | null = node.nextSibling;\n node.parentNode?.removeChild(node);\n if (node === entry.end) break;\n node = next;\n }\n entries.delete(key);\n }\n let before: Node = outer.end!;\n for (let index = items.length - 1; index >= 0; index--) {\n const item = items[index]!;\n const key = nextKeys[index]!;\n let entry = entries.get(key);\n if (!entry) {\n const html = `<!--meeko:item:${id}:${key}-->${render(item, index)}<!--/meeko:item:${id}:${key}-->`;\n insertHtml(before as Comment, html);\n const end = before.previousSibling as Comment;\n let start: Node | null = end.previousSibling;\n while (start && (start.nodeType !== 8 || (start as Comment).data !== `meeko:item:${id}:${key}`)) start = start.previousSibling;\n if (!start) throw new Error(`Missing new list marker for ${key}`);\n const value = signal(item);\n const position = trackIndex ? signal(index) : undefined;\n const release = createRoot((dispose) => {\n const cleanup = hydrate(value, position as Signal<number>, { root: scope.root, start: start as Comment, end });\n return () => { cleanup(); dispose(); };\n });\n entry = { key, start: start as Comment, end, value, index: position, release };\n entries.set(key, entry);\n } else {\n entry.value.value = item;\n if (entry.index) entry.index.value = index;\n }\n if (oldIndices[index] !== -1 && !stable.has(index) && entry.end.nextSibling !== before) moveRange(entry.start, entry.end, before);\n before = entry.start;\n }\n currentKeys = nextKeys;\n });\n return () => { stop(); for (const entry of entries.values()) entry.release(); entries.clear(); };\n}\n"]}
@@ -0,0 +1,5 @@
1
+ import type { CompileDiagnostic } from "../compiler/sfc.js";
2
+ /** Checks every discovered application component, including new pages and layouts. */
3
+ export declare function checkApp(projectRoot: string): Promise<CompileDiagnostic[]>;
4
+ /** Mirrors app component declarations into the project's virtual type tree. */
5
+ export declare function generateAppTypes(projectRoot: string): Promise<string[]>;
@@ -0,0 +1,59 @@
1
+ import { readdir, readFile } from "node:fs/promises";
2
+ import { join, resolve } from "node:path";
3
+ import { checkSource } from "../check.js";
4
+ import { generateTypes } from "../types.js";
5
+ import { resolveConfigSources } from "./config.js";
6
+ async function appMeekoFiles(projectRoot) {
7
+ const root = resolve(projectRoot);
8
+ const files = [];
9
+ async function walk(directory) {
10
+ let entries;
11
+ try {
12
+ entries = await readdir(directory, { withFileTypes: true });
13
+ }
14
+ catch (error) {
15
+ if (error.code === "ENOENT")
16
+ return;
17
+ throw error;
18
+ }
19
+ for (const entry of entries) {
20
+ const path = join(directory, entry.name);
21
+ if (entry.isDirectory())
22
+ await walk(path);
23
+ else if (entry.isFile() && entry.name.endsWith(".meeko"))
24
+ files.push(path);
25
+ }
26
+ }
27
+ for (const source of await resolveConfigSources(root)) {
28
+ await walk(join(source.root, "app", "pages"));
29
+ await walk(join(source.root, "app", "components"));
30
+ for (const file of [join(source.root, "app", "app.meeko"), join(source.root, "app", "error.meeko")]) {
31
+ try {
32
+ await readFile(file);
33
+ files.push(file);
34
+ }
35
+ catch (error) {
36
+ if (error.code !== "ENOENT")
37
+ throw error;
38
+ }
39
+ }
40
+ }
41
+ return files.sort();
42
+ }
43
+ /** Checks every discovered application component, including new pages and layouts. */
44
+ export async function checkApp(projectRoot) {
45
+ const diagnostics = [];
46
+ for (const file of await appMeekoFiles(projectRoot))
47
+ diagnostics.push(...await checkSource(await readFile(file, "utf8"), file));
48
+ return diagnostics;
49
+ }
50
+ /** Mirrors app component declarations into the project's virtual type tree. */
51
+ export async function generateAppTypes(projectRoot) {
52
+ const outputs = new Set();
53
+ for (const file of await appMeekoFiles(projectRoot)) {
54
+ for (const output of await generateTypes(await readFile(file, "utf8"), file))
55
+ outputs.add(output);
56
+ }
57
+ return [...outputs].sort();
58
+ }
59
+ //# sourceMappingURL=check-app.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"check-app.js","sourceRoot":"","sources":["../../src/framework/check-app.ts"],"names":[],"mappings":"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","sourcesContent":["import { readdir, readFile } from \"node:fs/promises\";\nimport { join, resolve } from \"node:path\";\nimport { checkSource } from \"../check.js\";\nimport type { CompileDiagnostic } from \"../compiler/sfc.js\";\nimport { generateTypes } from \"../types.js\";\nimport { resolveConfigSources } from \"./config.js\";\n\nasync function appMeekoFiles(projectRoot: string): Promise<string[]> {\n const root = resolve(projectRoot);\n const files: string[] = [];\n async function walk(directory: string): Promise<void> {\n let entries;\n try { entries = await readdir(directory, { withFileTypes: true }); }\n catch (error) { if ((error as NodeJS.ErrnoException).code === \"ENOENT\") return; throw error; }\n for (const entry of entries) {\n const path = join(directory, entry.name);\n if (entry.isDirectory()) await walk(path);\n else if (entry.isFile() && entry.name.endsWith(\".meeko\")) files.push(path);\n }\n }\n for (const source of await resolveConfigSources(root)) {\n await walk(join(source.root, \"app\", \"pages\"));\n await walk(join(source.root, \"app\", \"components\"));\n for (const file of [join(source.root, \"app\", \"app.meeko\"), join(source.root, \"app\", \"error.meeko\")]) {\n try { await readFile(file); files.push(file); }\n catch (error) { if ((error as NodeJS.ErrnoException).code !== \"ENOENT\") throw error; }\n }\n }\n return files.sort();\n}\n\n/** Checks every discovered application component, including new pages and layouts. */\nexport async function checkApp(projectRoot: string): Promise<CompileDiagnostic[]> {\n const diagnostics: CompileDiagnostic[] = [];\n for (const file of await appMeekoFiles(projectRoot)) diagnostics.push(...await checkSource(await readFile(file, \"utf8\"), file));\n return diagnostics;\n}\n\n/** Mirrors app component declarations into the project's virtual type tree. */\nexport async function generateAppTypes(projectRoot: string): Promise<string[]> {\n const outputs = new Set<string>();\n for (const file of await appMeekoFiles(projectRoot)) {\n for (const output of await generateTypes(await readFile(file, \"utf8\"), file)) outputs.add(output);\n }\n return [...outputs].sort();\n}\n"]}
@@ -0,0 +1,45 @@
1
+ import type { DomScope } from "../dom.js";
2
+ import type { PageSchema } from "./page.js";
3
+ import type { NavigationContext, Navigator, RouteRecord } from "./router.js";
4
+ import { StateStore } from "./state.js";
5
+ /** The public shape emitted by the .meeko compiler. */
6
+ export interface ClientComponent {
7
+ renderWithState(props: Record<string, unknown>): {
8
+ html: string;
9
+ state: Record<string, unknown>;
10
+ };
11
+ renderToString(props: Record<string, unknown>, state?: Record<string, unknown>): string;
12
+ hydrateScope(scope: DomScope, props: Record<string, unknown>, state?: Record<string, unknown>): () => void;
13
+ }
14
+ export interface ClientRoute {
15
+ /** Client-safe loader. Server-only sidecars must not be passed to loadRoute. */
16
+ params?: PageSchema;
17
+ search?: PageSchema;
18
+ load?: (context: NavigationContext & {
19
+ params: Readonly<Record<string, unknown>>;
20
+ search: Readonly<Record<string, unknown>>;
21
+ state: StateStore;
22
+ }) => Promise<unknown> | unknown;
23
+ }
24
+ export interface ClientAppOptions {
25
+ readonly routes: readonly RouteRecord[];
26
+ readonly root: Element;
27
+ readonly payload: string | unknown;
28
+ readonly loadPage: (file: string) => Promise<ClientComponent>;
29
+ readonly loadRoute?: (file: string) => Promise<ClientRoute>;
30
+ /** Fetches public loader data from the SSR handler during browser navigation. */
31
+ readonly serverData?: boolean;
32
+ readonly fetch?: typeof fetch;
33
+ readonly onNavigationError?: (error: unknown) => void;
34
+ readonly browser?: Window;
35
+ }
36
+ export interface ClientApp {
37
+ navigate: Navigator["navigate"];
38
+ readonly state: StateStore;
39
+ dispose(): void;
40
+ }
41
+ /**
42
+ * Hydrates the SSR tree and updates only the first changed outlet on navigation.
43
+ * Layout templates render their outlet with <component is="props.outlet"/>.
44
+ */
45
+ export declare function mountClientApp(options: ClientAppOptions): Promise<ClientApp>;