@netlify/plugin-nextjs 4.40.0 → 4.40.2

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.
Files changed (164) hide show
  1. package/lib/helpers/edge.js +4 -2
  2. package/lib/templates/getHandler.js +1 -2
  3. package/lib/templates/handlerUtils.js +14 -1
  4. package/lib/templates/server.js +9 -8
  5. package/lib/templates/vendor.js +20 -0
  6. package/package.json +7 -4
  7. package/src/templates/edge/next-dev.js +3 -3
  8. package/src/templates/edge/shims.js +6 -6
  9. package/src/templates/edge-shared/next-utils.ts +3 -3
  10. package/src/templates/edge-shared/utils.ts +1 -1
  11. package/src/templates/vendor/deno.land/std@0.134.0/fmt/colors.ts +536 -0
  12. package/src/templates/vendor/deno.land/std@0.134.0/testing/_diff.ts +360 -0
  13. package/src/templates/vendor/deno.land/std@0.134.0/testing/asserts.ts +866 -0
  14. package/src/templates/vendor/deno.land/std@0.175.0/_util/asserts.ts +25 -0
  15. package/src/templates/vendor/deno.land/std@0.175.0/_util/os.ts +23 -0
  16. package/src/templates/vendor/deno.land/std@0.175.0/async/abortable.ts +149 -0
  17. package/src/templates/vendor/deno.land/std@0.175.0/async/deadline.ts +30 -0
  18. package/src/templates/vendor/deno.land/std@0.175.0/async/debounce.ts +79 -0
  19. package/src/templates/vendor/deno.land/std@0.175.0/async/deferred.ts +48 -0
  20. package/src/templates/vendor/deno.land/std@0.175.0/async/delay.ts +67 -0
  21. package/src/templates/vendor/deno.land/std@0.175.0/async/mod.ts +18 -0
  22. package/src/templates/vendor/deno.land/std@0.175.0/async/mux_async_iterator.ts +97 -0
  23. package/src/templates/vendor/deno.land/std@0.175.0/async/pool.ts +95 -0
  24. package/src/templates/vendor/deno.land/std@0.175.0/async/retry.ts +81 -0
  25. package/src/templates/vendor/deno.land/std@0.175.0/async/tee.ts +100 -0
  26. package/src/templates/vendor/deno.land/std@0.175.0/bytes/index_of_needle.ts +49 -0
  27. package/src/templates/vendor/deno.land/std@0.175.0/crypto/timing_safe_equal.ts +29 -0
  28. package/src/templates/vendor/deno.land/std@0.175.0/datetime/to_imf.ts +45 -0
  29. package/src/templates/vendor/deno.land/std@0.175.0/encoding/base64.ts +144 -0
  30. package/src/templates/vendor/deno.land/std@0.175.0/encoding/base64url.ts +70 -0
  31. package/src/templates/vendor/deno.land/std@0.175.0/flags/mod.ts +785 -0
  32. package/src/templates/vendor/deno.land/std@0.175.0/fmt/colors.ts +569 -0
  33. package/src/templates/vendor/deno.land/std@0.175.0/fmt/printf.ts +939 -0
  34. package/src/templates/vendor/deno.land/std@0.175.0/http/cookie.ts +403 -0
  35. package/src/templates/vendor/deno.land/std@0.175.0/node/_core.ts +77 -0
  36. package/src/templates/vendor/deno.land/std@0.175.0/node/_events.d.ts +848 -0
  37. package/src/templates/vendor/deno.land/std@0.175.0/node/_events.mjs +1033 -0
  38. package/src/templates/vendor/deno.land/std@0.175.0/node/_global.d.ts +66 -0
  39. package/src/templates/vendor/deno.land/std@0.175.0/node/_next_tick.ts +173 -0
  40. package/src/templates/vendor/deno.land/std@0.175.0/node/_process/exiting.ts +4 -0
  41. package/src/templates/vendor/deno.land/std@0.175.0/node/_process/process.ts +131 -0
  42. package/src/templates/vendor/deno.land/std@0.175.0/node/_process/stdio.mjs +7 -0
  43. package/src/templates/vendor/deno.land/std@0.175.0/node/_process/streams.mjs +146 -0
  44. package/src/templates/vendor/deno.land/std@0.175.0/node/_stream.d.ts +1488 -0
  45. package/src/templates/vendor/deno.land/std@0.175.0/node/_stream.mjs +746 -0
  46. package/src/templates/vendor/deno.land/std@0.175.0/node/_util/_util_callbackify.ts +129 -0
  47. package/src/templates/vendor/deno.land/std@0.175.0/node/_utils.ts +206 -0
  48. package/src/templates/vendor/deno.land/std@0.175.0/node/assert.ts +940 -0
  49. package/src/templates/vendor/deno.land/std@0.175.0/node/assertion_error.ts +579 -0
  50. package/src/templates/vendor/deno.land/std@0.175.0/node/async_hooks.ts +331 -0
  51. package/src/templates/vendor/deno.land/std@0.175.0/node/buffer.ts +13 -0
  52. package/src/templates/vendor/deno.land/std@0.175.0/node/events.ts +14 -0
  53. package/src/templates/vendor/deno.land/std@0.175.0/node/internal/buffer.d.ts +2074 -0
  54. package/src/templates/vendor/deno.land/std@0.175.0/node/internal/buffer.mjs +2607 -0
  55. package/src/templates/vendor/deno.land/std@0.175.0/node/internal/crypto/_keys.ts +16 -0
  56. package/src/templates/vendor/deno.land/std@0.175.0/node/internal/crypto/constants.ts +5 -0
  57. package/src/templates/vendor/deno.land/std@0.175.0/node/internal/error_codes.ts +7 -0
  58. package/src/templates/vendor/deno.land/std@0.175.0/node/internal/errors.ts +2867 -0
  59. package/src/templates/vendor/deno.land/std@0.175.0/node/internal/fixed_queue.ts +123 -0
  60. package/src/templates/vendor/deno.land/std@0.175.0/node/internal/hide_stack_frames.ts +16 -0
  61. package/src/templates/vendor/deno.land/std@0.175.0/node/internal/net.ts +95 -0
  62. package/src/templates/vendor/deno.land/std@0.175.0/node/internal/normalize_encoding.mjs +72 -0
  63. package/src/templates/vendor/deno.land/std@0.175.0/node/internal/options.ts +45 -0
  64. package/src/templates/vendor/deno.land/std@0.175.0/node/internal/primordials.mjs +30 -0
  65. package/src/templates/vendor/deno.land/std@0.175.0/node/internal/process/per_thread.mjs +272 -0
  66. package/src/templates/vendor/deno.land/std@0.175.0/node/internal/readline/callbacks.mjs +137 -0
  67. package/src/templates/vendor/deno.land/std@0.175.0/node/internal/readline/utils.mjs +580 -0
  68. package/src/templates/vendor/deno.land/std@0.175.0/node/internal/streams/destroy.mjs +320 -0
  69. package/src/templates/vendor/deno.land/std@0.175.0/node/internal/streams/end-of-stream.mjs +229 -0
  70. package/src/templates/vendor/deno.land/std@0.175.0/node/internal/streams/utils.mjs +242 -0
  71. package/src/templates/vendor/deno.land/std@0.175.0/node/internal/util/comparisons.ts +669 -0
  72. package/src/templates/vendor/deno.land/std@0.175.0/node/internal/util/debuglog.ts +118 -0
  73. package/src/templates/vendor/deno.land/std@0.175.0/node/internal/util/inspect.mjs +2237 -0
  74. package/src/templates/vendor/deno.land/std@0.175.0/node/internal/util/types.ts +113 -0
  75. package/src/templates/vendor/deno.land/std@0.175.0/node/internal/util.mjs +143 -0
  76. package/src/templates/vendor/deno.land/std@0.175.0/node/internal/validators.mjs +317 -0
  77. package/src/templates/vendor/deno.land/std@0.175.0/node/internal_binding/_libuv_winerror.ts +229 -0
  78. package/src/templates/vendor/deno.land/std@0.175.0/node/internal_binding/_listen.ts +16 -0
  79. package/src/templates/vendor/deno.land/std@0.175.0/node/internal_binding/_node.ts +18 -0
  80. package/src/templates/vendor/deno.land/std@0.175.0/node/internal_binding/_timingSafeEqual.ts +12 -0
  81. package/src/templates/vendor/deno.land/std@0.175.0/node/internal_binding/_utils.ts +86 -0
  82. package/src/templates/vendor/deno.land/std@0.175.0/node/internal_binding/_winerror.ts +16873 -0
  83. package/src/templates/vendor/deno.land/std@0.175.0/node/internal_binding/ares.ts +66 -0
  84. package/src/templates/vendor/deno.land/std@0.175.0/node/internal_binding/async_wrap.ts +152 -0
  85. package/src/templates/vendor/deno.land/std@0.175.0/node/internal_binding/buffer.ts +130 -0
  86. package/src/templates/vendor/deno.land/std@0.175.0/node/internal_binding/cares_wrap.ts +541 -0
  87. package/src/templates/vendor/deno.land/std@0.175.0/node/internal_binding/config.ts +3 -0
  88. package/src/templates/vendor/deno.land/std@0.175.0/node/internal_binding/connection_wrap.ts +80 -0
  89. package/src/templates/vendor/deno.land/std@0.175.0/node/internal_binding/constants.ts +900 -0
  90. package/src/templates/vendor/deno.land/std@0.175.0/node/internal_binding/contextify.ts +3 -0
  91. package/src/templates/vendor/deno.land/std@0.175.0/node/internal_binding/credentials.ts +3 -0
  92. package/src/templates/vendor/deno.land/std@0.175.0/node/internal_binding/crypto.ts +14 -0
  93. package/src/templates/vendor/deno.land/std@0.175.0/node/internal_binding/errors.ts +3 -0
  94. package/src/templates/vendor/deno.land/std@0.175.0/node/internal_binding/fs.ts +3 -0
  95. package/src/templates/vendor/deno.land/std@0.175.0/node/internal_binding/fs_dir.ts +3 -0
  96. package/src/templates/vendor/deno.land/std@0.175.0/node/internal_binding/fs_event_wrap.ts +3 -0
  97. package/src/templates/vendor/deno.land/std@0.175.0/node/internal_binding/handle_wrap.ts +50 -0
  98. package/src/templates/vendor/deno.land/std@0.175.0/node/internal_binding/heap_utils.ts +3 -0
  99. package/src/templates/vendor/deno.land/std@0.175.0/node/internal_binding/http_parser.ts +3 -0
  100. package/src/templates/vendor/deno.land/std@0.175.0/node/internal_binding/icu.ts +3 -0
  101. package/src/templates/vendor/deno.land/std@0.175.0/node/internal_binding/inspector.ts +3 -0
  102. package/src/templates/vendor/deno.land/std@0.175.0/node/internal_binding/js_stream.ts +3 -0
  103. package/src/templates/vendor/deno.land/std@0.175.0/node/internal_binding/messaging.ts +3 -0
  104. package/src/templates/vendor/deno.land/std@0.175.0/node/internal_binding/mod.ts +108 -0
  105. package/src/templates/vendor/deno.land/std@0.175.0/node/internal_binding/module_wrap.ts +3 -0
  106. package/src/templates/vendor/deno.land/std@0.175.0/node/internal_binding/native_module.ts +3 -0
  107. package/src/templates/vendor/deno.land/std@0.175.0/node/internal_binding/natives.ts +3 -0
  108. package/src/templates/vendor/deno.land/std@0.175.0/node/internal_binding/node_file.ts +84 -0
  109. package/src/templates/vendor/deno.land/std@0.175.0/node/internal_binding/node_options.ts +39 -0
  110. package/src/templates/vendor/deno.land/std@0.175.0/node/internal_binding/options.ts +3 -0
  111. package/src/templates/vendor/deno.land/std@0.175.0/node/internal_binding/os.ts +3 -0
  112. package/src/templates/vendor/deno.land/std@0.175.0/node/internal_binding/performance.ts +3 -0
  113. package/src/templates/vendor/deno.land/std@0.175.0/node/internal_binding/pipe_wrap.ts +392 -0
  114. package/src/templates/vendor/deno.land/std@0.175.0/node/internal_binding/process_methods.ts +3 -0
  115. package/src/templates/vendor/deno.land/std@0.175.0/node/internal_binding/report.ts +3 -0
  116. package/src/templates/vendor/deno.land/std@0.175.0/node/internal_binding/serdes.ts +3 -0
  117. package/src/templates/vendor/deno.land/std@0.175.0/node/internal_binding/signal_wrap.ts +3 -0
  118. package/src/templates/vendor/deno.land/std@0.175.0/node/internal_binding/spawn_sync.ts +3 -0
  119. package/src/templates/vendor/deno.land/std@0.175.0/node/internal_binding/stream_wrap.ts +354 -0
  120. package/src/templates/vendor/deno.land/std@0.175.0/node/internal_binding/string_decoder.ts +15 -0
  121. package/src/templates/vendor/deno.land/std@0.175.0/node/internal_binding/symbols.ts +27 -0
  122. package/src/templates/vendor/deno.land/std@0.175.0/node/internal_binding/task_queue.ts +3 -0
  123. package/src/templates/vendor/deno.land/std@0.175.0/node/internal_binding/tcp_wrap.ts +488 -0
  124. package/src/templates/vendor/deno.land/std@0.175.0/node/internal_binding/timers.ts +3 -0
  125. package/src/templates/vendor/deno.land/std@0.175.0/node/internal_binding/tls_wrap.ts +3 -0
  126. package/src/templates/vendor/deno.land/std@0.175.0/node/internal_binding/trace_events.ts +3 -0
  127. package/src/templates/vendor/deno.land/std@0.175.0/node/internal_binding/tty_wrap.ts +3 -0
  128. package/src/templates/vendor/deno.land/std@0.175.0/node/internal_binding/types.ts +186 -0
  129. package/src/templates/vendor/deno.land/std@0.175.0/node/internal_binding/udp_wrap.ts +496 -0
  130. package/src/templates/vendor/deno.land/std@0.175.0/node/internal_binding/url.ts +3 -0
  131. package/src/templates/vendor/deno.land/std@0.175.0/node/internal_binding/util.ts +126 -0
  132. package/src/templates/vendor/deno.land/std@0.175.0/node/internal_binding/uv.ts +437 -0
  133. package/src/templates/vendor/deno.land/std@0.175.0/node/internal_binding/v8.ts +3 -0
  134. package/src/templates/vendor/deno.land/std@0.175.0/node/internal_binding/worker.ts +3 -0
  135. package/src/templates/vendor/deno.land/std@0.175.0/node/internal_binding/zlib.ts +3 -0
  136. package/src/templates/vendor/deno.land/std@0.175.0/node/process.ts +705 -0
  137. package/src/templates/vendor/deno.land/std@0.175.0/node/stream.ts +37 -0
  138. package/src/templates/vendor/deno.land/std@0.175.0/node/string_decoder.ts +337 -0
  139. package/src/templates/vendor/deno.land/std@0.175.0/node/util/types.ts +4 -0
  140. package/src/templates/vendor/deno.land/std@0.175.0/node/util.ts +289 -0
  141. package/src/templates/vendor/deno.land/std@0.175.0/path/_constants.ts +49 -0
  142. package/src/templates/vendor/deno.land/std@0.175.0/path/_interface.ts +30 -0
  143. package/src/templates/vendor/deno.land/std@0.175.0/path/_util.ts +194 -0
  144. package/src/templates/vendor/deno.land/std@0.175.0/path/common.ts +40 -0
  145. package/src/templates/vendor/deno.land/std@0.175.0/path/glob.ts +418 -0
  146. package/src/templates/vendor/deno.land/std@0.175.0/path/mod.ts +53 -0
  147. package/src/templates/vendor/deno.land/std@0.175.0/path/posix.ts +487 -0
  148. package/src/templates/vendor/deno.land/std@0.175.0/path/separator.ts +7 -0
  149. package/src/templates/vendor/deno.land/std@0.175.0/path/win32.ts +962 -0
  150. package/src/templates/vendor/deno.land/std@0.175.0/streams/write_all.ts +64 -0
  151. package/src/templates/vendor/deno.land/std@0.175.0/testing/_diff.ts +440 -0
  152. package/src/templates/vendor/deno.land/std@0.175.0/testing/_format.ts +23 -0
  153. package/src/templates/vendor/deno.land/std@0.175.0/testing/asserts.ts +906 -0
  154. package/src/templates/vendor/deno.land/std@0.175.0/types.d.ts +89 -0
  155. package/src/templates/vendor/deno.land/x/html_rewriter@v0.1.0-pre.17/index.ts +133 -0
  156. package/src/templates/vendor/deno.land/x/html_rewriter@v0.1.0-pre.17/vendor/asyncify.js +112 -0
  157. package/src/templates/vendor/deno.land/x/html_rewriter@v0.1.0-pre.17/vendor/html_rewriter.d.ts +88 -0
  158. package/src/templates/vendor/deno.land/x/html_rewriter@v0.1.0-pre.17/vendor/html_rewriter.js +974 -0
  159. package/src/templates/vendor/deno.land/x/path_to_regexp@v6.2.1/index.ts +621 -0
  160. package/src/templates/vendor/esm.sh/v91/next@12.2.5/deno/dist/compiled/cookie.js +13 -0
  161. package/src/templates/vendor/esm.sh/v91/next@12.2.5/deno/dist/server/web/spec-extension/request.js +12 -0
  162. package/src/templates/vendor/esm.sh/v91/next@12.2.5/deno/dist/server/web/spec-extension/response.js +5 -0
  163. package/src/templates/vendor/import_map.json +13 -0
  164. package/src/templates/vendor/raw.githubusercontent.com/worker-tools/resolvable-promise/master/index.ts +50 -0
