alchemy 0.1.12 → 0.1.13

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 (103) hide show
  1. package/lib/$.d.ts +12 -0
  2. package/lib/$.d.ts.map +1 -0
  3. package/lib/$.js +42 -0
  4. package/lib/$.js.map +1 -0
  5. package/lib/alchemize.d.ts.map +1 -1
  6. package/lib/alchemize.js +7 -0
  7. package/lib/alchemize.js.map +1 -1
  8. package/lib/apply.d.ts +2 -2
  9. package/lib/apply.d.ts.map +1 -1
  10. package/lib/apply.js +1 -1
  11. package/lib/apply.js.map +1 -1
  12. package/lib/cloudflare/api.d.ts +4 -0
  13. package/lib/cloudflare/api.d.ts.map +1 -1
  14. package/lib/cloudflare/api.js +6 -0
  15. package/lib/cloudflare/api.js.map +1 -1
  16. package/lib/cloudflare/bindings.d.ts +14 -4
  17. package/lib/cloudflare/bindings.d.ts.map +1 -1
  18. package/lib/cloudflare/bindings.js +0 -5
  19. package/lib/cloudflare/bindings.js.map +1 -1
  20. package/lib/cloudflare/durable-object-namespace.d.ts +23 -0
  21. package/lib/cloudflare/durable-object-namespace.d.ts.map +1 -0
  22. package/lib/cloudflare/durable-object-namespace.js +26 -0
  23. package/lib/cloudflare/durable-object-namespace.js.map +1 -0
  24. package/lib/cloudflare/index.d.ts +1 -0
  25. package/lib/cloudflare/index.d.ts.map +1 -1
  26. package/lib/cloudflare/index.js +1 -0
  27. package/lib/cloudflare/index.js.map +1 -1
  28. package/lib/cloudflare/kv-namespace.js +1 -1
  29. package/lib/cloudflare/kv-namespace.js.map +1 -1
  30. package/lib/cloudflare/static-site-router.d.ts +11 -2
  31. package/lib/cloudflare/static-site-router.d.ts.map +1 -1
  32. package/lib/cloudflare/static-site-router.js +98 -76
  33. package/lib/cloudflare/static-site-router.js.map +1 -1
  34. package/lib/cloudflare/static-site.d.ts +15 -15
  35. package/lib/cloudflare/static-site.d.ts.map +1 -1
  36. package/lib/cloudflare/static-site.js +41 -25
  37. package/lib/cloudflare/static-site.js.map +1 -1
  38. package/lib/cloudflare/worker-metadata.d.ts +130 -0
  39. package/lib/cloudflare/worker-metadata.d.ts.map +1 -0
  40. package/lib/cloudflare/worker-metadata.js +2 -0
  41. package/lib/cloudflare/worker-metadata.js.map +1 -0
  42. package/lib/cloudflare/worker-migration.d.ts +110 -0
  43. package/lib/cloudflare/worker-migration.d.ts.map +1 -0
  44. package/lib/cloudflare/worker-migration.js +11 -0
  45. package/lib/cloudflare/worker-migration.js.map +1 -0
  46. package/lib/cloudflare/worker.d.ts +29 -11
  47. package/lib/cloudflare/worker.d.ts.map +1 -1
  48. package/lib/cloudflare/worker.js +316 -322
  49. package/lib/cloudflare/worker.js.map +1 -1
  50. package/lib/destroy.d.ts +1 -1
  51. package/lib/destroy.d.ts.map +1 -1
  52. package/lib/destroy.js +2 -1
  53. package/lib/destroy.js.map +1 -1
  54. package/lib/esbuild.d.ts +1 -1
  55. package/lib/esbuild.d.ts.map +1 -1
  56. package/lib/esbuild.js +3 -1
  57. package/lib/esbuild.js.map +1 -1
  58. package/lib/global.d.ts +0 -2
  59. package/lib/global.d.ts.map +1 -1
  60. package/lib/global.js +0 -2
  61. package/lib/global.js.map +1 -1
  62. package/lib/index.d.ts +2 -0
  63. package/lib/index.d.ts.map +1 -1
  64. package/lib/index.js +2 -0
  65. package/lib/index.js.map +1 -1
  66. package/lib/output.d.ts +4 -3
  67. package/lib/output.d.ts.map +1 -1
  68. package/lib/output.js +10 -3
  69. package/lib/output.js.map +1 -1
  70. package/lib/print.d.ts +7 -0
  71. package/lib/print.d.ts.map +1 -0
  72. package/lib/print.js +10 -0
  73. package/lib/print.js.map +1 -0
  74. package/lib/resource.d.ts +8 -4
  75. package/lib/resource.d.ts.map +1 -1
  76. package/lib/resource.js +125 -91
  77. package/lib/resource.js.map +1 -1
  78. package/lib/scope.d.ts +3 -0
  79. package/lib/scope.d.ts.map +1 -1
  80. package/lib/scope.js +4 -12
  81. package/lib/scope.js.map +1 -1
  82. package/package.json +3 -2
  83. package/src/$.ts +69 -0
  84. package/src/alchemize.ts +12 -0
  85. package/src/apply.ts +4 -4
  86. package/src/cloudflare/api.ts +6 -0
  87. package/src/cloudflare/bindings.ts +37 -26
  88. package/src/cloudflare/durable-object-namespace.ts +43 -0
  89. package/src/cloudflare/index.ts +1 -0
  90. package/src/cloudflare/kv-namespace.ts +1 -1
  91. package/src/cloudflare/static-site-router.ts +124 -82
  92. package/src/cloudflare/static-site.ts +63 -47
  93. package/src/cloudflare/worker-metadata.ts +154 -0
  94. package/src/cloudflare/worker-migration.ts +145 -0
  95. package/src/cloudflare/worker.ts +526 -428
  96. package/src/destroy.ts +2 -2
  97. package/src/esbuild.ts +3 -0
  98. package/src/global.ts +0 -3
  99. package/src/index.ts +2 -1
  100. package/src/output.ts +24 -8
  101. package/src/print.ts +18 -0
  102. package/src/resource.ts +156 -115
  103. package/src/scope.ts +7 -12
