alchemy 0.37.2 → 0.38.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 (255) hide show
  1. package/bin/alchemy.mjs +44306 -48055
  2. package/bin/alchemy.ts +80 -85
  3. package/bin/commands/create.ts +263 -0
  4. package/bin/constants.ts +13 -0
  5. package/bin/errors.ts +11 -0
  6. package/bin/services/dependencies.ts +47 -0
  7. package/bin/services/get-package-version.ts +11 -0
  8. package/bin/services/package-manager.ts +113 -0
  9. package/bin/services/template-manager.ts +137 -0
  10. package/bin/types.ts +83 -0
  11. package/lib/alchemy.d.ts.map +1 -1
  12. package/lib/alchemy.js +12 -3
  13. package/lib/alchemy.js.map +1 -1
  14. package/lib/apply.d.ts +2 -0
  15. package/lib/apply.d.ts.map +1 -1
  16. package/lib/apply.js +47 -12
  17. package/lib/apply.js.map +1 -1
  18. package/lib/build-date.d.ts +6 -0
  19. package/lib/build-date.d.ts.map +1 -0
  20. package/lib/build-date.js +8 -0
  21. package/lib/build-date.js.map +1 -0
  22. package/lib/cloudflare/api.d.ts.map +1 -1
  23. package/lib/cloudflare/api.js +2 -1
  24. package/lib/cloudflare/api.js.map +1 -1
  25. package/lib/cloudflare/pipeline.d.ts +1 -1
  26. package/lib/cloudflare/pipeline.d.ts.map +1 -1
  27. package/lib/cloudflare/pipeline.js +6 -1
  28. package/lib/cloudflare/pipeline.js.map +1 -1
  29. package/lib/cloudflare/worker-stub.d.ts +23 -2
  30. package/lib/cloudflare/worker-stub.d.ts.map +1 -1
  31. package/lib/cloudflare/worker-stub.js +16 -2
  32. package/lib/cloudflare/worker-stub.js.map +1 -1
  33. package/lib/cloudflare/worker.d.ts +4 -3
  34. package/lib/cloudflare/worker.d.ts.map +1 -1
  35. package/lib/cloudflare/worker.js +2 -1
  36. package/lib/cloudflare/worker.js.map +1 -1
  37. package/lib/context.d.ts +2 -2
  38. package/lib/context.d.ts.map +1 -1
  39. package/lib/destroy.d.ts +8 -2
  40. package/lib/destroy.d.ts.map +1 -1
  41. package/lib/destroy.js +19 -5
  42. package/lib/destroy.js.map +1 -1
  43. package/lib/scope.d.ts +26 -4
  44. package/lib/scope.d.ts.map +1 -1
  45. package/lib/scope.js +104 -9
  46. package/lib/scope.js.map +1 -1
  47. package/lib/sentry/project.js +1 -1
  48. package/lib/sentry/project.js.map +1 -1
  49. package/lib/util/logger.js +1 -1
  50. package/lib/util/logger.js.map +1 -1
  51. package/lib/util/mutex.d.ts +9 -0
  52. package/lib/util/mutex.d.ts.map +1 -0
  53. package/lib/util/mutex.js +35 -0
  54. package/lib/util/mutex.js.map +1 -0
  55. package/package.json +16 -6
  56. package/src/alchemy.ts +17 -5
  57. package/src/apply.ts +67 -17
  58. package/src/build-date.ts +8 -0
  59. package/src/cloudflare/api.ts +2 -1
  60. package/src/cloudflare/pipeline.ts +6 -0
  61. package/src/cloudflare/worker-stub.ts +31 -2
  62. package/src/cloudflare/worker.ts +4 -3
  63. package/src/context.ts +2 -2
  64. package/src/destroy.ts +30 -7
  65. package/src/scope.ts +145 -10
  66. package/src/sentry/project.ts +1 -1
  67. package/src/util/logger.ts +1 -1
  68. package/src/util/mutex.ts +33 -0
  69. package/templates/astro/.vscode/extensions.json +4 -0
  70. package/templates/astro/.vscode/launch.json +11 -0
  71. package/templates/astro/README.md +48 -0
  72. package/templates/astro/_env.example +1 -0
  73. package/templates/astro/_gitignore +27 -0
  74. package/templates/astro/alchemy.run.ts +16 -0
  75. package/templates/astro/astro.config.mjs +8 -0
  76. package/templates/astro/package.json +23 -0
  77. package/templates/astro/public/favicon.svg +9 -0
  78. package/templates/astro/src/assets/astro.svg +1 -0
  79. package/templates/astro/src/assets/background.svg +1 -0
  80. package/templates/astro/src/components/Welcome.astro +210 -0
  81. package/templates/astro/src/layouts/Layout.astro +22 -0
  82. package/templates/astro/src/pages/api/hello.ts +19 -0
  83. package/templates/astro/src/pages/index.astro +11 -0
  84. package/templates/astro/tsconfig.json +18 -0
  85. package/templates/astro/types/env.d.ts +16 -0
  86. package/templates/astro/wrangler.jsonc +6 -0
  87. package/templates/nuxt/README.md +75 -0
  88. package/templates/nuxt/_env +1 -0
  89. package/templates/nuxt/_env.example +1 -0
  90. package/templates/nuxt/_gitignore +27 -0
  91. package/templates/nuxt/alchemy.run.ts +16 -0
  92. package/templates/nuxt/app.vue +6 -0
  93. package/templates/nuxt/nuxt.config.ts +13 -0
  94. package/templates/nuxt/package.json +26 -0
  95. package/templates/nuxt/public/favicon.ico +0 -0
  96. package/templates/nuxt/public/robots.txt +2 -0
  97. package/templates/nuxt/server/api/hello.ts +7 -0
  98. package/templates/nuxt/server/middleware/auth.ts +5 -0
  99. package/templates/nuxt/server/middleware/hello.ts +5 -0
  100. package/templates/nuxt/server/tsconfig.json +3 -0
  101. package/templates/nuxt/tsconfig.json +15 -0
  102. package/templates/nuxt/types/env.d.ts +16 -0
  103. package/templates/react-router/.vscode/settings.json +5 -0
  104. package/templates/react-router/README.md +79 -0
  105. package/templates/react-router/_env +1 -0
  106. package/templates/react-router/_env.example +1 -0
  107. package/templates/react-router/_gitignore +15 -0
  108. package/templates/react-router/alchemy.run.ts +17 -0
  109. package/templates/react-router/app/app.css +15 -0
  110. package/templates/react-router/app/entry.server.tsx +43 -0
  111. package/templates/react-router/app/root.tsx +75 -0
  112. package/templates/react-router/app/routes/home.tsx +17 -0
  113. package/templates/react-router/app/routes.ts +3 -0
  114. package/templates/react-router/app/welcome/logo-dark.svg +23 -0
  115. package/templates/react-router/app/welcome/logo-light.svg +23 -0
  116. package/templates/react-router/app/welcome/welcome.tsx +90 -0
  117. package/templates/react-router/package.json +34 -0
  118. package/templates/react-router/public/favicon.ico +0 -0
  119. package/templates/react-router/react-router.config.ts +8 -0
  120. package/templates/react-router/tsconfig.cloudflare.json +27 -0
  121. package/templates/react-router/tsconfig.json +17 -0
  122. package/templates/react-router/tsconfig.node.json +20 -0
  123. package/templates/react-router/types/env.d.ts +16 -0
  124. package/templates/react-router/vite.config.ts +14 -0
  125. package/templates/react-router/workers/app.ts +23 -0
  126. package/templates/react-router/wrangler.jsonc +6 -0
  127. package/templates/rwsdk/.cursor/rules/rwsdk_rwsdk-interruptors.mdc +247 -0
  128. package/templates/rwsdk/.cursor/rules/rwsdk_rwsdk-middleware.mdc +75 -0
  129. package/templates/rwsdk/.cursor/rules/rwsdk_rwsdk-react.mdc +110 -0
  130. package/templates/rwsdk/.cursor/rules/rwsdk_rwsdk-request-response.mdc +213 -0
  131. package/templates/rwsdk/.devcontainer/Dockerfile +8 -0
  132. package/templates/rwsdk/.devcontainer/devcontainer.json +21 -0
  133. package/templates/rwsdk/README.md +62 -0
  134. package/templates/rwsdk/_env +5 -0
  135. package/templates/rwsdk/_env.example +5 -0
  136. package/templates/rwsdk/_gitignore +71 -0
  137. package/templates/rwsdk/alchemy.run.ts +29 -0
  138. package/templates/rwsdk/package.json +61 -0
  139. package/templates/rwsdk/prisma/schema.prisma +43 -0
  140. package/templates/rwsdk/src/app/Document.tsx +16 -0
  141. package/templates/rwsdk/src/app/headers.ts +32 -0
  142. package/templates/rwsdk/src/app/pages/Home.tsx +13 -0
  143. package/templates/rwsdk/src/app/pages/user/Login.tsx +79 -0
  144. package/templates/rwsdk/src/app/pages/user/functions.ts +171 -0
  145. package/templates/rwsdk/src/app/pages/user/routes.ts +17 -0
  146. package/templates/rwsdk/src/app/shared/links.ts +3 -0
  147. package/templates/rwsdk/src/client.tsx +3 -0
  148. package/templates/rwsdk/src/db.ts +26 -0
  149. package/templates/rwsdk/src/scripts/seed.ts +21 -0
  150. package/templates/rwsdk/src/session/durableObject.ts +63 -0
  151. package/templates/rwsdk/src/session/store.ts +13 -0
  152. package/templates/rwsdk/src/worker.tsx +63 -0
  153. package/templates/rwsdk/tsconfig.json +47 -0
  154. package/templates/rwsdk/types/env.d.ts +16 -0
  155. package/templates/rwsdk/types/rw.d.ts +5 -0
  156. package/templates/rwsdk/types/vite.d.ts +4 -0
  157. package/templates/rwsdk/vite.config.mts +6 -0
  158. package/templates/rwsdk/wrangler.jsonc +28 -0
  159. package/templates/sveltekit/README.md +38 -0
  160. package/templates/sveltekit/_env +1 -0
  161. package/templates/sveltekit/_env.example +1 -0
  162. package/templates/sveltekit/_gitignore +26 -0
  163. package/templates/sveltekit/_npmrc +1 -0
  164. package/templates/sveltekit/_prettierrc +3 -0
  165. package/templates/sveltekit/alchemy.run.ts +16 -0
  166. package/templates/sveltekit/bun.lock +1099 -0
  167. package/templates/sveltekit/package.json +33 -0
  168. package/templates/sveltekit/src/app.css +1 -0
  169. package/templates/sveltekit/src/app.d.ts +13 -0
  170. package/templates/sveltekit/src/app.html +12 -0
  171. package/templates/sveltekit/src/routes/+layout.svelte +7 -0
  172. package/templates/sveltekit/src/routes/+page.svelte +2 -0
  173. package/templates/sveltekit/static/favicon.png +0 -0
  174. package/templates/sveltekit/svelte.config.js +12 -0
  175. package/templates/sveltekit/tsconfig.json +27 -0
  176. package/templates/sveltekit/types/env.d.ts +16 -0
  177. package/templates/sveltekit/vite.config.ts +6 -0
  178. package/templates/sveltekit/wrangler.jsonc +7 -0
  179. package/templates/tanstack-start/.vscode/settings.json +11 -0
  180. package/templates/tanstack-start/README.md +72 -0
  181. package/templates/tanstack-start/_env +1 -0
  182. package/templates/tanstack-start/_env.example +1 -0
  183. package/templates/tanstack-start/_gitignore +22 -0
  184. package/templates/tanstack-start/_prettierignore +4 -0
  185. package/templates/tanstack-start/alchemy.run.ts +16 -0
  186. package/templates/tanstack-start/package.json +37 -0
  187. package/templates/tanstack-start/public/android-chrome-192x192.png +0 -0
  188. package/templates/tanstack-start/public/android-chrome-512x512.png +0 -0
  189. package/templates/tanstack-start/public/apple-touch-icon.png +0 -0
  190. package/templates/tanstack-start/public/favicon-16x16.png +0 -0
  191. package/templates/tanstack-start/public/favicon-32x32.png +0 -0
  192. package/templates/tanstack-start/public/favicon.ico +0 -0
  193. package/templates/tanstack-start/public/favicon.png +0 -0
  194. package/templates/tanstack-start/public/site.webmanifest +19 -0
  195. package/templates/tanstack-start/src/components/DefaultCatchBoundary.tsx +53 -0
  196. package/templates/tanstack-start/src/components/NotFound.tsx +25 -0
  197. package/templates/tanstack-start/src/components/PostError.tsx +5 -0
  198. package/templates/tanstack-start/src/components/UserError.tsx +5 -0
  199. package/templates/tanstack-start/src/router.tsx +22 -0
  200. package/templates/tanstack-start/src/routes/__root.tsx +146 -0
  201. package/templates/tanstack-start/src/routes/_pathlessLayout/_nested-layout/route-a.tsx +10 -0
  202. package/templates/tanstack-start/src/routes/_pathlessLayout/_nested-layout/route-b.tsx +10 -0
  203. package/templates/tanstack-start/src/routes/_pathlessLayout/_nested-layout.tsx +34 -0
  204. package/templates/tanstack-start/src/routes/_pathlessLayout.tsx +16 -0
  205. package/templates/tanstack-start/src/routes/api/users.$userId.ts +28 -0
  206. package/templates/tanstack-start/src/routes/api/users.ts +59 -0
  207. package/templates/tanstack-start/src/routes/customScript[.]js.ts +10 -0
  208. package/templates/tanstack-start/src/routes/deferred.tsx +62 -0
  209. package/templates/tanstack-start/src/routes/index.tsx +12 -0
  210. package/templates/tanstack-start/src/routes/posts.$postId.tsx +34 -0
  211. package/templates/tanstack-start/src/routes/posts.index.tsx +8 -0
  212. package/templates/tanstack-start/src/routes/posts.tsx +38 -0
  213. package/templates/tanstack-start/src/routes/posts_.$postId.deep.tsx +29 -0
  214. package/templates/tanstack-start/src/routes/redirect.tsx +9 -0
  215. package/templates/tanstack-start/src/routes/users.$userId.tsx +44 -0
  216. package/templates/tanstack-start/src/routes/users.index.tsx +18 -0
  217. package/templates/tanstack-start/src/routes/users.tsx +49 -0
  218. package/templates/tanstack-start/src/styles/app.css +12 -0
  219. package/templates/tanstack-start/src/utils/loggingMiddleware.tsx +41 -0
  220. package/templates/tanstack-start/src/utils/posts.tsx +40 -0
  221. package/templates/tanstack-start/src/utils/seo.ts +33 -0
  222. package/templates/tanstack-start/src/utils/users.tsx +5 -0
  223. package/templates/tanstack-start/tsconfig.json +31 -0
  224. package/templates/tanstack-start/types/env.d.ts +16 -0
  225. package/templates/tanstack-start/vite.config.ts +33 -0
  226. package/templates/tanstack-start/wrangler.jsonc +7 -0
  227. package/templates/typescript/README.md +15 -0
  228. package/templates/typescript/_gitignore +37 -0
  229. package/templates/typescript/alchemy.run.ts +15 -0
  230. package/templates/typescript/index.ts +1 -0
  231. package/templates/typescript/package.json +18 -0
  232. package/templates/typescript/src/worker.js +5 -0
  233. package/templates/typescript/src/worker.ts +7 -0
  234. package/templates/typescript/tsconfig.json +21 -0
  235. package/templates/typescript/types/env.d.ts +16 -0
  236. package/templates/vite/README.md +54 -0
  237. package/templates/vite/_env.example +1 -0
  238. package/templates/vite/_gitignore +27 -0
  239. package/templates/vite/alchemy.run.ts +17 -0
  240. package/templates/vite/eslint.config.js +28 -0
  241. package/templates/vite/index.html +13 -0
  242. package/templates/vite/package.json +35 -0
  243. package/templates/vite/public/vite.svg +1 -0
  244. package/templates/vite/src/App.css +42 -0
  245. package/templates/vite/src/App.tsx +35 -0
  246. package/templates/vite/src/assets/react.svg +1 -0
  247. package/templates/vite/src/index.css +68 -0
  248. package/templates/vite/src/main.tsx +10 -0
  249. package/templates/vite/src/vite-env.d.ts +1 -0
  250. package/templates/vite/tsconfig.json +34 -0
  251. package/templates/vite/types/env.d.ts +16 -0
  252. package/templates/vite/vite.config.ts +9 -0
  253. package/templates/vite/worker/index.ts +12 -0
  254. package/templates/vite/wrangler.jsonc +6 -0
  255. package/bin/create-alchemy.ts +0 -1220
