threadforge 0.1.0 → 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 (359) hide show
  1. package/README.md +52 -20
  2. package/bin/forge.js +2 -1049
  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 +160 -49
  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 +84 -22
  318. package/shared/identity.js +26 -0
  319. package/src/core/DirectMessageBus.js +0 -364
  320. package/src/core/EndpointResolver.js +0 -247
  321. package/src/core/ForgeContext.js +0 -2227
  322. package/src/core/ForgeHost.js +0 -122
  323. package/src/core/ForgePlatform.js +0 -145
  324. package/src/core/Ingress.js +0 -768
  325. package/src/core/Interceptors.js +0 -420
  326. package/src/core/MessageBus.js +0 -310
  327. package/src/core/Prometheus.js +0 -305
  328. package/src/core/RequestContext.js +0 -413
  329. package/src/core/RoutingStrategy.js +0 -316
  330. package/src/core/Supervisor.js +0 -1306
  331. package/src/core/ThreadAllocator.js +0 -196
  332. package/src/core/WorkerChannelManager.js +0 -879
  333. package/src/core/config.js +0 -624
  334. package/src/core/host-config.js +0 -311
  335. package/src/core/network-utils.js +0 -166
  336. package/src/core/platform-config.js +0 -308
  337. package/src/decorators/ServiceProxy.js +0 -899
  338. package/src/decorators/index.js +0 -571
  339. package/src/deploy/NginxGenerator.js +0 -865
  340. package/src/deploy/PlatformManifestGenerator.js +0 -96
  341. package/src/deploy/RouteManifestGenerator.js +0 -112
  342. package/src/deploy/index.js +0 -984
  343. package/src/frontend/FrontendDevLifecycle.js +0 -65
  344. package/src/frontend/FrontendPluginOrchestrator.js +0 -187
  345. package/src/frontend/SiteResolver.js +0 -63
  346. package/src/frontend/StaticMountRegistry.js +0 -90
  347. package/src/frontend/plugins/viteFrontend.js +0 -79
  348. package/src/frontend/types.js +0 -35
  349. package/src/index.js +0 -56
  350. package/src/plugins/PluginManager.js +0 -537
  351. package/src/plugins/ScopedPostgres.js +0 -192
  352. package/src/plugins/ScopedRedis.js +0 -142
  353. package/src/plugins/index.js +0 -1729
  354. package/src/registry/ServiceRegistry.js +0 -796
  355. package/src/scaling/ScaleAdvisor.js +0 -442
  356. package/src/services/Service.js +0 -195
  357. package/src/services/worker-bootstrap.js +0 -676
  358. package/src/templates/auth-service.js +0 -65
  359. 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":"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"}