alchemy 2.0.0-beta.84 → 2.0.0-beta.85

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 (758) hide show
  1. package/THIRD_PARTY_LICENSES.md +2 -2
  2. package/bin/cli.js +14 -6
  3. package/bin/register-oxc.js +16 -12
  4. package/lib/AdoptPolicy.d.ts +73 -0
  5. package/lib/AdoptPolicy.d.ts.map +1 -1
  6. package/lib/AdoptPolicy.js +54 -0
  7. package/lib/AdoptPolicy.js.map +1 -1
  8. package/lib/Alchemist/AuthRegistry.d.ts +31 -0
  9. package/lib/Alchemist/AuthRegistry.d.ts.map +1 -0
  10. package/lib/Alchemist/AuthRegistry.js +95 -0
  11. package/lib/Alchemist/AuthRegistry.js.map +1 -0
  12. package/lib/Alchemist/Drift.d.ts +70 -0
  13. package/lib/Alchemist/Drift.d.ts.map +1 -0
  14. package/lib/Alchemist/Drift.js +54 -0
  15. package/lib/Alchemist/Drift.js.map +1 -0
  16. package/lib/Alchemist/Entrypoint.d.ts +27 -3
  17. package/lib/Alchemist/Entrypoint.d.ts.map +1 -1
  18. package/lib/Alchemist/Entrypoint.js +34 -3
  19. package/lib/Alchemist/Entrypoint.js.map +1 -1
  20. package/lib/Alchemist/Errors.d.ts +1 -1
  21. package/lib/Alchemist/Errors.d.ts.map +1 -1
  22. package/lib/Alchemist/Errors.js +1 -1
  23. package/lib/Alchemist/Errors.js.map +1 -1
  24. package/lib/Alchemist/Logs.d.ts +46 -0
  25. package/lib/Alchemist/Logs.d.ts.map +1 -0
  26. package/lib/Alchemist/{routes/logs.js → Logs.js} +21 -26
  27. package/lib/Alchemist/Logs.js.map +1 -0
  28. package/lib/Alchemist/Nuke.d.ts +69 -0
  29. package/lib/Alchemist/Nuke.d.ts.map +1 -0
  30. package/lib/Alchemist/Nuke.js +35 -0
  31. package/lib/Alchemist/Nuke.js.map +1 -0
  32. package/lib/Alchemist/Operations.d.ts +168 -0
  33. package/lib/Alchemist/Operations.d.ts.map +1 -0
  34. package/lib/Alchemist/Operations.js +165 -0
  35. package/lib/Alchemist/Operations.js.map +1 -0
  36. package/lib/Alchemist/Profile.d.ts +132 -0
  37. package/lib/Alchemist/Profile.d.ts.map +1 -0
  38. package/lib/Alchemist/{routes/profile.js → Profile.js} +20 -21
  39. package/lib/Alchemist/Profile.js.map +1 -0
  40. package/lib/Alchemist/{routes/provider.d.ts → Provider.d.ts} +4 -4
  41. package/lib/Alchemist/Provider.d.ts.map +1 -0
  42. package/lib/Alchemist/{routes/provider.js → Provider.js} +7 -6
  43. package/lib/Alchemist/Provider.js.map +1 -0
  44. package/lib/Alchemist/Runtime.d.ts +10 -6
  45. package/lib/Alchemist/Runtime.d.ts.map +1 -1
  46. package/lib/Alchemist/Runtime.js +38 -2
  47. package/lib/Alchemist/Runtime.js.map +1 -1
  48. package/lib/Alchemist/{routes/state.d.ts → State.d.ts} +36 -16
  49. package/lib/Alchemist/State.d.ts.map +1 -0
  50. package/lib/Alchemist/{routes/state.js → State.js} +50 -15
  51. package/lib/Alchemist/State.js.map +1 -0
  52. package/lib/Alchemist/index.d.ts +11 -10
  53. package/lib/Alchemist/index.d.ts.map +1 -1
  54. package/lib/Alchemist/index.js +10 -9
  55. package/lib/Alchemist/index.js.map +1 -1
  56. package/lib/Apply.d.ts +2 -8
  57. package/lib/Apply.d.ts.map +1 -1
  58. package/lib/Apply.js +364 -184
  59. package/lib/Apply.js.map +1 -1
  60. package/lib/Auth/AuthProvider.d.ts +24 -11
  61. package/lib/Auth/AuthProvider.d.ts.map +1 -1
  62. package/lib/Auth/AuthProvider.js +28 -12
  63. package/lib/Auth/AuthProvider.js.map +1 -1
  64. package/lib/Auth/BrowserOAuth.d.ts +6 -8
  65. package/lib/Auth/BrowserOAuth.d.ts.map +1 -1
  66. package/lib/Auth/BrowserOAuth.js +25 -41
  67. package/lib/Auth/BrowserOAuth.js.map +1 -1
  68. package/lib/Auth/Credentials.d.ts.map +1 -1
  69. package/lib/Auth/Credentials.js +2 -2
  70. package/lib/Auth/Credentials.js.map +1 -1
  71. package/lib/Auth/Demand.d.ts +4 -4
  72. package/lib/Auth/Demand.d.ts.map +1 -1
  73. package/lib/Auth/Demand.js +16 -10
  74. package/lib/Auth/Demand.js.map +1 -1
  75. package/lib/Auth/Env.d.ts +2 -1
  76. package/lib/Auth/Env.d.ts.map +1 -1
  77. package/lib/Auth/Env.js +4 -2
  78. package/lib/Auth/Env.js.map +1 -1
  79. package/lib/Auth/Inspect.d.ts +2 -2
  80. package/lib/Auth/Inspect.d.ts.map +1 -1
  81. package/lib/Auth/Inspect.js +3 -1
  82. package/lib/Auth/Inspect.js.map +1 -1
  83. package/lib/Auth/Lock.d.ts.map +1 -1
  84. package/lib/Auth/Lock.js +4 -8
  85. package/lib/Auth/Lock.js.map +1 -1
  86. package/lib/Auth/OAuthFlow.d.ts +3 -12
  87. package/lib/Auth/OAuthFlow.d.ts.map +1 -1
  88. package/lib/Auth/OAuthFlow.js +7 -17
  89. package/lib/Auth/OAuthFlow.js.map +1 -1
  90. package/lib/Auth/Paths.d.ts +2 -1
  91. package/lib/Auth/Paths.d.ts.map +1 -1
  92. package/lib/Auth/Paths.js +3 -2
  93. package/lib/Auth/Paths.js.map +1 -1
  94. package/lib/Auth/Profile.d.ts +10 -0
  95. package/lib/Auth/Profile.d.ts.map +1 -1
  96. package/lib/Auth/Profile.js +19 -2
  97. package/lib/Auth/Profile.js.map +1 -1
  98. package/lib/Auth/Registry.d.ts +20 -0
  99. package/lib/Auth/Registry.d.ts.map +1 -0
  100. package/lib/Auth/Registry.js +17 -0
  101. package/lib/Auth/Registry.js.map +1 -0
  102. package/lib/Auth/Resolve.d.ts +34 -2
  103. package/lib/Auth/Resolve.d.ts.map +1 -1
  104. package/lib/Auth/Resolve.js +51 -3
  105. package/lib/Auth/Resolve.js.map +1 -1
  106. package/lib/Auth/StoredAuthProvider.d.ts +1 -1
  107. package/lib/Auth/StoredAuthProvider.d.ts.map +1 -1
  108. package/lib/Auth/StoredAuthProvider.js +1 -2
  109. package/lib/Auth/StoredAuthProvider.js.map +1 -1
  110. package/lib/Binding.d.ts.map +1 -1
  111. package/lib/Binding.js +3 -1
  112. package/lib/Binding.js.map +1 -1
  113. package/lib/Bundle/Bundle.d.ts +5 -0
  114. package/lib/Bundle/Bundle.d.ts.map +1 -1
  115. package/lib/Bundle/Bundle.js +36 -6
  116. package/lib/Bundle/Bundle.js.map +1 -1
  117. package/lib/Bundle/NamespaceImportPlugin.d.ts +55 -0
  118. package/lib/Bundle/NamespaceImportPlugin.d.ts.map +1 -0
  119. package/lib/Bundle/NamespaceImportPlugin.js +226 -0
  120. package/lib/Bundle/NamespaceImportPlugin.js.map +1 -0
  121. package/lib/Bundle/index.d.ts +1 -0
  122. package/lib/Bundle/index.d.ts.map +1 -1
  123. package/lib/Bundle/index.js +1 -0
  124. package/lib/Bundle/index.js.map +1 -1
  125. package/lib/Cli/Format.d.ts.map +1 -1
  126. package/lib/Cli/Format.js +2 -1
  127. package/lib/Cli/Format.js.map +1 -1
  128. package/lib/Cli/GlobalLog.d.ts +72 -26
  129. package/lib/Cli/GlobalLog.d.ts.map +1 -1
  130. package/lib/Cli/GlobalLog.js +151 -59
  131. package/lib/Cli/GlobalLog.js.map +1 -1
  132. package/lib/Cli/LoggingCli.d.ts.map +1 -1
  133. package/lib/Cli/LoggingCli.js +24 -18
  134. package/lib/Cli/LoggingCli.js.map +1 -1
  135. package/lib/Cli/PlainCliFormatter.d.ts.map +1 -1
  136. package/lib/Cli/PlainCliFormatter.js +4 -1
  137. package/lib/Cli/PlainCliFormatter.js.map +1 -1
  138. package/lib/Cli/Present.d.ts +14 -0
  139. package/lib/Cli/Present.d.ts.map +1 -0
  140. package/lib/Cli/Present.js +22 -0
  141. package/lib/Cli/Present.js.map +1 -0
  142. package/lib/Cli/SigilRenderer.d.ts +58 -0
  143. package/lib/Cli/SigilRenderer.d.ts.map +1 -0
  144. package/lib/Cli/SigilRenderer.js +39 -0
  145. package/lib/Cli/SigilRenderer.js.map +1 -0
  146. package/lib/Cli/checkVersion.d.ts +11 -14
  147. package/lib/Cli/checkVersion.d.ts.map +1 -1
  148. package/lib/Cli/checkVersion.js +19 -77
  149. package/lib/Cli/checkVersion.js.map +1 -1
  150. package/lib/Cli/commands/confirm.d.ts +2 -2
  151. package/lib/Cli/commands/confirm.d.ts.map +1 -1
  152. package/lib/Cli/commands/confirm.js +3 -3
  153. package/lib/Cli/commands/confirm.js.map +1 -1
  154. package/lib/Cli/commands/deploy.d.ts +4 -4
  155. package/lib/Cli/commands/deploy.d.ts.map +1 -1
  156. package/lib/Cli/commands/deploy.js +40 -39
  157. package/lib/Cli/commands/deploy.js.map +1 -1
  158. package/lib/Cli/commands/dev.d.ts.map +1 -1
  159. package/lib/Cli/commands/dev.js +41 -3
  160. package/lib/Cli/commands/dev.js.map +1 -1
  161. package/lib/Cli/commands/drift.d.ts +2 -2
  162. package/lib/Cli/commands/drift.d.ts.map +1 -1
  163. package/lib/Cli/commands/drift.js +14 -13
  164. package/lib/Cli/commands/drift.js.map +1 -1
  165. package/lib/Cli/commands/errors.d.ts.map +1 -1
  166. package/lib/Cli/commands/errors.js +2 -1
  167. package/lib/Cli/commands/errors.js.map +1 -1
  168. package/lib/Cli/commands/instrument.d.ts +15 -5
  169. package/lib/Cli/commands/instrument.d.ts.map +1 -1
  170. package/lib/Cli/commands/instrument.js +33 -8
  171. package/lib/Cli/commands/instrument.js.map +1 -1
  172. package/lib/Cli/commands/logs.d.ts +1 -1
  173. package/lib/Cli/commands/logs.d.ts.map +1 -1
  174. package/lib/Cli/commands/logs.js +22 -22
  175. package/lib/Cli/commands/logs.js.map +1 -1
  176. package/lib/Cli/commands/nuke.d.ts +3 -2
  177. package/lib/Cli/commands/nuke.d.ts.map +1 -1
  178. package/lib/Cli/commands/nuke.js +19 -17
  179. package/lib/Cli/commands/nuke.js.map +1 -1
  180. package/lib/Cli/commands/profile/commands.d.ts +3 -2
  181. package/lib/Cli/commands/profile/commands.d.ts.map +1 -1
  182. package/lib/Cli/commands/profile/commands.js +26 -27
  183. package/lib/Cli/commands/profile/commands.js.map +1 -1
  184. package/lib/Cli/commands/profile/flows.d.ts +6 -5
  185. package/lib/Cli/commands/profile/flows.d.ts.map +1 -1
  186. package/lib/Cli/commands/profile/flows.js +19 -17
  187. package/lib/Cli/commands/profile/flows.js.map +1 -1
  188. package/lib/Cli/commands/profile/hub.d.ts +1 -2
  189. package/lib/Cli/commands/profile/hub.d.ts.map +1 -1
  190. package/lib/Cli/commands/profile/hub.js +15 -17
  191. package/lib/Cli/commands/profile/hub.js.map +1 -1
  192. package/lib/Cli/commands/provider.d.ts +3 -1
  193. package/lib/Cli/commands/provider.d.ts.map +1 -1
  194. package/lib/Cli/commands/provider.js +4 -4
  195. package/lib/Cli/commands/provider.js.map +1 -1
  196. package/lib/Cli/commands/render.d.ts +2 -4
  197. package/lib/Cli/commands/render.d.ts.map +1 -1
  198. package/lib/Cli/commands/render.js +33 -56
  199. package/lib/Cli/commands/render.js.map +1 -1
  200. package/lib/Cli/commands/state.d.ts +1 -2
  201. package/lib/Cli/commands/state.d.ts.map +1 -1
  202. package/lib/Cli/commands/state.js +74 -27
  203. package/lib/Cli/commands/state.js.map +1 -1
  204. package/lib/Cli/components/capabilities.d.ts +4 -0
  205. package/lib/Cli/components/capabilities.d.ts.map +1 -0
  206. package/lib/Cli/components/capabilities.js +18 -0
  207. package/lib/Cli/components/capabilities.js.map +1 -0
  208. package/lib/Cli/components/types.d.ts +2 -81
  209. package/lib/Cli/components/types.d.ts.map +1 -1
  210. package/lib/Cli/components/types.js +1 -3
  211. package/lib/Cli/components/types.js.map +1 -1
  212. package/lib/Cli/components/ui/Environment.d.ts +3 -3
  213. package/lib/Cli/components/ui/Environment.d.ts.map +1 -1
  214. package/lib/Cli/components/ui/Environment.js.map +1 -1
  215. package/lib/Cli/components/ui/Interactive.d.ts +17 -4
  216. package/lib/Cli/components/ui/Interactive.d.ts.map +1 -1
  217. package/lib/Cli/components/ui/Interactive.js +7 -11
  218. package/lib/Cli/components/ui/Interactive.js.map +1 -1
  219. package/lib/Cli/components/ui/Layout.d.ts +1 -1
  220. package/lib/Cli/components/ui/Layout.d.ts.map +1 -1
  221. package/lib/Cli/components/ui/Layout.js +1 -1
  222. package/lib/Cli/components/ui/Layout.js.map +1 -1
  223. package/lib/Cli/components/ui/Typography.d.ts +1 -1
  224. package/lib/Cli/components/ui/Typography.d.ts.map +1 -1
  225. package/lib/Cli/components/ui/Typography.js +1 -1
  226. package/lib/Cli/components/ui/Typography.js.map +1 -1
  227. package/lib/Cli/components/ui/index.d.ts +2 -2
  228. package/lib/Cli/components/ui/index.js +2 -2
  229. package/lib/Cli/components/view/ApprovePlan.d.ts +1 -1
  230. package/lib/Cli/components/view/ApprovePlan.d.ts.map +1 -1
  231. package/lib/Cli/components/view/ApprovePlan.js +2 -1
  232. package/lib/Cli/components/view/ApprovePlan.js.map +1 -1
  233. package/lib/Cli/components/view/Format.d.ts +5 -0
  234. package/lib/Cli/components/view/Format.d.ts.map +1 -0
  235. package/lib/Cli/components/view/Format.js +39 -0
  236. package/lib/Cli/components/view/Format.js.map +1 -0
  237. package/lib/Cli/components/view/Help.d.ts +2 -2
  238. package/lib/Cli/components/view/Help.d.ts.map +1 -1
  239. package/lib/Cli/components/view/Help.js +7 -5
  240. package/lib/Cli/components/view/Help.js.map +1 -1
  241. package/lib/Cli/components/view/Logo.js +1 -1
  242. package/lib/Cli/components/view/Logo.js.map +1 -1
  243. package/lib/Cli/components/view/Nuke.d.ts +8 -9
  244. package/lib/Cli/components/view/Nuke.d.ts.map +1 -1
  245. package/lib/Cli/components/view/Nuke.js +49 -52
  246. package/lib/Cli/components/view/Nuke.js.map +1 -1
  247. package/lib/Cli/components/view/PlanDecision.d.ts +1 -1
  248. package/lib/Cli/components/view/PlanDecision.d.ts.map +1 -1
  249. package/lib/Cli/components/view/PlanDecision.js +1 -1
  250. package/lib/Cli/components/view/PlanDecision.js.map +1 -1
  251. package/lib/Cli/components/view/PlanRow.js +1 -1
  252. package/lib/Cli/components/view/PlanRow.js.map +1 -1
  253. package/lib/Cli/components/view/PlanTree.d.ts +1 -1
  254. package/lib/Cli/components/view/PlanTree.d.ts.map +1 -1
  255. package/lib/Cli/components/view/PlanTree.js +1 -1
  256. package/lib/Cli/components/view/PlanView.js +1 -1
  257. package/lib/Cli/components/view/PlanView.js.map +1 -1
  258. package/lib/Cli/components/view/Profile.d.ts +1 -1
  259. package/lib/Cli/components/view/Profile.js +2 -2
  260. package/lib/Cli/components/view/Profile.js.map +1 -1
  261. package/lib/Cli/components/view/ProfileDashboard.d.ts +4 -4
  262. package/lib/Cli/components/view/ProfileDashboard.d.ts.map +1 -1
  263. package/lib/Cli/components/view/ProfileDashboard.js +9 -8
  264. package/lib/Cli/components/view/ProfileDashboard.js.map +1 -1
  265. package/lib/Cli/components/view/Prompts.d.ts +3 -3
  266. package/lib/Cli/components/view/Prompts.d.ts.map +1 -1
  267. package/lib/Cli/components/view/Prompts.js +11 -18
  268. package/lib/Cli/components/view/Prompts.js.map +1 -1
  269. package/lib/Cli/components/view/Runtime.d.ts +5 -5
  270. package/lib/Cli/components/view/Runtime.d.ts.map +1 -1
  271. package/lib/Cli/components/view/Runtime.js +136 -219
  272. package/lib/Cli/components/view/Runtime.js.map +1 -1
  273. package/lib/Cli/components/view/SigilCli.d.ts +2 -2
  274. package/lib/Cli/components/view/SigilCli.d.ts.map +1 -1
  275. package/lib/Cli/components/view/SigilCli.js +7 -7
  276. package/lib/Cli/components/view/SigilCli.js.map +1 -1
  277. package/lib/Cli/components/view/StateExplorer.d.ts +1 -1
  278. package/lib/Cli/components/view/StateExplorer.d.ts.map +1 -1
  279. package/lib/Cli/components/view/StateExplorer.js +2 -1
  280. package/lib/Cli/components/view/StateExplorer.js.map +1 -1
  281. package/lib/Cli/components/view/statusStyle.d.ts +2 -2
  282. package/lib/Cli/components/view/statusStyle.d.ts.map +1 -1
  283. package/lib/Cli/components/view/statusStyle.js +1 -1
  284. package/lib/Cli/components/view/statusStyle.js.map +1 -1
  285. package/lib/Cli/exec.d.ts +6 -1
  286. package/lib/Cli/exec.d.ts.map +1 -1
  287. package/lib/Cli/exec.js +29 -34
  288. package/lib/Cli/exec.js.map +1 -1
  289. package/lib/Cli/main.d.ts.map +1 -1
  290. package/lib/Cli/main.js +35 -26
  291. package/lib/Cli/main.js.map +1 -1
  292. package/lib/Cli/selectCli.d.ts +2 -2
  293. package/lib/Cli/selectCli.d.ts.map +1 -1
  294. package/lib/Cli/selectCli.js +2 -2
  295. package/lib/Cli/selectCli.js.map +1 -1
  296. package/lib/Command/Command.js +1 -1
  297. package/lib/Command/Command.js.map +1 -1
  298. package/lib/Command/Dev.d.ts +58 -4
  299. package/lib/Command/Dev.d.ts.map +1 -1
  300. package/lib/Command/Dev.js +87 -30
  301. package/lib/Command/Dev.js.map +1 -1
  302. package/lib/Command/Local.d.ts +1 -1
  303. package/lib/Command/Memo.js +1 -1
  304. package/lib/Command/Memo.js.map +1 -1
  305. package/lib/Command/Providers.d.ts +1 -1
  306. package/lib/Command/Providers.d.ts.map +1 -1
  307. package/lib/Contributions.d.ts +2 -3
  308. package/lib/Contributions.d.ts.map +1 -1
  309. package/lib/Contributions.js +38 -6
  310. package/lib/Contributions.js.map +1 -1
  311. package/lib/DNS/Adapter.d.ts +204 -0
  312. package/lib/DNS/Adapter.d.ts.map +1 -0
  313. package/lib/DNS/Adapter.js +112 -0
  314. package/lib/DNS/Adapter.js.map +1 -0
  315. package/lib/DNS/index.d.ts +2 -0
  316. package/lib/DNS/index.d.ts.map +1 -0
  317. package/lib/DNS/index.js +2 -0
  318. package/lib/DNS/index.js.map +1 -0
  319. package/lib/Deploy.d.ts +7 -2
  320. package/lib/Deploy.d.ts.map +1 -1
  321. package/lib/Deploy.js +8 -3
  322. package/lib/Deploy.js.map +1 -1
  323. package/lib/Destroy.d.ts +5 -8
  324. package/lib/Destroy.d.ts.map +1 -1
  325. package/lib/Destroy.js +10 -7
  326. package/lib/Destroy.js.map +1 -1
  327. package/lib/Diff.d.ts.map +1 -1
  328. package/lib/Diff.js +14 -4
  329. package/lib/Diff.js.map +1 -1
  330. package/lib/Drift.d.ts +7 -7
  331. package/lib/Drift.d.ts.map +1 -1
  332. package/lib/Drift.js +184 -101
  333. package/lib/Drift.js.map +1 -1
  334. package/lib/EvalStack.d.ts +23 -0
  335. package/lib/EvalStack.d.ts.map +1 -0
  336. package/lib/EvalStack.js +47 -0
  337. package/lib/EvalStack.js.map +1 -0
  338. package/lib/Events.d.ts +210 -0
  339. package/lib/Events.d.ts.map +1 -0
  340. package/lib/Events.js +244 -0
  341. package/lib/Events.js.map +1 -0
  342. package/lib/Interaction.d.ts +159 -48
  343. package/lib/Interaction.d.ts.map +1 -1
  344. package/lib/Interaction.js +139 -58
  345. package/lib/Interaction.js.map +1 -1
  346. package/lib/Local/LocalProvider.d.ts.map +1 -1
  347. package/lib/Local/LocalProvider.js +31 -9
  348. package/lib/Local/LocalProvider.js.map +1 -1
  349. package/lib/Local/RpcProvider.d.ts.map +1 -1
  350. package/lib/Local/RpcProvider.js +10 -1
  351. package/lib/Local/RpcProvider.js.map +1 -1
  352. package/lib/Local/RpcProviderProxy.d.ts +16 -0
  353. package/lib/Local/RpcProviderProxy.d.ts.map +1 -1
  354. package/lib/Local/RpcProviderProxy.js +19 -10
  355. package/lib/Local/RpcProviderProxy.js.map +1 -1
  356. package/lib/Local/RpcSerialization.d.ts +3 -2
  357. package/lib/Local/RpcSerialization.d.ts.map +1 -1
  358. package/lib/Local/RpcSerialization.js +13 -10
  359. package/lib/Local/RpcSerialization.js.map +1 -1
  360. package/lib/Local/RpcServer.d.ts +2 -1
  361. package/lib/Local/RpcServer.d.ts.map +1 -1
  362. package/lib/Local/RpcServer.js +19 -14
  363. package/lib/Local/RpcServer.js.map +1 -1
  364. package/lib/Local/RpcServerBun.d.ts.map +1 -1
  365. package/lib/Local/RpcServerBun.js +8 -4
  366. package/lib/Local/RpcServerBun.js.map +1 -1
  367. package/lib/Local/RpcServerEnvironment.d.ts +2 -3
  368. package/lib/Local/RpcServerEnvironment.d.ts.map +1 -1
  369. package/lib/Local/RpcServerEnvironment.js +2 -2
  370. package/lib/Local/RpcServerEnvironment.js.map +1 -1
  371. package/lib/Local/RpcServerNode.d.ts.map +1 -1
  372. package/lib/Local/RpcServerNode.js +5 -1
  373. package/lib/Local/RpcServerNode.js.map +1 -1
  374. package/lib/Local/RpcServerSession.d.ts +1 -1
  375. package/lib/Local/RpcServerSession.d.ts.map +1 -1
  376. package/lib/Local/RpcServerSession.js.map +1 -1
  377. package/lib/Local/RpcSpawner.d.ts +6 -8
  378. package/lib/Local/RpcSpawner.d.ts.map +1 -1
  379. package/lib/Local/RpcSpawner.js +45 -36
  380. package/lib/Local/RpcSpawner.js.map +1 -1
  381. package/lib/Local/Sidecar.d.ts +23 -0
  382. package/lib/Local/Sidecar.d.ts.map +1 -1
  383. package/lib/Local/Sidecar.js +14 -9
  384. package/lib/Local/Sidecar.js.map +1 -1
  385. package/lib/Nuke.d.ts +5 -23
  386. package/lib/Nuke.d.ts.map +1 -1
  387. package/lib/Nuke.js +48 -13
  388. package/lib/Nuke.js.map +1 -1
  389. package/lib/Output.d.ts +19 -1
  390. package/lib/Output.d.ts.map +1 -1
  391. package/lib/Output.js +96 -3
  392. package/lib/Output.js.map +1 -1
  393. package/lib/Plan.d.ts +5 -1
  394. package/lib/Plan.d.ts.map +1 -1
  395. package/lib/Plan.js +111 -33
  396. package/lib/Plan.js.map +1 -1
  397. package/lib/Platform.d.ts.map +1 -1
  398. package/lib/Platform.js +31 -7
  399. package/lib/Platform.js.map +1 -1
  400. package/lib/Provider.d.ts +45 -0
  401. package/lib/Provider.d.ts.map +1 -1
  402. package/lib/Provider.js +2 -2
  403. package/lib/Provider.js.map +1 -1
  404. package/lib/Report.d.ts +17 -195
  405. package/lib/Report.d.ts.map +1 -1
  406. package/lib/Report.js +39 -12
  407. package/lib/Report.js.map +1 -1
  408. package/lib/Runtime/ManagedHttpShutdown.d.ts +17 -0
  409. package/lib/Runtime/ManagedHttpShutdown.d.ts.map +1 -1
  410. package/lib/Runtime/ManagedHttpShutdown.js +11 -2
  411. package/lib/Runtime/ManagedHttpShutdown.js.map +1 -1
  412. package/lib/RuntimeContext.js +1 -1
  413. package/lib/RuntimeContext.js.map +1 -1
  414. package/lib/Stack.d.ts +49 -29
  415. package/lib/Stack.d.ts.map +1 -1
  416. package/lib/Stack.js +25 -31
  417. package/lib/Stack.js.map +1 -1
  418. package/lib/State/BucketState.d.ts.map +1 -1
  419. package/lib/State/BucketState.js +43 -14
  420. package/lib/State/BucketState.js.map +1 -1
  421. package/lib/State/LocalState.d.ts.map +1 -1
  422. package/lib/State/LocalState.js +3 -3
  423. package/lib/State/LocalState.js.map +1 -1
  424. package/lib/State/Provisioning.d.ts +5 -0
  425. package/lib/State/Provisioning.d.ts.map +1 -1
  426. package/lib/State/Provisioning.js +3 -1
  427. package/lib/State/Provisioning.js.map +1 -1
  428. package/lib/State/ResourceState.d.ts +2 -0
  429. package/lib/State/ResourceState.d.ts.map +1 -1
  430. package/lib/State/State.d.ts +26 -0
  431. package/lib/State/State.d.ts.map +1 -1
  432. package/lib/State/StateEncoding.d.ts +7 -0
  433. package/lib/State/StateEncoding.d.ts.map +1 -1
  434. package/lib/State/StateEncoding.js +19 -0
  435. package/lib/State/StateEncoding.js.map +1 -1
  436. package/lib/State/index.js +2 -2
  437. package/lib/State/index.js.map +1 -1
  438. package/lib/Telemetry/Layer.d.ts +2 -5
  439. package/lib/Telemetry/Layer.d.ts.map +1 -1
  440. package/lib/Telemetry/Layer.js +3 -23
  441. package/lib/Telemetry/Layer.js.map +1 -1
  442. package/lib/Telemetry/Metrics.d.ts +1 -1
  443. package/lib/Telemetry/Metrics.d.ts.map +1 -1
  444. package/lib/TelemetryRelay.js +1 -1
  445. package/lib/TelemetryRelay.js.map +1 -1
  446. package/lib/TelemetryRuntime.d.ts +1 -1
  447. package/lib/TelemetryRuntime.d.ts.map +1 -1
  448. package/lib/TelemetryRuntime.js +4 -3
  449. package/lib/TelemetryRuntime.js.map +1 -1
  450. package/lib/Util/ConsoleSink.d.ts +23 -2
  451. package/lib/Util/ConsoleSink.d.ts.map +1 -1
  452. package/lib/Util/ConsoleSink.js +54 -14
  453. package/lib/Util/ConsoleSink.js.map +1 -1
  454. package/lib/Util/LogAnnotation.d.ts +19 -0
  455. package/lib/Util/LogAnnotation.d.ts.map +1 -0
  456. package/lib/Util/LogAnnotation.js +19 -0
  457. package/lib/Util/LogAnnotation.js.map +1 -0
  458. package/lib/Util/LogRecord.d.ts +281 -0
  459. package/lib/Util/LogRecord.d.ts.map +1 -0
  460. package/lib/Util/LogRecord.js +267 -0
  461. package/lib/Util/LogRecord.js.map +1 -0
  462. package/lib/Util/Node.d.ts +9 -0
  463. package/lib/Util/Node.d.ts.map +1 -1
  464. package/lib/Util/Node.js +10 -6
  465. package/lib/Util/Node.js.map +1 -1
  466. package/lib/Util/PlatformServices.d.ts +3 -2
  467. package/lib/Util/PlatformServices.d.ts.map +1 -1
  468. package/lib/Util/PlatformServices.js +6 -2
  469. package/lib/Util/PlatformServices.js.map +1 -1
  470. package/lib/Util/ResourceOutput.d.ts +18 -10
  471. package/lib/Util/ResourceOutput.d.ts.map +1 -1
  472. package/lib/Util/ResourceOutput.js +22 -23
  473. package/lib/Util/ResourceOutput.js.map +1 -1
  474. package/lib/Util/Shutdown.d.ts +10 -0
  475. package/lib/Util/Shutdown.d.ts.map +1 -0
  476. package/lib/Util/Shutdown.js +32 -0
  477. package/lib/Util/Shutdown.js.map +1 -0
  478. package/lib/Util/Terminal.d.ts +2 -4
  479. package/lib/Util/Terminal.d.ts.map +1 -1
  480. package/lib/Util/Terminal.js +3 -11
  481. package/lib/Util/Terminal.js.map +1 -1
  482. package/lib/Util/TraceParent.d.ts +32 -0
  483. package/lib/Util/TraceParent.d.ts.map +1 -0
  484. package/lib/Util/TraceParent.js +42 -0
  485. package/lib/Util/TraceParent.js.map +1 -0
  486. package/lib/Util/base64.d.ts +7 -0
  487. package/lib/Util/base64.d.ts.map +1 -0
  488. package/lib/Util/base64.js +24 -0
  489. package/lib/Util/base64.js.map +1 -0
  490. package/lib/Util/cached-function.d.ts +5 -0
  491. package/lib/Util/cached-function.d.ts.map +1 -1
  492. package/lib/Util/cached-function.js +13 -8
  493. package/lib/Util/cached-function.js.map +1 -1
  494. package/lib/Util/data.d.ts +1 -1
  495. package/lib/Util/data.d.ts.map +1 -1
  496. package/lib/Util/data.js +1 -1
  497. package/lib/Util/data.js.map +1 -1
  498. package/lib/Util/equal.d.ts.map +1 -1
  499. package/lib/Util/equal.js +3 -2
  500. package/lib/Util/equal.js.map +1 -1
  501. package/lib/Util/extraFiles.d.ts.map +1 -1
  502. package/lib/Util/extraFiles.js +5 -5
  503. package/lib/Util/extraFiles.js.map +1 -1
  504. package/lib/Util/interactive.js +1 -1
  505. package/lib/Website/AstroOutput.d.ts +42 -0
  506. package/lib/Website/AstroOutput.d.ts.map +1 -0
  507. package/lib/Website/AstroOutput.js +34 -0
  508. package/lib/Website/AstroOutput.js.map +1 -0
  509. package/lib/Website/FrontendCore.d.ts +1 -1
  510. package/lib/Workflows.d.ts +9 -0
  511. package/lib/Workflows.d.ts.map +1 -1
  512. package/lib/Workflows.js +8 -0
  513. package/lib/Workflows.js.map +1 -1
  514. package/lib/index.d.ts +1 -0
  515. package/lib/index.d.ts.map +1 -1
  516. package/lib/index.js +1 -0
  517. package/lib/index.js.map +1 -1
  518. package/package.json +21 -28
  519. package/src/AdoptPolicy.ts +76 -0
  520. package/src/Alchemist/AuthRegistry.ts +164 -0
  521. package/src/Alchemist/Drift.ts +103 -0
  522. package/src/Alchemist/Entrypoint.ts +51 -3
  523. package/src/Alchemist/Errors.ts +1 -1
  524. package/src/Alchemist/{routes/logs.ts → Logs.ts} +28 -30
  525. package/src/Alchemist/Nuke.ts +90 -0
  526. package/src/Alchemist/Operations.ts +309 -0
  527. package/src/Alchemist/{routes/profile.ts → Profile.ts} +22 -22
  528. package/src/Alchemist/{routes/provider.ts → Provider.ts} +7 -6
  529. package/src/Alchemist/Runtime.ts +46 -12
  530. package/src/Alchemist/{routes/state.ts → State.ts} +78 -21
  531. package/src/Alchemist/index.ts +32 -15
  532. package/src/Apply.ts +513 -274
  533. package/src/Auth/AuthProvider.ts +76 -23
  534. package/src/Auth/BrowserOAuth.ts +37 -60
  535. package/src/Auth/Credentials.ts +2 -4
  536. package/src/Auth/Demand.ts +27 -18
  537. package/src/Auth/Env.ts +13 -8
  538. package/src/Auth/Inspect.ts +5 -2
  539. package/src/Auth/Lock.ts +4 -8
  540. package/src/Auth/OAuthFlow.ts +12 -26
  541. package/src/Auth/Paths.ts +3 -2
  542. package/src/Auth/Profile.ts +30 -2
  543. package/src/Auth/Registry.ts +27 -0
  544. package/src/Auth/Resolve.ts +75 -3
  545. package/src/Auth/StoredAuthProvider.ts +1 -2
  546. package/src/Binding.ts +3 -4
  547. package/src/Bundle/Bundle.ts +58 -7
  548. package/src/Bundle/NamespaceImportPlugin.ts +259 -0
  549. package/src/Bundle/index.ts +1 -0
  550. package/src/Cli/Format.ts +2 -1
  551. package/src/Cli/GlobalLog.ts +206 -68
  552. package/src/Cli/LoggingCli.ts +33 -20
  553. package/src/Cli/PlainCliFormatter.ts +4 -1
  554. package/src/Cli/Present.ts +34 -0
  555. package/src/Cli/SigilRenderer.ts +75 -0
  556. package/src/Cli/checkVersion.ts +25 -78
  557. package/src/Cli/commands/confirm.ts +3 -3
  558. package/src/Cli/commands/deploy.ts +53 -44
  559. package/src/Cli/commands/dev.ts +65 -7
  560. package/src/Cli/commands/drift.ts +20 -16
  561. package/src/Cli/commands/errors.ts +2 -3
  562. package/src/Cli/commands/instrument.ts +39 -8
  563. package/src/Cli/commands/logs.ts +22 -30
  564. package/src/Cli/commands/nuke.ts +25 -26
  565. package/src/Cli/commands/profile/commands.ts +34 -34
  566. package/src/Cli/commands/profile/flows.ts +26 -20
  567. package/src/Cli/commands/profile/hub.ts +16 -18
  568. package/src/Cli/commands/provider.ts +4 -4
  569. package/src/Cli/commands/render.ts +43 -71
  570. package/src/Cli/commands/state.ts +113 -33
  571. package/src/Cli/components/capabilities.ts +20 -0
  572. package/src/Cli/components/types.ts +13 -99
  573. package/src/Cli/components/ui/Environment.tsx +5 -5
  574. package/src/Cli/components/ui/Interactive.tsx +24 -15
  575. package/src/Cli/components/ui/Layout.tsx +1 -1
  576. package/src/Cli/components/ui/Typography.tsx +1 -1
  577. package/src/Cli/components/ui/index.ts +2 -2
  578. package/src/Cli/components/view/ApprovePlan.tsx +2 -1
  579. package/src/Cli/components/view/Format.tsx +58 -0
  580. package/src/Cli/components/view/Help.tsx +14 -17
  581. package/src/Cli/components/view/Logo.tsx +1 -1
  582. package/src/Cli/components/view/Nuke.tsx +74 -49
  583. package/src/Cli/components/view/PlanDecision.tsx +1 -1
  584. package/src/Cli/components/view/PlanRow.tsx +1 -1
  585. package/src/Cli/components/view/PlanTree.ts +2 -2
  586. package/src/Cli/components/view/PlanView.tsx +2 -2
  587. package/src/Cli/components/view/Profile.tsx +2 -2
  588. package/src/Cli/components/view/ProfileDashboard.tsx +12 -11
  589. package/src/Cli/components/view/Prompts.tsx +37 -75
  590. package/src/Cli/components/view/Runtime.tsx +132 -238
  591. package/src/Cli/components/view/SigilCli.tsx +12 -12
  592. package/src/Cli/components/view/StateExplorer.tsx +2 -1
  593. package/src/Cli/components/view/statusStyle.ts +2 -2
  594. package/src/Cli/exec.ts +48 -41
  595. package/src/Cli/main.ts +52 -33
  596. package/src/Cli/selectCli.ts +3 -3
  597. package/src/Command/Command.ts +1 -1
  598. package/src/Command/Dev.ts +129 -36
  599. package/src/Command/Memo.ts +1 -1
  600. package/src/Contributions.ts +42 -8
  601. package/src/DNS/Adapter.ts +289 -0
  602. package/src/DNS/index.ts +1 -0
  603. package/src/Deploy.ts +11 -3
  604. package/src/Destroy.ts +19 -13
  605. package/src/Diff.ts +17 -4
  606. package/src/Drift.ts +256 -127
  607. package/src/EvalStack.ts +97 -0
  608. package/src/Events.ts +296 -0
  609. package/src/Interaction.ts +332 -97
  610. package/src/Local/LocalProvider.ts +40 -9
  611. package/src/Local/RpcProvider.ts +11 -1
  612. package/src/Local/RpcProviderProxy.ts +29 -21
  613. package/src/Local/RpcSerialization.ts +32 -17
  614. package/src/Local/RpcServer.ts +25 -17
  615. package/src/Local/RpcServerBun.ts +10 -6
  616. package/src/Local/RpcServerEnvironment.ts +2 -2
  617. package/src/Local/RpcServerNode.ts +8 -1
  618. package/src/Local/RpcServerSession.ts +2 -2
  619. package/src/Local/RpcSpawner.ts +61 -37
  620. package/src/Local/Sidecar.ts +10 -1
  621. package/src/Nuke.ts +66 -43
  622. package/src/Output.ts +120 -7
  623. package/src/Plan.ts +140 -52
  624. package/src/Platform.ts +47 -18
  625. package/src/Provider.ts +48 -3
  626. package/src/Report.ts +77 -275
  627. package/src/Runtime/ManagedHttpShutdown.ts +21 -4
  628. package/src/RuntimeContext.ts +1 -1
  629. package/src/Stack.ts +113 -135
  630. package/src/State/BucketState.ts +53 -21
  631. package/src/State/LocalState.ts +7 -9
  632. package/src/State/Provisioning.ts +8 -1
  633. package/src/State/ResourceState.ts +2 -0
  634. package/src/State/State.ts +30 -0
  635. package/src/State/StateEncoding.ts +22 -0
  636. package/src/State/index.ts +2 -2
  637. package/src/Telemetry/Layer.ts +3 -24
  638. package/src/Telemetry/Metrics.ts +1 -1
  639. package/src/TelemetryRelay.ts +1 -1
  640. package/src/TelemetryRuntime.ts +8 -8
  641. package/src/Util/ConsoleSink.ts +76 -13
  642. package/src/Util/LogAnnotation.ts +18 -0
  643. package/src/Util/LogRecord.ts +386 -0
  644. package/src/Util/Node.ts +20 -6
  645. package/src/Util/PlatformServices.ts +17 -4
  646. package/src/Util/ResourceOutput.ts +26 -25
  647. package/src/Util/Shutdown.ts +52 -0
  648. package/src/Util/Terminal.ts +3 -20
  649. package/src/Util/TraceParent.ts +70 -0
  650. package/src/Util/base64.ts +22 -0
  651. package/src/Util/cached-function.ts +30 -19
  652. package/src/Util/data.ts +2 -2
  653. package/src/Util/equal.ts +3 -2
  654. package/src/Util/extraFiles.ts +9 -8
  655. package/src/Util/interactive.ts +1 -1
  656. package/src/Website/AstroOutput.ts +83 -0
  657. package/src/Workflows.ts +11 -0
  658. package/src/index.ts +1 -0
  659. package/lib/Alchemist/Progress.d.ts +0 -16
  660. package/lib/Alchemist/Progress.d.ts.map +0 -1
  661. package/lib/Alchemist/Progress.js +0 -123
  662. package/lib/Alchemist/Progress.js.map +0 -1
  663. package/lib/Alchemist/Session.d.ts +0 -116
  664. package/lib/Alchemist/Session.d.ts.map +0 -1
  665. package/lib/Alchemist/Session.js +0 -212
  666. package/lib/Alchemist/Session.js.map +0 -1
  667. package/lib/Alchemist/routes/drift.d.ts +0 -55
  668. package/lib/Alchemist/routes/drift.d.ts.map +0 -1
  669. package/lib/Alchemist/routes/drift.js +0 -52
  670. package/lib/Alchemist/routes/drift.js.map +0 -1
  671. package/lib/Alchemist/routes/logs.d.ts +0 -41
  672. package/lib/Alchemist/routes/logs.d.ts.map +0 -1
  673. package/lib/Alchemist/routes/logs.js.map +0 -1
  674. package/lib/Alchemist/routes/nuke.d.ts +0 -46
  675. package/lib/Alchemist/routes/nuke.d.ts.map +0 -1
  676. package/lib/Alchemist/routes/nuke.js +0 -80
  677. package/lib/Alchemist/routes/nuke.js.map +0 -1
  678. package/lib/Alchemist/routes/profile.d.ts +0 -133
  679. package/lib/Alchemist/routes/profile.d.ts.map +0 -1
  680. package/lib/Alchemist/routes/profile.js.map +0 -1
  681. package/lib/Alchemist/routes/provider.d.ts.map +0 -1
  682. package/lib/Alchemist/routes/provider.js.map +0 -1
  683. package/lib/Alchemist/routes/stack.d.ts +0 -95
  684. package/lib/Alchemist/routes/stack.d.ts.map +0 -1
  685. package/lib/Alchemist/routes/stack.js +0 -73
  686. package/lib/Alchemist/routes/stack.js.map +0 -1
  687. package/lib/Alchemist/routes/state.d.ts.map +0 -1
  688. package/lib/Alchemist/routes/state.js.map +0 -1
  689. package/lib/Cli/CliKit/CliKit.d.ts +0 -92
  690. package/lib/Cli/CliKit/CliKit.d.ts.map +0 -1
  691. package/lib/Cli/CliKit/CliKit.js +0 -27
  692. package/lib/Cli/CliKit/CliKit.js.map +0 -1
  693. package/lib/Cli/CliKit/index.d.ts +0 -9
  694. package/lib/Cli/CliKit/index.d.ts.map +0 -1
  695. package/lib/Cli/CliKit/index.js +0 -9
  696. package/lib/Cli/CliKit/index.js.map +0 -1
  697. package/lib/Cli/CliKit/interaction.d.ts +0 -13
  698. package/lib/Cli/CliKit/interaction.d.ts.map +0 -1
  699. package/lib/Cli/CliKit/interaction.js +0 -17
  700. package/lib/Cli/CliKit/interaction.js.map +0 -1
  701. package/lib/Cli/CliKit/layer.d.ts +0 -7
  702. package/lib/Cli/CliKit/layer.d.ts.map +0 -1
  703. package/lib/Cli/CliKit/layer.js +0 -33
  704. package/lib/Cli/CliKit/layer.js.map +0 -1
  705. package/lib/Local/DevLog.d.ts +0 -32
  706. package/lib/Local/DevLog.d.ts.map +0 -1
  707. package/lib/Local/DevLog.js +0 -112
  708. package/lib/Local/DevLog.js.map +0 -1
  709. package/lib/Test/Alchemy.d.ts +0 -79
  710. package/lib/Test/Alchemy.d.ts.map +0 -1
  711. package/lib/Test/Alchemy.js +0 -193
  712. package/lib/Test/Alchemy.js.map +0 -1
  713. package/lib/Test/Bun.d.ts +0 -69
  714. package/lib/Test/Bun.d.ts.map +0 -1
  715. package/lib/Test/Bun.js +0 -126
  716. package/lib/Test/Bun.js.map +0 -1
  717. package/lib/Test/Core.d.ts +0 -277
  718. package/lib/Test/Core.d.ts.map +0 -1
  719. package/lib/Test/Core.js +0 -362
  720. package/lib/Test/Core.js.map +0 -1
  721. package/lib/Test/Http.d.ts +0 -109
  722. package/lib/Test/Http.d.ts.map +0 -1
  723. package/lib/Test/Http.js +0 -123
  724. package/lib/Test/Http.js.map +0 -1
  725. package/lib/Test/TestState.d.ts +0 -12
  726. package/lib/Test/TestState.d.ts.map +0 -1
  727. package/lib/Test/TestState.js +0 -15
  728. package/lib/Test/TestState.js.map +0 -1
  729. package/lib/Test/Vitest.d.ts +0 -60
  730. package/lib/Test/Vitest.d.ts.map +0 -1
  731. package/lib/Test/Vitest.js +0 -132
  732. package/lib/Test/Vitest.js.map +0 -1
  733. package/lib/Test/index.d.ts +0 -3
  734. package/lib/Test/index.d.ts.map +0 -1
  735. package/lib/Test/index.js +0 -3
  736. package/lib/Test/index.js.map +0 -1
  737. package/lib/Util/FileLogger.d.ts +0 -7
  738. package/lib/Util/FileLogger.d.ts.map +0 -1
  739. package/lib/Util/FileLogger.js +0 -16
  740. package/lib/Util/FileLogger.js.map +0 -1
  741. package/src/Alchemist/Progress.ts +0 -167
  742. package/src/Alchemist/Session.ts +0 -415
  743. package/src/Alchemist/routes/drift.ts +0 -87
  744. package/src/Alchemist/routes/nuke.ts +0 -131
  745. package/src/Alchemist/routes/stack.ts +0 -173
  746. package/src/Cli/CliKit/CliKit.ts +0 -159
  747. package/src/Cli/CliKit/index.ts +0 -41
  748. package/src/Cli/CliKit/interaction.ts +0 -19
  749. package/src/Cli/CliKit/layer.ts +0 -44
  750. package/src/Local/DevLog.ts +0 -122
  751. package/src/Test/Alchemy.ts +0 -334
  752. package/src/Test/Bun.ts +0 -230
  753. package/src/Test/Core.ts +0 -785
  754. package/src/Test/Http.ts +0 -201
  755. package/src/Test/TestState.ts +0 -35
  756. package/src/Test/Vitest.ts +0 -239
  757. package/src/Test/index.ts +0 -2
  758. package/src/Util/FileLogger.ts +0 -20
