workerstack 0.1.0-beta.0

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 (605) hide show
  1. package/CHANGELOG.md +13 -0
  2. package/LICENSE +21 -0
  3. package/README.md +138 -0
  4. package/dist/access.d.ts +131 -0
  5. package/dist/access.d.ts.map +1 -0
  6. package/dist/access.js +333 -0
  7. package/dist/access.js.map +1 -0
  8. package/dist/api/builder.d.ts +457 -0
  9. package/dist/api/builder.d.ts.map +1 -0
  10. package/dist/api/builder.js +45 -0
  11. package/dist/api/builder.js.map +1 -0
  12. package/dist/api/catalog.d.ts +8 -0
  13. package/dist/api/catalog.d.ts.map +1 -0
  14. package/dist/api/catalog.js +56 -0
  15. package/dist/api/catalog.js.map +1 -0
  16. package/dist/api/context.d.ts +47 -0
  17. package/dist/api/context.d.ts.map +1 -0
  18. package/dist/api/context.js +40 -0
  19. package/dist/api/context.js.map +1 -0
  20. package/dist/api/crud-router.d.ts +476 -0
  21. package/dist/api/crud-router.d.ts.map +1 -0
  22. package/dist/api/crud-router.js +354 -0
  23. package/dist/api/crud-router.js.map +1 -0
  24. package/dist/api/list-input-schema.d.ts +37 -0
  25. package/dist/api/list-input-schema.d.ts.map +1 -0
  26. package/dist/api/list-input-schema.js +63 -0
  27. package/dist/api/list-input-schema.js.map +1 -0
  28. package/dist/api/list-spec.d.ts +44 -0
  29. package/dist/api/list-spec.d.ts.map +1 -0
  30. package/dist/api/list-spec.js +49 -0
  31. package/dist/api/list-spec.js.map +1 -0
  32. package/dist/api/live-view.d.ts +14 -0
  33. package/dist/api/live-view.d.ts.map +1 -0
  34. package/dist/api/live-view.js +42 -0
  35. package/dist/api/live-view.js.map +1 -0
  36. package/dist/api/live-window.d.ts +40 -0
  37. package/dist/api/live-window.d.ts.map +1 -0
  38. package/dist/api/live-window.js +93 -0
  39. package/dist/api/live-window.js.map +1 -0
  40. package/dist/api/openapi.d.ts +6 -0
  41. package/dist/api/openapi.d.ts.map +1 -0
  42. package/dist/api/openapi.js +146 -0
  43. package/dist/api/openapi.js.map +1 -0
  44. package/dist/api/realtime-router.d.ts +94 -0
  45. package/dist/api/realtime-router.d.ts.map +1 -0
  46. package/dist/api/realtime-router.js +45 -0
  47. package/dist/api/realtime-router.js.map +1 -0
  48. package/dist/api/registry.d.ts +30 -0
  49. package/dist/api/registry.d.ts.map +1 -0
  50. package/dist/api/registry.js +236 -0
  51. package/dist/api/registry.js.map +1 -0
  52. package/dist/api/router.d.ts +15 -0
  53. package/dist/api/router.d.ts.map +1 -0
  54. package/dist/api/router.js +32 -0
  55. package/dist/api/router.js.map +1 -0
  56. package/dist/api/storage-router.d.ts +349 -0
  57. package/dist/api/storage-router.d.ts.map +1 -0
  58. package/dist/api/storage-router.js +155 -0
  59. package/dist/api/storage-router.js.map +1 -0
  60. package/dist/api/types.d.ts +55 -0
  61. package/dist/api/types.d.ts.map +1 -0
  62. package/dist/api/types.js +2 -0
  63. package/dist/api/types.js.map +1 -0
  64. package/dist/auth-password.d.ts +27 -0
  65. package/dist/auth-password.d.ts.map +1 -0
  66. package/dist/auth-password.js +60 -0
  67. package/dist/auth-password.js.map +1 -0
  68. package/dist/auth.d.ts +59 -0
  69. package/dist/auth.d.ts.map +1 -0
  70. package/dist/auth.js +146 -0
  71. package/dist/auth.js.map +1 -0
  72. package/dist/backend-internals.d.ts +35 -0
  73. package/dist/backend-internals.d.ts.map +1 -0
  74. package/dist/backend-internals.js +2 -0
  75. package/dist/backend-internals.js.map +1 -0
  76. package/dist/backend.d.ts +63 -0
  77. package/dist/backend.d.ts.map +1 -0
  78. package/dist/backend.js +59 -0
  79. package/dist/backend.js.map +1 -0
  80. package/dist/blueprint-generator.d.ts +21 -0
  81. package/dist/blueprint-generator.d.ts.map +1 -0
  82. package/dist/blueprint-generator.js +199 -0
  83. package/dist/blueprint-generator.js.map +1 -0
  84. package/dist/blueprint.d.ts +99 -0
  85. package/dist/blueprint.d.ts.map +1 -0
  86. package/dist/blueprint.js +257 -0
  87. package/dist/blueprint.js.map +1 -0
  88. package/dist/cli-skills.d.ts +16 -0
  89. package/dist/cli-skills.d.ts.map +1 -0
  90. package/dist/cli-skills.js +108 -0
  91. package/dist/cli-skills.js.map +1 -0
  92. package/dist/cli.d.ts +18 -0
  93. package/dist/cli.d.ts.map +1 -0
  94. package/dist/cli.js +205 -0
  95. package/dist/cli.js.map +1 -0
  96. package/dist/client/client.d.ts +53 -0
  97. package/dist/client/client.d.ts.map +1 -0
  98. package/dist/client/client.js +111 -0
  99. package/dist/client/client.js.map +1 -0
  100. package/dist/client/index.d.ts +4 -0
  101. package/dist/client/index.d.ts.map +1 -0
  102. package/dist/client/index.js +4 -0
  103. package/dist/client/index.js.map +1 -0
  104. package/dist/client/live-view.d.ts +49 -0
  105. package/dist/client/live-view.d.ts.map +1 -0
  106. package/dist/client/live-view.js +184 -0
  107. package/dist/client/live-view.js.map +1 -0
  108. package/dist/client/react.d.ts +4 -0
  109. package/dist/client/react.d.ts.map +1 -0
  110. package/dist/client/react.js +6 -0
  111. package/dist/client/react.js.map +1 -0
  112. package/dist/client/realtime.d.ts +54 -0
  113. package/dist/client/realtime.d.ts.map +1 -0
  114. package/dist/client/realtime.js +105 -0
  115. package/dist/client/realtime.js.map +1 -0
  116. package/dist/client/rest.d.ts +2 -0
  117. package/dist/client/rest.d.ts.map +1 -0
  118. package/dist/client/rest.js +2 -0
  119. package/dist/client/rest.js.map +1 -0
  120. package/dist/client/rpc-client.d.ts +38 -0
  121. package/dist/client/rpc-client.d.ts.map +1 -0
  122. package/dist/client/rpc-client.js +59 -0
  123. package/dist/client/rpc-client.js.map +1 -0
  124. package/dist/client/solid.d.ts +7 -0
  125. package/dist/client/solid.d.ts.map +1 -0
  126. package/dist/client/solid.js +21 -0
  127. package/dist/client/solid.js.map +1 -0
  128. package/dist/client/svelte.d.ts +6 -0
  129. package/dist/client/svelte.d.ts.map +1 -0
  130. package/dist/client/svelte.js +9 -0
  131. package/dist/client/svelte.js.map +1 -0
  132. package/dist/client/vue.d.ts +5 -0
  133. package/dist/client/vue.d.ts.map +1 -0
  134. package/dist/client/vue.js +11 -0
  135. package/dist/client/vue.js.map +1 -0
  136. package/dist/codegen.d.ts +36 -0
  137. package/dist/codegen.d.ts.map +1 -0
  138. package/dist/codegen.js +235 -0
  139. package/dist/codegen.js.map +1 -0
  140. package/dist/config.d.ts +129 -0
  141. package/dist/config.d.ts.map +1 -0
  142. package/dist/config.js +75 -0
  143. package/dist/config.js.map +1 -0
  144. package/dist/cron.d.ts +4 -0
  145. package/dist/cron.d.ts.map +1 -0
  146. package/dist/cron.js +3 -0
  147. package/dist/cron.js.map +1 -0
  148. package/dist/crud-operations.d.ts +43 -0
  149. package/dist/crud-operations.d.ts.map +1 -0
  150. package/dist/crud-operations.js +249 -0
  151. package/dist/crud-operations.js.map +1 -0
  152. package/dist/database/adapter.d.ts +26 -0
  153. package/dist/database/adapter.d.ts.map +1 -0
  154. package/dist/database/adapter.js +2 -0
  155. package/dist/database/adapter.js.map +1 -0
  156. package/dist/database/libsql.d.ts +3 -0
  157. package/dist/database/libsql.d.ts.map +1 -0
  158. package/dist/database/libsql.js +39 -0
  159. package/dist/database/libsql.js.map +1 -0
  160. package/dist/db.d.ts +15 -0
  161. package/dist/db.d.ts.map +1 -0
  162. package/dist/db.js +8 -0
  163. package/dist/db.js.map +1 -0
  164. package/dist/dev/binaries.d.ts +22 -0
  165. package/dist/dev/binaries.d.ts.map +1 -0
  166. package/dist/dev/binaries.js +119 -0
  167. package/dist/dev/binaries.js.map +1 -0
  168. package/dist/dev/env.d.ts +11 -0
  169. package/dist/dev/env.d.ts.map +1 -0
  170. package/dist/dev/env.js +71 -0
  171. package/dist/dev/env.js.map +1 -0
  172. package/dist/dev/index.d.ts +39 -0
  173. package/dist/dev/index.d.ts.map +1 -0
  174. package/dist/dev/index.js +273 -0
  175. package/dist/dev/index.js.map +1 -0
  176. package/dist/dev/processes.d.ts +37 -0
  177. package/dist/dev/processes.d.ts.map +1 -0
  178. package/dist/dev/processes.js +104 -0
  179. package/dist/dev/processes.js.map +1 -0
  180. package/dist/dev/push.d.ts +2 -0
  181. package/dist/dev/push.d.ts.map +1 -0
  182. package/dist/dev/push.js +30 -0
  183. package/dist/dev/push.js.map +1 -0
  184. package/dist/dialect.d.ts +17 -0
  185. package/dist/dialect.d.ts.map +1 -0
  186. package/dist/dialect.js +12 -0
  187. package/dist/dialect.js.map +1 -0
  188. package/dist/email/smtp.d.ts +20 -0
  189. package/dist/email/smtp.d.ts.map +1 -0
  190. package/dist/email/smtp.js +31 -0
  191. package/dist/email/smtp.js.map +1 -0
  192. package/dist/email.d.ts +26 -0
  193. package/dist/email.d.ts.map +1 -0
  194. package/dist/email.js +2 -0
  195. package/dist/email.js.map +1 -0
  196. package/dist/env-probe.d.ts +9 -0
  197. package/dist/env-probe.d.ts.map +1 -0
  198. package/dist/env-probe.js +72 -0
  199. package/dist/env-probe.js.map +1 -0
  200. package/dist/env.d.ts +62 -0
  201. package/dist/env.d.ts.map +1 -0
  202. package/dist/env.js +86 -0
  203. package/dist/env.js.map +1 -0
  204. package/dist/errors.d.ts +153 -0
  205. package/dist/errors.d.ts.map +1 -0
  206. package/dist/errors.js +106 -0
  207. package/dist/errors.js.map +1 -0
  208. package/dist/handler.d.ts +11 -0
  209. package/dist/handler.d.ts.map +1 -0
  210. package/dist/handler.js +21 -0
  211. package/dist/handler.js.map +1 -0
  212. package/dist/hosted-contract.d.ts +11 -0
  213. package/dist/hosted-contract.d.ts.map +1 -0
  214. package/dist/hosted-contract.js +50 -0
  215. package/dist/hosted-contract.js.map +1 -0
  216. package/dist/idempotency.d.ts +17 -0
  217. package/dist/idempotency.d.ts.map +1 -0
  218. package/dist/idempotency.js +65 -0
  219. package/dist/idempotency.js.map +1 -0
  220. package/dist/index.d.ts +41 -0
  221. package/dist/index.d.ts.map +1 -0
  222. package/dist/index.js +18 -0
  223. package/dist/index.js.map +1 -0
  224. package/dist/inspect.d.ts +15 -0
  225. package/dist/inspect.d.ts.map +1 -0
  226. package/dist/inspect.js +44 -0
  227. package/dist/inspect.js.map +1 -0
  228. package/dist/internal-tables.d.ts +1767 -0
  229. package/dist/internal-tables.d.ts.map +1 -0
  230. package/dist/internal-tables.js +114 -0
  231. package/dist/internal-tables.js.map +1 -0
  232. package/dist/jobs/cron.d.ts +15 -0
  233. package/dist/jobs/cron.d.ts.map +1 -0
  234. package/dist/jobs/cron.js +74 -0
  235. package/dist/jobs/cron.js.map +1 -0
  236. package/dist/jobs/define.d.ts +186 -0
  237. package/dist/jobs/define.d.ts.map +1 -0
  238. package/dist/jobs/define.js +99 -0
  239. package/dist/jobs/define.js.map +1 -0
  240. package/dist/jobs/index.d.ts +9 -0
  241. package/dist/jobs/index.d.ts.map +1 -0
  242. package/dist/jobs/index.js +7 -0
  243. package/dist/jobs/index.js.map +1 -0
  244. package/dist/jobs/queue.d.ts +13 -0
  245. package/dist/jobs/queue.d.ts.map +1 -0
  246. package/dist/jobs/queue.js +71 -0
  247. package/dist/jobs/queue.js.map +1 -0
  248. package/dist/jobs/slots.d.ts +30 -0
  249. package/dist/jobs/slots.d.ts.map +1 -0
  250. package/dist/jobs/slots.js +53 -0
  251. package/dist/jobs/slots.js.map +1 -0
  252. package/dist/jobs/worker.d.ts +45 -0
  253. package/dist/jobs/worker.d.ts.map +1 -0
  254. package/dist/jobs/worker.js +605 -0
  255. package/dist/jobs/worker.js.map +1 -0
  256. package/dist/lifecycle.d.ts +10 -0
  257. package/dist/lifecycle.d.ts.map +1 -0
  258. package/dist/lifecycle.js +37 -0
  259. package/dist/lifecycle.js.map +1 -0
  260. package/dist/list-query.d.ts +62 -0
  261. package/dist/list-query.d.ts.map +1 -0
  262. package/dist/list-query.js +190 -0
  263. package/dist/list-query.js.map +1 -0
  264. package/dist/live/apply.d.ts +13 -0
  265. package/dist/live/apply.d.ts.map +1 -0
  266. package/dist/live/apply.js +32 -0
  267. package/dist/live/apply.js.map +1 -0
  268. package/dist/live/index.d.ts +48 -0
  269. package/dist/live/index.d.ts.map +1 -0
  270. package/dist/live/index.js +108 -0
  271. package/dist/live/index.js.map +1 -0
  272. package/dist/live/protocol.d.ts +47 -0
  273. package/dist/live/protocol.d.ts.map +1 -0
  274. package/dist/live/protocol.js +12 -0
  275. package/dist/live/protocol.js.map +1 -0
  276. package/dist/live/sse.d.ts +22 -0
  277. package/dist/live/sse.d.ts.map +1 -0
  278. package/dist/live/sse.js +41 -0
  279. package/dist/live/sse.js.map +1 -0
  280. package/dist/logging.d.ts +8 -0
  281. package/dist/logging.d.ts.map +1 -0
  282. package/dist/logging.js +6 -0
  283. package/dist/logging.js.map +1 -0
  284. package/dist/manifest-diff.d.ts +6 -0
  285. package/dist/manifest-diff.d.ts.map +1 -0
  286. package/dist/manifest-diff.js +42 -0
  287. package/dist/manifest-diff.js.map +1 -0
  288. package/dist/manifest.d.ts +87 -0
  289. package/dist/manifest.d.ts.map +1 -0
  290. package/dist/manifest.js +237 -0
  291. package/dist/manifest.js.map +1 -0
  292. package/dist/messaging/email.d.ts +16 -0
  293. package/dist/messaging/email.d.ts.map +1 -0
  294. package/dist/messaging/email.js +8 -0
  295. package/dist/messaging/email.js.map +1 -0
  296. package/dist/messaging/index.d.ts +8 -0
  297. package/dist/messaging/index.d.ts.map +1 -0
  298. package/dist/messaging/index.js +4 -0
  299. package/dist/messaging/index.js.map +1 -0
  300. package/dist/messaging/journal.d.ts +4 -0
  301. package/dist/messaging/journal.d.ts.map +1 -0
  302. package/dist/messaging/journal.js +19 -0
  303. package/dist/messaging/journal.js.map +1 -0
  304. package/dist/messaging/runtime.d.ts +16 -0
  305. package/dist/messaging/runtime.d.ts.map +1 -0
  306. package/dist/messaging/runtime.js +213 -0
  307. package/dist/messaging/runtime.js.map +1 -0
  308. package/dist/messaging/standalone.d.ts +27 -0
  309. package/dist/messaging/standalone.d.ts.map +1 -0
  310. package/dist/messaging/standalone.js +18 -0
  311. package/dist/messaging/standalone.js.map +1 -0
  312. package/dist/messaging/telegram.d.ts +16 -0
  313. package/dist/messaging/telegram.d.ts.map +1 -0
  314. package/dist/messaging/telegram.js +5 -0
  315. package/dist/messaging/telegram.js.map +1 -0
  316. package/dist/messaging/types.d.ts +22 -0
  317. package/dist/messaging/types.d.ts.map +1 -0
  318. package/dist/messaging/types.js +17 -0
  319. package/dist/messaging/types.js.map +1 -0
  320. package/dist/platform.d.ts +25 -0
  321. package/dist/platform.d.ts.map +1 -0
  322. package/dist/platform.js +24 -0
  323. package/dist/platform.js.map +1 -0
  324. package/dist/provision-internals.d.ts +23 -0
  325. package/dist/provision-internals.d.ts.map +1 -0
  326. package/dist/provision-internals.js +7 -0
  327. package/dist/provision-internals.js.map +1 -0
  328. package/dist/provision-runtime.d.ts +6 -0
  329. package/dist/provision-runtime.d.ts.map +1 -0
  330. package/dist/provision-runtime.js +41 -0
  331. package/dist/provision-runtime.js.map +1 -0
  332. package/dist/provision-schema.d.ts +16 -0
  333. package/dist/provision-schema.d.ts.map +1 -0
  334. package/dist/provision-schema.js +59 -0
  335. package/dist/provision-schema.js.map +1 -0
  336. package/dist/provision.d.ts +8 -0
  337. package/dist/provision.d.ts.map +1 -0
  338. package/dist/provision.js +16 -0
  339. package/dist/provision.js.map +1 -0
  340. package/dist/query/api.d.ts +10 -0
  341. package/dist/query/api.d.ts.map +1 -0
  342. package/dist/query/api.js +7 -0
  343. package/dist/query/api.js.map +1 -0
  344. package/dist/query/client.d.ts +28 -0
  345. package/dist/query/client.d.ts.map +1 -0
  346. package/dist/query/client.js +87 -0
  347. package/dist/query/client.js.map +1 -0
  348. package/dist/query/fetch.d.ts +3 -0
  349. package/dist/query/fetch.d.ts.map +1 -0
  350. package/dist/query/fetch.js +4 -0
  351. package/dist/query/fetch.js.map +1 -0
  352. package/dist/query/index.d.ts +8 -0
  353. package/dist/query/index.d.ts.map +1 -0
  354. package/dist/query/index.js +4 -0
  355. package/dist/query/index.js.map +1 -0
  356. package/dist/query/infer.d.ts +25 -0
  357. package/dist/query/infer.d.ts.map +1 -0
  358. package/dist/query/infer.js +2 -0
  359. package/dist/query/infer.js.map +1 -0
  360. package/dist/query/react.d.ts +3 -0
  361. package/dist/query/react.d.ts.map +1 -0
  362. package/dist/query/react.js +2 -0
  363. package/dist/query/react.js.map +1 -0
  364. package/dist/query/realtime-flush.d.ts +26 -0
  365. package/dist/query/realtime-flush.d.ts.map +1 -0
  366. package/dist/query/realtime-flush.js +45 -0
  367. package/dist/query/realtime-flush.js.map +1 -0
  368. package/dist/query/realtime-stream.d.ts +3 -0
  369. package/dist/query/realtime-stream.d.ts.map +1 -0
  370. package/dist/query/realtime-stream.js +3 -0
  371. package/dist/query/realtime-stream.js.map +1 -0
  372. package/dist/query/realtime.d.ts +88 -0
  373. package/dist/query/realtime.d.ts.map +1 -0
  374. package/dist/query/realtime.js +255 -0
  375. package/dist/query/realtime.js.map +1 -0
  376. package/dist/rate-limit.d.ts +8 -0
  377. package/dist/rate-limit.d.ts.map +1 -0
  378. package/dist/rate-limit.js +46 -0
  379. package/dist/rate-limit.js.map +1 -0
  380. package/dist/readiness-probes.d.ts +4 -0
  381. package/dist/readiness-probes.d.ts.map +1 -0
  382. package/dist/readiness-probes.js +23 -0
  383. package/dist/readiness-probes.js.map +1 -0
  384. package/dist/readiness.d.ts +39 -0
  385. package/dist/readiness.d.ts.map +1 -0
  386. package/dist/readiness.js +72 -0
  387. package/dist/readiness.js.map +1 -0
  388. package/dist/realtime/facade.d.ts +20 -0
  389. package/dist/realtime/facade.d.ts.map +1 -0
  390. package/dist/realtime/facade.js +37 -0
  391. package/dist/realtime/facade.js.map +1 -0
  392. package/dist/realtime/filter.d.ts +42 -0
  393. package/dist/realtime/filter.d.ts.map +1 -0
  394. package/dist/realtime/filter.js +86 -0
  395. package/dist/realtime/filter.js.map +1 -0
  396. package/dist/realtime/heartbeat.d.ts +20 -0
  397. package/dist/realtime/heartbeat.d.ts.map +1 -0
  398. package/dist/realtime/heartbeat.js +64 -0
  399. package/dist/realtime/heartbeat.js.map +1 -0
  400. package/dist/realtime/publisher.d.ts +19 -0
  401. package/dist/realtime/publisher.d.ts.map +1 -0
  402. package/dist/realtime/publisher.js +8 -0
  403. package/dist/realtime/publisher.js.map +1 -0
  404. package/dist/runtime.d.ts +141 -0
  405. package/dist/runtime.d.ts.map +1 -0
  406. package/dist/runtime.js +463 -0
  407. package/dist/runtime.js.map +1 -0
  408. package/dist/schema-export.d.ts +2 -0
  409. package/dist/schema-export.d.ts.map +1 -0
  410. package/dist/schema-export.js +2 -0
  411. package/dist/schema-export.js.map +1 -0
  412. package/dist/scope.d.ts +4 -0
  413. package/dist/scope.d.ts.map +1 -0
  414. package/dist/scope.js +13 -0
  415. package/dist/scope.js.map +1 -0
  416. package/dist/standard-schema.d.ts +13 -0
  417. package/dist/standard-schema.d.ts.map +1 -0
  418. package/dist/standard-schema.js +34 -0
  419. package/dist/standard-schema.js.map +1 -0
  420. package/dist/start/auth-client.d.ts +11 -0
  421. package/dist/start/auth-client.d.ts.map +1 -0
  422. package/dist/start/auth-client.js +15 -0
  423. package/dist/start/auth-client.js.map +1 -0
  424. package/dist/start/create-start-worker.d.ts +16 -0
  425. package/dist/start/create-start-worker.d.ts.map +1 -0
  426. package/dist/start/create-start-worker.js +24 -0
  427. package/dist/start/create-start-worker.js.map +1 -0
  428. package/dist/start/index.d.ts +66 -0
  429. package/dist/start/index.d.ts.map +1 -0
  430. package/dist/start/index.js +49 -0
  431. package/dist/start/index.js.map +1 -0
  432. package/dist/start/isomorphic-fetch.d.ts +22 -0
  433. package/dist/start/isomorphic-fetch.d.ts.map +1 -0
  434. package/dist/start/isomorphic-fetch.js +49 -0
  435. package/dist/start/isomorphic-fetch.js.map +1 -0
  436. package/dist/start/server-entry.d.ts +7 -0
  437. package/dist/start/server-entry.d.ts.map +1 -0
  438. package/dist/start/server-entry.js +8 -0
  439. package/dist/start/server-entry.js.map +1 -0
  440. package/dist/storage/background.d.ts +3 -0
  441. package/dist/storage/background.d.ts.map +1 -0
  442. package/dist/storage/background.js +3 -0
  443. package/dist/storage/background.js.map +1 -0
  444. package/dist/storage/buckets.d.ts +78 -0
  445. package/dist/storage/buckets.d.ts.map +1 -0
  446. package/dist/storage/buckets.js +177 -0
  447. package/dist/storage/buckets.js.map +1 -0
  448. package/dist/storage/delete.d.ts +8 -0
  449. package/dist/storage/delete.d.ts.map +1 -0
  450. package/dist/storage/delete.js +10 -0
  451. package/dist/storage/delete.js.map +1 -0
  452. package/dist/storage/file-meta.d.ts +37 -0
  453. package/dist/storage/file-meta.d.ts.map +1 -0
  454. package/dist/storage/file-meta.js +166 -0
  455. package/dist/storage/file-meta.js.map +1 -0
  456. package/dist/storage/index.d.ts +28 -0
  457. package/dist/storage/index.d.ts.map +1 -0
  458. package/dist/storage/index.js +5 -0
  459. package/dist/storage/index.js.map +1 -0
  460. package/dist/storage/local.d.ts +15 -0
  461. package/dist/storage/local.d.ts.map +1 -0
  462. package/dist/storage/local.js +56 -0
  463. package/dist/storage/local.js.map +1 -0
  464. package/dist/storage/operations.d.ts +54 -0
  465. package/dist/storage/operations.d.ts.map +1 -0
  466. package/dist/storage/operations.js +212 -0
  467. package/dist/storage/operations.js.map +1 -0
  468. package/dist/storage/registry.d.ts +11 -0
  469. package/dist/storage/registry.d.ts.map +1 -0
  470. package/dist/storage/registry.js +23 -0
  471. package/dist/storage/registry.js.map +1 -0
  472. package/dist/storage/s3.d.ts +35 -0
  473. package/dist/storage/s3.d.ts.map +1 -0
  474. package/dist/storage/s3.js +125 -0
  475. package/dist/storage/s3.js.map +1 -0
  476. package/dist/storage/sigv4.d.ts +24 -0
  477. package/dist/storage/sigv4.d.ts.map +1 -0
  478. package/dist/storage/sigv4.js +107 -0
  479. package/dist/storage/sigv4.js.map +1 -0
  480. package/dist/storage/sweep.d.ts +9 -0
  481. package/dist/storage/sweep.d.ts.map +1 -0
  482. package/dist/storage/sweep.js +17 -0
  483. package/dist/storage/sweep.js.map +1 -0
  484. package/dist/sync/collection.d.ts +106 -0
  485. package/dist/sync/collection.d.ts.map +1 -0
  486. package/dist/sync/collection.js +258 -0
  487. package/dist/sync/collection.js.map +1 -0
  488. package/dist/sync/index.d.ts +8 -0
  489. package/dist/sync/index.d.ts.map +1 -0
  490. package/dist/sync/index.js +4 -0
  491. package/dist/sync/index.js.map +1 -0
  492. package/dist/sync/realtime-sync.d.ts +31 -0
  493. package/dist/sync/realtime-sync.d.ts.map +1 -0
  494. package/dist/sync/realtime-sync.js +46 -0
  495. package/dist/sync/realtime-sync.js.map +1 -0
  496. package/dist/sync/sync-client.d.ts +28 -0
  497. package/dist/sync/sync-client.d.ts.map +1 -0
  498. package/dist/sync/sync-client.js +52 -0
  499. package/dist/sync/sync-client.js.map +1 -0
  500. package/dist/sync/update-queue.d.ts +27 -0
  501. package/dist/sync/update-queue.d.ts.map +1 -0
  502. package/dist/sync/update-queue.js +66 -0
  503. package/dist/sync/update-queue.js.map +1 -0
  504. package/dist/testing/auth.d.ts +85 -0
  505. package/dist/testing/auth.d.ts.map +1 -0
  506. package/dist/testing/auth.js +140 -0
  507. package/dist/testing/auth.js.map +1 -0
  508. package/dist/testing/client.d.ts +6 -0
  509. package/dist/testing/client.d.ts.map +1 -0
  510. package/dist/testing/client.js +9 -0
  511. package/dist/testing/client.js.map +1 -0
  512. package/dist/testing/database.d.ts +6 -0
  513. package/dist/testing/database.d.ts.map +1 -0
  514. package/dist/testing/database.js +8 -0
  515. package/dist/testing/database.js.map +1 -0
  516. package/dist/testing/email.d.ts +15 -0
  517. package/dist/testing/email.d.ts.map +1 -0
  518. package/dist/testing/email.js +32 -0
  519. package/dist/testing/email.js.map +1 -0
  520. package/dist/testing/fixture.d.ts +51 -0
  521. package/dist/testing/fixture.d.ts.map +1 -0
  522. package/dist/testing/fixture.js +177 -0
  523. package/dist/testing/fixture.js.map +1 -0
  524. package/dist/testing/jobs.d.ts +40 -0
  525. package/dist/testing/jobs.d.ts.map +1 -0
  526. package/dist/testing/jobs.js +76 -0
  527. package/dist/testing/jobs.js.map +1 -0
  528. package/dist/testing/logs.d.ts +18 -0
  529. package/dist/testing/logs.d.ts.map +1 -0
  530. package/dist/testing/logs.js +53 -0
  531. package/dist/testing/logs.js.map +1 -0
  532. package/dist/testing/messaging.d.ts +21 -0
  533. package/dist/testing/messaging.d.ts.map +1 -0
  534. package/dist/testing/messaging.js +34 -0
  535. package/dist/testing/messaging.js.map +1 -0
  536. package/dist/testing/storage.d.ts +7 -0
  537. package/dist/testing/storage.d.ts.map +1 -0
  538. package/dist/testing/storage.js +29 -0
  539. package/dist/testing/storage.js.map +1 -0
  540. package/dist/testing/workers-fakes.d.ts +17 -0
  541. package/dist/testing/workers-fakes.d.ts.map +1 -0
  542. package/dist/testing/workers-fakes.js +98 -0
  543. package/dist/testing/workers-fakes.js.map +1 -0
  544. package/dist/testing.d.ts +12 -0
  545. package/dist/testing.d.ts.map +1 -0
  546. package/dist/testing.js +5 -0
  547. package/dist/testing.js.map +1 -0
  548. package/dist/typeid.d.ts +46 -0
  549. package/dist/typeid.d.ts.map +1 -0
  550. package/dist/typeid.js +130 -0
  551. package/dist/typeid.js.map +1 -0
  552. package/dist/vite.d.ts +26 -0
  553. package/dist/vite.d.ts.map +1 -0
  554. package/dist/vite.js +100 -0
  555. package/dist/vite.js.map +1 -0
  556. package/dist/worker-plan.d.ts +37 -0
  557. package/dist/worker-plan.d.ts.map +1 -0
  558. package/dist/worker-plan.js +63 -0
  559. package/dist/worker-plan.js.map +1 -0
  560. package/dist/workers/app.d.ts +19 -0
  561. package/dist/workers/app.d.ts.map +1 -0
  562. package/dist/workers/app.js +56 -0
  563. package/dist/workers/app.js.map +1 -0
  564. package/dist/workers/entry.d.ts +7 -0
  565. package/dist/workers/entry.d.ts.map +1 -0
  566. package/dist/workers/entry.js +8 -0
  567. package/dist/workers/entry.js.map +1 -0
  568. package/dist/workers/index.d.ts +23 -0
  569. package/dist/workers/index.d.ts.map +1 -0
  570. package/dist/workers/index.js +39 -0
  571. package/dist/workers/index.js.map +1 -0
  572. package/dist/workers/r2.d.ts +24 -0
  573. package/dist/workers/r2.d.ts.map +1 -0
  574. package/dist/workers/r2.js +76 -0
  575. package/dist/workers/r2.js.map +1 -0
  576. package/dist/workers/rate-limiter.d.ts +9 -0
  577. package/dist/workers/rate-limiter.d.ts.map +1 -0
  578. package/dist/workers/rate-limiter.js +22 -0
  579. package/dist/workers/rate-limiter.js.map +1 -0
  580. package/dist/workers/realtime-hub.d.ts +20 -0
  581. package/dist/workers/realtime-hub.d.ts.map +1 -0
  582. package/dist/workers/realtime-hub.js +117 -0
  583. package/dist/workers/realtime-hub.js.map +1 -0
  584. package/dist/workers/registry.d.ts +13 -0
  585. package/dist/workers/registry.d.ts.map +1 -0
  586. package/dist/workers/registry.js +19 -0
  587. package/dist/workers/registry.js.map +1 -0
  588. package/dist/workers/scheduler.d.ts +13 -0
  589. package/dist/workers/scheduler.d.ts.map +1 -0
  590. package/dist/workers/scheduler.js +71 -0
  591. package/dist/workers/scheduler.js.map +1 -0
  592. package/dist/workers/types.d.ts +55 -0
  593. package/dist/workers/types.d.ts.map +1 -0
  594. package/dist/workers/types.js +4 -0
  595. package/dist/workers/types.js.map +1 -0
  596. package/dist/workers/wrangler.d.ts +62 -0
  597. package/dist/workers/wrangler.d.ts.map +1 -0
  598. package/dist/workers/wrangler.js +90 -0
  599. package/dist/workers/wrangler.js.map +1 -0
  600. package/package.json +286 -0
  601. package/skills/creating-workerstack-apps/SKILL.md +45 -0
  602. package/skills/creating-workerstack-apps/agents/openai.yaml +4 -0
  603. package/skills/creating-workerstack-apps/references/application-structure.md +219 -0
  604. package/skills/creating-workerstack-apps/references/runtime-integrations.md +96 -0
  605. package/skills/creating-workerstack-apps/references/verification.md +29 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/workers/registry.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,oBAAoB,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA;AAE9D,MAAM,MAAM,gBAAgB,GAAG;IAC7B,KAAK,CACH,OAAO,EAAE,OAAO,EAChB,GAAG,EAAE,SAAS,EACd,GAAG,EAAE,oBAAoB,GACxB,OAAO,CAAC,QAAQ,CAAC,CAAA;CACrB,CAAA;AAKD,wBAAgB,cAAc,CAAC,MAAM,EAAE,gBAAgB,GAAG,IAAI,CAE7D;AAED,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,SAAS,GAAG,IAAI,CAEtD;AAED,wEAAwE;AACxE,wBAAgB,gBAAgB,IAC5B;IAAE,MAAM,EAAE,gBAAgB,CAAC;IAAC,GAAG,EAAE,SAAS,CAAA;CAAE,GAC5C,SAAS,CAIZ;AAED,wBAAgB,qBAAqB,IAAI,IAAI,CAG5C"}
