sst 3.0.0 → 3.0.1-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/package.json +8 -139
- package/src/index.ts +1 -0
- package/src/resource.ts +15 -0
- package/tsconfig.json +11 -0
- package/LICENSE +0 -21
- package/README.md +0 -43
- package/bootstrap.d.ts +0 -5
- package/bootstrap.js +0 -318
- package/bus.d.ts +0 -20
- package/bus.js +0 -52
- package/cache.d.ts +0 -4
- package/cache.js +0 -31
- package/cdk/deploy-stack.d.ts +0 -223
- package/cdk/deploy-stack.js +0 -562
- package/cdk/deployments-wrapper.d.ts +0 -3
- package/cdk/deployments-wrapper.js +0 -135
- package/cdk/deployments.d.ts +0 -327
- package/cdk/deployments.js +0 -360
- package/cdk/util.d.ts +0 -1
- package/cdk/util.js +0 -17
- package/cli/ci-info.d.ts +0 -4
- package/cli/ci-info.js +0 -8
- package/cli/colors.d.ts +0 -17
- package/cli/colors.js +0 -27
- package/cli/commands/bind.d.ts +0 -19
- package/cli/commands/bind.js +0 -360
- package/cli/commands/bootstrap.d.ts +0 -15
- package/cli/commands/bootstrap.js +0 -11
- package/cli/commands/build.d.ts +0 -17
- package/cli/commands/build.js +0 -25
- package/cli/commands/connect.d.ts +0 -17
- package/cli/commands/connect.js +0 -55
- package/cli/commands/console.d.ts +0 -15
- package/cli/commands/console.js +0 -22
- package/cli/commands/deploy.d.ts +0 -19
- package/cli/commands/deploy.js +0 -112
- package/cli/commands/dev.d.ts +0 -25
- package/cli/commands/dev.js +0 -351
- package/cli/commands/diff.d.ts +0 -19
- package/cli/commands/diff.js +0 -89
- package/cli/commands/plugins/kysely.d.ts +0 -1
- package/cli/commands/plugins/kysely.js +0 -87
- package/cli/commands/plugins/pothos.d.ts +0 -1
- package/cli/commands/plugins/pothos.js +0 -58
- package/cli/commands/plugins/warmer.d.ts +0 -1
- package/cli/commands/plugins/warmer.js +0 -33
- package/cli/commands/remove.d.ts +0 -19
- package/cli/commands/remove.js +0 -62
- package/cli/commands/secrets/get.d.ts +0 -19
- package/cli/commands/secrets/get.js +0 -27
- package/cli/commands/secrets/list.d.ts +0 -19
- package/cli/commands/secrets/list.js +0 -69
- package/cli/commands/secrets/load.d.ts +0 -17
- package/cli/commands/secrets/load.js +0 -47
- package/cli/commands/secrets/remove.d.ts +0 -19
- package/cli/commands/secrets/remove.js +0 -27
- package/cli/commands/secrets/secrets.d.ts +0 -2
- package/cli/commands/secrets/secrets.js +0 -16
- package/cli/commands/secrets/set.d.ts +0 -21
- package/cli/commands/secrets/set.js +0 -54
- package/cli/commands/telemetry.d.ts +0 -17
- package/cli/commands/telemetry.js +0 -24
- package/cli/commands/transform.d.ts +0 -17
- package/cli/commands/transform.js +0 -62
- package/cli/commands/types.d.ts +0 -15
- package/cli/commands/types.js +0 -25
- package/cli/commands/update.d.ts +0 -17
- package/cli/commands/update.js +0 -116
- package/cli/commands/version.d.ts +0 -15
- package/cli/commands/version.js +0 -15
- package/cli/local/router.d.ts +0 -44
- package/cli/local/router.js +0 -43
- package/cli/local/server.d.ts +0 -22
- package/cli/local/server.js +0 -319
- package/cli/program.d.ts +0 -19
- package/cli/program.js +0 -87
- package/cli/spinner.d.ts +0 -3
- package/cli/spinner.js +0 -14
- package/cli/sst.d.ts +0 -2
- package/cli/sst.js +0 -74
- package/cli/telemetry/environment.d.ts +0 -15
- package/cli/telemetry/environment.js +0 -27
- package/cli/telemetry/post-payload.d.ts +0 -1
- package/cli/telemetry/post-payload.js +0 -27
- package/cli/telemetry/project-id.d.ts +0 -2
- package/cli/telemetry/project-id.js +0 -47
- package/cli/telemetry/telemetry.d.ts +0 -19
- package/cli/telemetry/telemetry.js +0 -103
- package/cli/terminal.d.ts +0 -1
- package/cli/terminal.js +0 -8
- package/cli/ui/deploy.d.ts +0 -10
- package/cli/ui/deploy.js +0 -172
- package/cli/ui/functions.d.ts +0 -2
- package/cli/ui/functions.js +0 -130
- package/cli/ui/header.d.ts +0 -5
- package/cli/ui/header.js +0 -16
- package/cli/ui/stack.d.ts +0 -1
- package/cli/ui/stack.js +0 -6
- package/config.d.ts +0 -56
- package/config.js +0 -244
- package/constructs/Api.d.ts +0 -814
- package/constructs/Api.js +0 -743
- package/constructs/ApiGatewayV1Api.d.ts +0 -642
- package/constructs/ApiGatewayV1Api.js +0 -767
- package/constructs/App.d.ts +0 -168
- package/constructs/App.js +0 -493
- package/constructs/AppSyncApi.d.ts +0 -550
- package/constructs/AppSyncApi.js +0 -493
- package/constructs/AstroSite.d.ts +0 -39
- package/constructs/AstroSite.js +0 -78
- package/constructs/AstroSite.tsdoc.d.ts +0 -2
- package/constructs/AstroSite.tsdoc.js +0 -2
- package/constructs/Auth.d.ts +0 -100
- package/constructs/Auth.js +0 -177
- package/constructs/BaseSite.d.ts +0 -29
- package/constructs/BaseSite.js +0 -43
- package/constructs/Bucket.d.ts +0 -364
- package/constructs/Bucket.js +0 -327
- package/constructs/Cognito.d.ts +0 -232
- package/constructs/Cognito.js +0 -370
- package/constructs/Config.d.ts +0 -3
- package/constructs/Config.js +0 -3
- package/constructs/Construct.d.ts +0 -23
- package/constructs/Construct.js +0 -46
- package/constructs/Cron.d.ts +0 -164
- package/constructs/Cron.js +0 -114
- package/constructs/Distribution.d.ts +0 -143
- package/constructs/Distribution.js +0 -260
- package/constructs/EdgeFunction.d.ts +0 -49
- package/constructs/EdgeFunction.js +0 -442
- package/constructs/EventBus.d.ts +0 -444
- package/constructs/EventBus.js +0 -440
- package/constructs/Function.d.ts +0 -690
- package/constructs/Function.js +0 -583
- package/constructs/FunctionalStack.d.ts +0 -13
- package/constructs/FunctionalStack.js +0 -62
- package/constructs/Job.d.ts +0 -337
- package/constructs/Job.js +0 -404
- package/constructs/KinesisStream.d.ts +0 -224
- package/constructs/KinesisStream.js +0 -207
- package/constructs/Metadata.d.ts +0 -60
- package/constructs/Metadata.js +0 -1
- package/constructs/NextjsSite.d.ts +0 -104
- package/constructs/NextjsSite.js +0 -308
- package/constructs/Parameter.d.ts +0 -37
- package/constructs/Parameter.js +0 -53
- package/constructs/Queue.d.ts +0 -194
- package/constructs/Queue.js +0 -204
- package/constructs/RDS.d.ts +0 -221
- package/constructs/RDS.js +0 -363
- package/constructs/RemixSite.d.ts +0 -42
- package/constructs/RemixSite.js +0 -158
- package/constructs/RemixSite.tsdoc.d.ts +0 -2
- package/constructs/RemixSite.tsdoc.js +0 -2
- package/constructs/Script.d.ts +0 -160
- package/constructs/Script.js +0 -179
- package/constructs/Secret.d.ts +0 -30
- package/constructs/Secret.js +0 -59
- package/constructs/Service.d.ts +0 -487
- package/constructs/Service.js +0 -655
- package/constructs/SolidStartSite.d.ts +0 -37
- package/constructs/SolidStartSite.js +0 -66
- package/constructs/SolidStartSite.tsdoc.d.ts +0 -2
- package/constructs/SolidStartSite.tsdoc.js +0 -2
- package/constructs/SsrFunction.d.ts +0 -60
- package/constructs/SsrFunction.js +0 -226
- package/constructs/SsrSite.d.ts +0 -407
- package/constructs/SsrSite.js +0 -850
- package/constructs/Stack.d.ts +0 -127
- package/constructs/Stack.js +0 -243
- package/constructs/StaticSite.d.ts +0 -348
- package/constructs/StaticSite.js +0 -468
- package/constructs/SvelteKitSite.d.ts +0 -40
- package/constructs/SvelteKitSite.js +0 -106
- package/constructs/SvelteKitSite.tsdoc.d.ts +0 -2
- package/constructs/SvelteKitSite.tsdoc.js +0 -2
- package/constructs/Table.d.ts +0 -410
- package/constructs/Table.js +0 -425
- package/constructs/Topic.d.ts +0 -257
- package/constructs/Topic.js +0 -273
- package/constructs/WebSocketApi.d.ts +0 -355
- package/constructs/WebSocketApi.js +0 -404
- package/constructs/cdk/HttpAwsIntegration.d.ts +0 -32
- package/constructs/cdk/HttpAwsIntegration.js +0 -24
- package/constructs/cdk/certificate-base.d.ts +0 -18
- package/constructs/cdk/certificate-base.js +0 -26
- package/constructs/cdk/dns-validated-certificate.d.ts +0 -77
- package/constructs/cdk/dns-validated-certificate.js +0 -125
- package/constructs/cdk/website-redirect.d.ts +0 -53
- package/constructs/cdk/website-redirect.js +0 -77
- package/constructs/context.d.ts +0 -3
- package/constructs/context.js +0 -27
- package/constructs/deferred_task.d.ts +0 -6
- package/constructs/deferred_task.js +0 -45
- package/constructs/deprecated/NextjsSite.d.ts +0 -309
- package/constructs/deprecated/NextjsSite.js +0 -1074
- package/constructs/deprecated/cross-region-helper.d.ts +0 -7
- package/constructs/deprecated/cross-region-helper.js +0 -152
- package/constructs/deprecated/index.d.ts +0 -1
- package/constructs/deprecated/index.js +0 -1
- package/constructs/future/Auth.d.ts +0 -80
- package/constructs/future/Auth.js +0 -122
- package/constructs/future/index.d.ts +0 -1
- package/constructs/future/index.js +0 -1
- package/constructs/index.d.ts +0 -32
- package/constructs/index.js +0 -32
- package/constructs/static-file-list.d.ts +0 -1
- package/constructs/static-file-list.js +0 -51
- package/constructs/util/apiGatewayV1AccessLog.d.ts +0 -15
- package/constructs/util/apiGatewayV1AccessLog.js +0 -76
- package/constructs/util/apiGatewayV2AccessLog.d.ts +0 -10
- package/constructs/util/apiGatewayV2AccessLog.js +0 -107
- package/constructs/util/apiGatewayV2Cors.d.ts +0 -67
- package/constructs/util/apiGatewayV2Cors.js +0 -21
- package/constructs/util/apiGatewayV2Domain.d.ts +0 -47
- package/constructs/util/apiGatewayV2Domain.js +0 -208
- package/constructs/util/appSyncApiDomain.d.ts +0 -41
- package/constructs/util/appSyncApiDomain.js +0 -176
- package/constructs/util/builder.d.ts +0 -3
- package/constructs/util/builder.js +0 -9
- package/constructs/util/duration.d.ts +0 -3
- package/constructs/util/duration.js +0 -19
- package/constructs/util/functionBinding.d.ts +0 -31
- package/constructs/util/functionBinding.js +0 -104
- package/constructs/util/functionUrlCors.d.ts +0 -67
- package/constructs/util/functionUrlCors.js +0 -23
- package/constructs/util/permission.d.ts +0 -8
- package/constructs/util/permission.js +0 -228
- package/constructs/util/size.d.ts +0 -3
- package/constructs/util/size.js +0 -12
- package/constructs/util/warning.d.ts +0 -11
- package/constructs/util/warning.js +0 -21
- package/context/context.d.ts +0 -13
- package/context/context.js +0 -69
- package/context/context2.d.ts +0 -16
- package/context/context2.js +0 -108
- package/context/handler.d.ts +0 -25
- package/context/handler.js +0 -21
- package/context/index.d.ts +0 -2
- package/context/index.js +0 -2
- package/credentials.d.ts +0 -9
- package/credentials.js +0 -145
- package/error.d.ts +0 -6
- package/error.js +0 -10
- package/index.d.ts +0 -1
- package/index.js +0 -1
- package/iot.d.ts +0 -6
- package/iot.js +0 -163
- package/logger.d.ts +0 -3
- package/logger.js +0 -32
- package/node/actor/index.d.ts +0 -29
- package/node/actor/index.js +0 -17
- package/node/api/index.d.ts +0 -64
- package/node/api/index.js +0 -179
- package/node/auth/adapter/adapter.d.ts +0 -3
- package/node/auth/adapter/adapter.js +0 -3
- package/node/auth/adapter/facebook.d.ts +0 -2
- package/node/auth/adapter/facebook.js +0 -26
- package/node/auth/adapter/github.d.ts +0 -2
- package/node/auth/adapter/github.js +0 -21
- package/node/auth/adapter/google.d.ts +0 -9
- package/node/auth/adapter/google.js +0 -18
- package/node/auth/adapter/link.d.ts +0 -8
- package/node/auth/adapter/link.js +0 -39
- package/node/auth/adapter/oauth.d.ts +0 -25
- package/node/auth/adapter/oauth.js +0 -52
- package/node/auth/adapter/oidc.d.ts +0 -17
- package/node/auth/adapter/oidc.js +0 -50
- package/node/auth/adapter/twitch.d.ts +0 -2
- package/node/auth/adapter/twitch.js +0 -11
- package/node/auth/auth.d.ts +0 -24
- package/node/auth/auth.js +0 -74
- package/node/auth/index.d.ts +0 -13
- package/node/auth/index.js +0 -12
- package/node/auth/session.d.ts +0 -76
- package/node/auth/session.js +0 -121
- package/node/bucket/index.d.ts +0 -3
- package/node/bucket/index.js +0 -2
- package/node/config/index.d.ts +0 -13
- package/node/config/index.js +0 -22
- package/node/event-bus/index.d.ts +0 -51
- package/node/event-bus/index.js +0 -76
- package/node/function/index.d.ts +0 -3
- package/node/function/index.js +0 -3
- package/node/future/auth/adapter/adapter.d.ts +0 -10
- package/node/future/auth/adapter/adapter.js +0 -1
- package/node/future/auth/adapter/code.d.ts +0 -17
- package/node/future/auth/adapter/code.js +0 -68
- package/node/future/auth/adapter/facebook.d.ts +0 -16
- package/node/future/auth/adapter/facebook.js +0 -27
- package/node/future/auth/adapter/github.d.ts +0 -23
- package/node/future/auth/adapter/github.js +0 -23
- package/node/future/auth/adapter/google.d.ts +0 -28
- package/node/future/auth/adapter/google.js +0 -22
- package/node/future/auth/adapter/link.d.ts +0 -13
- package/node/future/auth/adapter/link.js +0 -47
- package/node/future/auth/adapter/microsoft.d.ts +0 -22
- package/node/future/auth/adapter/microsoft.js +0 -16
- package/node/future/auth/adapter/oauth.d.ts +0 -41
- package/node/future/auth/adapter/oauth.js +0 -67
- package/node/future/auth/adapter/oidc.d.ts +0 -30
- package/node/future/auth/adapter/oidc.js +0 -63
- package/node/future/auth/adapter/spotify.d.ts +0 -23
- package/node/future/auth/adapter/spotify.js +0 -22
- package/node/future/auth/encryption.d.ts +0 -2
- package/node/future/auth/encryption.js +0 -30
- package/node/future/auth/handler.d.ts +0 -46
- package/node/future/auth/handler.js +0 -280
- package/node/future/auth/index.d.ts +0 -17
- package/node/future/auth/index.js +0 -15
- package/node/future/auth/session.d.ts +0 -71
- package/node/future/auth/session.js +0 -146
- package/node/graphql/index.d.ts +0 -15
- package/node/graphql/index.js +0 -32
- package/node/job/index.d.ts +0 -37
- package/node/job/index.js +0 -64
- package/node/kinesis-stream/index.d.ts +0 -3
- package/node/kinesis-stream/index.js +0 -3
- package/node/queue/index.d.ts +0 -3
- package/node/queue/index.js +0 -2
- package/node/rds/index.d.ts +0 -3
- package/node/rds/index.js +0 -2
- package/node/service/index.d.ts +0 -3
- package/node/service/index.js +0 -4
- package/node/site/index.d.ts +0 -18
- package/node/site/index.js +0 -18
- package/node/table/index.d.ts +0 -3
- package/node/table/index.js +0 -4
- package/node/topic/index.d.ts +0 -3
- package/node/topic/index.js +0 -4
- package/node/util/index.d.ts +0 -2
- package/node/util/index.js +0 -196
- package/node/util/loader.d.ts +0 -2
- package/node/util/loader.js +0 -51
- package/node/websocket-api/index.d.ts +0 -23
- package/node/websocket-api/index.js +0 -48
- package/pothos.d.ts +0 -7
- package/pothos.js +0 -160
- package/project.d.ts +0 -75
- package/project.js +0 -188
- package/runtime/handlers/container.d.ts +0 -2
- package/runtime/handlers/container.js +0 -263
- package/runtime/handlers/dotnet.d.ts +0 -2
- package/runtime/handlers/dotnet.js +0 -115
- package/runtime/handlers/go.d.ts +0 -2
- package/runtime/handlers/go.js +0 -126
- package/runtime/handlers/java.d.ts +0 -2
- package/runtime/handlers/java.js +0 -103
- package/runtime/handlers/node.d.ts +0 -2
- package/runtime/handlers/node.js +0 -269
- package/runtime/handlers/python.d.ts +0 -2
- package/runtime/handlers/python.js +0 -141
- package/runtime/handlers/pythonBundling.d.ts +0 -82
- package/runtime/handlers/pythonBundling.js +0 -80
- package/runtime/handlers/rust.d.ts +0 -2
- package/runtime/handlers/rust.js +0 -110
- package/runtime/handlers.d.ts +0 -74
- package/runtime/handlers.js +0 -151
- package/runtime/iot.d.ts +0 -1
- package/runtime/iot.js +0 -17
- package/runtime/runtime.d.ts +0 -32
- package/runtime/runtime.js +0 -1
- package/runtime/server.d.ts +0 -6
- package/runtime/server.js +0 -150
- package/runtime/workers.d.ts +0 -37
- package/runtime/workers.js +0 -85
- package/stacks/app-metadata.d.ts +0 -7
- package/stacks/app-metadata.js +0 -75
- package/stacks/assembly.d.ts +0 -1
- package/stacks/assembly.js +0 -4
- package/stacks/build.d.ts +0 -9
- package/stacks/build.js +0 -110
- package/stacks/deploy.d.ts +0 -9
- package/stacks/deploy.js +0 -240
- package/stacks/diff.d.ts +0 -8
- package/stacks/diff.js +0 -62
- package/stacks/index.d.ts +0 -10
- package/stacks/index.js +0 -10
- package/stacks/metadata.d.ts +0 -11
- package/stacks/metadata.js +0 -83
- package/stacks/monitor.d.ts +0 -32
- package/stacks/monitor.js +0 -151
- package/stacks/remove.d.ts +0 -8
- package/stacks/remove.js +0 -76
- package/stacks/synth.d.ts +0 -12
- package/stacks/synth.js +0 -94
- package/support/base-site-archiver.mjs +0 -99
- package/support/base-site-custom-resource/s3-handler.py +0 -195
- package/support/base-site-custom-resource/s3-upload.py +0 -89
- package/support/bootstrap-metadata-function/index.mjs +0 -58011
- package/support/bridge/Dockerfile +0 -3
- package/support/bridge/bridge.mjs +0 -146
- package/support/certificate-requestor/index.js +0 -549
- package/support/custom-resources/index.mjs +0 -180627
- package/support/dotnet31-bootstrap/Program.cs +0 -17
- package/support/dotnet31-bootstrap/dotnet-bootstrap.csproj +0 -12
- package/support/dotnet31-bootstrap/release/Amazon.Lambda.Core.dll +0 -0
- package/support/dotnet31-bootstrap/release/Amazon.Lambda.RuntimeSupport.dll +0 -0
- package/support/dotnet31-bootstrap/release/System.Runtime.CompilerServices.Unsafe.dll +0 -0
- package/support/dotnet31-bootstrap/release/System.Text.Encodings.Web.dll +0 -0
- package/support/dotnet31-bootstrap/release/System.Text.Json.dll +0 -0
- package/support/dotnet31-bootstrap/release/dotnet-bootstrap +0 -0
- package/support/dotnet31-bootstrap/release/dotnet-bootstrap.deps.json +0 -230
- package/support/dotnet31-bootstrap/release/dotnet-bootstrap.dll +0 -0
- package/support/dotnet31-bootstrap/release/dotnet-bootstrap.pdb +0 -0
- package/support/dotnet31-bootstrap/release/dotnet-bootstrap.runtimeconfig.json +0 -9
- package/support/dotnet6-bootstrap/Program.cs +0 -17
- package/support/dotnet6-bootstrap/dotnet-bootstrap.csproj +0 -12
- package/support/dotnet6-bootstrap/release/Amazon.Lambda.Core.dll +0 -0
- package/support/dotnet6-bootstrap/release/Amazon.Lambda.RuntimeSupport.dll +0 -0
- package/support/dotnet6-bootstrap/release/dotnet-bootstrap +0 -0
- package/support/dotnet6-bootstrap/release/dotnet-bootstrap.deps.json +0 -59
- package/support/dotnet6-bootstrap/release/dotnet-bootstrap.dll +0 -0
- package/support/dotnet6-bootstrap/release/dotnet-bootstrap.pdb +0 -0
- package/support/dotnet6-bootstrap/release/dotnet-bootstrap.runtimeconfig.json +0 -12
- package/support/edge-function/edge-lambda-version.mjs +0 -3
- package/support/edge-function/edge-lambda.mjs +0 -3
- package/support/edge-function/s3-bucket.mjs +0 -3
- package/support/event-bus-retrier/index.mjs +0 -75
- package/support/java-runtime/install.sh +0 -25
- package/support/java-runtime/pom.xml +0 -39
- package/support/java-runtime/release/aws-lambda-java-core-1.2.0.jar +0 -0
- package/support/java-runtime/release/aws-lambda-java-runtime-interface-client-1.1.0.jar +0 -0
- package/support/java-runtime/release/aws-lambda-java-serialization-1.0.0.jar +0 -0
- package/support/job-manager/index.mjs +0 -57679
- package/support/nixpacks/Dockerfile +0 -6
- package/support/nodejs-runtime/index.mjs +0 -169
- package/support/python-runtime/Dockerfile +0 -9
- package/support/python-runtime/Dockerfile.custom +0 -21
- package/support/python-runtime/Dockerfile.dependencies +0 -26
- package/support/python-runtime/runtime.py +0 -127
- package/support/rds-migrator/index.mjs +0 -49
- package/support/remix-site-function/edge-server.js +0 -161
- package/support/remix-site-function/polyfill.js +0 -24
- package/support/remix-site-function/regional-server.js +0 -164
- package/support/script-function/index.mjs +0 -48760
- package/support/service-dev-function/index.js +0 -1
- package/support/signing-function/index.mjs +0 -3769
- package/support/sls-nextjs-site-build-helper/build.cjs +0 -91
- package/support/sls-nextjs-site-build-helper/index-wrapper.js +0 -19
- package/support/sls-nextjs-site-function-code-replacer/lambda-code-updater.py +0 -156
- package/support/sls-nextjs-site-stub/index.html +0 -99
- package/support/ssr-site-function-archiver.mjs +0 -96
- package/support/ssr-site-function-stub/index.js +0 -5
- package/support/ssr-warmer/index.mjs +0 -34235
- package/util/error.d.ts +0 -3
- package/util/error.js +0 -6
- package/util/fs.d.ts +0 -4
- package/util/fs.js +0 -46
- package/util/lazy.d.ts +0 -1
- package/util/lazy.js +0 -11
- package/util/module.d.ts +0 -1
- package/util/module.js +0 -5
- package/util/process.d.ts +0 -2
- package/util/process.js +0 -3
- package/watcher.d.ts +0 -14
- package/watcher.js +0 -35
package/constructs/Function.js
DELETED
|
@@ -1,583 +0,0 @@
|
|
|
1
|
-
/* eslint-disable @typescript-eslint/ban-types */
|
|
2
|
-
// Note: disabling ban-type rule so we don't get an error referencing the class Function
|
|
3
|
-
import path from "path";
|
|
4
|
-
import fs from "fs/promises";
|
|
5
|
-
import zlib from "zlib";
|
|
6
|
-
import { Stack } from "./Stack.js";
|
|
7
|
-
import { Job } from "./Job.js";
|
|
8
|
-
import { Secret } from "./Config.js";
|
|
9
|
-
import { toCdkSize } from "./util/size.js";
|
|
10
|
-
import { toCdkDuration } from "./util/duration.js";
|
|
11
|
-
import { bindEnvironment, bindPermissions, getReferencedSecrets, } from "./util/functionBinding.js";
|
|
12
|
-
import { attachPermissionsToRole } from "./util/permission.js";
|
|
13
|
-
import * as functionUrlCors from "./util/functionUrlCors.js";
|
|
14
|
-
import url from "url";
|
|
15
|
-
import { useDeferredTasks } from "./deferred_task.js";
|
|
16
|
-
import { useProject } from "../project.js";
|
|
17
|
-
import { VisibleError } from "../error.js";
|
|
18
|
-
import { useRuntimeHandlers } from "../runtime/handlers.js";
|
|
19
|
-
import { createAppContext } from "./context.js";
|
|
20
|
-
import { useWarning } from "./util/warning.js";
|
|
21
|
-
import { Architecture, AssetCode, Code, Function as CDKFunction, FunctionUrlAuthType, Handler as CDKHandler, LayerVersion, Runtime as CDKRuntime, Tracing, } from "aws-cdk-lib/aws-lambda";
|
|
22
|
-
import { RetentionDays } from "aws-cdk-lib/aws-logs";
|
|
23
|
-
import { Token, Size as CDKSize, Duration as CDKDuration, IgnoreMode, } from "aws-cdk-lib/core";
|
|
24
|
-
import { Effect, PolicyStatement } from "aws-cdk-lib/aws-iam";
|
|
25
|
-
import { StringParameter } from "aws-cdk-lib/aws-ssm";
|
|
26
|
-
import { Platform } from "aws-cdk-lib/aws-ecr-assets";
|
|
27
|
-
import { useBootstrap } from "../bootstrap.js";
|
|
28
|
-
import { Colors } from "../cli/colors.js";
|
|
29
|
-
import { Asset } from "aws-cdk-lib/aws-s3-assets";
|
|
30
|
-
const __dirname = url.fileURLToPath(new URL(".", import.meta.url));
|
|
31
|
-
const supportedRuntimes = {
|
|
32
|
-
container: CDKRuntime.FROM_IMAGE,
|
|
33
|
-
rust: CDKRuntime.PROVIDED_AL2,
|
|
34
|
-
"nodejs12.x": CDKRuntime.NODEJS_12_X,
|
|
35
|
-
"nodejs14.x": CDKRuntime.NODEJS_14_X,
|
|
36
|
-
"nodejs16.x": CDKRuntime.NODEJS_16_X,
|
|
37
|
-
"nodejs18.x": CDKRuntime.NODEJS_18_X,
|
|
38
|
-
"python3.7": CDKRuntime.PYTHON_3_7,
|
|
39
|
-
"python3.8": CDKRuntime.PYTHON_3_8,
|
|
40
|
-
"python3.9": CDKRuntime.PYTHON_3_9,
|
|
41
|
-
"python3.10": CDKRuntime.PYTHON_3_10,
|
|
42
|
-
"python3.11": CDKRuntime.PYTHON_3_11,
|
|
43
|
-
"dotnetcore3.1": CDKRuntime.DOTNET_CORE_3_1,
|
|
44
|
-
dotnet6: CDKRuntime.DOTNET_6,
|
|
45
|
-
java8: CDKRuntime.JAVA_8,
|
|
46
|
-
java11: CDKRuntime.JAVA_11,
|
|
47
|
-
java17: CDKRuntime.JAVA_17,
|
|
48
|
-
"go1.x": CDKRuntime.PROVIDED_AL2,
|
|
49
|
-
go: CDKRuntime.PROVIDED_AL2,
|
|
50
|
-
};
|
|
51
|
-
/**
|
|
52
|
-
* The `Function` construct is a higher level CDK construct that makes it easy to create a Lambda Function with support for Live Lambda Development.
|
|
53
|
-
*
|
|
54
|
-
* @example
|
|
55
|
-
*
|
|
56
|
-
* ```js
|
|
57
|
-
* import { Function } from "sst/constructs";
|
|
58
|
-
*
|
|
59
|
-
* new Function(stack, "MySnsLambda", {
|
|
60
|
-
* handler: "src/sns/index.main",
|
|
61
|
-
* });
|
|
62
|
-
* ```
|
|
63
|
-
*/
|
|
64
|
-
export class Function extends CDKFunction {
|
|
65
|
-
id;
|
|
66
|
-
_isLiveDevEnabled;
|
|
67
|
-
/** @internal */
|
|
68
|
-
_doNotAllowOthersToBind;
|
|
69
|
-
functionUrl;
|
|
70
|
-
props;
|
|
71
|
-
allBindings = [];
|
|
72
|
-
constructor(scope, id, props) {
|
|
73
|
-
const app = scope.node.root;
|
|
74
|
-
const stack = Stack.of(scope);
|
|
75
|
-
// Merge with app defaultFunctionProps
|
|
76
|
-
// note: reverse order so later prop override earlier ones
|
|
77
|
-
stack.defaultFunctionProps
|
|
78
|
-
.slice()
|
|
79
|
-
.reverse()
|
|
80
|
-
.forEach((per) => {
|
|
81
|
-
props = Function.mergeProps(per, props);
|
|
82
|
-
});
|
|
83
|
-
props.runtime = props.runtime || "nodejs16.x";
|
|
84
|
-
if (props.runtime === "go1.x")
|
|
85
|
-
useWarning().add("go.deprecated");
|
|
86
|
-
// Set defaults
|
|
87
|
-
const functionName = props.functionName &&
|
|
88
|
-
(typeof props.functionName === "string"
|
|
89
|
-
? props.functionName
|
|
90
|
-
: props.functionName({ stack, functionProps: props }));
|
|
91
|
-
const timeout = Function.normalizeTimeout(props.timeout);
|
|
92
|
-
const architecture = (() => {
|
|
93
|
-
if (props.architecture === "arm_64")
|
|
94
|
-
return Architecture.ARM_64;
|
|
95
|
-
if (props.architecture === "x86_64")
|
|
96
|
-
return Architecture.X86_64;
|
|
97
|
-
return Architecture.X86_64;
|
|
98
|
-
})();
|
|
99
|
-
const memorySize = Function.normalizeMemorySize(props.memorySize);
|
|
100
|
-
const diskSize = Function.normalizeDiskSize(props.diskSize);
|
|
101
|
-
const tracing = Tracing[(props.tracing || "active").toUpperCase()];
|
|
102
|
-
const logRetention = props.logRetention &&
|
|
103
|
-
RetentionDays[props.logRetention.toUpperCase()];
|
|
104
|
-
const isLiveDevEnabled = app.mode === "dev" && (props.enableLiveDev === false ? false : true);
|
|
105
|
-
Function.validateHandlerSet(id, props);
|
|
106
|
-
Function.validateVpcSettings(id, props);
|
|
107
|
-
// Handle inactive stacks
|
|
108
|
-
if (!stack.isActive) {
|
|
109
|
-
// Note: need to override runtime as CDK does not support inline code
|
|
110
|
-
// for some runtimes.
|
|
111
|
-
super(scope, id, {
|
|
112
|
-
...props,
|
|
113
|
-
architecture,
|
|
114
|
-
code: Code.fromInline("export function placeholder() {}"),
|
|
115
|
-
handler: "index.placeholder",
|
|
116
|
-
functionName,
|
|
117
|
-
runtime: CDKRuntime.NODEJS_16_X,
|
|
118
|
-
memorySize,
|
|
119
|
-
ephemeralStorageSize: diskSize,
|
|
120
|
-
timeout,
|
|
121
|
-
tracing,
|
|
122
|
-
environment: props.environment,
|
|
123
|
-
layers: Function.buildLayers(scope, id, props),
|
|
124
|
-
logRetention,
|
|
125
|
-
logRetentionRetryOptions: logRetention && { maxRetries: 100 },
|
|
126
|
-
});
|
|
127
|
-
}
|
|
128
|
-
// Handle local development (ie. sst start)
|
|
129
|
-
// - set runtime to nodejs12.x for non-Node runtimes (b/c the stub is in Node)
|
|
130
|
-
// - set retry to 0. When the debugger is disconnected, the Cron construct
|
|
131
|
-
// will still try to periodically invoke the Lambda, and the requests would
|
|
132
|
-
// fail and retry. So when launching `sst start`, a couple of retry requests
|
|
133
|
-
// from recent failed request will be received. And this behavior is confusing.
|
|
134
|
-
else if (isLiveDevEnabled) {
|
|
135
|
-
// If debugIncreaseTimeout is enabled:
|
|
136
|
-
// set timeout to 900s. This will give people more time to debug the function
|
|
137
|
-
// without timing out the request. Note API Gateway requests have a maximum
|
|
138
|
-
// timeout of 29s. In this case, the API will timeout, but the Lambda function
|
|
139
|
-
// will continue to run.
|
|
140
|
-
let debugOverrideProps;
|
|
141
|
-
if (app.debugIncreaseTimeout) {
|
|
142
|
-
debugOverrideProps = {
|
|
143
|
-
timeout: toCdkDuration("900 second"),
|
|
144
|
-
};
|
|
145
|
-
}
|
|
146
|
-
super(scope, id, {
|
|
147
|
-
...props,
|
|
148
|
-
...(props.runtime === "container"
|
|
149
|
-
? {
|
|
150
|
-
code: Code.fromAssetImage(path.resolve(__dirname, "../support/bridge"), {
|
|
151
|
-
...(architecture?.dockerPlatform
|
|
152
|
-
? { platform: Platform.custom(architecture.dockerPlatform) }
|
|
153
|
-
: {}),
|
|
154
|
-
}),
|
|
155
|
-
handler: CDKHandler.FROM_IMAGE,
|
|
156
|
-
runtime: CDKRuntime.FROM_IMAGE,
|
|
157
|
-
layers: undefined,
|
|
158
|
-
}
|
|
159
|
-
: {
|
|
160
|
-
runtime: CDKRuntime.NODEJS_18_X,
|
|
161
|
-
code: Code.fromAsset(path.resolve(__dirname, "../support/bridge")),
|
|
162
|
-
handler: "bridge.handler",
|
|
163
|
-
layers: [],
|
|
164
|
-
}),
|
|
165
|
-
architecture,
|
|
166
|
-
functionName,
|
|
167
|
-
memorySize,
|
|
168
|
-
ephemeralStorageSize: diskSize,
|
|
169
|
-
timeout,
|
|
170
|
-
tracing,
|
|
171
|
-
environment: props.environment,
|
|
172
|
-
logRetention,
|
|
173
|
-
logRetentionRetryOptions: logRetention && { maxRetries: 100 },
|
|
174
|
-
retryAttempts: 0,
|
|
175
|
-
...(debugOverrideProps || {}),
|
|
176
|
-
});
|
|
177
|
-
this.addEnvironment("SST_FUNCTION_ID", this.node.addr);
|
|
178
|
-
useDeferredTasks().add(async () => {
|
|
179
|
-
if (app.isRunningSSTTest())
|
|
180
|
-
return;
|
|
181
|
-
const bootstrap = await useBootstrap();
|
|
182
|
-
const bootstrapBucketArn = `arn:${Stack.of(this).partition}:s3:::${bootstrap.bucket}`;
|
|
183
|
-
this.attachPermissions([
|
|
184
|
-
new PolicyStatement({
|
|
185
|
-
actions: ["iot:*"],
|
|
186
|
-
effect: Effect.ALLOW,
|
|
187
|
-
resources: ["*"],
|
|
188
|
-
}),
|
|
189
|
-
new PolicyStatement({
|
|
190
|
-
actions: ["s3:*"],
|
|
191
|
-
effect: Effect.ALLOW,
|
|
192
|
-
resources: [bootstrapBucketArn, `${bootstrapBucketArn}/*`],
|
|
193
|
-
}),
|
|
194
|
-
]);
|
|
195
|
-
});
|
|
196
|
-
}
|
|
197
|
-
// Handle build
|
|
198
|
-
else {
|
|
199
|
-
super(scope, id, {
|
|
200
|
-
...props,
|
|
201
|
-
...(props.runtime === "container"
|
|
202
|
-
? {
|
|
203
|
-
code: Code.fromAssetImage(props.handler, {
|
|
204
|
-
...(architecture?.dockerPlatform
|
|
205
|
-
? { platform: Platform.custom(architecture.dockerPlatform) }
|
|
206
|
-
: {}),
|
|
207
|
-
...(props.container?.cmd ? { cmd: props.container.cmd } : {}),
|
|
208
|
-
...(props.container?.file
|
|
209
|
-
? { file: props.container.file }
|
|
210
|
-
: {}),
|
|
211
|
-
...(props.container?.buildArgs
|
|
212
|
-
? { buildArgs: props.container.buildArgs }
|
|
213
|
-
: {}),
|
|
214
|
-
exclude: [".sst"],
|
|
215
|
-
ignoreMode: IgnoreMode.GLOB,
|
|
216
|
-
}),
|
|
217
|
-
handler: CDKHandler.FROM_IMAGE,
|
|
218
|
-
runtime: CDKRuntime.FROM_IMAGE,
|
|
219
|
-
layers: undefined,
|
|
220
|
-
}
|
|
221
|
-
: {
|
|
222
|
-
code: Code.fromInline("export function placeholder() {}"),
|
|
223
|
-
handler: "index.placeholder",
|
|
224
|
-
runtime: CDKRuntime.NODEJS_16_X,
|
|
225
|
-
layers: Function.buildLayers(scope, id, props),
|
|
226
|
-
}),
|
|
227
|
-
architecture,
|
|
228
|
-
functionName,
|
|
229
|
-
memorySize,
|
|
230
|
-
ephemeralStorageSize: diskSize,
|
|
231
|
-
timeout,
|
|
232
|
-
tracing,
|
|
233
|
-
environment: props.environment,
|
|
234
|
-
logRetention,
|
|
235
|
-
logRetentionRetryOptions: logRetention && { maxRetries: 100 },
|
|
236
|
-
});
|
|
237
|
-
useDeferredTasks().add(async () => {
|
|
238
|
-
if (props.runtime === "container")
|
|
239
|
-
Colors.line(`➜ Building the container image for the "${this.node.id}" function...`);
|
|
240
|
-
const project = useProject();
|
|
241
|
-
// Build function
|
|
242
|
-
const result = await useRuntimeHandlers().build(this.node.addr, "deploy");
|
|
243
|
-
if (result.type === "error") {
|
|
244
|
-
throw new VisibleError([
|
|
245
|
-
`Failed to build function "${props.handler}"`,
|
|
246
|
-
...result.errors,
|
|
247
|
-
].join("\n"));
|
|
248
|
-
}
|
|
249
|
-
// No need to update code if runtime is container
|
|
250
|
-
if (props.runtime === "container")
|
|
251
|
-
return;
|
|
252
|
-
if (result.sourcemap) {
|
|
253
|
-
const data = await fs.readFile(result.sourcemap);
|
|
254
|
-
await fs.writeFile(result.sourcemap, zlib.gzipSync(data));
|
|
255
|
-
const asset = new Asset(this, this.id + "-Sourcemap", {
|
|
256
|
-
path: result.sourcemap,
|
|
257
|
-
});
|
|
258
|
-
await fs.rm(result.sourcemap);
|
|
259
|
-
useFunctions().sourcemaps.add(stack.stackName, {
|
|
260
|
-
bucket: asset.bucket,
|
|
261
|
-
key: asset.s3ObjectKey,
|
|
262
|
-
func: this,
|
|
263
|
-
});
|
|
264
|
-
}
|
|
265
|
-
// Update code
|
|
266
|
-
const cfnFunction = this.node.defaultChild;
|
|
267
|
-
const code = AssetCode.fromAsset(result.out);
|
|
268
|
-
const codeConfig = code.bind(this);
|
|
269
|
-
cfnFunction.code = {
|
|
270
|
-
s3Bucket: codeConfig.s3Location?.bucketName,
|
|
271
|
-
s3Key: codeConfig.s3Location?.objectKey,
|
|
272
|
-
s3ObjectVersion: codeConfig.s3Location?.objectVersion,
|
|
273
|
-
};
|
|
274
|
-
cfnFunction.handler = result.handler;
|
|
275
|
-
code.bindToResource(cfnFunction);
|
|
276
|
-
// Update runtime
|
|
277
|
-
// @ts-ignore - override "runtime" private property
|
|
278
|
-
this.runtime =
|
|
279
|
-
supportedRuntimes[props.runtime];
|
|
280
|
-
cfnFunction.runtime = this.runtime.toString();
|
|
281
|
-
if (props.runtime?.startsWith("java") &&
|
|
282
|
-
props.java?.experimentalUseProvidedRuntime) {
|
|
283
|
-
cfnFunction.runtime = props.java?.experimentalUseProvidedRuntime;
|
|
284
|
-
}
|
|
285
|
-
});
|
|
286
|
-
}
|
|
287
|
-
this.id = id;
|
|
288
|
-
this.props = props || {};
|
|
289
|
-
if (this.isNodeRuntime()) {
|
|
290
|
-
// Enable reusing connections with Keep-Alive for NodeJs
|
|
291
|
-
// Lambda function
|
|
292
|
-
this.addEnvironment("AWS_NODEJS_CONNECTION_REUSE_ENABLED", "1", {
|
|
293
|
-
removeInEdge: true,
|
|
294
|
-
});
|
|
295
|
-
}
|
|
296
|
-
// Attach permissions
|
|
297
|
-
this.attachPermissions(props.permissions || []);
|
|
298
|
-
// Add config
|
|
299
|
-
this.addEnvironment("SST_APP", app.name, { removeInEdge: true });
|
|
300
|
-
this.addEnvironment("SST_STAGE", app.stage, { removeInEdge: true });
|
|
301
|
-
this.addEnvironment("SST_SSM_PREFIX", useProject().config.ssmPrefix, {
|
|
302
|
-
removeInEdge: true,
|
|
303
|
-
});
|
|
304
|
-
this.bind(props.bind || []);
|
|
305
|
-
this.createUrl();
|
|
306
|
-
this._isLiveDevEnabled = isLiveDevEnabled;
|
|
307
|
-
useFunctions().add(this.node.addr, props);
|
|
308
|
-
}
|
|
309
|
-
/**
|
|
310
|
-
* The AWS generated URL of the Function.
|
|
311
|
-
*/
|
|
312
|
-
get url() {
|
|
313
|
-
return this.functionUrl?.url;
|
|
314
|
-
}
|
|
315
|
-
/**
|
|
316
|
-
* Binds additional resources to function.
|
|
317
|
-
*
|
|
318
|
-
* @example
|
|
319
|
-
* ```js
|
|
320
|
-
* fn.bind([STRIPE_KEY, bucket]);
|
|
321
|
-
* ```
|
|
322
|
-
*/
|
|
323
|
-
bind(constructs) {
|
|
324
|
-
// Get referenced secrets
|
|
325
|
-
const referencedSecrets = [];
|
|
326
|
-
constructs.forEach((c) => referencedSecrets.push(...getReferencedSecrets(c)));
|
|
327
|
-
[...constructs, ...referencedSecrets].forEach((c) => {
|
|
328
|
-
// Bind environment
|
|
329
|
-
const env = bindEnvironment(c);
|
|
330
|
-
Object.entries(env).forEach(([key, value]) => this.addEnvironment(key, value));
|
|
331
|
-
// Bind permissions
|
|
332
|
-
const permissions = bindPermissions(c);
|
|
333
|
-
Object.entries(permissions).forEach(([action, resources]) => this.attachPermissions([
|
|
334
|
-
new PolicyStatement({
|
|
335
|
-
actions: [action],
|
|
336
|
-
effect: Effect.ALLOW,
|
|
337
|
-
resources,
|
|
338
|
-
}),
|
|
339
|
-
]));
|
|
340
|
-
});
|
|
341
|
-
this.allBindings.push(...constructs, ...referencedSecrets);
|
|
342
|
-
}
|
|
343
|
-
/**
|
|
344
|
-
* Attaches additional permissions to function.
|
|
345
|
-
*
|
|
346
|
-
* @example
|
|
347
|
-
* ```js {20}
|
|
348
|
-
* fn.attachPermissions(["s3"]);
|
|
349
|
-
* ```
|
|
350
|
-
*/
|
|
351
|
-
attachPermissions(permissions) {
|
|
352
|
-
// Grant IAM permissions
|
|
353
|
-
if (this.role) {
|
|
354
|
-
attachPermissionsToRole(this.role, permissions);
|
|
355
|
-
}
|
|
356
|
-
// Add config
|
|
357
|
-
if (permissions !== "*") {
|
|
358
|
-
permissions
|
|
359
|
-
.filter((p) => p instanceof Job)
|
|
360
|
-
.forEach((p) => this.bind([p]));
|
|
361
|
-
}
|
|
362
|
-
}
|
|
363
|
-
/** @internal */
|
|
364
|
-
getConstructMetadata() {
|
|
365
|
-
return {
|
|
366
|
-
type: "Function",
|
|
367
|
-
data: {
|
|
368
|
-
arn: this.functionArn,
|
|
369
|
-
runtime: this.props.runtime,
|
|
370
|
-
handler: this.props.handler,
|
|
371
|
-
localId: this.node.addr,
|
|
372
|
-
secrets: this.allBindings
|
|
373
|
-
.filter((c) => c instanceof Secret)
|
|
374
|
-
.map((c) => c.name),
|
|
375
|
-
},
|
|
376
|
-
};
|
|
377
|
-
}
|
|
378
|
-
/** @internal */
|
|
379
|
-
getFunctionBinding() {
|
|
380
|
-
return {
|
|
381
|
-
clientPackage: "function",
|
|
382
|
-
variables: {
|
|
383
|
-
functionName: {
|
|
384
|
-
type: "plain",
|
|
385
|
-
value: this.functionName,
|
|
386
|
-
},
|
|
387
|
-
},
|
|
388
|
-
permissions: {
|
|
389
|
-
"lambda:*": [this.functionArn],
|
|
390
|
-
},
|
|
391
|
-
};
|
|
392
|
-
}
|
|
393
|
-
createUrl() {
|
|
394
|
-
const { url } = this.props;
|
|
395
|
-
if (url === false || url === undefined) {
|
|
396
|
-
return;
|
|
397
|
-
}
|
|
398
|
-
let authType;
|
|
399
|
-
let cors;
|
|
400
|
-
if (url === true) {
|
|
401
|
-
authType = FunctionUrlAuthType.NONE;
|
|
402
|
-
cors = true;
|
|
403
|
-
}
|
|
404
|
-
else {
|
|
405
|
-
authType =
|
|
406
|
-
url.authorizer === "iam"
|
|
407
|
-
? FunctionUrlAuthType.AWS_IAM
|
|
408
|
-
: FunctionUrlAuthType.NONE;
|
|
409
|
-
cors = url.cors === undefined ? true : url.cors;
|
|
410
|
-
}
|
|
411
|
-
this.functionUrl = this.addFunctionUrl({
|
|
412
|
-
authType,
|
|
413
|
-
cors: functionUrlCors.buildCorsConfig(cors),
|
|
414
|
-
});
|
|
415
|
-
}
|
|
416
|
-
isNodeRuntime() {
|
|
417
|
-
const { runtime } = this.props;
|
|
418
|
-
return runtime.startsWith("nodejs");
|
|
419
|
-
}
|
|
420
|
-
static validateHandlerSet(id, props) {
|
|
421
|
-
if (!props.handler) {
|
|
422
|
-
throw new Error(`No handler defined for the "${id}" Lambda function`);
|
|
423
|
-
}
|
|
424
|
-
}
|
|
425
|
-
static validateVpcSettings(id, props) {
|
|
426
|
-
if (props.securityGroups && !props.vpc) {
|
|
427
|
-
throw new Error(`Cannot configure "securityGroups" without "vpc" for the "${id}" Lambda function.`);
|
|
428
|
-
}
|
|
429
|
-
}
|
|
430
|
-
static buildLayers(scope, id, props) {
|
|
431
|
-
return (props.layers || []).map((layer) => {
|
|
432
|
-
if (typeof layer === "string") {
|
|
433
|
-
return LayerVersion.fromLayerVersionArn(scope, `${id}${layer}`, layer);
|
|
434
|
-
}
|
|
435
|
-
return Function.handleImportedLayer(scope, layer);
|
|
436
|
-
});
|
|
437
|
-
}
|
|
438
|
-
static normalizeMemorySize(memorySize) {
|
|
439
|
-
if (typeof memorySize === "string") {
|
|
440
|
-
return toCdkSize(memorySize).toMebibytes();
|
|
441
|
-
}
|
|
442
|
-
return memorySize || 1024;
|
|
443
|
-
}
|
|
444
|
-
static normalizeDiskSize(diskSize) {
|
|
445
|
-
if (typeof diskSize === "string") {
|
|
446
|
-
return toCdkSize(diskSize);
|
|
447
|
-
}
|
|
448
|
-
return CDKSize.mebibytes(diskSize || 512);
|
|
449
|
-
}
|
|
450
|
-
static normalizeTimeout(timeout) {
|
|
451
|
-
if (typeof timeout === "string") {
|
|
452
|
-
return toCdkDuration(timeout);
|
|
453
|
-
}
|
|
454
|
-
return CDKDuration.seconds(timeout || 10);
|
|
455
|
-
}
|
|
456
|
-
static handleImportedLayer(scope, layer) {
|
|
457
|
-
const layerStack = Stack.of(layer);
|
|
458
|
-
const currentStack = Stack.of(scope);
|
|
459
|
-
// Use layer directly if:
|
|
460
|
-
// - layer is created in the current stack; OR
|
|
461
|
-
// - layer is imported (ie. layerArn is a string)
|
|
462
|
-
if (layerStack === currentStack ||
|
|
463
|
-
!Token.isUnresolved(layer.layerVersionArn)) {
|
|
464
|
-
return layer;
|
|
465
|
-
}
|
|
466
|
-
// layer is created from another stack
|
|
467
|
-
else {
|
|
468
|
-
// set stack dependency b/c layerStack need to create the SSM first
|
|
469
|
-
currentStack.addDependency(layerStack);
|
|
470
|
-
// store layer ARN in SSM in layer's stack
|
|
471
|
-
const parameterId = `${layer.node.id}Arn-${layer.node.addr}`;
|
|
472
|
-
const parameterName = `/layers/${layerStack.node.id}/${parameterId}`;
|
|
473
|
-
const existingSsmParam = layerStack.node.tryFindChild(parameterId);
|
|
474
|
-
if (!existingSsmParam) {
|
|
475
|
-
new StringParameter(layerStack, parameterId, {
|
|
476
|
-
parameterName,
|
|
477
|
-
stringValue: layer.layerVersionArn,
|
|
478
|
-
});
|
|
479
|
-
}
|
|
480
|
-
// import layer from SSM value
|
|
481
|
-
const layerId = `I${layer.node.id}-${layer.node.addr}`;
|
|
482
|
-
const existingLayer = scope.node.tryFindChild(layerId);
|
|
483
|
-
if (existingLayer) {
|
|
484
|
-
return existingLayer;
|
|
485
|
-
}
|
|
486
|
-
else {
|
|
487
|
-
return LayerVersion.fromLayerVersionArn(scope, layerId, StringParameter.valueForStringParameter(scope, parameterName));
|
|
488
|
-
}
|
|
489
|
-
}
|
|
490
|
-
}
|
|
491
|
-
static isInlineDefinition(definition) {
|
|
492
|
-
return typeof definition === "string" || definition instanceof Function;
|
|
493
|
-
}
|
|
494
|
-
static fromDefinition(scope, id, definition, inheritedProps, inheritErrorMessage) {
|
|
495
|
-
if (typeof definition === "string") {
|
|
496
|
-
const fn = new Function(scope, id, {
|
|
497
|
-
...(inheritedProps || {}),
|
|
498
|
-
handler: definition,
|
|
499
|
-
});
|
|
500
|
-
fn._doNotAllowOthersToBind = true;
|
|
501
|
-
return fn;
|
|
502
|
-
}
|
|
503
|
-
else if (definition instanceof Function) {
|
|
504
|
-
if (inheritedProps && Object.keys(inheritedProps).length > 0) {
|
|
505
|
-
throw new Error(inheritErrorMessage ||
|
|
506
|
-
`Cannot inherit default props when a Function is provided`);
|
|
507
|
-
}
|
|
508
|
-
return definition;
|
|
509
|
-
}
|
|
510
|
-
else if (definition instanceof CDKFunction) {
|
|
511
|
-
throw new Error(`Please use sst.Function instead of lambda.Function for the "${id}" Function.`);
|
|
512
|
-
}
|
|
513
|
-
else if (definition.handler !== undefined) {
|
|
514
|
-
const fn = new Function(scope, id, Function.mergeProps(inheritedProps, definition));
|
|
515
|
-
fn._doNotAllowOthersToBind = true;
|
|
516
|
-
return fn;
|
|
517
|
-
}
|
|
518
|
-
throw new Error(`Invalid function definition for the "${id}" Function`);
|
|
519
|
-
}
|
|
520
|
-
static mergeProps(baseProps, props) {
|
|
521
|
-
// Merge environment
|
|
522
|
-
const environment = {
|
|
523
|
-
...(baseProps?.environment || {}),
|
|
524
|
-
...(props?.environment || {}),
|
|
525
|
-
};
|
|
526
|
-
const environmentProp = Object.keys(environment).length === 0 ? {} : { environment };
|
|
527
|
-
// Merge layers
|
|
528
|
-
const layers = [...(baseProps?.layers || []), ...(props?.layers || [])];
|
|
529
|
-
const layersProp = layers.length === 0 ? {} : { layers };
|
|
530
|
-
// Merge bind
|
|
531
|
-
const bind = [...(baseProps?.bind || []), ...(props?.bind || [])];
|
|
532
|
-
const bindProp = bind.length === 0 ? {} : { bind };
|
|
533
|
-
// Merge permissions
|
|
534
|
-
let permissionsProp;
|
|
535
|
-
if (baseProps?.permissions === "*") {
|
|
536
|
-
permissionsProp = { permissions: baseProps.permissions };
|
|
537
|
-
}
|
|
538
|
-
else if (props?.permissions === "*") {
|
|
539
|
-
permissionsProp = { permissions: props.permissions };
|
|
540
|
-
}
|
|
541
|
-
else {
|
|
542
|
-
const permissions = (baseProps?.permissions || []).concat(props?.permissions || []);
|
|
543
|
-
permissionsProp = permissions.length === 0 ? {} : { permissions };
|
|
544
|
-
}
|
|
545
|
-
return {
|
|
546
|
-
...(baseProps || {}),
|
|
547
|
-
...(props || {}),
|
|
548
|
-
...bindProp,
|
|
549
|
-
...layersProp,
|
|
550
|
-
...environmentProp,
|
|
551
|
-
...permissionsProp,
|
|
552
|
-
};
|
|
553
|
-
}
|
|
554
|
-
}
|
|
555
|
-
export const useFunctions = createAppContext(() => {
|
|
556
|
-
const functions = {};
|
|
557
|
-
const sourcemaps = {};
|
|
558
|
-
return {
|
|
559
|
-
sourcemaps: {
|
|
560
|
-
add(stack, source) {
|
|
561
|
-
let arr = sourcemaps[stack];
|
|
562
|
-
if (!arr)
|
|
563
|
-
sourcemaps[stack] = arr = [];
|
|
564
|
-
arr.push(source);
|
|
565
|
-
},
|
|
566
|
-
forStack(stack) {
|
|
567
|
-
return sourcemaps[stack] || [];
|
|
568
|
-
},
|
|
569
|
-
},
|
|
570
|
-
fromID(id) {
|
|
571
|
-
const result = functions[id];
|
|
572
|
-
if (!result)
|
|
573
|
-
return;
|
|
574
|
-
return result;
|
|
575
|
-
},
|
|
576
|
-
add(name, props) {
|
|
577
|
-
functions[name] = props;
|
|
578
|
-
},
|
|
579
|
-
get all() {
|
|
580
|
-
return functions;
|
|
581
|
-
},
|
|
582
|
-
};
|
|
583
|
-
});
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import { App } from "./App.js";
|
|
2
|
-
import { Stack, StackProps } from "./Stack.js";
|
|
3
|
-
export declare function stack(app: App, fn: FunctionalStack<any>, props?: StackProps & {
|
|
4
|
-
id?: string;
|
|
5
|
-
}): any;
|
|
6
|
-
export declare function use<T>(stack: FunctionalStack<T>): T;
|
|
7
|
-
export declare function dependsOn(stack: FunctionalStack<any>): void;
|
|
8
|
-
export declare function getStack(stack: FunctionalStack<any>): Stack;
|
|
9
|
-
export type StackContext = {
|
|
10
|
-
app: App;
|
|
11
|
-
stack: Stack;
|
|
12
|
-
};
|
|
13
|
-
export type FunctionalStack<T> = (this: Stack, ctx: StackContext) => T | Promise<T>;
|
|
@@ -1,62 +0,0 @@
|
|
|
1
|
-
import { Stack } from "./Stack.js";
|
|
2
|
-
export function stack(app, fn, props) {
|
|
3
|
-
currentApp = app;
|
|
4
|
-
currentStack = fn;
|
|
5
|
-
const id = props?.id || fn.name;
|
|
6
|
-
const exists = getExports(app).has(fn);
|
|
7
|
-
if (exists)
|
|
8
|
-
throw new Error(`StackDuplicates: Attempting to initialize stack ${id} several times`);
|
|
9
|
-
class EmptyStack extends Stack {
|
|
10
|
-
constructor(scope, id, props) {
|
|
11
|
-
super(scope, id, props);
|
|
12
|
-
}
|
|
13
|
-
}
|
|
14
|
-
const stack = new EmptyStack(app, id, props);
|
|
15
|
-
getStacks(app).set(fn, stack);
|
|
16
|
-
const ctx = {
|
|
17
|
-
app,
|
|
18
|
-
stack,
|
|
19
|
-
};
|
|
20
|
-
const returns = fn.bind(stack)(ctx);
|
|
21
|
-
if (returns && "then" in returns)
|
|
22
|
-
return returns.then((data) => {
|
|
23
|
-
getExports(app).set(fn, data);
|
|
24
|
-
});
|
|
25
|
-
getExports(app).set(fn, returns);
|
|
26
|
-
return app;
|
|
27
|
-
}
|
|
28
|
-
let currentApp;
|
|
29
|
-
let currentStack;
|
|
30
|
-
const exportsCache = new Map();
|
|
31
|
-
const stackCache = new Map();
|
|
32
|
-
function getExports(app) {
|
|
33
|
-
if (!exportsCache.has(app))
|
|
34
|
-
exportsCache.set(app, new Map());
|
|
35
|
-
return exportsCache.get(app);
|
|
36
|
-
}
|
|
37
|
-
function getStacks(app) {
|
|
38
|
-
if (!stackCache.has(app))
|
|
39
|
-
stackCache.set(app, new Map());
|
|
40
|
-
return stackCache.get(app);
|
|
41
|
-
}
|
|
42
|
-
export function use(stack) {
|
|
43
|
-
if (!currentApp)
|
|
44
|
-
throw new Error("No app is set");
|
|
45
|
-
const exports = getExports(currentApp);
|
|
46
|
-
if (!exports.has(stack))
|
|
47
|
-
throw new Error(`StackWrongOrder: Initialize "${stack.name}" stack before "${currentStack?.name}" stack`);
|
|
48
|
-
return exports.get(stack);
|
|
49
|
-
}
|
|
50
|
-
export function dependsOn(stack) {
|
|
51
|
-
const current = getStack(currentStack);
|
|
52
|
-
const target = getStack(stack);
|
|
53
|
-
current.addDependency(target);
|
|
54
|
-
}
|
|
55
|
-
export function getStack(stack) {
|
|
56
|
-
if (!currentApp)
|
|
57
|
-
throw new Error("No app is set");
|
|
58
|
-
const stacks = getStacks(currentApp);
|
|
59
|
-
if (!stacks.has(stack))
|
|
60
|
-
throw new Error(`StackWrongOrder: Initialize "${stack.name}" stack before "${currentStack?.name}" stack`);
|
|
61
|
-
return stacks.get(stack);
|
|
62
|
-
}
|