sst 3.0.0 → 3.0.1-1
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 +7 -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/RDS.js
DELETED
|
@@ -1,363 +0,0 @@
|
|
|
1
|
-
import path from "path";
|
|
2
|
-
import glob from "glob";
|
|
3
|
-
import fs from "fs";
|
|
4
|
-
import url from "url";
|
|
5
|
-
import * as crypto from "crypto";
|
|
6
|
-
import { Construct } from "constructs";
|
|
7
|
-
import { Duration as CDKDuration, CustomResource } from "aws-cdk-lib/core";
|
|
8
|
-
import { SubnetType, Vpc } from "aws-cdk-lib/aws-ec2";
|
|
9
|
-
import { AuroraCapacityUnit, AuroraEngineVersion, AuroraMysqlEngineVersion, AuroraPostgresEngineVersion, DatabaseClusterEngine, ServerlessCluster, } from "aws-cdk-lib/aws-rds";
|
|
10
|
-
import { Code, Function, Runtime } from "aws-cdk-lib/aws-lambda";
|
|
11
|
-
import { PolicyStatement } from "aws-cdk-lib/aws-iam";
|
|
12
|
-
import { Stack } from "./Stack.js";
|
|
13
|
-
import { getFunctionRef, isCDKConstruct } from "./Construct.js";
|
|
14
|
-
import { Function as Fn } from "./Function.js";
|
|
15
|
-
const __dirname = url.fileURLToPath(new URL(".", import.meta.url));
|
|
16
|
-
/////////////////////
|
|
17
|
-
// Construct
|
|
18
|
-
/////////////////////
|
|
19
|
-
/**
|
|
20
|
-
* The `RDS` construct is a higher level CDK construct that makes it easy to create an [RDS Serverless Cluster](https://aws.amazon.com/rds/).
|
|
21
|
-
*
|
|
22
|
-
* @example
|
|
23
|
-
*
|
|
24
|
-
* ```js
|
|
25
|
-
* import { RDS } from "sst/constructs";
|
|
26
|
-
*
|
|
27
|
-
* new RDS(stack, "Database", {
|
|
28
|
-
* engine: "postgresql11.13",
|
|
29
|
-
* defaultDatabaseName: "my_database",
|
|
30
|
-
* });
|
|
31
|
-
* ```
|
|
32
|
-
*/
|
|
33
|
-
export class RDS extends Construct {
|
|
34
|
-
id;
|
|
35
|
-
cdk;
|
|
36
|
-
/**
|
|
37
|
-
* The ARN of the internally created CDK ServerlessCluster instance.
|
|
38
|
-
*/
|
|
39
|
-
migratorFunction;
|
|
40
|
-
props;
|
|
41
|
-
secret;
|
|
42
|
-
constructor(scope, id, props) {
|
|
43
|
-
super(scope, props.cdk?.id || id);
|
|
44
|
-
this.validateRequiredProps(props);
|
|
45
|
-
this.id = id;
|
|
46
|
-
this.cdk = {};
|
|
47
|
-
this.props = props || {};
|
|
48
|
-
let { migrations, cdk } = this.props;
|
|
49
|
-
// Create the cluster
|
|
50
|
-
if (cdk && isCDKConstruct(cdk.cluster)) {
|
|
51
|
-
this.validateCDKPropWhenIsConstruct();
|
|
52
|
-
this.cdk.cluster = this.importCluster();
|
|
53
|
-
this.secret = cdk.secret;
|
|
54
|
-
}
|
|
55
|
-
else {
|
|
56
|
-
this.validateCDKPropWhenIsClusterProps();
|
|
57
|
-
this.cdk.cluster = this.createCluster();
|
|
58
|
-
this.secret = this.cdk.cluster.secret;
|
|
59
|
-
}
|
|
60
|
-
// Create the migrator function
|
|
61
|
-
if (migrations) {
|
|
62
|
-
this.validateMigrationsFileExists(migrations);
|
|
63
|
-
this.createMigrationsFunction(migrations);
|
|
64
|
-
this.createMigrationCustomResource(migrations);
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
/**
|
|
68
|
-
* The ARN of the internally created RDS Serverless Cluster.
|
|
69
|
-
*/
|
|
70
|
-
get clusterArn() {
|
|
71
|
-
return this.cdk.cluster.clusterArn;
|
|
72
|
-
}
|
|
73
|
-
/**
|
|
74
|
-
* The ARN of the internally created RDS Serverless Cluster.
|
|
75
|
-
*/
|
|
76
|
-
get clusterIdentifier() {
|
|
77
|
-
return this.cdk.cluster.clusterIdentifier;
|
|
78
|
-
}
|
|
79
|
-
/**
|
|
80
|
-
* The ARN of the internally created RDS Serverless Cluster.
|
|
81
|
-
*/
|
|
82
|
-
get clusterEndpoint() {
|
|
83
|
-
return this.cdk.cluster.clusterEndpoint;
|
|
84
|
-
}
|
|
85
|
-
/**
|
|
86
|
-
* The default database name of the RDS Serverless Cluster.
|
|
87
|
-
*/
|
|
88
|
-
get defaultDatabaseName() {
|
|
89
|
-
return this.props.defaultDatabaseName;
|
|
90
|
-
}
|
|
91
|
-
/**
|
|
92
|
-
* The ARN of the internally created Secrets Manager Secret.
|
|
93
|
-
*/
|
|
94
|
-
get secretArn() {
|
|
95
|
-
return this.secret.secretArn;
|
|
96
|
-
}
|
|
97
|
-
getConstructMetadata() {
|
|
98
|
-
const { engine, defaultDatabaseName, types } = this.props;
|
|
99
|
-
return {
|
|
100
|
-
type: "RDS",
|
|
101
|
-
data: {
|
|
102
|
-
engine,
|
|
103
|
-
secretArn: this.secretArn,
|
|
104
|
-
types: typeof types === "string"
|
|
105
|
-
? {
|
|
106
|
-
path: types,
|
|
107
|
-
}
|
|
108
|
-
: types,
|
|
109
|
-
clusterArn: this.clusterArn,
|
|
110
|
-
clusterIdentifier: this.clusterIdentifier,
|
|
111
|
-
defaultDatabaseName,
|
|
112
|
-
migrator: this.migratorFunction && getFunctionRef(this.migratorFunction),
|
|
113
|
-
},
|
|
114
|
-
};
|
|
115
|
-
}
|
|
116
|
-
/** @internal */
|
|
117
|
-
getFunctionBinding() {
|
|
118
|
-
return {
|
|
119
|
-
clientPackage: "rds",
|
|
120
|
-
variables: {
|
|
121
|
-
clusterArn: {
|
|
122
|
-
type: "plain",
|
|
123
|
-
value: this.clusterArn,
|
|
124
|
-
},
|
|
125
|
-
secretArn: {
|
|
126
|
-
type: "plain",
|
|
127
|
-
value: this.secretArn,
|
|
128
|
-
},
|
|
129
|
-
defaultDatabaseName: {
|
|
130
|
-
type: "plain",
|
|
131
|
-
value: this.defaultDatabaseName,
|
|
132
|
-
},
|
|
133
|
-
},
|
|
134
|
-
permissions: {
|
|
135
|
-
"rds-data:*": [this.clusterArn],
|
|
136
|
-
"secretsmanager:GetSecretValue": [
|
|
137
|
-
this.secret.secretFullArn || `${this.secret.secretArn}*`,
|
|
138
|
-
],
|
|
139
|
-
"secretsmanager:DescribeSecret": [
|
|
140
|
-
this.secret.secretFullArn || `${this.secret.secretArn}*`,
|
|
141
|
-
],
|
|
142
|
-
// grant permission to the "encryptionkey" if set
|
|
143
|
-
...(this.secret.encryptionKey
|
|
144
|
-
? {
|
|
145
|
-
"kms:Decrypt": [this.secret.encryptionKey.keyArn],
|
|
146
|
-
}
|
|
147
|
-
: {}),
|
|
148
|
-
},
|
|
149
|
-
};
|
|
150
|
-
}
|
|
151
|
-
validateRequiredProps(props) {
|
|
152
|
-
if (!props.engine) {
|
|
153
|
-
throw new Error(`Missing "engine" in the "${this.node.id}" RDS`);
|
|
154
|
-
}
|
|
155
|
-
if (!props.defaultDatabaseName) {
|
|
156
|
-
throw new Error(`Missing "defaultDatabaseName" in the "${this.node.id}" RDS`);
|
|
157
|
-
}
|
|
158
|
-
}
|
|
159
|
-
validateCDKPropWhenIsConstruct() {
|
|
160
|
-
const { cdk } = this.props;
|
|
161
|
-
if (!cdk?.secret) {
|
|
162
|
-
throw new Error(`Missing "cdk.secret" in the "${this.node.id}" RDS. You must provide a secret to import an existing RDS Serverless Cluster.`);
|
|
163
|
-
}
|
|
164
|
-
}
|
|
165
|
-
validateCDKPropWhenIsClusterProps() {
|
|
166
|
-
const { cdk } = this.props;
|
|
167
|
-
const props = (cdk?.cluster || {});
|
|
168
|
-
// Validate "engine" is passed in from the top level
|
|
169
|
-
if (props.engine) {
|
|
170
|
-
throw new Error(`Use "engine" instead of "cdk.cluster.engine" to configure the RDS database engine.`);
|
|
171
|
-
}
|
|
172
|
-
// Validate "defaultDatabaseName" is passed in from the top level
|
|
173
|
-
if (props.defaultDatabaseName) {
|
|
174
|
-
throw new Error(`Use "defaultDatabaseName" instead of "cdk.cluster.defaultDatabaseName" to configure the RDS database engine.`);
|
|
175
|
-
}
|
|
176
|
-
// Validate "scaling" is passed in from the top level
|
|
177
|
-
if (props.scaling) {
|
|
178
|
-
throw new Error(`Use "scaling" instead of "cdk.cluster.scaling" to configure the RDS database auto-scaling.`);
|
|
179
|
-
}
|
|
180
|
-
// Validate "enableDataApi" is not passed in
|
|
181
|
-
if (props.enableDataApi === false) {
|
|
182
|
-
throw new Error(`Do not configure the "cdk.cluster.enableDataApi". Data API is always enabled for this construct.`);
|
|
183
|
-
}
|
|
184
|
-
// Validate Secrets Manager is used for "credentials" not password
|
|
185
|
-
if (props.credentials?.password) {
|
|
186
|
-
throw new Error(`Only credentials managed by SecretManager are supported for the "cdk.cluster.credentials".`);
|
|
187
|
-
}
|
|
188
|
-
return props;
|
|
189
|
-
}
|
|
190
|
-
validateMigrationsFileExists(migrations) {
|
|
191
|
-
if (!fs.existsSync(migrations))
|
|
192
|
-
throw new Error(`Cannot find the migrations in "${path.resolve(migrations)}".`);
|
|
193
|
-
}
|
|
194
|
-
getEngine(engine) {
|
|
195
|
-
if (engine === "mysql5.6") {
|
|
196
|
-
return DatabaseClusterEngine.aurora({
|
|
197
|
-
version: AuroraEngineVersion.VER_10A,
|
|
198
|
-
});
|
|
199
|
-
}
|
|
200
|
-
else if (engine === "mysql5.7") {
|
|
201
|
-
return DatabaseClusterEngine.auroraMysql({
|
|
202
|
-
version: AuroraMysqlEngineVersion.VER_2_07_1,
|
|
203
|
-
});
|
|
204
|
-
}
|
|
205
|
-
else if (engine === "postgresql11.13") {
|
|
206
|
-
return DatabaseClusterEngine.auroraPostgres({
|
|
207
|
-
version: AuroraPostgresEngineVersion.VER_11_13,
|
|
208
|
-
});
|
|
209
|
-
}
|
|
210
|
-
else if (engine === "postgresql11.16") {
|
|
211
|
-
return DatabaseClusterEngine.auroraPostgres({
|
|
212
|
-
version: AuroraPostgresEngineVersion.VER_11_16,
|
|
213
|
-
});
|
|
214
|
-
}
|
|
215
|
-
else if (engine === "postgresql13.9") {
|
|
216
|
-
return DatabaseClusterEngine.auroraPostgres({
|
|
217
|
-
version: AuroraPostgresEngineVersion.VER_13_9,
|
|
218
|
-
});
|
|
219
|
-
}
|
|
220
|
-
throw new Error(`The specified "engine" is not supported for sst.RDS. Only mysql5.6, mysql5.7, postgresql11.13, postgresql11.16, and postgres13.9 engines are currently supported.`);
|
|
221
|
-
}
|
|
222
|
-
getScaling(scaling) {
|
|
223
|
-
return {
|
|
224
|
-
autoPause: scaling?.autoPause === false
|
|
225
|
-
? CDKDuration.minutes(0)
|
|
226
|
-
: scaling?.autoPause === true || scaling?.autoPause === undefined
|
|
227
|
-
? CDKDuration.minutes(5)
|
|
228
|
-
: CDKDuration.minutes(scaling?.autoPause),
|
|
229
|
-
minCapacity: AuroraCapacityUnit[scaling?.minCapacity || "ACU_2"],
|
|
230
|
-
maxCapacity: AuroraCapacityUnit[scaling?.maxCapacity || "ACU_16"],
|
|
231
|
-
};
|
|
232
|
-
}
|
|
233
|
-
getVpc(props) {
|
|
234
|
-
if (props.vpc) {
|
|
235
|
-
return props.vpc;
|
|
236
|
-
}
|
|
237
|
-
return new Vpc(this, "vpc", {
|
|
238
|
-
natGateways: 0,
|
|
239
|
-
});
|
|
240
|
-
}
|
|
241
|
-
getVpcSubnets(props) {
|
|
242
|
-
if (props.vpc) {
|
|
243
|
-
return props.vpcSubnets;
|
|
244
|
-
}
|
|
245
|
-
return {
|
|
246
|
-
subnetType: SubnetType.PRIVATE_ISOLATED,
|
|
247
|
-
};
|
|
248
|
-
}
|
|
249
|
-
createCluster() {
|
|
250
|
-
const { engine, defaultDatabaseName, scaling, cdk } = this.props;
|
|
251
|
-
const app = this.node.root;
|
|
252
|
-
const clusterProps = (cdk?.cluster || {});
|
|
253
|
-
return new ServerlessCluster(this, "Cluster", {
|
|
254
|
-
clusterIdentifier: app.logicalPrefixedName(this.node.id),
|
|
255
|
-
...clusterProps,
|
|
256
|
-
defaultDatabaseName: defaultDatabaseName,
|
|
257
|
-
enableDataApi: true,
|
|
258
|
-
engine: this.getEngine(engine),
|
|
259
|
-
scaling: this.getScaling(scaling),
|
|
260
|
-
vpc: this.getVpc(clusterProps),
|
|
261
|
-
vpcSubnets: this.getVpcSubnets(clusterProps),
|
|
262
|
-
});
|
|
263
|
-
}
|
|
264
|
-
importCluster() {
|
|
265
|
-
const { cdk } = this.props;
|
|
266
|
-
return cdk.cluster;
|
|
267
|
-
}
|
|
268
|
-
createMigrationsFunction(migrations) {
|
|
269
|
-
const { engine, defaultDatabaseName } = this.props;
|
|
270
|
-
const app = this.node.root;
|
|
271
|
-
// path to migration scripts inside the Lambda function
|
|
272
|
-
const migrationsDestination = "sst_rds_migration_scripts";
|
|
273
|
-
// fullpath of the migrator Lambda function
|
|
274
|
-
// Note:
|
|
275
|
-
// - when invoked from `sst build`, __dirname is `resources/dist`
|
|
276
|
-
// - when running resources tests, __dirname is `resources/src`
|
|
277
|
-
// For now we will do `__dirname/../dist` to make both cases work.
|
|
278
|
-
const fn = new Fn(this, "MigrationFunction", {
|
|
279
|
-
handler: path.resolve(path.join(__dirname, "../support/rds-migrator/index.handler")),
|
|
280
|
-
runtime: "nodejs16.x",
|
|
281
|
-
timeout: 900,
|
|
282
|
-
memorySize: 1024,
|
|
283
|
-
environment: {
|
|
284
|
-
RDS_ARN: this.cdk.cluster.clusterArn,
|
|
285
|
-
RDS_SECRET: this.cdk.cluster.secret.secretArn,
|
|
286
|
-
RDS_DATABASE: defaultDatabaseName,
|
|
287
|
-
RDS_ENGINE_MODE: engine.includes("postgres") ? "postgres" : "mysql",
|
|
288
|
-
// for live development, perserve the migrations path so the migrator
|
|
289
|
-
// can locate the migration files
|
|
290
|
-
RDS_MIGRATIONS_PATH: app.mode === "dev" ? migrations : migrationsDestination,
|
|
291
|
-
},
|
|
292
|
-
// Note that we need to generate a relative path of the migrations off the
|
|
293
|
-
// srcPath because sst.Function internally builds the copy "from" path by
|
|
294
|
-
// joining the srcPath and the from path.
|
|
295
|
-
copyFiles: [
|
|
296
|
-
{
|
|
297
|
-
from: migrations,
|
|
298
|
-
to: migrationsDestination,
|
|
299
|
-
},
|
|
300
|
-
],
|
|
301
|
-
nodejs: {
|
|
302
|
-
install: ["kysely", "kysely-data-api"],
|
|
303
|
-
format: "esm",
|
|
304
|
-
},
|
|
305
|
-
});
|
|
306
|
-
fn._doNotAllowOthersToBind = true;
|
|
307
|
-
fn.attachPermissions([this.cdk.cluster]);
|
|
308
|
-
this.migratorFunction = fn;
|
|
309
|
-
}
|
|
310
|
-
createMigrationCustomResource(migrations) {
|
|
311
|
-
const app = this.node.root;
|
|
312
|
-
// Create custom resource handler
|
|
313
|
-
const handler = new Function(this, "MigrationHandler", {
|
|
314
|
-
code: Code.fromAsset(path.join(__dirname, "../support/script-function")),
|
|
315
|
-
runtime: Runtime.NODEJS_16_X,
|
|
316
|
-
handler: "index.handler",
|
|
317
|
-
timeout: CDKDuration.minutes(15),
|
|
318
|
-
memorySize: 1024,
|
|
319
|
-
initialPolicy: [
|
|
320
|
-
new PolicyStatement({
|
|
321
|
-
actions: ["cloudformation:DescribeStacks"],
|
|
322
|
-
resources: [Stack.of(this).stackId],
|
|
323
|
-
}),
|
|
324
|
-
],
|
|
325
|
-
});
|
|
326
|
-
this.migratorFunction?.grantInvoke(handler);
|
|
327
|
-
// Note: "MigrationsHash" is generated to ensure the Custom Resource function
|
|
328
|
-
// is only run when migration files change.
|
|
329
|
-
//
|
|
330
|
-
// Do not use the hash in Live mode, b/c we want the custom resource
|
|
331
|
-
// to remain the same in CloudFormation template when rebuilding
|
|
332
|
-
// infrastructure. Otherwise, there will always be a change when
|
|
333
|
-
// rebuilding infrastructure b/c the "BuildAt" property changes on
|
|
334
|
-
// each build.
|
|
335
|
-
const hash = app.mode === "dev" ? 0 : this.generateMigrationsHash(migrations);
|
|
336
|
-
new CustomResource(this, "MigrationResource", {
|
|
337
|
-
serviceToken: handler.functionArn,
|
|
338
|
-
resourceType: "Custom::SSTScript",
|
|
339
|
-
properties: {
|
|
340
|
-
UserCreateFunction: app.mode === "dev" ? undefined : this.migratorFunction?.functionName,
|
|
341
|
-
UserUpdateFunction: app.mode === "dev" ? undefined : this.migratorFunction?.functionName,
|
|
342
|
-
UserParams: JSON.stringify({}),
|
|
343
|
-
MigrationsHash: hash,
|
|
344
|
-
},
|
|
345
|
-
});
|
|
346
|
-
}
|
|
347
|
-
generateMigrationsHash(migrations) {
|
|
348
|
-
// Get all files inside the migrations folder
|
|
349
|
-
const files = glob.sync("**", {
|
|
350
|
-
dot: true,
|
|
351
|
-
nodir: true,
|
|
352
|
-
follow: true,
|
|
353
|
-
cwd: migrations,
|
|
354
|
-
});
|
|
355
|
-
// Calculate hash of all files content
|
|
356
|
-
return crypto
|
|
357
|
-
.createHash("md5")
|
|
358
|
-
.update(files
|
|
359
|
-
.map((file) => fs.readFileSync(path.join(migrations, file)))
|
|
360
|
-
.join(""))
|
|
361
|
-
.digest("hex");
|
|
362
|
-
}
|
|
363
|
-
}
|
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
import { SsrSite } from "./SsrSite.js";
|
|
2
|
-
import { SsrFunction } from "./SsrFunction.js";
|
|
3
|
-
import { EdgeFunction } from "./EdgeFunction.js";
|
|
4
|
-
/**
|
|
5
|
-
* The `RemixSite` construct is a higher level CDK construct that makes it easy to create a Remix app.
|
|
6
|
-
*
|
|
7
|
-
* @example
|
|
8
|
-
*
|
|
9
|
-
* Deploys a Remix app in the `my-remix-app` directory.
|
|
10
|
-
*
|
|
11
|
-
* ```js
|
|
12
|
-
* new RemixSite(stack, "web", {
|
|
13
|
-
* path: "my-remix-app/",
|
|
14
|
-
* });
|
|
15
|
-
* ```
|
|
16
|
-
*/
|
|
17
|
-
export declare class RemixSite extends SsrSite {
|
|
18
|
-
private serverModuleFormat;
|
|
19
|
-
protected initBuildConfig(): {
|
|
20
|
-
typesPath: string;
|
|
21
|
-
serverBuildOutputFile: string;
|
|
22
|
-
clientBuildOutputDir: string;
|
|
23
|
-
clientBuildVersionedSubDir: string;
|
|
24
|
-
clientCFFunctionInjection: string;
|
|
25
|
-
};
|
|
26
|
-
private createServerLambdaBundle;
|
|
27
|
-
protected createFunctionForRegional(): SsrFunction;
|
|
28
|
-
protected createFunctionForEdge(): EdgeFunction;
|
|
29
|
-
getConstructMetadata(): {
|
|
30
|
-
data: {
|
|
31
|
-
mode: "placeholder" | "deployed";
|
|
32
|
-
path: string;
|
|
33
|
-
runtime: "nodejs14.x" | "nodejs16.x" | "nodejs18.x";
|
|
34
|
-
customDomainUrl: string | undefined;
|
|
35
|
-
url: string | undefined;
|
|
36
|
-
edge: boolean | undefined;
|
|
37
|
-
server: string;
|
|
38
|
-
secrets: string[];
|
|
39
|
-
};
|
|
40
|
-
type: "RemixSite";
|
|
41
|
-
};
|
|
42
|
-
}
|
package/constructs/RemixSite.js
DELETED
|
@@ -1,158 +0,0 @@
|
|
|
1
|
-
import fs from "fs";
|
|
2
|
-
import url from "url";
|
|
3
|
-
import path from "path";
|
|
4
|
-
import { createRequire } from "module";
|
|
5
|
-
const require = createRequire(import.meta.url);
|
|
6
|
-
import { SsrSite } from "./SsrSite.js";
|
|
7
|
-
import { SsrFunction } from "./SsrFunction.js";
|
|
8
|
-
import { EdgeFunction } from "./EdgeFunction.js";
|
|
9
|
-
import { VisibleError } from "../error.js";
|
|
10
|
-
import { useWarning } from "./util/warning.js";
|
|
11
|
-
const __dirname = url.fileURLToPath(new URL(".", import.meta.url));
|
|
12
|
-
/**
|
|
13
|
-
* The `RemixSite` construct is a higher level CDK construct that makes it easy to create a Remix app.
|
|
14
|
-
*
|
|
15
|
-
* @example
|
|
16
|
-
*
|
|
17
|
-
* Deploys a Remix app in the `my-remix-app` directory.
|
|
18
|
-
*
|
|
19
|
-
* ```js
|
|
20
|
-
* new RemixSite(stack, "web", {
|
|
21
|
-
* path: "my-remix-app/",
|
|
22
|
-
* });
|
|
23
|
-
* ```
|
|
24
|
-
*/
|
|
25
|
-
export class RemixSite extends SsrSite {
|
|
26
|
-
serverModuleFormat = "cjs";
|
|
27
|
-
initBuildConfig() {
|
|
28
|
-
const { path: sitePath } = this.props;
|
|
29
|
-
const configDefaults = {
|
|
30
|
-
assetsBuildDirectory: "public/build",
|
|
31
|
-
publicPath: "/build/",
|
|
32
|
-
serverBuildPath: "build/index.js",
|
|
33
|
-
serverPlatform: "node",
|
|
34
|
-
};
|
|
35
|
-
// Validate config path
|
|
36
|
-
const configPath = path.resolve(sitePath, "remix.config.js");
|
|
37
|
-
if (!fs.existsSync(configPath)) {
|
|
38
|
-
throw new VisibleError(`In the "${this.node.id}" Site, could not find "remix.config.js" at expected path "${configPath}".`);
|
|
39
|
-
}
|
|
40
|
-
// Load config
|
|
41
|
-
const userConfig = require(configPath);
|
|
42
|
-
this.serverModuleFormat = userConfig.serverModuleFormat ?? "cjs";
|
|
43
|
-
if (userConfig.serverModuleFormat !== "esm") {
|
|
44
|
-
useWarning().add("remix.cjs");
|
|
45
|
-
}
|
|
46
|
-
// Validate config
|
|
47
|
-
const config = {
|
|
48
|
-
...configDefaults,
|
|
49
|
-
...userConfig,
|
|
50
|
-
};
|
|
51
|
-
Object.keys(configDefaults).forEach((key) => {
|
|
52
|
-
const k = key;
|
|
53
|
-
if (config[k] !== configDefaults[k]) {
|
|
54
|
-
throw new VisibleError(`In the "${this.node.id}" Site, remix.config.js "${key}" must be "${configDefaults[k]}".`);
|
|
55
|
-
}
|
|
56
|
-
});
|
|
57
|
-
return {
|
|
58
|
-
typesPath: ".",
|
|
59
|
-
serverBuildOutputFile: "build/index.js",
|
|
60
|
-
clientBuildOutputDir: "public",
|
|
61
|
-
clientBuildVersionedSubDir: "build",
|
|
62
|
-
// Note: When using libraries like remix-flat-routes the file can
|
|
63
|
-
// contains special characters like "+". It needs to be encoded.
|
|
64
|
-
clientCFFunctionInjection: `
|
|
65
|
-
request.uri = request.uri.split('/').map(encodeURIComponent).join('/');
|
|
66
|
-
`,
|
|
67
|
-
};
|
|
68
|
-
}
|
|
69
|
-
createServerLambdaBundle(wrapperFile) {
|
|
70
|
-
// Create a Lambda@Edge handler for the Remix server bundle.
|
|
71
|
-
//
|
|
72
|
-
// Note: Remix does perform their own internal ESBuild process, but it
|
|
73
|
-
// doesn't bundle 3rd party dependencies by default. In the interest of
|
|
74
|
-
// keeping deployments seamless for users we will create a server bundle
|
|
75
|
-
// with all dependencies included. We will still need to consider how to
|
|
76
|
-
// address any need for external dependencies, although I think we should
|
|
77
|
-
// possibly consider this at a later date.
|
|
78
|
-
// In this path we are assuming that the Remix build only outputs the
|
|
79
|
-
// "core server build". We can safely assume this as we have guarded the
|
|
80
|
-
// remix.config.js to ensure it matches our expectations for the build
|
|
81
|
-
// configuration.
|
|
82
|
-
// We need to ensure that the "core server build" is wrapped with an
|
|
83
|
-
// appropriate Lambda@Edge handler. We will utilise an internal asset
|
|
84
|
-
// template to create this wrapper within the "core server build" output
|
|
85
|
-
// directory.
|
|
86
|
-
// Ensure build directory exists
|
|
87
|
-
const buildPath = path.join(this.props.path, "build");
|
|
88
|
-
fs.mkdirSync(buildPath, { recursive: true });
|
|
89
|
-
// Copy the server lambda handler
|
|
90
|
-
fs.copyFileSync(path.resolve(__dirname, `../support/remix-site-function/${wrapperFile}`), path.join(buildPath, "server.js"));
|
|
91
|
-
// Copy the Remix polyfil to the server build directory
|
|
92
|
-
//
|
|
93
|
-
// Note: We need to ensure that the polyfills are injected above other code that
|
|
94
|
-
// will depend on them. Importing them within the top of the lambda code
|
|
95
|
-
// doesn't appear to guarantee this, we therefore leverage ESBUild's
|
|
96
|
-
// `inject` option to ensure that the polyfills are injected at the top of
|
|
97
|
-
// the bundle.
|
|
98
|
-
const polyfillDest = path.join(buildPath, "polyfill.js");
|
|
99
|
-
fs.copyFileSync(path.resolve(__dirname, "../support/remix-site-function/polyfill.js"), polyfillDest);
|
|
100
|
-
return {
|
|
101
|
-
handler: path.join(buildPath, "server.handler"),
|
|
102
|
-
esbuild: { inject: [polyfillDest] },
|
|
103
|
-
};
|
|
104
|
-
}
|
|
105
|
-
createFunctionForRegional() {
|
|
106
|
-
const { runtime, timeout, memorySize, permissions, environment, bind, nodejs, cdk, } = this.props;
|
|
107
|
-
const { handler, esbuild } = this.createServerLambdaBundle("regional-server.js");
|
|
108
|
-
return new SsrFunction(this, `ServerFunction`, {
|
|
109
|
-
description: "Server handler for Remix",
|
|
110
|
-
handler,
|
|
111
|
-
runtime,
|
|
112
|
-
memorySize,
|
|
113
|
-
timeout,
|
|
114
|
-
nodejs: {
|
|
115
|
-
format: this.serverModuleFormat,
|
|
116
|
-
...nodejs,
|
|
117
|
-
esbuild: {
|
|
118
|
-
...esbuild,
|
|
119
|
-
...nodejs?.esbuild,
|
|
120
|
-
inject: [...(nodejs?.esbuild?.inject || []), ...esbuild.inject],
|
|
121
|
-
},
|
|
122
|
-
},
|
|
123
|
-
bind,
|
|
124
|
-
environment,
|
|
125
|
-
permissions,
|
|
126
|
-
...cdk?.server,
|
|
127
|
-
});
|
|
128
|
-
}
|
|
129
|
-
createFunctionForEdge() {
|
|
130
|
-
const { runtime, timeout, memorySize, bind, permissions, environment, nodejs, } = this.props;
|
|
131
|
-
const { handler, esbuild } = this.createServerLambdaBundle("edge-server.js");
|
|
132
|
-
return new EdgeFunction(this, `Server`, {
|
|
133
|
-
scopeOverride: this,
|
|
134
|
-
handler,
|
|
135
|
-
runtime,
|
|
136
|
-
timeout,
|
|
137
|
-
memorySize,
|
|
138
|
-
bind,
|
|
139
|
-
environment,
|
|
140
|
-
permissions,
|
|
141
|
-
nodejs: {
|
|
142
|
-
format: this.serverModuleFormat,
|
|
143
|
-
...nodejs,
|
|
144
|
-
esbuild: {
|
|
145
|
-
...esbuild,
|
|
146
|
-
...nodejs?.esbuild,
|
|
147
|
-
inject: [...(nodejs?.esbuild?.inject || []), ...esbuild.inject],
|
|
148
|
-
},
|
|
149
|
-
},
|
|
150
|
-
});
|
|
151
|
-
}
|
|
152
|
-
getConstructMetadata() {
|
|
153
|
-
return {
|
|
154
|
-
type: "RemixSite",
|
|
155
|
-
...this.getConstructMetadataBase(),
|
|
156
|
-
};
|
|
157
|
-
}
|
|
158
|
-
}
|