threadforge 0.1.1 → 0.2.1

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 (358) hide show
  1. package/README.md +52 -20
  2. package/bin/forge.js +2 -1058
  3. package/bin/host-commands.d.ts +2 -0
  4. package/bin/host-commands.d.ts.map +1 -0
  5. package/bin/host-commands.js +7 -8
  6. package/bin/platform-commands.d.ts +2 -0
  7. package/bin/platform-commands.d.ts.map +1 -0
  8. package/bin/platform-commands.js +118 -36
  9. package/dist/cli/base-command.d.ts +12 -0
  10. package/dist/cli/base-command.d.ts.map +1 -0
  11. package/dist/cli/base-command.js +25 -0
  12. package/dist/cli/base-command.js.map +1 -0
  13. package/dist/cli/commands/build.d.ts +10 -0
  14. package/dist/cli/commands/build.d.ts.map +1 -0
  15. package/dist/cli/commands/build.js +110 -0
  16. package/dist/cli/commands/build.js.map +1 -0
  17. package/dist/cli/commands/deploy.d.ts +12 -0
  18. package/dist/cli/commands/deploy.d.ts.map +1 -0
  19. package/dist/cli/commands/deploy.js +143 -0
  20. package/dist/cli/commands/deploy.js.map +1 -0
  21. package/dist/cli/commands/dev.d.ts +10 -0
  22. package/dist/cli/commands/dev.d.ts.map +1 -0
  23. package/dist/cli/commands/dev.js +138 -0
  24. package/dist/cli/commands/dev.js.map +1 -0
  25. package/dist/cli/commands/generate.d.ts +10 -0
  26. package/dist/cli/commands/generate.d.ts.map +1 -0
  27. package/dist/cli/commands/generate.js +76 -0
  28. package/dist/cli/commands/generate.js.map +1 -0
  29. package/dist/cli/commands/host.d.ts +8 -0
  30. package/dist/cli/commands/host.d.ts.map +1 -0
  31. package/dist/cli/commands/host.js +20 -0
  32. package/dist/cli/commands/host.js.map +1 -0
  33. package/dist/cli/commands/init.d.ts +16 -0
  34. package/dist/cli/commands/init.d.ts.map +1 -0
  35. package/dist/cli/commands/init.js +246 -0
  36. package/dist/cli/commands/init.js.map +1 -0
  37. package/dist/cli/commands/platform.d.ts +8 -0
  38. package/dist/cli/commands/platform.d.ts.map +1 -0
  39. package/dist/cli/commands/platform.js +20 -0
  40. package/dist/cli/commands/platform.js.map +1 -0
  41. package/dist/cli/commands/restart.d.ts +8 -0
  42. package/dist/cli/commands/restart.d.ts.map +1 -0
  43. package/dist/cli/commands/restart.js +13 -0
  44. package/dist/cli/commands/restart.js.map +1 -0
  45. package/dist/cli/commands/scaffold/frontend.d.ts +10 -0
  46. package/dist/cli/commands/scaffold/frontend.d.ts.map +1 -0
  47. package/dist/cli/commands/scaffold/frontend.js +130 -0
  48. package/dist/cli/commands/scaffold/frontend.js.map +1 -0
  49. package/dist/cli/commands/scaffold/react.d.ts +7 -0
  50. package/dist/cli/commands/scaffold/react.d.ts.map +1 -0
  51. package/dist/cli/commands/scaffold/react.js +12 -0
  52. package/dist/cli/commands/scaffold/react.js.map +1 -0
  53. package/dist/cli/commands/scale.d.ts +8 -0
  54. package/dist/cli/commands/scale.d.ts.map +1 -0
  55. package/dist/cli/commands/scale.js +13 -0
  56. package/dist/cli/commands/scale.js.map +1 -0
  57. package/dist/cli/commands/start.d.ts +10 -0
  58. package/dist/cli/commands/start.d.ts.map +1 -0
  59. package/dist/cli/commands/start.js +71 -0
  60. package/dist/cli/commands/start.js.map +1 -0
  61. package/dist/cli/commands/status.d.ts +11 -0
  62. package/dist/cli/commands/status.d.ts.map +1 -0
  63. package/dist/cli/commands/status.js +60 -0
  64. package/dist/cli/commands/status.js.map +1 -0
  65. package/dist/cli/commands/stop.d.ts +10 -0
  66. package/dist/cli/commands/stop.d.ts.map +1 -0
  67. package/dist/cli/commands/stop.js +89 -0
  68. package/dist/cli/commands/stop.js.map +1 -0
  69. package/dist/cli/util/config-discovery.d.ts +8 -0
  70. package/dist/cli/util/config-discovery.d.ts.map +1 -0
  71. package/dist/cli/util/config-discovery.js +70 -0
  72. package/dist/cli/util/config-discovery.js.map +1 -0
  73. package/dist/cli/util/config-patcher.d.ts +17 -0
  74. package/dist/cli/util/config-patcher.d.ts.map +1 -0
  75. package/dist/cli/util/config-patcher.js +439 -0
  76. package/dist/cli/util/config-patcher.js.map +1 -0
  77. package/dist/cli/util/frontend-dev.d.ts +8 -0
  78. package/dist/cli/util/frontend-dev.d.ts.map +1 -0
  79. package/dist/cli/util/frontend-dev.js +117 -0
  80. package/dist/cli/util/frontend-dev.js.map +1 -0
  81. package/dist/cli/util/process.d.ts +5 -0
  82. package/dist/cli/util/process.d.ts.map +1 -0
  83. package/dist/cli/util/process.js +17 -0
  84. package/dist/cli/util/process.js.map +1 -0
  85. package/dist/cli/util/templates.d.ts +10 -0
  86. package/dist/cli/util/templates.d.ts.map +1 -0
  87. package/dist/cli/util/templates.js +157 -0
  88. package/dist/cli/util/templates.js.map +1 -0
  89. package/dist/core/AlertSink.d.ts +83 -0
  90. package/dist/core/AlertSink.d.ts.map +1 -0
  91. package/dist/core/AlertSink.js +126 -0
  92. package/dist/core/AlertSink.js.map +1 -0
  93. package/dist/core/DirectMessageBus.d.ts +88 -0
  94. package/dist/core/DirectMessageBus.d.ts.map +1 -0
  95. package/dist/core/DirectMessageBus.js +352 -0
  96. package/dist/core/DirectMessageBus.js.map +1 -0
  97. package/dist/core/EndpointResolver.d.ts +111 -0
  98. package/dist/core/EndpointResolver.d.ts.map +1 -0
  99. package/dist/core/EndpointResolver.js +336 -0
  100. package/dist/core/EndpointResolver.js.map +1 -0
  101. package/dist/core/ForgeContext.d.ts +221 -0
  102. package/dist/core/ForgeContext.d.ts.map +1 -0
  103. package/dist/core/ForgeContext.js +1169 -0
  104. package/dist/core/ForgeContext.js.map +1 -0
  105. package/dist/core/ForgeEndpoints.d.ts +71 -0
  106. package/dist/core/ForgeEndpoints.d.ts.map +1 -0
  107. package/dist/core/ForgeEndpoints.js +442 -0
  108. package/dist/core/ForgeEndpoints.js.map +1 -0
  109. package/dist/core/ForgeHost.d.ts +82 -0
  110. package/dist/core/ForgeHost.d.ts.map +1 -0
  111. package/dist/core/ForgeHost.js +107 -0
  112. package/dist/core/ForgeHost.js.map +1 -0
  113. package/dist/core/ForgePlatform.d.ts +96 -0
  114. package/dist/core/ForgePlatform.d.ts.map +1 -0
  115. package/dist/core/ForgePlatform.js +136 -0
  116. package/dist/core/ForgePlatform.js.map +1 -0
  117. package/dist/core/ForgeWebSocket.d.ts +56 -0
  118. package/dist/core/ForgeWebSocket.d.ts.map +1 -0
  119. package/dist/core/ForgeWebSocket.js +415 -0
  120. package/dist/core/ForgeWebSocket.js.map +1 -0
  121. package/dist/core/Ingress.d.ts +329 -0
  122. package/dist/core/Ingress.d.ts.map +1 -0
  123. package/dist/core/Ingress.js +694 -0
  124. package/dist/core/Ingress.js.map +1 -0
  125. package/dist/core/Interceptors.d.ts +134 -0
  126. package/dist/core/Interceptors.d.ts.map +1 -0
  127. package/dist/core/Interceptors.js +416 -0
  128. package/dist/core/Interceptors.js.map +1 -0
  129. package/dist/core/Logger.d.ts +20 -0
  130. package/dist/core/Logger.d.ts.map +1 -0
  131. package/dist/core/Logger.js +77 -0
  132. package/dist/core/Logger.js.map +1 -0
  133. package/dist/core/MessageBus.d.ts +15 -0
  134. package/dist/core/MessageBus.d.ts.map +1 -0
  135. package/dist/core/MessageBus.js +18 -0
  136. package/dist/core/MessageBus.js.map +1 -0
  137. package/dist/core/Prometheus.d.ts +80 -0
  138. package/dist/core/Prometheus.d.ts.map +1 -0
  139. package/dist/core/Prometheus.js +332 -0
  140. package/dist/core/Prometheus.js.map +1 -0
  141. package/dist/core/RequestContext.d.ts +214 -0
  142. package/dist/core/RequestContext.d.ts.map +1 -0
  143. package/dist/core/RequestContext.js +556 -0
  144. package/dist/core/RequestContext.js.map +1 -0
  145. package/dist/core/Router.d.ts +45 -0
  146. package/dist/core/Router.d.ts.map +1 -0
  147. package/dist/core/Router.js +285 -0
  148. package/dist/core/Router.js.map +1 -0
  149. package/dist/core/RoutingStrategy.d.ts +116 -0
  150. package/dist/core/RoutingStrategy.d.ts.map +1 -0
  151. package/dist/core/RoutingStrategy.js +306 -0
  152. package/dist/core/RoutingStrategy.js.map +1 -0
  153. package/dist/core/RpcConfig.d.ts +72 -0
  154. package/dist/core/RpcConfig.d.ts.map +1 -0
  155. package/dist/core/RpcConfig.js +127 -0
  156. package/dist/core/RpcConfig.js.map +1 -0
  157. package/dist/core/SignatureCache.d.ts +81 -0
  158. package/dist/core/SignatureCache.d.ts.map +1 -0
  159. package/dist/core/SignatureCache.js +172 -0
  160. package/dist/core/SignatureCache.js.map +1 -0
  161. package/dist/core/StaticFileServer.d.ts +34 -0
  162. package/dist/core/StaticFileServer.d.ts.map +1 -0
  163. package/dist/core/StaticFileServer.js +497 -0
  164. package/dist/core/StaticFileServer.js.map +1 -0
  165. package/dist/core/Supervisor.d.ts +198 -0
  166. package/dist/core/Supervisor.d.ts.map +1 -0
  167. package/dist/core/Supervisor.js +1418 -0
  168. package/dist/core/Supervisor.js.map +1 -0
  169. package/dist/core/ThreadAllocator.d.ts +52 -0
  170. package/dist/core/ThreadAllocator.d.ts.map +1 -0
  171. package/dist/core/ThreadAllocator.js +174 -0
  172. package/dist/core/ThreadAllocator.js.map +1 -0
  173. package/dist/core/WorkerChannelManager.d.ts +130 -0
  174. package/dist/core/WorkerChannelManager.d.ts.map +1 -0
  175. package/dist/core/WorkerChannelManager.js +956 -0
  176. package/dist/core/WorkerChannelManager.js.map +1 -0
  177. package/dist/core/config-enums.d.ts +41 -0
  178. package/dist/core/config-enums.d.ts.map +1 -0
  179. package/dist/core/config-enums.js +59 -0
  180. package/dist/core/config-enums.js.map +1 -0
  181. package/dist/core/config.d.ts +159 -0
  182. package/dist/core/config.d.ts.map +1 -0
  183. package/dist/core/config.js +694 -0
  184. package/dist/core/config.js.map +1 -0
  185. package/dist/core/host-config.d.ts +146 -0
  186. package/dist/core/host-config.d.ts.map +1 -0
  187. package/dist/core/host-config.js +312 -0
  188. package/dist/core/host-config.js.map +1 -0
  189. package/dist/core/ipc-errors.d.ts +27 -0
  190. package/dist/core/ipc-errors.d.ts.map +1 -0
  191. package/dist/core/ipc-errors.js +36 -0
  192. package/dist/core/ipc-errors.js.map +1 -0
  193. package/dist/core/network-utils.d.ts +35 -0
  194. package/dist/core/network-utils.d.ts.map +1 -0
  195. package/dist/core/network-utils.js +145 -0
  196. package/dist/core/network-utils.js.map +1 -0
  197. package/dist/core/platform-config.d.ts +142 -0
  198. package/dist/core/platform-config.d.ts.map +1 -0
  199. package/dist/core/platform-config.js +299 -0
  200. package/dist/core/platform-config.js.map +1 -0
  201. package/dist/decorators/ServiceProxy.d.ts +175 -0
  202. package/dist/decorators/ServiceProxy.d.ts.map +1 -0
  203. package/dist/decorators/ServiceProxy.js +969 -0
  204. package/dist/decorators/ServiceProxy.js.map +1 -0
  205. package/dist/decorators/index.d.ts +146 -0
  206. package/dist/decorators/index.d.ts.map +1 -0
  207. package/dist/decorators/index.js +545 -0
  208. package/dist/decorators/index.js.map +1 -0
  209. package/dist/deploy/NginxGenerator.d.ts +165 -0
  210. package/dist/deploy/NginxGenerator.d.ts.map +1 -0
  211. package/dist/deploy/NginxGenerator.js +781 -0
  212. package/dist/deploy/NginxGenerator.js.map +1 -0
  213. package/dist/deploy/PlatformManifestGenerator.d.ts +43 -0
  214. package/dist/deploy/PlatformManifestGenerator.d.ts.map +1 -0
  215. package/dist/deploy/PlatformManifestGenerator.js +80 -0
  216. package/dist/deploy/PlatformManifestGenerator.js.map +1 -0
  217. package/dist/deploy/RouteManifestGenerator.d.ts +42 -0
  218. package/dist/deploy/RouteManifestGenerator.d.ts.map +1 -0
  219. package/dist/deploy/RouteManifestGenerator.js +105 -0
  220. package/dist/deploy/RouteManifestGenerator.js.map +1 -0
  221. package/dist/deploy/index.d.ts +210 -0
  222. package/dist/deploy/index.d.ts.map +1 -0
  223. package/dist/deploy/index.js +918 -0
  224. package/dist/deploy/index.js.map +1 -0
  225. package/dist/frontend/FrontendDevLifecycle.d.ts +26 -0
  226. package/dist/frontend/FrontendDevLifecycle.d.ts.map +1 -0
  227. package/dist/frontend/FrontendDevLifecycle.js +60 -0
  228. package/dist/frontend/FrontendDevLifecycle.js.map +1 -0
  229. package/dist/frontend/FrontendPluginOrchestrator.d.ts +64 -0
  230. package/dist/frontend/FrontendPluginOrchestrator.d.ts.map +1 -0
  231. package/dist/frontend/FrontendPluginOrchestrator.js +167 -0
  232. package/dist/frontend/FrontendPluginOrchestrator.js.map +1 -0
  233. package/dist/frontend/SiteResolver.d.ts +33 -0
  234. package/dist/frontend/SiteResolver.d.ts.map +1 -0
  235. package/dist/frontend/SiteResolver.js +53 -0
  236. package/dist/frontend/SiteResolver.js.map +1 -0
  237. package/dist/frontend/StaticMountRegistry.d.ts +36 -0
  238. package/dist/frontend/StaticMountRegistry.d.ts.map +1 -0
  239. package/dist/frontend/StaticMountRegistry.js +94 -0
  240. package/dist/frontend/StaticMountRegistry.js.map +1 -0
  241. package/dist/frontend/index.d.ts +7 -0
  242. package/dist/frontend/index.d.ts.map +1 -0
  243. package/{src → dist}/frontend/index.js +4 -2
  244. package/dist/frontend/index.js.map +1 -0
  245. package/dist/frontend/pathUtils.d.ts +8 -0
  246. package/dist/frontend/pathUtils.d.ts.map +1 -0
  247. package/dist/frontend/pathUtils.js +17 -0
  248. package/dist/frontend/pathUtils.js.map +1 -0
  249. package/dist/frontend/plugins/index.d.ts +2 -0
  250. package/dist/frontend/plugins/index.d.ts.map +1 -0
  251. package/{src → dist}/frontend/plugins/index.js +1 -1
  252. package/dist/frontend/plugins/index.js.map +1 -0
  253. package/dist/frontend/plugins/viteFrontend.d.ts +51 -0
  254. package/dist/frontend/plugins/viteFrontend.d.ts.map +1 -0
  255. package/dist/frontend/plugins/viteFrontend.js +134 -0
  256. package/dist/frontend/plugins/viteFrontend.js.map +1 -0
  257. package/dist/frontend/types.d.ts +25 -0
  258. package/dist/frontend/types.d.ts.map +1 -0
  259. package/dist/frontend/types.js +2 -0
  260. package/dist/frontend/types.js.map +1 -0
  261. package/dist/index.d.ts +17 -0
  262. package/dist/index.d.ts.map +1 -0
  263. package/dist/index.js +32 -0
  264. package/dist/index.js.map +1 -0
  265. package/dist/internals.d.ts +21 -0
  266. package/dist/internals.d.ts.map +1 -0
  267. package/{src → dist}/internals.js +12 -14
  268. package/dist/internals.js.map +1 -0
  269. package/dist/plugins/PluginManager.d.ts +209 -0
  270. package/dist/plugins/PluginManager.d.ts.map +1 -0
  271. package/dist/plugins/PluginManager.js +365 -0
  272. package/dist/plugins/PluginManager.js.map +1 -0
  273. package/dist/plugins/ScopedPostgres.d.ts +78 -0
  274. package/dist/plugins/ScopedPostgres.d.ts.map +1 -0
  275. package/dist/plugins/ScopedPostgres.js +190 -0
  276. package/dist/plugins/ScopedPostgres.js.map +1 -0
  277. package/dist/plugins/ScopedRedis.d.ts +88 -0
  278. package/dist/plugins/ScopedRedis.d.ts.map +1 -0
  279. package/dist/plugins/ScopedRedis.js +169 -0
  280. package/dist/plugins/ScopedRedis.js.map +1 -0
  281. package/dist/plugins/index.d.ts +289 -0
  282. package/dist/plugins/index.d.ts.map +1 -0
  283. package/dist/plugins/index.js +1942 -0
  284. package/dist/plugins/index.js.map +1 -0
  285. package/dist/plugins/types.d.ts +59 -0
  286. package/dist/plugins/types.d.ts.map +1 -0
  287. package/dist/plugins/types.js +2 -0
  288. package/dist/plugins/types.js.map +1 -0
  289. package/dist/registry/ServiceRegistry.d.ts +305 -0
  290. package/dist/registry/ServiceRegistry.d.ts.map +1 -0
  291. package/dist/registry/ServiceRegistry.js +735 -0
  292. package/dist/registry/ServiceRegistry.js.map +1 -0
  293. package/dist/scaling/ScaleAdvisor.d.ts +214 -0
  294. package/dist/scaling/ScaleAdvisor.d.ts.map +1 -0
  295. package/dist/scaling/ScaleAdvisor.js +526 -0
  296. package/dist/scaling/ScaleAdvisor.js.map +1 -0
  297. package/dist/services/Service.d.ts +164 -0
  298. package/dist/services/Service.d.ts.map +1 -0
  299. package/dist/services/Service.js +106 -0
  300. package/dist/services/Service.js.map +1 -0
  301. package/dist/services/worker-bootstrap.d.ts +15 -0
  302. package/dist/services/worker-bootstrap.d.ts.map +1 -0
  303. package/dist/services/worker-bootstrap.js +744 -0
  304. package/dist/services/worker-bootstrap.js.map +1 -0
  305. package/dist/templates/auth-service.d.ts +42 -0
  306. package/dist/templates/auth-service.d.ts.map +1 -0
  307. package/dist/templates/auth-service.js +54 -0
  308. package/dist/templates/auth-service.js.map +1 -0
  309. package/dist/templates/identity-service.d.ts +50 -0
  310. package/dist/templates/identity-service.d.ts.map +1 -0
  311. package/dist/templates/identity-service.js +62 -0
  312. package/dist/templates/identity-service.js.map +1 -0
  313. package/dist/types/contract.d.ts +120 -0
  314. package/dist/types/contract.d.ts.map +1 -0
  315. package/dist/types/contract.js +69 -0
  316. package/dist/types/contract.js.map +1 -0
  317. package/package.json +78 -20
  318. package/src/core/DirectMessageBus.js +0 -364
  319. package/src/core/EndpointResolver.js +0 -259
  320. package/src/core/ForgeContext.js +0 -2236
  321. package/src/core/ForgeHost.js +0 -122
  322. package/src/core/ForgePlatform.js +0 -145
  323. package/src/core/Ingress.js +0 -768
  324. package/src/core/Interceptors.js +0 -420
  325. package/src/core/MessageBus.js +0 -321
  326. package/src/core/Prometheus.js +0 -305
  327. package/src/core/RequestContext.js +0 -413
  328. package/src/core/RoutingStrategy.js +0 -330
  329. package/src/core/Supervisor.js +0 -1349
  330. package/src/core/ThreadAllocator.js +0 -196
  331. package/src/core/WorkerChannelManager.js +0 -879
  332. package/src/core/config.js +0 -637
  333. package/src/core/host-config.js +0 -311
  334. package/src/core/network-utils.js +0 -166
  335. package/src/core/platform-config.js +0 -308
  336. package/src/decorators/ServiceProxy.js +0 -904
  337. package/src/decorators/index.js +0 -571
  338. package/src/deploy/NginxGenerator.js +0 -865
  339. package/src/deploy/PlatformManifestGenerator.js +0 -96
  340. package/src/deploy/RouteManifestGenerator.js +0 -112
  341. package/src/deploy/index.js +0 -984
  342. package/src/frontend/FrontendDevLifecycle.js +0 -65
  343. package/src/frontend/FrontendPluginOrchestrator.js +0 -187
  344. package/src/frontend/SiteResolver.js +0 -63
  345. package/src/frontend/StaticMountRegistry.js +0 -90
  346. package/src/frontend/plugins/viteFrontend.js +0 -79
  347. package/src/frontend/types.js +0 -35
  348. package/src/index.js +0 -58
  349. package/src/plugins/PluginManager.js +0 -537
  350. package/src/plugins/ScopedPostgres.js +0 -192
  351. package/src/plugins/ScopedRedis.js +0 -142
  352. package/src/plugins/index.js +0 -1756
  353. package/src/registry/ServiceRegistry.js +0 -797
  354. package/src/scaling/ScaleAdvisor.js +0 -442
  355. package/src/services/Service.js +0 -195
  356. package/src/services/worker-bootstrap.js +0 -679
  357. package/src/templates/auth-service.js +0 -65
  358. package/src/templates/identity-service.js +0 -75