@@ -15,7 +15,6 @@ import type { ArtifactStore } from "./Artifacts.ts";
15
15
  import type { AuthProviders } from "./Auth/AuthProvider.ts";
16
16
  import type { CredentialsStore } from "./Auth/Credentials.ts";
17
17
  import type { ProfileStore } from "./Auth/Profile.ts";
18
- import type { CliKit } from "./Cli/CliKit/CliKit.ts";
19
18
  import type { Interaction } from "./Interaction.ts";
20
19
  import type { State } from "./State/State.ts";
21
20
  import { UserFacingError } from "./UserFacingError.ts";
@@ -87,8 +86,8 @@ export type HostServices =
87
86
  /** What auth layers and state stores run under: the host's services and the auth registry. */
88
87
  export type ContributionServices = HostServices | AuthProviders;
89
88
 
90
- /** What a CLI command runs under: the host's services and the terminal. */
91
- export type CliServices = HostServices | CliKit;
89
+ /** What a CLI command runs under: the host's services, `Interaction` included. */
90
+ export type CliServices = HostServices;
92
91
 
93
92
  /** A provider's own failure: any tagged error with a message for the user. */
94
93
  export type ContributionFailure = { readonly _tag: string; readonly message: string };
@@ -223,7 +222,7 @@ const Manifest = Schema.Struct({
223
222
  dependencies: Schema.optional(Schema.Record(Schema.String, Schema.String)),
224
223
  devDependencies: Schema.optional(Schema.Record(Schema.String, Schema.String)),
225
224
  alchemy: Schema.optional(
226
- Schema.Struct({ contributes: Schema.optional(Schema.Array(Schema.String)) }),
225
+ Schema.Struct({ contributes: Schema.String.pipe(Schema.Array, Schema.optional) }),
227
226
  ),
228
227
  });
