From e3b7459a6ba44cddfef5d9c31f82344659992f21 Mon Sep 17 00:00:00 2001 From: Krishnendu Sekhar Das Date: Wed, 3 Jun 2020 18:56:47 +0530 Subject: [PATCH] Add support for next/dynamic & service-worker --- packages/lambda-at-edge/src/build.ts | 9 ++++++++- packages/lambda-at-edge/src/default-handler.ts | 5 +++++ packages/lambda-at-edge/src/lib/isChunk.ts | 6 ++++++ packages/lambda-at-edge/src/lib/pathToFilename.ts | 2 ++ 4 files changed, 21 insertions(+), 1 deletion(-) create mode 100644 packages/lambda-at-edge/src/lib/isChunk.ts create mode 100644 packages/lambda-at-edge/src/lib/pathToFilename.ts diff --git a/packages/lambda-at-edge/src/build.ts b/packages/lambda-at-edge/src/build.ts index 11a89ed0aa..cef648c807 100644 --- a/packages/lambda-at-edge/src/build.ts +++ b/packages/lambda-at-edge/src/build.ts @@ -14,6 +14,8 @@ import pathToPosix from "./lib/pathToPosix"; import expressifyDynamicRoute from "./lib/expressifyDynamicRoute"; import pathToRegexStr from "./lib/pathToRegexStr"; import createServerlessConfig from "./lib/createServerlessConfig"; +import isChunk from "./lib/isChunk"; +import pathToFilename from "./lib/pathToFilename"; export const DEFAULT_LAMBDA_CODE_DIR = "default-lambda"; export const API_LAMBDA_CODE_DIR = "api-lambda"; @@ -123,9 +125,14 @@ class Builder { const resolvedFilePath = path.resolve(filePath); const dst = path.relative(this.nextConfigDir, resolvedFilePath); + // chunks are geting copied to root. others remain same return fse.copy( resolvedFilePath, - join(this.outputDir, handlerDirectory, dst) + join( + this.outputDir, + handlerDirectory, + isChunk(filePath) ? pathToFilename(dst) : dst + ) ); }); } diff --git a/packages/lambda-at-edge/src/default-handler.ts b/packages/lambda-at-edge/src/default-handler.ts index 48ca9eba47..961a0e1e48 100644 --- a/packages/lambda-at-edge/src/default-handler.ts +++ b/packages/lambda-at-edge/src/default-handler.ts @@ -72,6 +72,11 @@ export const handler = async ( const isHTMLPage = isStaticPage || isPrerenderedPage; + if (uri === "/service-worker.js") { + s3Origin.path = "/_next/static"; + return request; + } + if (isHTMLPage || isPublicFile) { s3Origin.path = isHTMLPage ? "/static-pages" : "/public"; diff --git a/packages/lambda-at-edge/src/lib/isChunk.ts b/packages/lambda-at-edge/src/lib/isChunk.ts new file mode 100644 index 0000000000..557507dbf6 --- /dev/null +++ b/packages/lambda-at-edge/src/lib/isChunk.ts @@ -0,0 +1,6 @@ +const isChunk = (path: string): boolean => { + // Identify .next/serverless/[number].[alpha_numeric].js pattern + return /^(.next\/serverless\/)[\d]+\.+[\w,\s-]+\.(js)$/.test(path); +}; + +export default isChunk; diff --git a/packages/lambda-at-edge/src/lib/pathToFilename.ts b/packages/lambda-at-edge/src/lib/pathToFilename.ts new file mode 100644 index 0000000000..fc8b857967 --- /dev/null +++ b/packages/lambda-at-edge/src/lib/pathToFilename.ts @@ -0,0 +1,2 @@ +const pathToFilename = (path: string): string => path.replace(/^.*[\\\/]/, ""); +export default pathToFilename;