@sst-community/sst 4.21.1 → 5.0.0-alpha.2
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 +86 -52
- package/package.json +35 -11
- package/platform/js/chunks/chunk-HIZZCEDS.js +328 -0
- package/platform/js/chunks/chunk-HIZZCEDS.js.map +6 -0
- package/platform/js/chunks/chunk-KOKHGKJ2.js +639 -0
- package/platform/js/chunks/chunk-KOKHGKJ2.js.map +6 -0
- package/platform/js/chunks/chunk-MR4XM5XA.js +473 -0
- package/platform/js/chunks/chunk-MR4XM5XA.js.map +6 -0
- package/platform/js/chunks/chunk-ONNI4XNK.js +367 -0
- package/platform/js/chunks/chunk-ONNI4XNK.js.map +6 -0
- package/platform/js/chunks/chunk-VIFHC73J.js +108 -0
- package/platform/js/chunks/chunk-VIFHC73J.js.map +6 -0
- package/platform/js/chunks/chunk-WJ6BVA46.js +10 -0
- package/platform/js/chunks/chunk-WJ6BVA46.js.map +6 -0
- package/platform/js/chunks/component-32FCLIRK.js +26 -0
- package/platform/js/chunks/component-32FCLIRK.js.map +6 -0
- package/platform/js/chunks/config-CRGKEDQW.js +10 -0
- package/platform/js/chunks/config-CRGKEDQW.js.map +6 -0
- package/platform/js/chunks/link-OJ3RNGQ3.js +9 -0
- package/platform/js/chunks/link-OJ3RNGQ3.js.map +6 -0
- package/platform/js/components/aws/index.js +35399 -0
- package/platform/js/components/aws/index.js.map +6 -0
- package/platform/js/components/cloudflare/index.js +3246 -0
- package/platform/js/components/cloudflare/index.js.map +6 -0
- package/platform/js/components/core.js +114 -0
- package/platform/js/components/core.js.map +6 -0
- package/platform/js/components/vercel/index.js +120 -0
- package/platform/js/components/vercel/index.js.map +6 -0
- package/platform/js/testing/index.js +569 -0
- package/platform/js/testing/index.js.map +6 -0
- package/platform/package.json +25 -0
- package/platform/src/ast/add.mjs +190 -0
- package/platform/src/auto/run.ts +109 -0
- package/platform/src/components/README.md +652 -0
- package/platform/src/components/args.ts +133 -0
- package/platform/src/components/aws/alb.ts +577 -0
- package/platform/src/components/aws/analog.ts +462 -0
- package/platform/src/components/aws/apigateway-websocket-route.ts +206 -0
- package/platform/src/components/aws/apigateway-websocket.ts +894 -0
- package/platform/src/components/aws/apigatewayv1-api-key.ts +90 -0
- package/platform/src/components/aws/apigatewayv1-authorizer.ts +178 -0
- package/platform/src/components/aws/apigatewayv1-base-route.ts +78 -0
- package/platform/src/components/aws/apigatewayv1-integration-route.ts +92 -0
- package/platform/src/components/aws/apigatewayv1-lambda-route.ts +152 -0
- package/platform/src/components/aws/apigatewayv1-usage-plan.ts +109 -0
- package/platform/src/components/aws/apigatewayv1.ts +1691 -0
- package/platform/src/components/aws/apigatewayv2-authorizer.ts +199 -0
- package/platform/src/components/aws/apigatewayv2-base-route.ts +69 -0
- package/platform/src/components/aws/apigatewayv2-lambda-route.ts +141 -0
- package/platform/src/components/aws/apigatewayv2-private-route.ts +101 -0
- package/platform/src/components/aws/apigatewayv2-url-route.ts +90 -0
- package/platform/src/components/aws/apigatewayv2.ts +1439 -0
- package/platform/src/components/aws/app-sync-data-source.ts +264 -0
- package/platform/src/components/aws/app-sync-function.ts +79 -0
- package/platform/src/components/aws/app-sync-resolver.ts +110 -0
- package/platform/src/components/aws/app-sync.ts +849 -0
- package/platform/src/components/aws/astro.ts +580 -0
- package/platform/src/components/aws/aurora.ts +1356 -0
- package/platform/src/components/aws/auth-v1.ts +69 -0
- package/platform/src/components/aws/auth.ts +417 -0
- package/platform/src/components/aws/bucket-lambda-subscriber.ts +162 -0
- package/platform/src/components/aws/bucket-notification.ts +254 -0
- package/platform/src/components/aws/bucket-queue-subscriber.ts +122 -0
- package/platform/src/components/aws/bucket-topic-subscriber.ts +144 -0
- package/platform/src/components/aws/bucket.ts +2046 -0
- package/platform/src/components/aws/bus-base-subscriber.ts +52 -0
- package/platform/src/components/aws/bus-lambda-subscriber.ts +125 -0
- package/platform/src/components/aws/bus-queue-subscriber.ts +88 -0
- package/platform/src/components/aws/bus.ts +630 -0
- package/platform/src/components/aws/cdn.ts +561 -0
- package/platform/src/components/aws/cluster-v1.ts +932 -0
- package/platform/src/components/aws/cluster.ts +584 -0
- package/platform/src/components/aws/cognito-identity-pool.ts +433 -0
- package/platform/src/components/aws/cognito-identity-provider.ts +96 -0
- package/platform/src/components/aws/cognito-user-pool-client.ts +114 -0
- package/platform/src/components/aws/cognito-user-pool.ts +1089 -0
- package/platform/src/components/aws/cron-v2.ts +555 -0
- package/platform/src/components/aws/cron.ts +435 -0
- package/platform/src/components/aws/dns-validated-certificate.ts +108 -0
- package/platform/src/components/aws/dns.ts +221 -0
- package/platform/src/components/aws/dsql.ts +741 -0
- package/platform/src/components/aws/dynamo-lambda-subscriber.ts +124 -0
- package/platform/src/components/aws/dynamo.ts +929 -0
- package/platform/src/components/aws/efs.ts +410 -0
- package/platform/src/components/aws/email.ts +673 -0
- package/platform/src/components/aws/fargate.ts +1279 -0
- package/platform/src/components/aws/function.ts +3280 -0
- package/platform/src/components/aws/helpers/apigateway-account.ts +78 -0
- package/platform/src/components/aws/helpers/apigatewayv2-domain.ts +144 -0
- package/platform/src/components/aws/helpers/arn.ts +182 -0
- package/platform/src/components/aws/helpers/bootstrap.ts +16 -0
- package/platform/src/components/aws/helpers/client.ts +76 -0
- package/platform/src/components/aws/helpers/container-builder.ts +33 -0
- package/platform/src/components/aws/helpers/custom-domain.ts +128 -0
- package/platform/src/components/aws/helpers/event-source.ts +41 -0
- package/platform/src/components/aws/helpers/fargate.ts +727 -0
- package/platform/src/components/aws/helpers/function-builder.ts +133 -0
- package/platform/src/components/aws/helpers/function-code.ts +224 -0
- package/platform/src/components/aws/helpers/function-part.ts +212 -0
- package/platform/src/components/aws/helpers/function-permission.ts +29 -0
- package/platform/src/components/aws/helpers/load-balancer-args.ts +88 -0
- package/platform/src/components/aws/helpers/load-balancer.ts +17 -0
- package/platform/src/components/aws/helpers/provider.ts +36 -0
- package/platform/src/components/aws/helpers/queue-policy.ts +33 -0
- package/platform/src/components/aws/helpers/rds.ts +212 -0
- package/platform/src/components/aws/helpers/site-builder.ts +41 -0
- package/platform/src/components/aws/helpers/subscriber.ts +23 -0
- package/platform/src/components/aws/helpers/vpc.ts +27 -0
- package/platform/src/components/aws/https-redirect.ts +216 -0
- package/platform/src/components/aws/iam-edit.ts +50 -0
- package/platform/src/components/aws/index.ts +61 -0
- package/platform/src/components/aws/kinesis-stream-lambda-subscriber.ts +122 -0
- package/platform/src/components/aws/kinesis-stream.ts +416 -0
- package/platform/src/components/aws/linkable.ts +32 -0
- package/platform/src/components/aws/logging.ts +25 -0
- package/platform/src/components/aws/microvm.ts +988 -0
- package/platform/src/components/aws/mysql.ts +1050 -0
- package/platform/src/components/aws/nextjs.ts +1052 -0
- package/platform/src/components/aws/nuxt.ts +527 -0
- package/platform/src/components/aws/open-search.ts +603 -0
- package/platform/src/components/aws/opencontrol.ts +235 -0
- package/platform/src/components/aws/permission.ts +80 -0
- package/platform/src/components/aws/postgres-v1.ts +537 -0
- package/platform/src/components/aws/postgres.ts +1074 -0
- package/platform/src/components/aws/providers/bucket-files.ts +32 -0
- package/platform/src/components/aws/providers/distribution-deployment-waiter.ts +27 -0
- package/platform/src/components/aws/providers/distribution-invalidation.ts +24 -0
- package/platform/src/components/aws/providers/function-environment-update.ts +46 -0
- package/platform/src/components/aws/providers/hosted-zone-lookup.ts +25 -0
- package/platform/src/components/aws/providers/kv-keys.ts +15 -0
- package/platform/src/components/aws/providers/kv-routes-update.ts +24 -0
- package/platform/src/components/aws/providers/microvm-image-prune.ts +48 -0
- package/platform/src/components/aws/providers/origin-access-control.ts +21 -0
- package/platform/src/components/aws/providers/rds-role-lookup.ts +21 -0
- package/platform/src/components/aws/providers/vector-table.ts +25 -0
- package/platform/src/components/aws/queue-lambda-subscriber.ts +135 -0
- package/platform/src/components/aws/queue.ts +712 -0
- package/platform/src/components/aws/react.ts +510 -0
- package/platform/src/components/aws/realtime-lambda-subscriber.ts +129 -0
- package/platform/src/components/aws/realtime.ts +345 -0
- package/platform/src/components/aws/redis-v1.ts +595 -0
- package/platform/src/components/aws/redis.ts +1078 -0
- package/platform/src/components/aws/remix.ts +576 -0
- package/platform/src/components/aws/router-base-route.ts +83 -0
- package/platform/src/components/aws/router-bucket-route.ts +63 -0
- package/platform/src/components/aws/router-url-route.ts +75 -0
- package/platform/src/components/aws/router.ts +3294 -0
- package/platform/src/components/aws/service-v1.ts +876 -0
- package/platform/src/components/aws/service.ts +2994 -0
- package/platform/src/components/aws/sns-topic-lambda-subscriber.ts +127 -0
- package/platform/src/components/aws/sns-topic-queue-subscriber.ts +105 -0
- package/platform/src/components/aws/sns-topic.ts +700 -0
- package/platform/src/components/aws/solid-start.ts +467 -0
- package/platform/src/components/aws/ssr-site.ts +2204 -0
- package/platform/src/components/aws/static-site.ts +1389 -0
- package/platform/src/components/aws/step-functions/choice.ts +123 -0
- package/platform/src/components/aws/step-functions/fail.ts +69 -0
- package/platform/src/components/aws/step-functions/map.ts +264 -0
- package/platform/src/components/aws/step-functions/parallel.ts +170 -0
- package/platform/src/components/aws/step-functions/pass.ts +48 -0
- package/platform/src/components/aws/step-functions/state.ts +376 -0
- package/platform/src/components/aws/step-functions/succeed.ts +31 -0
- package/platform/src/components/aws/step-functions/task.ts +538 -0
- package/platform/src/components/aws/step-functions/wait.ts +105 -0
- package/platform/src/components/aws/step-functions.ts +804 -0
- package/platform/src/components/aws/svelte-kit.ts +563 -0
- package/platform/src/components/aws/takeover/alb.ts +9 -0
- package/platform/src/components/aws/takeover/apigatewayv2.ts +43 -0
- package/platform/src/components/aws/takeover/app-sync.ts +45 -0
- package/platform/src/components/aws/takeover/aurora.ts +19 -0
- package/platform/src/components/aws/takeover/bucket.ts +94 -0
- package/platform/src/components/aws/takeover/bus.ts +43 -0
- package/platform/src/components/aws/takeover/cognito-user-pool.ts +21 -0
- package/platform/src/components/aws/takeover/cron-v2.ts +9 -0
- package/platform/src/components/aws/takeover/dsql.ts +12 -0
- package/platform/src/components/aws/takeover/dynamo.ts +31 -0
- package/platform/src/components/aws/takeover/efs.ts +9 -0
- package/platform/src/components/aws/takeover/function.ts +21 -0
- package/platform/src/components/aws/takeover/helpers.ts +26 -0
- package/platform/src/components/aws/takeover/index.ts +27 -0
- package/platform/src/components/aws/takeover/mysql.ts +17 -0
- package/platform/src/components/aws/takeover/postgres.ts +17 -0
- package/platform/src/components/aws/takeover/queue.ts +21 -0
- package/platform/src/components/aws/takeover/redis.ts +10 -0
- package/platform/src/components/aws/takeover/service.ts +22 -0
- package/platform/src/components/aws/takeover/sns-topic.ts +27 -0
- package/platform/src/components/aws/takeover/task.ts +13 -0
- package/platform/src/components/aws/tan-stack-start.ts +479 -0
- package/platform/src/components/aws/task.ts +571 -0
- package/platform/src/components/aws/v5/alb.ts +310 -0
- package/platform/src/components/aws/v5/apigatewayv2.ts +845 -0
- package/platform/src/components/aws/v5/app-sync.ts +673 -0
- package/platform/src/components/aws/v5/aurora.ts +855 -0
- package/platform/src/components/aws/v5/bucket.ts +1001 -0
- package/platform/src/components/aws/v5/bus.ts +321 -0
- package/platform/src/components/aws/v5/cluster.ts +230 -0
- package/platform/src/components/aws/v5/cognito-user-pool-client.ts +100 -0
- package/platform/src/components/aws/v5/cognito-user-pool.ts +693 -0
- package/platform/src/components/aws/v5/cron-v2.ts +316 -0
- package/platform/src/components/aws/v5/dsql.ts +665 -0
- package/platform/src/components/aws/v5/dynamo.ts +477 -0
- package/platform/src/components/aws/v5/efs.ts +311 -0
- package/platform/src/components/aws/v5/function.ts +1546 -0
- package/platform/src/components/aws/v5/index.ts +26 -0
- package/platform/src/components/aws/v5/mysql.ts +604 -0
- package/platform/src/components/aws/v5/postgres.ts +612 -0
- package/platform/src/components/aws/v5/queue.ts +271 -0
- package/platform/src/components/aws/v5/redis.ts +550 -0
- package/platform/src/components/aws/v5/service.ts +2209 -0
- package/platform/src/components/aws/v5/sns-topic.ts +284 -0
- package/platform/src/components/aws/v5/task.ts +549 -0
- package/platform/src/components/aws/vector.ts +316 -0
- package/platform/src/components/aws/vpc-v1.ts +580 -0
- package/platform/src/components/aws/vpc.ts +1641 -0
- package/platform/src/components/aws/workflow.ts +421 -0
- package/platform/src/components/base/base-site.ts +101 -0
- package/platform/src/components/base/base-ssr-site.ts +120 -0
- package/platform/src/components/base/base-static-site.ts +314 -0
- package/platform/src/components/cloudflare/account-id.ts +1 -0
- package/platform/src/components/cloudflare/ai.ts +77 -0
- package/platform/src/components/cloudflare/astro.ts +355 -0
- package/platform/src/components/cloudflare/auth.ts +69 -0
- package/platform/src/components/cloudflare/binding.ts +132 -0
- package/platform/src/components/cloudflare/bucket.ts +142 -0
- package/platform/src/components/cloudflare/cron.ts +207 -0
- package/platform/src/components/cloudflare/d1.ts +230 -0
- package/platform/src/components/cloudflare/dns.ts +253 -0
- package/platform/src/components/cloudflare/durable-object.ts +144 -0
- package/platform/src/components/cloudflare/experimental/index.ts +3 -0
- package/platform/src/components/cloudflare/experimental/solid-start.ts +288 -0
- package/platform/src/components/cloudflare/experimental/static-site.ts +4 -0
- package/platform/src/components/cloudflare/helpers/compatibility.ts +44 -0
- package/platform/src/components/cloudflare/helpers/fetch.ts +81 -0
- package/platform/src/components/cloudflare/helpers/validation.ts +74 -0
- package/platform/src/components/cloudflare/helpers/worker-builder.ts +57 -0
- package/platform/src/components/cloudflare/helpers/wrangler.ts +222 -0
- package/platform/src/components/cloudflare/hyperdrive.ts +402 -0
- package/platform/src/components/cloudflare/index.ts +25 -0
- package/platform/src/components/cloudflare/kv.ts +218 -0
- package/platform/src/components/cloudflare/providers/dns-record.ts +43 -0
- package/platform/src/components/cloudflare/providers/kv-data.ts +107 -0
- package/platform/src/components/cloudflare/providers/worker-assets.ts +41 -0
- package/platform/src/components/cloudflare/providers/worker-placement.ts +93 -0
- package/platform/src/components/cloudflare/providers/worker-script.ts +47 -0
- package/platform/src/components/cloudflare/providers/worker-url.ts +109 -0
- package/platform/src/components/cloudflare/providers/zone-lookup.ts +85 -0
- package/platform/src/components/cloudflare/queue-worker-subscriber.ts +192 -0
- package/platform/src/components/cloudflare/queue.ts +310 -0
- package/platform/src/components/cloudflare/rate-limit.ts +178 -0
- package/platform/src/components/cloudflare/react-router.ts +322 -0
- package/platform/src/components/cloudflare/ssr-site.ts +293 -0
- package/platform/src/components/cloudflare/static-site-v2.ts +428 -0
- package/platform/src/components/cloudflare/static-site.ts +470 -0
- package/platform/src/components/cloudflare/tan-stack-start.ts +408 -0
- package/platform/src/components/cloudflare/worker.ts +1080 -0
- package/platform/src/components/cloudflare/workflow.ts +319 -0
- package/platform/src/components/component.ts +242 -0
- package/platform/src/components/core.ts +43 -0
- package/platform/src/components/cpu.ts +10 -0
- package/platform/src/components/dns.ts +82 -0
- package/platform/src/components/duration.ts +67 -0
- package/platform/src/components/error.ts +5 -0
- package/platform/src/components/esbuild.ts +15 -0
- package/platform/src/components/experimental/dev-command.ts +127 -0
- package/platform/src/components/experimental/index.ts +1 -0
- package/platform/src/components/groups.ts +9 -0
- package/platform/src/components/index.ts +9 -0
- package/platform/src/components/input.ts +2 -0
- package/platform/src/components/link.ts +201 -0
- package/platform/src/components/linkable.ts +360 -0
- package/platform/src/components/naming-rules.ts +299 -0
- package/platform/src/components/naming.ts +189 -0
- package/platform/src/components/parts-component.ts +662 -0
- package/platform/src/components/parts.ts +299 -0
- package/platform/src/components/path.ts +5 -0
- package/platform/src/components/rpc/rpc.ts +110 -0
- package/platform/src/components/secret.ts +159 -0
- package/platform/src/components/size.ts +28 -0
- package/platform/src/components/takeover.ts +131 -0
- package/platform/src/components/transform.ts +107 -0
- package/platform/src/components/vercel/account-id.ts +1 -0
- package/platform/src/components/vercel/dns.ts +171 -0
- package/platform/src/components/vercel/index.ts +2 -0
- package/platform/src/components/vercel/providers/dns-record.ts +34 -0
- package/platform/src/config.ts +1463 -0
- package/platform/src/global-aliases.d.ts +37 -0
- package/platform/src/global.d.ts +374 -0
- package/platform/src/internal.d.ts +18 -0
- package/platform/src/runtime/worker/unenv.d.ts +14 -0
- package/platform/src/runtime/worker/unenv.mjs +26 -0
- package/platform/src/shim/run.js +25 -0
- package/platform/src/testing/global.ts +83 -0
- package/platform/src/testing/index.ts +103 -0
- package/platform/src/testing/mock.ts +646 -0
- package/platform/src/testing/vitest.ts +36 -0
- package/platform/src/util/compare-semver.ts +23 -0
- package/platform/src/util/fs.ts +49 -0
- package/platform/src/util/lazy.ts +12 -0
- package/platform/src/util/minify.ts +10 -0
- package/platform/src/util/package.ts +29 -0
- package/platform/src/util/semaphore.ts +29 -0
- package/platform/src/util/warn.ts +7 -0
- package/platform/types/auto/run.d.ts +9 -0
- package/platform/types/auto/run.d.ts.map +1 -0
- package/platform/types/components/args.d.ts +77 -0
- package/platform/types/components/args.d.ts.map +1 -0
- package/platform/types/components/aws/alb.d.ts +283 -0
- package/platform/types/components/aws/alb.d.ts.map +1 -0
- package/platform/types/components/aws/analog.d.ts +408 -0
- package/platform/types/components/aws/analog.d.ts.map +1 -0
- package/platform/types/components/aws/apigateway-websocket-route.d.ts +74 -0
- package/platform/types/components/aws/apigateway-websocket-route.d.ts.map +1 -0
- package/platform/types/components/aws/apigateway-websocket.d.ts +560 -0
- package/platform/types/components/aws/apigateway-websocket.d.ts.map +1 -0
- package/platform/types/components/aws/apigatewayv1-api-key.d.ts +48 -0
- package/platform/types/components/aws/apigatewayv1-api-key.d.ts.map +1 -0
- package/platform/types/components/aws/apigatewayv1-authorizer.d.ts +55 -0
- package/platform/types/components/aws/apigatewayv1-authorizer.d.ts.map +1 -0
- package/platform/types/components/aws/apigatewayv1-base-route.d.ts +36 -0
- package/platform/types/components/aws/apigatewayv1-base-route.d.ts.map +1 -0
- package/platform/types/components/aws/apigatewayv1-integration-route.d.ts +39 -0
- package/platform/types/components/aws/apigatewayv1-integration-route.d.ts.map +1 -0
- package/platform/types/components/aws/apigatewayv1-lambda-route.d.ts +53 -0
- package/platform/types/components/aws/apigatewayv1-lambda-route.d.ts.map +1 -0
- package/platform/types/components/aws/apigatewayv1-usage-plan.d.ts +53 -0
- package/platform/types/components/aws/apigatewayv1-usage-plan.d.ts.map +1 -0
- package/platform/types/components/aws/apigatewayv1.d.ts +1028 -0
- package/platform/types/components/aws/apigatewayv1.d.ts.map +1 -0
- package/platform/types/components/aws/apigatewayv2-authorizer.d.ts +54 -0
- package/platform/types/components/aws/apigatewayv2-authorizer.d.ts.map +1 -0
- package/platform/types/components/aws/apigatewayv2-base-route.d.ts +28 -0
- package/platform/types/components/aws/apigatewayv2-base-route.d.ts.map +1 -0
- package/platform/types/components/aws/apigatewayv2-lambda-route.d.ts +59 -0
- package/platform/types/components/aws/apigatewayv2-lambda-route.d.ts.map +1 -0
- package/platform/types/components/aws/apigatewayv2-private-route.d.ts +54 -0
- package/platform/types/components/aws/apigatewayv2-private-route.d.ts.map +1 -0
- package/platform/types/components/aws/apigatewayv2-url-route.d.ts +44 -0
- package/platform/types/components/aws/apigatewayv2-url-route.d.ts.map +1 -0
- package/platform/types/components/aws/apigatewayv2.d.ts +955 -0
- package/platform/types/components/aws/apigatewayv2.d.ts.map +1 -0
- package/platform/types/components/aws/app-sync-data-source.d.ts +52 -0
- package/platform/types/components/aws/app-sync-data-source.d.ts.map +1 -0
- package/platform/types/components/aws/app-sync-function.d.ts +33 -0
- package/platform/types/components/aws/app-sync-function.d.ts.map +1 -0
- package/platform/types/components/aws/app-sync-resolver.d.ts +41 -0
- package/platform/types/components/aws/app-sync-resolver.d.ts.map +1 -0
- package/platform/types/components/aws/app-sync.d.ts +638 -0
- package/platform/types/components/aws/app-sync.d.ts.map +1 -0
- package/platform/types/components/aws/astro.d.ts +409 -0
- package/platform/types/components/aws/astro.d.ts.map +1 -0
- package/platform/types/components/aws/aurora.d.ts +720 -0
- package/platform/types/components/aws/aurora.d.ts.map +1 -0
- package/platform/types/components/aws/auth-v1.d.ts +26 -0
- package/platform/types/components/aws/auth-v1.d.ts.map +1 -0
- package/platform/types/components/aws/auth.d.ts +295 -0
- package/platform/types/components/aws/auth.d.ts.map +1 -0
- package/platform/types/components/aws/bucket-lambda-subscriber.d.ts +61 -0
- package/platform/types/components/aws/bucket-lambda-subscriber.d.ts.map +1 -0
- package/platform/types/components/aws/bucket-notification.d.ts +47 -0
- package/platform/types/components/aws/bucket-notification.d.ts.map +1 -0
- package/platform/types/components/aws/bucket-queue-subscriber.d.ts +55 -0
- package/platform/types/components/aws/bucket-queue-subscriber.d.ts.map +1 -0
- package/platform/types/components/aws/bucket-topic-subscriber.d.ts +55 -0
- package/platform/types/components/aws/bucket-topic-subscriber.d.ts.map +1 -0
- package/platform/types/components/aws/bucket.d.ts +1356 -0
- package/platform/types/components/aws/bucket.d.ts.map +1 -0
- package/platform/types/components/aws/bus-base-subscriber.d.ts +20 -0
- package/platform/types/components/aws/bus-base-subscriber.d.ts.map +1 -0
- package/platform/types/components/aws/bus-lambda-subscriber.d.ts +50 -0
- package/platform/types/components/aws/bus-lambda-subscriber.d.ts.map +1 -0
- package/platform/types/components/aws/bus-queue-subscriber.d.ts +44 -0
- package/platform/types/components/aws/bus-queue-subscriber.d.ts.map +1 -0
- package/platform/types/components/aws/bus.d.ts +447 -0
- package/platform/types/components/aws/bus.d.ts.map +1 -0
- package/platform/types/components/aws/cdn.d.ts +310 -0
- package/platform/types/components/aws/cdn.d.ts.map +1 -0
- package/platform/types/components/aws/cluster-v1.d.ts +885 -0
- package/platform/types/components/aws/cluster-v1.d.ts.map +1 -0
- package/platform/types/components/aws/cluster.d.ts +364 -0
- package/platform/types/components/aws/cluster.d.ts.map +1 -0
- package/platform/types/components/aws/cognito-identity-pool.d.ts +199 -0
- package/platform/types/components/aws/cognito-identity-pool.d.ts.map +1 -0
- package/platform/types/components/aws/cognito-identity-provider.d.ts +38 -0
- package/platform/types/components/aws/cognito-identity-provider.d.ts.map +1 -0
- package/platform/types/components/aws/cognito-user-pool-client.d.ts +50 -0
- package/platform/types/components/aws/cognito-user-pool-client.d.ts.map +1 -0
- package/platform/types/components/aws/cognito-user-pool.d.ts +703 -0
- package/platform/types/components/aws/cognito-user-pool.d.ts.map +1 -0
- package/platform/types/components/aws/cron-v2.d.ts +325 -0
- package/platform/types/components/aws/cron-v2.d.ts.map +1 -0
- package/platform/types/components/aws/cron.d.ts +259 -0
- package/platform/types/components/aws/cron.d.ts.map +1 -0
- package/platform/types/components/aws/dns-validated-certificate.d.ts +27 -0
- package/platform/types/components/aws/dns-validated-certificate.d.ts.map +1 -0
- package/platform/types/components/aws/dns.d.ts +94 -0
- package/platform/types/components/aws/dns.d.ts.map +1 -0
- package/platform/types/components/aws/dsql.d.ts +369 -0
- package/platform/types/components/aws/dsql.d.ts.map +1 -0
- package/platform/types/components/aws/dynamo-lambda-subscriber.d.ts +55 -0
- package/platform/types/components/aws/dynamo-lambda-subscriber.d.ts.map +1 -0
- package/platform/types/components/aws/dynamo.d.ts +628 -0
- package/platform/types/components/aws/dynamo.d.ts.map +1 -0
- package/platform/types/components/aws/efs.d.ts +217 -0
- package/platform/types/components/aws/efs.d.ts.map +1 -0
- package/platform/types/components/aws/email.d.ts +370 -0
- package/platform/types/components/aws/email.d.ts.map +1 -0
- package/platform/types/components/aws/fargate.d.ts +894 -0
- package/platform/types/components/aws/fargate.d.ts.map +1 -0
- package/platform/types/components/aws/function.d.ts +1780 -0
- package/platform/types/components/aws/function.d.ts.map +1 -0
- package/platform/types/components/aws/helpers/apigateway-account.d.ts +3 -0
- package/platform/types/components/aws/helpers/apigateway-account.d.ts.map +1 -0
- package/platform/types/components/aws/helpers/apigatewayv2-domain.d.ts +144 -0
- package/platform/types/components/aws/helpers/apigatewayv2-domain.d.ts.map +1 -0
- package/platform/types/components/aws/helpers/arn.d.ts +51 -0
- package/platform/types/components/aws/helpers/arn.d.ts.map +1 -0
- package/platform/types/components/aws/helpers/bootstrap.d.ts +13 -0
- package/platform/types/components/aws/helpers/bootstrap.d.ts.map +1 -0
- package/platform/types/components/aws/helpers/client.d.ts +7 -0
- package/platform/types/components/aws/helpers/client.d.ts.map +1 -0
- package/platform/types/components/aws/helpers/container-builder.d.ts +4 -0
- package/platform/types/components/aws/helpers/container-builder.d.ts.map +1 -0
- package/platform/types/components/aws/helpers/custom-domain.d.ts +111 -0
- package/platform/types/components/aws/helpers/custom-domain.d.ts.map +1 -0
- package/platform/types/components/aws/helpers/event-source.d.ts +26 -0
- package/platform/types/components/aws/helpers/event-source.d.ts.map +1 -0
- package/platform/types/components/aws/helpers/fargate.d.ts +225 -0
- package/platform/types/components/aws/helpers/fargate.d.ts.map +1 -0
- package/platform/types/components/aws/helpers/function-builder.d.ts +14 -0
- package/platform/types/components/aws/helpers/function-builder.d.ts.map +1 -0
- package/platform/types/components/aws/helpers/function-code.d.ts +80 -0
- package/platform/types/components/aws/helpers/function-code.d.ts.map +1 -0
- package/platform/types/components/aws/helpers/function-part.d.ts +61 -0
- package/platform/types/components/aws/helpers/function-part.d.ts.map +1 -0
- package/platform/types/components/aws/helpers/function-permission.d.ts +17 -0
- package/platform/types/components/aws/helpers/function-permission.d.ts.map +1 -0
- package/platform/types/components/aws/helpers/load-balancer-args.d.ts +40 -0
- package/platform/types/components/aws/helpers/load-balancer-args.d.ts.map +1 -0
- package/platform/types/components/aws/helpers/load-balancer.d.ts +9 -0
- package/platform/types/components/aws/helpers/load-balancer.d.ts.map +1 -0
- package/platform/types/components/aws/helpers/provider.d.ts +3 -0
- package/platform/types/components/aws/helpers/provider.d.ts.map +1 -0
- package/platform/types/components/aws/helpers/queue-policy.d.ts +11 -0
- package/platform/types/components/aws/helpers/queue-policy.d.ts.map +1 -0
- package/platform/types/components/aws/helpers/rds.d.ts +98 -0
- package/platform/types/components/aws/helpers/rds.d.ts.map +1 -0
- package/platform/types/components/aws/helpers/site-builder.d.ts +4 -0
- package/platform/types/components/aws/helpers/site-builder.d.ts.map +1 -0
- package/platform/types/components/aws/helpers/subscriber.d.ts +6 -0
- package/platform/types/components/aws/helpers/subscriber.d.ts.map +1 -0
- package/platform/types/components/aws/helpers/vpc.d.ts +14 -0
- package/platform/types/components/aws/helpers/vpc.d.ts.map +1 -0
- package/platform/types/components/aws/https-redirect.d.ts +38 -0
- package/platform/types/components/aws/https-redirect.d.ts.map +1 -0
- package/platform/types/components/aws/iam-edit.d.ts +39 -0
- package/platform/types/components/aws/iam-edit.d.ts.map +1 -0
- package/platform/types/components/aws/index.d.ts +56 -0
- package/platform/types/components/aws/index.d.ts.map +1 -0
- package/platform/types/components/aws/kinesis-stream-lambda-subscriber.d.ts +49 -0
- package/platform/types/components/aws/kinesis-stream-lambda-subscriber.d.ts.map +1 -0
- package/platform/types/components/aws/kinesis-stream.d.ts +254 -0
- package/platform/types/components/aws/kinesis-stream.d.ts.map +1 -0
- package/platform/types/components/aws/linkable.d.ts +17 -0
- package/platform/types/components/aws/linkable.d.ts.map +1 -0
- package/platform/types/components/aws/logging.d.ts +26 -0
- package/platform/types/components/aws/logging.d.ts.map +1 -0
- package/platform/types/components/aws/microvm.d.ts +439 -0
- package/platform/types/components/aws/microvm.d.ts.map +1 -0
- package/platform/types/components/aws/mysql.d.ts +528 -0
- package/platform/types/components/aws/mysql.d.ts.map +1 -0
- package/platform/types/components/aws/nextjs.d.ts +534 -0
- package/platform/types/components/aws/nextjs.d.ts.map +1 -0
- package/platform/types/components/aws/nuxt.d.ts +480 -0
- package/platform/types/components/aws/nuxt.d.ts.map +1 -0
- package/platform/types/components/aws/open-search.d.ts +306 -0
- package/platform/types/components/aws/open-search.d.ts.map +1 -0
- package/platform/types/components/aws/opencontrol.d.ts +169 -0
- package/platform/types/components/aws/opencontrol.d.ts.map +1 -0
- package/platform/types/components/aws/permission.d.ts +80 -0
- package/platform/types/components/aws/permission.d.ts.map +1 -0
- package/platform/types/components/aws/postgres-v1.d.ts +328 -0
- package/platform/types/components/aws/postgres-v1.d.ts.map +1 -0
- package/platform/types/components/aws/postgres.d.ts +529 -0
- package/platform/types/components/aws/postgres.d.ts.map +1 -0
- package/platform/types/components/aws/providers/bucket-files.d.ts +18 -0
- package/platform/types/components/aws/providers/bucket-files.d.ts.map +1 -0
- package/platform/types/components/aws/providers/distribution-deployment-waiter.d.ts +13 -0
- package/platform/types/components/aws/providers/distribution-deployment-waiter.d.ts.map +1 -0
- package/platform/types/components/aws/providers/distribution-invalidation.d.ts +11 -0
- package/platform/types/components/aws/providers/distribution-invalidation.d.ts.map +1 -0
- package/platform/types/components/aws/providers/function-environment-update.d.ts +33 -0
- package/platform/types/components/aws/providers/function-environment-update.d.ts.map +1 -0
- package/platform/types/components/aws/providers/hosted-zone-lookup.d.ts +11 -0
- package/platform/types/components/aws/providers/hosted-zone-lookup.d.ts.map +1 -0
- package/platform/types/components/aws/providers/kv-keys.d.ts +11 -0
- package/platform/types/components/aws/providers/kv-keys.d.ts.map +1 -0
- package/platform/types/components/aws/providers/kv-routes-update.d.ts +11 -0
- package/platform/types/components/aws/providers/kv-routes-update.d.ts.map +1 -0
- package/platform/types/components/aws/providers/microvm-image-prune.d.ts +35 -0
- package/platform/types/components/aws/providers/microvm-image-prune.d.ts.map +1 -0
- package/platform/types/components/aws/providers/origin-access-control.d.ts +8 -0
- package/platform/types/components/aws/providers/origin-access-control.d.ts.map +1 -0
- package/platform/types/components/aws/providers/rds-role-lookup.d.ts +8 -0
- package/platform/types/components/aws/providers/rds-role-lookup.d.ts.map +1 -0
- package/platform/types/components/aws/providers/vector-table.d.ts +12 -0
- package/platform/types/components/aws/providers/vector-table.d.ts.map +1 -0
- package/platform/types/components/aws/queue-lambda-subscriber.d.ts +53 -0
- package/platform/types/components/aws/queue-lambda-subscriber.d.ts.map +1 -0
- package/platform/types/components/aws/queue.d.ts +494 -0
- package/platform/types/components/aws/queue.d.ts.map +1 -0
- package/platform/types/components/aws/react.d.ts +407 -0
- package/platform/types/components/aws/react.d.ts.map +1 -0
- package/platform/types/components/aws/realtime-lambda-subscriber.d.ts +53 -0
- package/platform/types/components/aws/realtime-lambda-subscriber.d.ts.map +1 -0
- package/platform/types/components/aws/realtime.d.ts +237 -0
- package/platform/types/components/aws/realtime.d.ts.map +1 -0
- package/platform/types/components/aws/redis-v1.d.ts +348 -0
- package/platform/types/components/aws/redis-v1.d.ts.map +1 -0
- package/platform/types/components/aws/redis.d.ts +545 -0
- package/platform/types/components/aws/redis.d.ts.map +1 -0
- package/platform/types/components/aws/remix.d.ts +408 -0
- package/platform/types/components/aws/remix.d.ts.map +1 -0
- package/platform/types/components/aws/router-base-route.d.ts +28 -0
- package/platform/types/components/aws/router-base-route.d.ts.map +1 -0
- package/platform/types/components/aws/router-bucket-route.d.ts +29 -0
- package/platform/types/components/aws/router-bucket-route.d.ts.map +1 -0
- package/platform/types/components/aws/router-url-route.d.ts +28 -0
- package/platform/types/components/aws/router-url-route.d.ts.map +1 -0
- package/platform/types/components/aws/router.d.ts +1767 -0
- package/platform/types/components/aws/router.d.ts.map +1 -0
- package/platform/types/components/aws/service-v1.d.ts +78 -0
- package/platform/types/components/aws/service-v1.d.ts.map +1 -0
- package/platform/types/components/aws/service.d.ts +1756 -0
- package/platform/types/components/aws/service.d.ts.map +1 -0
- package/platform/types/components/aws/sns-topic-lambda-subscriber.d.ts +53 -0
- package/platform/types/components/aws/sns-topic-lambda-subscriber.d.ts.map +1 -0
- package/platform/types/components/aws/sns-topic-queue-subscriber.d.ts +55 -0
- package/platform/types/components/aws/sns-topic-queue-subscriber.d.ts.map +1 -0
- package/platform/types/components/aws/sns-topic.d.ts +394 -0
- package/platform/types/components/aws/sns-topic.d.ts.map +1 -0
- package/platform/types/components/aws/solid-start.d.ts +399 -0
- package/platform/types/components/aws/solid-start.d.ts.map +1 -0
- package/platform/types/components/aws/ssr-site.d.ts +895 -0
- package/platform/types/components/aws/ssr-site.d.ts.map +1 -0
- package/platform/types/components/aws/static-site.d.ts +744 -0
- package/platform/types/components/aws/static-site.d.ts.map +1 -0
- package/platform/types/components/aws/step-functions/choice.d.ts +73 -0
- package/platform/types/components/aws/step-functions/choice.d.ts.map +1 -0
- package/platform/types/components/aws/step-functions/fail.d.ts +63 -0
- package/platform/types/components/aws/step-functions/fail.d.ts.map +1 -0
- package/platform/types/components/aws/step-functions/map.d.ts +236 -0
- package/platform/types/components/aws/step-functions/map.d.ts.map +1 -0
- package/platform/types/components/aws/step-functions/parallel.d.ts +127 -0
- package/platform/types/components/aws/step-functions/parallel.d.ts.map +1 -0
- package/platform/types/components/aws/step-functions/pass.d.ts +39 -0
- package/platform/types/components/aws/step-functions/pass.d.ts.map +1 -0
- package/platform/types/components/aws/step-functions/state.d.ts +231 -0
- package/platform/types/components/aws/step-functions/state.d.ts.map +1 -0
- package/platform/types/components/aws/step-functions/succeed.d.ts +26 -0
- package/platform/types/components/aws/step-functions/succeed.d.ts.map +1 -0
- package/platform/types/components/aws/step-functions/task.d.ts +485 -0
- package/platform/types/components/aws/step-functions/task.d.ts.map +1 -0
- package/platform/types/components/aws/step-functions/wait.d.ts +91 -0
- package/platform/types/components/aws/step-functions/wait.d.ts.map +1 -0
- package/platform/types/components/aws/step-functions.d.ts +478 -0
- package/platform/types/components/aws/step-functions.d.ts.map +1 -0
- package/platform/types/components/aws/svelte-kit.d.ts +456 -0
- package/platform/types/components/aws/svelte-kit.d.ts.map +1 -0
- package/platform/types/components/aws/takeover/alb.d.ts +2 -0
- package/platform/types/components/aws/takeover/alb.d.ts.map +1 -0
- package/platform/types/components/aws/takeover/apigatewayv2.d.ts +2 -0
- package/platform/types/components/aws/takeover/apigatewayv2.d.ts.map +1 -0
- package/platform/types/components/aws/takeover/app-sync.d.ts +2 -0
- package/platform/types/components/aws/takeover/app-sync.d.ts.map +1 -0
- package/platform/types/components/aws/takeover/aurora.d.ts +2 -0
- package/platform/types/components/aws/takeover/aurora.d.ts.map +1 -0
- package/platform/types/components/aws/takeover/bucket.d.ts +2 -0
- package/platform/types/components/aws/takeover/bucket.d.ts.map +1 -0
- package/platform/types/components/aws/takeover/bus.d.ts +2 -0
- package/platform/types/components/aws/takeover/bus.d.ts.map +1 -0
- package/platform/types/components/aws/takeover/cognito-user-pool.d.ts +2 -0
- package/platform/types/components/aws/takeover/cognito-user-pool.d.ts.map +1 -0
- package/platform/types/components/aws/takeover/cron-v2.d.ts +2 -0
- package/platform/types/components/aws/takeover/cron-v2.d.ts.map +1 -0
- package/platform/types/components/aws/takeover/dsql.d.ts +2 -0
- package/platform/types/components/aws/takeover/dsql.d.ts.map +1 -0
- package/platform/types/components/aws/takeover/dynamo.d.ts +2 -0
- package/platform/types/components/aws/takeover/dynamo.d.ts.map +1 -0
- package/platform/types/components/aws/takeover/efs.d.ts +2 -0
- package/platform/types/components/aws/takeover/efs.d.ts.map +1 -0
- package/platform/types/components/aws/takeover/function.d.ts +2 -0
- package/platform/types/components/aws/takeover/function.d.ts.map +1 -0
- package/platform/types/components/aws/takeover/helpers.d.ts +16 -0
- package/platform/types/components/aws/takeover/helpers.d.ts.map +1 -0
- package/platform/types/components/aws/takeover/index.d.ts +28 -0
- package/platform/types/components/aws/takeover/index.d.ts.map +1 -0
- package/platform/types/components/aws/takeover/mysql.d.ts +2 -0
- package/platform/types/components/aws/takeover/mysql.d.ts.map +1 -0
- package/platform/types/components/aws/takeover/postgres.d.ts +2 -0
- package/platform/types/components/aws/takeover/postgres.d.ts.map +1 -0
- package/platform/types/components/aws/takeover/queue.d.ts +2 -0
- package/platform/types/components/aws/takeover/queue.d.ts.map +1 -0
- package/platform/types/components/aws/takeover/redis.d.ts +2 -0
- package/platform/types/components/aws/takeover/redis.d.ts.map +1 -0
- package/platform/types/components/aws/takeover/service.d.ts +2 -0
- package/platform/types/components/aws/takeover/service.d.ts.map +1 -0
- package/platform/types/components/aws/takeover/sns-topic.d.ts +2 -0
- package/platform/types/components/aws/takeover/sns-topic.d.ts.map +1 -0
- package/platform/types/components/aws/takeover/task.d.ts +2 -0
- package/platform/types/components/aws/takeover/task.d.ts.map +1 -0
- package/platform/types/components/aws/tan-stack-start.d.ts +359 -0
- package/platform/types/components/aws/tan-stack-start.d.ts.map +1 -0
- package/platform/types/components/aws/task.d.ts +342 -0
- package/platform/types/components/aws/task.d.ts.map +1 -0
- package/platform/types/components/aws/v5/alb.d.ts +177 -0
- package/platform/types/components/aws/v5/alb.d.ts.map +1 -0
- package/platform/types/components/aws/v5/apigatewayv2.d.ts +482 -0
- package/platform/types/components/aws/v5/apigatewayv2.d.ts.map +1 -0
- package/platform/types/components/aws/v5/app-sync.d.ts +424 -0
- package/platform/types/components/aws/v5/app-sync.d.ts.map +1 -0
- package/platform/types/components/aws/v5/aurora.d.ts +459 -0
- package/platform/types/components/aws/v5/aurora.d.ts.map +1 -0
- package/platform/types/components/aws/v5/bucket.d.ts +578 -0
- package/platform/types/components/aws/v5/bucket.d.ts.map +1 -0
- package/platform/types/components/aws/v5/bus.d.ts +255 -0
- package/platform/types/components/aws/v5/bus.d.ts.map +1 -0
- package/platform/types/components/aws/v5/cluster.d.ts +167 -0
- package/platform/types/components/aws/v5/cluster.d.ts.map +1 -0
- package/platform/types/components/aws/v5/cognito-user-pool-client.d.ts +69 -0
- package/platform/types/components/aws/v5/cognito-user-pool-client.d.ts.map +1 -0
- package/platform/types/components/aws/v5/cognito-user-pool.d.ts +396 -0
- package/platform/types/components/aws/v5/cognito-user-pool.d.ts.map +1 -0
- package/platform/types/components/aws/v5/cron-v2.d.ts +206 -0
- package/platform/types/components/aws/v5/cron-v2.d.ts.map +1 -0
- package/platform/types/components/aws/v5/dsql.d.ts +453 -0
- package/platform/types/components/aws/v5/dsql.d.ts.map +1 -0
- package/platform/types/components/aws/v5/dynamo.d.ts +328 -0
- package/platform/types/components/aws/v5/dynamo.d.ts.map +1 -0
- package/platform/types/components/aws/v5/efs.d.ts +178 -0
- package/platform/types/components/aws/v5/efs.d.ts.map +1 -0
- package/platform/types/components/aws/v5/function.d.ts +586 -0
- package/platform/types/components/aws/v5/function.d.ts.map +1 -0
- package/platform/types/components/aws/v5/index.d.ts +27 -0
- package/platform/types/components/aws/v5/index.d.ts.map +1 -0
- package/platform/types/components/aws/v5/mysql.d.ts +347 -0
- package/platform/types/components/aws/v5/mysql.d.ts.map +1 -0
- package/platform/types/components/aws/v5/postgres.d.ts +348 -0
- package/platform/types/components/aws/v5/postgres.d.ts.map +1 -0
- package/platform/types/components/aws/v5/queue.d.ts +190 -0
- package/platform/types/components/aws/v5/queue.d.ts.map +1 -0
- package/platform/types/components/aws/v5/redis.d.ts +214 -0
- package/platform/types/components/aws/v5/redis.d.ts.map +1 -0
- package/platform/types/components/aws/v5/service.d.ts +1347 -0
- package/platform/types/components/aws/v5/service.d.ts.map +1 -0
- package/platform/types/components/aws/v5/sns-topic.d.ts +226 -0
- package/platform/types/components/aws/v5/sns-topic.d.ts.map +1 -0
- package/platform/types/components/aws/v5/task.d.ts +346 -0
- package/platform/types/components/aws/v5/task.d.ts.map +1 -0
- package/platform/types/components/aws/vector.d.ts +163 -0
- package/platform/types/components/aws/vector.d.ts.map +1 -0
- package/platform/types/components/aws/vpc-v1.d.ts +208 -0
- package/platform/types/components/aws/vpc-v1.d.ts.map +1 -0
- package/platform/types/components/aws/vpc.d.ts +491 -0
- package/platform/types/components/aws/vpc.d.ts.map +1 -0
- package/platform/types/components/aws/workflow.d.ts +331 -0
- package/platform/types/components/aws/workflow.d.ts.map +1 -0
- package/platform/types/components/base/base-site.d.ts +53 -0
- package/platform/types/components/base/base-site.d.ts.map +1 -0
- package/platform/types/components/base/base-ssr-site.d.ts +13 -0
- package/platform/types/components/base/base-ssr-site.d.ts.map +1 -0
- package/platform/types/components/base/base-static-site.d.ts +199 -0
- package/platform/types/components/base/base-static-site.d.ts.map +1 -0
- package/platform/types/components/cloudflare/account-id.d.ts +2 -0
- package/platform/types/components/cloudflare/account-id.d.ts.map +1 -0
- package/platform/types/components/cloudflare/ai.d.ts +68 -0
- package/platform/types/components/cloudflare/ai.d.ts.map +1 -0
- package/platform/types/components/cloudflare/astro.d.ts +249 -0
- package/platform/types/components/cloudflare/astro.d.ts.map +1 -0
- package/platform/types/components/cloudflare/auth.d.ts +22 -0
- package/platform/types/components/cloudflare/auth.d.ts.map +1 -0
- package/platform/types/components/cloudflare/binding.d.ts +109 -0
- package/platform/types/components/cloudflare/binding.d.ts.map +1 -0
- package/platform/types/components/cloudflare/bucket.d.ts +98 -0
- package/platform/types/components/cloudflare/bucket.d.ts.map +1 -0
- package/platform/types/components/cloudflare/cron.d.ts +151 -0
- package/platform/types/components/cloudflare/cron.d.ts.map +1 -0
- package/platform/types/components/cloudflare/d1.d.ts +142 -0
- package/platform/types/components/cloudflare/d1.d.ts.map +1 -0
- package/platform/types/components/cloudflare/dns.d.ts +100 -0
- package/platform/types/components/cloudflare/dns.d.ts.map +1 -0
- package/platform/types/components/cloudflare/durable-object.d.ts +125 -0
- package/platform/types/components/cloudflare/durable-object.d.ts.map +1 -0
- package/platform/types/components/cloudflare/experimental/index.d.ts +4 -0
- package/platform/types/components/cloudflare/experimental/index.d.ts.map +1 -0
- package/platform/types/components/cloudflare/experimental/solid-start.d.ts +219 -0
- package/platform/types/components/cloudflare/experimental/solid-start.d.ts.map +1 -0
- package/platform/types/components/cloudflare/experimental/static-site.d.ts +3 -0
- package/platform/types/components/cloudflare/experimental/static-site.d.ts.map +1 -0
- package/platform/types/components/cloudflare/helpers/compatibility.d.ts +21 -0
- package/platform/types/components/cloudflare/helpers/compatibility.d.ts.map +1 -0
- package/platform/types/components/cloudflare/helpers/fetch.d.ts +19 -0
- package/platform/types/components/cloudflare/helpers/fetch.d.ts.map +1 -0
- package/platform/types/components/cloudflare/helpers/validation.d.ts +15 -0
- package/platform/types/components/cloudflare/helpers/validation.d.ts.map +1 -0
- package/platform/types/components/cloudflare/helpers/worker-builder.d.ts +10 -0
- package/platform/types/components/cloudflare/helpers/worker-builder.d.ts.map +1 -0
- package/platform/types/components/cloudflare/helpers/wrangler.d.ts +31 -0
- package/platform/types/components/cloudflare/helpers/wrangler.d.ts.map +1 -0
- package/platform/types/components/cloudflare/hyperdrive.d.ts +302 -0
- package/platform/types/components/cloudflare/hyperdrive.d.ts.map +1 -0
- package/platform/types/components/cloudflare/index.d.ts +25 -0
- package/platform/types/components/cloudflare/index.d.ts.map +1 -0
- package/platform/types/components/cloudflare/kv.d.ts +140 -0
- package/platform/types/components/cloudflare/kv.d.ts.map +1 -0
- package/platform/types/components/cloudflare/providers/dns-record.d.ts +21 -0
- package/platform/types/components/cloudflare/providers/dns-record.d.ts.map +1 -0
- package/platform/types/components/cloudflare/providers/kv-data.d.ts +23 -0
- package/platform/types/components/cloudflare/providers/kv-data.d.ts.map +1 -0
- package/platform/types/components/cloudflare/providers/worker-assets.d.ts +19 -0
- package/platform/types/components/cloudflare/providers/worker-assets.d.ts.map +1 -0
- package/platform/types/components/cloudflare/providers/worker-placement.d.ts +27 -0
- package/platform/types/components/cloudflare/providers/worker-placement.d.ts.map +1 -0
- package/platform/types/components/cloudflare/providers/worker-script.d.ts +23 -0
- package/platform/types/components/cloudflare/providers/worker-script.d.ts.map +1 -0
- package/platform/types/components/cloudflare/providers/worker-url.d.ts +24 -0
- package/platform/types/components/cloudflare/providers/worker-url.d.ts.map +1 -0
- package/platform/types/components/cloudflare/providers/zone-lookup.d.ts +22 -0
- package/platform/types/components/cloudflare/providers/zone-lookup.d.ts.map +1 -0
- package/platform/types/components/cloudflare/queue-worker-subscriber.d.ts +122 -0
- package/platform/types/components/cloudflare/queue-worker-subscriber.d.ts.map +1 -0
- package/platform/types/components/cloudflare/queue.d.ts +235 -0
- package/platform/types/components/cloudflare/queue.d.ts.map +1 -0
- package/platform/types/components/cloudflare/rate-limit.d.ts +117 -0
- package/platform/types/components/cloudflare/rate-limit.d.ts.map +1 -0
- package/platform/types/components/cloudflare/react-router.d.ts +262 -0
- package/platform/types/components/cloudflare/react-router.d.ts.map +1 -0
- package/platform/types/components/cloudflare/ssr-site.d.ts +60 -0
- package/platform/types/components/cloudflare/ssr-site.d.ts.map +1 -0
- package/platform/types/components/cloudflare/static-site-v2.d.ts +302 -0
- package/platform/types/components/cloudflare/static-site-v2.d.ts.map +1 -0
- package/platform/types/components/cloudflare/static-site.d.ts +270 -0
- package/platform/types/components/cloudflare/static-site.d.ts.map +1 -0
- package/platform/types/components/cloudflare/tan-stack-start.d.ts +259 -0
- package/platform/types/components/cloudflare/tan-stack-start.d.ts.map +1 -0
- package/platform/types/components/cloudflare/worker.d.ts +483 -0
- package/platform/types/components/cloudflare/worker.d.ts.map +1 -0
- package/platform/types/components/cloudflare/workflow.d.ts +248 -0
- package/platform/types/components/cloudflare/workflow.d.ts.map +1 -0
- package/platform/types/components/component.d.ts +67 -0
- package/platform/types/components/component.d.ts.map +1 -0
- package/platform/types/components/core.d.ts +16 -0
- package/platform/types/components/core.d.ts.map +1 -0
- package/platform/types/components/cpu.d.ts +3 -0
- package/platform/types/components/cpu.d.ts.map +1 -0
- package/platform/types/components/dns.d.ts +63 -0
- package/platform/types/components/dns.d.ts.map +1 -0
- package/platform/types/components/duration.d.ts +9 -0
- package/platform/types/components/duration.d.ts.map +1 -0
- package/platform/types/components/error.d.ts +4 -0
- package/platform/types/components/error.d.ts.map +1 -0
- package/platform/types/components/esbuild.d.ts +3 -0
- package/platform/types/components/esbuild.d.ts.map +1 -0
- package/platform/types/components/experimental/dev-command.d.ts +99 -0
- package/platform/types/components/experimental/dev-command.d.ts.map +1 -0
- package/platform/types/components/experimental/index.d.ts +2 -0
- package/platform/types/components/experimental/index.d.ts.map +1 -0
- package/platform/types/components/groups.d.ts +6 -0
- package/platform/types/components/groups.d.ts.map +1 -0
- package/platform/types/components/index.d.ts +5 -0
- package/platform/types/components/index.d.ts.map +1 -0
- package/platform/types/components/input.d.ts +3 -0
- package/platform/types/components/input.d.ts.map +1 -0
- package/platform/types/components/link.d.ts +41 -0
- package/platform/types/components/link.d.ts.map +1 -0
- package/platform/types/components/linkable.d.ts +301 -0
- package/platform/types/components/linkable.d.ts.map +1 -0
- package/platform/types/components/naming-rules.d.ts +32 -0
- package/platform/types/components/naming-rules.d.ts.map +1 -0
- package/platform/types/components/naming.d.ts +21 -0
- package/platform/types/components/naming.d.ts.map +1 -0
- package/platform/types/components/parts-component.d.ts +242 -0
- package/platform/types/components/parts-component.d.ts.map +1 -0
- package/platform/types/components/parts.d.ts +194 -0
- package/platform/types/components/parts.d.ts.map +1 -0
- package/platform/types/components/path.d.ts +2 -0
- package/platform/types/components/path.d.ts.map +1 -0
- package/platform/types/components/rpc/rpc.d.ts +19 -0
- package/platform/types/components/rpc/rpc.d.ts.map +1 -0
- package/platform/types/components/secret.d.ts +123 -0
- package/platform/types/components/secret.d.ts.map +1 -0
- package/platform/types/components/size.d.ts +5 -0
- package/platform/types/components/size.d.ts.map +1 -0
- package/platform/types/components/takeover.d.ts +88 -0
- package/platform/types/components/takeover.d.ts.map +1 -0
- package/platform/types/components/transform.d.ts +34 -0
- package/platform/types/components/transform.d.ts.map +1 -0
- package/platform/types/components/vercel/account-id.d.ts +2 -0
- package/platform/types/components/vercel/account-id.d.ts.map +1 -0
- package/platform/types/components/vercel/dns.d.ts +73 -0
- package/platform/types/components/vercel/dns.d.ts.map +1 -0
- package/platform/types/components/vercel/index.d.ts +3 -0
- package/platform/types/components/vercel/index.d.ts.map +1 -0
- package/platform/types/components/vercel/providers/dns-record.d.ts +15 -0
- package/platform/types/components/vercel/providers/dns-record.d.ts.map +1 -0
- package/platform/types/config.d.ts +1440 -0
- package/platform/types/config.d.ts.map +1 -0
- package/platform/types/global-aliases.d.ts +37 -0
- package/platform/types/global.d.ts +374 -0
- package/platform/types/internal.d.ts +18 -0
- package/platform/types/runtime/worker/unenv.d.ts +14 -0
- package/platform/types/testing/global.d.ts +11 -0
- package/platform/types/testing/global.d.ts.map +1 -0
- package/platform/types/testing/index.d.ts +80 -0
- package/platform/types/testing/index.d.ts.map +1 -0
- package/platform/types/testing/mock.d.ts +136 -0
- package/platform/types/testing/mock.d.ts.map +1 -0
- package/platform/types/testing/vitest.d.ts +19 -0
- package/platform/types/testing/vitest.d.ts.map +1 -0
- package/platform/types/util/compare-semver.d.ts +4 -0
- package/platform/types/util/compare-semver.d.ts.map +1 -0
- package/platform/types/util/fs.d.ts +5 -0
- package/platform/types/util/fs.d.ts.map +1 -0
- package/platform/types/util/lazy.d.ts +2 -0
- package/platform/types/util/lazy.d.ts.map +1 -0
- package/platform/types/util/minify.d.ts +2 -0
- package/platform/types/util/minify.d.ts.map +1 -0
- package/platform/types/util/package.d.ts +10 -0
- package/platform/types/util/package.d.ts.map +1 -0
- package/platform/types/util/semaphore.d.ts +9 -0
- package/platform/types/util/semaphore.d.ts.map +1 -0
- package/platform/types/util/warn.d.ts +2 -0
- package/platform/types/util/warn.d.ts.map +1 -0
|
@@ -0,0 +1,652 @@
|
|
|
1
|
+
# Writing V5 components
|
|
2
|
+
|
|
3
|
+
A V5 component is built from **parts**: a declared list of the resources it creates. From
|
|
4
|
+
that one list the component gets a typed `transform`, `existing` and `nodes`, consistent
|
|
5
|
+
resource names, and a check that nothing is created outside the list.
|
|
6
|
+
|
|
7
|
+
This guide is for two readers:
|
|
8
|
+
|
|
9
|
+
- You're writing **your own component** in an app. Read up to "Porting a 4.x component".
|
|
10
|
+
- You're **porting one of SST's 4.x components** to V5, as a person or an agent. Read all
|
|
11
|
+
of it; the last sections are the rules and the checklist.
|
|
12
|
+
|
|
13
|
+
This file ships with the CLI, so in an app it's at `.sst/platform/src/components/README.md`.
|
|
14
|
+
The first half is also on the docs site as "Write a Local Component"
|
|
15
|
+
(`www/src/content/docs/docs/write-a-local-component.mdx`), and publishing one as a package
|
|
16
|
+
is "Write a Package Component". Keep them in step. What the local page shows working is
|
|
17
|
+
tested in `component.test.ts` under "the component in the docs".
|
|
18
|
+
|
|
19
|
+
## A component in one page
|
|
20
|
+
|
|
21
|
+
```ts title="sst.config.ts"
|
|
22
|
+
const parts = {
|
|
23
|
+
bucket: aws.s3.Bucket,
|
|
24
|
+
// Only created when it's asked for
|
|
25
|
+
audit: sst.optional(aws.s3.Bucket),
|
|
26
|
+
// One per team
|
|
27
|
+
reader: sst.many(aws.iam.Role),
|
|
28
|
+
};
|
|
29
|
+
|
|
30
|
+
interface UploadsArgs extends sst.ComponentArgs<typeof parts> {
|
|
31
|
+
teams: string[];
|
|
32
|
+
audit?: boolean;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
class Uploads extends sst.component("acme:index:Uploads", parts) {
|
|
36
|
+
constructor(name: string, args: UploadsArgs, opts?: $util.ComponentResourceOptions) {
|
|
37
|
+
super(name, args, opts);
|
|
38
|
+
|
|
39
|
+
this.part("bucket", { forceDestroy: true });
|
|
40
|
+
if (args.audit) this.part("audit", {});
|
|
41
|
+
for (const team of args.teams)
|
|
42
|
+
this.part("reader", team, {
|
|
43
|
+
assumeRolePolicy: aws.iam.assumeRolePolicyForPrincipal({
|
|
44
|
+
Service: "lambda.amazonaws.com",
|
|
45
|
+
}),
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
get name() {
|
|
50
|
+
return this.nodes.bucket.bucket;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
link() {
|
|
54
|
+
return {
|
|
55
|
+
properties: { name: this.name },
|
|
56
|
+
include: [
|
|
57
|
+
sst.aws.permission({
|
|
58
|
+
actions: ["s3:GetObject"],
|
|
59
|
+
resources: [$interpolate`${this.nodes.bucket.arn}/*`],
|
|
60
|
+
}),
|
|
61
|
+
],
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
That is the whole pattern: declare `parts`, extend `sst.component(type, parts)`, call
|
|
68
|
+
`super(name, args, opts)` with the args as they are, and create each resource with
|
|
69
|
+
`this.part()`.
|
|
70
|
+
|
|
71
|
+
## What the people using your component get
|
|
72
|
+
|
|
73
|
+
```ts
|
|
74
|
+
const uploads = new Uploads("Docs", {
|
|
75
|
+
teams: ["design", "legal"],
|
|
76
|
+
// Change how any part is created. An object is merged into the defaults, deeply,
|
|
77
|
+
// and it's typed that way: a nested object can be given in part.
|
|
78
|
+
transform: {
|
|
79
|
+
bucket: { tags: { team: "storage" } },
|
|
80
|
+
// A function can change the args and the options. For a `many` part it's
|
|
81
|
+
// also given which one it's looking at.
|
|
82
|
+
reader: (args, opts, name, team) => {
|
|
83
|
+
if (team === "legal") args.maxSessionDuration = 7200;
|
|
84
|
+
},
|
|
85
|
+
},
|
|
86
|
+
// Use a resource they already have in place of one the component would
|
|
87
|
+
// create: the resource itself, or the id to look it up by.
|
|
88
|
+
existing: { bucket: "my-existing-bucket" },
|
|
89
|
+
});
|
|
90
|
+
|
|
91
|
+
uploads.nodes.bucket; // the aws.s3.Bucket
|
|
92
|
+
uploads.nodes.audit; // undefined when it wasn't created
|
|
93
|
+
uploads.nodes.reader.legal; // by id
|
|
94
|
+
|
|
95
|
+
new sst.aws.v5.Function("Api", { handler: "src/api.handler", link: [uploads] });
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
A `transform` or `existing` key that isn't one of the parts is an error, with the list of
|
|
99
|
+
parts in the message. `$transform(Uploads, (args) => { ... })` works too, and runs before
|
|
100
|
+
the component reads its args.
|
|
101
|
+
|
|
102
|
+
## Parts
|
|
103
|
+
|
|
104
|
+
- **Names.** A part's resource is named `<ComponentName><Key>`, so `Docs` and `bucket`
|
|
105
|
+
give `DocsBucket`. A `many` part adds its id: `DocsReaderLegal`.
|
|
106
|
+
- **Everything is a part.** A resource created directly under the component that isn't a
|
|
107
|
+
declared part throws. That's what keeps `transform` and `nodes` complete.
|
|
108
|
+
- **Markers.**
|
|
109
|
+
- `optional(Class)`: created only sometimes. Its `nodes` entry may be `undefined`.
|
|
110
|
+
- `many(Class)`: several of one kind, created with an id: `this.part("reader", id, args)`.
|
|
111
|
+
An id can be any string, like the route `"GET /users/{id}"`. A plain id is used in the
|
|
112
|
+
name as it is; any other gets a short hash added so two similar ids don't collide.
|
|
113
|
+
`id in this.nodes.reader` tells you whether one exists.
|
|
114
|
+
- `deferred(sst.aws.v5.Function)`: a function that's built later, or not at all when the
|
|
115
|
+
user passes an ARN. Create it with `sst.aws.functionPart(this, key, definition,
|
|
116
|
+
defaults)`, or with an id for `many(deferred(sst.aws.v5.Function))`. Its `nodes` entry is
|
|
117
|
+
an `Output`. The user's `transform` for it takes the function's args, including the
|
|
118
|
+
function's own `transform` and `existing`.
|
|
119
|
+
- `named(part, "Name")`: the resource is named `<ComponentName><Name>` in place of the
|
|
120
|
+
key. The key is what's written in `transform`, `existing` and `nodes`; the name is
|
|
121
|
+
how a deployed app knows the resource, so it's permanent. It wraps a class or
|
|
122
|
+
another marker: `named(optional(aws.ec2.SecurityGroup), "NatInstanceSecurityGroup")`.
|
|
123
|
+
Use it when the name a resource has to keep isn't the key you want.
|
|
124
|
+
- **An SST component can be a part**, like `sst.aws.v5.Function` or a certificate. If the
|
|
125
|
+
component's own file imports yours, declare the parts in a function so they're read
|
|
126
|
+
late: `component("acme:index:Uploads", () => ({ ... }))`.
|
|
127
|
+
- **A part can be created later**, inside an `.apply()`, when whether it exists depends
|
|
128
|
+
on something that's only known on deploy: another component's output, or the result of
|
|
129
|
+
a build. Declare it `optional` or `many`. It's added to `nodes` when it's created, so
|
|
130
|
+
say that in its doc comment. Do this only when a plain arg can't decide it.
|
|
131
|
+
If people read it from `nodes` in their config, declare it `deferred` instead, so its
|
|
132
|
+
entry is an output that's there from the start. The V5 `Service` does this for its
|
|
133
|
+
Cloud Map service, which exists only when the cluster's VPC has a namespace: it
|
|
134
|
+
creates it with `this.partHandle()`, and supplies the `nodes` entry with `defer()`.
|
|
135
|
+
- **A part is created once.** Creating it a second time is an error.
|
|
136
|
+
- **`this.existingPart(key)`** returns the resource the user passed in `existing`, when
|
|
137
|
+
the component has to do something different for a resource it didn't create.
|
|
138
|
+
`this.part()` already returns it instead of creating one.
|
|
139
|
+
- **`this.lookupPart(key, [id], resourceId)`** looks a part's resource up in place of
|
|
140
|
+
creating it, when the component references something that's already deployed and
|
|
141
|
+
works out the ids of its other parts itself: from a tag, or a data source. The V5
|
|
142
|
+
`Aurora` is given a cluster and finds its instance, secret and proxy this way.
|
|
143
|
+
- **`this.assertNew(what, key, id, args, transforms?)`** goes at the top of a method that
|
|
144
|
+
adds a named thing (`addRoute`, `subscribe`). It rejects a name that's taken and a
|
|
145
|
+
`transform` passed to the method, with a message that points at the component's own
|
|
146
|
+
`transform`.
|
|
147
|
+
- **`this.delegateOpts()`** is for resources something else creates on the component's
|
|
148
|
+
behalf, like a DNS adapter creating records: `dns.createAlias(name, record,
|
|
149
|
+
this.delegateOpts())`. They aren't parts. They're configured through what creates them.
|
|
150
|
+
- **An arg the user's `transform` must not change** goes in a Pulumi transformation on
|
|
151
|
+
the part: `this.part(key, args, { transformations: [({ props, opts }) => ({ props: {
|
|
152
|
+
...props, runtime }, opts })] })`. It runs after the user's `transform`. The V5
|
|
153
|
+
`Function` does this for the stub it deploys in `sst dev`.
|
|
154
|
+
|
|
155
|
+
## Args
|
|
156
|
+
|
|
157
|
+
- **Extend `sst.ComponentArgs<typeof parts>`.** It adds `transform` and `existing`.
|
|
158
|
+
- **Args that decide what gets created are plain values.** If whether a part exists
|
|
159
|
+
depends on an arg, that arg can't be an output: the component has to know before it
|
|
160
|
+
creates anything. Fields inside it can still be outputs. This is what lets parts be
|
|
161
|
+
created directly instead of inside `.apply()`, and lets `nodes` hold resources, not
|
|
162
|
+
outputs of resources.
|
|
163
|
+
The same goes for a list with a part per item, and for the field each part is
|
|
164
|
+
named after: the V5 `Postgres` takes the proxy's `credentials` and each `username`
|
|
165
|
+
as plain values, and the passwords as inputs.
|
|
166
|
+
- **A part the user can switch off gets its own arg** (`publicAccessBlock: false`).
|
|
167
|
+
`transform` changes a part; it doesn't remove one.
|
|
168
|
+
- **For a resource the user already has, use `existing`**, not an arg of your own.
|
|
169
|
+
A static `get` is one line: `return new Uploads(name, { existing: { bucket: id } }, opts)`.
|
|
170
|
+
When the component has required args, return before reading them:
|
|
171
|
+
`if (this.existingPart("table")) return;`. `get` then passes only `existing`, with a
|
|
172
|
+
cast to the args type.
|
|
173
|
+
- **A check that needs a deployed value** goes in the output that everything depending
|
|
174
|
+
on it reads, so the error stops what would have used it. The V5 `Dynamo` checks that
|
|
175
|
+
the table's stream is enabled inside the stream ARN its subscribers are given, and
|
|
176
|
+
the V5 `Service` checks that an `Alb` is in the cluster's VPC inside the VPC id its
|
|
177
|
+
target groups are given.
|
|
178
|
+
- **An arg a resource is named after is plain all the way down.** A rule of a service's
|
|
179
|
+
load balancer is: its listener rule is named after its conditions. Check it with
|
|
180
|
+
`plainDeep(value, what)`.
|
|
181
|
+
|
|
182
|
+
## Linking, dev mode, naming
|
|
183
|
+
|
|
184
|
+
- **Linking.** Define `link()` and return `properties` (readable at runtime as
|
|
185
|
+
`Resource.<Name>`) and `include` (`sst.aws.permission()`, `sst.cloudflare.binding()`,
|
|
186
|
+
`sst.env()`). For compute SST doesn't manage, `sst.aws.iamStatements(links)` gives the
|
|
187
|
+
IAM statements and `sst.Linkable.env(links)` the environment variables.
|
|
188
|
+
- **Dev mode.** If the component runs locally in `sst dev` and isn't deployed, handle
|
|
189
|
+
that in one place in the constructor: call `this.runsLocally()` and return before
|
|
190
|
+
creating the parts that aren't deployed. Reading `nodes` then explains why a resource
|
|
191
|
+
is missing. A part that's created all the same is in `nodes` as usual, like the role
|
|
192
|
+
a service's containers run as on the user's machine. Keep the values the getters
|
|
193
|
+
return in one object so the getters don't branch on dev.
|
|
194
|
+
- **Physical names.** SST knows how to name the resource types its own components use.
|
|
195
|
+
For another type, `sst.Component.naming("aws:athena/workgroup:Workgroup", { field:
|
|
196
|
+
"name", max: 128 })`, or `false` to leave it to the provider. A resource that's looked
|
|
197
|
+
up keeps the name it has.
|
|
198
|
+
- **Testing.** `mock()` from `.sst/platform/src/testing` stands in for the engine and
|
|
199
|
+
gives a test the globals a config has. Create the component, `await app.settle()`, and
|
|
200
|
+
read `app.resources`. `app.takeover(saved)` checks a change against a saved
|
|
201
|
+
`app.graph()`: what a deploy would remove, what it would update, and what it would
|
|
202
|
+
no longer remove in order. It works with vitest and with `bun test`. The docs page
|
|
203
|
+
has the examples.
|
|
204
|
+
- **Renaming a part later.** A part's key is in the name of its resource, so a new key
|
|
205
|
+
is a new resource. To change the key and keep what's deployed, declare the part with
|
|
206
|
+
the name it had: `files: sst.named(aws.s3.Bucket, "Bucket")`. Or give the resource its
|
|
207
|
+
new name and say where it was: `sst.takeover(Uploads, { moved: { files: "bucket" } })`.
|
|
208
|
+
- **Sharing it as a package.** A package imports `component` and the rest from
|
|
209
|
+
`sst/components`, SST's components for a provider from its group, like
|
|
210
|
+
`sst/components/aws`, and each provider from its package. Its repo installs `sst`,
|
|
211
|
+
Pulumi and those providers as dev dependencies, and builds and tests with ordinary
|
|
212
|
+
tools, with no `sst.config.ts`. In an app, the CLI resolves the same imports to the
|
|
213
|
+
app's own platform, so together they're what the `sst` global is.
|
|
214
|
+
`.sst/tsconfig.json`, which `sst install` writes, does the same for TypeScript, and
|
|
215
|
+
the vitest `alias` for the app's tests. The package's peer dependencies say which SST
|
|
216
|
+
and which providers it needs, and a deploy checks them. "Share it" on the docs page
|
|
217
|
+
has the setup.
|
|
218
|
+
- **`sst/components` is a public API.** What `core.ts` and each group export is what
|
|
219
|
+
packages build on. Adding to it is fine. Removing an export or changing what one
|
|
220
|
+
accepts breaks them, so it waits for a major version. `component()` returns a named
|
|
221
|
+
type (`ComponentClass`) so that a package's `.d.ts` can name it; keep it named.
|
|
222
|
+
`declarations.test.ts` compiles a package both ways.
|
|
223
|
+
|
|
224
|
+
---
|
|
225
|
+
|
|
226
|
+
## Porting a 4.x component
|
|
227
|
+
|
|
228
|
+
Everything above applies. The rest is specific to SST's own components in
|
|
229
|
+
`platform/src/components/aws/`.
|
|
230
|
+
|
|
231
|
+
### Ground rules
|
|
232
|
+
|
|
233
|
+
- **The V5 component has the original's name, in the `v5` folder.** `Queue` in
|
|
234
|
+
`aws/queue.ts` is ported as `Queue` in `aws/v5/queue.ts`, with the same type,
|
|
235
|
+
`sst:aws:Queue`. An app uses it as `sst.aws.v5.Queue`, next to `sst.aws.Queue`.
|
|
236
|
+
- **The same type is what makes it the same component.** A deployed `sst:aws:Queue`
|
|
237
|
+
named `MyQueue` is the one `new sst.aws.v5.Queue("MyQueue")` creates, so it's kept, and
|
|
238
|
+
so is each resource in it that has the name it had. Going back to the 4.x component
|
|
239
|
+
keeps those too. What links the component sees no change, and a `$transform` for
|
|
240
|
+
either applies to both.
|
|
241
|
+
- **Where a file needs both, the 4.x one is `Original…`.** That goes for the class and
|
|
242
|
+
for its types: `import type { Queue as OriginalQueue } from "../queue"`. In prose,
|
|
243
|
+
say which one you mean: "the 4.x `Queue`" in a code comment, `sst.aws.Queue` and
|
|
244
|
+
`sst.aws.v5.Queue` in what the docs are generated from.
|
|
245
|
+
- **Edit a 4.x component file only where it changes nothing for an app that uses it.**
|
|
246
|
+
An app's config has to read the same, and its state can't change: imports, what a
|
|
247
|
+
file reads when it loads, and types are fine. New behavior goes in the V5
|
|
248
|
+
component. V5 components haven't been released, so they can still change in any
|
|
249
|
+
way.
|
|
250
|
+
- **Redesign, don't translate.** A V5 component doesn't have to mirror the original's
|
|
251
|
+
structure.
|
|
252
|
+
- **Port what takes a component before the component itself.** 4.x components
|
|
253
|
+
recognise a `Vpc` or a `Router` with `instanceof`, and are typed for the 4.x
|
|
254
|
+
`Cluster`, so the V5 one can't be passed to them. Port the components that take it
|
|
255
|
+
first, and have each accept both the original and the V5 one. The component that's
|
|
256
|
+
taken goes last: an app switches to it once everything it's passed to is V5.
|
|
257
|
+
The V5 `Service` and `Task` take either `Cluster`. The arg is declared again in each
|
|
258
|
+
(`cluster: OriginalCluster | Cluster`), and the V5 `Cluster` gives them the same
|
|
259
|
+
`nodes.cluster` and `vpc` to read as the 4.x one. The V5 `Function`, `Service` and
|
|
260
|
+
`Task` take either `Efs` the same way, and the V5 `Service` either `Alb`.
|
|
261
|
+
For a `Vpc`, the two kinds are already one thing to a V5 component: it wraps the
|
|
262
|
+
original's args in `TakesVpc<>`, which gives `vpc` the type `AnyVpc` in place of the
|
|
263
|
+
4.x `Vpc`, and it checks with `isVpc()`, not `instanceof` (all three are in
|
|
264
|
+
`helpers/vpc.ts`). When `Vpc` is ported, the V5 one is added to `AnyVpc` and
|
|
265
|
+
`isVpc()`, and every V5 component takes it.
|
|
266
|
+
- **No `registerVersion`.** Keep any tags the original writes at the same value.
|
|
267
|
+
- **Reuse the original's arg types**: `interface QueueArgs extends
|
|
268
|
+
V5Args<OriginalQueueArgs, typeof parts> {}`. `Omit` and re-declare only what has to
|
|
269
|
+
change. For an arg that has to become a plain value, write
|
|
270
|
+
`cors?: Plain<OriginalBucketArgs["cors"]>` (`Plain` is in `args.ts`): the docs generator follows it back to the original's docs.
|
|
271
|
+
An arg's docs come with it, examples included. Where an example creates a component
|
|
272
|
+
that has a V5 form (`new sst.aws.Queue("MyQueue", { dlq })`, `sst.aws.Vpc.get(...)`),
|
|
273
|
+
the docs generator writes the V5 one on the V5 page. So declare an arg again only
|
|
274
|
+
when its type changes, or when what its docs say no longer holds.
|
|
275
|
+
|
|
276
|
+
### What becomes a part, and what stays a component
|
|
277
|
+
|
|
278
|
+
- Something that only **wires resources together** becomes parts of the parent, as `many`
|
|
279
|
+
parts keyed by a name the user gives: a subscription, a route, an authorizer, a data
|
|
280
|
+
source, an identity provider. 4.x usually kept these in a wrapper component of their
|
|
281
|
+
own. The method that adds one returns the parent (so calls chain) or the AWS resource
|
|
282
|
+
(when the user needs something off it, like `authorizer.id`).
|
|
283
|
+
- Something the user **names and links in its own right** stays a component of its own,
|
|
284
|
+
returned by the method that adds it. `addClient("Web")` on a V5 `CognitoUserPool`
|
|
285
|
+
returns a `CognitoUserPoolClient`, so `link: [client]` still gives `Resource.Web.id`.
|
|
286
|
+
- A per-method `transform` moves to the component's `transform`. `this.assertNew()`
|
|
287
|
+
rejects the old option with a message.
|
|
288
|
+
- A deprecated overload isn't carried over (`subscribe(handler)` with no name). Throw
|
|
289
|
+
an error that shows the call to write instead; without one the user gets whatever
|
|
290
|
+
the shifted arguments happen to fail on. The same goes for a deprecated method: the
|
|
291
|
+
V5 `Cluster` has `addService` and `addTask` only to say what to write, marked
|
|
292
|
+
`@internal` so they stay off its page.
|
|
293
|
+
- A static method that adds something to a resource outside the app (`Dynamo.subscribe`
|
|
294
|
+
with a stream ARN) becomes `get(...)` and the ordinary method. The takeover map can
|
|
295
|
+
still find what the static method created: see `takeover/dynamo.ts`.
|
|
296
|
+
|
|
297
|
+
### Helpers
|
|
298
|
+
|
|
299
|
+
| For | Use |
|
|
300
|
+
| --- | --- |
|
|
301
|
+
| A function from a handler, args, an ARN, a function or a `Workflow` | `functionPart()` in `helpers/function-part.ts` |
|
|
302
|
+
| Letting a service invoke that function | `invokePermissionArgs(fn, principal, sourceArn)` in `helpers/function-permission.ts` |
|
|
303
|
+
| A custom domain (`name`, `dns`, `cert`) | `customDomain()` and `CustomDomainArgs` in `helpers/custom-domain.ts` |
|
|
304
|
+
| Event source mappings | `filterCriteria()`, `batchSettings()` in `helpers/event-source.ts` |
|
|
305
|
+
| Letting a service send to a queue | `sendPolicyArgs(queueArn)` in `helpers/queue-policy.ts` |
|
|
306
|
+
| A Fargate task: its containers, roles, images, log groups and task definition | `containersOf()`, `taskRoleArgs()`, `executionRoleArgs()`, `containerImage()`, `logGroupArgs()`, `taskDefinitionArgs()` in `helpers/fargate.ts` |
|
|
307
|
+
| The VPC of a cluster, whichever way the cluster was given it | `networkOf(cluster)` in `helpers/fargate.ts` |
|
|
308
|
+
| A `vpc` arg: either kind of `Vpc`, or the ids of a VPC | `TakesVpc<Args>`, `AnyVpc`, `isVpc(vpc)` in `helpers/vpc.ts` |
|
|
309
|
+
| A load balancer: its security group, what a listener answers by default, a domain with aliases and its DNS records | `securityGroupArgs()`, `forbidden()`, `domainOf()`, `pointDomainAt()` in `helpers/load-balancer-args.ts` |
|
|
310
|
+
| An RDS database: storage limit, replicas, the proxy, a stored password | `maxStorage()`, `replicaArgs()`, `proxyCredentials()`, `proxyRoleArgs()`, `proxyArgs()`, `storedPassword()` in `helpers/rds.ts` |
|
|
311
|
+
| An arg with a default, then converted | `withDefault(value, fallback, convert?)` in `args.ts` |
|
|
312
|
+
| An arg that may be unset | `ifSet(value, convert?)` in `args.ts` |
|
|
313
|
+
| An arg that must not be an output | `plain(value, what)` in `args.ts` |
|
|
314
|
+
| An arg that must not have an output anywhere inside it | `plainDeep(value, what)` in `args.ts` |
|
|
315
|
+
| An option a method no longer takes | `notAnOption(args, option, instead)` in `args.ts` |
|
|
316
|
+
| A value made on this machine from things in AWS, like built code | `withoutDependencies(output)` in `args.ts` |
|
|
317
|
+
|
|
318
|
+
A helper returns the args of a part, or checks an arg. The component still creates
|
|
319
|
+
each part with `this.part()`, so its constructor reads as the list of what it creates.
|
|
320
|
+
The V5 `Postgres` and `Mysql` are the same component but for a handful of settings,
|
|
321
|
+
and share everything else this way.
|
|
322
|
+
|
|
323
|
+
One helper creates a part itself: `containerImage()` builds a container's image behind
|
|
324
|
+
the limit on how many builds run at once, so the image is created when its turn comes.
|
|
325
|
+
It gets the part's name, transform and old address from `component.partHandle(key, id)`,
|
|
326
|
+
the way `functionPart()` does. Reach for that only when `this.part()` can't do it.
|
|
327
|
+
|
|
328
|
+
Args that several components take are declared once, in a helper. The docs generator
|
|
329
|
+
reads every file in `aws/helpers/`, and a helper file gets no page of its own:
|
|
330
|
+
|
|
331
|
+
- An interface the components' args extend, for args they share. `FargateArgs` in
|
|
332
|
+
`helpers/fargate.ts` is the `cluster` and `volumes` of a task and a service. Its
|
|
333
|
+
args show on each page as the component's own.
|
|
334
|
+
- A named type the args use. `ContainerArgs` in `helpers/fargate.ts` and `ProxyArgs` in
|
|
335
|
+
`helpers/rds.ts` get a section on each page that uses them, as if the page's file
|
|
336
|
+
declared them.
|
|
337
|
+
- A name for a type, like `AnyVpc`. A page shows what it stands for.
|
|
338
|
+
|
|
339
|
+
Write a helper's doc comments for any page: don't name a component in them. The
|
|
340
|
+
comment on an interface that's only extended isn't shown.
|
|
341
|
+
|
|
342
|
+
### Taking over what 4.x deployed
|
|
343
|
+
|
|
344
|
+
Changing `sst.aws.Queue` to `sst.aws.v5.Queue` with the same name has to keep the
|
|
345
|
+
deployed resources. The component and every part with the name it had are kept as they
|
|
346
|
+
are, because the type is the same. What moved goes in a **takeover map**,
|
|
347
|
+
`aws/takeover/<name>.ts`, imported from `aws/takeover/index.ts`. The component itself
|
|
348
|
+
knows nothing about 4.x. A component with nothing that moved has no map.
|
|
349
|
+
|
|
350
|
+
A map is a file that's imported for what it does, not for what it exports. The CLI
|
|
351
|
+
bundles a config with esbuild, which leaves such a file out of a package that says it
|
|
352
|
+
has no side effects, so `sideEffects` in `platform/package.json` lists
|
|
353
|
+
`aws/takeover/*.ts`. Without that line every map is dropped from a real build and a
|
|
354
|
+
switch deletes and recreates whatever moved, while every test under the mock passes.
|
|
355
|
+
`v5-components.test.ts` bundles the components the way the CLI does and checks the maps
|
|
356
|
+
are in.
|
|
357
|
+
|
|
358
|
+
```ts
|
|
359
|
+
// The V5 one, from "../v5/apigatewayv2"
|
|
360
|
+
takeover(ApiGatewayV2, {
|
|
361
|
+
moved: {
|
|
362
|
+
// A part whose key changed: it was `<Api>AccessLog`
|
|
363
|
+
logGroup: "accessLog",
|
|
364
|
+
// A part that lived in a wrapper component at the top of the app
|
|
365
|
+
authorizer: (_, { name, id }) =>
|
|
366
|
+
childOf(
|
|
367
|
+
"sst:aws:ApiGatewayV2Authorizer",
|
|
368
|
+
`${name}Authorizer${logicalName(id)}`,
|
|
369
|
+
"Authorizer",
|
|
370
|
+
),
|
|
371
|
+
},
|
|
372
|
+
});
|
|
373
|
+
```
|
|
374
|
+
|
|
375
|
+
- A part is matched by its key. List it under `moved` only when its old name or parent
|
|
376
|
+
was different.
|
|
377
|
+
- `childOf(type, component, child)` is the old address of something inside a wrapper
|
|
378
|
+
component. Pass the V5 component as a fourth argument when 4.x created the wrapper
|
|
379
|
+
with the component's own options, so it sat beside the component rather than at the
|
|
380
|
+
top (`Bucket.notify` does).
|
|
381
|
+
- `{ name, parent: false }` is something 4.x created with no parent at all.
|
|
382
|
+
- A `moved` function can return several candidates. Addresses that don't exist are
|
|
383
|
+
ignored. A candidate's name can be made from one of the component's outputs, like
|
|
384
|
+
the table's own name.
|
|
385
|
+
- When 4.x created a resource inside `.apply()`, a `transform` function for it was
|
|
386
|
+
given plain values. Created directly, it's given outputs for whatever is made from
|
|
387
|
+
the component's args. Say so in the "Switch from" section.
|
|
388
|
+
- A resource 4.x **looked up** outside the component (`Bucket.get`) can't be carried
|
|
389
|
+
over, because a lookup takes no old address. It's dropped from state and looked up
|
|
390
|
+
again, which changes nothing in AWS.
|
|
391
|
+
- A resource 4.x looked up under the component for a value isn't a part: it's not the
|
|
392
|
+
component's to transform or replace. Look it up with `this.delegateOpts()` and the
|
|
393
|
+
name it had, and it stays where it was in the state. The V5 `Efs` does this for the
|
|
394
|
+
VPC whose CIDR block it reads.
|
|
395
|
+
- A part that gets a new name keeps its physical name: a generated name is never
|
|
396
|
+
changed once it's deployed. A resource that's named with a `Name` tag is the
|
|
397
|
+
exception (a security group, a VPC endpoint, a subnet): the tag is made from the
|
|
398
|
+
logical name, so a new name updates it. Declare such a part with the name 4.x gave
|
|
399
|
+
it, `named(optional(ec2.SecurityGroup), "DsqlEndpointSecurityGroup")`, as the V5 `Dsql`
|
|
400
|
+
does. It then needs no entry in the takeover map. The name goes in the declaration
|
|
401
|
+
and not in the map because it has to outlive the map: once someone has switched, the
|
|
402
|
+
kept name is the one in their state.
|
|
403
|
+
- Something 4.x created without the component's `provider` is replaced on switch when
|
|
404
|
+
the component has one, because a part is always created with it. 4.x did this for
|
|
405
|
+
what it created with no parent (the alias of a durable function's URL, AppSync's
|
|
406
|
+
domain association), for a wrapper it forgot to give the provider (`SnsTopic`'s queue
|
|
407
|
+
subscribers), and for what's added to a component from a `get` that gave its options
|
|
408
|
+
to the lookup alone (`Bucket.get`, `Dynamo.get`, `CognitoUserPool.get`). A port can't
|
|
409
|
+
avoid it. The "with another provider" way of a takeover case finds it: expect it in
|
|
410
|
+
the case, and say so in the "Switch from" section.
|
|
411
|
+
- An object in `transform` is merged into the defaults, nested objects included; 4.x
|
|
412
|
+
replaced a nested object whole. So a config that sets a nested default this way
|
|
413
|
+
(`transform: { instance: { tags: { team: "data" } } }`) deploys something different
|
|
414
|
+
after the switch: here SST's own tags come back. Find the nested defaults of each
|
|
415
|
+
part, test one (`an object transform that sets tags` in `v5/postgres.test.ts`), and
|
|
416
|
+
name it in the "Switch from" section: "If you set `tags` on the instance with an
|
|
417
|
+
object in `transform`, it keeps the tags SST sets next to yours."
|
|
418
|
+
- `$transform(sst.aws.Queue, ...)` applies to `sst.aws.v5.Queue` too: it's matched by
|
|
419
|
+
type. So an option the original takes and the V5 one doesn't can still arrive. Say
|
|
420
|
+
where it went with `notAnOption()`. Where that would break configs people have, take
|
|
421
|
+
the old form as well: the V5 `Function` does, for `role`, `live`, `logging.logGroup`
|
|
422
|
+
and `url.route`, because a `$transform` for functions reaches the ones inside every
|
|
423
|
+
V5 component.
|
|
424
|
+
- The docs generator writes those two as the last notes of every "Switch from" section:
|
|
425
|
+
that an object in `transform` is merged, and that a `$transform` for the original
|
|
426
|
+
applies. The original is the component of the same name, one folder up. Don't write
|
|
427
|
+
them in the class doc.
|
|
428
|
+
- Something 4.x created outside the component with nothing in AWS behind it needs no
|
|
429
|
+
old address. The 4.x `Service` creates a `DevCommand` at the top of the app for each
|
|
430
|
+
container; in the V5 one they're parts, and a switch lists the old ones as removed
|
|
431
|
+
and the new ones as created. Expect them in `unclaimed`, and say so in the "Switch
|
|
432
|
+
from" section.
|
|
433
|
+
- A function's `description` usually changes, because 4.x named the wrapper in it. That's
|
|
434
|
+
an in-place update. So does anything else made from the function's name when a
|
|
435
|
+
function part gets a new one: a URL behind a `Router` is registered under a key made
|
|
436
|
+
from it.
|
|
437
|
+
- A function definition can still be written the way the 4.x `Function` takes it
|
|
438
|
+
(`role`, `logging.logGroup`, `live`, `url.route`). The V5 one takes those too.
|
|
439
|
+
- `takeover()` also takes `from`, the type a component had, for one that takes over
|
|
440
|
+
from a component of another type. No V5 component needs it.
|
|
441
|
+
- One of SST's own provider resources (`KvKeys`, `BucketFiles`) adds its type to its
|
|
442
|
+
name: `MyFunctionRouteKey.sst.aws.KvKeys`. As a part it's matched without that. If it
|
|
443
|
+
moved, write its old name in full, as a function in `moved`.
|
|
444
|
+
- A resource 4.x created outside of any component got no name from SST. Add its type to
|
|
445
|
+
`UNPREFIXED_TYPES` in `naming-rules.ts` so it keeps the name the provider gave it
|
|
446
|
+
(the V5 `Function` does this for the alias of a durable function's URL).
|
|
447
|
+
- Reproduce what 4.x deploys, not what it means to. The 4.x `Function` trusted the
|
|
448
|
+
account in every role because a check never passed, and the V5 one wrote the same
|
|
449
|
+
policy until `main` fixed 4.x. Changing it is a decision of its own, not a side
|
|
450
|
+
effect of a port. When 4.x changes what it deploys, the port follows.
|
|
451
|
+
|
|
452
|
+
A resource that's created inside `.apply()` has to be given the output, not the
|
|
453
|
+
value the callback was called with: the output is what says the resource depends on
|
|
454
|
+
where the value came from, so that it's removed first. The V5 `Service` creates its
|
|
455
|
+
Cloud Map service inside `.apply()` for a VPC given by its ids, and gives it the
|
|
456
|
+
namespace id as the output.
|
|
457
|
+
|
|
458
|
+
Where the resource that holds on to another isn't given anything of it, say so with
|
|
459
|
+
`dependsOn`. A load balancer holds on to its certificate, but only its listeners are
|
|
460
|
+
given it, so the V5 `Alb` and `Service` make the load balancer depend on the
|
|
461
|
+
certificate. The 4.x ones don't, and removing them can fail on a certificate that's
|
|
462
|
+
still in use.
|
|
463
|
+
|
|
464
|
+
Also check for an **ordering guarantee** the original makes with an
|
|
465
|
+
`x.apply(() => resource)` wrapper, and keep it. The 4.x `Bucket` makes everything that
|
|
466
|
+
reads `bucket.name` wait for the bucket policy; the V5 one keeps that in its getters.
|
|
467
|
+
Where the original left an order to chance, and parts that are created directly make
|
|
468
|
+
it easy to say, say it with `dependsOn`: the V5 `Service` makes the ECS service wait
|
|
469
|
+
for the listeners that put its target groups on the load balancer. That changes
|
|
470
|
+
nothing a deploy does to what's already there. `dependsOn` also takes an output of
|
|
471
|
+
resources, so it works for parts that are created later: the 4.x `Efs` made its ids
|
|
472
|
+
wait for the mount targets, and in the V5 one the access point depends on them.
|
|
473
|
+
|
|
474
|
+
### Tests
|
|
475
|
+
|
|
476
|
+
`platform/src/testing/mock.ts` mocks Pulumi and records every resource a component
|
|
477
|
+
registers. It ships with the platform, and `mock()` next to it is what an app tests its
|
|
478
|
+
own components with, so it imports no test runner. `platform/test/helpers/graph.ts` adds
|
|
479
|
+
the takeover suite for the ports, which is written for vitest. A port's test file starts
|
|
480
|
+
with its takeover cases, then tests the component's own behaviour:
|
|
481
|
+
|
|
482
|
+
```ts
|
|
483
|
+
const pulumi = mockPulumi();
|
|
484
|
+
|
|
485
|
+
describe("takes over a deployed Queue", () => {
|
|
486
|
+
pulumi.takeoverCases({
|
|
487
|
+
original: () => OriginalQueue,
|
|
488
|
+
v5: () => Queue,
|
|
489
|
+
cases: {
|
|
490
|
+
// Written once, for both: it's given the original, then the V5 component
|
|
491
|
+
"fifo queue": (Queue, opts) => new Queue("MyQueue", { fifo: true }, opts),
|
|
492
|
+
"a subscriber created from a handler": {
|
|
493
|
+
create: (Queue, opts) =>
|
|
494
|
+
new Queue("MyQueue", {}, opts).subscribe("src/subscriber.handler"),
|
|
495
|
+
// What goes: the wrapper, which has nothing in AWS behind it
|
|
496
|
+
unclaimed: ["sst:aws:QueueLambdaSubscriber::MyQueueSubscriberVkxuom"],
|
|
497
|
+
// What a deploy updates: a resource and its fields
|
|
498
|
+
changed: [["MyQueueSubscriberVkxuomFunctionFunction", ["description"]]],
|
|
499
|
+
// Anything else to assert, once the V5 component is deployed
|
|
500
|
+
check: () => expect(names()).toContain("MyQueueSubscriberFunction"),
|
|
501
|
+
},
|
|
502
|
+
},
|
|
503
|
+
});
|
|
504
|
+
});
|
|
505
|
+
```
|
|
506
|
+
|
|
507
|
+
- Each case deploys the original, then the V5 component, and expects everything the
|
|
508
|
+
original created to be kept as it is. It's run three ways: as it is, inside another
|
|
509
|
+
component, and with a `provider` of its own. So a case has to pass its `opts` on to
|
|
510
|
+
the component, and fails when it doesn't.
|
|
511
|
+
- The second and third way are where 4.x and a port differ most. 4.x often created a
|
|
512
|
+
wrapper at the top of the app wherever the component was, gave a wrapper the provider
|
|
513
|
+
but not the parent, or created something with no parent at all, so with the app's
|
|
514
|
+
provider.
|
|
515
|
+
- Cover every realistic combination of args, and every kind of thing the component adds,
|
|
516
|
+
`get` and what's added to a component from `get` included.
|
|
517
|
+
- A case says what's expected to go (`unclaimed`) or be updated (`changed`) when it isn't
|
|
518
|
+
nothing, the same for every case or by the way it's run (`(way) => [...]`). Don't
|
|
519
|
+
loosen it. Where the two components aren't written the same way, give `original` and
|
|
520
|
+
`v5` in place of `create`.
|
|
521
|
+
- Wrappers whose names aren't worth writing out can be counted: give the mock a
|
|
522
|
+
`wrappers` pattern and the case a `wrappers` number (see `v5/apigatewayv2.test.ts`).
|
|
523
|
+
- For a one-off, `pulumi.takesOver(original, v5)` returns `{ unclaimed, changed,
|
|
524
|
+
unordered }`.
|
|
525
|
+
- **Teardown order is checked too.** A deploy removes resources in the reverse of the
|
|
526
|
+
order they depend on each other, and AWS refuses to delete what's still in use. So
|
|
527
|
+
every dependency the original has is expected of the V5 component, directly or
|
|
528
|
+
through something in between. One that's missing is listed in `unordered`:
|
|
529
|
+
"MyServiceCloudmapService before MyVpcCloudmapNamespace". Fix the component. Where the
|
|
530
|
+
original's dependency is one nothing in AWS needs, name it in the suite's
|
|
531
|
+
`needlessOrder`, with the reason next to it.
|
|
532
|
+
- A dependency is only there to lose when the case has both resources. Give ids from
|
|
533
|
+
resources in the app, not just literal ones: a cluster whose VPC is given by the ids
|
|
534
|
+
of a `Vpc` (see `v5/service.test.ts`).
|
|
535
|
+
- `pulumi.dependsOn(name, other)` says whether one resource is removed before another,
|
|
536
|
+
for an order the component promises (see "when it's removed" in `v5/service.test.ts`).
|
|
537
|
+
- The check compares each resource's inputs and the options that change what a deploy
|
|
538
|
+
does to it: `ignoreChanges`, `protect`, `retainOnDelete`, `deleteBeforeReplace`,
|
|
539
|
+
`replaceOnChanges` and its provider. A difference there is reported as a field named
|
|
540
|
+
`options.<name>`. For a component it compares what's registered as its outputs
|
|
541
|
+
(`outputs`): the CLI reads some of them (`_task`, `_dev`, `_tunnel`).
|
|
542
|
+
- For a function it also compares what the CLI is given to build the code from
|
|
543
|
+
(`build`): the handler, runtime, copied files and **links**. A function's links go into
|
|
544
|
+
its code, not into any resource's inputs, so this is the only place a wrong link
|
|
545
|
+
shows. A takeover suite for a component with function parts needs a case with `link`.
|
|
546
|
+
- A resource's ids and ARNs are made from its name under the mock, so the check reads
|
|
547
|
+
a renamed resource's new name as its old one wherever another resource refers to it.
|
|
548
|
+
It doesn't in the resource's own inputs: its own name there is the name SST gave it,
|
|
549
|
+
like a `Name` tag, and a new one is a change.
|
|
550
|
+
- A provider made with `useProvider()` is registered once in a process, so only the
|
|
551
|
+
first test that needs it has it in its graph. The check leaves providers themselves
|
|
552
|
+
out of what it compares.
|
|
553
|
+
- A secret input is recorded as an object with the value under `value`. A value made
|
|
554
|
+
from a secret is a secret too, so a port that reads something next to a secret (a
|
|
555
|
+
task's volumes next to its built image) can turn a plain input into one. The check
|
|
556
|
+
reports that as a change to the field.
|
|
557
|
+
- `pulumi.outputsOf(name)` is what a component registered as its outputs. The takeover
|
|
558
|
+
check passes when neither side registers anything, so assert that the output the CLI
|
|
559
|
+
reads is there (see `v5/task.test.ts`).
|
|
560
|
+
- `await pulumi.settle()` after creating resources in every test, or they leak into the
|
|
561
|
+
next one.
|
|
562
|
+
- A 4.x component that's passed in can be the real one: a `Vpc`, `Cluster` and `Task`
|
|
563
|
+
all deploy under the mock (see `v5/cron-v2.test.ts`).
|
|
564
|
+
- Give the mock extra `state` for outputs the code reads (see `v5/apigatewayv2.test.ts`).
|
|
565
|
+
A resource that's looked up comes back with no name or ARN unless `state` gives it
|
|
566
|
+
one. The region, partition, account and IAM policy lookups have defaults.
|
|
567
|
+
- Assert on what's created, too. A takeover test passes when both sides create nothing,
|
|
568
|
+
which is what happens when a mock is missing and both sides fail the same way.
|
|
569
|
+
- `sst dev` behaviour is tested by setting `global.$dev = true` in a `beforeEach`.
|
|
570
|
+
- An error thrown inside `.apply()` can't be asserted: under the mock it's an
|
|
571
|
+
unhandled rejection, which fails the run. Test the errors that are thrown directly.
|
|
572
|
+
- `v5-components.test.ts` runs over every file in `aws/v5/`. It fails when one doesn't
|
|
573
|
+
have the name and type of the component it replaces, isn't exported from
|
|
574
|
+
`aws/v5/index.ts`, has a takeover map that isn't imported, or names another
|
|
575
|
+
component's type.
|
|
576
|
+
|
|
577
|
+
Run from `platform/`:
|
|
578
|
+
|
|
579
|
+
```bash
|
|
580
|
+
npx tsc --noEmit -p tsconfig.json
|
|
581
|
+
npx vitest run --pool=forks
|
|
582
|
+
```
|
|
583
|
+
|
|
584
|
+
Three test files (`bucket`, `alb`, `service-alb`) fail to load on `main` too.
|
|
585
|
+
|
|
586
|
+
**What the mock can't see.** It stands in for the engine and for the CLI, so a test
|
|
587
|
+
there never bundles a config, builds a function or calls AWS. The first deploy to a
|
|
588
|
+
real account found two bugs every test had passed: the takeover maps were missing from
|
|
589
|
+
a bundled config, and a V5 function's links were written into its code under the wrong
|
|
590
|
+
names. Both have a test now. For a port that touches how a config is built, what the
|
|
591
|
+
CLI is told, or the order things are created in, deploy it: the 4.x component first,
|
|
592
|
+
then `sst diff` after the switch, then `sst deploy`, then `sst remove`.
|
|
593
|
+
|
|
594
|
+
**Depending on a component is depending on everything in it.** A value read from a
|
|
595
|
+
component itself, like its `urn`, makes whatever is given that value wait for every
|
|
596
|
+
resource the component has created. A part is inside its component, so a part given
|
|
597
|
+
such a value waits for itself and is never created, with no error. That's how a
|
|
598
|
+
subscriber that linked its own queue (`queue.subscribe({ handler, link: [queue] })`)
|
|
599
|
+
went missing: a function's code is built from its links, and a link's name is read
|
|
600
|
+
from the linked component. 4.x didn't have the problem only because its subscriber sat
|
|
601
|
+
outside the queue. Give a part the outputs of the resources it needs, and where a value
|
|
602
|
+
is made on this machine from what's in AWS, pass it through `withoutDependencies()`.
|
|
603
|
+
For a component with function parts, test a function that links the component.
|
|
604
|
+
|
|
605
|
+
### Checklist
|
|
606
|
+
|
|
607
|
+
1. Read the original and every wrapper component it creates. Note each resource's
|
|
608
|
+
logical name, parent and options.
|
|
609
|
+
2. Write `aws/v5/<name>.ts`, with the original's file name and class name: parts, args,
|
|
610
|
+
constructor, methods, `link()`, `static get`.
|
|
611
|
+
Give it the original's type. Search `cmd/` and `pkg/` for that type
|
|
612
|
+
(`"sst:aws:Function"`): the CLI finds some components by it and reads what they
|
|
613
|
+
register as outputs, so the V5 one has to register the same.
|
|
614
|
+
3. If a part has another name or place than it had, write `aws/takeover/<name>.ts` and
|
|
615
|
+
import it from `aws/takeover/index.ts`.
|
|
616
|
+
4. Export the component from `aws/v5/index.ts`, which is `sst.aws.v5`.
|
|
617
|
+
5. Write `test/components/v5/<name>.test.ts`: takeover cases with
|
|
618
|
+
`pulumi.takeoverCases()`, then behaviour.
|
|
619
|
+
6. Write the class doc, including a "Switch from `sst.aws.<Name>`" section that lists what's
|
|
620
|
+
written differently and what changes on deploy. The docs generator adds the two notes
|
|
621
|
+
every port has to its list. Document each part where it's declared: those comments
|
|
622
|
+
become the `transform`, `existing` and `nodes` docs.
|
|
623
|
+
7. `cd www && bun ./generate.ts components` generates the page. The docs generator and
|
|
624
|
+
the sidebar find every file in `aws/v5/`, so there's nothing to add to either.
|
|
625
|
+
It fails when the page has `sst.aws.<Name>` outside the "Switch from" section, other
|
|
626
|
+
than as a link to its page. An inherited example that creates the original is
|
|
627
|
+
rewritten for you; what's left is prose that names it, in an arg's docs or your own.
|
|
628
|
+
8. Typecheck, run the tests, and `bun run build:cli` from the repo root.
|
|
629
|
+
9. Review before calling it done. Read the original's constructor and the new one side
|
|
630
|
+
by side, resource by resource: args, options, names, what's read back. Then read the
|
|
631
|
+
generated page.
|
|
632
|
+
|
|
633
|
+
The existing ports are the reference, all in `aws/v5/`: `alb.ts` for a custom domain
|
|
634
|
+
with aliases, and a method that looks a part up when it's asked for (`getListener`);
|
|
635
|
+
`apigatewayv2.ts` for routes, authorizers and a custom domain; `sns-topic.ts` for named subscribers; `bucket.ts` for
|
|
636
|
+
one resource built from many notifications; `cognito-user-pool.ts` for triggers and a
|
|
637
|
+
linkable client; `redis.ts` for dev mode and `get`; `postgres.ts` for the same with an
|
|
638
|
+
optional group of parts (the proxy) and a part per item in a list; `aurora.ts` for a
|
|
639
|
+
`get` that finds the rest of what it references, and a transform that applies to more
|
|
640
|
+
than one part; `cluster.ts` for the smallest one: nothing moved, so no takeover map,
|
|
641
|
+
and a `get` that takes args next to the id; `efs.ts` for a part per item of a list
|
|
642
|
+
that's only known on deploy (a mount target per subnet), and a `get` that finds the
|
|
643
|
+
other part it needs; `dsql.ts` for parts in another region, and features that each add a
|
|
644
|
+
group of parts; `task.ts` for parts per item of a plain list (containers), a part
|
|
645
|
+
that's built later, a stub in `sst dev`, and outputs the CLI reads; `service.ts` for
|
|
646
|
+
groups of parts that depend on an arg (a load balancer of its own, or one it
|
|
647
|
+
shares), parts made from a plain list of rules, a part that's read from `nodes` and
|
|
648
|
+
only exists sometimes, and a part that's created in `sst dev` too; `cron-v2.ts` for a
|
|
649
|
+
function the component may be given or may create, next to another component it's
|
|
650
|
+
given (a `Task`); `dynamo.ts` for required args next to `get`, and a static method
|
|
651
|
+
replaced by `get`; `function.ts` for a component 4.x built almost entirely inside
|
|
652
|
+
`.apply()`, with parts that are created later.
|