229
228
 
@@ -282,6 +281,31 @@ const candidatePackages = Effect.fn(function* (dir: string) {
282
281
  }
283
282
  });
284
283
 
284
+ /** The root `package.json` name of alchemy's own monorepo. */
285
+ const MONOREPO_NAME = "@alchemy.run/monorepo";
286
+
287
+ /**
288
+ * The `package.json` of every sibling package when alchemy runs from its own
289
+ * monorepo checkout (`packages/alchemy` under a root named
290
+ * {@link MONOREPO_NAME}). Empty for every installed copy of alchemy.
291
+ */
292
+ const monorepoManifests = Effect.gen(function* () {
293
+ const fs = yield* FileSystem.FileSystem;
294
+ const path = yield* Path.Path;
295
+ const own = path.dirname(yield* path.fromFileUrl(new URL("../package.json", import.meta.url)));
296
+ const packages = path.dirname(own);
297
+ const root = yield* readManifest(path.join(path.dirname(packages), "package.json")).pipe(
298
+ Effect.orElseSucceed(() => undefined),
299
+ );
300
+ if (root?.name !== MONOREPO_NAME) return [];
301
+ const files: string[] = [];
302
+ for (const entry of yield* fs.readDirectory(packages)) {
303
+ const file = path.join(packages, entry, "package.json");
304
+ if (path.join(packages, entry) !== own && (yield* fs.exists(file))) files.push(file);
305
+ }
306
+ return files.sort();
307
+ });
308
+
285
309
  /** The npm scope of alchemy's own provider packages. */
