alchemy 0.17.1 → 0.18.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 (58) hide show
  1. package/lib/ai/document.d.ts +11 -0
  2. package/lib/ai/document.d.ts.map +1 -1
  3. package/lib/ai/document.js +1 -1
  4. package/lib/ai/document.js.map +1 -1
  5. package/lib/alchemy.d.ts.map +1 -1
  6. package/lib/alchemy.js +1 -2
  7. package/lib/alchemy.js.map +1 -1
  8. package/lib/aws/control/client.d.ts +134 -0
  9. package/lib/aws/control/client.d.ts.map +1 -0
  10. package/lib/aws/control/client.js +232 -0
  11. package/lib/aws/control/client.js.map +1 -0
  12. package/lib/aws/control/error.d.ts +63 -0
  13. package/lib/aws/control/error.d.ts.map +1 -0
  14. package/lib/aws/control/error.js +93 -0
  15. package/lib/aws/control/error.js.map +1 -0
  16. package/lib/aws/control/index.d.ts +6 -0
  17. package/lib/aws/control/index.d.ts.map +1 -0
  18. package/lib/aws/control/index.js +6 -0
  19. package/lib/aws/control/index.js.map +1 -0
  20. package/lib/aws/control/properties.d.ts +1874 -0
  21. package/lib/aws/control/properties.d.ts.map +1 -0
  22. package/lib/aws/control/properties.js +6945 -0
  23. package/lib/aws/control/properties.js.map +1 -0
  24. package/lib/aws/control/proxy.d.ts +7 -0
  25. package/lib/aws/control/proxy.d.ts.map +1 -0
  26. package/lib/aws/control/proxy.js +29 -0
  27. package/lib/aws/control/proxy.js.map +1 -0
  28. package/lib/aws/control/resource.d.ts +110 -0
  29. package/lib/aws/control/resource.d.ts.map +1 -0
  30. package/lib/aws/control/resource.js +192 -0
  31. package/lib/aws/control/resource.js.map +1 -0
  32. package/lib/destroy.d.ts.map +1 -1
  33. package/lib/destroy.js +2 -2
  34. package/lib/destroy.js.map +1 -1
  35. package/lib/resource.d.ts +7 -1
  36. package/lib/resource.d.ts.map +1 -1
  37. package/lib/resource.js +20 -0
  38. package/lib/resource.js.map +1 -1
  39. package/lib/test/bun.d.ts.map +1 -1
  40. package/lib/test/bun.js +1 -2
  41. package/lib/test/bun.js.map +1 -1
  42. package/lib/vercel/project.d.ts.map +1 -1
  43. package/lib/vercel/project.js +7 -4
  44. package/lib/vercel/project.js.map +1 -1
  45. package/package.json +5 -1
  46. package/src/ai/document.ts +1 -1
  47. package/src/alchemy.ts +2 -3
  48. package/src/aws/control/client.ts +450 -0
  49. package/src/aws/control/error.ts +84 -0
  50. package/src/aws/control/index.ts +6 -0
  51. package/src/aws/control/properties.ts +6946 -0
  52. package/src/aws/control/proxy.ts +40 -0
  53. package/src/aws/control/resource.ts +346 -0
  54. package/src/aws/control/types.d.ts +85129 -0
  55. package/src/destroy.ts +4 -7
  56. package/src/resource.ts +32 -1
  57. package/src/test/bun.ts +1 -2
  58. package/src/vercel/project.ts +11 -4
package/src/destroy.ts CHANGED
@@ -1,14 +1,13 @@
1
1
  import { alchemy } from "./alchemy.js";
2
2
  import { context } from "./context.js";
3
3
  import {
4
- PROVIDERS,
4
+ resolveDeletionHandler,
5
+ type Resource,
5
6
  ResourceFQN,
6
7
  ResourceID,
7
8
  ResourceKind,
8
9
  ResourceScope,
9
10
  ResourceSeq,
10
- type Provider,
11
- type Resource,
12
11
  } from "./resource.js";
13
12
  import { Scope } from "./scope.js";
14
13
 
@@ -70,9 +69,7 @@ export async function destroy<Type extends string>(
70
69
  return await destroy(scope, options);
71
70
  }
