durable-actors 0.2.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (377) hide show
  1. package/LICENSE.md +9 -0
  2. package/README.md +206 -0
  3. package/dist/actor/actor.d.ts +66 -0
  4. package/dist/actor/actor.d.ts.map +1 -0
  5. package/dist/actor/actor.js +144 -0
  6. package/dist/actor/actor.js.map +1 -0
  7. package/dist/actor/decorators.d.ts +6 -0
  8. package/dist/actor/decorators.d.ts.map +1 -0
  9. package/dist/actor/decorators.js +24 -0
  10. package/dist/actor/decorators.js.map +1 -0
  11. package/dist/actor/identity.d.ts +16 -0
  12. package/dist/actor/identity.d.ts.map +1 -0
  13. package/dist/actor/identity.js +29 -0
  14. package/dist/actor/identity.js.map +1 -0
  15. package/dist/actor/invocationContext.d.ts +4 -0
  16. package/dist/actor/invocationContext.d.ts.map +1 -0
  17. package/dist/actor/invocationContext.js +10 -0
  18. package/dist/actor/invocationContext.js.map +1 -0
  19. package/dist/actor/schema.d.ts +22 -0
  20. package/dist/actor/schema.d.ts.map +1 -0
  21. package/dist/actor/schema.js +8 -0
  22. package/dist/actor/schema.js.map +1 -0
  23. package/dist/actor/socket.d.ts +88 -0
  24. package/dist/actor/socket.d.ts.map +1 -0
  25. package/dist/actor/socket.js +216 -0
  26. package/dist/actor/socket.js.map +1 -0
  27. package/dist/actor/socketProtocol.d.ts +85 -0
  28. package/dist/actor/socketProtocol.d.ts.map +1 -0
  29. package/dist/actor/socketProtocol.js +95 -0
  30. package/dist/actor/socketProtocol.js.map +1 -0
  31. package/dist/actor/socketValidation.d.ts +29 -0
  32. package/dist/actor/socketValidation.d.ts.map +1 -0
  33. package/dist/actor/socketValidation.js +73 -0
  34. package/dist/actor/socketValidation.js.map +1 -0
  35. package/dist/backend.d.ts +13 -0
  36. package/dist/backend.d.ts.map +1 -0
  37. package/dist/backend.js +45 -0
  38. package/dist/backend.js.map +1 -0
  39. package/dist/cli/actor-source-watcher.d.ts +11 -0
  40. package/dist/cli/actor-source-watcher.d.ts.map +1 -0
  41. package/dist/cli/actor-source-watcher.js +55 -0
  42. package/dist/cli/actor-source-watcher.js.map +1 -0
  43. package/dist/cli/connection.d.ts +14 -0
  44. package/dist/cli/connection.d.ts.map +1 -0
  45. package/dist/cli/connection.js +16 -0
  46. package/dist/cli/connection.js.map +1 -0
  47. package/dist/cli/control-plane.d.ts +34 -0
  48. package/dist/cli/control-plane.d.ts.map +1 -0
  49. package/dist/cli/control-plane.js +99 -0
  50. package/dist/cli/control-plane.js.map +1 -0
  51. package/dist/cli/deploy.d.ts +4 -0
  52. package/dist/cli/deploy.d.ts.map +1 -0
  53. package/dist/cli/deploy.js +39 -0
  54. package/dist/cli/deploy.js.map +1 -0
  55. package/dist/cli/dev.d.ts +4 -0
  56. package/dist/cli/dev.d.ts.map +1 -0
  57. package/dist/cli/dev.js +121 -0
  58. package/dist/cli/dev.js.map +1 -0
  59. package/dist/cli/generate.d.ts +4 -0
  60. package/dist/cli/generate.d.ts.map +1 -0
  61. package/dist/cli/generate.js +59 -0
  62. package/dist/cli/generate.js.map +1 -0
  63. package/dist/cli/objects.d.ts +4 -0
  64. package/dist/cli/objects.d.ts.map +1 -0
  65. package/dist/cli/objects.js +68 -0
  66. package/dist/cli/objects.js.map +1 -0
  67. package/dist/cli/observe.d.ts +23 -0
  68. package/dist/cli/observe.d.ts.map +1 -0
  69. package/dist/cli/observe.js +245 -0
  70. package/dist/cli/observe.js.map +1 -0
  71. package/dist/cli/rust-runtime.d.ts +10 -0
  72. package/dist/cli/rust-runtime.d.ts.map +1 -0
  73. package/dist/cli/rust-runtime.js +62 -0
  74. package/dist/cli/rust-runtime.js.map +1 -0
  75. package/dist/cli.d.ts +3 -0
  76. package/dist/cli.d.ts.map +1 -0
  77. package/dist/cli.js +131 -0
  78. package/dist/cli.js.map +1 -0
  79. package/dist/client/actorHostGrpc.d.ts +50 -0
  80. package/dist/client/actorHostGrpc.d.ts.map +1 -0
  81. package/dist/client/actorHostGrpc.js +111 -0
  82. package/dist/client/actorHostGrpc.js.map +1 -0
  83. package/dist/client/client.d.ts +12 -0
  84. package/dist/client/client.d.ts.map +1 -0
  85. package/dist/client/client.js +20 -0
  86. package/dist/client/client.js.map +1 -0
  87. package/dist/client/clientSettings.d.ts +8 -0
  88. package/dist/client/clientSettings.d.ts.map +1 -0
  89. package/dist/client/clientSettings.js +45 -0
  90. package/dist/client/clientSettings.js.map +1 -0
  91. package/dist/client/remoteClient.d.ts +49 -0
  92. package/dist/client/remoteClient.d.ts.map +1 -0
  93. package/dist/client/remoteClient.js +286 -0
  94. package/dist/client/remoteClient.js.map +1 -0
  95. package/dist/client/socketConnection.d.ts +18 -0
  96. package/dist/client/socketConnection.d.ts.map +1 -0
  97. package/dist/client/socketConnection.js +48 -0
  98. package/dist/client/socketConnection.js.map +1 -0
  99. package/dist/client/telemetry.d.ts +14 -0
  100. package/dist/client/telemetry.d.ts.map +1 -0
  101. package/dist/client/telemetry.js +23 -0
  102. package/dist/client/telemetry.js.map +1 -0
  103. package/dist/compiler/actor-build.d.ts +4 -0
  104. package/dist/compiler/actor-build.d.ts.map +1 -0
  105. package/dist/compiler/actor-build.js +36 -0
  106. package/dist/compiler/actor-build.js.map +1 -0
  107. package/dist/compiler/actor-compiler.d.ts +30 -0
  108. package/dist/compiler/actor-compiler.d.ts.map +1 -0
  109. package/dist/compiler/actor-compiler.js +300 -0
  110. package/dist/compiler/actor-compiler.js.map +1 -0
  111. package/dist/compiler/deployment-build.d.ts +2 -0
  112. package/dist/compiler/deployment-build.d.ts.map +1 -0
  113. package/dist/compiler/deployment-build.js +23 -0
  114. package/dist/compiler/deployment-build.js.map +1 -0
  115. package/dist/compiler/features/persistence.d.ts +11 -0
  116. package/dist/compiler/features/persistence.d.ts.map +1 -0
  117. package/dist/compiler/features/persistence.js +102 -0
  118. package/dist/compiler/features/persistence.js.map +1 -0
  119. package/dist/compiler/features/reentrancy.d.ts +9 -0
  120. package/dist/compiler/features/reentrancy.d.ts.map +1 -0
  121. package/dist/compiler/features/reentrancy.js +44 -0
  122. package/dist/compiler/features/reentrancy.js.map +1 -0
  123. package/dist/compiler/generators/backend-generator.d.ts +5 -0
  124. package/dist/compiler/generators/backend-generator.d.ts.map +1 -0
  125. package/dist/compiler/generators/backend-generator.js +181 -0
  126. package/dist/compiler/generators/backend-generator.js.map +1 -0
  127. package/dist/compiler/generators/client-generator.d.ts +5 -0
  128. package/dist/compiler/generators/client-generator.d.ts.map +1 -0
  129. package/dist/compiler/generators/client-generator.js +28 -0
  130. package/dist/compiler/generators/client-generator.js.map +1 -0
  131. package/dist/compiler/generators/typescript-generator.d.ts +8 -0
  132. package/dist/compiler/generators/typescript-generator.d.ts.map +1 -0
  133. package/dist/compiler/generators/typescript-generator.js +154 -0
  134. package/dist/compiler/generators/typescript-generator.js.map +1 -0
  135. package/dist/compiler/generators/usage-comment.d.ts +3 -0
  136. package/dist/compiler/generators/usage-comment.d.ts.map +1 -0
  137. package/dist/compiler/generators/usage-comment.js +6 -0
  138. package/dist/compiler/generators/usage-comment.js.map +1 -0
  139. package/dist/compiler/json-schema.d.ts +7 -0
  140. package/dist/compiler/json-schema.d.ts.map +1 -0
  141. package/dist/compiler/json-schema.js +122 -0
  142. package/dist/compiler/json-schema.js.map +1 -0
  143. package/dist/compiler/public-schema.d.ts +4 -0
  144. package/dist/compiler/public-schema.d.ts.map +1 -0
  145. package/dist/compiler/public-schema.js +46 -0
  146. package/dist/compiler/public-schema.js.map +1 -0
  147. package/dist/compiler/rpc-contract.d.ts +5 -0
  148. package/dist/compiler/rpc-contract.d.ts.map +1 -0
  149. package/dist/compiler/rpc-contract.js +95 -0
  150. package/dist/compiler/rpc-contract.js.map +1 -0
  151. package/dist/compiler/socket-contract.d.ts +6 -0
  152. package/dist/compiler/socket-contract.d.ts.map +1 -0
  153. package/dist/compiler/socket-contract.js +36 -0
  154. package/dist/compiler/socket-contract.js.map +1 -0
  155. package/dist/compiler/types.d.ts +51 -0
  156. package/dist/compiler/types.d.ts.map +1 -0
  157. package/dist/compiler/types.js +9 -0
  158. package/dist/compiler/types.js.map +1 -0
  159. package/dist/compiler/validate-public-contract.d.ts +4 -0
  160. package/dist/compiler/validate-public-contract.d.ts.map +1 -0
  161. package/dist/compiler/validate-public-contract.js +155 -0
  162. package/dist/compiler/validate-public-contract.js.map +1 -0
  163. package/dist/environment.d.ts +2 -0
  164. package/dist/environment.d.ts.map +1 -0
  165. package/dist/environment.js +18 -0
  166. package/dist/environment.js.map +1 -0
  167. package/dist/errors.d.ts +27 -0
  168. package/dist/errors.d.ts.map +1 -0
  169. package/dist/errors.js +52 -0
  170. package/dist/errors.js.map +1 -0
  171. package/dist/generated/durable_object/v1/ActivateActorReply.d.ts +8 -0
  172. package/dist/generated/durable_object/v1/ActivateActorReply.d.ts.map +1 -0
  173. package/dist/generated/durable_object/v1/ActivateActorReply.js +3 -0
  174. package/dist/generated/durable_object/v1/ActivateActorReply.js.map +1 -0
  175. package/dist/generated/durable_object/v1/ActivateActorRequest.d.ts +8 -0
  176. package/dist/generated/durable_object/v1/ActivateActorRequest.d.ts.map +1 -0
  177. package/dist/generated/durable_object/v1/ActivateActorRequest.js +3 -0
  178. package/dist/generated/durable_object/v1/ActivateActorRequest.js.map +1 -0
  179. package/dist/generated/durable_object/v1/ActorCompleted.d.ts +9 -0
  180. package/dist/generated/durable_object/v1/ActorCompleted.d.ts.map +1 -0
  181. package/dist/generated/durable_object/v1/ActorCompleted.js +3 -0
  182. package/dist/generated/durable_object/v1/ActorCompleted.js.map +1 -0
  183. package/dist/generated/durable_object/v1/ActorControlPlaneService.d.ts +21 -0
  184. package/dist/generated/durable_object/v1/ActorControlPlaneService.d.ts.map +1 -0
  185. package/dist/generated/durable_object/v1/ActorControlPlaneService.js +3 -0
  186. package/dist/generated/durable_object/v1/ActorControlPlaneService.js.map +1 -0
  187. package/dist/generated/durable_object/v1/ActorFailed.d.ts +9 -0
  188. package/dist/generated/durable_object/v1/ActorFailed.d.ts.map +1 -0
  189. package/dist/generated/durable_object/v1/ActorFailed.js +3 -0
  190. package/dist/generated/durable_object/v1/ActorFailed.js.map +1 -0
  191. package/dist/generated/durable_object/v1/ActorHostService.d.ts +56 -0
  192. package/dist/generated/durable_object/v1/ActorHostService.d.ts.map +1 -0
  193. package/dist/generated/durable_object/v1/ActorHostService.js +3 -0
  194. package/dist/generated/durable_object/v1/ActorHostService.js.map +1 -0
  195. package/dist/generated/durable_object/v1/ActorKey.d.ts +11 -0
  196. package/dist/generated/durable_object/v1/ActorKey.d.ts.map +1 -0
  197. package/dist/generated/durable_object/v1/ActorKey.js +3 -0
  198. package/dist/generated/durable_object/v1/ActorKey.js.map +1 -0
  199. package/dist/generated/durable_object/v1/ControlPlaneReply.d.ts +7 -0
  200. package/dist/generated/durable_object/v1/ControlPlaneReply.d.ts.map +1 -0
  201. package/dist/generated/durable_object/v1/ControlPlaneReply.js +3 -0
  202. package/dist/generated/durable_object/v1/ControlPlaneReply.js.map +1 -0
  203. package/dist/generated/durable_object/v1/ControlPlaneRequest.d.ts +7 -0
  204. package/dist/generated/durable_object/v1/ControlPlaneRequest.d.ts.map +1 -0
  205. package/dist/generated/durable_object/v1/ControlPlaneRequest.js +3 -0
  206. package/dist/generated/durable_object/v1/ControlPlaneRequest.js.map +1 -0
  207. package/dist/generated/durable_object/v1/Empty.d.ts +5 -0
  208. package/dist/generated/durable_object/v1/Empty.d.ts.map +1 -0
  209. package/dist/generated/durable_object/v1/Empty.js +3 -0
  210. package/dist/generated/durable_object/v1/Empty.js.map +1 -0
  211. package/dist/generated/durable_object/v1/HostInvokeActorRequest.d.ts +11 -0
  212. package/dist/generated/durable_object/v1/HostInvokeActorRequest.d.ts.map +1 -0
  213. package/dist/generated/durable_object/v1/HostInvokeActorRequest.js +3 -0
  214. package/dist/generated/durable_object/v1/HostInvokeActorRequest.js.map +1 -0
  215. package/dist/generated/durable_object/v1/HostSocketEventRequest.d.ts +17 -0
  216. package/dist/generated/durable_object/v1/HostSocketEventRequest.d.ts.map +1 -0
  217. package/dist/generated/durable_object/v1/HostSocketEventRequest.js +3 -0
  218. package/dist/generated/durable_object/v1/HostSocketEventRequest.js.map +1 -0
  219. package/dist/generated/durable_object/v1/InvokeActorReply.d.ts +16 -0
  220. package/dist/generated/durable_object/v1/InvokeActorReply.d.ts.map +1 -0
  221. package/dist/generated/durable_object/v1/InvokeActorReply.js +3 -0
  222. package/dist/generated/durable_object/v1/InvokeActorReply.js.map +1 -0
  223. package/dist/generated/durable_object/v1/InvokeActorRequest.d.ts +14 -0
  224. package/dist/generated/durable_object/v1/InvokeActorRequest.d.ts.map +1 -0
  225. package/dist/generated/durable_object/v1/InvokeActorRequest.js +3 -0
  226. package/dist/generated/durable_object/v1/InvokeActorRequest.js.map +1 -0
  227. package/dist/generated/durable_object/v1/PublishSocketEffectsRequest.d.ts +13 -0
  228. package/dist/generated/durable_object/v1/PublishSocketEffectsRequest.d.ts.map +1 -0
  229. package/dist/generated/durable_object/v1/PublishSocketEffectsRequest.js +3 -0
  230. package/dist/generated/durable_object/v1/PublishSocketEffectsRequest.js.map +1 -0
  231. package/dist/generated/durable_object/v1/ReplicaService.d.ts +42 -0
  232. package/dist/generated/durable_object/v1/ReplicaService.d.ts.map +1 -0
  233. package/dist/generated/durable_object/v1/ReplicaService.js +3 -0
  234. package/dist/generated/durable_object/v1/ReplicaService.js.map +1 -0
  235. package/dist/generated/durable_object/v1/ReplicaSessionHead.d.ts +14 -0
  236. package/dist/generated/durable_object/v1/ReplicaSessionHead.d.ts.map +1 -0
  237. package/dist/generated/durable_object/v1/ReplicaSessionHead.js +3 -0
  238. package/dist/generated/durable_object/v1/ReplicaSessionHead.js.map +1 -0
  239. package/dist/generated/durable_object/v1/ReplicaSnapshotRef.d.ts +14 -0
  240. package/dist/generated/durable_object/v1/ReplicaSnapshotRef.d.ts.map +1 -0
  241. package/dist/generated/durable_object/v1/ReplicaSnapshotRef.js +3 -0
  242. package/dist/generated/durable_object/v1/ReplicaSnapshotRef.js.map +1 -0
  243. package/dist/generated/durable_object/v1/ReplicaStreamHead.d.ts +11 -0
  244. package/dist/generated/durable_object/v1/ReplicaStreamHead.d.ts.map +1 -0
  245. package/dist/generated/durable_object/v1/ReplicaStreamHead.js +3 -0
  246. package/dist/generated/durable_object/v1/ReplicaStreamHead.js.map +1 -0
  247. package/dist/generated/durable_object/v1/ReplicaStreamIdentity.d.ts +14 -0
  248. package/dist/generated/durable_object/v1/ReplicaStreamIdentity.d.ts.map +1 -0
  249. package/dist/generated/durable_object/v1/ReplicaStreamIdentity.js +3 -0
  250. package/dist/generated/durable_object/v1/ReplicaStreamIdentity.js.map +1 -0
  251. package/dist/generated/durable_object/v1/Reroute.d.ts +5 -0
  252. package/dist/generated/durable_object/v1/Reroute.d.ts.map +1 -0
  253. package/dist/generated/durable_object/v1/Reroute.js +3 -0
  254. package/dist/generated/durable_object/v1/Reroute.js.map +1 -0
  255. package/dist/generated/durable_object/v1/SnapshotData.d.ts +7 -0
  256. package/dist/generated/durable_object/v1/SnapshotData.d.ts.map +1 -0
  257. package/dist/generated/durable_object/v1/SnapshotData.js +3 -0
  258. package/dist/generated/durable_object/v1/SnapshotData.js.map +1 -0
  259. package/dist/generated/durable_object/v1/SnapshotService.d.ts +32 -0
  260. package/dist/generated/durable_object/v1/SnapshotService.d.ts.map +1 -0
  261. package/dist/generated/durable_object/v1/SnapshotService.js +3 -0
  262. package/dist/generated/durable_object/v1/SnapshotService.js.map +1 -0
  263. package/dist/generated/durable_object/v1/SnapshotWriteReply.d.ts +7 -0
  264. package/dist/generated/durable_object/v1/SnapshotWriteReply.d.ts.map +1 -0
  265. package/dist/generated/durable_object/v1/SnapshotWriteReply.js +3 -0
  266. package/dist/generated/durable_object/v1/SnapshotWriteReply.js.map +1 -0
  267. package/dist/generated/durable_object.d.ts +69 -0
  268. package/dist/generated/durable_object.d.ts.map +1 -0
  269. package/dist/generated/durable_object.js +2 -0
  270. package/dist/generated/durable_object.js.map +1 -0
  271. package/dist/generated/durable_object.proto +117 -0
  272. package/dist/generated.browser.d.ts +6 -0
  273. package/dist/generated.browser.d.ts.map +1 -0
  274. package/dist/generated.browser.js +10 -0
  275. package/dist/generated.browser.js.map +1 -0
  276. package/dist/generated.d.ts +3 -0
  277. package/dist/generated.d.ts.map +1 -0
  278. package/dist/generated.js +3 -0
  279. package/dist/generated.js.map +1 -0
  280. package/dist/host/actor-host.d.ts +22 -0
  281. package/dist/host/actor-host.d.ts.map +1 -0
  282. package/dist/host/actor-host.js +392 -0
  283. package/dist/host/actor-host.js.map +1 -0
  284. package/dist/host/actor-runtime.d.ts +34 -0
  285. package/dist/host/actor-runtime.d.ts.map +1 -0
  286. package/dist/host/actor-runtime.js +279 -0
  287. package/dist/host/actor-runtime.js.map +1 -0
  288. package/dist/host/actor-worker.d.ts +2 -0
  289. package/dist/host/actor-worker.d.ts.map +1 -0
  290. package/dist/host/actor-worker.js +154 -0
  291. package/dist/host/actor-worker.js.map +1 -0
  292. package/dist/host/generic-host.d.ts +3 -0
  293. package/dist/host/generic-host.d.ts.map +1 -0
  294. package/dist/host/generic-host.js +87 -0
  295. package/dist/host/generic-host.js.map +1 -0
  296. package/dist/host/protocol.d.ts +347 -0
  297. package/dist/host/protocol.d.ts.map +1 -0
  298. package/dist/host/protocol.js +76 -0
  299. package/dist/host/protocol.js.map +1 -0
  300. package/dist/host/types.d.ts +42 -0
  301. package/dist/host/types.d.ts.map +1 -0
  302. package/dist/host/types.js +2 -0
  303. package/dist/host/types.js.map +1 -0
  304. package/dist/host/worker-supervisor.d.ts +85 -0
  305. package/dist/host/worker-supervisor.d.ts.map +1 -0
  306. package/dist/host/worker-supervisor.js +423 -0
  307. package/dist/host/worker-supervisor.js.map +1 -0
  308. package/dist/host.d.ts +3 -0
  309. package/dist/host.d.ts.map +1 -0
  310. package/dist/host.js +3 -0
  311. package/dist/host.js.map +1 -0
  312. package/dist/index.d.ts +7 -0
  313. package/dist/index.d.ts.map +1 -0
  314. package/dist/index.js +4 -0
  315. package/dist/index.js.map +1 -0
  316. package/dist/json.d.ts +13 -0
  317. package/dist/json.d.ts.map +1 -0
  318. package/dist/json.js +34 -0
  319. package/dist/json.js.map +1 -0
  320. package/dist/localRuntime.d.ts +27 -0
  321. package/dist/localRuntime.d.ts.map +1 -0
  322. package/dist/localRuntime.js +112 -0
  323. package/dist/localRuntime.js.map +1 -0
  324. package/dist/proxy.d.ts +43 -0
  325. package/dist/proxy.d.ts.map +1 -0
  326. package/dist/proxy.js +76 -0
  327. package/dist/proxy.js.map +1 -0
  328. package/dist/runtimeInstaller.d.ts +16 -0
  329. package/dist/runtimeInstaller.d.ts.map +1 -0
  330. package/dist/runtimeInstaller.js +95 -0
  331. package/dist/runtimeInstaller.js.map +1 -0
  332. package/dist/templates/actor/LICENSE.md +9 -0
  333. package/dist/templates/actor/README.md +33 -0
  334. package/dist/templates/actor/gitignore +7 -0
  335. package/dist/templates/actor/package.json +20 -0
  336. package/dist/templates/actor/src/durable-objects.ts +13 -0
  337. package/dist/templates/actor/tsconfig.json +11 -0
  338. package/dist/templates/ai-chat/.env.example +1 -0
  339. package/dist/templates/ai-chat/LICENSE.md +9 -0
  340. package/dist/templates/ai-chat/README.md +41 -0
  341. package/dist/templates/ai-chat/gitignore +8 -0
  342. package/dist/templates/ai-chat/index.html +12 -0
  343. package/dist/templates/ai-chat/package.json +30 -0
  344. package/dist/templates/ai-chat/src/Chat.tsx +37 -0
  345. package/dist/templates/ai-chat/src/backend.ts +41 -0
  346. package/dist/templates/ai-chat/src/durable-objects.ts +15 -0
  347. package/dist/templates/ai-chat/tsconfig.json +13 -0
  348. package/dist/templates/chat/LICENSE.md +9 -0
  349. package/dist/templates/chat/README.md +29 -0
  350. package/dist/templates/chat/gitignore +8 -0
  351. package/dist/templates/chat/index.html +12 -0
  352. package/dist/templates/chat/package.json +27 -0
  353. package/dist/templates/chat/src/Chat.tsx +63 -0
  354. package/dist/templates/chat/src/backend.ts +20 -0
  355. package/dist/templates/chat/src/durable-objects.ts +18 -0
  356. package/dist/templates/chat/tsconfig.json +13 -0
  357. package/dist/templates/documents/LICENSE.md +9 -0
  358. package/dist/templates/documents/README.md +38 -0
  359. package/dist/templates/documents/gitignore +8 -0
  360. package/dist/templates/documents/index.html +12 -0
  361. package/dist/templates/documents/package.json +35 -0
  362. package/dist/templates/documents/src/App.tsx +81 -0
  363. package/dist/templates/documents/src/Editor.tsx +69 -0
  364. package/dist/templates/documents/src/backend.ts +18 -0
  365. package/dist/templates/documents/src/collaboration.ts +46 -0
  366. package/dist/templates/documents/src/durable-objects.ts +48 -0
  367. package/dist/templates/documents/src/style.css +145 -0
  368. package/dist/templates/documents/tsconfig.json +13 -0
  369. package/dist/wire/contract.d.ts +9 -0
  370. package/dist/wire/contract.d.ts.map +1 -0
  371. package/dist/wire/contract.js +2 -0
  372. package/dist/wire/contract.js.map +1 -0
  373. package/dist/wire/public-contract.d.ts +36 -0
  374. package/dist/wire/public-contract.d.ts.map +1 -0
  375. package/dist/wire/public-contract.js +2 -0
  376. package/dist/wire/public-contract.js.map +1 -0
  377. package/package.json +111 -0
