From 94b6b55c6991e101d1562e9e3d421d116723dd56 Mon Sep 17 00:00:00 2001 From: Daniel Date: Fri, 6 Sep 2019 21:26:54 +0100 Subject: [PATCH] Serverless component v2 (#137) * add serverless-nextjs-component --- .gitignore | 4 +- .prettierignore | 1 + .travis.yml | 5 +- jest.integration.setup.js | 2 +- jest.setup.js | 1 + package.json | 29 +- .../serverless-nextjs-component/.gitignore | 2 + .../serverless-nextjs-component/README.md | 107 +++++++ .../__tests__/build.test.js | 302 ++++++++++++++++++ .../fixtures/built-artifact/manifest.json | 45 +++ .../fixtures/built-artifact/pages/[root].js | 5 + .../fixtures/built-artifact/pages/_error.js | 5 + .../built-artifact/pages/api/getCustomers.js | 5 + .../built-artifact/pages/blog/[id].js | 5 + .../pages/customers/[customer].js | 5 + .../pages/customers/[customer]/[post].js | 5 + .../pages/customers/[customer]/profile.js | 5 + .../built-artifact/pages/customers/index.js | 5 + .../built-artifact/pages/customers/new.js | 5 + .../fixtures/built-artifact/pages/index.js | 5 + .../fixtures/built-artifact/pages/terms.html | 3 + .../__tests__/fixtures/manifest.json | 50 +++ .../.next/serverless/pages-manifest.json | 14 + .../.next/serverless/pages/about.html | 0 .../simple-app/.next/serverless/pages/blog.js | 0 .../serverless/pages/customers/[post].js | 0 .../.next/serverless/pages/terms.html | 0 .../fixtures/simple-app/public/favicon.ico | 0 .../fixtures/simple-app/public/sw.js | 0 .../fixtures/simple-app/serverless.yml | 2 + .../__tests__/lambda@edge-handler.test.js | 133 ++++++++ .../next-aws-cloudfront.request.test.js | 192 +++++++++++ .../next-aws-cloudfront.response.test.js | 228 +++++++++++++ .../arch-white.png | Bin 0 -> 122564 bytes packages/serverless-nextjs-component/arch.png | Bin 0 -> 150477 bytes .../serverless-nextjs-component/constants.js | 3 + .../examples/dynamodb-crud/.env.sample | 3 + .../examples/dynamodb-crud/.gitignore | 5 + .../examples/dynamodb-crud/README.md | 56 ++++ .../examples/dynamodb-crud/data/dynamodb.js | 63 ++++ .../examples/dynamodb-crud/data/index.js | 1 + .../examples/dynamodb-crud/data/mock.js | 16 + .../infrastructure/provisionTable.js | 58 ++++ .../examples/dynamodb-crud/next.config.js | 13 + .../examples/dynamodb-crud/package.json | 25 ++ .../dynamodb-crud/pages/api/todos/[id].js | 7 + .../dynamodb-crud/pages/api/todos/index.js | 6 + .../dynamodb-crud/pages/api/todos/new.js | 8 + .../examples/dynamodb-crud/pages/index.js | 1 + .../dynamodb-crud/pages/todos/details/[id].js | 35 ++ .../dynamodb-crud/pages/todos/list.js | 39 +++ .../examples/dynamodb-crud/pages/todos/new.js | 34 ++ .../examples/dynamodb-crud/public/favicon.ico | Bin 0 -> 318 bytes .../examples/dynamodb-crud/public/robots.txt | 2 + .../examples/dynamodb-crud/serverless.yml | 2 + .../dynamodb-crud/static/todo-icon.png | Bin 0 -> 1067 bytes .../lambda-at-edge-handler.js | 34 ++ .../lib/expressifyDynamicRoute.js | 4 + .../lib/isDynamicRoute.js | 4 + .../lib/pathToRegexStr.js | 6 + .../lib/test-utils.js | 24 ++ .../next-aws-cloudfront.js | 133 ++++++++ .../serverless-nextjs-component/package.json | 39 +++ .../router-perf.js | 26 ++ .../serverless-nextjs-component/router.js | 32 ++ .../serverless-nextjs-component/serverless.js | 195 +++++++++++ .../__mocks__/aws-sdk.js | 126 ++++++++ .../.next/serverless/pages/about.html | 1 + .../serverless.yml | 17 + .../app/.next/static/placeholder.js | 0 .../.next/static/placeholder.js | 0 .../one-page-app/.next/static/client.js | 1 + .../__tests__/nested-next-config.test.js | 8 +- .../__tests__/nested-page-app.test.js | 8 +- .../__tests__/one-page-app.test.js | 29 +- .../__tests__/single-api.test.js | 8 +- .../lib/displayServiceInfo.js | 5 +- ...emplate.js => readServerlessCFTemplate.js} | 10 +- .../utils/test/testableServerless.js | 88 ++++- 79 files changed, 2299 insertions(+), 46 deletions(-) create mode 100644 .prettierignore create mode 100644 jest.setup.js create mode 100644 packages/serverless-nextjs-component/.gitignore create mode 100644 packages/serverless-nextjs-component/README.md create mode 100644 packages/serverless-nextjs-component/__tests__/build.test.js create mode 100644 packages/serverless-nextjs-component/__tests__/fixtures/built-artifact/manifest.json create mode 100644 packages/serverless-nextjs-component/__tests__/fixtures/built-artifact/pages/[root].js create mode 100644 packages/serverless-nextjs-component/__tests__/fixtures/built-artifact/pages/_error.js create mode 100644 packages/serverless-nextjs-component/__tests__/fixtures/built-artifact/pages/api/getCustomers.js create mode 100644 packages/serverless-nextjs-component/__tests__/fixtures/built-artifact/pages/blog/[id].js create mode 100644 packages/serverless-nextjs-component/__tests__/fixtures/built-artifact/pages/customers/[customer].js create mode 100644 packages/serverless-nextjs-component/__tests__/fixtures/built-artifact/pages/customers/[customer]/[post].js create mode 100644 packages/serverless-nextjs-component/__tests__/fixtures/built-artifact/pages/customers/[customer]/profile.js create mode 100644 packages/serverless-nextjs-component/__tests__/fixtures/built-artifact/pages/customers/index.js create mode 100644 packages/serverless-nextjs-component/__tests__/fixtures/built-artifact/pages/customers/new.js create mode 100644 packages/serverless-nextjs-component/__tests__/fixtures/built-artifact/pages/index.js create mode 100644 packages/serverless-nextjs-component/__tests__/fixtures/built-artifact/pages/terms.html create mode 100644 packages/serverless-nextjs-component/__tests__/fixtures/manifest.json create mode 100644 packages/serverless-nextjs-component/__tests__/fixtures/simple-app/.next/serverless/pages-manifest.json create mode 100644 packages/serverless-nextjs-component/__tests__/fixtures/simple-app/.next/serverless/pages/about.html create mode 100644 packages/serverless-nextjs-component/__tests__/fixtures/simple-app/.next/serverless/pages/blog.js create mode 100644 packages/serverless-nextjs-component/__tests__/fixtures/simple-app/.next/serverless/pages/customers/[post].js create mode 100644 packages/serverless-nextjs-component/__tests__/fixtures/simple-app/.next/serverless/pages/terms.html create mode 100644 packages/serverless-nextjs-component/__tests__/fixtures/simple-app/public/favicon.ico create mode 100644 packages/serverless-nextjs-component/__tests__/fixtures/simple-app/public/sw.js create mode 100644 packages/serverless-nextjs-component/__tests__/fixtures/simple-app/serverless.yml create mode 100644 packages/serverless-nextjs-component/__tests__/lambda@edge-handler.test.js create mode 100644 packages/serverless-nextjs-component/__tests__/next-aws-cloudfront.request.test.js create mode 100644 packages/serverless-nextjs-component/__tests__/next-aws-cloudfront.response.test.js create mode 100644 packages/serverless-nextjs-component/arch-white.png create mode 100644 packages/serverless-nextjs-component/arch.png create mode 100644 packages/serverless-nextjs-component/constants.js create mode 100644 packages/serverless-nextjs-component/examples/dynamodb-crud/.env.sample create mode 100644 packages/serverless-nextjs-component/examples/dynamodb-crud/.gitignore create mode 100644 packages/serverless-nextjs-component/examples/dynamodb-crud/README.md create mode 100644 packages/serverless-nextjs-component/examples/dynamodb-crud/data/dynamodb.js create mode 100644 packages/serverless-nextjs-component/examples/dynamodb-crud/data/index.js create mode 100644 packages/serverless-nextjs-component/examples/dynamodb-crud/data/mock.js create mode 100644 packages/serverless-nextjs-component/examples/dynamodb-crud/infrastructure/provisionTable.js create mode 100644 packages/serverless-nextjs-component/examples/dynamodb-crud/next.config.js create mode 100644 packages/serverless-nextjs-component/examples/dynamodb-crud/package.json create mode 100644 packages/serverless-nextjs-component/examples/dynamodb-crud/pages/api/todos/[id].js create mode 100644 packages/serverless-nextjs-component/examples/dynamodb-crud/pages/api/todos/index.js create mode 100644 packages/serverless-nextjs-component/examples/dynamodb-crud/pages/api/todos/new.js create mode 100644 packages/serverless-nextjs-component/examples/dynamodb-crud/pages/index.js create mode 100644 packages/serverless-nextjs-component/examples/dynamodb-crud/pages/todos/details/[id].js create mode 100644 packages/serverless-nextjs-component/examples/dynamodb-crud/pages/todos/list.js create mode 100644 packages/serverless-nextjs-component/examples/dynamodb-crud/pages/todos/new.js create mode 100644 packages/serverless-nextjs-component/examples/dynamodb-crud/public/favicon.ico create mode 100644 packages/serverless-nextjs-component/examples/dynamodb-crud/public/robots.txt create mode 100644 packages/serverless-nextjs-component/examples/dynamodb-crud/serverless.yml create mode 100644 packages/serverless-nextjs-component/examples/dynamodb-crud/static/todo-icon.png create mode 100644 packages/serverless-nextjs-component/lambda-at-edge-handler.js create mode 100644 packages/serverless-nextjs-component/lib/expressifyDynamicRoute.js create mode 100644 packages/serverless-nextjs-component/lib/isDynamicRoute.js create mode 100644 packages/serverless-nextjs-component/lib/pathToRegexStr.js create mode 100644 packages/serverless-nextjs-component/lib/test-utils.js create mode 100644 packages/serverless-nextjs-component/next-aws-cloudfront.js create mode 100644 packages/serverless-nextjs-component/package.json create mode 100644 packages/serverless-nextjs-component/router-perf.js create mode 100644 packages/serverless-nextjs-component/router.js create mode 100644 packages/serverless-nextjs-component/serverless.js create mode 100644 packages/serverless-nextjs-plugin/__mocks__/aws-sdk.js create mode 100644 packages/serverless-nextjs-plugin/__tests__/fixtures/automatic-static-optimised-app/.next/serverless/pages/about.html create mode 100644 packages/serverless-nextjs-plugin/__tests__/fixtures/automatic-static-optimised-app/serverless.yml create mode 100644 packages/serverless-nextjs-plugin/__tests__/fixtures/nested-next-config/app/.next/static/placeholder.js create mode 100644 packages/serverless-nextjs-plugin/__tests__/fixtures/nested-page-app/.next/static/placeholder.js create mode 100644 packages/serverless-nextjs-plugin/__tests__/fixtures/one-page-app/.next/static/client.js rename packages/serverless-nextjs-plugin/utils/test/{readCloudFormationUpdateTemplate.js => readServerlessCFTemplate.js} (50%) diff --git a/.gitignore b/.gitignore index 55c748e0b8..18b4640985 100644 --- a/.gitignore +++ b/.gitignore @@ -6,4 +6,6 @@ examples/basic-next-serverless-app/build .serverless .next sls-next-build -package-lock.json \ No newline at end of file +.serverless_nextjs +package-lock.json +.DS_Store diff --git a/.prettierignore b/.prettierignore new file mode 100644 index 0000000000..40c3c4a33e --- /dev/null +++ b/.prettierignore @@ -0,0 +1 @@ +manifest.json \ No newline at end of file diff --git a/.travis.yml b/.travis.yml index 1618af89c1..6d45c4e2b2 100644 --- a/.travis.yml +++ b/.travis.yml @@ -5,11 +5,12 @@ os: - osx language: node_js node_js: - - "8" - - "11.10" + - "10.16" + - "12.7.0" install: - npm install - cd packages/serverless-nextjs-plugin && npm install && cd ../../ + - cd packages/serverless-nextjs-component && npm install && cd ../../ - cd integration/app-with-serverless-offline && npm install && cd ../../ script: - npm run lint diff --git a/jest.integration.setup.js b/jest.integration.setup.js index 5b3e36c485..461b4ef3a0 100644 --- a/jest.integration.setup.js +++ b/jest.integration.setup.js @@ -1 +1 @@ -jest.setTimeout(35000); +jest.setTimeout(35 * 1000); diff --git a/jest.setup.js b/jest.setup.js new file mode 100644 index 0000000000..781a845c62 --- /dev/null +++ b/jest.setup.js @@ -0,0 +1 @@ +jest.setTimeout(10 * 1000); diff --git a/package.json b/package.json index 14cbba83a0..e34efec21f 100644 --- a/package.json +++ b/package.json @@ -15,6 +15,7 @@ ], "scripts": { "test": "jest", + "test:watch": "jest --watch", "lint": "eslint .", "coveralls": "jest --coverage && cat ./coverage/lcov.info | ./node_modules/coveralls/bin/coveralls.js", "integration": "jest --config jest.integration.config.json --setupTestFrameworkScriptFile=./jest.integration.setup.js", @@ -32,18 +33,18 @@ "homepage": "https://github.com/danielcondemarin/serverless-nextjs-plugin#readme", "devDependencies": { "adm-zip": "^0.4.13", - "coveralls": "^3.0.3", + "coveralls": "^3.0.6", "eslint": "^5.16.0", "eslint-config-prettier": "^4.2.0", "eslint-plugin-prettier": "^3.0.1", - "jest": "^24.8.0", - "jest-when": "^2.5.0", + "jest": "^24.9.0", + "jest-when": "^2.7.0", "lerna": "^3.13.4", "next": "^8.1.0", "prettier": "^1.17.1", - "react": "^16.8.6", - "react-dom": "^16.8.6", - "serverless": "^1.42.3", + "react": "^16.9.0", + "react-dom": "^16.9.0", + "serverless": "^1.51.0", "serverless-offline": "^4.10.0" }, "jest": { @@ -55,21 +56,31 @@ "coverageDirectory": "/coverage/", "coveragePathIgnorePatterns": [ "/packages/serverless-nextjs-plugin/utils/yml/cfSchema.js", - "/packages/serverless-nextjs-plugin/utils/test" + "/packages/serverless-nextjs-plugin/utils/test", + "/.serverless_nextjs/", + "/fixtures/", + "/examples/" ], "testPathIgnorePatterns": [ "/.next/", - "/node_modules/" + "/node_modules/", + "/fixtures/" ], "modulePathIgnorePatterns": [ - "/examples/", + "/examples/", "/integration" ], "modulePaths": [ "/packages/serverless-nextjs-plugin/" + ], + "setupFiles": [ + "/jest.setup.js" ] }, "dependencies": { + "@serverless/aws-cloudfront": "^3.1.0", + "@serverless/aws-lambda": "^3.0.0", + "@serverless/aws-s3": "^3.1.0", "opencollective-postinstall": "^2.0.2" }, "collective": { diff --git a/packages/serverless-nextjs-component/.gitignore b/packages/serverless-nextjs-component/.gitignore new file mode 100644 index 0000000000..31d779ab4f --- /dev/null +++ b/packages/serverless-nextjs-component/.gitignore @@ -0,0 +1,2 @@ +.serverless_nextjs +!__tests__/fixtures/simple-app/.next \ No newline at end of file diff --git a/packages/serverless-nextjs-component/README.md b/packages/serverless-nextjs-component/README.md new file mode 100644 index 0000000000..54352cac7a --- /dev/null +++ b/packages/serverless-nextjs-component/README.md @@ -0,0 +1,107 @@ +# Serverless Nextjs Component + +A zero configuration Nextjs 9.0 [serverless component](https://github.com/serverless-components/) with full feature parity. + +[![serverless](http://public.serverless.com/badges/v3.svg)](http://www.serverless.com) +[![Build Status](https://travis-ci.org/danielcondemarin/serverless-nextjs-plugin.svg?branch=master)](https://travis-ci.org/danielcondemarin/serverless-nextjs-plugin) +[![Financial Contributors on Open Collective](https://opencollective.com/serverless-nextjs-plugin/all/badge.svg?label=financial+contributors)](https://opencollective.com/serverless-nextjs-plugin) [![npm version](https://badge.fury.io/js/serverless-nextjs-plugin.svg)](https://badge.fury.io/js/serverless-nextjs-plugin) +[![Coverage Status](https://coveralls.io/repos/github/danielcondemarin/serverless-nextjs-plugin/badge.svg?branch=master)](https://coveralls.io/github/danielcondemarin/serverless-nextjs-plugin?branch=master) +[![Codacy Badge](https://api.codacy.com/project/badge/Grade/c0d3aa2a86cb4ce98772a02015f46314)](https://www.codacy.com/app/danielcondemarin/serverless-nextjs-plugin?utm_source=github.com&utm_medium=referral&utm_content=danielcondemarin/serverless-nextjs-plugin&utm_campaign=Badge_Grade) + +## Contents + +- [Motivation](#motivation) +- [Design principles](#design-principles) +- [Features](#features) +- [Getting started](#getting-started) +- [Custom domain name](#custom-domain-name) +- [Architecture](#architecture) +- [FAQ](#faq) + +### Motivation + +Since Nextjs 8.0, [serverless mode](https://nextjs.org/blog/next-8#serverless-nextjs) was introduced which provides a new low level API which projects like this can use to deploy onto different cloud providers. This project is a better version of the [serverless plugin](https://github.com/danielcondemarin/serverless-nextjs-plugin) which focuses on addressing core issues like [next 9 support](https://github.com/danielcondemarin/serverless-nextjs-plugin/issues/101), [better development experience](https://github.com/danielcondemarin/serverless-nextjs-plugin/issues/59), [the 200 CloudFormation resource limit](https://github.com/danielcondemarin/serverless-nextjs-plugin/issues/17) and [performance](https://github.com/danielcondemarin/serverless-nextjs-plugin/issues/13). + +### Design principles + +1. Zero configuration by default + +There is no configuration needed. You can extend defaults based on your application needs. + +2. Feature parity with nextjs + +Users of this component should be able to use nextjs development tooling, aka `next dev`. It is the component's job to deploy your application ensuring parity with all of next's feature we know and love. + +3. Fast deployments / no CloudFormation resource limits. + +With a simplified architecture and no use of CloudFormation, there are no limits to how many pages you can have in your application, plus deployment times are very fast! with the exception of CloudFront propagation times of course. + +### Features + +- [x] [Server side rendered pages at the Edge](https://github.com/zeit/next.js#fetching-data-and-component-lifecycle). + Pages that need server side compute to render are hosted on Lambda@Edge. The component takes care of all the routing for you so there is no configuration needed. Because rendering happens at the CloudFront edge locations latency is very low! +- [x] [API Routes](https://nextjs.org/docs#api-routes). + Similarly to the server side rendered pages, API requests are also served from the CloudFront edge locations using Lambda@Edge. +- [x] [Dynamic pages / route segments](https://github.com/zeit/next.js/#dynamic-routing). +- [x] [Automatic prerendering](https://github.com/zeit/next.js/#automatic-prerendering). + Statically optimised pages compiled by next are served from CloudFront edge locations with low latency and cost. +- [x] [Client assets](https://github.com/zeit/next.js/#cdn-support-with-asset-prefix). + Nextjs build assets `/_next/*` served from CloudFront. +- [x] [User static / public folders](https://github.com/zeit/next.js#static-file-serving-eg-images). + Any of your assets in the static or public folders are uploaded to S3 and served from CloudFront automatically. + +### Getting started + +Add your next application to the serverless.yml: + +```yml +# serverless.yml + +myNextApplication: + component: @serverless/nextjs +``` + +And simply deploy: + +```bash +$ serverless +``` + +### Custom domain name (Coming soon!) + +In most cases you wouldn't want to use CloudFront's distribution domain to access your application. Instead, you can specify a custom domain name: + +```yml +# serverless.yml + +myNextApplication: + component: @serverless/nextjs + inputs: + domain: myfrontend.example.com +``` + +### Architecture + +The application architecture deployed by the component is the following with minor variations: + +![architecture](./arch.png) + +### FAQ + +#### Is it one monolith Lambda or one Lambda per serverless page? + +Only one Lambda is provisioned. There are a few reasons why: + +- Simplicity. One lambda responsible for server side rendering or serving the API requests is very easy to manage. On the other hand, one lambda per page is a large surface area for a web app. For example a next application with 40+ pages would have resulted in 40+ lambda functions to maintain. + +- Deployment speed. Is much faster building and deploying one lambda function. + +Of course there are tradeoffs ... An architecture using one lambda per page in theory results in lower boot times. However, the implementation of this component is designed to ensure a minimum amount of compute happens at the Lambda@Edge. + +#### How do I interact with other AWS Services within my app? + +See `examples/dynamodb-crud` for an example Todo application that interacts with DynamoDB. + +#### Should I use the [serverless-nextjs-plugin](https://github.com/danielcondemarin/serverless-nextjs-plugin/tree/master/packages/serverless-nextjs-plugin) or this component? + +Users are enocouraged to use this component instead of the `serverless-nextjs-plugin`. This component was built and designed to fix issues the plugin has like the [CloudFormation resource limit](https://github.com/danielcondemarin/serverless-nextjs-plugin/issues/17). diff --git a/packages/serverless-nextjs-component/__tests__/build.test.js b/packages/serverless-nextjs-component/__tests__/build.test.js new file mode 100644 index 0000000000..bb811a24df --- /dev/null +++ b/packages/serverless-nextjs-component/__tests__/build.test.js @@ -0,0 +1,302 @@ +const path = require("path"); +const fse = require("fs-extra"); +const execa = require("execa"); +const NextjsComponent = require("../serverless"); +const { LAMBDA_AT_EDGE_BUILD_DIR } = require("../constants"); + +jest.mock("execa"); + +const mockS3Upload = jest.fn(); +const mockS3 = jest.fn(); +jest.mock("@serverless/aws-s3", () => + jest.fn(() => { + const bucket = mockS3; + bucket.init = () => {}; + bucket.default = () => {}; + bucket.context = {}; + bucket.upload = mockS3Upload; + return bucket; + }) +); + +const mockCloudFront = jest.fn(); +jest.mock("@serverless/aws-cloudfront", () => + jest.fn(() => { + const cloudFront = mockCloudFront; + cloudFront.init = () => {}; + cloudFront.default = () => {}; + cloudFront.context = {}; + return cloudFront; + }) +); + +const mockLambda = jest.fn(); +const mockLambdaPublish = jest.fn(); +jest.mock("@serverless/aws-lambda", () => + jest.fn(() => { + const lambda = mockLambda; + lambda.init = () => {}; + lambda.default = () => {}; + lambda.context = {}; + lambda.publishVersion = mockLambdaPublish; + return lambda; + }) +); + +describe("build tests", () => { + let tmpCwd; + let manifest; + let componentOutputs; + + const fixturePath = path.join(__dirname, "./fixtures/simple-app"); + + beforeEach(async () => { + execa.mockResolvedValueOnce(); + + tmpCwd = process.cwd(); + process.chdir(fixturePath); + + mockS3.mockResolvedValue({ + name: "bucket-xyz" + }); + mockLambda.mockResolvedValueOnce({ + arn: "arn:aws:lambda:us-east-1:123456789012:function:my-func" + }); + mockLambdaPublish.mockResolvedValueOnce({ + version: "v1" + }); + mockCloudFront.mockResolvedValueOnce({ + url: "https://cloudfrontdistrib.amazonaws.com" + }); + + const component = new NextjsComponent(); + componentOutputs = await component.default(); + + manifest = await fse.readJSON( + path.join(fixturePath, `${LAMBDA_AT_EDGE_BUILD_DIR}/manifest.json`) + ); + }); + + afterEach(() => { + process.chdir(tmpCwd); + }); + + it("outputs next application url from cloudfront", () => { + expect(componentOutputs).toEqual({ + appUrl: "https://cloudfrontdistrib.amazonaws.com" + }); + }); + + describe("manifest", () => { + it("adds ssr page route", async () => { + const { + pages: { + ssr: { nonDynamic } + } + } = manifest; + + expect(nonDynamic["/customers/new"]).toEqual("pages/customers/new.js"); + }); + + it("adds ssr dynamic page route to express equivalent", async () => { + const { + pages: { + ssr: { dynamic } + } + } = manifest; + + expect(dynamic["/blog/:id"]).toEqual({ + file: "pages/blog/[id].js", + regex: "^\\/blog\\/([^\\/]+?)(?:\\/)?$" + }); + }); + + it("adds dynamic page with multiple segments to express equivalent", async () => { + const { + pages: { + ssr: { dynamic } + } + } = manifest; + + expect(dynamic["/customers/:customer/:post"]).toEqual({ + file: "pages/customers/[customer]/[post].js", + regex: "^\\/customers\\/([^\\/]+?)\\/([^\\/]+?)(?:\\/)?$" + }); + }); + + it("adds static page route", async () => { + const { + pages: { html } + } = manifest; + + expect(html["/terms"]).toEqual("pages/terms.html"); + }); + + it("adds public files", async () => { + const { publicFiles } = manifest; + + expect(publicFiles).toEqual({ + "/favicon.ico": "favicon.ico", + "/sw.js": "sw.js" + }); + }); + + it("adds the full manifest", async () => { + const { + pages: { + ssr: { dynamic, nonDynamic }, + html + } + } = manifest; + + expect(dynamic).toEqual({ + "/:root": { + file: "pages/[root].js", + regex: expect.any(String) + }, + "/blog/:id": { + file: "pages/blog/[id].js", + regex: expect.any(String) + }, + "/customers/:customer": { + file: "pages/customers/[customer].js", + regex: expect.any(String) + }, + "/customers/:customer/:post": { + file: "pages/customers/[customer]/[post].js", + regex: expect.any(String) + }, + "/customers/:customer/profile": { + file: "pages/customers/[customer]/profile.js", + regex: expect.any(String) + } + }); + + expect(nonDynamic).toEqual({ + "/customers/new": "pages/customers/new.js", + "/": "pages/index.js", + "/_app": "pages/_app.js", + "/_document": "pages/_document.js", + "/404": "pages/404.js" + }); + + expect(html).toEqual({ + "/terms": "pages/terms.html", + "/about": "pages/about.html" + }); + }); + + it("adds s3 domain", () => { + const { + cloudFrontOrigins: { staticOrigin } + } = manifest; + + expect(staticOrigin).toEqual({ + domainName: "bucket-xyz.s3.amazonaws.com" + }); + }); + }); + + describe("Lambda@Edge build files", () => { + it("copies handler file", async () => { + const files = await fse.readdir( + path.join(fixturePath, `${LAMBDA_AT_EDGE_BUILD_DIR}/`) + ); + + expect(files).toContain("index.js"); + }); + + it("copies manifest file", async () => { + const files = await fse.readdir( + path.join(fixturePath, `${LAMBDA_AT_EDGE_BUILD_DIR}/`) + ); + + expect(files).toContain("manifest.json"); + }); + + it("copies compat file", async () => { + const files = await fse.readdir( + path.join(fixturePath, `${LAMBDA_AT_EDGE_BUILD_DIR}/`) + ); + + expect(files).toContain("next-aws-cloudfront.js"); + }); + }); + + describe("assets bucket", () => { + it("uploads client build assets", () => { + expect(mockS3Upload).toBeCalledWith({ + dir: "./.next/static", + keyPrefix: "_next/static" + }); + }); + + it("uploads user static directory", () => { + expect(mockS3Upload).toBeCalledWith({ + dir: "./static", + keyPrefix: "static" + }); + }); + + it("uploads user public directory", () => { + expect(mockS3Upload).toBeCalledWith({ + dir: "./public", + keyPrefix: "public" + }); + }); + + it("uploads html pages to S3", () => { + ["terms.html", "about.html"].forEach(page => { + expect(mockS3Upload).toBeCalledWith({ + file: `./.next/serverless/pages/${page}`, + key: `static-pages/${page}` + }); + }); + }); + }); + + describe("cloudfront", () => { + it("provisions and publishes lambda@edge", () => { + expect(mockLambda).toBeCalledWith({ + description: expect.any(String), + handler: "index.handler", + code: `./${LAMBDA_AT_EDGE_BUILD_DIR}`, + role: { + service: ["lambda.amazonaws.com", "edgelambda.amazonaws.com"], + policy: { + arn: "arn:aws:iam::aws:policy/AdministratorAccess" + } + } + }); + + expect(mockLambdaPublish).toBeCalled(); + }); + + it("creates distribution", () => { + expect(mockCloudFront).toBeCalledWith({ + defaults: { + allowedHttpMethods: expect.any(Array), + ttl: 5, + "lambda@edge": { + "origin-request": + "arn:aws:lambda:us-east-1:123456789012:function:my-func:v1" // includes version + } + }, + origins: [ + { + url: "http://bucket-xyz.s3.amazonaws.com", + private: true, + pathPatterns: { + "_next/*": { + ttl: 86400 + }, + "static/*": { + ttl: 86400 + } + } + } + ] + }); + }); + }); +}); diff --git a/packages/serverless-nextjs-component/__tests__/fixtures/built-artifact/manifest.json b/packages/serverless-nextjs-component/__tests__/fixtures/built-artifact/manifest.json new file mode 100644 index 0000000000..7e13a3ecce --- /dev/null +++ b/packages/serverless-nextjs-component/__tests__/fixtures/built-artifact/manifest.json @@ -0,0 +1,45 @@ +{ + "cloudFrontOrigins": { + "staticOrigin": { + "domainName": "my-bucket.s3.amazonaws.com" + } + }, + "pages": { + "ssr": { + "dynamic": { + "/:root": { + "file": "pages/[root].js", + "regex": "^\/([^\/]+?)(?:\/)?$" + }, + "/blog/:id": { + "file": "pages/blog/[id].js", + "regex": "^\/blog\/([^\/]+?)(?:\/)?$" + }, + "/customers/:customer": { + "file": "pages/customers/[customer].js", + "regex": "^\/customers\/([^\/]+?)(?:\/)?$" + }, + "/customers/:customer/:post": { + "file": "pages/customers/[customer]/[post].js", + "regex": "^\/customers\/([^\/]+?)\/([^\/]+?)(?:\/)?$" + }, + "/customers/:customer/profile": { + "file": "pages/customers/[customer]/profile", + "regex": "^\/customers\/([^\/]+?)\/profile(?:\/)?$" + } + }, + "nonDynamic": { + "/": "pages/index.js", + "/customers": "pages/customers/index.js", + "/customers/new": "pages/customers/new.js" + } + }, + "html": { + "/terms": "pages/terms.html" + } + }, + "publicFiles": { + "/favicon.ico": "favicon.ico", + "/manifest.json": "manifest.json" + } +} diff --git a/packages/serverless-nextjs-component/__tests__/fixtures/built-artifact/pages/[root].js b/packages/serverless-nextjs-component/__tests__/fixtures/built-artifact/pages/[root].js new file mode 100644 index 0000000000..4256111021 --- /dev/null +++ b/packages/serverless-nextjs-component/__tests__/fixtures/built-artifact/pages/[root].js @@ -0,0 +1,5 @@ +module.exports = { + render: (req, res) => { + res.end("pages/[root].js"); + } +}; diff --git a/packages/serverless-nextjs-component/__tests__/fixtures/built-artifact/pages/_error.js b/packages/serverless-nextjs-component/__tests__/fixtures/built-artifact/pages/_error.js new file mode 100644 index 0000000000..d9257a2e61 --- /dev/null +++ b/packages/serverless-nextjs-component/__tests__/fixtures/built-artifact/pages/_error.js @@ -0,0 +1,5 @@ +module.exports = { + render: (req, res) => { + res.end("pages/_error.js"); + } +}; diff --git a/packages/serverless-nextjs-component/__tests__/fixtures/built-artifact/pages/api/getCustomers.js b/packages/serverless-nextjs-component/__tests__/fixtures/built-artifact/pages/api/getCustomers.js new file mode 100644 index 0000000000..54ee2e9450 --- /dev/null +++ b/packages/serverless-nextjs-component/__tests__/fixtures/built-artifact/pages/api/getCustomers.js @@ -0,0 +1,5 @@ +module.exports = { + default: (req, res) => { + res.end("pages/api/getCustomers"); + } +}; diff --git a/packages/serverless-nextjs-component/__tests__/fixtures/built-artifact/pages/blog/[id].js b/packages/serverless-nextjs-component/__tests__/fixtures/built-artifact/pages/blog/[id].js new file mode 100644 index 0000000000..5b9e614bec --- /dev/null +++ b/packages/serverless-nextjs-component/__tests__/fixtures/built-artifact/pages/blog/[id].js @@ -0,0 +1,5 @@ +module.exports = { + render: (req, res) => { + res.end("pages/blog/[id].js"); + } +}; diff --git a/packages/serverless-nextjs-component/__tests__/fixtures/built-artifact/pages/customers/[customer].js b/packages/serverless-nextjs-component/__tests__/fixtures/built-artifact/pages/customers/[customer].js new file mode 100644 index 0000000000..6ec7762fd5 --- /dev/null +++ b/packages/serverless-nextjs-component/__tests__/fixtures/built-artifact/pages/customers/[customer].js @@ -0,0 +1,5 @@ +module.exports = { + render: (req, res) => { + res.end("pages/customers/[customer].js"); + } +}; diff --git a/packages/serverless-nextjs-component/__tests__/fixtures/built-artifact/pages/customers/[customer]/[post].js b/packages/serverless-nextjs-component/__tests__/fixtures/built-artifact/pages/customers/[customer]/[post].js new file mode 100644 index 0000000000..e6032eccaf --- /dev/null +++ b/packages/serverless-nextjs-component/__tests__/fixtures/built-artifact/pages/customers/[customer]/[post].js @@ -0,0 +1,5 @@ +module.exports = { + render: (req, res) => { + res.end("pages/customers/[customer]/[post].js"); + } +}; diff --git a/packages/serverless-nextjs-component/__tests__/fixtures/built-artifact/pages/customers/[customer]/profile.js b/packages/serverless-nextjs-component/__tests__/fixtures/built-artifact/pages/customers/[customer]/profile.js new file mode 100644 index 0000000000..7fd369d285 --- /dev/null +++ b/packages/serverless-nextjs-component/__tests__/fixtures/built-artifact/pages/customers/[customer]/profile.js @@ -0,0 +1,5 @@ +module.exports = { + render: (req, res) => { + res.end("pages/[customers]/[customer]/profile.js"); + } +}; diff --git a/packages/serverless-nextjs-component/__tests__/fixtures/built-artifact/pages/customers/index.js b/packages/serverless-nextjs-component/__tests__/fixtures/built-artifact/pages/customers/index.js new file mode 100644 index 0000000000..80d58e121f --- /dev/null +++ b/packages/serverless-nextjs-component/__tests__/fixtures/built-artifact/pages/customers/index.js @@ -0,0 +1,5 @@ +module.exports = { + render: (req, res) => { + res.end("pages/customers/index.js"); + } +}; diff --git a/packages/serverless-nextjs-component/__tests__/fixtures/built-artifact/pages/customers/new.js b/packages/serverless-nextjs-component/__tests__/fixtures/built-artifact/pages/customers/new.js new file mode 100644 index 0000000000..82ad064ff8 --- /dev/null +++ b/packages/serverless-nextjs-component/__tests__/fixtures/built-artifact/pages/customers/new.js @@ -0,0 +1,5 @@ +module.exports = { + render: (req, res) => { + res.end("pages/customers/new.js"); + } +}; diff --git a/packages/serverless-nextjs-component/__tests__/fixtures/built-artifact/pages/index.js b/packages/serverless-nextjs-component/__tests__/fixtures/built-artifact/pages/index.js new file mode 100644 index 0000000000..3c36374e29 --- /dev/null +++ b/packages/serverless-nextjs-component/__tests__/fixtures/built-artifact/pages/index.js @@ -0,0 +1,5 @@ +module.exports = { + render: (req, res) => { + res.end("pages/index.js"); + } +}; diff --git a/packages/serverless-nextjs-component/__tests__/fixtures/built-artifact/pages/terms.html b/packages/serverless-nextjs-component/__tests__/fixtures/built-artifact/pages/terms.html new file mode 100644 index 0000000000..090bb0e457 --- /dev/null +++ b/packages/serverless-nextjs-component/__tests__/fixtures/built-artifact/pages/terms.html @@ -0,0 +1,3 @@ + + TERMS + diff --git a/packages/serverless-nextjs-component/__tests__/fixtures/manifest.json b/packages/serverless-nextjs-component/__tests__/fixtures/manifest.json new file mode 100644 index 0000000000..ae6ed7e9b3 --- /dev/null +++ b/packages/serverless-nextjs-component/__tests__/fixtures/manifest.json @@ -0,0 +1,50 @@ +{ + "cloudFrontOrigins": { + "ssrApi": { + "domainName": "ssr-api.execute-api.us-east-1.amazonaws.com" + }, + "staticOrigin": { + "domainName": "my-bucket.s3.amazonaws.com" + } + }, + "pages": { + "ssr": { + "dynamic": { + "/:root": { + "file": "pages/[root].js", + "regex": "/^/([^/]+?)(?:/)?$/i" + }, + "/blog/:id": { + "file": "pages/blog/[id].js", + "regex": "/^/blog/([^/]+?)(?:/)?$/i" + }, + "/customers/:customer": { + "file": "pages/customers/[customer].js", + "regex": "/^/customers/([^/]+?)(?:/)?$/i" + }, + "/customers/:customer/:post": { + "file": "/customers/:customer/:post", + "regex": "/^/customers/([^/]+?)/([^/]+?)(?:/)?$/i" + }, + "/customers/:customer/profile": { + "file": "pages/customers/[customer]/profile.js", + "regex": "/^/customers/([^/]+?)/profile(?:/)?$/i" + } + }, + "nonDynamic": { + "/": "pages/index.js", + "/customers": "pages/customers/index.js", + "/customers/new": "pages/customers/new.js", + "/api/getCustomers": "pages/api/getCustomers.js", + "/_error":"pages/_error.js" + } + }, + "html": { + "/terms": "pages/terms.html" + } + }, + "publicFiles": { + "/favicon.ico": "favicon.ico", + "/manifest.json": "manifest.json" + } +} diff --git a/packages/serverless-nextjs-component/__tests__/fixtures/simple-app/.next/serverless/pages-manifest.json b/packages/serverless-nextjs-component/__tests__/fixtures/simple-app/.next/serverless/pages-manifest.json new file mode 100644 index 0000000000..aa925a8982 --- /dev/null +++ b/packages/serverless-nextjs-component/__tests__/fixtures/simple-app/.next/serverless/pages-manifest.json @@ -0,0 +1,14 @@ +{ + "/[root]": "pages/[root].js", + "/blog/[id]": "pages/blog/[id].js", + "/customers/[customer]": "pages/customers/[customer].js", + "/customers/[customer]/[post]": "pages/customers/[customer]/[post].js", + "/customers/new": "pages/customers/new.js", + "/customers/[customer]/profile": "pages/customers/[customer]/profile.js", + "/terms": "pages/terms.html", + "/about": "pages/about.html", + "/": "pages/index.js", + "/_app": "pages/_app.js", + "/_document": "pages/_document.js", + "/404": "pages/404.js" +} diff --git a/packages/serverless-nextjs-component/__tests__/fixtures/simple-app/.next/serverless/pages/about.html b/packages/serverless-nextjs-component/__tests__/fixtures/simple-app/.next/serverless/pages/about.html new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/serverless-nextjs-component/__tests__/fixtures/simple-app/.next/serverless/pages/blog.js b/packages/serverless-nextjs-component/__tests__/fixtures/simple-app/.next/serverless/pages/blog.js new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/serverless-nextjs-component/__tests__/fixtures/simple-app/.next/serverless/pages/customers/[post].js b/packages/serverless-nextjs-component/__tests__/fixtures/simple-app/.next/serverless/pages/customers/[post].js new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/serverless-nextjs-component/__tests__/fixtures/simple-app/.next/serverless/pages/terms.html b/packages/serverless-nextjs-component/__tests__/fixtures/simple-app/.next/serverless/pages/terms.html new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/serverless-nextjs-component/__tests__/fixtures/simple-app/public/favicon.ico b/packages/serverless-nextjs-component/__tests__/fixtures/simple-app/public/favicon.ico new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/serverless-nextjs-component/__tests__/fixtures/simple-app/public/sw.js b/packages/serverless-nextjs-component/__tests__/fixtures/simple-app/public/sw.js new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/serverless-nextjs-component/__tests__/fixtures/simple-app/serverless.yml b/packages/serverless-nextjs-component/__tests__/fixtures/simple-app/serverless.yml new file mode 100644 index 0000000000..90f1f0cff9 --- /dev/null +++ b/packages/serverless-nextjs-component/__tests__/fixtures/simple-app/serverless.yml @@ -0,0 +1,2 @@ +nextApp: + component: "../../../serverless" diff --git a/packages/serverless-nextjs-component/__tests__/lambda@edge-handler.test.js b/packages/serverless-nextjs-component/__tests__/lambda@edge-handler.test.js new file mode 100644 index 0000000000..5072884d09 --- /dev/null +++ b/packages/serverless-nextjs-component/__tests__/lambda@edge-handler.test.js @@ -0,0 +1,133 @@ +const { handler } = require("../lambda-at-edge-handler"); +const { createCloudFrontEvent } = require("../lib/test-utils"); + +jest.mock("../manifest.json", () => require("./fixtures/manifest.json"), { + virtual: true +}); + +const mockPageRequire = mockPagePath => { + jest.mock( + `../${mockPagePath}`, + () => require(`./fixtures/built-artifact/${mockPagePath}`), + { + virtual: true + } + ); +}; + +describe("Lambda@Edge", () => { + describe("Routing", () => { + it("serves optimised page from S3 static-pages folder", async () => { + const event = createCloudFrontEvent({ + uri: "/terms", + host: "mydistribution.cloudfront.net", + origin: { + s3: { + authMethod: "origin-access-identity", + domainName: "my-bucket.s3.amazonaws.com", + path: "" + } + } + }); + + const request = await handler(event, {}); + + expect(request.origin).toEqual({ + s3: { + authMethod: "origin-access-identity", + domainName: "my-bucket.s3.amazonaws.com", + path: "/static-pages" + } + }); + expect(request.uri).toEqual("/terms.html"); + }); + + it("serves public file from S3 /public folder", async () => { + const event = createCloudFrontEvent({ + uri: "/manifest.json", + host: "mydistribution.cloudfront.net", + origin: { + s3: { + authMethod: "origin-access-identity", + domainName: "my-bucket.s3.amazonaws.com", + path: "" + } + } + }); + + const request = await handler(event, {}); + + expect(request.origin).toEqual({ + s3: { + authMethod: "origin-access-identity", + domainName: "my-bucket.s3.amazonaws.com", + path: "/public" + } + }); + expect(request.uri).toEqual("/manifest.json"); + }); + }); + + it("renders page at the edge", async () => { + const event = createCloudFrontEvent({ + uri: "/customers", + host: "mydistribution.cloudfront.net", + origin: { + s3: { + domainName: "my-bucket.amazonaws.com" + } + } + }); + + mockPageRequire("pages/customers/index.js"); + + const response = await handler(event, {}); + + const decodedBody = new Buffer(response.body, "base64").toString("utf8"); + + expect(decodedBody).toEqual("pages/customers/index.js"); + expect(response.status).toEqual(200); + }); + + it("serves api request at the edge", async () => { + const event = createCloudFrontEvent({ + uri: "/api/getCustomers", + host: "mydistribution.cloudfront.net", + origin: { + s3: { + domainName: "my-bucket.amazonaws.com" + } + } + }); + + mockPageRequire("pages/api/getCustomers.js"); + + const response = await handler(event, {}); + + const decodedBody = new Buffer(response.body, "base64").toString("utf8"); + + expect(decodedBody).toEqual("pages/api/getCustomers"); + expect(response.status).toEqual(200); + }); + + it.only("renders 404 page if request path can't be matched to any page / api routes", async () => { + const event = createCloudFrontEvent({ + uri: "/page/does/not/exist", + host: "mydistribution.cloudfront.net", + origin: { + s3: { + domainName: "my-bucket.amazonaws.com" + } + } + }); + + mockPageRequire("pages/_error.js"); + + const response = await handler(event, {}); + + const decodedBody = new Buffer(response.body, "base64").toString("utf8"); + + expect(decodedBody).toEqual("pages/_error.js"); + expect(response.status).toEqual(200); + }); +}); diff --git a/packages/serverless-nextjs-component/__tests__/next-aws-cloudfront.request.test.js b/packages/serverless-nextjs-component/__tests__/next-aws-cloudfront.request.test.js new file mode 100644 index 0000000000..de0de91b92 --- /dev/null +++ b/packages/serverless-nextjs-component/__tests__/next-aws-cloudfront.request.test.js @@ -0,0 +1,192 @@ +const create = require("../next-aws-cloudfront"); + +describe("Request Tests", () => { + it("request url path", () => { + const { req } = create({ + request: { + uri: "/" + } + }); + + expect(req.url).toEqual("/"); + }); + + it("querystring /?x=42", () => { + const { req } = create({ + request: { + uri: "/", + querystring: "x=42" + } + }); + + expect(req.url).toEqual("/?x=42"); + }); + + // it("querystring /?x=åäö", () => { + // const {req} = create({ + // request: { + // uri: "/", + // querystring: "x=åäö" + // } + // }); + + // expect(req.url).toEqual("/?x=%C3%A5%C3%A4%C3%B6"); + // }); + + // it("querystring /?x=õ", () => { + // const {req} = create({ + // request: { + // uri: "/", + // querystring: "x=õ" + // } + // }); + + // expect(req.url).toEqual("/?x=%C3%B5"); + // }); + + // it("querystring with multiple values for same name /?x=1&x=2", () => { + // const {req} = create({ + // request: { + // uri: "/", + // querystring: "x=1&x=2" + // } + // }); + + // expect(req.url).toEqual("/?x=1&x=2"); + // }); + + // it("complicated querystring", () => { + // const { req } = create({ + // request: { + // uri: "/", + // querystring: "a=8&as=1&t=2&tk=1&url=https://example.com/õ" + // } + // }); + + // expect(req.url).toEqual( + // "/?url=https%3A%2F%2Fexample.com%2Ft%2Ft%3Fa%3D8%26as%3D1%26t%3D2%26tk%3D1%26url%3Dhttps%3A%2F%2Fexample.com%2F%C3%B5&clickSource=yes&category=cat" + // ); + // }); + + it("request method", () => { + const { req } = create({ + request: { + uri: "", + method: "GET" + } + }); + + expect(req.method).toEqual("GET"); + }); + + it("request headers", () => { + const { req } = create({ + request: { + uri: "", + headers: { + "x-custom-1": { + key: "x-cUstom-1", + value: "42" + }, + "x-custom-2": { + key: "x-custom-2", + value: "43" + } + } + } + }); + + expect(req.headers["x-custom-1"]).toEqual("42"); + expect(req.getHeader("x-custom-1")).toEqual("42"); + expect(req.headers["x-custom-2"]).toEqual("43"); + expect(req.getHeader("x-custom-2")).toEqual("43"); + + expect(req.getHeaders()).toEqual({ + "x-custom-1": "42", + "x-custom-2": "43" + }); + + expect(req.rawHeaders).toEqual(["x-cUstom-1", "42", "x-custom-2", "43"]); + }); + + it("text body", done => { + const { req } = create({ + request: { + uri: "", + body: { + data: "ok" + } + } + }); + + let data = ""; + + req.on("data", chunk => { + data += chunk; + }); + + req.on("end", () => { + expect(data).toEqual("ok"); + done(); + }); + }); + + it("text base64 body", done => { + const { req } = create({ + request: { + uri: "", + body: { + encoding: "base64", + data: Buffer.from("ok").toString("base64") + }, + headers: {} + } + }); + + let data = ""; + + req.on("data", chunk => { + data += chunk; + }); + + req.on("end", () => { + expect(data).toEqual("ok"); + done(); + }); + }); + + it("text body with encoding", done => { + const { req } = create({ + request: { + uri: "", + body: { + data: "åäöß" + }, + headers: {} + } + }); + + let data = ""; + + req.on("data", chunk => { + data += chunk; + }); + + req.on("end", () => { + expect(data).toEqual("åäöß"); + done(); + }); + }); + + it("connection", done => { + const { req } = create({ + request: { + uri: "", + headers: {} + } + }); + + expect(req.connection).toEqual({}); + done(); + }); +}); diff --git a/packages/serverless-nextjs-component/__tests__/next-aws-cloudfront.response.test.js b/packages/serverless-nextjs-component/__tests__/next-aws-cloudfront.response.test.js new file mode 100644 index 0000000000..e6c9da444f --- /dev/null +++ b/packages/serverless-nextjs-component/__tests__/next-aws-cloudfront.response.test.js @@ -0,0 +1,228 @@ +const create = require("../next-aws-cloudfront"); + +describe("Response Tests", () => { + it("statusCode writeHead 404", () => { + expect.assertions(1); + + const { responsePromise, res } = create({ + request: { + uri: "/", + headers: {} + } + }); + + res.writeHead(404); + res.end(); + + return responsePromise.then(response => { + expect(response.status).toEqual(404); + }); + }); + + it("statusCode statusCode=200", () => { + expect.assertions(1); + + const { res, responsePromise } = create({ + request: { + uri: "/", + headers: {} + } + }); + + res.statusCode = 200; + res.end(); + + return responsePromise.then(response => { + expect(response.status).toEqual(200); + }); + }); + + it("writeHead headers", () => { + expect.assertions(1); + + const { res, responsePromise } = create({ + request: { + uri: "/", + headers: {} + } + }); + + res.writeHead(200, { + "x-custom-1": "1", + "x-custom-2": "2" + }); + res.end(); + + return responsePromise.then(response => { + expect(response.headers).toEqual({ + "x-custom-1": [ + { + key: "x-custom-1", + value: "1" + } + ], + "x-custom-2": [ + { + key: "x-custom-2", + value: "2" + } + ] + }); + }); + }); + + it("writeHead ignores special CloudFront Headers", () => { + expect.assertions(1); + + const { res, responsePromise } = create({ + request: { + uri: "/", + headers: {} + } + }); + + const specialHeaders = { + "Accept-Encoding": "gzip", + "Content-Length": "1234", + "If-Modified-Since": "Wed, 21 Oct 2015 07:28:00 GMT", + "If-None-Match": "*", + "If-Range": "Wed, 21 Oct 2015 07:28:00 GMT", + "If-Unmodified-Since": "Wed, 21 Oct 2015 07:28:00 GMT", + "Transfer-Encoding": "compress", + Via: "HTTP/1.1 GWA" + }; + + res.writeHead(200, specialHeaders); + res.end(); + + return responsePromise.then(response => { + expect(response.headers).toEqual({}); + }); + }); + + it("setHeader", () => { + const { res, responsePromise } = create({ + request: { + uri: "/", + headers: {} + } + }); + + res.setHeader("x-custom-1", "1"); + res.setHeader("x-custom-2", "2"); + res.end(); + + return responsePromise.then(response => { + expect(response.headers).toEqual({ + "x-custom-1": [ + { + key: "x-custom-1", + value: "1" + } + ], + "x-custom-2": [ + { + key: "x-custom-2", + value: "2" + } + ] + }); + }); + }); + + it("setHeader ignores special CloudFront headers", () => { + const { res, responsePromise } = create({ + request: { + uri: "/", + headers: {} + } + }); + + res.setHeader("Content-Length", "123"); + res.setHeader("x-custom-2", "2"); + res.end(); + + return responsePromise.then(response => { + expect(response.headers).toEqual({ + "x-custom-2": [ + { + key: "x-custom-2", + value: "2" + } + ] + }); + }); + }); + + it("setHeader + removeHeader", () => { + const { res, responsePromise } = create({ + request: { + uri: "/", + headers: {} + } + }); + + res.setHeader("x-custom-1", "1"); + res.setHeader("x-custom-2", "2"); + res.removeHeader("x-custom-1"); + res.end(); + + return responsePromise.then(response => { + expect(response.headers).toEqual({ + "x-custom-2": [ + { + key: "x-custom-2", + value: "2" + } + ] + }); + }); + }); + + it("getHeader/s", () => { + const { res } = create({ + request: { + path: "/", + headers: {} + } + }); + res.setHeader("x-custom-1", "1"); + res.setHeader("x-custom-2", "2"); + expect(res.getHeader("x-custom-1")).toEqual("1"); + expect(res.getHeaders()).toEqual({ + "x-custom-1": "1", + "x-custom-2": "2" + }); + }); + + it(`res.write('ok')`, () => { + const { res, responsePromise } = create({ + request: { + path: "/", + headers: {} + } + }); + + res.write("ok"); + res.end(); + + return responsePromise.then(response => { + expect(response.body).toEqual("b2s="); + }); + }); + + it(`res.end('ok')`, () => { + const { res, responsePromise } = create({ + request: { + path: "/", + headers: {} + } + }); + + res.end("ok"); + + return responsePromise.then(response => { + expect(response.body).toEqual("b2s="); + }); + }); +}); diff --git a/packages/serverless-nextjs-component/arch-white.png b/packages/serverless-nextjs-component/arch-white.png new file mode 100644 index 0000000000000000000000000000000000000000..044a89cb40de29a019efe2fcd5854f729cd84027 GIT binary patch literal 122564 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
)8sNIEhqz7A*(3!ml7rg6bUFF)Z0pwW zS2!((a`2C7Q?DI(+t8p~N*EpnjPbz_e!t`OBYCFgH~isk3Elk#`b|wnvS3fQ()JV- z4`pmOd0Y>x;j(imlk=6DbkdHu-BQ69&BH;zD$g6?V9 zTV>jT_Mo&HtvbD&Kq|^@C+;goBf_SoZ`8|576OH>Ab-g0O_n}tGZ_CNTz(0PFCGlWmanK*Adv-|X02!r z@xn4TsRZ>N;!ub4m#a+Ck!08U{mX^;>RIe0WN-^QISd_5r!T9jgDR`M0P96SxCGsa z2FM_(zWx4dK$76PO9LfW$+^rwlRocsXvvH!E!I_ia>Y#GiODzJ@b*Fo`gv5Q9B1_x z(nPvo;6~kC+42nG3;6Su+7fX+-Bla9tKYUgz1OyuAtJ~Y_Z=-%rsfUBnG3*8Ci=;S z3|wT@WfNXwf3tJ5gEbeKOdG*!#uU>ZBr3)$4z#n5zoRzDHX^AV%h%*FpTxR6MZgmO z_CQO&W;EX@>vXPMK!4ngFt2Ulx{w)j@s3C?!S8Q_`J+M|_V|h&fjm5YE8jH_CwD4$ z9`P9cfytRn&pKMvF!{%py93@TSN!&(eQh#Qhv6jwh2K`y8Kc>~Ao0hpYwS@*Wvpfh zeR$}r#ey`<1=??{DI!c&1~~o zO6yM-F^PYC7gCJ=I*Ug-|Ck$@L$}CpY0xa1A}#&F`jXoW846vld5d5>6lZLc<%L!s zhCI81iWq>U0{KuWuh!fHkBwl+lA4by8wE0Y2MLKcCC#b8*&%{n=B3k5g48uC z$fp(O@hH7P5i&5|l`O?KiWrI@QS>1-natr6J74YX>;`vaD8lX&6nh5Xm2Mmo02(Ym+}(VERS!6@sBY%x*-R z(oGx<9MB^#3A^{G2}i`rewX*h8uiQ#Re541WU{!8Z>>YXMTe}m{5T%`@KK

Z65T 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

+YNMgVp|f9!U3Ab8mjxTWA^ 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Μ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%0A>-$`kS4eH^%_XtIB9RQdFLFrwQ}k5b>GFREW-u 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 P^UrcpAjv8T { + // important to require the sdk here rather than a top level import + // this is to prevent the app from requiring the aws-sdk client side. + const AWS = require("aws-sdk"); + + // dynamodb is replicated across us-west-2 and eu-west-2 + // use us-west-2 for us regions or eu-west-2 for eu regions + // you can tweak this to suit your needs + const edgeRegion = process.env.AWS_REGION || "us-west-2"; + const dynamoDbRegion = edgeRegion.startsWith("us") + ? "us-west-2" + : "eu-west-2"; + + const options = { + convertEmptyValues: true, + region: dynamoDbRegion + }; + + const client = process.env.LOCAL_DYNAMO_DB_ENDPOINT + ? new AWS.DynamoDB.DocumentClient({ + ...options, + endpoint: process.env.LOCAL_DYNAMO_DB_ENDPOINT + }) + : new AWS.DynamoDB.DocumentClient(options); + + return client; +}; + +module.exports = { + readTodos: async () => { + const { Items } = await getDynamoDBClient() + .scan({ + TableName + }) + .promise(); + + return Items; + }, + getTodo: async todoId => { + const { Items } = await getDynamoDBClient() + .scan({ + TableName + }) + .promise(); + + const todo = Items.find(todo => todo.todoId == todoId); + + return todo; + }, + createTodo: async todoDescription => { + await getDynamoDBClient() + .put({ + TableName, + Item: { + todoId: Date.now(), + todoDescription + } + }) + .promise(); + } +}; diff --git a/packages/serverless-nextjs-component/examples/dynamodb-crud/data/index.js b/packages/serverless-nextjs-component/examples/dynamodb-crud/data/index.js new file mode 100644 index 0000000000..bc4b2901eb --- /dev/null +++ b/packages/serverless-nextjs-component/examples/dynamodb-crud/data/index.js @@ -0,0 +1 @@ +module.exports = require('./dynamodb') \ No newline at end of file diff --git a/packages/serverless-nextjs-component/examples/dynamodb-crud/data/mock.js b/packages/serverless-nextjs-component/examples/dynamodb-crud/data/mock.js new file mode 100644 index 0000000000..1eb7e55590 --- /dev/null +++ b/packages/serverless-nextjs-component/examples/dynamodb-crud/data/mock.js @@ -0,0 +1,16 @@ +module.exports = { + readTodos: async () => { + return [ + { todoId: 1, todoDescription: "cleaning" }, + { todoId: 2, todoDescription: "mop" }, + { todoId: 3, todoDescription: "study" }, + { todoId: 4, todoDescription: "cinema" } + ]; + }, + getTodo: async (todoId) => { + return { todoId: 1, todoDescription: "cleaning" }; + }, + createTodo: async (todoDescription) => { + return {}; + } +} \ No newline at end of file diff --git a/packages/serverless-nextjs-component/examples/dynamodb-crud/infrastructure/provisionTable.js b/packages/serverless-nextjs-component/examples/dynamodb-crud/infrastructure/provisionTable.js new file mode 100644 index 0000000000..6417cd12a2 --- /dev/null +++ b/packages/serverless-nextjs-component/examples/dynamodb-crud/infrastructure/provisionTable.js @@ -0,0 +1,58 @@ +var AWS = require("aws-sdk"); + +require("dotenv").config(); + +AWS.config.update({ + region: "us-west-2", + endpoint: process.env.LOCAL_DYNAMO_DB_ENDPOINT +}); + +let dynamodb = new AWS.DynamoDB(); + +let params = { + TableName: "Todos", + KeySchema: [ + { AttributeName: "todoId", KeyType: "HASH" } // Partition key + ], + AttributeDefinitions: [{ AttributeName: "todoId", AttributeType: "N" }], + // streams must be enabled for replicating the table + StreamSpecification: { + StreamEnabled: true, + StreamViewType: "NEW_AND_OLD_IMAGES" + }, + BillingMode: "PAY_PER_REQUEST" +}; + +(async function() { + await dynamodb.createTable(params).promise(); + + console.log("Created table in us-west-2"); + + if (!process.env.LOCAL_DYNAMO_DB_ENDPOINT) { + // only replicate in production + // dynamodb local doesn't support this operation + + AWS.config.update({ region: "eu-west-2" }); + + dynamodb = new AWS.DynamoDB(); + + await dynamodb.createTable(params).promise(); + + console.log("Created table in eu-west-2"); + + const createGlobalTableParams = { + GlobalTableName: "Todos", + ReplicationGroup: [ + { + RegionName: "us-west-2" + }, + { + RegionName: "eu-west-2" + } + ] + }; + + await dynamodb.createGlobalTable(createGlobalTableParams).promise(); + console.log("Replication completed"); + } +})(); diff --git a/packages/serverless-nextjs-component/examples/dynamodb-crud/next.config.js b/packages/serverless-nextjs-component/examples/dynamodb-crud/next.config.js new file mode 100644 index 0000000000..cb8f9188d0 --- /dev/null +++ b/packages/serverless-nextjs-component/examples/dynamodb-crud/next.config.js @@ -0,0 +1,13 @@ +module.exports = { + target: "serverless", + webpack: config => { + if (!process.env.BUNDLE_AWS_SDK) { + config.externals = config.externals || []; + config.externals.push({ "aws-sdk": "aws-sdk" }); + } else { + console.warn("Bundling aws-sdk. Only doing this in development mode"); + } + + return config; + } +}; diff --git a/packages/serverless-nextjs-component/examples/dynamodb-crud/package.json b/packages/serverless-nextjs-component/examples/dynamodb-crud/package.json new file mode 100644 index 0000000000..9dfff4b8f4 --- /dev/null +++ b/packages/serverless-nextjs-component/examples/dynamodb-crud/package.json @@ -0,0 +1,25 @@ +{ + "name": "nextjs-dynamodb-crud", + "version": "1.0.0", + "description": "", + "main": "index.js", + "scripts": { + "dev:infra": "LOCAL_DYNAMO_DB_ENDPOINT=\"http://localhost:8000\" npm run infra", + "dev": "BUNDLE_AWS_SDK=1 AWS_ACCESS_KEY_ID=1 AWS_SECRET_ACCESS_KEY=1 LOCAL_DYNAMO_DB_ENDPOINT=\"http://localhost:8000\" next dev", + "infra": "node infrastructure/provisionTable", + "deploy:up": "serverless", + "deploy:down": "serverless remove" + }, + "author": "Daniel Conde Marin ", + "license": "MIT", + "dependencies": { + "aws-sdk": "^2.521.0", + "next": "^9.0.5", + "react": "^16.9.0", + "react-dom": "^16.9.0" + }, + "devDependencies": { + "dotenv": "^8.1.0", + "serverless": "^1.51.0" + } +} diff --git a/packages/serverless-nextjs-component/examples/dynamodb-crud/pages/api/todos/[id].js b/packages/serverless-nextjs-component/examples/dynamodb-crud/pages/api/todos/[id].js new file mode 100644 index 0000000000..b8453fa818 --- /dev/null +++ b/packages/serverless-nextjs-component/examples/dynamodb-crud/pages/api/todos/[id].js @@ -0,0 +1,7 @@ +import data from '../../../data' + +export default async (req, res) => { + console.log('/api/todos/[id] HIT!') + const todo = await data.getTodo(req.query.id) + res.status(200).json(todo); +}; \ No newline at end of file diff --git a/packages/serverless-nextjs-component/examples/dynamodb-crud/pages/api/todos/index.js b/packages/serverless-nextjs-component/examples/dynamodb-crud/pages/api/todos/index.js new file mode 100644 index 0000000000..af1fb6f161 --- /dev/null +++ b/packages/serverless-nextjs-component/examples/dynamodb-crud/pages/api/todos/index.js @@ -0,0 +1,6 @@ +import data from '../../../data' + +export default async (req, res) => { + console.log('/api/todos HIT!') + res.status(200).json(await data.readTodos()); +}; \ No newline at end of file diff --git a/packages/serverless-nextjs-component/examples/dynamodb-crud/pages/api/todos/new.js b/packages/serverless-nextjs-component/examples/dynamodb-crud/pages/api/todos/new.js new file mode 100644 index 0000000000..7fd54e2c38 --- /dev/null +++ b/packages/serverless-nextjs-component/examples/dynamodb-crud/pages/api/todos/new.js @@ -0,0 +1,8 @@ +import data from "../../../data"; + +export default async (req, res) => { + console.log("/api/todos/new HIT!"); + const todoDescription = JSON.parse(req.body).todoDescription; + await data.createTodo(todoDescription); + res.status(200).end("OK"); +}; diff --git a/packages/serverless-nextjs-component/examples/dynamodb-crud/pages/index.js b/packages/serverless-nextjs-component/examples/dynamodb-crud/pages/index.js new file mode 100644 index 0000000000..1dc3841fcb --- /dev/null +++ b/packages/serverless-nextjs-component/examples/dynamodb-crud/pages/index.js @@ -0,0 +1 @@ +export { default } from "./todos/list"; diff --git a/packages/serverless-nextjs-component/examples/dynamodb-crud/pages/todos/details/[id].js b/packages/serverless-nextjs-component/examples/dynamodb-crud/pages/todos/details/[id].js new file mode 100644 index 0000000000..f287e69c78 --- /dev/null +++ b/packages/serverless-nextjs-component/examples/dynamodb-crud/pages/todos/details/[id].js @@ -0,0 +1,35 @@ +import data from '../../../data' +import Link from "next/link" + +function TodoDetails(props) { + const { todo } = props; + + return +} + +TodoDetails.getInitialProps = async ({ req, query }) => { + if (req) { + // this is server side + // is fine to use aws-sdk here + const todo = await data.getTodo(query.id) + return { + todo + }; + } else { + // we are client side + // fetch via api + const response = await fetch(`/api/todos/${query.id}`) + const todo = await response.json() + return { todo } + } +} + +export default TodoDetails \ No newline at end of file diff --git a/packages/serverless-nextjs-component/examples/dynamodb-crud/pages/todos/list.js b/packages/serverless-nextjs-component/examples/dynamodb-crud/pages/todos/list.js new file mode 100644 index 0000000000..bc3415dd64 --- /dev/null +++ b/packages/serverless-nextjs-component/examples/dynamodb-crud/pages/todos/list.js @@ -0,0 +1,39 @@ +import { Fragment } from "react" +import Link from "next/link" +import data from '../../data' + +function ListTodos({ todos }) { + return + +
+ + New Todo + +
+
+} + +ListTodos.getInitialProps = async ({ req }) => { + if (req) { + // this is server side + // is fine to use aws-sdk here + return { + todos: await data.readTodos() + }; + } else { + // we are client side + // fetch via api + const response = await fetch('/api/todos') + return { todos: await response.json() } + } +} + +export default ListTodos \ No newline at end of file diff --git a/packages/serverless-nextjs-component/examples/dynamodb-crud/pages/todos/new.js b/packages/serverless-nextjs-component/examples/dynamodb-crud/pages/todos/new.js new file mode 100644 index 0000000000..f04b34e7f8 --- /dev/null +++ b/packages/serverless-nextjs-component/examples/dynamodb-crud/pages/todos/new.js @@ -0,0 +1,34 @@ +import { useState } from "react"; +import { useRouter } from "next/router"; + +function NewTodo() { + const router = useRouter(); + const [todoDescription, setTodoDescription] = useState(""); + + const handleSubmit = async event => { + event.preventDefault(); + + await fetch("/api/todos/new", { + method: "POST", + body: JSON.stringify({ todoDescription }) + }); + + router.push("/todos/list"); + }; + + return ( +
+ +
+ +
+ +
+ ); +} + +export default NewTodo; diff --git a/packages/serverless-nextjs-component/examples/dynamodb-crud/public/favicon.ico b/packages/serverless-nextjs-component/examples/dynamodb-crud/public/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..006c66dcb3b38239f8b2f8dc53b8b21568baab63 GIT binary patch literal 318 zcmZQzU<5(|0RbS%!l1#(z#zuJz@P!d0zj+)#2|4HXaJKC0wf0p#s496)Nuxe_$v(m z{{#7{4;UD7K0w3?kWh1gw&DaV4iG6v5fH7UA}FGy#K5HFC@AQpq+o0!;v(p53$SK~#9!?V8_f990y@_o*)h`;=hc0;Ws)!&*&$yGvr!tx1b*61HJ& zqo&y6t_49V7*HEpnr>7O0zyGh6iSPNXhB+NRhr;~uRBQofo|XX7kqk8n9=QIvfka? zIo^l)!iNm!+;h)&&Yf&_m*jGpGG)q?DU-E!&atVl#zNnD9`?Nlp3pSZ#arqF=&w?L zrV2jNU*l@(1IWKi)4)KD!@fL~`EwM+lXy$L+4gfF`1Y%*=4;nk2zk_U{eSb1m(&OF z+&kbisSjZA3<&#X{CN#9ehQJV)SK;}0l~M|05xBS-Uh+90jT*Zya|GD15oodG!4Q= z_9#uW*+*Yi8aWL@xAnytdQ5%8Q1{7~{pq~{LYF7sTdEMO?jb*0o`h&$TU`3;NTU@H zI<70zW9k}GJ62(3tjyC%``Y5lSI0Uw1wvBp=oHm)bIS3!#7s>P)&@yy()8t2$4`Q= zCO$*OQ| zNjW)PlMBK%LF@H@oqV*fEuHvss>%ci>*eLtE0Z*$b%wSlujR{`PLG4oZjHI&Ez>8M z6;6%vR8B!QzMSZ-;~?ZblbWwHuY=&*0MvY)JqChr15oo-Jqm(v15opIehdWP2B7Ba z{ntS7Z2)S%J~#rxM)tT+a{qmR3tv|HumnQ4^|Pb&nEJ+rSKWReuu)&u`sfu9x;*(_ zQyYYP1g%d(w685LeRZUdUk0I@lQ(q@sr_VxmAT<3-yTQ%+TzMr$GSKILQ?M25vp^g zwI6yUW@>`4Hb`2NrZ1$T);_O+!GUrzN!0fhDPi{{i# zz7ef6v^{w(U(WR9iy*W;%|W)9HM7Fv0iEvyYD82eH}|n)-DjV1`zM}^KEEF-Pf->K+qaMyx(89ST?ZAFD$A1y0aYwtpV8fQ}cCq zfTn@Fc?uc>SnV~?{>JX@pct-ukh-Bi@?8Br51ulg`T+hmZ%voY5SF&lG~fgGxA9=9 lpLy|?%akcorc9Zv^%(x|7 { + const request = event.Records[0].cf.request; + const uri = request.uri; + const { pages, publicFiles } = manifest; + + const isStaticPage = pages.html[uri]; + const isPublicFile = publicFiles[uri]; + + if (isStaticPage || isPublicFile) { + request.origin.s3.path = isStaticPage ? "/static-pages" : "/public"; + + if (isStaticPage) { + request.uri = request.uri + ".html"; + } + + return request; + } + + const pagePath = router(manifest)(uri); + + const page = require(`./${pagePath}`); + const { req, res, responsePromise } = cloudFrontCompat(event.Records[0].cf); + if (page.render) { + page.render(req, res); + } else { + page.default(req, res); + } + const response = await responsePromise; + return response; +}; diff --git a/packages/serverless-nextjs-component/lib/expressifyDynamicRoute.js b/packages/serverless-nextjs-component/lib/expressifyDynamicRoute.js new file mode 100644 index 0000000000..4af5bbbe2b --- /dev/null +++ b/packages/serverless-nextjs-component/lib/expressifyDynamicRoute.js @@ -0,0 +1,4 @@ +// converts a nextjs dynamic route /[param]/ to express style /:param/ +module.exports = dynamicRoute => { + return dynamicRoute.replace(/\[(?.*?)]/g, ":$"); +}; diff --git a/packages/serverless-nextjs-component/lib/isDynamicRoute.js b/packages/serverless-nextjs-component/lib/isDynamicRoute.js new file mode 100644 index 0000000000..6c37e07d28 --- /dev/null +++ b/packages/serverless-nextjs-component/lib/isDynamicRoute.js @@ -0,0 +1,4 @@ +module.exports = route => { + // Identify /[param]/ in route string + return /\/\[[^\/]+?\](?=\/|$)/.test(route); +}; diff --git a/packages/serverless-nextjs-component/lib/pathToRegexStr.js b/packages/serverless-nextjs-component/lib/pathToRegexStr.js new file mode 100644 index 0000000000..0003b9292d --- /dev/null +++ b/packages/serverless-nextjs-component/lib/pathToRegexStr.js @@ -0,0 +1,6 @@ +const pathToRegexp = require("path-to-regexp"); + +module.exports = path => + pathToRegexp(path) + .toString() + .replace(/\/(.*)\/\i/, "$1"); diff --git a/packages/serverless-nextjs-component/lib/test-utils.js b/packages/serverless-nextjs-component/lib/test-utils.js new file mode 100644 index 0000000000..3e2b02c80a --- /dev/null +++ b/packages/serverless-nextjs-component/lib/test-utils.js @@ -0,0 +1,24 @@ +const createCloudFrontEvent = ({ uri, host, origin }) => ({ + Records: [ + { + cf: { + request: { + uri, + headers: { + host: [ + { + key: "host", + value: host + } + ] + }, + origin + } + } + } + ] +}); + +module.exports = { + createCloudFrontEvent +}; diff --git a/packages/serverless-nextjs-component/next-aws-cloudfront.js b/packages/serverless-nextjs-component/next-aws-cloudfront.js new file mode 100644 index 0000000000..1b5696cb26 --- /dev/null +++ b/packages/serverless-nextjs-component/next-aws-cloudfront.js @@ -0,0 +1,133 @@ +const Stream = require("stream"); + +const readOnlyHeaders = { + "accept-encoding": true, + "content-length": true, + "if-modified-since": true, + "if-none-match": true, + "if-range": true, + "if-unmodified-since": true, + "transfer-encoding": true, + via: true +}; + +const toCloudFrontHeaders = headers => { + const result = {}; + + Object.keys(headers).forEach(headerName => { + if (!readOnlyHeaders[headerName.toLowerCase()]) { + result[headerName] = [ + { + key: headerName, + value: headers[headerName].toString() + } + ]; + } + }); + + return result; +}; + +module.exports = event => { + const { request: cfRequest } = event; + + const response = { + body: Buffer.from(""), + bodyEncoding: "base64", + status: 200, + statusDescription: "OK", + headers: {} + }; + + const req = new Stream.Readable(); + req.url = cfRequest.uri; + req.method = cfRequest.method; + req.rawHeaders = []; + req.headers = {}; + req.connection = {}; + + if (cfRequest.querystring) { + req.url = req.url + `?` + cfRequest.querystring; + } + + const headers = cfRequest.headers || {}; + + for (const lowercaseKey of Object.keys(headers)) { + const header = headers[lowercaseKey]; + + req.rawHeaders.push(header.key); + req.rawHeaders.push(header.value); + req.headers[lowercaseKey] = header.value; + } + + req.getHeader = name => { + return req.headers[name.toLowerCase()]; + }; + + req.getHeaders = () => { + return req.headers; + }; + + if (cfRequest.body && cfRequest.body.data) { + req.push( + cfRequest.body.data, + cfRequest.body.encoding ? "base64" : undefined + ); + } + + req.push(null); + + const res = new Stream(); + + Object.defineProperty(res, "statusCode", { + get() { + return response.statusCode; + }, + set(statusCode) { + response.statusCode = statusCode; + } + }); + + res.headers = {}; + res.writeHead = (status, headers) => { + response.status = status; + if (headers) { + res.headers = Object.assign(res.headers, headers); + } + }; + res.write = chunk => { + response.body = Buffer.concat([ + response.body, + Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk) + ]); + }; + + const responsePromise = new Promise(resolve => { + res.end = text => { + if (text) res.write(text); + response.body = Buffer.from(response.body).toString("base64"); + response.headers = toCloudFrontHeaders(res.headers); + + resolve(response); + }; + }); + + res.setHeader = (name, value) => { + res.headers[name] = value; + }; + res.removeHeader = name => { + delete res.headers[name]; + }; + res.getHeader = name => { + return res.headers[name.toLowerCase()]; + }; + res.getHeaders = () => { + return res.headers; + }; + + return { + req, + res, + responsePromise + }; +}; diff --git a/packages/serverless-nextjs-component/package.json b/packages/serverless-nextjs-component/package.json new file mode 100644 index 0000000000..6e24b8c1b1 --- /dev/null +++ b/packages/serverless-nextjs-component/package.json @@ -0,0 +1,39 @@ +{ + "name": "serverless-nextjs-component", + "version": "1.0.0", + "description": "Serverless nextjs powered by Serverless Components", + "main": "serverless.js", + "repository": { + "type": "git", + "url": "git+https://github.com/danielcondemarin/serverless-nextjs-plugin.git" + }, + "keywords": [ + "serverless", + "component", + "nextjs" + ], + "author": "Daniel Conde Marin ", + "license": "ISC", + "bugs": { + "url": "https://github.com/danielcondemarin/serverless-nextjs-plugin/issues" + }, + "homepage": "https://github.com/danielcondemarin/serverless-nextjs-plugin#readme", + "dependencies": { + "@serverless/aws-api-gateway": "^1.0.1", + "@serverless/aws-cloudfront": "git://github.com/danielcondemarin/aws-cloudfront.git#add-allowed-http-methods", + "@serverless/aws-lambda": "git://github.com/serverless-components/aws-lambda.git", + "@serverless/aws-s3": "git://github.com/serverless-components/aws-s3.git", + "@serverless/backend": "^3.3.0", + "@serverless/core": "^1.0.0", + "execa": "^2.0.4", + "fs-extra": "^8.1.0", + "next-aws-lambda": "^2.3.2", + "path-to-regexp": "^3.0.0" + }, + "devDependencies": { + "jest": "^24.8.0", + "next": "^9.0.4", + "react": "^16.9.0", + "react-dom": "^16.9.0" + } +} diff --git a/packages/serverless-nextjs-component/router-perf.js b/packages/serverless-nextjs-component/router-perf.js new file mode 100644 index 0000000000..70dcfa52ef --- /dev/null +++ b/packages/serverless-nextjs-component/router-perf.js @@ -0,0 +1,26 @@ +const performance = require("perf_hooks").performance; +const createRouter = require("./router"); +const manifest = { + pages: { + ssr: { + dynamic: {}, + nonDynamic: {} + } + } +}; + +for (let i = 0; i < 2000; i++) { + const route = `/blog/${i}/[id]`; + manifest.pages.ssr.dynamic[route] = { + file: "pages/blog/[id].js", + regex: "^/blog/([^/]+?)(?:/)?$" + }; +} + +const router = createRouter(manifest); + +const t1 = performance.now(); +router("/xyz"); +const t2 = performance.now(); + +console.log(t2 - t1); diff --git a/packages/serverless-nextjs-component/router.js b/packages/serverless-nextjs-component/router.js new file mode 100644 index 0000000000..a6e65074df --- /dev/null +++ b/packages/serverless-nextjs-component/router.js @@ -0,0 +1,32 @@ +module.exports = manifest => { + const { + pages: { + ssr: { dynamic, nonDynamic }, + html + } + } = manifest; + + return path => { + if (nonDynamic[path]) { + return nonDynamic[path]; + } + + if (html[path]) { + return html[path]; + } + + for (route in dynamic) { + const { file, regex } = dynamic[route]; + + const re = new RegExp(regex, "i"); + const pathMatchesRoute = re.test(path); + + if (pathMatchesRoute) { + return file; + } + } + + // path didn't match any route, return error page + return "pages/_error.js"; + }; +}; diff --git a/packages/serverless-nextjs-component/serverless.js b/packages/serverless-nextjs-component/serverless.js new file mode 100644 index 0000000000..4e55b1fc0f --- /dev/null +++ b/packages/serverless-nextjs-component/serverless.js @@ -0,0 +1,195 @@ +const { Component } = require("@serverless/core"); +const fse = require("fs-extra"); +const path = require("path"); +const execa = require("execa"); +const isDynamicRoute = require("./lib/isDynamicRoute"); +const expressifyDynamicRoute = require("./lib/expressifyDynamicRoute"); +const pathToRegexStr = require("./lib/pathToRegexStr"); +const { LAMBDA_AT_EDGE_BUILD_DIR } = require("./constants"); + +class NextjsComponent extends Component { + async default(inputs = {}) { + return this.build(inputs); + } + + readPublicFiles() { + return fse.readdir("./public"); + } + + readPagesManifest() { + return fse.readJSON("./.next/serverless/pages-manifest.json"); + } + + // do not confuse the component build manifest with nextjs pages manifest! + // they have different formats and data + getBlankBuildManifest() { + return { + pages: { + ssr: { + dynamic: {}, + nonDynamic: {} + }, + html: {} + }, + publicFiles: {}, + cloudFrontOrigins: {} + }; + } + + buildLambdaAtEdge(buildManifest) { + const copyPromises = [ + fse.copy( + path.join(__dirname, "lambda-at-edge-handler.js"), + `./${LAMBDA_AT_EDGE_BUILD_DIR}/index.js` + ), + fse.writeJson( + `./${LAMBDA_AT_EDGE_BUILD_DIR}/manifest.json`, + buildManifest + ), + fse.copy( + path.join(__dirname, "next-aws-cloudfront.js"), + `./${LAMBDA_AT_EDGE_BUILD_DIR}/next-aws-cloudfront.js` + ), + fse.copy(".next/serverless/pages", `./${LAMBDA_AT_EDGE_BUILD_DIR}/pages`), + fse.copy( + path.join(__dirname, "router.js"), + `./${LAMBDA_AT_EDGE_BUILD_DIR}/router.js` + ) + ]; + + return Promise.all(copyPromises); + } + + async build(inputs) { + await execa("next", ["build"]); + + const pagesManifest = await this.readPagesManifest(); + const buildManifest = this.getBlankBuildManifest(); + + const ssr = buildManifest.pages.ssr; + const allRoutes = Object.keys(pagesManifest); + + allRoutes.forEach(r => { + if (pagesManifest[r].endsWith(".html")) { + buildManifest.pages.html[r] = pagesManifest[r]; + } else if (isDynamicRoute(r)) { + const expressRoute = expressifyDynamicRoute(r); + ssr.dynamic[expressRoute] = { + file: pagesManifest[r], + regex: pathToRegexStr(expressRoute) + }; + } else { + ssr.nonDynamic[r] = pagesManifest[r]; + } + }); + + const publicFiles = await this.readPublicFiles(); + + publicFiles.forEach(pf => { + buildManifest.publicFiles["/" + pf] = pf; + }); + + await fse.emptyDir(`./${LAMBDA_AT_EDGE_BUILD_DIR}`); + + const bucket = await this.load("@serverless/aws-s3"); + const cloudFront = await this.load("@serverless/aws-cloudfront"); + const lambda = await this.load("@serverless/aws-lambda"); + + const bucketOutputs = await bucket({ + accelerated: true + }); + + const uploadHtmlPages = Object.values(buildManifest.pages.html).map(page => + bucket.upload({ + file: `./.next/serverless/${page}`, + key: `static-pages/${page.replace("pages/", "")}` + }) + ); + + await Promise.all([ + bucket.upload({ + dir: "./.next/static", + keyPrefix: "_next/static" + }), + bucket.upload({ + dir: "./static", + keyPrefix: "static" + }), + bucket.upload({ + dir: "./public", + keyPrefix: "public" + }), + ...uploadHtmlPages + ]); + + buildManifest.cloudFrontOrigins = { + staticOrigin: { + domainName: `${bucketOutputs.name}.s3.amazonaws.com` + } + }; + + await this.buildLambdaAtEdge(buildManifest); + + const lambdaAtEdgeOutputs = await lambda({ + description: "Lambda@Edge for Next CloudFront distribution", + handler: "index.handler", + code: `./${LAMBDA_AT_EDGE_BUILD_DIR}`, + role: { + service: ["lambda.amazonaws.com", "edgelambda.amazonaws.com"], + policy: { + arn: "arn:aws:iam::aws:policy/AdministratorAccess" + } + } + }); + + const lambdaPublishOutputs = await lambda.publishVersion(); + + const bucketUrl = `http://${bucketOutputs.name}.s3.amazonaws.com`; + + const { url } = await cloudFront({ + defaults: { + ttl: 5, + allowedHttpMethods: [ + "HEAD", + "DELETE", + "POST", + "GET", + "OPTIONS", + "PUT", + "PATCH" + ], + "lambda@edge": { + "origin-request": `${lambdaAtEdgeOutputs.arn}:${lambdaPublishOutputs.version}` + } + }, + origins: [ + { + url: bucketUrl, + private: true, + pathPatterns: { + "_next/*": { + ttl: 86400 + }, + "static/*": { + ttl: 86400 + } + } + } + ] + }); + + return { + appUrl: url + }; + } + + async remove() { + const bucket = await this.load("@serverless/aws-s3"); + const cloudfront = await this.load("@serverless/aws-cloudfront"); + + await cloudfront.remove(); + await bucket.remove(); + } +} + +module.exports = NextjsComponent; diff --git a/packages/serverless-nextjs-plugin/__mocks__/aws-sdk.js b/packages/serverless-nextjs-plugin/__mocks__/aws-sdk.js new file mode 100644 index 0000000000..36fcafa235 --- /dev/null +++ b/packages/serverless-nextjs-plugin/__mocks__/aws-sdk.js @@ -0,0 +1,126 @@ +const promisify = mockFunction => { + const mockPromise = jest.fn(() => Promise.resolve()); + mockFunction.mockReturnValue({ + promise: mockPromise + }); + + return { + mockFunction, + mockPromise + }; +}; + +const MockCloudWatchLogs = function() {}; +function MockEnvironmentCredentials() {} +function MockCloudFormation() {} + +const { + mockFunction: mockDescribeStacks, + mockPromise: mockDescribeStacksPromise +} = promisify(jest.fn()); + +const { + mockFunction: mockCreateStack, + mockPromise: mockCreateStackPromise +} = promisify(jest.fn()); + +const { + mockFunction: mockDescribeStackEvents, + mockPromise: mockDescribeStackEventsPromise +} = promisify(jest.fn()); + +const { + mockFunction: mockDescribeStackResource, + mockPromise: mockDescribeStackResourcePromise +} = promisify(jest.fn()); + +const { + mockFunction: mockValidateTemplate, + mockPromise: mockValidateTemplatePromise +} = promisify(jest.fn()); + +const { + mockFunction: mockUpdateStack, + mockPromise: mockUpdateStackPromise +} = promisify(jest.fn()); + +const { + mockFunction: mockListStackResources, + mockPromise: mockListStackResourcesPromise +} = promisify(jest.fn()); + +MockCloudFormation.prototype.describeStacks = mockDescribeStacks; +MockCloudFormation.prototype.createStack = mockCreateStack; +MockCloudFormation.prototype.describeStackEvents = mockDescribeStackEvents; +MockCloudFormation.prototype.describeStackResource = mockDescribeStackResource; +MockCloudFormation.prototype.validateTemplate = mockValidateTemplate; +MockCloudFormation.prototype.updateStack = mockUpdateStack; +MockCloudFormation.prototype.listStackResources = mockListStackResources; + +const { + mockFunction: mockListObjectsV2, + mockPromise: mockListObjectsV2Promise +} = promisify(jest.fn()); + +const S3MockUpload = promisify(jest.fn()); + +const MockSTS = function() {}; +const { + mockFunction: mockGetCallerIdentity, + mockPromise: mockGetCallerIdentityPromise +} = promisify(jest.fn()); +MockSTS.prototype.getCallerIdentity = mockGetCallerIdentity; + +const MockAPIGateway = function() {}; +const { + mockFunction: mockGetRestApis, + mockPromise: mockGetRestApisPromise +} = promisify(jest.fn()); +MockAPIGateway.prototype.getRestApis = mockGetRestApis; + +const MockSharedIniFileCredentials = function() {}; + +const MockMetadataService = function() {}; +const mockMetadataRequest = jest + .fn() + .mockImplementation((path, cb) => cb(null, {})); +MockMetadataService.prototype.request = mockMetadataRequest; + +module.exports = { + EnvironmentCredentials: MockEnvironmentCredentials, + S3: jest.fn(() => { + return { + upload: S3MockUpload.mockFunction, + listObjectsV2: mockListObjectsV2 + }; + }), + CloudFormation: MockCloudFormation, + CloudWatchLogs: MockCloudWatchLogs, + STS: MockSTS, + APIGateway: MockAPIGateway, + SharedIniFileCredentials: MockSharedIniFileCredentials, + MetadataService: MockMetadataService, + + mockDescribeStacks, + mockDescribeStacksPromise, + mockCreateStack, + mockCreateStackPromise, + mockDescribeStackEvents, + mockDescribeStackEventsPromise, + mockDescribeStackResource, + mockDescribeStackResourcePromise, + mockListObjectsV2, + mockListObjectsV2Promise, + mockGetCallerIdentity, + mockGetCallerIdentityPromise, + mockUpload: S3MockUpload.mockFunction, + mockUploadPromise: S3MockUpload.mockPromise, + mockUpdateStack, + mockUpdateStackPromise, + mockListStackResources, + mockListStackResourcesPromise, + mockGetRestApis, + mockGetRestApisPromise, + mockValidateTemplate, + mockValidateTemplatePromise +}; diff --git a/packages/serverless-nextjs-plugin/__tests__/fixtures/automatic-static-optimised-app/.next/serverless/pages/about.html b/packages/serverless-nextjs-plugin/__tests__/fixtures/automatic-static-optimised-app/.next/serverless/pages/about.html new file mode 100644 index 0000000000..18ecdcb795 --- /dev/null +++ b/packages/serverless-nextjs-plugin/__tests__/fixtures/automatic-static-optimised-app/.next/serverless/pages/about.html @@ -0,0 +1 @@ + diff --git a/packages/serverless-nextjs-plugin/__tests__/fixtures/automatic-static-optimised-app/serverless.yml b/packages/serverless-nextjs-plugin/__tests__/fixtures/automatic-static-optimised-app/serverless.yml new file mode 100644 index 0000000000..063efc8896 --- /dev/null +++ b/packages/serverless-nextjs-plugin/__tests__/fixtures/automatic-static-optimised-app/serverless.yml @@ -0,0 +1,17 @@ +service: automatic-static-optimised-app-fixture + +provider: + name: aws + runtime: nodejs8.10 + +stage: dev +region: eu-west-1 + +plugins: + - index # this works because jest modulePaths adds plugin path, see package.json + +package: + # exclude everything + # page handlers are automatically included by the plugin + exclude: + - ./** diff --git a/packages/serverless-nextjs-plugin/__tests__/fixtures/nested-next-config/app/.next/static/placeholder.js b/packages/serverless-nextjs-plugin/__tests__/fixtures/nested-next-config/app/.next/static/placeholder.js new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/serverless-nextjs-plugin/__tests__/fixtures/nested-page-app/.next/static/placeholder.js b/packages/serverless-nextjs-plugin/__tests__/fixtures/nested-page-app/.next/static/placeholder.js new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/serverless-nextjs-plugin/__tests__/fixtures/one-page-app/.next/static/client.js b/packages/serverless-nextjs-plugin/__tests__/fixtures/one-page-app/.next/static/client.js new file mode 100644 index 0000000000..535868fbb0 --- /dev/null +++ b/packages/serverless-nextjs-plugin/__tests__/fixtures/one-page-app/.next/static/client.js @@ -0,0 +1 @@ +// the contents of this file don't actually matter diff --git a/packages/serverless-nextjs-plugin/__tests__/nested-next-config.test.js b/packages/serverless-nextjs-plugin/__tests__/nested-next-config.test.js index c141786120..96bfcb6f1b 100644 --- a/packages/serverless-nextjs-plugin/__tests__/nested-next-config.test.js +++ b/packages/serverless-nextjs-plugin/__tests__/nested-next-config.test.js @@ -1,7 +1,9 @@ const nextBuild = require("next/dist/build"); const path = require("path"); const AdmZip = require("adm-zip"); -const readCloudFormationUpdateTemplate = require("../utils/test/readCloudFormationUpdateTemplate"); +const { + readUpdateTemplate +} = require("../utils/test/readServerlessCFTemplate"); const testableServerless = require("../utils/test/testableServerless"); jest.mock("next/dist/build"); @@ -16,9 +18,7 @@ describe("nested next config", () => { await testableServerless(fixturePath, "package"); - const cloudFormationUpdateTemplate = await readCloudFormationUpdateTemplate( - fixturePath - ); + const cloudFormationUpdateTemplate = await readUpdateTemplate(fixturePath); cloudFormationUpdateResources = cloudFormationUpdateTemplate.Resources; }); diff --git a/packages/serverless-nextjs-plugin/__tests__/nested-page-app.test.js b/packages/serverless-nextjs-plugin/__tests__/nested-page-app.test.js index b6714000c2..8a98852d57 100644 --- a/packages/serverless-nextjs-plugin/__tests__/nested-page-app.test.js +++ b/packages/serverless-nextjs-plugin/__tests__/nested-page-app.test.js @@ -1,7 +1,9 @@ const nextBuild = require("next/dist/build"); const path = require("path"); const AdmZip = require("adm-zip"); -const readCloudFormationUpdateTemplate = require("../utils/test/readCloudFormationUpdateTemplate"); +const { + readUpdateTemplate +} = require("../utils/test/readServerlessCFTemplate"); const testableServerless = require("../utils/test/testableServerless"); jest.mock("next/dist/build"); @@ -16,9 +18,7 @@ describe("nested page app", () => { await testableServerless(fixturePath, "package"); - const cloudFormationUpdateTemplate = await readCloudFormationUpdateTemplate( - fixturePath - ); + const cloudFormationUpdateTemplate = await readUpdateTemplate(fixturePath); cloudFormationUpdateResources = cloudFormationUpdateTemplate.Resources; }); diff --git a/packages/serverless-nextjs-plugin/__tests__/one-page-app.test.js b/packages/serverless-nextjs-plugin/__tests__/one-page-app.test.js index fadfef2ba6..6aea300648 100644 --- a/packages/serverless-nextjs-plugin/__tests__/one-page-app.test.js +++ b/packages/serverless-nextjs-plugin/__tests__/one-page-app.test.js @@ -1,7 +1,10 @@ +const fs = require("fs"); const nextBuild = require("next/dist/build"); const path = require("path"); const AdmZip = require("adm-zip"); -const readCloudFormationUpdateTemplate = require("../utils/test/readCloudFormationUpdateTemplate"); +const { + readUpdateTemplate +} = require("../utils/test/readServerlessCFTemplate"); const testableServerless = require("../utils/test/testableServerless"); jest.mock("next/dist/build"); @@ -16,26 +19,26 @@ describe("one page app", () => { await testableServerless(fixturePath, "package"); - const cloudFormationUpdateTemplate = await readCloudFormationUpdateTemplate( - fixturePath - ); + const cloudFormationUpdateTemplate = await readUpdateTemplate(fixturePath); cloudFormationUpdateResources = cloudFormationUpdateTemplate.Resources; }); describe("Assets Bucket", () => { - let assetsBucket; + describe("CF Update resources", () => { + let assetsBucket; - beforeAll(() => { - assetsBucket = cloudFormationUpdateResources.NextStaticAssetsS3Bucket; - }); + beforeAll(() => { + assetsBucket = cloudFormationUpdateResources.NextStaticAssetsS3Bucket; + }); - it("is added to the update resources", () => { - expect(assetsBucket).toBeDefined(); - }); + it("is added to the resources", () => { + expect(assetsBucket).toBeDefined(); + }); - it("has correct bucket name", () => { - expect(assetsBucket.Properties.BucketName).toEqual("onepageappbucket"); + it("has correct bucket name", () => { + expect(assetsBucket.Properties.BucketName).toEqual("onepageappbucket"); + }); }); }); diff --git a/packages/serverless-nextjs-plugin/__tests__/single-api.test.js b/packages/serverless-nextjs-plugin/__tests__/single-api.test.js index 9a64eff6e9..7bcda195d5 100644 --- a/packages/serverless-nextjs-plugin/__tests__/single-api.test.js +++ b/packages/serverless-nextjs-plugin/__tests__/single-api.test.js @@ -1,7 +1,9 @@ const nextBuild = require("next/dist/build"); const path = require("path"); const AdmZip = require("adm-zip"); -const readCloudFormationUpdateTemplate = require("../utils/test/readCloudFormationUpdateTemplate"); +const { + readUpdateTemplate +} = require("../utils/test/readServerlessCFTemplate"); const testableServerless = require("../utils/test/testableServerless"); jest.mock("next/dist/build"); @@ -16,9 +18,7 @@ describe("single api", () => { await testableServerless(fixturePath, "package"); - const cloudFormationUpdateTemplate = await readCloudFormationUpdateTemplate( - fixturePath - ); + const cloudFormationUpdateTemplate = await readUpdateTemplate(fixturePath); cloudFormationUpdateResources = cloudFormationUpdateTemplate.Resources; }); diff --git a/packages/serverless-nextjs-plugin/lib/displayServiceInfo.js b/packages/serverless-nextjs-plugin/lib/displayServiceInfo.js index 8eb425efb3..057b568708 100644 --- a/packages/serverless-nextjs-plugin/lib/displayServiceInfo.js +++ b/packages/serverless-nextjs-plugin/lib/displayServiceInfo.js @@ -5,7 +5,10 @@ const outputFinder = outputs => key => { }; const displayStackOutput = awsInfo => { - console.log(awsInfo.gatheredData.outputs); + // remove this check after deploy mocks are correctly setup + if (awsInfo.gatheredData.outputs.length === 0) { + return; + } const findOutput = outputFinder(awsInfo.gatheredData.outputs); const apiGateway = findOutput("ServiceEndpoint"); diff --git a/packages/serverless-nextjs-plugin/utils/test/readCloudFormationUpdateTemplate.js b/packages/serverless-nextjs-plugin/utils/test/readServerlessCFTemplate.js similarity index 50% rename from packages/serverless-nextjs-plugin/utils/test/readCloudFormationUpdateTemplate.js rename to packages/serverless-nextjs-plugin/utils/test/readServerlessCFTemplate.js index 2ebec7ac23..30de512384 100644 --- a/packages/serverless-nextjs-plugin/utils/test/readCloudFormationUpdateTemplate.js +++ b/packages/serverless-nextjs-plugin/utils/test/readServerlessCFTemplate.js @@ -5,10 +5,16 @@ const readJsonFile = async filePath => { return JSON.parse(str); }; -const readCloudFormationUpdateTemplate = fixturePath => { +const readUpdateTemplate = fixturePath => { return readJsonFile( `${fixturePath}/.serverless/cloudformation-template-update-stack.json` ); }; -module.exports = readCloudFormationUpdateTemplate; +const readCreateTemplate = fixturePath => { + return readJsonFile( + `${fixturePath}/.serverless/cloudformation-template-create-stack.json` + ); +}; + +module.exports = { readCreateTemplate, readUpdateTemplate }; diff --git a/packages/serverless-nextjs-plugin/utils/test/testableServerless.js b/packages/serverless-nextjs-plugin/utils/test/testableServerless.js index 603dcbd87d..e8dddfeb74 100644 --- a/packages/serverless-nextjs-plugin/utils/test/testableServerless.js +++ b/packages/serverless-nextjs-plugin/utils/test/testableServerless.js @@ -1,18 +1,96 @@ const Serverless = require("serverless"); +const { + mockDescribeStacksPromise, + mockCreateStackPromise, + mockDescribeStackEventsPromise, + mockDescribeStackResourcePromise, + mockListObjectsV2Promise, + mockGetCallerIdentityPromise, + mockUpdateStackPromise, + mockGetRestApisPromise +} = require("aws-sdk"); + +const setupMocks = () => { + // these mocks are necessary for running "serverless deploy" + + // pretend serverless stack doesn't exist first + mockDescribeStacksPromise.mockRejectedValueOnce( + new Error("Stack does not exist.") + ); + + // create stack result OK + mockCreateStackPromise.mockResolvedValue({ StackId: "MockedStack" }); + + // mock a stack event for monitorStack.js + var aYearFromNow = new Date(); + aYearFromNow.setFullYear(aYearFromNow.getFullYear() + 1); + mockDescribeStackEventsPromise.mockResolvedValue({ + StackEvents: [ + { + StackId: "MockedStack", + ResourceType: "AWS::CloudFormation::Stack", + ResourceStatus: "CREATE_COMPLETE", + Timestamp: aYearFromNow + } + ] + }); + + mockDescribeStackResourcePromise.mockResolvedValue({ + StackResourceDetail: { + StackId: "MockedStack", + PhysicalResourceId: "MockedStackPhysicalResourceId" + } + }); + + mockListObjectsV2Promise.mockResolvedValue({ Contents: [] }); + + mockGetCallerIdentityPromise.mockResolvedValue({ + Arn: "arn:aws:iam:testAcctId:testUser/xyz" + }); + + mockUpdateStackPromise.mockResolvedValueOnce({ + StackId: "MockedStack" + }); + + mockDescribeStacksPromise.mockResolvedValueOnce({ + Stacks: [ + { + StackId: "MockedStack", + Outputs: [] + } + ] + }); + + mockGetRestApisPromise.mockResolvedValueOnce({ + items: [{ id: "mockedApi" }] + }); +}; module.exports = async (servicePath, command) => { + setupMocks(); + const tmpCwd = process.cwd(); process.chdir(servicePath); - const serverless = new Serverless(); + try { + const serverless = new Serverless(); + + serverless.invocationId = "test-run"; + + process.argv[2] = command; - serverless.invocationId = "test-run"; + jest.useFakeTimers(); + setTimeout.mockImplementation(cb => cb()); - process.argv[2] = command; + await serverless.init(); + await serverless.run(); - await serverless.init(); - await serverless.run(); + jest.useRealTimers(); + } catch (err) { + console.error(`Serverless command ${command} crashed.`, err); + throw err; + } process.chdir(tmpCwd); };