72
71
 
73
- const Provider: Provider<Type> | undefined = PROVIDERS.get(
74
- instance[ResourceKind],
75
- );
72
+ const Provider = resolveDeletionHandler(instance[ResourceKind]);
76
73
  if (!Provider) {
77
74
  throw new Error(
78
75
  `Cannot destroy resource "${instance[ResourceFQN]}" type ${instance[ResourceKind]} - no provider found. You may need to import the provider in your alchemy.config.ts.`,
@@ -124,7 +121,7 @@ export async function destroy<Type extends string>(
124
121
  nestedScope = scope;
125
122
  return await Provider.handler.bind(ctx)(
126
123
  instance[ResourceID],
127
- state.props,
124
+ state.props!,
128
125
  );
129
126
  },
130
127
  );
package/src/resource.ts CHANGED
@@ -2,7 +2,38 @@ import { apply } from "./apply.js";
2
2
  import type { Context } from "./context.js";
3
3
  import { Scope as _Scope, type Scope } from "./scope.js";
4
4
 
5
- export const PROVIDERS = new Map<ResourceKind, Provider<string, any>>();
5
+ export const PROVIDERS: Map<ResourceKind, Provider<string, any>> = new Map<
6
+ ResourceKind,
7
+ Provider<string, any>
8
+ >();
9
+ const DYNAMIC_RESOURCE_RESOLVERS: DynamicResourceResolver[] = [];
10
+
11
+ export type DynamicResourceResolver = (
12
+ typeName: string,
13
+ ) => Provider | undefined;
14
+
15
+ /**
16
+ * Register a function that will be called if a Resource Type cannot be found during deletion.
17
+ */
18
+ export function registerDynamicResource(
19
+ handler: DynamicResourceResolver,
20
+ ): void {
21
+ DYNAMIC_RESOURCE_RESOLVERS.push(handler);
22
+ }
23
+
24
+ export function resolveDeletionHandler(typeName: string): Provider | undefined {
25
+ const provider: Provider<string, any> | undefined = PROVIDERS.get(typeName);
26
+ if (provider) {
27
+ return provider;
28
+ }
29
+ for (const handler of DYNAMIC_RESOURCE_RESOLVERS) {
30
+ const result = handler(typeName);
31
+ if (result) {
32
+ return result;
33
+ }
34
+ }
35
+ return undefined;
36
+ }
6
37
 
7
38
  export type ResourceID = string;
8
39
  export const ResourceID = Symbol.for("alchemy::ResourceID");
package/src/test/bun.ts CHANGED
@@ -191,7 +191,7 @@ export function test(meta: ImportMeta, defaultOptions?: TestOptions): test {
191
191
 
192
192
  return it(
193
193
  testName,
194
- async () =>
194
+ () =>
195
195
  alchemy.run(
196
196
  testName,
197
197
  {
@@ -199,7 +199,6 @@ export function test(meta: ImportMeta, defaultOptions?: TestOptions): test {
199
199
  parent: scope,
200
200
  },
201
201
  async (scope) => {
202
- // Enter test scope since bun calls from different scope
203
202
  await scope.run(() => fn(scope));
204
203
  },
205
204
  ),
@@ -398,10 +398,17 @@ export const Project = Resource(
398
398
  );
399
399
  }
400
400
 
401
- // 409 Conflict: Can't update name, so remove it from the props
402
- // 400 Invalid Request: Should NOT have additional property `environmentVariables`
403
- const { environmentVariables, ...rest } = props;
404
- const response = await api.patch(`/projects/${this.output.id}`, rest);
401
+ const { environmentVariables, ...updateProps }: any = { ...props };
402
+ // 409 Conflict: Can't update these properties, so remove them from the updateProps
403
+ delete updateProps.name;
404
+ delete updateProps.environmentVariables;
405
+ delete updateProps.gitRepository;
406
+ delete updateProps.resourceConfig;
407
+
408
+ const response = await api.patch(
409
+ `/projects/${this.output.id}`,
410
+ updateProps,
411
+ );
405
412
  const data = (await response.json()) as Project;
406
413
 
407
414
  if (environmentVariables) {