package/lib/scope.js CHANGED
@@ -1,8 +1,14 @@
1
1
  import { AsyncLocalStorage } from "node:async_hooks";
2
- import { destroyAll } from "./destroy.js";
2
+ import { destroy, destroyAll } from "./destroy.js";
3
3
  import { FileSystemStateStore } from "./fs/file-system-state-store.js";
4
- import { ResourceID } from "./resource.js";
4
+ import { ResourceFQN, ResourceID, ResourceKind, ResourceScope, ResourceSeq, } from "./resource.js";
5
5
  import { createDummyLogger, createLoggerInstance, } from "./util/cli.js";
6
+ import { AsyncMutex } from "./util/mutex.js";
7
+ export class RootScopeStateAttemptError extends Error {
8
+ constructor() {
9
+ super("Root scope cannot contain state");
10
+ }
11
+ }
6
12
  // TODO: support browser
7
13
  const DEFAULT_STAGE = process.env.ALCHEMY_STAGE ?? process.env.USER ?? "dev";
8
14
  const ScopeSymbol = Symbol.for("alchemy::Scope");
@@ -15,7 +21,7 @@ export class Scope {
15
21
  static storage = (globalThis.__ALCHEMY_STORAGE__ ??=
16
22
  new AsyncLocalStorage());
17
23
  static globals = (globalThis.__ALCHEMY_GLOBALS__ ??= []);
18
- static get() {
24
+ static getScope() {
19
25
  const scope = Scope.storage.getStore();
20
26
  if (!scope) {
21
27
  if (Scope.globals.length > 0) {
@@ -29,7 +35,7 @@ export class Scope {
29
35
  return Scope.current.root;
30
36
  }
31
37
  static get current() {
32
- const scope = Scope.get();
38
+ const scope = Scope.getScope();
33
39
  if (!scope)
34
40
  throw new Error("Not running within an Alchemy Scope");
35
41
  return scope;
@@ -47,6 +53,7 @@ export class Scope {
47
53
  phase;
48
54
  logger;
49
55
  telemetryClient;
56
+ dataMutex;
50
57
  isErrored = false;
51
58
  finalized = false;
52
59
  startedAt = performance.now();
@@ -57,7 +64,7 @@ export class Scope {
57
64
  if (this.scopeName?.includes(":")) {
58
65
  throw new Error(`Scope name ${this.scopeName} cannot contain double colons`);
59
66
  }
60
- this.parent = options.parent ?? Scope.get();
67
+ this.parent = options.parent ?? Scope.getScope();
61
68
  this.stage = options?.stage ?? this.parent?.stage ?? DEFAULT_STAGE;
62
69
  this.parent?.children.set(this.scopeName, this);
63
70
  this.quiet = options.quiet ?? this.parent?.quiet ?? false;
@@ -87,6 +94,7 @@ export class Scope {
87
94
  }
88
95
  this.telemetryClient =
89
96
  options.telemetryClient ?? this.parent?.telemetryClient;
97
+ this.dataMutex = new AsyncMutex();
90
98
  }
91
99
  get root() {
92
100
  let root = this;
@@ -95,7 +103,7 @@ export class Scope {
95
103
  }
96
104
  return root;
97
105
  }
98
- async delete(resourceID) {
106
+ async deleteResource(resourceID) {
99
107
  await this.state.delete(resourceID);
100
108
  this.resources.delete(resourceID);
101
109
  }
@@ -109,7 +117,7 @@ export class Scope {
109
117
  if (this.parent) {
110
118
  return [...this.parent.chain, ...thisScope];
111
119
  }
112
- return [...app, this.stage, ...thisScope];
120
+ return [...app, ...thisScope];
113
121
  }
114
122
  fail() {
115
123
  this.logger.error("Scope failed", this.chain.join("/"));
@@ -125,6 +133,62 @@ export class Scope {
125
133
  fqn(resourceID) {
126
134
  return [...this.chain, resourceID].join("/");
127
135
  }
136
+ /**
137
+ * Centralizes the "lock → locate the right scope → hand the caller a live
138
+ * ScopeState instance and a persist() helper".
139
+ *
140
+ * @param fn Your operation on the scope state.
141
+ * • `state` is already resolved and, if we're at the root, created.
142
+ * • `persist` will write the (possibly-mutated) state back.
143
+ */
144
+ async withScopeState(fn) {
145
+ return this.dataMutex.lock(async () => {
146
+ // 1. We must know where to look.
147
+ if (!this.parent || !this.scopeName) {
148
+ throw new RootScopeStateAttemptError();
149
+ }
150
+ // 2. Pull (or lazily create) the state bucket we care about.
151
+ const isRoot = this.parent.scopeName === this.root.scopeName;
152
+ const state = (await this.parent.state.get(this.scopeName)) ??
153
+ (isRoot
154
+ ? {
155
+ //todo(michael): should this have a different type cause its root?
156
+ kind: "alchemy::Scope",
157
+ id: this.scopeName,
158
+ fqn: this.root.fqn(this.scopeName),
159
+ seq: this.seq(),
160
+ status: "created",
161
+ data: {},
162
+ output: {
163
+ [ResourceID]: this.scopeName,
164
+ [ResourceFQN]: this.root.fqn(this.scopeName),
165
+ [ResourceKind]: "alchemy::Scope",
166
+ [ResourceScope]: this,
167
+ [ResourceSeq]: this.seq(),
168
+ },
169
+ props: {},
170
+ }
171
+ : undefined);
172
+ if (!state)
173
+ throw new RootScopeStateAttemptError();
174
+ return fn(state, (updated) => this.parent.state.set(this.scopeName, updated));
175
+ });
176
+ }
177
+ async set(key, value) {
178
+ return this.withScopeState(async (state, persist) => {
179
+ state.data[key] = value;
180
+ await persist(state); // only one line to save!
181
+ });
182
+ }
183
+ async get(key) {
184
+ return this.withScopeState(async (state) => state.data[key]);
185
+ }
186
+ async delete(key) {
187
+ return this.withScopeState(async (state, persist) => {
188
+ delete state.data[key];
189
+ await persist(state);
190
+ });
191
+ }
128
192
  async run(fn) {
129
193
  return Scope.storage.run(this, () => fn(this));
130
194
  }
@@ -141,7 +205,10 @@ export class Scope {
141
205
  }
142
206
  return null;
143
207
  }
144
- async finalize() {
208
+ async finalize(force) {
209
+ const shouldForce = force ||
210
+ this.parent === undefined ||
211
+ this?.parent?.scopeName === this.root.scopeName;
145
212
  if (this.phase === "read") {
146
213
  this.rootTelemetryClient?.record({
147
214
  event: "app.success",
@@ -149,7 +216,7 @@ export class Scope {
149
216
  });
150
217
  return;
151
218
  }
152
- if (this.finalized) {
219
+ if (this.finalized && !shouldForce) {
153
220
  return;
154
221
  }
155
222
  if (this.parent === undefined && Scope.globals.length > 0) {
@@ -166,10 +233,15 @@ export class Scope {
166
233
  const resourceIds = await this.state.list();
167
234
  const aliveIds = new Set(this.resources.keys());
168
235
  const orphanIds = Array.from(resourceIds.filter((id) => !aliveIds.has(id)));
236
+ if (shouldForce) {
237
+ await this.destroyPendingDeletions();
238
+ await Promise.all(Array.from(this.children.values()).map((child) => child.finalize(shouldForce)));
239
+ }
169
240
  const orphans = await Promise.all(orphanIds.map(async (id) => (await this.state.get(id)).output));
170
241
  await destroyAll(orphans, {
171
242
  quiet: this.quiet,
172
243
  strategy: "sequential",
244
+ force: shouldForce,
173
245
  });
174
246
  this.rootTelemetryClient?.record({
175
247
  event: "app.success",
@@ -186,6 +258,29 @@ export class Scope {
186
258
  }
187
259
  await this.rootTelemetryClient?.finalize();
188
260
  }
261
+ async destroyPendingDeletions() {
262
+ const pendingDeletions = (await this.get("pendingDeletions").catch((e) => {
263
+ if (e instanceof RootScopeStateAttemptError) {
264
+ return [];
265
+ }
266
+ throw e;
267
+ })) ?? [];
268
+ if (pendingDeletions) {
269
+ for (const { resource, oldProps } of pendingDeletions) {
270
+ //todo(michael): ugly hack due to the way scope is serialized
271
+ const realResource = this.resources.get(resource[ResourceID]);
272
+ resource[ResourceScope] = realResource?.[ResourceScope] ?? this;
273
+ await destroy(resource, {
274
+ quiet: this.quiet,
275
+ strategy: "sequential",
276
+ replace: {
277
+ props: oldProps,
278
+ output: resource,
279
+ },
280
+ });
281
+ }
282
+ }
283
+ }
189
284
  /**
190
285
  * Defers execution of a function until the Alchemy application finalizes.
191
286
  */
package/lib/scope.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"scope.js","sourceRoot":"","sources":["../src/scope.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"scope.js","sourceRoot":"","sources":["../src/scope.ts"],"names":[],"mappings":"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"}
@@ -85,7 +85,7 @@ export const Project = Resource("sentry::Project", async function (_id, props) {
85
85
  }
86
86
  }
87
87
  if (!response.ok) {
88
- throw new Error(`API error: ${response.statusText}`);
88
+ throw new Error(`API error: ${await response.text()}`);
89
89
  }
90
90
  const data = (await response.json());
91
91
  return this({
@@ -1 +1 @@
1
- {"version":3,"file":"project.js","sourceRoot":"","sources":["../../src/sentry/project.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"project.js","sourceRoot":"","sources":["../../src/sentry/project.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import { Scope } from "../scope.js";
2
2
  export const logger = new Proxy({}, {
3
3
  get: (_, prop) => {
4
- const logger = Scope.get()?.logger ??
4
+ const logger = Scope.getScope()?.logger ??
5
5
  {
6
6
  log: console.log,
7
7
  error: console.error,
@@ -1 +1 @@
1
- {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/util/logger.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAGpC,MAAM,CAAC,MAAM,MAAM,GAAG,IAAI,KAAK,CAAC,EAAe,EAAE;IAC/C,GAAG,EAAE,CAAC,CAAC,EAAE,IAAqB,EAAE,EAAE;QAChC,MAAM,MAAM,GACV,KAAK,CAAC,GAAG,EAAE,EAAE,MAAM;YAClB;gBACC,GAAG,EAAE,OAAO,CAAC,GAAG;gBAChB,KAAK,EAAE,OAAO,CAAC,KAAK;gBACpB,IAAI,EAAE,OAAO,CAAC,IAAI;gBAClB,IAAI,EAAE,GAAG,EAAE,GAAE,CAAC;gBACd,IAAI,EAAE,GAAG,EAAE,GAAE,CAAC;aACD,CAAC;QAClB,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACnC,CAAC;CACF,CAAC,CAAC"}
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/util/logger.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAGpC,MAAM,CAAC,MAAM,MAAM,GAAG,IAAI,KAAK,CAAC,EAAe,EAAE;IAC/C,GAAG,EAAE,CAAC,CAAC,EAAE,IAAqB,EAAE,EAAE;QAChC,MAAM,MAAM,GACV,KAAK,CAAC,QAAQ,EAAE,EAAE,MAAM;YACvB;gBACC,GAAG,EAAE,OAAO,CAAC,GAAG;gBAChB,KAAK,EAAE,OAAO,CAAC,KAAK;gBACpB,IAAI,EAAE,OAAO,CAAC,IAAI;gBAClB,IAAI,EAAE,GAAG,EAAE,GAAE,CAAC;gBACd,IAAI,EAAE,GAAG,EAAE,GAAE,CAAC;aACD,CAAC;QAClB,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACnC,CAAC;CACF,CAAC,CAAC"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Simple async mutex that ensures only one async operation executes at a time
3
+ */
4
+ export declare class AsyncMutex {
5
+ private locked;
6
+ private queue;
7
+ lock<T>(operation: () => Promise<T>): Promise<T>;
8
+ }
9
+ //# sourceMappingURL=mutex.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mutex.d.ts","sourceRoot":"","sources":["../../src/util/mutex.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,qBAAa,UAAU;IACrB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,KAAK,CAAyB;IAEhC,IAAI,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;CAyBvD"}
@@ -0,0 +1,35 @@
1
+ /**
2
+ * Simple async mutex that ensures only one async operation executes at a time
3
+ */
4
+ export class AsyncMutex {
5
+ locked = false;
6
+ queue = [];
7
+ async lock(operation) {
8
+ return new Promise((resolve, reject) => {
9
+ const execute = async () => {
10
+ this.locked = true;
11
+ try {
12
+ const result = await operation();
13
+ resolve(result);
14
+ }
15
+ catch (error) {
16
+ reject(error);
17
+ }
18
+ finally {
19
+ this.locked = false;
20
+ const next = this.queue.shift();
21
+ if (next) {
22
+ next();
23
+ }
24
+ }
25
+ };
26
+ if (this.locked) {
27
+ this.queue.push(execute);
28
+ }
29
+ else {
30
+ execute();
31
+ }
32
+ });
33
+ }
34
+ }
35
+ //# sourceMappingURL=mutex.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mutex.js","sourceRoot":"","sources":["../../src/util/mutex.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,OAAO,UAAU;IACb,MAAM,GAAG,KAAK,CAAC;IACf,KAAK,GAAsB,EAAE,CAAC;IAEtC,KAAK,CAAC,IAAI,CAAI,SAA2B;QACvC,OAAO,IAAI,OAAO,CAAI,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACxC,MAAM,OAAO,GAAG,KAAK,IAAI,EAAE;gBACzB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;gBACnB,IAAI,CAAC;oBACH,MAAM,MAAM,GAAG,MAAM,SAAS,EAAE,CAAC;oBACjC,OAAO,CAAC,MAAM,CAAC,CAAC;gBAClB,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,MAAM,CAAC,KAAK,CAAC,CAAC;gBAChB,CAAC;wBAAS,CAAC;oBACT,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;oBACpB,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;oBAChC,IAAI,IAAI,EAAE,CAAC;wBACT,IAAI,EAAE,CAAC;oBACT,CAAC;gBACH,CAAC;YACH,CAAC,CAAC;YAEF,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;gBAChB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAC3B,CAAC;iBAAM,CAAC;gBACN,OAAO,EAAE,CAAC;YACZ,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;CACF"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "alchemy",
3
- "version": "0.37.2",
3
+ "version": "0.38.0",
4
4
  "type": "module",
5
5
  "module": "./lib/index.js",
6
6
  "license": "Apache-2.0",
@@ -11,7 +11,8 @@
11
11
  },
12
12
  "scripts": {
13
13
  "build:cli": "./scripts/bundle-cli.sh",
14
- "build": "rm -rf ./*.tsbuildinfo && rm -rf ./lib && tsc -b && bun run build:cli",
14
+ "build": "bun ./scripts/generate-build-date.ts && rm -rf ./*.tsbuildinfo && rm -rf ./lib && tsc -b && bun run build:cli",
15
+ "dev:cli": "./scripts/bundle-cli.sh --watch",
15
16
  "docs:gen": "rm -rf ./docs && typedoc",
16
17
  "postbuild": "cpx 'src/**/*/types.d.ts' lib",
17
18
  "publish:npm": "cp ../README.md . && bun run build && bun run build:cli && npm publish && rm README.md"
@@ -24,7 +25,8 @@
24
25
  "files": [
25
26
  "bin",
26
27
  "lib",
27
- "src"
28
+ "src",
29
+ "templates"
28
30
  ],
29
31
  "exports": {
30
32
  ".": {
@@ -165,30 +167,38 @@
165
167
  "@aws-sdk/client-resource-groups-tagging-api": "^3.830.0",
166
168
  "@aws-sdk/client-s3": "3.726.1",
167
169
  "@biomejs/biome": "^1.9.4",
170
+ "@clack/prompts": "^0.11.0",
168
171
  "@cloudflare/puppeteer": "^1.0.2",
169
- "@cloudflare/workers-types": "^4.20250303.0",
172
+ "@cloudflare/workers-types": "^4.20250620.0",
170
173
  "@iarna/toml": "^2.2.5",
171
- "@inquirer/prompts": "^7.0.0",
172
174
  "@octokit/rest": "^21.1.1",
173
175
  "@types/bun": "latest",
174
176
  "@types/diff": "^5.0.0",
177
+ "@types/fs-extra": "^11.0.4",
175
178
  "@types/libsodium-wrappers": "^0.7.14",
176
179
  "@types/node": "latest",
177
180
  "@types/turndown": "^5.0.5",
178
181
  "ai": "^4.1.16",
182
+ "alchemy": "^0.37.1",
179
183
  "arktype": "^2.1.16",
180
184
  "braintrust": "^0.0.201",
181
185
  "change-case": "^5.4.4",
182
186
  "cloudflare": "^4.2.0",
183
187
  "cpx": "^1.5.0",
188
+ "execa": "^9.6.0",
189
+ "fs-extra": "^11.3.0",
190
+ "globby": "^14.1.0",
184
191
  "libsodium-wrappers": "^0.7.15",
185
192
  "miniflare": "^4.0.0",
193
+ "nitro-cloudflare-dev": "^0.2.2",
186
194
  "openpgp": "^6.1.0",
195
+ "picocolors": "^1.1.1",
187
196
  "prettier": "^3.5.3",
197
+ "trpc-cli": "^0.9.2",
188
198
  "turndown": "^7.2.0",
189
199
  "typedoc": "^0.28.1",
190
200
  "typedoc-plugin-markdown": "^4.6.0",
191
- "typescript": "latest",
201
+ "typescript": "^5.8.3",
192
202
  "vite": "^6.0.7",
193
203
  "vitepress": "^1.6.3",
194
204
  "wrangler": "^3.114.0",
package/src/alchemy.ts CHANGED
@@ -1,6 +1,7 @@
1
1
  import fs from "node:fs/promises";
2
2
  import path from "node:path";
3
3
 
4
+ import { ReplacedSignal } from "./apply.ts";
4
5
  import { DestroyedSignal, destroy } from "./destroy.ts";
5
6
  import { env } from "./env.ts";
6
7
  import {
@@ -15,9 +16,9 @@ import { isRuntime } from "./runtime/global.ts";
15
16
  import { Scope } from "./scope.ts";
16
17
  import { secret } from "./secret.ts";
17
18
  import type { StateStoreType } from "./state.ts";
19
+ import type { LoggerApi } from "./util/cli.ts";
18
20
  import { logger } from "./util/logger.ts";
19
21
  import { TelemetryClient } from "./util/telemetry/client.ts";
20
- import type { LoggerApi } from "./util/cli.ts";
21
22
 
22
23
  /**
23
24
  * Parses CLI arguments to extract alchemy options
@@ -181,21 +182,30 @@ async function _alchemy(
181
182
  const root = new Scope({
182
183
  ...mergedOptions,
183
184
  appName,
184
- stage:
185
- mergedOptions?.stage ?? process.env.ALCHEMY_STAGE ?? process.env.USER,
186
185
  phase,
187
186
  password: mergedOptions?.password ?? process.env.ALCHEMY_PASSWORD,
188
187
  telemetryClient,
189
188
  });
189
+ const stage = new Scope({
190
+ ...mergedOptions,
191
+ scopeName:
192
+ mergedOptions?.stage ?? process.env.ALCHEMY_STAGE ?? process.env.USER,
193
+ parent: root,
194
+ appName,
195
+ stage:
196
+ mergedOptions?.stage ?? process.env.ALCHEMY_STAGE ?? process.env.USER,
197
+ });
190
198
  try {
191
199
  Scope.storage.enterWith(root);
200
+ Scope.storage.enterWith(stage);
192
201
  } catch {
193
202
  // we are in Cloudflare Workers, we will emulate the enterWith behavior
194
203
  // see Scope.finalize for where we pop the global scope
195
204
  Scope.globals.push(root);
205
+ Scope.globals.push(stage);
196
206
  }
197
207
  if (mergedOptions?.phase === "destroy") {
198
- await destroy(root);
208
+ await destroy(stage);
199
209
  return process.exit(0);
200
210
  }
201
211
  return root;
@@ -464,7 +474,9 @@ async function run<T>(
464
474
  }
465
475
  return await _scope.run(async () => fn.bind(_scope)(_scope));
466
476
  } catch (error) {
467
- if (!(error instanceof DestroyedSignal)) {
477
+ if (
478
+ !(error instanceof DestroyedSignal || error instanceof ReplacedSignal)
479
+ ) {
468
480
  _scope.fail();
469
481
  }
470
482
  throw error;
package/src/apply.ts CHANGED
@@ -12,7 +12,7 @@ import {
12
12
  type Resource,
13
13
  type ResourceProps,
14
14
  } from "./resource.ts";
15
- import { Scope } from "./scope.ts";
15
+ import { Scope, type PendingDeletions } from "./scope.ts";
16
16
  import { serialize } from "./serde.ts";
17
17
  import type { State } from "./state.ts";
18
18
  import { formatFQN } from "./util/cli.ts";
@@ -33,6 +33,8 @@ export function apply<Out extends Resource>(
33
33
  return _apply(resource, props, options);
34
34
  }
35
35
 
36
+ export class ReplacedSignal extends Error {}
37
+
36
38
  async function _apply<Out extends Resource>(
37
39
  resource: PendingResource<Out>,
38
40
  props: ResourceProps | undefined,
@@ -88,6 +90,7 @@ async function _apply<Out extends Resource>(
88
90
  };
89
91
  await scope.state.set(resource[ResourceID], state);
90
92
  }
93
+ const oldOutput = state.output;
91
94
 
92
95
  const alwaysUpdate =
93
96
  options?.alwaysUpdate ?? provider.options?.alwaysUpdate ?? false;
@@ -162,33 +165,83 @@ async function _apply<Out extends Resource>(
162
165
  props: state.oldProps,
163
166
  state,
164
167
  replace: () => {
168
+ if (phase === "create") {
169
+ throw new Error(
170
+ `Resource ${resource[ResourceKind]} ${resource[ResourceFQN]} cannot be replaced in create phase.`,
171
+ );
172
+ }
165
173
  if (isReplaced) {
166
174
  logger.warn(
167
175
  `Resource ${resource[ResourceKind]} ${resource[ResourceFQN]} is already marked as REPLACE`,
168
176
  );
169
- return;
170
177
  }
178
+
171
179
  isReplaced = true;
180
+ throw new ReplacedSignal();
172
181
  },
173
182
  });
174
183
 
175
- const output = await alchemy.run(
176
- resource[ResourceID],
177
- {
178
- isResource: true,
179
- parent: scope,
180
- },
181
- async (scope) => {
182
- options?.resolveInnerScope?.(scope);
183
- return provider.handler.bind(ctx)(resource[ResourceID], props);
184
- },
185
- );
184
+ let output: Resource<string>;
185
+ try {
186
+ output = await alchemy.run(
187
+ resource[ResourceID],
188
+ {
189
+ isResource: true,
190
+ parent: scope,
191
+ },
192
+ async (scope) => {
193
+ options?.resolveInnerScope?.(scope);
194
+ return provider.handler.bind(ctx)(resource[ResourceID], props);
195
+ },
196
+ );
197
+ } catch (error) {
198
+ if (error instanceof ReplacedSignal) {
199
+ if (scope.children.get(resource[ResourceID])?.children.size! > 0) {
200
+ throw new Error(
201
+ `Resource ${resource[ResourceFQN]} has children and cannot be replaced.`,
202
+ );
203
+ }
204
+
205
+ output = await alchemy.run(
206
+ resource[ResourceID],
207
+ { isResource: true, parent: scope },
208
+ async () =>
209
+ provider.handler.bind(
210
+ context({
211
+ scope,
212
+ phase: "create",
213
+ kind: resource[ResourceKind],
214
+ id: resource[ResourceID],
215
+ fqn: resource[ResourceFQN],
216
+ seq: resource[ResourceSeq],
217
+ props: state.props,
218
+ state,
219
+ replace: () => {
220
+ throw new Error(
221
+ `Resource ${resource[ResourceKind]} ${resource[ResourceFQN]} cannot be replaced in create phase.`,
222
+ );
223
+ },
224
+ }),
225
+ )(resource[ResourceID], props),
226
+ );
227
+
228
+ const pendingDeletions =
229
+ (await scope.get<PendingDeletions>("pendingDeletions")) ?? [];
230
+ pendingDeletions.push({
231
+ resource: oldOutput,
232
+ oldProps: state.oldProps,
233
+ });
234
+ await scope.set("pendingDeletions", pendingDeletions);
235
+ } else {
236
+ throw error;
237
+ }
238
+ }
186
239
  if (!quiet) {
187
240
  logger.task(resource[ResourceFQN], {
188
241
  prefix: phase === "create" ? "created" : "updated",
189
242
  prefixColor: "greenBright",
190
243
  resource: formatFQN(resource[ResourceFQN]),
191
- message: `${phase === "create" ? "Created" : "Updated"} Resource`,
244
+ message: `${phase === "create" ? "Created" : isReplaced ? "Replaced" : "Updated"} Resource`,
192
245
  status: "success",
193
246
  });
194
247
  }
@@ -213,9 +266,6 @@ async function _apply<Out extends Resource>(
213
266
  props,
214
267
  // deps: [...deps],
215
268
  });
216
- // if (output !== undefined) {
217
- // resource[Provide](output as Out);
218
- // }
219
269
  return output as any;
220
270
  } catch (error) {
221
271
  scope.telemetryClient.record({
@@ -0,0 +1,8 @@
1
+ // This file is auto-generated during build
2
+ // Do not edit manually
3
+
4
+ /**
5
+ * The build date used as the default worker compatibility date.
6
+ * This is set to the date when the package was built.
7
+ */
8
+ export const BUILD_DATE = "2025-06-23";
@@ -196,7 +196,8 @@ export class CloudflareApi {
196
196
  (error) =>
197
197
  error instanceof InternalError ||
198
198
  error instanceof TooManyRequestsError ||
199
- error instanceof ForbiddenError,
199
+ error instanceof ForbiddenError ||
200
+ error.code === "ECONNRESET",
200
201
  10, // Maximum 10 attempts (1 initial + 9 retries)
201
202
  1000, // Start with 1s delay, will exponentially increase
202
203
  );
@@ -522,6 +522,7 @@ export async function createPipeline(
522
522
  api: CloudflareApi,
523
523
  pipelineName: string,
524
524
  props: PipelineProps,
525
+ attempt = 0,
525
526
  ): Promise<CloudflarePipelineResponse> {
526
527
  // Prepare the create payload
527
528
  const createPayload = preparePipelinePayload(api, pipelineName, props);
@@ -532,6 +533,11 @@ export async function createPipeline(
532
533
  );
533
534
 
534
535
  if (!createResponse.ok) {
536
+ if (createResponse.status === 404 && attempt < 3) {
537
+ // bucket does not exist, this might be transient, let's retry
538
+ await new Promise((resolve) => setTimeout(resolve, 1000 * (1 + attempt)));
539
+ return await createPipeline(api, pipelineName, props, attempt + 1);
540
+ }
535
541
  return await handleApiError(
536
542
  createResponse,
537
543
  "creating",