@nifrajs/aws-lambda 5.4.0 → 5.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +6 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +29 -6
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/src/index.ts +29 -5
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
# @nifrajs/aws-lambda
|
|
2
2
|
|
|
3
|
+
## 5.5.0
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- e59084d: `streamHandle` stops streaming when the client goes away during backpressure. After a `write()` that returned `false` it waited only for `drain`, so a response stream that closed or errored instead left the invocation waiting, the app's body still producing and the stream never ended. It now also finishes on `close` or `error`, or at once when the stream is already destroyed; it then cancels the response body, ends the stream, settles background work, and removes its listeners. `ResponseStream` declares the optional `off` and `destroyed` members it reads.
|
|
8
|
+
|
|
3
9
|
## 5.4.0
|
|
4
10
|
|
|
5
11
|
No changes in this release.
|
package/dist/index.d.ts
CHANGED
|
@@ -81,6 +81,8 @@ export interface ResponseStream {
|
|
|
81
81
|
write(chunk: Uint8Array | string): unknown;
|
|
82
82
|
end(): unknown;
|
|
83
83
|
once?(event: string, listener: () => void): unknown;
|
|
84
|
+
off?(event: string, listener: () => void): unknown;
|
|
85
|
+
readonly destroyed?: boolean;
|
|
84
86
|
}
|
|
85
87
|
/**
|
|
86
88
|
* A buffered Lambda handler for API Gateway HTTP APIs (payload v2) and Function URLs.
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,4FAA4F;AAC5F,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,GAAG,EAAE,SAAS,CAAA;IACvB,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IACtC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,KAAK,IAAI,CAAA;CACzD;AAED,wFAAwF;AACxF,MAAM,WAAW,YAAY;IAC3B,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,cAAc,GAAG,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAA;CACjF;AAED;;;GAGG;AACH,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAA;IAChC,QAAQ,CAAC,OAAO,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC,CAAA;IAC/D,+FAA+F;IAC/F,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;IACpC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC7B,QAAQ,CAAC,eAAe,CAAC,EAAE,OAAO,CAAA;IAClC,QAAQ,CAAC,cAAc,CAAC,EAAE;QACxB,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAA;QAC5B,QAAQ,CAAC,IAAI,CAAC,EAAE;YACd,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;YACxB,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;SAC3B,CAAA;KACF,CAAA;CACF;AAED,gGAAgG;AAChG,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAA;IAC9B,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAA;IAC9B,QAAQ,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CAChC;AAED,iGAAiG;AACjG,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAA;IAC3B,QAAQ,CAAC,OAAO,EAAE,aAAa,GAAG,SAAS,CAAA;CAC5C;AAED,+EAA+E;AAC/E,MAAM,WAAW,YAAY;IAC3B,UAAU,EAAE,MAAM,CAAA;IAClB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC/B,+FAA+F;IAC/F,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;IAClB,IAAI,EAAE,MAAM,CAAA;IACZ,eAAe,EAAE,OAAO,CAAA;CACzB;AAED,MAAM,WAAW,aAAa;IAC5B;;;;OAIG;IACH,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAA;CAC/B;AAED,iGAAiG;AACjG,MAAM,WAAW,cAAc;IAC7B,KAAK,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM,GAAG,OAAO,CAAA;IAC1C,GAAG,IAAI,OAAO,CAAA;IACd,IAAI,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,IAAI,GAAG,OAAO,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -18,6 +18,32 @@
|
|
|
18
18
|
* The adapter is dependency-free: it accepts anything with a fetch-shaped `fetch` method and
|
|
19
19
|
* declares the Lambda event/`awslambda` shapes structurally.
|
|
20
20
|
*/
|
|
21
|
+
/**
|
|
22
|
+
* After a `write` that returned `false`: resolves `true` on `drain`, or `false` once the client is
|
|
23
|
+
* gone - already destroyed, or a `close`/`error` instead of the drain. Every listener is removed.
|
|
24
|
+
*/
|
|
25
|
+
function drained(out) {
|
|
26
|
+
if (out.destroyed === true)
|
|
27
|
+
return Promise.resolve(false);
|
|
28
|
+
if (typeof out.once !== "function")
|
|
29
|
+
return Promise.resolve(true);
|
|
30
|
+
let resolve;
|
|
31
|
+
const settled = new Promise((r) => {
|
|
32
|
+
resolve = r;
|
|
33
|
+
});
|
|
34
|
+
const drain = () => done(true);
|
|
35
|
+
const gone = () => done(false);
|
|
36
|
+
const done = (ok) => {
|
|
37
|
+
out.off?.("drain", drain);
|
|
38
|
+
out.off?.("close", gone);
|
|
39
|
+
out.off?.("error", gone);
|
|
40
|
+
resolve(ok);
|
|
41
|
+
};
|
|
42
|
+
out.once("drain", drain);
|
|
43
|
+
out.once("close", gone);
|
|
44
|
+
out.once("error", gone);
|
|
45
|
+
return settled;
|
|
46
|
+
}
|
|
21
47
|
const DEFAULT_MAX_BODY_BYTES = 1_000_000;
|
|
22
48
|
const assertBodyLimit = (value) => {
|
|
23
49
|
if (!Number.isSafeInteger(value) || value < 0)
|
|
@@ -222,13 +248,10 @@ export function streamHandle(app, options = {}) {
|
|
|
222
248
|
discardBody(response);
|
|
223
249
|
}
|
|
224
250
|
else if (response.body !== null) {
|
|
251
|
+
// Leaving the loop early cancels the body, so a client that is gone stops the producer too.
|
|
225
252
|
for await (const chunk of response.body) {
|
|
226
|
-
if (out.write(chunk) === false &&
|
|
227
|
-
|
|
228
|
-
;
|
|
229
|
-
out.once("drain", resolve);
|
|
230
|
-
});
|
|
231
|
-
}
|
|
253
|
+
if (out.write(chunk) === false && !(await drained(out)))
|
|
254
|
+
break;
|
|
232
255
|
}
|
|
233
256
|
}
|
|
234
257
|
}
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@nifrajs/aws-lambda",
|
|
3
|
-
"version": "5.
|
|
3
|
+
"version": "5.5.0",
|
|
4
4
|
"description": "AWS Lambda adapter for nifra - API Gateway HTTP API (payload v2) and Function URLs, buffered or streaming, with post-decode body limits and single-site header merging. Dependency-free.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"bun",
|
package/src/index.ts
CHANGED
|
@@ -89,6 +89,33 @@ export interface ResponseStream {
|
|
|
89
89
|
write(chunk: Uint8Array | string): unknown
|
|
90
90
|
end(): unknown
|
|
91
91
|
once?(event: string, listener: () => void): unknown
|
|
92
|
+
off?(event: string, listener: () => void): unknown
|
|
93
|
+
readonly destroyed?: boolean
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
/**
|
|
97
|
+
* After a `write` that returned `false`: resolves `true` on `drain`, or `false` once the client is
|
|
98
|
+
* gone - already destroyed, or a `close`/`error` instead of the drain. Every listener is removed.
|
|
99
|
+
*/
|
|
100
|
+
function drained(out: ResponseStream): Promise<boolean> {
|
|
101
|
+
if (out.destroyed === true) return Promise.resolve(false)
|
|
102
|
+
if (typeof out.once !== "function") return Promise.resolve(true)
|
|
103
|
+
let resolve!: (ok: boolean) => void
|
|
104
|
+
const settled = new Promise<boolean>((r) => {
|
|
105
|
+
resolve = r
|
|
106
|
+
})
|
|
107
|
+
const drain = (): void => done(true)
|
|
108
|
+
const gone = (): void => done(false)
|
|
109
|
+
const done = (ok: boolean): void => {
|
|
110
|
+
out.off?.("drain", drain)
|
|
111
|
+
out.off?.("close", gone)
|
|
112
|
+
out.off?.("error", gone)
|
|
113
|
+
resolve(ok)
|
|
114
|
+
}
|
|
115
|
+
out.once("drain", drain)
|
|
116
|
+
out.once("close", gone)
|
|
117
|
+
out.once("error", gone)
|
|
118
|
+
return settled
|
|
92
119
|
}
|
|
93
120
|
|
|
94
121
|
interface StreamMetadata {
|
|
@@ -348,12 +375,9 @@ export function streamHandle(
|
|
|
348
375
|
if (head) {
|
|
349
376
|
discardBody(response)
|
|
350
377
|
} else if (response.body !== null) {
|
|
378
|
+
// Leaving the loop early cancels the body, so a client that is gone stops the producer too.
|
|
351
379
|
for await (const chunk of response.body) {
|
|
352
|
-
if (out.write(chunk) === false &&
|
|
353
|
-
await new Promise<void>((resolve) => {
|
|
354
|
-
;(out.once as (event: string, listener: () => void) => unknown)("drain", resolve)
|
|
355
|
-
})
|
|
356
|
-
}
|
|
380
|
+
if (out.write(chunk) === false && !(await drained(out))) break
|
|
357
381
|
}
|
|
358
382
|
}
|
|
359
383
|
} finally {
|