Skip to content

Commit

Permalink
Warn when trying to access headers in SSG mode (#3021)
Browse files Browse the repository at this point in the history
* Warn when trying to access headers in SSG mode

* Adds a changeset

* Warn when accessing headers at all + a test
  • Loading branch information
matthewp authored Apr 7, 2022
1 parent 42e0e0f commit 7e9d82d
Show file tree
Hide file tree
Showing 7 changed files with 60 additions and 3 deletions.
5 changes: 5 additions & 0 deletions .changeset/odd-squids-rest.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'astro': patch
---

Warn when attempting to access headers in SSG mode
5 changes: 3 additions & 2 deletions packages/astro/src/core/build/generate.ts
Original file line number Diff line number Diff line change
Expand Up @@ -191,6 +191,7 @@ async function generatePath(
}
}

const ssr = isBuildingToSSR(opts.astroConfig);
const url = new URL(origin + pathname);
const options: RenderOptions = {
legacyBuild: false,
Expand Down Expand Up @@ -219,13 +220,13 @@ async function generatePath(
const fullyRelativePath = relPath[0] === '.' ? relPath : './' + relPath;
return fullyRelativePath;
},
request: createRequest({ url, headers: new Headers(), logging }),
request: createRequest({ url, headers: new Headers(), logging, ssr }),
route: pageData.route,
routeCache,
site: astroConfig.site
? new URL(astroConfig.base, astroConfig.site).toString()
: astroConfig.site,
ssr: isBuildingToSSR(opts.astroConfig),
ssr,
};

let body: string;
Expand Down
18 changes: 18 additions & 0 deletions packages/astro/src/core/request.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ export interface CreateRequestOptions {
method?: string;
body?: RequestBody | undefined;
logging: LogOptions;
ssr: boolean;
}

export function createRequest({
Expand All @@ -19,6 +20,7 @@ export function createRequest({
method = 'GET',
body = undefined,
logging,
ssr
}: CreateRequestOptions): Request {
let headersObj =
headers instanceof Headers
Expand Down Expand Up @@ -50,5 +52,21 @@ export function createRequest({
},
});

if(!ssr) {
// Warn when accessing headers in SSG mode
const _headers = request.headers;
const headersDesc = Object.getOwnPropertyDescriptor(request, 'headers') || {};
Object.defineProperty(request, 'headers', {
...headersDesc,
get() {
warn(logging,
'ssg',
`Headers are not exposed in static-site generation (SSG) mode. To enable reading headers you need to set an SSR adapter in your config.`
);
return _headers;
}
})
}

return request;
}
1 change: 1 addition & 0 deletions packages/astro/src/vite-plugin-astro-server/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -176,6 +176,7 @@ async function handleRequest(
method: req.method,
body,
logging,
ssr: buildingToSSR
});

try {
Expand Down
1 change: 1 addition & 0 deletions packages/astro/src/vite-plugin-build-html/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -114,6 +114,7 @@ export function rollupPluginAstroScanHTML(options: PluginOptions): VitePlugin {
url: new URL(origin + pathname),
headers: new Headers(),
logging,
ssr: false,
}),
mode: 'production',
origin,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,9 @@ import MainHead from '../components/MainHead.astro';
import Nav from '../components/Nav/index.jsx';
import { test as ssrConfigTest } from '@test/static-build-pkg';
let allPosts = await Astro.glob('./posts/*.md');
// Note that this just tests a warning
Astro.request.headers;
---
<html>
<head>
Expand Down
30 changes: 29 additions & 1 deletion packages/astro/test/static-build.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,14 +6,32 @@ function addLeadingSlash(path) {
return path.startsWith('/') ? path : '/' + path;
}

/**
* @typedef {import('../src/core/logger/core').LogMessage} LogMessage
*/

describe('Static build', () => {
/** @type {import('./test-utils').Fixture} */
let fixture;
/** @type {LogMessage[]} */
let logs = [];

before(async () => {
/** @type {import('../src/core/logger/core').LogOptions} */
const logging = {
dest: {
write(chunk) {
logs.push(chunk);
}
},
level: 'warn',
};


fixture = await loadFixture({
root: './fixtures/static build/',
});
await fixture.build();
await fixture.build({ logging });
});

it('Builds out .astro pages', async () => {
Expand Down Expand Up @@ -137,4 +155,14 @@ describe('Static build', () => {
const $ = cheerioLoad(html);
expect($('#ssr-config').text()).to.equal('testing');
});

it('warns when accessing headers', async () => {
let found = false;
for(const log of logs) {
if(log.type === 'ssg' && /[hH]eaders are not exposed in static-site generation/.test(log.args[0])) {
found = true;
}
}
expect(found).to.equal(true, 'Found the log message');
});
});

0 comments on commit 7e9d82d

Please sign in to comment.