Skip to content

Commit

Permalink
fix(adapter): pre-rendered routes and init server
Browse files Browse the repository at this point in the history
  • Loading branch information
juranki committed Jan 1, 2023
1 parent 08f6e30 commit 905b534
Show file tree
Hide file tree
Showing 4 changed files with 28 additions and 26 deletions.
4 changes: 1 addition & 3 deletions packages/adapter/src/files/app.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,10 @@ declare module 'MANIFEST' {
import { SSRManifest } from '@sveltejs/kit';

export const manifest: SSRManifest;
export const prerendered: Set<string>;
}

declare module 'PRERENDERED' {
export const prerendered: string[]
export const createIndex: boolean
export const prerenderedPages: { [route: string]: string }
}

declare var SVELTEKIT_CDK_ENV_MAP: Record<string, string> | undefined
Expand Down
24 changes: 16 additions & 8 deletions packages/adapter/src/files/at-edge-handler.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { Server } from 'SERVER'
import { manifest } from 'MANIFEST'
import { prerendered, createIndex } from 'PRERENDERED'
import { prerenderedPages } from 'PRERENDERED'
import type {
CloudFrontHeaders,
CloudFrontRequestHandler,
Expand All @@ -11,6 +11,8 @@ import { isBlaclisted } from './header-blacklist'

const server = new Server(manifest)
let envReady = false
let initDone = false
const svelteEnv: { [key: string]: string } = {}

export const handler: CloudFrontRequestHandler = async (event, context) => {

Expand All @@ -26,24 +28,30 @@ export const handler: CloudFrontRequestHandler = async (event, context) => {
const request = event.Records[0].cf.request
const config = event.Records[0].cf.config
const customHeaders = request.origin?.s3?.customHeaders

if (prerendered.includes(request.uri)) {
if (request.uri === '/' || request.uri === '') {
request.uri = '/index.html'
} else {
request.uri = `${request.uri}${createIndex ? '/index.html' : '.html'}`
}
const uri: string = request.uri === '' ? '/' : request.uri
if (prerenderedPages[uri]) {
log('DEBUG', 'loadPrerendered', {
uri: request.uri,
path: prerenderedPages[uri]
})
request.uri = `/${prerenderedPages[uri]}`
return request
}

if (!envReady && SVELTEKIT_CDK_ENV_MAP && customHeaders) {
for (const headerName in SVELTEKIT_CDK_ENV_MAP) {
process.env[SVELTEKIT_CDK_ENV_MAP[headerName]] = customHeaders[headerName][0].value
svelteEnv[SVELTEKIT_CDK_ENV_MAP[headerName]] = customHeaders[headerName][0].value
}
log('DEBUG', 'process.env', process.env)
envReady = true
}

if (!initDone) {
await server.init({ env: svelteEnv })
initDone = true
}

if (request.body && request.body.inputTruncated) {
log('ERROR', 'input trucated', request)
log('ERROR', 'ref', 'https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/edge-functions-restrictions.html#lambda-at-edge-function-restrictions')
Expand Down
23 changes: 9 additions & 14 deletions packages/adapter/src/index.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import type { Adapter } from '@sveltejs/kit'
import type { Adapter, Builder } from '@sveltejs/kit'
import * as path from 'path'
import { build } from 'esbuild'
import { writeFileSync, mkdirSync, renameSync } from 'fs';
Expand Down Expand Up @@ -72,14 +72,6 @@ export function adapter({
renameSync(path.join(dirs.static, filename), path.join(dirs.static, newFilename))
}

// get the routes of prerendered pages
const prerenderedRoutes = prerendered.map(
f => `/${f.replace(/^index.html$/, '').replace(/\/index.html$/, '').replace(/.html$/, '')}`
)
writeFileSync(
path.join(targetPath, 'prerendered.json'),
JSON.stringify(prerenderedRoutes),
)
writeFileSync(
path.join(targetPath, 'client.json'),
`[${clientfiles.map(p => `"${p}"`).join(',')}]`
Expand All @@ -102,7 +94,7 @@ export function adapter({
})
writePrerenderedTs(
path.join(builder.getBuildDirectory('cdk'), 'prerendered.ts'),
prerenderedRoutes, builder.config.kit.trailingSlash === 'always',
builder,
)
await build({
entryPoints: [path.join(builder.getBuildDirectory('cdk'), 'at-edge-handler.js')],
Expand Down Expand Up @@ -141,12 +133,15 @@ function writeRoutes(path: string, pre: string[], cli: string[]) {

writeFileSync(path, JSON.stringify(rv, null, 2))
}
function writePrerenderedTs(path: string, pre: string[], createIndex: boolean) {
function writePrerenderedTs(path: string, builder: Builder) {
const prerenderedPages: { [route: string]: string } = {}
builder.prerendered.pages.forEach((v, k) => {
prerenderedPages[k] = v.file
})
writeFileSync(
path,
[
`export const prerendered = [${pre.map(p => `'${p}'`)}]`,
`export const createIndex = ${createIndex}`
`export const prerenderedPages = ${JSON.stringify(prerenderedPages)}`
].join('\n')
)
}
}
3 changes: 2 additions & 1 deletion packages/sample-site-v2/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,8 @@
"build": "vite build",
"preview": "vite preview",
"check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json",
"check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch"
"check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch",
"prepare": "svelte-kit sync"
},
"devDependencies": {
"@sveltekit-cdk/adapter": "workspace:*",
Expand Down

0 comments on commit 905b534

Please sign in to comment.