286
310
  const PACKAGE_SCOPE = "@alchemy.run";
287
311
 
@@ -408,12 +432,10 @@ const discover = Effect.fn("Contributions.discover")(function* (cwd: string) {
408
432
  // The project's packages that declare providers, before alchemy's own: the
409
433
  // first provider with a name wins, so a provider that moved into its own
410
434
  // package replaces the copy still inside alchemy.
411
- const dependencies = [...(yield* candidatePackages(cwd))].filter((name) => name !== own?.name);
412
- for (const name of dependencies) {
413
- const file = yield* findDependencyManifest(cwd, name);
414
- if (file === undefined) continue;
435
+ const declare = Effect.fn(function* (file: string, fallback = false) {
415
436
  const manifest = yield* readManifest(file);
416
437
  for (const specifier of manifest?.alchemy?.contributes ?? []) {
438
+ if (fallback && declared.has(specifier)) continue;
417
439
  declared.set(specifier, {
418
440
  specifier,
419
441
  manifest: {
@@ -425,6 +447,18 @@ const discover = Effect.fn("Contributions.discover")(function* (cwd: string) {
425
447
  },
426
448
  });
427
449
  }
450
+ });
451
+ const dependencies = [...(yield* candidatePackages(cwd))].filter((name) => name !== own?.name);
452
+ for (const name of dependencies) {
453
+ const file = yield* findDependencyManifest(cwd, name);
454
+ if (file !== undefined) yield* declare(file);
455
+ }
456
+ // Developing alchemy itself: every package in the monorepo, so the CLI sees
457
+ // all providers without the root installing them. Installed copies win.
458
+ for (const file of yield* monorepoManifests) {
459
+ yield* declare(file, true).pipe(
460
+ Effect.catch((error) => Effect.logDebug(`Skipping ${file}: ${error.message}`)),
461
+ );
428
462
  }
429
463
  // alchemy's own: the providers that still live in this package.
430
464
  for (const specifier of own?.alchemy?.contributes ?? []) declared.set(specifier, { specifier });
@@ -0,0 +1,289 @@
1
+ /**
2
+ * Pluggable DNS for custom domains.
3
+ *
4
+ * A custom domain has two independent halves: the platform that SERVES the
5
+ * hostname (CloudFront, an ALB, API Gateway, a Worker, a Fly App, …) and the
6
+ * DNS host that PUBLISHES its records (Route 53, Cloudflare, Hetzner DNS, …).
7
+ * `domain.dns` names the DNS host.
8
+ *
9
+ * The prop value is a {@link DnsConfig}: plain, serializable data
10
+ * (`{ type: "Cloudflare.DNS", zone?, options? }`) that is safe in any
11
+ * Resource or Platform prop, in state, and across the `alchemy dev` sidecar.
12
+ * Each DNS host contributes:
13
+ *
14
+ * - a data constructor (`Cloudflare.DNS.Adapter()`,
15
+ * `AWS.Route53.Adapter()`, `Hetzner.DNS.Adapter()`), and
16
+ * - a {@link DnsAdapter} — functions that declare its record resources —
17
+ * registered with {@link adapterLayer} from its own `providers()` layer.
18
+ *
19
+ * A composite (or a Platform's `transformProps` hook) resolves the adapter
20
+ * with {@link resolve} while the stack program is being built, and the
21
+ * adapter DECLARES ordinary record resources of its own cloud. No
22
+ * reconciler ever calls an adapter, so destroy and orphan cleanup work from
23
+ * state alone, and the platform packages never import each other.
24
+ */
25
+ import * as Context from "effect/Context";
26
+ import * as Data from "effect/Data";
27
+ import * as Effect from "effect/Effect";
28
+ import * as Layer from "effect/Layer";
29
+ import * as Option from "effect/Option";
30
+ import type { Input } from "../Input.ts";
31
+ import * as Output from "../Output.ts";
32
+ import type { Resource, ResourceLike } from "../Resource.ts";
33
+
34
+ /**
35
+ * Which DNS host publishes a custom domain's records. Returned by a DNS
36
+ * host's adapter constructor, e.g. `Cloudflare.DNS.Adapter()`.
37
+ */
38
+ export interface DnsConfig<Type extends string = string> {
39
+ /**
40
+ * The adapter implementation to resolve (e.g. `"Cloudflare.DNS"`,
41
+ * `"AWS.Route53"`, `"Hetzner.DNS"`). Registered by the DNS host's
42
+ * `providers()` layer.
43
+ */
44
+ readonly type: Type;
45
+ /**
46
+ * The zone that owns the records, interpreted by the DNS host: a
47
+ * Cloudflare zone id or name, a Route 53 hosted zone id, a Hetzner zone
48
+ * id or name. Inferred from each hostname when omitted.
49
+ */
50
+ readonly zone?: Input<string> | undefined;
51
+ /**
52
+ * Host-specific options, e.g. `{ proxied: true }` for Cloudflare.
53
+ */
54
+ readonly options?: { readonly [key: string]: unknown } | undefined;
55
+ }
56
+
57
+ /** Record types a DNS adapter publishes. */
58
+ export type DnsRecordType = "A" | "AAAA" | "CNAME" | "TXT";
59
+
60
+ /**
61
+ * One record to publish — typically computed from another resource's
62
+ * outputs (ACM validation CNAMEs, a platform's ownership TXT, …).
63
+ */
64
+ export interface DnsRecord {
65
+ /** Fully qualified record name (a trailing dot is ignored). */
66
+ name: string;
67
+ /** Record type. */
68
+ type: DnsRecordType;
69
+ /** Record value (a trailing dot on hostnames is ignored). */
70
+ value: string;
71
+ /**
72
+ * TTL in seconds. Hosts with an "automatic" setting use it when omitted.
73
+ */
74
+ ttl?: number;
75
+ }
76
+
77
+ /**
78
+ * A hostname target: a CNAME to `hostname`, or — on Route 53 — an alias
79
+ * record when `route53Alias` is set.
80
+ */
81
+ export interface DnsHostnameTarget {
82
+ /** Hostname to point at, e.g. `d123.cloudfront.net`. */
83
+ hostname: Input<string>;
84
+ /**
85
+ * Route 53 alias details of an AWS target (CloudFront, ELB, API
86
+ * Gateway). Used by the Route 53 adapter to write an `A` (+ `AAAA`)
87
+ * alias record; other hosts write a `CNAME` to {@link hostname}.
88
+ */
89
+ route53Alias?: {
90
+ /** Route 53 hosted zone id of the AWS target. */
91
+ hostedZoneId: Input<string>;
92
+ /** Route 53 alias `EvaluateTargetHealth`. */
93
+ evaluateTargetHealth?: boolean;
94
+ };
95
+ }
96
+
97
+ /** An address target: `A` / `AAAA` records. */
98
+ export interface DnsAddressTarget {
99
+ /** IPv4 addresses (`A` records). */
100
+ ipv4?: Input<string[]>;
101
+ /** IPv6 addresses (`AAAA` records). */
102
+ ipv6?: Input<string[]>;
103
+ }
104
+
105
+ /**
106
+ * Where an alias hostname points. The target's KIND (hostname vs.
107
+ * addresses) must be known while the program is built; its values may be
108
+ * Outputs.
109
+ */
110
+ export type DnsAliasTarget = DnsHostnameTarget | DnsAddressTarget;
111
+
112
+ /** Whether a target is a hostname (CNAME / Route 53 alias) target. */
113
+ export const isHostnameTarget = (target: DnsAliasTarget): target is DnsHostnameTarget =>
114
+ "hostname" in target && target.hostname !== undefined;
115
+
116
+ /** Binding contract of an {@link DnsAdapter.aliasSet} record set. */
117
+ export type DnsAliasSetBinding = {
118
+ /** Additional hostnames pointed at the set's target. */
119
+ names?: string[];
120
+ };
121
+
122
+ /**
123
+ * A record set other composites bind hostnames onto via `{ names }` (see
124
+ * `AWS.Website.Router`'s `bindTargets.records`).
125
+ */
126
+ export type DnsAliasSet = ResourceLike<string, any, any, DnsAliasSetBinding, any> &
127
+ Pick<Resource<string, any, any, DnsAliasSetBinding, any>, "bind">;
128
+
129
+ /**
130
+ * A DNS host cannot publish the requested records, e.g. a `CNAME` at a zone
131
+ * apex on a host without CNAME flattening. Raised (as a defect, like any
132
+ * other invalid configuration) while the stack program is being built,
133
+ * before anything is deployed.
134
+ */
135
+ export class DnsAdapterError extends Data.TaggedError("DnsAdapterError")<{
136
+ readonly message: string;
137
+ }> {}
138
+
139
+ /**
140
+ * `domain.dns` names a DNS host whose adapter is not registered: the host's
141
+ * `providers()` layer is missing from the stack. Raised as a defect while
142
+ * the stack program is being built, like a missing resource provider.
143
+ */
144
+ export class DnsAdapterNotRegistered extends Data.TaggedError("DnsAdapterNotRegistered")<{
145
+ readonly type: string;
146
+ }> {
147
+ override get message() {
148
+ const provider = this.type.split(".")[0];
149
+ return (
150
+ `No DNS adapter is registered for "${this.type}". ` +
151
+ `Add ${provider}.providers() to the stack's providers layer.`
152
+ );
153
+ }
154
+ }
155
+
156
+ /**
157
+ * Where an adapter method writes: the zone and host-specific options from
158
+ * the user's {@link DnsConfig}. {@link resolve} fills these in, so callers
159
+ * never pass them.
160
+ */
161
+ export interface DnsZone {
162
+ /** Zone id or name (Route 53: hosted zone id). Inferred per hostname when omitted. */
163
+ zone?: Input<string> | undefined;
164
+ /** Host-specific options from the adapter constructor, e.g. `{ proxied: true }`. */
165
+ options?: { readonly [key: string]: unknown };
166
+ }
167
+
168
+ /**
169
+ * A DNS adapter: functions that declare a DNS host's record resources. They
170
+ * perform no I/O — composites call them while the stack program is built —
171
+ * so they behave the same under `alchemy deploy`, `alchemy dev`, and tests.
172
+ *
173
+ * `R` is the host's provider requirement (e.g. `Cloudflare.Providers`):
174
+ * return the resource constructors' Effects as they are.
175
+ */
176
+ export interface DnsAdapter<R = never> {
177
+ /**
178
+ * Point one hostname at `target`. `ipv6` also publishes IPv6 for a
179
+ * hostname target where the host needs a separate record (Route 53
180
+ * `AAAA` alias); a CNAME already covers both.
181
+ */
182
+ alias(
183
+ id: string,
184
+ args: DnsZone & { name: string; target: DnsAliasTarget; ipv6?: boolean },
185
+ ): Effect.Effect<unknown, never, R>;
186
+ /**
187
+ * A (possibly empty) set of hostnames pointed at a hostname target that
188
+ * other composites extend by binding `{ names }` onto it (used by
189
+ * `AWS.Website.Router`, whose attached sites add their hostnames).
190
+ */
191
+ aliasSet(
192
+ id: string,
193
+ args: DnsZone & { names?: string[]; target: DnsHostnameTarget },
194
+ ): Effect.Effect<DnsAliasSet, never, R>;
195
+ /**
196
+ * Publish explicit records whose values come from another resource
197
+ * (certificate validation, ownership verification). Records are always
198
+ * DNS-only (never proxied). `retain` keeps them when the resource is
199
+ * destroyed — used for ACM validation CNAMEs, which ACM reuses across
200
+ * every certificate for a name.
201
+ */
202
+ records(
203
+ id: string,
204
+ args: DnsZone & { records: Input<DnsRecord[]>; retain?: boolean },
205
+ ): Effect.Effect<unknown, never, R>;
206
+ }
207
+
208
+ const adapterService = (type: string) =>
209
+ Context.Service<DnsAdapter<any>>(`alchemy/DNS/Adapter/${type}`);
210
+
211
+ /**
212
+ * Register a DNS adapter under the {@link DnsConfig.type} its constructor
213
+ * returns. Merge the layer into the DNS host's `providers()` layer, which
214
+ * also registers the providers of the resources the adapter declares.
215
+ */
216
+ export const adapterLayer = <R>(
217
+ type: string,
218
+ adapter: DnsAdapter<R>,
219
+ ): Layer.Layer<DnsAdapter<any>> => Layer.succeed(adapterService(type), adapter);
220
+
221
+ /**
222
+ * Fill in `zone` / `options` from a {@link DnsConfig} on every call.
223
+ */
224
+ export const bind = <R>(adapter: DnsAdapter<R>, config: DnsConfig): DnsAdapter<R> => {
225
+ const zone: DnsZone = {
226
+ ...(config.zone === undefined ? {} : { zone: config.zone }),
227
+ ...(config.options === undefined ? {} : { options: config.options }),
228
+ };
229
+ return {
230
+ alias: (id, args) => adapter.alias(id, { ...zone, ...args }),
231
+ aliasSet: (id, args) => adapter.aliasSet(id, { ...zone, ...args }),
232
+ records: (id, args) => adapter.records(id, { ...zone, ...args }),
233
+ };
234
+ };
235
+
236
+ /**
237
+ * The adapter registered for `config.type`, with `config`'s zone and
238
+ * options filled in. Dies with {@link DnsAdapterNotRegistered} when the DNS
239
+ * host's `providers()` layer is not part of the stack.
240
+ *
241
+ * `domain.dns` picks the host by a runtime string, so the host's provider
242
+ * requirement can't be named statically here and the returned adapter is
243
+ * typed without it. That is safe: the requirement is type-level only
244
+ * (declaring a resource never reads its provider), and the adapter is only
245
+ * registered by the host's `providers()` layer, which also registers the
246
+ * providers of the resources it declares.
247
+ */
248
+ export const resolve = (config: DnsConfig): Effect.Effect<DnsAdapter> =>
249
+ Effect.serviceOption(adapterService(config.type)).pipe(
250
+ Effect.flatMap(
251
+ Option.match({
252
+ onNone: () => Effect.die(new DnsAdapterNotRegistered({ type: config.type })),
253
+ onSome: (adapter) => Effect.succeed(bind(adapter as DnsAdapter, config)),
254
+ }),
255
+ ),
256
+ );
257
+
258
+ /** Normalize a DNS name: lowercase, no trailing dot. */
259
+ export const normalizeDnsName = (name: string) => name.replace(/\.$/, "").toLowerCase();
260
+
261
+ /** `A` / `AAAA` records for an address target (values may be Outputs). */
262
+ export const addressRecords = (
263
+ name: string,
264
+ ipv4: Input<string[]> | undefined,
265
+ ipv6: Input<string[]> | undefined,
266
+ ): Input<DnsRecord[]> => {
267
+ const toRecords = (v4: string[], v6: string[]): DnsRecord[] => [
268
+ ...v4.map((value) => ({ name, type: "A" as const, value })),
269
+ ...v6.map((value) => ({ name, type: "AAAA" as const, value })),
270
+ ];
271
+ if (!Output.isOutput(ipv4) && !Output.isOutput(ipv6)) {
272
+ return toRecords((ipv4 ?? []) as string[], (ipv6 ?? []) as string[]);
273
+ }
274
+ const lift = (value: Input<string[]> | undefined): any =>
275
+ Output.isOutput(value) ? value : Output.literal((value ?? []) as string[]);
276
+ return Output.map(Output.all(lift(ipv4) as any, lift(ipv6) as any), ([v4, v6]: any) =>
277
+ toRecords(v4 as string[], v6 as string[]),
278
+ ) as unknown as Input<DnsRecord[]>;
279
+ };
280
+
281
+ /**
282
+ * The records that point `name` at `target`: a `CNAME` to a hostname
283
+ * target, or `A` / `AAAA` records for an address target. A convenience for
284
+ * adapters whose `alias` publishes through a list-of-records resource.
285
+ */
286
+ export const aliasRecords = (name: string, target: DnsAliasTarget): Input<DnsRecord[]> =>
287
+ isHostnameTarget(target)
288
+ ? [{ name, type: "CNAME", value: target.hostname as string }]
289
+ : addressRecords(name, target.ipv4, target.ipv6);
@@ -0,0 +1 @@
1
+ export * from "./Adapter.ts";
package/src/Deploy.ts CHANGED
@@ -3,10 +3,12 @@ import * as Effect from "effect/Effect";
3
3
  import type * as Scope from "effect/Scope";
4
4
  import { AlchemyContext } from "./AlchemyContext.ts";
5
5
  import * as Apply from "./Apply.ts";
6
+ import { evalStack } from "./EvalStack.ts";
6
7
  import type { Input } from "./Input.ts";
7
8
  import * as Plan from "./Plan.ts";
9
+ import { renderApply } from "./Report.ts";
8
10
  import type { ResourceSelection, SelectionOutput } from "./ResourceSelection.ts";
9
- import { evalStack, type CompiledStack, type StackEffect } from "./Stack.ts";
11
+ import type { CompiledStack, StackEffect } from "./Stack.ts";
10
12
  import { Stage } from "./Stage.ts";
11
13
 
12
14
  export interface DeployOptions<A> extends Plan.MakePlanOptions {
@@ -38,6 +40,13 @@ export function deploy<A>(options: FilteredDeployOptions<A>) {
38
40
  return deployStack(options);
39
41
  }
40
42
 
43
+ /**
44
+ * Apply `plan`, drawing its progress through the ambient `Cli` when there
45
+ * is one. The engine only emits events; this is where they are rendered.
46
+ */
47
+ export const applyAndRender = <P extends Plan.Plan>(plan: P) =>
48
+ Apply.apply(plan).pipe(renderApply(plan));
49
+
41
50
  const deployStack = <A>({
42
51
  stack,
43
52
  stage,
@@ -52,8 +61,7 @@ const deployStack = <A>({
52
61
  (stack) =>
53
62
  Effect.gen(function* () {
54
63
  const plan = yield* Plan.make(stack, { force, include, exclude });
55
- const output = yield* Apply.apply(plan);
56
- return output;
64
+ return yield* applyAndRender(plan);
57
65
  }),
58
66
  { stage, dev, scope },
59
67
  );
package/src/Destroy.ts CHANGED
@@ -1,14 +1,13 @@
1
1
  import { Effect } from "effect";
2
- import type { ConfigError } from "effect/Config";
2
+ import * as Context from "effect/Context";
3
3
  import type * as Scope from "effect/Scope";
4
- import type { AlchemyContext } from "./AlchemyContext.ts";
5
- import * as Apply from "./Apply.ts";
4
+ import { applyAndRender } from "./Deploy.ts";
5
+ import { evalStack } from "./EvalStack.ts";
6
6
  import * as Plan from "./Plan.ts";
7
- import type { CompiledStack, StackEffect } from "./Stack.ts";
8
- import { evalStack } from "./Stack.ts";
9
- import type { Stage } from "./Stage.ts";
7
+ import type { StackDefinition } from "./Stack.ts";
8
+ import { build, Stack } from "./Stack.ts";
10
9
 
11
- export const destroy = ({
10
+ export const destroy = <ROut>({
12
11
  stack,
13
12
  stage,
14
13
  dev,
@@ -16,7 +15,8 @@ export const destroy = ({
16
15
  include,
17
16
  exclude,
18
17
  }: {
19
- stack: StackEffect<CompiledStack, ConfigError, Stage | AlchemyContext>;
18
+ /** The stack to tear down; its program is never run. */
19
+ stack: StackDefinition<ROut>;
20
20
  stage: string;
21
21
  dev?: boolean;
22
22
  /** See {@link evalStack} — when set, scoped resources outlive `destroy`. */
@@ -29,8 +29,14 @@ export const destroy = ({
29
29
  ? Effect.die(
30
30
  new Plan.InvalidResourceSelection({ message: "Filtered destroy is not supported." }),
31
31
  )
32
- : evalStack(stack, (stack) => Plan.destroy(stack).pipe(Effect.flatMap(Apply.apply)), {
33
- stage,
34
- dev,
35
- scope,
36
- });
32
+ : evalStack(
33
+ build({
34
+ name: stack.stackName,
35
+ providers: stack.providers,
36
+ state: stack.state,
37
+ secrets: stack.secrets,
38
+ }).pipe(Effect.map((services) => ({ services }))),
39
+ ({ services }) =>
40
+ Plan.destroy(Context.get(services, Stack)).pipe(Effect.flatMap(applyAndRender)),
41
+ { stage, dev, scope },
42
+ );
package/src/Diff.ts CHANGED
@@ -5,6 +5,7 @@ import type { Input } from "./Input.ts";
5
5
  import * as Output from "./Output.ts";
6
6
  import type { BindingNode } from "./Plan.ts";
7
7
  import type { ResourceBinding } from "./Resource.ts";
8
+ import { bytesToBase64 } from "./Util/base64.ts";
8
9
  import { isPlainData, isPrimitive, mapPlainData } from "./Util/data.ts";
9
10
 
10
11
  export type Diff = NoopDiff | UpdateDiff | ReplaceDiff;
@@ -92,9 +93,14 @@ const _stripUnresolved = (
92
93
  if (value == null || isPrimitive(value)) return value;
93
94
  if (Output.isExpr(value) || Effect.isEffect(value)) return undefined;
94
95
  // Serializable leaves — the only class instances persisted state may
95
- // carry (StateEncoding knows Redacted/Duration; Date JSON-encodes).
96
- // Rebuilding them structurally would strip their prototype.
97
- if (Redacted.isRedacted(value) || Duration.isDuration(value) || value instanceof Date) {
96
+ // carry (StateEncoding knows Redacted/Duration/Date/bytes). Rebuilding
97
+ // them structurally would strip their prototype.
98
+ if (
99
+ Redacted.isRedacted(value) ||
100
+ Duration.isDuration(value) ||
101
+ value instanceof Date ||
102
+ value instanceof Uint8Array
103
+ ) {
98
104
  return value;
99
105
  }
100
106
  if (isPlainData(value)) {
@@ -131,7 +137,12 @@ const _stripEffects = (
131
137
  // yieldable and would otherwise be misclassified as plain Effects.
132
138
  if (Output.isExpr(value)) return value;
133
139
  if (Effect.isEffect(value)) return undefined;
134
- if (Redacted.isRedacted(value) || Duration.isDuration(value) || value instanceof Date) {
140
+ if (
141
+ Redacted.isRedacted(value) ||
142
+ Duration.isDuration(value) ||
143
+ value instanceof Date ||
144
+ value instanceof Uint8Array
145
+ ) {
135
146
  return value;
136
147
  }
137
148
  if (isPlainData(value)) {
@@ -229,6 +240,8 @@ const canonicalize = (
229
240
  // JSON-safe leaves compare by their serialized form (Duration/Date have
230
241
  // toJSON).
231
242
  if (Duration.isDuration(value) || value instanceof Date) return value;
243
+ // Bytes compare by content.
244
+ if (value instanceof Uint8Array) return { __bytes__: bytesToBase64(value) };
232
245
  if (isPlainData(value)) {
233
246
  const rebuilt = mapPlainData(value, ancestors, (child) =>
234
247
  canonicalize(child, stripNullish, ancestors),