Skip to content

Commit ee879ae

Browse files
feat: add getContext method (#77)
1 parent cef60c7 commit ee879ae

File tree

6 files changed

+31
-44
lines changed

6 files changed

+31
-44
lines changed

package.json

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,6 @@
99
"prepare": "husky install",
1010
"lint": "eslint --cache --report-unused-disable-directives --ignore-path .gitignore --max-warnings=0 . --fix",
1111
"lint:ci": "eslint --cache --report-unused-disable-directives --ignore-path .gitignore --max-warnings=0 .",
12-
"build": "npm run build",
13-
"test": "npm run test",
1412
"format": "prettier --write .",
1513
"format:ci": "prettier --check ."
1614
},

packages/cache/src/bootstrap/cache.test.ts

Lines changed: 4 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -37,9 +37,7 @@ describe('Cache API', () => {
3737
})
3838
const cache = new NetlifyCache({
3939
base64Encode,
40-
getHost: () => host,
41-
getToken: () => token,
42-
getURL: () => url,
40+
getContext: () => ({ host, token, url }),
4341
name: 'my-cache',
4442
userAgent,
4543
})
@@ -86,9 +84,7 @@ describe('Cache API', () => {
8684
})
8785
const cache = new NetlifyCache({
8886
base64Encode,
89-
getHost: () => host,
90-
getToken: () => token,
91-
getURL: () => url,
87+
getContext: () => ({ host, token, url }),
9288
name: 'my-cache',
9389
userAgent,
9490
})
@@ -129,9 +125,7 @@ describe('Cache API', () => {
129125
})
130126
const cache = new NetlifyCache({
131127
base64Encode,
132-
getHost: () => host,
133-
getToken: () => token,
134-
getURL: () => url,
128+
getContext: () => ({ host, token, url }),
135129
name: 'my-cache',
136130
userAgent,
137131
})
@@ -172,9 +166,7 @@ describe('Cache API', () => {
172166
})
173167
const cache = new NetlifyCache({
174168
base64Encode,
175-
getHost: () => host,
176-
getToken: () => token,
177-
getURL: () => url,
169+
getContext: () => ({ host, token, url }),
178170
name: 'my-cache',
179171
userAgent,
180172
})

packages/cache/src/bootstrap/cache.ts

Lines changed: 16 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import type { Base64Encoder, EnvironmentOptions, Factory } from './environment.js'
1+
import type { Base64Encoder, EnvironmentOptions, RequestContext, RequestContextFactory } from './environment.js'
22

33
import * as HEADERS from '../headers.js'
44

@@ -17,28 +17,24 @@ const serializeResourceHeaders = Symbol('serializeResourceHeaders')
1717

1818
export class NetlifyCache implements Cache {
1919
#base64Encode: Base64Encoder
20-
#getHost?: Factory<string>
21-
#getToken: Factory<string>
22-
#getURL: Factory<string>
20+
#getContext: RequestContextFactory
2321
#name: string
2422
#userAgent?: string
2523

26-
constructor({ base64Encode, getHost, getToken, getURL, name, userAgent }: NetlifyCacheOptions) {
24+
constructor({ base64Encode, getContext, name, userAgent }: NetlifyCacheOptions) {
2725
this.#base64Encode = base64Encode
28-
this.#getHost = getHost
29-
this.#getToken = getToken
30-
this.#getURL = getURL
26+
this.#getContext = getContext
3127
this.#name = name
3228
this.#userAgent = userAgent
3329
}
3430

35-
private [getInternalHeaders]() {
31+
private [getInternalHeaders](requestContext: RequestContext) {
32+
const { host, token } = requestContext
3633
const headers: Record<string, string> = {
37-
Authorization: `Bearer ${this.#getToken()}`,
34+
Authorization: `Bearer ${token}`,
3835
[HEADERS.ResourceStore]: this.#name,
3936
}
4037

41-
const host = this.#getHost?.()
4238
if (host) {
4339
headers[HEADERS.NetlifyForwardedHost] = host
4440
}
@@ -82,10 +78,11 @@ export class NetlifyCache implements Cache {
8278

8379
// eslint-disable-next-line class-methods-use-this, require-await, @typescript-eslint/no-unused-vars
8480
async delete(request: RequestInfo) {
81+
const context = this.#getContext()
8582
const resourceURL = extractAndValidateURL(request)
8683

87-
await fetch(`${this.#getURL()}/${toCacheKey(resourceURL)}`, {
88-
headers: this[getInternalHeaders](),
84+
await fetch(`${context.url}/${toCacheKey(resourceURL)}`, {
85+
headers: this[getInternalHeaders](context),
8986
method: 'DELETE',
9087
})
9188

@@ -100,10 +97,11 @@ export class NetlifyCache implements Cache {
10097

10198
async match(request: RequestInfo) {
10299
try {
100+
const context = this.#getContext()
103101
const resourceURL = extractAndValidateURL(request)
104-
const cacheURL = `${this.#getURL()}/${toCacheKey(resourceURL)}`
102+
const cacheURL = `${context.url}/${toCacheKey(resourceURL)}`
105103
const response = await fetch(cacheURL, {
106-
headers: this[getInternalHeaders](),
104+
headers: this[getInternalHeaders](context),
107105
method: 'GET',
108106
})
109107

@@ -145,12 +143,13 @@ export class NetlifyCache implements Cache {
145143
throw new TypeError("Cannot cache response with 'Vary: *' header.")
146144
}
147145

146+
const context = this.#getContext()
148147
const resourceURL = extractAndValidateURL(request)
149148

150-
await fetch(`${this.#getURL()}/${toCacheKey(resourceURL)}`, {
149+
await fetch(`${context.url}/${toCacheKey(resourceURL)}`, {
151150
body: response.body,
152151
headers: {
153-
...this[getInternalHeaders](),
152+
...this[getInternalHeaders](context),
154153
[HEADERS.ResourceHeaders]: this[serializeResourceHeaders](response.headers),
155154
[HEADERS.ResourceStatus]: response.status.toString(),
156155
},
Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,15 @@
11
export type Base64Encoder = (input: string) => string
2-
export type Factory<T> = () => T
32

43
export interface EnvironmentOptions {
54
base64Encode: Base64Encoder
6-
getHost: Factory<string>
7-
getToken: Factory<string>
8-
getURL: Factory<string>
5+
getContext: RequestContextFactory
96
userAgent?: string
107
}
8+
9+
export type RequestContextFactory = () => RequestContext
10+
11+
export interface RequestContext {
12+
host: string
13+
token: string
14+
url: string
15+
}
Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,3 @@
1-
import { Base64Encoder, Factory } from './environment.ts'
2-
3-
export type { Base64Encoder }
4-
export type HostFactory = Factory<string>
5-
export type TokenFactory = Factory<string>
6-
export type URLFactory = Factory<string>
1+
export type { Base64Encoder, RequestContextFactory } from './environment.ts'
72
export { NetlifyCache } from './cache.ts'
83
export { NetlifyCacheStorage } from './cachestorage.ts'

packages/cache/src/fetchwithcache.test.ts

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,7 @@ let originalCaches = globalThis.caches
2020
beforeAll(() => {
2121
globalThis.caches = new NetlifyCacheStorage({
2222
base64Encode,
23-
getHost: () => host,
24-
getToken: () => token,
25-
getURL: () => url,
23+
getContext: () => ({ host, token, url }),
2624
})
2725
})
2826

0 commit comments

Comments
 (0)