gitextract_ad_x_yca/ ├── .editorconfig ├── .github/ │ └── workflows/ │ ├── CI.yml │ ├── lint.yml │ ├── release.yml │ └── tf-docs.yml ├── .gitignore ├── .prettierrc.js ├── .terraform-docs.yml ├── .vscode/ │ ├── extensions.json │ ├── launch.json │ └── settings.json ├── CHANGELOG.md ├── CONTRIBUTING.md ├── LICENSE ├── README.md ├── docker-compose.yml ├── docs/ │ └── development.md ├── examples/ │ ├── .gitignore │ ├── atomic-deployments/ │ │ ├── .gitignore │ │ ├── LICENSE │ │ ├── README.md │ │ ├── main.tf │ │ ├── package.json │ │ └── pages/ │ │ └── index.js │ ├── complete/ │ │ ├── .gitignore │ │ ├── LICENSE │ │ ├── README.md │ │ ├── components/ │ │ │ └── header.js │ │ ├── main.tf │ │ ├── next.config.js │ │ ├── package.json │ │ └── pages/ │ │ ├── about.js │ │ ├── api/ │ │ │ └── robots.js │ │ ├── index.js │ │ └── test/ │ │ └── [...slug].js │ ├── next-image/ │ │ ├── .gitignore │ │ ├── LICENSE │ │ ├── README.md │ │ ├── app.css │ │ ├── components/ │ │ │ ├── view-source.js │ │ │ └── view-source.module.css │ │ ├── main.tf │ │ ├── next.config.js │ │ ├── package.json │ │ ├── pages/ │ │ │ ├── _app.js │ │ │ ├── background.js │ │ │ ├── index.js │ │ │ ├── layout-fill.js │ │ │ ├── layout-fixed.js │ │ │ ├── layout-intrinsic.js │ │ │ └── layout-responsive.js │ │ └── styles.module.css │ ├── static/ │ │ ├── .gitignore │ │ ├── LICENSE │ │ ├── README.md │ │ ├── main.tf │ │ ├── package.json │ │ └── pages/ │ │ ├── about.js │ │ ├── blog/ │ │ │ └── index.js │ │ └── index.js │ ├── with-custom-domain/ │ │ ├── .gitignore │ │ ├── LICENSE │ │ ├── README.md │ │ ├── main.tf │ │ ├── package.json │ │ └── pages/ │ │ └── index.js │ └── with-existing-cloudfront/ │ ├── .gitignore │ ├── LICENSE │ ├── README.md │ ├── main.tf │ ├── package.json │ └── pages/ │ └── index.js ├── jest.config.js ├── main.tf ├── modules/ │ ├── api/ │ │ ├── main.tf │ │ ├── outputs.tf │ │ └── variables.tf │ ├── cloudfront-main/ │ │ ├── main.tf │ │ ├── outputs.tf │ │ ├── variables.tf │ │ └── versions.tf │ ├── cloudfront-proxy-config/ │ │ ├── main.tf │ │ ├── outputs.tf │ │ ├── variables.tf │ │ └── versions.tf │ ├── deploy-controller/ │ │ ├── README.md │ │ ├── main.tf │ │ ├── outputs.tf │ │ ├── variables.tf │ │ └── versions.tf │ ├── lambda-worker/ │ │ ├── LICENSE │ │ ├── iam.tf │ │ ├── main.tf │ │ ├── outputs.tf │ │ ├── variables.tf │ │ └── versions.tf │ ├── proxy/ │ │ ├── main.tf │ │ ├── outputs.tf │ │ ├── variables.tf │ │ └── versions.tf │ └── statics-deploy/ │ ├── main.tf │ ├── outputs.tf │ ├── variables.tf │ └── versions.tf ├── outputs.tf ├── package.json ├── packages/ │ ├── api/ │ │ ├── .gitignore │ │ ├── jest.config.js │ │ ├── ncc.config.json │ │ ├── package.json │ │ ├── schema.ts │ │ ├── schema.yaml │ │ ├── src/ │ │ │ ├── actions/ │ │ │ │ ├── alias/ │ │ │ │ │ ├── alias-utils.ts │ │ │ │ │ ├── create-or-update-alias.ts │ │ │ │ │ ├── delete-alias-by-id.ts │ │ │ │ │ └── list-aliases.ts │ │ │ │ └── deployment/ │ │ │ │ ├── create-deployment.ts │ │ │ │ ├── delete-deployment-by-id.ts │ │ │ │ ├── get-deployment-by-id.ts │ │ │ │ └── list-deployments.ts │ │ │ ├── api.ts │ │ │ ├── declarations.d.ts │ │ │ ├── handler.ts │ │ │ ├── serializers/ │ │ │ │ └── deployment.ts │ │ │ └── services/ │ │ │ ├── cloudformation.ts │ │ │ ├── dynamodb.ts │ │ │ └── s3.ts │ │ ├── test/ │ │ │ ├── actions/ │ │ │ │ ├── alias/ │ │ │ │ │ ├── create-or-update-alias.test.ts │ │ │ │ │ ├── delete-alias-by-id.test.ts │ │ │ │ │ └── list-aliases.test.ts │ │ │ │ └── deployment/ │ │ │ │ ├── create-deployment.test.ts │ │ │ │ ├── delete-deployment-by-id.test.ts │ │ │ │ ├── get-deployment-by-id.test.ts │ │ │ │ └── list-deployments.test.ts │ │ │ └── test-utils.ts │ │ └── tsconfig.json │ ├── deploy-controller/ │ │ ├── .gitignore │ │ ├── README.md │ │ ├── jest.config.js │ │ ├── package.json │ │ ├── src/ │ │ │ ├── controller.ts │ │ │ ├── declarations.d.ts │ │ │ ├── handler.ts │ │ │ └── utils/ │ │ │ ├── ensure-env.ts │ │ │ ├── parse-cloudformation-event.ts │ │ │ └── parse-lambda-routes.ts │ │ ├── test/ │ │ │ ├── controller.test.ts │ │ │ ├── test-utils.ts │ │ │ └── utils/ │ │ │ ├── parse-cloudformation-event.test.ts │ │ │ └── parse-lambda-routes.test.ts │ │ └── tsconfig.json │ ├── deploy-trigger/ │ │ ├── .gitignore │ │ ├── README.md │ │ ├── jest.config.js │ │ ├── ncc.config.json │ │ ├── package.json │ │ ├── src/ │ │ │ ├── cdk/ │ │ │ │ ├── aws-construct-function-urls.ts │ │ │ │ ├── aws-construct.ts │ │ │ │ ├── cdk-utils.ts │ │ │ │ ├── create-cloudformation-stack.ts │ │ │ │ └── to-cloudformation.ts │ │ │ ├── constants.ts │ │ │ ├── create-invalidation.ts │ │ │ ├── declarations.d.ts │ │ │ ├── deploy-trigger.ts │ │ │ ├── get-or-create-manifest.ts │ │ │ ├── handler.ts │ │ │ ├── types.ts │ │ │ ├── update-manifest.ts │ │ │ └── utils/ │ │ │ ├── ensure-env.ts │ │ │ └── random-id.ts │ │ ├── test/ │ │ │ ├── create-invalidation.test.ts │ │ │ ├── deploy-trigger.test.ts │ │ │ ├── get-or-create-manifest.test.ts │ │ │ ├── test-utils.ts │ │ │ └── update-manifest.test.ts │ │ └── tsconfig.json │ ├── dynamodb-actions/ │ │ ├── .gitignore │ │ ├── README.md │ │ ├── jest.config.js │ │ ├── package.json │ │ ├── src/ │ │ │ ├── alias/ │ │ │ │ ├── create-alias.ts │ │ │ │ ├── delete-alias-by-id.ts │ │ │ │ ├── get-alias-by-hostname.ts │ │ │ │ ├── get-alias-by-id.ts │ │ │ │ └── list-aliases-for-deployment.ts │ │ │ ├── deployment/ │ │ │ │ ├── create-deployment.ts │ │ │ │ ├── delete-deployment-by-id.ts │ │ │ │ ├── get-deployment-by-id.ts │ │ │ │ ├── list-deployments.ts │ │ │ │ ├── update-deployment-status-create-failed.ts │ │ │ │ ├── update-deployment-status-create-in-progress.ts │ │ │ │ ├── update-deployment-status-destroy-failed.ts │ │ │ │ ├── update-deployment-status-destroy-in-progress.ts │ │ │ │ ├── update-deployment-status-destroy-requested.ts │ │ │ │ ├── update-deployment-status-finished.ts │ │ │ │ ├── update-deployment-status.ts │ │ │ │ └── update-deployment.ts │ │ │ ├── index.ts │ │ │ ├── types.ts │ │ │ └── utils/ │ │ │ ├── dynamodb/ │ │ │ │ ├── index.ts │ │ │ │ └── update-item.ts │ │ │ └── reverse-hostname.ts │ │ ├── test/ │ │ │ ├── alias/ │ │ │ │ ├── create-alias.test.ts │ │ │ │ ├── delete-alias-by-id.test.ts │ │ │ │ ├── get-alias-by-id.test.ts │ │ │ │ └── list-aliases-for-deployment.test.ts │ │ │ ├── deployment/ │ │ │ │ ├── create-deployment.test.ts │ │ │ │ ├── delete-deployment.test.ts │ │ │ │ ├── get-deployment-by-id.test.ts │ │ │ │ ├── list-deployments.test.ts │ │ │ │ └── update-deployment.test.ts │ │ │ ├── test-utils.ts │ │ │ └── utils/ │ │ │ └── reverse-hostname.test.ts │ │ └── tsconfig.json │ ├── node-bridge/ │ │ ├── .gitignore │ │ ├── LICENSE │ │ ├── README.md │ │ ├── jest.config.js │ │ ├── package.json │ │ ├── src/ │ │ │ └── bridge.ts │ │ ├── test/ │ │ │ └── bridge.test.js │ │ └── tsconfig.json │ ├── proxy/ │ │ ├── .gitignore │ │ ├── README.md │ │ ├── error.html │ │ ├── jest.config.js │ │ ├── ncc.config.json │ │ ├── package.json │ │ ├── src/ │ │ │ ├── actions/ │ │ │ │ ├── fetch-cached.ts │ │ │ │ ├── fetch-file-system.ts │ │ │ │ └── fetch-proxy-config.ts │ │ │ ├── error/ │ │ │ │ ├── alias-not-configured.ts │ │ │ │ ├── missing-config.ts │ │ │ │ └── render-error.ts │ │ │ ├── handler.ts │ │ │ ├── index.ts │ │ │ ├── proxy.ts │ │ │ ├── types.ts │ │ │ └── util/ │ │ │ ├── append-querystring.ts │ │ │ ├── custom-origin.ts │ │ │ ├── etag-cache.ts │ │ │ ├── fetch-timeout.ts │ │ │ ├── generate-cloudfront-headers.ts │ │ │ ├── get-env.ts │ │ │ ├── is-url.ts │ │ │ ├── resolve-route-parameters.ts │ │ │ └── ttl-cache.ts │ │ ├── test/ │ │ │ ├── actions/ │ │ │ │ └── fetch-cached.test.ts │ │ │ ├── handler.test.ts │ │ │ ├── proxy.test.ts │ │ │ ├── proxy.unit.test.ts │ │ │ ├── res/ │ │ │ │ ├── config-001.json │ │ │ │ ├── config-002.json │ │ │ │ ├── config-003.json │ │ │ │ └── config-004.json │ │ │ ├── resolve-route-parameters.test.ts │ │ │ ├── test-utils.ts │ │ │ └── util/ │ │ │ ├── append-querystring.test.ts │ │ │ └── ttl-cache.test.ts │ │ └── tsconfig.json │ ├── proxy-config/ │ │ ├── .gitignore │ │ ├── jest.config.js │ │ ├── ncc.config.json │ │ ├── package.json │ │ ├── src/ │ │ │ ├── actions/ │ │ │ │ ├── deployment-file-exists.ts │ │ │ │ └── get-alias.ts │ │ │ ├── errors/ │ │ │ │ └── not-found-error.ts │ │ │ ├── handler.ts │ │ │ └── utils/ │ │ │ ├── get-env.ts │ │ │ └── split-at-character.ts │ │ ├── test/ │ │ │ └── utils/ │ │ │ └── split-at-character.test.ts │ │ └── tsconfig.json │ ├── runtime/ │ │ ├── .gitignore │ │ ├── LICENSE │ │ ├── README.md │ │ ├── build.sh │ │ ├── jest.config.js │ │ ├── package.json │ │ ├── src/ │ │ │ ├── create-serverless-config.ts │ │ │ ├── dev-server.ts │ │ │ ├── index.ts │ │ │ ├── legacy-launcher.ts │ │ │ ├── legacy-versions.ts │ │ │ ├── templated-launcher-shared.ts │ │ │ ├── templated-launcher.ts │ │ │ └── utils.ts │ │ ├── test/ │ │ │ ├── fixtures/ │ │ │ │ ├── 00-i18n-support/ │ │ │ │ │ ├── additional.js │ │ │ │ │ ├── next.config.js │ │ │ │ │ ├── now.json │ │ │ │ │ ├── package.json │ │ │ │ │ ├── pages/ │ │ │ │ │ │ ├── another.js │ │ │ │ │ │ ├── auto-export/ │ │ │ │ │ │ │ └── index.js │ │ │ │ │ │ ├── dynamic/ │ │ │ │ │ │ │ └── [slug].js │ │ │ │ │ │ ├── gsp/ │ │ │ │ │ │ │ ├── blocking/ │ │ │ │ │ │ │ │ └── [[...slug]].js │ │ │ │ │ │ │ ├── fallback/ │ │ │ │ │ │ │ │ └── [slug].js │ │ │ │ │ │ │ ├── index.js │ │ │ │ │ │ │ └── no-fallback/ │ │ │ │ │ │ │ └── [slug].js │ │ │ │ │ │ ├── gssp/ │ │ │ │ │ │ │ ├── [slug].js │ │ │ │ │ │ │ └── index.js │ │ │ │ │ │ ├── index.js │ │ │ │ │ │ ├── links.js │ │ │ │ │ │ └── not-found/ │ │ │ │ │ │ ├── fallback/ │ │ │ │ │ │ │ └── [slug].js │ │ │ │ │ │ └── index.js │ │ │ │ │ └── public/ │ │ │ │ │ └── hello.txt │ │ │ │ ├── 00-i18n-support-no-locale-detection/ │ │ │ │ │ ├── next.config.js │ │ │ │ │ ├── now.json │ │ │ │ │ ├── package.json │ │ │ │ │ ├── pages/ │ │ │ │ │ │ ├── another.js │ │ │ │ │ │ ├── auto-export/ │ │ │ │ │ │ │ └── index.js │ │ │ │ │ │ ├── dynamic/ │ │ │ │ │ │ │ └── [slug].js │ │ │ │ │ │ ├── gsp/ │ │ │ │ │ │ │ ├── blocking/ │ │ │ │ │ │ │ │ └── [[...slug]].js │ │ │ │ │ │ │ ├── fallback/ │ │ │ │ │ │ │ │ └── [slug].js │ │ │ │ │ │ │ ├── index.js │ │ │ │ │ │ │ └── no-fallback/ │ │ │ │ │ │ │ └── [slug].js │ │ │ │ │ │ ├── gssp/ │ │ │ │ │ │ │ ├── [slug].js │ │ │ │ │ │ │ └── index.js │ │ │ │ │ │ ├── index.js │ │ │ │ │ │ ├── links.js │ │ │ │ │ │ └── not-found/ │ │ │ │ │ │ ├── fallback/ │ │ │ │ │ │ │ └── [slug].js │ │ │ │ │ │ └── index.js │ │ │ │ │ └── public/ │ │ │ │ │ └── hello.txt │ │ │ │ ├── 00-i18n-support-no-shared-lambdas/ │ │ │ │ │ ├── next.config.js │ │ │ │ │ ├── now.json │ │ │ │ │ ├── package.json │ │ │ │ │ ├── pages/ │ │ │ │ │ │ ├── another.js │ │ │ │ │ │ ├── auto-export/ │ │ │ │ │ │ │ └── index.js │ │ │ │ │ │ ├── dynamic/ │ │ │ │ │ │ │ └── [slug].js │ │ │ │ │ │ ├── gsp/ │ │ │ │ │ │ │ ├── fallback/ │ │ │ │ │ │ │ │ └── [slug].js │ │ │ │ │ │ │ ├── index.js │ │ │ │ │ │ │ └── no-fallback/ │ │ │ │ │ │ │ └── [slug].js │ │ │ │ │ │ ├── gssp/ │ │ │ │ │ │ │ ├── [slug].js │ │ │ │ │ │ │ └── index.js │ │ │ │ │ │ ├── index.js │ │ │ │ │ │ ├── links.js │ │ │ │ │ │ └── not-found/ │ │ │ │ │ │ ├── fallback/ │ │ │ │ │ │ │ └── [slug].js │ │ │ │ │ │ └── index.js │ │ │ │ │ └── public/ │ │ │ │ │ └── hello.txt │ │ │ │ ├── 00-i18n-support-root-catchall/ │ │ │ │ │ ├── additional.js │ │ │ │ │ ├── next.config.js │ │ │ │ │ ├── now.json │ │ │ │ │ ├── package.json │ │ │ │ │ ├── pages/ │ │ │ │ │ │ └── [[...slug]].js │ │ │ │ │ └── public/ │ │ │ │ │ └── hello.txt │ │ │ │ ├── 00-optional-fallback-revalidate/ │ │ │ │ │ ├── additional.js │ │ │ │ │ ├── next.config.js │ │ │ │ │ ├── package.json │ │ │ │ │ ├── pages/ │ │ │ │ │ │ ├── [[...slug]].js │ │ │ │ │ │ └── posts/ │ │ │ │ │ │ └── [[...slug]].js │ │ │ │ │ └── vercel.json │ │ │ │ ├── 00-public-dir-output-dir/ │ │ │ │ │ ├── now.json │ │ │ │ │ ├── package.json │ │ │ │ │ └── web/ │ │ │ │ │ ├── pages/ │ │ │ │ │ │ ├── dynamic/ │ │ │ │ │ │ │ └── [slug].js │ │ │ │ │ │ ├── dynamic-ssr/ │ │ │ │ │ │ │ └── [slug].js │ │ │ │ │ │ └── index.js │ │ │ │ │ └── public/ │ │ │ │ │ ├── hello.txt │ │ │ │ │ └── public/ │ │ │ │ │ └── data.txt │ │ │ │ ├── 00-root-optional-revalidate/ │ │ │ │ │ ├── additional.js │ │ │ │ │ ├── now.json │ │ │ │ │ ├── package.json │ │ │ │ │ └── pages/ │ │ │ │ │ └── [[...slug]].js │ │ │ │ ├── 00-shared-lambdas/ │ │ │ │ │ ├── next.config.js │ │ │ │ │ ├── now.json │ │ │ │ │ ├── package.json │ │ │ │ │ └── pages/ │ │ │ │ │ ├── [teamSlug]/ │ │ │ │ │ │ └── [project]/ │ │ │ │ │ │ └── [id].js │ │ │ │ │ ├── groups/ │ │ │ │ │ │ └── [id].js │ │ │ │ │ └── teams/ │ │ │ │ │ └── invite/ │ │ │ │ │ └── [inviteCode].js │ │ │ │ ├── 00-trailing-slash-add-export/ │ │ │ │ │ ├── next.config.js │ │ │ │ │ ├── now.json │ │ │ │ │ ├── package.json │ │ │ │ │ └── pages/ │ │ │ │ │ ├── 404.js │ │ │ │ │ └── foo.js │ │ │ │ ├── 00-trailing-slash-remove/ │ │ │ │ │ ├── next.config.js │ │ │ │ │ ├── now.json │ │ │ │ │ ├── package.json │ │ │ │ │ ├── pages/ │ │ │ │ │ │ ├── abc/ │ │ │ │ │ │ │ └── def.js │ │ │ │ │ │ └── foo.js │ │ │ │ │ └── public/ │ │ │ │ │ └── test.txt │ │ │ │ ├── 01-cache-headers/ │ │ │ │ │ ├── next.config.js │ │ │ │ │ ├── now.json │ │ │ │ │ ├── package.json │ │ │ │ │ └── pages/ │ │ │ │ │ ├── [team]/ │ │ │ │ │ │ ├── [project]/ │ │ │ │ │ │ │ ├── [deployment]/ │ │ │ │ │ │ │ │ ├── [another]/ │ │ │ │ │ │ │ │ │ ├── [final]/ │ │ │ │ │ │ │ │ │ │ └── index.js │ │ │ │ │ │ │ │ │ └── index.js │ │ │ │ │ │ │ │ └── index.js │ │ │ │ │ │ │ └── index.js │ │ │ │ │ │ └── index.js │ │ │ │ │ └── index.js │ │ │ │ ├── 03-next-8/ │ │ │ │ │ ├── next.config.js │ │ │ │ │ ├── now.json │ │ │ │ │ ├── package.json │ │ │ │ │ └── pages/ │ │ │ │ │ ├── hello1.js │ │ │ │ │ └── nested/ │ │ │ │ │ └── hello2.js │ │ │ │ ├── 04-firebase-node-10/ │ │ │ │ │ ├── next.config.js │ │ │ │ │ ├── now.json │ │ │ │ │ ├── package.json │ │ │ │ │ └── pages/ │ │ │ │ │ └── nested/ │ │ │ │ │ ├── fb.js │ │ │ │ │ └── moar/ │ │ │ │ │ └── [dynamic_fb].js │ │ │ │ ├── 05-spr-support/ │ │ │ │ │ ├── next.config.js │ │ │ │ │ ├── now.json │ │ │ │ │ ├── package.json │ │ │ │ │ └── pages/ │ │ │ │ │ ├── another.js │ │ │ │ │ ├── another2.js │ │ │ │ │ ├── api/ │ │ │ │ │ │ └── noop.js │ │ │ │ │ ├── blog/ │ │ │ │ │ │ └── [post]/ │ │ │ │ │ │ ├── [comment].js │ │ │ │ │ │ └── index.js │ │ │ │ │ ├── forever.js │ │ │ │ │ ├── index.js │ │ │ │ │ └── lambda.js │ │ │ │ ├── 06-lambda-with-memory/ │ │ │ │ │ ├── now.json │ │ │ │ │ ├── package.json │ │ │ │ │ └── src/ │ │ │ │ │ └── pages/ │ │ │ │ │ └── api/ │ │ │ │ │ ├── index.js │ │ │ │ │ ├── memory.js │ │ │ │ │ └── sub/ │ │ │ │ │ ├── another.ts │ │ │ │ │ └── index.ts │ │ │ │ ├── 07-custom-routes/ │ │ │ │ │ ├── next.config.js │ │ │ │ │ ├── now.json │ │ │ │ │ ├── package.json │ │ │ │ │ └── pages/ │ │ │ │ │ ├── hello.js │ │ │ │ │ └── params.js │ │ │ │ ├── 08-custom-routes-catchall/ │ │ │ │ │ ├── next.config.js │ │ │ │ │ ├── now.json │ │ │ │ │ ├── package.json │ │ │ │ │ └── pages/ │ │ │ │ │ ├── hello.js │ │ │ │ │ └── params.js │ │ │ │ ├── 09-yarn-workspaces/ │ │ │ │ │ ├── .gitignore │ │ │ │ │ ├── lerna.json │ │ │ │ │ ├── now.json │ │ │ │ │ ├── package.json │ │ │ │ │ └── packages/ │ │ │ │ │ ├── common/ │ │ │ │ │ │ ├── dist/ │ │ │ │ │ │ │ ├── index.d.ts │ │ │ │ │ │ │ └── index.js │ │ │ │ │ │ ├── package.json │ │ │ │ │ │ ├── src/ │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ └── tsconfig.json │ │ │ │ │ └── web/ │ │ │ │ │ ├── next-env.d.ts │ │ │ │ │ ├── next.config.js │ │ │ │ │ ├── package.json │ │ │ │ │ ├── pages/ │ │ │ │ │ │ ├── _app.tsx │ │ │ │ │ │ └── index.tsx │ │ │ │ │ └── tsconfig.json │ │ │ │ ├── 10-export-cache-headers/ │ │ │ │ │ ├── next.config.js │ │ │ │ │ ├── now.json │ │ │ │ │ ├── package.json │ │ │ │ │ └── pages/ │ │ │ │ │ └── index.js │ │ │ │ ├── 11-export-clean-urls/ │ │ │ │ │ ├── next.config.js │ │ │ │ │ ├── now.json │ │ │ │ │ ├── package.json │ │ │ │ │ └── pages/ │ │ │ │ │ ├── about.js │ │ │ │ │ └── index.js │ │ │ │ ├── 12-no-export-auto/ │ │ │ │ │ ├── next.config.js │ │ │ │ │ ├── now.json │ │ │ │ │ ├── package.json │ │ │ │ │ └── pages/ │ │ │ │ │ ├── about.js │ │ │ │ │ └── index.js │ │ │ │ ├── 13-export-custom-routes/ │ │ │ │ │ ├── next.config.js │ │ │ │ │ ├── now.json │ │ │ │ │ ├── package.json │ │ │ │ │ └── pages/ │ │ │ │ │ ├── about.js │ │ │ │ │ └── index.js │ │ │ │ ├── 14-next-offline/ │ │ │ │ │ ├── next.config.js │ │ │ │ │ ├── now.json │ │ │ │ │ ├── package.json │ │ │ │ │ └── pages/ │ │ │ │ │ ├── about.js │ │ │ │ │ └── index.js │ │ │ │ ├── 16-base-path/ │ │ │ │ │ ├── next.config.js │ │ │ │ │ ├── now.json │ │ │ │ │ ├── package.json │ │ │ │ │ └── pages/ │ │ │ │ │ ├── another.js │ │ │ │ │ ├── api/ │ │ │ │ │ │ ├── [slug]/ │ │ │ │ │ │ │ ├── another.js │ │ │ │ │ │ │ └── index.js │ │ │ │ │ │ └── hello.js │ │ │ │ │ ├── blog/ │ │ │ │ │ │ └── [post]/ │ │ │ │ │ │ ├── comments.js │ │ │ │ │ │ └── index.js │ │ │ │ │ ├── blog-ssg/ │ │ │ │ │ │ └── [post]/ │ │ │ │ │ │ ├── comments.js │ │ │ │ │ │ └── index.js │ │ │ │ │ └── index.js │ │ │ │ ├── 17-static-404/ │ │ │ │ │ ├── next.config.js │ │ │ │ │ ├── now.json │ │ │ │ │ ├── package.json │ │ │ │ │ └── pages/ │ │ │ │ │ └── index.js │ │ │ │ ├── 18-ssg-fallback-support/ │ │ │ │ │ ├── next.config.js │ │ │ │ │ ├── now.json │ │ │ │ │ ├── package.json │ │ │ │ │ └── pages/ │ │ │ │ │ ├── another.js │ │ │ │ │ ├── another2.js │ │ │ │ │ ├── api/ │ │ │ │ │ │ └── noop.js │ │ │ │ │ ├── blog/ │ │ │ │ │ │ └── [post]/ │ │ │ │ │ │ ├── [comment].js │ │ │ │ │ │ └── index.js │ │ │ │ │ ├── forever.js │ │ │ │ │ ├── index.js │ │ │ │ │ └── lambda.js │ │ │ │ ├── 19-pages-404/ │ │ │ │ │ ├── next.config.js │ │ │ │ │ ├── now.json │ │ │ │ │ ├── package.json │ │ │ │ │ └── pages/ │ │ │ │ │ ├── 404.js │ │ │ │ │ └── index.js │ │ │ │ ├── 20-pages-404-lambda/ │ │ │ │ │ ├── next.config.js │ │ │ │ │ ├── now.json │ │ │ │ │ ├── package.json │ │ │ │ │ └── pages/ │ │ │ │ │ ├── 404.js │ │ │ │ │ ├── _app.js │ │ │ │ │ └── index.js │ │ │ │ ├── 21-server-props/ │ │ │ │ │ ├── next.config.js │ │ │ │ │ ├── now.json │ │ │ │ │ ├── package.json │ │ │ │ │ └── pages/ │ │ │ │ │ ├── another.js │ │ │ │ │ ├── another2.js │ │ │ │ │ ├── blog/ │ │ │ │ │ │ └── [post]/ │ │ │ │ │ │ ├── [comment].js │ │ │ │ │ │ └── index.js │ │ │ │ │ ├── forever.js │ │ │ │ │ ├── index.js │ │ │ │ │ └── lambda.js │ │ │ │ ├── 22-ssg-v2/ │ │ │ │ │ ├── additional.js │ │ │ │ │ ├── next.config.js │ │ │ │ │ ├── now.json │ │ │ │ │ ├── package.json │ │ │ │ │ └── pages/ │ │ │ │ │ ├── another.js │ │ │ │ │ ├── another2.js │ │ │ │ │ ├── api/ │ │ │ │ │ │ └── noop.js │ │ │ │ │ ├── api-docs/ │ │ │ │ │ │ └── [...slug].js │ │ │ │ │ ├── blog/ │ │ │ │ │ │ └── [post]/ │ │ │ │ │ │ ├── [comment].js │ │ │ │ │ │ └── index.js │ │ │ │ │ ├── forever.js │ │ │ │ │ ├── index.js │ │ │ │ │ ├── lambda.js │ │ │ │ │ └── nofallback/ │ │ │ │ │ └── [slug].js │ │ │ │ ├── 22-ssg-v2-catchall/ │ │ │ │ │ ├── next.config.js │ │ │ │ │ ├── now.json │ │ │ │ │ ├── package.json │ │ │ │ │ └── pages/ │ │ │ │ │ ├── [...path].js │ │ │ │ │ └── index.js │ │ │ │ ├── 23-custom-routes-verbose/ │ │ │ │ │ ├── .gitignore │ │ │ │ │ ├── next.config.js │ │ │ │ │ ├── now.json │ │ │ │ │ ├── package.json │ │ │ │ │ ├── pages/ │ │ │ │ │ │ ├── a/ │ │ │ │ │ │ │ └── catch-all.js │ │ │ │ │ │ ├── another/ │ │ │ │ │ │ │ └── [id].js │ │ │ │ │ │ ├── api/ │ │ │ │ │ │ │ ├── dynamic/ │ │ │ │ │ │ │ │ └── [slug].js │ │ │ │ │ │ │ └── hello.js │ │ │ │ │ │ ├── b/ │ │ │ │ │ │ │ └── [123].js │ │ │ │ │ │ ├── blog/ │ │ │ │ │ │ │ └── [post]/ │ │ │ │ │ │ │ └── index.js │ │ │ │ │ │ ├── c/ │ │ │ │ │ │ │ └── [alongparamnameshouldbeallowedeventhoughweird].js │ │ │ │ │ │ ├── catchall-dash/ │ │ │ │ │ │ │ └── [...hello-world].js │ │ │ │ │ │ ├── dash/ │ │ │ │ │ │ │ └── [hello-world].js │ │ │ │ │ │ ├── docs/ │ │ │ │ │ │ │ └── v2/ │ │ │ │ │ │ │ └── more/ │ │ │ │ │ │ │ └── now-for-github.js │ │ │ │ │ │ ├── hello-again.js │ │ │ │ │ │ ├── hello.js │ │ │ │ │ │ ├── multi-rewrites.js │ │ │ │ │ │ ├── nav.js │ │ │ │ │ │ ├── params.js │ │ │ │ │ │ ├── redirect-override.js │ │ │ │ │ │ └── with-params.js │ │ │ │ │ └── public/ │ │ │ │ │ ├── blog/ │ │ │ │ │ │ └── data.json │ │ │ │ │ └── static/ │ │ │ │ │ └── hello.txt │ │ │ │ ├── 24-custom-output-dir/ │ │ │ │ │ ├── next.config.js │ │ │ │ │ ├── now.json │ │ │ │ │ ├── package.json │ │ │ │ │ └── pages/ │ │ │ │ │ ├── index.js │ │ │ │ │ └── ssg/ │ │ │ │ │ └── [slug].js │ │ │ │ ├── 25-index-routes/ │ │ │ │ │ ├── next.config.js │ │ │ │ │ ├── now.json │ │ │ │ │ ├── package.json │ │ │ │ │ └── pages/ │ │ │ │ │ ├── api/ │ │ │ │ │ │ └── sub/ │ │ │ │ │ │ ├── [id].js │ │ │ │ │ │ └── index.js │ │ │ │ │ ├── index.js │ │ │ │ │ ├── nested-index/ │ │ │ │ │ │ └── index/ │ │ │ │ │ │ └── index.js │ │ │ │ │ └── sub/ │ │ │ │ │ ├── [id].js │ │ │ │ │ └── index.js │ │ │ │ ├── 25-mono-repo-404/ │ │ │ │ │ ├── .gitignore │ │ │ │ │ ├── package.json │ │ │ │ │ ├── packages/ │ │ │ │ │ │ └── webapp/ │ │ │ │ │ │ ├── next.config.js │ │ │ │ │ │ ├── package.json │ │ │ │ │ │ └── pages/ │ │ │ │ │ │ ├── 404.js │ │ │ │ │ │ └── index.js │ │ │ │ │ └── vercel.json │ │ │ │ ├── 26-mono-repo-404-lambda/ │ │ │ │ │ ├── .gitignore │ │ │ │ │ ├── now.json │ │ │ │ │ ├── package.json │ │ │ │ │ └── packages/ │ │ │ │ │ └── webapp/ │ │ │ │ │ ├── next.config.js │ │ │ │ │ ├── package.json │ │ │ │ │ └── pages/ │ │ │ │ │ ├── 404.js │ │ │ │ │ ├── _app.js │ │ │ │ │ └── index.js │ │ │ │ ├── 27-non-word-param/ │ │ │ │ │ ├── next.config.js │ │ │ │ │ ├── now.json │ │ │ │ │ ├── package.json │ │ │ │ │ └── pages/ │ │ │ │ │ ├── [...path-segments].js │ │ │ │ │ └── index.js │ │ │ │ ├── 27-preview-mode/ │ │ │ │ │ ├── additional.js │ │ │ │ │ ├── next.config.js │ │ │ │ │ ├── now.json │ │ │ │ │ ├── package.json │ │ │ │ │ └── pages/ │ │ │ │ │ ├── api/ │ │ │ │ │ │ ├── disable.js │ │ │ │ │ │ └── enable.js │ │ │ │ │ └── docs/ │ │ │ │ │ ├── [...rest].js │ │ │ │ │ └── index.js │ │ │ │ ├── 28-nested-public/ │ │ │ │ │ ├── next.config.js │ │ │ │ │ ├── now.json │ │ │ │ │ ├── package.json │ │ │ │ │ ├── pages/ │ │ │ │ │ │ └── index.js │ │ │ │ │ └── public/ │ │ │ │ │ └── republic/ │ │ │ │ │ └── test.txt │ │ │ │ ├── 29-ssg-all-static/ │ │ │ │ │ ├── next.config.js │ │ │ │ │ ├── now.json │ │ │ │ │ ├── package.json │ │ │ │ │ └── pages/ │ │ │ │ │ ├── another-index/ │ │ │ │ │ │ └── index.js │ │ │ │ │ ├── another.js │ │ │ │ │ ├── another2.js │ │ │ │ │ ├── blog/ │ │ │ │ │ │ └── [post]/ │ │ │ │ │ │ ├── [comment].js │ │ │ │ │ │ └── index.js │ │ │ │ │ ├── forever.js │ │ │ │ │ ├── index.js │ │ │ │ │ └── nofallback/ │ │ │ │ │ └── [slug].js │ │ │ │ ├── 29-ssg-all-static-custom-404/ │ │ │ │ │ ├── next.config.js │ │ │ │ │ ├── now.json │ │ │ │ │ ├── package.json │ │ │ │ │ └── pages/ │ │ │ │ │ ├── 404.js │ │ │ │ │ ├── another.js │ │ │ │ │ ├── another2.js │ │ │ │ │ ├── blog/ │ │ │ │ │ │ └── [post]/ │ │ │ │ │ │ ├── [comment].js │ │ │ │ │ │ └── index.js │ │ │ │ │ ├── forever.js │ │ │ │ │ ├── index.js │ │ │ │ │ └── nofallback/ │ │ │ │ │ └── [slug].js │ │ │ │ ├── 30-monorepo-no-script/ │ │ │ │ │ ├── .gitignore │ │ │ │ │ ├── babel.config.js │ │ │ │ │ ├── now.json │ │ │ │ │ ├── package.json │ │ │ │ │ └── packages/ │ │ │ │ │ └── www/ │ │ │ │ │ ├── next.config.js │ │ │ │ │ ├── package.json │ │ │ │ │ └── pages/ │ │ │ │ │ └── index.jsx │ │ │ │ ├── 31-blocking-fallback/ │ │ │ │ │ ├── additional.js │ │ │ │ │ ├── next.config.js │ │ │ │ │ ├── now.json │ │ │ │ │ ├── package.json │ │ │ │ │ └── pages/ │ │ │ │ │ ├── fixed/ │ │ │ │ │ │ └── [slug].js │ │ │ │ │ └── regenerated/ │ │ │ │ │ └── [slug].js │ │ │ │ └── 32-custom-install-command/ │ │ │ │ ├── .gitignore │ │ │ │ ├── .yarn/ │ │ │ │ │ └── releases/ │ │ │ │ │ └── yarn-berry.cjs │ │ │ │ ├── .yarnrc.yml │ │ │ │ ├── install.js │ │ │ │ ├── next.config.js │ │ │ │ ├── package.json │ │ │ │ ├── pages/ │ │ │ │ │ └── index.js │ │ │ │ └── vercel.json │ │ │ ├── integration/ │ │ │ │ ├── gip-gsp-404/ │ │ │ │ │ ├── next.config.js │ │ │ │ │ ├── now.json │ │ │ │ │ ├── package.json │ │ │ │ │ └── pages/ │ │ │ │ │ ├── 404.js │ │ │ │ │ ├── _app.js │ │ │ │ │ ├── api/ │ │ │ │ │ │ └── hello.js │ │ │ │ │ └── index.js │ │ │ │ ├── index.test.js │ │ │ │ ├── legacy-custom-dependency/ │ │ │ │ │ ├── now.json │ │ │ │ │ ├── package.json │ │ │ │ │ └── pages/ │ │ │ │ │ └── index.js │ │ │ │ ├── legacy-standard/ │ │ │ │ │ ├── next.config.js │ │ │ │ │ ├── now.json │ │ │ │ │ ├── package.json │ │ │ │ │ └── pages/ │ │ │ │ │ └── index.js │ │ │ │ ├── legacy-static-files/ │ │ │ │ │ ├── next.config.js │ │ │ │ │ ├── now.json │ │ │ │ │ ├── package.json │ │ │ │ │ ├── pages/ │ │ │ │ │ │ └── index.js │ │ │ │ │ └── static/ │ │ │ │ │ └── test.txt │ │ │ │ ├── monorepo/ │ │ │ │ │ ├── now.json │ │ │ │ │ ├── shared/ │ │ │ │ │ │ └── hello.js │ │ │ │ │ └── www/ │ │ │ │ │ ├── next.config.js │ │ │ │ │ ├── package.json │ │ │ │ │ ├── pages/ │ │ │ │ │ │ └── index.js │ │ │ │ │ ├── public/ │ │ │ │ │ │ └── data.txt │ │ │ │ │ └── static/ │ │ │ │ │ └── test.txt │ │ │ │ ├── no-package-json-and-next-config/ │ │ │ │ │ ├── now.json │ │ │ │ │ └── pages/ │ │ │ │ │ └── index.js │ │ │ │ ├── postinstall/ │ │ │ │ │ ├── now.json │ │ │ │ │ ├── package.json │ │ │ │ │ ├── pages/ │ │ │ │ │ │ ├── goodbye.js │ │ │ │ │ │ └── index.js │ │ │ │ │ ├── postinstall.js │ │ │ │ │ └── public/ │ │ │ │ │ └── .gitkeep │ │ │ │ ├── public-files/ │ │ │ │ │ ├── create-public-file.js │ │ │ │ │ ├── next.config.js │ │ │ │ │ ├── now.json │ │ │ │ │ ├── package.json │ │ │ │ │ ├── pages/ │ │ │ │ │ │ └── index.js │ │ │ │ │ └── public/ │ │ │ │ │ └── robots.txt │ │ │ │ ├── serverless-config/ │ │ │ │ │ ├── next.config.js │ │ │ │ │ ├── now.json │ │ │ │ │ ├── package.json │ │ │ │ │ └── pages/ │ │ │ │ │ ├── goodbye.js │ │ │ │ │ └── index.js │ │ │ │ ├── serverless-config-async/ │ │ │ │ │ ├── next.config.js │ │ │ │ │ ├── now.json │ │ │ │ │ ├── package.json │ │ │ │ │ └── pages/ │ │ │ │ │ ├── goodbye.js │ │ │ │ │ └── index.js │ │ │ │ ├── serverless-config-monorepo-missing/ │ │ │ │ │ ├── nested/ │ │ │ │ │ │ ├── package.json │ │ │ │ │ │ └── pages/ │ │ │ │ │ │ ├── goodbye.js │ │ │ │ │ │ └── index.js │ │ │ │ │ └── now.json │ │ │ │ ├── serverless-config-monorepo-present/ │ │ │ │ │ ├── nested/ │ │ │ │ │ │ ├── next.config.js │ │ │ │ │ │ ├── package.json │ │ │ │ │ │ └── pages/ │ │ │ │ │ │ ├── goodbye.js │ │ │ │ │ │ └── index.js │ │ │ │ │ └── now.json │ │ │ │ ├── serverless-config-object/ │ │ │ │ │ ├── next.config.js │ │ │ │ │ ├── now.json │ │ │ │ │ ├── package.json │ │ │ │ │ └── pages/ │ │ │ │ │ ├── goodbye.js │ │ │ │ │ └── index.js │ │ │ │ ├── serverless-config-promise/ │ │ │ │ │ ├── next.config.js │ │ │ │ │ ├── now.json │ │ │ │ │ ├── package.json │ │ │ │ │ └── pages/ │ │ │ │ │ ├── goodbye.js │ │ │ │ │ └── index.js │ │ │ │ ├── serverless-no-config/ │ │ │ │ │ ├── now.json │ │ │ │ │ ├── package.json │ │ │ │ │ └── pages/ │ │ │ │ │ ├── goodbye.js │ │ │ │ │ └── index.js │ │ │ │ ├── serverless-no-config-build/ │ │ │ │ │ ├── now.json │ │ │ │ │ ├── package.json │ │ │ │ │ └── pages/ │ │ │ │ │ └── index.js │ │ │ │ ├── standard/ │ │ │ │ │ ├── now.json │ │ │ │ │ ├── package.json │ │ │ │ │ └── pages/ │ │ │ │ │ ├── goodbye.js │ │ │ │ │ └── index.js │ │ │ │ ├── static-files/ │ │ │ │ │ ├── next.config.js │ │ │ │ │ ├── now.json │ │ │ │ │ ├── package.json │ │ │ │ │ ├── pages/ │ │ │ │ │ │ └── index.js │ │ │ │ │ └── static/ │ │ │ │ │ └── test.txt │ │ │ │ └── static-site/ │ │ │ │ ├── package.json │ │ │ │ ├── pages/ │ │ │ │ │ ├── another.js │ │ │ │ │ ├── dynamic.js │ │ │ │ │ └── index.js │ │ │ │ └── vercel.json │ │ │ ├── lib/ │ │ │ │ └── run-build-lambda.js │ │ │ ├── unit/ │ │ │ │ ├── __snapshots__/ │ │ │ │ │ └── utils.test.js.snap │ │ │ │ ├── build.test.js │ │ │ │ ├── export.test.js │ │ │ │ ├── fixtures/ │ │ │ │ │ ├── entry/ │ │ │ │ │ │ └── next.config.js │ │ │ │ │ └── next.config.js │ │ │ │ └── utils.test.js │ │ │ └── utils.js │ │ └── tsconfig.json │ └── tf-next/ │ ├── .gitignore │ ├── README.md │ ├── index.js │ ├── package.json │ ├── src/ │ │ ├── client/ │ │ │ ├── aws-profile.ts │ │ │ ├── client.ts │ │ │ ├── index.ts │ │ │ └── services/ │ │ │ ├── api/ │ │ │ │ ├── api.ts │ │ │ │ ├── index.ts │ │ │ │ └── middleware.ts │ │ │ └── output/ │ │ │ ├── create-spinner.ts │ │ │ ├── index.ts │ │ │ └── output.ts │ │ ├── commands/ │ │ │ ├── alias/ │ │ │ │ ├── alias-list.ts │ │ │ │ ├── alias-remove.ts │ │ │ │ ├── alias-set.ts │ │ │ │ ├── alias.ts │ │ │ │ └── index.ts │ │ │ ├── build/ │ │ │ │ ├── build.ts │ │ │ │ └── index.ts │ │ │ ├── deploy/ │ │ │ │ ├── deploy.ts │ │ │ │ └── index.ts │ │ │ ├── deployment/ │ │ │ │ ├── deployment-list.ts │ │ │ │ ├── deployment-remove.ts │ │ │ │ ├── deployment.ts │ │ │ │ └── index.ts │ │ │ └── main.ts │ │ ├── index.ts │ │ ├── middleware/ │ │ │ └── global.ts │ │ ├── types.ts │ │ └── utils/ │ │ ├── errors/ │ │ │ ├── cli-error.ts │ │ │ ├── errors.ts │ │ │ ├── index.ts │ │ │ └── response-error.ts │ │ ├── index.ts │ │ ├── project-config.ts │ │ ├── routes.ts │ │ ├── strlen.ts │ │ └── trim-protocol.ts │ └── tsconfig.json ├── patches/ │ └── aws-cdk-lib+2.25.0.patch ├── scripts/ │ └── publish-release.sh ├── test/ │ ├── README.md │ ├── build-fixtures.js │ ├── fixtures/ │ │ ├── 00-shared-lambdas/ │ │ │ ├── next.config.js │ │ │ ├── package.json │ │ │ ├── pages/ │ │ │ │ ├── [teamSlug]/ │ │ │ │ │ └── [project]/ │ │ │ │ │ └── [id].js │ │ │ │ ├── groups/ │ │ │ │ │ └── [id].js │ │ │ │ ├── products/ │ │ │ │ │ └── [pid]/ │ │ │ │ │ └── index.js │ │ │ │ └── teams/ │ │ │ │ └── invite/ │ │ │ │ └── [inviteCode].js │ │ │ └── probes.json │ │ ├── 00-trailing-slash-add/ │ │ │ ├── next.config.js │ │ │ ├── package.json │ │ │ ├── pages/ │ │ │ │ ├── abc/ │ │ │ │ │ └── def.js │ │ │ │ ├── api/ │ │ │ │ │ └── hello.js │ │ │ │ ├── blog/ │ │ │ │ │ └── [post].js │ │ │ │ └── foo.js │ │ │ ├── probes.json │ │ │ └── public/ │ │ │ └── test.txt │ │ ├── 01-custom-routing/ │ │ │ ├── next.config.js │ │ │ ├── package.json │ │ │ ├── pages/ │ │ │ │ ├── hello.js │ │ │ │ ├── index.js │ │ │ │ └── param.js │ │ │ └── probes.json │ │ ├── 02-api/ │ │ │ ├── next.config.js │ │ │ ├── package.json │ │ │ ├── pages/ │ │ │ │ ├── api/ │ │ │ │ │ ├── actions/ │ │ │ │ │ │ └── [actionId]/ │ │ │ │ │ │ └── info.js │ │ │ │ │ ├── host.js │ │ │ │ │ ├── index.js │ │ │ │ │ └── viewer-header.js │ │ │ │ └── test.js │ │ │ └── probes.json │ │ └── 03-yarn-workspaces/ │ │ ├── lerna.json │ │ ├── package.json │ │ ├── packages/ │ │ │ ├── common/ │ │ │ │ ├── dist/ │ │ │ │ │ ├── index.d.ts │ │ │ │ │ └── index.js │ │ │ │ ├── package.json │ │ │ │ ├── src/ │ │ │ │ │ └── index.ts │ │ │ │ └── tsconfig.json │ │ │ └── web/ │ │ │ ├── next-env.d.ts │ │ │ ├── next.config.js │ │ │ ├── package.json │ │ │ ├── pages/ │ │ │ │ ├── _app.tsx │ │ │ │ └── index.tsx │ │ │ └── tsconfig.json │ │ └── probes.json │ ├── jest.setup.ts │ ├── routes.test.ts │ ├── tsconfig.json │ └── utils/ │ ├── attach-logger.ts │ ├── host-ip-address.ts │ ├── index.ts │ └── s3-create-bucket.ts ├── test.env ├── tsconfig.json ├── turbo.json ├── variables.tf └── versions.tf