alchemy 2.0.0-beta.64 → 2.0.0-beta.65

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 (165) hide show
  1. package/lib/AWS/EC2/InternetGateway.d.ts.map +1 -1
  2. package/lib/AWS/EC2/InternetGateway.js +8 -3
  3. package/lib/AWS/EC2/InternetGateway.js.map +1 -1
  4. package/lib/AWS/EC2/LingeringEnis.d.ts +26 -0
  5. package/lib/AWS/EC2/LingeringEnis.d.ts.map +1 -0
  6. package/lib/AWS/EC2/LingeringEnis.js +128 -0
  7. package/lib/AWS/EC2/LingeringEnis.js.map +1 -0
  8. package/lib/AWS/EC2/SecurityGroup.d.ts.map +1 -1
  9. package/lib/AWS/EC2/SecurityGroup.js +14 -14
  10. package/lib/AWS/EC2/SecurityGroup.js.map +1 -1
  11. package/lib/AWS/EC2/Subnet.d.ts.map +1 -1
  12. package/lib/AWS/EC2/Subnet.js +13 -21
  13. package/lib/AWS/EC2/Subnet.js.map +1 -1
  14. package/lib/AWS/ECR/Image.d.ts +1 -0
  15. package/lib/AWS/ECR/Image.d.ts.map +1 -1
  16. package/lib/AWS/EKS/Addon.d.ts.map +1 -1
  17. package/lib/AWS/EKS/Addon.js +15 -3
  18. package/lib/AWS/EKS/Addon.js.map +1 -1
  19. package/lib/AWS/EKS/Deployment.d.ts +10 -1
  20. package/lib/AWS/EKS/Deployment.d.ts.map +1 -1
  21. package/lib/AWS/EKS/Deployment.js +10 -4
  22. package/lib/AWS/EKS/Deployment.js.map +1 -1
  23. package/lib/AWS/EKS/HyperPod.d.ts +57 -0
  24. package/lib/AWS/EKS/HyperPod.d.ts.map +1 -0
  25. package/lib/AWS/EKS/HyperPod.js +46 -0
  26. package/lib/AWS/EKS/HyperPod.js.map +1 -0
  27. package/lib/AWS/EKS/Job.d.ts +10 -1
  28. package/lib/AWS/EKS/Job.d.ts.map +1 -1
  29. package/lib/AWS/EKS/Job.js +16 -6
  30. package/lib/AWS/EKS/Job.js.map +1 -1
  31. package/lib/AWS/EKS/internal/client.d.ts +4 -3
  32. package/lib/AWS/EKS/internal/client.d.ts.map +1 -1
  33. package/lib/AWS/EKS/internal/client.js +33 -2
  34. package/lib/AWS/EKS/internal/client.js.map +1 -1
  35. package/lib/AWS/Lambda/Function.d.ts.map +1 -1
  36. package/lib/AWS/Lambda/Function.js +1 -1
  37. package/lib/AWS/Lambda/Function.js.map +1 -1
  38. package/lib/AWS/Providers.d.ts.map +1 -1
  39. package/lib/AWS/Providers.js +4 -1
  40. package/lib/AWS/Providers.js.map +1 -1
  41. package/lib/AWS/SageMaker/Cluster.d.ts +327 -0
  42. package/lib/AWS/SageMaker/Cluster.d.ts.map +1 -0
  43. package/lib/AWS/SageMaker/Cluster.js +469 -0
  44. package/lib/AWS/SageMaker/Cluster.js.map +1 -0
  45. package/lib/AWS/SageMaker/ClusterSchedulerConfig.d.ts +96 -0
  46. package/lib/AWS/SageMaker/ClusterSchedulerConfig.d.ts.map +1 -0
  47. package/lib/AWS/SageMaker/ClusterSchedulerConfig.js +270 -0
  48. package/lib/AWS/SageMaker/ClusterSchedulerConfig.js.map +1 -0
  49. package/lib/AWS/SageMaker/ComputeQuota.d.ts +106 -0
  50. package/lib/AWS/SageMaker/ComputeQuota.d.ts.map +1 -0
  51. package/lib/AWS/SageMaker/ComputeQuota.js +268 -0
  52. package/lib/AWS/SageMaker/ComputeQuota.js.map +1 -0
  53. package/lib/AWS/SageMaker/index.d.ts +3 -0
  54. package/lib/AWS/SageMaker/index.d.ts.map +1 -1
  55. package/lib/AWS/SageMaker/index.js +3 -0
  56. package/lib/AWS/SageMaker/index.js.map +1 -1
  57. package/lib/Bundle/PurePlugin.d.ts +29 -7
  58. package/lib/Bundle/PurePlugin.d.ts.map +1 -1
  59. package/lib/Bundle/PurePlugin.js +56 -33
  60. package/lib/Bundle/PurePlugin.js.map +1 -1
  61. package/lib/Cli/commands/nuke.d.ts.map +1 -1
  62. package/lib/Cli/commands/nuke.js +231 -37
  63. package/lib/Cli/commands/nuke.js.map +1 -1
  64. package/lib/Cloudflare/StateStore/Api.d.ts +1 -1
  65. package/lib/Cloudflare/Workers/Assets.d.ts +26 -8
  66. package/lib/Cloudflare/Workers/Assets.d.ts.map +1 -1
  67. package/lib/Cloudflare/Workers/Assets.js +46 -1
  68. package/lib/Cloudflare/Workers/Assets.js.map +1 -1
  69. package/lib/Cloudflare/Workers/LocalWorkerProvider.d.ts +2 -2
  70. package/lib/Cloudflare/Workers/LocalWorkerProvider.d.ts.map +1 -1
  71. package/lib/Cloudflare/Workers/LocalWorkerProvider.js +39 -6
  72. package/lib/Cloudflare/Workers/LocalWorkerProvider.js.map +1 -1
  73. package/lib/Cloudflare/Workers/Worker.d.ts +7 -5
  74. package/lib/Cloudflare/Workers/Worker.d.ts.map +1 -1
  75. package/lib/Cloudflare/Workers/Worker.js +0 -1
  76. package/lib/Cloudflare/Workers/Worker.js.map +1 -1
  77. package/lib/Cloudflare/Workers/WorkerBinding.d.ts +2 -2
  78. package/lib/Cloudflare/Workers/WorkerBundle.d.ts +20 -1
  79. package/lib/Cloudflare/Workers/WorkerBundle.d.ts.map +1 -1
  80. package/lib/Cloudflare/Workers/WorkerBundle.js +11 -0
  81. package/lib/Cloudflare/Workers/WorkerBundle.js.map +1 -1
  82. package/lib/Cloudflare/Workers/WorkerProvider.d.ts.map +1 -1
  83. package/lib/Cloudflare/Workers/WorkerProvider.js +10 -4
  84. package/lib/Cloudflare/Workers/WorkerProvider.js.map +1 -1
  85. package/lib/Cloudflare/Workflows/WorkflowBridge.d.ts +2 -1
  86. package/lib/Cloudflare/Workflows/WorkflowBridge.d.ts.map +1 -1
  87. package/lib/Cloudflare/Workflows/WorkflowBridge.js +5 -5
  88. package/lib/Cloudflare/Workflows/WorkflowBridge.js.map +1 -1
  89. package/lib/Cloudflare/Workflows/index.d.ts +1 -1
  90. package/lib/Cloudflare/Workflows/index.d.ts.map +1 -1
  91. package/lib/Cloudflare/Workflows/index.js +1 -1
  92. package/lib/Cloudflare/Workflows/index.js.map +1 -1
  93. package/lib/Docker/Container.d.ts +26 -0
  94. package/lib/Docker/Container.d.ts.map +1 -1
  95. package/lib/Docker/Container.js +20 -1
  96. package/lib/Docker/Container.js.map +1 -1
  97. package/lib/Docker/Docker.d.ts +2 -0
  98. package/lib/Docker/Docker.d.ts.map +1 -1
  99. package/lib/Docker/Docker.js.map +1 -1
  100. package/lib/Output.d.ts +4 -1
  101. package/lib/Output.d.ts.map +1 -1
  102. package/lib/Output.js.map +1 -1
  103. package/lib/Provider.d.ts +20 -0
  104. package/lib/Provider.d.ts.map +1 -1
  105. package/lib/Provider.js.map +1 -1
  106. package/lib/Random.d.ts +1 -1
  107. package/lib/Random.d.ts.map +1 -1
  108. package/lib/Resource.d.ts +14 -1
  109. package/lib/Resource.d.ts.map +1 -1
  110. package/lib/Resource.js.map +1 -1
  111. package/lib/SQL/D1.d.ts +1 -1
  112. package/lib/SQL/D1.js +1 -1
  113. package/lib/SQL/Postgres.d.ts +1 -1
  114. package/lib/SQL/Postgres.js +1 -1
  115. package/lib/State/HttpStateApi.d.ts +11 -11
  116. package/lib/Test/Alchemy.d.ts +1 -1
  117. package/lib/Test/Alchemy.js +1 -1
  118. package/lib/Test/Vitest.d.ts +58 -0
  119. package/lib/Test/Vitest.d.ts.map +1 -0
  120. package/lib/Test/Vitest.js +114 -0
  121. package/lib/Test/Vitest.js.map +1 -0
  122. package/lib/Util/proxy-chain.d.ts +5 -0
  123. package/lib/Util/proxy-chain.d.ts.map +1 -1
  124. package/lib/Util/proxy-chain.js +52 -4
  125. package/lib/Util/proxy-chain.js.map +1 -1
  126. package/package.json +23 -15
  127. package/src/AWS/EC2/InternetGateway.ts +8 -3
  128. package/src/AWS/EC2/LingeringEnis.ts +169 -0
  129. package/src/AWS/EC2/SecurityGroup.ts +24 -28
  130. package/src/AWS/EC2/Subnet.ts +23 -34
  131. package/src/AWS/EKS/Addon.ts +17 -4
  132. package/src/AWS/EKS/Deployment.ts +26 -5
  133. package/src/AWS/EKS/HyperPod.ts +97 -0
  134. package/src/AWS/EKS/Job.ts +32 -7
  135. package/src/AWS/EKS/internal/client.ts +40 -3
  136. package/src/AWS/Lambda/Function.ts +5 -3
  137. package/src/AWS/Providers.ts +6 -0
  138. package/src/AWS/SageMaker/Cluster.ts +775 -0
  139. package/src/AWS/SageMaker/ClusterSchedulerConfig.ts +430 -0
  140. package/src/AWS/SageMaker/ComputeQuota.ts +426 -0
  141. package/src/AWS/SageMaker/index.ts +3 -0
  142. package/src/Bundle/PurePlugin.ts +92 -39
  143. package/src/Cli/commands/nuke.ts +295 -56
  144. package/src/Cloudflare/Workers/Assets.ts +53 -1
  145. package/src/Cloudflare/Workers/LocalWorkerProvider.ts +46 -7
  146. package/src/Cloudflare/Workers/Worker.ts +7 -5
  147. package/src/Cloudflare/Workers/WorkerBundle.ts +31 -1
  148. package/src/Cloudflare/Workers/WorkerProvider.ts +18 -4
  149. package/src/Cloudflare/Workflows/WorkflowBridge.ts +5 -5
  150. package/src/Cloudflare/Workflows/index.ts +1 -1
  151. package/src/Docker/Container.ts +30 -1
  152. package/src/Docker/Docker.ts +2 -0
  153. package/src/Output.ts +19 -11
  154. package/src/Provider.ts +20 -0
  155. package/src/Resource.ts +18 -1
  156. package/src/SQL/D1.ts +1 -1
  157. package/src/SQL/Postgres.ts +1 -1
  158. package/src/Test/Alchemy.ts +1 -1
  159. package/src/Test/Vitest.ts +244 -0
  160. package/src/Util/proxy-chain.ts +73 -4
  161. package/lib/SQL/index.d.ts +0 -4
  162. package/lib/SQL/index.d.ts.map +0 -1
  163. package/lib/SQL/index.js +0 -4
  164. package/lib/SQL/index.js.map +0 -1
  165. package/src/SQL/index.ts +0 -3
