summaryrefslogtreecommitdiff
path: root/packages/integrations
diff options
context:
space:
mode:
authorGravatar Arsh <69170106+lilnasy@users.noreply.github.com> 2023-11-07 14:01:04 +0000
committerGravatar GitHub <noreply@github.com> 2023-11-07 14:01:04 +0000
commit754e4fd31ce49eadb2cf4951e941a48d11d10e73 (patch)
tree522acb3729dfb47b5a85becafb05b4b3cbbad253 /packages/integrations
parent35739d01e9cc4fa31a8b85201feecf29c747eca9 (diff)
downloadastro-754e4fd31ce49eadb2cf4951e941a48d11d10e73.tar.gz
astro-754e4fd31ce49eadb2cf4951e941a48d11d10e73.tar.zst
astro-754e4fd31ce49eadb2cf4951e941a48d11d10e73.zip
feat(vercel): streaming (#8879)
Diffstat (limited to 'packages/integrations')
-rw-r--r--packages/integrations/vercel/src/serverless/adapter.ts3
-rw-r--r--packages/integrations/vercel/test/fixtures/streaming/astro.config.mjs7
-rw-r--r--packages/integrations/vercel/test/fixtures/streaming/package.json10
-rw-r--r--packages/integrations/vercel/test/fixtures/streaming/src/pages/one.astro8
-rw-r--r--packages/integrations/vercel/test/fixtures/streaming/src/pages/two.astro8
-rw-r--r--packages/integrations/vercel/test/static-assets.test.js15
-rw-r--r--packages/integrations/vercel/test/streaming.test.js21
7 files changed, 64 insertions, 8 deletions
diff --git a/packages/integrations/vercel/src/serverless/adapter.ts b/packages/integrations/vercel/src/serverless/adapter.ts
index ea7cd7e53..621849688 100644
--- a/packages/integrations/vercel/src/serverless/adapter.ts
+++ b/packages/integrations/vercel/src/serverless/adapter.ts
@@ -341,7 +341,7 @@ interface CreateFunctionFolderArgs {
NTF_CACHE: any;
includeFiles: URL[];
excludeFiles?: string[];
- maxDuration?: number;
+ maxDuration: number | undefined;
}
async function createFunctionFolder({
@@ -381,6 +381,7 @@ async function createFunctionFolder({
handler,
launcherType: 'Nodejs',
maxDuration,
+ supportsResponseStreaming: true,
});
}
diff --git a/packages/integrations/vercel/test/fixtures/streaming/astro.config.mjs b/packages/integrations/vercel/test/fixtures/streaming/astro.config.mjs
new file mode 100644
index 000000000..b1a48b07d
--- /dev/null
+++ b/packages/integrations/vercel/test/fixtures/streaming/astro.config.mjs
@@ -0,0 +1,7 @@
+import { defineConfig } from 'astro/config';
+import vercel from '@astrojs/vercel/serverless';
+
+export default defineConfig({
+ output: "server",
+ adapter: vercel()
+});
diff --git a/packages/integrations/vercel/test/fixtures/streaming/package.json b/packages/integrations/vercel/test/fixtures/streaming/package.json
new file mode 100644
index 000000000..80068581c
--- /dev/null
+++ b/packages/integrations/vercel/test/fixtures/streaming/package.json
@@ -0,0 +1,10 @@
+{
+ "name": "@test/vercel-streaming",
+ "version": "0.0.0",
+ "private": true,
+ "dependencies": {
+ "@astrojs/vercel": "workspace:*",
+ "astro": "workspace:*"
+ }
+}
+ \ No newline at end of file
diff --git a/packages/integrations/vercel/test/fixtures/streaming/src/pages/one.astro b/packages/integrations/vercel/test/fixtures/streaming/src/pages/one.astro
new file mode 100644
index 000000000..0c7fb90a7
--- /dev/null
+++ b/packages/integrations/vercel/test/fixtures/streaming/src/pages/one.astro
@@ -0,0 +1,8 @@
+<html>
+ <head>
+ <title>One</title>
+ </head>
+ <body>
+ <h1>One</h1>
+ </body>
+</html>
diff --git a/packages/integrations/vercel/test/fixtures/streaming/src/pages/two.astro b/packages/integrations/vercel/test/fixtures/streaming/src/pages/two.astro
new file mode 100644
index 000000000..e7ba9910e
--- /dev/null
+++ b/packages/integrations/vercel/test/fixtures/streaming/src/pages/two.astro
@@ -0,0 +1,8 @@
+<html>
+ <head>
+ <title>Two</title>
+ </head>
+ <body>
+ <h1>Two</h1>
+ </body>
+</html>
diff --git a/packages/integrations/vercel/test/static-assets.test.js b/packages/integrations/vercel/test/static-assets.test.js
index 7f360aebc..92e37c0af 100644
--- a/packages/integrations/vercel/test/static-assets.test.js
+++ b/packages/integrations/vercel/test/static-assets.test.js
@@ -7,9 +7,10 @@ describe('Static Assets', () => {
const VALID_CACHE_CONTROL = 'public, max-age=31536000, immutable';
- async function build({ adapter, assets }) {
+ async function build({ adapter, assets, output }) {
fixture = await loadFixture({
root: './fixtures/static-assets/',
+ output,
adapter,
build: {
assets,
@@ -38,31 +39,31 @@ describe('Static Assets', () => {
}
describe('static adapter', async () => {
- const adapter = await import('@astrojs/vercel/static');
+ const { default: vercel } = await import('@astrojs/vercel/static');
it('has cache control', async () => {
- await build({ adapter });
+ await build({ adapter: vercel() });
checkValidCacheControl();
});
it('has cache control other assets', async () => {
const assets = '_foo';
- await build({ adapter, assets });
+ await build({ adapter: vercel(), assets });
checkValidCacheControl(assets);
});
});
describe('serverless adapter', async () => {
- const adapter = await import('@astrojs/vercel/serverless');
+ const { default: vercel } = await import('@astrojs/vercel/serverless');
it('has cache control', async () => {
- await build({ adapter });
+ await build({ output: "server", adapter: vercel() });
checkValidCacheControl();
});
it('has cache control other assets', async () => {
const assets = '_foo';
- await build({ adapter, assets });
+ await build({ output: "server", adapter: vercel(), assets });
checkValidCacheControl(assets);
});
});
diff --git a/packages/integrations/vercel/test/streaming.test.js b/packages/integrations/vercel/test/streaming.test.js
new file mode 100644
index 000000000..93dc95c39
--- /dev/null
+++ b/packages/integrations/vercel/test/streaming.test.js
@@ -0,0 +1,21 @@
+import { loadFixture } from './test-utils.js';
+import { expect } from 'chai';
+
+describe('maxDuration', () => {
+ /** @type {import('./test-utils.js').Fixture} */
+ let fixture;
+
+ before(async () => {
+ fixture = await loadFixture({
+ root: './fixtures/streaming/',
+ });
+ await fixture.build();
+ });
+
+ it('makes it to vercel function configuration', async () => {
+ const vcConfig = JSON.parse(
+ await fixture.readFile('../.vercel/output/functions/render.func/.vc-config.json')
+ );
+ expect(vcConfig).to.deep.include({ supportsResponseStreaming: true });
+ });
+});