alchemy 0.60.2 → 0.62.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.
- package/README.md +1 -2
- package/bin/alchemy.js +1480 -1498
- package/bin/commands/init.ts +94 -25
- package/bin/services/execute-alchemy.ts +32 -23
- package/lib/alchemy.d.ts +2 -2
- package/lib/alchemy.d.ts.map +1 -1
- package/lib/alchemy.js +1 -0
- package/lib/alchemy.js.map +1 -1
- package/lib/aws/client-props.d.ts +149 -0
- package/lib/aws/client-props.d.ts.map +1 -0
- package/lib/aws/client-props.js +1 -0
- package/lib/aws/client-props.js.map +1 -0
- package/lib/aws/credentials.d.ts +68 -5
- package/lib/aws/credentials.d.ts.map +1 -1
- package/lib/aws/credentials.js +148 -0
- package/lib/aws/credentials.js.map +1 -1
- package/lib/aws/ec2/internet-gateway-attachment.d.ts +57 -3
- package/lib/aws/ec2/internet-gateway-attachment.d.ts.map +1 -1
- package/lib/aws/ec2/internet-gateway-attachment.js +57 -3
- package/lib/aws/ec2/internet-gateway-attachment.js.map +1 -1
- package/lib/aws/ec2/internet-gateway.d.ts +68 -40
- package/lib/aws/ec2/internet-gateway.d.ts.map +1 -1
- package/lib/aws/ec2/internet-gateway.js +68 -40
- package/lib/aws/ec2/internet-gateway.js.map +1 -1
- package/lib/aws/ec2/nat-gateway.d.ts +99 -18
- package/lib/aws/ec2/nat-gateway.d.ts.map +1 -1
- package/lib/aws/ec2/nat-gateway.js +113 -37
- package/lib/aws/ec2/nat-gateway.js.map +1 -1
- package/lib/aws/ec2/route-table-association.d.ts +1 -1
- package/lib/aws/ec2/route-table-association.js +1 -1
- package/lib/aws/ec2/route-table.d.ts +64 -1
- package/lib/aws/ec2/route-table.d.ts.map +1 -1
- package/lib/aws/ec2/route-table.js +64 -1
- package/lib/aws/ec2/route-table.js.map +1 -1
- package/lib/aws/ec2/route.d.ts +60 -1
- package/lib/aws/ec2/route.d.ts.map +1 -1
- package/lib/aws/ec2/route.js +60 -1
- package/lib/aws/ec2/route.js.map +1 -1
- package/lib/aws/ec2/security-group.d.ts +96 -3
- package/lib/aws/ec2/security-group.d.ts.map +1 -1
- package/lib/aws/ec2/security-group.js +96 -3
- package/lib/aws/ec2/security-group.js.map +1 -1
- package/lib/aws/ec2/subnet.d.ts +61 -3
- package/lib/aws/ec2/subnet.d.ts.map +1 -1
- package/lib/aws/ec2/subnet.js +61 -3
- package/lib/aws/ec2/subnet.js.map +1 -1
- package/lib/aws/ec2/utils.d.ts +10 -2
- package/lib/aws/ec2/utils.d.ts.map +1 -1
- package/lib/aws/ec2/utils.js +68 -7
- package/lib/aws/ec2/utils.js.map +1 -1
- package/lib/aws/ec2/vpc.d.ts +50 -2
- package/lib/aws/ec2/vpc.d.ts.map +1 -1
- package/lib/aws/ec2/vpc.js +50 -2
- package/lib/aws/ec2/vpc.js.map +1 -1
- package/lib/aws/index.d.ts +2 -0
- package/lib/aws/index.d.ts.map +1 -1
- package/lib/aws/index.js +2 -0
- package/lib/aws/index.js.map +1 -1
- package/lib/cloudflare/api-response.js +2 -2
- package/lib/cloudflare/api-response.js.map +1 -1
- package/lib/cloudflare/api.d.ts +19 -0
- package/lib/cloudflare/api.d.ts.map +1 -1
- package/lib/cloudflare/api.js +4 -0
- package/lib/cloudflare/api.js.map +1 -1
- package/lib/cloudflare/assets.d.ts.map +1 -1
- package/lib/cloudflare/assets.js +3 -4
- package/lib/cloudflare/assets.js.map +1 -1
- package/lib/cloudflare/bucket.d.ts +5 -3
- package/lib/cloudflare/bucket.d.ts.map +1 -1
- package/lib/cloudflare/bucket.js +28 -20
- package/lib/cloudflare/bucket.js.map +1 -1
- package/lib/cloudflare/bundle/plugin-compat-warning.js +7 -7
- package/lib/cloudflare/bundle/plugin-compat-warning.js.map +1 -1
- package/lib/cloudflare/cloudflare-env-proxy.js.map +1 -1
- package/lib/cloudflare/compatibility-date.gen.d.ts +1 -1
- package/lib/cloudflare/compatibility-date.gen.js +1 -1
- package/lib/cloudflare/d1-migrations.d.ts.map +1 -1
- package/lib/cloudflare/d1-migrations.js +3 -2
- package/lib/cloudflare/d1-migrations.js.map +1 -1
- package/lib/cloudflare/index.d.ts +2 -1
- package/lib/cloudflare/index.d.ts.map +1 -1
- package/lib/cloudflare/index.js +2 -1
- package/lib/cloudflare/index.js.map +1 -1
- package/lib/cloudflare/kv-namespace.d.ts +2 -2
- package/lib/cloudflare/kv-namespace.d.ts.map +1 -1
- package/lib/cloudflare/kv-namespace.js.map +1 -1
- package/lib/cloudflare/miniflare/build-worker-options.d.ts.map +1 -1
- package/lib/cloudflare/miniflare/build-worker-options.js +16 -3
- package/lib/cloudflare/miniflare/build-worker-options.js.map +1 -1
- package/lib/cloudflare/miniflare/miniflare-controller.d.ts.map +1 -1
- package/lib/cloudflare/miniflare/miniflare-controller.js +3 -0
- package/lib/cloudflare/miniflare/miniflare-controller.js.map +1 -1
- package/lib/cloudflare/oauth.js +3 -3
- package/lib/cloudflare/oauth.js.map +1 -1
- package/lib/cloudflare/quick-tunnel.d.ts +17 -0
- package/lib/cloudflare/quick-tunnel.d.ts.map +1 -0
- package/lib/cloudflare/quick-tunnel.js +26 -0
- package/lib/cloudflare/quick-tunnel.js.map +1 -0
- package/lib/cloudflare/sveltekit/plugin.d.ts +2 -2
- package/lib/cloudflare/sveltekit/plugin.d.ts.map +1 -1
- package/lib/cloudflare/sveltekit/plugin.js +5 -4
- package/lib/cloudflare/sveltekit/plugin.js.map +1 -1
- package/lib/cloudflare/website.d.ts.map +1 -1
- package/lib/cloudflare/website.js +26 -97
- package/lib/cloudflare/website.js.map +1 -1
- package/lib/cloudflare/worker-bundle.d.ts.map +1 -1
- package/lib/cloudflare/worker-bundle.js +11 -9
- package/lib/cloudflare/worker-bundle.js.map +1 -1
- package/lib/cloudflare/worker-tail.d.ts.map +1 -1
- package/lib/cloudflare/worker-tail.js +6 -6
- package/lib/cloudflare/worker-tail.js.map +1 -1
- package/lib/resource.d.ts +1 -0
- package/lib/resource.d.ts.map +1 -1
- package/lib/resource.js +13 -2
- package/lib/resource.js.map +1 -1
- package/lib/scope.d.ts +38 -1
- package/lib/scope.d.ts.map +1 -1
- package/lib/scope.js +44 -19
- package/lib/scope.js.map +1 -1
- package/lib/state/cloudflare-state-store.d.ts.map +1 -1
- package/lib/state/cloudflare-state-store.js +2 -1
- package/lib/state/cloudflare-state-store.js.map +1 -1
- package/lib/util/idempotent-spawn.d.ts +24 -0
- package/lib/util/idempotent-spawn.d.ts.map +1 -0
- package/lib/util/idempotent-spawn.js +237 -0
- package/lib/util/idempotent-spawn.js.map +1 -0
- package/lib/util/index.d.ts +2 -0
- package/lib/util/index.d.ts.map +1 -0
- package/lib/util/index.js +2 -0
- package/lib/util/index.js.map +1 -0
- package/lib/util/safe-fetch.d.ts +24 -0
- package/lib/util/safe-fetch.d.ts.map +1 -1
- package/lib/util/safe-fetch.js +72 -0
- package/lib/util/safe-fetch.js.map +1 -1
- package/package.json +9 -5
- package/src/alchemy.ts +3 -2
- package/src/aws/client-props.ts +156 -0
- package/src/aws/credentials.ts +165 -4
- package/src/aws/ec2/internet-gateway-attachment.ts +59 -4
- package/src/aws/ec2/internet-gateway.ts +70 -41
- package/src/aws/ec2/nat-gateway.ts +123 -33
- package/src/aws/ec2/route-table-association.ts +1 -1
- package/src/aws/ec2/route-table.ts +66 -2
- package/src/aws/ec2/route.ts +62 -2
- package/src/aws/ec2/security-group.ts +98 -4
- package/src/aws/ec2/subnet.ts +63 -4
- package/src/aws/ec2/utils.ts +73 -7
- package/src/aws/ec2/vpc.ts +52 -3
- package/src/aws/index.ts +2 -0
- package/src/cloudflare/api-response.ts +2 -2
- package/src/cloudflare/api.ts +23 -0
- package/src/cloudflare/assets.ts +3 -4
- package/src/cloudflare/bucket.ts +39 -29
- package/src/cloudflare/bundle/plugin-compat-warning.ts +7 -7
- package/src/cloudflare/cloudflare-env-proxy.ts +2 -2
- package/src/cloudflare/compatibility-date.gen.ts +1 -1
- package/src/cloudflare/d1-migrations.ts +4 -5
- package/src/cloudflare/index.ts +2 -1
- package/src/cloudflare/kv-namespace.ts +26 -27
- package/src/cloudflare/miniflare/build-worker-options.ts +16 -3
- package/src/cloudflare/miniflare/miniflare-controller.ts +4 -0
- package/src/cloudflare/oauth.ts +3 -3
- package/src/cloudflare/quick-tunnel.ts +30 -0
- package/src/cloudflare/sveltekit/plugin.ts +5 -5
- package/src/cloudflare/website.ts +30 -111
- package/src/cloudflare/worker-bundle.ts +11 -9
- package/src/cloudflare/worker-tail.ts +6 -8
- package/src/resource.ts +19 -2
- package/src/scope.ts +111 -20
- package/src/state/cloudflare-state-store.ts +2 -1
- package/src/util/idempotent-spawn.ts +303 -0
- package/src/util/index.ts +1 -0
- package/src/util/safe-fetch.ts +114 -0
- package/templates/rwsdk/package.json +1 -1
package/bin/commands/init.ts
CHANGED
|
@@ -18,7 +18,7 @@ import { detectPackageManager } from "../../src/util/detect-package-manager.ts";
|
|
|
18
18
|
import type { DependencyVersionMap } from "../constants.ts";
|
|
19
19
|
import { throwWithContext } from "../errors.ts";
|
|
20
20
|
import { addPackageDependencies } from "../services/dependencies.ts";
|
|
21
|
-
import {
|
|
21
|
+
import { ExitSignal, loggedProcedure } from "../trpc.ts";
|
|
22
22
|
import {
|
|
23
23
|
TemplateSchema,
|
|
24
24
|
type InitContext,
|
|
@@ -59,6 +59,7 @@ export const init = loggedProcedure
|
|
|
59
59
|
main: updatedConfig?.main,
|
|
60
60
|
});
|
|
61
61
|
await updatePackageJson(context);
|
|
62
|
+
await updateGitignore(context);
|
|
62
63
|
|
|
63
64
|
displaySuccessMessage(context);
|
|
64
65
|
} catch (_error) {
|
|
@@ -264,8 +265,7 @@ export const worker = await Vite("${context.projectName}", {
|
|
|
264
265
|
// main: "./.output/server/index.mjs",
|
|
265
266
|
// command: "vite build",
|
|
266
267
|
// dev: { command: "vite dev" },
|
|
267
|
-
assets: "dist"
|
|
268
|
-
wrangler: false,
|
|
268
|
+
assets: "dist"
|
|
269
269
|
});
|
|
270
270
|
|
|
271
271
|
console.log({
|
|
@@ -482,6 +482,33 @@ async function updatePackageJson(context: InitContext): Promise<void> {
|
|
|
482
482
|
}
|
|
483
483
|
}
|
|
484
484
|
|
|
485
|
+
async function updateGitignore(context: InitContext) {
|
|
486
|
+
try {
|
|
487
|
+
const gitignorePath = resolve(context.cwd, ".gitignore");
|
|
488
|
+
|
|
489
|
+
await fs.ensureFile(gitignorePath);
|
|
490
|
+
|
|
491
|
+
let gitignoreContent = "";
|
|
492
|
+
if (await fs.pathExists(gitignorePath)) {
|
|
493
|
+
gitignoreContent = await fs.readFile(gitignorePath, "utf-8");
|
|
494
|
+
}
|
|
495
|
+
|
|
496
|
+
const lines = gitignoreContent.split("\n").map((line) => line.trim());
|
|
497
|
+
const hasAlchemy = lines.some(
|
|
498
|
+
(line) => line === ".alchemy" || line === ".alchemy/",
|
|
499
|
+
);
|
|
500
|
+
|
|
501
|
+
if (!hasAlchemy) {
|
|
502
|
+
if (gitignoreContent && !gitignoreContent.endsWith("\n")) {
|
|
503
|
+
gitignoreContent += "\n";
|
|
504
|
+
}
|
|
505
|
+
await fs.appendFile(gitignorePath, ".alchemy\n", "utf-8");
|
|
506
|
+
}
|
|
507
|
+
} catch (error) {
|
|
508
|
+
throwWithContext(error, "Failed to update .gitignore");
|
|
509
|
+
}
|
|
510
|
+
}
|
|
511
|
+
|
|
485
512
|
interface TsConfigUpdate {
|
|
486
513
|
include?: string[];
|
|
487
514
|
exclude?: string[];
|
|
@@ -707,12 +734,22 @@ async function updateViteConfig(context: InitContext): Promise<void> {
|
|
|
707
734
|
const cloudflareImport = sourceFile.getImportDeclaration(
|
|
708
735
|
"@cloudflare/vite-plugin",
|
|
709
736
|
);
|
|
737
|
+
const alchemyPlugin =
|
|
738
|
+
{
|
|
739
|
+
"react-router": "alchemy/cloudflare/react-router",
|
|
740
|
+
"tanstack-start": "alchemy/cloudflare/tanstack-start",
|
|
741
|
+
astro: "alchemy/cloudflare/astro",
|
|
742
|
+
nuxt: "alchemy/cloudflare/nuxt",
|
|
743
|
+
sveltekit: "alchemy/cloudflare/sveltekit",
|
|
744
|
+
}[context.framework] ?? "alchemy/cloudflare/vite";
|
|
710
745
|
if (!cloudflareImport) {
|
|
711
746
|
// Add cloudflare import
|
|
712
747
|
sourceFile.addImportDeclaration({
|
|
713
|
-
moduleSpecifier:
|
|
714
|
-
|
|
748
|
+
moduleSpecifier: alchemyPlugin,
|
|
749
|
+
defaultImport: "alchemy",
|
|
715
750
|
});
|
|
751
|
+
} else {
|
|
752
|
+
cloudflareImport.setModuleSpecifier(alchemyPlugin);
|
|
716
753
|
}
|
|
717
754
|
|
|
718
755
|
// Find the defineConfig call
|
|
@@ -745,16 +782,14 @@ async function updateViteConfig(context: InitContext): Promise<void> {
|
|
|
745
782
|
|
|
746
783
|
if (!hasCloudflarePlugin) {
|
|
747
784
|
// Add cloudflare plugin
|
|
748
|
-
initializer.addElement(
|
|
749
|
-
'cloudflare({ viteEnvironment: { name: "ssr" } })',
|
|
750
|
-
);
|
|
785
|
+
initializer.addElement("alchemy()");
|
|
751
786
|
}
|
|
752
787
|
}
|
|
753
788
|
} else if (!pluginsProperty) {
|
|
754
789
|
// If no plugins property exists, create one with cloudflare plugin
|
|
755
790
|
configObject.addPropertyAssignment({
|
|
756
791
|
name: "plugins",
|
|
757
|
-
initializer:
|
|
792
|
+
initializer: "[alchemy()]",
|
|
758
793
|
});
|
|
759
794
|
}
|
|
760
795
|
}
|
|
@@ -863,26 +898,65 @@ async function updateSvelteConfig(context: InitContext): Promise<void> {
|
|
|
863
898
|
project.addSourceFileAtPath(svelteConfigPath);
|
|
864
899
|
const sourceFile = project.getSourceFileOrThrow(svelteConfigPath);
|
|
865
900
|
|
|
901
|
+
// Find and update the adapter import
|
|
866
902
|
const importDeclarations = sourceFile.getImportDeclarations();
|
|
867
903
|
const adapterImport = importDeclarations.find((imp) =>
|
|
868
904
|
imp.getModuleSpecifierValue().includes("@sveltejs/adapter"),
|
|
869
905
|
);
|
|
870
906
|
|
|
871
907
|
if (adapterImport) {
|
|
872
|
-
|
|
908
|
+
// Change the import to alchemy
|
|
909
|
+
adapterImport.setModuleSpecifier("alchemy/cloudflare/sveltekit");
|
|
910
|
+
// Remove old default import and add new one
|
|
911
|
+
adapterImport.removeDefaultImport();
|
|
912
|
+
adapterImport.setDefaultImport("alchemy");
|
|
873
913
|
} else {
|
|
914
|
+
// Add alchemy import if no adapter import exists
|
|
874
915
|
sourceFile.insertImportDeclaration(0, {
|
|
875
|
-
moduleSpecifier: "
|
|
876
|
-
defaultImport: "
|
|
916
|
+
moduleSpecifier: "alchemy/cloudflare/sveltekit",
|
|
917
|
+
defaultImport: "alchemy",
|
|
877
918
|
});
|
|
878
919
|
}
|
|
879
920
|
|
|
921
|
+
// Find the config object
|
|
922
|
+
const configVariable = sourceFile.getVariableDeclaration("config");
|
|
923
|
+
if (configVariable) {
|
|
924
|
+
const initializer = configVariable.getInitializer();
|
|
925
|
+
if (Node.isObjectLiteralExpression(initializer)) {
|
|
926
|
+
updateAdapterInConfig(initializer);
|
|
927
|
+
}
|
|
928
|
+
}
|
|
929
|
+
|
|
880
930
|
await project.save();
|
|
881
931
|
} catch (error) {
|
|
882
932
|
console.warn("Failed to update svelte.config.js:", error);
|
|
883
933
|
}
|
|
884
934
|
}
|
|
885
935
|
|
|
936
|
+
function updateAdapterInConfig(configObject: Node): void {
|
|
937
|
+
if (!Node.isObjectLiteralExpression(configObject)) return;
|
|
938
|
+
|
|
939
|
+
const kitProperty = configObject.getProperty("kit");
|
|
940
|
+
if (kitProperty && Node.isPropertyAssignment(kitProperty)) {
|
|
941
|
+
const kitInitializer = kitProperty.getInitializer();
|
|
942
|
+
if (Node.isObjectLiteralExpression(kitInitializer)) {
|
|
943
|
+
const adapterProperty = kitInitializer.getProperty("adapter");
|
|
944
|
+
if (adapterProperty && Node.isPropertyAssignment(adapterProperty)) {
|
|
945
|
+
const initializer = adapterProperty.getInitializer();
|
|
946
|
+
if (Node.isCallExpression(initializer)) {
|
|
947
|
+
const expression = initializer.getExpression();
|
|
948
|
+
if (
|
|
949
|
+
Node.isIdentifier(expression) &&
|
|
950
|
+
expression.getText() === "adapter"
|
|
951
|
+
) {
|
|
952
|
+
expression.replaceWithText("alchemy");
|
|
953
|
+
}
|
|
954
|
+
}
|
|
955
|
+
}
|
|
956
|
+
}
|
|
957
|
+
}
|
|
958
|
+
}
|
|
959
|
+
|
|
886
960
|
async function updateEnvFile(context: InitContext): Promise<void> {
|
|
887
961
|
const envPath = resolve(context.cwd, ".env");
|
|
888
962
|
await fs.ensureFile(envPath);
|
|
@@ -1070,19 +1144,16 @@ async function updateTanStackViteConfig(context: InitContext): Promise<void> {
|
|
|
1070
1144
|
project.addSourceFileAtPath(viteConfigPath);
|
|
1071
1145
|
const sourceFile = project.getSourceFileOrThrow(viteConfigPath);
|
|
1072
1146
|
|
|
1073
|
-
const alchemyImport = sourceFile.getImportDeclaration(
|
|
1147
|
+
const alchemyImport = sourceFile.getImportDeclaration(
|
|
1148
|
+
"alchemy/cloudflare/tanstack-start",
|
|
1149
|
+
);
|
|
1074
1150
|
if (!alchemyImport) {
|
|
1075
1151
|
sourceFile.addImportDeclaration({
|
|
1076
|
-
moduleSpecifier: "alchemy/cloudflare",
|
|
1077
|
-
|
|
1152
|
+
moduleSpecifier: "alchemy/cloudflare/tanstack-start",
|
|
1153
|
+
defaultImport: "alchemy",
|
|
1078
1154
|
});
|
|
1079
1155
|
} else {
|
|
1080
|
-
|
|
1081
|
-
.getNamedImports()
|
|
1082
|
-
.some((ni) => ni.getName() === "cloudflareWorkersDevEnvironmentShim");
|
|
1083
|
-
if (!hasShim) {
|
|
1084
|
-
alchemyImport.addNamedImport("cloudflareWorkersDevEnvironmentShim");
|
|
1085
|
-
}
|
|
1156
|
+
alchemyImport.setModuleSpecifier("alchemy/cloudflare/tanstack-start");
|
|
1086
1157
|
}
|
|
1087
1158
|
|
|
1088
1159
|
const exportAssignment = sourceFile.getExportAssignment(
|
|
@@ -1122,11 +1193,9 @@ async function updateTanStackViteConfig(context: InitContext): Promise<void> {
|
|
|
1122
1193
|
if (Node.isArrayLiteralExpression(initializer)) {
|
|
1123
1194
|
const hasShim = initializer
|
|
1124
1195
|
.getElements()
|
|
1125
|
-
.some((el) =>
|
|
1126
|
-
el.getText().includes("cloudflareWorkersDevEnvironmentShim"),
|
|
1127
|
-
);
|
|
1196
|
+
.some((el) => el.getText().includes("alchemy"));
|
|
1128
1197
|
if (!hasShim) {
|
|
1129
|
-
initializer.addElement("
|
|
1198
|
+
initializer.addElement("alchemy()");
|
|
1130
1199
|
}
|
|
1131
1200
|
|
|
1132
1201
|
const tanstackElements = initializer
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { log } from "@clack/prompts";
|
|
2
|
-
import {
|
|
2
|
+
import { spawn } from "node:child_process";
|
|
3
|
+
import { once } from "node:events";
|
|
3
4
|
import { resolve } from "node:path";
|
|
4
5
|
import pc from "picocolors";
|
|
5
6
|
import z from "zod";
|
|
@@ -74,6 +75,7 @@ export async function execAlchemy(
|
|
|
74
75
|
) {
|
|
75
76
|
const args: string[] = [];
|
|
76
77
|
const execArgs: string[] = [];
|
|
78
|
+
|
|
77
79
|
if (quiet) args.push("--quiet");
|
|
78
80
|
if (read) args.push("--read");
|
|
79
81
|
if (force) args.push("--force");
|
|
@@ -83,7 +85,9 @@ export async function execAlchemy(
|
|
|
83
85
|
execArgs.push("--watch");
|
|
84
86
|
args.push("--watch");
|
|
85
87
|
}
|
|
86
|
-
if (envFile
|
|
88
|
+
if (envFile && (await exists(envFile))) {
|
|
89
|
+
execArgs.push(`--env-file ${envFile}`);
|
|
90
|
+
}
|
|
87
91
|
if (dev) args.push("--dev");
|
|
88
92
|
|
|
89
93
|
// Check for alchemy.run.ts or alchemy.run.js (if not provided)
|
|
@@ -150,26 +154,31 @@ export async function execAlchemy(
|
|
|
150
154
|
break;
|
|
151
155
|
}
|
|
152
156
|
}
|
|
157
|
+
process.on("SIGINT", async () => {
|
|
158
|
+
await exitPromise;
|
|
159
|
+
process.exit(sanitizeExitCode(child.exitCode));
|
|
160
|
+
});
|
|
153
161
|
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
env
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
if (error.stdout) {
|
|
168
|
-
console.log(error.stdout);
|
|
169
|
-
}
|
|
170
|
-
if (error.stderr) {
|
|
171
|
-
console.error(error.stderr);
|
|
172
|
-
}
|
|
173
|
-
throw error;
|
|
174
|
-
}
|
|
162
|
+
console.log(command);
|
|
163
|
+
const child = spawn(command, {
|
|
164
|
+
cwd,
|
|
165
|
+
shell: true,
|
|
166
|
+
stdio: "inherit",
|
|
167
|
+
env: {
|
|
168
|
+
...process.env,
|
|
169
|
+
FORCE_COLOR: "1",
|
|
170
|
+
},
|
|
171
|
+
});
|
|
172
|
+
const exitPromise = once(child, "exit");
|
|
173
|
+
await exitPromise.catch(() => {});
|
|
174
|
+
process.exit(sanitizeExitCode(child.exitCode));
|
|
175
175
|
}
|
|
176
|
+
|
|
177
|
+
/**
|
|
178
|
+
* If exit code is 130 (SIGINT) or null, return 0.
|
|
179
|
+
* Otherwise, return the exit code.
|
|
180
|
+
*/
|
|
181
|
+
const sanitizeExitCode = (exitCode: number | null) => {
|
|
182
|
+
if (exitCode === null || exitCode === 130) return 0;
|
|
183
|
+
return exitCode;
|
|
184
|
+
};
|
package/lib/alchemy.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { DestroyStrategy, destroy } from "./destroy.ts";
|
|
2
2
|
import { env } from "./env.ts";
|
|
3
|
-
import { Scope } from "./scope.ts";
|
|
3
|
+
import { Scope, type ProviderCredentials } from "./scope.ts";
|
|
4
4
|
import { secret } from "./secret.ts";
|
|
5
5
|
import type { StateStoreType } from "./state.ts";
|
|
6
6
|
import type { LoggerApi } from "./util/cli.ts";
|
|
@@ -174,7 +174,7 @@ export interface AlchemyOptions {
|
|
|
174
174
|
export interface ScopeOptions extends AlchemyOptions {
|
|
175
175
|
enter: boolean;
|
|
176
176
|
}
|
|
177
|
-
export interface RunOptions extends AlchemyOptions {
|
|
177
|
+
export interface RunOptions extends AlchemyOptions, ProviderCredentials {
|
|
178
178
|
/**
|
|
179
179
|
* @default false
|
|
180
180
|
*/
|
package/lib/alchemy.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"alchemy.d.ts","sourceRoot":"","sources":["../src/alchemy.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,eAAe,EAAmB,OAAO,EAAE,MAAM,cAAc,CAAC;AACzE,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAU/B,OAAO,EAAiB,KAAK,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"alchemy.d.ts","sourceRoot":"","sources":["../src/alchemy.ts"],"names":[],"mappings":"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"}
|
package/lib/alchemy.js
CHANGED
package/lib/alchemy.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"alchemy.js","sourceRoot":"","sources":["../src/alchemy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACxC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACzE,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAC/B,OAAO,EACL,WAAW,EACX,UAAU,EACV,YAAY,EACZ,aAAa,EACb,WAAW,GAEZ,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,KAAK,
|
|
1
|
+
{"version":3,"file":"alchemy.js","sourceRoot":"","sources":["../src/alchemy.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
import type { Secret } from "../secret.ts";
|
|
2
|
+
/**
|
|
3
|
+
* AWS client properties for credential configuration.
|
|
4
|
+
*
|
|
5
|
+
* This interface defines the properties that can be used to configure AWS credentials
|
|
6
|
+
* at different levels of your application. It supports the three-tier credential resolution
|
|
7
|
+
* system (global → scope → resource) and enables multi-account and multi-region deployments.
|
|
8
|
+
*
|
|
9
|
+
* These properties can be specified at:
|
|
10
|
+
* 1. Resource level - directly in resource creation parameters
|
|
11
|
+
* 2. Scope level - in alchemy.run() options with `aws` property
|
|
12
|
+
* 3. Global level - through environment variables (AWS_REGION, AWS_PROFILE, etc.)
|
|
13
|
+
*
|
|
14
|
+
* The credential resolution follows a precedence order where resource-level credentials
|
|
15
|
+
* override scope-level credentials, which override global environment variables.
|
|
16
|
+
*
|
|
17
|
+
* @example
|
|
18
|
+
* ```typescript
|
|
19
|
+
* // Resource-level credential overrides
|
|
20
|
+
* const vpc = await Vpc("main-vpc", {
|
|
21
|
+
* cidrBlock: "10.0.0.0/16",
|
|
22
|
+
* region: "us-west-2", // Override region
|
|
23
|
+
* profile: "production", // Override profile
|
|
24
|
+
* tags: { Name: "main-vpc" }
|
|
25
|
+
* });
|
|
26
|
+
* ```
|
|
27
|
+
*
|
|
28
|
+
* @example
|
|
29
|
+
* ```typescript
|
|
30
|
+
* // Scope-level credential configuration
|
|
31
|
+
* await alchemy.run("production", {
|
|
32
|
+
* aws: {
|
|
33
|
+
* region: "us-west-2",
|
|
34
|
+
* profile: "production",
|
|
35
|
+
* }
|
|
36
|
+
* }, async () => {
|
|
37
|
+
* // Resources created here will use the scope credentials by default
|
|
38
|
+
* const vpc = await Vpc("main-vpc", {
|
|
39
|
+
* cidrBlock: "10.0.0.0/16"
|
|
40
|
+
* });
|
|
41
|
+
* });
|
|
42
|
+
* ```
|
|
43
|
+
*/
|
|
44
|
+
export interface AwsClientProps {
|
|
45
|
+
/**
|
|
46
|
+
* AWS access key ID for authentication.
|
|
47
|
+
*
|
|
48
|
+
* This corresponds to the AWS_ACCESS_KEY_ID environment variable.
|
|
49
|
+
* When provided at the resource or scope level, it overrides the environment variable.
|
|
50
|
+
*/
|
|
51
|
+
accessKeyId?: Secret<string>;
|
|
52
|
+
/**
|
|
53
|
+
* AWS secret access key for authentication.
|
|
54
|
+
*
|
|
55
|
+
* This corresponds to the AWS_SECRET_ACCESS_KEY environment variable.
|
|
56
|
+
* When provided at the resource or scope level, it overrides the environment variable.
|
|
57
|
+
*/
|
|
58
|
+
secretAccessKey?: Secret<string>;
|
|
59
|
+
/**
|
|
60
|
+
* AWS session token for temporary credentials.
|
|
61
|
+
*
|
|
62
|
+
* This corresponds to the AWS_SESSION_TOKEN environment variable.
|
|
63
|
+
* Used with temporary credentials from STS or when assuming a role.
|
|
64
|
+
*/
|
|
65
|
+
sessionToken?: Secret<string>;
|
|
66
|
+
/**
|
|
67
|
+
* AWS region to use for API calls.
|
|
68
|
+
*
|
|
69
|
+
* This corresponds to the AWS_REGION or AWS_DEFAULT_REGION environment variables.
|
|
70
|
+
* When provided at the resource or scope level, it overrides the environment variables.
|
|
71
|
+
*
|
|
72
|
+
* @example
|
|
73
|
+
* ```typescript
|
|
74
|
+
* // Resource in a specific region
|
|
75
|
+
* const euVpc = await Vpc("eu-vpc", {
|
|
76
|
+
* cidrBlock: "10.0.0.0/16",
|
|
77
|
+
* region: "eu-west-1",
|
|
78
|
+
* tags: { Name: "eu-vpc" }
|
|
79
|
+
* });
|
|
80
|
+
* ```
|
|
81
|
+
*/
|
|
82
|
+
region?: string;
|
|
83
|
+
/**
|
|
84
|
+
* AWS profile name to use from credentials file.
|
|
85
|
+
*
|
|
86
|
+
* This corresponds to the AWS_PROFILE environment variable.
|
|
87
|
+
* Profiles are defined in ~/.aws/credentials or ~/.aws/config files.
|
|
88
|
+
*
|
|
89
|
+
* @example
|
|
90
|
+
* ```typescript
|
|
91
|
+
* // Resource using a specific profile
|
|
92
|
+
* const prodVpc = await Vpc("prod-vpc", {
|
|
93
|
+
* cidrBlock: "10.0.0.0/16",
|
|
94
|
+
* profile: "production-account",
|
|
95
|
+
* tags: { Name: "prod-vpc" }
|
|
96
|
+
* });
|
|
97
|
+
* ```
|
|
98
|
+
*/
|
|
99
|
+
profile?: string;
|
|
100
|
+
/**
|
|
101
|
+
* AWS role ARN to assume for authentication.
|
|
102
|
+
*
|
|
103
|
+
* This corresponds to the AWS_ROLE_ARN environment variable.
|
|
104
|
+
* Used for cross-account access or for assuming roles with specific permissions.
|
|
105
|
+
*
|
|
106
|
+
* @example
|
|
107
|
+
* ```typescript
|
|
108
|
+
* // Resource using role assumption
|
|
109
|
+
* const crossAccountVpc = await Vpc("cross-account-vpc", {
|
|
110
|
+
* cidrBlock: "10.0.0.0/16",
|
|
111
|
+
* roleArn: "arn:aws:iam::123456789012:role/DeploymentRole",
|
|
112
|
+
* roleSessionName: "alchemy-deployment",
|
|
113
|
+
* tags: { Name: "cross-account-vpc" }
|
|
114
|
+
* });
|
|
115
|
+
* ```
|
|
116
|
+
*/
|
|
117
|
+
roleArn?: string;
|
|
118
|
+
/**
|
|
119
|
+
* External ID to use when assuming a role.
|
|
120
|
+
*
|
|
121
|
+
* This corresponds to the AWS_EXTERNAL_ID environment variable.
|
|
122
|
+
* Used as an additional security measure when assuming roles across accounts.
|
|
123
|
+
*/
|
|
124
|
+
externalId?: string;
|
|
125
|
+
/**
|
|
126
|
+
* Session name to use when assuming a role.
|
|
127
|
+
*
|
|
128
|
+
* This corresponds to the AWS_ROLE_SESSION_NAME environment variable.
|
|
129
|
+
* Helps identify who/what is using the assumed role in AWS CloudTrail logs.
|
|
130
|
+
*/
|
|
131
|
+
roleSessionName?: string;
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* AWS scope extensions - adds AWS credential support to scope options.
|
|
135
|
+
* This uses TypeScript module augmentation to extend the ProviderCredentials interface.
|
|
136
|
+
* Since ScopeOptions and RunOptions both extend ProviderCredentials,
|
|
137
|
+
* they automatically inherit these properties.
|
|
138
|
+
*/
|
|
139
|
+
declare module "../scope.ts" {
|
|
140
|
+
interface ProviderCredentials {
|
|
141
|
+
/**
|
|
142
|
+
* AWS credentials configuration for this scope.
|
|
143
|
+
* All AWS resources created within this scope will inherit these credentials
|
|
144
|
+
* unless overridden at the resource level.
|
|
145
|
+
*/
|
|
146
|
+
aws?: AwsClientProps;
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
//# sourceMappingURL=client-props.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client-props.d.ts","sourceRoot":"","sources":["../../src/aws/client-props.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAE3C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyCG;AACH,MAAM,WAAW,cAAc;IAC7B;;;;;OAKG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;IAE7B;;;;;OAKG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;IAEjC;;;;;OAKG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;IAE9B;;;;;;;;;;;;;;;OAeG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB;;;;;;;;;;;;;;;OAeG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB;;;;;;;;;;;;;;;;OAgBG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB;;;;;OAKG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB;;;;;OAKG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AACD;;;;;GAKG;AACH,OAAO,QAAQ,aAAa,CAAC;IAC3B,UAAU,mBAAmB;QAC3B;;;;WAIG;QACH,GAAG,CAAC,EAAE,cAAc,CAAC;KACtB;CACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
//# sourceMappingURL=client-props.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client-props.js","sourceRoot":"","sources":["../../src/aws/client-props.ts"],"names":[],"mappings":""}
|
package/lib/aws/credentials.d.ts
CHANGED
|
@@ -1,6 +1,69 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
1
|
+
import type { AwsClientProps } from "./client-props.ts";
|
|
2
|
+
/**
|
|
3
|
+
* Get global AWS configuration from environment variables.
|
|
4
|
+
* This provides the base layer of AWS credential configuration.
|
|
5
|
+
*/
|
|
6
|
+
export declare function getGlobalAwsConfig(): AwsClientProps;
|
|
7
|
+
/**
|
|
8
|
+
* Resolve AWS credentials using three-tier resolution: global → scope → resource.
|
|
9
|
+
*
|
|
10
|
+
* This function implements a comprehensive credential resolution system that allows
|
|
11
|
+
* for flexible AWS credential management across different levels of your application.
|
|
12
|
+
* It enables multi-account and multi-region deployments by providing a consistent
|
|
13
|
+
* way to override credentials at different scopes.
|
|
14
|
+
*
|
|
15
|
+
* The resolution follows this precedence order:
|
|
16
|
+
* 1. Resource-level credentials (highest priority)
|
|
17
|
+
* 2. Scope-level credentials (medium priority)
|
|
18
|
+
* 3. Global environment variables (lowest priority)
|
|
19
|
+
*
|
|
20
|
+
* Supported credential properties include:
|
|
21
|
+
* - `region`: AWS region (e.g., 'us-west-2', 'eu-central-1')
|
|
22
|
+
* - `profile`: AWS profile name from credentials file
|
|
23
|
+
* - `accessKeyId`: AWS access key ID
|
|
24
|
+
* - `secretAccessKey`: AWS secret access key
|
|
25
|
+
* - `sessionToken`: AWS session token for temporary credentials
|
|
26
|
+
* - `roleArn`: AWS role ARN to assume
|
|
27
|
+
* - `roleSessionName`: Session name when assuming a role
|
|
28
|
+
* - `externalId`: External ID when assuming a role
|
|
29
|
+
*
|
|
30
|
+
* @param resourceProps - Resource-level AWS credential properties (optional)
|
|
31
|
+
* @returns Resolved AWS client properties with validation
|
|
32
|
+
*
|
|
33
|
+
* @throws {Error} When scope contains invalid AWS configuration
|
|
34
|
+
* @throws {Error} When resource properties contain invalid AWS configuration
|
|
35
|
+
*
|
|
36
|
+
* @example
|
|
37
|
+
* ```typescript
|
|
38
|
+
* // Basic usage with resource-level credentials
|
|
39
|
+
* const credentials = resolveAwsCredentials({
|
|
40
|
+
* region: "us-west-2",
|
|
41
|
+
* profile: "production"
|
|
42
|
+
* });
|
|
43
|
+
* ```
|
|
44
|
+
*
|
|
45
|
+
* @example
|
|
46
|
+
* ```typescript
|
|
47
|
+
* // Usage with scope-level credentials
|
|
48
|
+
* await alchemy.run("my-app", {
|
|
49
|
+
* aws: {
|
|
50
|
+
* region: "eu-west-1",
|
|
51
|
+
* profile: "staging"
|
|
52
|
+
* }
|
|
53
|
+
* }, async () => {
|
|
54
|
+
* // Resources created here will use the scope credentials by default
|
|
55
|
+
* const vpc = await Vpc("main-vpc", {
|
|
56
|
+
* cidrBlock: "10.0.0.0/16"
|
|
57
|
+
* });
|
|
58
|
+
*
|
|
59
|
+
* // Resources can override scope credentials
|
|
60
|
+
* const crossRegionSubnet = await Subnet("cross-region-subnet", {
|
|
61
|
+
* vpc,
|
|
62
|
+
* cidrBlock: "10.0.1.0/24",
|
|
63
|
+
* region: "us-east-1" // Override scope region
|
|
64
|
+
* });
|
|
65
|
+
* });
|
|
66
|
+
* ```
|
|
67
|
+
*/
|
|
68
|
+
export declare function resolveAwsCredentials(resourceProps?: AwsClientProps): Promise<AwsClientProps>;
|
|
6
69
|
//# sourceMappingURL=credentials.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"credentials.d.ts","sourceRoot":"","sources":["../../src/aws/credentials.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"credentials.d.ts","sourceRoot":"","sources":["../../src/aws/credentials.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAgCxD;;;GAGG;AACH,wBAAgB,kBAAkB,IAAI,cAAc,CAiBnD;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4DG;AACH,wBAAsB,qBAAqB,CACzC,aAAa,CAAC,EAAE,cAAc,GAC7B,OAAO,CAAC,cAAc,CAAC,CA8CzB"}
|