alchemy 0.75.0 → 0.76.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 (226) hide show
  1. package/bin/alchemy.js +302 -287
  2. package/bin/commands/util.ts +8 -4
  3. package/bin/services/execute-alchemy.ts +4 -2
  4. package/bin/services/github-workflow.ts +2 -3
  5. package/bin/services/package-manager.ts +1 -5
  6. package/lib/alchemy.d.ts +1 -1
  7. package/lib/alchemy.d.ts.map +1 -1
  8. package/lib/alchemy.js +1 -1
  9. package/lib/alchemy.js.map +1 -1
  10. package/lib/apply.js +10 -0
  11. package/lib/apply.js.map +1 -1
  12. package/lib/aws/control/types.d.ts.map +1 -1
  13. package/lib/aws/control/types.js.map +1 -1
  14. package/lib/clickhouse/api/sdk.gen.d.ts.map +1 -1
  15. package/lib/clickhouse/api/sdk.gen.js.map +1 -1
  16. package/lib/cloudflare/account-api-token.d.ts.map +1 -1
  17. package/lib/cloudflare/account-api-token.js.map +1 -1
  18. package/lib/cloudflare/bound.d.ts.map +1 -1
  19. package/lib/cloudflare/bucket.d.ts +1 -1
  20. package/lib/cloudflare/bucket.d.ts.map +1 -1
  21. package/lib/cloudflare/bucket.js +1 -1
  22. package/lib/cloudflare/bucket.js.map +1 -1
  23. package/lib/cloudflare/cloudflare-env-proxy.d.ts.map +1 -1
  24. package/lib/cloudflare/cloudflare-env-proxy.js +3 -3
  25. package/lib/cloudflare/cloudflare-env-proxy.js.map +1 -1
  26. package/lib/cloudflare/compatibility-date.gen.d.ts +1 -1
  27. package/lib/cloudflare/compatibility-date.gen.js +1 -1
  28. package/lib/cloudflare/d1-database.d.ts.map +1 -1
  29. package/lib/cloudflare/d1-database.js +0 -4
  30. package/lib/cloudflare/d1-database.js.map +1 -1
  31. package/lib/cloudflare/dns-records.js.map +1 -1
  32. package/lib/cloudflare/hyperdrive.d.ts +0 -1
  33. package/lib/cloudflare/hyperdrive.d.ts.map +1 -1
  34. package/lib/cloudflare/hyperdrive.js.map +1 -1
  35. package/lib/cloudflare/miniflare/delete.d.ts.map +1 -1
  36. package/lib/cloudflare/miniflare/delete.js +3 -0
  37. package/lib/cloudflare/miniflare/delete.js.map +1 -1
  38. package/lib/cloudflare/miniflare/paths.d.ts +0 -1
  39. package/lib/cloudflare/miniflare/paths.d.ts.map +1 -1
  40. package/lib/cloudflare/miniflare/paths.js +4 -17
  41. package/lib/cloudflare/miniflare/paths.js.map +1 -1
  42. package/lib/cloudflare/nuxt/plugin.d.ts.map +1 -1
  43. package/lib/cloudflare/nuxt/plugin.js +2 -2
  44. package/lib/cloudflare/nuxt/plugin.js.map +1 -1
  45. package/lib/cloudflare/queue-consumer.d.ts.map +1 -1
  46. package/lib/cloudflare/queue-consumer.js +0 -2
  47. package/lib/cloudflare/queue-consumer.js.map +1 -1
  48. package/lib/cloudflare/react-router/plugin.d.ts.map +1 -1
  49. package/lib/cloudflare/react-router/plugin.js +0 -1
  50. package/lib/cloudflare/react-router/plugin.js.map +1 -1
  51. package/lib/cloudflare/vite/plugin.d.ts.map +1 -1
  52. package/lib/cloudflare/vite/plugin.js +3 -3
  53. package/lib/cloudflare/vite/plugin.js.map +1 -1
  54. package/lib/cloudflare/website.d.ts.map +1 -1
  55. package/lib/cloudflare/website.js +0 -4
  56. package/lib/cloudflare/website.js.map +1 -1
  57. package/lib/cloudflare/worker-assets.d.ts +1 -1
  58. package/lib/cloudflare/worker-assets.d.ts.map +1 -1
  59. package/lib/cloudflare/worker-assets.js +1 -1
  60. package/lib/cloudflare/worker-assets.js.map +1 -1
  61. package/lib/cloudflare/worker-metadata.d.ts.map +1 -1
  62. package/lib/cloudflare/worker-metadata.js.map +1 -1
  63. package/lib/cloudflare/worker-tail.d.ts.map +1 -1
  64. package/lib/cloudflare/worker-tail.js.map +1 -1
  65. package/lib/cloudflare/worker.d.ts.map +1 -1
  66. package/lib/cloudflare/worker.js +3 -1
  67. package/lib/cloudflare/worker.js.map +1 -1
  68. package/lib/cloudflare/wrangler.json.js +0 -1
  69. package/lib/cloudflare/wrangler.json.js.map +1 -1
  70. package/lib/cloudflare/zone.d.ts +1 -1
  71. package/lib/cloudflare/zone.d.ts.map +1 -1
  72. package/lib/cloudflare/zone.js +3 -28
  73. package/lib/cloudflare/zone.js.map +1 -1
  74. package/lib/coinbase/evm-account.d.ts.map +1 -1
  75. package/lib/coinbase/evm-account.js.map +1 -1
  76. package/lib/coinbase/evm-smart-account.d.ts.map +1 -1
  77. package/lib/coinbase/evm-smart-account.js.map +1 -1
  78. package/lib/docker/api.d.ts.map +1 -1
  79. package/lib/docker/api.js.map +1 -1
  80. package/lib/github/secret.d.ts.map +1 -1
  81. package/lib/github/secret.js.map +1 -1
  82. package/lib/neon/api/sdk.gen.d.ts.map +1 -1
  83. package/lib/neon/api/sdk.gen.js.map +1 -1
  84. package/lib/os/exec.d.ts.map +1 -1
  85. package/lib/os/exec.js.map +1 -1
  86. package/lib/planetscale/api/sdk.gen.d.ts.map +1 -1
  87. package/lib/planetscale/api/sdk.gen.js.map +1 -1
  88. package/lib/prisma-postgres/api/sdk.gen.d.ts.map +1 -1
  89. package/lib/prisma-postgres/api/sdk.gen.js.map +1 -1
  90. package/lib/scope.d.ts.map +1 -1
  91. package/lib/scope.js +2 -2
  92. package/lib/scope.js.map +1 -1
  93. package/lib/sentry/client-key.js +1 -1
  94. package/lib/sentry/client-key.js.map +1 -1
  95. package/lib/test/bun.d.ts.map +1 -1
  96. package/lib/test/bun.js.map +1 -1
  97. package/lib/test/vitest.d.ts.map +1 -1
  98. package/lib/test/vitest.js.map +1 -1
  99. package/lib/util/api/client/client.gen.d.ts +1 -1
  100. package/lib/util/api/client/client.gen.js +45 -45
  101. package/lib/util/api/client/types.gen.d.ts +22 -22
  102. package/lib/util/api/client/utils.gen.d.ts +3 -3
  103. package/lib/util/api/client/utils.gen.d.ts.map +1 -1
  104. package/lib/util/api/client/utils.gen.js +34 -34
  105. package/lib/util/api/client/utils.gen.js.map +1 -1
  106. package/lib/util/api/core/auth.gen.d.ts +3 -3
  107. package/lib/util/api/core/auth.gen.js +3 -3
  108. package/lib/util/api/core/bodySerializer.gen.d.ts +1 -1
  109. package/lib/util/api/core/bodySerializer.gen.js +3 -3
  110. package/lib/util/api/core/params.gen.d.ts +3 -3
  111. package/lib/util/api/core/params.gen.js +7 -7
  112. package/lib/util/api/core/pathSerializer.gen.d.ts +3 -3
  113. package/lib/util/api/core/pathSerializer.gen.js +36 -36
  114. package/lib/util/api/core/serverSentEvents.gen.d.ts +3 -3
  115. package/lib/util/api/core/serverSentEvents.gen.js +18 -18
  116. package/lib/util/api/core/types.gen.d.ts +4 -4
  117. package/lib/util/api/core/utils.gen.d.ts +1 -1
  118. package/lib/util/api/core/utils.gen.js +17 -17
  119. package/lib/util/camel-to-snake.d.ts.map +1 -1
  120. package/lib/util/find-workspace-root.d.ts +3 -0
  121. package/lib/util/find-workspace-root.d.ts.map +1 -0
  122. package/lib/util/find-workspace-root.js +94 -0
  123. package/lib/util/find-workspace-root.js.map +1 -0
  124. package/lib/util/idempotent-spawn.d.ts.map +1 -1
  125. package/lib/util/idempotent-spawn.js +1 -1
  126. package/lib/util/idempotent-spawn.js.map +1 -1
  127. package/lib/util/peer.d.ts.map +1 -1
  128. package/lib/util/peer.js.map +1 -1
  129. package/package.json +1 -1
  130. package/src/alchemy.ts +4 -3
  131. package/src/apply.ts +16 -1
  132. package/src/aws/control/types.ts +87107 -85281
  133. package/src/clickhouse/api/sdk.gen.ts +1 -3
  134. package/src/cloudflare/account-api-token.ts +3 -1
  135. package/src/cloudflare/bound.ts +64 -65
  136. package/src/cloudflare/bucket.ts +4 -7
  137. package/src/cloudflare/cloudflare-env-proxy.ts +2 -4
  138. package/src/cloudflare/compatibility-date.gen.ts +1 -1
  139. package/src/cloudflare/d1-database.ts +0 -9
  140. package/src/cloudflare/dns-records.ts +3 -1
  141. package/src/cloudflare/hyperdrive.ts +0 -1
  142. package/src/cloudflare/miniflare/delete.ts +3 -0
  143. package/src/cloudflare/miniflare/paths.ts +4 -25
  144. package/src/cloudflare/nuxt/plugin.ts +1 -4
  145. package/src/cloudflare/queue-consumer.ts +0 -2
  146. package/src/cloudflare/react-router/plugin.ts +0 -1
  147. package/src/cloudflare/vite/plugin.ts +1 -3
  148. package/src/cloudflare/website.ts +0 -5
  149. package/src/cloudflare/worker-assets.ts +1 -6
  150. package/src/cloudflare/worker-metadata.ts +5 -3
  151. package/src/cloudflare/worker-tail.ts +3 -1
  152. package/src/cloudflare/worker.ts +3 -1
  153. package/src/cloudflare/wrangler.json.ts +0 -1
  154. package/src/cloudflare/zone.ts +6 -38
  155. package/src/coinbase/evm-account.ts +3 -1
  156. package/src/coinbase/evm-smart-account.ts +3 -1
  157. package/src/docker/api.ts +3 -1
  158. package/src/github/secret.ts +5 -1
  159. package/src/neon/api/sdk.gen.ts +1 -3
  160. package/src/os/exec.ts +3 -1
  161. package/src/planetscale/api/sdk.gen.ts +1 -3
  162. package/src/prisma-postgres/api/sdk.gen.ts +1 -3
  163. package/src/scope.ts +2 -2
  164. package/src/sentry/client-key.ts +1 -5
  165. package/src/test/bun.ts +3 -1
  166. package/src/test/vitest.ts +3 -1
  167. package/src/util/api/client/client.gen.ts +49 -49
  168. package/src/util/api/client/types.gen.ts +43 -43
  169. package/src/util/api/client/utils.gen.ts +47 -42
  170. package/src/util/api/core/auth.gen.ts +6 -6
  171. package/src/util/api/core/bodySerializer.gen.ts +4 -4
  172. package/src/util/api/core/params.gen.ts +10 -10
  173. package/src/util/api/core/pathSerializer.gen.ts +39 -39
  174. package/src/util/api/core/serverSentEvents.gen.ts +22 -22
  175. package/src/util/api/core/types.gen.ts +12 -12
  176. package/src/util/api/core/utils.gen.ts +18 -18
  177. package/src/util/camel-to-snake.ts +12 -10
  178. package/src/util/find-workspace-root.ts +112 -0
  179. package/src/util/idempotent-spawn.ts +1 -5
  180. package/src/util/peer.ts +3 -1
  181. package/templates/astro/astro.config.mjs +3 -3
  182. package/templates/astro/src/pages/api/hello.ts +16 -13
  183. package/templates/bun-spa/bun-env.d.ts +0 -1
  184. package/templates/bun-spa/eslint.config.js +11 -12
  185. package/templates/bun-spa/src/App.tsx +0 -1
  186. package/templates/bun-spa/src/frontend.tsx +0 -1
  187. package/templates/hono/src/index.ts +13 -13
  188. package/templates/nextjs/alchemy.run.ts +1 -1
  189. package/templates/nextjs/eslint.config.mjs +1 -1
  190. package/templates/nextjs/next-env.d.ts +1 -1
  191. package/templates/nextjs/next.config.ts +1 -1
  192. package/templates/nextjs/open-next.config.ts +1 -1
  193. package/templates/nextjs/src/app/api/hello/route.ts +2 -2
  194. package/templates/nextjs/src/app/layout.tsx +1 -1
  195. package/templates/nextjs/src/app/page.tsx +14 -15
  196. package/templates/nextjs/types/env.d.ts +4 -4
  197. package/templates/nuxt/server/middleware/auth.ts +1 -1
  198. package/templates/nuxt/server/middleware/hello.ts +2 -2
  199. package/templates/react-router/app/entry.server.tsx +2 -2
  200. package/templates/react-router/vite.config.ts +1 -1
  201. package/templates/react-router/workers/app.ts +2 -2
  202. package/templates/rwsdk/alchemy.run.ts +6 -3
  203. package/templates/sveltekit/src/app.d.ts +7 -7
  204. package/templates/sveltekit/svelte.config.js +4 -4
  205. package/templates/sveltekit/vite.config.ts +3 -3
  206. package/templates/tanstack-start/src/components/Header.tsx +2 -2
  207. package/templates/tanstack-start/src/router.tsx +4 -4
  208. package/templates/tanstack-start/src/routes/__root.tsx +10 -10
  209. package/templates/tanstack-start/src/routes/api.demo-names.ts +6 -6
  210. package/templates/tanstack-start/src/routes/demo.start.api-request.tsx +11 -11
  211. package/templates/tanstack-start/src/routes/demo.start.server-funcs.tsx +30 -30
  212. package/templates/tanstack-start/src/routes/index.tsx +5 -5
  213. package/templates/tanstack-start/vite.config.ts +9 -9
  214. package/templates/typescript/src/worker.ts +5 -1
  215. package/templates/vite/eslint.config.js +12 -12
  216. package/templates/vite/src/App.tsx +7 -7
  217. package/templates/vite/src/main.tsx +6 -6
  218. package/templates/vite/src/worker.ts +11 -12
  219. package/templates/vite/vite.config.ts +2 -2
  220. package/workers/tunnel-proxy.js +1 -1
  221. package/bin/services/find-workspace-root.ts +0 -48
  222. package/lib/cloudflare/miniflare/symlink-miniflare-state.d.ts +0 -2
  223. package/lib/cloudflare/miniflare/symlink-miniflare-state.d.ts.map +0 -1
  224. package/lib/cloudflare/miniflare/symlink-miniflare-state.js +0 -18
  225. package/lib/cloudflare/miniflare/symlink-miniflare-state.js.map +0 -1
  226. package/src/cloudflare/miniflare/symlink-miniflare-state.ts +0 -18
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "alchemy",
3
- "version": "0.75.0",
3
+ "version": "0.76.0",
4
4
  "license": "Apache-2.0",
