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,108 @@
1
+ import { applyLiveFrame } from './apply.js';
2
+ import { parseSseFrames } from './sse.js';
3
+ export { applyLiveFrame } from './apply.js';
4
+ export { parseSseFrames } from './sse.js';
5
+ /** Full jitter, the same shape the realtime client uses. */
6
+ const defaultBackoff = (attempt) => Math.floor(Math.random() * Math.min(30_000, 1_000 * 2 ** attempt));
7
+ const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
8
+ function buildUrl(url, input) {
9
+ if (!input)
10
+ return url;
11
+ const params = new URLSearchParams();
12
+ if (input.limit !== undefined)
13
+ params.set('limit', String(input.limit));
14
+ if (input.sort)
15
+ params.set('sort', input.sort);
16
+ if (input.order)
17
+ params.set('order', input.order);
18
+ if (input.filters && Object.keys(input.filters).length > 0) {
19
+ params.set('filters', JSON.stringify(input.filters));
20
+ }
21
+ return params.size > 0 ? `${url}?${params}` : url;
22
+ }
23
+ /**
24
+ * One live view: a reconnecting loop over `GET /api/live/{table}` that folds
25
+ * frames into an immutable array of rows.
26
+ *
27
+ * The view holds no cache and no second copy of the data. Every connection
28
+ * opens with a snapshot, so a reconnect is the resynchronisation, and the
29
+ * server places each row, so this module never sorts.
30
+ *
31
+ * `subscribe` plus `getRows` is the pair `useSyncExternalStore` expects. A
32
+ * Solid or Vue binding writes `getRows()` into a store from the same listener.
33
+ */
34
+ export function createLiveView(url, options = {}) {
35
+ const fetchImpl = options.fetch ?? globalThis.fetch;
36
+ const backoff = options.backoff ?? defaultBackoff;
37
+ const listeners = new Set();
38
+ let rows = [];
39
+ let status = 'connecting';
40
+ let error;
41
+ let closed = false;
42
+ let controller;
43
+ const notify = () => {
44
+ for (const listener of listeners)
45
+ listener();
46
+ };
47
+ void (async () => {
48
+ let attempt = 0;
49
+ while (!closed) {
50
+ controller = new AbortController();
51
+ try {
52
+ const response = await fetchImpl(buildUrl(url, options.input), {
53
+ signal: controller.signal,
54
+ headers: { accept: 'text/event-stream' },
55
+ });
56
+ if (!response.ok || !response.body) {
57
+ throw new Error(`live request failed (${response.status})`);
58
+ }
59
+ for await (const frame of parseSseFrames(response.body)) {
60
+ attempt = 0;
61
+ const next = applyLiveFrame(rows, frame);
62
+ const changed = next !== rows || status !== 'live' || error !== undefined;
63
+ rows = next;
64
+ status = 'live';
65
+ error = undefined;
66
+ if (changed)
67
+ notify();
68
+ }
69
+ // A live view never ends on its own, so reaching here is a drop.
70
+ throw new Error('live stream closed');
71
+ }
72
+ catch (cause) {
73
+ if (closed)
74
+ return;
75
+ error = cause;
76
+ // Rows on screen mean the view still works while it reconnects.
77
+ status = rows.length > 0 ? 'reconnecting' : 'failed';
78
+ notify();
79
+ await sleep(backoff(attempt++));
80
+ }
81
+ }
82
+ })();
83
+ return {
84
+ getRows: () => rows,
85
+ getStatus: () => status,
86
+ getError: () => error,
87
+ subscribe: (listener) => {
88
+ listeners.add(listener);
89
+ return () => {
90
+ listeners.delete(listener);
91
+ };
92
+ },
93
+ patch: (recipe) => {
94
+ const draft = [...rows];
95
+ recipe(draft);
96
+ rows = draft;
97
+ notify();
98
+ },
99
+ resync: () => {
100
+ controller?.abort();
101
+ },
102
+ close: () => {
103
+ closed = true;
104
+ controller?.abort();
105
+ },
106
+ };
107
+ }
108
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/live/index.ts"],"names":[],"mappings":"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","sourcesContent":["import type { LiveFrame, LiveInput } from './protocol'\n\nimport { applyLiveFrame } from './apply'\nimport { parseSseFrames } from './sse'\n\nexport type {\n LiveDeltaFrame,\n LiveFrame,\n LiveHeartbeatFrame,\n LiveInput,\n LiveRemoveFrame,\n LiveSnapshotFrame,\n LiveUpsertFrame,\n} from './protocol'\nexport { applyLiveFrame } from './apply'\nexport { parseSseFrames, type ByteStream } from './sse'\n\nexport type LiveStatus = 'connecting' | 'live' | 'reconnecting' | 'failed'\n\nexport type LiveView<TRow extends { id: string }> = {\n /** The current rows. A new array appears only when the view changes. */\n getRows: () => readonly TRow[]\n getStatus: () => LiveStatus\n getError: () => unknown\n /** Register a listener; the return value removes it. */\n subscribe: (listener: () => void) => () => void\n /**\n * Write to the view before the server confirms. Replace a row rather than\n * mutating it, so consumers that compare by identity see the change:\n * `patch((rows) => { rows[0] = { ...rows[0], done: true } })`.\n * The server echo replaces the write, and `resync()` discards it.\n */\n patch: (recipe: (rows: TRow[]) => void) => void\n /** Reconnect. The new snapshot is the resynchronisation. */\n resync: () => void\n /** Stop the loop and abort the request. */\n close: () => void\n}\n\nexport type CreateLiveViewOptions = {\n input?: LiveInput\n /** For tests, and for a fetch that carries credentials or a base URL. */\n fetch?: (input: string, init?: RequestInit) => Promise<Response>\n /** Delay in milliseconds before retry number `attempt`, counted from zero. */\n backoff?: (attempt: number) => number\n}\n\n/** Full jitter, the same shape the realtime client uses. */\nconst defaultBackoff = (attempt: number): number =>\n Math.floor(Math.random() * Math.min(30_000, 1_000 * 2 ** attempt))\n\nconst sleep = (ms: number) => new Promise((resolve) => setTimeout(resolve, ms))\n\nfunction buildUrl(url: string, input: LiveInput | undefined): string {\n if (!input) return url\n const params = new URLSearchParams()\n if (input.limit !== undefined) params.set('limit', String(input.limit))\n if (input.sort) params.set('sort', input.sort)\n if (input.order) params.set('order', input.order)\n if (input.filters && Object.keys(input.filters).length > 0) {\n params.set('filters', JSON.stringify(input.filters))\n }\n return params.size > 0 ? `${url}?${params}` : url\n}\n\n/**\n * One live view: a reconnecting loop over `GET /api/live/{table}` that folds\n * frames into an immutable array of rows.\n *\n * The view holds no cache and no second copy of the data. Every connection\n * opens with a snapshot, so a reconnect is the resynchronisation, and the\n * server places each row, so this module never sorts.\n *\n * `subscribe` plus `getRows` is the pair `useSyncExternalStore` expects. A\n * Solid or Vue binding writes `getRows()` into a store from the same listener.\n */\nexport function createLiveView<TRow extends { id: string }>(\n url: string,\n options: CreateLiveViewOptions = {},\n): LiveView<TRow> {\n const fetchImpl = options.fetch ?? globalThis.fetch\n const backoff = options.backoff ?? defaultBackoff\n const listeners = new Set<() => void>()\n\n let rows: readonly TRow[] = []\n let status: LiveStatus = 'connecting'\n let error: unknown\n let closed = false\n let controller: AbortController | undefined\n\n const notify = () => {\n for (const listener of listeners) listener()\n }\n\n void (async () => {\n let attempt = 0\n while (!closed) {\n controller = new AbortController()\n try {\n const response = await fetchImpl(buildUrl(url, options.input), {\n signal: controller.signal,\n headers: { accept: 'text/event-stream' },\n })\n if (!response.ok || !response.body) {\n throw new Error(`live request failed (${response.status})`)\n }\n for await (const frame of parseSseFrames<LiveFrame<TRow>>(\n response.body,\n )) {\n attempt = 0\n const next = applyLiveFrame(rows, frame)\n const changed =\n next !== rows || status !== 'live' || error !== undefined\n rows = next\n status = 'live'\n error = undefined\n if (changed) notify()\n }\n // A live view never ends on its own, so reaching here is a drop.\n throw new Error('live stream closed')\n } catch (cause) {\n if (closed) return\n error = cause\n // Rows on screen mean the view still works while it reconnects.\n status = rows.length > 0 ? 'reconnecting' : 'failed'\n notify()\n await sleep(backoff(attempt++))\n }\n }\n })()\n\n return {\n getRows: () => rows,\n getStatus: () => status,\n getError: () => error,\n subscribe: (listener) => {\n listeners.add(listener)\n return () => {\n listeners.delete(listener)\n }\n },\n patch: (recipe) => {\n const draft = [...rows]\n recipe(draft)\n rows = draft\n notify()\n },\n resync: () => {\n controller?.abort()\n },\n close: () => {\n closed = true\n controller?.abort()\n },\n }\n}\n"]}
@@ -0,0 +1,47 @@
1
+ /**
2
+ * The wire frames of a live view (`GET /api/{table}:live`).
3
+ *
4
+ * A live view is one SSE stream that opens with a snapshot of a list query and
5
+ * then delivers only what that view cares about. The server decides membership
6
+ * and placement, so a client applies frames without knowing the filter or sort
7
+ * rules, and a reconnect replays a fresh snapshot instead of a refetch.
8
+ *
9
+ * Types only: both the browser client and the server import this module.
10
+ */
11
+ export type LiveSnapshotFrame<TRow = Record<string, unknown>> = {
12
+ type: 'snapshot';
13
+ items: TRow[];
14
+ operationId?: string;
15
+ /** The values the server resolved, not the values the caller sent. */
16
+ sort: string;
17
+ order: 'asc' | 'desc';
18
+ limit: number;
19
+ /** True when rows exist below the window. */
20
+ hasMore: boolean;
21
+ };
22
+ export type LiveUpsertFrame<TRow = Record<string, unknown>> = {
23
+ type: 'upsert';
24
+ record: TRow;
25
+ operationId?: string;
26
+ /** The id this row follows in the view; `null` means the head. */
27
+ afterId: string | null;
28
+ };
29
+ export type LiveRemoveFrame = {
30
+ type: 'remove';
31
+ id: string;
32
+ operationId?: string;
33
+ };
34
+ export type LiveHeartbeatFrame = {
35
+ type: 'heartbeat';
36
+ intervalMs: number;
37
+ };
38
+ export type LiveDeltaFrame<TRow = Record<string, unknown>> = LiveUpsertFrame<TRow> | LiveRemoveFrame;
39
+ export type LiveFrame<TRow = Record<string, unknown>> = LiveSnapshotFrame<TRow> | LiveDeltaFrame<TRow> | LiveHeartbeatFrame;
40
+ /** The query a live view accepts: the list contract a stream can honor. */
41
+ export type LiveInput = {
42
+ limit?: number;
43
+ sort?: string;
44
+ order?: 'asc' | 'desc';
45
+ filters?: Record<string, unknown>;
46
+ };
47
+ //# sourceMappingURL=protocol.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"protocol.d.ts","sourceRoot":"","sources":["../../src/live/protocol.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,MAAM,MAAM,iBAAiB,CAAC,IAAI,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI;IAC9D,IAAI,EAAE,UAAU,CAAA;IAChB,KAAK,EAAE,IAAI,EAAE,CAAA;IACb,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,sEAAsE;IACtE,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,KAAK,GAAG,MAAM,CAAA;IACrB,KAAK,EAAE,MAAM,CAAA;IACb,6CAA6C;IAC7C,OAAO,EAAE,OAAO,CAAA;CACjB,CAAA;AAED,MAAM,MAAM,eAAe,CAAC,IAAI,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI;IAC5D,IAAI,EAAE,QAAQ,CAAA;IACd,MAAM,EAAE,IAAI,CAAA;IACZ,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,kEAAkE;IAClE,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;CACvB,CAAA;AAED,MAAM,MAAM,eAAe,GAAG;IAC5B,IAAI,EAAE,QAAQ,CAAA;IACd,EAAE,EAAE,MAAM,CAAA;IACV,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB,CAAA;AAED,MAAM,MAAM,kBAAkB,GAAG;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,CAAA;AAE1E,MAAM,MAAM,cAAc,CAAC,IAAI,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,IACrD,eAAe,CAAC,IAAI,CAAC,GACrB,eAAe,CAAA;AAEnB,MAAM,MAAM,SAAS,CAAC,IAAI,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,IAChD,iBAAiB,CAAC,IAAI,CAAC,GACvB,cAAc,CAAC,IAAI,CAAC,GACpB,kBAAkB,CAAA;AAEtB,2EAA2E;AAC3E,MAAM,MAAM,SAAS,GAAG;IACtB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,KAAK,CAAC,EAAE,KAAK,GAAG,MAAM,CAAA;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAClC,CAAA"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * The wire frames of a live view (`GET /api/{table}:live`).
3
+ *
4
+ * A live view is one SSE stream that opens with a snapshot of a list query and
5
+ * then delivers only what that view cares about. The server decides membership
6
+ * and placement, so a client applies frames without knowing the filter or sort
7
+ * rules, and a reconnect replays a fresh snapshot instead of a refetch.
8
+ *
9
+ * Types only: both the browser client and the server import this module.
10
+ */
11
+ export {};
12
+ //# sourceMappingURL=protocol.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"protocol.js","sourceRoot":"","sources":["../../src/live/protocol.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG","sourcesContent":["/**\n * The wire frames of a live view (`GET /api/{table}:live`).\n *\n * A live view is one SSE stream that opens with a snapshot of a list query and\n * then delivers only what that view cares about. The server decides membership\n * and placement, so a client applies frames without knowing the filter or sort\n * rules, and a reconnect replays a fresh snapshot instead of a refetch.\n *\n * Types only: both the browser client and the server import this module.\n */\n\nexport type LiveSnapshotFrame<TRow = Record<string, unknown>> = {\n type: 'snapshot'\n items: TRow[]\n operationId?: string\n /** The values the server resolved, not the values the caller sent. */\n sort: string\n order: 'asc' | 'desc'\n limit: number\n /** True when rows exist below the window. */\n hasMore: boolean\n}\n\nexport type LiveUpsertFrame<TRow = Record<string, unknown>> = {\n type: 'upsert'\n record: TRow\n operationId?: string\n /** The id this row follows in the view; `null` means the head. */\n afterId: string | null\n}\n\nexport type LiveRemoveFrame = {\n type: 'remove'\n id: string\n operationId?: string\n}\n\nexport type LiveHeartbeatFrame = { type: 'heartbeat'; intervalMs: number }\n\nexport type LiveDeltaFrame<TRow = Record<string, unknown>> =\n | LiveUpsertFrame<TRow>\n | LiveRemoveFrame\n\nexport type LiveFrame<TRow = Record<string, unknown>> =\n | LiveSnapshotFrame<TRow>\n | LiveDeltaFrame<TRow>\n | LiveHeartbeatFrame\n\n/** The query a live view accepts: the list contract a stream can honor. */\nexport type LiveInput = {\n limit?: number\n sort?: string\n order?: 'asc' | 'desc'\n filters?: Record<string, unknown>\n}\n"]}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * The SSE frames of one response body, decoded as JSON.
3
+ *
4
+ * A live view carries JSON in `data:` lines; keepalive comments and event
5
+ * names never surface. Written here rather than taken from a library, so the
6
+ * browser entry point keeps zero dependencies.
7
+ */
8
+ /**
9
+ * The part of a byte stream this reader uses. Stated structurally, so the DOM
10
+ * and Bun definitions of `ReadableStream` both satisfy it without a cast.
11
+ */
12
+ export type ByteStream = {
13
+ getReader: () => {
14
+ read: () => Promise<{
15
+ done: boolean;
16
+ value?: Uint8Array;
17
+ }>;
18
+ cancel: () => Promise<unknown>;
19
+ };
20
+ };
21
+ export declare function parseSseFrames<TFrame>(body: ByteStream): AsyncGenerator<TFrame, void, void>;
22
+ //# sourceMappingURL=sse.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sse.d.ts","sourceRoot":"","sources":["../../src/live/sse.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH;;;GAGG;AACH,MAAM,MAAM,UAAU,GAAG;IACvB,SAAS,EAAE,MAAM;QACf,IAAI,EAAE,MAAM,OAAO,CAAC;YAAE,IAAI,EAAE,OAAO,CAAC;YAAC,KAAK,CAAC,EAAE,UAAU,CAAA;SAAE,CAAC,CAAA;QAC1D,MAAM,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAA;KAC/B,CAAA;CACF,CAAA;AAED,wBAAuB,cAAc,CAAC,MAAM,EAC1C,IAAI,EAAE,UAAU,GACf,cAAc,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,CAmCpC"}
@@ -0,0 +1,41 @@
1
+ export async function* parseSseFrames(body) {
2
+ const reader = body.getReader();
3
+ const decoder = new TextDecoder();
4
+ let buffer = '';
5
+ let data = [];
6
+ const flush = () => {
7
+ if (data.length === 0)
8
+ return undefined;
9
+ const frame = JSON.parse(data.join('\n'));
10
+ data = [];
11
+ return frame;
12
+ };
13
+ try {
14
+ while (true) {
15
+ const { done, value } = await reader.read();
16
+ if (done)
17
+ break;
18
+ buffer += decoder.decode(value, { stream: true });
19
+ let newline;
20
+ while ((newline = buffer.indexOf('\n')) !== -1) {
21
+ const line = buffer.slice(0, newline);
22
+ buffer = buffer.slice(newline + 1);
23
+ if (line === '') {
24
+ const frame = flush();
25
+ if (frame !== undefined)
26
+ yield frame;
27
+ }
28
+ else if (line.startsWith('data:')) {
29
+ data.push(line.slice(line.startsWith('data: ') ? 6 : 5));
30
+ }
31
+ }
32
+ }
33
+ const frame = flush();
34
+ if (frame !== undefined)
35
+ yield frame;
36
+ }
37
+ finally {
38
+ await reader.cancel().catch(() => { });
39
+ }
40
+ }
41
+ //# sourceMappingURL=sse.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sse.js","sourceRoot":"","sources":["../../src/live/sse.ts"],"names":[],"mappings":"AAkBA,MAAM,CAAC,KAAK,SAAS,CAAC,CAAC,cAAc,CACnC,IAAgB;IAEhB,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAA;IAC/B,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAA;IACjC,IAAI,MAAM,GAAG,EAAE,CAAA;IACf,IAAI,IAAI,GAAa,EAAE,CAAA;IAEvB,MAAM,KAAK,GAAG,GAAuB,EAAE;QACrC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,SAAS,CAAA;QACvC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAW,CAAA;QACnD,IAAI,GAAG,EAAE,CAAA;QACT,OAAO,KAAK,CAAA;IACd,CAAC,CAAA;IAED,IAAI,CAAC;QACH,OAAO,IAAI,EAAE,CAAC;YACZ,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAA;YAC3C,IAAI,IAAI;gBAAE,MAAK;YACf,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAA;YACjD,IAAI,OAAe,CAAA;YACnB,OAAO,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;gBAC/C,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,CAAA;gBACrC,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,OAAO,GAAG,CAAC,CAAC,CAAA;gBAClC,IAAI,IAAI,KAAK,EAAE,EAAE,CAAC;oBAChB,MAAM,KAAK,GAAG,KAAK,EAAE,CAAA;oBACrB,IAAI,KAAK,KAAK,SAAS;wBAAE,MAAM,KAAK,CAAA;gBACtC,CAAC;qBAAM,IAAI,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;oBACpC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;gBAC1D,CAAC;YACH,CAAC;QACH,CAAC;QACD,MAAM,KAAK,GAAG,KAAK,EAAE,CAAA;QACrB,IAAI,KAAK,KAAK,SAAS;YAAE,MAAM,KAAK,CAAA;IACtC,CAAC;YAAS,CAAC;QACT,MAAM,MAAM,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAA;IACvC,CAAC;AACH,CAAC","sourcesContent":["/**\n * The SSE frames of one response body, decoded as JSON.\n *\n * A live view carries JSON in `data:` lines; keepalive comments and event\n * names never surface. Written here rather than taken from a library, so the\n * browser entry point keeps zero dependencies.\n */\n/**\n * The part of a byte stream this reader uses. Stated structurally, so the DOM\n * and Bun definitions of `ReadableStream` both satisfy it without a cast.\n */\nexport type ByteStream = {\n getReader: () => {\n read: () => Promise<{ done: boolean; value?: Uint8Array }>\n cancel: () => Promise<unknown>\n }\n}\n\nexport async function* parseSseFrames<TFrame>(\n body: ByteStream,\n): AsyncGenerator<TFrame, void, void> {\n const reader = body.getReader()\n const decoder = new TextDecoder()\n let buffer = ''\n let data: string[] = []\n\n const flush = (): TFrame | undefined => {\n if (data.length === 0) return undefined\n const frame = JSON.parse(data.join('\\n')) as TFrame\n data = []\n return frame\n }\n\n try {\n while (true) {\n const { done, value } = await reader.read()\n if (done) break\n buffer += decoder.decode(value, { stream: true })\n let newline: number\n while ((newline = buffer.indexOf('\\n')) !== -1) {\n const line = buffer.slice(0, newline)\n buffer = buffer.slice(newline + 1)\n if (line === '') {\n const frame = flush()\n if (frame !== undefined) yield frame\n } else if (line.startsWith('data:')) {\n data.push(line.slice(line.startsWith('data: ') ? 6 : 5))\n }\n }\n }\n const frame = flush()\n if (frame !== undefined) yield frame\n } finally {\n await reader.cancel().catch(() => {})\n }\n}\n"]}
@@ -0,0 +1,8 @@
1
+ export type WorkerstackLogLevel = 'info' | 'warn' | 'error';
2
+ export type WorkerstackLogger = {
3
+ info(...args: unknown[]): void;
4
+ warn(...args: unknown[]): void;
5
+ error(...args: unknown[]): void;
6
+ };
7
+ export declare const consoleLogger: WorkerstackLogger;
8
+ //# sourceMappingURL=logging.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logging.d.ts","sourceRoot":"","sources":["../src/logging.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,mBAAmB,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAA;AAE3D,MAAM,MAAM,iBAAiB,GAAG;IAC9B,IAAI,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAA;IAC9B,IAAI,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAA;IAC9B,KAAK,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAA;CAChC,CAAA;AAED,eAAO,MAAM,aAAa,EAAE,iBAI3B,CAAA"}
@@ -0,0 +1,6 @@
1
+ export const consoleLogger = {
2
+ info: (...args) => console.info(...args),
3
+ warn: (...args) => console.warn(...args),
4
+ error: (...args) => console.error(...args),
5
+ };
6
+ //# sourceMappingURL=logging.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logging.js","sourceRoot":"","sources":["../src/logging.ts"],"names":[],"mappings":"AAQA,MAAM,CAAC,MAAM,aAAa,GAAsB;IAC9C,IAAI,EAAE,CAAC,GAAG,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IACxC,IAAI,EAAE,CAAC,GAAG,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IACxC,KAAK,EAAE,CAAC,GAAG,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;CAC3C,CAAA","sourcesContent":["export type WorkerstackLogLevel = 'info' | 'warn' | 'error'\n\nexport type WorkerstackLogger = {\n info(...args: unknown[]): void\n warn(...args: unknown[]): void\n error(...args: unknown[]): void\n}\n\nexport const consoleLogger: WorkerstackLogger = {\n info: (...args) => console.info(...args),\n warn: (...args) => console.warn(...args),\n error: (...args) => console.error(...args),\n}\n"]}
@@ -0,0 +1,6 @@
1
+ export type ManifestDifference = {
2
+ kind: 'added' | 'removed' | 'changed';
3
+ path: string;
4
+ };
5
+ export declare function diffManifests(expected: unknown, actual: unknown): ManifestDifference[];
6
+ //# sourceMappingURL=manifest-diff.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manifest-diff.d.ts","sourceRoot":"","sources":["../src/manifest-diff.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,kBAAkB,GAAG;IAC/B,IAAI,EAAE,OAAO,GAAG,SAAS,GAAG,SAAS,CAAA;IACrC,IAAI,EAAE,MAAM,CAAA;CACb,CAAA;AAkDD,wBAAgB,aAAa,CAC3B,QAAQ,EAAE,OAAO,EACjB,MAAM,EAAE,OAAO,GACd,kBAAkB,EAAE,CAMtB"}
@@ -0,0 +1,42 @@
1
+ function visit(expected, actual, path, differences) {
2
+ if (Object.is(expected, actual))
3
+ return;
4
+ if (expected === undefined) {
5
+ differences.push({ kind: 'added', path });
6
+ return;
7
+ }
8
+ if (actual === undefined) {
9
+ differences.push({ kind: 'removed', path });
10
+ return;
11
+ }
12
+ if (expected === null ||
13
+ actual === null ||
14
+ typeof expected !== 'object' ||
15
+ typeof actual !== 'object' ||
16
+ Array.isArray(expected) !== Array.isArray(actual)) {
17
+ differences.push({ kind: 'changed', path });
18
+ return;
19
+ }
20
+ if (Array.isArray(expected) && Array.isArray(actual)) {
21
+ const length = Math.max(expected.length, actual.length);
22
+ for (let index = 0; index < length; index++) {
23
+ visit(expected[index], actual[index], `${path}[${index}]`, differences);
24
+ }
25
+ return;
26
+ }
27
+ const expectedRecord = expected;
28
+ const actualRecord = actual;
29
+ const keys = new Set([
30
+ ...Object.keys(expectedRecord),
31
+ ...Object.keys(actualRecord),
32
+ ]);
33
+ for (const key of [...keys].sort()) {
34
+ visit(expectedRecord[key], actualRecord[key], path ? `${path}.${key}` : key, differences);
35
+ }
36
+ }
37
+ export function diffManifests(expected, actual) {
38
+ const differences = [];
39
+ visit(expected, actual, '', differences);
40
+ return differences.sort((a, b) => a.path.localeCompare(b.path) || a.kind.localeCompare(b.kind));
41
+ }
42
+ //# sourceMappingURL=manifest-diff.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manifest-diff.js","sourceRoot":"","sources":["../src/manifest-diff.ts"],"names":[],"mappings":"AAKA,SAAS,KAAK,CACZ,QAAiB,EACjB,MAAe,EACf,IAAY,EACZ,WAAiC;IAEjC,IAAI,MAAM,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,CAAC;QAAE,OAAM;IACvC,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC3B,WAAW,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAA;QACzC,OAAM;IACR,CAAC;IACD,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACzB,WAAW,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;QAC3C,OAAM;IACR,CAAC;IACD,IACE,QAAQ,KAAK,IAAI;QACjB,MAAM,KAAK,IAAI;QACf,OAAO,QAAQ,KAAK,QAAQ;QAC5B,OAAO,MAAM,KAAK,QAAQ;QAC1B,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EACjD,CAAC;QACD,WAAW,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;QAC3C,OAAM;IACR,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QACrD,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAA;QACvD,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC;YAC5C,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,GAAG,IAAI,IAAI,KAAK,GAAG,EAAE,WAAW,CAAC,CAAA;QACzE,CAAC;QACD,OAAM;IACR,CAAC;IACD,MAAM,cAAc,GAAG,QAAmC,CAAA;IAC1D,MAAM,YAAY,GAAG,MAAiC,CAAA;IACtD,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC;QACnB,GAAG,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC;QAC9B,GAAG,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC;KAC7B,CAAC,CAAA;IACF,KAAK,MAAM,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;QACnC,KAAK,CACH,cAAc,CAAC,GAAG,CAAC,EACnB,YAAY,CAAC,GAAG,CAAC,EACjB,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,EAC7B,WAAW,CACZ,CAAA;IACH,CAAC;AACH,CAAC;AAED,MAAM,UAAU,aAAa,CAC3B,QAAiB,EACjB,MAAe;IAEf,MAAM,WAAW,GAAyB,EAAE,CAAA;IAC5C,KAAK,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,WAAW,CAAC,CAAA;IACxC,OAAO,WAAW,CAAC,IAAI,CACrB,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CACvE,CAAA;AACH,CAAC","sourcesContent":["export type ManifestDifference = {\n kind: 'added' | 'removed' | 'changed'\n path: string\n}\n\nfunction visit(\n expected: unknown,\n actual: unknown,\n path: string,\n differences: ManifestDifference[],\n) {\n if (Object.is(expected, actual)) return\n if (expected === undefined) {\n differences.push({ kind: 'added', path })\n return\n }\n if (actual === undefined) {\n differences.push({ kind: 'removed', path })\n return\n }\n if (\n expected === null ||\n actual === null ||\n typeof expected !== 'object' ||\n typeof actual !== 'object' ||\n Array.isArray(expected) !== Array.isArray(actual)\n ) {\n differences.push({ kind: 'changed', path })\n return\n }\n if (Array.isArray(expected) && Array.isArray(actual)) {\n const length = Math.max(expected.length, actual.length)\n for (let index = 0; index < length; index++) {\n visit(expected[index], actual[index], `${path}[${index}]`, differences)\n }\n return\n }\n const expectedRecord = expected as Record<string, unknown>\n const actualRecord = actual as Record<string, unknown>\n const keys = new Set([\n ...Object.keys(expectedRecord),\n ...Object.keys(actualRecord),\n ])\n for (const key of [...keys].sort()) {\n visit(\n expectedRecord[key],\n actualRecord[key],\n path ? `${path}.${key}` : key,\n differences,\n )\n }\n}\n\nexport function diffManifests(\n expected: unknown,\n actual: unknown,\n): ManifestDifference[] {\n const differences: ManifestDifference[] = []\n visit(expected, actual, '', differences)\n return differences.sort(\n (a, b) => a.path.localeCompare(b.path) || a.kind.localeCompare(b.kind),\n )\n}\n"]}
@@ -0,0 +1,87 @@
1
+ import type { Dialect } from './dialect.js';
2
+ import type { EnvConfigInput } from './env.js';
3
+ import type { JobsDefs } from './jobs/define.js';
4
+ import type { MessagingConfig } from './messaging/index.js';
5
+ import type { ResolvedBucket, ResolvedStorageBuckets } from './storage/buckets.js';
6
+ export type ManifestEnvVar = {
7
+ key: string;
8
+ required: boolean;
9
+ scope: 'server' | 'client';
10
+ sensitive: boolean;
11
+ description?: string;
12
+ };
13
+ export type ApiOperationEffect = 'read' | 'mutation' | 'unknown';
14
+ /**
15
+ * One application-declared procedure. `effect` is derived from the declared
16
+ * HTTP method; `unknown` means the application declared no route, and a host
17
+ * must treat it as at least as dangerous as a mutation.
18
+ */
19
+ export type ApiOperation = {
20
+ handle: string;
21
+ operationId: string;
22
+ effect: ApiOperationEffect;
23
+ method?: string;
24
+ path?: string;
25
+ summary?: string;
26
+ };
27
+ export type WorkerstackManifest = {
28
+ version: 4;
29
+ database: {
30
+ dialect: Dialect;
31
+ migrationsDirectory: string;
32
+ tables: {
33
+ exportName: string;
34
+ physicalName: string;
35
+ system: boolean;
36
+ }[];
37
+ };
38
+ storage: {
39
+ defaultBucket: string;
40
+ buckets: {
41
+ name: string;
42
+ visibility: ResolvedBucket['visibility'];
43
+ }[];
44
+ };
45
+ realtime: {
46
+ required: boolean;
47
+ };
48
+ messaging: {
49
+ channels: {
50
+ name: string;
51
+ kind: string;
52
+ provider: string;
53
+ }[];
54
+ };
55
+ environment: ManifestEnvVar[];
56
+ api: {
57
+ operations: ApiOperation[];
58
+ };
59
+ background: {
60
+ jobs: {
61
+ name: string;
62
+ }[];
63
+ cron: {
64
+ name: string;
65
+ schedule: string;
66
+ timezone: 'UTC';
67
+ }[];
68
+ maintenance: {
69
+ name: 'storage-sweep';
70
+ schedule: string;
71
+ timezone: 'UTC';
72
+ }[];
73
+ };
74
+ };
75
+ export declare function parseManifest(value: unknown): WorkerstackManifest;
76
+ export declare function buildManifest(args: {
77
+ schema: Record<string, unknown>;
78
+ dialect: Dialect;
79
+ migrationsDirectory: string;
80
+ storage: ResolvedStorageBuckets;
81
+ envConfig: EnvConfigInput | undefined;
82
+ messaging: MessagingConfig | undefined;
83
+ realtime: boolean;
84
+ jobs: JobsDefs | undefined;
85
+ api: ApiOperation[];
86
+ }): WorkerstackManifest;
87
+ //# sourceMappingURL=manifest.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../src/manifest.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACxC,OAAO,KAAK,EAAE,cAAc,EAAc,MAAM,OAAO,CAAA;AACvD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAC7C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAClD,OAAO,KAAK,EAAE,cAAc,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAA;AAgB/E,MAAM,MAAM,cAAc,GAAG;IAC3B,GAAG,EAAE,MAAM,CAAA;IACX,QAAQ,EAAE,OAAO,CAAA;IACjB,KAAK,EAAE,QAAQ,GAAG,QAAQ,CAAA;IAC1B,SAAS,EAAE,OAAO,CAAA;IAClB,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB,CAAA;AAED,MAAM,MAAM,kBAAkB,GAAG,MAAM,GAAG,UAAU,GAAG,SAAS,CAAA;AAEhE;;;;GAIG;AACH,MAAM,MAAM,YAAY,GAAG;IACzB,MAAM,EAAE,MAAM,CAAA;IACd,WAAW,EAAE,MAAM,CAAA;IACnB,MAAM,EAAE,kBAAkB,CAAA;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB,CAAA;AAED,MAAM,MAAM,mBAAmB,GAAG;IAChC,OAAO,EAAE,CAAC,CAAA;IACV,QAAQ,EAAE;QACR,OAAO,EAAE,OAAO,CAAA;QAChB,mBAAmB,EAAE,MAAM,CAAA;QAC3B,MAAM,EAAE;YAAE,UAAU,EAAE,MAAM,CAAC;YAAC,YAAY,EAAE,MAAM,CAAC;YAAC,MAAM,EAAE,OAAO,CAAA;SAAE,EAAE,CAAA;KACxE,CAAA;IACD,OAAO,EAAE;QACP,aAAa,EAAE,MAAM,CAAA;QACrB,OAAO,EAAE;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,UAAU,EAAE,cAAc,CAAC,YAAY,CAAC,CAAA;SAAE,EAAE,CAAA;KACtE,CAAA;IACD,QAAQ,EAAE;QAAE,QAAQ,EAAE,OAAO,CAAA;KAAE,CAAA;IAC/B,SAAS,EAAE;QACT,QAAQ,EAAE;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAC;YAAC,QAAQ,EAAE,MAAM,CAAA;SAAE,EAAE,CAAA;KAC7D,CAAA;IACD,WAAW,EAAE,cAAc,EAAE,CAAA;IAC7B,GAAG,EAAE;QAAE,UAAU,EAAE,YAAY,EAAE,CAAA;KAAE,CAAA;IACnC,UAAU,EAAE;QACV,IAAI,EAAE;YAAE,IAAI,EAAE,MAAM,CAAA;SAAE,EAAE,CAAA;QACxB,IAAI,EAAE;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,QAAQ,EAAE,MAAM,CAAC;YAAC,QAAQ,EAAE,KAAK,CAAA;SAAE,EAAE,CAAA;QAC3D,WAAW,EAAE;YACX,IAAI,EAAE,eAAe,CAAA;YACrB,QAAQ,EAAE,MAAM,CAAA;YAChB,QAAQ,EAAE,KAAK,CAAA;SAChB,EAAE,CAAA;KACJ,CAAA;CACF,CAAA;AAuMD,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,mBAAmB,CA2CjE;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE;IAClC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC/B,OAAO,EAAE,OAAO,CAAA;IAChB,mBAAmB,EAAE,MAAM,CAAA;IAC3B,OAAO,EAAE,sBAAsB,CAAA;IAC/B,SAAS,EAAE,cAAc,GAAG,SAAS,CAAA;IACrC,SAAS,EAAE,eAAe,GAAG,SAAS,CAAA;IACtC,QAAQ,EAAE,OAAO,CAAA;IACjB,IAAI,EAAE,QAAQ,GAAG,SAAS,CAAA;IAC1B,GAAG,EAAE,YAAY,EAAE,CAAA;CACpB,GAAG,mBAAmB,CA6FtB"}