import { polyfill } from '@astrojs/webapi'; import type { Handler } from '@netlify/functions'; import { SSRManifest } from 'astro'; import { App } from 'astro/app'; polyfill(globalThis, { exclude: 'window document', }); export interface Args { binaryMediaTypes?: string[]; } function parseContentType(header?: string) { return header?.split(';')[0] ?? ''; } const clientAddressSymbol = Symbol.for('astro.clientAddress'); export const createExports = (manifest: SSRManifest, args: Args) => { const app = new App(manifest); const binaryMediaTypes = args.binaryMediaTypes ?? []; const knownBinaryMediaTypes = new Set([ 'audio/3gpp', 'audio/3gpp2', 'audio/aac', 'audio/midi', 'audio/mpeg', 'audio/ogg', 'audio/opus', 'audio/wav', 'audio/webm', 'audio/x-midi', 'image/avif', 'image/bmp', 'image/gif', 'image/vnd.microsoft.icon', 'image/jpeg', 'image/png', 'image/svg+xml', 'image/tiff', 'image/webp', 'video/3gpp', 'video/3gpp2', 'video/mp2t', 'video/mp4', 'video/mpeg', 'video/ogg', 'video/x-msvideo', 'video/webm', ...binaryMediaTypes, ]); const handler: Handler = async (event) => { const { httpMethod, headers, rawUrl, body: requestBody, isBase64Encoded } = event; const init: RequestInit = { method: httpMethod, headers: new Headers(headers as any), }; // Attach the event body the the request, with proper encoding. if (httpMethod !== 'GET' && httpMethod !== 'HEAD') { const encoding = isBase64Encoded ? 'base64' : 'utf-8'; init.body = typeof requestBody === 'string' ? Buffer.from(requestBody, encoding) : requestBody; } const request = new Request(rawUrl, init); let routeData = app.match(request, { matchNotFound: true }); if (!routeData) { return { statusCode: 404, body: 'Not found', }; } const ip = headers['x-nf-client-connection-ip']; Reflect.set(request, clientAddressSymbol, ip); const response: Response = await app.render(request, routeData); const responseHeaders = Object.fromEntries(response.headers.entries()); const responseContentType = parseContentType(responseHeaders['content-type']); const responseIsBase64Encoded = knownBinaryMediaTypes.has(responseContentType); const responseBody = responseIsBase64Encoded ? Buffer.from(await response.text(), 'binary').toString('base64') : await response.text(); const fnResponse: any = { statusCode: response.status, headers: responseHeaders, body: responseBody, isBase64Encoded: responseIsBase64Encoded, }; // Special-case set-cookie which has to be set an different way :/ // The fetch API does not have a way to get multiples of a single header, but instead concatenates // them. There are non-standard ways to do it, and node-fetch gives us headers.raw() // See https://github.com/whatwg/fetch/issues/973 for discussion if (response.headers.has('set-cookie') && 'raw' in response.headers) { // Node fetch allows you to get the raw headers, which includes multiples of the same type. // This is needed because Set-Cookie *must* be called for each cookie, and can't be // concatenated together. type HeadersWithRaw = Headers & { raw: () => Record; }; const rawPacked = (response.headers as HeadersWithRaw).raw(); if ('set-cookie' in rawPacked) { fnResponse.multiValueHeaders = { 'set-cookie': rawPacked['set-cookie'], }; } } return fnResponse; }; return { handler }; }; examples/blog Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/test/react-component.test.js (unfollow)
AgeCommit message (Collapse)AuthorFilesLines
2021-09-14fix bad ci pathsGravatar Fred K. Schott 1-5/+5
2021-09-14update changesetsGravatar Fred K. Schott 1-1/+1
2021-09-14Fix passing Markdown content through props (#1259) (#1343)Gravatar kelvinsjk 4-0/+22
Co-authored-by: Kelvin Soh <kelvinsoh@pop-os.localdomain> Co-authored-by: Fred K. Schott <fkschott@gmail.com>
2021-09-14Improve stats logging to use `pretty-bytes` so that 20B doesn't get output ↵Gravatar Caleb Jasik 4-2/+13
as 0kB, which is accurate, but confusing (#1329)
2021-09-14[ci] yarn formatGravatar FredKSchott 1-1/+1
2021-09-14Merge "Remove check for referenced files" (#1196)Gravatar (none) 6-6/+45
Co-authored-by: Fred K. Schott <fkschott@gmail.com>
2021-09-14Docs: Add READMEs for renderers (#1351)Gravatar Drew Powers 8-1/+184
* Add README stub for renderers * Add renderer READMEs
2021-09-14Update deployment docs for Netlify deployment (#1361)Gravatar Cassidy Williams 1-7/+9
* Update build command for Netlify * Clarify directions for Netlify deploy versions * Create deploy.md * Update deploy.md * Update deploy.md Co-authored-by: Fred K. Schott <fkschott@gmail.com>
2021-09-14Delete perfect-kids-occur.md (#1372)Gravatar Fred K. Schott 1-5/+0
2021-09-14[ci] yarn formatGravatar FredKSchott 1-15/+10
2021-09-14Self-host homepage fonts to improve page load speed (#1370)Gravatar mundry 14-5/+52
Co-authored-by: mundry <mundry@users.noreply.github.com>
2021-09-14Add types to examples and docs (#1347)Gravatar Matthew Phillips 8-20/+60
* Adds a changeset * Add types to examples and docs * Make changes based on review feedback * Avoid using the variable named props * Make path a const
2021-09-14[ci] collect statsGravatar FredKSchott 1-0/+1
2021-09-13Fix typo (#1360)Gravatar Marcus Otterström 1-1/+1
2021-09-13Disclaimer for Github pages / jekyll quirk (#1355)Gravatar Tc001 2-0/+7
* Added GH pages disclaimer * Added changeset * Reworded disclaimer * Correct GH Pages casing * Update deploy.md Co-authored-by: Fred K. Schott <fkschott@gmail.com>
2021-09-13fix outdated lockfile issue (#1357)Gravatar Fred K. Schott 1-3/+1
2021-09-13Add `astro.build/play` link (#1359)Gravatar Nate Moore 1-0/+6
* feat: add rewrite to play.astro.build * fix: subpath redirects
2021-09-13[ci] yarn formatGravatar FredKSchott 2-8/+7
2021-09-13Add a new lockfile (#1356)Gravatar Matthew Phillips 1-19/+19
2021-09-13[ci] collect statsGravatar FredKSchott 1-0/+1
2021-09-12[ci] collect statsGravatar FredKSchott 1-0/+1
2021-09-11[ci] collect statsGravatar FredKSchott 1-0/+1
2021-09-10Prevent removing CSS preloads during bundling (#1326)Gravatar Bartek Igielski 8-18/+96
* Prevent removing nodes, becasue styles preloading was detected earlier * Add separate deduping for preloads and cover it with tests. * Create quiet-horses-turn.md * Test merging preload tags
2021-09-10Fix typos in Netlify sponsorship announcement blog post (#1346)Gravatar mundry 1-4/+4
Co-authored-by: mundry <mundry@users.noreply.github.com>
2021-09-10[ci] collect statsGravatar FredKSchott 2-1/+2
2021-09-09blog: announce netlify sponsorship (#1345)Gravatar Fred K. Schott 4-5/+64
2021-09-09Version Packages (#1344)Gravatar github-actions[bot] 29-53/+42
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2021-09-09Revert "Version Packages (#1303)"Gravatar Fred K. Schott 29-42/+53
This reverts commit 1a88cfde7d2b3854e279c1bf3e12adf5d2155801.
2021-09-09update lockfileastro@0.20.5@astrojs/markdown-support@0.3.1Gravatar Fred K. Schott 1-9/+9
2021-09-09Version Packages (#1303)Gravatar github-actions[bot] 29-53/+42
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2021-09-09[ci] collect statsGravatar FredKSchott 2-1/+2
2021-09-08Update netlify deploy instructions for `.nvmrc` syntax (#1337)Gravatar Caleb Jasik 1-1/+1
2021-09-08[ci] yarn formatGravatar jasikpark 1-1/+0