@@ -0,0 +1,19 @@
1
+ let current;
2
+ let currentEnv;
3
+ export function registerWorker(worker) {
4
+ current = worker;
5
+ }
6
+ export function rememberWorkerEnv(env) {
7
+ currentEnv = env;
8
+ }
9
+ /** The registered Worker and its env, once a request has reached it. */
10
+ export function registeredWorker() {
11
+ return current && currentEnv
12
+ ? { worker: current, env: currentEnv }
13
+ : undefined;
14
+ }
15
+ export function resetRegistryForTests() {
16
+ current = undefined;
17
+ currentEnv = undefined;
18
+ }
19
+ //# sourceMappingURL=registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/workers/registry.ts"],"names":[],"mappings":"AAcA,IAAI,OAAqC,CAAA;AACzC,IAAI,UAAiC,CAAA;AAErC,MAAM,UAAU,cAAc,CAAC,MAAwB;IACrD,OAAO,GAAG,MAAM,CAAA;AAClB,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,GAAc;IAC9C,UAAU,GAAG,GAAG,CAAA;AAClB,CAAC;AAED,wEAAwE;AACxE,MAAM,UAAU,gBAAgB;IAG9B,OAAO,OAAO,IAAI,UAAU;QAC1B,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,UAAU,EAAE;QACtC,CAAC,CAAC,SAAS,CAAA;AACf,CAAC;AAED,MAAM,UAAU,qBAAqB;IACnC,OAAO,GAAG,SAAS,CAAA;IACnB,UAAU,GAAG,SAAS,CAAA;AACxB,CAAC","sourcesContent":["// src/workers/registry.ts — the workerstack Worker of this isolate. A package\n// entry registers it; server-side fetch in Start calls it without a network hop.\n// The env is the one the Worker last received: it is the same for every request\n// in an isolate, and SSR code runs inside a request that reached the Worker.\nimport type { ExecutionContextLike, WorkerEnv } from './types'\n\nexport type RegisteredWorker = {\n fetch(\n request: Request,\n env: WorkerEnv,\n ctx: ExecutionContextLike,\n ): Promise<Response>\n}\n\nlet current: RegisteredWorker | undefined\nlet currentEnv: WorkerEnv | undefined\n\nexport function registerWorker(worker: RegisteredWorker): void {\n current = worker\n}\n\nexport function rememberWorkerEnv(env: WorkerEnv): void {\n currentEnv = env\n}\n\n/** The registered Worker and its env, once a request has reached it. */\nexport function registeredWorker():\n | { worker: RegisteredWorker; env: WorkerEnv }\n | undefined {\n return current && currentEnv\n ? { worker: current, env: currentEnv }\n : undefined\n}\n\nexport function resetRegistryForTests(): void {\n current = undefined\n currentEnv = undefined\n}\n"]}
@@ -0,0 +1,13 @@
1
+ import type { WorkerstackBackend } from '../backend.js';
2
+ import type { DurableObjectStateLike, WorkerEnv } from './types.js';
3
+ export declare const TICK_BUDGET_MS = 25000;
4
+ export declare const NOTIFY_RETRY_MS = 1000;
5
+ export declare const SAFETY_MS = 3600000;
6
+ export declare const MIN_GAP_MS = 1000;
7
+ export interface SchedulerObject {
8
+ fetch(request: Request): Promise<Response>;
9
+ alarm(): Promise<void>;
10
+ }
11
+ export type SchedulerClass = new (state: DurableObjectStateLike, env: WorkerEnv) => SchedulerObject;
12
+ export declare function createSchedulerClass(backend: WorkerstackBackend<any>): SchedulerClass;
13
+ //# sourceMappingURL=scheduler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scheduler.d.ts","sourceRoot":"","sources":["../../src/workers/scheduler.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAA;AACpD,OAAO,KAAK,EAAE,sBAAsB,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA;AAIhE,eAAO,MAAM,cAAc,QAAS,CAAA;AACpC,eAAO,MAAM,eAAe,OAAQ,CAAA;AACpC,eAAO,MAAM,SAAS,UAAY,CAAA;AAClC,eAAO,MAAM,UAAU,OAAQ,CAAA;AAE/B,MAAM,WAAW,eAAe;IAC9B,KAAK,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAA;IAC1C,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;CACvB;AAED,MAAM,MAAM,cAAc,GAAG,KAC3B,KAAK,EAAE,sBAAsB,EAC7B,GAAG,EAAE,SAAS,KACX,eAAe,CAAA;AAGpB,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,kBAAkB,CAAC,GAAG,CAAC,GAC/B,cAAc,CAkEhB"}
@@ -0,0 +1,71 @@
1
+ import { appFor } from './app.js';
2
+ export const TICK_BUDGET_MS = 25_000;
3
+ export const NOTIFY_RETRY_MS = 1_000;
4
+ export const SAFETY_MS = 3_600_000;
5
+ export const MIN_GAP_MS = 1_000;
6
+ // An explicit return type keeps the private members out of the emitted .d.ts.
7
+ export function createSchedulerClass(backend) {
8
+ return class Scheduler {
9
+ state;
10
+ env;
11
+ notified = false;
12
+ retried = false;
13
+ constructor(state, env) {
14
+ this.state = state;
15
+ this.env = env;
16
+ }
17
+ app() {
18
+ // Enqueues from job handlers move this alarm directly, not via a stub.
19
+ return appFor(backend, this.env, 'scheduler', {
20
+ jobs: { notify: (runAt) => this.schedule(runAt) },
21
+ });
22
+ }
23
+ /** Only ever moves the alarm earlier. */
24
+ async schedule(runAt) {
25
+ const current = await this.state.storage.getAlarm();
26
+ if (current === null || runAt < current) {
27
+ await this.state.storage.setAlarm(runAt);
28
+ }
29
+ }
30
+ async fetch(request) {
31
+ const url = new URL(request.url);
32
+ if (url.pathname !== '/notify' || request.method !== 'POST') {
33
+ return new Response('Not found', { status: 404 });
34
+ }
35
+ const { runAt } = (await request.json());
36
+ this.notified = true;
37
+ this.retried = false;
38
+ await this.schedule(runAt);
39
+ return new Response(null, { status: 204 });
40
+ }
41
+ async alarm() {
42
+ // Clear the alarm that fired, so schedule() below can set a later one.
43
+ // Cloudflare has already cleared it; celld and the test fake may not.
44
+ const fired = await this.state.storage.getAlarm();
45
+ if (fired !== null && fired <= Date.now()) {
46
+ await this.state.storage.deleteAlarm();
47
+ }
48
+ const app = await this.app();
49
+ const started = Date.now();
50
+ let claimed = 0;
51
+ for (;;) {
52
+ const result = await app.jobs.tick(Date.now());
53
+ claimed += result.claimed;
54
+ if (result.claimed === 0 || Date.now() - started > TICK_BUDGET_MS) {
55
+ break;
56
+ }
57
+ }
58
+ const now = Date.now();
59
+ // An enqueue inside a transaction notifies before its commit.
60
+ if (this.notified && claimed === 0 && !this.retried) {
61
+ this.retried = true;
62
+ await this.schedule(now + NOTIFY_RETRY_MS);
63
+ return;
64
+ }
65
+ this.notified = false;
66
+ const next = await app.jobs.nextDueAt(now, now + SAFETY_MS);
67
+ await this.schedule(Math.max(next ?? now + SAFETY_MS, now + MIN_GAP_MS));
68
+ }
69
+ };
70
+ }
71
+ //# sourceMappingURL=scheduler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scheduler.js","sourceRoot":"","sources":["../../src/workers/scheduler.ts"],"names":[],"mappings":"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","sourcesContent":["// src/workers/scheduler.ts — the only place background work runs in a Worker.\n// One instance per app ('main'). Its alarm chain follows app.jobs.nextDueAt;\n// enqueues and Cron Triggers pull the alarm earlier through /notify.\nimport type { WorkerstackBackend } from '../backend'\nimport type { DurableObjectStateLike, WorkerEnv } from './types'\n\nimport { appFor, type WorkerApp } from './app'\n\nexport const TICK_BUDGET_MS = 25_000\nexport const NOTIFY_RETRY_MS = 1_000\nexport const SAFETY_MS = 3_600_000\nexport const MIN_GAP_MS = 1_000\n\nexport interface SchedulerObject {\n fetch(request: Request): Promise<Response>\n alarm(): Promise<void>\n}\n\nexport type SchedulerClass = new (\n state: DurableObjectStateLike,\n env: WorkerEnv,\n) => SchedulerObject\n\n// An explicit return type keeps the private members out of the emitted .d.ts.\nexport function createSchedulerClass(\n backend: WorkerstackBackend<any>,\n): SchedulerClass {\n return class Scheduler {\n private notified = false\n private retried = false\n\n constructor(\n private readonly state: DurableObjectStateLike,\n private readonly env: WorkerEnv,\n ) {}\n\n private app(): Promise<WorkerApp> {\n // Enqueues from job handlers move this alarm directly, not via a stub.\n return appFor(backend, this.env, 'scheduler', {\n jobs: { notify: (runAt) => this.schedule(runAt) },\n })\n }\n\n /** Only ever moves the alarm earlier. */\n private async schedule(runAt: number) {\n const current = await this.state.storage.getAlarm()\n if (current === null || runAt < current) {\n await this.state.storage.setAlarm(runAt)\n }\n }\n\n async fetch(request: Request): Promise<Response> {\n const url = new URL(request.url)\n if (url.pathname !== '/notify' || request.method !== 'POST') {\n return new Response('Not found', { status: 404 })\n }\n const { runAt } = (await request.json()) as { runAt: number }\n this.notified = true\n this.retried = false\n await this.schedule(runAt)\n return new Response(null, { status: 204 })\n }\n\n async alarm(): Promise<void> {\n // Clear the alarm that fired, so schedule() below can set a later one.\n // Cloudflare has already cleared it; celld and the test fake may not.\n const fired = await this.state.storage.getAlarm()\n if (fired !== null && fired <= Date.now()) {\n await this.state.storage.deleteAlarm()\n }\n const app = await this.app()\n const started = Date.now()\n let claimed = 0\n for (;;) {\n const result = await app.jobs.tick(Date.now())\n claimed += result.claimed\n if (result.claimed === 0 || Date.now() - started > TICK_BUDGET_MS) {\n break\n }\n }\n const now = Date.now()\n // An enqueue inside a transaction notifies before its commit.\n if (this.notified && claimed === 0 && !this.retried) {\n this.retried = true\n await this.schedule(now + NOTIFY_RETRY_MS)\n return\n }\n this.notified = false\n const next = await app.jobs.nextDueAt(now, now + SAFETY_MS)\n await this.schedule(Math.max(next ?? now + SAFETY_MS, now + MIN_GAP_MS))\n }\n }\n}\n"]}
@@ -0,0 +1,55 @@
1
+ export interface DurableObjectStorageLike {
2
+ getAlarm(): Promise<number | null>;
3
+ setAlarm(scheduledTime: number | Date): Promise<void>;
4
+ deleteAlarm(): Promise<void>;
5
+ }
6
+ export interface DurableObjectStateLike {
7
+ storage: DurableObjectStorageLike;
8
+ }
9
+ export interface FetcherLike {
10
+ fetch(input: RequestInfo | URL, init?: RequestInit): Promise<Response>;
11
+ }
12
+ export interface DurableObjectNamespaceLike {
13
+ idFromName(name: string): unknown;
14
+ get(id: unknown): FetcherLike;
15
+ }
16
+ export interface ExecutionContextLike {
17
+ waitUntil(promise: Promise<unknown>): void;
18
+ }
19
+ export interface R2ObjectLike {
20
+ key: string;
21
+ size: number;
22
+ httpMetadata?: {
23
+ contentType?: string;
24
+ };
25
+ }
26
+ export interface R2ObjectBodyLike extends R2ObjectLike {
27
+ body: ReadableStream;
28
+ }
29
+ export interface R2BucketLike {
30
+ put(key: string, value: ArrayBuffer | ReadableStream | string, options?: {
31
+ httpMetadata?: {
32
+ contentType?: string;
33
+ };
34
+ }): Promise<unknown>;
35
+ get(key: string): Promise<R2ObjectBodyLike | null>;
36
+ head(key: string): Promise<R2ObjectLike | null>;
37
+ delete(key: string): Promise<void>;
38
+ list(options?: {
39
+ prefix?: string;
40
+ cursor?: string;
41
+ }): Promise<{
42
+ objects: R2ObjectLike[];
43
+ truncated: boolean;
44
+ cursor?: string;
45
+ }>;
46
+ }
47
+ export type WorkerEnv = {
48
+ SCHEDULER?: DurableObjectNamespaceLike;
49
+ REALTIME?: DurableObjectNamespaceLike;
50
+ RATE_LIMITER?: DurableObjectNamespaceLike;
51
+ ASSETS?: FetcherLike;
52
+ [binding: string]: unknown;
53
+ };
54
+ export declare function stub(namespace: DurableObjectNamespaceLike, name: string): FetcherLike;
55
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/workers/types.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,wBAAwB;IACvC,QAAQ,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAA;IAClC,QAAQ,CAAC,aAAa,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACrD,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;CAC7B;AAED,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,wBAAwB,CAAA;CAClC;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,CAAC,KAAK,EAAE,WAAW,GAAG,GAAG,EAAE,IAAI,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAA;CACvE;AAED,MAAM,WAAW,0BAA0B;IACzC,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAA;IACjC,GAAG,CAAC,EAAE,EAAE,OAAO,GAAG,WAAW,CAAA;CAC9B;AAED,MAAM,WAAW,oBAAoB;IACnC,SAAS,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,GAAG,IAAI,CAAA;CAC3C;AAED,MAAM,WAAW,YAAY;IAC3B,GAAG,EAAE,MAAM,CAAA;IACX,IAAI,EAAE,MAAM,CAAA;IACZ,YAAY,CAAC,EAAE;QAAE,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;CACxC;AAED,MAAM,WAAW,gBAAiB,SAAQ,YAAY;IACpD,IAAI,EAAE,cAAc,CAAA;CACrB;AAED,MAAM,WAAW,YAAY;IAC3B,GAAG,CACD,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,WAAW,GAAG,cAAc,GAAG,MAAM,EAC5C,OAAO,CAAC,EAAE;QAAE,YAAY,CAAC,EAAE;YAAE,WAAW,CAAC,EAAE,MAAM,CAAA;SAAE,CAAA;KAAE,GACpD,OAAO,CAAC,OAAO,CAAC,CAAA;IACnB,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAAA;IAClD,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAAA;IAC/C,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAClC,IAAI,CAAC,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC;QAC5D,OAAO,EAAE,YAAY,EAAE,CAAA;QACvB,SAAS,EAAE,OAAO,CAAA;QAClB,MAAM,CAAC,EAAE,MAAM,CAAA;KAChB,CAAC,CAAA;CACH;AAED,MAAM,MAAM,SAAS,GAAG;IACtB,SAAS,CAAC,EAAE,0BAA0B,CAAA;IACtC,QAAQ,CAAC,EAAE,0BAA0B,CAAA;IACrC,YAAY,CAAC,EAAE,0BAA0B,CAAA;IACzC,MAAM,CAAC,EAAE,WAAW,CAAA;IACpB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAA;CAC3B,CAAA;AAED,wBAAgB,IAAI,CAClB,SAAS,EAAE,0BAA0B,EACrC,IAAI,EAAE,MAAM,GACX,WAAW,CAEb"}
@@ -0,0 +1,4 @@
1
+ export function stub(namespace, name) {
2
+ return namespace.get(namespace.idFromName(name));
3
+ }
4
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/workers/types.ts"],"names":[],"mappings":"AA4DA,MAAM,UAAU,IAAI,CAClB,SAAqC,EACrC,IAAY;IAEZ,OAAO,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAA;AAClD,CAAC","sourcesContent":["// src/workers/types.ts — the small part of the Workers API that workerstack\n// uses. Local interfaces keep `cloudflare:workers` and its type package out of\n// the core, so the same classes run under `bun test` with in-memory fakes.\nexport interface DurableObjectStorageLike {\n getAlarm(): Promise<number | null>\n setAlarm(scheduledTime: number | Date): Promise<void>\n deleteAlarm(): Promise<void>\n}\n\nexport interface DurableObjectStateLike {\n storage: DurableObjectStorageLike\n}\n\nexport interface FetcherLike {\n fetch(input: RequestInfo | URL, init?: RequestInit): Promise<Response>\n}\n\nexport interface DurableObjectNamespaceLike {\n idFromName(name: string): unknown\n get(id: unknown): FetcherLike\n}\n\nexport interface ExecutionContextLike {\n waitUntil(promise: Promise<unknown>): void\n}\n\nexport interface R2ObjectLike {\n key: string\n size: number\n httpMetadata?: { contentType?: string }\n}\n\nexport interface R2ObjectBodyLike extends R2ObjectLike {\n body: ReadableStream\n}\n\nexport interface R2BucketLike {\n put(\n key: string,\n value: ArrayBuffer | ReadableStream | string,\n options?: { httpMetadata?: { contentType?: string } },\n ): Promise<unknown>\n get(key: string): Promise<R2ObjectBodyLike | null>\n head(key: string): Promise<R2ObjectLike | null>\n delete(key: string): Promise<void>\n list(options?: { prefix?: string; cursor?: string }): Promise<{\n objects: R2ObjectLike[]\n truncated: boolean\n cursor?: string\n }>\n}\n\nexport type WorkerEnv = {\n SCHEDULER?: DurableObjectNamespaceLike\n REALTIME?: DurableObjectNamespaceLike\n RATE_LIMITER?: DurableObjectNamespaceLike\n ASSETS?: FetcherLike\n [binding: string]: unknown\n}\n\nexport function stub(\n namespace: DurableObjectNamespaceLike,\n name: string,\n): FetcherLike {\n return namespace.get(namespace.idFromName(name))\n}\n"]}
@@ -0,0 +1,62 @@
1
+ import type { WorkerPlan } from '../worker-plan.js';
2
+ export type WranglerConfig = ReturnType<typeof toWranglerConfig>;
3
+ export declare function toWranglerConfig(plan: WorkerPlan, names: {
4
+ name: string;
5
+ bucketName: (logical: string) => string;
6
+ },
7
+ /** artifact: main and assets of the build output instead of the source. */
8
+ options?: {
9
+ artifact?: boolean;
10
+ }): {
11
+ triggers?: {
12
+ crons: string[];
13
+ } | undefined;
14
+ name: string;
15
+ main: string;
16
+ compatibility_date: string;
17
+ compatibility_flags: string[];
18
+ durable_objects: {
19
+ bindings: {
20
+ name: string;
21
+ class_name: string;
22
+ }[];
23
+ };
24
+ migrations: {
25
+ tag: string;
26
+ new_sqlite_classes: string[];
27
+ }[];
28
+ r2_buckets: {
29
+ binding: string;
30
+ bucket_name: string;
31
+ }[];
32
+ assets: {
33
+ run_worker_first?: string[] | undefined;
34
+ directory: string;
35
+ binding: string;
36
+ not_found_handling: "none" | "single-page-application";
37
+ };
38
+ };
39
+ /** A Worker name from package.json#name: no scope, lowercase, [a-z0-9-]. */
40
+ export declare function workerName(packageName: string | undefined): string;
41
+ /**
42
+ * Imports the app's backend. Entry precedence: the argument,
43
+ * package.json#workerstack.entry, src/workerstack.ts.
44
+ */
45
+ export declare function loadBackend(directory: string, entry?: string): Promise<{
46
+ pkg: {
47
+ name?: string;
48
+ workerstack?: {
49
+ entry?: string;
50
+ };
51
+ };
52
+ backend: import("..").WorkerstackBackend<unknown>;
53
+ }>;
54
+ export declare function runWranglerCommand(options: {
55
+ directory: string;
56
+ name?: string;
57
+ output?: string;
58
+ }): Promise<{
59
+ path: string;
60
+ changed: boolean;
61
+ }>;
62
+ //# sourceMappingURL=wrangler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wrangler.d.ts","sourceRoot":"","sources":["../../src/workers/wrangler.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAMhD,MAAM,MAAM,cAAc,GAAG,UAAU,CAAC,OAAO,gBAAgB,CAAC,CAAA;AAEhE,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,UAAU,EAChB,KAAK,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,MAAM,CAAA;CAAE;AAChE,2EAA2E;AAC3E,OAAO,GAAE;IAAE,QAAQ,CAAC,EAAE,OAAO,CAAA;CAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAiCrC;AAED,4EAA4E;AAC5E,wBAAgB,UAAU,CAAC,WAAW,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAKlE;AAED;;;GAGG;AACH,wBAAsB,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM;;eAGnD,MAAM;sBAAgB;YAAE,KAAK,CAAC,EAAE,MAAM,CAAA;SAAE;;;GASvD;AAED,wBAAsB,kBAAkB,CAAC,OAAO,EAAE;IAChD,SAAS,EAAE,MAAM,CAAA;IACjB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB,GAAG,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,CAAC,CA4B9C"}
@@ -0,0 +1,90 @@
1
+ // src/workers/wrangler.ts — wrangler.json rendered from the committed
2
+ // blueprint. The file is a local artifact (git-ignored): `celld dev`, a manual
3
+ // `wrangler deploy`, or `celld deploy` read it. Hosts render their own config
4
+ // from the same WorkerPlan.
5
+ import { readFile, writeFile } from 'node:fs/promises';
6
+ import { join, resolve } from 'node:path';
7
+ import { pathToFileURL } from 'node:url';
8
+ import { isWorkerstackBackend } from '../backend.js';
9
+ import { parseWorkerBlueprintYaml } from '../blueprint.js';
10
+ import { workerPlanFromBlueprint } from '../worker-plan.js';
11
+ export function toWranglerConfig(plan, names,
12
+ /** artifact: main and assets of the build output instead of the source. */
13
+ options = {}) {
14
+ return {
15
+ name: names.name,
16
+ main: options.artifact ? plan.artifact.main : plan.main,
17
+ compatibility_date: plan.compatibilityDate,
18
+ compatibility_flags: [...plan.compatibilityFlags],
19
+ durable_objects: {
20
+ bindings: plan.durableObjects.bindings.map((binding) => ({
21
+ name: binding.name,
22
+ class_name: binding.className,
23
+ })),
24
+ },
25
+ migrations: plan.durableObjects.migrations.map((migration) => ({
26
+ tag: migration.tag,
27
+ new_sqlite_classes: [...migration.newSqliteClasses],
28
+ })),
29
+ r2_buckets: plan.buckets.map((bucket) => ({
30
+ binding: bucket.binding,
31
+ bucket_name: names.bucketName(bucket.name),
32
+ })),
33
+ assets: {
34
+ directory: options.artifact
35
+ ? plan.artifact.assets
36
+ : plan.assets.directory,
37
+ binding: 'ASSETS',
38
+ not_found_handling: plan.assets.notFoundHandling,
39
+ ...(plan.assets.runWorkerFirst.length > 0
40
+ ? { run_worker_first: [...plan.assets.runWorkerFirst] }
41
+ : {}),
42
+ },
43
+ ...(plan.crons.length > 0 ? { triggers: { crons: [...plan.crons] } } : {}),
44
+ };
45
+ }
46
+ /** A Worker name from package.json#name: no scope, lowercase, [a-z0-9-]. */
47
+ export function workerName(packageName) {
48
+ return (packageName ?? 'app')
49
+ .replace(/^@[^/]+\//, '')
50
+ .toLowerCase()
51
+ .replace(/[^a-z0-9-]/g, '-');
52
+ }
53
+ /**
54
+ * Imports the app's backend. Entry precedence: the argument,
55
+ * package.json#workerstack.entry, src/workerstack.ts.
56
+ */
57
+ export async function loadBackend(directory, entry) {
58
+ const pkg = JSON.parse(await readFile(join(directory, 'package.json'), 'utf8'));
59
+ const path = entry ?? pkg.workerstack?.entry ?? 'src/workerstack.ts';
60
+ const module = (await import(pathToFileURL(join(directory, path)).href));
61
+ if (!isWorkerstackBackend(module.backend)) {
62
+ throw new Error(`[workerstack] ${path} must export backend`);
63
+ }
64
+ return { pkg, backend: module.backend };
65
+ }
66
+ export async function runWranglerCommand(options) {
67
+ const directory = resolve(options.directory);
68
+ const pkg = JSON.parse(await readFile(join(directory, 'package.json'), 'utf8'));
69
+ let source;
70
+ try {
71
+ source = await readFile(join(directory, 'workerstack.blueprint.yaml'), 'utf8');
72
+ }
73
+ catch {
74
+ throw new Error('[workerstack] workerstack.blueprint.yaml does not exist; run `workerstack blueprint`');
75
+ }
76
+ const plan = workerPlanFromBlueprint(parseWorkerBlueprintYaml(source));
77
+ const name = workerName(options.name ?? pkg.name);
78
+ const config = toWranglerConfig(plan, {
79
+ name,
80
+ bucketName: (bucket) => `${name}-${bucket}`,
81
+ });
82
+ const path = join(directory, options.output ?? 'wrangler.json');
83
+ const text = `${JSON.stringify(config, null, 2)}\n`;
84
+ const existing = await readFile(path, 'utf8').catch(() => undefined);
85
+ if (existing === text)
86
+ return { path, changed: false };
87
+ await writeFile(path, text);
88
+ return { path, changed: true };
89
+ }
90
+ //# sourceMappingURL=wrangler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wrangler.js","sourceRoot":"","sources":["../../src/workers/wrangler.ts"],"names":[],"mappings":"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","sourcesContent":["// src/workers/wrangler.ts — wrangler.json rendered from the committed\n// blueprint. The file is a local artifact (git-ignored): `celld dev`, a manual\n// `wrangler deploy`, or `celld deploy` read it. Hosts render their own config\n// from the same WorkerPlan.\nimport { readFile, writeFile } from 'node:fs/promises'\nimport { join, resolve } from 'node:path'\nimport { pathToFileURL } from 'node:url'\n\nimport type { WorkerPlan } from '../worker-plan'\n\nimport { isWorkerstackBackend } from '../backend'\nimport { parseWorkerBlueprintYaml } from '../blueprint'\nimport { workerPlanFromBlueprint } from '../worker-plan'\n\nexport type WranglerConfig = ReturnType<typeof toWranglerConfig>\n\nexport function toWranglerConfig(\n plan: WorkerPlan,\n names: { name: string; bucketName: (logical: string) => string },\n /** artifact: main and assets of the build output instead of the source. */\n options: { artifact?: boolean } = {},\n) {\n return {\n name: names.name,\n main: options.artifact ? plan.artifact.main : plan.main,\n compatibility_date: plan.compatibilityDate,\n compatibility_flags: [...plan.compatibilityFlags],\n durable_objects: {\n bindings: plan.durableObjects.bindings.map((binding) => ({\n name: binding.name,\n class_name: binding.className,\n })),\n },\n migrations: plan.durableObjects.migrations.map((migration) => ({\n tag: migration.tag,\n new_sqlite_classes: [...migration.newSqliteClasses],\n })),\n r2_buckets: plan.buckets.map((bucket) => ({\n binding: bucket.binding,\n bucket_name: names.bucketName(bucket.name),\n })),\n assets: {\n directory: options.artifact\n ? plan.artifact.assets\n : plan.assets.directory,\n binding: 'ASSETS',\n not_found_handling: plan.assets.notFoundHandling,\n ...(plan.assets.runWorkerFirst.length > 0\n ? { run_worker_first: [...plan.assets.runWorkerFirst] }\n : {}),\n },\n ...(plan.crons.length > 0 ? { triggers: { crons: [...plan.crons] } } : {}),\n }\n}\n\n/** A Worker name from package.json#name: no scope, lowercase, [a-z0-9-]. */\nexport function workerName(packageName: string | undefined): string {\n return (packageName ?? 'app')\n .replace(/^@[^/]+\\//, '')\n .toLowerCase()\n .replace(/[^a-z0-9-]/g, '-')\n}\n\n/**\n * Imports the app's backend. Entry precedence: the argument,\n * package.json#workerstack.entry, src/workerstack.ts.\n */\nexport async function loadBackend(directory: string, entry?: string) {\n const pkg = JSON.parse(\n await readFile(join(directory, 'package.json'), 'utf8'),\n ) as { name?: string; workerstack?: { entry?: string } }\n const path = entry ?? pkg.workerstack?.entry ?? 'src/workerstack.ts'\n const module = (await import(pathToFileURL(join(directory, path)).href)) as {\n backend?: unknown\n }\n if (!isWorkerstackBackend(module.backend)) {\n throw new Error(`[workerstack] ${path} must export backend`)\n }\n return { pkg, backend: module.backend }\n}\n\nexport async function runWranglerCommand(options: {\n directory: string\n name?: string\n output?: string\n}): Promise<{ path: string; changed: boolean }> {\n const directory = resolve(options.directory)\n const pkg = JSON.parse(\n await readFile(join(directory, 'package.json'), 'utf8'),\n ) as { name?: string }\n let source: string\n try {\n source = await readFile(\n join(directory, 'workerstack.blueprint.yaml'),\n 'utf8',\n )\n } catch {\n throw new Error(\n '[workerstack] workerstack.blueprint.yaml does not exist; run `workerstack blueprint`',\n )\n }\n const plan = workerPlanFromBlueprint(parseWorkerBlueprintYaml(source))\n const name = workerName(options.name ?? pkg.name)\n const config = toWranglerConfig(plan, {\n name,\n bucketName: (bucket) => `${name}-${bucket}`,\n })\n const path = join(directory, options.output ?? 'wrangler.json')\n const text = `${JSON.stringify(config, null, 2)}\\n`\n const existing = await readFile(path, 'utf8').catch(() => undefined)\n if (existing === text) return { path, changed: false }\n await writeFile(path, text)\n return { path, changed: true }\n}\n"]}