Skip to content

Commit 7120dd9

Browse files
authored
Merge pull request #9 from jagaapple/release/v1.0.1
# Changes and Fixes - Enable automatic code formatting for VS Code #8 - Fix setting headers after sending #10
2 parents 1c28446 + 2d85a3d commit 7120dd9

File tree

7 files changed

+68
-3
lines changed

7 files changed

+68
-3
lines changed

.vscode/settings.json

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
128
1212
],
1313

14+
1415
// ---------------------------------------------------------------------------------------------------------------------------
1516
// Files
1617
// ---------------------------------------------------------------------------------------------------------------------------
@@ -32,12 +33,28 @@
3233
"typescript.tsdk": "node_modules/typescript/lib",
3334

3435

36+
// ---------------------------------------------------------------------------------------------------------------------------
37+
// Extensions
38+
// ---------------------------------------------------------------------------------------------------------------------------
39+
// ESLint
40+
"eslint.autoFixOnSave": true,
41+
"eslint.validate": [
42+
{ "language": "javascript", "autoFix": true },
43+
{ "language": "javascriptreact", "autoFix": true },
44+
{ "language": "typescript", "autoFix": true },
45+
{ "language": "typescriptreact", "autoFix": true }
46+
],
47+
48+
3549
// ---------------------------------------------------------------------------------------------------------------------------
3650
// Language Setings
3751
// ---------------------------------------------------------------------------------------------------------------------------
3852
"[javascript]": {
3953
"editor.formatOnSave": true
4054
},
55+
"[javascriptreact]": {
56+
"editor.formatOnSave": true
57+
},
4158
"[typescript]": {
4259
"editor.formatOnSave": true
4360
},

CHANGELOG.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,9 @@
11
# Changelog
2+
## 1.0.1 (2019-12-13)
3+
- Fix setting headers after sending #10 - [@jagaapple](https://github.com/jagaapple)
4+
- Improve development environment
5+
- Enable automatic code formatting for VS Code #8 - [@jagaapple](https://github.com/jagaapple)
6+
27
## 1.0.0 (2019-12-04)
38
- Initial public release - [@jagaapple](https://github.com/jagaapple)
49

example/pages/redirector.tsx

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
import { ServerResponse } from "http";
2+
import { NextPage } from "next";
3+
4+
const moveToTop = (res: ServerResponse) => {
5+
res.writeHead(302, { Location: "/" });
6+
res.end();
7+
};
8+
9+
const Page: NextPage = () => null;
10+
11+
Page.getInitialProps = async ({ res }) => {
12+
if (res == undefined) return {};
13+
14+
moveToTop(res);
15+
16+
return {};
17+
};
18+
19+
export default Page;

package-lock.json

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "next-secure-headers",
3-
"version": "1.0.0",
3+
"version": "1.0.1",
44
"description": "Sets secure response headers for Next.js.",
55
"keywords": [
66
"Next.js",

src/index.spec.ts

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import * as React from "react";
22

33
import * as rules from "./rules";
4-
import { default as withSecureHeaders, createHeadersObject } from "./index";
4+
import { createHeadersObject, default as withSecureHeaders } from "./index";
55

66
describe("createHeadersObject", () => {
77
let contentSecurityPolicyHeaderCreatorSpy: jest.SpyInstance<
@@ -188,5 +188,28 @@ describe("withSecureHeaders", () => {
188188
await expect(ComponentWithSecureHeaders.getInitialProps!(dummyContext)).resolves.toEqual(dummyInitialProps);
189189
});
190190
});
191+
192+
context('when "headersSent" property of "res" is true', () => {
193+
it('should not call "context.ctx.res.setHeader()"', async () => {
194+
const DummyComponent = () => React.createElement("div");
195+
const ComponentWithSecureHeaders = withSecureHeaders()(DummyComponent);
196+
197+
const resSetHeeaderSpy = jest.fn();
198+
const dummyContext: any = { ctx: { res: { setHeader: resSetHeeaderSpy, headersSent: true } } };
199+
await ComponentWithSecureHeaders.getInitialProps!(dummyContext);
200+
201+
expect(resSetHeeaderSpy).not.toBeCalled();
202+
});
203+
204+
it('should return the returned value from "getInitialProps"', async () => {
205+
const DummyComponent = () => React.createElement("div");
206+
const dummyInitialProps = { dummy: "dummy" };
207+
DummyComponent.getInitialProps = async () => dummyInitialProps;
208+
const ComponentWithSecureHeaders = withSecureHeaders()(DummyComponent);
209+
210+
const dummyContext: any = { ctx: { res: { setHeader: jest.fn(), headersSent: true } } };
211+
await expect(ComponentWithSecureHeaders.getInitialProps!(dummyContext)).resolves.toEqual(dummyInitialProps);
212+
});
213+
});
191214
});
192215
});

src/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,7 @@ export default (options: Options = {}) => (ChildComponent: NextComponent) => {
9090
const initialProps = (await ChildComponent.getInitialProps?.(context)) ?? {};
9191
const res = context.res ?? context.ctx?.res;
9292
if (res == undefined) return initialProps;
93+
if (res.headersSent) return initialProps;
9394

9495
const headers = createHeadersObject(options);
9596
Object.entries(headers).forEach(([name, value]) => res.setHeader(name, value));

0 commit comments

Comments
 (0)