alchemy 0.1.14 → 0.1.15

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.
@@ -1 +1 @@
1
- {"version":3,"file":"table.d.ts","sourceRoot":"","sources":["../../src/aws/table.ts"],"names":[],"mappings":"AAaA,MAAM,WAAW,UAAU;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE;QACZ,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;KACvB,CAAC;IACF,OAAO,CAAC,EAAE;QACR,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;KACvB,CAAC;IACF,WAAW,CAAC,EAAE,aAAa,GAAG,iBAAiB,CAAC;IAChD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC/B;AAED,MAAM,WAAW,WAAY,SAAQ,UAAU;IAC7C,EAAE,EAAE,MAAM,CAAC;IACX,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;CACjB;;AAED,qBAAa,KAAM,SAAQ,UAsK1B;CAAG"}
1
+ {"version":3,"file":"table.d.ts","sourceRoot":"","sources":["../../src/aws/table.ts"],"names":[],"mappings":"AAcA,MAAM,WAAW,UAAU;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE;QACZ,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;KACvB,CAAC;IACF,OAAO,CAAC,EAAE;QACR,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;KACvB,CAAC;IACF,WAAW,CAAC,EAAE,aAAa,GAAG,iBAAiB,CAAC;IAChD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC/B;AAED,MAAM,WAAW,WAAY,SAAQ,UAAU;IAC7C,EAAE,EAAE,MAAM,CAAC;IACX,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;CACjB;;AAED,qBAAa,KAAM,SAAQ,UA2L1B;CAAG"}
package/lib/aws/table.js CHANGED
@@ -1,22 +1,31 @@
1
- import { CreateTableCommand, DeleteTableCommand, DescribeTableCommand, DynamoDBClient, ResourceInUseException, ResourceNotFoundException, } from "@aws-sdk/client-dynamodb";
1
+ import { CreateTableCommand, DeleteTableCommand, DescribeTableCommand, DynamoDBClient, InternalServerError, ResourceInUseException, ResourceNotFoundException, } from "@aws-sdk/client-dynamodb";
2
2
  import { ignore } from "../error";
3
3
  import { Resource } from "../resource";
4
4
  import { withExponentialBackoff } from "../utils/retry";