@@ -0,0 +1,102 @@
1
+ import ts from "typescript";
2
+ import { definitionDiagnostic } from "../actor-compiler.js";
3
+ import { AnnotationKind, Persistence } from "../types.js";
4
+ function validatePersistence(actor) {
5
+ const fields = [];
6
+ const diagnostics = [];
7
+ for (const member of actor.members) {
8
+ const node = member.node;
9
+ if (ts.isConstructorDeclaration(node)) {
10
+ for (const parameter of node.parameters) {
11
+ if (ts.isParameterPropertyDeclaration(parameter, node))
12
+ diagnostics.push(definitionDiagnostic(parameter, "actor parameter properties must become explicitly decorated class fields"));
13
+ }
14
+ }
15
+ if (!ts.isPropertyDeclaration(node) || hasModifier(node, ts.SyntaxKind.StaticKeyword))
16
+ continue;
17
+ const result = validateField(actor.name, member);
18
+ diagnostics.push(...result.diagnostics);
19
+ if (result.field !== undefined)
20
+ fields.push(result.field);
21
+ }
22
+ return { fields, diagnostics };
23
+ }
24
+ function readPersistence(use, mode) {
25
+ const name = mode === Persistence.Persisted ? "Persisted" : "Ephemeral";
26
+ const node = use.target;
27
+ if (!ts.isPropertyDeclaration(node) ||
28
+ hasModifier(node, ts.SyntaxKind.StaticKeyword) ||
29
+ hasModifier(node, ts.SyntaxKind.AccessorKeyword))
30
+ return invalid(use, `@${name} requires an instance field`);
31
+ if (use.called)
32
+ return invalid(use, `use @${name} without parentheses or arguments`);
33
+ if (hasModifier(node, ts.SyntaxKind.DeclareKeyword))
34
+ return invalid(use, `@${name} requires a runtime field, not a declare field`);
35
+ if (fieldName(node.name) === undefined)
36
+ return invalid(use, `@${name} requires a field with a literal string name`);
37
+ if (mode === Persistence.Persisted && ts.isPrivateIdentifier(node.name))
38
+ return invalid(use, "@Persisted cannot decorate a JavaScript private field; use @Ephemeral");
39
+ return { annotations: [{ kind: AnnotationKind.Persistence, mode, node: use.node }], diagnostics: [] };
40
+ }
41
+ function readEmission(use) {
42
+ const node = use.target;
43
+ if (!ts.isPropertyDeclaration(node) ||
44
+ hasModifier(node, ts.SyntaxKind.StaticKeyword) ||
45
+ hasModifier(node, ts.SyntaxKind.AccessorKeyword))
46
+ return invalid(use, "@Emittable requires an instance field");
47
+ if (use.called)
48
+ return invalid(use, "use @Emittable without parentheses or arguments");
49
+ if (ts.isPrivateIdentifier(node.name) ||
50
+ hasModifier(node, ts.SyntaxKind.PrivateKeyword) ||
51
+ hasModifier(node, ts.SyntaxKind.ProtectedKeyword))
52
+ return invalid(use, "@Emittable requires a public persisted field");
53
+ return { annotations: [{ kind: AnnotationKind.Emission, node: use.node }], diagnostics: [] };
54
+ }
55
+ function validateField(actorName, member) {
56
+ const node = member.node;
57
+ if (member.diagnostics.length > 0)
58
+ return { diagnostics: [] };
59
+ const annotations = member.annotations.filter(annotation => annotation.kind === AnnotationKind.Persistence);
60
+ const emission = member.annotations.filter(annotation => annotation.kind === AnnotationKind.Emission);
61
+ if (annotations.length !== 1)
62
+ return {
63
+ diagnostics: [
64
+ definitionDiagnostic(node.name, `actor field ${actorName}.${node.name.getText()} must declare exactly one of @Persisted or @Ephemeral`, annotations.map(annotation => annotation.node))
65
+ ]
66
+ };
67
+ if (emission.length > 1 || (emission.length === 1 && annotations[0].mode !== Persistence.Persisted))
68
+ return {
69
+ diagnostics: [
70
+ definitionDiagnostic(node, "@Emittable requires a public @Persisted field and cannot be repeated")
71
+ ]
72
+ };
73
+ return {
74
+ field: {
75
+ name: fieldName(node.name),
76
+ persistence: annotations[0].mode,
77
+ ...(ts.isPrivateIdentifier(node.name) ? { private: true } : {}),
78
+ ...(hasModifier(node, ts.SyntaxKind.PrivateKeyword)
79
+ ? { visibility: "private" }
80
+ : hasModifier(node, ts.SyntaxKind.ProtectedKeyword)
81
+ ? { visibility: "protected" }
82
+ : {}),
83
+ ...(emission.length === 1 ? { emittable: true } : {})
84
+ },
85
+ diagnostics: []
86
+ };
87
+ }
88
+ function fieldName(name) {
89
+ if (ts.isIdentifier(name) || ts.isPrivateIdentifier(name) || ts.isStringLiteral(name) || ts.isNumericLiteral(name))
90
+ return name.text;
91
+ if (ts.isComputedPropertyName(name) &&
92
+ (ts.isStringLiteral(name.expression) || ts.isNumericLiteral(name.expression)))
93
+ return name.expression.text;
94
+ }
95
+ function hasModifier(node, kind) {
96
+ return ts.canHaveModifiers(node) && (ts.getModifiers(node)?.some(modifier => modifier.kind === kind) ?? false);
97
+ }
98
+ function invalid(use, message) {
99
+ return { annotations: [], diagnostics: [definitionDiagnostic(use.node, message)] };
100
+ }
101
+ export { readEmission, readPersistence, validatePersistence };
102
+ //# sourceMappingURL=persistence.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"persistence.js","sourceRoot":"","sources":["../../../src/compiler/features/persistence.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import ts from "typescript";
2
+ import type { DecoratorResult, DecoratorUse, ParsedActor } from "../types.js";
3
+ declare function readReentrancy(use: DecoratorUse): DecoratorResult;
4
+ declare function validateReentrancy(actor: ParsedActor): {
5
+ methods: string[];
6
+ diagnostics: ts.Diagnostic[];
7
+ };
8
+ export { readReentrancy, validateReentrancy };
9
+ //# sourceMappingURL=reentrancy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reentrancy.d.ts","sourceRoot":"","sources":["../../../src/compiler/features/reentrancy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,YAAY,CAAA;AAI3B,OAAO,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAE7E,iBAAS,cAAc,CAAC,GAAG,EAAE,YAAY,GAAG,eAAe,CAW1D;AAED,iBAAS,kBAAkB,CAAC,KAAK,EAAE,WAAW;;;EAS7C;AAkBD,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,CAAA"}
@@ -0,0 +1,44 @@
1
+ import ts from "typescript";
2
+ import { definitionDiagnostic } from "../actor-compiler.js";
3
+ import { AnnotationKind } from "../types.js";
4
+ function readReentrancy(use) {
5
+ const node = use.target;
6
+ if (use.called)
7
+ return invalidReentrancy(use);
8
+ if (!ts.isMethodDeclaration(node) || !node.body)
9
+ return invalidReentrancy(use);
10
+ if (!hasModifier(node, ts.SyntaxKind.AsyncKeyword))
11
+ return invalidReentrancy(use);
12
+ if (hasModifier(node, ts.SyntaxKind.StaticKeyword))
13
+ return invalidReentrancy(use);
14
+ if (hasModifier(node, ts.SyntaxKind.PrivateKeyword) || hasModifier(node, ts.SyntaxKind.ProtectedKeyword))
15
+ return invalidReentrancy(use);
16
+ if (!ts.isIdentifier(node.name) && !ts.isStringLiteral(node.name))
17
+ return invalidReentrancy(use);
18
+ return { annotations: [{ kind: AnnotationKind.Reentrancy, node: use.node }], diagnostics: [] };
19
+ }
20
+ function validateReentrancy(actor) {
21
+ const methods = [];
22
+ const diagnostics = [];
23
+ for (const member of actor.members) {
24
+ const annotations = member.annotations.filter(annotation => annotation.kind === AnnotationKind.Reentrancy);
25
+ if (annotations.length > 1)
26
+ diagnostics.push(definitionDiagnostic(member.node, "@Reentrant cannot be repeated"));
27
+ if (annotations.length === 1)
28
+ methods.push(member.node.name.text);
29
+ }
30
+ return { methods, diagnostics };
31
+ }
32
+ function hasModifier(node, kind) {
33
+ return ts.getModifiers(node)?.some(modifier => modifier.kind === kind) ?? false;
34
+ }
35
+ function invalidReentrancy(use) {
36
+ return {
37
+ annotations: [],
38
+ diagnostics: [
39
+ definitionDiagnostic(use.target, "@Reentrant requires a public instance async method; use it without parentheses")
40
+ ]
41
+ };
42
+ }
43
+ export { readReentrancy, validateReentrancy };
44
+ //# sourceMappingURL=reentrancy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reentrancy.js","sourceRoot":"","sources":["../../../src/compiler/features/reentrancy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,YAAY,CAAA;AAE3B,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAA;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAG5C,SAAS,cAAc,CAAC,GAAiB;IACrC,MAAM,IAAI,GAAG,GAAG,CAAC,MAAM,CAAA;IACvB,IAAI,GAAG,CAAC,MAAM;QAAE,OAAO,iBAAiB,CAAC,GAAG,CAAC,CAAA;IAC7C,IAAI,CAAC,EAAE,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI;QAAE,OAAO,iBAAiB,CAAC,GAAG,CAAC,CAAA;IAC9E,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC;QAAE,OAAO,iBAAiB,CAAC,GAAG,CAAC,CAAA;IACjF,IAAI,WAAW,CAAC,IAAI,EAAE,EAAE,CAAC,UAAU,CAAC,aAAa,CAAC;QAAE,OAAO,iBAAiB,CAAC,GAAG,CAAC,CAAA;IACjF,IAAI,WAAW,CAAC,IAAI,EAAE,EAAE,CAAC,UAAU,CAAC,cAAc,CAAC,IAAI,WAAW,CAAC,IAAI,EAAE,EAAE,CAAC,UAAU,CAAC,gBAAgB,CAAC;QACpG,OAAO,iBAAiB,CAAC,GAAG,CAAC,CAAA;IACjC,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,iBAAiB,CAAC,GAAG,CAAC,CAAA;IAEhG,OAAO,EAAE,WAAW,EAAE,CAAC,EAAE,IAAI,EAAE,cAAc,CAAC,UAAU,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,WAAW,EAAE,EAAE,EAAE,CAAA;AAClG,CAAC;AAED,SAAS,kBAAkB,CAAC,KAAkB;IAC1C,MAAM,OAAO,GAAa,EAAE,CAAA;IAC5B,MAAM,WAAW,GAAoB,EAAE,CAAA;IACvC,KAAK,MAAM,MAAM,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;QACjC,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,KAAK,cAAc,CAAC,UAAU,CAAC,CAAA;QAC1G,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC;YAAE,WAAW,CAAC,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,IAAI,EAAE,+BAA+B,CAAC,CAAC,CAAA;QAChH,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,CAAC,IAAI,CAAE,MAAM,CAAC,IAAI,CAAC,IAAyC,CAAC,IAAI,CAAC,CAAA;IAC3G,CAAC;IACD,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,CAAA;AACnC,CAAC;AAED,SAAS,WAAW,CAAC,IAA0B,EAAE,IAAmB;IAChE,OAAO,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,KAAK,CAAA;AACnF,CAAC;AAED,SAAS,iBAAiB,CAAC,GAAiB;IACxC,OAAO;QACH,WAAW,EAAE,EAAE;QACf,WAAW,EAAE;YACT,oBAAoB,CAChB,GAAG,CAAC,MAAM,EACV,gFAAgF,CACnF;SACJ;KACJ,CAAA;AACL,CAAC;AAED,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,CAAA"}
@@ -0,0 +1,5 @@
1
+ import type { SocketContract } from "../../wire/contract.js";
2
+ import type { ActorApi } from "../../wire/public-contract.js";
3
+ declare function backendSource(actors: readonly ActorApi[], contracts: readonly SocketContract[], wireNames: ReadonlyMap<string, readonly string[]>): Promise<string>;
4
+ export { backendSource };
5
+ //# sourceMappingURL=backend-generator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"backend-generator.d.ts","sourceRoot":"","sources":["../../../src/compiler/generators/backend-generator.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AAC5D,OAAO,KAAK,EAAE,QAAQ,EAAyC,MAAM,+BAA+B,CAAA;AAIpG,iBAAe,aAAa,CACxB,MAAM,EAAE,SAAS,QAAQ,EAAE,EAC3B,SAAS,EAAE,SAAS,cAAc,EAAE,EACpC,SAAS,EAAE,WAAW,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC,GAClD,OAAO,CAAC,MAAM,CAAC,CAsBjB;AAwLD,OAAO,EAAE,aAAa,EAAE,CAAA"}
@@ -0,0 +1,181 @@
1
+ import { compile } from "json-schema-to-typescript";
2
+ import ts from "typescript";
3
+ import { usageComment } from "./usage-comment.js";
4
+ async function backendSource(actors, contracts, wireNames) {
5
+ const sources = [];
6
+ for (const { actorName } of contracts) {
7
+ const actor = actors.find(actor => actor.actorName === actorName);
8
+ sources.push(actor
9
+ ? await actorSource(actor, wireNames.get(actorName) ?? [])
10
+ : { declarations: "", descriptor: actorDescriptor(actorName) });
11
+ }
12
+ const exampleType = contracts[0]?.actorName;
13
+ const exampleActor = actors[0]?.actorName;
14
+ return `${usageComment("Types for actor state and methods.", exampleType && `type State = actors.${exampleType}.State`)}
15
+ export declare namespace actors {
16
+ ${sources.map(source => source.declarations).join("\n")}
17
+ }
18
+
19
+ ${usageComment("Call actor methods from your backend.", exampleActor && `const actor = actors.${exampleActor}.get("actor-id")`)}
20
+ export const actors = {
21
+ ${sources.map(source => source.descriptor).join(",\n")}
22
+ }
23
+ `;
24
+ }
25
+ async function actorSource(actor, wireNames) {
26
+ const { declarations, types, stubName, methodsName } = await rpcDeclarations(actor.rpc, wireNames);
27
+ const methods = actor.rpc.methods.map((method, index) => methodDeclaration(method, index, types)).join("\n");
28
+ const descriptors = actor.rpc.methods.map(method => ({ name: method.name, result: method.result.kind }));
29
+ const stub = `actors.${actor.actorName}.${stubName}`;
30
+ return {
31
+ declarations: `export namespace ${actor.actorName} {
32
+ ${declarations}
33
+ export interface ${stubName} {
34
+ ${methods}
35
+ }
36
+ ${methodTypes(actor.actorName, actor.rpc.methods, stubName, methodsName)}
37
+ }`,
38
+ descriptor: actorDescriptor(actor.actorName, `get(actorId: string, transport?: import("durable-actors/backend").ActorRpcTransport): ${stub} {
39
+ return $createActorStub<${stub}>(${JSON.stringify(actor.actorName)}, actorId, ${JSON.stringify(descriptors)}, transport)
40
+ }`)
41
+ };
42
+ }
43
+ function actorDescriptor(actorName, rpc) {
44
+ return `[${JSON.stringify(actorName)}]: {
45
+ ${rpc ? `${rpc},` : ""}
46
+ ${usageComment("Allow a frontend connection after your backend checks the user's access.", `const grant = await actors.${actorName}.prepareWebsocket({ actorId: "actor-id", metadata })`)}
47
+ prepareWebsocket(
48
+ authorization: Omit<actors.${actorName}.Authorization, "actorName">,
49
+ options: import("durable-actors/proxy").SocketProxyOptions = {},
50
+ dependencies: import("durable-actors/proxy").SocketProxyDependencies = {}
51
+ ): Promise<import("durable-actors/proxy").SocketGrant> {
52
+ return new ActorProxy(options, dependencies).handle({ ...authorization, actorName: ${JSON.stringify(actorName)} })
53
+ }
54
+ }`;
55
+ }
56
+ function methodTypes(actorName, methods, stubName, methodsName) {
57
+ const entries = methods.map(({ name }) => `[${JSON.stringify(name)}]: {
58
+ Args: Parameters<${stubName}[${JSON.stringify(name)}]>
59
+ Result: Awaited<ReturnType<${stubName}[${JSON.stringify(name)}]>>
60
+ }`);
61
+ const namespaces = methods
62
+ .filter(method => isIdentifier(method.name))
63
+ .map(({ name }) => `export namespace ${name} {
64
+ export type Args = ${methodsName}[${JSON.stringify(name)}]["Args"]
65
+ export type Result = ${methodsName}[${JSON.stringify(name)}]["Result"]
66
+ }`);
67
+ return `interface ${methodsName} {
68
+ ${entries.join("\n")}
69
+ }
70
+ export interface Methods extends ${methodsName} {}
71
+ ${usageComment("Types for a method's arguments and return value.", methods[0] && `type Args = actors.${actorName}.Methods[${JSON.stringify(methods[0].name)}]["Args"]\ntype Result = actors.${actorName}.Methods[${JSON.stringify(methods[0].name)}]["Result"]`)}
72
+ export namespace Methods {
73
+ ${namespaces.join("\n")}
74
+ }`;
75
+ }
76
+ async function rpcDeclarations(rpc, wireNames) {
77
+ const { properties, definitions } = rpcSchemaTypes(rpc);
78
+ const code = await compile({
79
+ ...rpc.schema,
80
+ definitions,
81
+ type: "object",
82
+ properties,
83
+ required: Object.keys(properties),
84
+ additionalProperties: false
85
+ }, "RpcTypes", {
86
+ $refOptions: { resolve: { file: false, http: false } },
87
+ bannerComment: "",
88
+ unknownAny: true,
89
+ additionalProperties: false,
90
+ customName: (schema, key) => {
91
+ const name = schema.title || schema.$id || key;
92
+ const reserved = [
93
+ ...wireNames,
94
+ "State",
95
+ "Metadata",
96
+ "Incoming",
97
+ "Outgoing",
98
+ "Connection",
99
+ "Authorization",
100
+ "Methods",
101
+ "Parameters",
102
+ "ReturnType",
103
+ "Awaited"
104
+ ];
105
+ let available = name;
106
+ while (reserved.includes(available))
107
+ available += "Data";
108
+ return available === name ? undefined : available;
109
+ }
110
+ });
111
+ return readRpcDeclarations(code, wireNames);
112
+ }
113
+ function rpcSchemaTypes(rpc) {
114
+ const properties = Object.create(null);
115
+ const definitions = { ...rpc.schema.definitions };
116
+ const add = (name, type, displayName) => {
117
+ const key = type.$ref.slice("#/definitions/".length);
118
+ const definition = definitions[key];
119
+ properties[name] = typeof definition === "boolean" ? definition : type;
120
+ if (definition && typeof definition === "object" && !definition.title && !definition.$ref)
121
+ definitions[key] = { ...definition, title: displayName };
122
+ };
123
+ rpc.methods.forEach((method, methodIndex) => {
124
+ method.parameters.forEach((parameter, index) => add(`m${methodIndex}p${index}`, parameter.type, `${method.name} ${parameter.name}`));
125
+ if (method.result.kind === "value")
126
+ add(`m${methodIndex}result`, method.result.type, `${method.name} result`);
127
+ });
128
+ return { properties, definitions };
129
+ }
130
+ function readRpcDeclarations(code, wireNames) {
131
+ const source = ts.createSourceFile("types.ts", code, ts.ScriptTarget.Latest, true);
132
+ const root = source.statements.find(statement => ts.isInterfaceDeclaration(statement) && statement.name.text === "RpcTypes");
133
+ const types = new Map(root.members
134
+ .filter(ts.isPropertySignature)
135
+ .map(property => [property.name.text, property.type.getText(source)]));
136
+ const statements = source.statements.filter(statement => statement !== root);
137
+ const declarations = statements.map(statement => statement.getText(source)).join("\n\n");
138
+ return {
139
+ declarations,
140
+ types,
141
+ stubName: availableTypeName(statements, "Stub", wireNames),
142
+ methodsName: availableTypeName(statements, "$MethodTypes", wireNames)
143
+ };
144
+ }
145
+ function availableTypeName(statements, proposed, reserved) {
146
+ const declarationNames = new Set(statements.flatMap(statement => ts.isInterfaceDeclaration(statement) ||
147
+ ts.isTypeAliasDeclaration(statement) ||
148
+ ts.isEnumDeclaration(statement)
149
+ ? [statement.name.text]
150
+ : []));
151
+ let name = proposed;
152
+ while (declarationNames.has(name) || reserved.includes(name))
153
+ name += "_";
154
+ return name;
155
+ }
156
+ function methodDeclaration(method, index, types) {
157
+ const used = new Set();
158
+ const parameters = method.parameters
159
+ .map((parameter, parameterIndex) => {
160
+ const name = parameterName(parameter.name, parameterIndex, used);
161
+ const prefix = parameter.rest ? "..." : "";
162
+ const optional = parameter.optional ? "?" : "";
163
+ return `${prefix}${name}${optional}: ${types.get(`m${index}p${parameterIndex}`)}`;
164
+ })
165
+ .join(", ");
166
+ const result = method.result.kind === "void" ? "void" : types.get(`m${index}result`);
167
+ return ` ${JSON.stringify(method.name)}(${parameters}): Promise<${result}>`;
168
+ }
169
+ function parameterName(proposed, index, used) {
170
+ let name = isIdentifier(proposed) ? proposed : `arg${index}`;
171
+ while (used.has(name))
172
+ name += "_";
173
+ used.add(name);
174
+ return name;
175
+ }
176
+ function isIdentifier(name) {
177
+ const scanner = ts.createScanner(ts.ScriptTarget.Latest, false, ts.LanguageVariant.Standard, name);
178
+ return scanner.scan() === ts.SyntaxKind.Identifier && scanner.scan() === ts.SyntaxKind.EndOfFileToken;
179
+ }
180
+ export { backendSource };
181
+ //# sourceMappingURL=backend-generator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"backend-generator.js","sourceRoot":"","sources":["../../../src/compiler/generators/backend-generator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,2BAA2B,CAAA;AAEnD,OAAO,EAAE,MAAM,YAAY,CAAA;AAK3B,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AAEjD,KAAK,UAAU,aAAa,CACxB,MAA2B,EAC3B,SAAoC,EACpC,SAAiD;IAEjD,MAAM,OAAO,GAAG,EAAE,CAAA;IAClB,KAAK,MAAM,EAAE,SAAS,EAAE,IAAI,SAAS,EAAE,CAAC;QACpC,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,SAAS,KAAK,SAAS,CAAC,CAAA;QACjE,OAAO,CAAC,IAAI,CACR,KAAK;YACD,CAAC,CAAC,MAAM,WAAW,CAAC,KAAK,EAAE,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;YAC1D,CAAC,CAAC,EAAE,YAAY,EAAE,EAAE,EAAE,UAAU,EAAE,eAAe,CAAC,SAAS,CAAC,EAAE,CACrE,CAAA;IACL,CAAC;IACD,MAAM,WAAW,GAAG,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,CAAA;IAC3C,MAAM,YAAY,GAAG,MAAM,CAAC,CAAC,CAAC,EAAE,SAAS,CAAA;IACzC,OAAO,GAAG,YAAY,CAAC,oCAAoC,EAAE,WAAW,IAAI,uBAAuB,WAAW,QAAQ,CAAC;;EAEzH,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;;;EAGrD,YAAY,CAAC,uCAAuC,EAAE,YAAY,IAAI,wBAAwB,YAAY,kBAAkB,CAAC;;EAE7H,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC;;CAErD,CAAA;AACD,CAAC;AAED,KAAK,UAAU,WAAW,CAAC,KAAe,EAAE,SAA4B;IACpE,MAAM,EAAE,YAAY,EAAE,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,GAAG,MAAM,eAAe,CAAC,KAAK,CAAC,GAAG,EAAE,SAAS,CAAC,CAAA;IAClG,MAAM,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC,iBAAiB,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAC5G,MAAM,WAAW,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAA;IACxG,MAAM,IAAI,GAAG,UAAU,KAAK,CAAC,SAAS,IAAI,QAAQ,EAAE,CAAA;IACpD,OAAO;QACH,YAAY,EAAE,oBAAoB,KAAK,CAAC,SAAS;EACvD,YAAY;mBACK,QAAQ;EACzB,OAAO;;EAEP,WAAW,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,QAAQ,EAAE,WAAW,CAAC;EACtE;QACM,UAAU,EAAE,eAAe,CACvB,KAAK,CAAC,SAAS,EACf,yFAAyF,IAAI;kCACvE,IAAI,KAAK,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,SAAS,CAAC,cAAc,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC;MAC7G,CACG;KACJ,CAAA;AACL,CAAC;AAED,SAAS,eAAe,CAAC,SAAiB,EAAE,GAAY;IACpD,OAAO,IAAI,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC;MAClC,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE;MACpB,YAAY,CAAC,0EAA0E,EAAE,8BAA8B,SAAS,sDAAsD,CAAC;;qCAExJ,SAAS;;;;6FAI+C,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC;;EAEpH,CAAA;AACF,CAAC;AAED,SAAS,WAAW,CAAC,SAAiB,EAAE,OAA6B,EAAE,QAAgB,EAAE,WAAmB;IACxG,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CACvB,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;uBACvB,QAAQ,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;iCACtB,QAAQ,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;EAC/D,CACG,CAAA;IACD,MAAM,UAAU,GAAG,OAAO;SACrB,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;SAC3C,GAAG,CACA,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,oBAAoB,IAAI;yBACzB,WAAW,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;2BACjC,WAAW,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;EAC5D,CACO,CAAA;IACL,OAAO,aAAa,WAAW;EACjC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;;mCAEe,WAAW;EAC5C,YAAY,CAAC,kDAAkD,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,sBAAsB,SAAS,YAAY,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,mCAAmC,SAAS,YAAY,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC;;EAE9P,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;EACrB,CAAA;AACF,CAAC;AAED,KAAK,UAAU,eAAe,CAAC,GAAgB,EAAE,SAA4B;IACzE,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,GAAG,cAAc,CAAC,GAAG,CAAC,CAAA;IACvD,MAAM,IAAI,GAAG,MAAM,OAAO,CACtB;QACI,GAAG,GAAG,CAAC,MAAM;QACb,WAAW;QACX,IAAI,EAAE,QAAQ;QACd,UAAU;QACV,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC;QACjC,oBAAoB,EAAE,KAAK;KAChB,EACf,UAAU,EACV;QACI,WAAW,EAAE,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE;QACtD,aAAa,EAAE,EAAE;QACjB,UAAU,EAAE,IAAI;QAChB,oBAAoB,EAAE,KAAK;QAC3B,UAAU,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE;YACxB,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,GAAG,IAAI,GAAG,CAAA;YAC9C,MAAM,QAAQ,GAAG;gBACb,GAAG,SAAS;gBACZ,OAAO;gBACP,UAAU;gBACV,UAAU;gBACV,UAAU;gBACV,YAAY;gBACZ,eAAe;gBACf,SAAS;gBACT,YAAY;gBACZ,YAAY;gBACZ,SAAS;aACZ,CAAA;YACD,IAAI,SAAS,GAAG,IAAI,CAAA;YACpB,OAAO,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC;gBAAE,SAAS,IAAI,MAAM,CAAA;YACxD,OAAO,SAAS,KAAK,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAA;QACrD,CAAC;KACJ,CACJ,CAAA;IACD,OAAO,mBAAmB,CAAC,IAAI,EAAE,SAAS,CAAC,CAAA;AAC/C,CAAC;AAED,SAAS,cAAc,CAAC,GAAgB;IACpC,MAAM,UAAU,GAA4C,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;IAC/E,MAAM,WAAW,GAAG,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC,WAAW,EAAE,CAAA;IACjD,MAAM,GAAG,GAAG,CAAC,IAAY,EAAE,IAAmB,EAAE,WAAmB,EAAE,EAAE;QACnE,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAA;QACpD,MAAM,UAAU,GAAG,WAAW,CAAC,GAAG,CAAC,CAAA;QACnC,UAAU,CAAC,IAAI,CAAC,GAAG,OAAO,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAA;QACtE,IAAI,UAAU,IAAI,OAAO,UAAU,KAAK,QAAQ,IAAI,CAAC,UAAU,CAAC,KAAK,IAAI,CAAC,UAAU,CAAC,IAAI;YACrF,WAAW,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,UAAU,EAAE,KAAK,EAAE,WAAW,EAAE,CAAA;IAChE,CAAC,CAAA;IACD,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,WAAW,EAAE,EAAE;QACxC,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,KAAK,EAAE,EAAE,CAC3C,GAAG,CAAC,IAAI,WAAW,IAAI,KAAK,EAAE,EAAE,SAAS,CAAC,IAAI,EAAE,GAAG,MAAM,CAAC,IAAI,IAAI,SAAS,CAAC,IAAI,EAAE,CAAC,CACtF,CAAA;QACD,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,KAAK,OAAO;YAAE,GAAG,CAAC,IAAI,WAAW,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,MAAM,CAAC,IAAI,SAAS,CAAC,CAAA;IACjH,CAAC,CAAC,CAAA;IACF,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,CAAA;AACtC,CAAC;AAED,SAAS,mBAAmB,CAAC,IAAY,EAAE,SAA4B;IACnE,MAAM,MAAM,GAAG,EAAE,CAAC,gBAAgB,CAAC,UAAU,EAAE,IAAI,EAAE,EAAE,CAAC,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC,CAAA;IAClF,MAAM,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAC/B,SAAS,CAAC,EAAE,CAAC,EAAE,CAAC,sBAAsB,CAAC,SAAS,CAAC,IAAI,SAAS,CAAC,IAAI,CAAC,IAAI,KAAK,UAAU,CAC/D,CAAA;IAC5B,MAAM,KAAK,GAAG,IAAI,GAAG,CACjB,IAAI,CAAC,OAAO;SACP,MAAM,CAAC,EAAE,CAAC,mBAAmB,CAAC;SAC9B,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAE,QAAQ,CAAC,IAAsB,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAChG,CAAA;IACD,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC,SAAS,KAAK,IAAI,CAAC,CAAA;IAC5E,MAAM,YAAY,GAAG,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;IACxF,OAAO;QACH,YAAY;QACZ,KAAK;QACL,QAAQ,EAAE,iBAAiB,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,CAAC;QAC1D,WAAW,EAAE,iBAAiB,CAAC,UAAU,EAAE,cAAc,EAAE,SAAS,CAAC;KACxE,CAAA;AACL,CAAC;AAED,SAAS,iBAAiB,CAAC,UAAmC,EAAE,QAAgB,EAAE,QAA2B;IACzG,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAC5B,UAAU,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAC3B,EAAE,CAAC,sBAAsB,CAAC,SAAS,CAAC;QACpC,EAAE,CAAC,sBAAsB,CAAC,SAAS,CAAC;QACpC,EAAE,CAAC,iBAAiB,CAAC,SAAS,CAAC;QAC3B,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;QACvB,CAAC,CAAC,EAAE,CACX,CACJ,CAAA;IACD,IAAI,IAAI,GAAG,QAAQ,CAAA;IACnB,OAAO,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC;QAAE,IAAI,IAAI,GAAG,CAAA;IACzE,OAAO,IAAI,CAAA;AACf,CAAC;AAED,SAAS,iBAAiB,CAAC,MAAiB,EAAE,KAAa,EAAE,KAAkC;IAC3F,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAA;IAC9B,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU;SAC/B,GAAG,CAAC,CAAC,SAAS,EAAE,cAAc,EAAE,EAAE;QAC/B,MAAM,IAAI,GAAG,aAAa,CAAC,SAAS,CAAC,IAAI,EAAE,cAAc,EAAE,IAAI,CAAC,CAAA;QAChE,MAAM,MAAM,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAA;QAC1C,MAAM,QAAQ,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAA;QAC9C,OAAO,GAAG,MAAM,GAAG,IAAI,GAAG,QAAQ,KAAK,KAAK,CAAC,GAAG,CAAC,IAAI,KAAK,IAAI,cAAc,EAAE,CAAE,EAAE,CAAA;IACtF,CAAC,CAAC;SACD,IAAI,CAAC,IAAI,CAAC,CAAA;IACf,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,KAAK,QAAQ,CAAE,CAAA;IACrF,OAAO,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,UAAU,cAAc,MAAM,GAAG,CAAA;AAClF,CAAC;AAED,SAAS,aAAa,CAAC,QAAgB,EAAE,KAAa,EAAE,IAAiB;IACrE,IAAI,IAAI,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,KAAK,EAAE,CAAA;IAC5D,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;QAAE,IAAI,IAAI,GAAG,CAAA;IAClC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;IACd,OAAO,IAAI,CAAA;AACf,CAAC;AAED,SAAS,YAAY,CAAC,IAAY;IAC9B,MAAM,OAAO,GAAG,EAAE,CAAC,aAAa,CAAC,EAAE,CAAC,YAAY,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC,eAAe,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAA;IAClG,OAAO,OAAO,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,UAAU,CAAC,UAAU,IAAI,OAAO,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,UAAU,CAAC,cAAc,CAAA;AACzG,CAAC;AAED,OAAO,EAAE,aAAa,EAAE,CAAA"}
@@ -0,0 +1,5 @@
1
+ import type { SocketContract } from "../../wire/contract.js";
2
+ import type { PublicActorContract } from "../../wire/public-contract.js";
3
+ declare function generateClient(input: readonly SocketContract[] | PublicActorContract, directory: string): Promise<void>;
4
+ export { generateClient };
5
+ //# sourceMappingURL=client-generator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client-generator.d.ts","sourceRoot":"","sources":["../../../src/compiler/generators/client-generator.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AAC5D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAA;AAIxE,iBAAe,cAAc,CACzB,KAAK,EAAE,SAAS,cAAc,EAAE,GAAG,mBAAmB,EACtD,SAAS,EAAE,MAAM,GAClB,OAAO,CAAC,IAAI,CAAC,CAqBf;AAED,OAAO,EAAE,cAAc,EAAE,CAAA"}
@@ -0,0 +1,28 @@
1
+ import { mkdir, rm, writeFile } from "node:fs/promises";
2
+ import path from "node:path";
3
+ import { generateTypeScript } from "./typescript-generator.js";
4
+ async function generateClient(input, directory) {
5
+ const artifacts = await generateTypeScript(input);
6
+ const contracts = "actors" in input ? input.actors.map(actor => actor.socket) : input;
7
+ await mkdir(directory, { recursive: true });
8
+ for (const [file, contents] of artifacts)
9
+ await writeFile(path.join(directory, file), contents);
10
+ for (const file of ["frontend.ts", "backend.ts", "proxy.ts", "socket.ts", "rpc.ts"])
11
+ await rm(path.join(directory, file), { force: true });
12
+ for (const { actorName } of contracts)
13
+ for (const suffix of [
14
+ "actor.ts",
15
+ "frontend.ts",
16
+ "backend.ts",
17
+ "proxy.ts",
18
+ "socket.ts",
19
+ "rpc.ts",
20
+ "validators.js",
21
+ "validators.d.ts",
22
+ "proxy-validators.js",
23
+ "proxy-validators.d.ts"
24
+ ])
25
+ await rm(path.join(directory, `${actorName}.${suffix}`), { force: true });
26
+ }
27
+ export { generateClient };
28
+ //# sourceMappingURL=client-generator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client-generator.js","sourceRoot":"","sources":["../../../src/compiler/generators/client-generator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AACvD,OAAO,IAAI,MAAM,WAAW,CAAA;AAK5B,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAA;AAE9D,KAAK,UAAU,cAAc,CACzB,KAAsD,EACtD,SAAiB;IAEjB,MAAM,SAAS,GAAG,MAAM,kBAAkB,CAAC,KAAK,CAAC,CAAA;IACjD,MAAM,SAAS,GAAG,QAAQ,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAA;IACrF,MAAM,KAAK,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IAC3C,KAAK,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,SAAS;QAAE,MAAM,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,EAAE,QAAQ,CAAC,CAAA;IAC/F,KAAK,MAAM,IAAI,IAAI,CAAC,aAAa,EAAE,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,QAAQ,CAAC;QAC/E,MAAM,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAA;IACzD,KAAK,MAAM,EAAE,SAAS,EAAE,IAAI,SAAS;QACjC,KAAK,MAAM,MAAM,IAAI;YACjB,UAAU;YACV,aAAa;YACb,YAAY;YACZ,UAAU;YACV,WAAW;YACX,QAAQ;YACR,eAAe;YACf,iBAAiB;YACjB,qBAAqB;YACrB,uBAAuB;SAC1B;YACG,MAAM,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,SAAS,IAAI,MAAM,EAAE,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAA;AACrF,CAAC;AAED,OAAO,EAAE,cAAc,EAAE,CAAA"}
@@ -0,0 +1,8 @@
1
+ import type { SocketContract } from "../../wire/contract.js";
2
+ import type { PublicActorContract } from "../../wire/public-contract.js";
3
+ /** Returns generated filenames and TypeScript source without writing files or executing actor code. */
4
+ declare function generateTypeScript(input: readonly SocketContract[] | PublicActorContract): Promise<ReadonlyMap<string, string>>;
5
+ export { generateTypeScript };
6
+ export type { SocketContract };
7
+ export type { PublicActorContract };
8
+ //# sourceMappingURL=typescript-generator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"typescript-generator.d.ts","sourceRoot":"","sources":["../../../src/compiler/generators/typescript-generator.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AAC5D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAA;AAMxE,uGAAuG;AACvG,iBAAe,kBAAkB,CAC7B,KAAK,EAAE,SAAS,cAAc,EAAE,GAAG,mBAAmB,GACvD,OAAO,CAAC,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAmCtC;AA6ID,OAAO,EAAE,kBAAkB,EAAE,CAAA;AAC7B,YAAY,EAAE,cAAc,EAAE,CAAA;AAC9B,YAAY,EAAE,mBAAmB,EAAE,CAAA"}
@@ -0,0 +1,154 @@
1
+ import { compile } from "json-schema-to-typescript";
2
+ import { format } from "prettier";
3
+ import ts from "typescript";
4
+ import { parsePublicContract } from "../validate-public-contract.js";
5
+ import { backendSource } from "./backend-generator.js";
6
+ import { usageComment } from "./usage-comment.js";
7
+ /** Returns generated filenames and TypeScript source without writing files or executing actor code. */
8
+ async function generateTypeScript(input) {
9
+ const document = "actors" in input ? input : undefined;
10
+ if (document && document.version !== 1)
11
+ throw new Error(`unsupported public actor contract version ${document.version}`);
12
+ if (document)
13
+ parsePublicContract(document);
14
+ const contracts = "actors" in input ? input.actors.map(actor => actor.socket) : input;
15
+ const declarations = [];
16
+ const wireNames = new Map();
17
+ for (const contract of contracts) {
18
+ if (!/^[A-Za-z_$][\w$]*$/u.test(contract.actorName))
19
+ throw new Error(`actor name ${contract.actorName} cannot be emitted as a TypeScript identifier`);
20
+ const wire = await wireDeclarations(contract);
21
+ wireNames.set(contract.actorName, [...wire.names, "Authorization"]);
22
+ declarations.push(actorDeclarations(contract, wire.code));
23
+ }
24
+ const exampleActor = contracts[0]?.actorName;
25
+ const source = `// Generated by durable-actors; regenerate instead of editing.
26
+ ${usageComment("Use this file to call actors and prepare WebSocket access from your backend.", 'import { actors, ActorProxy, type ActorAuthorization } from "./generated/index.js"')}
27
+ import { createActorStub as $createActorStub, SocketProxy as $SocketProxy } from "durable-actors/generated"
28
+
29
+ ${usageComment("Types for actor state and socket messages.", exampleActor && `type State = actors.${exampleActor}.State`)}
30
+ export declare namespace actors {
31
+ ${declarations.join("\n")}
32
+ }
33
+
34
+ ${await backendSource(document?.actors ?? [], contracts, wireNames)}
35
+ ${proxySource(contracts)}`;
36
+ const formatted = await format(source, {
37
+ parser: "typescript",
38
+ tabWidth: 4,
39
+ printWidth: 120,
40
+ semi: false,
41
+ trailingComma: "none"
42
+ });
43
+ return new Map([["index.ts", formatted]]);
44
+ }
45
+ function actorDeclarations(contract, declarations) {
46
+ return `export namespace ${contract.actorName} {
47
+ ${declarations}
48
+ export interface Authorization {
49
+ actorName: ${JSON.stringify(contract.actorName)}
50
+ actorId: string
51
+ metadata: Metadata
52
+ clientLocation?: { latitude: number; longitude: number }
53
+ authorizationLifetimeMs?: number
54
+ }
55
+ }`;
56
+ }
57
+ async function wireDeclarations(contract) {
58
+ const kinds = ["Metadata", "Incoming", "Outgoing", "State"];
59
+ const properties = Object.fromEntries(kinds.map(kind => [
60
+ kind.toLowerCase(),
61
+ typeof contract.schema.definitions?.[kind] === "boolean"
62
+ ? contract.schema.definitions[kind]
63
+ : { $ref: `#/definitions/${kind}` }
64
+ ]));
65
+ const code = await compile(inlineAnonymousReferences({
66
+ ...contract.schema,
67
+ type: "object",
68
+ additionalProperties: false,
69
+ properties,
70
+ required: Object.keys(properties)
71
+ }, contract.schema.definitions ?? {}), "ActorTypes", {
72
+ $refOptions: { resolve: { file: false, http: false } },
73
+ bannerComment: "",
74
+ unknownAny: true,
75
+ additionalProperties: false,
76
+ customName: (schema, key) => {
77
+ const name = schema.title || schema.$id || key;
78
+ return (schema.title && kinds.includes(name)) ||
79
+ ["Connection", "Authorization", "Methods", "Parameters", "ReturnType", "Awaited"].includes(name)
80
+ ? `${name}Data`
81
+ : undefined;
82
+ }
83
+ });
84
+ const source = ts.createSourceFile("types.ts", code, ts.ScriptTarget.Latest, true);
85
+ const root = source.statements.find(statement => ts.isInterfaceDeclaration(statement) && statement.name.text === "ActorTypes");
86
+ const declarations = source.statements.filter(statement => statement !== root);
87
+ const named = new Map(declarations
88
+ .filter((statement) => ts.isInterfaceDeclaration(statement) || ts.isTypeAliasDeclaration(statement))
89
+ .map(statement => [statement.name.text, statement]));
90
+ const main = kinds.map(kind => {
91
+ const declaration = named.get(kind);
92
+ if (declaration)
93
+ return declaration.getText(source);
94
+ const property = root.members.find(member => ts.isPropertySignature(member) && member.name.getText(source) === kind.toLowerCase());
95
+ return `export type ${kind} = ${property.type.getText(source)}`;
96
+ });
97
+ const helpers = declarations.filter(statement => !kinds.some(kind => named.get(kind) === statement));
98
+ return {
99
+ code: [...main, ...helpers.map(statement => statement.getText(source))].join("\n\n") + "\n",
100
+ names: [...new Set([...kinds, ...named.keys()])]
101
+ };
102
+ }
103
+ function inlineAnonymousReferences(value, definitions, visiting = new Set()) {
104
+ if (Array.isArray(value))
105
+ return value.map(item => inlineAnonymousReferences(item, definitions, visiting));
106
+ if (!value || typeof value !== "object")
107
+ return value;
108
+ const node = value;
109
+ const key = typeof node.$ref === "string" && node.$ref.startsWith("#/definitions/")
110
+ ? decodeURIComponent(node.$ref.slice("#/definitions/".length)).replaceAll("~1", "/").replaceAll("~0", "~")
111
+ : undefined;
112
+ const definition = key === undefined ? undefined : definitions[key];
113
+ if (key !== undefined &&
114
+ definition &&
115
+ typeof definition === "object" &&
116
+ !definition.title &&
117
+ !visiting.has(key) &&
118
+ (/^(Type\d+|Field_.*)$/.test(key) ||
119
+ (typeof definition.type === "string" &&
120
+ ["string", "number", "integer", "boolean", "null"].includes(definition.type)))) {
121
+ const { $ref, ...rest } = node;
122
+ return inlineAnonymousReferences({ ...definition, ...rest }, definitions, new Set([...visiting, key]));
123
+ }
124
+ return Object.fromEntries(Object.entries(node).map(([key, child]) => [key, inlineAnonymousReferences(child, definitions, visiting)]));
125
+ }
126
+ function proxySource(contracts) {
127
+ const actors = contracts
128
+ .map(({ actorName }) => `[${JSON.stringify(actorName)}]: {} as import("durable-actors/proxy").ProxyActor<actors.${actorName}.Metadata>`)
129
+ .join(", ");
130
+ const authorization = contracts.map(({ actorName }) => `actors.${actorName}.Authorization`).join(" | ") || "never";
131
+ const exampleActor = contracts[0]?.actorName;
132
+ return `${usageComment("The actor and connection details approved by your backend.", exampleActor && `const authorization: ActorAuthorization = { actorName: ${JSON.stringify(exampleActor)}, actorId: "actor-id", metadata }`)}
133
+ export type ActorAuthorization = ${authorization}
134
+
135
+ ${usageComment("Allow a frontend connection after your backend checks the user's access.", exampleActor && `const grant = await ActorProxy.handle({ actorName: ${JSON.stringify(exampleActor)}, actorId: "actor-id", metadata })`)}
136
+ export class ActorProxy extends $SocketProxy<{
137
+ ${contracts.map(({ actorName }) => `[${JSON.stringify(actorName)}]: import("durable-actors/proxy").ProxyActor<actors.${actorName}.Metadata>`).join("\n")}
138
+ }> {
139
+ constructor(options: import("durable-actors/proxy").SocketProxyOptions = {}, dependencies: import("durable-actors/proxy").SocketProxyDependencies = {}) {
140
+ super({ ${actors} }, options, dependencies)
141
+ }
142
+
143
+ handle(authorization: ActorAuthorization): Promise<import("durable-actors/proxy").SocketGrant> {
144
+ return super.handle(authorization)
145
+ }
146
+
147
+ static handle(authorization: ActorAuthorization, options: import("durable-actors/proxy").SocketProxyOptions = {}): Promise<import("durable-actors/proxy").SocketGrant> {
148
+ return new ActorProxy(options).handle(authorization)
149
+ }
150
+ }
151
+ `;
152
+ }
153
+ export { generateTypeScript };
154
+ //# sourceMappingURL=typescript-generator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"typescript-generator.js","sourceRoot":"","sources":["../../../src/compiler/generators/typescript-generator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ declare function usageComment(description: string, example?: string): string;
2
+ export { usageComment };
3
+ //# sourceMappingURL=usage-comment.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"usage-comment.d.ts","sourceRoot":"","sources":["../../../src/compiler/generators/usage-comment.ts"],"names":[],"mappings":"AAAA,iBAAS,YAAY,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAGnE;AAED,OAAO,EAAE,YAAY,EAAE,CAAA"}
@@ -0,0 +1,6 @@
1
+ function usageComment(description, example) {
2
+ const lines = [description, ...(example ? ["@example", ...example.split("\n")] : [])];
3
+ return `/**\n${lines.map(line => ` * ${line.replaceAll("*/", "*\\/")}`).join("\n")}\n */`;
4
+ }
5
+ export { usageComment };
6
+ //# sourceMappingURL=usage-comment.js.map