5
5
  "author": "Sam Goodwin <sam@alchemy.run>",
6
6
  "homepage": "https://alchemy.run",
package/src/alchemy.ts CHANGED
@@ -5,14 +5,14 @@ import { isReplacedSignal } from "./apply.ts";
5
5
  import { DestroyStrategy, destroy, isDestroyedSignal } from "./destroy.ts";
6
6
  import { env } from "./env.ts";
7
7
  import {
8
+ type PendingResource,
8
9
  ResourceFQN,
9
10
  ResourceID,
10
11
  ResourceKind,
11
12
  ResourceScope,
12
13
  ResourceSeq,
13
- type PendingResource,
14
14
  } from "./resource.ts";
15
- import { DEFAULT_STAGE, Scope, type ProviderCredentials } from "./scope.ts";
15
+ import { DEFAULT_STAGE, type ProviderCredentials, Scope } from "./scope.ts";
16
16
  import { secret } from "./secret.ts";
17
17
  import type { StateStoreType } from "./state.ts";
18
18
  import { cliArgs, parseOption } from "./util/cli-args.ts";
@@ -125,6 +125,7 @@ async function _alchemy(
125
125
  : cliArgs.includes("--read")
126
126
  ? "read"
127
127
  : "up",
128
+
128
129
  local: cliArgs.includes("--local") || cliArgs.includes("--dev"),
129
130
  watch: cliArgs.includes("--watch") || execArgv.includes("--watch"),
130
131
  quiet: cliArgs.includes("--quiet"),
@@ -151,7 +152,7 @@ async function _alchemy(
151
152
  process.env.CI &&
152
153
  process.env.ALCHEMY_CI_STATE_STORE_CHECK !== "false"
153
154
  ) {
154
- throw new Error(`You are running Alchemy in a CI environment with the default local state store.
155
+ throw new Error(`You are running Alchemy in a CI environment with the default local state store.
155
156
  This can lead to orphaned infrastructure and is rarely what you want to do.
156
157
 
157
158
  Instead, you should choose a persistent state store:
package/src/apply.ts CHANGED
@@ -97,6 +97,7 @@ async function _apply<Out extends ResourceAttributes>(
97
97
 
98
98
  // -> poll until it does not (i.e. when the owner process applies the change and updates the state store)
99
99
  async function waitForConsistentState() {
100
+ let startTime = Date.now();
100
101
  while (true) {
101
102
  if (state === undefined) {
102
103
  // state doesn't exist yet
@@ -115,6 +116,18 @@ async function _apply<Out extends ResourceAttributes>(
115
116
  } else if (await inputsAreEqual(state)) {
116
117
  // sweet, we've reached a stable state and read can progress
117
118
  return state;
119
+ } else {
120
+ const elapsed = Date.now() - startTime;
121
+ if (
122
+ // looks stable but the props are different on our side, it's likely that the input props are not deterministic
123
+ (state.status === "created" || state.status === "updated") &&
124
+ elapsed > 1_000
125
+ ) {
126
+ logger.warn(
127
+ `Resource '${resource[ResourceFQN]}' is not in a stable state after ${elapsed}ms, be sure to check if your input props are deterministic:`,
128
+ state.props,
129
+ );
130
+ }
118
131
  }
119
132
  // jitter between 100-300ms
120
133
  const jitter = 100 + Math.random() * 200;
@@ -332,7 +345,9 @@ async function _apply<Out extends ResourceAttributes>(
332
345
  phase === "create" ? "created" : isReplaced ? "replaced" : "updated",
333
346
  prefixColor: "greenBright",
334
347
  resource: formatFQN(resource[ResourceFQN]),
335
- message: `${phase === "create" ? "Created" : isReplaced ? "Replaced" : "Updated"} Resource`,
348
+ message: `${
349
+ phase === "create" ? "Created" : isReplaced ? "Replaced" : "Updated"
350
+ } Resource`,
336
351
  status: "success",
337
352
  });
338
353
  }