Skip to content

Commit d21ab4b

Browse files
committed
feat: added cache-control response header w/sensible defaults
1 parent ba90886 commit d21ab4b

File tree

3 files changed

+40
-26
lines changed

3 files changed

+40
-26
lines changed

index.js

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,15 @@
1-
const { pathToRegexp } = require('path-to-regexp');
21
const _ = require('lodash');
2+
const ms = require('ms');
3+
const { pathToRegexp } = require('path-to-regexp');
34

45
class CacheResponses {
56
constructor(config = {}) {
67
this.config = {
78
pathToRegexp: { sensitive: true, strict: true },
89
routes: [],
10+
// <https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cache-Control>
11+
// <https://web.dev/uses-long-cache-ttl/?utm_source=lighthouse&utm_medium=unknown>
12+
cacheControl: ['public', `max-age=${ms('1y') / 1000}`],
913
...config
1014
};
1115

@@ -34,6 +38,15 @@ class CacheResponses {
3438
}
3539

3640
if (!match) return next();
41+
42+
// inspired by @redpill-paris/koa-cache-control
43+
// <https://github.com/RedPillGroup/koa-cache-control>
44+
if (
45+
Array.isArray(this.config.cacheControl) &&
46+
this.config.cacheControl.length > 0
47+
)
48+
ctx.set('Cache-Control', this.config.cacheControl.join(', '));
49+
3750
const cashed = await ctx.cashed();
3851
if (cashed) return;
3952
return next();

package.json

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,12 +20,13 @@
2020
],
2121
"dependencies": {
2222
"lodash": "^4.17.15",
23+
"ms": "^2.1.2",
2324
"path-to-regexp": "^6.1.0"
2425
},
2526
"devDependencies": {
2627
"@commitlint/cli": "latest",
2728
"@commitlint/config-conventional": "latest",
28-
"@ladjs/redis": "^1.0.3",
29+
"@ladjs/redis": "^1.0.4",
2930
"ava": "latest",
3031
"codecov": "latest",
3132
"cross-env": "latest",
@@ -34,10 +35,10 @@
3435
"fast-safe-stringify": "^2.0.7",
3536
"fixpack": "latest",
3637
"husky": "latest",
37-
"koa": "^2.12.0",
38-
"koa-cash": "^3.0.3",
38+
"koa": "^2.12.1",
39+
"koa-cash": "^4.0.3",
3940
"lint-staged": "latest",
40-
"node-cache": "^5.1.0",
41+
"node-cache": "^5.1.1",
4142
"nyc": "latest",
4243
"remark-cli": "latest",
4344
"remark-preset-github": "latest",

yarn.lock

Lines changed: 21 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -329,12 +329,12 @@
329329
resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.2.tgz#26520bf09abe4a5644cd5414e37125a8954241dd"
330330
integrity sha512-tsAQNx32a8CoFhjhijUIhI4kccIAgmGhy8LZMZgGfmXcpMbPRUqn5LWmgRttILi6yeGmBJd2xsPkFMs0PzgPCw==
331331

332-
"@ladjs/redis@^1.0.3":
333-
version "1.0.3"
334-
resolved "https://registry.yarnpkg.com/@ladjs/redis/-/redis-1.0.3.tgz#4232bfea8af56c07a7b43e651c1f0762e888e917"
335-
integrity sha512-oO/vSfhkMkxwtnx4oXZtE8zIhOz2sAC+AdoAsPtRBedO5qvUqARIffUcu5TMtK4ubI2Dq3wm+TA0cDN1euzY1g==
332+
"@ladjs/redis@^1.0.4":
333+
version "1.0.4"
334+
resolved "https://registry.yarnpkg.com/@ladjs/redis/-/redis-1.0.4.tgz#b225d508943d6a5b65e757e1fe4c19adda41f6c3"
335+
integrity sha512-2PgOsLIQ9taJ3B4fhG6RXZQjKh5r7BkoQpQ7iIwreOPoLwCjCiLWuSempJbY3nwnxx1+TyOI2yRPPUcxPdssdA==
336336
dependencies:
337-
ioredis "^4.14.0"
337+
ioredis "^4.17.1"
338338

339339
"@marionebl/sander@^0.6.0":
340340
version "0.6.1"
@@ -3015,10 +3015,10 @@ inquirer@^7.0.0:
30153015
strip-ansi "^6.0.0"
30163016
through "^2.3.6"
30173017

3018-
ioredis@^4.14.0:
3019-
version "4.17.1"
3020-
resolved "https://registry.yarnpkg.com/ioredis/-/ioredis-4.17.1.tgz#06ef3d3b2cb96b7e6bc90a7b8839a33e743843ad"
3021-
integrity sha512-kfxkN/YO1dnyaoAGyNdH3my4A1eoGDy4QOfqn6o86fo4dTboxyxYVW0S0v/d3MkwCWlvSWhlwq6IJMY9BlWs6w==
3018+
ioredis@^4.17.1:
3019+
version "4.17.3"
3020+
resolved "https://registry.yarnpkg.com/ioredis/-/ioredis-4.17.3.tgz#9938c60e4ca685f75326337177bdc2e73ae9c9dc"
3021+
integrity sha512-iRvq4BOYzNFkDnSyhx7cmJNOi1x/HWYe+A4VXHBu4qpwJaGT1Mp+D2bVGJntH9K/Z/GeOM/Nprb8gB3bmitz1Q==
30223022
dependencies:
30233023
cluster-key-slot "^1.1.0"
30243024
debug "^4.1.1"
@@ -3606,10 +3606,10 @@ kind-of@^6.0.0, kind-of@^6.0.2, kind-of@^6.0.3:
36063606
resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd"
36073607
integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==
36083608

3609-
koa-cash@^3.0.3:
3610-
version "3.0.3"
3611-
resolved "https://registry.yarnpkg.com/koa-cash/-/koa-cash-3.0.3.tgz#9203e2f7d7e9fa6f7d191c47e0d4950a7814bca6"
3612-
integrity sha512-ME3/0l746F2B73bfF9E1F9WsaTbqm5rkUQTT2tzuFFZhaRzTHxvWL7kRcDDV31WMEjRJ2e6dbpEHEUynuXjRlw==
3609+
koa-cash@^4.0.3:
3610+
version "4.0.3"
3611+
resolved "https://registry.yarnpkg.com/koa-cash/-/koa-cash-4.0.3.tgz#b9e840b58e1fc21f86bcb1672bd49d52b4217c1f"
3612+
integrity sha512-w1qMKViGDV8FVrZdXaOhYlbkI2zqKbHpo0YJ0ZZQ1EK67EvBvWOfyI27tDNA4zBlFLbWh92CvsU4GtggdmjXYw==
36133613
dependencies:
36143614
bytes "^3.1.0"
36153615
compressible "^2.0.18"
@@ -3643,10 +3643,10 @@ koa-is-json@^1.0.0:
36433643
resolved "https://registry.yarnpkg.com/koa-is-json/-/koa-is-json-1.0.0.tgz#273c07edcdcb8df6a2c1ab7d59ee76491451ec14"
36443644
integrity sha1-JzwH7c3Ljfaiwat9We52SRRR7BQ=
36453645

3646-
koa@^2.12.0:
3647-
version "2.12.0"
3648-
resolved "https://registry.yarnpkg.com/koa/-/koa-2.12.0.tgz#c92bfb42defd86f365c31bf63fe918db11fc5c74"
3649-
integrity sha512-WlUBj6PXoVhjI5ljMmlyK+eqkbVFW5XQu8twz6bd4WM2E67IwKgPMu5wIFXGxAsZT7sW5xAB54KhY8WAEkLPug==
3646+
koa@^2.12.1:
3647+
version "2.12.1"
3648+
resolved "https://registry.yarnpkg.com/koa/-/koa-2.12.1.tgz#a0ab4dcfebe3cc1b6f0875cbfd686edd7e926643"
3649+
integrity sha512-NuYVKjnBxeEe19VljPO9yNcaKKVrMagcax3jjzZtOlxRY2nThWKQqgnI3Pr1OG7mFtvySoDRixoUWZIt6R9C3A==
36503650
dependencies:
36513651
accepts "^1.3.5"
36523652
cache-content-type "^1.0.0"
@@ -4402,10 +4402,10 @@ nlcst-to-string@^2.0.0:
44024402
resolved "https://registry.yarnpkg.com/nlcst-to-string/-/nlcst-to-string-2.0.4.tgz#9315dfab80882bbfd86ddf1b706f53622dc400cc"
44034403
integrity sha512-3x3jwTd6UPG7vi5k4GEzvxJ5rDA7hVUIRNHPblKuMVP9Z3xmlsd9cgLcpAMkc5uPOBna82EeshROFhsPkbnTZg==
44044404

4405-
node-cache@^5.1.0:
4406-
version "5.1.0"
4407-
resolved "https://registry.yarnpkg.com/node-cache/-/node-cache-5.1.0.tgz#266786c28dcec0fd34385ee29c383e6d6f1aa5de"
4408-
integrity sha512-gFQwYdoOztBuPlwg6DKQEf50G+gkK69aqLnw4djkmlHCzeVrLJfwvg9xl4RCAGviTIMUVoqcyoZ/V/wPEu/VVg==
4405+
node-cache@^5.1.1:
4406+
version "5.1.1"
4407+
resolved "https://registry.yarnpkg.com/node-cache/-/node-cache-5.1.1.tgz#5fcc887176b23bdcd19cd1461b9544d2d501e786"
4408+
integrity sha512-bJ9nH25Z51HG2QIu66K4dMVyMs6o8bNQpviDnXzG+O/gfNxPU9IpIig0j4pzlO707GcGZ6QA4rWhlRxjJsjnZw==
44094409
dependencies:
44104410
clone "2.x"
44114411

0 commit comments

Comments
 (0)