package/lib/resource.js CHANGED
@@ -2,8 +2,10 @@ import { alchemize } from "./alchemize";
2
2
  import { apply } from "./apply";
3
3
  import { defaultStateStore, deletions, providers } from "./global";
4
4
  import { OutputChain } from "./output";
5
- import { Scope as IScope, getScope, pushScope } from "./scope";
5
+ import { getScope, pushScope } from "./scope";
6
6
  export const ResourceID = Symbol.for("ResourceID");
7
+ export const ResourceFQN = Symbol.for("ResourceFQN");
8
+ export const ResourceHandle = Symbol.for("ResourceHandle");
7
9
  export const Provider = Symbol.for("Provider");
8
10
  export const Input = Symbol.for("Input");
9
11
  export const Value = Symbol.for("Value");
@@ -14,6 +16,8 @@ export const Options = Symbol.for("Options");
14
16
  // properties that pierce through the Proxy
15
17
  const OrthogonalProperties = [
16
18
  ResourceID,
19
+ ResourceFQN,
20
+ ResourceHandle,
17
21
  Provider,
18
22
  Input,
19
23
  Value,
@@ -25,6 +29,9 @@ const OrthogonalProperties = [
25
29
  export function isResource(value) {
26
30
  return value?.[ResourceID] !== undefined;
27
31
  }
32
+ const applied = new Map();
33
+ const destroyed = new WeakMap();
34
+ const i = 0;
28
35
  export function Resource(type, ...args) {
29
36
  if (providers.has(type)) {
30
37
  throw new Error(`Resource ${type} already exists`);
@@ -44,7 +51,11 @@ export function Resource(type, ...args) {
44
51
  // console.warn(`Resource ${id} already exists in the stack: ${stack.id}`);
45
52
  }
46
53
  scope.nodes.set(id, node);
54
+ // const resourceFQN = scope.getScopePath(id) + "/" + id;
47
55
  this[ResourceID] = id;
56
+ this[ResourceHandle] = new Object();
57
+ // this[ResourceFQN] = resourceFQN;
58
+ // this[ResourceFQN] = i++;
48
59
  this[Provider] = Resource;
49
60
  this[Input] = input;
50
61
  this[Value] = undefined;
@@ -64,12 +75,18 @@ export function Resource(type, ...args) {
64
75
  if (OrthogonalProperties.includes(prop)) {
65
76
  return target[prop];
66
77
  }
78
+ else if (prop === "apply") {
79
+ return target[Apply].bind(target);
80
+ }
67
81
  else {
68
82
  return target[Apply]((value) => value[prop]);
69
83
  }
70
84
  },
71
85
  });
72
86
  }
87
+ apply(fn) {
88
+ return this[Apply](fn);
89
+ }
73
90
  [Apply](fn) {
74
91
  return new OutputChain(this, fn);
75
92
  }
@@ -98,106 +115,122 @@ export function Resource(type, ...args) {
98
115
  static async update(stage, resource, deps, inputs, stateStore, options) {
99
116
  // const stack = resource[ResourceStack];
100
117
  const resourceID = resource[ResourceID];
101
- let resourceState = await stateStore.get(resourceID);
102
- if (resourceState === undefined) {
103
- resourceState = {
104
- provider: type,
105
- status: "creating",
106
- data: {},
107
- output: undefined,
108
- deps: [...deps],
109
- inputs,
110
- };
111
- await stateStore.set(resourceID, resourceState);
112
- }
113
118
  const resourceFQN = `${resource[Scope].getScopePath(stage)}/${resourceID}`;
114
- // Skip update if inputs haven't changed and resource is in a stable state
115
- if (resourceState.status === "created" ||
116
- resourceState.status === "updated") {
117
- if (JSON.stringify(resourceState.inputs) === JSON.stringify(inputs) &&
118
- !resource[Options].alwaysUpdate) {
119
- if (!options?.quiet) {
120
- console.log(`Skip: ${resourceFQN} (no changes)`);
121
- }
122
- if (resourceState.output !== undefined) {
123
- resource[Provide](resourceState.output);
124
- }
125
- return resourceState.output;
126
- }
127
- }
128
- const event = resourceState.status === "creating" ? "create" : "update";
129
- resourceState.status = event === "create" ? "creating" : "updating";
130
- resourceState.oldInputs = resourceState.inputs;
131
- resourceState.inputs = inputs;
132
- if (!options?.quiet) {
133
- console.log(`${event === "create" ? "Create" : "Update"}: ${resourceFQN}`);
119
+ const cacheKey = resource[ResourceHandle];
120
+ if (!applied.has(cacheKey)) {
121
+ let res, rej;
122
+ const promise = new Promise((resolve, reject) => {
123
+ res = resolve;
124
+ rej = reject;
125
+ });
126
+ applied.set(cacheKey, promise);
127
+ update().then(res).catch(rej);
128
+ return promise;
134
129
  }
135
- await stateStore.set(resourceID, resourceState);
136
- let isReplaced = false;
137
- const quiet = options.quiet ?? false;
138
- const evaluated = await pushScope(resource[Scope], resourceID, async () => {
139
- const result = await func({
140
- stage,
141
- resourceID,
142
- event,
143
- scope: getScope(),
144
- output: resourceState.output,
145
- replace: () => {
146
- if (isReplaced) {
147
- console.warn(`Resource ${type} ${resourceFQN} is already marked as REPLACE`);
148
- return;
130
+ return await applied.get(cacheKey);
131
+ async function update() {
132
+ let resourceState = await stateStore.get(resourceID);
133
+ if (resourceState === undefined) {
134
+ resourceState = {
135
+ provider: type,
136
+ status: "creating",
137
+ data: {},
138
+ output: undefined,
139
+ deps: [...deps],
140
+ inputs,
141
+ };
142
+ await stateStore.set(resourceID, resourceState);
143
+ }
144
+ // Skip update if inputs haven't changed and resource is in a stable state
145
+ if (resourceState.status === "created" ||
146
+ resourceState.status === "updated") {
147
+ if (JSON.stringify(resourceState.inputs) === JSON.stringify(inputs) &&
148
+ !resource[Options].alwaysUpdate) {
149
+ if (!options?.quiet) {
150
+ console.log(`Skip: ${resourceFQN} (no changes)`);
151
+ }
152
+ if (resourceState.output !== undefined) {
153
+ resource[Provide](resourceState.output);
149
154
  }
150
- isReplaced = true;
151
- deletions.push({
152
- id: resourceID,
153
- data: {
154
- ...resourceState.data,
155
- },
156
- inputs: inputs,
157
- });
158
- },
159
- get: (key) => resourceState.data[key],
160
- set: async (key, value) => {
161
- resourceState.data[key] = value;
162
- await stateStore.set(resourceID, resourceState);
163
- },
164
- delete: async (key) => {
165
- const value = resourceState.data[key];
166
- delete resourceState.data[key];
167
- await stateStore.set(resourceID, resourceState);
168
- return value;
169
- },
170
- quiet,
171
- }, ...inputs);
172
- if (result === undefined) {
173
- return undefined;
155
+ return resourceState.output;
156
+ }
157
+ }
158
+ const event = resourceState.status === "creating" ? "create" : "update";
159
+ resourceState.status = event === "create" ? "creating" : "updating";
160
+ resourceState.oldInputs = resourceState.inputs;
161
+ resourceState.inputs = inputs;
162
+ if (!options?.quiet) {
163
+ console.log(`${event === "create" ? "Create" : "Update"}: ${resourceFQN}`);
174
164
  }
175
- const evaluated = await apply(result, {
176
- stage,
177
- scope: getScope(),
178
- quiet,
165
+ await stateStore.set(resourceID, resourceState);
166
+ let isReplaced = false;
167
+ const quiet = options.quiet ?? false;
168
+ const evaluated = await pushScope(resource[Scope], resourceID, async () => {
169
+ const result = await func({
170
+ stage,
171
+ resourceID,
172
+ resourceFQN,
173
+ event,
174
+ scope: getScope(),
175
+ output: resourceState.output,
176
+ replace: () => {
177
+ if (isReplaced) {
178
+ console.warn(`Resource ${type} ${resourceFQN} is already marked as REPLACE`);
179
+ return;
180
+ }
181
+ isReplaced = true;
182
+ deletions.push({
183
+ id: resourceID,
184
+ data: {
185
+ ...resourceState.data,
186
+ },
187
+ inputs: inputs,
188
+ });
189
+ },
190
+ get: (key) => resourceState.data[key],
191
+ set: async (key, value) => {
192
+ resourceState.data[key] = value;
193
+ await stateStore.set(resourceID, resourceState);
194
+ },
195
+ delete: async (key) => {
196
+ const value = resourceState.data[key];
197
+ delete resourceState.data[key];
198
+ await stateStore.set(resourceID, resourceState);
199
+ return value;
200
+ },
201
+ quiet,
202
+ }, ...inputs);
203
+ if (result === undefined) {
204
+ return undefined;
205
+ }
206
+ const evaluated = await apply(result, {
207
+ stage,
208
+ scope: getScope(),
209
+ quiet,
210
+ });
211
+ return evaluated;
212
+ });
213
+ if (!options?.quiet) {
214
+ console.log(`${event === "create" ? "Created" : "Updated"}: ${resourceFQN}`);
215
+ }
216
+ await stateStore.set(resourceID, {
217
+ provider: type,
218
+ data: resourceState.data,
219
+ status: event === "create" ? "created" : "updated",
220
+ output: evaluated,
221
+ inputs,
222
+ deps: [...deps],
179
223
  });
224
+ if (evaluated !== undefined) {
225
+ resource[Provide](evaluated);
226
+ }
180
227
  return evaluated;
181
- });
182
- if (!options?.quiet) {
183
- console.log(`${event === "create" ? "Created" : "Updated"}: ${resourceFQN}`);
184
- }
185
- await stateStore.set(resourceID, {
186
- provider: type,
187
- data: resourceState.data,
188
- status: event === "create" ? "created" : "updated",
189
- output: evaluated,
190
- inputs,
191
- deps: [...deps],
192
- });
193
- if (evaluated !== undefined) {
194
- resource[Provide](evaluated);
195
228
  }
196
- return evaluated;
197
229
  }
198
230
  static async delete(stage, scope, resourceID, state, inputs, options) {
231
+ const { Scope } = await import("./scope");
199
232
  const resourceFQN = `${scope.getScopePath(stage)}/${resourceID}`;
200
- const nestedScope = new IScope(resourceID, scope);
233
+ const nestedScope = new Scope(resourceID, scope);
201
234
  await alchemize({
202
235
  mode: "destroy",
203
236
  stage,
@@ -213,6 +246,7 @@ export function Resource(type, ...args) {
213
246
  stage,
214
247
  scope,
215
248
  resourceID: resourceID,
249
+ resourceFQN: resourceFQN,
216
250
  event: "delete",
217
251
  output: state.output,
218
252
  replace() {
@@ -1 +1 @@
1
- {"version":3,"file":"resource.js","sourceRoot":"","sources":["../src/resource.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"resource.js","sourceRoot":"","sources":["../src/resource.ts"],"names":[],"mappings":"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"}
package/lib/scope.d.ts CHANGED
@@ -1,3 +1,4 @@
1
+ import type { Output } from "./output";
1
2
  import type { Provider, Resource } from "./resource";
2
3
  export declare class Scope {
3
4
  readonly scopeName: string | null;
@@ -6,9 +7,11 @@ export declare class Scope {
6
7
  provider: Provider<any, any[], any>;
7
8
  resource: Resource<any, any>;
8
9
  }>;
10
+ readonly callbacks: Output<void>[];
9
11
  constructor(scopeName?: string | null, parent?: Scope | undefined);
10
12
  getScopePath(root: string): string;
11
13
  }
14
+ export declare const rootScope: Scope;
12
15
  export declare function getScope(): Scope;
13
16
  export declare function withScope<T>(scope: Scope, fn: () => T | Promise<T>): Promise<T>;
14
17
  export declare function pushScope<T>(parent: Scope, scopeName: string, fn: () => T | Promise<T>): Promise<T>;
@@ -1 +1 @@
1
- {"version":3,"file":"scope.d.ts","sourceRoot":"","sources":["../src/scope.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAc,MAAM,YAAY,CAAC;AAMjE,qBAAa,KAAK;aAUE,SAAS,EAAE,MAAM,GAAG,IAAI;aACxB,MAAM,EAAE,KAAK,GAAG,SAAS;IAV3C,SAAgB,KAAK;kBAGP,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,GAAG,CAAC;kBACzB,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAC;OAE5B;gBAGc,SAAS,GAAE,MAAM,GAAG,IAAW,EAC/B,MAAM,GAAE,KAAK,GAAG,SAAqB;IAGhD,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;CAM1C;AAED,wBAAgB,QAAQ,IAAI,KAAK,CAEhC;AAED,wBAAgB,SAAS,CAAC,CAAC,EACzB,KAAK,EAAE,KAAK,EACZ,EAAE,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,GACvB,OAAO,CAAC,CAAC,CAAC,CAQZ;AAED,wBAAgB,SAAS,CAAC,CAAC,EACzB,MAAM,EAAE,KAAK,EACb,SAAS,EAAE,MAAM,EACjB,EAAE,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,GACvB,OAAO,CAAC,CAAC,CAAC,CAGZ"}
1
+ {"version":3,"file":"scope.d.ts","sourceRoot":"","sources":["../src/scope.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AACvC,OAAO,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAc,MAAM,YAAY,CAAC;AAIjE,qBAAa,KAAK;aAYE,SAAS,EAAE,MAAM,GAAG,IAAI;aACxB,MAAM,EAAE,KAAK,GAAG,SAAS;IAZ3C,SAAgB,KAAK;kBAGP,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,GAAG,CAAC;kBACzB,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAC;OAE5B;IAEJ,SAAgB,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE,CAAM;gBAG7B,SAAS,GAAE,MAAM,GAAG,IAAW,EAC/B,MAAM,GAAE,KAAK,GAAG,SAAqB;IAGhD,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;CAM1C;AAED,eAAO,MAAM,SAAS,OAAkB,CAAC;AAEzC,wBAAgB,QAAQ,IAAI,KAAK,CAEhC;AAED,wBAAgB,SAAS,CAAC,CAAC,EACzB,KAAK,EAAE,KAAK,EACZ,EAAE,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,GACvB,OAAO,CAAC,CAAC,CAAC,CAEZ;AAED,wBAAgB,SAAS,CAAC,CAAC,EACzB,MAAM,EAAE,KAAK,EACb,SAAS,EAAE,MAAM,EACjB,EAAE,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,GACvB,OAAO,CAAC,CAAC,CAAC,CAEZ"}
package/lib/scope.js CHANGED
@@ -1,12 +1,11 @@
1
1
  import { AsyncLocalStorage } from "node:async_hooks";
2
2
  import path from "node:path";
3
- import { rootScope } from "./global";
4
- const scopeGlobal = new Map();
5
3
  const scopeStorage = new AsyncLocalStorage();
6
4
  export class Scope {
7
5
  scopeName;
8
6
  parent;
9
7
  nodes = new Map();
8
+ callbacks = [];
10
9
  constructor(scopeName = null, parent = undefined) {
11
10
  this.scopeName = scopeName;
12
11
  this.parent = parent;
@@ -18,21 +17,14 @@ export class Scope {
18
17
  return this.scopeName ? path.join(parentPath, this.scopeName) : parentPath;
19
18
  }
20
19
  }
20
+ export const rootScope = new Scope(null);
21
21
  export function getScope() {
22
22
  return scopeStorage.getStore() ?? rootScope;
23
23
  }
24
24
  export function withScope(scope, fn) {
25
- return scopeStorage.run(scope, async () => {
26
- try {
27
- return await fn();
28
- }
29
- catch (error) {
30
- throw error;
31
- }
32
- });
25
+ return scopeStorage.run(scope, async () => fn());
33
26
  }
34
27
  export function pushScope(parent, scopeName, fn) {
35
- const newScope = new Scope(scopeName, parent);
36
- return withScope(newScope, fn);
28
+ return scopeStorage.run(new Scope(scopeName, parent), async () => fn());
37
29
  }
38
30
  //# sourceMappingURL=scope.js.map
package/lib/scope.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"scope.js","sourceRoot":"","sources":["../src/scope.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAGrC,MAAM,WAAW,GAAG,IAAI,GAAG,EAAwB,CAAC;AAEpD,MAAM,YAAY,GAAG,IAAI,iBAAiB,EAAS,CAAC;AAEpD,MAAM,OAAO,KAAK;IAUE;IACA;IAVF,KAAK,GAAG,IAAI,GAAG,EAM5B,CAAC;IAEJ,YACkB,YAA2B,IAAI,EAC/B,SAA4B,SAAS;QADrC,cAAS,GAAT,SAAS,CAAsB;QAC/B,WAAM,GAAN,MAAM,CAA+B;IACpD,CAAC;IAEG,YAAY,CAAC,IAAY;QAC9B,yCAAyC;QACzC,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QACvE,mEAAmE;QACnE,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC;IAC7E,CAAC;CACF;AAED,MAAM,UAAU,QAAQ;IACtB,OAAO,YAAY,CAAC,QAAQ,EAAE,IAAI,SAAS,CAAC;AAC9C,CAAC;AAED,MAAM,UAAU,SAAS,CACvB,KAAY,EACZ,EAAwB;IAExB,OAAO,YAAY,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,IAAI,EAAE;QACxC,IAAI,CAAC;YACH,OAAO,MAAM,EAAE,EAAE,CAAC;QACpB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,SAAS,CACvB,MAAa,EACb,SAAiB,EACjB,EAAwB;IAExB,MAAM,QAAQ,GAAG,IAAI,KAAK,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;IAC9C,OAAO,SAAS,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;AACjC,CAAC"}
1
+ {"version":3,"file":"scope.js","sourceRoot":"","sources":["../src/scope.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,IAAI,MAAM,WAAW,CAAC;AAI7B,MAAM,YAAY,GAAG,IAAI,iBAAiB,EAAS,CAAC;AAEpD,MAAM,OAAO,KAAK;IAYE;IACA;IAZF,KAAK,GAAG,IAAI,GAAG,EAM5B,CAAC;IAEY,SAAS,GAAmB,EAAE,CAAC;IAE/C,YACkB,YAA2B,IAAI,EAC/B,SAA4B,SAAS;QADrC,cAAS,GAAT,SAAS,CAAsB;QAC/B,WAAM,GAAN,MAAM,CAA+B;IACpD,CAAC;IAEG,YAAY,CAAC,IAAY;QAC9B,yCAAyC;QACzC,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QACvE,mEAAmE;QACnE,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC;IAC7E,CAAC;CACF;AAED,MAAM,CAAC,MAAM,SAAS,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC;AAEzC,MAAM,UAAU,QAAQ;IACtB,OAAO,YAAY,CAAC,QAAQ,EAAE,IAAI,SAAS,CAAC;AAC9C,CAAC;AAED,MAAM,UAAU,SAAS,CACvB,KAAY,EACZ,EAAwB;IAExB,OAAO,YAAY,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;AACnD,CAAC;AAED,MAAM,UAAU,SAAS,CACvB,MAAa,EACb,SAAiB,EACjB,EAAwB;IAExB,OAAO,YAAY,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,SAAS,EAAE,MAAM,CAAC,EAAE,KAAK,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;AAC1E,CAAC"}
package/package.json CHANGED
@@ -1,10 +1,10 @@
1
1
  {
2
2
  "name": "alchemy",
3
- "version": "0.1.12",
3
+ "version": "0.1.13",
4
4
  "type": "module",
5
5
  "module": "./lib/index.js",
6
6
  "scripts": {
7
- "check": "tsc -b ./tsconfig.test.json",
7
+ "check": "tsc -b ./tsconfig.all.json",
8
8
  "publish:npm": "rm -rf ./lib && tsc -b && npm publish"
9
9
  },
10
10
  "files": ["lib", "src"],
@@ -33,6 +33,7 @@
33
33
  "diff": "^7.0.0",
34
34
  "esbuild": "^0.24.2",
35
35
  "glob": "^10.3.10",
36
+ "hono": "^4.7.4",
36
37
  "jszip": "^3.0.0",
37
38
  "stripe": "^17.7.0",
38
39
  "turndown": "^7.2.0",
package/src/$.ts ADDED
@@ -0,0 +1,69 @@
1
+ import type { Input } from "./input";
2
+ import { type Output, OutputChain } from "./output";
3
+ import { getScope } from "./scope";
4
+
5
+ export type $<T> = T extends
6
+ | undefined
7
+ | null
8
+ | boolean
9
+ | number
10
+ | string
11
+ | symbol
12
+ | bigint
13
+ ? Input<T>
14
+ : T extends (...args: infer Args extends any[]) => infer R
15
+ ? (
16
+ ...args: {
17
+ [i in keyof Args]: $<Args[i]>;
18
+ }
19
+ ) => Output<Awaited<R>>
20
+ : T extends any[]
21
+ ? $array<T>
22
+ : $object<T>;
23
+
24
+ type $object<T> = {
25
+ [i in keyof T]: $<T[i]>;
26
+ };
27
+ type $array<T extends any[]> = T extends [infer First, ...infer Rest]
28
+ ? [$<First>, ...$object<Rest>]
29
+ : [];
30
+
31
+ export function $<T>(value: T): $<T> {
32
+ return new Proxy(() => {}, {
33
+ apply: (_: T, thisArg, args) => {
34
+ const target = value as (...args: any[]) => any;
35
+ let argsOutput: Output<any[]> | undefined;
36
+ for (const arg of args) {
37
+ if (arg instanceof OutputChain) {
38
+ if (argsOutput) {
39
+ argsOutput = arg.apply((arg) =>
40
+ argsOutput!.apply((...args) => [...args, arg]),
41
+ );
42
+ } else {
43
+ argsOutput = arg.apply((arg) => [arg]);
44
+ }
45
+ } else {
46
+ if (argsOutput) {
47
+ argsOutput = argsOutput.apply((args) => [...args, arg]);
48
+ } else {
49
+ argsOutput = new OutputChain({} as any, () => [arg]);
50
+ }
51
+ }
52
+ }
53
+
54
+ const scope = getScope();
55
+ const output = argsOutput
56
+ ? argsOutput.apply((args) => target(...args))
57
+ : new OutputChain({} as any, () => target());
58
+ scope.callbacks.push(output);
59
+ return $(output);
60
+ },
61
+ get: (_: any, prop) => {
62
+ const target = value as any;
63
+ if (target instanceof OutputChain) {
64
+ return $(target.apply((t) => t[prop]));
65
+ }
66
+ return $(target[prop]);
67
+ },
68
+ });
69
+ }
package/src/alchemize.ts CHANGED
@@ -51,6 +51,7 @@ export async function alchemize(options?: AlchemizeOptions) {
51
51
  const stateStore = new (options?.stateStore ?? defaultStateStore)(
52
52
  scope.getScopePath(stage),
53
53
  );
54
+ const callbacks = scope.callbacks;
54
55
 
55
56
  if (nodes.size > 0) {
56
57
  await stateStore.init?.();
@@ -81,6 +82,17 @@ export async function alchemize(options?: AlchemizeOptions) {
81
82
  if (options?.destroyOrphans === false) {
82
83
  return;
83
84
  }
85
+
86
+ await Promise.all(
87
+ callbacks.map((callback) =>
88
+ evaluate(callback, {
89
+ stage,
90
+ scope,
91
+ stateStore,
92
+ quiet: options?.quiet,
93
+ }),
94
+ ),
95
+ );
84
96
  }
85
97
  const aliveIDs = new Set(
86
98
  mode === "up"
package/src/apply.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import { defaultStage, defaultStateStore } from "./global";
2
- import { type Output, OutputChain, type Resolve } from "./output";
2
+ import { type Output, OutputChain, type Resolved } from "./output";
3
3
  import {
4
4
  Input,
5
5
  Provider,
@@ -25,7 +25,7 @@ export interface ApplyOptions {
25
25
  export async function apply<T>(
26
26
  output: T,
27
27
  options?: Partial<ApplyOptions>,
28
- ): Promise<Resolve<T>> {
28
+ ): Promise<Resolved<T>> {
29
29
  const stage = options?.stage ?? defaultStage;
30
30
  const scope = options?.scope ?? getScope();
31
31
  const statePath = scope.getScopePath(stage);
@@ -33,7 +33,7 @@ export async function apply<T>(
33
33
 
34
34
  return (
35
35
  await evaluate(output, { stage, scope, stateStore, quiet: options?.quiet })
36
- ).value as Resolve<T>;
36
+ ).value as Resolved<T>;
37
37
  }
38
38
 
39
39
  class Evaluated<T> {
@@ -83,7 +83,7 @@ export async function evaluate<T>(
83
83
  );
84
84
  resolve!(new Evaluated(result, [resourceID, ...deps]));
85
85
  } catch (error) {
86
- console.error(error);
86
+ // console.error(error);
87
87
  reject!(error);
88
88
  }
89
89
  return promise;
@@ -183,6 +183,12 @@ export class CloudflareApi {
183
183
  return this.fetch(path, { ...init, method: "GET" });
184
184
  }
185
185
 
186
+ /**
187
+ * Helper for HEAD requests
188
+ */
189
+ async head(path: string, init: RequestInit = {}): Promise<Response> {
190
+ return this.fetch(path, { ...init, method: "HEAD" });
191
+ }
186
192
  /**
187
193
  * Helper for POST requests
188
194
  */
@@ -3,6 +3,38 @@
3
3
  * Based on Cloudflare API documentation:
4
4
  * https://developers.cloudflare.com/api/resources/workers/subresources/scripts/methods/update/
5
5
  */
6
+ import type { DurableObjectNamespace } from "./durable-object-namespace";
7
+
8
+ /**
9
+ * Union type for all Worker binding types (Alchemy abstraction)
10
+ */
11
+ export type WorkerBinding = WorkerBindingSpec | DurableObjectNamespace;
12
+
13
+ /**
14
+ * Union type for all Worker binding types (API spec)
15
+ */
16
+ export type WorkerBindingSpec =
17
+ | WorkerBindingAI
18
+ | WorkerBindingAnalyticsEngine
19
+ | WorkerBindingAssets
20
+ | WorkerBindingBrowserRendering
21
+ | WorkerBindingD1
22
+ | WorkerBindingDispatchNamespace
23
+ | WorkerBindingDurableObjectNamespace
24
+ | WorkerBindingHyperdrive
25
+ | WorkerBindingJson
26
+ | WorkerBindingKVNamespace
27
+ | WorkerBindingMTLSCertificate
28
+ | WorkerBindingPlainText
29
+ | WorkerBindingQueue
30
+ | WorkerBindingR2Bucket
31
+ | WorkerBindingSecretText
32
+ | WorkerBindingService
33
+ | WorkerBindingStaticContent
34
+ | WorkerBindingTailConsumer
35
+ | WorkerBindingVectorize
36
+ | WorkerBindingVersionMetadata
37
+ | WorkerBindingWasmModule;
6
38
 
7
39
  /**
8
40
  * AI binding type
@@ -76,6 +108,11 @@ export interface WorkerBindingDispatchNamespace {
76
108
  * Durable Object Namespace binding type
77
109
  */
78
110
  export interface WorkerBindingDurableObjectNamespace {
111
+ /**
112
+ * The stable ID of the binding
113
+ * @internal
114
+ */
115
+ stableId?: string;
79
116
  /** The name of the binding */
80
117
  name: string;
81
118
  /** Type identifier for Durable Object Namespace binding */
@@ -258,29 +295,3 @@ export interface WorkerBindingStaticContent {
258
295
  /** Type identifier for Static Content binding */
259
296
  type: "static_content";
260
297
  }
261
-
262
- /**
263
- * Union type for all Worker binding types
264
- */
265
- export type WorkerBinding =
266
- | WorkerBindingAI
267
- | WorkerBindingAnalyticsEngine
268
- | WorkerBindingAssets
269
- | WorkerBindingBrowserRendering
270
- | WorkerBindingD1
271
- | WorkerBindingDispatchNamespace
272
- | WorkerBindingDurableObjectNamespace
273
- | WorkerBindingHyperdrive
274
- | WorkerBindingJson
275
- | WorkerBindingKVNamespace
276
- | WorkerBindingMTLSCertificate
277
- | WorkerBindingPlainText
278
- | WorkerBindingQueue
279
- | WorkerBindingR2Bucket
280
- | WorkerBindingSecretText
281
- | WorkerBindingService
282
- | WorkerBindingStaticContent
283
- | WorkerBindingTailConsumer
284
- | WorkerBindingVectorize
285
- | WorkerBindingVersionMetadata
286
- | WorkerBindingWasmModule;