Skip to content

Commit

Permalink
Merge pull request #9 from jagaapple/release/v1.0.1
Browse files Browse the repository at this point in the history
# Changes and Fixes
- Enable automatic code formatting for VS Code #8
- Fix setting headers after sending #10
  • Loading branch information
jagaapple committed Dec 13, 2019
2 parents 1c28446 + 2d85a3d commit 7120dd9
Show file tree
Hide file tree
Showing 7 changed files with 68 additions and 3 deletions.
17 changes: 17 additions & 0 deletions .vscode/settings.json
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
128
],


// ---------------------------------------------------------------------------------------------------------------------------
// Files
// ---------------------------------------------------------------------------------------------------------------------------
Expand All @@ -32,12 +33,28 @@
"typescript.tsdk": "node_modules/typescript/lib",


// ---------------------------------------------------------------------------------------------------------------------------
// Extensions
// ---------------------------------------------------------------------------------------------------------------------------
// ESLint
"eslint.autoFixOnSave": true,
"eslint.validate": [
{ "language": "javascript", "autoFix": true },
{ "language": "javascriptreact", "autoFix": true },
{ "language": "typescript", "autoFix": true },
{ "language": "typescriptreact", "autoFix": true }
],


// ---------------------------------------------------------------------------------------------------------------------------
// Language Setings
// ---------------------------------------------------------------------------------------------------------------------------
"[javascript]": {
"editor.formatOnSave": true
},
"[javascriptreact]": {
"editor.formatOnSave": true
},
"[typescript]": {
"editor.formatOnSave": true
},
Expand Down
5 changes: 5 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,9 @@
# Changelog
## 1.0.1 (2019-12-13)
- Fix setting headers after sending #10 - [@jagaapple](https://github.com/jagaapple)
- Improve development environment
- Enable automatic code formatting for VS Code #8 - [@jagaapple](https://github.com/jagaapple)

## 1.0.0 (2019-12-04)
- Initial public release - [@jagaapple](https://github.com/jagaapple)

Expand Down
19 changes: 19 additions & 0 deletions example/pages/redirector.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
import { ServerResponse } from "http";
import { NextPage } from "next";

const moveToTop = (res: ServerResponse) => {
res.writeHead(302, { Location: "/" });
res.end();
};

const Page: NextPage = () => null;

Page.getInitialProps = async ({ res }) => {
if (res == undefined) return {};

moveToTop(res);

return {};
};

export default Page;
2 changes: 1 addition & 1 deletion package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "next-secure-headers",
"version": "1.0.0",
"version": "1.0.1",
"description": "Sets secure response headers for Next.js.",
"keywords": [
"Next.js",
Expand Down
25 changes: 24 additions & 1 deletion src/index.spec.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import * as React from "react";

import * as rules from "./rules";
import { default as withSecureHeaders, createHeadersObject } from "./index";
import { createHeadersObject, default as withSecureHeaders } from "./index";

describe("createHeadersObject", () => {
let contentSecurityPolicyHeaderCreatorSpy: jest.SpyInstance<
Expand Down Expand Up @@ -188,5 +188,28 @@ describe("withSecureHeaders", () => {
await expect(ComponentWithSecureHeaders.getInitialProps!(dummyContext)).resolves.toEqual(dummyInitialProps);
});
});

context('when "headersSent" property of "res" is true', () => {
it('should not call "context.ctx.res.setHeader()"', async () => {
const DummyComponent = () => React.createElement("div");
const ComponentWithSecureHeaders = withSecureHeaders()(DummyComponent);

const resSetHeeaderSpy = jest.fn();
const dummyContext: any = { ctx: { res: { setHeader: resSetHeeaderSpy, headersSent: true } } };
await ComponentWithSecureHeaders.getInitialProps!(dummyContext);

expect(resSetHeeaderSpy).not.toBeCalled();
});

it('should return the returned value from "getInitialProps"', async () => {
const DummyComponent = () => React.createElement("div");
const dummyInitialProps = { dummy: "dummy" };
DummyComponent.getInitialProps = async () => dummyInitialProps;
const ComponentWithSecureHeaders = withSecureHeaders()(DummyComponent);

const dummyContext: any = { ctx: { res: { setHeader: jest.fn(), headersSent: true } } };
await expect(ComponentWithSecureHeaders.getInitialProps!(dummyContext)).resolves.toEqual(dummyInitialProps);
});
});
});
});
1 change: 1 addition & 0 deletions src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -90,6 +90,7 @@ export default (options: Options = {}) => (ChildComponent: NextComponent) => {
const initialProps = (await ChildComponent.getInitialProps?.(context)) ?? {};
const res = context.res ?? context.ctx?.res;
if (res == undefined) return initialProps;
if (res.headersSent) return initialProps;

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

0 comments on commit 7120dd9

Please sign in to comment.