@@ -0,0 +1,545 @@
1
+ /**
2
+ * ThreadForge Decorators — TC39 Stage 3
3
+ *
4
+ * Real standard decorators (not legacy/experimental).
5
+ * Work with TypeScript 5+, tsx, esbuild, and native when engines ship them.
6
+ *
7
+ * Decorator signature: (target: Function, context: DecoratorContext) => Function | void
8
+ *
9
+ * ═══════════════════════════════════════════════════════════════
10
+ * USAGE (TypeScript)
11
+ * ═══════════════════════════════════════════════════════════════
12
+ *
13
+ * @Prefix('/api/users')
14
+ * @Auth('required')
15
+ * @RateLimit('1000/min')
16
+ * class UserService extends Service {
17
+ *
18
+ * @Route('GET', '/:id')
19
+ * async getUser(data, auth, params) { ... }
20
+ *
21
+ * @Route('POST', '/', { rateLimit: '10/min' })
22
+ * @Emit('user.created')
23
+ * @Validate({ name: 'string!', email: 'string!' })
24
+ * async createUser(data, auth) { ... }
25
+ *
26
+ * @Expose() // IPC only, no HTTP
27
+ * async validateCredentials(data) { ... }
28
+ *
29
+ * @Internal({ localOnly: true }) // same-process only
30
+ * async getUserFromCache(id) { ... }
31
+ *
32
+ * @On('billing', 'payment.received')
33
+ * async onPayment(event) { ... }
34
+ * }
35
+ *
36
+ * `forge generate` reads the resulting contract and produces:
37
+ * - routes/users.yaml (ForgeProxy routing)
38
+ * - routes/users.yaml (ForgeProxy routing manifest)
39
+ */
40
+ export const HttpMethod = {
41
+ GET: "GET",
42
+ POST: "POST",
43
+ PUT: "PUT",
44
+ DELETE: "DELETE",
45
+ PATCH: "PATCH",
46
+ HEAD: "HEAD",
47
+ OPTIONS: "OPTIONS",
48
+ };
49
+ // ─── Contract Storage ──────────────────────────────────────
50
+ const WRAPPED = Symbol("forge:wrapped");
51
+ // D10: Decorator ordering detection marker
52
+ const FORGE_METHOD_DECORATORS_KEY = "__forge_has_method_decorators";
53
+ const CONTRACT_REGISTRY = new WeakMap();
54
+ // DEC-M2: Deferred validation schemas from static contracts.
55
+ // Stored separately to avoid prototype mutation during getContract() inspection.
56
+ // Applied at service start via applyStaticContractWrappers().
57
+ const _deferredValidations = new WeakMap();
58
+ const _wrappersApplied = new WeakSet();
59
+ function warnUnfinalizedDecorators(serviceName) {
60
+ console.warn(`[ThreadForge] ${serviceName}: Found decorated methods but metadata was not finalized.\n` +
61
+ ` This usually means class decorators (@Prefix, @Auth, @RateLimit) are missing or in the wrong position.\n` +
62
+ ` Class decorators must appear ABOVE the class definition:\n\n` +
63
+ ` @Prefix('/api/path') // ✅ Above the class\n` +
64
+ ` export default class ${serviceName} extends Service { ... }\n\n` +
65
+ ` See docs/reference/decorators.md for details.`);
66
+ }
67
+ function getOrCreateContract(target) {
68
+ const cls = typeof target === "function" ? target : target.constructor;
69
+ if (!CONTRACT_REGISTRY.has(cls)) {
70
+ CONTRACT_REGISTRY.set(cls, {
71
+ methods: new Map(),
72
+ routes: [],
73
+ events: new Map(),
74
+ subscriptions: [],
75
+ prefix: null,
76
+ auth: "required",
77
+ rateLimit: null,
78
+ });
79
+ }
80
+ return CONTRACT_REGISTRY.get(cls);
81
+ }
82
+ function finalizeContract(cls, pending) {
83
+ const contract = getOrCreateContract(cls);
84
+ for (const route of pending.routes) {
85
+ if (!contract.routes.some((r) => r.handlerName === route.handlerName && r.path === route.path)) {
86
+ contract.routes.push(route);
87
+ }
88
+ if (!contract.methods.has(route.handlerName)) {
89
+ contract.methods.set(route.handlerName, { name: route.handlerName, options: {} });
90
+ }
91
+ }
92
+ for (const [name, meta] of Object.entries(pending.methods)) {
93
+ if (!contract.methods.has(name)) {
94
+ contract.methods.set(name, meta);
95
+ }
96
+ }
97
+ for (const [method, event] of Object.entries(pending.events)) {
98
+ contract.events.set(method, event);
99
+ }
100
+ for (const sub of pending.subscriptions) {
101
+ if (!contract.subscriptions.some((s) => s.handlerName === sub.handlerName)) {
102
+ contract.subscriptions.push(sub);
103
+ }
104
+ }
105
+ // Detect @Internal + @Route conflict
106
+ const routeHandlerNames = new Set(contract.routes.map((r) => r.handlerName));
107
+ for (const entry of Array.from(contract.methods.entries())) {
108
+ const [name, meta] = entry;
109
+ if (meta.options?.internal && routeHandlerNames.has(name)) {
110
+ throw new Error(`Method "${name}" cannot be both @Internal and @Route`);
111
+ }
112
+ }
113
+ return contract;
114
+ }
115
+ export function getContract(ServiceClass) {
116
+ // Already cached with content
117
+ let contract = CONTRACT_REGISTRY.get(ServiceClass);
118
+ if (contract && contract.methods.size > 0)
119
+ return contract;
120
+ // Check for pending decorator metadata via Symbol.metadata
121
+ const metaKey = ServiceClass[Symbol.metadata];
122
+ // D10: Check if method decorators ran but weren't finalized by class decorators
123
+ const hasUnfinalizedMetadata = metaKey && metaKey[FORGE_METHOD_DECORATORS_KEY] === true;
124
+ if (metaKey && _classPending.has(metaKey)) {
125
+ const pending = _classPending.get(metaKey);
126
+ contract = finalizeContract(ServiceClass, pending);
127
+ if (ServiceClass.prefix)
128
+ contract.prefix = ServiceClass.prefix;
129
+ if (ServiceClass.auth)
130
+ contract.auth = ServiceClass.auth;
131
+ if (ServiceClass.rateLimit)
132
+ contract.rateLimit = ServiceClass.rateLimit;
133
+ _classPending.delete(metaKey); // Prevent memory leak
134
+ // D10: If we're finalizing but marker is still true, it means class decorators didn't run
135
+ if (hasUnfinalizedMetadata) {
136
+ const serviceName = ServiceClass.name || "UnknownService";
137
+ warnUnfinalizedDecorators(serviceName);
138
+ }
139
+ return contract;
140
+ }
141
+ // D10: Warn if method decorators ran but no class decorator ever finalized them (and no pending data)
142
+ if (hasUnfinalizedMetadata) {
143
+ const serviceName = ServiceClass.name || "UnknownService";
144
+ warnUnfinalizedDecorators(serviceName);
145
+ }
146
+ // Static contract fallback (plain JS)
147
+ if (ServiceClass.contract) {
148
+ return buildContractFromStatic(ServiceClass);
149
+ }
150
+ // Walk prototype chain to inherit parent contracts
151
+ let current = Object.getPrototypeOf(ServiceClass);
152
+ while (current && current !== Function.prototype) {
153
+ const parentContract = CONTRACT_REGISTRY.get(current);
154
+ if (parentContract && parentContract.methods.size > 0) {
155
+ // Clone parent contract for this subclass
156
+ contract = {
157
+ methods: new Map(parentContract.methods),
158
+ routes: [...parentContract.routes],
159
+ events: new Map(parentContract.events),
160
+ subscriptions: [...(parentContract.subscriptions || [])],
161
+ prefix: parentContract.prefix,
162
+ auth: parentContract.auth,
163
+ rateLimit: parentContract.rateLimit,
164
+ };
165
+ CONTRACT_REGISTRY.set(ServiceClass, contract);
166
+ return contract;
167
+ }
168
+ current = Object.getPrototypeOf(current);
169
+ }
170
+ if (contract) {
171
+ if (!(contract.methods instanceof Map))
172
+ contract.methods = new Map();
173
+ if (!Array.isArray(contract.routes))
174
+ contract.routes = [];
175
+ if (!(contract.events instanceof Map))
176
+ contract.events = new Map();
177
+ if (!Array.isArray(contract.subscriptions))
178
+ contract.subscriptions = [];
179
+ }
180
+ return contract || null;
181
+ }
182
+ // ─── Static Contract Fallback ──────────────────────────────
183
+ function buildContractFromStatic(ServiceClass) {
184
+ const def = ServiceClass.contract;
185
+ const contract = {
186
+ methods: new Map(),
187
+ routes: [],
188
+ events: new Map(),
189
+ subscriptions: [],
190
+ prefix: ServiceClass.prefix ?? null,
191
+ auth: ServiceClass.auth ?? "required",
192
+ rateLimit: ServiceClass.rateLimit ?? null,
193
+ };
194
+ if (def.expose) {
195
+ for (const name of def.expose) {
196
+ contract.methods.set(name, { name, options: {} });
197
+ }
198
+ }
199
+ if (def.routes) {
200
+ for (const r of def.routes) {
201
+ contract.routes.push({
202
+ httpMethod: r.method,
203
+ path: r.path,
204
+ handlerName: r.handler,
205
+ auth: r.auth ?? null,
206
+ rateLimit: r.rateLimit ?? null,
207
+ cacheSecs: r.cacheSecs ?? r.cache ?? null,
208
+ });
209
+ if (!contract.methods.has(r.handler)) {
210
+ contract.methods.set(r.handler, { name: r.handler, options: {} });
211
+ }
212
+ // DEC-M2: Defer validation wrapping to avoid prototype mutation during inspection
213
+ if (r.validate) {
214
+ if (!_deferredValidations.has(ServiceClass))
215
+ _deferredValidations.set(ServiceClass, []);
216
+ _deferredValidations.get(ServiceClass).push({ handlerName: r.handler, schema: r.validate });
217
+ }
218
+ }
219
+ }
220
+ if (def.emits) {
221
+ for (const [method, event] of Object.entries(def.emits)) {
222
+ contract.events.set(method, event);
223
+ // Wrap the method to auto-emit, matching @Emit decorator behavior
224
+ const original = ServiceClass.prototype[method];
225
+ if (typeof original === "function" && !original[WRAPPED]) {
226
+ const wrapper = async function (...args) {
227
+ const result = await original.apply(this, args);
228
+ const emitFn = this.ctx?._emitEvent;
229
+ if (emitFn) {
230
+ try {
231
+ await emitFn(event, result);
232
+ }
233
+ catch (err) {
234
+ this.ctx?.logger?.warn?.(`Failed to emit event "${event}": ${err.message}`);
235
+ }
236
+ }
237
+ return result;
238
+ };
239
+ wrapper[WRAPPED] = true;
240
+ ServiceClass.prototype[method] = wrapper;
241
+ }
242
+ }
243
+ }
244
+ if (def.on) {
245
+ for (const sub of def.on) {
246
+ contract.subscriptions.push({
247
+ service: sub.service,
248
+ event: sub.event,
249
+ handlerName: sub.handler,
250
+ });
251
+ }
252
+ }
253
+ // Detect @Internal + @Route conflict in static contracts
254
+ const staticRouteHandlers = new Set(contract.routes.map((r) => r.handlerName));
255
+ for (const entry of Array.from(contract.methods.entries())) {
256
+ const [name, meta] = entry;
257
+ if (meta.options?.internal && staticRouteHandlers.has(name)) {
258
+ throw new Error(`Method "${name}" cannot be both @Internal and @Route`);
259
+ }
260
+ }
261
+ CONTRACT_REGISTRY.set(ServiceClass, contract);
262
+ return contract;
263
+ }
264
+ // ─── Class Decorators ──────────────────────────────────────
265
+ export function Prefix(path) {
266
+ return (target, context) => {
267
+ target.prefix = path;
268
+ // Finalize any pending method decorator metadata
269
+ const pending = _classPending.get(context.metadata);
270
+ if (pending) {
271
+ const contract = finalizeContract(target, pending);
272
+ contract.prefix = path;
273
+ }
274
+ // D10: Mark metadata as finalized (for ordering detection)
275
+ context.metadata[FORGE_METHOD_DECORATORS_KEY] = false;
276
+ };
277
+ }
278
+ export function Auth(requirement) {
279
+ return (target, context) => {
280
+ target.auth = requirement;
281
+ const pending = _classPending.get(context.metadata);
282
+ if (pending) {
283
+ const contract = finalizeContract(target, pending);
284
+ contract.auth = requirement;
285
+ }
286
+ // D10: Mark metadata as finalized (for ordering detection)
287
+ context.metadata[FORGE_METHOD_DECORATORS_KEY] = false;
288
+ };
289
+ }
290
+ export function RateLimit(limit) {
291
+ return (target, context) => {
292
+ target.rateLimit = limit;
293
+ const pending = _classPending.get(context.metadata);
294
+ if (pending) {
295
+ const contract = finalizeContract(target, pending);
296
+ contract.rateLimit = limit;
297
+ }
298
+ // D10: Mark metadata as finalized (for ordering detection)
299
+ context.metadata[FORGE_METHOD_DECORATORS_KEY] = false;
300
+ };
301
+ }
302
+ /**
303
+ * Per-class pending storage.
304
+ * Method decorators write here; class decorators read and finalize.
305
+ * Keyed by context.metadata which is shared across all decorators on one class.
306
+ *
307
+ * D10: Decorator ordering — class decorators (@Prefix, @Auth, @RateLimit) finalize
308
+ * pending metadata accumulated by method decorators (@Route, @Expose, @Emit, @On).
309
+ * Class decorators must come AFTER (i.e., above) method decorators in the source.
310
+ * TC39 Stage 3 decorators evaluate bottom-up for methods, then class decorators.
311
+ */
312
+ const _classPending = new WeakMap();
313
+ // ─── Method Decorators ─────────────────────────────────────
314
+ const VALID_HTTP_METHODS = new Set(Object.values(HttpMethod));
315
+ export function Route(httpMethod, path, options = {}) {
316
+ if (!VALID_HTTP_METHODS.has(httpMethod.toUpperCase())) {
317
+ throw new Error(`@Route: invalid HTTP method "${httpMethod}". Valid: ${Array.from(VALID_HTTP_METHODS).join(", ")}`);
318
+ }
319
+ return (_target, context) => {
320
+ const methodName = String(context.name);
321
+ const pending = _getClassPending(context);
322
+ pending.routes.push({
323
+ httpMethod: httpMethod.toUpperCase(),
324
+ path,
325
+ handlerName: methodName,
326
+ auth: options.auth ?? null,
327
+ rateLimit: options.rateLimit ?? null,
328
+ cacheSecs: options.cacheSecs ?? null,
329
+ });
330
+ pending.methods[methodName] = { name: methodName, options: {} };
331
+ };
332
+ }
333
+ export function Expose(targetOrOptions = {}, context) {
334
+ const register = (methodContext, options) => {
335
+ const methodName = String(methodContext.name);
336
+ const pending = _getClassPending(methodContext);
337
+ pending.methods[methodName] = { name: methodName, options };
338
+ };
339
+ if (context) {
340
+ register(context, {});
341
+ return;
342
+ }
343
+ const options = targetOrOptions;
344
+ return (_target, methodContext) => {
345
+ register(methodContext, options);
346
+ };
347
+ }
348
+ export function Internal(options = {}) {
349
+ return (_target, context) => {
350
+ const methodName = String(context.name);
351
+ const pending = _getClassPending(context);
352
+ pending.methods[methodName] = {
353
+ name: methodName,
354
+ options: { ...options, internal: true },
355
+ };
356
+ };
357
+ }
358
+ export function Emit(eventName) {
359
+ return (target, context) => {
360
+ const methodName = String(context.name);
361
+ const pending = _getClassPending(context);
362
+ pending.events[methodName] = eventName;
363
+ // M-PLUGIN-7: Preserve method name for stack traces and debugging
364
+ const wrapper = async function (...args) {
365
+ const result = await target.apply(this, args);
366
+ // Capture emit function AFTER await to get current context
367
+ const emitFn = this.ctx?._emitEvent;
368
+ if (emitFn) {
369
+ try {
370
+ await emitFn(eventName, result);
371
+ }
372
+ catch (err) {
373
+ this.ctx?.logger?.warn?.(`Failed to emit event "${eventName}": ${err.message}`);
374
+ }
375
+ }
376
+ return result;
377
+ };
378
+ Object.defineProperty(wrapper, "name", { value: methodName, configurable: true });
379
+ return wrapper;
380
+ };
381
+ }
382
+ export function On(serviceName, eventName) {
383
+ return (_target, context) => {
384
+ const methodName = String(context.name);
385
+ const pending = _getClassPending(context);
386
+ pending.subscriptions.push({
387
+ service: serviceName,
388
+ event: eventName,
389
+ handlerName: methodName,
390
+ });
391
+ };
392
+ }
393
+ function _getClassPending(context) {
394
+ const key = context.metadata;
395
+ if (typeof key !== "object" || key === null) {
396
+ throw new Error(`Decorator context.metadata must be an object, got ${typeof key}`);
397
+ }
398
+ if (!_classPending.has(key)) {
399
+ _classPending.set(key, { routes: [], methods: {}, events: {}, subscriptions: [] });
400
+ }
401
+ // D10: Mark that method decorators have been applied (for ordering detection)
402
+ key[FORGE_METHOD_DECORATORS_KEY] = true;
403
+ return _classPending.get(key);
404
+ }
405
+ export function Validate(schema) {
406
+ return (target, context) => {
407
+ const methodName = String(context.name);
408
+ const wrapper = async function (...args) {
409
+ const input = args[0];
410
+ const serviceName = this?.constructor?.name ?? "Unknown";
411
+ const qualifiedName = `${serviceName}.${methodName}`;
412
+ if (typeof schema === "function") {
413
+ const error = schema(input);
414
+ if (error)
415
+ throw new Error(`Validation failed for ${qualifiedName}: ${error}`);
416
+ }
417
+ else if (typeof schema === "object") {
418
+ const BLOCKED_FIELDS = new Set(["__proto__", "constructor", "prototype"]);
419
+ for (const [field, type] of Object.entries(schema)) {
420
+ if (BLOCKED_FIELDS.has(field)) {
421
+ throw new Error(`${qualifiedName}: "${field}" is a blocked field name`);
422
+ }
423
+ const safeInput = (input ?? {});
424
+ const fieldValue = Object.hasOwn(safeInput, field) ? safeInput[field] : undefined;
425
+ if (type.endsWith("!") && (fieldValue === undefined || fieldValue === null)) {
426
+ throw new Error(`${qualifiedName}: "${field}" is required`);
427
+ }
428
+ const baseType = type.replace("!", "");
429
+ if (fieldValue !== undefined && fieldValue !== null) {
430
+ if (baseType === "array") {
431
+ if (!Array.isArray(fieldValue)) {
432
+ throw new Error(`${qualifiedName}: "${field}" must be an array`);
433
+ }
434
+ }
435
+ else if (baseType === "object") {
436
+ if (typeof fieldValue !== "object" || Array.isArray(fieldValue)) {
437
+ throw new Error(`${qualifiedName}: "${field}" must be an object`);
438
+ }
439
+ }
440
+ else if (typeof fieldValue !== baseType) {
441
+ throw new Error(`${qualifiedName}: "${field}" must be ${baseType}`);
442
+ }
443
+ if (baseType === "number" && typeof fieldValue === "number" && Number.isNaN(fieldValue)) {
444
+ throw new Error(`${qualifiedName}: "${field}" must be a valid number (NaN is not allowed)`);
445
+ }
446
+ }
447
+ }
448
+ }
449
+ return target.apply(this, args);
450
+ };
451
+ Object.defineProperty(wrapper, "name", { value: methodName, configurable: true });
452
+ return wrapper;
453
+ };
454
+ }
455
+ // ─── Deferred Wrapper Application ──────────────────────────
456
+ function _applyValidationWrapper(ServiceClass, handlerName, schema) {
457
+ const original = ServiceClass.prototype[handlerName];
458
+ if (typeof original !== "function" || original[WRAPPED])
459
+ return;
460
+ const wrapper = async function (...args) {
461
+ const input = args[0];
462
+ const serviceName = this?.constructor?.name ?? "Unknown";
463
+ const qualifiedName = `${serviceName}.${handlerName}`;
464
+ if (typeof schema === "function") {
465
+ const error = schema(input);
466
+ if (error)
467
+ throw new Error(`Validation failed for ${qualifiedName}: ${error}`);
468
+ }
469
+ else if (typeof schema === "object") {
470
+ const BLOCKED_FIELDS = new Set(["__proto__", "constructor", "prototype"]);
471
+ for (const [field, type] of Object.entries(schema)) {
472
+ if (BLOCKED_FIELDS.has(field)) {
473
+ throw new Error(`${qualifiedName}: "${field}" is a blocked field name`);
474
+ }
475
+ const safeInput = (input ?? {});
476
+ const fieldValue = Object.hasOwn(safeInput, field) ? safeInput[field] : undefined;
477
+ if (type.endsWith("!") && (fieldValue === undefined || fieldValue === null)) {
478
+ throw new Error(`${qualifiedName}: "${field}" is required`);
479
+ }
480
+ const baseType = type.replace("!", "");
481
+ if (fieldValue !== undefined && fieldValue !== null) {
482
+ if (baseType === "array") {
483
+ if (!Array.isArray(fieldValue)) {
484
+ throw new Error(`${qualifiedName}: "${field}" must be an array`);
485
+ }
486
+ }
487
+ else if (baseType === "object") {
488
+ if (typeof fieldValue !== "object" || Array.isArray(fieldValue)) {
489
+ throw new Error(`${qualifiedName}: "${field}" must be an object`);
490
+ }
491
+ }
492
+ else if (typeof fieldValue !== baseType) {
493
+ throw new Error(`${qualifiedName}: "${field}" must be ${baseType}`);
494
+ }
495
+ if (baseType === "number" && typeof fieldValue === "number" && Number.isNaN(fieldValue)) {
496
+ throw new Error(`${qualifiedName}: "${field}" must be a valid number (NaN is not allowed)`);
497
+ }
498
+ }
499
+ }
500
+ }
501
+ return original.apply(this, args);
502
+ };
503
+ wrapper[WRAPPED] = true;
504
+ ServiceClass.prototype[handlerName] = wrapper;
505
+ }
506
+ /**
507
+ * DEC-M2: Apply deferred validation wrappers from static contracts.
508
+ * Call this when the service is actually starting, not during contract inspection.
509
+ * Safe to call multiple times — wrapping is applied at most once per class.
510
+ */
511
+ export function applyStaticContractWrappers(ServiceClass) {
512
+ if (_wrappersApplied.has(ServiceClass))
513
+ return;
514
+ _wrappersApplied.add(ServiceClass);
515
+ const validations = _deferredValidations.get(ServiceClass);
516
+ if (!validations)
517
+ return;
518
+ for (const { handlerName, schema } of validations) {
519
+ _applyValidationWrapper(ServiceClass, handlerName, schema);
520
+ }
521
+ }
522
+ // ─── Query Helpers ─────────────────────────────────────────
523
+ export function isInternalMethod(ServiceClass, methodName) {
524
+ const contract = getContract(ServiceClass);
525
+ if (!contract)
526
+ return false;
527
+ if (!contract.methods.has(methodName))
528
+ return false;
529
+ return !contract.routes.some((r) => r.handlerName === methodName);
530
+ }
531
+ export function isLocalOnlyMethod(ServiceClass, methodName) {
532
+ const contract = getContract(ServiceClass);
533
+ if (!contract)
534
+ return false;
535
+ const meta = contract.methods.get(methodName);
536
+ return meta?.options?.localOnly === true;
537
+ }
538
+ export function getInternalMethods(ServiceClass) {
539
+ const contract = getContract(ServiceClass);
540
+ if (!contract)
541
+ return [];
542
+ const routeHandlers = new Set(contract.routes.map((r) => r.handlerName));
543
+ return Array.from(contract.methods.keys()).filter((m) => !routeHandlers.has(m));
544
+ }
545
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/decorators/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AAsDH,MAAM,CAAC,MAAM,UAAU,GAAG;IACxB,GAAG,EAAE,KAAK;IACV,IAAI,EAAE,MAAM;IACZ,GAAG,EAAE,KAAK;IACV,MAAM,EAAE,QAAQ;IAChB,KAAK,EAAE,OAAO;IACd,IAAI,EAAE,MAAM;IACZ,OAAO,EAAE,SAAS;CACV,CAAC;AAyDX,8DAA8D;AAE9D,MAAM,OAAO,GAAG,MAAM,CAAC,eAAe,CAAC,CAAC;AAExC,2CAA2C;AAC3C,MAAM,2BAA2B,GAAG,+BAA+B,CAAC;AAEpE,MAAM,iBAAiB,GAAG,IAAI,OAAO,EAA2B,CAAC;AAEjE,6DAA6D;AAC7D,iFAAiF;AACjF,8DAA8D;AAC9D,MAAM,oBAAoB,GAAG,IAAI,OAAO,EAAkE,CAAC;AAC3G,MAAM,gBAAgB,GAAG,IAAI,OAAO,EAAU,CAAC;AAE/C,SAAS,yBAAyB,CAAC,WAAmB;IACpD,OAAO,CAAC,IAAI,CACV,iBAAiB,WAAW,6DAA6D;QACvF,4GAA4G;QAC5G,gEAAgE;QAChE,gDAAgD;QAChD,0BAA0B,WAAW,8BAA8B;QACnE,iDAAiD,CACpD,CAAC;AACJ,CAAC;AAED,SAAS,mBAAmB,CAAC,MAAc;IACzC,MAAM,GAAG,GAAG,OAAO,MAAM,KAAK,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAE,MAAkC,CAAC,WAAW,CAAC;IACpG,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;QAChC,iBAAiB,CAAC,GAAG,CAAC,GAAG,EAAE;YACzB,OAAO,EAAE,IAAI,GAAG,EAAE;YAClB,MAAM,EAAE,EAAE;YACV,MAAM,EAAE,IAAI,GAAG,EAAE;YACjB,aAAa,EAAE,EAAE;YACjB,MAAM,EAAE,IAAI;YACZ,IAAI,EAAE,UAAU;YAChB,SAAS,EAAE,IAAI;SAChB,CAAC,CAAC;IACL,CAAC;IACD,OAAO,iBAAiB,CAAC,GAAG,CAAC,GAAG,CAAE,CAAC;AACrC,CAAC;AAED,SAAS,gBAAgB,CAAC,GAAW,EAAE,OAAwB;IAC7D,MAAM,QAAQ,GAAG,mBAAmB,CAAC,GAAG,CAAC,CAAC;IAE1C,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACnC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,KAAK,KAAK,CAAC,WAAW,IAAI,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;YAC/F,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC9B,CAAC;QACD,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,CAAC;YAC7C,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,WAAW,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC;QACpF,CAAC;IACH,CAAC;IAED,KAAK,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QAC3D,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YAChC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QACnC,CAAC;IACH,CAAC;IAED,KAAK,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAC7D,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IACrC,CAAC;IAED,KAAK,MAAM,GAAG,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;QACxC,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,KAAK,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC;YAC3E,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACnC,CAAC;IACH,CAAC;IAED,qCAAqC;IACrC,MAAM,iBAAiB,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC;IAC7E,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC;QAC3D,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,KAAK,CAAC;QAC3B,IAAK,IAAI,CAAC,OAAkC,EAAE,QAAQ,IAAI,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YACtF,MAAM,IAAI,KAAK,CAAC,WAAW,IAAI,uCAAuC,CAAC,CAAC;QAC1E,CAAC;IACH,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,YAA8B;IACxD,8BAA8B;IAC9B,IAAI,QAAQ,GAAG,iBAAiB,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;IACnD,IAAI,QAAQ,IAAI,QAAQ,CAAC,OAAO,CAAC,IAAI,GAAG,CAAC;QAAE,OAAO,QAAQ,CAAC;IAE3D,2DAA2D;IAC3D,MAAM,OAAO,GAAI,YAA+E,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAElH,gFAAgF;IAChF,MAAM,sBAAsB,GAAG,OAAO,IAAK,OAAmC,CAAC,2BAA2B,CAAC,KAAK,IAAI,CAAC;IAErH,IAAI,OAAO,IAAI,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;QAC1C,MAAM,OAAO,GAAG,aAAa,CAAC,GAAG,CAAC,OAAO,CAAE,CAAC;QAC5C,QAAQ,GAAG,gBAAgB,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;QACnD,IAAI,YAAY,CAAC,MAAM;YAAE,QAAQ,CAAC,MAAM,GAAG,YAAY,CAAC,MAAM,CAAC;QAC/D,IAAI,YAAY,CAAC,IAAI;YAAE,QAAQ,CAAC,IAAI,GAAG,YAAY,CAAC,IAAI,CAAC;QACzD,IAAI,YAAY,CAAC,SAAS;YAAE,QAAQ,CAAC,SAAS,GAAG,YAAY,CAAC,SAAS,CAAC;QACxE,aAAa,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,sBAAsB;QAErD,0FAA0F;QAC1F,IAAI,sBAAsB,EAAE,CAAC;YAC3B,MAAM,WAAW,GAAG,YAAY,CAAC,IAAI,IAAI,gBAAgB,CAAC;YAC1D,yBAAyB,CAAC,WAAW,CAAC,CAAC;QACzC,CAAC;QAED,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,sGAAsG;IACtG,IAAI,sBAAsB,EAAE,CAAC;QAC3B,MAAM,WAAW,GAAG,YAAY,CAAC,IAAI,IAAI,gBAAgB,CAAC;QAC1D,yBAAyB,CAAC,WAAW,CAAC,CAAC;IACzC,CAAC;IAED,sCAAsC;IACtC,IAAI,YAAY,CAAC,QAAQ,EAAE,CAAC;QAC1B,OAAO,uBAAuB,CAAC,YAAY,CAAC,CAAC;IAC/C,CAAC;IAED,mDAAmD;IACnD,IAAI,OAAO,GAAG,MAAM,CAAC,cAAc,CAAC,YAAY,CAAkB,CAAC;IACnE,OAAO,OAAO,IAAI,OAAO,KAAK,QAAQ,CAAC,SAAS,EAAE,CAAC;QACjD,MAAM,cAAc,GAAG,iBAAiB,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACtD,IAAI,cAAc,IAAI,cAAc,CAAC,OAAO,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;YACtD,0CAA0C;YAC1C,QAAQ,GAAG;gBACT,OAAO,EAAE,IAAI,GAAG,CAAC,cAAc,CAAC,OAAO,CAAC;gBACxC,MAAM,EAAE,CAAC,GAAG,cAAc,CAAC,MAAM,CAAC;gBAClC,MAAM,EAAE,IAAI,GAAG,CAAC,cAAc,CAAC,MAAM,CAAC;gBACtC,aAAa,EAAE,CAAC,GAAG,CAAC,cAAc,CAAC,aAAa,IAAI,EAAE,CAAC,CAAC;gBACxD,MAAM,EAAE,cAAc,CAAC,MAAM;gBAC7B,IAAI,EAAE,cAAc,CAAC,IAAI;gBACzB,SAAS,EAAE,cAAc,CAAC,SAAS;aACpC,CAAC;YACF,iBAAiB,CAAC,GAAG,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC;YAC9C,OAAO,QAAQ,CAAC;QAClB,CAAC;QACD,OAAO,GAAG,MAAM,CAAC,cAAc,CAAC,OAAO,CAAkB,CAAC;IAC5D,CAAC;IAED,IAAI,QAAQ,EAAE,CAAC;QACb,IAAI,CAAC,CAAC,QAAQ,CAAC,OAAO,YAAY,GAAG,CAAC;YAAE,QAAQ,CAAC,OAAO,GAAG,IAAI,GAAG,EAAE,CAAC;QACrE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC;YAAE,QAAQ,CAAC,MAAM,GAAG,EAAE,CAAC;QAC1D,IAAI,CAAC,CAAC,QAAQ,CAAC,MAAM,YAAY,GAAG,CAAC;YAAE,QAAQ,CAAC,MAAM,GAAG,IAAI,GAAG,EAAE,CAAC;QACnE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC;YAAE,QAAQ,CAAC,aAAa,GAAG,EAAE,CAAC;IAC1E,CAAC;IAED,OAAO,QAAQ,IAAI,IAAI,CAAC;AAC1B,CAAC;AAED,8DAA8D;AAE9D,SAAS,uBAAuB,CAAC,YAA8B;IAC7D,MAAM,GAAG,GAAG,YAAY,CAAC,QAAS,CAAC;IACnC,MAAM,QAAQ,GAAoB;QAChC,OAAO,EAAE,IAAI,GAAG,EAAE;QAClB,MAAM,EAAE,EAAE;QACV,MAAM,EAAE,IAAI,GAAG,EAAE;QACjB,aAAa,EAAE,EAAE;QACjB,MAAM,EAAE,YAAY,CAAC,MAAM,IAAI,IAAI;QACnC,IAAI,EAAE,YAAY,CAAC,IAAI,IAAI,UAAU;QACrC,SAAS,EAAE,YAAY,CAAC,SAAS,IAAI,IAAI;KAC1C,CAAC;IAEF,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;QACf,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;YAC9B,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC;QACpD,CAAC;IACH,CAAC;IAED,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;QACf,KAAK,MAAM,CAAC,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;YAC3B,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC;gBACnB,UAAU,EAAE,CAAC,CAAC,MAAM;gBACpB,IAAI,EAAE,CAAC,CAAC,IAAI;gBACZ,WAAW,EAAE,CAAC,CAAC,OAAO;gBACtB,IAAI,EAAE,CAAC,CAAC,IAAI,IAAI,IAAI;gBACpB,SAAS,EAAE,CAAC,CAAC,SAAS,IAAI,IAAI;gBAC9B,SAAS,EAAE,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,KAAK,IAAI,IAAI;aAC1C,CAAC,CAAC;YACH,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;gBACrC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC;YACpE,CAAC;YAED,kFAAkF;YAClF,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC;gBACf,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,YAAY,CAAC;oBAAE,oBAAoB,CAAC,GAAG,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;gBACxF,oBAAoB,CAAC,GAAG,CAAC,YAAY,CAAE,CAAC,IAAI,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;YAC/F,CAAC;QACH,CAAC;IACH,CAAC;IAED,IAAI,GAAG,CAAC,KAAK,EAAE,CAAC;QACd,KAAK,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;YACxD,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;YAEnC,kEAAkE;YAClE,MAAM,QAAQ,GAAG,YAAY,CAAC,SAAS,CAAC,MAAM,CACT,CAAC;YACtC,IAAI,OAAO,QAAQ,KAAK,UAAU,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;gBACzD,MAAM,OAAO,GAAG,KAAK,WAAkC,GAAG,IAAe;oBACvE,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;oBAChD,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,EAAE,UAAU,CAAC;oBACpC,IAAI,MAAM,EAAE,CAAC;wBACX,IAAI,CAAC;4BACH,MAAM,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;wBAC9B,CAAC;wBAAC,OAAO,GAAG,EAAE,CAAC;4BACb,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,yBAAyB,KAAK,MAAO,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;wBACzF,CAAC;oBACH,CAAC;oBACD,OAAO,MAAM,CAAC;gBAChB,CAAC,CAAC;gBACD,OAA8C,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC;gBAChE,YAAY,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC;YAC3C,CAAC;QACH,CAAC;IACH,CAAC;IAED,IAAI,GAAG,CAAC,EAAE,EAAE,CAAC;QACX,KAAK,MAAM,GAAG,IAAI,GAAG,CAAC,EAAE,EAAE,CAAC;YACzB,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC;gBAC1B,OAAO,EAAE,GAAG,CAAC,OAAO;gBACpB,KAAK,EAAE,GAAG,CAAC,KAAK;gBAChB,WAAW,EAAE,GAAG,CAAC,OAAO;aACzB,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,yDAAyD;IACzD,MAAM,mBAAmB,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC;IAC/E,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC;QAC3D,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,KAAK,CAAC;QAC3B,IAAK,IAAI,CAAC,OAAkC,EAAE,QAAQ,IAAI,mBAAmB,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YACxF,MAAM,IAAI,KAAK,CAAC,WAAW,IAAI,uCAAuC,CAAC,CAAC;QAC1E,CAAC;IACH,CAAC;IAED,iBAAiB,CAAC,GAAG,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC;IAC9C,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,8DAA8D;AAE9D,MAAM,UAAU,MAAM,CACpB,IAAY;IAEZ,OAAO,CAAC,MAAM,EAAE,OAAO,EAAQ,EAAE;QAC9B,MAA6C,CAAC,MAAM,GAAG,IAAI,CAAC;QAC7D,iDAAiD;QACjD,MAAM,OAAO,GAAG,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC,QAAmC,CAAC,CAAC;QAC/E,IAAI,OAAO,EAAE,CAAC;YACZ,MAAM,QAAQ,GAAG,gBAAgB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YACnD,QAAQ,CAAC,MAAM,GAAG,IAAI,CAAC;QACzB,CAAC;QACD,2DAA2D;QAC1D,OAAO,CAAC,QAAoC,CAAC,2BAA2B,CAAC,GAAG,KAAK,CAAC;IACrF,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,IAAI,CAClB,WAAmB;IAEnB,OAAO,CAAC,MAAM,EAAE,OAAO,EAAQ,EAAE;QAC9B,MAA6C,CAAC,IAAI,GAAG,WAAW,CAAC;QAClE,MAAM,OAAO,GAAG,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC,QAAmC,CAAC,CAAC;QAC/E,IAAI,OAAO,EAAE,CAAC;YACZ,MAAM,QAAQ,GAAG,gBAAgB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YACnD,QAAQ,CAAC,IAAI,GAAG,WAAW,CAAC;QAC9B,CAAC;QACD,2DAA2D;QAC1D,OAAO,CAAC,QAAoC,CAAC,2BAA2B,CAAC,GAAG,KAAK,CAAC;IACrF,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,SAAS,CACvB,KAAa;IAEb,OAAO,CAAC,MAAM,EAAE,OAAO,EAAQ,EAAE;QAC9B,MAA6C,CAAC,SAAS,GAAG,KAAK,CAAC;QACjE,MAAM,OAAO,GAAG,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC,QAAmC,CAAC,CAAC;QAC/E,IAAI,OAAO,EAAE,CAAC;YACZ,MAAM,QAAQ,GAAG,gBAAgB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YACnD,QAAQ,CAAC,SAAS,GAAG,KAAK,CAAC;QAC7B,CAAC;QACD,2DAA2D;QAC1D,OAAO,CAAC,QAAoC,CAAC,2BAA2B,CAAC,GAAG,KAAK,CAAC;IACrF,CAAC,CAAC;AACJ,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,aAAa,GAAG,IAAI,OAAO,EAA4C,CAAC;AAE9E,8DAA8D;AAE9D,MAAM,kBAAkB,GAAG,IAAI,GAAG,CAAS,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC;AAQtE,MAAM,UAAU,KAAK,CACnB,UAAkB,EAClB,IAAY,EACZ,UAAwB,EAAE;IAE1B,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC;QACtD,MAAM,IAAI,KAAK,CAAC,gCAAgC,UAAU,aAAa,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACtH,CAAC;IACD,OAAO,CAAC,OAAiB,EAAE,OAAoC,EAAQ,EAAE;QACvE,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACxC,MAAM,OAAO,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;QAE1C,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC;YAClB,UAAU,EAAE,UAAU,CAAC,WAAW,EAAE;YACpC,IAAI;YACJ,WAAW,EAAE,UAAU;YACvB,IAAI,EAAE,OAAO,CAAC,IAAI,IAAI,IAAI;YAC1B,SAAS,EAAE,OAAO,CAAC,SAAS,IAAI,IAAI;YACpC,SAAS,EAAE,OAAO,CAAC,SAAS,IAAI,IAAI;SACrC,CAAC,CAAC;QAEH,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;IAClE,CAAC,CAAC;AACJ,CAAC;AAID,MAAM,UAAU,MAAM,CACpB,kBAA4C,EAAE,EAC9C,OAAqC;IAErC,MAAM,QAAQ,GAAG,CAAC,aAA0C,EAAE,OAAsB,EAAQ,EAAE;QAC5F,MAAM,UAAU,GAAG,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QAC9C,MAAM,OAAO,GAAG,gBAAgB,CAAC,aAAa,CAAC,CAAC;QAChD,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC;IAC9D,CAAC,CAAC;IAEF,IAAI,OAAO,EAAE,CAAC;QACZ,QAAQ,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;QACtB,OAAO;IACT,CAAC;IAED,MAAM,OAAO,GAAG,eAAgC,CAAC;IACjD,OAAO,CAAC,OAAiB,EAAE,aAA0C,EAAQ,EAAE;QAC7E,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;IACnC,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,QAAQ,CACtB,UAA2B,EAAE;IAE7B,OAAO,CAAC,OAAiB,EAAE,OAAoC,EAAQ,EAAE;QACvE,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACxC,MAAM,OAAO,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;QAC1C,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG;YAC5B,IAAI,EAAE,UAAU;YAChB,OAAO,EAAE,EAAE,GAAG,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE;SACxC,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,IAAI,CAAC,SAAiB;IACpC,OAAO,CAAC,MAAgB,EAAE,OAAoC,EAAY,EAAE;QAC1E,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACxC,MAAM,OAAO,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;QAC1C,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,SAAS,CAAC;QAEvC,kEAAkE;QAClE,MAAM,OAAO,GAAG,KAAK,WAAkC,GAAG,IAAe;YACvE,MAAM,MAAM,GAAG,MAAO,MAAmB,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YAC5D,2DAA2D;YAC3D,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,EAAE,UAAU,CAAC;YACpC,IAAI,MAAM,EAAE,CAAC;gBACX,IAAI,CAAC;oBACH,MAAM,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;gBAClC,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACb,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,yBAAyB,SAAS,MAAO,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;gBAC7F,CAAC;YACH,CAAC;YACD,OAAO,MAAM,CAAC;QAChB,CAAC,CAAC;QACF,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC;QAClF,OAAO,OAAO,CAAC;IACjB,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,EAAE,CAChB,WAAmB,EACnB,SAAiB;IAEjB,OAAO,CAAC,OAAiB,EAAE,OAAoC,EAAQ,EAAE;QACvE,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACxC,MAAM,OAAO,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;QAC1C,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC;YACzB,OAAO,EAAE,WAAW;YACpB,KAAK,EAAE,SAAS;YAChB,WAAW,EAAE,UAAU;SACxB,CAAC,CAAC;IACL,CAAC,CAAC;AACJ,CAAC;AAED,SAAS,gBAAgB,CAAC,OAA4D;IACpF,MAAM,GAAG,GAAG,OAAO,CAAC,QAAmC,CAAC;IACxD,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;QAC5C,MAAM,IAAI,KAAK,CAAC,qDAAqD,OAAO,GAAG,EAAE,CAAC,CAAC;IACrF,CAAC;IACD,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;QAC5B,aAAa,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE,CAAC,CAAC;IACrF,CAAC;IACD,8EAA8E;IAC7E,GAA+B,CAAC,2BAA2B,CAAC,GAAG,IAAI,CAAC;IACrE,OAAO,aAAa,CAAC,GAAG,CAAC,GAAG,CAAE,CAAC;AACjC,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,MAAsB;IAC7C,OAAO,CAAC,MAAgB,EAAE,OAAoC,EAAY,EAAE;QAC1E,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAExC,MAAM,OAAO,GAAG,KAAK,WAAkC,GAAG,IAAe;YACvE,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAA+C,CAAC;YACpE,MAAM,WAAW,GAAG,IAAI,EAAE,WAAW,EAAE,IAAI,IAAI,SAAS,CAAC;YACzD,MAAM,aAAa,GAAG,GAAG,WAAW,IAAI,UAAU,EAAE,CAAC;YAErD,IAAI,OAAO,MAAM,KAAK,UAAU,EAAE,CAAC;gBACjC,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;gBAC5B,IAAI,KAAK;oBAAE,MAAM,IAAI,KAAK,CAAC,yBAAyB,aAAa,KAAK,KAAK,EAAE,CAAC,CAAC;YACjF,CAAC;iBAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;gBACtC,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC,CAAC,WAAW,EAAE,aAAa,EAAE,WAAW,CAAC,CAAC,CAAC;gBAC1E,KAAK,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;oBACnD,IAAI,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;wBAC9B,MAAM,IAAI,KAAK,CAAC,GAAG,aAAa,MAAM,KAAK,2BAA2B,CAAC,CAAC;oBAC1E,CAAC;oBACD,MAAM,SAAS,GAAG,CAAC,KAAK,IAAI,EAAE,CAA4B,CAAC;oBAC3D,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;oBAClF,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,KAAK,SAAS,IAAI,UAAU,KAAK,IAAI,CAAC,EAAE,CAAC;wBAC5E,MAAM,IAAI,KAAK,CAAC,GAAG,aAAa,MAAM,KAAK,eAAe,CAAC,CAAC;oBAC9D,CAAC;oBACD,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;oBACvC,IAAI,UAAU,KAAK,SAAS,IAAI,UAAU,KAAK,IAAI,EAAE,CAAC;wBACpD,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;4BACzB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;gCAC/B,MAAM,IAAI,KAAK,CAAC,GAAG,aAAa,MAAM,KAAK,oBAAoB,CAAC,CAAC;4BACnE,CAAC;wBACH,CAAC;6BAAM,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;4BACjC,IAAI,OAAO,UAAU,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;gCAChE,MAAM,IAAI,KAAK,CAAC,GAAG,aAAa,MAAM,KAAK,qBAAqB,CAAC,CAAC;4BACpE,CAAC;wBACH,CAAC;6BAAM,IAAI,OAAO,UAAU,KAAK,QAAQ,EAAE,CAAC;4BAC1C,MAAM,IAAI,KAAK,CAAC,GAAG,aAAa,MAAM,KAAK,aAAa,QAAQ,EAAE,CAAC,CAAC;wBACtE,CAAC;wBACD,IAAI,QAAQ,KAAK,QAAQ,IAAI,OAAO,UAAU,KAAK,QAAQ,IAAI,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC;4BACxF,MAAM,IAAI,KAAK,CAAC,GAAG,aAAa,MAAM,KAAK,+CAA+C,CAAC,CAAC;wBAC9F,CAAC;oBACH,CAAC;gBACH,CAAC;YACH,CAAC;YAED,OAAQ,MAAmB,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAChD,CAAC,CAAC;QACF,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC;QAClF,OAAO,OAAO,CAAC;IACjB,CAAC,CAAC;AACJ,CAAC;AAED,8DAA8D;AAE9D,SAAS,uBAAuB,CAC9B,YAA8B,EAC9B,WAAmB,EACnB,MAAsB;IAEtB,MAAM,QAAQ,GAAG,YAAY,CAAC,SAAS,CAAC,WAAW,CACd,CAAC;IACtC,IAAI,OAAO,QAAQ,KAAK,UAAU,IAAI,QAAQ,CAAC,OAAO,CAAC;QAAE,OAAO;IAEhE,MAAM,OAAO,GAAG,KAAK,WAAkC,GAAG,IAAe;QACvE,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAA+C,CAAC;QACpE,MAAM,WAAW,GAAG,IAAI,EAAE,WAAW,EAAE,IAAI,IAAI,SAAS,CAAC;QACzD,MAAM,aAAa,GAAG,GAAG,WAAW,IAAI,WAAW,EAAE,CAAC;QAEtD,IAAI,OAAO,MAAM,KAAK,UAAU,EAAE,CAAC;YACjC,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;YAC5B,IAAI,KAAK;gBAAE,MAAM,IAAI,KAAK,CAAC,yBAAyB,aAAa,KAAK,KAAK,EAAE,CAAC,CAAC;QACjF,CAAC;aAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;YACtC,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC,CAAC,WAAW,EAAE,aAAa,EAAE,WAAW,CAAC,CAAC,CAAC;YAC1E,KAAK,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;gBACnD,IAAI,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;oBAC9B,MAAM,IAAI,KAAK,CAAC,GAAG,aAAa,MAAM,KAAK,2BAA2B,CAAC,CAAC;gBAC1E,CAAC;gBACD,MAAM,SAAS,GAAG,CAAC,KAAK,IAAI,EAAE,CAA4B,CAAC;gBAC3D,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;gBAClF,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,KAAK,SAAS,IAAI,UAAU,KAAK,IAAI,CAAC,EAAE,CAAC;oBAC5E,MAAM,IAAI,KAAK,CAAC,GAAG,aAAa,MAAM,KAAK,eAAe,CAAC,CAAC;gBAC9D,CAAC;gBACD,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;gBACvC,IAAI,UAAU,KAAK,SAAS,IAAI,UAAU,KAAK,IAAI,EAAE,CAAC;oBACpD,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;wBACzB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;4BAC/B,MAAM,IAAI,KAAK,CAAC,GAAG,aAAa,MAAM,KAAK,oBAAoB,CAAC,CAAC;wBACnE,CAAC;oBACH,CAAC;yBAAM,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;wBACjC,IAAI,OAAO,UAAU,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;4BAChE,MAAM,IAAI,KAAK,CAAC,GAAG,aAAa,MAAM,KAAK,qBAAqB,CAAC,CAAC;wBACpE,CAAC;oBACH,CAAC;yBAAM,IAAI,OAAO,UAAU,KAAK,QAAQ,EAAE,CAAC;wBAC1C,MAAM,IAAI,KAAK,CAAC,GAAG,aAAa,MAAM,KAAK,aAAa,QAAQ,EAAE,CAAC,CAAC;oBACtE,CAAC;oBACD,IAAI,QAAQ,KAAK,QAAQ,IAAI,OAAO,UAAU,KAAK,QAAQ,IAAI,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC;wBACxF,MAAM,IAAI,KAAK,CAAC,GAAG,aAAa,MAAM,KAAK,+CAA+C,CAAC,CAAC;oBAC9F,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACpC,CAAC,CAAC;IACD,OAA8C,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC;IAChE,YAAY,CAAC,SAAS,CAAC,WAAW,CAAC,GAAG,OAAO,CAAC;AAChD,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,2BAA2B,CAAC,YAA8B;IACxE,IAAI,gBAAgB,CAAC,GAAG,CAAC,YAAY,CAAC;QAAE,OAAO;IAC/C,gBAAgB,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;IAEnC,MAAM,WAAW,GAAG,oBAAoB,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;IAC3D,IAAI,CAAC,WAAW;QAAE,OAAO;IAEzB,KAAK,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,IAAI,WAAW,EAAE,CAAC;QAClD,uBAAuB,CAAC,YAAY,EAAE,WAAW,EAAE,MAAM,CAAC,CAAC;IAC7D,CAAC;AACH,CAAC;AAED,8DAA8D;AAE9D,MAAM,UAAU,gBAAgB,CAAC,YAA8B,EAAE,UAAkB;IACjF,MAAM,QAAQ,GAAG,WAAW,CAAC,YAAY,CAAC,CAAC;IAC3C,IAAI,CAAC,QAAQ;QAAE,OAAO,KAAK,CAAC;IAC5B,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC;QAAE,OAAO,KAAK,CAAC;IACpD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,KAAK,UAAU,CAAC,CAAC;AACpE,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,YAA8B,EAAE,UAAkB;IAClF,MAAM,QAAQ,GAAG,WAAW,CAAC,YAAY,CAAC,CAAC;IAC3C,IAAI,CAAC,QAAQ;QAAE,OAAO,KAAK,CAAC;IAC5B,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IAC9C,OAAQ,IAAI,EAAE,OAAmC,EAAE,SAAS,KAAK,IAAI,CAAC;AACxE,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,YAA8B;IAC/D,MAAM,QAAQ,GAAG,WAAW,CAAC,YAAY,CAAC,CAAC;IAC3C,IAAI,CAAC,QAAQ;QAAE,OAAO,EAAE,CAAC;IACzB,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC;IACzE,OAAO,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AAClF,CAAC"}