@@ -0,0 +1,320 @@
1
+ // Copyright 2018-2023 the Deno authors. All rights reserved. MIT license.
2
+ // Copyright Joyent and Node contributors. All rights reserved. MIT license.
3
+ // deno-lint-ignore-file
4
+
5
+ import { aggregateTwoErrors, ERR_MULTIPLE_CALLBACK } from "../errors.ts";
6
+ import * as process from "../../_process/process.ts";
7
+
8
+ const kDestroy = Symbol("kDestroy");
9
+ const kConstruct = Symbol("kConstruct");
10
+
11
+ function checkError(err, w, r) {
12
+ if (err) {
13
+ // Avoid V8 leak, https://github.com/nodejs/node/pull/34103#issuecomment-652002364
14
+ err.stack; // eslint-disable-line no-unused-expressions
15
+
16
+ if (w && !w.errored) {
17
+ w.errored = err;
18
+ }
19
+ if (r && !r.errored) {
20
+ r.errored = err;
21
+ }
22
+ }
23
+ }
24
+
25
+ // Backwards compat. cb() is undocumented and unused in core but
26
+ // unfortunately might be used by modules.
27
+ function destroy(err, cb) {
28
+ const r = this._readableState;
29
+ const w = this._writableState;
30
+ // With duplex streams we use the writable side for state.
31
+ const s = w || r;
32
+
33
+ if ((w && w.destroyed) || (r && r.destroyed)) {
34
+ if (typeof cb === "function") {
35
+ cb();
36
+ }
37
+
38
+ return this;
39
+ }
40
+
41
+ // We set destroyed to true before firing error callbacks in order
42
+ // to make it re-entrance safe in case destroy() is called within callbacks
43
+ checkError(err, w, r);
44
+
45
+ if (w) {
46
+ w.destroyed = true;
47
+ }
48
+ if (r) {
49
+ r.destroyed = true;
50
+ }
51
+
52
+ // If still constructing then defer calling _destroy.
53
+ if (!s.constructed) {
54
+ this.once(kDestroy, function (er) {
55
+ _destroy(this, aggregateTwoErrors(er, err), cb);
56
+ });
57
+ } else {
58
+ _destroy(this, err, cb);
59
+ }
60
+
61
+ return this;
62
+ }
63
+
64
+ function _destroy(self, err, cb) {
65
+ let called = false;
66
+
67
+ function onDestroy(err) {
68
+ if (called) {
69
+ return;
70
+ }
71
+ called = true;
72
+
73
+ const r = self._readableState;
74
+ const w = self._writableState;
75
+
76
+ checkError(err, w, r);
77
+
78
+ if (w) {
79
+ w.closed = true;
80
+ }
81
+ if (r) {
82
+ r.closed = true;
83
+ }
84
+
85
+ if (typeof cb === "function") {
86
+ cb(err);
87
+ }
88
+
89
+ if (err) {
90
+ process.nextTick(emitErrorCloseNT, self, err);
91
+ } else {
92
+ process.nextTick(emitCloseNT, self);
93
+ }
94
+ }
95
+ try {
96
+ const result = self._destroy(err || null, onDestroy);
97
+ if (result != null) {
98
+ const then = result.then;
99
+ if (typeof then === "function") {
100
+ then.call(
101
+ result,
102
+ function () {
103
+ process.nextTick(onDestroy, null);
104
+ },
105
+ function (err) {
106
+ process.nextTick(onDestroy, err);
107
+ },
108
+ );
109
+ }
110
+ }
111
+ } catch (err) {
112
+ onDestroy(err);
113
+ }
114
+ }
115
+
116
+ function emitErrorCloseNT(self, err) {
117
+ emitErrorNT(self, err);
118
+ emitCloseNT(self);
119
+ }
120
+
121
+ function emitCloseNT(self) {
122
+ const r = self._readableState;
123
+ const w = self._writableState;
124
+
125
+ if (w) {
126
+ w.closeEmitted = true;
127
+ }
128
+ if (r) {
129
+ r.closeEmitted = true;
130
+ }
131
+
132
+ if ((w && w.emitClose) || (r && r.emitClose)) {
133
+ self.emit("close");
134
+ }
135
+ }
136
+
137
+ function emitErrorNT(self, err) {
138
+ const r = self._readableState;
139
+ const w = self._writableState;
140
+
141
+ if ((w && w.errorEmitted) || (r && r.errorEmitted)) {
142
+ return;
143
+ }
144
+
145
+ if (w) {
146
+ w.errorEmitted = true;
147
+ }
148
+ if (r) {
149
+ r.errorEmitted = true;
150
+ }
151
+
152
+ self.emit("error", err);
153
+ }
154
+
155
+ function undestroy() {
156
+ const r = this._readableState;
157
+ const w = this._writableState;
158
+
159
+ if (r) {
160
+ r.constructed = true;
161
+ r.closed = false;
162
+ r.closeEmitted = false;
163
+ r.destroyed = false;
164
+ r.errored = null;
165
+ r.errorEmitted = false;
166
+ r.reading = false;
167
+ r.ended = false;
168
+ r.endEmitted = false;
169
+ }
170
+
171
+ if (w) {
172
+ w.constructed = true;
173
+ w.destroyed = false;
174
+ w.closed = false;
175
+ w.closeEmitted = false;
176
+ w.errored = null;
177
+ w.errorEmitted = false;
178
+ w.ended = false;
179
+ w.ending = false;
180
+ w.finalCalled = false;
181
+ w.prefinished = false;
182
+ w.finished = false;
183
+ }
184
+ }
185
+
186
+ function errorOrDestroy(stream, err, sync) {
187
+ // We have tests that rely on errors being emitted
188
+ // in the same tick, so changing this is semver major.
189
+ // For now when you opt-in to autoDestroy we allow
190
+ // the error to be emitted nextTick. In a future
191
+ // semver major update we should change the default to this.
192
+
193
+ const r = stream._readableState;
194
+ const w = stream._writableState;
195
+
196
+ if ((w && w.destroyed) || (r && r.destroyed)) {
197
+ return this;
198
+ }
199
+
200
+ if ((r && r.autoDestroy) || (w && w.autoDestroy)) {
201
+ stream.destroy(err);
202
+ } else if (err) {
203
+ // Avoid V8 leak, https://github.com/nodejs/node/pull/34103#issuecomment-652002364
204
+ err.stack; // eslint-disable-line no-unused-expressions
205
+
206
+ if (w && !w.errored) {
207
+ w.errored = err;
208
+ }
209
+ if (r && !r.errored) {
210
+ r.errored = err;
211
+ }
212
+ if (sync) {
213
+ process.nextTick(emitErrorNT, stream, err);
214
+ } else {
215
+ emitErrorNT(stream, err);
216
+ }
217
+ }
218
+ }
219
+
220
+ function construct(stream, cb) {
221
+ if (typeof stream._construct !== "function") {
222
+ return;
223
+ }
224
+
225
+ const r = stream._readableState;
226
+ const w = stream._writableState;
227
+
228
+ if (r) {
229
+ r.constructed = false;
230
+ }
231
+ if (w) {
232
+ w.constructed = false;
233
+ }
234
+
235
+ stream.once(kConstruct, cb);
236
+
237
+ if (stream.listenerCount(kConstruct) > 1) {
238
+ // Duplex
239
+ return;
240
+ }
241
+
242
+ process.nextTick(constructNT, stream);
243
+ }
244
+
245
+ function constructNT(stream) {
246
+ let called = false;
247
+
248
+ function onConstruct(err) {
249
+ if (called) {
250
+ errorOrDestroy(stream, err ?? new ERR_MULTIPLE_CALLBACK());
251
+ return;
252
+ }
253
+ called = true;
254
+
255
+ const r = stream._readableState;
256
+ const w = stream._writableState;
257
+ const s = w || r;
258
+
259
+ if (r) {
260
+ r.constructed = true;
261
+ }
262
+ if (w) {
263
+ w.constructed = true;
264
+ }
265
+
266
+ if (s.destroyed) {
267
+ stream.emit(kDestroy, err);
268
+ } else if (err) {
269
+ errorOrDestroy(stream, err, true);
270
+ } else {
271
+ process.nextTick(emitConstructNT, stream);
272
+ }
273
+ }
274
+
275
+ try {
276
+ const result = stream._construct(onConstruct);
277
+ if (result != null) {
278
+ const then = result.then;
279
+ if (typeof then === "function") {
280
+ then.call(
281
+ result,
282
+ function () {
283
+ process.nextTick(onConstruct, null);
284
+ },
285
+ function (err) {
286
+ process.nextTick(onConstruct, err);
287
+ },
288
+ );
289
+ }
290
+ }
291
+ } catch (err) {
292
+ onConstruct(err);
293
+ }
294
+ }
295
+
296
+ function emitConstructNT(stream) {
297
+ stream.emit(kConstruct);
298
+ }
299
+
300
+ function isRequest(stream) {
301
+ return stream && stream.setHeader && typeof stream.abort === "function";
302
+ }
303
+
304
+ // Normalize destroy for legacy.
305
+ function destroyer(stream, err) {
306
+ if (!stream) return;
307
+ if (isRequest(stream)) return stream.abort();
308
+ if (isRequest(stream.req)) return stream.req.abort();
309
+ if (typeof stream.destroy === "function") return stream.destroy(err);
310
+ if (typeof stream.close === "function") return stream.close();
311
+ }
312
+
313
+ export default {
314
+ construct,
315
+ destroyer,
316
+ destroy,
317
+ undestroy,
318
+ errorOrDestroy,
319
+ };
320
+ export { construct, destroy, destroyer, errorOrDestroy, undestroy };
@@ -0,0 +1,229 @@
1
+ // Copyright 2018-2023 the Deno authors. All rights reserved. MIT license.
2
+ // Copyright Joyent and Node contributors. All rights reserved. MIT license.
3
+ // deno-lint-ignore-file
4
+
5
+ import { AbortError, ERR_STREAM_PREMATURE_CLOSE } from "../errors.ts";
6
+ import { once } from "../util.mjs";
7
+ import {
8
+ validateAbortSignal,
9
+ validateFunction,
10
+ validateObject,
11
+ } from "../validators.mjs";
12
+ import * as process from "../../_process/process.ts";
13
+
14
+ function isRequest(stream) {
15
+ return stream.setHeader && typeof stream.abort === "function";
16
+ }
17
+
18
+ function isServerResponse(stream) {
19
+ return (
20
+ typeof stream._sent100 === "boolean" &&
21
+ typeof stream._removedConnection === "boolean" &&
22
+ typeof stream._removedContLen === "boolean" &&
23
+ typeof stream._removedTE === "boolean" &&
24
+ typeof stream._closed === "boolean"
25
+ );
26
+ }
27
+
28
+ function isReadable(stream) {
29
+ return typeof stream.readable === "boolean" ||
30
+ typeof stream.readableEnded === "boolean" ||
31
+ !!stream._readableState;
32
+ }
33
+
34
+ function isWritable(stream) {
35
+ return typeof stream.writable === "boolean" ||
36
+ typeof stream.writableEnded === "boolean" ||
37
+ !!stream._writableState;
38
+ }
39
+
40
+ function isWritableFinished(stream) {
41
+ if (stream.writableFinished) return true;
42
+ const wState = stream._writableState;
43
+ if (!wState || wState.errored) return false;
44
+ return wState.finished || (wState.ended && wState.length === 0);
45
+ }
46
+
47
+ const nop = () => {};
48
+
49
+ function isReadableEnded(stream) {
50
+ if (stream.readableEnded) return true;
51
+ const rState = stream._readableState;
52
+ if (!rState || rState.errored) return false;
53
+ return rState.endEmitted || (rState.ended && rState.length === 0);
54
+ }
55
+
56
+ function eos(stream, options, callback) {
57
+ if (arguments.length === 2) {
58
+ callback = options;
59
+ options = {};
60
+ } else if (options == null) {
61
+ options = {};
62
+ } else {
63
+ validateObject(options, "options");
64
+ }
65
+ validateFunction(callback, "callback");
66
+ validateAbortSignal(options.signal, "options.signal");
67
+
68
+ callback = once(callback);
69
+
70
+ const readable = options.readable ||
71
+ (options.readable !== false && isReadable(stream));
72
+ const writable = options.writable ||
73
+ (options.writable !== false && isWritable(stream));
74
+
75
+ const wState = stream._writableState;
76
+ const rState = stream._readableState;
77
+ const state = wState || rState;
78
+
79
+ const onlegacyfinish = () => {
80
+ if (!stream.writable) onfinish();
81
+ };
82
+
83
+ // TODO (ronag): Improve soft detection to include core modules and
84
+ // common ecosystem modules that do properly emit 'close' but fail
85
+ // this generic check.
86
+ let willEmitClose = isServerResponse(stream) || (
87
+ state &&
88
+ state.autoDestroy &&
89
+ state.emitClose &&
90
+ state.closed === false &&
91
+ isReadable(stream) === readable &&
92
+ isWritable(stream) === writable
93
+ );
94
+
95
+ let writableFinished = stream.writableFinished ||
96
+ (wState && wState.finished);
97
+ const onfinish = () => {
98
+ writableFinished = true;
99
+ // Stream should not be destroyed here. If it is that
100
+ // means that user space is doing something differently and
101
+ // we cannot trust willEmitClose.
102
+ if (stream.destroyed) willEmitClose = false;
103
+
104
+ if (willEmitClose && (!stream.readable || readable)) return;
105
+ if (!readable || readableEnded) callback.call(stream);
106
+ };
107
+
108
+ let readableEnded = stream.readableEnded ||
109
+ (rState && rState.endEmitted);
110
+ const onend = () => {
111
+ readableEnded = true;
112
+ // Stream should not be destroyed here. If it is that
113
+ // means that user space is doing something differently and
114
+ // we cannot trust willEmitClose.
115
+ if (stream.destroyed) willEmitClose = false;
116
+
117
+ if (willEmitClose && (!stream.writable || writable)) return;
118
+ if (!writable || writableFinished) callback.call(stream);
119
+ };
120
+
121
+ const onerror = (err) => {
122
+ callback.call(stream, err);
123
+ };
124
+
125
+ const onclose = () => {
126
+ if (readable && !readableEnded) {
127
+ if (!isReadableEnded(stream)) {
128
+ return callback.call(stream, new ERR_STREAM_PREMATURE_CLOSE());
129
+ }
130
+ }
131
+ if (writable && !writableFinished) {
132
+ if (!isWritableFinished(stream)) {
133
+ return callback.call(stream, new ERR_STREAM_PREMATURE_CLOSE());
134
+ }
135
+ }
136
+ callback.call(stream);
137
+ };
138
+
139
+ const onrequest = () => {
140
+ stream.req.on("finish", onfinish);
141
+ };
142
+
143
+ if (isRequest(stream)) {
144
+ stream.on("complete", onfinish);
145
+ if (!willEmitClose) {
146
+ stream.on("abort", onclose);
147
+ }
148
+ if (stream.req) onrequest();
149
+ else stream.on("request", onrequest);
150
+ } else if (writable && !wState) { // legacy streams
151
+ stream.on("end", onlegacyfinish);
152
+ stream.on("close", onlegacyfinish);
153
+ }
154
+
155
+ // Not all streams will emit 'close' after 'aborted'.
156
+ if (!willEmitClose && typeof stream.aborted === "boolean") {
157
+ stream.on("aborted", onclose);
158
+ }
159
+
160
+ stream.on("end", onend);
161
+ stream.on("finish", onfinish);
162
+ if (options.error !== false) stream.on("error", onerror);
163
+ stream.on("close", onclose);
164
+
165
+ // _closed is for OutgoingMessage which is not a proper Writable.
166
+ const closed = (!wState && !rState && stream._closed === true) || (
167
+ (wState && wState.closed) ||
168
+ (rState && rState.closed) ||
169
+ (wState && wState.errorEmitted) ||
170
+ (rState && rState.errorEmitted) ||
171
+ (rState && stream.req && stream.aborted) ||
172
+ (
173
+ (!wState || !willEmitClose || typeof wState.closed !== "boolean") &&
174
+ (!rState || !willEmitClose || typeof rState.closed !== "boolean") &&
175
+ (!writable || (wState && wState.finished)) &&
176
+ (!readable || (rState && rState.endEmitted))
177
+ )
178
+ );
179
+
180
+ if (closed) {
181
+ // TODO(ronag): Re-throw error if errorEmitted?
182
+ // TODO(ronag): Throw premature close as if finished was called?
183
+ // before being closed? i.e. if closed but not errored, ended or finished.
184
+ // TODO(ronag): Throw some kind of error? Does it make sense
185
+ // to call finished() on a "finished" stream?
186
+ // TODO(ronag): willEmitClose?
187
+ process.nextTick(() => {
188
+ callback();
189
+ });
190
+ }
191
+
192
+ const cleanup = () => {
193
+ callback = nop;
194
+ stream.removeListener("aborted", onclose);
195
+ stream.removeListener("complete", onfinish);
196
+ stream.removeListener("abort", onclose);
197
+ stream.removeListener("request", onrequest);
198
+ if (stream.req) stream.req.removeListener("finish", onfinish);
199
+ stream.removeListener("end", onlegacyfinish);
200
+ stream.removeListener("close", onlegacyfinish);
201
+ stream.removeListener("finish", onfinish);
202
+ stream.removeListener("end", onend);
203
+ stream.removeListener("error", onerror);
204
+ stream.removeListener("close", onclose);
205
+ };
206
+
207
+ if (options.signal && !closed) {
208
+ const abort = () => {
209
+ // Keep it because cleanup removes it.
210
+ const endCallback = callback;
211
+ cleanup();
212
+ endCallback.call(stream, new AbortError());
213
+ };
214
+ if (options.signal.aborted) {
215
+ process.nextTick(abort);
216
+ } else {
217
+ const originalCallback = callback;
218
+ callback = once((...args) => {
219
+ options.signal.removeEventListener("abort", abort);
220
+ originalCallback.apply(stream, args);
221
+ });
222
+ options.signal.addEventListener("abort", abort);
223
+ }
224
+ }
225
+
226
+ return cleanup;
227
+ }
228
+
229
+ export default eos;