diff --git a/packages/serverless-components/nextjs-cdk-construct/src/index.ts b/packages/serverless-components/nextjs-cdk-construct/src/index.ts index 6d96ea2f58..2eaec083b3 100644 --- a/packages/serverless-components/nextjs-cdk-construct/src/index.ts +++ b/packages/serverless-components/nextjs-cdk-construct/src/index.ts @@ -372,7 +372,7 @@ export class NextJSLambdaEdge extends cdk.Construct { // The source contents will be unzipped to and loaded into the S3 bucket // at the root '/', we don't want this, we want to maintain the same // path on S3 as their local path. - destinationKeyPrefix: path.relative(assetsDirectory, assetPath), + destinationKeyPrefix: path.posix.relative(assetsDirectory, assetPath), // Source directories are uploaded with `--sync` this means that any // files that don't exist in the source directory, but do in the S3 diff --git a/packages/serverless-components/nextjs-cdk-construct/src/utils/readAssetsDirectory.ts b/packages/serverless-components/nextjs-cdk-construct/src/utils/readAssetsDirectory.ts index dc46cbe8e3..b7a5f9ca45 100644 --- a/packages/serverless-components/nextjs-cdk-construct/src/utils/readAssetsDirectory.ts +++ b/packages/serverless-components/nextjs-cdk-construct/src/utils/readAssetsDirectory.ts @@ -33,11 +33,12 @@ const readAssetsDirectory = (options: { assetsDirectory: string; }): CacheConfig => { const { assetsDirectory } = options; - const publicFiles = path.join(assetsDirectory, "public"); - const staticFiles = path.join(assetsDirectory, "static"); - const staticPages = path.join(assetsDirectory, "static-pages"); - const nextData = path.join(assetsDirectory, "_next", "data"); - const nextStatic = path.join(assetsDirectory, "_next", "static"); + // Ensure these are posix paths so they are compatible with AWS S3 + const publicFiles = path.posix.join(assetsDirectory, "public"); + const staticFiles = path.posix.join(assetsDirectory, "static"); + const staticPages = path.posix.join(assetsDirectory, "static-pages"); + const nextData = path.posix.join(assetsDirectory, "_next", "data"); + const nextStatic = path.posix.join(assetsDirectory, "_next", "static"); return filterNonExistentPathKeys({ publicFiles: { diff --git a/packages/serverless-components/nextjs-cdk-construct/src/utils/readInvalidationPathsFromManifest.ts b/packages/serverless-components/nextjs-cdk-construct/src/utils/readInvalidationPathsFromManifest.ts index 45a7ac2567..b571ab89ec 100644 --- a/packages/serverless-components/nextjs-cdk-construct/src/utils/readInvalidationPathsFromManifest.ts +++ b/packages/serverless-components/nextjs-cdk-construct/src/utils/readInvalidationPathsFromManifest.ts @@ -3,7 +3,8 @@ import { OriginRequestDefaultHandlerManifest } from "@sls-next/lambda-at-edge"; const dynamicPathToInvalidationPath = (dynamicPath: string) => { const [firstSegment] = dynamicPath.split("/:"); - return path.join(firstSegment || "/", "*"); + // Ensure this is posix path as CloudFront needs forward slash in invalidation + return path.posix.join(firstSegment || "/", "*"); }; export const readInvalidationPathsFromManifest = (