5
5
  export class Table extends Resource("dynamo::Table", async (ctx, props) => {
6
6
  const client = new DynamoDBClient({});
7
7
  if (ctx.event === "delete") {
8
- await ignore(ResourceNotFoundException.name, () => client.send(new DeleteTableCommand({
9
- TableName: props.tableName,
10
- })));
8
+ await withExponentialBackoff(async () => {
9
+ await ignore(ResourceNotFoundException.name, () => client.send(new DeleteTableCommand({
10
+ TableName: props.tableName,
11
+ })));
12
+ }, (error) => error instanceof ResourceInUseException ||
13
+ error instanceof InternalServerError, 10, // Max attempts
14
+ 200);
11
15
  // Wait for table to be deleted
12
16
  let tableDeleted = false;
13
- while (!tableDeleted) {
17
+ let retryCount = 0;
18
+ const maxRetries = 60; // Wait up to 60 seconds
19
+ while (!tableDeleted && retryCount < maxRetries) {
14
20
  try {
15
21
  await client.send(new DescribeTableCommand({
16
22
  TableName: props.tableName,
17
23
  }));
18
24
  // If we get here, table still exists
19
- await new Promise((resolve) => setTimeout(resolve, 1000));
25
+ retryCount++;
26
+ // Increasing delay for each retry with some jitter
27
+ const delay = Math.min(1000 * (1 + 0.1 * Math.random()), 5000);
28
+ await new Promise((resolve) => setTimeout(resolve, delay));
20
29
  }
21
30
  catch (error) {
22
31
  if (error instanceof ResourceNotFoundException) {
@@ -27,6 +36,9 @@ export class Table extends Resource("dynamo::Table", async (ctx, props) => {
27
36
  }
28
37
  }
29
38
  }
39
+ if (!tableDeleted) {
40
+ throw new Error(`Timed out waiting for table ${props.tableName} to be deleted`);
41
+ }
30
42
  return;
31
43
  }
32
44
  else {
@@ -1 +1 @@
1
- {"version":3,"file":"table.js","sourceRoot":"","sources":["../../src/aws/table.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"table.js","sourceRoot":"","sources":["../../src/aws/table.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"kv-namespace.d.ts","sourceRoot":"","sources":["../../src/cloudflare/kv-namespace.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAI1C;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;IAEd;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,MAAM;IACrB;;OAEG;IACH,GAAG,EAAE,MAAM,CAAC;IAEZ;;OAEG;IACH,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;IAEvB;;OAEG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB;;OAEG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB;;OAEG;IACH,QAAQ,CAAC,EAAE,GAAG,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAkB,SAAQ,gBAAgB;IACzD,IAAI,EAAE,cAAc,CAAC;IACrB;;OAEG;IACH,EAAE,EAAE,MAAM,CAAC;IAEX;;OAEG;IACH,SAAS,EAAE,MAAM,CAAC;IAElB;;OAEG;IACH,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,aAAa,CAC3B,QAAQ,EAAE,GAAG,GACZ,QAAQ,IAAI,QAAQ,CAAC,WAAW,CAAC,CAInC;;AAED,qBAAa,WAAY,SAAQ,gBA8HhC;CAAG"}
1
+ {"version":3,"file":"kv-namespace.d.ts","sourceRoot":"","sources":["../../src/cloudflare/kv-namespace.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAK1C;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;IAEd;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,MAAM;IACrB;;OAEG;IACH,GAAG,EAAE,MAAM,CAAC;IAEZ;;OAEG;IACH,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;IAEvB;;OAEG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB;;OAEG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB;;OAEG;IACH,QAAQ,CAAC,EAAE,GAAG,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAkB,SAAQ,gBAAgB;IACzD,IAAI,EAAE,cAAc,CAAC;IACrB;;OAEG;IACH,EAAE,EAAE,MAAM,CAAC;IAEX;;OAEG;IACH,SAAS,EAAE,MAAM,CAAC;IAElB;;OAEG;IACH,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,aAAa,CAC3B,QAAQ,EAAE,GAAG,GACZ,QAAQ,IAAI,QAAQ,CAAC,WAAW,CAAC,CAInC;;AAED,qBAAa,WAAY,SAAQ,gBAgJhC;CAAG"}
@@ -1,4 +1,5 @@
1
1
  import { Resource } from "../resource";
2
+ import { withExponentialBackoff } from "../utils/retry";
2
3
  import { createCloudflareApi } from "./api";
3
4
  export function isKVNamespace(resource) {
4
5
  return (resource && typeof resource === "object" && resource.type === "kv_namespace");
@@ -16,7 +17,7 @@ export class KVNamespace extends Resource("cloudflare::KVNamespace", async (ctx,
16
17
  const errorData = await deleteResponse.json().catch(() => ({
17
18
  errors: [{ message: deleteResponse.statusText }],
18
19
  }));
19
- console.error("Error deleting KV namespace:", errorData.errors?.[0]?.message || deleteResponse.statusText);
20
+ throw new Error(`Error deleting KV namespace '${props.title}': ${errorData.errors?.[0]?.message || deleteResponse.statusText}`);
20
21
  }
21
22
  }
22
23
  // Return minimal output for deleted state
@@ -71,12 +72,28 @@ export class KVNamespace extends Resource("cloudflare::KVNamespace", async (ctx,
71
72
  }
72
73
  return item;
73
74
  });
74
- const bulkResponse = await api.put(`/accounts/${api.accountId}/storage/kv/namespaces/${namespaceId}/bulk`, bulkPayload);
75
- if (!bulkResponse.ok) {
76
- const errorData = await bulkResponse.json().catch(() => ({
77
- errors: [{ message: bulkResponse.statusText }],
78
- }));
79
- console.warn(`Error writing KV batch: ${errorData.errors?.[0]?.message || bulkResponse.statusText}`);
75
+ try {
76
+ await withExponentialBackoff(async () => {
77
+ const bulkResponse = await api.put(`/accounts/${api.accountId}/storage/kv/namespaces/${namespaceId}/bulk`, bulkPayload);
78
+ if (!bulkResponse.ok) {
79
+ const errorData = await bulkResponse
80
+ .json()
81
+ .catch(() => ({
82
+ errors: [{ message: bulkResponse.statusText }],
83
+ }));
84
+ const errorMessage = errorData.errors?.[0]?.message || bulkResponse.statusText;
85
+ // Throw error to trigger retry
86
+ throw new Error(`Error writing KV batch: ${errorMessage}`);
87
+ }
88
+ return bulkResponse;
89
+ }, (error) => {
90
+ // Retry on "namespace not found" errors as they're likely propagation delays
91
+ return error.message?.includes("not found");
92
+ }, 5, // 5 retry attempts
93
+ 1000);
94
+ }
95
+ catch (error) {
96
+ console.warn(error.message);
80
97
  }
81
98
  }
82
99
  }
@@ -1 +1 @@
1
- {"version":3,"file":"kv-namespace.js","sourceRoot":"","sources":["../../src/cloudflare/kv-namespace.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"kv-namespace.js","sourceRoot":"","sources":["../../src/cloudflare/kv-namespace.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"worker.d.ts","sourceRoot":"","sources":["../../src/cloudflare/worker.ts"],"names":[],"mappings":"AAEA,OAAO,EAAU,KAAK,WAAW,EAAE,MAAM,YAAY,CAAC;AACtD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAG1C,OAAO,KAAK,EAAE,QAAQ,EAAqB,MAAM,YAAY,CAAC;AAK9D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAC9D;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB;;;;OAIG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB;;;OAGG;IACH,MAAM,CAAC,EAAE,IAAI,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;IAEzC;;;;;OAKG;IACH,MAAM,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC;IAEvB;;;OAGG;IACH,IAAI,EAAE,MAAM,CAAC;IAEb;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAElB;;OAEG;IACH,QAAQ,CAAC,EAAE,QAAQ,CAAC;IAEpB;;;OAGG;IACH,GAAG,CAAC,EAAE;QACJ,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC;KACvB,CAAC;IAEF;;;;OAIG;IACH,GAAG,CAAC,EAAE,OAAO,CAAC;IAEd;;;;OAIG;IACH,aAAa,CAAC,EAAE;QACd;;;WAGG;QACH,OAAO,CAAC,EAAE,OAAO,CAAC;KACnB,CAAC;IAEF;;OAEG;IACH,UAAU,CAAC,EAAE,mBAAmB,CAAC;CAClC;AAED;;GAEG;AACH,MAAM,WAAW,YAAa,SAAQ,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC;IAC5D,IAAI,EAAE,SAAS,CAAC;IAEhB;;OAEG;IACH,EAAE,EAAE,MAAM,CAAC;IAEX;;OAEG;IACH,SAAS,EAAE,MAAM,CAAC;IAElB;;OAEG;IACH,SAAS,EAAE,MAAM,CAAC;IAElB;;;OAGG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC;IAEb;;OAEG;IACH,QAAQ,EAAE,QAAQ,CAAC;CACpB;AAED,wBAAgB,QAAQ,CAAC,QAAQ,EAAE,GAAG,GAAG,QAAQ,IAAI,QAAQ,CAAC,MAAM,CAAC,CAEpE;;AAED,qBAAa,MAAO,SAAQ,WAqE3B;CAAG"}
1
+ {"version":3,"file":"worker.d.ts","sourceRoot":"","sources":["../../src/cloudflare/worker.ts"],"names":[],"mappings":"AAEA,OAAO,EAAU,KAAK,WAAW,EAAE,MAAM,YAAY,CAAC;AACtD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAI1C,OAAO,KAAK,EAAE,QAAQ,EAAqB,MAAM,YAAY,CAAC;AAK9D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAC9D;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB;;;;OAIG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB;;;OAGG;IACH,MAAM,CAAC,EAAE,IAAI,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;IAEzC;;;;;OAKG;IACH,MAAM,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC;IAEvB;;;OAGG;IACH,IAAI,EAAE,MAAM,CAAC;IAEb;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAElB;;OAEG;IACH,QAAQ,CAAC,EAAE,QAAQ,CAAC;IAEpB;;;OAGG;IACH,GAAG,CAAC,EAAE;QACJ,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC;KACvB,CAAC;IAEF;;;;OAIG;IACH,GAAG,CAAC,EAAE,OAAO,CAAC;IAEd;;;;OAIG;IACH,aAAa,CAAC,EAAE;QACd;;;WAGG;QACH,OAAO,CAAC,EAAE,OAAO,CAAC;KACnB,CAAC;IAEF;;OAEG;IACH,UAAU,CAAC,EAAE,mBAAmB,CAAC;CAClC;AAED;;GAEG;AACH,MAAM,WAAW,YAAa,SAAQ,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC;IAC5D,IAAI,EAAE,SAAS,CAAC;IAEhB;;OAEG;IACH,EAAE,EAAE,MAAM,CAAC;IAEX;;OAEG;IACH,SAAS,EAAE,MAAM,CAAC;IAElB;;OAEG;IACH,SAAS,EAAE,MAAM,CAAC;IAElB;;;OAGG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC;IAEb;;OAEG;IACH,QAAQ,EAAE,QAAQ,CAAC;CACpB;AAED,wBAAgB,QAAQ,CAAC,QAAQ,EAAE,GAAG,GAAG,QAAQ,IAAI,QAAQ,CAAC,MAAM,CAAC,CAEpE;;AAED,qBAAa,MAAO,SAAQ,WAqE3B;CAAG"}
@@ -2,6 +2,7 @@ import * as fs from "fs/promises";
2
2
  import { apply } from "../apply";
3
3
  import { Bundle } from "../esbuild";
4
4
  import { Resource } from "../resource";
5
+ import { withExponentialBackoff } from "../utils/retry";
5
6
  import { createCloudflareApi } from "./api";
6
7
  import { isDurableObjectNamespace } from "./durable-object-namespace";
7
8
  import { isKVNamespace } from "./kv-namespace";
@@ -101,34 +102,48 @@ async function deleteWorker(ctx, api, workerName) {
101
102
  return;
102
103
  }
103
104
  async function putWorker(ctx, api, workerName, scriptContent, scriptMetadata) {
104
- const scriptName = scriptMetadata.main_module ?? scriptMetadata.body_part;
105
- // Create FormData for the upload
106
- const formData = new FormData();
107
- // Add the actual script content as a named file part
108
- formData.append(scriptName, new Blob([scriptContent], {
109
- type: scriptMetadata.main_module
110
- ? "application/javascript+module"
111
- : "application/javascript",
112
- }), scriptName);
113
- // console.log("Script Metadata:", JSON.stringify(scriptMetadata, null, 2));
114
- // Add metadata as JSON
115
- formData.append("metadata", new Blob([JSON.stringify(scriptMetadata)], {
116
- type: "application/json",
117
- }));
118
- // Upload worker script with bindings
119
- const uploadResponse = await api.put(`/accounts/${api.accountId}/workers/scripts/${workerName}`, formData, {
120
- headers: {
121
- "Content-Type": "multipart/form-data",
122
- },
123
- });
124
- // Check if the upload was successful
125
- if (!uploadResponse.ok) {
126
- const errorData = await uploadResponse
127
- .json()
128
- .catch(() => ({ errors: [{ message: uploadResponse.statusText }] }));
129
- throw new Error(`Error uploading worker script '${workerName}': ${errorData.errors?.[0]?.message || uploadResponse.statusText}`);
105
+ return withExponentialBackoff(async () => {
106
+ const scriptName = scriptMetadata.main_module ?? scriptMetadata.body_part;
107
+ // Create FormData for the upload
108
+ const formData = new FormData();
109
+ // Add the actual script content as a named file part
110
+ formData.append(scriptName, new Blob([scriptContent], {
111
+ type: scriptMetadata.main_module
112
+ ? "application/javascript+module"
113
+ : "application/javascript",
114
+ }), scriptName);
115
+ // console.log("Script Metadata:", JSON.stringify(scriptMetadata, null, 2));
116
+ // Add metadata as JSON
117
+ formData.append("metadata", new Blob([JSON.stringify(scriptMetadata)], {
118
+ type: "application/json",
119
+ }));
120
+ await new Promise((resolve) => setTimeout(resolve, 1000));
121
+ // Upload worker script with bindings
122
+ const uploadResponse = await api.put(`/accounts/${api.accountId}/workers/scripts/${workerName}`, formData, {
123
+ headers: {
124
+ "Content-Type": "multipart/form-data",
125
+ },
126
+ });
127
+ // Check if the upload was successful
128
+ if (!uploadResponse.ok) {
129
+ const errorData = await uploadResponse
130
+ .json()
131
+ .catch(() => ({ errors: [{ message: uploadResponse.statusText }] }));
132
+ const errorMessage = `Error (HTTP ${uploadResponse.status}) uploading worker script '${workerName}': ${errorData.errors?.[0]?.message || uploadResponse.statusText}`;
133
+ if (uploadResponse.status === 400 &&
134
+ errorMessage.includes("not found")) {
135
+ throw new NotFoundError(errorMessage);
136
+ }
137
+ throw new Error(errorMessage);
138
+ }
139
+ return formData;
140
+ }, (err) => err instanceof NotFoundError, 10, 100);
141
+ }
142
+ class NotFoundError extends Error {
143
+ constructor(message) {
144
+ super(message);
145
+ this.name = "NotFoundError";
130
146
  }
131
- return formData;
132
147
  }
133
148
  async function prepareWorkerMetadata(ctx, oldBindings, props) {
134
149
  // Prepare metadata with bindings
@@ -1 +1 @@
1
- {"version":3,"file":"worker.js","sourceRoot":"","sources":["../../src/cloudflare/worker.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"worker.js","sourceRoot":"","sources":["../../src/cloudflare/worker.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"retry.d.ts","sourceRoot":"","sources":["../../src/utils/retry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,wBAAsB,sBAAsB,CAAC,CAAC,EAC5C,SAAS,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EAC3B,WAAW,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,OAAO,EACpC,WAAW,SAAI,EACf,cAAc,SAAM,GACnB,OAAO,CAAC,CAAC,CAAC,CAmBZ"}
1
+ {"version":3,"file":"retry.d.ts","sourceRoot":"","sources":["../../src/utils/retry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,wBAAsB,sBAAsB,CAAC,CAAC,EAC5C,SAAS,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EAC3B,WAAW,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,OAAO,EACpC,WAAW,SAAI,EACf,cAAc,SAAM,GACnB,OAAO,CAAC,CAAC,CAAC,CAoBZ"}
@@ -19,6 +19,7 @@ export async function withExponentialBackoff(operation, isRetryable, maxAttempts
19
19
  catch (error) {
20
20
  attempt++;
21
21
  if (attempt >= maxAttempts || !isRetryable(error)) {
22
+ console.warn("Failed after ", attempt, " attempts");
22
23
  throw error;
23
24
  }
24
25
  // Exponential backoff with jitter
@@ -1 +1 @@
1
- {"version":3,"file":"retry.js","sourceRoot":"","sources":["../../src/utils/retry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,SAA2B,EAC3B,WAAoC,EACpC,WAAW,GAAG,CAAC,EACf,cAAc,GAAG,GAAG;IAEpB,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,IAAI,KAAK,GAAG,cAAc,CAAC;IAE3B,OAAO,IAAI,EAAE,CAAC;QACZ,IAAI,CAAC;YACH,OAAO,MAAM,SAAS,EAAE,CAAC;QAC3B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,EAAE,CAAC;YACV,IAAI,OAAO,IAAI,WAAW,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC;gBAClD,MAAM,KAAK,CAAC;YACd,CAAC;YAED,kCAAkC;YAClC,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,GAAG,GAAG,KAAK,CAAC;YAC3C,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC;YACpE,KAAK,IAAI,CAAC,CAAC,CAAC,oCAAoC;QAClD,CAAC;IACH,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"retry.js","sourceRoot":"","sources":["../../src/utils/retry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,SAA2B,EAC3B,WAAoC,EACpC,WAAW,GAAG,CAAC,EACf,cAAc,GAAG,GAAG;IAEpB,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,IAAI,KAAK,GAAG,cAAc,CAAC;IAE3B,OAAO,IAAI,EAAE,CAAC;QACZ,IAAI,CAAC;YACH,OAAO,MAAM,SAAS,EAAE,CAAC;QAC3B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,EAAE,CAAC;YACV,IAAI,OAAO,IAAI,WAAW,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC;gBAClD,OAAO,CAAC,IAAI,CAAC,eAAe,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;gBACpD,MAAM,KAAK,CAAC;YACd,CAAC;YAED,kCAAkC;YAClC,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,GAAG,GAAG,KAAK,CAAC;YAC3C,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC;YACpE,KAAK,IAAI,CAAC,CAAC,CAAC,oCAAoC;QAClD,CAAC;IACH,CAAC;AACH,CAAC"}
package/package.json CHANGED
@@ -1,10 +1,9 @@
1
1
  {
2
2
  "name": "alchemy",
3
- "version": "0.1.14",
3
+ "version": "0.1.15",
4
4
  "type": "module",
5
5
  "module": "./lib/index.js",
6
6
  "scripts": {
7
- "check": "tsc -b ./tsconfig.all.json",
8
7
  "publish:npm": "rm -rf ./lib && tsc -b && npm publish"
9
8
  },
10
9
  "files": ["lib", "src"],
package/src/aws/table.ts CHANGED
@@ -3,6 +3,7 @@ import {
3
3
  DeleteTableCommand,
4
4
  DescribeTableCommand,
5
5
  DynamoDBClient,
6
+ InternalServerError,
6
7
  type KeySchemaElement,
7
8
  ResourceInUseException,
8
9
  ResourceNotFoundException,
@@ -43,17 +44,29 @@ export class Table extends Resource(
43
44
  const client = new DynamoDBClient({});
44
45
 
45
46
  if (ctx.event === "delete") {
46
- await ignore(ResourceNotFoundException.name, () =>
47
- client.send(
48
- new DeleteTableCommand({
49
- TableName: props.tableName,
50
- }),
51
- ),
47
+ await withExponentialBackoff(
48
+ async () => {
49
+ await ignore(ResourceNotFoundException.name, () =>
50
+ client.send(
51
+ new DeleteTableCommand({
52
+ TableName: props.tableName,
53
+ }),
54
+ ),
55
+ );
56
+ },
57
+ (error) =>
58
+ error instanceof ResourceInUseException ||
59
+ error instanceof InternalServerError,
60
+ 10, // Max attempts
61
+ 200, // Initial delay in ms
52
62
  );
53
63
 
54
64
  // Wait for table to be deleted
55
65
  let tableDeleted = false;
56
- while (!tableDeleted) {
66
+ let retryCount = 0;
67
+ const maxRetries = 60; // Wait up to 60 seconds
68
+
69
+ while (!tableDeleted && retryCount < maxRetries) {
57
70
  try {
58
71
  await client.send(
59
72
  new DescribeTableCommand({
@@ -61,7 +74,10 @@ export class Table extends Resource(
61
74
  }),
62
75
  );
63
76
  // If we get here, table still exists
64
- await new Promise((resolve) => setTimeout(resolve, 1000));
77
+ retryCount++;
78
+ // Increasing delay for each retry with some jitter
79
+ const delay = Math.min(1000 * (1 + 0.1 * Math.random()), 5000);
80
+ await new Promise((resolve) => setTimeout(resolve, delay));
65
81
  } catch (error) {
66
82
  if (error instanceof ResourceNotFoundException) {
67
83
  tableDeleted = true;
@@ -71,6 +87,12 @@ export class Table extends Resource(
71
87
  }
72
88
  }
73
89
 
90
+ if (!tableDeleted) {
91
+ throw new Error(
92
+ `Timed out waiting for table ${props.tableName} to be deleted`,
93
+ );
94
+ }
95
+
74
96
  return;
75
97
  } else {
76
98
  // Setup for table creation
@@ -1,5 +1,6 @@
1
1
  import type { Resolved } from "../output";
2
2
  import { type Context, Resource } from "../resource";
3
+ import { withExponentialBackoff } from "../utils/retry";
3
4
  import { createCloudflareApi } from "./api";
4
5
 
5
6
  /**
@@ -86,7 +87,6 @@ export class KVNamespace extends Resource(
86
87
  if (ctx.event === "delete") {
87
88
  // For delete operations, we need to check if the namespace ID exists in the output
88
89
  const namespaceId = ctx.output?.id;
89
-
90
90
  if (namespaceId) {
91
91
  // Delete KV namespace
92
92
  const deleteResponse = await api.delete(
@@ -97,9 +97,8 @@ export class KVNamespace extends Resource(
97
97
  const errorData: any = await deleteResponse.json().catch(() => ({
98
98
  errors: [{ message: deleteResponse.statusText }],
99
99
  }));
100
- console.error(
101
- "Error deleting KV namespace:",
102
- errorData.errors?.[0]?.message || deleteResponse.statusText,
100
+ throw new Error(
101
+ `Error deleting KV namespace '${props.title}': ${errorData.errors?.[0]?.message || deleteResponse.statusText}`,
103
102
  );
104
103
  }
105
104
  }
@@ -172,18 +171,38 @@ export class KVNamespace extends Resource(
172
171
  return item;
173
172
  });
174
173
 
175
- const bulkResponse = await api.put(
176
- `/accounts/${api.accountId}/storage/kv/namespaces/${namespaceId}/bulk`,
177
- bulkPayload,
178
- );
179
-
180
- if (!bulkResponse.ok) {
181
- const errorData: any = await bulkResponse.json().catch(() => ({
182
- errors: [{ message: bulkResponse.statusText }],
183
- }));
184
- console.warn(
185
- `Error writing KV batch: ${errorData.errors?.[0]?.message || bulkResponse.statusText}`,
174
+ try {
175
+ await withExponentialBackoff(
176
+ async () => {
177
+ const bulkResponse = await api.put(
178
+ `/accounts/${api.accountId}/storage/kv/namespaces/${namespaceId}/bulk`,
179
+ bulkPayload,
180
+ );
181
+
182
+ if (!bulkResponse.ok) {
183
+ const errorData: any = await bulkResponse
184
+ .json()
185
+ .catch(() => ({
186
+ errors: [{ message: bulkResponse.statusText }],
187
+ }));
188
+ const errorMessage =
189
+ errorData.errors?.[0]?.message || bulkResponse.statusText;
190
+
191
+ // Throw error to trigger retry
192
+ throw new Error(`Error writing KV batch: ${errorMessage}`);
193
+ }
194
+
195
+ return bulkResponse;
196
+ },
197
+ (error) => {
198
+ // Retry on "namespace not found" errors as they're likely propagation delays
199
+ return error.message?.includes("not found");
200
+ },
201
+ 5, // 5 retry attempts
202
+ 1000, // Start with 1 second delay
186
203
  );
204
+ } catch (error: any) {
205
+ console.warn(error.message);
187
206
  }
188
207
  }
189
208
  }
@@ -3,6 +3,7 @@ import { apply } from "../apply";
3
3
  import { Bundle, type BundleProps } from "../esbuild";
4
4
  import type { Resolved } from "../output";
5
5
  import { type Context, Resource } from "../resource";
6
+ import { withExponentialBackoff } from "../utils/retry";
6
7
  import { type CloudflareApi, createCloudflareApi } from "./api";
7
8
  import type { Bindings, WorkerBindingSpec } from "./bindings";
8
9
  import type { DurableObjectNamespace } from "./durable-object-namespace";
@@ -276,54 +277,78 @@ async function putWorker(
276
277
  scriptContent: string,
277
278
  scriptMetadata: WorkerMetadata,
278
279
  ) {
279
- const scriptName = scriptMetadata.main_module ?? scriptMetadata.body_part!;
280
-
281
- // Create FormData for the upload
282
- const formData = new FormData();
283
-
284
- // Add the actual script content as a named file part
285
- formData.append(
286
- scriptName,
287
- new Blob([scriptContent], {
288
- type: scriptMetadata.main_module
289
- ? "application/javascript+module"
290
- : "application/javascript",
291
- }),
292
- scriptName,
293
- );
280
+ return withExponentialBackoff(
281
+ async () => {
282
+ const scriptName =
283
+ scriptMetadata.main_module ?? scriptMetadata.body_part!;
284
+
285
+ // Create FormData for the upload
286
+ const formData = new FormData();
287
+
288
+ // Add the actual script content as a named file part
289
+ formData.append(
290
+ scriptName,
291
+ new Blob([scriptContent], {
292
+ type: scriptMetadata.main_module
293
+ ? "application/javascript+module"
294
+ : "application/javascript",
295
+ }),
296
+ scriptName,
297
+ );
294
298
 
295
- // console.log("Script Metadata:", JSON.stringify(scriptMetadata, null, 2));
299
+ // console.log("Script Metadata:", JSON.stringify(scriptMetadata, null, 2));
296
300
 
297
- // Add metadata as JSON
298
- formData.append(
299
- "metadata",
300
- new Blob([JSON.stringify(scriptMetadata)], {
301
- type: "application/json",
302
- }),
303
- );
301
+ // Add metadata as JSON
302
+ formData.append(
303
+ "metadata",
304
+ new Blob([JSON.stringify(scriptMetadata)], {
305
+ type: "application/json",
306
+ }),
307
+ );
304
308
 
305
- // Upload worker script with bindings
306
- const uploadResponse = await api.put(
307
- `/accounts/${api.accountId}/workers/scripts/${workerName}`,
308
- formData,
309
- {
310
- headers: {
311
- "Content-Type": "multipart/form-data",
312
- },
309
+ await new Promise((resolve) => setTimeout(resolve, 1000));
310
+
311
+ // Upload worker script with bindings
312
+ const uploadResponse = await api.put(
313
+ `/accounts/${api.accountId}/workers/scripts/${workerName}`,
314
+ formData,
315
+ {
316
+ headers: {
317
+ "Content-Type": "multipart/form-data",
318
+ },
319
+ },
320
+ );
321
+
322
+ // Check if the upload was successful
323
+ if (!uploadResponse.ok) {
324
+ const errorData: any = await uploadResponse
325
+ .json()
326
+ .catch(() => ({ errors: [{ message: uploadResponse.statusText }] }));
327
+
328
+ const errorMessage = `Error (HTTP ${uploadResponse.status}) uploading worker script '${workerName}': ${errorData.errors?.[0]?.message || uploadResponse.statusText}`;
329
+
330
+ if (
331
+ uploadResponse.status === 400 &&
332
+ errorMessage.includes("not found")
333
+ ) {
334
+ throw new NotFoundError(errorMessage);
335
+ }
336
+ throw new Error(errorMessage);
337
+ }
338
+
339
+ return formData;
313
340
  },
341
+ (err) => err instanceof NotFoundError,
342
+ 10,
343
+ 100,
314
344
  );
345
+ }
315
346
 
316
- // Check if the upload was successful
317
- if (!uploadResponse.ok) {
318
- const errorData: any = await uploadResponse
319
- .json()
320
- .catch(() => ({ errors: [{ message: uploadResponse.statusText }] }));
321
- throw new Error(
322
- `Error uploading worker script '${workerName}': ${errorData.errors?.[0]?.message || uploadResponse.statusText}`,
323
- );
347
+ class NotFoundError extends Error {
348
+ constructor(message: string) {
349
+ super(message);
350
+ this.name = "NotFoundError";
324
351
  }
325
-
326
- return formData;
327
352
  }
328
353
 
329
354
  interface WorkerMetadata {
@@ -24,6 +24,7 @@ export async function withExponentialBackoff<T>(
24
24
  } catch (error) {
25
25
  attempt++;
26
26
  if (attempt >= maxAttempts || !isRetryable(error)) {
27
+ console.warn("Failed after ", attempt, " attempts");
27
28
  throw error;
28
29
  }
29
30
 
package/README.md DELETED
@@ -1,334 +0,0 @@
1
- # Alchemy
2
-
3
- Alchemy is a JS-native, embeddable library for the materialization of resource graphs. From Infrastructure-as-Code (IaC) to code generation, Alchemy provides the fundamental building blocks for modeling resources that are Created, Updated and Deleted automatically.
4
-
5
- Unlike similar tools like Pulumi, Terraform, and CloudFormation, Alchemy is implemented in pure ESM-native TypeScript with zero dependencies. It can run in any JavaScript runtime, including the browser.
6
-
7
- [![Demo](./alchemy.gif)](./alchemy.gif)
8
-
9
- # Features
10
-
11
- - **JS-native** - no second language, toolchains, dependencies, processes, services, etc. to lug around.
12
- - **ESM-native** - built exclusively on ESM, with a slight preference for modern JS runtimes like Bun.
13
- - **Embeddable** - runs in any JavaScript/TypeScript environment, including the browser!
14
- - **Extensible** - implement your own resources with a simple function.
15
- - **AI-first** - alchemy actively encourages you to use LLMs to create/copy/fork/modify resources to fit your needs. No more waiting around for a provider to be implemented, just do it yourself in a few minutes.
16
- - **No dependencies** - the `alchemy` core package has 0 required dependencies.
17
- - **No service** - state files are stored locally in your project and can be easily inspected, modified, checked into your repo, etc.
18
- - **No strong opinions** - structure your codebase however you want, store state anywhere - we don't care!
19
-
20
- # Examples
21
-
22
- - LLM-based code generation of all 200+ AWS CloudFormation resources: [examples/generate-aws-cfn/gen.ts](./examples/generate-aws-cfn/gen.ts)
23
- - Deploy an AWS Lambda Function with a DynamoDB Table and IAM Role: [examples/deploy-aws/app.ts](./examples/deploy-aws/)
24
- - Generate a TODO application from a Markdown document: [examples/markdown-program/index.md](./examples/markdown-program/)
25
-
26
- # Getting Started
27
-
28
- An alchemy "app" (if you want to call it that) is just an ordinary TypeScript or JavaScript script. Once you've installed the `alchemy` package, you can start using it however you want.
29
-
30
- ```bash
31
- # I recommend bun, but you can use any JavaScript runtime.
32
- bun add alchemy
33
- ```
34
-
35
- Usually, you'll want to create a script where you'll define your resources.
36
-
37
- ```ts
38
- import { Role } from "alchemy/aws";
39
-
40
- const role = new Role("my-role", {
41
- roleName: "my-role",
42
- assumeRolePolicy: {
43
- Version: "2012-10-17",
44
- Statement: [
45
- {
46
- Effect: "Allow",
47
- // Or whatever principal you want
48
- Principal: { Service: "lambda.amazonaws.com" },
49
- Action: "sts:AssumeRole",
50
- },
51
- ],
52
- },
53
- });
54
- ```
55
-
56
- Then, call `alchemize` at the end to trigger the Create/Update/Delete lifecycle.
57
-
58
- ```ts
59
- await alchemize();
60
- ```
61
-
62
- Finally, run your script.
63
-
64
- ```sh
65
- bun ./my-app.ts
66
- ```
67
-
68
- You'll notice some files show up in your repo:
69
-
70
- ```
71
- .alchemy/
72
- - sam/
73
- - my-role.json
74
- ```
75
-
76
- Go ahead, click on one and take a look. Here's how my role looks:
77
-
78
- ```jsonc
79
- {
80
- "provider": "iam::Role",
81
- "data": {},
82
- "deps": [],
83
- "status": "updated",
84
- "output": {
85
- "roleName": "alchemy-api-lambda-role"
86
- // ..
87
- },
88
- "inputs": [
89
- {
90
- "roleName": "alchemy-api-lambda-role",
91
- "assumeRolePolicy": {
92
- "Version": "2012-10-17"
93
- // ..
94
- }
95
- }
96
- ]
97
- }
98
- ```
99
-
100
- > [!TIP]
101
- > Alchemy goes to great effort to be fully transparent. State is just a JSON file, nothing more. You can inspect it, modify it, commit it to your repo, etc.
102
-
103
- ## `alchemize`
104
-
105
- Calling `alchemize` will create new resources, update modified resources and then delete "orphaned" resources at the end.
106
-
107
- This is equivalent to `terraform apply`, `pulumi up`, `cdk deploy`, etc. except really fast and in your control.
108
-
109
- ## Creating a Resource Provider
110
-
111
- Adding new resources is the whole point of Alchemy, and is therefore very simple.
112
-
113
- A Resource provider is just a function with a globally unique name, e.g. `dynamo::Table`, and an implementation of the Create, Update, Delete lifecycle operations.
114
-
115
- E.g. below we show what a simple `dynamo::Table` provider might look like.
116
-
117
- > [!NOTE]
118
- > See [table.ts](./alchemy/src/components/aws/table.ts) for the full implementation.
119
-
120
- ```ts
121
- interface TableInputs {
122
- name: string;
123
- //..
124
- }
125
- interface TableOutput {
126
- tableArn: string;
127
- }
128
- class Table extends Resource(
129
- "dynamo::Table",
130
- async (ctx: Context<TableOutput>, inputs: TableInputs) => {
131
- if (ctx.event === "create") {
132
- // create logic
133
- } else if (ctx.event === "update") {
134
- // update logic
135
- } else if (ctx.event === "delete") {
136
- // delete logic
137
- }
138
- // ..
139
- return output;
140
- }
141
- ) {}
142
- ```
143
-
144
- > [!TIP]
145
- > Use Cursor or an LLM like Claude/OpenAI to generate the implementation of your resource. I think you'll be pleasantly surprised at how well it works, especially if you provide the API reference docs in your context.
146
-
147
- That's it! Now you can instantiate tables in your app.
148
-
149
- ```ts
150
- const table = new Table("items", {
151
- name: "items",
152
- //..
153
- });
154
-
155
- table.tableArn; // Output<string>
156
- ```
157
-
158
- You may have noticed the odd pattern of extending the result of a function call, `extends Resource(..)`. This is called the "mix-in" pattern and is optional. You are free to just use a `const` instead:
159
-
160
- ```ts
161
- const Table = Resource("dynamo::Table", async (ctx, inputs) => {
162
- //..
163
- });
164
-
165
- const table = new Table("items", {
166
- name: "items",
167
- //..
168
- });
169
- ```
170
-
171
- > [!TIP]
172
- > I recommend using a class so each resource has a type, e.g. `Table`, and a place to add helper/utility methods. Totally optional, though. Knock yourself out.
173
-
174
- ## Lazy Outputs
175
-
176
- A Resource is evaluated lazily (not when you call `new`), so you can't immediately access the value of a property like `tableArn` or `functionArn`. Instead you reference properties using the `Output<T>` interface.
177
-
178
- ```ts
179
- const table = new Table("my-table", { .. });
180
-
181
- const tableArn = table.tableArn; // Output<string>
182
- ```
183
-
184
- Outputs can be chained explicitly and implicitly:
185
-
186
- 1. _Explicitly_ with `.apply`
187
-
188
- ```ts
189
- const tableArn: Output<string> = table.tableArn.apply((arn: string) =>
190
- // do something with the arn string value
191
- arn.replace("table", "arn:aws:dynamodb:")
192
- );
193
- ```
194
-
195
- 2. _Implicitly_ chained
196
-
197
- ```ts
198
- const tableArn = table.attributeDefinitions[0].attributeName; // Output<string>
199
- // equivalent to:
200
- // table.apply(t => t.attributeDefinitions[0].attributeName);
201
- ```
202
-
203
- > [!NOTE]
204
- > Output is inspired by Pulumi, with a little extra added sugar.
205
-
206
- ## `apply` and `destroy`
207
-
208
- Calling `alchemize` is optional. Any object in your graph (`Resource` or `Output<T>`) can be "applied" or "destroyed" individually and programmatically.
209
-
210
- Say, you've got some two resources, a `Role` and a `Function`.
211
-
212
- ```ts
213
- const role = new Role("my-role", {
214
- name: "my-role",
215
- //..
216
- });
217
-
218
- const func = new Function("my-function", {
219
- name: "my-function",
220
- role: role.roleArn,
221
- //..
222
- });
223
- ```
224
-
225
- Each of these Resources is known as a "sub-graph".
226
-
227
- In this case we have `Role` (a 1-node graph, `Role`), and `Function` (a 2-node graph, `Role → Function`).
228
-
229
- Each sub-graph can be "applied" or "destroyed" individually using the `apply` and `destroy` functions:
230
-
231
- ```ts
232
- import { apply, destroy } from "alchemy";
233
-
234
- // will create Role and then Function (in that order)
235
- const { functionArn } = await apply(func);
236
-
237
- // you can destroy it right after if you want ☠️
238
- await destroy(func); // will delete just the Function
239
-
240
- // destroy deletes the resource and any downstream dependencies
241
- // so, if you want to delete Role AND Function, you should call destroy(role)
242
- await destroy(role); // will delete Role and then Function
243
- ```
244
-
245
- ## Destroying the app
246
-
247
- To destroy the whole app (aka. the whole graph), you can call `alchemize` with the `mode: "destroy"` option. This will delete all resources in the specified or default stage.
248
-
249
- ```ts
250
- await alchemize({ mode: "destroy", stage: <optional> });
251
- ```
252
-
253
- > [!TIP]
254
- > Alchemy is designed to have the minimum number of opinions as possible. This "embeddable" design is so that you can implement your own tools around Alchemy, e.g. a CLI or UI, instead of being stuck with a specific tool.
255
- >
256
- > ```ts
257
- > await alchemize({
258
- > // decide the mode/stage however you want, e.g. a CLI parser
259
- > mode: process.argv[2] === "destroy" ? "destroy" : "up",
260
- > stage: process.argv[3],
261
- > });
262
- > ```
263
-
264
- ## "Stage" and State
265
-
266
- > [!NOTE]
267
- > Stage is inspired by [SST](https://sst.dev)'s stage concept.
268
-
269
- Alchemy supports a "stage" concept to help isolate different environments from each other. E.g. a `"user"` or `"dev"` or `"prod"` stage.
270
-
271
- By default, the stage is assumed to be your user name (a sensible default for local development).
272
-
273
- To override the stage, you have three options:
274
-
275
- 1. Pass the `stage` option to `alchemize`/`apply`/`destroy` (recommended)
276
-
277
- ```ts
278
- // alchemize the entire app
279
- await alchemize({ stage: "production" });
280
-
281
- // apply a single resource
282
- await apply(func, { stage: "production" });
283
- ```
284
-
285
- 2. Config in `./alchemy.ts` (up to you if you want to have a global config). See the [alchemy.ts section](#global-values-and-the-alchemy-ts-config-file) for more details.
286
-
287
- ```ts
288
- export default {
289
- defaultStage: "production",
290
- };
291
- ```
292
-
293
- 3. Set the `ALCHEMY_STAGE` environment variable (not recommended, but available as an escape hatch)
294
-
295
- ```sh
296
- ALCHEMY_STAGE=production bun ./my-app.ts
297
- ```
298
-
299
- Each Resource "provider" can access the stage it's being deployed to via the `ctx.stage` property.
300
-
301
- ```ts
302
- class Table extends Resource("dynamo::Table", async (ctx, inputs) => {
303
- ctx.stage; // "production"
304
- });
305
- ```
306
-
307
- > [!CAUTION]
308
- > It is up to you to ensure that the physical names of resources don't conflict - alchemy does not (yet) offer any help or opinions here. You must decide on physical names, but you're free to add name generation logic to your resources if you so desire.
309
- >
310
- > ```ts
311
- > class Table extends Resource("dynamo::Table", async (ctx, inputs) => {
312
- > const tableName = `${ctx.stage}-${inputs.tableName}`;
313
- >
314
- > // ..
315
- > });
316
- > ```
317
-
318
- ## Global values and the `alchemy.ts` config file.
319
-
320
- Alchemy looks for a `${cwd}/alchemy.ts` file and imports it if it finds it. This can be useful for emulating SST's `sst.config.ts` file as a convention for global configuration.
321
-
322
- It supports overriding the `defaultStage` (instead of defaulting to your username) and providing a custom `stateStore` (instead of writing to the local file system).
323
-
324
- ```ts
325
- import type { Config } from "alchemy";
326
-
327
- export default {
328
- defaultStage: "dev",
329
- stateStore: myCustomStateStore,
330
- } satisfies Config;
331
- ```
332
-
333
- > [!NOTE]
334
- > See [global.ts](./alchemy/src/global.ts).