@@ -5,13 +5,31 @@ type Op =
5
5
  | { kind: "get"; prop: PropertyKey }
6
6
  | { kind: "call"; args: unknown[] };
7
7
 
8
+ interface ChainState {
9
+ readonly cached: Effect.Effect<unknown, any, any>;
10
+ readonly ops: ReadonlyArray<Op>;
11
+ }
12
+
13
+ /**
14
+ * Every proxy produced by {@link chain} is registered here so that a chain
15
+ * passed as an *argument* to another chain over the same `cached` effect
16
+ * (e.g. `` sql`... ${sql.insert(row)}` `` — the nested `sql.insert(row)` is
17
+ * itself a proxy) can be recognized and replayed against the same resolved
18
+ * root instead of being handed to the real client as an opaque proxy.
19
+ */
20
+ const chainStates = new WeakMap<object, ChainState>();
21
+
8
22
  /**
9
23
  * Replay an op chain against a real value. `get` reads a property,
10
24
  * `call` invokes — bound to the previous receiver so `this` resolves
11
25
  * to the object the method was read from (drizzle's `select()` etc.
12
26
  * read `this._.session`, so dropping `this` would throw).
13
27
  */
14
- const replay = (root: unknown, ops: ReadonlyArray<Op>): unknown => {
28
+ const replay = (
29
+ root: unknown,
30
+ ops: ReadonlyArray<Op>,
31
+ cached: Effect.Effect<unknown, any, any>,
32
+ ): unknown => {
15
33
  let cur: any = root;
16
34
  let receiver: any = root;
17
35
  for (const op of ops) {
@@ -19,13 +37,56 @@ const replay = (root: unknown, ops: ReadonlyArray<Op>): unknown => {
19
37
  receiver = cur;
20
38
  cur = cur[op.prop];
21
39
  } else {
22
- cur = cur.apply(receiver, op.args);
40
+ cur = cur.apply(receiver, replayArgs(root, op.args, cached));
23
41
  receiver = cur;
24
42
  }
25
43
  }
26
44
  return cur;
27
45
  };
28
46
 
47
+ /**
48
+ * Resolve nested chain proxies inside a call's arguments. Only proxies over
49
+ * the *same* `cached` effect can be replayed synchronously (the root is
50
+ * already resolved); proxies over a different effect pass through untouched.
51
+ * Returns the original array when nothing needed resolving, so identity-
52
+ * sensitive values (e.g. a `TemplateStringsArray` with its `raw` property)
53
+ * are preserved.
54
+ */
55
+ const replayArgs = (
56
+ root: unknown,
57
+ args: ReadonlyArray<unknown>,
58
+ cached: Effect.Effect<unknown, any, any>,
59
+ ): ReadonlyArray<unknown> => {
60
+ let out: unknown[] | undefined;
61
+ for (let i = 0; i < args.length; i++) {
62
+ const resolved = replayArg(root, args[i], cached);
63
+ if (resolved !== args[i]) {
64
+ out ??= [...args];
65
+ out[i] = resolved;
66
+ }
67
+ }
68
+ return out ?? args;
69
+ };
70
+
71
+ const replayArg = (
72
+ root: unknown,
73
+ arg: unknown,
74
+ cached: Effect.Effect<unknown, any, any>,
75
+ ): unknown => {
76
+ if (arg === null || (typeof arg !== "object" && typeof arg !== "function")) {
77
+ return arg;
78
+ }
79
+ const state = chainStates.get(arg);
80
+ if (state?.cached === cached) {
81
+ return replay(root, state.ops, cached);
82
+ }
83
+ // Fragments may arrive wrapped in arrays (e.g. `sql.and([a, b])`).
84
+ if (Array.isArray(arg)) {
85
+ return replayArgs(root, arg, cached);
86
+ }
87
+ return arg;
88
+ };
89
+
29
90
  /**
30
91
  * Wrap a cached `Effect<T>` in a chainable Proxy so callers can use the
31
92
  * returned value as if it were `T` itself — every property read and call
@@ -52,6 +113,11 @@ const replay = (root: unknown, ops: ReadonlyArray<Op>): unknown => {
52
113
  * The chain ends when the proxy is yielded as an Effect — the resolved
53
114
  * value at that point must be a `Yieldable` (an Effect, drizzle query
54
115
  * builder, etc). Anything before that is recorded as ops.
116
+ *
117
+ * A chain passed as an *argument* to another chain over the same effect —
118
+ * e.g. `` sql`INSERT INTO users ${sql.insert(row)}` ``, where `sql.insert(row)`
119
+ * is itself a deferred proxy — is replayed against the same resolved root
120
+ * before the outer call runs, so synchronous fragment helpers compose.
55
121
  */
56
122
  export const proxyChain = <T>(cached: Effect.Effect<T, any, any>): T =>
57
123
  chain(cached) as T;
@@ -62,9 +128,10 @@ const chain = (
62
128
  ): unknown => {
63
129
  const effect = Effect.flatMap(
64
130
  cached,
65
- (root) => replay(root, ops) as Effect.Effect<unknown, unknown, unknown>,
131
+ (root) =>
132
+ replay(root, ops, cached) as Effect.Effect<unknown, unknown, unknown>,
66
133
  );
67
- return new Proxy(function () {}, {
134
+ const proxy = new Proxy(function () {}, {
68
135
  get(_, prop) {
69
136
  if (Reflect.has(effect, prop)) {
70
137
  return Reflect.get(effect, prop);
@@ -78,4 +145,6 @@ const chain = (
78
145
  return chain(cached, [...ops, { kind: "call", args }]);
79
146
  },
80
147
  });
148
+ chainStates.set(proxy, { cached, ops });
149
+ return proxy;
81
150
  };
@@ -1,4 +0,0 @@
1
- export * from "./D1.ts";
2
- export * from "./Postgres.ts";
3
- export * from "./SqlFile.ts";
4
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/SQL/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC"}
package/lib/SQL/index.js DELETED
@@ -1,4 +0,0 @@
1
- export * from "./D1.js";
2
- export * from "./Postgres.js";
3
- export * from "./SqlFile.js";
4
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/SQL/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC"}
package/src/SQL/index.ts DELETED
@@ -1,3 +0,0 @@
1
- export * from "./D1.ts";
2
- export * from "./Postgres.ts";
3
- export * from "./SqlFile.ts";