Skip to content

Commit 20650f0

Browse files
authored
Merge a488aea into 548d73f
2 parents 548d73f + a488aea commit 20650f0

File tree

3 files changed

+11
-44
lines changed

3 files changed

+11
-44
lines changed

src/middleware/etag/digest.ts

Lines changed: 10 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -9,25 +9,23 @@ const mergeBuffers = (buffer1: ArrayBuffer | undefined, buffer2: Uint8Array): Ui
99
}
1010

1111
export const generateDigest = async (
12-
input: ReadableStream<Uint8Array> | ArrayBuffer | null,
12+
stream: ReadableStream<Uint8Array> | null,
1313
generator: (body: Uint8Array) => ArrayBuffer | Promise<ArrayBuffer>
1414
): Promise<string | null> => {
15-
if (!input) {
15+
if (!stream) {
1616
return null
1717
}
1818

1919
let result: ArrayBuffer | undefined = undefined
20-
if (input instanceof ArrayBuffer) {
21-
result = await generator(new Uint8Array(input))
22-
} else {
23-
const reader = input.getReader()
24-
for (;;) {
25-
const { value, done } = await reader.read()
26-
if (done) {
27-
break
28-
}
29-
result = await generator(mergeBuffers(result, value))
20+
21+
const reader = stream.getReader()
22+
for (;;) {
23+
const { value, done } = await reader.read()
24+
if (done) {
25+
break
3026
}
27+
28+
result = await generator(mergeBuffers(result, value))
3129
}
3230

3331
if (!result) {

src/middleware/etag/index.test.ts

Lines changed: 0 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -155,29 +155,6 @@ describe('Etag Middleware', () => {
155155
expect(res.headers.get('ETag')).toBeNull()
156156
})
157157

158-
it('Should handle clone() not supported (Lambda-like environment)', async () => {
159-
const app = new Hono()
160-
app.use('/etag/*', etag())
161-
app.get('/etag/no-clone', (c) => {
162-
const originalResponse = c.text('Lambda test content')
163-
// Mock AWS Lambda environment where clone() doesn't work properly
164-
const mockResponse = new Response(originalResponse.body, {
165-
status: originalResponse.status,
166-
statusText: originalResponse.statusText,
167-
headers: originalResponse.headers,
168-
})
169-
// Override clone to throw error (AWS Lambda-like behavior)
170-
mockResponse.clone = () => {
171-
throw new Error('clone() not supported in AWS Lambda')
172-
}
173-
return mockResponse
174-
})
175-
const res = await app.request('/etag/no-clone')
176-
expect(res.status).toBe(200)
177-
expect(res.headers.get('ETag')).not.toBeNull()
178-
expect(await res.text()).toBe('Lambda test content')
179-
})
180-
181158
it('Should return etag header - weak', async () => {
182159
const app = new Hono()
183160
app.use('/etag/*', etag({ weak: true }))

src/middleware/etag/index.ts

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -93,15 +93,7 @@ export const etag = (options?: ETagOptions): MiddlewareHandler => {
9393
if (!generator) {
9494
return
9595
}
96-
let hash: string | null = null
97-
try {
98-
hash = await generateDigest(res.clone().body, generator)
99-
} catch {
100-
// Fallback for environments where res.clone() is not supported (e.g., AWS Lambda)
101-
const buffer = await res.arrayBuffer()
102-
hash = await generateDigest(buffer, generator)
103-
c.res = new Response(buffer, res)
104-
}
96+
const hash = await generateDigest(res.clone().body, generator)
10597
if (hash === null) {
10698
return
10799
}

0 commit comments

Comments
 (0)